File: OTMStringCST.m

package info (click to toggle)
tom 1.1.1-2
  • links: PTS
  • area: main
  • in suites: potato
  • size: 6,340 kB
  • ctags: 2,244
  • sloc: objc: 27,863; ansic: 9,804; sh: 7,411; yacc: 3,377; lex: 966; asm: 208; makefile: 62; cpp: 10
file content (81 lines) | stat: -rw-r--r-- 1,399 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
   Written by Pieter J. Schoenmakers <tiggr@ics.ele.tue.nl>

   Copyright (C) 1996 Pieter J. Schoenmakers.

   This file is part of TOM.  TOM is distributed under the terms of the
   TOM License, a copy of which can be found in the TOM distribution; see
   the file LICENSE.

   $Id: OTMStringCST.m,v 1.9 1998/01/05 01:13:50 tiggr Exp $  */

#define OTMSTRINGCST_DECLARE_PRIVATE_METHODS
#import "OTMStringCST.h"
#import "OTMType.h"

@implementation LTTStringCST (Semantics)

+(id) semanticsForString: (LTTStringCST *) s
{
  return [[CO_OTMStringCST gcAlloc] initWithStructure: s];
}

@end

@implementation OTMStringCST

-(BOOL) constantp
{
  return YES;
}

-(void) gcReference
{
  MARK (structure);

  [super gcReference];
}

-initWithStructure: (LTTStringCST *) str
{
  if (![super initWithType: (OTMType *) tom_string_instance])
    return nil;

  structure = str;

  return self;
}

-outputReference
{
  return [structure outputReferenceName];
}

-(id) precompile
{
  if (![self declarationOutputp])
    {
      [self setDeclarationOutputP: YES];

      [used_strings setObject: structure forKey: [structure string]];

      [super precompile];

      formac (of, @"extern %@ %@;\n", [type outputTypeName],
	      [structure outputReferenceName]);
    }

  return self;
}

-(id <TLString>) result
{
  return [self outputReference];
}

-(LTTStringCST *) structure
{
  return structure;
}

@end