Mercurial > projects > ddmd
comparison dmd/TypeInfoEnumDeclaration.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 | e28b18c23469 |
children | e3afd1303184 |
comparison
equal
deleted
inserted
replaced
173:d237b38b5858 | 174:af724d3510d7 |
---|---|
3 import dmd.common; | 3 import dmd.common; |
4 import dmd.TY; | 4 import dmd.TY; |
5 import dmd.Type; | 5 import dmd.Type; |
6 import dmd.Loc; | 6 import dmd.Loc; |
7 import dmd.TypeEnum; | 7 import dmd.TypeEnum; |
8 import dmd.Type; | |
9 import dmd.Global; | |
8 import dmd.EnumDeclaration; | 10 import dmd.EnumDeclaration; |
9 import dmd.TypeInfoDeclaration; | 11 import dmd.TypeInfoDeclaration; |
10 import dmd.backend.dt_t; | 12 import dmd.backend.dt_t; |
11 import dmd.backend.Util; | 13 import dmd.backend.Util; |
12 import dmd.backend.TYM; | 14 import dmd.backend.TYM; |
16 class TypeInfoEnumDeclaration : TypeInfoDeclaration | 18 class TypeInfoEnumDeclaration : TypeInfoDeclaration |
17 { | 19 { |
18 this(Type tinfo) | 20 this(Type tinfo) |
19 { | 21 { |
20 super(tinfo, 0); | 22 super(tinfo, 0); |
21 type = Type.typeinfoenum.type; | 23 type = global.typeinfoenum.type; |
22 } | 24 } |
23 | 25 |
24 override void toDt(dt_t** pdt) | 26 override void toDt(dt_t** pdt) |
25 { | 27 { |
26 //printf("TypeInfoEnumDeclaration::toDt()\n"); | 28 //printf("TypeInfoEnumDeclaration::toDt()\n"); |
27 dtxoff(pdt, Type.typeinfoenum.toVtblSymbol(), 0, TYnptr); // vtbl for TypeInfo_Enum | 29 dtxoff(pdt, global.typeinfoenum.toVtblSymbol(), 0, TYnptr); // vtbl for TypeInfo_Enum |
28 dtdword(pdt, 0); // monitor | 30 dtdword(pdt, 0); // monitor |
29 | 31 |
30 assert(tinfo.ty == Tenum); | 32 assert(tinfo.ty == Tenum); |
31 | 33 |
32 TypeEnum tc = cast(TypeEnum)tinfo; | 34 TypeEnum tc = cast(TypeEnum)tinfo; |
37 * char[] name; | 39 * char[] name; |
38 * void[] m_init; | 40 * void[] m_init; |
39 */ | 41 */ |
40 | 42 |
41 if (sd.memtype) | 43 if (sd.memtype) |
42 { | 44 { |
43 sd.memtype.getTypeInfo(null); | 45 sd.memtype.getTypeInfo(null); |
44 dtxoff(pdt, sd.memtype.vtinfo.toSymbol(), 0, TYnptr); // TypeInfo for enum members | 46 dtxoff(pdt, sd.memtype.vtinfo.toSymbol(), 0, TYnptr); // TypeInfo for enum members |
45 } | 47 } |
46 else | 48 else |
47 dtdword(pdt, 0); | 49 dtdword(pdt, 0); |
51 dtdword(pdt, namelen); | 53 dtdword(pdt, namelen); |
52 dtabytes(pdt, TYnptr, 0, namelen + 1, toStringz(name)); | 54 dtabytes(pdt, TYnptr, 0, namelen + 1, toStringz(name)); |
53 | 55 |
54 // void[] init; | 56 // void[] init; |
55 if (!sd.defaultval || tinfo.isZeroInit(Loc(0))) | 57 if (!sd.defaultval || tinfo.isZeroInit(Loc(0))) |
56 { | 58 { |
57 // 0 initializer, or the same as the base type | 59 // 0 initializer, or the same as the base type |
58 dtdword(pdt, 0); // init.length | 60 dtdword(pdt, 0); // init.length |
59 dtdword(pdt, 0); // init.ptr | 61 dtdword(pdt, 0); // init.ptr |
60 } | 62 } |
61 else | 63 else |