annotate trunk/src/dil/Symbols.d @ 573:87c4474a1295

Added semantic() to ClassDeclaration.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 29 Dec 2007 23:37:18 +0100
parents 751d84733e07
children fa6d3c52757d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.Symbols;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
6
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
7 import dil.Symbol;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
8 import dil.SymbolTable;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
9 import dil.SyntaxTree;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
10 import dil.Enums;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
11 import dil.TypeSystem;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
12 import dil.Identifier;
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13 import common;
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
14
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
15 /// A symbol that has its own scope with a symbol table.
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
16 class ScopeSymbol : Symbol
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
17 {
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
18 protected SymbolTable symbolTable; /// The symbol table.
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
19
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
20 this()
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
21 {
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
22 }
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
23
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
24 /// Look up ident in the table.
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
25 Symbol lookup(Identifier* ident)
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
26 {
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
27 return symbolTable.lookup(ident);
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
28 }
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
29
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
30 /// Insert a symbol into the table.
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
31 void insert(Symbol s, Identifier* ident)
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
32 {
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
33 symbolTable.insert(s, ident);
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
34 }
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
35 }
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
36
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
37 /// Aggregates have function and field members.
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
38 class Aggregate : ScopeSymbol
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
39 {
570
3ebdc510a7fc Added semantic() to InterfaceDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
40 Identifier* ident; /// The name of this aggregate.
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
41 Function[] funcs;
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
42 Variable[] fields;
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
43
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
44 override void insert(Symbol s, Identifier* ident)
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
45 {
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 565
diff changeset
46 if (s.isVariable)
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
47 // Append variable to fields.
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
48 fields ~= cast(Variable)cast(void*)s;
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 565
diff changeset
49 else if (s.isFunction)
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
50 // Append function to funcs.
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
51 funcs ~= cast(Function)cast(void*)s;
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
52 super.insert(s, ident);
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
53 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
54 }
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
55
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
56 class Class : Aggregate
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
57 {
573
87c4474a1295 Added semantic() to ClassDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 572
diff changeset
58 this(Identifier* ident, Node classNode)
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
59 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
60 this.sid = SYM.Class;
573
87c4474a1295 Added semantic() to ClassDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 572
diff changeset
61 this.ident = ident;
87c4474a1295 Added semantic() to ClassDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 572
diff changeset
62 this.node = classNode;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
63 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
64 }
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
65
561
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
66 class Interface : Aggregate
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
67 {
572
751d84733e07 Added semantic() to UnionDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
68 this(Identifier* ident, Node interfaceNode)
561
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
69 {
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
70 this.sid = SYM.Interface;
570
3ebdc510a7fc Added semantic() to InterfaceDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
71 this.ident = ident;
572
751d84733e07 Added semantic() to UnionDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
72 this.node = interfaceNode;
561
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
73 }
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
74 }
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
75
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
76 class Union : Aggregate
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
77 {
572
751d84733e07 Added semantic() to UnionDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
78 this(Identifier* ident, Node unionNode)
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
79 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
80 this.sid = SYM.Union;
572
751d84733e07 Added semantic() to UnionDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
81 this.ident = ident;
751d84733e07 Added semantic() to UnionDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 570
diff changeset
82 this.node = unionNode;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
83 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
84 }
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
85
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
86 class Struct : Aggregate
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
87 {
570
3ebdc510a7fc Added semantic() to InterfaceDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
88 this(Identifier* ident, Node structNode)
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
89 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
90 this.sid = SYM.Struct;
570
3ebdc510a7fc Added semantic() to InterfaceDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
91 this.ident = ident;
3ebdc510a7fc Added semantic() to InterfaceDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
92 this.node = structNode;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
93 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
94 }
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
95
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
96 class Function : ScopeSymbol
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
97 {
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
98 StorageClass stc;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
99 LinkageType linkType;
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
100
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
101 Type returnType;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
102 Identifier* ident;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
103 Variable[] params;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
104
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
105 this()
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
106 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
107 this.sid = SYM.Function;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
108 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
109 }
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
110
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
111 class Variable : Symbol
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
112 {
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
113 StorageClass stc;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
114 LinkageType linkType;
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
115
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
116 Type type;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
117 Identifier* ident;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
118
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
119 this(StorageClass stc, LinkageType linkType,
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
120 Type type, Identifier* ident, Node varDecl)
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
121 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
122 this.sid = SYM.Variable;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
123
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
124 this.stc = stc;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
125 this.linkType = linkType;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
126 this.type = type;
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
127 this.ident = ident;
568
c8861b452eb3 Added members 'node' and 'parent' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 567
diff changeset
128 this.node = varDecl;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 517
diff changeset
129 }
517
b465c669d70c Added module dil.Symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
130 }