[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[] =
{
{"aggregatable", tAGGREGATABLE},
{"all_nodes", tALLNODES},
{"allocate", tALLOCATE},
{"annotation", tANNOTATION},
{"apartment", tAPARTMENT},
@ -345,6 +346,7 @@ static const struct keyword attr_keywords[] =
{"disable_consistency_check", tDISABLECONSISTENCYCHECK},
{"displaybind", tDISPLAYBIND},
{"dllname", tDLLNAME},
{"dont_free", tDONTFREE},
{"dual", tDUAL},
{"enable_allocate", tENABLEALLOCATE},
{"encode", tENCODE},
@ -406,6 +408,7 @@ static const struct keyword attr_keywords[] =
{"restricted", tRESTRICTED},
{"retval", tRETVAL},
{"single", tSINGLE},
{"single_node", tSINGLENODE},
{"size_is", tSIZEIS},
{"source", tSOURCE},
{"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
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
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
version 2.2 of Bison. */
#ifndef YY_PARSER_E_REACTOSSYNC_MSVC_HOST_TOOLS_SDK_TOOLS_WIDL_PARSER_TAB_H_INCLUDED
# define YY_PARSER_E_REACTOSSYNC_MSVC_HOST_TOOLS_SDK_TOOLS_WIDL_PARSER_TAB_H_INCLUDED
/* Undocumented macros, especially those whose name start with YY_,
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. */
#ifndef YYDEBUG
# define YYDEBUG 0
@ -68,178 +72,180 @@ extern int parser_debug;
LOGICALAND = 278,
ELLIPSIS = 279,
tAGGREGATABLE = 280,
tALLOCATE = 281,
tANNOTATION = 282,
tAPPOBJECT = 283,
tASYNC = 284,
tASYNCUUID = 285,
tAUTOHANDLE = 286,
tBINDABLE = 287,
tBOOLEAN = 288,
tBROADCAST = 289,
tBYTE = 290,
tBYTECOUNT = 291,
tCALLAS = 292,
tCALLBACK = 293,
tCASE = 294,
tCDECL = 295,
tCHAR = 296,
tCOCLASS = 297,
tCODE = 298,
tCOMMSTATUS = 299,
tCONST = 300,
tCONTEXTHANDLE = 301,
tCONTEXTHANDLENOSERIALIZE = 302,
tCONTEXTHANDLESERIALIZE = 303,
tCONTROL = 304,
tCPPQUOTE = 305,
tDECODE = 306,
tDEFAULT = 307,
tDEFAULTBIND = 308,
tDEFAULTCOLLELEM = 309,
tDEFAULTVALUE = 310,
tDEFAULTVTABLE = 311,
tDISABLECONSISTENCYCHECK = 312,
tDISPLAYBIND = 313,
tDISPINTERFACE = 314,
tDLLNAME = 315,
tDOUBLE = 316,
tDUAL = 317,
tENABLEALLOCATE = 318,
tENCODE = 319,
tENDPOINT = 320,
tENTRY = 321,
tENUM = 322,
tERRORSTATUST = 323,
tEXPLICITHANDLE = 324,
tEXTERN = 325,
tFALSE = 326,
tFASTCALL = 327,
tFAULTSTATUS = 328,
tFLOAT = 329,
tFORCEALLOCATE = 330,
tHANDLE = 331,
tHANDLET = 332,
tHELPCONTEXT = 333,
tHELPFILE = 334,
tHELPSTRING = 335,
tHELPSTRINGCONTEXT = 336,
tHELPSTRINGDLL = 337,
tHIDDEN = 338,
tHYPER = 339,
tID = 340,
tIDEMPOTENT = 341,
tIGNORE = 342,
tIIDIS = 343,
tIMMEDIATEBIND = 344,
tIMPLICITHANDLE = 345,
tIMPORT = 346,
tIMPORTLIB = 347,
tIN = 348,
tIN_LINE = 349,
tINLINE = 350,
tINPUTSYNC = 351,
tINT = 352,
tINT32 = 353,
tINT3264 = 354,
tINT64 = 355,
tINTERFACE = 356,
tLCID = 357,
tLENGTHIS = 358,
tLIBRARY = 359,
tLICENSED = 360,
tLOCAL = 361,
tLONG = 362,
tMAYBE = 363,
tMESSAGE = 364,
tMETHODS = 365,
tMODULE = 366,
tNAMESPACE = 367,
tNOCODE = 368,
tNONBROWSABLE = 369,
tNONCREATABLE = 370,
tNONEXTENSIBLE = 371,
tNOTIFY = 372,
tNOTIFYFLAG = 373,
tNULL = 374,
tOBJECT = 375,
tODL = 376,
tOLEAUTOMATION = 377,
tOPTIMIZE = 378,
tOPTIONAL = 379,
tOUT = 380,
tPARTIALIGNORE = 381,
tPASCAL = 382,
tPOINTERDEFAULT = 383,
tPRAGMA_WARNING = 384,
tPROGID = 385,
tPROPERTIES = 386,
tPROPGET = 387,
tPROPPUT = 388,
tPROPPUTREF = 389,
tPROXY = 390,
tPTR = 391,
tPUBLIC = 392,
tRANGE = 393,
tREADONLY = 394,
tREF = 395,
tREGISTER = 396,
tREPRESENTAS = 397,
tREQUESTEDIT = 398,
tRESTRICTED = 399,
tRETVAL = 400,
tSAFEARRAY = 401,
tSHORT = 402,
tSIGNED = 403,
tSIZEIS = 404,
tSIZEOF = 405,
tSMALL = 406,
tSOURCE = 407,
tSTATIC = 408,
tSTDCALL = 409,
tSTRICTCONTEXTHANDLE = 410,
tSTRING = 411,
tSTRUCT = 412,
tSWITCH = 413,
tSWITCHIS = 414,
tSWITCHTYPE = 415,
tTHREADING = 416,
tTRANSMITAS = 417,
tTRUE = 418,
tTYPEDEF = 419,
tUIDEFAULT = 420,
tUNION = 421,
tUNIQUE = 422,
tUNSIGNED = 423,
tUSESGETLASTERROR = 424,
tUSERMARSHAL = 425,
tUUID = 426,
tV1ENUM = 427,
tVARARG = 428,
tVERSION = 429,
tVIPROGID = 430,
tVOID = 431,
tWCHAR = 432,
tWIREMARSHAL = 433,
tAPARTMENT = 434,
tNEUTRAL = 435,
tSINGLE = 436,
tFREE = 437,
tBOTH = 438,
CAST = 439,
PPTR = 440,
POS = 441,
NEG = 442,
ADDRESSOF = 443
tALLNODES = 281,
tALLOCATE = 282,
tANNOTATION = 283,
tAPPOBJECT = 284,
tASYNC = 285,
tASYNCUUID = 286,
tAUTOHANDLE = 287,
tBINDABLE = 288,
tBOOLEAN = 289,
tBROADCAST = 290,
tBYTE = 291,
tBYTECOUNT = 292,
tCALLAS = 293,
tCALLBACK = 294,
tCASE = 295,
tCDECL = 296,
tCHAR = 297,
tCOCLASS = 298,
tCODE = 299,
tCOMMSTATUS = 300,
tCONST = 301,
tCONTEXTHANDLE = 302,
tCONTEXTHANDLENOSERIALIZE = 303,
tCONTEXTHANDLESERIALIZE = 304,
tCONTROL = 305,
tCPPQUOTE = 306,
tDECODE = 307,
tDEFAULT = 308,
tDEFAULTBIND = 309,
tDEFAULTCOLLELEM = 310,
tDEFAULTVALUE = 311,
tDEFAULTVTABLE = 312,
tDISABLECONSISTENCYCHECK = 313,
tDISPLAYBIND = 314,
tDISPINTERFACE = 315,
tDLLNAME = 316,
tDONTFREE = 317,
tDOUBLE = 318,
tDUAL = 319,
tENABLEALLOCATE = 320,
tENCODE = 321,
tENDPOINT = 322,
tENTRY = 323,
tENUM = 324,
tERRORSTATUST = 325,
tEXPLICITHANDLE = 326,
tEXTERN = 327,
tFALSE = 328,
tFASTCALL = 329,
tFAULTSTATUS = 330,
tFLOAT = 331,
tFORCEALLOCATE = 332,
tHANDLE = 333,
tHANDLET = 334,
tHELPCONTEXT = 335,
tHELPFILE = 336,
tHELPSTRING = 337,
tHELPSTRINGCONTEXT = 338,
tHELPSTRINGDLL = 339,
tHIDDEN = 340,
tHYPER = 341,
tID = 342,
tIDEMPOTENT = 343,
tIGNORE = 344,
tIIDIS = 345,
tIMMEDIATEBIND = 346,
tIMPLICITHANDLE = 347,
tIMPORT = 348,
tIMPORTLIB = 349,
tIN = 350,
tIN_LINE = 351,
tINLINE = 352,
tINPUTSYNC = 353,
tINT = 354,
tINT32 = 355,
tINT3264 = 356,
tINT64 = 357,
tINTERFACE = 358,
tLCID = 359,
tLENGTHIS = 360,
tLIBRARY = 361,
tLICENSED = 362,
tLOCAL = 363,
tLONG = 364,
tMAYBE = 365,
tMESSAGE = 366,
tMETHODS = 367,
tMODULE = 368,
tNAMESPACE = 369,
tNOCODE = 370,
tNONBROWSABLE = 371,
tNONCREATABLE = 372,
tNONEXTENSIBLE = 373,
tNOTIFY = 374,
tNOTIFYFLAG = 375,
tNULL = 376,
tOBJECT = 377,
tODL = 378,
tOLEAUTOMATION = 379,
tOPTIMIZE = 380,
tOPTIONAL = 381,
tOUT = 382,
tPARTIALIGNORE = 383,
tPASCAL = 384,
tPOINTERDEFAULT = 385,
tPRAGMA_WARNING = 386,
tPROGID = 387,
tPROPERTIES = 388,
tPROPGET = 389,
tPROPPUT = 390,
tPROPPUTREF = 391,
tPROXY = 392,
tPTR = 393,
tPUBLIC = 394,
tRANGE = 395,
tREADONLY = 396,
tREF = 397,
tREGISTER = 398,
tREPRESENTAS = 399,
tREQUESTEDIT = 400,
tRESTRICTED = 401,
tRETVAL = 402,
tSAFEARRAY = 403,
tSHORT = 404,
tSIGNED = 405,
tSINGLENODE = 406,
tSIZEIS = 407,
tSIZEOF = 408,
tSMALL = 409,
tSOURCE = 410,
tSTATIC = 411,
tSTDCALL = 412,
tSTRICTCONTEXTHANDLE = 413,
tSTRING = 414,
tSTRUCT = 415,
tSWITCH = 416,
tSWITCHIS = 417,
tSWITCHTYPE = 418,
tTHREADING = 419,
tTRANSMITAS = 420,
tTRUE = 421,
tTYPEDEF = 422,
tUIDEFAULT = 423,
tUNION = 424,
tUNIQUE = 425,
tUNSIGNED = 426,
tUSESGETLASTERROR = 427,
tUSERMARSHAL = 428,
tUUID = 429,
tV1ENUM = 430,
tVARARG = 431,
tVERSION = 432,
tVIPROGID = 433,
tVOID = 434,
tWCHAR = 435,
tWIREMARSHAL = 436,
tAPARTMENT = 437,
tNEUTRAL = 438,
tSINGLE = 439,
tFREE = 440,
tBOTH = 441,
CAST = 442,
PPTR = 443,
POS = 444,
NEG = 445,
ADDRESSOF = 446
};
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 144 "parser.y" /* yacc.c:1909 */
#line 144 "parser.y"
attr_t *attr;
attr_list_t *attr_list;
@ -267,8 +273,10 @@ union YYSTYPE
struct _decl_spec_t *declspec;
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_DECLARED 1
#endif
@ -278,4 +286,4 @@ extern YYSTYPE parser_lval;
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 LOGICALOR LOGICALAND
%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 tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS
%token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE
@ -193,7 +193,7 @@ static typelib_t *current_typelib;
%token tDEFAULTVTABLE
%token tDISABLECONSISTENCYCHECK tDISPLAYBIND
%token tDISPINTERFACE
%token tDLLNAME tDOUBLE tDUAL
%token tDLLNAME tDONTFREE tDOUBLE tDUAL
%token tENABLEALLOCATE tENCODE tENDPOINT
%token tENTRY tENUM tERRORSTATUST
%token tEXPLICITHANDLE tEXTERN
@ -245,7 +245,7 @@ static typelib_t *current_typelib;
%token tRETVAL
%token tSAFEARRAY
%token tSHORT
%token tSIGNED
%token tSIGNED tSINGLENODE
%token tSIZEIS tSIZEOF
%token tSMALL
%token tSOURCE
@ -304,6 +304,7 @@ static typelib_t *current_typelib;
%type <statement> statement typedef pragma_warning
%type <stmt_list> gbl_statements imp_statements int_statements
%type <warning_list> warnings
%type <num> allocate_option_list allocate_option
%left ','
%right '?' ':'
@ -1175,16 +1176,20 @@ version:
acf_statements
: /* empty */
| acf_interface acf_statements
;
acf_int_statements
: /* empty */
| acf_int_statement acf_int_statements
;
acf_int_statement
: tTYPEDEF acf_attributes aKNOWNTYPE ';'
{ type_t *type = find_type_or_error($3, 0);
type->attrs = append_attr_list(type->attrs, $2);
}
;
acf_interface
: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}'
{ 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);
iface->attrs = append_attr_list(iface->attrs, $1);
}
;
acf_attributes
: /* empty */ { $$ = NULL; };
| '[' acf_attribute_list ']' { $$ = $2; };
;
acf_attribute_list
: acf_attribute { $$ = append_attr(NULL, $1); }
| acf_attribute_list ',' acf_attribute { $$ = append_attr($1, $3); }
;
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); }
| 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)
@ -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_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_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" },

File diff suppressed because it is too large Load diff

View file

@ -12,15 +12,250 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 37
#define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#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. */
/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
@ -28,94 +263,79 @@
/* end standard C headers. */
/* begin standard C++ headers. */
/* flex integer type definitions */
#ifndef FLEXINT_H
#define FLEXINT_H
#ifndef YYFLEX_INTTYPES_DEFINED
#define YYFLEX_INTTYPES_DEFINED
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
/* Prefer C99 integer types if available. */
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* Include <inttypes.h> and not <stdint.h> because Solaris 2.6 has the former
* and not the latter.
*/
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif
#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 uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
# else
typedef unsigned char flex_uint8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_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;
# endif
# else
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 */
/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN (-128)
#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
/* TODO: this is always defined, so inline it */
#define yyconst const
#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yyconst
#define yynoreturn
#endif
/* Size of default input buffer. */
#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
#endif /* __ia64__ */
#endif
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
@ -128,9 +348,9 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
typedef size_t yy_size_t;
#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
#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
* characters.
*/
yy_size_t yy_buf_size;
int yy_buf_size;
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
yy_size_t yy_n_chars;
int yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@ -172,7 +392,7 @@ struct yy_buffer_state
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
@ -183,28 +403,31 @@ struct yy_buffer_state
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
void parser_restart (FILE *input_file );
void parser__switch_to_buffer (YY_BUFFER_STATE new_buffer );
YY_BUFFER_STATE parser__create_buffer (FILE *file,int size );
void parser__delete_buffer (YY_BUFFER_STATE b );
void parser__flush_buffer (YY_BUFFER_STATE b );
void parser_push_buffer_state (YY_BUFFER_STATE new_buffer );
void parser_pop_buffer_state (void );
void yyrestart ( FILE *input_file );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
void yy_delete_buffer ( YY_BUFFER_STATE b );
void yy_flush_buffer ( YY_BUFFER_STATE b );
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
void yypop_buffer_state ( void );
YY_BUFFER_STATE parser__scan_buffer (char *base,yy_size_t size );
YY_BUFFER_STATE parser__scan_string (yyconst char *yy_str );
YY_BUFFER_STATE parser__scan_bytes (yyconst char *bytes,yy_size_t len );
YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
void *parser_alloc (yy_size_t );
void *parser_realloc (void *,yy_size_t );
void parser_free (void * );
void *yyalloc ( yy_size_t );
void *yyrealloc ( void *, yy_size_t );
void yyfree ( void * );
/* Begin user sect3 */
extern int parser_lineno;
extern int yylineno;
extern char *parser_text;
#define yytext_ptr parser_text
extern char *yytext;
#ifdef yytext_ptr
#undef yytext_ptr
#endif
#define yytext_ptr yytext
#ifdef YY_HEADER_EXPORT_START_CONDITIONS
#define INITIAL 0
@ -224,7 +447,7 @@ extern char *parser_text;
*/
#include <unistd.h>
#endif
#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif
@ -232,31 +455,31 @@ extern char *parser_text;
/* Accessor methods to globals.
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
* section 1.
@ -264,18 +487,18 @@ void parser_set_lineno (int line_number );
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int parser_wrap (void );
extern "C" int yywrap ( void );
#else
extern int parser_wrap (void );
extern int yywrap ( void );
#endif
#endif
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
static void yy_flex_strncpy ( char *, const char *, int );
#endif
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * );
static int yy_flex_strlen ( const char * );
#endif
#ifndef YY_NO_INPUT
@ -284,7 +507,12 @@ static int yy_flex_strlen (yyconst char * );
/* Amount of stuff to slurp up with each read. */
#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
#endif /* __ia64__ */
#endif
/* Number of entries by which start-condition stack grows. */
@ -298,9 +526,9 @@ static int yy_flex_strlen (yyconst char * );
#ifndef YY_DECL
#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 */
/* 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
#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
#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);
if(is_declptr(ref) && !is_user_type(ref))
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",
@ -2149,6 +2152,10 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
fprintf(file, " [allocated_on_stack]");
if (flags & FC_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");
}

View file

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