/* **============================================================================== ** ** Open Management Infrastructure (OMI) ** ** Copyright (c) Microsoft Corporation ** ** Licensed under the Apache License, Version 2.0 (the "License"); you may not ** use this file except in compliance with the License. You may obtain a copy ** of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABLITY OR NON-INFRINGEMENT. ** ** See the Apache 2 License for the specific language governing permissions ** and limitations under the License. ** **============================================================================== */ #ifndef lint static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYPATCH 20110908 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYPREFIX "yy" #define YYPURE 0 #line 2 "mof.y" #include "config.h" #include #include #include #include "config.h" #include "buffer.h" #include "types.h" #include "state.h" #include "ptrarray.h" #define ARRAYOF(TYPE) ((MI_Uint32)TYPE | (MI_Uint32)MI_ARRAY_BIT) extern int yylex(); extern int openIncludeFile(const char* path); #line 20 "mof.y" #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union { MI_Boolean boolean; MI_Sint64 integer; MI_Real64 real; MI_Char16 character; char* string; char* identifier; char* dollarIdentifier; MI_Type type; MI_PropertyDecl* property; MI_MethodDecl* methodDecl; MI_ParameterDecl* parameter; MOF_ParameterList parameterList; MOF_FeatureList featureList; MI_QualifierDecl* qualifierDeclaration; MOF_ConstantValue constantValue; MOF_Initializer initializer; MI_Uint32 flags; MI_Qualifier* qualifier; MOF_QualifierList qualifierList; MI_ClassDecl* classDeclaration; MI_InstanceDecl* instanceDeclaration; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 68 "y.tab.c" /* compatibility with bison */ #ifdef YYPARSE_PARAM /* compatibility with FreeBSD */ # ifdef YYPARSE_PARAM_TYPE # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) # else # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) # endif #else # define YYPARSE_DECL() yyparse(void) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # define YYLEX_DECL() yylex(void *YYLEX_PARAM) # define YYLEX yylex(YYLEX_PARAM) #else # define YYLEX_DECL() yylex(void) # define YYLEX yylex() #endif /* Parameters sent to yyerror. */ #define YYERROR_DECL() yyerror(const char *s) #define YYERROR_CALL(msg) yyerror(msg) extern int YYPARSE_DECL(); #define TOK_ERROR 257 #define TOK_BOOLEAN 258 #define TOK_SINT8 259 #define TOK_UINT8 260 #define TOK_SINT16 261 #define TOK_UINT16 262 #define TOK_SINT32 263 #define TOK_UINT32 264 #define TOK_SINT64 265 #define TOK_UINT64 266 #define TOK_REAL32 267 #define TOK_REAL64 268 #define TOK_DATETIME 269 #define TOK_CHAR16 270 #define TOK_STRING 271 #define TOK_BOOLEAN_VALUE 272 #define TOK_REF 273 #define TOK_SCOPE 274 #define TOK_CLASS 275 #define TOK_ASSOCIATION 276 #define TOK_INDICATION 277 #define TOK_QUALIFIER 278 #define TOK_PROPERTY 279 #define TOK_REFERENCE 280 #define TOK_METHOD 281 #define TOK_PARAMETER 282 #define TOK_ANY 283 #define TOK_FLAVOR 284 #define TOK_ENABLEOVERRIDE 285 #define TOK_DISABLEOVERRIDE 286 #define TOK_RESTRICTED 287 #define TOK_TOSUBCLASS 288 #define TOK_TRANSLATABLE 289 #define TOK_INSTANCE 290 #define TOK_OF 291 #define TOK_AS 292 #define TOK_PRAGMA 293 #define TOK_SCHEMA 294 #define TOK_INTEGER_VALUE 295 #define TOK_REAL_VALUE 296 #define TOK_STRING_VALUE 297 #define TOK_CHAR_VALUE 298 #define TOK_IDENT 299 #define TOK_ALIAS_IDENTIFIER 300 #define TOK_NULL 301 #define YYERRCODE 256 static const short yylhs[] = { -1, 0, 0, 0, 35, 35, 35, 35, 36, 31, 31, 31, 31, 13, 13, 12, 12, 12, 12, 12, 12, 29, 28, 28, 27, 27, 27, 27, 30, 30, 25, 25, 24, 24, 24, 24, 24, 7, 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 11, 11, 11, 11, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 17, 17, 18, 18, 18, 19, 20, 20, 5, 5, 5, 5, 5, 5, 1, 1, 15, 15, 16, 16, 16, 16, 23, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 26, 32, 32, 32, 32, 14, 4, 34, 34, 33, 33, 2, 2, 2, 2, 2, }; static const short yylen[] = { 2, 1, 2, 1, 1, 1, 1, 1, 5, 3, 5, 4, 6, 4, 3, 1, 1, 1, 2, 2, 2, 3, 1, 3, 1, 2, 3, 4, 3, 1, 1, 3, 1, 1, 1, 1, 1, 3, 4, 4, 5, 5, 6, 6, 7, 3, 4, 4, 5, 6, 7, 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 2, 2, 3, 3, 3, 3, 4, 4, 3, 2, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 2, 4, 3, 5, 5, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4, 5, 5, 6, 4, 2, 1, 2, 4, 5, 1, 1, 1, 1, 1, }; static const short yydefred[] = { 0, 3, 0, 0, 0, 0, 0, 0, 6, 0, 5, 7, 1, 4, 123, 124, 126, 125, 122, 0, 0, 0, 0, 0, 22, 0, 2, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 29, 0, 21, 0, 0, 0, 0, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 64, 66, 0, 0, 0, 0, 15, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 112, 92, 0, 90, 86, 87, 88, 91, 0, 0, 32, 33, 34, 35, 36, 26, 84, 0, 0, 23, 0, 11, 0, 10, 14, 67, 0, 0, 0, 18, 20, 19, 0, 0, 0, 0, 0, 0, 94, 0, 0, 117, 0, 0, 118, 0, 114, 93, 8, 28, 83, 0, 27, 0, 0, 113, 82, 45, 80, 0, 81, 0, 37, 0, 0, 13, 0, 0, 0, 79, 97, 0, 0, 0, 95, 0, 0, 0, 119, 85, 12, 115, 47, 0, 0, 0, 68, 0, 0, 0, 39, 0, 46, 0, 0, 38, 0, 0, 78, 99, 103, 104, 105, 106, 107, 108, 109, 110, 101, 0, 0, 0, 0, 116, 51, 0, 0, 0, 0, 0, 0, 41, 0, 48, 0, 0, 0, 40, 0, 100, 0, 30, 0, 120, 0, 75, 74, 49, 69, 0, 0, 43, 52, 0, 42, 0, 102, 111, 0, 121, 77, 76, 50, 44, 31, }; static const short yydgoto[] = { 7, 83, 61, 159, 74, 133, 160, 64, 161, 162, 65, 66, 67, 31, 75, 8, 33, 111, 134, 135, 92, 183, 184, 71, 90, 207, 115, 24, 25, 163, 40, 10, 11, 119, 120, 12, 13, }; static const short yysindex[] = { 55, 0, -138, -138, -273, -278, -138, 53, 0, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, -39, 33, -138, -13, -27, 0, -16, 0, -138, -258, -138, -89, 0, 210, 2, -108, -239, -187, -123, -187, 0, 34, 0, -138, -35, -138, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, -168, -138, -138, 0, 0, 0, -65, 135, -21, -167, -12, -185, 45, 4, 0, 0, -40, 0, 0, 0, 0, 0, -176, 85, 0, 0, 0, 0, 0, 0, 0, -22, -123, 0, -138, 0, -108, 0, 0, 0, -11, -2, 71, 0, 0, 0, -138, -138, -88, 69, 67, 92, 0, -150, 84, 0, 74, -138, 0, 58, 0, 0, 0, 0, 0, -187, 0, -30, 4, 0, 0, 0, 0, 86, 0, -41, 0, 69, 8, 0, -4, 3, 54, 0, 0, 69, -125, 108, 0, 69, 98, 94, 0, 0, 0, 0, 0, 101, -138, -138, 0, -7, 135, 109, 0, 69, 0, 126, -17, 0, 69, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, -123, 127, 69, 0, 0, 117, 117, 130, 40, -138, -138, 0, 150, 0, 154, 27, 157, 0, 69, 0, -125, 0, 39, 0, 172, 0, 0, 0, 0, 117, 117, 0, 0, 173, 0, 174, 0, 0, -123, 0, 0, 0, 0, 0, 0, }; static const short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const short yygindex[] = { 0, 205, 347, -23, 158, -28, -26, 189, 73, 95, 198, 200, 0, -31, -25, 0, 0, -91, -85, 246, 0, 65, 0, 0, -90, 0, 0, 229, 0, 9, 0, 0, 0, 152, 0, 266, 0, }; #define YYTABLESIZE 542 static const short yytable[] = { 158, 123, 6, 127, 63, 144, 69, 62, 84, 9, 91, 139, 96, 36, 98, 73, 9, 89, 21, 29, 89, 22, 126, 95, 199, 145, 6, 35, 42, 24, 25, 37, 114, 44, 192, 89, 60, 193, 136, 68, 110, 63, 108, 169, 62, 107, 70, 113, 132, 121, 6, 172, 27, 164, 28, 167, 168, 137, 76, 138, 103, 174, 170, 204, 171, 186, 205, 165, 218, 166, 109, 193, 130, 202, 6, 203, 68, 41, 24, 25, 222, 197, 118, 223, 30, 78, 201, 71, 30, 109, 71, 32, 93, 30, 109, 206, 38, 155, 154, 210, 211, 89, 209, 125, 156, 100, 99, 112, 79, 80, 76, 81, 38, 70, 82, 116, 70, 73, 220, 38, 73, 122, 72, 225, 226, 72, 124, 73, 146, 118, 140, 6, 147, 229, 148, 150, 6, 195, 14, 15, 194, 16, 17, 149, 6, 157, 6, 173, 185, 6, 175, 176, 177, 188, 178, 179, 180, 181, 182, 187, 189, 18, 85, 86, 87, 88, 89, 96, 196, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 152, 72, 198, 208, 14, 15, 212, 16, 17, 38, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 143, 109, 216, 18, 14, 15, 217, 16, 17, 219, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 224, 227, 228, 18, 14, 15, 98, 16, 17, 77, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 129, 104, 122, 18, 14, 15, 78, 16, 17, 200, 105, 213, 106, 78, 39, 221, 94, 153, 26, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 79, 80, 76, 81, 0, 131, 82, 79, 80, 76, 81, 0, 131, 82, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 1, 0, 0, 0, 14, 15, 0, 16, 17, 14, 15, 0, 16, 17, 0, 0, 2, 0, 2, 3, 0, 3, 14, 15, 0, 16, 17, 18, 0, 78, 0, 4, 18, 4, 5, 0, 5, 19, 20, 0, 0, 23, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 79, 80, 76, 81, 34, 131, 82, 0, 0, 0, 43, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 97, 0, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 101, 102, 14, 15, 0, 16, 17, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 117, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 215, }; static const short yycheck[] = { 41, 41, 91, 93, 30, 93, 32, 30, 36, 0, 38, 102, 43, 40, 45, 123, 7, 41, 291, 58, 44, 299, 44, 58, 41, 110, 91, 40, 44, 44, 44, 58, 44, 291, 41, 59, 125, 44, 40, 30, 61, 67, 68, 40, 67, 68, 44, 59, 59, 74, 91, 142, 275, 138, 277, 59, 141, 59, 297, 61, 125, 146, 59, 41, 61, 150, 44, 59, 41, 61, 91, 44, 97, 59, 91, 61, 67, 93, 93, 93, 41, 166, 73, 44, 123, 272, 171, 41, 123, 91, 44, 58, 58, 123, 91, 185, 123, 128, 126, 190, 191, 125, 187, 125, 129, 273, 59, 274, 295, 296, 297, 298, 123, 41, 301, 300, 44, 41, 203, 123, 44, 297, 41, 214, 215, 44, 41, 123, 61, 120, 59, 91, 40, 223, 284, 61, 91, 163, 276, 277, 163, 279, 280, 59, 91, 59, 91, 93, 40, 91, 275, 276, 277, 59, 279, 280, 281, 282, 283, 61, 59, 299, 285, 286, 287, 288, 289, 44, 59, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 125, 292, 59, 59, 276, 277, 59, 279, 280, 123, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 295, 91, 59, 299, 276, 277, 59, 279, 280, 59, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 59, 59, 59, 299, 276, 277, 44, 279, 280, 35, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 97, 67, 297, 299, 276, 277, 272, 279, 280, 169, 67, 193, 67, 272, 23, 205, 42, 120, 7, -1, -1, -1, -1, -1, -1, -1, -1, 299, -1, 295, 296, 297, 298, -1, 300, 301, 295, 296, 297, 298, -1, 300, 301, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 257, -1, -1, -1, 276, 277, -1, 279, 280, 276, 277, -1, 279, 280, -1, -1, 275, -1, 275, 278, -1, 278, 276, 277, -1, 279, 280, 299, -1, 272, -1, 290, 299, 290, 293, -1, 293, 2, 3, -1, -1, 6, -1, -1, -1, 299, -1, -1, -1, -1, -1, -1, 295, 296, 297, 298, 21, 300, 301, -1, -1, -1, 27, -1, 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, -1, 44, -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, -1, -1, 62, 63, 276, 277, -1, 279, 280, -1, -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 299, -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, 118, -1, 120, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 159, 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 194, 195, }; #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 301 #if YYDEBUG static const char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,"'='", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"TOK_ERROR","TOK_BOOLEAN","TOK_SINT8","TOK_UINT8","TOK_SINT16", "TOK_UINT16","TOK_SINT32","TOK_UINT32","TOK_SINT64","TOK_UINT64","TOK_REAL32", "TOK_REAL64","TOK_DATETIME","TOK_CHAR16","TOK_STRING","TOK_BOOLEAN_VALUE", "TOK_REF","TOK_SCOPE","TOK_CLASS","TOK_ASSOCIATION","TOK_INDICATION", "TOK_QUALIFIER","TOK_PROPERTY","TOK_REFERENCE","TOK_METHOD","TOK_PARAMETER", "TOK_ANY","TOK_FLAVOR","TOK_ENABLEOVERRIDE","TOK_DISABLEOVERRIDE", "TOK_RESTRICTED","TOK_TOSUBCLASS","TOK_TRANSLATABLE","TOK_INSTANCE","TOK_OF", "TOK_AS","TOK_PRAGMA","TOK_SCHEMA","TOK_INTEGER_VALUE","TOK_REAL_VALUE", "TOK_STRING_VALUE","TOK_CHAR_VALUE","TOK_IDENT","TOK_ALIAS_IDENTIFIER", "TOK_NULL", }; static const char *yyrule[] = { "$accept : mofSpecification", "mofSpecification : mofProduction", "mofSpecification : mofSpecification mofProduction", "mofSpecification : TOK_ERROR", "mofProduction : compilerDirective", "mofProduction : classDeclaration", "mofProduction : qualifierDeclaration", "mofProduction : instanceDeclaration", "compilerDirective : TOK_PRAGMA TOK_IDENT '(' stringValue ')'", "classDeclaration : TOK_CLASS identifier classBody", "classDeclaration : TOK_CLASS identifier ':' identifier classBody", "classDeclaration : qualifierExpr TOK_CLASS identifier classBody", "classDeclaration : qualifierExpr TOK_CLASS identifier ':' identifier classBody", "classBody : '{' classFeatureList '}' ';'", "classBody : '{' '}' ';'", "classFeatureList : propertyDeclaration", "classFeatureList : methodDeclaration", "classFeatureList : referenceDeclaration", "classFeatureList : classFeatureList propertyDeclaration", "classFeatureList : classFeatureList methodDeclaration", "classFeatureList : classFeatureList referenceDeclaration", "qualifierExpr : '[' qualifierList ']'", "qualifierList : qualifier", "qualifierList : qualifierList ',' qualifier", "qualifier : identifier", "qualifier : identifier qualifierParameter", "qualifier : identifier ':' flavor", "qualifier : identifier qualifierParameter ':' flavor", "qualifierParameter : '(' constantValue ')'", "qualifierParameter : arrayInitializer", "flavorList : flavor", "flavorList : flavorList ',' flavor", "flavor : TOK_ENABLEOVERRIDE", "flavor : TOK_DISABLEOVERRIDE", "flavor : TOK_RESTRICTED", "flavor : TOK_TOSUBCLASS", "flavor : TOK_TRANSLATABLE", "propertyDeclaration : dataType identifier ';'", "propertyDeclaration : qualifierExpr dataType identifier ';'", "propertyDeclaration : dataType identifier subscript ';'", "propertyDeclaration : qualifierExpr dataType identifier subscript ';'", "propertyDeclaration : dataType identifier '=' initializer ';'", "propertyDeclaration : qualifierExpr dataType identifier '=' initializer ';'", "propertyDeclaration : dataType identifier subscript '=' initializer ';'", "propertyDeclaration : qualifierExpr dataType identifier subscript '=' initializer ';'", "referenceDeclaration : objectRef identifier ';'", "referenceDeclaration : qualifierExpr objectRef identifier ';'", "referenceDeclaration : objectRef identifier initializer ';'", "referenceDeclaration : qualifierExpr objectRef identifier initializer ';'", "methodDeclaration : dataType identifier '(' parameterList ')' ';'", "methodDeclaration : qualifierExpr dataType identifier '(' parameterList ')' ';'", "methodDeclaration : dataType identifier '(' ')' ';'", "methodDeclaration : qualifierExpr dataType identifier '(' ')' ';'", "dataType : TOK_BOOLEAN", "dataType : TOK_SINT8", "dataType : TOK_UINT8", "dataType : TOK_SINT16", "dataType : TOK_UINT16", "dataType : TOK_SINT32", "dataType : TOK_UINT32", "dataType : TOK_SINT64", "dataType : TOK_UINT64", "dataType : TOK_REAL32", "dataType : TOK_REAL64", "dataType : TOK_CHAR16", "dataType : TOK_DATETIME", "dataType : TOK_STRING", "objectRef : identifier TOK_REF", "parameterList : parameter", "parameterList : parameterList ',' parameter", "parameter : dataType identifier", "parameter : objectRef identifier", "parameter : qualifierExpr dataType identifier", "parameter : qualifierExpr objectRef identifier", "parameter : dataType identifier subscript", "parameter : objectRef identifier subscript", "parameter : qualifierExpr dataType identifier subscript", "parameter : qualifierExpr objectRef identifier subscript", "subscript : '[' TOK_INTEGER_VALUE ']'", "subscript : '[' ']'", "initializer : constantValue", "initializer : arrayInitializer", "initializer : TOK_ALIAS_IDENTIFIER", "arrayInitializer : '{' arrayInitializerList '}'", "arrayInitializerList : constantValue", "arrayInitializerList : arrayInitializerList ',' constantValue", "constantValue : TOK_INTEGER_VALUE", "constantValue : TOK_REAL_VALUE", "constantValue : TOK_CHAR_VALUE", "constantValue : stringValue", "constantValue : TOK_BOOLEAN_VALUE", "constantValue : TOK_NULL", "stringValue : TOK_STRING_VALUE", "stringValue : stringValue TOK_STRING_VALUE", "qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr ';'", "qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr flavorExpr ';'", "qualifierType : ':' dataType", "qualifierType : ':' dataType '=' initializer", "qualifierType : ':' dataType subscript", "qualifierType : ':' dataType subscript '=' initializer", "scopeExpr : ',' TOK_SCOPE '(' scopeList ')'", "scopeList : scope", "scopeList : scopeList ',' scope", "scope : TOK_CLASS", "scope : TOK_ASSOCIATION", "scope : TOK_INDICATION", "scope : TOK_PROPERTY", "scope : TOK_REFERENCE", "scope : TOK_METHOD", "scope : TOK_PARAMETER", "scope : TOK_ANY", "flavorExpr : ',' TOK_FLAVOR '(' flavorList ')'", "instanceDeclaration : TOK_INSTANCE TOK_OF identifier instanceBody", "instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier instanceBody", "instanceDeclaration : TOK_INSTANCE TOK_OF identifier alias instanceBody", "instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier alias instanceBody", "instanceBody : '{' valueInitializerList '}' ';'", "alias : TOK_AS TOK_ALIAS_IDENTIFIER", "valueInitializerList : valueInitializer", "valueInitializerList : valueInitializerList valueInitializer", "valueInitializer : identifier '=' initializer ';'", "valueInitializer : qualifierExpr identifier '=' initializer ';'", "identifier : TOK_IDENT", "identifier : TOK_ASSOCIATION", "identifier : TOK_INDICATION", "identifier : TOK_REFERENCE", "identifier : TOK_PROPERTY", }; #endif int yydebug; int yynerrs; int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; /* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif #define YYINITSTACKSIZE 500 typedef struct { unsigned stacksize; short *s_base; short *s_mark; short *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; } YYSTACKDATA; /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* needed for memset */ /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(YYSTACKDATA *data) { int i; unsigned newsize; short *newss; YYSTYPE *newvs; if ((newsize = data->stacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = data->s_mark - data->s_base; newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); if (newss == 0) return -1; data->s_base = newss; data->s_mark = newss + i; newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); if (newvs == 0) return -1; data->l_base = newvs; data->l_mark = newvs + i; data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int YYPARSE_DECL() { int yym, yyn, yystate; #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = YYEMPTY; yystate = 0; #if YYPURE memset(&yystack, 0, sizeof(yystack)); #endif if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow; yystack.s_mark = yystack.s_base; yystack.l_mark = yystack.l_base; yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = YYLEX) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) { goto yyoverflow; } yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; yyerror("syntax error"); goto yyerrlab; yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) { goto yyoverflow; } yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; --yystack.s_mark; --yystack.l_mark; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = YYEMPTY; goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; if (yym) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 1: #line 139 "mof.y" { } break; case 2: #line 142 "mof.y" { } break; case 3: #line 145 "mof.y" { YYABORT; } break; case 4: #line 151 "mof.y" { } break; case 5: #line 154 "mof.y" { /* [TODO: validate the class here] */ yystack.l_mark[0].classDeclaration->flags = MI_FLAG_CLASS; yystack.l_mark[0].classDeclaration->flags |= GetQualFlags(yystack.l_mark[0].classDeclaration->qualifiers, yystack.l_mark[0].classDeclaration->numQualifiers); if (FinalizeClass(yystack.l_mark[0].classDeclaration) != 0) YYABORT; AddClassDecl(yystack.l_mark[0].classDeclaration); if (state.classDeclCallback) (*state.classDeclCallback)(yystack.l_mark[0].classDeclaration, state.classDeclCallbackData); } break; case 6: #line 167 "mof.y" { AddQualifierDeclaration(yystack.l_mark[0].qualifierDeclaration); if (state.qualifierDeclCallback) (*state.qualifierDeclCallback)(yystack.l_mark[0].qualifierDeclaration, state.qualifierDeclCallbackData); } break; case 7: #line 174 "mof.y" { if (FinalizeInstance(yystack.l_mark[0].instanceDeclaration) != 0) YYABORT; AddInstanceDecl(yystack.l_mark[0].instanceDeclaration); if (state.instanceDeclCallback) (*state.instanceDeclCallback)(yystack.l_mark[0].instanceDeclaration, state.instanceDeclCallbackData); } break; case 8: #line 186 "mof.y" { if (strcmp(yystack.l_mark[-3].string, "include") == 0) { if (openIncludeFile(yystack.l_mark[-1].string) != 0) YYABORT; } else if (strcmp(yystack.l_mark[-3].string, "instancelocale") == 0) { if (state.pragmaCallback) (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData); } else if (strcmp(yystack.l_mark[-3].string, "locale") == 0) { if (state.pragmaCallback) (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData); } else if (strcmp(yystack.l_mark[-3].string, "namespace") == 0) { if (state.pragmaCallback) (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData); } else { yywarnf(ID_UNKNOWN_PRAGMA, "warning: unknown pragma: %s=%s", yystack.l_mark[-3].string, yystack.l_mark[-1].string); if (state.pragmaCallback) (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData); } } break; case 9: #line 219 "mof.y" { /* Check whether class already exists */ if (FindClassDecl(yystack.l_mark[-1].string)) { yyerrorf(ID_CLASS_ALREADY_DEFINED, "class already defined: \"%s\"", yystack.l_mark[-1].string); YYABORT; } yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1); yyval.classDeclaration->flags = MI_FLAG_CLASS; yyval.classDeclaration->name = yystack.l_mark[-1].string; yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data; yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size; } break; case 10: #line 237 "mof.y" { const MI_ClassDecl* scd; /* Check whether class already exists */ if (FindClassDecl(yystack.l_mark[-3].string)) { yyerrorf(ID_CLASS_ALREADY_DEFINED, "class already defined: \"%s\"", yystack.l_mark[-3].string); YYABORT; } /* Check whether superclass exists */ scd = FindClassDecl(yystack.l_mark[-1].string); if (!scd) { yyerrorf(ID_UNDEFINED_SUPERCLASS, "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string); YYABORT; } yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1); yyval.classDeclaration->flags = MI_FLAG_CLASS; yyval.classDeclaration->name = yystack.l_mark[-3].string; yyval.classDeclaration->superClass = yystack.l_mark[-1].string; yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd; yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data; yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size; } break; case 11: #line 269 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-3].qualifierList) != 0) YYABORT; /* Check whether class already exists */ if (FindClassDecl(yystack.l_mark[-1].string)) { yyerrorf(ID_CLASS_ALREADY_DEFINED, "class already defined: \"%s\"", yystack.l_mark[-1].string); YYABORT; } yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1); yyval.classDeclaration->flags = MI_FLAG_CLASS; yyval.classDeclaration->name = yystack.l_mark[-1].string; yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data; yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size; yyval.classDeclaration->qualifiers = yystack.l_mark[-3].qualifierList.data; yyval.classDeclaration->numQualifiers = yystack.l_mark[-3].qualifierList.size; } break; case 12: #line 293 "mof.y" { const MI_ClassDecl* scd; /* Check qualifier scope */ if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-5].qualifierList) != 0) YYABORT; /* Check whether class already exists */ if (FindClassDecl(yystack.l_mark[-3].string)) { yyerrorf(ID_CLASS_ALREADY_DEFINED, "class already defined: \"%s\"", yystack.l_mark[-3].string); YYABORT; } /* Check whether superclass exists */ scd = FindClassDecl(yystack.l_mark[-1].string); if (!scd) { yyerrorf(ID_UNDEFINED_SUPERCLASS, "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string); YYABORT; } yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1); yyval.classDeclaration->flags = MI_FLAG_CLASS; yyval.classDeclaration->name = yystack.l_mark[-3].string; yyval.classDeclaration->superClass = scd->name; yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd; yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data; yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size; yyval.classDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data; yyval.classDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size; } break; case 13: #line 333 "mof.y" { yyval.featureList = yystack.l_mark[-2].featureList; } break; case 14: #line 337 "mof.y" { yyval.featureList.propertySet.data = NULL; yyval.featureList.propertySet.size = 0; yyval.featureList.methodList.data = NULL; yyval.featureList.methodList.size = 0; } break; case 15: #line 346 "mof.y" { if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0) { YYABORT; } yyval.featureList.propertySet.data = NULL; yyval.featureList.propertySet.size = 0; yyval.featureList.methodList.data = NULL; yyval.featureList.methodList.size = 0; yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 16: #line 360 "mof.y" { yyval.featureList.propertySet.data = NULL; yyval.featureList.propertySet.size = 0; yyval.featureList.methodList.data = NULL; yyval.featureList.methodList.size = 0; yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD; yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl); } break; case 17: #line 370 "mof.y" { yyval.featureList.propertySet.data = NULL; yyval.featureList.propertySet.size = 0; yyval.featureList.methodList.data = NULL; yyval.featureList.methodList.size = 0; yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 18: #line 380 "mof.y" { if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0) { YYABORT; } if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name)) { yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, "class feature already defined: \"%s\"", yystack.l_mark[0].property->name); YYABORT; } yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 19: #line 398 "mof.y" { if (FindMethod(&yystack.l_mark[-1].featureList.methodList, yystack.l_mark[0].methodDecl->name)) { yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, "class feature already defined: \"%s\"", yystack.l_mark[0].methodDecl->name); YYABORT; } yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD; yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl); } break; case 20: #line 411 "mof.y" { if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name)) { yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, "class feature already defined: \"%s\"", yystack.l_mark[0].property->name); YYABORT; } yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 21: #line 426 "mof.y" { yyval.qualifierList = yystack.l_mark[-1].qualifierList; } break; case 22: #line 432 "mof.y" { yyval.qualifierList.data = NULL; yyval.qualifierList.size = 0; PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier); } break; case 23: #line 438 "mof.y" { if (FindQualifier(&yystack.l_mark[-2].qualifierList, yystack.l_mark[0].qualifier->name)) { yyerrorf(ID_DUPLICATE_QUALIFIER, "duplicate qualifier: \"%s\"", yystack.l_mark[0].qualifier->name); YYABORT; } PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier); } break; case 24: #line 451 "mof.y" { MI_Qualifier* q; const MI_QualifierDecl* qd; qd = FindQualifierDeclaration(yystack.l_mark[0].string); if (!qd) { yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[0].string); YYABORT; } if (qd->type != MI_BOOLEAN) { yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, "qualifier is missing initializer: \"%s\"", yystack.l_mark[0].string); YYABORT; } q = CALLOC_T(MI_Qualifier, 1); q->name = qd->name; /* use casing of qualifier declaration name */ q->type = qd->type; q->flavor = qd->flavor; q->value = NewTrueValue(); yyval.qualifier = q; } break; case 25: #line 479 "mof.y" { MI_Qualifier* q; const MI_QualifierDecl* qd; void* value; qd = FindQualifierDeclaration(yystack.l_mark[-1].string); if (!qd) { yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-1].string); YYABORT; } if (InitializerToValue(&yystack.l_mark[0].initializer, qd->type, &value) != 0) { yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-1].string); YYABORT; } q = CALLOC_T(MI_Qualifier, 1); q->name = qd->name; /* use casing of qualifier declaration name */ q->type = qd->type; q->flavor = qd->flavor; q->value = value; yyval.qualifier = q; } break; case 26: #line 507 "mof.y" { MI_Qualifier* q; const MI_QualifierDecl* qd; qd = FindQualifierDeclaration(yystack.l_mark[-2].string); if (!qd) { yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-2].string); YYABORT; } if (qd->type != MI_BOOLEAN) { yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, "qualifier is missing initializer: \"%s\"", yystack.l_mark[-2].string); YYABORT; } q = CALLOC_T(MI_Qualifier, 1); q->name = qd->name; /* use casing of qualifier declaration name */ q->type = qd->type; q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor); q->value = NewTrueValue(); yyval.qualifier = q; } break; case 27: #line 534 "mof.y" { MI_Qualifier* q; const MI_QualifierDecl* qd; void* value; qd = FindQualifierDeclaration(yystack.l_mark[-3].string); if (!qd) { yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-3].string); YYABORT; } if (InitializerToValue(&yystack.l_mark[-2].initializer, qd->type, &value) != 0) { yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-3].string); YYABORT; } q = CALLOC_T(MI_Qualifier, 1); q->name = qd->name; /* use casing of qualifier declaration name */ q->type = qd->type; q->value = value; q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor); yyval.qualifier = q; } break; case 28: #line 564 "mof.y" { memset(&yyval.initializer, 0, sizeof(yyval.initializer)); yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1); yyval.initializer.data[0] = yystack.l_mark[-1].constantValue; yyval.initializer.size = 1; } break; case 29: #line 571 "mof.y" { yyval.initializer = yystack.l_mark[0].initializer; } break; case 30: #line 577 "mof.y" { yyval.flags = yystack.l_mark[0].flags; } break; case 31: #line 581 "mof.y" { yyval.flags |= yystack.l_mark[0].flags; } break; case 32: #line 587 "mof.y" { yyval.flags = MI_FLAG_ENABLEOVERRIDE; } break; case 33: #line 591 "mof.y" { yyval.flags = MI_FLAG_DISABLEOVERRIDE; } break; case 34: #line 595 "mof.y" { yyval.flags = MI_FLAG_RESTRICTED; } break; case 35: #line 599 "mof.y" { yyval.flags = MI_FLAG_TOSUBCLASS; } break; case 36: #line 603 "mof.y" { yyval.flags = MI_FLAG_TRANSLATABLE; } break; case 37: #line 609 "mof.y" { yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-1].string; yyval.property->type = yystack.l_mark[-2].type; } break; case 38: #line 615 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-3].qualifierList) != 0) YYABORT; yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-1].string; yyval.property->type = yystack.l_mark[-2].type; yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size; } break; case 39: #line 627 "mof.y" { yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-2].string; yyval.property->type = ARRAYOF(yystack.l_mark[-3].type); yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer; } break; case 40: #line 634 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-4].qualifierList) != 0) YYABORT; yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-2].string; yyval.property->type = ARRAYOF(yystack.l_mark[-3].type); yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size; yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer; } break; case 41: #line 647 "mof.y" { void* value; if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-3].string; yyval.property->type = yystack.l_mark[-4].type; yyval.property->value = value; } break; case 42: #line 662 "mof.y" { void* value; /* Check qualifier scope */ if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-5].qualifierList) != 0) YYABORT; if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-3].string; yyval.property->type = yystack.l_mark[-4].type; yyval.property->qualifiers = yystack.l_mark[-5].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-5].qualifierList.size; yyval.property->value = value; } break; case 43: #line 683 "mof.y" { void* value; if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-4].string; yyval.property->type = ARRAYOF(yystack.l_mark[-5].type); yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer; yyval.property->value = value; } break; case 44: #line 699 "mof.y" { void* value; /* Check qualifier scope */ if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-6].qualifierList) != 0) YYABORT; if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-4].string; yyval.property->type = ARRAYOF(yystack.l_mark[-5].type); yyval.property->qualifiers = yystack.l_mark[-6].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-6].qualifierList.size; yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer; yyval.property->value = value; } break; case 45: #line 723 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-2].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->type = MI_REFERENCE; yyval.property->name = yystack.l_mark[-1].string; yyval.property->className = cd->name; } break; case 46: #line 740 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-2].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string); YYABORT; } /* Check qualifier scope */ if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-3].qualifierList) != 0) YYABORT; yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->type = MI_REFERENCE; yyval.property->name = yystack.l_mark[-1].string; yyval.property->className = cd->name; yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size; } break; case 47: #line 763 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-3].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->type = MI_REFERENCE; yyval.property->name = yystack.l_mark[-2].string; yyval.property->className = cd->name; yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer"); /* [TODO: use initializer */ } break; case 48: #line 782 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-3].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string); YYABORT; } /* Check qualifier scope */ if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-4].qualifierList) != 0) YYABORT; yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->type = MI_REFERENCE; yyval.property->name = yystack.l_mark[-2].string; yyval.property->className = cd->name; yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size; yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer"); /* [TODO: use initializer */ } break; case 49: #line 809 "mof.y" { yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1); yyval.methodDecl->name = yystack.l_mark[-4].string; yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data; yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size; yyval.methodDecl->returnType = yystack.l_mark[-5].type; } break; case 50: #line 817 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-6].qualifierList) != 0) YYABORT; yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1); yyval.methodDecl->name = yystack.l_mark[-4].string; yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data; yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size; yyval.methodDecl->qualifiers = yystack.l_mark[-6].qualifierList.data; yyval.methodDecl->numQualifiers = yystack.l_mark[-6].qualifierList.size; yyval.methodDecl->returnType = yystack.l_mark[-5].type; } break; case 51: #line 831 "mof.y" { MOF_ParameterList parameterList = PTRARRAY_INITIALIZER; yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1); yyval.methodDecl->name = yystack.l_mark[-3].string; yyval.methodDecl->parameters = parameterList.data; yyval.methodDecl->numParameters = parameterList.size; yyval.methodDecl->returnType = yystack.l_mark[-4].type; } break; case 52: #line 841 "mof.y" { MOF_ParameterList parameterList = PTRARRAY_INITIALIZER; /* Check qualifier scope */ if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-5].qualifierList) != 0) YYABORT; yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1); yyval.methodDecl->name = yystack.l_mark[-3].string; yyval.methodDecl->parameters = parameterList.data; yyval.methodDecl->numParameters = parameterList.size; yyval.methodDecl->qualifiers = yystack.l_mark[-5].qualifierList.data; yyval.methodDecl->numQualifiers = yystack.l_mark[-5].qualifierList.size; yyval.methodDecl->returnType = yystack.l_mark[-4].type; } break; case 53: #line 859 "mof.y" { yyval.type = MI_BOOLEAN; } break; case 54: #line 863 "mof.y" { yyval.type = MI_SINT8; } break; case 55: #line 867 "mof.y" { yyval.type = MI_UINT8; } break; case 56: #line 871 "mof.y" { yyval.type = MI_SINT16; } break; case 57: #line 875 "mof.y" { yyval.type = MI_UINT16; } break; case 58: #line 879 "mof.y" { yyval.type = MI_SINT32; } break; case 59: #line 883 "mof.y" { yyval.type = MI_UINT32; } break; case 60: #line 887 "mof.y" { yyval.type = MI_SINT64; } break; case 61: #line 891 "mof.y" { yyval.type = MI_UINT64; } break; case 62: #line 895 "mof.y" { yyval.type = MI_REAL32; } break; case 63: #line 899 "mof.y" { yyval.type = MI_REAL64; } break; case 64: #line 903 "mof.y" { yyval.type = MI_CHAR16; } break; case 65: #line 907 "mof.y" { yyval.type = MI_DATETIME; } break; case 66: #line 911 "mof.y" { yyval.type = MI_STRING; } break; case 67: #line 917 "mof.y" { yyval.string = yystack.l_mark[-1].string; } break; case 68: #line 923 "mof.y" { yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER; yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers); yyval.parameterList.data = NULL; yyval.parameterList.size = 0; PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter); } break; case 69: #line 931 "mof.y" { if (FindParameter(&yystack.l_mark[-2].parameterList, yystack.l_mark[0].parameter->name)) { yyerrorf(ID_PARAMETER_ALREADY_DEFINED, "parameter already defined: \"%s\"", yystack.l_mark[0].parameter->name); YYABORT; } yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER; yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers); PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter); } break; case 70: #line 946 "mof.y" { yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[0].string; yyval.parameter->type = yystack.l_mark[-1].type; } break; case 71: #line 952 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-1].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string); YYABORT; } yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[0].string; yyval.parameter->type = MI_REFERENCE; yyval.parameter->className = cd->name; } break; case 72: #line 969 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0) YYABORT; yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[0].string; yyval.parameter->type = yystack.l_mark[-1].type; yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data; yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size; } break; case 73: #line 981 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-1].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string); YYABORT; } /* Check qualifier scope */ if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0) YYABORT; yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[0].string; yyval.parameter->type = MI_REFERENCE; yyval.parameter->className = cd->name; yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data; yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size; } break; case 74: #line 1004 "mof.y" { yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[-1].string; yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type); yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer; } break; case 75: #line 1011 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-2].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string); YYABORT; } yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[-1].string; yyval.parameter->type = ARRAYOF(MI_REFERENCE); yyval.parameter->className = cd->name; yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer; } break; case 76: #line 1029 "mof.y" { /* Check qualifier scope */ if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0) YYABORT; yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[-1].string; yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type); yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer; yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data; yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size; } break; case 77: #line 1042 "mof.y" { const MI_ClassDecl* cd; /* Verify that class exists */ cd = FindClassDecl(yystack.l_mark[-2].string); if (!cd) { yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string); YYABORT; } /* Check qualifier scope */ if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0) YYABORT; yyval.parameter = CALLOC_T(MI_ParameterDecl, 1); yyval.parameter->name = yystack.l_mark[-1].string; yyval.parameter->type = ARRAYOF(MI_REFERENCE); yyval.parameter->className = cd->name; yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer; yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data; yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size; } break; case 78: #line 1068 "mof.y" { if (yystack.l_mark[-1].integer <= 0) { yyerrorf(ID_ILLEGAL_ARRAY_SUBSCRIPT, "illegal array subscript: " SINT64_FMT, yystack.l_mark[-1].integer); YYABORT; } yyval.integer = yystack.l_mark[-1].integer; } break; case 79: #line 1079 "mof.y" { /* 0 signifies a dynamic array */ yyval.integer = 0; } break; case 80: #line 1086 "mof.y" { memset(&yyval.initializer, 0, sizeof(yyval.initializer)); yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1); yyval.initializer.data[0] = yystack.l_mark[0].constantValue; yyval.initializer.size = 1; } break; case 81: #line 1093 "mof.y" { yyval.initializer = yystack.l_mark[0].initializer; } break; case 82: #line 1097 "mof.y" { memset(&yyval.initializer, 0, sizeof(yyval.initializer)); yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1); yyval.initializer.data[0].type = TOK_STRING_VALUE; yyval.initializer.data[0].value.string = yystack.l_mark[0].string; yyval.initializer.size = 0; } break; case 83: #line 1107 "mof.y" { yyval.initializer = yystack.l_mark[-1].initializer; } break; case 84: #line 1113 "mof.y" { memset(&yyval.initializer, 0, sizeof(yyval.initializer)); yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1); yyval.initializer.data[0] = yystack.l_mark[0].constantValue; yyval.initializer.size = 1; yyval.initializer.isArray = 1; } break; case 85: #line 1121 "mof.y" { yystack.l_mark[-2].initializer.data = REALLOC_T(MOF_ConstantValue, yystack.l_mark[-2].initializer.data, yystack.l_mark[-2].initializer.size + 1); yystack.l_mark[-2].initializer.data[yystack.l_mark[-2].initializer.size] = yystack.l_mark[0].constantValue; yystack.l_mark[-2].initializer.size++; yyval.initializer = yystack.l_mark[-2].initializer; } break; case 86: #line 1130 "mof.y" { yyval.constantValue.type = TOK_INTEGER_VALUE; yyval.constantValue.value.integer = yystack.l_mark[0].integer; } break; case 87: #line 1135 "mof.y" { yyval.constantValue.type = TOK_REAL_VALUE; yyval.constantValue.value.real = yystack.l_mark[0].real; } break; case 88: #line 1140 "mof.y" { yyval.constantValue.type = TOK_CHAR_VALUE; yyval.constantValue.value.character = yystack.l_mark[0].character; } break; case 89: #line 1145 "mof.y" { yyval.constantValue.type = TOK_STRING_VALUE; yyval.constantValue.value.string = yystack.l_mark[0].string; } break; case 90: #line 1150 "mof.y" { yyval.constantValue.type = TOK_BOOLEAN_VALUE; yyval.constantValue.value.boolean = yystack.l_mark[0].boolean; } break; case 91: #line 1155 "mof.y" { yyval.constantValue.type = TOK_NULL; } break; case 92: #line 1161 "mof.y" { yyval.string = yystack.l_mark[0].string; } break; case 93: #line 1165 "mof.y" { size_t size = strlen(yystack.l_mark[-1].string) + strlen(yystack.l_mark[0].string) + 1; yyval.string = (char*)MOF_Realloc(&state.heap, yystack.l_mark[-1].string, size); Strcat(yyval.string, size, yystack.l_mark[0].string); MOF_Free(&state.heap, yystack.l_mark[0].string); } break; case 94: #line 1174 "mof.y" { yystack.l_mark[-2].qualifierDeclaration->name = yystack.l_mark[-3].string; yystack.l_mark[-2].qualifierDeclaration->scope = yystack.l_mark[-1].flags; yystack.l_mark[-2].qualifierDeclaration->flavor = 0; yyval.qualifierDeclaration = yystack.l_mark[-2].qualifierDeclaration; } break; case 95: #line 1181 "mof.y" { yystack.l_mark[-3].qualifierDeclaration->name = yystack.l_mark[-4].string; yystack.l_mark[-3].qualifierDeclaration->scope = yystack.l_mark[-2].flags; yystack.l_mark[-3].qualifierDeclaration->flavor = yystack.l_mark[-1].flags; yyval.qualifierDeclaration = yystack.l_mark[-3].qualifierDeclaration; } break; case 96: #line 1190 "mof.y" { yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1); yyval.qualifierDeclaration->type = yystack.l_mark[0].type; } break; case 97: #line 1195 "mof.y" { void* value; if (InitializerToValue(&yystack.l_mark[0].initializer, yystack.l_mark[-2].type, &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1); yyval.qualifierDeclaration->type = yystack.l_mark[-2].type; yyval.qualifierDeclaration->value = value; ReleaseInitializer(&yystack.l_mark[0].initializer); } break; case 98: #line 1210 "mof.y" { yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1); yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-1].type); yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[0].integer; } break; case 99: #line 1216 "mof.y" { void* value = NULL; if (InitializerToValue(&yystack.l_mark[0].initializer, ARRAYOF(yystack.l_mark[-3].type), &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1); yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-3].type); yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[-2].integer; yyval.qualifierDeclaration->value = value; ReleaseInitializer(&yystack.l_mark[0].initializer); } break; case 100: #line 1234 "mof.y" { yyval.flags = yystack.l_mark[-1].flags; } break; case 101: #line 1240 "mof.y" { yyval.flags = yystack.l_mark[0].flags; } break; case 102: #line 1244 "mof.y" { yyval.flags |= yystack.l_mark[0].flags; } break; case 103: #line 1250 "mof.y" { yyval.flags = MI_FLAG_CLASS; } break; case 104: #line 1254 "mof.y" { yyval.flags = MI_FLAG_ASSOCIATION; } break; case 105: #line 1258 "mof.y" { yyval.flags = MI_FLAG_INDICATION; } break; case 106: #line 1262 "mof.y" { yyval.flags = MI_FLAG_PROPERTY; } break; case 107: #line 1266 "mof.y" { yyval.flags = MI_FLAG_REFERENCE; } break; case 108: #line 1270 "mof.y" { yyval.flags = MI_FLAG_METHOD; } break; case 109: #line 1274 "mof.y" { yyval.flags = MI_FLAG_PARAMETER; } break; case 110: #line 1278 "mof.y" { yyval.flags = MI_FLAG_ANY; } break; case 111: #line 1284 "mof.y" { /* Reject incompatiable ToSubclass and Restricted flavors */ if (yystack.l_mark[-1].flags & MI_FLAG_TOSUBCLASS && yystack.l_mark[-1].flags & MI_FLAG_RESTRICTED) { yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", "ToSubclass", "Restricted"); YYABORT; } /* Reject incompatiable EnableOverride and DisableOverride flavors */ if (yystack.l_mark[-1].flags & MI_FLAG_ENABLEOVERRIDE && yystack.l_mark[-1].flags & MI_FLAG_DISABLEOVERRIDE) { yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", "EnableOverride", "DisableOverride"); YYABORT; } yyval.flags = yystack.l_mark[-1].flags; } break; case 112: #line 1306 "mof.y" { yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1); yyval.instanceDeclaration->flags = 0; yyval.instanceDeclaration->name = yystack.l_mark[-1].string; yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; } break; case 113: #line 1314 "mof.y" { yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1); yyval.instanceDeclaration->flags = 0; yyval.instanceDeclaration->name = yystack.l_mark[-1].string; yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.instanceDeclaration->qualifiers = yystack.l_mark[-4].qualifierList.data; yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-4].qualifierList.size; } break; case 114: #line 1324 "mof.y" { /* [TODO]: handle alias */ yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1); yyval.instanceDeclaration->flags = 0; yyval.instanceDeclaration->name = yystack.l_mark[-2].string; yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; } break; case 115: #line 1333 "mof.y" { /* [TODO]: handle alias */ yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1); yyval.instanceDeclaration->flags = 0; yyval.instanceDeclaration->name = yystack.l_mark[-2].string; yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data; yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size; yyval.instanceDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data; yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size; } break; case 116: #line 1346 "mof.y" { yyval.featureList = yystack.l_mark[-2].featureList; } break; case 117: #line 1352 "mof.y" { yyval.string = yystack.l_mark[0].string; } break; case 118: #line 1358 "mof.y" { yyval.featureList.propertySet.data = NULL; yyval.featureList.propertySet.size = 0; yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 119: #line 1366 "mof.y" { if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name)) { yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, "instance property already defined: \"%s\"", yystack.l_mark[0].property->name); YYABORT; } yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY; yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers); PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property); } break; case 120: #line 1381 "mof.y" { void* value; MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer); if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-3].string; yyval.property->type = type; yyval.property->value = value; } break; case 121: #line 1397 "mof.y" { void* value; MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer); if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0) { yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer"); YYABORT; } yyval.property = CALLOC_T(MI_PropertyDecl, 1); yyval.property->name = yystack.l_mark[-3].string; yyval.property->type = type; yyval.property->value = value; yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data; yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size; } break; case 122: #line 1417 "mof.y" { yyval.string = yystack.l_mark[0].string; } break; case 123: #line 1421 "mof.y" { yyval.string = MOF_Strdup(&state.heap, "Association"); } break; case 124: #line 1425 "mof.y" { yyval.string = MOF_Strdup(&state.heap, "Indication"); } break; case 125: #line 1429 "mof.y" { yyval.string = MOF_Strdup(&state.heap, "Reference"); } break; case 126: #line 1433 "mof.y" { yyval.string = MOF_Strdup(&state.heap, "Property"); } break; #line 2249 "y.tab.c" } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; if (yychar < 0) { if ((yychar = YYLEX) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yystack.s_mark, yystate); #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) { goto yyoverflow; } *++yystack.s_mark = (short) yystate; *++yystack.l_mark = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: yyfreestack(&yystack); return (1); yyaccept: yyfreestack(&yystack); return (0); }