[WIDL] Port ALLOCATE attribute support to our WIDL

This commit is contained in:
Eric Kohl 2020-12-26 14:00:26 +01:00
parent 65646a75a2
commit f9220ea444
8 changed files with 3937 additions and 3088 deletions

View file

@ -318,6 +318,7 @@ static const struct keyword keywords[] = {
static const struct keyword attr_keywords[] = static const struct keyword attr_keywords[] =
{ {
{"aggregatable", tAGGREGATABLE}, {"aggregatable", tAGGREGATABLE},
{"all_nodes", tALLNODES},
{"allocate", tALLOCATE}, {"allocate", tALLOCATE},
{"annotation", tANNOTATION}, {"annotation", tANNOTATION},
{"apartment", tAPARTMENT}, {"apartment", tAPARTMENT},
@ -345,6 +346,7 @@ static const struct keyword attr_keywords[] =
{"disable_consistency_check", tDISABLECONSISTENCYCHECK}, {"disable_consistency_check", tDISABLECONSISTENCYCHECK},
{"displaybind", tDISPLAYBIND}, {"displaybind", tDISPLAYBIND},
{"dllname", tDLLNAME}, {"dllname", tDLLNAME},
{"dont_free", tDONTFREE},
{"dual", tDUAL}, {"dual", tDUAL},
{"enable_allocate", tENABLEALLOCATE}, {"enable_allocate", tENABLEALLOCATE},
{"encode", tENCODE}, {"encode", tENCODE},
@ -406,6 +408,7 @@ static const struct keyword attr_keywords[] =
{"restricted", tRESTRICTED}, {"restricted", tRESTRICTED},
{"retval", tRETVAL}, {"retval", tRETVAL},
{"single", tSINGLE}, {"single", tSINGLE},
{"single_node", tSINGLENODE},
{"size_is", tSIZEIS}, {"size_is", tSIZEIS},
{"source", tSOURCE}, {"source", tSOURCE},
{"strict_context_handle", tSTRICTCONTEXTHANDLE}, {"strict_context_handle", tSTRICTCONTEXTHANDLE},

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,9 @@
/* A Bison parser, made by GNU Bison 3.0. */ /* A Bison parser, made by GNU Bison 3.5.4. */
/* Bison interface for Yacc-like parsers in C /* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -30,8 +31,11 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
#ifndef YY_PARSER_E_REACTOSSYNC_MSVC_HOST_TOOLS_SDK_TOOLS_WIDL_PARSER_TAB_H_INCLUDED /* Undocumented macros, especially those whose name start with YY_,
# define YY_PARSER_E_REACTOSSYNC_MSVC_HOST_TOOLS_SDK_TOOLS_WIDL_PARSER_TAB_H_INCLUDED are private implementation details. Do not rely on them. */
#ifndef YY_PARSER_PARSER_TAB_H_INCLUDED
# define YY_PARSER_PARSER_TAB_H_INCLUDED
/* Debug traces. */ /* Debug traces. */
#ifndef YYDEBUG #ifndef YYDEBUG
# define YYDEBUG 0 # define YYDEBUG 0
@ -68,178 +72,180 @@ extern int parser_debug;
LOGICALAND = 278, LOGICALAND = 278,
ELLIPSIS = 279, ELLIPSIS = 279,
tAGGREGATABLE = 280, tAGGREGATABLE = 280,
tALLOCATE = 281, tALLNODES = 281,
tANNOTATION = 282, tALLOCATE = 282,
tAPPOBJECT = 283, tANNOTATION = 283,
tASYNC = 284, tAPPOBJECT = 284,
tASYNCUUID = 285, tASYNC = 285,
tAUTOHANDLE = 286, tASYNCUUID = 286,
tBINDABLE = 287, tAUTOHANDLE = 287,
tBOOLEAN = 288, tBINDABLE = 288,
tBROADCAST = 289, tBOOLEAN = 289,
tBYTE = 290, tBROADCAST = 290,
tBYTECOUNT = 291, tBYTE = 291,
tCALLAS = 292, tBYTECOUNT = 292,
tCALLBACK = 293, tCALLAS = 293,
tCASE = 294, tCALLBACK = 294,
tCDECL = 295, tCASE = 295,
tCHAR = 296, tCDECL = 296,
tCOCLASS = 297, tCHAR = 297,
tCODE = 298, tCOCLASS = 298,
tCOMMSTATUS = 299, tCODE = 299,
tCONST = 300, tCOMMSTATUS = 300,
tCONTEXTHANDLE = 301, tCONST = 301,
tCONTEXTHANDLENOSERIALIZE = 302, tCONTEXTHANDLE = 302,
tCONTEXTHANDLESERIALIZE = 303, tCONTEXTHANDLENOSERIALIZE = 303,
tCONTROL = 304, tCONTEXTHANDLESERIALIZE = 304,
tCPPQUOTE = 305, tCONTROL = 305,
tDECODE = 306, tCPPQUOTE = 306,
tDEFAULT = 307, tDECODE = 307,
tDEFAULTBIND = 308, tDEFAULT = 308,
tDEFAULTCOLLELEM = 309, tDEFAULTBIND = 309,
tDEFAULTVALUE = 310, tDEFAULTCOLLELEM = 310,
tDEFAULTVTABLE = 311, tDEFAULTVALUE = 311,
tDISABLECONSISTENCYCHECK = 312, tDEFAULTVTABLE = 312,
tDISPLAYBIND = 313, tDISABLECONSISTENCYCHECK = 313,
tDISPINTERFACE = 314, tDISPLAYBIND = 314,
tDLLNAME = 315, tDISPINTERFACE = 315,
tDOUBLE = 316, tDLLNAME = 316,
tDUAL = 317, tDONTFREE = 317,
tENABLEALLOCATE = 318, tDOUBLE = 318,
tENCODE = 319, tDUAL = 319,
tENDPOINT = 320, tENABLEALLOCATE = 320,
tENTRY = 321, tENCODE = 321,
tENUM = 322, tENDPOINT = 322,
tERRORSTATUST = 323, tENTRY = 323,
tEXPLICITHANDLE = 324, tENUM = 324,
tEXTERN = 325, tERRORSTATUST = 325,
tFALSE = 326, tEXPLICITHANDLE = 326,
tFASTCALL = 327, tEXTERN = 327,
tFAULTSTATUS = 328, tFALSE = 328,
tFLOAT = 329, tFASTCALL = 329,
tFORCEALLOCATE = 330, tFAULTSTATUS = 330,
tHANDLE = 331, tFLOAT = 331,
tHANDLET = 332, tFORCEALLOCATE = 332,
tHELPCONTEXT = 333, tHANDLE = 333,
tHELPFILE = 334, tHANDLET = 334,
tHELPSTRING = 335, tHELPCONTEXT = 335,
tHELPSTRINGCONTEXT = 336, tHELPFILE = 336,
tHELPSTRINGDLL = 337, tHELPSTRING = 337,
tHIDDEN = 338, tHELPSTRINGCONTEXT = 338,
tHYPER = 339, tHELPSTRINGDLL = 339,
tID = 340, tHIDDEN = 340,
tIDEMPOTENT = 341, tHYPER = 341,
tIGNORE = 342, tID = 342,
tIIDIS = 343, tIDEMPOTENT = 343,
tIMMEDIATEBIND = 344, tIGNORE = 344,
tIMPLICITHANDLE = 345, tIIDIS = 345,
tIMPORT = 346, tIMMEDIATEBIND = 346,
tIMPORTLIB = 347, tIMPLICITHANDLE = 347,
tIN = 348, tIMPORT = 348,
tIN_LINE = 349, tIMPORTLIB = 349,
tINLINE = 350, tIN = 350,
tINPUTSYNC = 351, tIN_LINE = 351,
tINT = 352, tINLINE = 352,
tINT32 = 353, tINPUTSYNC = 353,
tINT3264 = 354, tINT = 354,
tINT64 = 355, tINT32 = 355,
tINTERFACE = 356, tINT3264 = 356,
tLCID = 357, tINT64 = 357,
tLENGTHIS = 358, tINTERFACE = 358,
tLIBRARY = 359, tLCID = 359,
tLICENSED = 360, tLENGTHIS = 360,
tLOCAL = 361, tLIBRARY = 361,
tLONG = 362, tLICENSED = 362,
tMAYBE = 363, tLOCAL = 363,
tMESSAGE = 364, tLONG = 364,
tMETHODS = 365, tMAYBE = 365,
tMODULE = 366, tMESSAGE = 366,
tNAMESPACE = 367, tMETHODS = 367,
tNOCODE = 368, tMODULE = 368,
tNONBROWSABLE = 369, tNAMESPACE = 369,
tNONCREATABLE = 370, tNOCODE = 370,
tNONEXTENSIBLE = 371, tNONBROWSABLE = 371,
tNOTIFY = 372, tNONCREATABLE = 372,
tNOTIFYFLAG = 373, tNONEXTENSIBLE = 373,
tNULL = 374, tNOTIFY = 374,
tOBJECT = 375, tNOTIFYFLAG = 375,
tODL = 376, tNULL = 376,
tOLEAUTOMATION = 377, tOBJECT = 377,
tOPTIMIZE = 378, tODL = 378,
tOPTIONAL = 379, tOLEAUTOMATION = 379,
tOUT = 380, tOPTIMIZE = 380,
tPARTIALIGNORE = 381, tOPTIONAL = 381,
tPASCAL = 382, tOUT = 382,
tPOINTERDEFAULT = 383, tPARTIALIGNORE = 383,
tPRAGMA_WARNING = 384, tPASCAL = 384,
tPROGID = 385, tPOINTERDEFAULT = 385,
tPROPERTIES = 386, tPRAGMA_WARNING = 386,
tPROPGET = 387, tPROGID = 387,
tPROPPUT = 388, tPROPERTIES = 388,
tPROPPUTREF = 389, tPROPGET = 389,
tPROXY = 390, tPROPPUT = 390,
tPTR = 391, tPROPPUTREF = 391,
tPUBLIC = 392, tPROXY = 392,
tRANGE = 393, tPTR = 393,
tREADONLY = 394, tPUBLIC = 394,
tREF = 395, tRANGE = 395,
tREGISTER = 396, tREADONLY = 396,
tREPRESENTAS = 397, tREF = 397,
tREQUESTEDIT = 398, tREGISTER = 398,
tRESTRICTED = 399, tREPRESENTAS = 399,
tRETVAL = 400, tREQUESTEDIT = 400,
tSAFEARRAY = 401, tRESTRICTED = 401,
tSHORT = 402, tRETVAL = 402,
tSIGNED = 403, tSAFEARRAY = 403,
tSIZEIS = 404, tSHORT = 404,
tSIZEOF = 405, tSIGNED = 405,
tSMALL = 406, tSINGLENODE = 406,
tSOURCE = 407, tSIZEIS = 407,
tSTATIC = 408, tSIZEOF = 408,
tSTDCALL = 409, tSMALL = 409,
tSTRICTCONTEXTHANDLE = 410, tSOURCE = 410,
tSTRING = 411, tSTATIC = 411,
tSTRUCT = 412, tSTDCALL = 412,
tSWITCH = 413, tSTRICTCONTEXTHANDLE = 413,
tSWITCHIS = 414, tSTRING = 414,
tSWITCHTYPE = 415, tSTRUCT = 415,
tTHREADING = 416, tSWITCH = 416,
tTRANSMITAS = 417, tSWITCHIS = 417,
tTRUE = 418, tSWITCHTYPE = 418,
tTYPEDEF = 419, tTHREADING = 419,
tUIDEFAULT = 420, tTRANSMITAS = 420,
tUNION = 421, tTRUE = 421,
tUNIQUE = 422, tTYPEDEF = 422,
tUNSIGNED = 423, tUIDEFAULT = 423,
tUSESGETLASTERROR = 424, tUNION = 424,
tUSERMARSHAL = 425, tUNIQUE = 425,
tUUID = 426, tUNSIGNED = 426,
tV1ENUM = 427, tUSESGETLASTERROR = 427,
tVARARG = 428, tUSERMARSHAL = 428,
tVERSION = 429, tUUID = 429,
tVIPROGID = 430, tV1ENUM = 430,
tVOID = 431, tVARARG = 431,
tWCHAR = 432, tVERSION = 432,
tWIREMARSHAL = 433, tVIPROGID = 433,
tAPARTMENT = 434, tVOID = 434,
tNEUTRAL = 435, tWCHAR = 435,
tSINGLE = 436, tWIREMARSHAL = 436,
tFREE = 437, tAPARTMENT = 437,
tBOTH = 438, tNEUTRAL = 438,
CAST = 439, tSINGLE = 439,
PPTR = 440, tFREE = 440,
POS = 441, tBOTH = 441,
NEG = 442, CAST = 442,
ADDRESSOF = 443 PPTR = 443,
POS = 444,
NEG = 445,
ADDRESSOF = 446
}; };
#endif #endif
/* Value type. */ /* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE union YYSTYPE
{ {
#line 144 "parser.y" /* yacc.c:1909 */ #line 144 "parser.y"
attr_t *attr; attr_t *attr;
attr_list_t *attr_list; attr_list_t *attr_list;
@ -267,8 +273,10 @@ union YYSTYPE
struct _decl_spec_t *declspec; struct _decl_spec_t *declspec;
enum storage_class stgclass; enum storage_class stgclass;
#line 271 "parser.tab.h" /* yacc.c:1909 */ #line 277 "parser.tab.h"
}; };
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_DECLARED 1
#endif #endif
@ -278,4 +286,4 @@ extern YYSTYPE parser_lval;
int parser_parse (void); int parser_parse (void);
#endif /* !YY_PARSER_E_REACTOSSYNC_MSVC_HOST_TOOLS_SDK_TOOLS_WIDL_PARSER_TAB_H_INCLUDED */ #endif /* !YY_PARSER_PARSER_TAB_H_INCLUDED */

View file

@ -182,7 +182,7 @@ static typelib_t *current_typelib;
%token GREATEREQUAL LESSEQUAL %token GREATEREQUAL LESSEQUAL
%token LOGICALOR LOGICALAND %token LOGICALOR LOGICALAND
%token ELLIPSIS %token ELLIPSIS
%token tAGGREGATABLE tALLOCATE tANNOTATION tAPPOBJECT tASYNC tASYNCUUID %token tAGGREGATABLE tALLNODES tALLOCATE tANNOTATION tAPPOBJECT tASYNC tASYNCUUID
%token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT %token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT
%token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS %token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS
%token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE %token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE
@ -193,7 +193,7 @@ static typelib_t *current_typelib;
%token tDEFAULTVTABLE %token tDEFAULTVTABLE
%token tDISABLECONSISTENCYCHECK tDISPLAYBIND %token tDISABLECONSISTENCYCHECK tDISPLAYBIND
%token tDISPINTERFACE %token tDISPINTERFACE
%token tDLLNAME tDOUBLE tDUAL %token tDLLNAME tDONTFREE tDOUBLE tDUAL
%token tENABLEALLOCATE tENCODE tENDPOINT %token tENABLEALLOCATE tENCODE tENDPOINT
%token tENTRY tENUM tERRORSTATUST %token tENTRY tENUM tERRORSTATUST
%token tEXPLICITHANDLE tEXTERN %token tEXPLICITHANDLE tEXTERN
@ -245,7 +245,7 @@ static typelib_t *current_typelib;
%token tRETVAL %token tRETVAL
%token tSAFEARRAY %token tSAFEARRAY
%token tSHORT %token tSHORT
%token tSIGNED %token tSIGNED tSINGLENODE
%token tSIZEIS tSIZEOF %token tSIZEIS tSIZEOF
%token tSMALL %token tSMALL
%token tSOURCE %token tSOURCE
@ -304,6 +304,7 @@ static typelib_t *current_typelib;
%type <statement> statement typedef pragma_warning %type <statement> statement typedef pragma_warning
%type <stmt_list> gbl_statements imp_statements int_statements %type <stmt_list> gbl_statements imp_statements int_statements
%type <warning_list> warnings %type <warning_list> warnings
%type <num> allocate_option_list allocate_option
%left ',' %left ','
%right '?' ':' %right '?' ':'
@ -1175,16 +1176,20 @@ version:
acf_statements acf_statements
: /* empty */ : /* empty */
| acf_interface acf_statements | acf_interface acf_statements
;
acf_int_statements acf_int_statements
: /* empty */ : /* empty */
| acf_int_statement acf_int_statements | acf_int_statement acf_int_statements
;
acf_int_statement acf_int_statement
: tTYPEDEF acf_attributes aKNOWNTYPE ';' : tTYPEDEF acf_attributes aKNOWNTYPE ';'
{ type_t *type = find_type_or_error($3, 0); { type_t *type = find_type_or_error($3, 0);
type->attrs = append_attr_list(type->attrs, $2); type->attrs = append_attr_list(type->attrs, $2);
} }
;
acf_interface acf_interface
: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}' : acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'
{ type_t *iface = find_type_or_error2($3, 0); { type_t *iface = find_type_or_error2($3, 0);
@ -1192,20 +1197,38 @@ acf_interface
error_loc("%s is not an interface\n", iface->name); error_loc("%s is not an interface\n", iface->name);
iface->attrs = append_attr_list(iface->attrs, $1); iface->attrs = append_attr_list(iface->attrs, $1);
} }
;
acf_attributes acf_attributes
: /* empty */ { $$ = NULL; }; : /* empty */ { $$ = NULL; };
| '[' acf_attribute_list ']' { $$ = $2; }; | '[' acf_attribute_list ']' { $$ = $2; };
;
acf_attribute_list acf_attribute_list
: acf_attribute { $$ = append_attr(NULL, $1); } : acf_attribute { $$ = append_attr(NULL, $1); }
| acf_attribute_list ',' acf_attribute { $$ = append_attr($1, $3); } | acf_attribute_list ',' acf_attribute { $$ = append_attr($1, $3); }
;
acf_attribute acf_attribute
: tENCODE { $$ = make_attr(ATTR_ENCODE); } : tALLOCATE '(' allocate_option_list ')'
{ $$ = make_attrv(ATTR_ALLOCATE, $3); }
| tENCODE { $$ = make_attr(ATTR_ENCODE); }
| tDECODE { $$ = make_attr(ATTR_DECODE); } | tDECODE { $$ = make_attr(ATTR_DECODE); }
| tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } | tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); }
;
allocate_option_list
: allocate_option { $$ = $1; }
| allocate_option_list ',' allocate_option
{ $$ = $1 | $3; }
;
allocate_option
: tDONTFREE { $$ = FC_DONT_FREE; }
| tFREE { $$ = 0; }
| tALLNODES { $$ = FC_ALLOCATE_ALL_NODES; }
| tSINGLENODE { $$ = 0; }
;
%% %%
static void decl_builtin_basic(const char *name, enum type_basic_type type) static void decl_builtin_basic(const char *name, enum type_basic_type type)
@ -2193,6 +2216,7 @@ struct allowed_attr allowed_attr[] =
{ {
/* attr { D ACF I Fn ARG T En St Un Fi L DI M C <display name> } */ /* attr { D ACF I Fn ARG T En St Un Fi L DI M C <display name> } */
/* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" }, /* ATTR_AGGREGATABLE */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" },
/* ATTR_ALLOCATE */ { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "allocate" },
/* ATTR_ANNOTATION */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" }, /* ATTR_ANNOTATION */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
/* ATTR_APPOBJECT */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" }, /* ATTR_APPOBJECT */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" },
/* ATTR_ASYNC */ { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" }, /* ATTR_ASYNC */ { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },

File diff suppressed because it is too large Load diff

View file

@ -12,15 +12,250 @@
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 37 #define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0 #if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA #define FLEX_BETA
#endif #endif
#ifdef yy_create_buffer
#define parser__create_buffer_ALREADY_DEFINED
#else
#define yy_create_buffer parser__create_buffer
#endif
#ifdef yy_delete_buffer
#define parser__delete_buffer_ALREADY_DEFINED
#else
#define yy_delete_buffer parser__delete_buffer
#endif
#ifdef yy_scan_buffer
#define parser__scan_buffer_ALREADY_DEFINED
#else
#define yy_scan_buffer parser__scan_buffer
#endif
#ifdef yy_scan_string
#define parser__scan_string_ALREADY_DEFINED
#else
#define yy_scan_string parser__scan_string
#endif
#ifdef yy_scan_bytes
#define parser__scan_bytes_ALREADY_DEFINED
#else
#define yy_scan_bytes parser__scan_bytes
#endif
#ifdef yy_init_buffer
#define parser__init_buffer_ALREADY_DEFINED
#else
#define yy_init_buffer parser__init_buffer
#endif
#ifdef yy_flush_buffer
#define parser__flush_buffer_ALREADY_DEFINED
#else
#define yy_flush_buffer parser__flush_buffer
#endif
#ifdef yy_load_buffer_state
#define parser__load_buffer_state_ALREADY_DEFINED
#else
#define yy_load_buffer_state parser__load_buffer_state
#endif
#ifdef yy_switch_to_buffer
#define parser__switch_to_buffer_ALREADY_DEFINED
#else
#define yy_switch_to_buffer parser__switch_to_buffer
#endif
#ifdef yypush_buffer_state
#define parser_push_buffer_state_ALREADY_DEFINED
#else
#define yypush_buffer_state parser_push_buffer_state
#endif
#ifdef yypop_buffer_state
#define parser_pop_buffer_state_ALREADY_DEFINED
#else
#define yypop_buffer_state parser_pop_buffer_state
#endif
#ifdef yyensure_buffer_stack
#define parser_ensure_buffer_stack_ALREADY_DEFINED
#else
#define yyensure_buffer_stack parser_ensure_buffer_stack
#endif
#ifdef yylex
#define parser_lex_ALREADY_DEFINED
#else
#define yylex parser_lex
#endif
#ifdef yyrestart
#define parser_restart_ALREADY_DEFINED
#else
#define yyrestart parser_restart
#endif
#ifdef yylex_init
#define parser_lex_init_ALREADY_DEFINED
#else
#define yylex_init parser_lex_init
#endif
#ifdef yylex_init_extra
#define parser_lex_init_extra_ALREADY_DEFINED
#else
#define yylex_init_extra parser_lex_init_extra
#endif
#ifdef yylex_destroy
#define parser_lex_destroy_ALREADY_DEFINED
#else
#define yylex_destroy parser_lex_destroy
#endif
#ifdef yyget_debug
#define parser_get_debug_ALREADY_DEFINED
#else
#define yyget_debug parser_get_debug
#endif
#ifdef yyset_debug
#define parser_set_debug_ALREADY_DEFINED
#else
#define yyset_debug parser_set_debug
#endif
#ifdef yyget_extra
#define parser_get_extra_ALREADY_DEFINED
#else
#define yyget_extra parser_get_extra
#endif
#ifdef yyset_extra
#define parser_set_extra_ALREADY_DEFINED
#else
#define yyset_extra parser_set_extra
#endif
#ifdef yyget_in
#define parser_get_in_ALREADY_DEFINED
#else
#define yyget_in parser_get_in
#endif
#ifdef yyset_in
#define parser_set_in_ALREADY_DEFINED
#else
#define yyset_in parser_set_in
#endif
#ifdef yyget_out
#define parser_get_out_ALREADY_DEFINED
#else
#define yyget_out parser_get_out
#endif
#ifdef yyset_out
#define parser_set_out_ALREADY_DEFINED
#else
#define yyset_out parser_set_out
#endif
#ifdef yyget_leng
#define parser_get_leng_ALREADY_DEFINED
#else
#define yyget_leng parser_get_leng
#endif
#ifdef yyget_text
#define parser_get_text_ALREADY_DEFINED
#else
#define yyget_text parser_get_text
#endif
#ifdef yyget_lineno
#define parser_get_lineno_ALREADY_DEFINED
#else
#define yyget_lineno parser_get_lineno
#endif
#ifdef yyset_lineno
#define parser_set_lineno_ALREADY_DEFINED
#else
#define yyset_lineno parser_set_lineno
#endif
#ifdef yywrap
#define parser_wrap_ALREADY_DEFINED
#else
#define yywrap parser_wrap
#endif
#ifdef yyalloc
#define parser_alloc_ALREADY_DEFINED
#else
#define yyalloc parser_alloc
#endif
#ifdef yyrealloc
#define parser_realloc_ALREADY_DEFINED
#else
#define yyrealloc parser_realloc
#endif
#ifdef yyfree
#define parser_free_ALREADY_DEFINED
#else
#define yyfree parser_free
#endif
#ifdef yytext
#define parser_text_ALREADY_DEFINED
#else
#define yytext parser_text
#endif
#ifdef yyleng
#define parser_leng_ALREADY_DEFINED
#else
#define yyleng parser_leng
#endif
#ifdef yyin
#define parser_in_ALREADY_DEFINED
#else
#define yyin parser_in
#endif
#ifdef yyout
#define parser_out_ALREADY_DEFINED
#else
#define yyout parser_out
#endif
#ifdef yy_flex_debug
#define parser__flex_debug_ALREADY_DEFINED
#else
#define yy_flex_debug parser__flex_debug
#endif
#ifdef yylineno
#define parser_lineno_ALREADY_DEFINED
#else
#define yylineno parser_lineno
#endif
/* First, we deal with platform-specific or compiler-specific issues. */ /* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */ /* begin standard C headers. */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
@ -28,23 +263,30 @@
/* end standard C headers. */ /* end standard C headers. */
/* begin standard C++ headers. */
/* flex integer type definitions */ /* flex integer type definitions */
#ifndef FLEXINT_H #ifndef YYFLEX_INTTYPES_DEFINED
#define FLEXINT_H #define YYFLEX_INTTYPES_DEFINED
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
/* Prefer C99 integer types if available. */
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* Include <inttypes.h> and not <stdint.h> because Solaris 2.6 has the former
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * and not the latter.
* if you want the limit (max/min) macros for int types.
*/ */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif
#include <inttypes.h> #include <inttypes.h>
# define YYFLEX_USE_STDINT
# else
# if defined(_MSC_VER) && _MSC_VER >= 1600
/* Visual C++ 2010 does not define __STDC_VERSION__ and has <stdint.h> but not
* <inttypes.h>.
*/
#include <stdint.h>
# define YYFLEX_USE_STDINT
# endif
# endif
# ifdef YYFLEX_USE_STDINT
typedef int8_t flex_int8_t; typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t; typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t; typedef int16_t flex_int16_t;
@ -52,70 +294,48 @@ typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t; typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t; typedef uint32_t flex_uint32_t;
# else # else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; typedef unsigned char flex_uint8_t;
typedef short int flex_int16_t;
typedef unsigned short int flex_uint16_t; typedef unsigned short int flex_uint16_t;
# ifdef __STDC__
typedef signed char flex_int8_t;
/* ISO C only requires at least 16 bits for int. */
#include <limits.h>
# if UINT_MAX >= 4294967295
# define YYFLEX_INT32_DEFINED
typedef int flex_int32_t;
typedef unsigned int flex_uint32_t; typedef unsigned int flex_uint32_t;
/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN (-128)
# endif # endif
#ifndef INT16_MIN
#define INT16_MIN (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX (4294967295U)
#endif
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)
#define YY_USE_CONST
#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
#define yyconst const
# else # else
#define yyconst typedef char flex_int8_t;
# endif
# ifndef YYFLEX_INT32_DEFINED
typedef long int flex_int32_t;
typedef unsigned long int flex_uint32_t;
# endif
# endif
#endif /* YYFLEX_INTTYPES_DEFINED */
/* TODO: this is always defined, so inline it */
#define yyconst const
#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yynoreturn
#endif #endif
/* Size of default input buffer. */ /* Size of default input buffer. */
#ifndef YY_BUF_SIZE #ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
* Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
* Ditto for the __ia64__ case accordingly.
*/
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 16384 #define YY_BUF_SIZE 16384
#endif /* __ia64__ */
#endif #endif
#ifndef YY_TYPEDEF_YY_BUFFER_STATE #ifndef YY_TYPEDEF_YY_BUFFER_STATE
@ -128,9 +348,9 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
typedef size_t yy_size_t; typedef size_t yy_size_t;
#endif #endif
extern yy_size_t parser_leng; extern int yyleng;
extern FILE *parser_in, *parser_out; extern FILE *yyin, *yyout;
#ifndef YY_STRUCT_YY_BUFFER_STATE #ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE
@ -144,12 +364,12 @@ struct yy_buffer_state
/* Size of input buffer in bytes, not including room for EOB /* Size of input buffer in bytes, not including room for EOB
* characters. * characters.
*/ */
yy_size_t yy_buf_size; int yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB /* Number of characters read into yy_ch_buf, not including EOB
* characters. * characters.
*/ */
yy_size_t yy_n_chars; int yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it, /* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to * and can realloc() it to grow it, and should free() it to
@ -183,28 +403,31 @@ struct yy_buffer_state
}; };
#endif /* !YY_STRUCT_YY_BUFFER_STATE */ #endif /* !YY_STRUCT_YY_BUFFER_STATE */
void parser_restart (FILE *input_file ); void yyrestart ( FILE *input_file );
void parser__switch_to_buffer (YY_BUFFER_STATE new_buffer ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
YY_BUFFER_STATE parser__create_buffer (FILE *file,int size ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
void parser__delete_buffer (YY_BUFFER_STATE b ); void yy_delete_buffer ( YY_BUFFER_STATE b );
void parser__flush_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer ( YY_BUFFER_STATE b );
void parser_push_buffer_state (YY_BUFFER_STATE new_buffer ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
void parser_pop_buffer_state (void ); void yypop_buffer_state ( void );
YY_BUFFER_STATE parser__scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
YY_BUFFER_STATE parser__scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
YY_BUFFER_STATE parser__scan_bytes (yyconst char *bytes,yy_size_t len ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
void *parser_alloc (yy_size_t ); void *yyalloc ( yy_size_t );
void *parser_realloc (void *,yy_size_t ); void *yyrealloc ( void *, yy_size_t );
void parser_free (void * ); void yyfree ( void * );
/* Begin user sect3 */ /* Begin user sect3 */
extern int parser_lineno; extern int yylineno;
extern char *parser_text; extern char *yytext;
#define yytext_ptr parser_text #ifdef yytext_ptr
#undef yytext_ptr
#endif
#define yytext_ptr yytext
#ifdef YY_HEADER_EXPORT_START_CONDITIONS #ifdef YY_HEADER_EXPORT_START_CONDITIONS
#define INITIAL 0 #define INITIAL 0
@ -232,31 +455,31 @@ extern char *parser_text;
/* Accessor methods to globals. /* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */ These are made visible to non-reentrant scanners for convenience. */
int parser_lex_destroy (void ); int yylex_destroy ( void );
int parser_get_debug (void ); int yyget_debug ( void );
void parser_set_debug (int debug_flag ); void yyset_debug ( int debug_flag );
YY_EXTRA_TYPE parser_get_extra (void ); YY_EXTRA_TYPE yyget_extra ( void );
void parser_set_extra (YY_EXTRA_TYPE user_defined ); void yyset_extra ( YY_EXTRA_TYPE user_defined );
FILE *parser_get_in (void ); FILE *yyget_in ( void );
void parser_set_in (FILE * in_str ); void yyset_in ( FILE * _in_str );
FILE *parser_get_out (void ); FILE *yyget_out ( void );
void parser_set_out (FILE * out_str ); void yyset_out ( FILE * _out_str );
yy_size_t parser_get_leng (void ); int yyget_leng ( void );
char *parser_get_text (void ); char *yyget_text ( void );
int parser_get_lineno (void ); int yyget_lineno ( void );
void parser_set_lineno (int line_number ); void yyset_lineno ( int _line_number );
/* Macros after this point can all be overridden by user definitions in /* Macros after this point can all be overridden by user definitions in
* section 1. * section 1.
@ -264,18 +487,18 @@ void parser_set_lineno (int line_number );
#ifndef YY_SKIP_YYWRAP #ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus #ifdef __cplusplus
extern "C" int parser_wrap (void ); extern "C" int yywrap ( void );
#else #else
extern int parser_wrap (void ); extern int yywrap ( void );
#endif #endif
#endif #endif
#ifndef yytext_ptr #ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ); static void yy_flex_strncpy ( char *, const char *, int );
#endif #endif
#ifdef YY_NEED_STRLEN #ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * ); static int yy_flex_strlen ( const char * );
#endif #endif
#ifndef YY_NO_INPUT #ifndef YY_NO_INPUT
@ -284,7 +507,12 @@ static int yy_flex_strlen (yyconst char * );
/* Amount of stuff to slurp up with each read. */ /* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE #ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 8192 #define YY_READ_BUF_SIZE 8192
#endif /* __ia64__ */
#endif #endif
/* Number of entries by which start-condition stack grows. */ /* Number of entries by which start-condition stack grows. */
@ -298,9 +526,9 @@ static int yy_flex_strlen (yyconst char * );
#ifndef YY_DECL #ifndef YY_DECL
#define YY_DECL_IS_OURS 1 #define YY_DECL_IS_OURS 1
extern int parser_lex (void); extern int yylex (void);
#define YY_DECL int parser_lex (void) #define YY_DECL int yylex (void)
#endif /* !YY_DECL */ #endif /* !YY_DECL */
/* yy_get_previous_state - get the state just before the EOB char was reached */ /* yy_get_previous_state - get the state just before the EOB char was reached */
@ -317,9 +545,154 @@ extern int parser_lex (void);
#undef YY_DECL #undef YY_DECL
#endif #endif
#line 238 "parser.l" #ifndef parser__create_buffer_ALREADY_DEFINED
#undef yy_create_buffer
#endif
#ifndef parser__delete_buffer_ALREADY_DEFINED
#undef yy_delete_buffer
#endif
#ifndef parser__scan_buffer_ALREADY_DEFINED
#undef yy_scan_buffer
#endif
#ifndef parser__scan_string_ALREADY_DEFINED
#undef yy_scan_string
#endif
#ifndef parser__scan_bytes_ALREADY_DEFINED
#undef yy_scan_bytes
#endif
#ifndef parser__init_buffer_ALREADY_DEFINED
#undef yy_init_buffer
#endif
#ifndef parser__flush_buffer_ALREADY_DEFINED
#undef yy_flush_buffer
#endif
#ifndef parser__load_buffer_state_ALREADY_DEFINED
#undef yy_load_buffer_state
#endif
#ifndef parser__switch_to_buffer_ALREADY_DEFINED
#undef yy_switch_to_buffer
#endif
#ifndef parser_push_buffer_state_ALREADY_DEFINED
#undef yypush_buffer_state
#endif
#ifndef parser_pop_buffer_state_ALREADY_DEFINED
#undef yypop_buffer_state
#endif
#ifndef parser_ensure_buffer_stack_ALREADY_DEFINED
#undef yyensure_buffer_stack
#endif
#ifndef parser_lex_ALREADY_DEFINED
#undef yylex
#endif
#ifndef parser_restart_ALREADY_DEFINED
#undef yyrestart
#endif
#ifndef parser_lex_init_ALREADY_DEFINED
#undef yylex_init
#endif
#ifndef parser_lex_init_extra_ALREADY_DEFINED
#undef yylex_init_extra
#endif
#ifndef parser_lex_destroy_ALREADY_DEFINED
#undef yylex_destroy
#endif
#ifndef parser_get_debug_ALREADY_DEFINED
#undef yyget_debug
#endif
#ifndef parser_set_debug_ALREADY_DEFINED
#undef yyset_debug
#endif
#ifndef parser_get_extra_ALREADY_DEFINED
#undef yyget_extra
#endif
#ifndef parser_set_extra_ALREADY_DEFINED
#undef yyset_extra
#endif
#ifndef parser_get_in_ALREADY_DEFINED
#undef yyget_in
#endif
#ifndef parser_set_in_ALREADY_DEFINED
#undef yyset_in
#endif
#ifndef parser_get_out_ALREADY_DEFINED
#undef yyget_out
#endif
#ifndef parser_set_out_ALREADY_DEFINED
#undef yyset_out
#endif
#ifndef parser_get_leng_ALREADY_DEFINED
#undef yyget_leng
#endif
#ifndef parser_get_text_ALREADY_DEFINED
#undef yyget_text
#endif
#ifndef parser_get_lineno_ALREADY_DEFINED
#undef yyget_lineno
#endif
#ifndef parser_set_lineno_ALREADY_DEFINED
#undef yyset_lineno
#endif
#ifndef parser_get_column_ALREADY_DEFINED
#undef yyget_column
#endif
#ifndef parser_set_column_ALREADY_DEFINED
#undef yyset_column
#endif
#ifndef parser_wrap_ALREADY_DEFINED
#undef yywrap
#endif
#ifndef parser_get_lval_ALREADY_DEFINED
#undef yyget_lval
#endif
#ifndef parser_set_lval_ALREADY_DEFINED
#undef yyset_lval
#endif
#ifndef parser_get_lloc_ALREADY_DEFINED
#undef yyget_lloc
#endif
#ifndef parser_set_lloc_ALREADY_DEFINED
#undef yyset_lloc
#endif
#ifndef parser_alloc_ALREADY_DEFINED
#undef yyalloc
#endif
#ifndef parser_realloc_ALREADY_DEFINED
#undef yyrealloc
#endif
#ifndef parser_free_ALREADY_DEFINED
#undef yyfree
#endif
#ifndef parser_text_ALREADY_DEFINED
#undef yytext
#endif
#ifndef parser_leng_ALREADY_DEFINED
#undef yyleng
#endif
#ifndef parser_in_ALREADY_DEFINED
#undef yyin
#endif
#ifndef parser_out_ALREADY_DEFINED
#undef yyout
#endif
#ifndef parser__flex_debug_ALREADY_DEFINED
#undef yy_flex_debug
#endif
#ifndef parser_lineno_ALREADY_DEFINED
#undef yylineno
#endif
#ifndef parser_tables_fload_ALREADY_DEFINED
#undef yytables_fload
#endif
#ifndef parser_tables_destroy_ALREADY_DEFINED
#undef yytables_destroy
#endif
#ifndef parser_TABLES_NAME_ALREADY_DEFINED
#undef yyTABLES_NAME
#endif
#line 239 "parser.l"
#line 324 "parser.yy.h" #line 697 "parser.yy.h"
#undef parser_IN_HEADER #undef parser_IN_HEADER
#endif /* parser_HEADER_H */ #endif /* parser_HEADER_H */

View file

@ -2137,6 +2137,9 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
type_t *ref = type_pointer_get_ref(type); type_t *ref = type_pointer_get_ref(type);
if(is_declptr(ref) && !is_user_type(ref)) if(is_declptr(ref) && !is_user_type(ref))
flags |= FC_POINTER_DEREF; flags |= FC_POINTER_DEREF;
if (pointer_type != FC_RP) {
flags |= get_attrv(type->attrs, ATTR_ALLOCATE);
}
} }
print_file(file, 2, "0x%x, 0x%x,\t\t/* %s", print_file(file, 2, "0x%x, 0x%x,\t\t/* %s",
@ -2149,6 +2152,10 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
fprintf(file, " [allocated_on_stack]"); fprintf(file, " [allocated_on_stack]");
if (flags & FC_POINTER_DEREF) if (flags & FC_POINTER_DEREF)
fprintf(file, " [pointer_deref]"); fprintf(file, " [pointer_deref]");
if (flags & FC_DONT_FREE)
fprintf(file, " [dont_free]");
if (flags & FC_ALLOCATE_ALL_NODES)
fprintf(file, " [all_nodes]");
fprintf(file, " */\n"); fprintf(file, " */\n");
} }

View file

@ -68,6 +68,7 @@ typedef struct list warning_list_t;
enum attr_type enum attr_type
{ {
ATTR_AGGREGATABLE, ATTR_AGGREGATABLE,
ATTR_ALLOCATE,
ATTR_ANNOTATION, ATTR_ANNOTATION,
ATTR_APPOBJECT, ATTR_APPOBJECT,
ATTR_ASYNC, ATTR_ASYNC,