ListAdd(list, MkInitializerList(subList));
}
else if(dataMember->dataType->kind == 12)
-ListAdd(list, MkInitializerList(MkListOne(MkInitializerAssignment(MkExpConstant("0")))));
+{
+struct Type * t = dataMember->dataType->__anon1.type;
+struct Initializer * inner = MkInitializerAssignment((((void *)0))), * i = inner;
+
+while(t && t->kind == 12)
+{
+i = MkInitializerList(MkListOne(i));
+t = t->__anon1.type;
+}
+if(t && t->kind == 8 && t->__anon1._class && t->__anon1._class->__anon1.registered && t->__anon1._class->__anon1.registered->type == 1)
+{
+struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
+struct Specifier * spec = _MkSpecifierName(t->__anon1._class->__anon1.registered->name, classSym, (((void *)0)));
+struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
+
+ProcessBracketInst(inst, subList);
+FreeInstance(inst);
+inner->type = 1;
+inner->__anon1.list = subList;
+}
+else
+inner->__anon1.exp = MkExpConstant("0");
+ListAdd(list, MkInitializerList(MkListOne(i)));
+}
else
ListAdd(list, MkInitializerAssignment(MkExpConstant("0")));
}
init->type = 1;
init->__anon1.list = subList;
}
-else if(dataMember->dataType && dataMember->dataType->kind == 12)
+else if(dataMember->dataType && (dataMember->dataType->kind == 12 || dataMember->dataType->kind == 9))
{
-struct Type * t = dataMember->dataType->__anon1.type;
+struct Type * t = dataMember->dataType->kind == 12 ? dataMember->dataType->__anon1.type : dataMember->dataType->__anon1.__anon1.members.first;
struct Initializer * i = MkInitializerAssignment(MkExpConstant("0"));
-while(t && t->kind == 12)
+while(t && (t->kind == 12 || t->kind == 9))
{
i = MkInitializerList(MkListOne(i));
+if(t->kind == 12)
t = t->__anon1.type;
+else if(t->kind == 9)
+t = t->__anon1.__anon1.members.first;
}
init->type = 1;
init->__anon1.list = MkListOne(i);
init.type = listInitializer;
init.list = subList;
}
- else if(dataMember.dataType && dataMember.dataType.kind == arrayType)
+ else if(dataMember.dataType && (dataMember.dataType.kind == arrayType || dataMember.dataType.kind == structType))
{
- Type t = dataMember.dataType.type;
+ Type t = dataMember.dataType.kind == arrayType ? dataMember.dataType.type : dataMember.dataType.members.first;
Initializer i = MkInitializerAssignment(MkExpConstant("0"));
- while(t && t.kind == arrayType)
+ while(t && (t.kind == arrayType || t.kind == structType))
{
i = MkInitializerList(MkListOne(i));
- t = t.type;
+ if(t.kind == arrayType)
+ t = t.type;
+ else if(t.kind == structType)
+ t = t.members.first;
}
init.type = listInitializer;
init.list = MkListOne(i);
if(classSym && classSym.registered && classSym.registered.type == structClass)
{
OldList * subList = MkList();
- Specifier spec = _MkSpecifierName/*MkClassName*/(dataMember.dataTypeString, classSym, null);
+ Specifier spec = _MkSpecifierName(dataMember.dataTypeString, classSym, null);
Instantiation inst = MkInstantiation(spec, null, null);
ProcessBracketInst(inst, subList);
FreeInstance(inst);
ListAdd(list, MkInitializerList(subList));
}
else if(dataMember.dataType.kind == arrayType)
- ListAdd(list, MkInitializerList(MkListOne(MkInitializerAssignment(MkExpConstant("0")))));
+ {
+ Type t = dataMember.dataType.type;
+ Initializer inner = MkInitializerAssignment(null), i = inner;
+ while(t && t.kind == arrayType)
+ {
+ i = MkInitializerList(MkListOne(i));
+ t = t.type;
+ }
+ if(t && t.kind == classType && t._class && t._class.registered && t._class.registered.type == structClass)
+ {
+ OldList * subList = MkList();
+ Specifier spec = _MkSpecifierName(t._class.registered.name, classSym, null);
+ Instantiation inst = MkInstantiation(spec, null, null);
+ ProcessBracketInst(inst, subList);
+ FreeInstance(inst);
+ inner.type = listInitializer;
+ inner.list = subList;
+ }
+ else
+ inner.exp = MkExpConstant("0");
+ ListAdd(list, MkInitializerList(MkListOne(i)));
+ }
else
ListAdd(list, MkInitializerAssignment(MkExpConstant("0")));
}