annotate trunk/src/dil/semantic/Symbol.d @ 758:f4b9680c0e16

Revised module dil.SettingsLoader.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Thu, 14 Feb 2008 03:31:19 +0100
parents 8caf18892c1b
children c24be8d4f6ab
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
563
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
11 /// 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
563
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
29 /++
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
30 A symbol represents an object with semantic code information.
c838ed7f2ac9 Added 'override' to some methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 561
diff changeset
31 +/
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
32 class Symbol
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
33 {
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
34 enum Status : ushort
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
35 {
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
36 Declared, /// The symbol has been declared.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
37 Completing, /// The symbol is being processed.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
38 Complete /// The symbol is complete.
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
39 }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
40
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
41 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
42 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
43 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
44 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
45 /// 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
46 /// 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
47 Node node;
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
48
683
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
49 this(SYM sid, Identifier* name, Node node)
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
50 {
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
51 this.sid = sid;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
52 this.name = name;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
53 this.node = node;
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
54 }
1ae72234db26 Implemented some methods in SemanticPass1.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 623
diff changeset
55
711
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
56 void setCompleting()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
57 { status = Status.Completing; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
58
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
59 void setComplete()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
60 { status = Status.Complete; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
61
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
62 bool isCompleting()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
63 { return status == Status.Completing; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
64
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
65 bool isComplete()
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
66 { return status == Status.Complete; }
4f971f6382c7 Added enum Status to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 707
diff changeset
67
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
68 // 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
69 private template isX(char[] kind)
567
ab9f5020cd02 Added 'is-methods' to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 563
diff changeset
70 {
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
71 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
72 }
707
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
73 mixin(isX!("Module"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
74 mixin(isX!("Class"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
75 mixin(isX!("Interface"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
76 mixin(isX!("Struct"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
77 mixin(isX!("Union"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
78 mixin(isX!("Enum"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
79 mixin(isX!("EnumMember"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
80 mixin(isX!("Template"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
81 mixin(isX!("Variable"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
82 mixin(isX!("Function"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
83 mixin(isX!("Alias"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
84 mixin(isX!("OverloadSet"));
efa5fcb9aa14 Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 683
diff changeset
85 // mixin(isX!("Type"));
751
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
86
758
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
87 Class to(Class)()
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
88 {
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
89 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
90 return cast(Class)cast(void*)this;
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
91 }
f4b9680c0e16 Revised module dil.SettingsLoader.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 751
diff changeset
92
751
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
93 /// 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
94 /// E.g.: dil.semantic.Symbol.Symbol.getFQN
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
95 char[] getFQN()
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
96 {
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
97 if (!name)
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
98 return parent ? parent.getFQN() : "";
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
99 if (parent)
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
100 return parent.getFQN() ~ '.' ~ name.str;
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
101 return name.str;
8caf18892c1b Improved DDocEmitter and fixed bugs.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 711
diff changeset
102 }
407
5431c0faf3b5 Added modules dil.Scope and dil.Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
103 }