annotate dmd/Identifier.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents af724d3510d7
children
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
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
13 import dmd.TObject;
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
14
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
15 class Identifier : TObject
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 TOK value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 string string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 this(string string_, TOK value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
22 register();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 this.string_ = string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 this.value = value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
26
45
ccbc1e0bb3f0 StringExp.equals implemented
korDen
parents: 0
diff changeset
27 bool equals(Object o)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 {
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
29 if (this is o) {
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
30 return true;
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
31 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
32
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
33 if (auto i = cast(Identifier)o) {
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
34 return string_ == i.string_;
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
35 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
36
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
37 return false;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
39
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 hash_t hashCode()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
44
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
45 override int opCmp(Object o)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
49
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 void print()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
54
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 string toChars()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 return string_;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
59
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 version (_DH) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 char* toHChars()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 string toHChars2()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 {
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
68 string p;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
69
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
70 if (this == Id.ctor) p = "this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
71 else if (this == Id.dtor) p = "~this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
72 else if (this == Id.classInvariant) p = "invariant";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
73 else if (this == Id.unitTest) p = "unittest";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
74 else if (this == Id.dollar) p = "$";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
75 else if (this == Id.withSym) p = "with";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
76 else if (this == Id.result) p = "result";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
77 else if (this == Id.returnLabel) p = "return";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
78 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
79 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
80 p = toChars();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
81 if (p.length != 0 && p[0] == '_')
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
82 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
83 if (p.startsWith("_staticCtor"))
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
84 p = "static this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
85 else if (p.startsWith("_staticDtor"))
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
86 p = "static ~this";
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
87 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
88 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
89
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
90 return p;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
92
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 DYNCAST dyncast()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 return DYNCAST.DYNCAST_IDENTIFIER;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 // BUG: these are redundant with Lexer::uniqueId()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 static Identifier generateId(string prefix)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 {
168
ceed63f310fb stringtable, stringbuffer and freelist moved to Global
korDen
parents: 114
diff changeset
101 return generateId(prefix, ++global.i);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 168
diff changeset
103
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 static Identifier generateId(string prefix, size_t i)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 scope OutBuffer buf = new OutBuffer();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 buf.writestring(prefix);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 buf.printf("%d", i); ///<!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 string id = buf.extractString();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 return Lexer.idPool(id);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 68
diff changeset
114 }