annotate trunk/src/dil/semantic/Symbol.d @ 798:c24be8d4f6ab

Added documentation comments.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 01 Mar 2008 02:53:06 +0100
parents f4b9680c0e16
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
589
de365ddcfbd4 Moved dil.Symbol to dil.semantic.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 580
diff changeset
5 module dil.semantic.Symbol;
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
6
580
fa6d3c52757d Moved SyntaxTree.d to new package 'ast'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 568
diff changeset
7 import dil.ast.Node;
615
a05457530ac2 Added member ident to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 614
diff changeset
8 import dil.lexer.Identifier;
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 import common;
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
11 /// Enumeration of Symbol IDs.
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
12 enum SYM
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
13 {
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
14 Module,
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
15 Class,
561
302e50e71ec2 Added Interface symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 560
diff changeset
16 Interface,
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
17 Struct,
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
18 Union,
614
8c5b1558244b Added symbol Enum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 589
diff changeset
19 Enum,
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
20 EnumMember,
623
e2cd28cfc6ae Added dil.semantic.Template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 615
diff changeset
21 Template,
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
22 Variable,
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
23 Function,
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
24 Alias,
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
25 OverloadSet,
615
a05457530ac2 Added member ident to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 614
diff changeset
26 // Type,
560
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
27 }
709e223a8eb9 Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 407
diff changeset
28
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
29 /// A symbol represents an object with semantic code information.
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
30 class Symbol
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
31 { /// Enumeration of symbol statuses.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
32 enum Status : ushort
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
33 {
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
34 Declared, /// The symbol has been declared.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
35 Completing, /// The symbol is being processed.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
36 Complete /// The symbol is complete.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
37 }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
38
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
39 SYM sid; /// The ID of this symbol.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
40 Status status; /// The semantic status of this symbol.
568
c8861b452eb3 Added members 'node' and 'parent' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 567
diff changeset
41 Symbol parent; /// The parent this symbol belongs to.
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
42 Identifier* name; /// The name of this symbol.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
43 /// The syntax tree node that produced this symbol.
568
c8861b452eb3 Added members 'node' and 'parent' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 567
diff changeset
44 /// Useful for source code location info and retrieval of doc comments.
c8861b452eb3 Added members 'node' and 'parent' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 567
diff changeset
45 Node node;
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
46
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
47 /// Constructs a Symbol object.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
48 /// Params:
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
49 /// sid = the symbol's ID.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
50 /// name = the symbol's name.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
51 /// node = the symbol's node.
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
52 this(SYM sid, Identifier* name, Node node)
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
53 {
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
54 this.sid = sid;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
55 this.name = name;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
56 this.node = node;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
57 }
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
58
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
59 /// Change the status to Status.Completing.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
60 void setCompleting()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
61 { status = Status.Completing; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
62
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
63 /// Change the status to Status.Complete.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
64 void setComplete()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
65 { status = Status.Complete; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
66
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
67 /// Returns true if the symbol is being completed.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
68 bool isCompleting()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
69 { return status == Status.Completing; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
70
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
71 /// Returns true if the symbols is complete.
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
72 bool isComplete()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
73 { return status == Status.Complete; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
74
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
75 /// A template macro for building isXYZ() methods.
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
76 private template isX(char[] kind)
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
77 {
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
78 const char[] isX = `bool is`~kind~`(){ return sid == SYM.`~kind~`; }`;
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
79 }
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
80 mixin(isX!("Module"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
81 mixin(isX!("Class"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
82 mixin(isX!("Interface"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
83 mixin(isX!("Struct"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
84 mixin(isX!("Union"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
85 mixin(isX!("Enum"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
86 mixin(isX!("EnumMember"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
87 mixin(isX!("Template"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
88 mixin(isX!("Variable"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
89 mixin(isX!("Function"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
90 mixin(isX!("Alias"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
91 mixin(isX!("OverloadSet"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
92 // mixin(isX!("Type"));
751
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
93
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 758
diff changeset
94 /// Casts the symbol to Class.
758
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
95 Class to(Class)()
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
96 {
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
97 assert(mixin(`this.sid == mixin("SYM." ~ typeof(Class).stringof)`));
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
98 return cast(Class)cast(void*)this;
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
99 }
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
100
751
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
101 /// Returns: the fully qualified name of this symbol.
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
102 /// E.g.: dil.semantic.Symbol.Symbol.getFQN
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
103 char[] getFQN()
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
104 {
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
105 if (!name)
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
106 return parent ? parent.getFQN() : "";
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
107 if (parent)
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
108 return parent.getFQN() ~ '.' ~ name.str;
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
109 return name.str;
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
110 }
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
111 }