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
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 }
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 }