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

File: [OMI] / omi / mof / mofyaccinc.c (download)
Revision: 1.1.1.1 (vendor branch), Wed May 30 21:47:39 2012 UTC (12 years, 1 month ago) by mike
Branch: TOG
CVS Tags: OMI_1_0_2_Branch, OMI_1_0_2, OMI_1_0_1_PRE, OMI_1_0_1, OMI_1_0_0
Changes since 1.1: +0 -0 lines
Initial Import

/*
**==============================================================================
**
** Open Management Infrastructure (OMI)
**
** Copyright (c) Microsoft Corporation
** 
** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
** use this file except in compliance with the License. You may obtain a copy 
** of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
** MERCHANTABLITY OR NON-INFRINGEMENT. 
**
** See the Apache 2 License for the specific language governing permissions 
** and limitations under the License.
**
**==============================================================================
*/

#ifndef lint
static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
#endif

#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYPATCH 20110908

#define YYEMPTY        (-1)
#define yyclearin      (yychar = YYEMPTY)
#define yyerrok        (yyerrflag = 0)
#define YYRECOVERING() (yyerrflag != 0)

#define YYPREFIX "yy"

#define YYPURE 0

#line 2 "mof.y"

#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.h"
#include "buffer.h"
#include "types.h"
#include "state.h"
#include "ptrarray.h"

#define ARRAYOF(TYPE) ((MI_Uint32)TYPE | (MI_Uint32)MI_ARRAY_BIT)

extern int yylex();
extern int openIncludeFile(const char* path);

#line 20 "mof.y"
#ifdef YYSTYPE
#undef  YYSTYPE_IS_DECLARED
#define YYSTYPE_IS_DECLARED 1
#endif
#ifndef YYSTYPE_IS_DECLARED
#define YYSTYPE_IS_DECLARED 1
typedef union
{
    MI_Boolean boolean;
    MI_Sint64 integer;
    MI_Real64 real;
    MI_Char16 character;
    char* string;
    char* identifier;
    char* dollarIdentifier;
    MI_Type type;
    MI_PropertyDecl* property;
    MI_MethodDecl* methodDecl;
    MI_ParameterDecl* parameter;
    MOF_ParameterList parameterList;
    MOF_FeatureList featureList;
    MI_QualifierDecl* qualifierDeclaration;
    MOF_ConstantValue constantValue;
    MOF_Initializer initializer;
    MI_Uint32 flags;
    MI_Qualifier* qualifier;
    MOF_QualifierList qualifierList;
    MI_ClassDecl* classDeclaration;
    MI_InstanceDecl* instanceDeclaration;
} YYSTYPE;
#endif /* !YYSTYPE_IS_DECLARED */
#line 68 "y.tab.c"

/* compatibility with bison */
#ifdef YYPARSE_PARAM
/* compatibility with FreeBSD */
# ifdef YYPARSE_PARAM_TYPE
#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
# else
#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
# endif
#else
# define YYPARSE_DECL() yyparse(void)
#endif

/* Parameters sent to lex. */
#ifdef YYLEX_PARAM
# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
# define YYLEX yylex(YYLEX_PARAM)
#else
# define YYLEX_DECL() yylex(void)
# define YYLEX yylex()
#endif

/* Parameters sent to yyerror. */
#define YYERROR_DECL() yyerror(const char *s)
#define YYERROR_CALL(msg) yyerror(msg)

extern int YYPARSE_DECL();

#define TOK_ERROR 257
#define TOK_BOOLEAN 258
#define TOK_SINT8 259
#define TOK_UINT8 260
#define TOK_SINT16 261
#define TOK_UINT16 262
#define TOK_SINT32 263
#define TOK_UINT32 264
#define TOK_SINT64 265
#define TOK_UINT64 266
#define TOK_REAL32 267
#define TOK_REAL64 268
#define TOK_DATETIME 269
#define TOK_CHAR16 270
#define TOK_STRING 271
#define TOK_BOOLEAN_VALUE 272
#define TOK_REF 273
#define TOK_SCOPE 274
#define TOK_CLASS 275
#define TOK_ASSOCIATION 276
#define TOK_INDICATION 277
#define TOK_QUALIFIER 278
#define TOK_PROPERTY 279
#define TOK_REFERENCE 280
#define TOK_METHOD 281
#define TOK_PARAMETER 282
#define TOK_ANY 283
#define TOK_FLAVOR 284
#define TOK_ENABLEOVERRIDE 285
#define TOK_DISABLEOVERRIDE 286
#define TOK_RESTRICTED 287
#define TOK_TOSUBCLASS 288
#define TOK_TRANSLATABLE 289
#define TOK_INSTANCE 290
#define TOK_OF 291
#define TOK_AS 292
#define TOK_PRAGMA 293
#define TOK_SCHEMA 294
#define TOK_INTEGER_VALUE 295
#define TOK_REAL_VALUE 296
#define TOK_STRING_VALUE 297
#define TOK_CHAR_VALUE 298
#define TOK_IDENT 299
#define TOK_ALIAS_IDENTIFIER 300
#define TOK_NULL 301
#define YYERRCODE 256
static const short yylhs[] = {                           -1,
    0,    0,    0,   35,   35,   35,   35,   36,   31,   31,
   31,   31,   13,   13,   12,   12,   12,   12,   12,   12,
   29,   28,   28,   27,   27,   27,   27,   30,   30,   25,
   25,   24,   24,   24,   24,   24,    7,    7,    7,    7,
    7,    7,    7,    7,   10,   10,   10,   10,   11,   11,
   11,   11,    6,    6,    6,    6,    6,    6,    6,    6,
    6,    6,    6,    6,    6,    6,    3,    9,    9,    8,
    8,    8,    8,    8,    8,    8,    8,   17,   17,   18,
   18,   18,   19,   20,   20,    5,    5,    5,    5,    5,
    5,    1,    1,   15,   15,   16,   16,   16,   16,   23,
   22,   22,   21,   21,   21,   21,   21,   21,   21,   21,
   26,   32,   32,   32,   32,   14,    4,   34,   34,   33,
   33,    2,    2,    2,    2,    2,
};
static const short yylen[] = {                            2,
    1,    2,    1,    1,    1,    1,    1,    5,    3,    5,
    4,    6,    4,    3,    1,    1,    1,    2,    2,    2,
    3,    1,    3,    1,    2,    3,    4,    3,    1,    1,
    3,    1,    1,    1,    1,    1,    3,    4,    4,    5,
    5,    6,    6,    7,    3,    4,    4,    5,    6,    7,
    5,    6,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    2,    1,    3,    2,
    2,    3,    3,    3,    3,    4,    4,    3,    2,    1,
    1,    1,    3,    1,    3,    1,    1,    1,    1,    1,
    1,    1,    2,    5,    6,    2,    4,    3,    5,    5,
    1,    3,    1,    1,    1,    1,    1,    1,    1,    1,
    5,    4,    5,    5,    6,    4,    2,    1,    2,    4,
    5,    1,    1,    1,    1,    1,
};
static const short yydefred[] = {                         0,
    3,    0,    0,    0,    0,    0,    0,    6,    0,    5,
    7,    1,    4,  123,  124,  126,  125,  122,    0,    0,
    0,    0,    0,   22,    0,    2,    0,    0,    0,    0,
    9,    0,    0,    0,    0,    0,    0,    0,   29,    0,
   21,    0,    0,    0,    0,   53,   54,   55,   56,   57,
   58,   59,   60,   61,   62,   63,   65,   64,   66,    0,
    0,    0,    0,   15,   17,   16,    0,    0,    0,    0,
    0,    0,    0,    0,  112,   92,    0,   90,   86,   87,
   88,   91,    0,    0,   32,   33,   34,   35,   36,   26,
   84,    0,    0,   23,    0,   11,    0,   10,   14,   67,
    0,    0,    0,   18,   20,   19,    0,    0,    0,    0,
    0,    0,   94,    0,    0,  117,    0,    0,  118,    0,
  114,   93,    8,   28,   83,    0,   27,    0,    0,  113,
   82,   45,   80,    0,   81,    0,   37,    0,    0,   13,
    0,    0,    0,   79,   97,    0,    0,    0,   95,    0,
    0,    0,  119,   85,   12,  115,   47,    0,    0,    0,
   68,    0,    0,    0,   39,    0,   46,    0,    0,   38,
    0,    0,   78,   99,  103,  104,  105,  106,  107,  108,
  109,  110,  101,    0,    0,    0,    0,  116,   51,    0,
    0,    0,    0,    0,    0,   41,    0,   48,    0,    0,
    0,   40,    0,  100,    0,   30,    0,  120,    0,   75,
   74,   49,   69,    0,    0,   43,   52,    0,   42,    0,
  102,  111,    0,  121,   77,   76,   50,   44,   31,
};
static const short yydgoto[] = {                          7,
   83,   61,  159,   74,  133,  160,   64,  161,  162,   65,
   66,   67,   31,   75,    8,   33,  111,  134,  135,   92,
  183,  184,   71,   90,  207,  115,   24,   25,  163,   40,
   10,   11,  119,  120,   12,   13,
};
static const short yysindex[] = {                        55,
    0, -138, -138, -273, -278, -138,   53,    0, -223,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  -39,   33,
 -138,  -13,  -27,    0,  -16,    0, -138, -258, -138,  -89,
    0,  210,    2, -108, -239, -187, -123, -187,    0,   34,
    0, -138,  -35, -138,  -30,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   47,
 -168, -138, -138,    0,    0,    0,  -65,  135,  -21, -167,
  -12, -185,   45,    4,    0,    0,  -40,    0,    0,    0,
    0,    0, -176,   85,    0,    0,    0,    0,    0,    0,
    0,  -22, -123,    0, -138,    0, -108,    0,    0,    0,
  -11,   -2,   71,    0,    0,    0, -138, -138,  -88,   69,
   67,   92,    0, -150,   84,    0,   74, -138,    0,   58,
    0,    0,    0,    0,    0, -187,    0,  -30,    4,    0,
    0,    0,    0,   86,    0,  -41,    0,   69,    8,    0,
   -4,    3,   54,    0,    0,   69, -125,  108,    0,   69,
   98,   94,    0,    0,    0,    0,    0,  101, -138, -138,
    0,   -7,  135,  109,    0,   69,    0,  126,  -17,    0,
   69,   14,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   22, -123,  127,   69,    0,    0,  117,
  117,  130,   40, -138, -138,    0,  150,    0,  154,   27,
  157,    0,   69,    0, -125,    0,   39,    0,  172,    0,
    0,    0,    0,  117,  117,    0,    0,  173,    0,  174,
    0,    0, -123,    0,    0,    0,    0,    0,    0,
};
static const short yyrindex[] = {                         0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  -15,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  -14,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  123,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  -24,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  193,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   46,
   72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   76,   81,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,
};
static const short yygindex[] = {                         0,
  205,  347,  -23,  158,  -28,  -26,  189,   73,   95,  198,
  200,    0,  -31,  -25,    0,    0,  -91,  -85,  246,    0,
   65,    0,    0,  -90,    0,    0,  229,    0,    9,    0,
    0,    0,  152,    0,  266,    0,
};
#define YYTABLESIZE 542
static const short yytable[] = {                        158,
  123,    6,  127,   63,  144,   69,   62,   84,    9,   91,
  139,   96,   36,   98,   73,    9,   89,   21,   29,   89,
   22,  126,   95,  199,  145,    6,   35,   42,   24,   25,
   37,  114,   44,  192,   89,   60,  193,  136,   68,  110,
   63,  108,  169,   62,  107,   70,  113,  132,  121,    6,
  172,   27,  164,   28,  167,  168,  137,   76,  138,  103,
  174,  170,  204,  171,  186,  205,  165,  218,  166,  109,
  193,  130,  202,    6,  203,   68,   41,   24,   25,  222,
  197,  118,  223,   30,   78,  201,   71,   30,  109,   71,
   32,   93,   30,  109,  206,   38,  155,  154,  210,  211,
   89,  209,  125,  156,  100,   99,  112,   79,   80,   76,
   81,   38,   70,   82,  116,   70,   73,  220,   38,   73,
  122,   72,  225,  226,   72,  124,   73,  146,  118,  140,
    6,  147,  229,  148,  150,    6,  195,   14,   15,  194,
   16,   17,  149,    6,  157,    6,  173,  185,    6,  175,
  176,  177,  188,  178,  179,  180,  181,  182,  187,  189,
   18,   85,   86,   87,   88,   89,   96,  196,   46,   47,
   48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
   58,   59,  152,   72,  198,  208,   14,   15,  212,   16,
   17,   38,   46,   47,   48,   49,   50,   51,   52,   53,
   54,   55,   56,   57,   58,   59,  143,  109,  216,   18,
   14,   15,  217,   16,   17,  219,   46,   47,   48,   49,
   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,
  224,  227,  228,   18,   14,   15,   98,   16,   17,   77,
   46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
   56,   57,   58,   59,  129,  104,  122,   18,   14,   15,
   78,   16,   17,  200,  105,  213,  106,   78,   39,  221,
   94,  153,   26,    0,    0,    0,    0,    0,    0,    0,
    0,   18,    0,   79,   80,   76,   81,    0,  131,   82,
   79,   80,   76,   81,    0,  131,   82,   46,   47,   48,
   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
   59,    1,    0,    0,    0,   14,   15,    0,   16,   17,
   14,   15,    0,   16,   17,    0,    0,    2,    0,    2,
    3,    0,    3,   14,   15,    0,   16,   17,   18,    0,
   78,    0,    4,   18,    4,    5,    0,    5,   19,   20,
    0,    0,   23,    0,    0,    0,   18,    0,    0,    0,
    0,    0,    0,   79,   80,   76,   81,   34,  131,   82,
    0,    0,    0,   43,    0,   45,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
   97,    0,   46,   47,   48,   49,   50,   51,   52,   53,
   54,   55,   56,   57,   58,   59,    0,    0,  101,  102,
   14,   15,    0,   16,   17,    0,    0,    0,    0,  117,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   18,    0,    0,    0,    0,    0,    0,
    0,  128,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  141,  142,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  151,    0,  117,   46,   47,   48,
   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
   59,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  190,  191,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  214,  215,
};
static const short yycheck[] = {                         41,
   41,   91,   93,   30,   93,   32,   30,   36,    0,   38,
  102,   43,   40,   45,  123,    7,   41,  291,   58,   44,
  299,   44,   58,   41,  110,   91,   40,   44,   44,   44,
   58,   44,  291,   41,   59,  125,   44,   40,   30,   61,
   67,   68,   40,   67,   68,   44,   59,   59,   74,   91,
  142,  275,  138,  277,   59,  141,   59,  297,   61,  125,
  146,   59,   41,   61,  150,   44,   59,   41,   61,   91,
   44,   97,   59,   91,   61,   67,   93,   93,   93,   41,
  166,   73,   44,  123,  272,  171,   41,  123,   91,   44,
   58,   58,  123,   91,  185,  123,  128,  126,  190,  191,
  125,  187,  125,  129,  273,   59,  274,  295,  296,  297,
  298,  123,   41,  301,  300,   44,   41,  203,  123,   44,
  297,   41,  214,  215,   44,   41,  123,   61,  120,   59,
   91,   40,  223,  284,   61,   91,  163,  276,  277,  163,
  279,  280,   59,   91,   59,   91,   93,   40,   91,  275,
  276,  277,   59,  279,  280,  281,  282,  283,   61,   59,
  299,  285,  286,  287,  288,  289,   44,   59,  258,  259,
  260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
  270,  271,  125,  292,   59,   59,  276,  277,   59,  279,
  280,  123,  258,  259,  260,  261,  262,  263,  264,  265,
  266,  267,  268,  269,  270,  271,  295,   91,   59,  299,
  276,  277,   59,  279,  280,   59,  258,  259,  260,  261,
  262,  263,  264,  265,  266,  267,  268,  269,  270,  271,
   59,   59,   59,  299,  276,  277,   44,  279,  280,   35,
  258,  259,  260,  261,  262,  263,  264,  265,  266,  267,
  268,  269,  270,  271,   97,   67,  297,  299,  276,  277,
  272,  279,  280,  169,   67,  193,   67,  272,   23,  205,
   42,  120,    7,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  299,   -1,  295,  296,  297,  298,   -1,  300,  301,
  295,  296,  297,  298,   -1,  300,  301,  258,  259,  260,
  261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  271,  257,   -1,   -1,   -1,  276,  277,   -1,  279,  280,
  276,  277,   -1,  279,  280,   -1,   -1,  275,   -1,  275,
  278,   -1,  278,  276,  277,   -1,  279,  280,  299,   -1,
  272,   -1,  290,  299,  290,  293,   -1,  293,    2,    3,
   -1,   -1,    6,   -1,   -1,   -1,  299,   -1,   -1,   -1,
   -1,   -1,   -1,  295,  296,  297,  298,   21,  300,  301,
   -1,   -1,   -1,   27,   -1,   29,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   42,   -1,
   44,   -1,  258,  259,  260,  261,  262,  263,  264,  265,
  266,  267,  268,  269,  270,  271,   -1,   -1,   62,   63,
  276,  277,   -1,  279,  280,   -1,   -1,   -1,   -1,   73,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   95,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  107,  108,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  118,   -1,  120,  258,  259,  260,
  261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  271,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  159,  160,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  194,  195,
};
#define YYFINAL 7
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 301
#if YYDEBUG
static const char *yyname[] = {

"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,"'='",
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,"TOK_ERROR","TOK_BOOLEAN","TOK_SINT8","TOK_UINT8","TOK_SINT16",
"TOK_UINT16","TOK_SINT32","TOK_UINT32","TOK_SINT64","TOK_UINT64","TOK_REAL32",
"TOK_REAL64","TOK_DATETIME","TOK_CHAR16","TOK_STRING","TOK_BOOLEAN_VALUE",
"TOK_REF","TOK_SCOPE","TOK_CLASS","TOK_ASSOCIATION","TOK_INDICATION",
"TOK_QUALIFIER","TOK_PROPERTY","TOK_REFERENCE","TOK_METHOD","TOK_PARAMETER",
"TOK_ANY","TOK_FLAVOR","TOK_ENABLEOVERRIDE","TOK_DISABLEOVERRIDE",
"TOK_RESTRICTED","TOK_TOSUBCLASS","TOK_TRANSLATABLE","TOK_INSTANCE","TOK_OF",
"TOK_AS","TOK_PRAGMA","TOK_SCHEMA","TOK_INTEGER_VALUE","TOK_REAL_VALUE",
"TOK_STRING_VALUE","TOK_CHAR_VALUE","TOK_IDENT","TOK_ALIAS_IDENTIFIER",
"TOK_NULL",
};
static const char *yyrule[] = {
"$accept : mofSpecification",
"mofSpecification : mofProduction",
"mofSpecification : mofSpecification mofProduction",
"mofSpecification : TOK_ERROR",
"mofProduction : compilerDirective",
"mofProduction : classDeclaration",
"mofProduction : qualifierDeclaration",
"mofProduction : instanceDeclaration",
"compilerDirective : TOK_PRAGMA TOK_IDENT '(' stringValue ')'",
"classDeclaration : TOK_CLASS identifier classBody",
"classDeclaration : TOK_CLASS identifier ':' identifier classBody",
"classDeclaration : qualifierExpr TOK_CLASS identifier classBody",
"classDeclaration : qualifierExpr TOK_CLASS identifier ':' identifier classBody",
"classBody : '{' classFeatureList '}' ';'",
"classBody : '{' '}' ';'",
"classFeatureList : propertyDeclaration",
"classFeatureList : methodDeclaration",
"classFeatureList : referenceDeclaration",
"classFeatureList : classFeatureList propertyDeclaration",
"classFeatureList : classFeatureList methodDeclaration",
"classFeatureList : classFeatureList referenceDeclaration",
"qualifierExpr : '[' qualifierList ']'",
"qualifierList : qualifier",
"qualifierList : qualifierList ',' qualifier",
"qualifier : identifier",
"qualifier : identifier qualifierParameter",
"qualifier : identifier ':' flavor",
"qualifier : identifier qualifierParameter ':' flavor",
"qualifierParameter : '(' constantValue ')'",
"qualifierParameter : arrayInitializer",
"flavorList : flavor",
"flavorList : flavorList ',' flavor",
"flavor : TOK_ENABLEOVERRIDE",
"flavor : TOK_DISABLEOVERRIDE",
"flavor : TOK_RESTRICTED",
"flavor : TOK_TOSUBCLASS",
"flavor : TOK_TRANSLATABLE",
"propertyDeclaration : dataType identifier ';'",
"propertyDeclaration : qualifierExpr dataType identifier ';'",
"propertyDeclaration : dataType identifier subscript ';'",
"propertyDeclaration : qualifierExpr dataType identifier subscript ';'",
"propertyDeclaration : dataType identifier '=' initializer ';'",
"propertyDeclaration : qualifierExpr dataType identifier '=' initializer ';'",
"propertyDeclaration : dataType identifier subscript '=' initializer ';'",
"propertyDeclaration : qualifierExpr dataType identifier subscript '=' initializer ';'",
"referenceDeclaration : objectRef identifier ';'",
"referenceDeclaration : qualifierExpr objectRef identifier ';'",
"referenceDeclaration : objectRef identifier initializer ';'",
"referenceDeclaration : qualifierExpr objectRef identifier initializer ';'",
"methodDeclaration : dataType identifier '(' parameterList ')' ';'",
"methodDeclaration : qualifierExpr dataType identifier '(' parameterList ')' ';'",
"methodDeclaration : dataType identifier '(' ')' ';'",
"methodDeclaration : qualifierExpr dataType identifier '(' ')' ';'",
"dataType : TOK_BOOLEAN",
"dataType : TOK_SINT8",
"dataType : TOK_UINT8",
"dataType : TOK_SINT16",
"dataType : TOK_UINT16",
"dataType : TOK_SINT32",
"dataType : TOK_UINT32",
"dataType : TOK_SINT64",
"dataType : TOK_UINT64",
"dataType : TOK_REAL32",
"dataType : TOK_REAL64",
"dataType : TOK_CHAR16",
"dataType : TOK_DATETIME",
"dataType : TOK_STRING",
"objectRef : identifier TOK_REF",
"parameterList : parameter",
"parameterList : parameterList ',' parameter",
"parameter : dataType identifier",
"parameter : objectRef identifier",
"parameter : qualifierExpr dataType identifier",
"parameter : qualifierExpr objectRef identifier",
"parameter : dataType identifier subscript",
"parameter : objectRef identifier subscript",
"parameter : qualifierExpr dataType identifier subscript",
"parameter : qualifierExpr objectRef identifier subscript",
"subscript : '[' TOK_INTEGER_VALUE ']'",
"subscript : '[' ']'",
"initializer : constantValue",
"initializer : arrayInitializer",
"initializer : TOK_ALIAS_IDENTIFIER",
"arrayInitializer : '{' arrayInitializerList '}'",
"arrayInitializerList : constantValue",
"arrayInitializerList : arrayInitializerList ',' constantValue",
"constantValue : TOK_INTEGER_VALUE",
"constantValue : TOK_REAL_VALUE",
"constantValue : TOK_CHAR_VALUE",
"constantValue : stringValue",
"constantValue : TOK_BOOLEAN_VALUE",
"constantValue : TOK_NULL",
"stringValue : TOK_STRING_VALUE",
"stringValue : stringValue TOK_STRING_VALUE",
"qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr ';'",
"qualifierDeclaration : TOK_QUALIFIER identifier qualifierType scopeExpr flavorExpr ';'",
"qualifierType : ':' dataType",
"qualifierType : ':' dataType '=' initializer",
"qualifierType : ':' dataType subscript",
"qualifierType : ':' dataType subscript '=' initializer",
"scopeExpr : ',' TOK_SCOPE '(' scopeList ')'",
"scopeList : scope",
"scopeList : scopeList ',' scope",
"scope : TOK_CLASS",
"scope : TOK_ASSOCIATION",
"scope : TOK_INDICATION",
"scope : TOK_PROPERTY",
"scope : TOK_REFERENCE",
"scope : TOK_METHOD",
"scope : TOK_PARAMETER",
"scope : TOK_ANY",
"flavorExpr : ',' TOK_FLAVOR '(' flavorList ')'",
"instanceDeclaration : TOK_INSTANCE TOK_OF identifier instanceBody",
"instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier instanceBody",
"instanceDeclaration : TOK_INSTANCE TOK_OF identifier alias instanceBody",
"instanceDeclaration : qualifierExpr TOK_INDICATION TOK_OF identifier alias instanceBody",
"instanceBody : '{' valueInitializerList '}' ';'",
"alias : TOK_AS TOK_ALIAS_IDENTIFIER",
"valueInitializerList : valueInitializer",
"valueInitializerList : valueInitializerList valueInitializer",
"valueInitializer : identifier '=' initializer ';'",
"valueInitializer : qualifierExpr identifier '=' initializer ';'",
"identifier : TOK_IDENT",
"identifier : TOK_ASSOCIATION",
"identifier : TOK_INDICATION",
"identifier : TOK_REFERENCE",
"identifier : TOK_PROPERTY",

};
#endif

int      yydebug;
int      yynerrs;

int      yyerrflag;
int      yychar;
YYSTYPE  yyval;
YYSTYPE  yylval;

/* define the initial stack-sizes */
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH  YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 500
#define YYMAXDEPTH  500
#endif
#endif

#define YYINITSTACKSIZE 500

typedef struct {
    unsigned stacksize;
    short    *s_base;
    short    *s_mark;
    short    *s_last;
    YYSTYPE  *l_base;
    YYSTYPE  *l_mark;
} YYSTACKDATA;
/* variables for the parser stack */
static YYSTACKDATA yystack;

#if YYDEBUG
#include <stdio.h>		/* needed for printf */
#endif

#include <stdlib.h>	/* needed for malloc, etc */
#include <string.h>	/* needed for memset */

/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack(YYSTACKDATA *data)
{
    int i;
    unsigned newsize;
    short *newss;
    YYSTYPE *newvs;

    if ((newsize = data->stacksize) == 0)
        newsize = YYINITSTACKSIZE;
    else if (newsize >= YYMAXDEPTH)
        return -1;
    else if ((newsize *= 2) > YYMAXDEPTH)
        newsize = YYMAXDEPTH;

    i = data->s_mark - data->s_base;
    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
    if (newss == 0)
        return -1;

    data->s_base = newss;
    data->s_mark = newss + i;

    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    if (newvs == 0)
        return -1;

    data->l_base = newvs;
    data->l_mark = newvs + i;

    data->stacksize = newsize;
    data->s_last = data->s_base + newsize - 1;
    return 0;
}

#if YYPURE || defined(YY_NO_LEAKS)
static void yyfreestack(YYSTACKDATA *data)
{
    free(data->s_base);
    free(data->l_base);
    memset(data, 0, sizeof(*data));
}
#else
#define yyfreestack(data) /* nothing */
#endif

#define YYABORT  goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR  goto yyerrlab

int
YYPARSE_DECL()
{
    int yym, yyn, yystate;
#if YYDEBUG
    const char *yys;

    if ((yys = getenv("YYDEBUG")) != 0)
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = YYEMPTY;
    yystate = 0;

#if YYPURE
    memset(&yystack, 0, sizeof(yystack));
#endif

    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
    yystack.s_mark = yystack.s_base;
    yystack.l_mark = yystack.l_base;
    yystate = 0;
    *yystack.s_mark = 0;

yyloop:
    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, reading %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
    }
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: state %d, shifting to state %d\n",
                    YYPREFIX, yystate, yytable[yyn]);
#endif
        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
        {
            goto yyoverflow;
        }
        yystate = yytable[yyn];
        *++yystack.s_mark = yytable[yyn];
        *++yystack.l_mark = yylval;
        yychar = YYEMPTY;
        if (yyerrflag > 0)  --yyerrflag;
        goto yyloop;
    }
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
        yyn = yytable[yyn];
        goto yyreduce;
    }
    if (yyerrflag) goto yyinrecovery;

    yyerror("syntax error");

    goto yyerrlab;

yyerrlab:
    ++yynerrs;

yyinrecovery:
    if (yyerrflag < 3)
    {
        yyerrflag = 3;
        for (;;)
        {
            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: state %d, error recovery shifting\
 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
#endif
                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
                {
                    goto yyoverflow;
                }
                yystate = yytable[yyn];
                *++yystack.s_mark = yytable[yyn];
                *++yystack.l_mark = yylval;
                goto yyloop;
            }
            else
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: error recovery discarding state %d\n",
                            YYPREFIX, *yystack.s_mark);
#endif
                if (yystack.s_mark <= yystack.s_base) goto yyabort;
                --yystack.s_mark;
                --yystack.l_mark;
            }
        }
    }
    else
    {
        if (yychar == 0) goto yyabort;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
        yychar = YYEMPTY;
        goto yyloop;
    }

yyreduce:
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
    yym = yylen[yyn];
    if (yym)
        yyval = yystack.l_mark[1-yym];
    else
        memset(&yyval, 0, sizeof yyval);
    switch (yyn)
    {
case 1:
#line 139 "mof.y"
	{
    }
break;
case 2:
#line 142 "mof.y"
	{ 
    }
break;
case 3:
#line 145 "mof.y"
	{
        YYABORT;
    }
break;
case 4:
#line 151 "mof.y"
	{
    }
break;
case 5:
#line 154 "mof.y"
	{
        /* [TODO: validate the class here] */
        yystack.l_mark[0].classDeclaration->flags = MI_FLAG_CLASS;
        yystack.l_mark[0].classDeclaration->flags |= GetQualFlags(yystack.l_mark[0].classDeclaration->qualifiers, yystack.l_mark[0].classDeclaration->numQualifiers);
        if (FinalizeClass(yystack.l_mark[0].classDeclaration) != 0)
            YYABORT;
            
        AddClassDecl(yystack.l_mark[0].classDeclaration);

        if (state.classDeclCallback)
            (*state.classDeclCallback)(yystack.l_mark[0].classDeclaration, state.classDeclCallbackData);
    }
break;
case 6:
#line 167 "mof.y"
	{
        AddQualifierDeclaration(yystack.l_mark[0].qualifierDeclaration);

        if (state.qualifierDeclCallback)
            (*state.qualifierDeclCallback)(yystack.l_mark[0].qualifierDeclaration, state.qualifierDeclCallbackData);
    }
break;
case 7:
#line 174 "mof.y"
	{
        if (FinalizeInstance(yystack.l_mark[0].instanceDeclaration) != 0)
            YYABORT;

        AddInstanceDecl(yystack.l_mark[0].instanceDeclaration);

        if (state.instanceDeclCallback)
            (*state.instanceDeclCallback)(yystack.l_mark[0].instanceDeclaration, state.instanceDeclCallbackData);
    }
break;
case 8:
#line 186 "mof.y"
	{
        if (strcmp(yystack.l_mark[-3].string, "include") == 0)
        {
            if (openIncludeFile(yystack.l_mark[-1].string) != 0)
                YYABORT;
        }
        else if (strcmp(yystack.l_mark[-3].string, "instancelocale") == 0)
        {
            if (state.pragmaCallback)
                (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
        }
        else if (strcmp(yystack.l_mark[-3].string, "locale") == 0)
        {
            if (state.pragmaCallback)
                (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
        }
        else if (strcmp(yystack.l_mark[-3].string, "namespace") == 0)
        {
            if (state.pragmaCallback)
                (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
        }
        else
        {
            yywarnf(ID_UNKNOWN_PRAGMA, 
                "warning: unknown pragma: %s=%s", yystack.l_mark[-3].string, yystack.l_mark[-1].string);

            if (state.pragmaCallback)
                (*state.pragmaCallback)(yystack.l_mark[-3].string, yystack.l_mark[-1].string, state.pragmaCallbackData);
        }
    }
break;
case 9:
#line 219 "mof.y"
	{
        /* Check whether class already exists */
        if (FindClassDecl(yystack.l_mark[-1].string))
        {
            yyerrorf(ID_CLASS_ALREADY_DEFINED, 
                "class already defined: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }

        yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
        yyval.classDeclaration->flags = MI_FLAG_CLASS;
        yyval.classDeclaration->name = yystack.l_mark[-1].string;
        yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
        yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
    }
break;
case 10:
#line 237 "mof.y"
	{
        const MI_ClassDecl* scd;

        /* Check whether class already exists */
        if (FindClassDecl(yystack.l_mark[-3].string))
        {
            yyerrorf(ID_CLASS_ALREADY_DEFINED, 
                "class already defined: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }
 
        /* Check whether superclass exists */
        scd = FindClassDecl(yystack.l_mark[-1].string);

        if (!scd)
        {
            yyerrorf(ID_UNDEFINED_SUPERCLASS, 
                "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string);
            YYABORT;
        }

        yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
        yyval.classDeclaration->flags = MI_FLAG_CLASS;
        yyval.classDeclaration->name = yystack.l_mark[-3].string;
        yyval.classDeclaration->superClass = yystack.l_mark[-1].string;
        yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd;
        yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
        yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
    }
break;
case 11:
#line 269 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-3].qualifierList) != 0)
            YYABORT;

        /* Check whether class already exists */
        if (FindClassDecl(yystack.l_mark[-1].string))
        {
            yyerrorf(ID_CLASS_ALREADY_DEFINED, 
                "class already defined: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }

        yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
        yyval.classDeclaration->flags = MI_FLAG_CLASS;
        yyval.classDeclaration->name = yystack.l_mark[-1].string;
        yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
        yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
        yyval.classDeclaration->qualifiers = yystack.l_mark[-3].qualifierList.data;
        yyval.classDeclaration->numQualifiers = yystack.l_mark[-3].qualifierList.size;
    }
break;
case 12:
#line 293 "mof.y"
	{
        const MI_ClassDecl* scd;

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_CLASS, &yystack.l_mark[-5].qualifierList) != 0)
            YYABORT;

        /* Check whether class already exists */
        if (FindClassDecl(yystack.l_mark[-3].string))
        {
            yyerrorf(ID_CLASS_ALREADY_DEFINED, 
                "class already defined: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }

        /* Check whether superclass exists */
        scd = FindClassDecl(yystack.l_mark[-1].string);

        if (!scd)
        {
            yyerrorf(ID_UNDEFINED_SUPERCLASS, 
                "super class of \"%s\" is undefined: \"%s\"", yystack.l_mark[-3].string, yystack.l_mark[-1].string);
            YYABORT;
        }

        yyval.classDeclaration = CALLOC_T(MI_ClassDecl, 1);
        yyval.classDeclaration->flags = MI_FLAG_CLASS;
        yyval.classDeclaration->name = yystack.l_mark[-3].string;
        yyval.classDeclaration->superClass = scd->name;
        yyval.classDeclaration->superClassDecl = (MI_ClassDecl*)scd;
        yyval.classDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.classDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.classDeclaration->methods = yystack.l_mark[0].featureList.methodList.data;
        yyval.classDeclaration->numMethods = yystack.l_mark[0].featureList.methodList.size;
        yyval.classDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data;
        yyval.classDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size;
    }
break;
case 13:
#line 333 "mof.y"
	{
        yyval.featureList = yystack.l_mark[-2].featureList;
    }
break;
case 14:
#line 337 "mof.y"
	{
        yyval.featureList.propertySet.data = NULL;
        yyval.featureList.propertySet.size = 0;
        yyval.featureList.methodList.data = NULL;
        yyval.featureList.methodList.size = 0;
    }
break;
case 15:
#line 346 "mof.y"
	{
        if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0)
        {
            YYABORT;
        }
        yyval.featureList.propertySet.data = NULL;
        yyval.featureList.propertySet.size = 0;
        yyval.featureList.methodList.data = NULL;
        yyval.featureList.methodList.size = 0;
        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 16:
#line 360 "mof.y"
	{
        yyval.featureList.propertySet.data = NULL;
        yyval.featureList.propertySet.size = 0;
        yyval.featureList.methodList.data = NULL;
        yyval.featureList.methodList.size = 0;
        yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD;
        yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl);
    }
break;
case 17:
#line 370 "mof.y"
	{
        yyval.featureList.propertySet.data = NULL;
        yyval.featureList.propertySet.size = 0;
        yyval.featureList.methodList.data = NULL;
        yyval.featureList.methodList.size = 0;
        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 18:
#line 380 "mof.y"
	{
        if (CheckPropertyValueConstraints(yystack.l_mark[0].property) != 0)
        {
            YYABORT;
        }

        if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
        {
            yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
                "class feature already defined: \"%s\"", yystack.l_mark[0].property->name);
            YYABORT;
        }

        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 19:
#line 398 "mof.y"
	{
        if (FindMethod(&yystack.l_mark[-1].featureList.methodList, yystack.l_mark[0].methodDecl->name))
        {
            yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
                "class feature already defined: \"%s\"", yystack.l_mark[0].methodDecl->name);
            YYABORT;
        }

        yystack.l_mark[0].methodDecl->flags = MI_FLAG_METHOD;
        yystack.l_mark[0].methodDecl->flags |= GetQualFlags(yystack.l_mark[0].methodDecl->qualifiers, yystack.l_mark[0].methodDecl->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.methodList, yystack.l_mark[0].methodDecl);
    }
break;
case 20:
#line 411 "mof.y"
	{
        if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
        {
            yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
                "class feature already defined: \"%s\"", yystack.l_mark[0].property->name);
            YYABORT;
        }

        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 21:
#line 426 "mof.y"
	{
        yyval.qualifierList = yystack.l_mark[-1].qualifierList;
    }
break;
case 22:
#line 432 "mof.y"
	{
        yyval.qualifierList.data = NULL;
        yyval.qualifierList.size = 0;
        PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier);
    }
break;
case 23:
#line 438 "mof.y"
	{
        if (FindQualifier(&yystack.l_mark[-2].qualifierList, yystack.l_mark[0].qualifier->name))
        {
            yyerrorf(ID_DUPLICATE_QUALIFIER, 
                "duplicate qualifier: \"%s\"", yystack.l_mark[0].qualifier->name);
            YYABORT;
        }

        PtrArray_Append((PtrArray*)&yyval.qualifierList, yystack.l_mark[0].qualifier);
    }
break;
case 24:
#line 451 "mof.y"
	{
        MI_Qualifier* q;
        const MI_QualifierDecl* qd;

        qd = FindQualifierDeclaration(yystack.l_mark[0].string);

        if (!qd)
        {
            yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[0].string);
            YYABORT;
        }

        if (qd->type != MI_BOOLEAN)
        {
            yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, 
                "qualifier is missing initializer: \"%s\"", yystack.l_mark[0].string);
            YYABORT;
        }
        
        
        q = CALLOC_T(MI_Qualifier, 1);
        q->name = qd->name; /* use casing of qualifier declaration name */
        q->type = qd->type;
        q->flavor = qd->flavor;
        q->value = NewTrueValue();
        yyval.qualifier = q;
    }
break;
case 25:
#line 479 "mof.y"
	{
        MI_Qualifier* q;
        const MI_QualifierDecl* qd;
        void* value;

        qd = FindQualifierDeclaration(yystack.l_mark[-1].string);

        if (!qd)
        {
            yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }

        if (InitializerToValue(&yystack.l_mark[0].initializer, qd->type, &value) != 0)
        {
            yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, 
                "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }
        
        q = CALLOC_T(MI_Qualifier, 1);
        q->name = qd->name; /* use casing of qualifier declaration name */
        q->type = qd->type;
        q->flavor = qd->flavor;
        q->value = value;
        yyval.qualifier = q;
    }
break;
case 26:
#line 507 "mof.y"
	{
        MI_Qualifier* q;
        const MI_QualifierDecl* qd;

        qd = FindQualifierDeclaration(yystack.l_mark[-2].string);

        if (!qd)
        {
            yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }

        if (qd->type != MI_BOOLEAN)
        {
            yyerrorf(ID_MISSING_QUALIFIER_INITIALIZER, 
                "qualifier is missing initializer: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }
        
        q = CALLOC_T(MI_Qualifier, 1);
        q->name = qd->name; /* use casing of qualifier declaration name */
        q->type = qd->type;
        q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor);
        q->value = NewTrueValue();
        yyval.qualifier = q;
    }
break;
case 27:
#line 534 "mof.y"
	{
        MI_Qualifier* q;
        const MI_QualifierDecl* qd;
        void* value;

        qd = FindQualifierDeclaration(yystack.l_mark[-3].string);

        if (!qd)
        {
            yyerrorf(ID_UNDEFINED_QUALIFIER, "undefined qualifier: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }

        if (InitializerToValue(&yystack.l_mark[-2].initializer, qd->type, &value) != 0)
        {
            yyerrorf(ID_INVALID_QUALIFIER_INITIALIZER, 
                "invalid initializer for qualifer: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }
        
        q = CALLOC_T(MI_Qualifier, 1);
        q->name = qd->name; /* use casing of qualifier declaration name */
        q->type = qd->type;
        q->value = value;
        q->flavor = PropagateFlavors(yystack.l_mark[0].flags, qd->flavor);
        yyval.qualifier = q;
    }
break;
case 28:
#line 564 "mof.y"
	{
        memset(&yyval.initializer, 0, sizeof(yyval.initializer));
        yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
        yyval.initializer.data[0] = yystack.l_mark[-1].constantValue;
        yyval.initializer.size = 1;
    }
break;
case 29:
#line 571 "mof.y"
	{
        yyval.initializer = yystack.l_mark[0].initializer;
    }
break;
case 30:
#line 577 "mof.y"
	{
        yyval.flags = yystack.l_mark[0].flags;
    }
break;
case 31:
#line 581 "mof.y"
	{
        yyval.flags |= yystack.l_mark[0].flags;
    }
break;
case 32:
#line 587 "mof.y"
	{
        yyval.flags = MI_FLAG_ENABLEOVERRIDE;
    }
break;
case 33:
#line 591 "mof.y"
	{
        yyval.flags = MI_FLAG_DISABLEOVERRIDE;
    }
break;
case 34:
#line 595 "mof.y"
	{
        yyval.flags = MI_FLAG_RESTRICTED;
    }
break;
case 35:
#line 599 "mof.y"
	{
        yyval.flags = MI_FLAG_TOSUBCLASS;
    }
break;
case 36:
#line 603 "mof.y"
	{
        yyval.flags = MI_FLAG_TRANSLATABLE;
    }
break;
case 37:
#line 609 "mof.y"
	{
        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-1].string;
        yyval.property->type = yystack.l_mark[-2].type;
    }
break;
case 38:
#line 615 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-3].qualifierList) != 0)
            YYABORT;

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-1].string;
        yyval.property->type = yystack.l_mark[-2].type;
        yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size;
    }
break;
case 39:
#line 627 "mof.y"
	{
        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-2].string;
        yyval.property->type = ARRAYOF(yystack.l_mark[-3].type);
        yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer;
    }
break;
case 40:
#line 634 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-4].qualifierList) != 0)
            YYABORT;

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-2].string;
        yyval.property->type = ARRAYOF(yystack.l_mark[-3].type);
        yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
        yyval.property->subscript = (MI_Uint32)yystack.l_mark[-1].integer;
    }
break;
case 41:
#line 647 "mof.y"
	{
        void* value;

        if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-3].string;
        yyval.property->type = yystack.l_mark[-4].type;
        yyval.property->value = value;
    }
break;
case 42:
#line 662 "mof.y"
	{
        void* value;

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-5].qualifierList) != 0)
            YYABORT;

        if (InitializerToValue(&yystack.l_mark[-1].initializer, yystack.l_mark[-4].type, &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-3].string;
        yyval.property->type = yystack.l_mark[-4].type;
        yyval.property->qualifiers = yystack.l_mark[-5].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-5].qualifierList.size;
        yyval.property->value = value;
    }
break;
case 43:
#line 683 "mof.y"
	{
        void* value;

        if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-4].string;
        yyval.property->type = ARRAYOF(yystack.l_mark[-5].type);
        yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer;
        yyval.property->value = value;
    }
break;
case 44:
#line 699 "mof.y"
	{
        void* value;

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PROPERTY, &yystack.l_mark[-6].qualifierList) != 0)
            YYABORT;

        if (InitializerToValue(&yystack.l_mark[-1].initializer, ARRAYOF(yystack.l_mark[-5].type), &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-4].string;
        yyval.property->type = ARRAYOF(yystack.l_mark[-5].type);
        yyval.property->qualifiers = yystack.l_mark[-6].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-6].qualifierList.size;
        yyval.property->subscript = (MI_Uint32)yystack.l_mark[-3].integer;
        yyval.property->value = value;
    }
break;
case 45:
#line 723 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-2].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->type = MI_REFERENCE;
        yyval.property->name = yystack.l_mark[-1].string;
        yyval.property->className = cd->name;
    }
break;
case 46:
#line 740 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-2].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-3].qualifierList) != 0)
            YYABORT;

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->type = MI_REFERENCE;
        yyval.property->name = yystack.l_mark[-1].string;
        yyval.property->className = cd->name;
        yyval.property->qualifiers = yystack.l_mark[-3].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-3].qualifierList.size;
    }
break;
case 47:
#line 763 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-3].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->type = MI_REFERENCE;
        yyval.property->name = yystack.l_mark[-2].string;
        yyval.property->className = cd->name;
        yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer");
        /* [TODO: use initializer */
    }
break;
case 48:
#line 782 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-3].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-3].string);
            YYABORT;
        }

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_REFERENCE, &yystack.l_mark[-4].qualifierList) != 0)
            YYABORT;

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->type = MI_REFERENCE;
        yyval.property->name = yystack.l_mark[-2].string;
        yyval.property->className = cd->name;
        yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
        yywarnf(ID_IGNORED_INITIALIZER, "warning: ignored initializer");
        /* [TODO: use initializer */
    }
break;
case 49:
#line 809 "mof.y"
	{
        yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
        yyval.methodDecl->name = yystack.l_mark[-4].string;
        yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data;
        yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size;
        yyval.methodDecl->returnType = yystack.l_mark[-5].type;
    }
break;
case 50:
#line 817 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-6].qualifierList) != 0)
            YYABORT;

        yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
        yyval.methodDecl->name = yystack.l_mark[-4].string;
        yyval.methodDecl->parameters = yystack.l_mark[-2].parameterList.data;
        yyval.methodDecl->numParameters = yystack.l_mark[-2].parameterList.size;
        yyval.methodDecl->qualifiers = yystack.l_mark[-6].qualifierList.data;
        yyval.methodDecl->numQualifiers = yystack.l_mark[-6].qualifierList.size;
        yyval.methodDecl->returnType = yystack.l_mark[-5].type;
    }
break;
case 51:
#line 831 "mof.y"
	{
        MOF_ParameterList parameterList = PTRARRAY_INITIALIZER;

        yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
        yyval.methodDecl->name = yystack.l_mark[-3].string;
        yyval.methodDecl->parameters = parameterList.data;
        yyval.methodDecl->numParameters = parameterList.size;
        yyval.methodDecl->returnType = yystack.l_mark[-4].type;
    }
break;
case 52:
#line 841 "mof.y"
	{
        MOF_ParameterList parameterList = PTRARRAY_INITIALIZER;

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_METHOD, &yystack.l_mark[-5].qualifierList) != 0)
            YYABORT;

        yyval.methodDecl = CALLOC_T(MI_MethodDecl, 1);
        yyval.methodDecl->name = yystack.l_mark[-3].string;
        yyval.methodDecl->parameters = parameterList.data;
        yyval.methodDecl->numParameters = parameterList.size;
        yyval.methodDecl->qualifiers = yystack.l_mark[-5].qualifierList.data;
        yyval.methodDecl->numQualifiers = yystack.l_mark[-5].qualifierList.size;
        yyval.methodDecl->returnType = yystack.l_mark[-4].type;
    }
break;
case 53:
#line 859 "mof.y"
	{
        yyval.type = MI_BOOLEAN;
    }
break;
case 54:
#line 863 "mof.y"
	{
        yyval.type = MI_SINT8;
    }
break;
case 55:
#line 867 "mof.y"
	{
        yyval.type = MI_UINT8;
    }
break;
case 56:
#line 871 "mof.y"
	{
        yyval.type = MI_SINT16;
    }
break;
case 57:
#line 875 "mof.y"
	{
        yyval.type = MI_UINT16;
    }
break;
case 58:
#line 879 "mof.y"
	{
        yyval.type = MI_SINT32;
    }
break;
case 59:
#line 883 "mof.y"
	{
        yyval.type = MI_UINT32;
    }
break;
case 60:
#line 887 "mof.y"
	{
        yyval.type = MI_SINT64;
    }
break;
case 61:
#line 891 "mof.y"
	{
        yyval.type = MI_UINT64;
    }
break;
case 62:
#line 895 "mof.y"
	{
        yyval.type = MI_REAL32;
    }
break;
case 63:
#line 899 "mof.y"
	{
        yyval.type = MI_REAL64;
    }
break;
case 64:
#line 903 "mof.y"
	{
        yyval.type = MI_CHAR16;
    }
break;
case 65:
#line 907 "mof.y"
	{
        yyval.type = MI_DATETIME;
    }
break;
case 66:
#line 911 "mof.y"
	{
        yyval.type = MI_STRING;
    }
break;
case 67:
#line 917 "mof.y"
	{
        yyval.string = yystack.l_mark[-1].string;
    }
break;
case 68:
#line 923 "mof.y"
	{
        yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER;
        yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers);
        yyval.parameterList.data = NULL;
        yyval.parameterList.size = 0;
        PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter);
    }
break;
case 69:
#line 931 "mof.y"
	{
        if (FindParameter(&yystack.l_mark[-2].parameterList, yystack.l_mark[0].parameter->name))
        {
            yyerrorf(ID_PARAMETER_ALREADY_DEFINED, 
                "parameter already defined: \"%s\"", yystack.l_mark[0].parameter->name);
            YYABORT;
        }

        yystack.l_mark[0].parameter->flags = MI_FLAG_PARAMETER;
        yystack.l_mark[0].parameter->flags |= GetQualFlags(yystack.l_mark[0].parameter->qualifiers, yystack.l_mark[0].parameter->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.parameterList, yystack.l_mark[0].parameter);
    }
break;
case 70:
#line 946 "mof.y"
	{
        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[0].string;
        yyval.parameter->type = yystack.l_mark[-1].type;
    }
break;
case 71:
#line 952 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-1].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[0].string;
        yyval.parameter->type = MI_REFERENCE;
        yyval.parameter->className = cd->name;
    }
break;
case 72:
#line 969 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0)
            YYABORT;

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[0].string;
        yyval.parameter->type = yystack.l_mark[-1].type;
        yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data;
        yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size;
    }
break;
case 73:
#line 981 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-1].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-1].string);
            YYABORT;
        }

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-2].qualifierList) != 0)
            YYABORT;

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[0].string;
        yyval.parameter->type = MI_REFERENCE;
        yyval.parameter->className = cd->name;
        yyval.parameter->qualifiers = yystack.l_mark[-2].qualifierList.data;
        yyval.parameter->numQualifiers = yystack.l_mark[-2].qualifierList.size;
    }
break;
case 74:
#line 1004 "mof.y"
	{
        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[-1].string;
        yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type);
        yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
    }
break;
case 75:
#line 1011 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-2].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[-1].string;
        yyval.parameter->type = ARRAYOF(MI_REFERENCE);
        yyval.parameter->className = cd->name;
        yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
    }
break;
case 76:
#line 1029 "mof.y"
	{
        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0)
            YYABORT;

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[-1].string;
        yyval.parameter->type = ARRAYOF(yystack.l_mark[-2].type);
        yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
        yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data;
        yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size;
    }
break;
case 77:
#line 1042 "mof.y"
	{
        const MI_ClassDecl* cd;

        /* Verify that class exists */
        cd = FindClassDecl(yystack.l_mark[-2].string);
        if (!cd)
        {
            yyerrorf(ID_UNDEFINED_CLASS, "undefined class: \"%s\"", yystack.l_mark[-2].string);
            YYABORT;
        }

        /* Check qualifier scope */
        if (CheckScope(MI_FLAG_PARAMETER, &yystack.l_mark[-3].qualifierList) != 0)
            YYABORT;

        yyval.parameter = CALLOC_T(MI_ParameterDecl, 1);
        yyval.parameter->name = yystack.l_mark[-1].string;
        yyval.parameter->type = ARRAYOF(MI_REFERENCE);
        yyval.parameter->className = cd->name;
        yyval.parameter->subscript = (MI_Uint32)yystack.l_mark[0].integer;
        yyval.parameter->qualifiers = yystack.l_mark[-3].qualifierList.data;
        yyval.parameter->numQualifiers = yystack.l_mark[-3].qualifierList.size;
    }
break;
case 78:
#line 1068 "mof.y"
	{
        if (yystack.l_mark[-1].integer <= 0)
        {
            yyerrorf(ID_ILLEGAL_ARRAY_SUBSCRIPT, 
                "illegal array subscript: " SINT64_FMT, yystack.l_mark[-1].integer);
            YYABORT;
        }

        yyval.integer = yystack.l_mark[-1].integer;
    }
break;
case 79:
#line 1079 "mof.y"
	{
        /* 0 signifies a dynamic array */
        yyval.integer = 0;
    }
break;
case 80:
#line 1086 "mof.y"
	{
        memset(&yyval.initializer, 0, sizeof(yyval.initializer));
        yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
        yyval.initializer.data[0] = yystack.l_mark[0].constantValue;
        yyval.initializer.size = 1;
    }
break;
case 81:
#line 1093 "mof.y"
	{
        yyval.initializer = yystack.l_mark[0].initializer;
    }
break;
case 82:
#line 1097 "mof.y"
	{
        memset(&yyval.initializer, 0, sizeof(yyval.initializer));
        yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
        yyval.initializer.data[0].type = TOK_STRING_VALUE;
        yyval.initializer.data[0].value.string = yystack.l_mark[0].string;
        yyval.initializer.size = 0;
    }
break;
case 83:
#line 1107 "mof.y"
	{
        yyval.initializer = yystack.l_mark[-1].initializer;
    }
break;
case 84:
#line 1113 "mof.y"
	{
        memset(&yyval.initializer, 0, sizeof(yyval.initializer));
        yyval.initializer.data = CALLOC_T(MOF_ConstantValue, 1);
        yyval.initializer.data[0] = yystack.l_mark[0].constantValue;
        yyval.initializer.size = 1;
        yyval.initializer.isArray = 1;
    }
break;
case 85:
#line 1121 "mof.y"
	{
        yystack.l_mark[-2].initializer.data = REALLOC_T(MOF_ConstantValue, yystack.l_mark[-2].initializer.data, yystack.l_mark[-2].initializer.size + 1);
        yystack.l_mark[-2].initializer.data[yystack.l_mark[-2].initializer.size] = yystack.l_mark[0].constantValue;
        yystack.l_mark[-2].initializer.size++;
        yyval.initializer = yystack.l_mark[-2].initializer;
    }
break;
case 86:
#line 1130 "mof.y"
	{
        yyval.constantValue.type = TOK_INTEGER_VALUE;
        yyval.constantValue.value.integer = yystack.l_mark[0].integer;
    }
break;
case 87:
#line 1135 "mof.y"
	{
        yyval.constantValue.type = TOK_REAL_VALUE;
        yyval.constantValue.value.real = yystack.l_mark[0].real;
    }
break;
case 88:
#line 1140 "mof.y"
	{
        yyval.constantValue.type = TOK_CHAR_VALUE;
        yyval.constantValue.value.character = yystack.l_mark[0].character;
    }
break;
case 89:
#line 1145 "mof.y"
	{
        yyval.constantValue.type = TOK_STRING_VALUE;
        yyval.constantValue.value.string = yystack.l_mark[0].string;
    }
break;
case 90:
#line 1150 "mof.y"
	{
        yyval.constantValue.type = TOK_BOOLEAN_VALUE;
        yyval.constantValue.value.boolean = yystack.l_mark[0].boolean;
    }
break;
case 91:
#line 1155 "mof.y"
	{
        yyval.constantValue.type = TOK_NULL;
    }
break;
case 92:
#line 1161 "mof.y"
	{
	yyval.string = yystack.l_mark[0].string;
    }
break;
case 93:
#line 1165 "mof.y"
	{
        size_t size = strlen(yystack.l_mark[-1].string) + strlen(yystack.l_mark[0].string) + 1;
        yyval.string = (char*)MOF_Realloc(&state.heap, yystack.l_mark[-1].string, size);
        Strcat(yyval.string, size, yystack.l_mark[0].string);
        MOF_Free(&state.heap, yystack.l_mark[0].string);
    }
break;
case 94:
#line 1174 "mof.y"
	{
        yystack.l_mark[-2].qualifierDeclaration->name = yystack.l_mark[-3].string;
        yystack.l_mark[-2].qualifierDeclaration->scope = yystack.l_mark[-1].flags;
        yystack.l_mark[-2].qualifierDeclaration->flavor = 0;
        yyval.qualifierDeclaration = yystack.l_mark[-2].qualifierDeclaration;
    }
break;
case 95:
#line 1181 "mof.y"
	{
        yystack.l_mark[-3].qualifierDeclaration->name = yystack.l_mark[-4].string;
        yystack.l_mark[-3].qualifierDeclaration->scope = yystack.l_mark[-2].flags;
        yystack.l_mark[-3].qualifierDeclaration->flavor = yystack.l_mark[-1].flags;
        yyval.qualifierDeclaration = yystack.l_mark[-3].qualifierDeclaration;
    }
break;
case 96:
#line 1190 "mof.y"
	{
        yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
        yyval.qualifierDeclaration->type = yystack.l_mark[0].type;
    }
break;
case 97:
#line 1195 "mof.y"
	{
        void* value;

        if (InitializerToValue(&yystack.l_mark[0].initializer, yystack.l_mark[-2].type, &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
        yyval.qualifierDeclaration->type = yystack.l_mark[-2].type;
        yyval.qualifierDeclaration->value = value;
        ReleaseInitializer(&yystack.l_mark[0].initializer);
    }
break;
case 98:
#line 1210 "mof.y"
	{
        yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
        yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-1].type);
        yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[0].integer;
    }
break;
case 99:
#line 1216 "mof.y"
	{
        void* value = NULL;

        if (InitializerToValue(&yystack.l_mark[0].initializer, ARRAYOF(yystack.l_mark[-3].type), &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.qualifierDeclaration = CALLOC_T(MI_QualifierDecl, 1);
        yyval.qualifierDeclaration->type = ARRAYOF(yystack.l_mark[-3].type);
        yyval.qualifierDeclaration->subscript = (MI_Uint32)yystack.l_mark[-2].integer;
        yyval.qualifierDeclaration->value = value;
        ReleaseInitializer(&yystack.l_mark[0].initializer);
    }
break;
case 100:
#line 1234 "mof.y"
	{
        yyval.flags = yystack.l_mark[-1].flags;
    }
break;
case 101:
#line 1240 "mof.y"
	{
        yyval.flags = yystack.l_mark[0].flags;
    }
break;
case 102:
#line 1244 "mof.y"
	{
        yyval.flags |= yystack.l_mark[0].flags;
    }
break;
case 103:
#line 1250 "mof.y"
	{
        yyval.flags = MI_FLAG_CLASS;
    }
break;
case 104:
#line 1254 "mof.y"
	{
        yyval.flags = MI_FLAG_ASSOCIATION;
    }
break;
case 105:
#line 1258 "mof.y"
	{
        yyval.flags = MI_FLAG_INDICATION;
    }
break;
case 106:
#line 1262 "mof.y"
	{
        yyval.flags = MI_FLAG_PROPERTY;
    }
break;
case 107:
#line 1266 "mof.y"
	{
        yyval.flags = MI_FLAG_REFERENCE;
    }
break;
case 108:
#line 1270 "mof.y"
	{
        yyval.flags = MI_FLAG_METHOD;
    }
break;
case 109:
#line 1274 "mof.y"
	{
        yyval.flags = MI_FLAG_PARAMETER;
    }
break;
case 110:
#line 1278 "mof.y"
	{
        yyval.flags = MI_FLAG_ANY;
    }
break;
case 111:
#line 1284 "mof.y"
	{
        /* Reject incompatiable ToSubclass and Restricted flavors */
        if (yystack.l_mark[-1].flags & MI_FLAG_TOSUBCLASS && yystack.l_mark[-1].flags & MI_FLAG_RESTRICTED)
        {
            yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", 
                "ToSubclass", "Restricted");
            YYABORT;
        }

        /* Reject incompatiable EnableOverride and DisableOverride flavors */
        if (yystack.l_mark[-1].flags & MI_FLAG_ENABLEOVERRIDE && yystack.l_mark[-1].flags & MI_FLAG_DISABLEOVERRIDE)
        {
            yyerrorf(ID_INCOMPATIBLE_FLAVORS, "incompatible flavors: %s/%s", 
                "EnableOverride", "DisableOverride");
            YYABORT;
        }

        yyval.flags = yystack.l_mark[-1].flags;
    }
break;
case 112:
#line 1306 "mof.y"
	{
        yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
        yyval.instanceDeclaration->flags = 0;
        yyval.instanceDeclaration->name = yystack.l_mark[-1].string;
        yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
    }
break;
case 113:
#line 1314 "mof.y"
	{
        yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
        yyval.instanceDeclaration->flags = 0;
        yyval.instanceDeclaration->name = yystack.l_mark[-1].string;
        yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.instanceDeclaration->qualifiers = yystack.l_mark[-4].qualifierList.data;
        yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-4].qualifierList.size;
    }
break;
case 114:
#line 1324 "mof.y"
	{
        /* [TODO]: handle alias */
        yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
        yyval.instanceDeclaration->flags = 0;
        yyval.instanceDeclaration->name = yystack.l_mark[-2].string;
        yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
    }
break;
case 115:
#line 1333 "mof.y"
	{
        /* [TODO]: handle alias */
        yyval.instanceDeclaration = CALLOC_T(MI_InstanceDecl, 1);
        yyval.instanceDeclaration->flags = 0;
        yyval.instanceDeclaration->name = yystack.l_mark[-2].string;
        yyval.instanceDeclaration->properties = yystack.l_mark[0].featureList.propertySet.data;
        yyval.instanceDeclaration->numProperties = yystack.l_mark[0].featureList.propertySet.size;
        yyval.instanceDeclaration->qualifiers = yystack.l_mark[-5].qualifierList.data;
        yyval.instanceDeclaration->numQualifiers = yystack.l_mark[-5].qualifierList.size;
    }
break;
case 116:
#line 1346 "mof.y"
	{
        yyval.featureList = yystack.l_mark[-2].featureList;
    }
break;
case 117:
#line 1352 "mof.y"
	{
        yyval.string = yystack.l_mark[0].string;
    }
break;
case 118:
#line 1358 "mof.y"
	{
        yyval.featureList.propertySet.data = NULL;
        yyval.featureList.propertySet.size = 0;
        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 119:
#line 1366 "mof.y"
	{
        if (FindProperty(&yystack.l_mark[-1].featureList.propertySet, yystack.l_mark[0].property->name))
        {
            yyerrorf(ID_CLASS_FEATURE_ALREADY_DEFINED, 
                "instance property already defined: \"%s\"", yystack.l_mark[0].property->name);
            YYABORT;
        }

        yystack.l_mark[0].property->flags = MI_FLAG_PROPERTY;
        yystack.l_mark[0].property->flags |= GetQualFlags(yystack.l_mark[0].property->qualifiers, yystack.l_mark[0].property->numQualifiers);
        PtrArray_Append((PtrArray*)&yyval.featureList.propertySet, yystack.l_mark[0].property);
    }
break;
case 120:
#line 1381 "mof.y"
	{
        void* value;
        MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer);

        if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-3].string;
        yyval.property->type = type;
        yyval.property->value = value;
    }
break;
case 121:
#line 1397 "mof.y"
	{
        void* value;
        MI_Type type = InitializerToType(&yystack.l_mark[-1].initializer);

        if (InitializerToValue(&yystack.l_mark[-1].initializer, type, &value) != 0)
        {
            yyerrorf(ID_INVALID_INITIALIZER, "invalid initializer");
            YYABORT;
        }

        yyval.property = CALLOC_T(MI_PropertyDecl, 1);
        yyval.property->name = yystack.l_mark[-3].string;
        yyval.property->type = type;
        yyval.property->value = value;
        yyval.property->qualifiers = yystack.l_mark[-4].qualifierList.data;
        yyval.property->numQualifiers = yystack.l_mark[-4].qualifierList.size;
    }
break;
case 122:
#line 1417 "mof.y"
	{
        yyval.string = yystack.l_mark[0].string;
    }
break;
case 123:
#line 1421 "mof.y"
	{
        yyval.string = MOF_Strdup(&state.heap, "Association");
    }
break;
case 124:
#line 1425 "mof.y"
	{
        yyval.string = MOF_Strdup(&state.heap, "Indication");
    }
break;
case 125:
#line 1429 "mof.y"
	{
        yyval.string = MOF_Strdup(&state.heap, "Reference");
    }
break;
case 126:
#line 1433 "mof.y"
	{
        yyval.string = MOF_Strdup(&state.heap, "Property");
    }
break;
#line 2249 "y.tab.c"
    }
    yystack.s_mark -= yym;
    yystate = *yystack.s_mark;
    yystack.l_mark -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yystack.s_mark = YYFINAL;
        *++yystack.l_mark = yyval;
        if (yychar < 0)
        {
            if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
#endif
    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
    {
        goto yyoverflow;
    }
    *++yystack.s_mark = (short) yystate;
    *++yystack.l_mark = yyval;
    goto yyloop;

yyoverflow:
    yyerror("yacc stack overflow");

yyabort:
    yyfreestack(&yystack);
    return (1);

yyaccept:
    yyfreestack(&yystack);
    return (0);
}

ViewCVS 0.9.2