compiler: Fixes to improve compatibility with MinGW/GCC 5 headers
[sdk] / compiler / bootstrap / libec / bootstrap / ast.c
index 3ec4dbd..b6c1345 100644 (file)
@@ -51,7 +51,7 @@ typedef unsigned __int64 uint64;
 #include <sys/types.h>
 enum yytokentype
 {
-IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366, BOOL = 367, _BOOL = 368, _COMPLEX = 369, _IMAGINARY = 370, RESTRICT = 371, THREAD = 372, WIDE_STRING_LITERAL = 373, BUILTIN_OFFSETOF = 374
+IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, INT128 = 294, LONG = 295, SIGNED = 296, UNSIGNED = 297, FLOAT = 298, DOUBLE = 299, CONST = 300, VOLATILE = 301, VOID = 302, VALIST = 303, STRUCT = 304, UNION = 305, ENUM = 306, ELLIPSIS = 307, CASE = 308, DEFAULT = 309, IF = 310, SWITCH = 311, WHILE = 312, DO = 313, FOR = 314, GOTO = 315, CONTINUE = 316, BREAK = 317, RETURN = 318, IFX = 319, ELSE = 320, CLASS = 321, THISCLASS = 322, CLASS_NAME = 323, PROPERTY = 324, SETPROP = 325, GETPROP = 326, NEWOP = 327, RENEW = 328, DELETE = 329, EXT_DECL = 330, EXT_STORAGE = 331, IMPORT = 332, DEFINE = 333, VIRTUAL = 334, ATTRIB = 335, PUBLIC = 336, PRIVATE = 337, TYPED_OBJECT = 338, ANY_OBJECT = 339, _INCREF = 340, EXTENSION = 341, ASM = 342, TYPEOF = 343, WATCH = 344, STOPWATCHING = 345, FIREWATCHERS = 346, WATCHABLE = 347, CLASS_DESIGNER = 348, CLASS_NO_EXPANSION = 349, CLASS_FIXED = 350, ISPROPSET = 351, CLASS_DEFAULT_PROPERTY = 352, PROPERTY_CATEGORY = 353, CLASS_DATA = 354, CLASS_PROPERTY = 355, SUBCLASS = 356, NAMESPACE = 357, NEW0OP = 358, RENEW0 = 359, VAARG = 360, DBTABLE = 361, DBFIELD = 362, DBINDEX = 363, DATABASE_OPEN = 364, ALIGNOF = 365, ATTRIB_DEP = 366, __ATTRIB = 367, BOOL = 368, _BOOL = 369, _COMPLEX = 370, _IMAGINARY = 371, RESTRICT = 372, THREAD = 373, WIDE_STRING_LITERAL = 374, BUILTIN_OFFSETOF = 375
 };
 
 extern char * yytext;
@@ -894,6 +894,7 @@ unsigned int casted : 1;
 unsigned int pointerAlignment : 1;
 unsigned int isLong : 1;
 unsigned int signedBeforePromotion : 1;
+unsigned int isVector : 1;
 } ecere_gcc_struct;
 
 struct TemplatedType *  FindTemplateTypeParameter(struct Context *  ctx, const char *  name);
@@ -3230,6 +3231,8 @@ else if(spec->type == 0)
 {
 if(spec->__anon1.specifier == INT64)
 s = "int64";
+else if(spec->__anon1.specifier == INT128)
+s = "__int128";
 }
 if(s)
 {
@@ -3628,6 +3631,8 @@ else if(spec->type == 0)
 {
 if(spec->__anon1.specifier == INT64)
 s = "int64";
+else if(spec->__anon1.specifier == INT128)
+s = "__int128";
 }
 if(s)
 {
@@ -3664,6 +3669,8 @@ else if(spec->type == 0)
 {
 if(spec->__anon1.specifier == INT64)
 s = "int64";
+else if(spec->__anon1.specifier == INT128)
+s = "__int128";
 }
 if(s)
 {
@@ -3805,6 +3812,8 @@ else if(spec->type == 0)
 {
 if(spec->__anon1.specifier == INT64)
 s = "int64";
+else if(spec->__anon1.specifier == INT128)
+s = "__int128";
 }
 if(s)
 {
@@ -4559,6 +4568,8 @@ if(!strcmp(s, "dllexport"))
 specType->dllExport = 1;
 else if(!strcmp(s, "stdcall"))
 specType->attrStdcall = 1;
+else if(!strcmp(s, "__vector_size__"))
+specType->isVector = 1;
 }
 }
 }
@@ -4602,6 +4613,8 @@ specType->isSigned = 0;
 }
 else if(spec->__anon1.specifier == INT64)
 specType->kind = 4;
+else if(spec->__anon1.specifier == INT128)
+specType->kind = 25;
 else if(spec->__anon1.specifier == VALIST)
 specType->kind = 17;
 else if(spec->__anon1.specifier == SHORT)
@@ -4972,9 +4985,33 @@ static struct Type * ProcessTypeDecls(struct __ecereNameSpace__ecere__sys__OldLi
 {
 struct Type * type = parentType;
 struct Declarator * subDecl = decl ? decl->declarator : (((void *)0));
+unsigned int isVector = 0;
 
+if(decl && (decl->type == 6 || decl->type == 7))
+{
+struct ExtDecl * extDecl = decl->__anon1.extended.extended;
+
+if(extDecl && extDecl->type == 1)
+{
+struct __ecereNameSpace__ecere__sys__OldList * attribs = extDecl->__anon1.attr->attribs;
+
+if(attribs)
+{
+struct Attribute * attr;
+
+for(attr = (*attribs).first; attr; attr = attr->next)
+{
+char * s = attr->attr;
+
+if(s)
+if(!strcmp(s, "__vector_size__"))
+isVector = 1;
+}
+}
+}
+}
 if(!parentType)
-type = ProcessTypeSpecs(specs, decl == (((void *)0)), (decl && decl->type == 7) ? 1 : 0);
+type = ProcessTypeSpecs(specs, decl == (((void *)0)), (decl && decl->type == 7 && !isVector) ? 1 : 0);
 if(decl)
 {
 switch(decl->type)
@@ -5021,6 +5058,10 @@ if(!strcmp(s, "dllexport"))
 type->dllExport = 1;
 else if(!strcmp(s, "stdcall"))
 type->attrStdcall = 1;
+else if(!strcmp(s, "__vector_size__"))
+{
+type->isVector = 1;
+}
 }
 }
 }