Specifier spec;
for(spec = type.qualifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
}
Specifier spec;
for(spec = exp._classExp.specifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
if(exp._classExp.decl)
AsmField field;
f.Puts("__asm__ ");
if(stmt.asmStmt.spec)
- OutputSpecifier(stmt.asmStmt.spec, f);
+ OutputSpecifier(stmt.asmStmt.spec, f, false);
f.Puts("(");
f.Puts(stmt.asmStmt.statements);
f.Puts(" ");
for(spec = ptr.qualifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
}
OutputAttrib(extDecl.attr, f);
}
-static void OutputSpecifier(Specifier spec, File f)
+static void OutputSpecifier(Specifier spec, File f, bool typeName)
{
switch(spec.type)
{
f.Puts("int");
break;
case UINT:
- f.Puts("unsigned int");
+ f.Puts(typeName ? "uint" : "unsigned int");
break;
case INT64:
//f.Puts("__int64");
//f.Puts("int64");
- f.Puts("long long");
+ f.Puts(typeName ? "int64" : "long long");
break;
case VALIST:
f.Puts("__builtin_va_list");
case unionSpecifier:
{
f.Puts((spec.type == structSpecifier) ? "struct" : "union");
+ if(spec.extDeclStruct)
+ {
+ f.Puts(" ");
+ OutputExtDecl(spec.extDeclStruct, f);
+ }
if(spec.id)
{
f.Puts(" ");
break;
case subClassSpecifier:
f.Puts("subclass(");
- OutputSpecifier(spec._class, f);
+ OutputSpecifier(spec._class, f, false);
f.Puts(")");
break;
case templateTypeSpecifier:
if(decl.specifiers)
{
+ bool inTypeDef = false;
for(spec = decl.specifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ if(spec.type == baseSpecifier && spec.specifier == TYPEDEF)
+ inTypeDef = true;
+ OutputSpecifier(spec, f, inTypeDef && !spec.next);
if(spec.next) f.Puts(" ");
}
}
{
for(spec = decl.specifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
}
if(decl.extStorage)
{
f.Puts(" ");
- OutputSpecifier(decl.extStorage, f);
+ OutputSpecifier(decl.extStorage, f, false);
}
break;
}
Specifier spec;
for(spec = func.specifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
f.Puts(" ");
static void OutputInstance(Instantiation inst, File f)
{
if(inst._class)
- OutputSpecifier(inst._class, f);
+ OutputSpecifier(inst._class, f, false);
if(inst.exp)
{
f.Puts(" ");
Specifier spec;
for(spec = func.specifiers->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
if(spec.next) f.Puts(" ");
}
f.Puts(" ");
{
//if(func.class != (void *)-1)
if(func.class)
- OutputSpecifier(func.class, f);
+ OutputSpecifier(func.class, f, false);
f.Puts("::");
}*/
if(func.declarator) OutputDeclarator(func.declarator, f);
static void OutputClass(ClassDefinition _class, File f)
{
f.Puts("class ");
- OutputSpecifier(_class._class, f);
+ OutputSpecifier(_class._class, f, false);
if(_class.baseSpecs)
{
Specifier spec;
f.Puts(" : ");
for(spec = _class.baseSpecs->first; spec; spec = spec.next)
{
- OutputSpecifier(spec, f);
+ OutputSpecifier(spec, f, false);
}
}
if(_class.definitions)
{
External external;
- outputLine = 25;
+ outputLine = 28;
for(external = ast.first; external; external = external.next)
{