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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }