X-Git-Url: http://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=compiler%2Fbootstrap%2Flibec%2Fbootstrap%2Fast.c;h=b6c1345f802d89cebfb4b4349b4ab639f099bf17;hb=a7d1c37e1a3ee9ba7ed4c04175d6642bd7729498;hp=3ec4dbd2e5ad05bcc6f7851748a0c918c6f2edd3;hpb=160802138aad0bc0cdd91afa604bd7947c126a18;p=sdk diff --git a/compiler/bootstrap/libec/bootstrap/ast.c b/compiler/bootstrap/libec/bootstrap/ast.c index 3ec4dbd..b6c1345 100644 --- a/compiler/bootstrap/libec/bootstrap/ast.c +++ b/compiler/bootstrap/libec/bootstrap/ast.c @@ -51,7 +51,7 @@ typedef unsigned __int64 uint64; #include 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; +} } } }