Mercurial > projects > dil
annotate trunk/src/dil/lexer/IdTable.d @ 618:07946b379006
Refactored the way dot expressions are parsed.
DotExpression is a binary expression now.
Added ModuleScopeExpression.
Removed some obsolete expression classes.
Added QualifiedType and ModuleScopeType.
Removed some obsolete type node classes.
Added genAnonymousID() to IdTable.
Removed obsolete parser functions.
Improved Node.getDocComments().
Added semantic() methods to some declaration classes.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Fri, 11 Jan 2008 00:42:35 +0100 |
parents | fc351756cc84 |
children | efa5fcb9aa14 |
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 } |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
142 } |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
143 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
144 unittest |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
145 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
146 // TODO: write benchmark. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
147 // Single table |
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 // Single table. synchronized |
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 // Two tables. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
152 |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
153 // Two tables. synchronized |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
154 } |