// #include <stdarg.h>
-// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
+// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
struct ClassDefine : Definition
{
char * base;
bool isVirtual;
};
-// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
+// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
class PropertyDefine : struct
{
PropertyDefine prev, next;
bool hasSet, hasGet;
};
-// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
+// WARNING: PropertyDefine, ClassDefine and DataMemberDefine must remain compatible
class DataMemberDefine : struct
{
DataMemberDefine prev, next;
if(decl.type == structDeclaration)
{
Declarator d;
-
+
if(decl.declarators)
{
for(d = decl.declarators->first; d; d = d.next)
//if(d.type != DeclaratorFunction)
if(declId)
{
- dataMemberDefine = DataMemberDefine
+ dataMemberDefine = DataMemberDefine
{
isProperty = MemberType::dataMember;
memberType = normalMember;
if(posExp.isConstant)
bitPos = strtol(posExp.constant, null, 0);
FreeExpression(posExp);
-
+
}
d.structDecl.exp = null;
PrintType(dataType, typeString, false, true);
if(member)
- dataMember = eMember_AddDataMember(member, declId.string,
+ dataMember = eMember_AddDataMember(member, declId.string,
typeString, /*ComputeTypeSize(dataType)*/ 0, 0, def.memberAccess);
else
- dataMember = eClass_AddDataMember(regClass, declId.string,
+ dataMember = eClass_AddDataMember(regClass, declId.string,
typeString, /*ComputeTypeSize(dataType)*/ 0, 0, def.memberAccess);
if(dataMember)
dataMember.dataType = dataType;
memberType = (spec.type == SpecifierType::unionSpecifier) ? unionMember : structMember;
};
parentMemberDefine.dataMembers.Add(dataMemberDefine);
-
+
AddDefinitions(null, dataMemberDefine, null, dataMember, spec.definitions);
if(member)
PrintType(dataType, typeString, false, true);
if(member)
- dataMember = eMember_AddDataMember(member, id.string,
+ dataMember = eMember_AddDataMember(member, id.string,
typeString, /*ComputeTypeSize(dataType)*/ 0, 0, def.memberAccess);
else
- dataMember = eClass_AddDataMember(regClass, id.string,
+ dataMember = eClass_AddDataMember(regClass, id.string,
typeString, /*ComputeTypeSize(dataType)*/ 0, 0, def.memberAccess);
//delete dataTypeString;
if(prop)
{
prop.symbol = Symbol
- {
+ {
string = CopyString(propertyDef.symbol.string);
id = propertyDef.symbol.id;
type = propertyDef.symbol.type;
member = eClass_AddDataMember(regClass, def.id.string, null, 0, 0, def.memberAccess);
- dataMemberDefine = DataMemberDefine
+ dataMemberDefine = DataMemberDefine
{
isProperty = dataMember;
memberType = normalMember;
}
}
}
- else if(baseType.kind == structType || baseType.kind == unionType)
+ else if(baseType.kind == structType || baseType.kind == unionType)
{
classType = noHeadClass;
baseName[0] = '\0';
}
- else
+ else
unitType = true;
FreeType(baseType);
unionDefine = DataMemberDefine
{
isProperty = dataMember;
- memberType = DataMemberType::unionMember;
+ memberType = DataMemberType::unionMember;
};
classDefine.propertiesAndMembers.Add(unionDefine);
switch(param.type)
{
case type:
- defaultArg.dataTypeString =
+ defaultArg.dataTypeString =
StringFromSpecDecl(param.defaultArgument.templateDatatype.specifiers, param.defaultArgument.templateDatatype.decl);
break;
case identifier:
else
strcpy(memberString, param.defaultArgument.identifier._class.name);
}
-
+
if(memberString[0])
{
strcat(memberString, "::");
char * typeString = param.dataType ? StringFromSpecDecl(param.dataType.specifiers, param.dataType.decl) : null;
eClass_AddTemplateParameter(regClass, param.identifier.string, param.type, typeString, defaultArg);
- /*eClass_AddTemplateParameter(regClass, param.identifier.string, param.type,
+ /*eClass_AddTemplateParameter(regClass, param.identifier.string, param.type,
(param.type == type) ? eSystem_FindClass(regClass.module, typeString) : CopyString(typeString), defaultArg);*/
// delete typeString;
}
refCount = 1;
};
e.exp.destType = destType;
-
+
// Set parsingType to avoid producing errors
SetParsingType(true);
ProcessExpressionType(e.exp);
}
else
// Sort of an error
- eEnum_AddValue(regClass, e.id.string);
+ eEnum_AddValue(regClass, e.id.string);
}
else
eEnum_AddValue(regClass, e.id.string);
Specifier specifier;
for(specifier = declaration.specifiers->first; specifier; specifier = specifier.next)
{
- if((specifier.type == enumSpecifier || specifier.type == structSpecifier || specifier.type == unionSpecifier) && specifier.id && specifier.id.string &&
+ if((specifier.type == enumSpecifier || specifier.type == structSpecifier || specifier.type == unionSpecifier) && specifier.id && specifier.id.string &&
(declaration.declMode || specifier.baseSpecs || (specifier.type == enumSpecifier && specifier.definitions)))
{
Symbol symbol = FindClass(specifier.id.string);
typeString[0] = '\0';
PrintType(function.declarator.symbol.type, typeString, true, true);
functionDefine = FunctionDefine
- {
+ {
type = functionDefinition;
name = CopyString(function.declarator.symbol.string);
dataType = CopyString(typeString);
Specifier specifier;
for(specifier = declaration.specifiers->first; specifier; specifier = specifier.next)
{
- if((specifier.type == enumSpecifier) && specifier.id && specifier.id.string &&
+ if((specifier.type == enumSpecifier) && specifier.id && specifier.id.string &&
(declaration.declMode || specifier.baseSpecs || (specifier.type == enumSpecifier && specifier.definitions)))
{
Symbol symbol = FindClass(specifier.id.string);
}
f.Printf(" .\n");
}
-
+
if(!classDefine.isStatic)
{
if(classDefine.methods.first)
}
f.Printf(" .\n");
delete f;
- }
+ }
}
class PrecompApp : Application
cppOptionsLen = newLen;
targetBits = !strcmp(arg + 1, "m32") ? 32 : 64;
}
+ else if(!strcmp(arg + 1, "t32") || !strcmp(arg + 1, "t64"))
+ {
+ targetBits = !strcmp(arg + 1, "t32") ? 32 : 64;
+ }
else if(arg[1] == 'D' || arg[1] == 'I')
{
char * buf;
else
valid = false;
}
+ else if(!strcmp(arg+1, "fno-diagnostics-show-caret"))
+ {
+ char * buf;
+ int size = cppOptionsLen + 1 + strlen(arg) * 2 + 1;
+ cppOptions = renew cppOptions char[size];
+ buf = cppOptions + cppOptionsLen;
+ *buf++ = ' ';
+ PassArg(buf, arg);
+ cppOptionsLen = cppOptionsLen + 1 + strlen(buf);
+ }
else if(!strcmp(arg+1, "symbols"))
{
if(c + 1 < argc)
globalContext.types.Add((BTNode)Symbol { string = CopyString("uintptr_t"), type = ProcessTypeString("uintptr", false) });
globalContext.types.Add((BTNode)Symbol { string = CopyString("ssize_t"), type = ProcessTypeString("intsize", false) });
globalContext.types.Add((BTNode)Symbol { string = CopyString("size_t"), type = ProcessTypeString("uintsize", false) });
-
+
{
char * outputFilePath = GetOutputFile();
if(FileExists(outputFilePath))