annotate dmd/Identifier.d @ 174:af724d3510d7

lot os toCBuffer methods implemented moved shared Type.* stuff into Global
author korDen
date Sun, 10 Oct 2010 03:47:23 +0400
parents ceed63f310fb
children e3afd1303184
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.Identifier;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 72
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.TOK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.DYNCAST;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.Lexer;
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
7 import dmd.Global;
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
8 import dmd.Id;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
11 import std.string;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
12
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 class Identifier
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 TOK value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 string string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 this(string string_, TOK value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 this.string_ = string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 this.value = value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
23
45
ccbc1e0bb3f0 StringExp.equals implemented
korDen
parents: 0
diff changeset
24 bool equals(Object o)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 {
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
26 if (this is o) {
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
27 return true;
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
28 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
29
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
30 if (auto i = cast(Identifier)o) {
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
31 return string_ == i.string_;
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
32 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
33
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
34 return false;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
36
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37 hash_t hashCode()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
41
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
42 override int opCmp(Object o)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
45 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
46
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 void print()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
51
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 string toChars()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 return string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
56
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 version (_DH) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 char* toHChars()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 string toHChars2()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 {
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
65 string p;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
66
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
67 if (this == Id.ctor) p = "this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
68 else if (this == Id.dtor) p = "~this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
69 else if (this == Id.classInvariant) p = "invariant";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
70 else if (this == Id.unitTest) p = "unittest";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
71 else if (this == Id.dollar) p = "$";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
72 else if (this == Id.withSym) p = "with";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
73 else if (this == Id.result) p = "result";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
74 else if (this == Id.returnLabel) p = "return";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
75 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
76 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
77 p = toChars();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
78 if (p.length != 0 && p[0] == '_')
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
79 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
80 if (p.startsWith("_staticCtor"))
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
81 p = "static this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
82 else if (p.startsWith("_staticDtor"))
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
83 p = "static ~this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
84 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
85 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
86
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
87 return p;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
89
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90 DYNCAST dyncast()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92 return DYNCAST.DYNCAST_IDENTIFIER;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 // BUG: these are redundant with Lexer::uniqueId()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 static Identifier generateId(string prefix)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 {
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
98 return generateId(prefix, ++global.i);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
100
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 static Identifier generateId(string prefix, size_t i)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 scope OutBuffer buf = new OutBuffer();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105 buf.writestring(prefix);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 buf.printf("%d", i); ///<!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 string id = buf.extractString();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 return Lexer.idPool(id);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
111 }