comparison dmd2/identifier.c @ 758:f04dde6e882c

Added initial D2 support, D2 frontend and changes to codegen to make things compile.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 11 Nov 2008 01:38:48 +0100
parents
children f5d5bc9295b1
comparison
equal deleted inserted replaced
757:2c730d530c98 758:f04dde6e882c
1
2 // Compiler implementation of the D programming language
3 // Copyright (c) 1999-2006 by Digital Mars
4 // All Rights Reserved
5 // written by Walter Bright
6 // http://www.digitalmars.com
7 // License for redistribution is by either the Artistic License
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
9 // See the included readme.txt for details.
10
11 #include <stdio.h>
12 #include <string.h>
13
14 #include "root.h"
15 #include "identifier.h"
16 #include "mars.h"
17 #include "lexer.h"
18 #include "id.h"
19
20 Identifier::Identifier(const char *string, int value)
21 {
22 //printf("Identifier('%s', %d)\n", string, value);
23 this->string = string;
24 this->value = value;
25 this->len = strlen(string);
26 }
27
28 hash_t Identifier::hashCode()
29 {
30 return String::calcHash(string);
31 }
32
33 int Identifier::equals(Object *o)
34 {
35 return this == o || memcmp(string,o->toChars(),len+1) == 0;
36 }
37
38 int Identifier::compare(Object *o)
39 {
40 return memcmp(string, o->toChars(), len + 1);
41 }
42
43 char *Identifier::toChars()
44 {
45 return (char *)string;
46 }
47
48 const char *Identifier::toHChars2()
49 {
50 const char *p = NULL;
51
52 if (this == Id::ctor) p = "this";
53 else if (this == Id::dtor) p = "~this";
54 else if (this == Id::classInvariant) p = "invariant";
55 else if (this == Id::unitTest) p = "unittest";
56 else if (this == Id::dollar) p = "$";
57 else if (this == Id::withSym) p = "with";
58 else if (this == Id::result) p = "result";
59 else if (this == Id::returnLabel) p = "return";
60 else
61 { p = toChars();
62 if (*p == '_')
63 {
64 if (memcmp(p, "_staticCtor", 11) == 0)
65 p = "static this";
66 else if (memcmp(p, "_staticDtor", 11) == 0)
67 p = "static ~this";
68 }
69 }
70
71 return p;
72 }
73
74 void Identifier::print()
75 {
76 fprintf(stdmsg, "%s",string);
77 }
78
79 int Identifier::dyncast()
80 {
81 return DYNCAST_IDENTIFIER;
82 }
83
84
85 Identifier *Identifier::generateId(const char *prefix)
86 {
87 static size_t i;
88
89 return generateId(prefix, ++i);
90 }
91
92 Identifier *Identifier::generateId(const char *prefix, size_t i)
93 { OutBuffer buf;
94
95 buf.writestring(prefix);
96 buf.printf("%zu", i);
97
98 char *id = buf.toChars();
99 buf.data = NULL;
100 return Lexer::idPool(id);
101 }