Mercurial > projects > dil
annotate trunk/src/dil/lexer/IdTable.d @ 707:efa5fcb9aa14
Added semantic code related to enums.
Added member symbol to EnumMemberDeclaration.
Added genAnonEnumID() to IdTable.
Added class EnumMember.
Wrote code for SemanticPass2.visit(EnumDeclaration).
Revised code in SemanticPass1.visit(EnumDeclaration).
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Tue, 29 Jan 2008 01:07:39 +0100 |
parents | 07946b379006 |
children | 140469ecb90e |
rev | line source |
---|---|
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 /++ |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 Author: Aziz Köksal |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 License: GPL3 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
4 +/ |
601
9f96fd51cb41
Moved dil.IdTable to dil.lexer.IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
600
diff
changeset
|
5 module dil.lexer.IdTable; |
597
4d50267f59c9
Moved dil.TokensEnum to dil.lexer.TokensEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
549
diff
changeset
|
6 |
4d50267f59c9
Moved dil.TokensEnum to dil.lexer.TokensEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
549
diff
changeset
|
7 import dil.lexer.TokensEnum; |
603
fc351756cc84
Moved dil.IdentsGenerator to dil.lexer.IdentsGenerator.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
602
diff
changeset
|
8 import dil.lexer.IdentsGenerator; |
599
c4cdea3a65ba
Moved dil.Keywords to dil.lexer.Keywords.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
597
diff
changeset
|
9 import dil.lexer.Keywords; |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
10 import common; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
11 |
600
041eae272362
Moved dil.Identifier to dil.lexer.Identifier.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
599
diff
changeset
|
12 public import dil.lexer.Identifier; |
602
c2e35c83c394
Moved dil.IdentsEnum to dil.lexer.IdentsEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
601
diff
changeset
|
13 public import dil.lexer.IdentsEnum; |
504
9076c4cea2a4
Changed occur. of Token* to Identifier* and refactored Parser.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
502
diff
changeset
|
14 |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
15 struct Ident |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
16 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
17 const static |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
18 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
19 mixin(generateIdentMembers()); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
20 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
21 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
22 static Identifier*[] allIds() |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
23 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
24 return __allIds; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
25 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
26 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
27 |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
28 /++ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
29 Global table for hoarding and retrieving identifiers. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
30 +/ |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
31 struct IdTable |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
32 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
33 static: |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
34 /// A set of common, predefined identifiers for fast lookups. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
35 private Identifier*[string] staticTable; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
36 /// A table that grows with every newly found, unique identifier. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
37 /// Access must be synchronized. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
38 private Identifier*[string] growingTable; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
39 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
40 /// Initializes the static table. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
41 static this() |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
42 { |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
43 // Load keywords and pre-defined identifiers into the static table. |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
44 foreach (ref k; keywords) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
45 staticTable[k.str] = &k; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
46 foreach (id; Ident.allIds()) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
47 staticTable[id.str] = id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
48 staticTable.rehash; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
49 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
50 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
51 /// Looks in both tables. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
52 Identifier* lookup(string idString) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
53 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
54 auto id = inStatic(idString); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
55 if (id) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 return id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
57 return inGrowing(idString); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
58 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
59 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
60 /// Look up idString in the static table. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
61 Identifier* inStatic(string idString) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
62 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
63 auto id = idString in staticTable; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
64 return id ? *id : null; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
66 |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
67 alias Identifier* function(string idString) LookupFunction; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
68 /// Look up idString in the growing table. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
69 LookupFunction inGrowing = &_inGrowing_unsafe; // Default to unsafe function. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
70 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
71 /++ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
72 Set the thread safety mode of this table. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
73 Call this function only if you can be sure |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
74 that this table is not being accessed |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
75 (like during lexing, parsing and semantic phase.) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
76 +/ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
77 void setThreadsafe(bool b) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
78 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
79 if (b) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
80 IdTable.inGrowing = &_inGrowing_safe; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
81 else |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
82 IdTable.inGrowing = &_inGrowing_unsafe; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
83 } |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
84 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
85 /++ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
86 Returns the Identifier for idString. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
87 Adds idString to the table if not found. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
88 +/ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
89 private Identifier* _inGrowing_unsafe(string idString) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
90 out(id) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
91 { assert(id !is null); } |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
92 body |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
93 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
94 auto id = idString in growingTable; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
95 if (id) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
96 return *id; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
97 auto newID = Identifier(idString, TOK.Identifier); |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
98 growingTable[idString] = newID; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
99 return newID; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
100 } |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
101 |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
102 /++ |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
103 Returns the Identifier for idString. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
104 Adds idString to the table if not found. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
105 Access to the data structure is synchronized. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
106 +/ |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
107 private Identifier* _inGrowing_safe(string idString) |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
108 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
109 synchronized |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
110 return _inGrowing_unsafe(idString); |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
111 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
112 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
113 /+ |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
114 Identifier* addIdentifiers(char[][] idStrings) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
115 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
116 auto ids = new Identifier*[idStrings.length]; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
117 foreach (i, idString; idStrings) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
118 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
119 Identifier** id = idString in tabulatedIds; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
120 if (!id) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
121 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
122 auto newID = Identifier(TOK.Identifier, idString); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
123 tabulatedIds[idString] = newID; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
124 id = &newID; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
125 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
126 ids[i] = *id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
127 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
128 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
129 +/ |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
130 |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
131 static uint anonCount; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
132 Identifier* genAnonymousID(char[] str) |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
133 { |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
134 ++anonCount; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
135 auto x = anonCount; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
136 // Convert count to a string and append it to str. |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
137 do |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
138 str = cast(char)('0' + (x % 10)) ~ str; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
139 while (x /= 10) |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
140 return Identifier(str, TOK.Identifier); |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
141 } |
707
efa5fcb9aa14
Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
618
diff
changeset
|
142 |
efa5fcb9aa14
Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
618
diff
changeset
|
143 Identifier* genAnonEnumID() |
efa5fcb9aa14
Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
618
diff
changeset
|
144 { |
efa5fcb9aa14
Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
618
diff
changeset
|
145 return genAnonymousID("__anonenum"); |
efa5fcb9aa14
Added semantic code related to enums.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
618
diff
changeset
|
146 } |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
147 } |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
148 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
149 unittest |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
150 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
151 // TODO: write benchmark. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
152 // Single table |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
153 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
154 // Single table. synchronized |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
155 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
156 // Two tables. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
157 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
158 // Two tables. synchronized |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
159 } |