(file) Return to mofyaccinc.c CVS log (file) (dir) Up to [OMI] / omi / mof

   1 mike  1.1 /*
   2           **==============================================================================
   3           **
   4           ** Open Management Infrastructure (OMI)
   5           **
   6           ** Copyright (c) Microsoft Corporation
   7           ** 
   8           ** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
   9           ** use this file except in compliance with the License. You may obtain a copy 
  10           ** of the License at 
  11           **
  12           **     http://www.apache.org/licenses/LICENSE-2.0 
  13           **
  14           ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15           ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
  16           ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
  17           ** MERCHANTABLITY OR NON-INFRINGEMENT. 
  18           **
  19           ** See the Apache 2 License for the specific language governing permissions 
  20           ** and limitations under the License.
  21           **
  22 mike  1.1 **==============================================================================
  23           */
  24           
  25           #ifndef lint
  26           static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
  27           #endif
  28           
  29           #define YYBYACC 1
  30           #define YYMAJOR 1
  31           #define YYMINOR 9
  32           #define YYPATCH 20110908
  33           
  34           #define YYEMPTY        (-1)
  35           #define yyclearin      (yychar = YYEMPTY)
  36           #define yyerrok        (yyerrflag = 0)
  37           #define YYRECOVERING() (yyerrflag != 0)
  38           
  39           #define YYPREFIX "yy"
  40           
  41           #define YYPURE 0
  42           
  43 mike  1.1 #line 2 "mof.y"
  44           
  45           #include "config.h"
  46           #include <stdio.h>
  47           #include <stdlib.h>
  48           #include <string.h>
  49           #include "config.h"
  50           #include "buffer.h"
  51           #include "types.h"
  52           #include "state.h"
  53           #include "ptrarray.h"
  54           
  55           #define ARRAYOF(TYPE) ((MI_Uint32)TYPE | (MI_Uint32)MI_ARRAY_BIT)
  56           
  57           extern int yylex();
  58           extern int openIncludeFile(const char* path);
  59           
  60           #line 20 "mof.y"
  61           #ifdef YYSTYPE
  62           #undef  YYSTYPE_IS_DECLARED
  63           #define YYSTYPE_IS_DECLARED 1
  64 mike  1.1 #endif
  65           #ifndef YYSTYPE_IS_DECLARED
  66           #define YYSTYPE_IS_DECLARED 1
  67           typedef union
  68           {
  69               MI_Boolean boolean;
  70               MI_Sint64 integer;
  71               MI_Real64 real;
  72               MI_Char16 character;
  73               char* string;
  74               char* identifier;
  75               char* dollarIdentifier;
  76               MI_Type type;
  77               MI_PropertyDecl* property;
  78               MI_MethodDecl* methodDecl;
  79               MI_ParameterDecl* parameter;
  80               MOF_ParameterList parameterList;
  81               MOF_FeatureList featureList;
  82               MI_QualifierDecl* qualifierDeclaration;
  83               MOF_ConstantValue constantValue;
  84               MOF_Initializer initializer;
  85 mike  1.1     MI_Uint32 flags;
  86               MI_Qualifier* qualifier;
  87               MOF_QualifierList qualifierList;
  88               MI_ClassDecl* classDeclaration;
  89               MI_InstanceDecl* instanceDeclaration;
  90           } YYSTYPE;
  91           #endif /* !YYSTYPE_IS_DECLARED */
  92           #line 68 "y.tab.c"
  93           
  94           /* compatibility with bison */
  95           #ifdef YYPARSE_PARAM
  96           /* compatibility with FreeBSD */
  97           # ifdef YYPARSE_PARAM_TYPE
  98           #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
  99           # else
 100           #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
 101           # endif
 102           #else
 103           # define YYPARSE_DECL() yyparse(void)
 104           #endif
 105           
 106 mike  1.1 /* Parameters sent to lex. */
 107           #ifdef YYLEX_PARAM
 108           # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
 109           # define YYLEX yylex(YYLEX_PARAM)
 110           #else
 111           # define YYLEX_DECL() yylex(void)
 112           # define YYLEX yylex()
 113           #endif
 114           
 115           /* Parameters sent to yyerror. */
 116           #define YYERROR_DECL() yyerror(const char *s)
 117           #define YYERROR_CALL(msg) yyerror(msg)
 118           
 119           extern int YYPARSE_DECL();
 120           
 121           #define TOK_ERROR 257
 122           #define TOK_BOOLEAN 258
 123           #define TOK_SINT8 259
 124           #define TOK_UINT8 260
 125           #define TOK_SINT16 261
 126           #define TOK_UINT16 262
 127 mike  1.1 #define TOK_SINT32 263
 128           #define TOK_UINT32 264
 129           #define TOK_SINT64 265
 130           #define TOK_UINT64 266
 131           #define TOK_REAL32 267
 132           #define TOK_REAL64 268
 133           #define TOK_DATETIME 269
 134           #define TOK_CHAR16 270
 135           #define TOK_STRING 271
 136           #define TOK_BOOLEAN_VALUE 272
 137           #define TOK_REF 273
 138           #define TOK_SCOPE 274
 139           #define TOK_CLASS 275
 140           #define TOK_ASSOCIATION 276
 141           #define TOK_INDICATION 277
 142           #define TOK_QUALIFIER 278
 143           #define TOK_PROPERTY 279
 144           #define TOK_REFERENCE 280
 145           #define TOK_METHOD 281
 146           #define TOK_PARAMETER 282
 147           #define TOK_ANY 283
 148 mike  1.1 #define TOK_FLAVOR 284
 149           #define TOK_ENABLEOVERRIDE 285
 150           #define TOK_DISABLEOVERRIDE 286
 151           #define TOK_RESTRICTED 287
 152           #define TOK_TOSUBCLASS 288
 153           #define TOK_TRANSLATABLE 289
 154           #define TOK_INSTANCE 290
 155           #define TOK_OF 291
 156           #define TOK_AS 292
 157           #define TOK_PRAGMA 293
 158           #define TOK_SCHEMA 294
 159           #define TOK_INTEGER_VALUE 295
 160           #define TOK_REAL_VALUE 296
 161           #define TOK_STRING_VALUE 297
 162           #define TOK_CHAR_VALUE 298
 163           #define TOK_IDENT 299
 164           #define TOK_ALIAS_IDENTIFIER 300
 165           #define TOK_NULL 301
 166           #define YYERRCODE 256
 167           static const short yylhs[] = {                           -1,
 168               0,    0,    0,   35,   35,   35,   35,   36,   31,   31,
 169 mike  1.1    31,   31,   13,   13,   12,   12,   12,   12,   12,   12,
 170              29,   28,   28,   27,   27,   27,   27,   30,   30,   25,
 171              25,   24,   24,   24,   24,   24,    7,    7,    7,    7,
 172               7,    7,    7,    7,   10,   10,   10,   10,   11,   11,
 173              11,   11,    6,    6,    6,    6,    6,    6,    6,    6,
 174               6,    6,    6,    6,    6,    6,    3,    9,    9,    8,
 175               8,    8,    8,    8,    8,    8,    8,   17,   17,   18,
 176              18,   18,   19,   20,   20,    5,    5,    5,    5,    5,
 177               5,    1,    1,   15,   15,   16,   16,   16,   16,   23,
 178              22,   22,   21,   21,   21,   21,   21,   21,   21,   21,
 179              26,   32,   32,   32,   32,   14,    4,   34,   34,   33,
 180              33,    2,    2,    2,    2,    2,
 181           };
 182           static const short yylen[] = {                            2,
 183               1,    2,    1,    1,    1,    1,    1,    5,    3,    5,
 184               4,    6,    4,    3,    1,    1,    1,    2,    2,    2,
 185               3,    1,    3,    1,    2,    3,    4,    3,    1,    1,
 186               3,    1,    1,    1,    1,    1,    3,    4,    4,    5,
 187               5,    6,    6,    7,    3,    4,    4,    5,    6,    7,
 188               5,    6,    1,    1,    1,    1,    1,    1,    1,    1,
 189               1,    1,    1,    1,    1,    1,    2,    1,    3,    2,
 190 mike  1.1     2,    3,    3,    3,    3,    4,    4,    3,    2,    1,
 191               1,    1,    3,    1,    3,    1,    1,    1,    1,    1,
 192               1,    1,    2,    5,    6,    2,    4,    3,    5,    5,
 193               1,    3,    1,    1,    1,    1,    1,    1,    1,    1,
 194               5,    4,    5,    5,    6,    4,    2,    1,    2,    4,
 195               5,    1,    1,    1,    1,    1,
 196           };
 197           static const short yydefred[] = {                         0,
 198               3,    0,    0,    0,    0,    0,    0,    6,    0,    5,
 199               7,    1,    4,  123,  124,  126,  125,  122,    0,    0,
 200               0,    0,    0,   22,    0,    2,    0,    0,    0,    0,
 201               9,    0,    0,    0,    0,    0,    0,    0,   29,    0,
 202              21,    0,    0,    0,    0,   53,   54,   55,   56,   57,
 203              58,   59,   60,   61,   62,   63,   65,   64,   66,    0,
 204               0,    0,    0,   15,   17,   16,    0,    0,    0,    0,
 205               0,    0,    0,    0,  112,   92,    0,   90,   86,   87,
 206              88,   91,    0,    0,   32,   33,   34,   35,   36,   26,
 207              84,    0,    0,   23,    0,   11,    0,   10,   14,   67,
 208               0,    0,    0,   18,   20,   19,    0,    0,    0,    0,
 209               0,    0,   94,    0,    0,  117,    0,    0,  118,    0,
 210             114,   93,    8,   28,   83,    0,   27,    0,    0,  113,
 211 mike  1.1    82,   45,   80,    0,   81,    0,   37,    0,    0,   13,
 212               0,    0,    0,   79,   97,    0,    0,    0,   95,    0,
 213               0,    0,  119,   85,   12,  115,   47,    0,    0,    0,
 214              68,    0,    0,    0,   39,    0,   46,    0,    0,   38,
 215               0,    0,   78,   99,  103,  104,  105,  106,  107,  108,
 216             109,  110,  101,    0,    0,    0,    0,  116,   51,    0,
 217               0,    0,    0,    0,    0,   41,    0,   48,    0,    0,
 218               0,   40,    0,  100,    0,   30,    0,  120,    0,   75,
 219              74,   49,   69,    0,    0,   43,   52,    0,   42,    0,
 220             102,  111,    0,  121,   77,   76,   50,   44,   31,
 221           };
 222           static const short yydgoto[] = {                          7,
 223              83,   61,  159,   74,  133,  160,   64,  161,  162,   65,
 224              66,   67,   31,   75,    8,   33,  111,  134,  135,   92,
 225             183,  184,   71,   90,  207,  115,   24,   25,  163,   40,
 226              10,   11,  119,  120,   12,   13,
 227           };
 228           static const short yysindex[] = {                        55,
 229               0, -138, -138, -273, -278, -138,   53,    0, -223,    0,
 230               0,    0,    0,    0,    0,    0,    0,    0,  -39,   33,
 231            -138,  -13,  -27,    0,  -16,    0, -138, -258, -138,  -89,
 232 mike  1.1     0,  210,    2, -108, -239, -187, -123, -187,    0,   34,
 233               0, -138,  -35, -138,  -30,    0,    0,    0,    0,    0,
 234               0,    0,    0,    0,    0,    0,    0,    0,    0,   47,
 235            -168, -138, -138,    0,    0,    0,  -65,  135,  -21, -167,
 236             -12, -185,   45,    4,    0,    0,  -40,    0,    0,    0,
 237               0,    0, -176,   85,    0,    0,    0,    0,    0,    0,
 238               0,  -22, -123,    0, -138,    0, -108,    0,    0,    0,
 239             -11,   -2,   71,    0,    0,    0, -138, -138,  -88,   69,
 240              67,   92,    0, -150,   84,    0,   74, -138,    0,   58,
 241               0,    0,    0,    0,    0, -187,    0,  -30,    4,    0,
 242               0,    0,    0,   86,    0,  -41,    0,   69,    8,    0,
 243              -4,    3,   54,    0,    0,   69, -125,  108,    0,   69,
 244              98,   94,    0,    0,    0,    0,    0,  101, -138, -138,
 245               0,   -7,  135,  109,    0,   69,    0,  126,  -17,    0,
 246              69,   14,    0,    0,    0,    0,    0,    0,    0,    0,
 247               0,    0,    0,   22, -123,  127,   69,    0,    0,  117,
 248             117,  130,   40, -138, -138,    0,  150,    0,  154,   27,
 249             157,    0,   69,    0, -125,    0,   39,    0,  172,    0,
 250               0,    0,    0,  117,  117,    0,    0,  173,    0,  174,
 251               0,    0, -123,    0,    0,    0,    0,    0,    0,
 252           };
 253 mike  1.1 static const short yyrindex[] = {                         0,
 254               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 255               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 256               0,    0,  -15,    0,    0,    0,    0,    0,    0,    0,
 257               0,    0,    0,    0,    0,    0,    0,    0,    0,  -14,
 258               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 259               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 260               0,    0,    0,    0,    0,    0,    0,    0,  123,    0,
 261               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 262               0,    0,  -24,    0,    0,    0,    0,    0,    0,    0,
 263               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 264               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 265             193,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 266               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 267               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 268               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 269               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 270               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 271               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 272               0,    0,    0,    0,    0,    0,    0,    0,    0,   46,
 273              72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 274 mike  1.1     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 275               0,    0,    0,   76,   81,    0,    0,    0,    0,    0,
 276               0,    0,    0,    0,    0,    0,    0,    0,    0,
 277           };
 278           static const short yygindex[] = {                         0,
 279             205,  347,  -23,  158,  -28,  -26,  189,   73,   95,  198,
 280             200,    0,  -31,  -25,    0,    0,  -91,  -85,  246,    0,
 281              65,    0,    0,  -90,    0,    0,  229,    0,    9,    0,
 282               0,    0,  152,    0,  266,    0,
 283           };
 284           #define YYTABLESIZE 542
 285           static const short yytable[] = {                        158,
 286             123,    6,  127,   63,  144,   69,   62,   84,    9,   91,
 287             139,   96,   36,   98,   73,    9,   89,   21,   29,   89,
 288              22,  126,   95,  199,  145,    6,   35,   42,   24,   25,
 289              37,  114,   44,  192,   89,   60,  193,  136,   68,  110,
 290              63,  108,  169,   62,  107,   70,  113,  132,  121,    6,
 291             172,   27,  164,   28,  167,  168,  137,   76,  138,  103,
 292             174,  170,  204,  171,  186,  205,  165,  218,  166,  109,
 293             193,  130,  202,    6,  203,   68,   41,   24,   25,  222,
 294             197,  118,  223,   30,   78,  201,   71,   30,  109,   71,
 295 mike  1.1    32,   93,   30,  109,  206,   38,  155,  154,  210,  211,
 296              89,  209,  125,  156,  100,   99,  112,   79,   80,   76,
 297              81,   38,   70,   82,  116,   70,   73,  220,   38,   73,
 298             122,   72,  225,  226,   72,  124,   73,  146,  118,  140,
 299               6,  147,  229,  148,  150,    6,  195,   14,   15,  194,
 300              16,   17,  149,    6,  157,    6,  173,  185,    6,  175,
 301             176,  177,  188,  178,  179,  180,  181,  182,  187,  189,
 302              18,   85,   86,   87,   88,   89,   96,  196,   46,   47,
 303              48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
 304              58,   59,  152,   72,  198,  208,   14,   15,  212,   16,
 305              17,   38,   46,   47,   48,   49,   50,   51,   52,   53,
 306              54,   55,   56,   57,   58,   59,  143,  109,  216,   18,
 307              14,   15,  217,   16,   17,  219,   46,   47,   48,   49,
 308              50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
 309             224,  227,  228,   18,   14,   15,   98,   16,   17,   77,
 310              46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
 311              56,   57,   58,   59,  129,  104,  122,   18,   14,   15,
 312              78,   16,   17,  200,  105,  213,  106,   78,   39,  221,
 313              94,  153,   26,    0,    0,    0,    0,    0,    0,    0,
 314               0,   18,    0,   79,   80,   76,   81,    0,  131,   82,
 315              79,   80,   76,   81,    0,  131,   82,   46,   47,   48,
 316 mike  1.1    49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
 317              59,    1,    0,    0,    0,   14,   15,    0,   16,   17,
 318              14,   15,    0,   16,   17,    0,    0,    2,    0,    2,
 319               3,    0,    3,   14,   15,    0,   16,   17,   18,    0,
 320              78,    0,    4,   18,    4,    5,    0,    5,   19,   20,
 321               0,    0,   23,    0,    0,    0,   18,    0,    0,    0,
 322               0,    0,    0,   79,   80,   76,   81,   34,  131,   82,
 323               0,    0,    0,   43,    0,   45,    0,    0,    0,    0,
 324               0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
 325              97,    0,   46,   47,   48,   49,   50,   51,   52,   53,
 326              54,   55,   56,   57,   58,   59,    0,    0,  101,  102,
 327              14,   15,    0,   16,   17,    0,    0,    0,    0,  117,
 328               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 329               0,    0,    0,   18,    0,    0,    0,    0,    0,    0,
 330               0,  128,    0,    0,    0,    0,    0,    0,    0,    0,
 331               0,    0,    0,  141,  142,    0,    0,    0,    0,    0,
 332               0,    0,    0,    0,  151,    0,  117,   46,   47,   48,
 333              49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
 334              59,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 335               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 336               0,    0,    0,    0,    0,  190,  191,    0,    0,    0,
 337 mike  1.1     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 338               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 339               0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 340             214,  215,
 341           };
 342           static const short yycheck[] = {                         41,
 343              41,   91,   93,   30,   93,   32,   30,   36,    0,   38,
 344             102,   43,   40,   45,  123,    7,   41,  291,   58,   44,
 345             299,   44,   58,   41,  110,   91,   40,   44,   44,   44,
 346              58,   44,  291,   41,   59,  125,   44,   40,   30,   61,
 347              67,   68,   40,   67,   68,   44,   59,   59,   74,   91,
 348             142,  275,  138,  277,   59,  141,   59,  297,   61,  125,
 349             146,   59,   41,   61,  150,   44,   59,   41,   61,   91,
 350              44,   97,   59,   91,   61,   67,   93,   93,   93,   41,
 351             166,   73,   44,  123,  272,  171,   41,  123,   91,   44,
 352              58,   58,  123,   91,  185,  123,  128,  126,  190,  191,
 353             125,  187,  125,  129,  273,   59,  274,  295,  296,  297,
 354             298,  123,   41,  301,  300,   44,   41,  203,  123,   44,
 355             297,   41,  214,  215,   44,   41,  123,   61,  120,   59,
 356              91,   40,  223,  284,   61,   91,  163,  276,  277,  163,
 357             279,  280,   59,   91,   59,   91,   93,   40,   91,  275,
 358 mike  1.1   276,  277,   59,  279,  280,  281,  282,  283,   61,   59,
 359             299,  285,  286,  287,  288,  289,   44,   59,  258,  259,
 360             260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
 361             270,  271,  125,  292,   59,   59,  276,  277,   59,  279,
 362             280,  123,  258,  259,  260,  261,  262,  263,  264,  265,
 363             266,  267,  268,  269,  270,  271,  295,   91,   59,  299,
 364             276,  277,   59,  279,  280,   59,  258,  259,  260,  261,
 365             262,  263,  264,  265,  266,  267,  268,  269,  270,  271,
 366              59,   59,   59,  299,  276,  277,   44,  279,  280,   35,
 367             258,  259,  260,  261,  262,  263,  264,  265,  266,  267,
 368             268,  269,  270,  271,   97,   67,  297,  299,  276,  277,
 369             272,  279,  280,  169,   67,  193,   67,  272,   23,  205,
 370              42,  120,    7,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 371              -1,  299,   -1,  295,  296,  297,  298,   -1,  300,  301,
 372             295,  296,  297,  298,   -1,  300,  301,  258,  259,  260,
 373             261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
 374             271,  257,   -1,   -1,   -1,  276,  277,   -1,  279,  280,
 375             276,  277,   -1,  279,  280,   -1,   -1,  275,   -1,  275,
 376             278,   -1,  278,  276,  277,   -1,  279,  280,  299,   -1,
 377             272,   -1,  290,  299,  290,  293,   -1,  293,    2,    3,
 378              -1,   -1,    6,   -1,   -1,   -1,  299,   -1,   -1,   -1,
 379 mike  1.1    -1,   -1,   -1,  295,  296,  297,  298,   21,  300,  301,
 380              -1,   -1,   -1,   27,   -1,   29,   -1,   -1,   -1,   -1,
 381              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   -1,
 382              44,   -1,  258,  259,  260,  261,  262,  263,  264,  265,
 383             266,  267,  268,  269,  270,  271,   -1,   -1,   62,   63,
 384             276,  277,   -1,  279,  280,   -1,   -1,   -1,   -1,   73,
 385              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 386              -1,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,   -1,
 387              -1,   95,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 388              -1,   -1,   -1,  107,  108,   -1,   -1,   -1,   -1,   -1,
 389              -1,   -1,   -1,   -1,  118,   -1,  120,  258,  259,  260,
 390             261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
 391             271,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 392              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 393              -1,   -1,   -1,   -1,   -1,  159,  160,   -1,   -1,   -1,
 394              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 395              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 396              -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
 397             194,  195,
 398           };
 399           #define YYFINAL 7
 400 mike  1.1 #ifndef YYDEBUG
 401           #define YYDEBUG 0
 402           #endif
 403           #define YYMAXTOKEN 301
 404           #if YYDEBUG
 405           static const char *yyname[] = {
 406           
 407           "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,
 408           0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,"'='",
 409           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,
 410           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,
 411           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 412           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 413           0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 414           0,0,0,"TOK_ERROR","TOK_BOOLEAN","TOK_SINT8","TOK_UINT8","TOK_SINT16",
 415           "TOK_UINT16","TOK_SINT32","TOK_UINT32","TOK_SINT64","TOK_UINT64","TOK_REAL32",
 416           "TOK_REAL64","TOK_DATETIME","TOK_CHAR16","TOK_STRING","TOK_BOOLEAN_VALUE",
 417           "TOK_REF","TOK_SCOPE","TOK_CLASS","TOK_ASSOCIATION","TOK_INDICATION",
 418           "TOK_QUALIFIER","TOK_PROPERTY","TOK_REFERENCE","TOK_METHOD","TOK_PARAMETER",
 419           "TOK_ANY","TOK_FLAVOR","TOK_ENABLEOVERRIDE","TOK_DISABLEOVERRIDE",
 420           "TOK_RESTRICTED","TOK_TOSUBCLASS","TOK_TRANSLATABLE","TOK_INSTANCE","TOK_OF",
 421 mike  1.1 "TOK_AS","TOK_PRAGMA","TOK_SCHEMA","TOK_INTEGER_VALUE","TOK_REAL_VALUE",
 422           "TOK_STRING_VALUE","TOK_CHAR_VALUE","TOK_IDENT","TOK_ALIAS_IDENTIFIER",
 423           "TOK_NULL",
 424           };
 425           static const char *yyrule[] = {
 426           "$accept : mofSpecification",
 427           "mofSpecification : mofProduction",
 428           "mofSpecification : mofSpecification mofProduction",
 429           "mofSpecification : TOK_ERROR",
 430           "mofProduction : compilerDirective",
 431           "mofProduction : classDeclaration",
 432           "mofProduction : qualifierDeclaration",
 433           "mofProduction : instanceDeclaration",
 434           "compilerDirective : TOK_PRAGMA TOK_IDENT '(' stringValue ')'",
 435           "classDeclaration : TOK_CLASS identifier classBody",
 436           "classDeclaration : TOK_CLASS identifier ':' identifier classBody",
 437           "classDeclaration : qualifierExpr TOK_CLASS identifier classBody",
 438           "classDeclaration : qualifierExpr TOK_CLASS identifier ':' identifier classBody",
 439           "classBody : '{' classFeatureList '}' ';'",
 440           "classBody : '{' '}' ';'",
 441           "classFeatureList : propertyDeclaration",
 442 mike  1.1 "classFeatureList : methodDeclaration",
 443           "classFeatureList : referenceDeclaration",
 444           "classFeatureList : classFeatureList propertyDeclaration",
 445           "classFeatureList : classFeatureList methodDeclaration",
 446           "classFeatureList : classFeatureList referenceDeclaration",
 447           "qualifierExpr : '[' qualifierList ']'",
 448           "qualifierList : qualifier",
 449           "qualifierList : qualifierList ',' qualifier",
 450           "qualifier : identifier",
 451           "qualifier : identifier qualifierParameter",
 452           "qualifier : identifier ':' flavor",
 453           "qualifier : identifier qualifierParameter ':' flavor",
 454           "qualifierParameter : '(' constantValue ')'",
 455           "qualifierParameter : arrayInitializer",
 456           "flavorList : flavor",
 457           "flavorList : flavorList ',' flavor",
 458           "flavor : TOK_ENABLEOVERRIDE",
 459           "flavor : TOK_DISABLEOVERRIDE",
 460           "flavor : TOK_RESTRICTED",
 461           "flavor : TOK_TOSUBCLASS",
 462           "flavor : TOK_TRANSLATABLE",
 463 mike  1.1 "propertyDeclaration : dataType identifier ';'",
 464           "propertyDeclaration : qualifierExpr dataType identifier ';'",
 465           "propertyDeclaration : dataType identifier subscript ';'",
 466           "propertyDeclaration : qualifierExpr dataType identifier subscript ';'",
 467           "propertyDeclaration : dataType identifier '=' initializer ';'",
 468           "propertyDeclaration : qualifierExpr dataType identifier '=' initializer ';'",
 469           "propertyDeclaration : dataType identifier subscript '=' initializer ';'",
 470           "propertyDeclaration : qualifierExpr dataType identifier subscript '=' initializer ';'",
 471           "referenceDeclaration : objectRef identifier ';'",
 472           "referenceDeclaration : qualifierExpr objectRef identifier ';'",
 473           "referenceDeclaration : objectRef identifier initializer ';'",
 474           "referenceDeclaration : qualifierExpr objectRef identifier initializer ';'",
 475           "methodDeclaration : dataType identifier '(' parameterList ')' ';'",
 476           "methodDeclaration : qualifierExpr dataType identifier '(' parameterList ')' ';'",
 477           "methodDeclaration : dataType identifier '(' ')' ';'",
 478           "methodDeclaration : qualifierExpr dataType identifier '(' ')' ';'",
 479           "dataType : TOK_BOOLEAN",
 480           "dataType : TOK_SINT8",
 481           "dataType : TOK_UINT8",
 482           "dataType : TOK_SINT16",
 483           "dataType : TOK_UINT16",
 484 mike  1.1 "dataType : TOK_SINT32",
 485           "dataType : TOK_UINT32",
 486           "dataType : TOK_SINT64",
 487           "dataType : TOK_UINT64",
 488           "dataType : TOK_REAL32",
 489           "dataType : TOK_REAL64",
 490           "dataType : TOK_CHAR16",
 491           "dataType : TOK_DATETIME",
 492           "dataType : TOK_STRING",
 493           "objectRef : identifier TOK_REF",
 494           "parameterList : parameter",
 495           "parameterList : parameterList ',' parameter",
 496           "parameter : dataType identifier",
 497           "parameter : objectRef identifier",
 498           "parameter : qualifierExpr dataType identifier",
 499           "parameter : qualifierExpr objectRef identifier",
 500           "parameter : dataType identifier subscript",
 501           "parameter : objectRef identifier subscript",
 502           "parameter : qualifierExpr dataType identifier subscript",
 503           "parameter : qualifierExpr objectRef identifier subscript",
 504           "subscript : '[' TOK_INTEGER_VALUE ']'",
 505 mike  1.1 "subscript : '[' ']'",
 506           "initializer : constantValue",
 507           "initializer : arrayInitializer",
 508           "initializer : TOK_ALIAS_IDENTIFIER",
 509           "arrayInitializer : '{' arrayInitializerList '}'",
 510           "arrayInitializerList : constantValue",
 511           "arrayInitializerList : arrayInitializerList ',' constantValue",
 512           "constantValue : TOK_INTEGER_VALUE",
 513           "constantValue : TOK_REAL_VALUE",
 514           "constantValue : TOK_CHAR_VALUE",
 515           "constantValue : stringValue",
 516           "constantValue : TOK_BOOLEAN_VALUE",
 517           "constantValue : TOK_NULL",
 518           "stringValue : TOK_STRING_VALUE",
 519           "stringValue : stringValue TOK_STRING_VALUE",
 520           "qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr ';'",
 521           "qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr flavorExpr ';'",
 522           "qualifierType : ':' dataType",
 523           "qualifierType : ':' dataType '=' initializer",
 524           "qualifierType : ':' dataType subscript",
 525           "qualifierType : ':' dataType subscript '=' initializer",
 526 mike  1.1 "scopeExpr : ',' TOK_SCOPE '(' scopeList ')'",
 527           "scopeList : scope",
 528           "scopeList : scopeList ',' scope",
 529           "scope : TOK_CLASS",
 530           "scope : TOK_ASSOCIATION",
 531           "scope : TOK_INDICATION",
 532           "scope : TOK_PROPERTY",
 533           "scope : TOK_REFERENCE",
 534           "scope : TOK_METHOD",
 535           "scope : TOK_PARAMETER",
 536           "scope : TOK_ANY",
 537           "flavorExpr : ',' TOK_FLAVOR '(' flavorList ')'",
 538           "instanceDeclaration : TOK_INSTANCE TOK_OF identifier instanceBody",
 539           "instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier instanceBody",
 540           "instanceDeclaration : TOK_INSTANCE TOK_OF identifier alias instanceBody",
 541           "instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier alias instanceBody",
 542           "instanceBody : '{' valueInitializerList '}' ';'",
 543           "alias : TOK_AS TOK_ALIAS_IDENTIFIER",
 544           "valueInitializerList : valueInitializer",
 545           "valueInitializerList : valueInitializerList valueInitializer",
 546           "valueInitializer : identifier '=' initializer ';'",
 547 mike  1.1 "valueInitializer : qualifierExpr identifier '=' initializer ';'",
 548           "identifier : TOK_IDENT",
 549           "identifier : TOK_ASSOCIATION",
 550           "identifier : TOK_INDICATION",
 551           "identifier : TOK_REFERENCE",
 552           "identifier : TOK_PROPERTY",
 553           
 554           };
 555           #endif
 556           
 557           int      yydebug;
 558           int      yynerrs;
 559           
 560           int      yyerrflag;
 561           int      yychar;
 562           YYSTYPE  yyval;
 563           YYSTYPE  yylval;
 564           
 565           /* define the initial stack-sizes */
 566           #ifdef YYSTACKSIZE
 567           #undef YYMAXDEPTH
 568 mike  1.1 #define YYMAXDEPTH  YYSTACKSIZE
 569           #else
 570           #ifdef YYMAXDEPTH
 571           #define YYSTACKSIZE YYMAXDEPTH
 572           #else
 573           #define YYSTACKSIZE 500
 574           #define YYMAXDEPTH  500
 575           #endif
 576           #endif
 577           
 578           #define YYINITSTACKSIZE 500
 579           
 580           typedef struct {
 581               unsigned stacksize;
 582               short    *s_base;
 583               short    *s_mark;
 584               short    *s_last;
 585               YYSTYPE  *l_base;
 586               YYSTYPE  *l_mark;
 587           } YYSTACKDATA;
 588           /* variables for the parser stack */
 589 mike  1.1 static YYSTACKDATA yystack;
 590           
 591           #if YYDEBUG
 592           #include <stdio.h>		/* needed for printf */
 593           #endif
 594           
 595           #include <stdlib.h>	/* needed for malloc, etc */
 596           #include <string.h>	/* needed for memset */
 597           
 598           /* allocate initial stack or double stack size, up to YYMAXDEPTH */
 599           static int yygrowstack(YYSTACKDATA *data)
 600           {
 601               int i;
 602               unsigned newsize;
 603               short *newss;
 604               YYSTYPE *newvs;
 605           
 606               if ((newsize = data->stacksize) == 0)
 607                   newsize = YYINITSTACKSIZE;
 608               else if (newsize >= YYMAXDEPTH)
 609                   return -1;
 610 mike  1.1     else if ((newsize *= 2) > YYMAXDEPTH)
 611                   newsize = YYMAXDEPTH;
 612           
 613               i = data->s_mark - data->s_base;
 614               newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
 615               if (newss == 0)
 616                   return -1;
 617           
 618               data->s_base = newss;
 619               data->s_mark = newss + i;
 620           
 621               newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
 622               if (newvs == 0)
 623                   return -1;
 624           
 625               data->l_base = newvs;
 626               data->l_mark = newvs + i;
 627           
 628               data->stacksize = newsize;
 629               data->s_last = data->s_base + newsize - 1;
 630               return 0;
 631 mike  1.1 }
 632           
 633           #if YYPURE || defined(YY_NO_LEAKS)
 634           static void yyfreestack(YYSTACKDATA *data)
 635           {
 636               free(data->s_base);
 637               free(data->l_base);
 638               memset(data, 0, sizeof(*data));
 639           }
 640           #else
 641           #define yyfreestack(data) /* nothing */
 642           #endif
 643           
 644           #define YYABORT  goto yyabort
 645           #define YYREJECT goto yyabort
 646           #define YYACCEPT goto yyaccept
 647           #define YYERROR  goto yyerrlab
 648           
 649           int
 650           YYPARSE_DECL()
 651           {
 652 mike  1.1     int yym, yyn, yystate;
 653           #if YYDEBUG
 654               const char *yys;
 655           
 656               if ((yys = getenv("YYDEBUG")) != 0)
 657               {
 658                   yyn = *yys;
 659                   if (yyn >= '0' && yyn <= '9')
 660                       yydebug = yyn - '0';
 661               }
 662           #endif
 663           
 664               yynerrs = 0;
 665               yyerrflag = 0;
 666               yychar = YYEMPTY;
 667               yystate = 0;
 668           
 669           #if YYPURE
 670               memset(&yystack, 0, sizeof(yystack));
 671           #endif
 672           
 673 mike  1.1     if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
 674               yystack.s_mark = yystack.s_base;
 675               yystack.l_mark = yystack.l_base;
 676               yystate = 0;
 677               *yystack.s_mark = 0;
 678           
 679           yyloop:
 680               if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
 681               if (yychar < 0)
 682               {
 683                   if ((yychar = YYLEX) < 0) yychar = 0;
 684           #if YYDEBUG
 685                   if (yydebug)
 686                   {
 687                       yys = 0;
 688                       if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
 689                       if (!yys) yys = "illegal-symbol";
 690                       printf("%sdebug: state %d, reading %d (%s)\n",
 691                               YYPREFIX, yystate, yychar, yys);
 692                   }
 693           #endif
 694 mike  1.1     }
 695               if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
 696                       yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
 697               {
 698           #if YYDEBUG
 699                   if (yydebug)
 700                       printf("%sdebug: state %d, shifting to state %d\n",
 701                               YYPREFIX, yystate, yytable[yyn]);
 702           #endif
 703                   if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
 704                   {
 705                       goto yyoverflow;
 706                   }
 707                   yystate = yytable[yyn];
 708                   *++yystack.s_mark = yytable[yyn];
 709                   *++yystack.l_mark = yylval;
 710                   yychar = YYEMPTY;
 711                   if (yyerrflag > 0)  --yyerrflag;
 712                   goto yyloop;
 713               }
 714               if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
 715 mike  1.1             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
 716               {
 717                   yyn = yytable[yyn];
 718                   goto yyreduce;
 719               }
 720               if (yyerrflag) goto yyinrecovery;
 721           
 722               yyerror("syntax error");
 723           
 724               goto yyerrlab;
 725           
 726           yyerrlab:
 727               ++yynerrs;
 728           
 729           yyinrecovery:
 730               if (yyerrflag < 3)
 731               {
 732                   yyerrflag = 3;
 733                   for (;;)
 734                   {
 735                       if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
 736 mike  1.1                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
 737                       {
 738           #if YYDEBUG
 739                           if (yydebug)
 740                               printf("%sdebug: state %d, error recovery shifting\
 741            to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
 742           #endif
 743                           if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
 744                           {
 745                               goto yyoverflow;
 746                           }
 747                           yystate = yytable[yyn];
 748                           *++yystack.s_mark = yytable[yyn];
 749                           *++yystack.l_mark = yylval;
 750                           goto yyloop;
 751                       }
 752                       else
 753                       {
 754           #if YYDEBUG
 755                           if (yydebug)
 756                               printf("%sdebug: error recovery discarding state %d\n",
 757 mike  1.1                             YYPREFIX, *yystack.s_mark);
 758           #endif
 759                           if (yystack.s_mark <= yystack.s_base) goto yyabort;
 760                           --yystack.s_mark;
 761                           --yystack.l_mark;
 762                       }
 763                   }
 764               }
 765               else
 766               {
 767                   if (yychar == 0) goto yyabort;
 768           #if YYDEBUG
 769                   if (yydebug)
 770                   {
 771                       yys = 0;
 772                       if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
 773                       if (!yys) yys = "illegal-symbol";
 774                       printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
 775                               YYPREFIX, yystate, yychar, yys);
 776                   }
 777           #endif
 778 mike  1.1         yychar = YYEMPTY;
 779                   goto yyloop;
 780               }
 781           
 782           yyreduce:
 783           #if YYDEBUG
 784               if (yydebug)
 785                   printf("%sdebug: state %d, reducing by rule %d (%s)\n",
 786                           YYPREFIX, yystate, yyn, yyrule[yyn]);
 787           #endif
 788               yym = yylen[yyn];
 789               if (yym)
 790                   yyval = yystack.l_mark[1-yym];
 791               else
 792                   memset(&yyval, 0, sizeof yyval);
 793               switch (yyn)
 794               {
 795           case 1:
 796           #line 139 "mof.y"
 797           	{
 798               }
 799 mike  1.1 break;
 800           case 2:
 801           #line 142 "mof.y"
 802           	{ 
 803               }
 804           break;
 805           case 3:
 806           #line 145 "mof.y"
 807           	{
 808                   YYABORT;
 809               }
 810           break;
 811           case 4:
 812           #line 151 "mof.y"
 813           	{
 814               }
 815           break;
 816           case 5:
 817           #line 154 "mof.y"
 818           	{
 819                   /* [TODO: validate the class here] */
 820 mike  1.1         yystack.l_mark[0].classDeclaration->flags = MI_FLAG_CLASS;
 821                   yystack.l_mark[0].classDeclaration->flags |= GetQualFlags(yystack.l_mark[0].classDeclaration->qualifiers, yystack.l_mark[0].classDeclaration->numQualifiers);
 822                   if (FinalizeClass(yystack.l_mark[0].classDeclaration) != 0)
 823                       YYABORT;
 824                       
 825                   AddClassDecl(yystack.l_mark[0].classDeclaration);
 826           
 827                   if (state.classDeclCallback)
 828                       (*state.classDeclCallback)(yystack.l_mark[0].classDeclaration, state.classDeclCallbackData);
 829               }
 830           break;
 831           case 6:
 832           #line 167 "mof.y"
 833           	{
 834                   AddQualifierDeclaration(yystack.l_mark[0].qualifierDeclaration);
 835           
 836                   if (state.qualifierDeclCallback)
 837                       (*state.qualifierDeclCallback)(yystack.l_mark[0].qualifierDeclaration, state.qualifierDeclCallbackData);
 838               }
 839           break;
 840           case 7:
 841 mike  1.1 #line 174 "mof.y"
 842           	{
 843                   if (FinalizeInstance(yystack.l_mark[0].instanceDeclaration) != 0)
 844                       YYABORT;
 845           
 846                   AddInstanceDecl(yystack.l_mark[0].instanceDeclaration);
 847           
 848                   if (state.instanceDeclCallback)
 849                       (*state.instanceDeclCallback)(yystack.l_mark[0].instanceDeclaration, state.instanceDeclCallbackData);
 850               }
 851           break;
 852           case 8:
 853           #line 186 "mof.y"
 854           	{
 855                   if (strcmp(yystack.l_mark[-3].string, "include") == 0)
 856                   {
 857                       if (openIncludeFile(yystack.l_mark[-1].string) != 0)
 858                           YYABORT;
 859                   }
 860                   else if (strcmp(yystack.l_mark[-3].string, "instancelocale") == 0)
 861                   {
 862 mike  1.1             if (state.pragmaCallback)
 863                           (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
 864                   }
 865                   else if (strcmp(yystack.l_mark[-3].string, "locale") == 0)
 866                   {
 867                       if (state.pragmaCallback)
 868                           (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
 869                   }
 870                   else if (strcmp(yystack.l_mark[-3].string, "namespace") == 0)
 871                   {
 872                       if (state.pragmaCallback)
 873                           (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
 874                   }
 875                   else
 876                   {
 877                       yywarnf(ID_UNKNOWN_PRAGMA, 
 878                           "warning: unknown pragma: %s=%s", yystack.l_mark[-3].string, yystack.l_mark[-1].string);
 879           
 880                       if (state.pragmaCallback)
 881                           (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
 882                   }
 883 mike  1.1     }
 884           break;
 885           case 9:
 886           #line 219 "mof.y"
 887           	{
 888                   /* Check whether class already exists */
 889                   if (FindClassDecl(yystack.l_mark[-1].string))
 890                   {
 891                       yyerrorf(ID_CLASS_ALREADY_DEFINED, 
 892                           "class already defined: \"%s\"", yystack.l_mark[-1].string);
 893                       YYABORT;
 894                   }
 895           
 896                   yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
 897                   yyval.classDeclaration->flags = MI_FLAG_CLASS;
 898                   yyval.classDeclaration->name = yystack.l_mark[-1].string;
 899                   yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
 900                   yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
 901                   yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
 902                   yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
 903               }
 904 mike  1.1 break;
 905           case 10:
 906           #line 237 "mof.y"
 907           	{
 908                   const MI_ClassDecl* scd;
 909           
 910                   /* Check whether class already exists */
 911                   if (FindClassDecl(yystack.l_mark[-3].string))
 912                   {
 913                       yyerrorf(ID_CLASS_ALREADY_DEFINED, 
 914                           "class already defined: \"%s\"", yystack.l_mark[-3].string);
 915                       YYABORT;
 916                   }
 917            
 918                   /* Check whether superclass exists */
 919                   scd = FindClassDecl(yystack.l_mark[-1].string);
 920           
 921                   if (!scd)
 922                   {
 923                       yyerrorf(ID_UNDEFINED_SUPERCLASS, 
 924                           "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string);
 925 mike  1.1             YYABORT;
 926                   }
 927           
 928                   yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
 929                   yyval.classDeclaration->flags = MI_FLAG_CLASS;
 930                   yyval.classDeclaration->name = yystack.l_mark[-3].string;
 931                   yyval.classDeclaration->superClass = yystack.l_mark[-1].string;
 932                   yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd;
 933                   yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
 934                   yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
 935                   yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
 936                   yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
 937               }
 938           break;
 939           case 11:
 940           #line 269 "mof.y"
 941           	{
 942                   /* Check qualifier scope */
 943                   if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-3].qualifierList) != 0)
 944                       YYABORT;
 945           
 946 mike  1.1         /* Check whether class already exists */
 947                   if (FindClassDecl(yystack.l_mark[-1].string))
 948                   {
 949                       yyerrorf(ID_CLASS_ALREADY_DEFINED, 
 950                           "class already defined: \"%s\"", yystack.l_mark[-1].string);
 951                       YYABORT;
 952                   }
 953           
 954                   yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
 955                   yyval.classDeclaration->flags = MI_FLAG_CLASS;
 956                   yyval.classDeclaration->name = yystack.l_mark[-1].string;
 957                   yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
 958                   yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
 959                   yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
 960                   yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
 961                   yyval.classDeclaration->qualifiers = yystack.l_mark[-3].qualifierList.data;
 962                   yyval.classDeclaration->numQualifiers = yystack.l_mark[-3].qualifierList.size;
 963               }
 964           break;
 965           case 12:
 966           #line 293 "mof.y"
 967 mike  1.1 	{
 968                   const MI_ClassDecl* scd;
 969           
 970                   /* Check qualifier scope */
 971                   if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-5].qualifierList) != 0)
 972                       YYABORT;
 973           
 974                   /* Check whether class already exists */
 975                   if (FindClassDecl(yystack.l_mark[-3].string))
 976                   {
 977                       yyerrorf(ID_CLASS_ALREADY_DEFINED, 
 978                           "class already defined: \"%s\"", yystack.l_mark[-3].string);
 979                       YYABORT;
 980                   }
 981           
 982                   /* Check whether superclass exists */
 983                   scd = FindClassDecl(yystack.l_mark[-1].string);
 984           
 985                   if (!scd)
 986                   {
 987                       yyerrorf(ID_UNDEFINED_SUPERCLASS, 
 988 mike  1.1                 "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string);
 989                       YYABORT;
 990                   }
 991           
 992                   yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
 993                   yyval.classDeclaration->flags = MI_FLAG_CLASS;
 994                   yyval.classDeclaration->name = yystack.l_mark[-3].string;
 995                   yyval.classDeclaration->superClass = scd->name;
 996                   yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd;
 997                   yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
 998                   yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
 999                   yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
1000                   yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
1001                   yyval.classDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data;
1002                   yyval.classDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size;
1003               }
1004           break;
1005           case 13:
1006           #line 333 "mof.y"
1007           	{
1008                   yyval.featureList = yystack.l_mark[-2].featureList;
1009 mike  1.1     }
1010           break;
1011           case 14:
1012           #line 337 "mof.y"
1013           	{
1014                   yyval.featureList.propertySet.data = NULL;
1015                   yyval.featureList.propertySet.size = 0;
1016                   yyval.featureList.methodList.data = NULL;
1017                   yyval.featureList.methodList.size = 0;
1018               }
1019           break;
1020           case 15:
1021           #line 346 "mof.y"
1022           	{
1023                   if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0)
1024                   {
1025                       YYABORT;
1026                   }
1027                   yyval.featureList.propertySet.data = NULL;
1028                   yyval.featureList.propertySet.size = 0;
1029                   yyval.featureList.methodList.data = NULL;
1030 mike  1.1         yyval.featureList.methodList.size = 0;
1031                   yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
1032                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
1033                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
1034               }
1035           break;
1036           case 16:
1037           #line 360 "mof.y"
1038           	{
1039                   yyval.featureList.propertySet.data = NULL;
1040                   yyval.featureList.propertySet.size = 0;
1041                   yyval.featureList.methodList.data = NULL;
1042                   yyval.featureList.methodList.size = 0;
1043                   yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD;
1044                   yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers);
1045                   PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl);
1046               }
1047           break;
1048           case 17:
1049           #line 370 "mof.y"
1050           	{
1051 mike  1.1         yyval.featureList.propertySet.data = NULL;
1052                   yyval.featureList.propertySet.size = 0;
1053                   yyval.featureList.methodList.data = NULL;
1054                   yyval.featureList.methodList.size = 0;
1055                   yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
1056                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
1057                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
1058               }
1059           break;
1060           case 18:
1061           #line 380 "mof.y"
1062           	{
1063                   if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0)
1064                   {
1065                       YYABORT;
1066                   }
1067           
1068                   if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
1069                   {
1070                       yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
1071                           "class feature already defined: \"%s\"", yystack.l_mark[0].property->name);
1072 mike  1.1             YYABORT;
1073                   }
1074           
1075                   yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
1076                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
1077                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
1078               }
1079           break;
1080           case 19:
1081           #line 398 "mof.y"
1082           	{
1083                   if (FindMethod(&yystack.l_mark[-1].featureList.methodList, yystack.l_mark[0].methodDecl->name))
1084                   {
1085                       yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
1086                           "class feature already defined: \"%s\"", yystack.l_mark[0].methodDecl->name);
1087                       YYABORT;
1088                   }
1089           
1090                   yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD;
1091                   yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers);
1092                   PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl);
1093 mike  1.1     }
1094           break;
1095           case 20:
1096           #line 411 "mof.y"
1097           	{
1098                   if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
1099                   {
1100                       yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
1101                           "class feature already defined: \"%s\"", yystack.l_mark[0].property->name);
1102                       YYABORT;
1103                   }
1104           
1105                   yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
1106                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
1107                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
1108               }
1109           break;
1110           case 21:
1111           #line 426 "mof.y"
1112           	{
1113                   yyval.qualifierList = yystack.l_mark[-1].qualifierList;
1114 mike  1.1     }
1115           break;
1116           case 22:
1117           #line 432 "mof.y"
1118           	{
1119                   yyval.qualifierList.data = NULL;
1120                   yyval.qualifierList.size = 0;
1121                   PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier);
1122               }
1123           break;
1124           case 23:
1125           #line 438 "mof.y"
1126           	{
1127                   if (FindQualifier(&yystack.l_mark[-2].qualifierList, yystack.l_mark[0].qualifier->name))
1128                   {
1129                       yyerrorf(ID_DUPLICATE_QUALIFIER, 
1130                           "duplicate qualifier: \"%s\"", yystack.l_mark[0].qualifier->name);
1131                       YYABORT;
1132                   }
1133           
1134                   PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier);
1135 mike  1.1     }
1136           break;
1137           case 24:
1138           #line 451 "mof.y"
1139           	{
1140                   MI_Qualifier* q;
1141                   const MI_QualifierDecl* qd;
1142           
1143                   qd = FindQualifierDeclaration(yystack.l_mark[0].string);
1144           
1145                   if (!qd)
1146                   {
1147                       yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[0].string);
1148                       YYABORT;
1149                   }
1150           
1151                   if (qd->type != MI_BOOLEAN)
1152                   {
1153                       yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, 
1154                           "qualifier is missing initializer: \"%s\"", yystack.l_mark[0].string);
1155                       YYABORT;
1156 mike  1.1         }
1157                   
1158                   
1159                   q = CALLOC_T(MI_Qualifier, 1);
1160                   q->name = qd->name; /* use casing of qualifier declaration name */
1161                   q->type = qd->type;
1162                   q->flavor = qd->flavor;
1163                   q->value = NewTrueValue();
1164                   yyval.qualifier = q;
1165               }
1166           break;
1167           case 25:
1168           #line 479 "mof.y"
1169           	{
1170                   MI_Qualifier* q;
1171                   const MI_QualifierDecl* qd;
1172                   void* value;
1173           
1174                   qd = FindQualifierDeclaration(yystack.l_mark[-1].string);
1175           
1176                   if (!qd)
1177 mike  1.1         {
1178                       yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-1].string);
1179                       YYABORT;
1180                   }
1181           
1182                   if (InitializerToValue(&yystack.l_mark[0].initializer, qd->type, &value) != 0)
1183                   {
1184                       yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, 
1185                           "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-1].string);
1186                       YYABORT;
1187                   }
1188                   
1189                   q = CALLOC_T(MI_Qualifier, 1);
1190                   q->name = qd->name; /* use casing of qualifier declaration name */
1191                   q->type = qd->type;
1192                   q->flavor = qd->flavor;
1193                   q->value = value;
1194                   yyval.qualifier = q;
1195               }
1196           break;
1197           case 26:
1198 mike  1.1 #line 507 "mof.y"
1199           	{
1200                   MI_Qualifier* q;
1201                   const MI_QualifierDecl* qd;
1202           
1203                   qd = FindQualifierDeclaration(yystack.l_mark[-2].string);
1204           
1205                   if (!qd)
1206                   {
1207                       yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-2].string);
1208                       YYABORT;
1209                   }
1210           
1211                   if (qd->type != MI_BOOLEAN)
1212                   {
1213                       yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, 
1214                           "qualifier is missing initializer: \"%s\"", yystack.l_mark[-2].string);
1215                       YYABORT;
1216                   }
1217                   
1218                   q = CALLOC_T(MI_Qualifier, 1);
1219 mike  1.1         q->name = qd->name; /* use casing of qualifier declaration name */
1220                   q->type = qd->type;
1221                   q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor);
1222                   q->value = NewTrueValue();
1223                   yyval.qualifier = q;
1224               }
1225           break;
1226           case 27:
1227           #line 534 "mof.y"
1228           	{
1229                   MI_Qualifier* q;
1230                   const MI_QualifierDecl* qd;
1231                   void* value;
1232           
1233                   qd = FindQualifierDeclaration(yystack.l_mark[-3].string);
1234           
1235                   if (!qd)
1236                   {
1237                       yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-3].string);
1238                       YYABORT;
1239                   }
1240 mike  1.1 
1241                   if (InitializerToValue(&yystack.l_mark[-2].initializer, qd->type, &value) != 0)
1242                   {
1243                       yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, 
1244                           "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-3].string);
1245                       YYABORT;
1246                   }
1247                   
1248                   q = CALLOC_T(MI_Qualifier, 1);
1249                   q->name = qd->name; /* use casing of qualifier declaration name */
1250                   q->type = qd->type;
1251                   q->value = value;
1252                   q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor);
1253                   yyval.qualifier = q;
1254               }
1255           break;
1256           case 28:
1257           #line 564 "mof.y"
1258           	{
1259                   memset(&yyval.initializer, 0, sizeof(yyval.initializer));
1260                   yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
1261 mike  1.1         yyval.initializer.data[0] = yystack.l_mark[-1].constantValue;
1262                   yyval.initializer.size = 1;
1263               }
1264           break;
1265           case 29:
1266           #line 571 "mof.y"
1267           	{
1268                   yyval.initializer = yystack.l_mark[0].initializer;
1269               }
1270           break;
1271           case 30:
1272           #line 577 "mof.y"
1273           	{
1274                   yyval.flags = yystack.l_mark[0].flags;
1275               }
1276           break;
1277           case 31:
1278           #line 581 "mof.y"
1279           	{
1280                   yyval.flags |= yystack.l_mark[0].flags;
1281               }
1282 mike  1.1 break;
1283           case 32:
1284           #line 587 "mof.y"
1285           	{
1286                   yyval.flags = MI_FLAG_ENABLEOVERRIDE;
1287               }
1288           break;
1289           case 33:
1290           #line 591 "mof.y"
1291           	{
1292                   yyval.flags = MI_FLAG_DISABLEOVERRIDE;
1293               }
1294           break;
1295           case 34:
1296           #line 595 "mof.y"
1297           	{
1298                   yyval.flags = MI_FLAG_RESTRICTED;
1299               }
1300           break;
1301           case 35:
1302           #line 599 "mof.y"
1303 mike  1.1 	{
1304                   yyval.flags = MI_FLAG_TOSUBCLASS;
1305               }
1306           break;
1307           case 36:
1308           #line 603 "mof.y"
1309           	{
1310                   yyval.flags = MI_FLAG_TRANSLATABLE;
1311               }
1312           break;
1313           case 37:
1314           #line 609 "mof.y"
1315           	{
1316                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1317                   yyval.property->name = yystack.l_mark[-1].string;
1318                   yyval.property->type = yystack.l_mark[-2].type;
1319               }
1320           break;
1321           case 38:
1322           #line 615 "mof.y"
1323           	{
1324 mike  1.1         /* Check qualifier scope */
1325                   if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-3].qualifierList) != 0)
1326                       YYABORT;
1327           
1328                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1329                   yyval.property->name = yystack.l_mark[-1].string;
1330                   yyval.property->type = yystack.l_mark[-2].type;
1331                   yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data;
1332                   yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size;
1333               }
1334           break;
1335           case 39:
1336           #line 627 "mof.y"
1337           	{
1338                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1339                   yyval.property->name = yystack.l_mark[-2].string;
1340                   yyval.property->type = ARRAYOF(yystack.l_mark[-3].type);
1341                   yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer;
1342               }
1343           break;
1344           case 40:
1345 mike  1.1 #line 634 "mof.y"
1346           	{
1347                   /* Check qualifier scope */
1348                   if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-4].qualifierList) != 0)
1349                       YYABORT;
1350           
1351                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1352                   yyval.property->name = yystack.l_mark[-2].string;
1353                   yyval.property->type = ARRAYOF(yystack.l_mark[-3].type);
1354                   yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
1355                   yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
1356                   yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer;
1357               }
1358           break;
1359           case 41:
1360           #line 647 "mof.y"
1361           	{
1362                   void* value;
1363           
1364                   if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0)
1365                   {
1366 mike  1.1             yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
1367                       YYABORT;
1368                   }
1369           
1370                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1371                   yyval.property->name = yystack.l_mark[-3].string;
1372                   yyval.property->type = yystack.l_mark[-4].type;
1373                   yyval.property->value = value;
1374               }
1375           break;
1376           case 42:
1377           #line 662 "mof.y"
1378           	{
1379                   void* value;
1380           
1381                   /* Check qualifier scope */
1382                   if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-5].qualifierList) != 0)
1383                       YYABORT;
1384           
1385                   if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0)
1386                   {
1387 mike  1.1             yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
1388                       YYABORT;
1389                   }
1390           
1391                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1392                   yyval.property->name = yystack.l_mark[-3].string;
1393                   yyval.property->type = yystack.l_mark[-4].type;
1394                   yyval.property->qualifiers = yystack.l_mark[-5].qualifierList.data;
1395                   yyval.property->numQualifiers = yystack.l_mark[-5].qualifierList.size;
1396                   yyval.property->value = value;
1397               }
1398           break;
1399           case 43:
1400           #line 683 "mof.y"
1401           	{
1402                   void* value;
1403           
1404                   if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0)
1405                   {
1406                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
1407                       YYABORT;
1408 mike  1.1         }
1409           
1410                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1411                   yyval.property->name = yystack.l_mark[-4].string;
1412                   yyval.property->type = ARRAYOF(yystack.l_mark[-5].type);
1413                   yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer;
1414                   yyval.property->value = value;
1415               }
1416           break;
1417           case 44:
1418           #line 699 "mof.y"
1419           	{
1420                   void* value;
1421           
1422                   /* Check qualifier scope */
1423                   if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-6].qualifierList) != 0)
1424                       YYABORT;
1425           
1426                   if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0)
1427                   {
1428                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
1429 mike  1.1             YYABORT;
1430                   }
1431           
1432                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1433                   yyval.property->name = yystack.l_mark[-4].string;
1434                   yyval.property->type = ARRAYOF(yystack.l_mark[-5].type);
1435                   yyval.property->qualifiers = yystack.l_mark[-6].qualifierList.data;
1436                   yyval.property->numQualifiers = yystack.l_mark[-6].qualifierList.size;
1437                   yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer;
1438                   yyval.property->value = value;
1439               }
1440           break;
1441           case 45:
1442           #line 723 "mof.y"
1443           	{
1444                   const MI_ClassDecl* cd;
1445           
1446                   /* Verify that class exists */
1447                   cd = FindClassDecl(yystack.l_mark[-2].string);
1448                   if (!cd)
1449                   {
1450 mike  1.1             yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
1451                       YYABORT;
1452                   }
1453           
1454                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1455                   yyval.property->type = MI_REFERENCE;
1456                   yyval.property->name = yystack.l_mark[-1].string;
1457                   yyval.property->className = cd->name;
1458               }
1459           break;
1460           case 46:
1461           #line 740 "mof.y"
1462           	{
1463                   const MI_ClassDecl* cd;
1464           
1465                   /* Verify that class exists */
1466                   cd = FindClassDecl(yystack.l_mark[-2].string);
1467                   if (!cd)
1468                   {
1469                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
1470                       YYABORT;
1471 mike  1.1         }
1472           
1473                   /* Check qualifier scope */
1474                   if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-3].qualifierList) != 0)
1475                       YYABORT;
1476           
1477                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1478                   yyval.property->type = MI_REFERENCE;
1479                   yyval.property->name = yystack.l_mark[-1].string;
1480                   yyval.property->className = cd->name;
1481                   yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data;
1482                   yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size;
1483               }
1484           break;
1485           case 47:
1486           #line 763 "mof.y"
1487           	{
1488                   const MI_ClassDecl* cd;
1489           
1490                   /* Verify that class exists */
1491                   cd = FindClassDecl(yystack.l_mark[-3].string);
1492 mike  1.1         if (!cd)
1493                   {
1494                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string);
1495                       YYABORT;
1496                   }
1497           
1498                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1499                   yyval.property->type = MI_REFERENCE;
1500                   yyval.property->name = yystack.l_mark[-2].string;
1501                   yyval.property->className = cd->name;
1502                   yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer");
1503                   /* [TODO: use initializer */
1504               }
1505           break;
1506           case 48:
1507           #line 782 "mof.y"
1508           	{
1509                   const MI_ClassDecl* cd;
1510           
1511                   /* Verify that class exists */
1512                   cd = FindClassDecl(yystack.l_mark[-3].string);
1513 mike  1.1         if (!cd)
1514                   {
1515                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string);
1516                       YYABORT;
1517                   }
1518           
1519                   /* Check qualifier scope */
1520                   if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-4].qualifierList) != 0)
1521                       YYABORT;
1522           
1523                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
1524                   yyval.property->type = MI_REFERENCE;
1525                   yyval.property->name = yystack.l_mark[-2].string;
1526                   yyval.property->className = cd->name;
1527                   yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
1528                   yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
1529                   yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer");
1530                   /* [TODO: use initializer */
1531               }
1532           break;
1533           case 49:
1534 mike  1.1 #line 809 "mof.y"
1535           	{
1536                   yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
1537                   yyval.methodDecl->name = yystack.l_mark[-4].string;
1538                   yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data;
1539                   yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size;
1540                   yyval.methodDecl->returnType = yystack.l_mark[-5].type;
1541               }
1542           break;
1543           case 50:
1544           #line 817 "mof.y"
1545           	{
1546                   /* Check qualifier scope */
1547                   if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-6].qualifierList) != 0)
1548                       YYABORT;
1549           
1550                   yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
1551                   yyval.methodDecl->name = yystack.l_mark[-4].string;
1552                   yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data;
1553                   yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size;
1554                   yyval.methodDecl->qualifiers = yystack.l_mark[-6].qualifierList.data;
1555 mike  1.1         yyval.methodDecl->numQualifiers = yystack.l_mark[-6].qualifierList.size;
1556                   yyval.methodDecl->returnType = yystack.l_mark[-5].type;
1557               }
1558           break;
1559           case 51:
1560           #line 831 "mof.y"
1561           	{
1562                   MOF_ParameterList parameterList = PTRARRAY_INITIALIZER;
1563           
1564                   yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
1565                   yyval.methodDecl->name = yystack.l_mark[-3].string;
1566                   yyval.methodDecl->parameters = parameterList.data;
1567                   yyval.methodDecl->numParameters = parameterList.size;
1568                   yyval.methodDecl->returnType = yystack.l_mark[-4].type;
1569               }
1570           break;
1571           case 52:
1572           #line 841 "mof.y"
1573           	{
1574                   MOF_ParameterList parameterList = PTRARRAY_INITIALIZER;
1575           
1576 mike  1.1         /* Check qualifier scope */
1577                   if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-5].qualifierList) != 0)
1578                       YYABORT;
1579           
1580                   yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
1581                   yyval.methodDecl->name = yystack.l_mark[-3].string;
1582                   yyval.methodDecl->parameters = parameterList.data;
1583                   yyval.methodDecl->numParameters = parameterList.size;
1584                   yyval.methodDecl->qualifiers = yystack.l_mark[-5].qualifierList.data;
1585                   yyval.methodDecl->numQualifiers = yystack.l_mark[-5].qualifierList.size;
1586                   yyval.methodDecl->returnType = yystack.l_mark[-4].type;
1587               }
1588           break;
1589           case 53:
1590           #line 859 "mof.y"
1591           	{
1592                   yyval.type = MI_BOOLEAN;
1593               }
1594           break;
1595           case 54:
1596           #line 863 "mof.y"
1597 mike  1.1 	{
1598                   yyval.type = MI_SINT8;
1599               }
1600           break;
1601           case 55:
1602           #line 867 "mof.y"
1603           	{
1604                   yyval.type = MI_UINT8;
1605               }
1606           break;
1607           case 56:
1608           #line 871 "mof.y"
1609           	{
1610                   yyval.type = MI_SINT16;
1611               }
1612           break;
1613           case 57:
1614           #line 875 "mof.y"
1615           	{
1616                   yyval.type = MI_UINT16;
1617               }
1618 mike  1.1 break;
1619           case 58:
1620           #line 879 "mof.y"
1621           	{
1622                   yyval.type = MI_SINT32;
1623               }
1624           break;
1625           case 59:
1626           #line 883 "mof.y"
1627           	{
1628                   yyval.type = MI_UINT32;
1629               }
1630           break;
1631           case 60:
1632           #line 887 "mof.y"
1633           	{
1634                   yyval.type = MI_SINT64;
1635               }
1636           break;
1637           case 61:
1638           #line 891 "mof.y"
1639 mike  1.1 	{
1640                   yyval.type = MI_UINT64;
1641               }
1642           break;
1643           case 62:
1644           #line 895 "mof.y"
1645           	{
1646                   yyval.type = MI_REAL32;
1647               }
1648           break;
1649           case 63:
1650           #line 899 "mof.y"
1651           	{
1652                   yyval.type = MI_REAL64;
1653               }
1654           break;
1655           case 64:
1656           #line 903 "mof.y"
1657           	{
1658                   yyval.type = MI_CHAR16;
1659               }
1660 mike  1.1 break;
1661           case 65:
1662           #line 907 "mof.y"
1663           	{
1664                   yyval.type = MI_DATETIME;
1665               }
1666           break;
1667           case 66:
1668           #line 911 "mof.y"
1669           	{
1670                   yyval.type = MI_STRING;
1671               }
1672           break;
1673           case 67:
1674           #line 917 "mof.y"
1675           	{
1676                   yyval.string = yystack.l_mark[-1].string;
1677               }
1678           break;
1679           case 68:
1680           #line 923 "mof.y"
1681 mike  1.1 	{
1682                   yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER;
1683                   yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers);
1684                   yyval.parameterList.data = NULL;
1685                   yyval.parameterList.size = 0;
1686                   PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter);
1687               }
1688           break;
1689           case 69:
1690           #line 931 "mof.y"
1691           	{
1692                   if (FindParameter(&yystack.l_mark[-2].parameterList, yystack.l_mark[0].parameter->name))
1693                   {
1694                       yyerrorf(ID_PARAMETER_ALREADY_DEFINED, 
1695                           "parameter already defined: \"%s\"", yystack.l_mark[0].parameter->name);
1696                       YYABORT;
1697                   }
1698           
1699                   yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER;
1700                   yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers);
1701                   PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter);
1702 mike  1.1     }
1703           break;
1704           case 70:
1705           #line 946 "mof.y"
1706           	{
1707                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1708                   yyval.parameter->name = yystack.l_mark[0].string;
1709                   yyval.parameter->type = yystack.l_mark[-1].type;
1710               }
1711           break;
1712           case 71:
1713           #line 952 "mof.y"
1714           	{
1715                   const MI_ClassDecl* cd;
1716           
1717                   /* Verify that class exists */
1718                   cd = FindClassDecl(yystack.l_mark[-1].string);
1719                   if (!cd)
1720                   {
1721                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string);
1722                       YYABORT;
1723 mike  1.1         }
1724           
1725                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1726                   yyval.parameter->name = yystack.l_mark[0].string;
1727                   yyval.parameter->type = MI_REFERENCE;
1728                   yyval.parameter->className = cd->name;
1729               }
1730           break;
1731           case 72:
1732           #line 969 "mof.y"
1733           	{
1734                   /* Check qualifier scope */
1735                   if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0)
1736                       YYABORT;
1737           
1738                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1739                   yyval.parameter->name = yystack.l_mark[0].string;
1740                   yyval.parameter->type = yystack.l_mark[-1].type;
1741                   yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data;
1742                   yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size;
1743               }
1744 mike  1.1 break;
1745           case 73:
1746           #line 981 "mof.y"
1747           	{
1748                   const MI_ClassDecl* cd;
1749           
1750                   /* Verify that class exists */
1751                   cd = FindClassDecl(yystack.l_mark[-1].string);
1752                   if (!cd)
1753                   {
1754                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string);
1755                       YYABORT;
1756                   }
1757           
1758                   /* Check qualifier scope */
1759                   if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0)
1760                       YYABORT;
1761           
1762                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1763                   yyval.parameter->name = yystack.l_mark[0].string;
1764                   yyval.parameter->type = MI_REFERENCE;
1765 mike  1.1         yyval.parameter->className = cd->name;
1766                   yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data;
1767                   yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size;
1768               }
1769           break;
1770           case 74:
1771           #line 1004 "mof.y"
1772           	{
1773                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1774                   yyval.parameter->name = yystack.l_mark[-1].string;
1775                   yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type);
1776                   yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
1777               }
1778           break;
1779           case 75:
1780           #line 1011 "mof.y"
1781           	{
1782                   const MI_ClassDecl* cd;
1783           
1784                   /* Verify that class exists */
1785                   cd = FindClassDecl(yystack.l_mark[-2].string);
1786 mike  1.1         if (!cd)
1787                   {
1788                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
1789                       YYABORT;
1790                   }
1791           
1792                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1793                   yyval.parameter->name = yystack.l_mark[-1].string;
1794                   yyval.parameter->type = ARRAYOF(MI_REFERENCE);
1795                   yyval.parameter->className = cd->name;
1796                   yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
1797               }
1798           break;
1799           case 76:
1800           #line 1029 "mof.y"
1801           	{
1802                   /* Check qualifier scope */
1803                   if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0)
1804                       YYABORT;
1805           
1806                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1807 mike  1.1         yyval.parameter->name = yystack.l_mark[-1].string;
1808                   yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type);
1809                   yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
1810                   yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data;
1811                   yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size;
1812               }
1813           break;
1814           case 77:
1815           #line 1042 "mof.y"
1816           	{
1817                   const MI_ClassDecl* cd;
1818           
1819                   /* Verify that class exists */
1820                   cd = FindClassDecl(yystack.l_mark[-2].string);
1821                   if (!cd)
1822                   {
1823                       yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
1824                       YYABORT;
1825                   }
1826           
1827                   /* Check qualifier scope */
1828 mike  1.1         if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0)
1829                       YYABORT;
1830           
1831                   yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
1832                   yyval.parameter->name = yystack.l_mark[-1].string;
1833                   yyval.parameter->type = ARRAYOF(MI_REFERENCE);
1834                   yyval.parameter->className = cd->name;
1835                   yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
1836                   yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data;
1837                   yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size;
1838               }
1839           break;
1840           case 78:
1841           #line 1068 "mof.y"
1842           	{
1843                   if (yystack.l_mark[-1].integer <= 0)
1844                   {
1845                       yyerrorf(ID_ILLEGAL_ARRAY_SUBSCRIPT, 
1846                           "illegal array subscript: " SINT64_FMT, yystack.l_mark[-1].integer);
1847                       YYABORT;
1848                   }
1849 mike  1.1 
1850                   yyval.integer = yystack.l_mark[-1].integer;
1851               }
1852           break;
1853           case 79:
1854           #line 1079 "mof.y"
1855           	{
1856                   /* 0 signifies a dynamic array */
1857                   yyval.integer = 0;
1858               }
1859           break;
1860           case 80:
1861           #line 1086 "mof.y"
1862           	{
1863                   memset(&yyval.initializer, 0, sizeof(yyval.initializer));
1864                   yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
1865                   yyval.initializer.data[0] = yystack.l_mark[0].constantValue;
1866                   yyval.initializer.size = 1;
1867               }
1868           break;
1869           case 81:
1870 mike  1.1 #line 1093 "mof.y"
1871           	{
1872                   yyval.initializer = yystack.l_mark[0].initializer;
1873               }
1874           break;
1875           case 82:
1876           #line 1097 "mof.y"
1877           	{
1878                   memset(&yyval.initializer, 0, sizeof(yyval.initializer));
1879                   yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
1880                   yyval.initializer.data[0].type = TOK_STRING_VALUE;
1881                   yyval.initializer.data[0].value.string = yystack.l_mark[0].string;
1882                   yyval.initializer.size = 0;
1883               }
1884           break;
1885           case 83:
1886           #line 1107 "mof.y"
1887           	{
1888                   yyval.initializer = yystack.l_mark[-1].initializer;
1889               }
1890           break;
1891 mike  1.1 case 84:
1892           #line 1113 "mof.y"
1893           	{
1894                   memset(&yyval.initializer, 0, sizeof(yyval.initializer));
1895                   yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
1896                   yyval.initializer.data[0] = yystack.l_mark[0].constantValue;
1897                   yyval.initializer.size = 1;
1898                   yyval.initializer.isArray = 1;
1899               }
1900           break;
1901           case 85:
1902           #line 1121 "mof.y"
1903           	{
1904                   yystack.l_mark[-2].initializer.data = REALLOC_T(MOF_ConstantValue, yystack.l_mark[-2].initializer.data, yystack.l_mark[-2].initializer.size + 1);
1905                   yystack.l_mark[-2].initializer.data[yystack.l_mark[-2].initializer.size] = yystack.l_mark[0].constantValue;
1906                   yystack.l_mark[-2].initializer.size++;
1907                   yyval.initializer = yystack.l_mark[-2].initializer;
1908               }
1909           break;
1910           case 86:
1911           #line 1130 "mof.y"
1912 mike  1.1 	{
1913                   yyval.constantValue.type = TOK_INTEGER_VALUE;
1914                   yyval.constantValue.value.integer = yystack.l_mark[0].integer;
1915               }
1916           break;
1917           case 87:
1918           #line 1135 "mof.y"
1919           	{
1920                   yyval.constantValue.type = TOK_REAL_VALUE;
1921                   yyval.constantValue.value.real = yystack.l_mark[0].real;
1922               }
1923           break;
1924           case 88:
1925           #line 1140 "mof.y"
1926           	{
1927                   yyval.constantValue.type = TOK_CHAR_VALUE;
1928                   yyval.constantValue.value.character = yystack.l_mark[0].character;
1929               }
1930           break;
1931           case 89:
1932           #line 1145 "mof.y"
1933 mike  1.1 	{
1934                   yyval.constantValue.type = TOK_STRING_VALUE;
1935                   yyval.constantValue.value.string = yystack.l_mark[0].string;
1936               }
1937           break;
1938           case 90:
1939           #line 1150 "mof.y"
1940           	{
1941                   yyval.constantValue.type = TOK_BOOLEAN_VALUE;
1942                   yyval.constantValue.value.boolean = yystack.l_mark[0].boolean;
1943               }
1944           break;
1945           case 91:
1946           #line 1155 "mof.y"
1947           	{
1948                   yyval.constantValue.type = TOK_NULL;
1949               }
1950           break;
1951           case 92:
1952           #line 1161 "mof.y"
1953           	{
1954 mike  1.1 	yyval.string = yystack.l_mark[0].string;
1955               }
1956           break;
1957           case 93:
1958           #line 1165 "mof.y"
1959           	{
1960                   size_t size = strlen(yystack.l_mark[-1].string) + strlen(yystack.l_mark[0].string) + 1;
1961                   yyval.string = (char*)MOF_Realloc(&state.heap, yystack.l_mark[-1].string, size);
1962                   Strcat(yyval.string, size, yystack.l_mark[0].string);
1963                   MOF_Free(&state.heap, yystack.l_mark[0].string);
1964               }
1965           break;
1966           case 94:
1967           #line 1174 "mof.y"
1968           	{
1969                   yystack.l_mark[-2].qualifierDeclaration->name = yystack.l_mark[-3].string;
1970                   yystack.l_mark[-2].qualifierDeclaration->scope = yystack.l_mark[-1].flags;
1971                   yystack.l_mark[-2].qualifierDeclaration->flavor = 0;
1972                   yyval.qualifierDeclaration = yystack.l_mark[-2].qualifierDeclaration;
1973               }
1974           break;
1975 mike  1.1 case 95:
1976           #line 1181 "mof.y"
1977           	{
1978                   yystack.l_mark[-3].qualifierDeclaration->name = yystack.l_mark[-4].string;
1979                   yystack.l_mark[-3].qualifierDeclaration->scope = yystack.l_mark[-2].flags;
1980                   yystack.l_mark[-3].qualifierDeclaration->flavor = yystack.l_mark[-1].flags;
1981                   yyval.qualifierDeclaration = yystack.l_mark[-3].qualifierDeclaration;
1982               }
1983           break;
1984           case 96:
1985           #line 1190 "mof.y"
1986           	{
1987                   yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
1988                   yyval.qualifierDeclaration->type = yystack.l_mark[0].type;
1989               }
1990           break;
1991           case 97:
1992           #line 1195 "mof.y"
1993           	{
1994                   void* value;
1995           
1996 mike  1.1         if (InitializerToValue(&yystack.l_mark[0].initializer, yystack.l_mark[-2].type, &value) != 0)
1997                   {
1998                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
1999                       YYABORT;
2000                   }
2001           
2002                   yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
2003                   yyval.qualifierDeclaration->type = yystack.l_mark[-2].type;
2004                   yyval.qualifierDeclaration->value = value;
2005                   ReleaseInitializer(&yystack.l_mark[0].initializer);
2006               }
2007           break;
2008           case 98:
2009           #line 1210 "mof.y"
2010           	{
2011                   yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
2012                   yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-1].type);
2013                   yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[0].integer;
2014               }
2015           break;
2016           case 99:
2017 mike  1.1 #line 1216 "mof.y"
2018           	{
2019                   void* value = NULL;
2020           
2021                   if (InitializerToValue(&yystack.l_mark[0].initializer, ARRAYOF(yystack.l_mark[-3].type), &value) != 0)
2022                   {
2023                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
2024                       YYABORT;
2025                   }
2026           
2027                   yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
2028                   yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-3].type);
2029                   yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[-2].integer;
2030                   yyval.qualifierDeclaration->value = value;
2031                   ReleaseInitializer(&yystack.l_mark[0].initializer);
2032               }
2033           break;
2034           case 100:
2035           #line 1234 "mof.y"
2036           	{
2037                   yyval.flags = yystack.l_mark[-1].flags;
2038 mike  1.1     }
2039           break;
2040           case 101:
2041           #line 1240 "mof.y"
2042           	{
2043                   yyval.flags = yystack.l_mark[0].flags;
2044               }
2045           break;
2046           case 102:
2047           #line 1244 "mof.y"
2048           	{
2049                   yyval.flags |= yystack.l_mark[0].flags;
2050               }
2051           break;
2052           case 103:
2053           #line 1250 "mof.y"
2054           	{
2055                   yyval.flags = MI_FLAG_CLASS;
2056               }
2057           break;
2058           case 104:
2059 mike  1.1 #line 1254 "mof.y"
2060           	{
2061                   yyval.flags = MI_FLAG_ASSOCIATION;
2062               }
2063           break;
2064           case 105:
2065           #line 1258 "mof.y"
2066           	{
2067                   yyval.flags = MI_FLAG_INDICATION;
2068               }
2069           break;
2070           case 106:
2071           #line 1262 "mof.y"
2072           	{
2073                   yyval.flags = MI_FLAG_PROPERTY;
2074               }
2075           break;
2076           case 107:
2077           #line 1266 "mof.y"
2078           	{
2079                   yyval.flags = MI_FLAG_REFERENCE;
2080 mike  1.1     }
2081           break;
2082           case 108:
2083           #line 1270 "mof.y"
2084           	{
2085                   yyval.flags = MI_FLAG_METHOD;
2086               }
2087           break;
2088           case 109:
2089           #line 1274 "mof.y"
2090           	{
2091                   yyval.flags = MI_FLAG_PARAMETER;
2092               }
2093           break;
2094           case 110:
2095           #line 1278 "mof.y"
2096           	{
2097                   yyval.flags = MI_FLAG_ANY;
2098               }
2099           break;
2100           case 111:
2101 mike  1.1 #line 1284 "mof.y"
2102           	{
2103                   /* Reject incompatiable ToSubclass and Restricted flavors */
2104                   if (yystack.l_mark[-1].flags & MI_FLAG_TOSUBCLASS && yystack.l_mark[-1].flags & MI_FLAG_RESTRICTED)
2105                   {
2106                       yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", 
2107                           "ToSubclass", "Restricted");
2108                       YYABORT;
2109                   }
2110           
2111                   /* Reject incompatiable EnableOverride and DisableOverride flavors */
2112                   if (yystack.l_mark[-1].flags & MI_FLAG_ENABLEOVERRIDE && yystack.l_mark[-1].flags & MI_FLAG_DISABLEOVERRIDE)
2113                   {
2114                       yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", 
2115                           "EnableOverride", "DisableOverride");
2116                       YYABORT;
2117                   }
2118           
2119                   yyval.flags = yystack.l_mark[-1].flags;
2120               }
2121           break;
2122 mike  1.1 case 112:
2123           #line 1306 "mof.y"
2124           	{
2125                   yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
2126                   yyval.instanceDeclaration->flags = 0;
2127                   yyval.instanceDeclaration->name = yystack.l_mark[-1].string;
2128                   yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
2129                   yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
2130               }
2131           break;
2132           case 113:
2133           #line 1314 "mof.y"
2134           	{
2135                   yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
2136                   yyval.instanceDeclaration->flags = 0;
2137                   yyval.instanceDeclaration->name = yystack.l_mark[-1].string;
2138                   yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
2139                   yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
2140                   yyval.instanceDeclaration->qualifiers = yystack.l_mark[-4].qualifierList.data;
2141                   yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-4].qualifierList.size;
2142               }
2143 mike  1.1 break;
2144           case 114:
2145           #line 1324 "mof.y"
2146           	{
2147                   /* [TODO]: handle alias */
2148                   yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
2149                   yyval.instanceDeclaration->flags = 0;
2150                   yyval.instanceDeclaration->name = yystack.l_mark[-2].string;
2151                   yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
2152                   yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
2153               }
2154           break;
2155           case 115:
2156           #line 1333 "mof.y"
2157           	{
2158                   /* [TODO]: handle alias */
2159                   yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
2160                   yyval.instanceDeclaration->flags = 0;
2161                   yyval.instanceDeclaration->name = yystack.l_mark[-2].string;
2162                   yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
2163                   yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
2164 mike  1.1         yyval.instanceDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data;
2165                   yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size;
2166               }
2167           break;
2168           case 116:
2169           #line 1346 "mof.y"
2170           	{
2171                   yyval.featureList = yystack.l_mark[-2].featureList;
2172               }
2173           break;
2174           case 117:
2175           #line 1352 "mof.y"
2176           	{
2177                   yyval.string = yystack.l_mark[0].string;
2178               }
2179           break;
2180           case 118:
2181           #line 1358 "mof.y"
2182           	{
2183                   yyval.featureList.propertySet.data = NULL;
2184                   yyval.featureList.propertySet.size = 0;
2185 mike  1.1         yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
2186                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
2187                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
2188               }
2189           break;
2190           case 119:
2191           #line 1366 "mof.y"
2192           	{
2193                   if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
2194                   {
2195                       yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
2196                           "instance property already defined: \"%s\"", yystack.l_mark[0].property->name);
2197                       YYABORT;
2198                   }
2199           
2200                   yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
2201                   yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
2202                   PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
2203               }
2204           break;
2205           case 120:
2206 mike  1.1 #line 1381 "mof.y"
2207           	{
2208                   void* value;
2209                   MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer);
2210           
2211                   if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0)
2212                   {
2213                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
2214                       YYABORT;
2215                   }
2216           
2217                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
2218                   yyval.property->name = yystack.l_mark[-3].string;
2219                   yyval.property->type = type;
2220                   yyval.property->value = value;
2221               }
2222           break;
2223           case 121:
2224           #line 1397 "mof.y"
2225           	{
2226                   void* value;
2227 mike  1.1         MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer);
2228           
2229                   if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0)
2230                   {
2231                       yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
2232                       YYABORT;
2233                   }
2234           
2235                   yyval.property = CALLOC_T(MI_PropertyDecl, 1);
2236                   yyval.property->name = yystack.l_mark[-3].string;
2237                   yyval.property->type = type;
2238                   yyval.property->value = value;
2239                   yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
2240                   yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
2241               }
2242           break;
2243           case 122:
2244           #line 1417 "mof.y"
2245           	{
2246                   yyval.string = yystack.l_mark[0].string;
2247               }
2248 mike  1.1 break;
2249           case 123:
2250           #line 1421 "mof.y"
2251           	{
2252                   yyval.string = MOF_Strdup(&state.heap, "Association");
2253               }
2254           break;
2255           case 124:
2256           #line 1425 "mof.y"
2257           	{
2258                   yyval.string = MOF_Strdup(&state.heap, "Indication");
2259               }
2260           break;
2261           case 125:
2262           #line 1429 "mof.y"
2263           	{
2264                   yyval.string = MOF_Strdup(&state.heap, "Reference");
2265               }
2266           break;
2267           case 126:
2268           #line 1433 "mof.y"
2269 mike  1.1 	{
2270                   yyval.string = MOF_Strdup(&state.heap, "Property");
2271               }
2272           break;
2273           #line 2249 "y.tab.c"
2274               }
2275               yystack.s_mark -= yym;
2276               yystate = *yystack.s_mark;
2277               yystack.l_mark -= yym;
2278               yym = yylhs[yyn];
2279               if (yystate == 0 && yym == 0)
2280               {
2281           #if YYDEBUG
2282                   if (yydebug)
2283                       printf("%sdebug: after reduction, shifting from state 0 to\
2284            state %d\n", YYPREFIX, YYFINAL);
2285           #endif
2286                   yystate = YYFINAL;
2287                   *++yystack.s_mark = YYFINAL;
2288                   *++yystack.l_mark = yyval;
2289                   if (yychar < 0)
2290 mike  1.1         {
2291                       if ((yychar = YYLEX) < 0) yychar = 0;
2292           #if YYDEBUG
2293                       if (yydebug)
2294                       {
2295                           yys = 0;
2296                           if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2297                           if (!yys) yys = "illegal-symbol";
2298                           printf("%sdebug: state %d, reading %d (%s)\n",
2299                                   YYPREFIX, YYFINAL, yychar, yys);
2300                       }
2301           #endif
2302                   }
2303                   if (yychar == 0) goto yyaccept;
2304                   goto yyloop;
2305               }
2306               if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
2307                       yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
2308                   yystate = yytable[yyn];
2309               else
2310                   yystate = yydgoto[yym];
2311 mike  1.1 #if YYDEBUG
2312               if (yydebug)
2313                   printf("%sdebug: after reduction, shifting from state %d \
2314           to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
2315           #endif
2316               if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
2317               {
2318                   goto yyoverflow;
2319               }
2320               *++yystack.s_mark = (short) yystate;
2321               *++yystack.l_mark = yyval;
2322               goto yyloop;
2323           
2324           yyoverflow:
2325               yyerror("yacc stack overflow");
2326           
2327           yyabort:
2328               yyfreestack(&yystack);
2329               return (1);
2330           
2331           yyaccept:
2332 mike  1.1     yyfreestack(&yystack);
2333               return (0);
2334           }

ViewCVS 0.9.2