Mercurial > projects > dil
annotate trunk/src/dil/lexer/IdTable.d @ 769:5e3ef1b2011c
Added and improved documentation.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 17 Feb 2008 02:21:55 +0100 |
parents | 140469ecb90e |
children | 3b34f6a95a27 |
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 |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
714
diff
changeset
|
15 /// A namespace for the predefined identifiers. |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
16 struct Ident |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
17 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
18 const static |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
19 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
20 mixin(generateIdentMembers()); |
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 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
23 static Identifier*[] allIds() |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
24 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
25 return __allIds; |
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 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
28 |
769
5e3ef1b2011c
Added and improved documentation.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
714
diff
changeset
|
29 /// Global table for hoarding and retrieving identifiers. |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
30 struct IdTable |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
31 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
32 static: |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
33 /// 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
|
34 private Identifier*[string] staticTable; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
35 /// 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
|
36 /// Access must be synchronized. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
37 private Identifier*[string] growingTable; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
38 |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
39 /// Initializes the static table. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
40 static this() |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
41 { |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
42 // 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
|
43 foreach (ref k; keywords) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
44 staticTable[k.str] = &k; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
45 foreach (id; Ident.allIds()) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
46 staticTable[id.str] = id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
47 staticTable.rehash; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
48 } |
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 /// Looks in both tables. |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
51 Identifier* lookup(string idString) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
52 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
53 auto id = inStatic(idString); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
54 if (id) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
55 return id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 return inGrowing(idString); |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
57 } |
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 /// 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
|
60 Identifier* inStatic(string idString) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
61 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
62 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
|
63 return id ? *id : null; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
64 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
66 alias Identifier* function(string idString) LookupFunction; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
67 /// Look up idString in the growing table. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
68 LookupFunction inGrowing = &_inGrowing_unsafe; // Default to unsafe function. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
69 |
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 Set the thread safety mode of this table. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
72 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
|
73 that this table is not being accessed |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
74 (like during lexing, parsing and semantic phase.) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
75 +/ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
76 void setThreadsafe(bool b) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
77 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
78 if (b) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
79 IdTable.inGrowing = &_inGrowing_safe; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
80 else |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
81 IdTable.inGrowing = &_inGrowing_unsafe; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
82 } |
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 Returns the Identifier for idString. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
86 Adds idString to the table if not found. |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
87 +/ |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
88 private Identifier* _inGrowing_unsafe(string idString) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
89 out(id) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
90 { assert(id !is null); } |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
91 body |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
92 { |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
93 auto id = idString in growingTable; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
94 if (id) |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
95 return *id; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
96 auto newID = Identifier(idString, TOK.Identifier); |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
97 growingTable[idString] = newID; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
98 return newID; |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
99 } |
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
100 |
502
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
101 /++ |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 +/ |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
106 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
|
107 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
108 synchronized |
549
9c45b245b554
Added methods to IdTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
504
diff
changeset
|
109 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
|
110 } |
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 Identifier* addIdentifiers(char[][] idStrings) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
114 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
115 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
|
116 foreach (i, idString; idStrings) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
117 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
118 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
|
119 if (!id) |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
120 { |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
121 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
|
122 tabulatedIds[idString] = newID; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
123 id = &newID; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
124 } |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
125 ids[i] = *id; |
4e14cd1b24da
Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
126 } |
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 +/ |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
129 |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
130 static uint anonCount; |
714
140469ecb90e
Added code and applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
707
diff
changeset
|
131 Identifier* genAnonymousID(char[] prefix) |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
132 { |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
133 ++anonCount; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
134 auto x = anonCount; |
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
135 // Convert count to a string and append it to str. |
714
140469ecb90e
Added code and applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
707
diff
changeset
|
136 char[] num; |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
137 do |
714
140469ecb90e
Added code and applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
707
diff
changeset
|
138 num = cast(char)('0' + (x % 10)) ~ num; |
618
07946b379006
Refactored the way dot expressions are parsed.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
603
diff
changeset
|
139 while (x /= 10) |
714
140469ecb90e
Added code and applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
707
diff
changeset
|
140 return Identifier(prefix ~ num, TOK.Identifier); |
618
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 } |