comparison gen/structs.cpp @ 725:3e143b611c1e

Fix double field toObjFile for structs with AttribDecls.
author Christian Kamm <kamm incasoftware de>
date Sat, 25 Oct 2008 22:07:20 +0200
parents 5a2983f97498
children 041c1596d217
comparison
equal deleted inserted replaced
724:6de2ed4f0abe 725:3e143b611c1e
106 sd->ir.irStruct = irstruct; 106 sd->ir.irStruct = irstruct;
107 gIR->structs.push_back(irstruct); 107 gIR->structs.push_back(irstruct);
108 108
109 irstruct->packed = ispacked; 109 irstruct->packed = ispacked;
110 110
111 // fields
112 Array* arr = &sd->fields;
113 for (int k=0; k < arr->dim; k++) {
114 VarDeclaration* v = (VarDeclaration*)arr->data[k];
115 v->toObjFile(0); // TODO: multiobj
116 }
117
118 bool thisModule = false; 111 bool thisModule = false;
119 if (sd->getModule() == gIR->dmodule) 112 if (sd->getModule() == gIR->dmodule)
120 thisModule = true; 113 thisModule = true;
121 114
122 // methods 115 // methods, fields
123 arr = sd->members; 116 Array* arr = sd->members;
124 for (int k=0; k < arr->dim; k++) { 117 for (int k=0; k < arr->dim; k++) {
125 Dsymbol* s = (Dsymbol*)arr->data[k]; 118 Dsymbol* s = (Dsymbol*)arr->data[k];
126 if (FuncDeclaration* fd = s->isFuncDeclaration()) { 119 if (FuncDeclaration* fd = s->isFuncDeclaration()) {
127 if (thisModule || (fd->prot() != PROTprivate)) { 120 if (thisModule || (fd->prot() != PROTprivate)) {
128 fd->toObjFile(0); // TODO: multiobj 121 fd->toObjFile(0); // TODO: multiobj
129 } 122 }
130 } 123 }
131 else if (s->isAttribDeclaration()) { 124 else if (s->isAttribDeclaration() ||
125 s->isVarDeclaration() ||
126 s->isTemplateMixin()) {
132 s->toObjFile(0); // TODO: multiobj 127 s->toObjFile(0); // TODO: multiobj
133 } 128 }
134 else { 129 else {
135 Logger::println("Ignoring dsymbol '%s' in this->members of kind '%s'", s->toPrettyChars(), s->kind()); 130 Logger::println("Ignoring dsymbol '%s' in this->members of kind '%s'", s->toPrettyChars(), s->kind());
136 } 131 }