diff options
Diffstat (limited to 'Source/CParse/parser.c')
-rw-r--r-- | Source/CParse/parser.c | 10438 |
1 files changed, 10438 insertions, 0 deletions
diff --git a/Source/CParse/parser.c b/Source/CParse/parser.c new file mode 100644 index 0000000..e8c8111 --- /dev/null +++ b/Source/CParse/parser.c @@ -0,0 +1,10438 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + ID = 258, + HBLOCK = 259, + POUND = 260, + STRING = 261, + INCLUDE = 262, + IMPORT = 263, + INSERT = 264, + CHARCONST = 265, + NUM_INT = 266, + NUM_FLOAT = 267, + NUM_UNSIGNED = 268, + NUM_LONG = 269, + NUM_ULONG = 270, + NUM_LONGLONG = 271, + NUM_ULONGLONG = 272, + TYPEDEF = 273, + TYPE_INT = 274, + TYPE_UNSIGNED = 275, + TYPE_SHORT = 276, + TYPE_LONG = 277, + TYPE_FLOAT = 278, + TYPE_DOUBLE = 279, + TYPE_CHAR = 280, + TYPE_WCHAR = 281, + TYPE_VOID = 282, + TYPE_SIGNED = 283, + TYPE_BOOL = 284, + TYPE_COMPLEX = 285, + TYPE_TYPEDEF = 286, + TYPE_RAW = 287, + TYPE_NON_ISO_INT8 = 288, + TYPE_NON_ISO_INT16 = 289, + TYPE_NON_ISO_INT32 = 290, + TYPE_NON_ISO_INT64 = 291, + LPAREN = 292, + RPAREN = 293, + COMMA = 294, + SEMI = 295, + EXTERN = 296, + INIT = 297, + LBRACE = 298, + RBRACE = 299, + PERIOD = 300, + CONST_QUAL = 301, + VOLATILE = 302, + REGISTER = 303, + STRUCT = 304, + UNION = 305, + EQUAL = 306, + SIZEOF = 307, + MODULE = 308, + LBRACKET = 309, + RBRACKET = 310, + ILLEGAL = 311, + CONSTANT = 312, + NAME = 313, + RENAME = 314, + NAMEWARN = 315, + EXTEND = 316, + PRAGMA = 317, + FEATURE = 318, + VARARGS = 319, + ENUM = 320, + CLASS = 321, + TYPENAME = 322, + PRIVATE = 323, + PUBLIC = 324, + PROTECTED = 325, + COLON = 326, + STATIC = 327, + VIRTUAL = 328, + FRIEND = 329, + THROW = 330, + CATCH = 331, + EXPLICIT = 332, + USING = 333, + NAMESPACE = 334, + NATIVE = 335, + INLINE = 336, + TYPEMAP = 337, + EXCEPT = 338, + ECHO = 339, + APPLY = 340, + CLEAR = 341, + SWIGTEMPLATE = 342, + FRAGMENT = 343, + WARN = 344, + LESSTHAN = 345, + GREATERTHAN = 346, + MODULO = 347, + DELETE_KW = 348, + LESSTHANOREQUALTO = 349, + GREATERTHANOREQUALTO = 350, + EQUALTO = 351, + NOTEQUALTO = 352, + QUESTIONMARK = 353, + TYPES = 354, + PARMS = 355, + NONID = 356, + DSTAR = 357, + DCNOT = 358, + TEMPLATE = 359, + OPERATOR = 360, + COPERATOR = 361, + PARSETYPE = 362, + PARSEPARM = 363, + PARSEPARMS = 364, + CAST = 365, + LOR = 366, + LAND = 367, + OR = 368, + XOR = 369, + AND = 370, + RSHIFT = 371, + LSHIFT = 372, + MINUS = 373, + PLUS = 374, + MODULUS = 375, + SLASH = 376, + STAR = 377, + LNOT = 378, + NOT = 379, + UMINUS = 380, + DCOLON = 381 + }; +#endif +/* Tokens. */ +#define ID 258 +#define HBLOCK 259 +#define POUND 260 +#define STRING 261 +#define INCLUDE 262 +#define IMPORT 263 +#define INSERT 264 +#define CHARCONST 265 +#define NUM_INT 266 +#define NUM_FLOAT 267 +#define NUM_UNSIGNED 268 +#define NUM_LONG 269 +#define NUM_ULONG 270 +#define NUM_LONGLONG 271 +#define NUM_ULONGLONG 272 +#define TYPEDEF 273 +#define TYPE_INT 274 +#define TYPE_UNSIGNED 275 +#define TYPE_SHORT 276 +#define TYPE_LONG 277 +#define TYPE_FLOAT 278 +#define TYPE_DOUBLE 279 +#define TYPE_CHAR 280 +#define TYPE_WCHAR 281 +#define TYPE_VOID 282 +#define TYPE_SIGNED 283 +#define TYPE_BOOL 284 +#define TYPE_COMPLEX 285 +#define TYPE_TYPEDEF 286 +#define TYPE_RAW 287 +#define TYPE_NON_ISO_INT8 288 +#define TYPE_NON_ISO_INT16 289 +#define TYPE_NON_ISO_INT32 290 +#define TYPE_NON_ISO_INT64 291 +#define LPAREN 292 +#define RPAREN 293 +#define COMMA 294 +#define SEMI 295 +#define EXTERN 296 +#define INIT 297 +#define LBRACE 298 +#define RBRACE 299 +#define PERIOD 300 +#define CONST_QUAL 301 +#define VOLATILE 302 +#define REGISTER 303 +#define STRUCT 304 +#define UNION 305 +#define EQUAL 306 +#define SIZEOF 307 +#define MODULE 308 +#define LBRACKET 309 +#define RBRACKET 310 +#define ILLEGAL 311 +#define CONSTANT 312 +#define NAME 313 +#define RENAME 314 +#define NAMEWARN 315 +#define EXTEND 316 +#define PRAGMA 317 +#define FEATURE 318 +#define VARARGS 319 +#define ENUM 320 +#define CLASS 321 +#define TYPENAME 322 +#define PRIVATE 323 +#define PUBLIC 324 +#define PROTECTED 325 +#define COLON 326 +#define STATIC 327 +#define VIRTUAL 328 +#define FRIEND 329 +#define THROW 330 +#define CATCH 331 +#define EXPLICIT 332 +#define USING 333 +#define NAMESPACE 334 +#define NATIVE 335 +#define INLINE 336 +#define TYPEMAP 337 +#define EXCEPT 338 +#define ECHO 339 +#define APPLY 340 +#define CLEAR 341 +#define SWIGTEMPLATE 342 +#define FRAGMENT 343 +#define WARN 344 +#define LESSTHAN 345 +#define GREATERTHAN 346 +#define MODULO 347 +#define DELETE_KW 348 +#define LESSTHANOREQUALTO 349 +#define GREATERTHANOREQUALTO 350 +#define EQUALTO 351 +#define NOTEQUALTO 352 +#define QUESTIONMARK 353 +#define TYPES 354 +#define PARMS 355 +#define NONID 356 +#define DSTAR 357 +#define DCNOT 358 +#define TEMPLATE 359 +#define OPERATOR 360 +#define COPERATOR 361 +#define PARSETYPE 362 +#define PARSEPARM 363 +#define PARSEPARMS 364 +#define CAST 365 +#define LOR 366 +#define LAND 367 +#define OR 368 +#define XOR 369 +#define AND 370 +#define RSHIFT 371 +#define LSHIFT 372 +#define MINUS 373 +#define PLUS 374 +#define MODULUS 375 +#define SLASH 376 +#define STAR 377 +#define LNOT 378 +#define NOT 379 +#define UMINUS 380 +#define DCOLON 381 + + + + +/* Copy the first part of user declarations. */ +#line 12 "parser.y" + + +#define yylex yylex + +char cvsroot_parser_y[] = "$Id: parser.y 11582 2009-08-15 10:40:19Z wsfulton $"; + +#include "swig.h" +#include "cparse.h" +#include "preprocessor.h" +#include <ctype.h> + +/* We do this for portability */ +#undef alloca +#define alloca malloc + +/* ----------------------------------------------------------------------------- + * Externals + * ----------------------------------------------------------------------------- */ + +int yyparse(); + +/* NEW Variables */ + +static Node *top = 0; /* Top of the generated parse tree */ +static int unnamed = 0; /* Unnamed datatype counter */ +static Hash *extendhash = 0; /* Hash table of added methods */ +static Hash *classes = 0; /* Hash table of classes */ +static Symtab *prev_symtab = 0; +static Node *current_class = 0; +String *ModuleName = 0; +static Node *module_node = 0; +static String *Classprefix = 0; +static String *Namespaceprefix = 0; +static int inclass = 0; +static char *last_cpptype = 0; +static int inherit_list = 0; +static Parm *template_parameters = 0; +static int extendmode = 0; +static int compact_default_args = 0; +static int template_reduce = 0; +static int cparse_externc = 0; + +static int max_class_levels = 0; +static int class_level = 0; +static Node **class_decl = NULL; + +/* ----------------------------------------------------------------------------- + * Assist Functions + * ----------------------------------------------------------------------------- */ + + + +/* Called by the parser (yyparse) when an error is found.*/ +static void yyerror (const char *e) { + (void)e; +} + +static Node *new_node(const_String_or_char_ptr tag) { + Node *n = NewHash(); + set_nodeType(n,tag); + Setfile(n,cparse_file); + Setline(n,cparse_line); + return n; +} + +/* Copies a node. Does not copy tree links or symbol table data (except for + sym:name) */ + +static Node *copy_node(Node *n) { + Node *nn; + Iterator k; + nn = NewHash(); + Setfile(nn,Getfile(n)); + Setline(nn,Getline(n)); + for (k = First(n); k.key; k = Next(k)) { + String *ci; + String *key = k.key; + char *ckey = Char(key); + if ((strcmp(ckey,"nextSibling") == 0) || + (strcmp(ckey,"previousSibling") == 0) || + (strcmp(ckey,"parentNode") == 0) || + (strcmp(ckey,"lastChild") == 0)) { + continue; + } + if (Strncmp(key,"csym:",5) == 0) continue; + /* We do copy sym:name. For templates */ + if ((strcmp(ckey,"sym:name") == 0) || + (strcmp(ckey,"sym:weak") == 0) || + (strcmp(ckey,"sym:typename") == 0)) { + String *ci = Copy(k.item); + Setattr(nn,key, ci); + Delete(ci); + continue; + } + if (strcmp(ckey,"sym:symtab") == 0) { + Setattr(nn,"sym:needs_symtab", "1"); + } + /* We don't copy any other symbol table attributes */ + if (strncmp(ckey,"sym:",4) == 0) { + continue; + } + /* If children. We copy them recursively using this function */ + if (strcmp(ckey,"firstChild") == 0) { + /* Copy children */ + Node *cn = k.item; + while (cn) { + Node *copy = copy_node(cn); + appendChild(nn,copy); + Delete(copy); + cn = nextSibling(cn); + } + continue; + } + /* We don't copy the symbol table. But we drop an attribute + requires_symtab so that functions know it needs to be built */ + + if (strcmp(ckey,"symtab") == 0) { + /* Node defined a symbol table. */ + Setattr(nn,"requires_symtab","1"); + continue; + } + /* Can't copy nodes */ + if (strcmp(ckey,"node") == 0) { + continue; + } + if ((strcmp(ckey,"parms") == 0) || (strcmp(ckey,"pattern") == 0) || (strcmp(ckey,"throws") == 0) + || (strcmp(ckey,"kwargs") == 0)) { + ParmList *pl = CopyParmList(k.item); + Setattr(nn,key,pl); + Delete(pl); + continue; + } + /* Looks okay. Just copy the data using Copy */ + ci = Copy(k.item); + Setattr(nn, key, ci); + Delete(ci); + } + return nn; +} + +/* ----------------------------------------------------------------------------- + * Variables + * ----------------------------------------------------------------------------- */ + +static char *typemap_lang = 0; /* Current language setting */ + +static int cplus_mode = 0; +static String *class_rename = 0; + +/* C++ modes */ + +#define CPLUS_PUBLIC 1 +#define CPLUS_PRIVATE 2 +#define CPLUS_PROTECTED 3 + +/* include types */ +static int import_mode = 0; + +void SWIG_typemap_lang(const char *tm_lang) { + typemap_lang = Swig_copy_string(tm_lang); +} + +void SWIG_cparse_set_compact_default_args(int defargs) { + compact_default_args = defargs; +} + +int SWIG_cparse_template_reduce(int treduce) { + template_reduce = treduce; + return treduce; +} + +/* ----------------------------------------------------------------------------- + * Assist functions + * ----------------------------------------------------------------------------- */ + +static int promote_type(int t) { + if (t <= T_UCHAR || t == T_CHAR) return T_INT; + return t; +} + +/* Perform type-promotion for binary operators */ +static int promote(int t1, int t2) { + t1 = promote_type(t1); + t2 = promote_type(t2); + return t1 > t2 ? t1 : t2; +} + +static String *yyrename = 0; + +/* Forward renaming operator */ + +static String *resolve_node_scope(String *cname); + + +Hash *Swig_cparse_features(void) { + static Hash *features_hash = 0; + if (!features_hash) features_hash = NewHash(); + return features_hash; +} + +static String *feature_identifier_fix(String *s) { + if (SwigType_istemplate(s)) { + String *tp, *ts, *ta, *tq; + tp = SwigType_templateprefix(s); + ts = SwigType_templatesuffix(s); + ta = SwigType_templateargs(s); + tq = Swig_symbol_type_qualify(ta,0); + Append(tp,tq); + Append(tp,ts); + Delete(ts); + Delete(ta); + Delete(tq); + return tp; + } else { + return NewString(s); + } +} + +/* Generate the symbol table name for an object */ +/* This is a bit of a mess. Need to clean up */ +static String *add_oldname = 0; + + + +static String *make_name(Node *n, String *name,SwigType *decl) { + int destructor = name && (*(Char(name)) == '~'); + + if (yyrename) { + String *s = NewString(yyrename); + Delete(yyrename); + yyrename = 0; + if (destructor && (*(Char(s)) != '~')) { + Insert(s,0,"~"); + } + return s; + } + + if (!name) return 0; + return Swig_name_make(n,Namespaceprefix,name,decl,add_oldname); +} + +/* Generate an unnamed identifier */ +static String *make_unnamed() { + unnamed++; + return NewStringf("$unnamed%d$",unnamed); +} + +/* Return if the node is a friend declaration */ +static int is_friend(Node *n) { + return Cmp(Getattr(n,"storage"),"friend") == 0; +} + +static int is_operator(String *name) { + return Strncmp(name,"operator ", 9) == 0; +} + + +/* Add declaration list to symbol table */ +static int add_only_one = 0; + +static void add_symbols(Node *n) { + String *decl; + String *wrn = 0; + if (inclass && n) { + cparse_normalize_void(n); + } + while (n) { + String *symname = 0; + /* for friends, we need to pop the scope once */ + String *old_prefix = 0; + Symtab *old_scope = 0; + int isfriend = inclass && is_friend(n); + int iscdecl = Cmp(nodeType(n),"cdecl") == 0; + int only_csymbol = 0; + if (extendmode) { + Setattr(n,"isextension","1"); + } + + if (inclass) { + String *name = Getattr(n, "name"); + if (isfriend) { + /* for friends, we need to add the scopename if needed */ + String *prefix = name ? Swig_scopename_prefix(name) : 0; + old_prefix = Namespaceprefix; + old_scope = Swig_symbol_popscope(); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + if (!prefix) { + if (name && !is_operator(name) && Namespaceprefix) { + String *nname = NewStringf("%s::%s", Namespaceprefix, name); + Setattr(n,"name",nname); + Delete(nname); + } + } else { + Symtab *st = Swig_symbol_getscope(prefix); + String *ns = st ? Getattr(st,"name") : prefix; + String *base = Swig_scopename_last(name); + String *nname = NewStringf("%s::%s", ns, base); + Setattr(n,"name",nname); + Delete(nname); + Delete(base); + Delete(prefix); + } + Namespaceprefix = 0; + } else { + /* for member functions, we need to remove the redundant + class scope if provided, as in + + struct Foo { + int Foo::method(int a); + }; + + */ + String *prefix = name ? Swig_scopename_prefix(name) : 0; + if (prefix) { + if (Classprefix && (Equal(prefix,Classprefix))) { + String *base = Swig_scopename_last(name); + Setattr(n,"name",base); + Delete(base); + } + Delete(prefix); + } + + /* + if (!Getattr(n,"parentNode") && class_level) set_parentNode(n,class_decl[class_level - 1]); + */ + Setattr(n,"ismember","1"); + } + } + if (!isfriend && inclass) { + if ((cplus_mode != CPLUS_PUBLIC)) { + only_csymbol = 1; + if (cplus_mode == CPLUS_PROTECTED) { + Setattr(n,"access", "protected"); + only_csymbol = !Swig_need_protected(n); + } else { + Setattr(n,"access", "private"); + /* private are needed only when they are pure virtuals - why? */ + if ((Cmp(Getattr(n,"storage"),"virtual") == 0) && (Cmp(Getattr(n,"value"),"0") == 0)) { + only_csymbol = 0; + } + } + } else { + Setattr(n,"access", "public"); + } + } + if (Getattr(n,"sym:name")) { + n = nextSibling(n); + continue; + } + decl = Getattr(n,"decl"); + if (!SwigType_isfunction(decl)) { + String *name = Getattr(n,"name"); + String *makename = Getattr(n,"parser:makename"); + if (iscdecl) { + String *storage = Getattr(n, "storage"); + if (Cmp(storage,"typedef") == 0) { + Setattr(n,"kind","typedef"); + } else { + SwigType *type = Getattr(n,"type"); + String *value = Getattr(n,"value"); + Setattr(n,"kind","variable"); + if (value && Len(value)) { + Setattr(n,"hasvalue","1"); + } + if (type) { + SwigType *ty; + SwigType *tmp = 0; + if (decl) { + ty = tmp = Copy(type); + SwigType_push(ty,decl); + } else { + ty = type; + } + if (!SwigType_ismutable(ty)) { + SetFlag(n,"hasconsttype"); + SetFlag(n,"feature:immutable"); + } + if (tmp) Delete(tmp); + } + if (!type) { + Printf(stderr,"notype name %s\n", name); + } + } + } + Swig_features_get(Swig_cparse_features(), Namespaceprefix, name, 0, n); + if (makename) { + symname = make_name(n, makename,0); + Delattr(n,"parser:makename"); /* temporary information, don't leave it hanging around */ + } else { + makename = name; + symname = make_name(n, makename,0); + } + + if (!symname) { + symname = Copy(Getattr(n,"unnamed")); + } + if (symname) { + wrn = Swig_name_warning(n, Namespaceprefix, symname,0); + } + } else { + String *name = Getattr(n,"name"); + SwigType *fdecl = Copy(decl); + SwigType *fun = SwigType_pop_function(fdecl); + if (iscdecl) { + Setattr(n,"kind","function"); + } + + Swig_features_get(Swig_cparse_features(),Namespaceprefix,name,fun,n); + + symname = make_name(n, name,fun); + wrn = Swig_name_warning(n, Namespaceprefix,symname,fun); + + Delete(fdecl); + Delete(fun); + + } + if (!symname) { + n = nextSibling(n); + continue; + } + if (only_csymbol || GetFlag(n,"feature:ignore")) { + /* Only add to C symbol table and continue */ + Swig_symbol_add(0, n); + } else if (strncmp(Char(symname),"$ignore",7) == 0) { + char *c = Char(symname)+7; + SetFlag(n,"feature:ignore"); + if (strlen(c)) { + SWIG_WARN_NODE_BEGIN(n); + Swig_warning(0,Getfile(n), Getline(n), "%s\n",c+1); + SWIG_WARN_NODE_END(n); + } + Swig_symbol_add(0, n); + } else { + Node *c; + if ((wrn) && (Len(wrn))) { + String *metaname = symname; + if (!Getmeta(metaname,"already_warned")) { + SWIG_WARN_NODE_BEGIN(n); + Swig_warning(0,Getfile(n),Getline(n), "%s\n", wrn); + SWIG_WARN_NODE_END(n); + Setmeta(metaname,"already_warned","1"); + } + } + c = Swig_symbol_add(symname,n); + + if (c != n) { + /* symbol conflict attempting to add in the new symbol */ + if (Getattr(n,"sym:weak")) { + Setattr(n,"sym:name",symname); + } else { + String *e = NewStringEmpty(); + String *en = NewStringEmpty(); + String *ec = NewStringEmpty(); + int redefined = Swig_need_redefined_warn(n,c,inclass); + if (redefined) { + Printf(en,"Identifier '%s' redefined (ignored)",symname); + Printf(ec,"previous definition of '%s'",symname); + } else { + Printf(en,"Redundant redeclaration of '%s'",symname); + Printf(ec,"previous declaration of '%s'",symname); + } + if (Cmp(symname,Getattr(n,"name"))) { + Printf(en," (Renamed from '%s')", SwigType_namestr(Getattr(n,"name"))); + } + Printf(en,","); + if (Cmp(symname,Getattr(c,"name"))) { + Printf(ec," (Renamed from '%s')", SwigType_namestr(Getattr(c,"name"))); + } + Printf(ec,"."); + SWIG_WARN_NODE_BEGIN(n); + if (redefined) { + Swig_warning(WARN_PARSE_REDEFINED,Getfile(n),Getline(n),"%s\n",en); + Swig_warning(WARN_PARSE_REDEFINED,Getfile(c),Getline(c),"%s\n",ec); + } else if (!is_friend(n) && !is_friend(c)) { + Swig_warning(WARN_PARSE_REDUNDANT,Getfile(n),Getline(n),"%s\n",en); + Swig_warning(WARN_PARSE_REDUNDANT,Getfile(c),Getline(c),"%s\n",ec); + } + SWIG_WARN_NODE_END(n); + Printf(e,"%s:%d:%s\n%s:%d:%s\n",Getfile(n),Getline(n),en, + Getfile(c),Getline(c),ec); + Setattr(n,"error",e); + Delete(e); + Delete(en); + Delete(ec); + } + } + } + /* restore the class scope if needed */ + if (isfriend) { + Swig_symbol_setscope(old_scope); + if (old_prefix) { + Delete(Namespaceprefix); + Namespaceprefix = old_prefix; + } + } + Delete(symname); + + if (add_only_one) return; + n = nextSibling(n); + } +} + + +/* add symbols a parse tree node copy */ + +static void add_symbols_copy(Node *n) { + String *name; + int emode = 0; + while (n) { + char *cnodeType = Char(nodeType(n)); + + if (strcmp(cnodeType,"access") == 0) { + String *kind = Getattr(n,"kind"); + if (Strcmp(kind,"public") == 0) { + cplus_mode = CPLUS_PUBLIC; + } else if (Strcmp(kind,"private") == 0) { + cplus_mode = CPLUS_PRIVATE; + } else if (Strcmp(kind,"protected") == 0) { + cplus_mode = CPLUS_PROTECTED; + } + n = nextSibling(n); + continue; + } + + add_oldname = Getattr(n,"sym:name"); + if ((add_oldname) || (Getattr(n,"sym:needs_symtab"))) { + if (add_oldname) { + DohIncref(add_oldname); + /* Disable this, it prevents %rename to work with templates */ + /* If already renamed, we used that name */ + /* + if (Strcmp(add_oldname, Getattr(n,"name")) != 0) { + Delete(yyrename); + yyrename = Copy(add_oldname); + } + */ + } + Delattr(n,"sym:needs_symtab"); + Delattr(n,"sym:name"); + + add_only_one = 1; + add_symbols(n); + + if (Getattr(n,"partialargs")) { + Swig_symbol_cadd(Getattr(n,"partialargs"),n); + } + add_only_one = 0; + name = Getattr(n,"name"); + if (Getattr(n,"requires_symtab")) { + Swig_symbol_newscope(); + Swig_symbol_setscopename(name); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + if (strcmp(cnodeType,"class") == 0) { + inclass = 1; + current_class = n; + if (Strcmp(Getattr(n,"kind"),"class") == 0) { + cplus_mode = CPLUS_PRIVATE; + } else { + cplus_mode = CPLUS_PUBLIC; + } + } + if (strcmp(cnodeType,"extend") == 0) { + emode = cplus_mode; + cplus_mode = CPLUS_PUBLIC; + } + add_symbols_copy(firstChild(n)); + if (strcmp(cnodeType,"extend") == 0) { + cplus_mode = emode; + } + if (Getattr(n,"requires_symtab")) { + Setattr(n,"symtab", Swig_symbol_popscope()); + Delattr(n,"requires_symtab"); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + if (add_oldname) { + Delete(add_oldname); + add_oldname = 0; + } + if (strcmp(cnodeType,"class") == 0) { + inclass = 0; + current_class = 0; + } + } else { + if (strcmp(cnodeType,"extend") == 0) { + emode = cplus_mode; + cplus_mode = CPLUS_PUBLIC; + } + add_symbols_copy(firstChild(n)); + if (strcmp(cnodeType,"extend") == 0) { + cplus_mode = emode; + } + } + n = nextSibling(n); + } +} + +/* Extension merge. This function is used to handle the %extend directive + when it appears before a class definition. To handle this, the %extend + actually needs to take precedence. Therefore, we will selectively nuke symbols + from the current symbol table, replacing them with the added methods */ + +static void merge_extensions(Node *cls, Node *am) { + Node *n; + Node *csym; + + n = firstChild(am); + while (n) { + String *symname; + if (Strcmp(nodeType(n),"constructor") == 0) { + symname = Getattr(n,"sym:name"); + if (symname) { + if (Strcmp(symname,Getattr(n,"name")) == 0) { + /* If the name and the sym:name of a constructor are the same, + then it hasn't been renamed. However---the name of the class + itself might have been renamed so we need to do a consistency + check here */ + if (Getattr(cls,"sym:name")) { + Setattr(n,"sym:name", Getattr(cls,"sym:name")); + } + } + } + } + + symname = Getattr(n,"sym:name"); + DohIncref(symname); + if ((symname) && (!Getattr(n,"error"))) { + /* Remove node from its symbol table */ + Swig_symbol_remove(n); + csym = Swig_symbol_add(symname,n); + if (csym != n) { + /* Conflict with previous definition. Nuke previous definition */ + String *e = NewStringEmpty(); + String *en = NewStringEmpty(); + String *ec = NewStringEmpty(); + Printf(ec,"Identifier '%s' redefined by %%extend (ignored),",symname); + Printf(en,"%%extend definition of '%s'.",symname); + SWIG_WARN_NODE_BEGIN(n); + Swig_warning(WARN_PARSE_REDEFINED,Getfile(csym),Getline(csym),"%s\n",ec); + Swig_warning(WARN_PARSE_REDEFINED,Getfile(n),Getline(n),"%s\n",en); + SWIG_WARN_NODE_END(n); + Printf(e,"%s:%d:%s\n%s:%d:%s\n",Getfile(csym),Getline(csym),ec, + Getfile(n),Getline(n),en); + Setattr(csym,"error",e); + Delete(e); + Delete(en); + Delete(ec); + Swig_symbol_remove(csym); /* Remove class definition */ + Swig_symbol_add(symname,n); /* Insert extend definition */ + } + } + n = nextSibling(n); + } +} + +static void append_previous_extension(Node *cls, Node *am) { + Node *n, *ne; + Node *pe = 0; + Node *ae = 0; + + if (!am) return; + + n = firstChild(am); + while (n) { + ne = nextSibling(n); + set_nextSibling(n,0); + /* typemaps and fragments need to be prepended */ + if (((Cmp(nodeType(n),"typemap") == 0) || (Cmp(nodeType(n),"fragment") == 0))) { + if (!pe) pe = new_node("extend"); + appendChild(pe, n); + } else { + if (!ae) ae = new_node("extend"); + appendChild(ae, n); + } + n = ne; + } + if (pe) prependChild(cls,pe); + if (ae) appendChild(cls,ae); +} + + +/* Check for unused %extend. Special case, don't report unused + extensions for templates */ + +static void check_extensions() { + Iterator ki; + + if (!extendhash) return; + for (ki = First(extendhash); ki.key; ki = Next(ki)) { + if (!Strchr(ki.key,'<')) { + SWIG_WARN_NODE_BEGIN(ki.item); + Swig_warning(WARN_PARSE_EXTEND_UNDEF,Getfile(ki.item), Getline(ki.item), "%%extend defined for an undeclared class %s.\n", ki.key); + SWIG_WARN_NODE_END(ki.item); + } + } +} + +/* Check a set of declarations to see if any are pure-abstract */ + +static List *pure_abstract(Node *n) { + List *abs = 0; + while (n) { + if (Cmp(nodeType(n),"cdecl") == 0) { + String *decl = Getattr(n,"decl"); + if (SwigType_isfunction(decl)) { + String *init = Getattr(n,"value"); + if (Cmp(init,"0") == 0) { + if (!abs) { + abs = NewList(); + } + Append(abs,n); + Setattr(n,"abstract","1"); + } + } + } else if (Cmp(nodeType(n),"destructor") == 0) { + if (Cmp(Getattr(n,"value"),"0") == 0) { + if (!abs) { + abs = NewList(); + } + Append(abs,n); + Setattr(n,"abstract","1"); + } + } + n = nextSibling(n); + } + return abs; +} + +/* Make a classname */ + +static String *make_class_name(String *name) { + String *nname = 0; + if (Namespaceprefix) { + nname= NewStringf("%s::%s", Namespaceprefix, name); + } else { + nname = NewString(name); + } + if (SwigType_istemplate(nname)) { + String *prefix, *args, *qargs; + prefix = SwigType_templateprefix(nname); + args = SwigType_templateargs(nname); + qargs = Swig_symbol_type_qualify(args,0); + Append(prefix,qargs); + Delete(nname); + Delete(args); + Delete(qargs); + nname = prefix; + } + return nname; +} + +static List *make_inherit_list(String *clsname, List *names) { + int i, ilen; + String *derived; + List *bases = NewList(); + + if (Namespaceprefix) derived = NewStringf("%s::%s", Namespaceprefix,clsname); + else derived = NewString(clsname); + + ilen = Len(names); + for (i = 0; i < ilen; i++) { + Node *s; + String *base; + String *n = Getitem(names,i); + /* Try to figure out where this symbol is */ + s = Swig_symbol_clookup(n,0); + if (s) { + while (s && (Strcmp(nodeType(s),"class") != 0)) { + /* Not a class. Could be a typedef though. */ + String *storage = Getattr(s,"storage"); + if (storage && (Strcmp(storage,"typedef") == 0)) { + String *nn = Getattr(s,"type"); + s = Swig_symbol_clookup(nn,Getattr(s,"sym:symtab")); + } else { + break; + } + } + if (s && ((Strcmp(nodeType(s),"class") == 0) || (Strcmp(nodeType(s),"template") == 0))) { + String *q = Swig_symbol_qualified(s); + Append(bases,s); + if (q) { + base = NewStringf("%s::%s", q, Getattr(s,"name")); + Delete(q); + } else { + base = NewString(Getattr(s,"name")); + } + } else { + base = NewString(n); + } + } else { + base = NewString(n); + } + if (base) { + Swig_name_inherit(base,derived); + Delete(base); + } + } + return bases; +} + +/* If the class name is qualified. We need to create or lookup namespace entries */ + +static Symtab *get_global_scope() { + Symtab *symtab = Swig_symbol_current(); + Node *pn = parentNode(symtab); + while (pn) { + symtab = pn; + pn = parentNode(symtab); + if (!pn) break; + } + Swig_symbol_setscope(symtab); + return symtab; +} + +/* Remove the block braces, { and }, if the 'noblock' attribute is set. + * Node *kw can be either a Hash or Parmlist. */ +static String *remove_block(Node *kw, const String *inputcode) { + String *modified_code = 0; + while (kw) { + String *name = Getattr(kw,"name"); + if (name && (Cmp(name,"noblock") == 0)) { + char *cstr = Char(inputcode); + size_t len = Len(inputcode); + if (len && cstr[0] == '{') { + --len; ++cstr; + if (len && cstr[len - 1] == '}') { --len; } + /* we now remove the extra spaces */ + while (len && isspace((int)cstr[0])) { --len; ++cstr; } + while (len && isspace((int)cstr[len - 1])) { --len; } + modified_code = NewStringWithSize(cstr, len); + break; + } + } + kw = nextSibling(kw); + } + return modified_code; +} + + +static Node *nscope = 0; +static Node *nscope_inner = 0; +static String *resolve_node_scope(String *cname) { + Symtab *gscope = 0; + nscope = 0; + nscope_inner = 0; + if (Swig_scopename_check(cname)) { + Node *ns; + String *prefix = Swig_scopename_prefix(cname); + String *base = Swig_scopename_last(cname); + if (prefix && (Strncmp(prefix,"::",2) == 0)) { + /* Use the global scope */ + String *nprefix = NewString(Char(prefix)+2); + Delete(prefix); + prefix= nprefix; + gscope = get_global_scope(); + } + if (!prefix || (Len(prefix) == 0)) { + /* Use the global scope, but we need to add a 'global' namespace. */ + if (!gscope) gscope = get_global_scope(); + /* note that this namespace is not the "unnamed" one, + and we don't use Setattr(nscope,"name", ""), + because the unnamed namespace is private */ + nscope = new_node("namespace"); + Setattr(nscope,"symtab", gscope);; + nscope_inner = nscope; + return base; + } + /* Try to locate the scope */ + ns = Swig_symbol_clookup(prefix,0); + if (!ns) { + Swig_error(cparse_file,cparse_line,"Undefined scope '%s'\n", prefix); + } else { + Symtab *nstab = Getattr(ns,"symtab"); + if (!nstab) { + Swig_error(cparse_file,cparse_line, + "'%s' is not defined as a valid scope.\n", prefix); + ns = 0; + } else { + /* Check if the node scope is the current scope */ + String *tname = Swig_symbol_qualifiedscopename(0); + String *nname = Swig_symbol_qualifiedscopename(nstab); + if (tname && (Strcmp(tname,nname) == 0)) { + ns = 0; + cname = base; + } + Delete(tname); + Delete(nname); + } + if (ns) { + /* we will try to create a new node using the namespaces we + can find in the scope name */ + List *scopes; + String *sname; + Iterator si; + String *name = NewString(prefix); + scopes = NewList(); + while (name) { + String *base = Swig_scopename_last(name); + String *tprefix = Swig_scopename_prefix(name); + Insert(scopes,0,base); + Delete(base); + Delete(name); + name = tprefix; + } + for (si = First(scopes); si.item; si = Next(si)) { + Node *ns1,*ns2; + sname = si.item; + ns1 = Swig_symbol_clookup(sname,0); + assert(ns1); + if (Strcmp(nodeType(ns1),"namespace") == 0) { + if (Getattr(ns1,"alias")) { + ns1 = Getattr(ns1,"namespace"); + } + } else { + /* now this last part is a class */ + si = Next(si); + ns1 = Swig_symbol_clookup(sname,0); + /* or a nested class tree, which is unrolled here */ + for (; si.item; si = Next(si)) { + if (si.item) { + Printf(sname,"::%s",si.item); + } + } + /* we get the 'inner' class */ + nscope_inner = Swig_symbol_clookup(sname,0); + /* set the scope to the inner class */ + Swig_symbol_setscope(Getattr(nscope_inner,"symtab")); + /* save the last namespace prefix */ + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + /* and return the node name, including the inner class prefix */ + break; + } + /* here we just populate the namespace tree as usual */ + ns2 = new_node("namespace"); + Setattr(ns2,"name",sname); + Setattr(ns2,"symtab", Getattr(ns1,"symtab")); + add_symbols(ns2); + Swig_symbol_setscope(Getattr(ns1,"symtab")); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + if (nscope_inner) { + if (Getattr(nscope_inner,"symtab") != Getattr(ns2,"symtab")) { + appendChild(nscope_inner,ns2); + Delete(ns2); + } + } + nscope_inner = ns2; + if (!nscope) nscope = ns2; + } + cname = base; + Delete(scopes); + } + } + Delete(prefix); + } + return cname; +} + + + + + +/* Structures for handling code fragments built for nested classes */ + +typedef struct Nested { + String *code; /* Associated code fragment */ + int line; /* line number where it starts */ + char *name; /* Name associated with this nested class */ + char *kind; /* Kind of class */ + int unnamed; /* unnamed class */ + SwigType *type; /* Datatype associated with the name */ + struct Nested *next; /* Next code fragment in list */ +} Nested; + +/* Some internal variables for saving nested class information */ + +static Nested *nested_list = 0; + +/* Add a function to the nested list */ + +static void add_nested(Nested *n) { + Nested *n1; + if (!nested_list) nested_list = n; + else { + n1 = nested_list; + while (n1->next) n1 = n1->next; + n1->next = n; + } +} + +/* Strips C-style and C++-style comments from string in-place. */ +static void strip_comments(char *string) { + int state = 0; /* + * 0 - not in comment + * 1 - in c-style comment + * 2 - in c++-style comment + * 3 - in string + * 4 - after reading / not in comments + * 5 - after reading * in c-style comments + * 6 - after reading \ in strings + */ + char * c = string; + while (*c) { + switch (state) { + case 0: + if (*c == '\"') + state = 3; + else if (*c == '/') + state = 4; + break; + case 1: + if (*c == '*') + state = 5; + *c = ' '; + break; + case 2: + if (*c == '\n') + state = 0; + else + *c = ' '; + break; + case 3: + if (*c == '\"') + state = 0; + else if (*c == '\\') + state = 6; + break; + case 4: + if (*c == '/') { + *(c-1) = ' '; + *c = ' '; + state = 2; + } else if (*c == '*') { + *(c-1) = ' '; + *c = ' '; + state = 1; + } else + state = 0; + break; + case 5: + if (*c == '/') + state = 0; + else + state = 1; + *c = ' '; + break; + case 6: + state = 3; + break; + } + ++c; + } +} + +/* Dump all of the nested class declarations to the inline processor + * However. We need to do a few name replacements and other munging + * first. This function must be called before closing a class! */ + +static Node *dump_nested(const char *parent) { + Nested *n,*n1; + Node *ret = 0; + n = nested_list; + if (!parent) { + nested_list = 0; + return 0; + } + while (n) { + Node *retx; + SwigType *nt; + /* Token replace the name of the parent class */ + Replace(n->code, "$classname", parent, DOH_REPLACE_ANY); + + /* Fix up the name of the datatype (for building typedefs and other stuff) */ + Append(n->type,parent); + Append(n->type,"_"); + Append(n->type,n->name); + + /* Add the appropriate declaration to the C++ processor */ + retx = new_node("cdecl"); + Setattr(retx,"name",n->name); + nt = Copy(n->type); + Setattr(retx,"type",nt); + Delete(nt); + Setattr(retx,"nested",parent); + if (n->unnamed) { + Setattr(retx,"unnamed","1"); + } + + add_symbols(retx); + if (ret) { + set_nextSibling(retx,ret); + Delete(ret); + } + ret = retx; + + /* Insert a forward class declaration */ + /* Disabled: [ 597599 ] union in class: incorrect scope + retx = new_node("classforward"); + Setattr(retx,"kind",n->kind); + Setattr(retx,"name",Copy(n->type)); + Setattr(retx,"sym:name", make_name(n->type,0)); + set_nextSibling(retx,ret); + ret = retx; + */ + + /* Strip comments - further code may break in presence of comments. */ + strip_comments(Char(n->code)); + + /* Make all SWIG created typedef structs/unions/classes unnamed else + redefinition errors occur - nasty hack alert.*/ + + { + const char* types_array[3] = {"struct", "union", "class"}; + int i; + for (i=0; i<3; i++) { + char* code_ptr = Char(n->code); + while (code_ptr) { + /* Replace struct name (as in 'struct name {...}' ) with whitespace + name will be between struct and opening brace */ + + code_ptr = strstr(code_ptr, types_array[i]); + if (code_ptr) { + char *open_bracket_pos; + code_ptr += strlen(types_array[i]); + open_bracket_pos = strchr(code_ptr, '{'); + if (open_bracket_pos) { + /* Make sure we don't have something like struct A a; */ + char* semi_colon_pos = strchr(code_ptr, ';'); + if (!(semi_colon_pos && (semi_colon_pos < open_bracket_pos))) + while (code_ptr < open_bracket_pos) + *code_ptr++ = ' '; + } + } + } + } + } + + { + /* Remove SWIG directive %constant which may be left in the SWIG created typedefs */ + char* code_ptr = Char(n->code); + while (code_ptr) { + code_ptr = strstr(code_ptr, "%constant"); + if (code_ptr) { + char* directive_end_pos = strchr(code_ptr, ';'); + if (directive_end_pos) { + while (code_ptr <= directive_end_pos) + *code_ptr++ = ' '; + } + } + } + } + { + Node *head = new_node("insert"); + String *code = NewStringf("\n%s\n",n->code); + Setattr(head,"code", code); + Delete(code); + set_nextSibling(head,ret); + Delete(ret); + ret = head; + } + + /* Dump the code to the scanner */ + start_inline(Char(n->code),n->line); + + n1 = n->next; + Delete(n->code); + free(n); + n = n1; + } + nested_list = 0; + return ret; +} + +Node *Swig_cparse(File *f) { + scanner_file(f); + top = 0; + yyparse(); + return top; +} + +static void single_new_feature(const char *featurename, String *val, Hash *featureattribs, char *declaratorid, SwigType *type, ParmList *declaratorparms, String *qualifier) { + String *fname; + String *name; + String *fixname; + SwigType *t = Copy(type); + + /* Printf(stdout, "single_new_feature: [%s] [%s] [%s] [%s] [%s] [%s]\n", featurename, val, declaratorid, t, ParmList_str_defaultargs(declaratorparms), qualifier); */ + + fname = NewStringf("feature:%s",featurename); + if (declaratorid) { + fixname = feature_identifier_fix(declaratorid); + } else { + fixname = NewStringEmpty(); + } + if (Namespaceprefix) { + name = NewStringf("%s::%s",Namespaceprefix, fixname); + } else { + name = fixname; + } + + if (declaratorparms) Setmeta(val,"parms",declaratorparms); + if (!Len(t)) t = 0; + if (t) { + if (qualifier) SwigType_push(t,qualifier); + if (SwigType_isfunction(t)) { + SwigType *decl = SwigType_pop_function(t); + if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",name); + Swig_feature_set(Swig_cparse_features(), nname, decl, fname, val, featureattribs); + Delete(nname); + } else { + Swig_feature_set(Swig_cparse_features(), name, decl, fname, val, featureattribs); + } + Delete(decl); + } else if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",name); + Swig_feature_set(Swig_cparse_features(),nname,0,fname,val, featureattribs); + Delete(nname); + } + } else { + /* Global feature, that is, feature not associated with any particular symbol */ + Swig_feature_set(Swig_cparse_features(),name,0,fname,val, featureattribs); + } + Delete(fname); + Delete(name); +} + +/* Add a new feature to the Hash. Additional features are added if the feature has a parameter list (declaratorparms) + * and one or more of the parameters have a default argument. An extra feature is added for each defaulted parameter, + * simulating the equivalent overloaded method. */ +static void new_feature(const char *featurename, String *val, Hash *featureattribs, char *declaratorid, SwigType *type, ParmList *declaratorparms, String *qualifier) { + + ParmList *declparms = declaratorparms; + + /* remove the { and } braces if the noblock attribute is set */ + String *newval = remove_block(featureattribs, val); + val = newval ? newval : val; + + /* Add the feature */ + single_new_feature(featurename, val, featureattribs, declaratorid, type, declaratorparms, qualifier); + + /* Add extra features if there are default parameters in the parameter list */ + if (type) { + while (declparms) { + if (ParmList_has_defaultargs(declparms)) { + + /* Create a parameter list for the new feature by copying all + but the last (defaulted) parameter */ + ParmList* newparms = CopyParmListMax(declparms, ParmList_len(declparms)-1); + + /* Create new declaration - with the last parameter removed */ + SwigType *newtype = Copy(type); + Delete(SwigType_pop_function(newtype)); /* remove the old parameter list from newtype */ + SwigType_add_function(newtype,newparms); + + single_new_feature(featurename, Copy(val), featureattribs, declaratorid, newtype, newparms, qualifier); + declparms = newparms; + } else { + declparms = 0; + } + } + } +} + +/* check if a function declaration is a plain C object */ +static int is_cfunction(Node *n) { + if (!cparse_cplusplus || cparse_externc) return 1; + if (Cmp(Getattr(n,"storage"),"externc") == 0) { + return 1; + } + return 0; +} + +/* If the Node is a function with parameters, check to see if any of the parameters + * have default arguments. If so create a new function for each defaulted argument. + * The additional functions form a linked list of nodes with the head being the original Node n. */ +static void default_arguments(Node *n) { + Node *function = n; + + if (function) { + ParmList *varargs = Getattr(function,"feature:varargs"); + if (varargs) { + /* Handles the %varargs directive by looking for "feature:varargs" and + * substituting ... with an alternative set of arguments. */ + Parm *p = Getattr(function,"parms"); + Parm *pp = 0; + while (p) { + SwigType *t = Getattr(p,"type"); + if (Strcmp(t,"v(...)") == 0) { + if (pp) { + ParmList *cv = Copy(varargs); + set_nextSibling(pp,cv); + Delete(cv); + } else { + ParmList *cv = Copy(varargs); + Setattr(function,"parms", cv); + Delete(cv); + } + break; + } + pp = p; + p = nextSibling(p); + } + } + + /* Do not add in functions if kwargs is being used or if user wants old default argument wrapping + (one wrapped method per function irrespective of number of default arguments) */ + if (compact_default_args + || is_cfunction(function) + || GetFlag(function,"feature:compactdefaultargs") + || GetFlag(function,"feature:kwargs")) { + ParmList *p = Getattr(function,"parms"); + if (p) + Setattr(p,"compactdefargs", "1"); /* mark parameters for special handling */ + function = 0; /* don't add in extra methods */ + } + } + + while (function) { + ParmList *parms = Getattr(function,"parms"); + if (ParmList_has_defaultargs(parms)) { + + /* Create a parameter list for the new function by copying all + but the last (defaulted) parameter */ + ParmList* newparms = CopyParmListMax(parms,ParmList_len(parms)-1); + + /* Create new function and add to symbol table */ + { + SwigType *ntype = Copy(nodeType(function)); + char *cntype = Char(ntype); + Node *new_function = new_node(ntype); + SwigType *decl = Copy(Getattr(function,"decl")); + int constqualifier = SwigType_isconst(decl); + String *ccode = Copy(Getattr(function,"code")); + String *cstorage = Copy(Getattr(function,"storage")); + String *cvalue = Copy(Getattr(function,"value")); + SwigType *ctype = Copy(Getattr(function,"type")); + String *cthrow = Copy(Getattr(function,"throw")); + + Delete(SwigType_pop_function(decl)); /* remove the old parameter list from decl */ + SwigType_add_function(decl,newparms); + if (constqualifier) + SwigType_add_qualifier(decl,"const"); + + Setattr(new_function,"name", Getattr(function,"name")); + Setattr(new_function,"code", ccode); + Setattr(new_function,"decl", decl); + Setattr(new_function,"parms", newparms); + Setattr(new_function,"storage", cstorage); + Setattr(new_function,"value", cvalue); + Setattr(new_function,"type", ctype); + Setattr(new_function,"throw", cthrow); + + Delete(ccode); + Delete(cstorage); + Delete(cvalue); + Delete(ctype); + Delete(cthrow); + Delete(decl); + + { + Node *throws = Getattr(function,"throws"); + ParmList *pl = CopyParmList(throws); + if (throws) Setattr(new_function,"throws",pl); + Delete(pl); + } + + /* copy specific attributes for global (or in a namespace) template functions - these are not templated class methods */ + if (strcmp(cntype,"template") == 0) { + Node *templatetype = Getattr(function,"templatetype"); + Node *symtypename = Getattr(function,"sym:typename"); + Parm *templateparms = Getattr(function,"templateparms"); + if (templatetype) { + Node *tmp = Copy(templatetype); + Setattr(new_function,"templatetype",tmp); + Delete(tmp); + } + if (symtypename) { + Node *tmp = Copy(symtypename); + Setattr(new_function,"sym:typename",tmp); + Delete(tmp); + } + if (templateparms) { + Parm *tmp = CopyParmList(templateparms); + Setattr(new_function,"templateparms",tmp); + Delete(tmp); + } + } else if (strcmp(cntype,"constructor") == 0) { + /* only copied for constructors as this is not a user defined feature - it is hard coded in the parser */ + if (GetFlag(function,"feature:new")) SetFlag(new_function,"feature:new"); + } + + add_symbols(new_function); + /* mark added functions as ones with overloaded parameters and point to the parsed method */ + Setattr(new_function,"defaultargs", n); + + /* Point to the new function, extending the linked list */ + set_nextSibling(function, new_function); + Delete(new_function); + function = new_function; + + Delete(ntype); + } + } else { + function = 0; + } + } +} + +/* ----------------------------------------------------------------------------- + * tag_nodes() + * + * Used by the parser to mark subtypes with extra information. + * ----------------------------------------------------------------------------- */ + +static void tag_nodes(Node *n, const_String_or_char_ptr attrname, DOH *value) { + while (n) { + Setattr(n, attrname, value); + tag_nodes(firstChild(n), attrname, value); + n = nextSibling(n); + } +} + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 1440 "parser.y" +{ + char *id; + List *bases; + struct Define { + String *val; + String *rawval; + int type; + String *qualifier; + String *bitfield; + Parm *throws; + String *throwf; + } dtype; + struct { + char *type; + String *filename; + int line; + } loc; + struct { + char *id; + SwigType *type; + String *defarg; + ParmList *parms; + short have_parms; + ParmList *throws; + String *throwf; + } decl; + Parm *tparms; + struct { + String *method; + Hash *kwargs; + } tmap; + struct { + String *type; + String *us; + } ptype; + SwigType *type; + String *str; + Parm *p; + ParmList *pl; + int ivalue; + Node *node; +} +/* Line 187 of yacc.c. */ +#line 1819 "y.tab.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 1832 "y.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 55 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 3902 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 127 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 148 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 467 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 904 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 381 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 5, 9, 12, 16, 19, 25, 29, + 32, 34, 36, 38, 40, 42, 44, 46, 49, 51, + 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, + 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, + 92, 100, 106, 110, 116, 122, 126, 129, 132, 138, + 141, 147, 150, 155, 157, 159, 167, 175, 181, 182, + 190, 192, 194, 197, 200, 202, 208, 214, 220, 224, + 229, 233, 241, 250, 256, 260, 262, 264, 268, 270, + 275, 283, 290, 292, 294, 302, 312, 321, 332, 338, + 346, 353, 362, 364, 366, 372, 377, 383, 391, 393, + 397, 404, 411, 420, 422, 425, 429, 431, 434, 438, + 445, 451, 461, 464, 466, 468, 470, 471, 478, 484, + 486, 491, 493, 495, 498, 504, 511, 516, 524, 533, + 540, 542, 544, 546, 548, 550, 552, 553, 563, 564, + 573, 575, 578, 583, 584, 591, 595, 597, 599, 601, + 603, 605, 607, 609, 612, 614, 616, 618, 622, 624, + 628, 633, 634, 641, 642, 648, 654, 657, 658, 665, + 667, 669, 670, 674, 676, 678, 680, 682, 684, 686, + 688, 690, 694, 696, 698, 700, 702, 704, 706, 708, + 710, 712, 719, 726, 734, 743, 752, 760, 766, 769, + 772, 775, 776, 784, 785, 792, 793, 802, 804, 806, + 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, + 828, 831, 834, 837, 842, 845, 851, 853, 856, 858, + 860, 862, 864, 866, 868, 870, 873, 875, 879, 881, + 884, 892, 896, 898, 901, 903, 907, 909, 911, 913, + 916, 922, 925, 928, 930, 933, 936, 938, 940, 942, + 944, 947, 951, 953, 956, 960, 965, 971, 976, 978, + 981, 985, 990, 996, 1000, 1005, 1010, 1012, 1015, 1020, + 1025, 1031, 1035, 1040, 1045, 1047, 1050, 1053, 1057, 1059, + 1062, 1064, 1067, 1071, 1076, 1080, 1085, 1088, 1092, 1096, + 1101, 1105, 1109, 1112, 1115, 1117, 1119, 1122, 1124, 1126, + 1128, 1130, 1133, 1135, 1138, 1142, 1144, 1146, 1148, 1151, + 1154, 1156, 1158, 1161, 1163, 1165, 1168, 1170, 1172, 1174, + 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, + 1196, 1197, 1200, 1202, 1204, 1208, 1210, 1212, 1216, 1218, + 1220, 1222, 1224, 1226, 1228, 1234, 1236, 1238, 1242, 1247, + 1253, 1259, 1266, 1269, 1272, 1274, 1276, 1278, 1280, 1282, + 1284, 1286, 1290, 1294, 1298, 1302, 1306, 1310, 1314, 1318, + 1322, 1326, 1330, 1334, 1338, 1342, 1346, 1350, 1356, 1359, + 1362, 1365, 1368, 1371, 1373, 1374, 1378, 1380, 1382, 1386, + 1389, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, + 1412, 1414, 1416, 1421, 1427, 1429, 1433, 1437, 1442, 1447, + 1451, 1454, 1456, 1458, 1462, 1465, 1469, 1471, 1473, 1475, + 1477, 1479, 1482, 1487, 1489, 1493, 1495, 1499, 1503, 1506, + 1509, 1512, 1515, 1518, 1523, 1525, 1529, 1531, 1535, 1539, + 1542, 1545, 1548, 1551, 1553, 1555, 1557, 1559, 1563, 1565, + 1569, 1575, 1577, 1581, 1585, 1591, 1593, 1595 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 128, 0, -1, 129, -1, 107, 215, 40, -1, 107, + 1, -1, 108, 215, 40, -1, 108, 1, -1, 109, + 37, 212, 38, 40, -1, 109, 1, 40, -1, 129, + 130, -1, 274, -1, 131, -1, 168, -1, 176, -1, + 40, -1, 1, -1, 175, -1, 1, 106, -1, 132, + -1, 134, -1, 135, -1, 136, -1, 137, -1, 138, + -1, 141, -1, 142, -1, 145, -1, 146, -1, 147, + -1, 148, -1, 149, -1, 150, -1, 153, -1, 155, + -1, 158, -1, 160, -1, 165, -1, 166, -1, 167, + -1, -1, 61, 271, 264, 43, 133, 193, 44, -1, + 85, 164, 43, 162, 44, -1, 86, 162, 40, -1, + 57, 3, 51, 237, 40, -1, 57, 231, 223, 220, + 40, -1, 57, 1, 40, -1, 84, 4, -1, 84, + 269, -1, 83, 37, 3, 38, 43, -1, 83, 43, + -1, 83, 37, 3, 38, 40, -1, 83, 40, -1, + 269, 43, 215, 44, -1, 269, -1, 139, -1, 88, + 37, 140, 39, 272, 38, 4, -1, 88, 37, 140, + 39, 272, 38, 43, -1, 88, 37, 140, 38, 40, + -1, -1, 144, 271, 269, 54, 143, 129, 55, -1, + 7, -1, 8, -1, 81, 4, -1, 81, 43, -1, + 4, -1, 9, 37, 262, 38, 269, -1, 9, 37, + 262, 38, 4, -1, 9, 37, 262, 38, 43, -1, + 53, 271, 262, -1, 58, 37, 262, 38, -1, 58, + 37, 38, -1, 80, 37, 3, 38, 211, 3, 40, + -1, 80, 37, 3, 38, 211, 231, 223, 40, -1, + 62, 152, 3, 51, 151, -1, 62, 152, 3, -1, + 269, -1, 4, -1, 37, 3, 38, -1, 274, -1, + 154, 223, 262, 40, -1, 154, 37, 272, 38, 223, + 256, 40, -1, 154, 37, 272, 38, 269, 40, -1, + 59, -1, 60, -1, 63, 37, 262, 38, 223, 256, + 156, -1, 63, 37, 262, 39, 273, 38, 223, 256, + 40, -1, 63, 37, 262, 157, 38, 223, 256, 156, + -1, 63, 37, 262, 39, 273, 157, 38, 223, 256, + 40, -1, 63, 37, 262, 38, 156, -1, 63, 37, + 262, 39, 273, 38, 40, -1, 63, 37, 262, 157, + 38, 156, -1, 63, 37, 262, 39, 273, 157, 38, + 40, -1, 270, -1, 40, -1, 100, 37, 212, 38, + 40, -1, 39, 262, 51, 273, -1, 39, 262, 51, + 273, 157, -1, 64, 37, 159, 38, 223, 256, 40, + -1, 212, -1, 11, 39, 215, -1, 82, 37, 161, + 38, 162, 270, -1, 82, 37, 161, 38, 162, 40, + -1, 82, 37, 161, 38, 162, 51, 164, 40, -1, + 272, -1, 164, 163, -1, 39, 164, 163, -1, 274, + -1, 231, 222, -1, 37, 212, 38, -1, 37, 212, + 38, 37, 212, 38, -1, 99, 37, 212, 38, 156, + -1, 87, 37, 263, 38, 267, 90, 216, 91, 40, + -1, 89, 269, -1, 170, -1, 174, -1, 173, -1, + -1, 41, 269, 43, 169, 129, 44, -1, 211, 231, + 223, 172, 171, -1, 40, -1, 39, 223, 172, 171, + -1, 43, -1, 220, -1, 229, 220, -1, 75, 37, + 212, 38, 220, -1, 229, 75, 37, 212, 38, 220, + -1, 211, 65, 3, 40, -1, 211, 65, 239, 43, + 240, 44, 40, -1, 211, 65, 239, 43, 240, 44, + 223, 171, -1, 211, 231, 37, 212, 38, 257, -1, + 177, -1, 181, -1, 182, -1, 189, -1, 190, -1, + 200, -1, -1, 211, 254, 264, 247, 43, 178, 193, + 44, 180, -1, -1, 211, 254, 43, 179, 193, 44, + 223, 171, -1, 40, -1, 223, 171, -1, 211, 254, + 264, 40, -1, -1, 104, 90, 185, 91, 183, 184, + -1, 104, 254, 264, -1, 170, -1, 177, -1, 197, + -1, 182, -1, 181, -1, 199, -1, 186, -1, 187, + 188, -1, 274, -1, 253, -1, 215, -1, 39, 187, + 188, -1, 274, -1, 78, 264, 40, -1, 78, 79, + 264, 40, -1, -1, 79, 264, 43, 191, 129, 44, + -1, -1, 79, 43, 192, 129, 44, -1, 79, 3, + 51, 264, 40, -1, 196, 193, -1, -1, 61, 43, + 194, 193, 44, 193, -1, 142, -1, 274, -1, -1, + 1, 195, 193, -1, 168, -1, 197, -1, 198, -1, + 201, -1, 207, -1, 199, -1, 181, -1, 202, -1, + 211, 264, 40, -1, 189, -1, 182, -1, 200, -1, + 166, -1, 167, -1, 210, -1, 141, -1, 165, -1, + 40, -1, 211, 231, 37, 212, 38, 257, -1, 124, + 266, 37, 212, 38, 208, -1, 73, 124, 266, 37, + 212, 38, 209, -1, 211, 106, 231, 228, 37, 212, + 38, 209, -1, 211, 106, 231, 115, 37, 212, 38, + 209, -1, 211, 106, 231, 37, 212, 38, 209, -1, + 76, 37, 212, 38, 43, -1, 69, 71, -1, 68, + 71, -1, 70, 71, -1, -1, 211, 254, 3, 43, + 203, 206, 40, -1, -1, 211, 254, 43, 204, 206, + 40, -1, -1, 211, 254, 264, 71, 250, 43, 205, + 40, -1, 223, -1, 274, -1, 150, -1, 136, -1, + 148, -1, 153, -1, 155, -1, 158, -1, 146, -1, + 160, -1, 134, -1, 135, -1, 137, -1, 256, 40, + -1, 256, 43, -1, 256, 40, -1, 256, 51, 237, + 40, -1, 256, 43, -1, 211, 231, 71, 243, 40, + -1, 41, -1, 41, 269, -1, 72, -1, 18, -1, + 73, -1, 74, -1, 77, -1, 274, -1, 213, -1, + 215, 214, -1, 274, -1, 39, 215, 214, -1, 274, + -1, 232, 221, -1, 104, 90, 254, 91, 254, 264, + 220, -1, 45, 45, 45, -1, 217, -1, 219, 218, + -1, 274, -1, 39, 219, 218, -1, 274, -1, 215, + -1, 244, -1, 51, 237, -1, 51, 237, 54, 243, + 55, -1, 51, 43, -1, 71, 243, -1, 274, -1, + 223, 220, -1, 226, 220, -1, 220, -1, 223, -1, + 226, -1, 274, -1, 228, 224, -1, 228, 115, 224, + -1, 225, -1, 115, 224, -1, 264, 102, 224, -1, + 228, 264, 102, 224, -1, 228, 264, 102, 115, 224, + -1, 264, 102, 115, 224, -1, 264, -1, 124, 264, + -1, 37, 264, 38, -1, 37, 228, 224, 38, -1, + 37, 264, 102, 224, 38, -1, 224, 54, 55, -1, + 224, 54, 243, 55, -1, 224, 37, 212, 38, -1, + 264, -1, 124, 264, -1, 37, 228, 225, 38, -1, + 37, 115, 225, 38, -1, 37, 264, 102, 225, 38, + -1, 225, 54, 55, -1, 225, 54, 243, 55, -1, + 225, 37, 212, 38, -1, 228, -1, 228, 227, -1, + 228, 115, -1, 228, 115, 227, -1, 227, -1, 115, + 227, -1, 115, -1, 264, 102, -1, 228, 264, 102, + -1, 228, 264, 102, 227, -1, 227, 54, 55, -1, + 227, 54, 243, 55, -1, 54, 55, -1, 54, 243, + 55, -1, 37, 226, 38, -1, 227, 37, 212, 38, + -1, 37, 212, 38, -1, 122, 229, 228, -1, 122, + 228, -1, 122, 229, -1, 122, -1, 230, -1, 230, + 229, -1, 46, -1, 47, -1, 48, -1, 232, -1, + 229, 233, -1, 233, -1, 233, 229, -1, 229, 233, + 229, -1, 234, -1, 29, -1, 27, -1, 31, 261, + -1, 65, 264, -1, 32, -1, 264, -1, 254, 264, + -1, 235, -1, 236, -1, 236, 235, -1, 19, -1, + 21, -1, 22, -1, 25, -1, 26, -1, 23, -1, + 24, -1, 28, -1, 20, -1, 30, -1, 33, -1, + 34, -1, 35, -1, 36, -1, -1, 238, 243, -1, + 3, -1, 274, -1, 240, 39, 241, -1, 241, -1, + 3, -1, 3, 51, 242, -1, 274, -1, 243, -1, + 244, -1, 231, -1, 245, -1, 269, -1, 52, 37, + 231, 221, 38, -1, 246, -1, 10, -1, 37, 243, + 38, -1, 37, 243, 38, 243, -1, 37, 243, 228, + 38, 243, -1, 37, 243, 115, 38, 243, -1, 37, + 243, 228, 115, 38, 243, -1, 115, 243, -1, 122, + 243, -1, 11, -1, 12, -1, 13, -1, 14, -1, + 15, -1, 16, -1, 17, -1, 243, 119, 243, -1, + 243, 118, 243, -1, 243, 122, 243, -1, 243, 121, + 243, -1, 243, 120, 243, -1, 243, 115, 243, -1, + 243, 113, 243, -1, 243, 114, 243, -1, 243, 117, + 243, -1, 243, 116, 243, -1, 243, 112, 243, -1, + 243, 111, 243, -1, 243, 96, 243, -1, 243, 97, + 243, -1, 243, 95, 243, -1, 243, 94, 243, -1, + 243, 98, 243, 71, 243, -1, 118, 243, -1, 119, + 243, -1, 124, 243, -1, 123, 243, -1, 231, 37, + -1, 248, -1, -1, 71, 249, 250, -1, 274, -1, + 251, -1, 250, 39, 251, -1, 255, 264, -1, 255, + 252, 255, 264, -1, 69, -1, 68, -1, 70, -1, + 66, -1, 67, -1, 253, -1, 49, -1, 50, -1, + 73, -1, 274, -1, 229, -1, 75, 37, 212, 38, + -1, 229, 75, 37, 212, 38, -1, 274, -1, 256, + 258, 40, -1, 256, 258, 43, -1, 37, 212, 38, + 40, -1, 37, 212, 38, 43, -1, 51, 237, 40, + -1, 71, 259, -1, 274, -1, 260, -1, 259, 39, + 260, -1, 264, 37, -1, 90, 216, 91, -1, 274, + -1, 3, -1, 269, -1, 262, -1, 274, -1, 266, + 265, -1, 101, 126, 266, 265, -1, 266, -1, 101, + 126, 266, -1, 105, -1, 101, 126, 105, -1, 126, + 266, 265, -1, 126, 266, -1, 126, 105, -1, 103, + 266, -1, 3, 261, -1, 3, 268, -1, 101, 126, + 3, 268, -1, 3, -1, 101, 126, 3, -1, 105, + -1, 101, 126, 105, -1, 126, 3, 268, -1, 126, + 3, -1, 126, 105, -1, 103, 3, -1, 269, 6, + -1, 6, -1, 269, -1, 43, -1, 4, -1, 37, + 272, 38, -1, 274, -1, 262, 51, 273, -1, 262, + 51, 273, 39, 272, -1, 262, -1, 262, 39, 272, + -1, 262, 51, 139, -1, 262, 51, 139, 39, 272, + -1, 269, -1, 245, -1, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 1593, 1593, 1606, 1610, 1613, 1616, 1619, 1622, 1627, + 1632, 1637, 1638, 1639, 1640, 1641, 1647, 1663, 1673, 1674, + 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, + 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1700, + 1700, 1772, 1782, 1793, 1814, 1836, 1847, 1856, 1875, 1881, + 1887, 1892, 1899, 1906, 1910, 1923, 1932, 1947, 1960, 1960, + 2015, 2016, 2023, 2043, 2074, 2078, 2088, 2093, 2111, 2151, + 2157, 2170, 2176, 2202, 2208, 2215, 2216, 2219, 2220, 2228, + 2274, 2320, 2331, 2334, 2361, 2367, 2373, 2379, 2387, 2393, + 2399, 2405, 2413, 2414, 2415, 2418, 2423, 2433, 2469, 2470, + 2500, 2517, 2525, 2538, 2563, 2569, 2573, 2576, 2587, 2592, + 2605, 2617, 2890, 2900, 2907, 2908, 2912, 2912, 2943, 3004, + 3008, 3030, 3036, 3042, 3048, 3054, 3067, 3082, 3092, 3170, + 3221, 3222, 3223, 3224, 3225, 3226, 3232, 3232, 3464, 3464, + 3586, 3587, 3599, 3619, 3619, 3854, 3860, 3863, 3866, 3869, + 3872, 3875, 3880, 3910, 3914, 3917, 3920, 3925, 3929, 3934, + 3944, 3975, 3975, 4004, 4004, 4026, 4053, 4068, 4068, 4078, + 4079, 4080, 4080, 4096, 4097, 4114, 4115, 4116, 4117, 4118, + 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, + 4129, 4138, 4163, 4187, 4228, 4243, 4261, 4280, 4287, 4294, + 4302, 4325, 4325, 4360, 4360, 4391, 4391, 4409, 4410, 4416, + 4419, 4423, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, + 4436, 4441, 4448, 4456, 4464, 4475, 4481, 4482, 4490, 4491, + 4492, 4493, 4494, 4495, 4502, 4513, 4517, 4520, 4524, 4528, + 4538, 4546, 4554, 4567, 4571, 4574, 4578, 4582, 4610, 4618, + 4629, 4643, 4652, 4660, 4670, 4674, 4678, 4685, 4702, 4719, + 4727, 4735, 4744, 4748, 4757, 4768, 4780, 4790, 4803, 4810, + 4818, 4834, 4842, 4853, 4864, 4875, 4894, 4902, 4919, 4927, + 4934, 4945, 4956, 4967, 4986, 4992, 4998, 5005, 5014, 5017, + 5026, 5033, 5040, 5050, 5061, 5072, 5083, 5090, 5097, 5100, + 5117, 5127, 5134, 5140, 5145, 5151, 5155, 5161, 5162, 5163, + 5169, 5175, 5179, 5180, 5184, 5191, 5194, 5195, 5196, 5197, + 5198, 5200, 5203, 5208, 5233, 5236, 5290, 5294, 5298, 5302, + 5306, 5310, 5314, 5318, 5322, 5326, 5330, 5334, 5338, 5342, + 5348, 5348, 5374, 5375, 5378, 5391, 5399, 5407, 5424, 5427, + 5442, 5443, 5462, 5463, 5467, 5472, 5473, 5487, 5494, 5511, + 5518, 5525, 5533, 5537, 5543, 5544, 5545, 5546, 5547, 5548, + 5549, 5552, 5556, 5560, 5564, 5568, 5572, 5576, 5580, 5584, + 5588, 5592, 5596, 5600, 5604, 5618, 5625, 5629, 5635, 5639, + 5643, 5647, 5651, 5667, 5672, 5672, 5673, 5676, 5693, 5702, + 5715, 5728, 5729, 5730, 5734, 5738, 5744, 5747, 5751, 5757, + 5758, 5761, 5766, 5771, 5776, 5783, 5790, 5797, 5805, 5813, + 5821, 5822, 5825, 5826, 5829, 5835, 5841, 5844, 5845, 5848, + 5849, 5852, 5857, 5861, 5864, 5867, 5870, 5875, 5879, 5882, + 5889, 5895, 5904, 5909, 5913, 5916, 5919, 5922, 5927, 5931, + 5934, 5937, 5943, 5948, 5951, 5954, 5958, 5963, 5976, 5980, + 5985, 5991, 5995, 6000, 6004, 6011, 6014, 6019 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "ID", "HBLOCK", "POUND", "STRING", + "INCLUDE", "IMPORT", "INSERT", "CHARCONST", "NUM_INT", "NUM_FLOAT", + "NUM_UNSIGNED", "NUM_LONG", "NUM_ULONG", "NUM_LONGLONG", "NUM_ULONGLONG", + "TYPEDEF", "TYPE_INT", "TYPE_UNSIGNED", "TYPE_SHORT", "TYPE_LONG", + "TYPE_FLOAT", "TYPE_DOUBLE", "TYPE_CHAR", "TYPE_WCHAR", "TYPE_VOID", + "TYPE_SIGNED", "TYPE_BOOL", "TYPE_COMPLEX", "TYPE_TYPEDEF", "TYPE_RAW", + "TYPE_NON_ISO_INT8", "TYPE_NON_ISO_INT16", "TYPE_NON_ISO_INT32", + "TYPE_NON_ISO_INT64", "LPAREN", "RPAREN", "COMMA", "SEMI", "EXTERN", + "INIT", "LBRACE", "RBRACE", "PERIOD", "CONST_QUAL", "VOLATILE", + "REGISTER", "STRUCT", "UNION", "EQUAL", "SIZEOF", "MODULE", "LBRACKET", + "RBRACKET", "ILLEGAL", "CONSTANT", "NAME", "RENAME", "NAMEWARN", + "EXTEND", "PRAGMA", "FEATURE", "VARARGS", "ENUM", "CLASS", "TYPENAME", + "PRIVATE", "PUBLIC", "PROTECTED", "COLON", "STATIC", "VIRTUAL", "FRIEND", + "THROW", "CATCH", "EXPLICIT", "USING", "NAMESPACE", "NATIVE", "INLINE", + "TYPEMAP", "EXCEPT", "ECHO", "APPLY", "CLEAR", "SWIGTEMPLATE", + "FRAGMENT", "WARN", "LESSTHAN", "GREATERTHAN", "MODULO", "DELETE_KW", + "LESSTHANOREQUALTO", "GREATERTHANOREQUALTO", "EQUALTO", "NOTEQUALTO", + "QUESTIONMARK", "TYPES", "PARMS", "NONID", "DSTAR", "DCNOT", "TEMPLATE", + "OPERATOR", "COPERATOR", "PARSETYPE", "PARSEPARM", "PARSEPARMS", "CAST", + "LOR", "LAND", "OR", "XOR", "AND", "RSHIFT", "LSHIFT", "MINUS", "PLUS", + "MODULUS", "SLASH", "STAR", "LNOT", "NOT", "UMINUS", "DCOLON", "$accept", + "program", "interface", "declaration", "swig_directive", + "extend_directive", "@1", "apply_directive", "clear_directive", + "constant_directive", "echo_directive", "except_directive", "stringtype", + "fname", "fragment_directive", "include_directive", "@2", "includetype", + "inline_directive", "insert_directive", "module_directive", + "name_directive", "native_directive", "pragma_directive", "pragma_arg", + "pragma_lang", "rename_directive", "rename_namewarn", + "feature_directive", "stringbracesemi", "featattr", "varargs_directive", + "varargs_parms", "typemap_directive", "typemap_type", "tm_list", + "tm_tail", "typemap_parm", "types_directive", "template_directive", + "warn_directive", "c_declaration", "@3", "c_decl", "c_decl_tail", + "initializer", "c_enum_forward_decl", "c_enum_decl", + "c_constructor_decl", "cpp_declaration", "cpp_class_decl", "@4", "@5", + "cpp_opt_declarators", "cpp_forward_class_decl", "cpp_template_decl", + "@6", "cpp_temp_possible", "template_parms", "templateparameters", + "templateparameter", "templateparameterstail", "cpp_using_decl", + "cpp_namespace_decl", "@7", "@8", "cpp_members", "@9", "@10", + "cpp_member", "cpp_constructor_decl", "cpp_destructor_decl", + "cpp_conversion_operator", "cpp_catch_decl", "cpp_protection_decl", + "cpp_nested", "@11", "@12", "@13", "nested_decl", "cpp_swig_directive", + "cpp_end", "cpp_vend", "anonymous_bitfield", "storage_class", "parms", + "rawparms", "ptail", "parm", "valparms", "rawvalparms", "valptail", + "valparm", "def_args", "parameter_declarator", + "typemap_parameter_declarator", "declarator", "notso_direct_declarator", + "direct_declarator", "abstract_declarator", "direct_abstract_declarator", + "pointer", "type_qualifier", "type_qualifier_raw", "type", "rawtype", + "type_right", "primitive_type", "primitive_type_list", "type_specifier", + "definetype", "@14", "ename", "enumlist", "edecl", "etype", "expr", + "valexpr", "exprnum", "exprcompound", "inherit", "raw_inherit", "@15", + "base_list", "base_specifier", "access_specifier", "templcpptype", + "cpptype", "opt_virtual", "cpp_const", "ctor_end", "ctor_initializer", + "mem_initializer_list", "mem_initializer", "template_decl", "idstring", + "idstringopt", "idcolon", "idcolontail", "idtemplate", "idcolonnt", + "idcolontailnt", "string", "stringbrace", "options", "kwargs", + "stringnum", "empty", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = +{ + 0, 127, 128, 128, 128, 128, 128, 128, 128, 129, + 129, 130, 130, 130, 130, 130, 130, 130, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, + 132, 134, 135, 136, 136, 136, 137, 137, 138, 138, + 138, 138, 139, 140, 140, 141, 141, 141, 143, 142, + 144, 144, 145, 145, 146, 146, 146, 146, 147, 148, + 148, 149, 149, 150, 150, 151, 151, 152, 152, 153, + 153, 153, 154, 154, 155, 155, 155, 155, 155, 155, + 155, 155, 156, 156, 156, 157, 157, 158, 159, 159, + 160, 160, 160, 161, 162, 163, 163, 164, 164, 164, + 165, 166, 167, 168, 168, 168, 169, 168, 170, 171, + 171, 171, 172, 172, 172, 172, 173, 174, 174, 175, + 176, 176, 176, 176, 176, 176, 178, 177, 179, 177, + 180, 180, 181, 183, 182, 182, 184, 184, 184, 184, + 184, 184, 185, 186, 186, 187, 187, 188, 188, 189, + 189, 191, 190, 192, 190, 190, 193, 194, 193, 193, + 193, 195, 193, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 197, 198, 198, 199, 199, 199, 200, 201, 201, + 201, 203, 202, 204, 202, 205, 202, 206, 206, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + 208, 208, 209, 209, 209, 210, 211, 211, 211, 211, + 211, 211, 211, 211, 212, 213, 213, 214, 214, 215, + 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, + 220, 220, 220, 220, 221, 221, 221, 222, 222, 222, + 223, 223, 223, 223, 223, 223, 223, 223, 224, 224, + 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, + 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, + 227, 228, 228, 228, 228, 229, 229, 230, 230, 230, + 231, 232, 232, 232, 232, 233, 233, 233, 233, 233, + 233, 233, 233, 234, 235, 235, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 238, 237, 239, 239, 240, 240, 241, 241, 241, 242, + 243, 243, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, + 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 247, 249, 248, 248, 250, 250, 251, + 251, 252, 252, 252, 253, 253, 254, 254, 254, 255, + 255, 256, 256, 256, 256, 257, 257, 257, 257, 257, + 258, 258, 259, 259, 260, 261, 261, 262, 262, 263, + 263, 264, 264, 264, 264, 264, 264, 265, 265, 265, + 265, 266, 267, 267, 267, 267, 267, 267, 268, 268, + 268, 268, 269, 269, 270, 270, 270, 271, 271, 272, + 272, 272, 272, 272, 272, 273, 273, 274 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 3, 2, 3, 2, 5, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 7, 5, 3, 5, 5, 3, 2, 2, 5, 2, + 5, 2, 4, 1, 1, 7, 7, 5, 0, 7, + 1, 1, 2, 2, 1, 5, 5, 5, 3, 4, + 3, 7, 8, 5, 3, 1, 1, 3, 1, 4, + 7, 6, 1, 1, 7, 9, 8, 10, 5, 7, + 6, 8, 1, 1, 5, 4, 5, 7, 1, 3, + 6, 6, 8, 1, 2, 3, 1, 2, 3, 6, + 5, 9, 2, 1, 1, 1, 0, 6, 5, 1, + 4, 1, 1, 2, 5, 6, 4, 7, 8, 6, + 1, 1, 1, 1, 1, 1, 0, 9, 0, 8, + 1, 2, 4, 0, 6, 3, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 3, 1, 3, + 4, 0, 6, 0, 5, 5, 2, 0, 6, 1, + 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 6, 6, 7, 8, 8, 7, 5, 2, 2, + 2, 0, 7, 0, 6, 0, 8, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 4, 2, 5, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 3, 1, 2, + 7, 3, 1, 2, 1, 3, 1, 1, 1, 2, + 5, 2, 2, 1, 2, 2, 1, 1, 1, 1, + 2, 3, 1, 2, 3, 4, 5, 4, 1, 2, + 3, 4, 5, 3, 4, 4, 1, 2, 4, 4, + 5, 3, 4, 4, 1, 2, 2, 3, 1, 2, + 1, 2, 3, 4, 3, 4, 2, 3, 3, 4, + 3, 3, 2, 2, 1, 1, 2, 1, 1, 1, + 1, 2, 1, 2, 3, 1, 1, 1, 2, 2, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 1, 1, 3, 1, 1, 3, 1, 1, + 1, 1, 1, 1, 5, 1, 1, 3, 4, 5, + 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 5, 2, 2, + 2, 2, 2, 1, 0, 3, 1, 1, 3, 2, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 4, 5, 1, 3, 3, 4, 4, 3, + 2, 1, 1, 3, 2, 3, 1, 1, 1, 1, + 1, 2, 4, 1, 3, 1, 3, 3, 2, 2, + 2, 2, 2, 4, 1, 3, 1, 3, 3, 2, + 2, 2, 2, 1, 1, 1, 1, 3, 1, 3, + 5, 1, 3, 3, 5, 1, 1, 0 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 467, 0, 0, 0, 0, 0, 10, 4, 467, 326, + 334, 327, 328, 331, 332, 329, 330, 317, 333, 316, + 335, 467, 320, 336, 337, 338, 339, 0, 307, 308, + 309, 407, 408, 0, 404, 405, 0, 0, 435, 0, + 0, 305, 467, 312, 315, 323, 324, 406, 0, 321, + 433, 6, 0, 0, 467, 1, 15, 64, 60, 61, + 0, 229, 14, 226, 467, 0, 0, 82, 83, 467, + 467, 0, 0, 228, 230, 231, 0, 232, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 11, 18, 19, 20, 21, 22, 23, + 24, 25, 467, 26, 27, 28, 29, 30, 31, 32, + 0, 33, 34, 35, 36, 37, 38, 12, 113, 115, + 114, 16, 13, 130, 131, 132, 133, 134, 135, 0, + 233, 467, 441, 426, 318, 0, 319, 0, 0, 3, + 311, 306, 467, 340, 0, 0, 290, 304, 0, 256, + 239, 467, 262, 467, 288, 284, 276, 253, 313, 325, + 322, 0, 0, 431, 5, 8, 0, 234, 467, 236, + 17, 0, 453, 227, 0, 0, 458, 0, 467, 0, + 310, 0, 0, 0, 0, 78, 0, 467, 467, 0, + 0, 467, 163, 0, 0, 62, 63, 0, 0, 51, + 49, 46, 47, 467, 0, 467, 0, 467, 467, 0, + 112, 467, 467, 0, 0, 0, 0, 0, 0, 276, + 467, 0, 0, 356, 364, 365, 366, 367, 368, 369, + 370, 0, 0, 0, 0, 0, 0, 0, 0, 247, + 0, 242, 467, 351, 310, 0, 350, 352, 355, 353, + 244, 241, 436, 434, 0, 314, 467, 290, 0, 0, + 284, 321, 251, 249, 0, 296, 0, 350, 252, 467, + 0, 263, 289, 268, 302, 303, 277, 254, 467, 0, + 255, 467, 0, 286, 260, 285, 268, 291, 440, 439, + 438, 0, 0, 235, 238, 427, 0, 428, 452, 116, + 461, 0, 68, 45, 340, 0, 467, 70, 0, 0, + 0, 74, 0, 0, 0, 98, 0, 0, 159, 0, + 467, 161, 0, 0, 103, 0, 0, 0, 107, 257, + 258, 259, 42, 0, 104, 106, 429, 0, 430, 54, + 0, 53, 0, 0, 152, 467, 156, 406, 154, 145, + 0, 427, 0, 0, 0, 0, 0, 0, 0, 268, + 0, 467, 0, 343, 467, 467, 138, 322, 0, 0, + 362, 388, 389, 363, 391, 390, 425, 0, 243, 246, + 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, + 290, 284, 321, 0, 276, 300, 298, 286, 0, 276, + 291, 0, 341, 297, 284, 321, 269, 467, 0, 301, + 0, 281, 0, 0, 294, 0, 261, 287, 292, 0, + 264, 437, 7, 467, 0, 467, 0, 0, 457, 0, + 0, 69, 39, 77, 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 467, 467, 0, 0, 108, 0, + 467, 0, 0, 0, 0, 0, 143, 0, 153, 158, + 58, 0, 0, 0, 0, 79, 0, 126, 467, 0, + 321, 0, 0, 122, 467, 0, 142, 394, 0, 393, + 396, 357, 0, 304, 0, 467, 467, 386, 385, 383, + 384, 0, 382, 381, 377, 378, 376, 380, 379, 372, + 371, 375, 374, 373, 0, 0, 291, 279, 278, 292, + 0, 0, 0, 268, 270, 291, 0, 273, 0, 283, + 282, 299, 295, 0, 265, 293, 267, 237, 66, 67, + 65, 0, 462, 463, 466, 465, 459, 43, 44, 0, + 76, 73, 75, 456, 93, 455, 0, 88, 467, 454, + 92, 0, 465, 0, 0, 99, 467, 197, 165, 164, + 0, 226, 0, 0, 50, 48, 467, 41, 105, 444, + 0, 446, 0, 57, 0, 0, 110, 467, 467, 467, + 467, 0, 0, 346, 0, 345, 348, 467, 467, 0, + 119, 121, 118, 0, 123, 171, 190, 0, 0, 0, + 0, 230, 0, 217, 218, 210, 219, 188, 169, 215, + 211, 209, 212, 213, 214, 216, 189, 185, 186, 173, + 179, 183, 182, 0, 0, 174, 175, 178, 184, 176, + 180, 177, 187, 0, 233, 467, 136, 358, 0, 304, + 303, 0, 0, 0, 245, 0, 467, 280, 250, 271, + 0, 275, 274, 266, 117, 0, 0, 0, 467, 0, + 411, 0, 414, 0, 0, 0, 0, 90, 467, 0, + 162, 227, 467, 0, 101, 0, 100, 0, 0, 0, + 442, 0, 467, 0, 52, 146, 147, 150, 149, 144, + 148, 151, 0, 157, 0, 0, 81, 0, 467, 0, + 467, 340, 467, 129, 0, 467, 467, 0, 167, 199, + 198, 200, 0, 0, 0, 166, 0, 0, 0, 321, + 409, 395, 397, 0, 410, 0, 360, 359, 0, 354, + 387, 240, 272, 464, 460, 40, 0, 467, 0, 84, + 465, 95, 89, 467, 0, 0, 97, 71, 0, 0, + 109, 451, 449, 450, 445, 447, 0, 55, 56, 0, + 59, 80, 347, 349, 344, 127, 0, 0, 0, 0, + 0, 421, 467, 0, 0, 172, 0, 0, 467, 0, + 0, 467, 0, 467, 203, 322, 181, 467, 402, 401, + 403, 467, 399, 0, 361, 0, 0, 467, 96, 0, + 91, 467, 86, 72, 102, 448, 443, 0, 128, 0, + 419, 420, 422, 0, 415, 416, 124, 120, 467, 0, + 467, 0, 139, 467, 0, 0, 0, 0, 201, 467, + 467, 398, 0, 0, 94, 412, 0, 85, 0, 111, + 417, 418, 0, 424, 125, 0, 0, 467, 0, 467, + 467, 467, 225, 467, 0, 207, 208, 0, 400, 140, + 137, 0, 413, 87, 423, 168, 467, 192, 0, 467, + 0, 0, 191, 0, 204, 205, 141, 193, 0, 220, + 221, 196, 467, 467, 202, 0, 222, 224, 340, 195, + 194, 206, 0, 223 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 4, 5, 92, 93, 94, 549, 613, 614, 615, + 616, 99, 339, 340, 617, 618, 589, 102, 103, 619, + 105, 620, 107, 621, 551, 184, 622, 110, 623, 557, + 447, 624, 314, 625, 323, 206, 334, 207, 626, 627, + 628, 629, 435, 118, 602, 482, 119, 120, 121, 122, + 123, 735, 485, 870, 630, 631, 587, 699, 343, 344, + 345, 468, 632, 127, 454, 320, 633, 786, 717, 634, + 635, 636, 637, 638, 639, 640, 863, 839, 895, 864, + 641, 877, 887, 642, 643, 258, 167, 293, 168, 240, + 241, 378, 242, 149, 150, 328, 151, 271, 152, 153, + 154, 218, 40, 41, 243, 180, 43, 44, 45, 46, + 263, 264, 362, 594, 595, 772, 245, 267, 247, 248, + 488, 489, 645, 731, 732, 801, 47, 48, 733, 888, + 713, 780, 821, 822, 132, 300, 337, 49, 163, 50, + 582, 690, 249, 560, 175, 301, 546, 169 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -550 +static const yytype_int16 yypact[] = +{ + 590, 3291, 3341, 121, 117, 2846, -550, -550, -67, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -67, -550, -550, -550, -550, -550, 115, -550, -550, + -550, -550, -550, 191, -550, -550, 75, 161, -550, 156, + 3797, 717, 325, 717, -550, -550, 1803, -550, 191, -550, + 100, -550, 221, 227, 3549, -550, 166, -550, -550, -550, + 288, -550, -550, 318, 298, 3401, 303, -550, -550, 298, + 311, 333, 366, -550, -550, -550, 392, -550, 116, 42, + 420, 106, 431, 429, 384, 3599, 3599, 442, 455, 318, + 465, 600, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, 298, -550, -550, -550, -550, -550, -550, -550, + 983, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, 3648, + -550, 1740, -550, -550, -550, 296, -550, 49, 461, -550, + 717, -550, 2522, 463, 1862, 2350, 87, 241, 191, -550, + -550, 104, 323, 104, 356, 176, 252, -550, -550, -550, + -550, 518, 77, -550, -550, -550, 484, -550, 487, -550, + -550, 377, -550, 126, 377, 377, -550, 532, 108, 1003, + -550, 256, 191, 530, 571, -550, 377, 1522, 3549, 191, + 562, 129, -550, 573, 616, -550, -550, 377, 620, -550, + -550, -550, 623, 3549, 583, 228, 592, 596, 377, 318, + 623, 3549, 3549, 191, 318, 270, 381, 377, 312, 535, + 194, 1014, 85, -550, -550, -550, -550, -550, -550, -550, + -550, 2350, 610, 2350, 2350, 2350, 2350, 2350, 2350, -550, + 557, -550, 613, 621, 113, 1699, -8, -550, -550, 623, + -550, -550, -550, 100, 568, -550, 2626, 742, 615, 626, + 928, 561, -550, 614, 2350, -550, 1825, -550, 1699, 2626, + 191, 387, 356, -550, -550, 552, -550, -550, 3549, 1984, + -550, 3549, 2106, 87, 387, 356, 575, 720, -550, -550, + 100, 635, 3549, -550, -550, -550, 641, 623, -550, -550, + 330, 646, -550, -550, -550, 715, 104, -550, 649, 650, + 657, 652, 53, 667, 669, -550, 673, 684, -550, 191, + -550, -550, 688, 698, -550, 700, 703, 3599, -550, -550, + -550, -550, -550, 3599, -550, -550, -550, 705, -550, -550, + 207, 131, 706, 655, -550, 708, -550, 43, -550, -550, + 20, 317, 933, 933, 648, 722, 105, 738, 381, 681, + 720, 83, 745, -550, 2687, 625, -550, 287, 1197, 3698, + 1163, -550, -550, -550, -550, -550, -550, 1740, -550, -550, + -550, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, + 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, -550, 461, + 443, 341, 689, 284, -550, -550, -550, 443, 394, 696, + 933, 2350, 1699, -550, 970, 13, -550, 3549, 2228, -550, + 752, -550, 1947, 762, -550, 2069, 387, 356, 1027, 381, + 387, -550, -550, 487, 304, -550, 377, 1212, -550, 765, + 766, -550, -550, -550, 509, 651, 1958, 770, 3549, 1003, + 779, -550, 769, 2935, -550, 865, 3599, 497, 787, 782, + 596, 281, 789, 377, 3549, 538, -550, 3549, -550, -550, + -550, 933, 299, 381, 25, -550, 874, -550, 829, 793, + 648, 801, 690, -550, 203, 1621, -550, -550, 798, -550, + -550, 2350, 1404, 2472, 15, 325, 613, 1057, 1057, 1122, + 1122, 2716, 1382, 1479, 1489, 1249, 1163, 828, 828, 692, + 692, -550, -550, -550, 191, 696, -550, -550, -550, 443, + 407, 2191, 493, 696, -550, 381, 808, -550, 2313, -550, + -550, -550, -550, 381, 387, 356, 387, -550, -550, -550, + 623, 3024, -550, 809, -550, 131, 811, -550, -550, 1621, + -550, -550, 623, -550, -550, -550, 814, -550, 674, 623, + -550, 802, 78, 265, 651, -550, 674, -550, -550, -550, + 3113, 318, 3747, 351, -550, -550, 3549, -550, -550, 213, + 736, -550, 774, -550, 818, 821, -550, 730, 708, -550, + 674, 230, 381, 816, 94, -550, -550, 823, 3549, 1003, + -550, -550, -550, 831, -550, -550, -550, 830, 813, 815, + 817, 748, 518, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, 836, 1621, -550, -550, -550, -550, -550, + -550, -550, -550, 3450, 845, 822, -550, 1699, 2350, 2472, + 2740, 2350, 852, 853, -550, 2350, 104, -550, -550, -550, + 498, -550, -550, 387, -550, 377, 377, 855, 3549, 871, + 835, 538, -550, 1212, 879, 377, 875, -550, 674, 877, + -550, 623, -1, 1003, -550, 3599, -550, 882, 912, 84, + -550, 111, 1740, 196, -550, -550, -550, -550, -550, -550, + -550, -550, 3500, -550, 3202, 884, -550, 2350, 829, 926, + 3549, -550, 851, -550, 887, 625, 3549, 1621, -550, -550, + -550, -550, 518, 889, 1003, -550, 3698, 41, 212, 890, + -550, 888, -550, 369, -550, 1621, 1699, 1699, 2350, -550, + 1837, -550, -550, -550, -550, -550, 894, 3549, 916, -550, + 623, 917, -550, 674, 948, 538, -550, -550, 918, 922, + -550, -550, 213, -550, 213, -550, 873, -550, -550, 1032, + -550, -550, -550, 1699, -550, -550, 690, 929, 931, 191, + 505, -550, 104, 690, 930, -550, 1621, 932, 3549, 690, + -15, 2687, 2350, 19, -550, 198, -550, 822, -550, -550, + -550, 822, -550, 934, 1699, 936, 949, 3549, -550, 950, + -550, 674, -550, -550, -550, -550, -550, 951, -550, 514, + -550, 953, -550, 935, -550, -550, -550, -550, 104, 956, + 3549, 959, -550, 3549, 965, 967, 972, 1618, -550, 1003, + 822, -550, 191, 978, -550, -550, 973, -550, 974, -550, + -550, -550, 191, -550, -550, 1621, 975, 674, 985, 3549, + 3549, 823, -550, 1003, 981, -550, -550, 372, -550, -550, + -550, 690, -550, -550, -550, -550, 674, -550, 543, 674, + 987, 990, -550, 996, -550, -550, -550, -550, 447, -550, + -550, -550, 674, 674, -550, 997, -550, -550, -550, -550, + -550, -550, 999, -550 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -550, -550, -314, -550, -550, -550, -550, 10, 12, 23, + 24, -550, 605, -550, 28, 30, -550, -550, -550, 35, + -550, 36, -550, 38, -550, -550, 50, -550, 54, -446, + -549, 55, -550, 63, -550, -311, 545, -84, 66, 70, + 72, 76, -550, 425, -377, 332, -550, -550, -550, -550, + 467, -550, -550, -550, -2, 5, -550, -550, -550, -550, + 588, 468, 81, -550, -550, -550, -536, -550, -550, -550, + 472, -550, 473, 90, -550, -550, -550, -550, -550, 199, + -550, -550, -375, -550, -3, 186, -550, 628, 222, 373, + -550, 570, 691, -97, 572, -550, -44, -117, -181, -112, + -121, -22, -34, -550, 576, 45, -36, -550, 1028, -550, + -286, -550, -550, -550, 365, -550, 966, -119, -410, -550, + -550, -550, -550, 236, 280, -550, -201, -33, 277, -493, + 219, -550, -550, 234, 1061, -114, -550, 739, -142, -113, + -550, -202, 726, 516, 183, -165, -409, 0 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -468 +static const yytype_int16 yytable[] = +{ + 6, 204, 129, 124, 140, 130, 453, 141, 133, 158, + 125, 347, 246, 667, 676, 95, 459, 96, 439, 586, + 155, 133, 833, 131, 253, 272, 298, 544, 97, 98, + 259, -248, 324, 100, 285, 101, 544, 563, 284, 757, + 104, 106, 157, 108, 8, 191, 42, 42, 288, 290, + 355, 524, 8, 651, 277, 109, 280, 296, 213, 111, + 112, 302, 838, 524, 176, 671, 217, 308, 113, 176, + 185, 114, 312, 679, 470, 115, 403, 116, 791, 408, + 8, 117, -155, -248, 298, 192, 126, 762, 8, 131, + 8, 445, 446, 330, 336, 128, 222, 705, 725, 42, + 834, 284, 176, 357, 712, 254, 255, 147, 8, 131, + 195, 398, 792, 275, 764, 525, 8, 55, 677, 8, + 260, 541, 53, 477, 269, 274, -342, 592, 366, -428, + 652, 250, 298, 708, -155, 306, 272, 298, 709, 285, + 570, 144, 36, 36, 259, 573, 38, 38, 431, 196, + 142, 157, -467, 157, 252, 143, 216, 259, 54, 304, + 135, 329, 427, 147, 143, 148, 426, 144, 294, 299, + 430, 403, 408, 131, 464, 145, 244, 365, 133, 8, + 319, 785, 289, 155, 145, 755, 36, 42, 36, 763, + 38, 133, 38, 353, 8, 189, 139, 361, 131, 803, + 767, 137, 808, 161, -467, 331, 36, 335, 338, 440, + 38, 270, 348, 269, 36, 793, 765, 36, 38, 131, + 363, 38, 155, 39, 52, 749, 162, 147, 146, 520, + 144, 8, 42, 42, 401, 147, 298, 148, 486, 768, + 166, 426, 379, 430, 157, 462, 463, 414, 42, 460, + 829, 138, 182, 419, 143, 794, 42, 42, 246, 295, + 809, 164, 172, 544, 751, 142, 347, 165, 483, 840, + 706, 542, 170, 351, 145, 704, 172, 36, 603, 272, + 285, 38, 144, 353, 579, 214, 427, 28, 29, 30, + 520, 283, 36, 285, 307, 36, 38, 522, 584, 38, + 270, 42, 8, 674, 675, 172, 157, 535, 538, 812, + 172, 534, 536, 36, 42, 8, 688, 38, 848, 875, + 6, 278, 517, 42, 172, 171, 42, 486, 8, 36, + -467, 484, 561, 38, 473, 174, 305, 42, 279, 689, + 181, 251, 353, 146, 8, 469, 494, 539, 183, 356, + 147, 133, 148, 239, 287, 553, 522, 172, 487, 534, + 278, 133, 142, 147, 878, 157, 514, 490, 712, 436, + 186, 36, 8, 315, 316, 38, 143, 279, 256, 144, + 295, 437, 580, 172, 8, 352, 581, 604, 201, 326, + 172, 684, 147, 281, 555, 144, 145, 342, 535, 818, + 36, 558, 685, 187, 38, 566, 827, 131, 660, 42, + 282, 797, 832, 36, 216, 885, 663, 38, 356, -467, + -467, 147, 244, 148, 417, 778, 36, 358, 590, 188, + 38, 278, 518, 294, 346, 6, 270, 798, 799, 800, + 146, 418, 36, -467, 278, 657, 38, 147, 279, 148, + 129, 124, 572, 130, 6, 130, 407, 194, 125, 650, + 335, 279, 42, 95, 420, 96, 198, 423, 197, 199, + 36, 274, 200, 155, 38, 660, 97, 98, 596, 208, + 256, 100, 36, 101, 157, 644, 38, 896, 104, 106, + 897, 108, 209, 42, 886, 157, 379, 144, 898, 723, + 743, 744, 211, 109, 891, 270, 262, 111, 112, 42, + 31, 32, 42, 550, 433, 172, 113, 899, 900, 114, + 678, 8, 291, 115, 670, 116, 292, 34, 35, 117, + 417, 659, 670, 310, 126, 417, 742, 574, 129, 124, + 575, 130, 553, 128, 172, 824, 125, 418, 825, 644, + 479, 95, 418, 96, 850, 715, 670, 851, 672, 741, + 815, 561, 816, 670, 97, 98, 672, 129, 124, 100, + 130, 101, 303, 246, 311, 125, 104, 106, 554, 108, + 95, 555, 96, 889, 702, 697, 890, 130, 469, 6, + 672, 109, 698, 97, 98, 111, 112, 672, 100, 239, + 101, 759, 318, 526, 113, 104, 106, 114, 108, 787, + 728, 115, 902, 116, 140, 650, 321, 117, 483, 322, + 109, 42, 126, 325, 111, 112, 327, 274, 419, 298, + 753, 128, 332, 113, 644, 333, 114, 360, 556, 758, + 115, 179, 116, 42, 670, 734, 117, 369, 376, 31, + 32, 126, 377, 405, 8, 553, 157, 172, 380, 399, + 128, 205, 205, 410, 406, 776, 34, 35, 411, 222, + 565, 28, 29, 30, 147, 432, 143, 428, 672, 434, + 789, 484, 133, 365, 438, 826, 585, 441, 305, 346, + 212, 554, 250, 442, 555, 443, 145, 1, 2, 3, + 481, 129, 124, 444, 130, 221, 448, 449, 596, 125, + 811, 450, 781, 42, 95, 157, 96, 644, 8, 670, + 28, 29, 30, 8, 451, 365, 455, 97, 98, 599, + 600, 854, 100, 601, 101, 644, 456, 244, 457, 104, + 106, 458, 108, 461, 465, 8, 466, 467, 61, 669, + 471, 556, 36, 672, 109, 42, 38, 356, 111, 112, + 472, 42, 687, 28, 29, 30, 216, 113, 835, 353, + 114, 571, 136, 147, 115, 148, 116, 670, 475, 142, + 117, 156, 157, 476, 714, 126, 644, 160, 478, 173, + 529, 516, 42, 133, 128, 865, 144, 734, 519, 871, + 531, 734, 73, 74, 75, 547, 548, 77, 564, 568, + 202, 672, 395, 396, 397, 210, 36, 190, 193, 865, + 38, 36, 567, 670, 576, 38, 577, 670, 157, 583, + 352, 597, 593, 42, 91, 429, 42, 147, 598, 866, + 734, 646, 670, 36, 270, 670, 661, 38, 665, 219, + 666, 668, 42, 673, 746, 644, 693, 672, 670, 670, + 710, 672, 691, 866, 692, 694, 148, 707, 716, 28, + 29, 30, 722, 718, 711, 42, 672, 8, 42, 672, + 724, 261, 8, 61, 719, 273, 720, 276, 721, -170, + 738, 739, 672, 672, 286, 730, 777, 297, 669, 745, + 297, 297, 784, 205, 42, 42, 571, 297, 747, 205, + 748, 356, 297, 754, 239, 761, 305, 756, 219, 752, + 760, 309, 779, 297, 771, 782, 788, 797, 317, 8, + 796, 8, 805, 806, 297, 341, 8, 73, 74, 75, + 350, 297, 77, 297, 156, 495, 393, 394, 395, 396, + 397, 8, 349, 807, 354, 273, 675, 359, 813, 136, + 219, 367, 814, 305, 817, 142, 775, 819, 828, 830, + 305, 820, 853, 8, 831, 36, 844, 836, 843, 38, + 36, 8, 144, 156, 38, 305, 8, 845, 810, 533, + 847, 849, 852, 846, 216, 402, 404, 857, 270, 409, + 855, 147, 859, 148, 860, 578, 8, 269, 415, 416, + 861, 872, 695, 876, 873, 305, 856, 8, 869, 858, + 215, 884, 273, 879, 144, 892, 273, 36, 893, 36, + 8, 38, 205, 38, 36, 8, 894, 901, 38, 903, + 305, 216, 543, 407, 354, 880, 881, 783, 147, 36, + 148, 364, 148, 38, 696, 588, 703, 148, 452, 700, + 701, 537, 883, 216, 269, 766, 654, 653, 496, 791, + 147, 36, 148, 774, 159, 38, 867, 841, 842, 36, + 882, 144, 134, 38, 36, 407, 874, 0, 38, 686, + 0, 404, 404, 216, 270, 474, 0, 273, 216, 273, + 147, 0, 148, 480, 36, 147, 0, 148, 38, 0, + 266, 268, 0, 0, 0, 36, 0, 0, 216, 38, + 0, 0, 0, 0, 0, 147, 0, 148, 36, 216, + 0, 0, 38, 36, 0, 0, 147, 38, 148, 0, + 515, 0, 533, 0, 0, 0, 0, 216, 683, 404, + 0, 270, 0, 523, 147, 0, 148, 0, 0, 0, + 540, 0, 297, 545, 0, 0, 0, 273, 273, 0, + 552, 559, 562, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 0, 0, 219, 0, 0, 0, 219, 297, + 0, 559, 0, 0, 0, 0, 0, 368, 591, 370, + 371, 372, 373, 374, 375, 0, 0, 0, 0, 0, + 404, 219, 273, 0, 0, 273, 381, 382, 172, 727, + 0, 0, 0, 224, 225, 226, 227, 228, 229, 230, + 412, 0, 0, 0, 156, 491, 0, 0, 391, 392, + 393, 394, 395, 396, 397, 422, 0, 0, 425, 0, + 0, 0, 0, 656, 0, 0, 0, 381, 382, 383, + 384, 205, 0, 0, 273, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 0, 0, 769, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 0, 0, + 559, 381, 382, 383, 384, 385, 0, 681, 0, 559, + 0, 0, 790, 219, 0, 0, 0, 0, 386, 387, + 388, 389, 492, 391, 392, 393, 394, 395, 396, 493, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 273, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 381, 382, 383, 384, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 0, 0, 0, 521, 0, 0, + 0, 0, 729, 0, 528, 0, 0, 0, 0, 0, + 0, 297, 297, 0, 0, 0, 0, 559, 0, 750, + 0, 297, 0, 0, 0, 0, 0, 8, 0, 0, + 172, 0, 0, 219, 223, 224, 225, 226, 227, 228, + 229, 230, 219, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 231, 648, 0, 0, 0, 0, 0, 219, 0, + 28, 29, 30, 31, 32, 0, 232, 647, 506, 513, + 0, 0, 0, 219, 0, 0, 219, 795, 0, 33, + 34, 35, 802, 0, 0, 0, 381, 382, 383, 384, + 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 36, 0, 0, 219, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 823, 233, + 0, 0, 234, 235, 0, 8, 236, 237, 238, 0, + 480, 0, 0, 313, 0, 0, 0, 0, 0, 0, + 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 32, 381, 382, 383, 384, 0, 219, 0, + 0, 868, 219, 381, 382, 383, 384, 33, 34, 35, + 0, 823, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 219, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 736, 373, 0, 737, 0, 0, + 0, 740, 605, 36, -467, 57, 37, 38, 58, 59, + 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, 862, 0, + 0, 606, 63, 0, 0, -467, 0, -467, -467, -467, + -467, -467, 0, 773, 0, 0, 0, 0, 65, 66, + 67, 68, 607, 70, 71, 72, -467, -467, -467, 608, + 609, 610, 0, 73, 611, 75, 0, 76, 77, 78, + 0, 0, 0, 82, 804, 84, 85, 86, 87, 88, + 89, 0, 381, 382, 383, 384, 385, 0, 0, 0, + 90, 0, -467, 0, 0, 91, -467, -467, 0, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 0, 0, 8, 0, 612, 172, 0, 0, 0, + 223, 224, 225, 226, 227, 228, 229, 230, 837, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 231, 0, 0, + 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, + 32, 0, 232, 381, 382, 383, 384, 385, 0, 0, + 0, 0, 0, 0, 0, 33, 34, 35, 0, 0, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 9, 10, 11, 12, 13, 14, 15, 16, + 0, 18, 0, 20, 0, 0, 23, 24, 25, 26, + 0, 36, 0, 0, 37, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 0, 0, 234, 235, + 0, 0, 236, 237, 238, 8, 0, 0, 172, 0, + 0, 0, 223, 224, 225, 226, 227, 228, 229, 230, + 413, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 231, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, + 30, 31, 32, 0, 232, 0, 0, 265, 0, 381, + 382, 383, 384, 385, 0, 0, 0, 33, 34, 35, + 0, 381, 382, 383, 384, 0, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 295, 0, 36, 172, 0, 0, 38, 0, 224, + 225, 226, 227, 228, 229, 230, 0, 233, 0, 0, + 234, 235, 0, 0, 236, 237, 238, 8, 0, 0, + 172, 0, 0, 0, 223, 224, 225, 226, 227, 228, + 229, 230, 530, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 231, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 29, 30, 31, 32, 0, 232, 0, 0, 421, + 0, 381, 382, 383, 384, 385, 0, 0, 0, 33, + 34, 35, 0, 0, 0, 0, 0, 0, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, + 0, 0, 234, 235, 0, 0, 236, 237, 238, 8, + 0, 0, 172, 0, 0, 0, 223, 224, 225, 226, + 227, 228, 229, 230, 532, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 231, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 29, 30, 31, 32, 0, 232, 0, + 0, 424, 0, 381, 382, 383, 384, 385, 0, 0, + 0, 33, 34, 35, 0, 0, 0, 0, 0, 0, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, + 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 233, 0, 0, 234, 235, 0, 0, 236, 237, + 238, 8, 0, 0, 172, 0, 0, 0, 223, 224, + 225, 226, 227, 228, 229, 230, 658, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 231, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 0, + 232, 0, 0, 527, 0, 381, 382, 383, 384, 385, + 0, 0, 0, 33, 34, 35, 0, 0, 0, 0, + 0, 0, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 233, 0, 0, 234, 235, 0, 0, + 236, 237, 238, 8, 0, 0, 172, 0, 0, 0, + 223, 224, 225, 226, 227, 228, 229, 230, 662, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 231, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, + 32, 0, 232, 0, 0, 0, 0, 381, 382, 383, + 384, 385, 0, 0, 0, 33, 34, 35, 0, 0, + 0, 0, 0, 0, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 0, 0, 234, 235, + 0, 0, 236, 237, 238, 8, 0, 0, 172, 0, + 0, 0, 223, 224, 225, 226, 227, 228, 229, 230, + 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 231, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, + 30, 31, 32, 0, 232, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, + 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 256, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 32, 36, 0, 0, 144, 38, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, + 234, 235, 0, 0, 649, 237, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 0, 37, 38, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, + 0, 0, 0, 0, 147, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 256, 0, 0, 0, 0, 0, 0, + 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 33, 34, 35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 0, 36, 0, 0, + 37, 38, 27, 28, 29, 30, 31, 32, 0, 0, + 0, 400, 0, 8, 0, 0, 0, 0, 147, 0, + 0, 0, 33, 34, 35, 0, 0, 0, 0, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 655, 36, 31, + 32, 37, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 352, 0, 0, 33, 34, 35, 0, 147, + 381, 382, 383, 384, 385, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 36, 0, 0, 0, 38, -2, 56, 0, -467, + 57, 0, 0, 58, 59, 60, 0, 0, 0, 0, + 0, 0, 147, 0, 61, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, 0, 0, 0, 62, 63, 0, 0, + 0, 0, -467, -467, -467, -467, -467, 0, 0, 64, + 0, 0, 0, 65, 66, 67, 68, 69, 70, 71, + 72, -467, -467, -467, 0, 0, 0, 0, 73, 74, + 75, 0, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 56, 0, -467, 57, + 0, 0, 58, 59, 60, 90, 0, -467, 0, 0, + 91, -467, 0, 61, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, 0, 0, 0, 62, 63, 0, 0, 569, + 0, -467, -467, -467, -467, -467, 0, 0, 64, 0, + 0, 0, 65, 66, 67, 68, 69, 70, 71, 72, + -467, -467, -467, 0, 0, 0, 0, 73, 74, 75, + 0, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 56, 0, -467, 57, 0, + 0, 58, 59, 60, 90, 0, -467, 0, 0, 91, + -467, 0, 61, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, 0, 0, 0, 62, 63, 0, 0, 664, 0, + -467, -467, -467, -467, -467, 0, 0, 64, 0, 0, + 0, 65, 66, 67, 68, 69, 70, 71, 72, -467, + -467, -467, 0, 0, 0, 0, 73, 74, 75, 0, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 56, 0, -467, 57, 0, 0, + 58, 59, 60, 90, 0, -467, 0, 0, 91, -467, + 0, 61, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + 0, 0, 0, 62, 63, 0, 0, 680, 0, -467, + -467, -467, -467, -467, 0, 0, 64, 0, 0, 0, + 65, 66, 67, 68, 69, 70, 71, 72, -467, -467, + -467, 0, 0, 0, 0, 73, 74, 75, 0, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 56, 0, -467, 57, 0, 0, 58, + 59, 60, 90, 0, -467, 0, 0, 91, -467, 0, + 61, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, 0, + 0, 0, 62, 63, 0, 0, 0, 0, -467, -467, + -467, -467, -467, 0, 0, 64, 0, 770, 0, 65, + 66, 67, 68, 69, 70, 71, 72, -467, -467, -467, + 0, 0, 0, 0, 73, 74, 75, 0, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 7, 0, 8, 0, 0, 0, 0, 0, + 0, 90, 0, -467, 0, 0, 91, -467, 0, 0, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, + 31, 32, 51, 0, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 34, 35, 0, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, + 31, 32, 36, 0, 0, 37, 38, 0, 0, 0, + 0, 0, 177, 0, 178, 0, 33, 34, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 0, 0, 36, 0, 0, 37, 38, 28, 29, 30, + 31, 32, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 34, 35, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, + 32, 0, 36, 8, 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 34, 35, 0, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, + 32, 36, 8, 0, 0, 38, 726, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 34, 35, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, + 0, 36, 8, 0, 0, 38, 726, 0, 0, 0, + 0, 0, 0, 0, 33, 34, 35, 0, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 203, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 29, 30, 31, 32, + 36, 8, 0, 37, 38, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 34, 35, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 0, + 36, 8, 0, 0, 38, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 34, 35, 0, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 36, + 682, 0, 0, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 33, 34, 35, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 29, 30, 31, 32, 0, 36, + 8, 0, 0, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 34, 35, 0, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 36, 0, + 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 34, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 0, 0, 38 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 85, 5, 5, 40, 5, 320, 41, 8, 43, + 5, 212, 131, 549, 563, 5, 327, 5, 304, 465, + 42, 21, 37, 90, 137, 146, 6, 437, 5, 5, + 142, 39, 197, 5, 155, 5, 446, 446, 155, 40, + 5, 5, 42, 5, 3, 3, 1, 2, 161, 162, + 215, 38, 3, 38, 151, 5, 153, 171, 91, 5, + 5, 175, 43, 38, 64, 558, 110, 181, 5, 69, + 70, 5, 186, 566, 54, 5, 257, 5, 37, 260, + 3, 5, 39, 91, 6, 43, 5, 3, 3, 90, + 3, 38, 39, 205, 208, 5, 129, 590, 634, 54, + 115, 218, 102, 217, 597, 138, 140, 122, 3, 90, + 4, 253, 71, 147, 3, 102, 3, 0, 564, 3, + 142, 435, 1, 40, 37, 147, 43, 102, 43, 51, + 115, 131, 6, 39, 91, 179, 257, 6, 44, 260, + 454, 54, 101, 101, 256, 456, 105, 105, 290, 43, + 37, 151, 39, 153, 105, 51, 115, 269, 37, 51, + 45, 205, 283, 122, 51, 124, 283, 54, 168, 43, + 287, 352, 353, 90, 43, 71, 131, 221, 178, 3, + 51, 717, 105, 205, 71, 678, 101, 142, 101, 105, + 105, 191, 105, 215, 3, 79, 40, 3, 90, 735, + 4, 126, 751, 103, 91, 205, 101, 207, 208, 306, + 105, 124, 212, 37, 101, 3, 105, 101, 105, 90, + 220, 105, 244, 1, 2, 671, 126, 122, 115, 410, + 54, 3, 187, 188, 256, 122, 6, 124, 40, 43, + 54, 358, 242, 360, 244, 38, 39, 269, 203, 333, + 786, 90, 69, 275, 51, 43, 211, 212, 377, 3, + 753, 40, 6, 673, 673, 37, 467, 40, 365, 71, + 40, 436, 106, 3, 71, 589, 6, 101, 75, 400, + 401, 105, 54, 305, 3, 102, 407, 46, 47, 48, + 471, 115, 101, 414, 38, 101, 105, 414, 463, 105, + 124, 256, 3, 38, 39, 6, 306, 428, 4, 755, + 6, 428, 429, 101, 269, 3, 103, 105, 811, 855, + 320, 37, 38, 278, 6, 37, 281, 40, 3, 101, + 43, 365, 446, 105, 356, 37, 37, 292, 54, 126, + 37, 45, 364, 115, 3, 345, 368, 43, 37, 37, + 122, 351, 124, 131, 102, 4, 473, 6, 71, 476, + 37, 361, 37, 122, 857, 365, 399, 367, 861, 39, + 37, 101, 3, 187, 188, 105, 51, 54, 37, 54, + 3, 51, 101, 6, 3, 115, 105, 484, 4, 203, + 6, 40, 122, 37, 43, 54, 71, 211, 519, 776, + 101, 445, 51, 37, 105, 449, 783, 90, 525, 364, + 54, 39, 789, 101, 115, 43, 533, 105, 37, 102, + 103, 122, 377, 124, 37, 711, 101, 115, 472, 37, + 105, 37, 38, 433, 212, 435, 124, 68, 69, 70, + 115, 54, 101, 126, 37, 38, 105, 122, 54, 124, + 453, 453, 455, 453, 454, 455, 115, 37, 453, 493, + 460, 54, 417, 453, 278, 453, 37, 281, 37, 40, + 101, 493, 43, 495, 105, 592, 453, 453, 478, 37, + 37, 453, 101, 453, 484, 485, 105, 40, 453, 453, + 43, 453, 37, 448, 871, 495, 496, 54, 51, 612, + 665, 666, 37, 453, 879, 124, 43, 453, 453, 464, + 49, 50, 467, 4, 292, 6, 453, 892, 893, 453, + 564, 3, 38, 453, 558, 453, 39, 66, 67, 453, + 37, 38, 566, 3, 453, 37, 38, 40, 541, 541, + 43, 541, 4, 453, 6, 40, 541, 54, 43, 549, + 364, 541, 54, 541, 40, 599, 590, 43, 558, 656, + 762, 675, 764, 597, 541, 541, 566, 570, 570, 541, + 570, 541, 40, 692, 3, 570, 541, 541, 40, 541, + 570, 43, 570, 40, 587, 587, 43, 587, 588, 589, + 590, 541, 587, 570, 570, 541, 541, 597, 570, 377, + 570, 685, 40, 417, 541, 570, 570, 541, 570, 722, + 643, 541, 898, 541, 650, 649, 43, 541, 715, 3, + 570, 576, 541, 3, 570, 570, 43, 649, 650, 6, + 674, 541, 40, 570, 634, 39, 570, 102, 100, 683, + 570, 65, 570, 598, 678, 645, 570, 37, 91, 49, + 50, 570, 39, 38, 3, 4, 656, 6, 37, 91, + 570, 85, 86, 102, 38, 709, 66, 67, 54, 702, + 448, 46, 47, 48, 122, 40, 51, 102, 678, 38, + 724, 715, 682, 727, 38, 782, 464, 38, 37, 467, + 90, 40, 692, 43, 43, 38, 71, 107, 108, 109, + 75, 704, 704, 51, 704, 129, 39, 38, 708, 704, + 754, 38, 712, 668, 704, 715, 704, 717, 3, 753, + 46, 47, 48, 3, 40, 769, 38, 704, 704, 39, + 40, 828, 704, 43, 704, 735, 38, 692, 38, 704, + 704, 38, 704, 38, 38, 3, 91, 39, 18, 75, + 102, 100, 101, 753, 704, 710, 105, 37, 704, 704, + 38, 716, 576, 46, 47, 48, 115, 704, 790, 791, + 704, 41, 33, 122, 704, 124, 704, 811, 40, 37, + 704, 42, 782, 102, 598, 704, 786, 48, 43, 63, + 38, 102, 747, 793, 704, 839, 54, 797, 102, 843, + 38, 801, 72, 73, 74, 40, 40, 77, 38, 40, + 84, 811, 120, 121, 122, 89, 101, 78, 79, 863, + 105, 101, 43, 857, 37, 105, 44, 861, 828, 40, + 115, 38, 3, 788, 104, 115, 791, 122, 37, 839, + 840, 43, 876, 101, 124, 879, 38, 105, 39, 110, + 39, 37, 807, 51, 668, 855, 38, 857, 892, 893, + 37, 861, 126, 863, 90, 44, 124, 51, 37, 46, + 47, 48, 124, 43, 51, 830, 876, 3, 833, 879, + 44, 142, 3, 18, 71, 146, 71, 148, 71, 44, + 38, 38, 892, 893, 155, 73, 710, 171, 75, 44, + 174, 175, 716, 327, 859, 860, 41, 181, 37, 333, + 75, 37, 186, 38, 692, 3, 37, 40, 179, 40, + 38, 182, 71, 197, 40, 38, 37, 39, 189, 3, + 40, 3, 38, 747, 208, 209, 3, 72, 73, 74, + 214, 215, 77, 217, 205, 369, 118, 119, 120, 121, + 122, 3, 213, 37, 215, 216, 39, 218, 40, 220, + 221, 222, 40, 37, 91, 37, 40, 38, 38, 37, + 37, 40, 37, 3, 788, 101, 40, 791, 44, 105, + 101, 3, 54, 244, 105, 37, 3, 38, 40, 115, + 40, 40, 39, 807, 115, 256, 257, 38, 124, 260, + 44, 122, 37, 124, 37, 460, 3, 37, 269, 270, + 38, 38, 587, 38, 40, 37, 830, 3, 40, 833, + 37, 40, 283, 38, 54, 38, 287, 101, 38, 101, + 3, 105, 456, 105, 101, 3, 40, 40, 105, 40, + 37, 115, 437, 115, 305, 859, 860, 715, 122, 101, + 124, 37, 124, 105, 587, 467, 588, 124, 319, 587, + 587, 433, 863, 115, 37, 692, 496, 495, 377, 37, + 122, 101, 124, 708, 46, 105, 840, 797, 801, 101, + 861, 54, 21, 105, 101, 115, 852, -1, 105, 573, + -1, 352, 353, 115, 124, 356, -1, 358, 115, 360, + 122, -1, 124, 364, 101, 122, -1, 124, 105, -1, + 144, 145, -1, -1, -1, 101, -1, -1, 115, 105, + -1, -1, -1, -1, -1, 122, -1, 124, 101, 115, + -1, -1, 105, 101, -1, -1, 122, 105, 124, -1, + 401, -1, 115, -1, -1, -1, -1, 115, 572, 410, + -1, 124, -1, 414, 122, -1, 124, -1, -1, -1, + 434, -1, 436, 437, -1, -1, -1, 428, 429, -1, + 444, 445, 446, 116, 117, 118, 119, 120, 121, 122, + -1, -1, -1, -1, 445, -1, -1, -1, 449, 463, + -1, 465, -1, -1, -1, -1, -1, 231, 472, 233, + 234, 235, 236, 237, 238, -1, -1, -1, -1, -1, + 471, 472, 473, -1, -1, 476, 94, 95, 6, 643, + -1, -1, -1, 11, 12, 13, 14, 15, 16, 17, + 264, -1, -1, -1, 495, 38, -1, -1, 116, 117, + 118, 119, 120, 121, 122, 279, -1, -1, 282, -1, + -1, -1, -1, 514, -1, -1, -1, 94, 95, 96, + 97, 685, -1, -1, 525, -1, -1, -1, -1, -1, + -1, -1, 533, -1, -1, -1, -1, -1, 702, 116, + 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, + 564, 94, 95, 96, 97, 98, -1, 571, -1, 573, + -1, -1, 726, 564, -1, -1, -1, -1, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 592, -1, -1, -1, -1, -1, -1, 599, -1, + -1, -1, -1, 94, 95, 96, 97, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 115, 116, 117, 118, 119, 120, + 121, 122, -1, -1, -1, -1, -1, 411, -1, -1, + -1, -1, 643, -1, 418, -1, -1, -1, -1, -1, + -1, 665, 666, -1, -1, -1, -1, 671, -1, 673, + -1, 675, -1, -1, -1, -1, -1, 3, -1, -1, + 6, -1, -1, 674, 10, 11, 12, 13, 14, 15, + 16, 17, 683, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, -1, -1, -1, -1, -1, 709, -1, + 46, 47, 48, 49, 50, -1, 52, 491, 492, 493, + -1, -1, -1, 724, -1, -1, 727, 728, -1, 65, + 66, 67, 733, -1, -1, -1, 94, 95, 96, 97, + -1, 755, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 754, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 101, -1, -1, 769, 105, + -1, -1, -1, -1, -1, -1, -1, -1, 779, 115, + -1, -1, 118, 119, -1, 3, 122, 123, 124, -1, + 791, -1, -1, 11, -1, -1, -1, -1, -1, -1, + -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, + -1, -1, -1, -1, -1, -1, -1, 45, 46, 47, + 48, 49, 50, 94, 95, 96, 97, -1, 839, -1, + -1, 842, 843, 94, 95, 96, 97, 65, 66, 67, + -1, 852, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 863, 114, 115, 116, 117, 118, 119, 120, + 121, 122, -1, -1, 648, 649, -1, 651, -1, -1, + -1, 655, 1, 101, 3, 4, 104, 105, 7, 8, + 9, -1, -1, -1, -1, -1, -1, -1, -1, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 40, -1, + -1, 40, 41, -1, -1, 44, -1, 46, 47, 48, + 49, 50, -1, 707, -1, -1, -1, -1, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, -1, 72, 73, 74, -1, 76, 77, 78, + -1, -1, -1, 82, 738, 84, 85, 86, 87, 88, + 89, -1, 94, 95, 96, 97, 98, -1, -1, -1, + 99, -1, 101, -1, -1, 104, 105, 106, -1, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, -1, 3, -1, 124, 6, -1, -1, -1, + 10, 11, 12, 13, 14, 15, 16, 17, 792, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, -1, -1, + -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, + 50, -1, 52, 94, 95, 96, 97, 98, -1, -1, + -1, -1, -1, -1, -1, 65, 66, 67, -1, -1, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 19, 20, 21, 22, 23, 24, 25, 26, + -1, 28, -1, 30, -1, -1, 33, 34, 35, 36, + -1, 101, -1, -1, 104, 105, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, + -1, -1, 122, 123, 124, 3, -1, -1, 6, -1, + -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 55, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, 46, 47, + 48, 49, 50, -1, 52, -1, -1, 55, -1, 94, + 95, 96, 97, 98, -1, -1, -1, 65, 66, 67, + -1, 94, 95, 96, 97, -1, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, 3, -1, 101, 6, -1, -1, 105, -1, 11, + 12, 13, 14, 15, 16, 17, -1, 115, -1, -1, + 118, 119, -1, -1, 122, 123, 124, 3, -1, -1, + 6, -1, -1, -1, 10, 11, 12, 13, 14, 15, + 16, 17, 55, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, -1, -1, -1, -1, -1, -1, -1, -1, + 46, 47, 48, 49, 50, -1, 52, -1, -1, 55, + -1, 94, 95, 96, 97, 98, -1, -1, -1, 65, + 66, 67, -1, -1, -1, -1, -1, -1, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, 105, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, + -1, -1, 118, 119, -1, -1, 122, 123, 124, 3, + -1, -1, 6, -1, -1, -1, 10, 11, 12, 13, + 14, 15, 16, 17, 55, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, -1, + -1, -1, 46, 47, 48, 49, 50, -1, 52, -1, + -1, 55, -1, 94, 95, 96, 97, 98, -1, -1, + -1, 65, 66, 67, -1, -1, -1, -1, -1, -1, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, + -1, 105, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 115, -1, -1, 118, 119, -1, -1, 122, 123, + 124, 3, -1, -1, 6, -1, -1, -1, 10, 11, + 12, 13, 14, 15, 16, 17, 55, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, + -1, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, -1, -1, 55, -1, 94, 95, 96, 97, 98, + -1, -1, -1, 65, 66, 67, -1, -1, -1, -1, + -1, -1, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, + -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 115, -1, -1, 118, 119, -1, -1, + 122, 123, 124, 3, -1, -1, 6, -1, -1, -1, + 10, 11, 12, 13, 14, 15, 16, 17, 55, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, -1, -1, + -1, -1, -1, -1, -1, -1, 46, 47, 48, 49, + 50, -1, 52, -1, -1, -1, -1, 94, 95, 96, + 97, 98, -1, -1, -1, 65, 66, 67, -1, -1, + -1, -1, -1, -1, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, 105, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, + -1, -1, 122, 123, 124, 3, -1, -1, 6, -1, + -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, + -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, -1, -1, -1, 46, 47, + 48, 49, 50, -1, 52, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, -1, -1, 45, 46, 47, + 48, 49, 50, 101, -1, -1, 54, 105, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + 118, 119, -1, -1, 122, 123, 124, -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, 101, -1, -1, 104, 105, -1, 3, + -1, -1, -1, -1, -1, -1, -1, 115, -1, -1, + -1, -1, -1, -1, 122, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, -1, + -1, 45, 46, 47, 48, 49, 50, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 65, 66, 67, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, -1, -1, -1, 101, -1, -1, + 104, 105, 45, 46, 47, 48, 49, 50, -1, -1, + -1, 115, -1, 3, -1, -1, -1, -1, 122, -1, + -1, -1, 65, 66, 67, -1, -1, -1, -1, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 71, 101, 49, + 50, 104, 105, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 115, -1, -1, 65, 66, 67, -1, 122, + 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, -1, + -1, 101, -1, -1, -1, 105, 0, 1, -1, 3, + 4, -1, -1, 7, 8, 9, -1, -1, -1, -1, + -1, -1, 122, -1, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, -1, -1, -1, 40, 41, -1, -1, + -1, -1, 46, 47, 48, 49, 50, -1, -1, 53, + -1, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, + 74, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 1, -1, 3, 4, + -1, -1, 7, 8, 9, 99, -1, 101, -1, -1, + 104, 105, -1, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, -1, -1, -1, 40, 41, -1, -1, 44, + -1, 46, 47, 48, 49, 50, -1, -1, 53, -1, + -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, + -1, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 1, -1, 3, 4, -1, + -1, 7, 8, 9, 99, -1, 101, -1, -1, 104, + 105, -1, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, -1, -1, -1, 40, 41, -1, -1, 44, -1, + 46, 47, 48, 49, 50, -1, -1, 53, -1, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 1, -1, 3, 4, -1, -1, + 7, 8, 9, 99, -1, 101, -1, -1, 104, 105, + -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + -1, -1, -1, 40, 41, -1, -1, 44, -1, 46, + 47, 48, 49, 50, -1, -1, 53, -1, -1, -1, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 1, -1, 3, 4, -1, -1, 7, + 8, 9, 99, -1, 101, -1, -1, 104, 105, -1, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, + -1, -1, 40, 41, -1, -1, -1, -1, 46, 47, + 48, 49, 50, -1, -1, 53, -1, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 1, -1, 3, -1, -1, -1, -1, -1, + -1, 99, -1, 101, -1, -1, 104, 105, -1, -1, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, + -1, -1, -1, -1, -1, -1, 45, 46, 47, 48, + 49, 50, 1, -1, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 65, 66, 67, -1, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, + -1, -1, -1, -1, -1, -1, 45, 46, 47, 48, + 49, 50, 101, -1, -1, 104, 105, -1, -1, -1, + -1, -1, 1, -1, 3, -1, 65, 66, 67, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, + -1, -1, 101, -1, -1, 104, 105, 46, 47, 48, + 49, 50, -1, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 65, 66, 67, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 46, 47, 48, 49, + 50, -1, 101, 3, -1, -1, 105, -1, -1, -1, + -1, -1, -1, -1, -1, 65, 66, 67, -1, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 46, 47, 48, 49, + 50, 101, 3, -1, -1, 105, 106, -1, -1, -1, + -1, -1, -1, -1, -1, 65, 66, 67, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, -1, -1, -1, -1, + -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, + -1, 101, 3, -1, -1, 105, 106, -1, -1, -1, + -1, -1, -1, -1, 65, 66, 67, -1, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, -1, -1, -1, + -1, -1, -1, -1, -1, 46, 47, 48, 49, 50, + 101, 3, -1, 104, 105, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 65, 66, 67, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 101, 3, -1, -1, 105, -1, -1, -1, -1, -1, + -1, -1, -1, 65, 66, 67, -1, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 46, 47, 48, 49, 50, 101, + 3, -1, -1, 105, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 65, 66, 67, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 46, 47, 48, 49, 50, -1, 101, + 3, -1, -1, 105, -1, -1, -1, -1, -1, -1, + -1, -1, 65, 66, 67, -1, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 49, 50, 101, -1, + -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 65, 66, 67, -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, 101, -1, + -1, -1, 105 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 107, 108, 109, 128, 129, 274, 1, 3, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 45, 46, 47, + 48, 49, 50, 65, 66, 67, 101, 104, 105, 215, + 229, 230, 232, 233, 234, 235, 236, 253, 254, 264, + 266, 1, 215, 1, 37, 0, 1, 4, 7, 8, + 9, 18, 40, 41, 53, 57, 58, 59, 60, 61, + 62, 63, 64, 72, 73, 74, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 99, 104, 130, 131, 132, 134, 135, 136, 137, 138, + 141, 142, 144, 145, 146, 147, 148, 149, 150, 153, + 154, 155, 158, 160, 165, 166, 167, 168, 170, 173, + 174, 175, 176, 177, 181, 182, 189, 190, 200, 211, + 274, 90, 261, 274, 261, 45, 264, 126, 90, 40, + 233, 229, 37, 51, 54, 71, 115, 122, 124, 220, + 221, 223, 225, 226, 227, 228, 264, 274, 229, 235, + 264, 103, 126, 265, 40, 40, 212, 213, 215, 274, + 106, 37, 6, 269, 37, 271, 274, 1, 3, 231, + 232, 37, 271, 37, 152, 274, 37, 37, 37, 79, + 264, 3, 43, 264, 37, 4, 43, 37, 37, 40, + 43, 4, 269, 37, 164, 231, 162, 164, 37, 37, + 269, 37, 90, 254, 271, 37, 115, 223, 228, 264, + 65, 231, 254, 10, 11, 12, 13, 14, 15, 16, + 17, 37, 52, 115, 118, 119, 122, 123, 124, 215, + 216, 217, 219, 231, 232, 243, 244, 245, 246, 269, + 274, 45, 105, 266, 254, 229, 37, 115, 212, 226, + 228, 264, 43, 237, 238, 55, 243, 244, 243, 37, + 124, 224, 227, 264, 228, 229, 264, 220, 37, 54, + 220, 37, 54, 115, 224, 227, 264, 102, 266, 105, + 266, 38, 39, 214, 274, 3, 262, 269, 6, 43, + 262, 272, 262, 40, 51, 37, 223, 38, 262, 264, + 3, 3, 262, 11, 159, 212, 212, 264, 40, 51, + 192, 43, 3, 161, 272, 3, 212, 43, 222, 223, + 226, 274, 40, 39, 163, 274, 262, 263, 274, 139, + 140, 269, 212, 185, 186, 187, 215, 253, 274, 264, + 269, 3, 115, 228, 264, 272, 37, 262, 115, 264, + 102, 3, 239, 274, 37, 223, 43, 264, 243, 37, + 243, 243, 243, 243, 243, 243, 91, 39, 218, 274, + 37, 94, 95, 96, 97, 98, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 265, 91, + 115, 228, 264, 225, 264, 38, 38, 115, 225, 264, + 102, 54, 243, 55, 228, 264, 264, 37, 54, 228, + 212, 55, 243, 212, 55, 243, 224, 227, 102, 115, + 224, 265, 40, 215, 38, 169, 39, 51, 38, 237, + 220, 38, 43, 38, 51, 38, 39, 157, 39, 38, + 38, 40, 264, 129, 191, 38, 38, 38, 38, 162, + 164, 38, 38, 39, 43, 38, 91, 39, 188, 274, + 54, 102, 38, 228, 264, 40, 102, 40, 43, 212, + 264, 75, 172, 220, 229, 179, 40, 71, 247, 248, + 274, 38, 115, 122, 228, 231, 219, 243, 243, 243, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 243, 243, 254, 264, 102, 38, 38, 102, + 225, 243, 224, 264, 38, 102, 212, 55, 243, 38, + 55, 38, 55, 115, 224, 227, 224, 214, 4, 43, + 269, 129, 272, 139, 245, 269, 273, 40, 40, 133, + 4, 151, 269, 4, 40, 43, 100, 156, 223, 269, + 270, 262, 269, 273, 38, 215, 223, 43, 40, 44, + 129, 41, 211, 162, 40, 43, 37, 44, 163, 3, + 101, 105, 267, 40, 272, 215, 156, 183, 187, 143, + 223, 269, 102, 3, 240, 241, 274, 38, 37, 39, + 40, 43, 171, 75, 220, 1, 40, 61, 68, 69, + 70, 73, 124, 134, 135, 136, 137, 141, 142, 146, + 148, 150, 153, 155, 158, 160, 165, 166, 167, 168, + 181, 182, 189, 193, 196, 197, 198, 199, 200, 201, + 202, 207, 210, 211, 274, 249, 43, 243, 38, 122, + 229, 38, 115, 221, 218, 71, 264, 38, 55, 38, + 224, 38, 55, 224, 44, 39, 39, 193, 37, 75, + 229, 256, 274, 51, 38, 39, 157, 156, 223, 256, + 44, 269, 3, 231, 40, 51, 270, 212, 103, 126, + 268, 126, 90, 38, 44, 170, 177, 181, 182, 184, + 197, 199, 211, 188, 129, 256, 40, 51, 39, 44, + 37, 51, 256, 257, 212, 223, 37, 195, 43, 71, + 71, 71, 124, 266, 44, 193, 106, 231, 254, 264, + 73, 250, 251, 255, 274, 178, 243, 243, 38, 38, + 243, 220, 38, 272, 272, 44, 212, 37, 75, 156, + 269, 273, 40, 223, 38, 256, 40, 40, 223, 164, + 38, 3, 3, 105, 3, 105, 216, 4, 43, 231, + 55, 40, 242, 243, 241, 40, 223, 212, 237, 71, + 258, 274, 38, 172, 212, 193, 194, 266, 37, 223, + 231, 37, 71, 3, 43, 264, 40, 39, 68, 69, + 70, 252, 264, 193, 243, 38, 212, 37, 157, 256, + 40, 223, 156, 40, 40, 268, 268, 91, 171, 38, + 40, 259, 260, 264, 40, 43, 220, 171, 38, 193, + 37, 212, 171, 37, 115, 228, 212, 243, 43, 204, + 71, 251, 255, 44, 40, 38, 212, 40, 256, 40, + 40, 43, 39, 37, 220, 44, 212, 38, 212, 37, + 37, 38, 40, 203, 206, 223, 274, 250, 264, 40, + 180, 223, 38, 40, 260, 193, 38, 208, 256, 38, + 212, 212, 257, 206, 40, 43, 171, 209, 256, 40, + 43, 209, 38, 38, 40, 205, 40, 43, 51, 209, + 209, 40, 237, 40 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 1593 "parser.y" + { + if (!classes) classes = NewHash(); + Setattr((yyvsp[(1) - (1)].node),"classes",classes); + Setattr((yyvsp[(1) - (1)].node),"name",ModuleName); + + if ((!module_node) && ModuleName) { + module_node = new_node("module"); + Setattr(module_node,"name",ModuleName); + } + Setattr((yyvsp[(1) - (1)].node),"module",module_node); + check_extensions(); + top = (yyvsp[(1) - (1)].node); + } + break; + + case 3: +#line 1606 "parser.y" + { + top = Copy(Getattr((yyvsp[(2) - (3)].p),"type")); + Delete((yyvsp[(2) - (3)].p)); + } + break; + + case 4: +#line 1610 "parser.y" + { + top = 0; + } + break; + + case 5: +#line 1613 "parser.y" + { + top = (yyvsp[(2) - (3)].p); + } + break; + + case 6: +#line 1616 "parser.y" + { + top = 0; + } + break; + + case 7: +#line 1619 "parser.y" + { + top = (yyvsp[(3) - (5)].pl); + } + break; + + case 8: +#line 1622 "parser.y" + { + top = 0; + } + break; + + case 9: +#line 1627 "parser.y" + { + /* add declaration to end of linked list (the declaration isn't always a single declaration, sometimes it is a linked list itself) */ + appendChild((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)); + (yyval.node) = (yyvsp[(1) - (2)].node); + } + break; + + case 10: +#line 1632 "parser.y" + { + (yyval.node) = new_node("top"); + } + break; + + case 11: +#line 1637 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 12: +#line 1638 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 13: +#line 1639 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 14: +#line 1640 "parser.y" + { (yyval.node) = 0; } + break; + + case 15: +#line 1641 "parser.y" + { + (yyval.node) = 0; + Swig_error(cparse_file, cparse_line,"Syntax error in input(1).\n"); + exit(1); + } + break; + + case 16: +#line 1647 "parser.y" + { + if ((yyval.node)) { + add_symbols((yyval.node)); + } + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 17: +#line 1663 "parser.y" + { + (yyval.node) = 0; + skip_decl(); + } + break; + + case 18: +#line 1673 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 19: +#line 1674 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 20: +#line 1675 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 21: +#line 1676 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 22: +#line 1677 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 23: +#line 1678 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 24: +#line 1679 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 25: +#line 1680 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 26: +#line 1681 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 27: +#line 1682 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 28: +#line 1683 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 29: +#line 1684 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 30: +#line 1685 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 31: +#line 1686 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 32: +#line 1687 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 33: +#line 1688 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 34: +#line 1689 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 35: +#line 1690 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 36: +#line 1691 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 37: +#line 1692 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 38: +#line 1693 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 39: +#line 1700 "parser.y" + { + Node *cls; + String *clsname; + cplus_mode = CPLUS_PUBLIC; + if (!classes) classes = NewHash(); + if (!extendhash) extendhash = NewHash(); + clsname = make_class_name((yyvsp[(3) - (4)].str)); + cls = Getattr(classes,clsname); + if (!cls) { + /* No previous definition. Create a new scope */ + Node *am = Getattr(extendhash,clsname); + if (!am) { + Swig_symbol_newscope(); + Swig_symbol_setscopename((yyvsp[(3) - (4)].str)); + prev_symtab = 0; + } else { + prev_symtab = Swig_symbol_setscope(Getattr(am,"symtab")); + } + current_class = 0; + } else { + /* Previous class definition. Use its symbol table */ + prev_symtab = Swig_symbol_setscope(Getattr(cls,"symtab")); + current_class = cls; + extendmode = 1; + } + Classprefix = NewString((yyvsp[(3) - (4)].str)); + Namespaceprefix= Swig_symbol_qualifiedscopename(0); + Delete(clsname); + } + break; + + case 40: +#line 1728 "parser.y" + { + String *clsname; + extendmode = 0; + (yyval.node) = new_node("extend"); + Setattr((yyval.node),"symtab",Swig_symbol_popscope()); + if (prev_symtab) { + Swig_symbol_setscope(prev_symtab); + } + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + clsname = make_class_name((yyvsp[(3) - (7)].str)); + Setattr((yyval.node),"name",clsname); + + /* Mark members as extend */ + + tag_nodes((yyvsp[(6) - (7)].node),"feature:extend",(char*) "1"); + if (current_class) { + /* We add the extension to the previously defined class */ + appendChild((yyval.node),(yyvsp[(6) - (7)].node)); + appendChild(current_class,(yyval.node)); + } else { + /* We store the extensions in the extensions hash */ + Node *am = Getattr(extendhash,clsname); + if (am) { + /* Append the members to the previous extend methods */ + appendChild(am,(yyvsp[(6) - (7)].node)); + } else { + appendChild((yyval.node),(yyvsp[(6) - (7)].node)); + Setattr(extendhash,clsname,(yyval.node)); + } + } + current_class = 0; + Delete(Classprefix); + Delete(clsname); + Classprefix = 0; + prev_symtab = 0; + (yyval.node) = 0; + + } + break; + + case 41: +#line 1772 "parser.y" + { + (yyval.node) = new_node("apply"); + Setattr((yyval.node),"pattern",Getattr((yyvsp[(2) - (5)].p),"pattern")); + appendChild((yyval.node),(yyvsp[(4) - (5)].p)); + } + break; + + case 42: +#line 1782 "parser.y" + { + (yyval.node) = new_node("clear"); + appendChild((yyval.node),(yyvsp[(2) - (3)].p)); + } + break; + + case 43: +#line 1793 "parser.y" + { + if (((yyvsp[(4) - (5)].dtype).type != T_ERROR) && ((yyvsp[(4) - (5)].dtype).type != T_SYMBOL)) { + SwigType *type = NewSwigType((yyvsp[(4) - (5)].dtype).type); + (yyval.node) = new_node("constant"); + Setattr((yyval.node),"name",(yyvsp[(2) - (5)].id)); + Setattr((yyval.node),"type",type); + Setattr((yyval.node),"value",(yyvsp[(4) - (5)].dtype).val); + if ((yyvsp[(4) - (5)].dtype).rawval) Setattr((yyval.node),"rawval", (yyvsp[(4) - (5)].dtype).rawval); + Setattr((yyval.node),"storage","%constant"); + SetFlag((yyval.node),"feature:immutable"); + add_symbols((yyval.node)); + Delete(type); + } else { + if ((yyvsp[(4) - (5)].dtype).type == T_ERROR) { + Swig_warning(WARN_PARSE_UNSUPPORTED_VALUE,cparse_file,cparse_line,"Unsupported constant value (ignored)\n"); + } + (yyval.node) = 0; + } + + } + break; + + case 44: +#line 1814 "parser.y" + { + if (((yyvsp[(4) - (5)].dtype).type != T_ERROR) && ((yyvsp[(4) - (5)].dtype).type != T_SYMBOL)) { + SwigType_push((yyvsp[(2) - (5)].type),(yyvsp[(3) - (5)].decl).type); + /* Sneaky callback function trick */ + if (SwigType_isfunction((yyvsp[(2) - (5)].type))) { + SwigType_add_pointer((yyvsp[(2) - (5)].type)); + } + (yyval.node) = new_node("constant"); + Setattr((yyval.node),"name",(yyvsp[(3) - (5)].decl).id); + Setattr((yyval.node),"type",(yyvsp[(2) - (5)].type)); + Setattr((yyval.node),"value",(yyvsp[(4) - (5)].dtype).val); + if ((yyvsp[(4) - (5)].dtype).rawval) Setattr((yyval.node),"rawval", (yyvsp[(4) - (5)].dtype).rawval); + Setattr((yyval.node),"storage","%constant"); + SetFlag((yyval.node),"feature:immutable"); + add_symbols((yyval.node)); + } else { + if ((yyvsp[(4) - (5)].dtype).type == T_ERROR) { + Swig_warning(WARN_PARSE_UNSUPPORTED_VALUE,cparse_file,cparse_line,"Unsupported constant value\n"); + } + (yyval.node) = 0; + } + } + break; + + case 45: +#line 1836 "parser.y" + { + Swig_warning(WARN_PARSE_BAD_VALUE,cparse_file,cparse_line,"Bad constant value (ignored).\n"); + (yyval.node) = 0; + } + break; + + case 46: +#line 1847 "parser.y" + { + char temp[64]; + Replace((yyvsp[(2) - (2)].str),"$file",cparse_file, DOH_REPLACE_ANY); + sprintf(temp,"%d", cparse_line); + Replace((yyvsp[(2) - (2)].str),"$line",temp,DOH_REPLACE_ANY); + Printf(stderr,"%s\n", (yyvsp[(2) - (2)].str)); + Delete((yyvsp[(2) - (2)].str)); + (yyval.node) = 0; + } + break; + + case 47: +#line 1856 "parser.y" + { + char temp[64]; + String *s = NewString((yyvsp[(2) - (2)].id)); + Replace(s,"$file",cparse_file, DOH_REPLACE_ANY); + sprintf(temp,"%d", cparse_line); + Replace(s,"$line",temp,DOH_REPLACE_ANY); + Printf(stderr,"%s\n", s); + Delete(s); + (yyval.node) = 0; + } + break; + + case 48: +#line 1875 "parser.y" + { + skip_balanced('{','}'); + (yyval.node) = 0; + Swig_warning(WARN_DEPRECATED_EXCEPT,cparse_file, cparse_line, "%%except is deprecated. Use %%exception instead.\n"); + } + break; + + case 49: +#line 1881 "parser.y" + { + skip_balanced('{','}'); + (yyval.node) = 0; + Swig_warning(WARN_DEPRECATED_EXCEPT,cparse_file, cparse_line, "%%except is deprecated. Use %%exception instead.\n"); + } + break; + + case 50: +#line 1887 "parser.y" + { + (yyval.node) = 0; + Swig_warning(WARN_DEPRECATED_EXCEPT,cparse_file, cparse_line, "%%except is deprecated. Use %%exception instead.\n"); + } + break; + + case 51: +#line 1892 "parser.y" + { + (yyval.node) = 0; + Swig_warning(WARN_DEPRECATED_EXCEPT,cparse_file, cparse_line, "%%except is deprecated. Use %%exception instead.\n"); + } + break; + + case 52: +#line 1899 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"value",(yyvsp[(1) - (4)].id)); + Setattr((yyval.node),"type",Getattr((yyvsp[(3) - (4)].p),"type")); + } + break; + + case 53: +#line 1906 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"value",(yyvsp[(1) - (1)].id)); + } + break; + + case 54: +#line 1910 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 55: +#line 1923 "parser.y" + { + Hash *p = (yyvsp[(5) - (7)].node); + (yyval.node) = new_node("fragment"); + Setattr((yyval.node),"value",Getattr((yyvsp[(3) - (7)].node),"value")); + Setattr((yyval.node),"type",Getattr((yyvsp[(3) - (7)].node),"type")); + Setattr((yyval.node),"section",Getattr(p,"name")); + Setattr((yyval.node),"kwargs",nextSibling(p)); + Setattr((yyval.node),"code",(yyvsp[(7) - (7)].str)); + } + break; + + case 56: +#line 1932 "parser.y" + { + Hash *p = (yyvsp[(5) - (7)].node); + String *code; + skip_balanced('{','}'); + (yyval.node) = new_node("fragment"); + Setattr((yyval.node),"value",Getattr((yyvsp[(3) - (7)].node),"value")); + Setattr((yyval.node),"type",Getattr((yyvsp[(3) - (7)].node),"type")); + Setattr((yyval.node),"section",Getattr(p,"name")); + Setattr((yyval.node),"kwargs",nextSibling(p)); + Delitem(scanner_ccode,0); + Delitem(scanner_ccode,DOH_END); + code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + break; + + case 57: +#line 1947 "parser.y" + { + (yyval.node) = new_node("fragment"); + Setattr((yyval.node),"value",Getattr((yyvsp[(3) - (5)].node),"value")); + Setattr((yyval.node),"type",Getattr((yyvsp[(3) - (5)].node),"type")); + Setattr((yyval.node),"emitonly","1"); + } + break; + + case 58: +#line 1960 "parser.y" + { + (yyvsp[(1) - (4)].loc).filename = Copy(cparse_file); + (yyvsp[(1) - (4)].loc).line = cparse_line; + scanner_set_location(NewString((yyvsp[(3) - (4)].id)),1); + if ((yyvsp[(2) - (4)].node)) { + String *maininput = Getattr((yyvsp[(2) - (4)].node), "maininput"); + if (maininput) + scanner_set_main_input_file(NewString(maininput)); + } + } + break; + + case 59: +#line 1969 "parser.y" + { + String *mname = 0; + (yyval.node) = (yyvsp[(6) - (7)].node); + scanner_set_location((yyvsp[(1) - (7)].loc).filename,(yyvsp[(1) - (7)].loc).line); + if (strcmp((yyvsp[(1) - (7)].loc).type,"include") == 0) set_nodeType((yyval.node),"include"); + if (strcmp((yyvsp[(1) - (7)].loc).type,"import") == 0) { + mname = (yyvsp[(2) - (7)].node) ? Getattr((yyvsp[(2) - (7)].node),"module") : 0; + set_nodeType((yyval.node),"import"); + if (import_mode) --import_mode; + } + + Setattr((yyval.node),"name",(yyvsp[(3) - (7)].id)); + /* Search for the module (if any) */ + { + Node *n = firstChild((yyval.node)); + while (n) { + if (Strcmp(nodeType(n),"module") == 0) { + if (mname) { + Setattr(n,"name", mname); + mname = 0; + } + Setattr((yyval.node),"module",Getattr(n,"name")); + break; + } + n = nextSibling(n); + } + if (mname) { + /* There is no module node in the import + node, ie, you imported a .h file + directly. We are forced then to create + a new import node with a module node. + */ + Node *nint = new_node("import"); + Node *mnode = new_node("module"); + Setattr(mnode,"name", mname); + appendChild(nint,mnode); + Delete(mnode); + appendChild(nint,firstChild((yyval.node))); + (yyval.node) = nint; + Setattr((yyval.node),"module",mname); + } + } + Setattr((yyval.node),"options",(yyvsp[(2) - (7)].node)); + } + break; + + case 60: +#line 2015 "parser.y" + { (yyval.loc).type = (char *) "include"; } + break; + + case 61: +#line 2016 "parser.y" + { (yyval.loc).type = (char *) "import"; ++import_mode;} + break; + + case 62: +#line 2023 "parser.y" + { + String *cpps; + if (Namespaceprefix) { + Swig_error(cparse_file, cparse_start_line, "%%inline directive inside a namespace is disallowed.\n"); + + (yyval.node) = 0; + } else { + (yyval.node) = new_node("insert"); + Setattr((yyval.node),"code",(yyvsp[(2) - (2)].str)); + /* Need to run through the preprocessor */ + Setline((yyvsp[(2) - (2)].str),cparse_start_line); + Setfile((yyvsp[(2) - (2)].str),cparse_file); + Seek((yyvsp[(2) - (2)].str),0,SEEK_SET); + cpps = Preprocessor_parse((yyvsp[(2) - (2)].str)); + start_inline(Char(cpps), cparse_start_line); + Delete((yyvsp[(2) - (2)].str)); + Delete(cpps); + } + + } + break; + + case 63: +#line 2043 "parser.y" + { + String *cpps; + int start_line = cparse_line; + skip_balanced('{','}'); + if (Namespaceprefix) { + Swig_error(cparse_file, cparse_start_line, "%%inline directive inside a namespace is disallowed.\n"); + + (yyval.node) = 0; + } else { + String *code; + (yyval.node) = new_node("insert"); + Delitem(scanner_ccode,0); + Delitem(scanner_ccode,DOH_END); + code = Copy(scanner_ccode); + Setattr((yyval.node),"code", code); + Delete(code); + cpps=Copy(scanner_ccode); + start_inline(Char(cpps), start_line); + Delete(cpps); + } + } + break; + + case 64: +#line 2074 "parser.y" + { + (yyval.node) = new_node("insert"); + Setattr((yyval.node),"code",(yyvsp[(1) - (1)].str)); + } + break; + + case 65: +#line 2078 "parser.y" + { + String *code = NewStringEmpty(); + (yyval.node) = new_node("insert"); + Setattr((yyval.node),"section",(yyvsp[(3) - (5)].id)); + Setattr((yyval.node),"code",code); + if (Swig_insert_file((yyvsp[(5) - (5)].id),code) < 0) { + Swig_error(cparse_file, cparse_line, "Couldn't find '%s'.\n", (yyvsp[(5) - (5)].id)); + (yyval.node) = 0; + } + } + break; + + case 66: +#line 2088 "parser.y" + { + (yyval.node) = new_node("insert"); + Setattr((yyval.node),"section",(yyvsp[(3) - (5)].id)); + Setattr((yyval.node),"code",(yyvsp[(5) - (5)].str)); + } + break; + + case 67: +#line 2093 "parser.y" + { + String *code; + skip_balanced('{','}'); + (yyval.node) = new_node("insert"); + Setattr((yyval.node),"section",(yyvsp[(3) - (5)].id)); + Delitem(scanner_ccode,0); + Delitem(scanner_ccode,DOH_END); + code = Copy(scanner_ccode); + Setattr((yyval.node),"code", code); + Delete(code); + } + break; + + case 68: +#line 2111 "parser.y" + { + (yyval.node) = new_node("module"); + if ((yyvsp[(2) - (3)].node)) { + Setattr((yyval.node),"options",(yyvsp[(2) - (3)].node)); + if (Getattr((yyvsp[(2) - (3)].node),"directors")) { + Wrapper_director_mode_set(1); + } + if (Getattr((yyvsp[(2) - (3)].node),"dirprot")) { + Wrapper_director_protected_mode_set(1); + } + if (Getattr((yyvsp[(2) - (3)].node),"allprotected")) { + Wrapper_all_protected_mode_set(1); + } + if (Getattr((yyvsp[(2) - (3)].node),"templatereduce")) { + template_reduce = 1; + } + if (Getattr((yyvsp[(2) - (3)].node),"notemplatereduce")) { + template_reduce = 0; + } + } + if (!ModuleName) ModuleName = NewString((yyvsp[(3) - (3)].id)); + if (!import_mode) { + /* first module included, we apply global + ModuleName, which can be modify by -module */ + String *mname = Copy(ModuleName); + Setattr((yyval.node),"name",mname); + Delete(mname); + } else { + /* import mode, we just pass the idstring */ + Setattr((yyval.node),"name",(yyvsp[(3) - (3)].id)); + } + if (!module_node) module_node = (yyval.node); + } + break; + + case 69: +#line 2151 "parser.y" + { + Swig_warning(WARN_DEPRECATED_NAME,cparse_file,cparse_line, "%%name is deprecated. Use %%rename instead.\n"); + Delete(yyrename); + yyrename = NewString((yyvsp[(3) - (4)].id)); + (yyval.node) = 0; + } + break; + + case 70: +#line 2157 "parser.y" + { + Swig_warning(WARN_DEPRECATED_NAME,cparse_file,cparse_line, "%%name is deprecated. Use %%rename instead.\n"); + (yyval.node) = 0; + Swig_error(cparse_file,cparse_line,"Missing argument to %%name directive.\n"); + } + break; + + case 71: +#line 2170 "parser.y" + { + (yyval.node) = new_node("native"); + Setattr((yyval.node),"name",(yyvsp[(3) - (7)].id)); + Setattr((yyval.node),"wrap:name",(yyvsp[(6) - (7)].id)); + add_symbols((yyval.node)); + } + break; + + case 72: +#line 2176 "parser.y" + { + if (!SwigType_isfunction((yyvsp[(7) - (8)].decl).type)) { + Swig_error(cparse_file,cparse_line,"%%native declaration '%s' is not a function.\n", (yyvsp[(7) - (8)].decl).id); + (yyval.node) = 0; + } else { + Delete(SwigType_pop_function((yyvsp[(7) - (8)].decl).type)); + /* Need check for function here */ + SwigType_push((yyvsp[(6) - (8)].type),(yyvsp[(7) - (8)].decl).type); + (yyval.node) = new_node("native"); + Setattr((yyval.node),"name",(yyvsp[(3) - (8)].id)); + Setattr((yyval.node),"wrap:name",(yyvsp[(7) - (8)].decl).id); + Setattr((yyval.node),"type",(yyvsp[(6) - (8)].type)); + Setattr((yyval.node),"parms",(yyvsp[(7) - (8)].decl).parms); + Setattr((yyval.node),"decl",(yyvsp[(7) - (8)].decl).type); + } + add_symbols((yyval.node)); + } + break; + + case 73: +#line 2202 "parser.y" + { + (yyval.node) = new_node("pragma"); + Setattr((yyval.node),"lang",(yyvsp[(2) - (5)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (5)].id)); + Setattr((yyval.node),"value",(yyvsp[(5) - (5)].str)); + } + break; + + case 74: +#line 2208 "parser.y" + { + (yyval.node) = new_node("pragma"); + Setattr((yyval.node),"lang",(yyvsp[(2) - (3)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (3)].id)); + } + break; + + case 75: +#line 2215 "parser.y" + { (yyval.str) = NewString((yyvsp[(1) - (1)].id)); } + break; + + case 76: +#line 2216 "parser.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); } + break; + + case 77: +#line 2219 "parser.y" + { (yyval.id) = (yyvsp[(2) - (3)].id); } + break; + + case 78: +#line 2220 "parser.y" + { (yyval.id) = (char *) "swig"; } + break; + + case 79: +#line 2228 "parser.y" + { + SwigType *t = (yyvsp[(2) - (4)].decl).type; + Hash *kws = NewHash(); + String *fixname; + fixname = feature_identifier_fix((yyvsp[(2) - (4)].decl).id); + Setattr(kws,"name",(yyvsp[(3) - (4)].id)); + if (!Len(t)) t = 0; + /* Special declarator check */ + if (t) { + if (SwigType_isfunction(t)) { + SwigType *decl = SwigType_pop_function(t); + if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ((yyvsp[(1) - (4)].ivalue)) { + Swig_name_rename_add(Namespaceprefix, nname,decl,kws,(yyvsp[(2) - (4)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,nname,decl,kws); + } + Delete(nname); + } else { + if ((yyvsp[(1) - (4)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(fixname),decl,kws,(yyvsp[(2) - (4)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),decl,kws); + } + } + Delete(decl); + } else if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ((yyvsp[(1) - (4)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(nname),0,kws,(yyvsp[(2) - (4)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(nname),0,kws); + } + Delete(nname); + } + } else { + if ((yyvsp[(1) - (4)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(fixname),0,kws,(yyvsp[(2) - (4)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),0,kws); + } + } + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 80: +#line 2274 "parser.y" + { + String *fixname; + Hash *kws = (yyvsp[(3) - (7)].node); + SwigType *t = (yyvsp[(5) - (7)].decl).type; + fixname = feature_identifier_fix((yyvsp[(5) - (7)].decl).id); + if (!Len(t)) t = 0; + /* Special declarator check */ + if (t) { + if ((yyvsp[(6) - (7)].dtype).qualifier) SwigType_push(t,(yyvsp[(6) - (7)].dtype).qualifier); + if (SwigType_isfunction(t)) { + SwigType *decl = SwigType_pop_function(t); + if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ((yyvsp[(1) - (7)].ivalue)) { + Swig_name_rename_add(Namespaceprefix, nname,decl,kws,(yyvsp[(5) - (7)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,nname,decl,kws); + } + Delete(nname); + } else { + if ((yyvsp[(1) - (7)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(fixname),decl,kws,(yyvsp[(5) - (7)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),decl,kws); + } + } + Delete(decl); + } else if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ((yyvsp[(1) - (7)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(nname),0,kws,(yyvsp[(5) - (7)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(nname),0,kws); + } + Delete(nname); + } + } else { + if ((yyvsp[(1) - (7)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(fixname),0,kws,(yyvsp[(5) - (7)].decl).parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),0,kws); + } + } + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 81: +#line 2320 "parser.y" + { + if ((yyvsp[(1) - (6)].ivalue)) { + Swig_name_rename_add(Namespaceprefix,(yyvsp[(5) - (6)].id),0,(yyvsp[(3) - (6)].node),0); + } else { + Swig_name_namewarn_add(Namespaceprefix,(yyvsp[(5) - (6)].id),0,(yyvsp[(3) - (6)].node)); + } + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 82: +#line 2331 "parser.y" + { + (yyval.ivalue) = 1; + } + break; + + case 83: +#line 2334 "parser.y" + { + (yyval.ivalue) = 0; + } + break; + + case 84: +#line 2361 "parser.y" + { + String *val = (yyvsp[(7) - (7)].str) ? NewString((yyvsp[(7) - (7)].str)) : NewString("1"); + new_feature((yyvsp[(3) - (7)].id), val, 0, (yyvsp[(5) - (7)].decl).id, (yyvsp[(5) - (7)].decl).type, (yyvsp[(5) - (7)].decl).parms, (yyvsp[(6) - (7)].dtype).qualifier); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 85: +#line 2367 "parser.y" + { + String *val = Len((yyvsp[(5) - (9)].id)) ? NewString((yyvsp[(5) - (9)].id)) : 0; + new_feature((yyvsp[(3) - (9)].id), val, 0, (yyvsp[(7) - (9)].decl).id, (yyvsp[(7) - (9)].decl).type, (yyvsp[(7) - (9)].decl).parms, (yyvsp[(8) - (9)].dtype).qualifier); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 86: +#line 2373 "parser.y" + { + String *val = (yyvsp[(8) - (8)].str) ? NewString((yyvsp[(8) - (8)].str)) : NewString("1"); + new_feature((yyvsp[(3) - (8)].id), val, (yyvsp[(4) - (8)].node), (yyvsp[(6) - (8)].decl).id, (yyvsp[(6) - (8)].decl).type, (yyvsp[(6) - (8)].decl).parms, (yyvsp[(7) - (8)].dtype).qualifier); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 87: +#line 2379 "parser.y" + { + String *val = Len((yyvsp[(5) - (10)].id)) ? NewString((yyvsp[(5) - (10)].id)) : 0; + new_feature((yyvsp[(3) - (10)].id), val, (yyvsp[(6) - (10)].node), (yyvsp[(8) - (10)].decl).id, (yyvsp[(8) - (10)].decl).type, (yyvsp[(8) - (10)].decl).parms, (yyvsp[(9) - (10)].dtype).qualifier); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 88: +#line 2387 "parser.y" + { + String *val = (yyvsp[(5) - (5)].str) ? NewString((yyvsp[(5) - (5)].str)) : NewString("1"); + new_feature((yyvsp[(3) - (5)].id), val, 0, 0, 0, 0, 0); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 89: +#line 2393 "parser.y" + { + String *val = Len((yyvsp[(5) - (7)].id)) ? NewString((yyvsp[(5) - (7)].id)) : 0; + new_feature((yyvsp[(3) - (7)].id), val, 0, 0, 0, 0, 0); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 90: +#line 2399 "parser.y" + { + String *val = (yyvsp[(6) - (6)].str) ? NewString((yyvsp[(6) - (6)].str)) : NewString("1"); + new_feature((yyvsp[(3) - (6)].id), val, (yyvsp[(4) - (6)].node), 0, 0, 0, 0); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 91: +#line 2405 "parser.y" + { + String *val = Len((yyvsp[(5) - (8)].id)) ? NewString((yyvsp[(5) - (8)].id)) : 0; + new_feature((yyvsp[(3) - (8)].id), val, (yyvsp[(6) - (8)].node), 0, 0, 0, 0); + (yyval.node) = 0; + scanner_clear_rename(); + } + break; + + case 92: +#line 2413 "parser.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); } + break; + + case 93: +#line 2414 "parser.y" + { (yyval.str) = 0; } + break; + + case 94: +#line 2415 "parser.y" + { (yyval.str) = (yyvsp[(3) - (5)].pl); } + break; + + case 95: +#line 2418 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(2) - (4)].id)); + Setattr((yyval.node),"value",(yyvsp[(4) - (4)].id)); + } + break; + + case 96: +#line 2423 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(2) - (5)].id)); + Setattr((yyval.node),"value",(yyvsp[(4) - (5)].id)); + set_nextSibling((yyval.node),(yyvsp[(5) - (5)].node)); + } + break; + + case 97: +#line 2433 "parser.y" + { + Parm *val; + String *name; + SwigType *t; + if (Namespaceprefix) name = NewStringf("%s::%s", Namespaceprefix, (yyvsp[(5) - (7)].decl).id); + else name = NewString((yyvsp[(5) - (7)].decl).id); + val = (yyvsp[(3) - (7)].pl); + if ((yyvsp[(5) - (7)].decl).parms) { + Setmeta(val,"parms",(yyvsp[(5) - (7)].decl).parms); + } + t = (yyvsp[(5) - (7)].decl).type; + if (!Len(t)) t = 0; + if (t) { + if ((yyvsp[(6) - (7)].dtype).qualifier) SwigType_push(t,(yyvsp[(6) - (7)].dtype).qualifier); + if (SwigType_isfunction(t)) { + SwigType *decl = SwigType_pop_function(t); + if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",name); + Swig_feature_set(Swig_cparse_features(), nname, decl, "feature:varargs", val, 0); + Delete(nname); + } else { + Swig_feature_set(Swig_cparse_features(), name, decl, "feature:varargs", val, 0); + } + Delete(decl); + } else if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",name); + Swig_feature_set(Swig_cparse_features(),nname,0,"feature:varargs",val, 0); + Delete(nname); + } + } else { + Swig_feature_set(Swig_cparse_features(),name,0,"feature:varargs",val, 0); + } + Delete(name); + (yyval.node) = 0; + } + break; + + case 98: +#line 2469 "parser.y" + { (yyval.pl) = (yyvsp[(1) - (1)].pl); } + break; + + case 99: +#line 2470 "parser.y" + { + int i; + int n; + Parm *p; + n = atoi(Char((yyvsp[(1) - (3)].dtype).val)); + if (n <= 0) { + Swig_error(cparse_file, cparse_line,"Argument count in %%varargs must be positive.\n"); + (yyval.pl) = 0; + } else { + (yyval.pl) = Copy((yyvsp[(3) - (3)].p)); + Setattr((yyval.pl),"name","VARARGS_SENTINEL"); + for (i = 0; i < n; i++) { + p = Copy((yyvsp[(3) - (3)].p)); + set_nextSibling(p,(yyval.pl)); + Delete((yyval.pl)); + (yyval.pl) = p; + } + } + } + break; + + case 100: +#line 2500 "parser.y" + { + (yyval.node) = 0; + if ((yyvsp[(3) - (6)].tmap).method) { + String *code = 0; + (yyval.node) = new_node("typemap"); + Setattr((yyval.node),"method",(yyvsp[(3) - (6)].tmap).method); + if ((yyvsp[(3) - (6)].tmap).kwargs) { + ParmList *kw = (yyvsp[(3) - (6)].tmap).kwargs; + code = remove_block(kw, (yyvsp[(6) - (6)].str)); + Setattr((yyval.node),"kwargs", (yyvsp[(3) - (6)].tmap).kwargs); + } + code = code ? code : NewString((yyvsp[(6) - (6)].str)); + Setattr((yyval.node),"code", code); + Delete(code); + appendChild((yyval.node),(yyvsp[(5) - (6)].p)); + } + } + break; + + case 101: +#line 2517 "parser.y" + { + (yyval.node) = 0; + if ((yyvsp[(3) - (6)].tmap).method) { + (yyval.node) = new_node("typemap"); + Setattr((yyval.node),"method",(yyvsp[(3) - (6)].tmap).method); + appendChild((yyval.node),(yyvsp[(5) - (6)].p)); + } + } + break; + + case 102: +#line 2525 "parser.y" + { + (yyval.node) = 0; + if ((yyvsp[(3) - (8)].tmap).method) { + (yyval.node) = new_node("typemapcopy"); + Setattr((yyval.node),"method",(yyvsp[(3) - (8)].tmap).method); + Setattr((yyval.node),"pattern", Getattr((yyvsp[(7) - (8)].p),"pattern")); + appendChild((yyval.node),(yyvsp[(5) - (8)].p)); + } + } + break; + + case 103: +#line 2538 "parser.y" + { + Hash *p; + String *name; + p = nextSibling((yyvsp[(1) - (1)].node)); + if (p && (!Getattr(p,"value"))) { + /* this is the deprecated two argument typemap form */ + Swig_warning(WARN_DEPRECATED_TYPEMAP_LANG,cparse_file, cparse_line, + "Specifying the language name in %%typemap is deprecated - use #ifdef SWIG<LANG> instead.\n"); + /* two argument typemap form */ + name = Getattr((yyvsp[(1) - (1)].node),"name"); + if (!name || (Strcmp(name,typemap_lang))) { + (yyval.tmap).method = 0; + (yyval.tmap).kwargs = 0; + } else { + (yyval.tmap).method = Getattr(p,"name"); + (yyval.tmap).kwargs = nextSibling(p); + } + } else { + /* one-argument typemap-form */ + (yyval.tmap).method = Getattr((yyvsp[(1) - (1)].node),"name"); + (yyval.tmap).kwargs = p; + } + } + break; + + case 104: +#line 2563 "parser.y" + { + (yyval.p) = (yyvsp[(1) - (2)].p); + set_nextSibling((yyval.p),(yyvsp[(2) - (2)].p)); + } + break; + + case 105: +#line 2569 "parser.y" + { + (yyval.p) = (yyvsp[(2) - (3)].p); + set_nextSibling((yyval.p),(yyvsp[(3) - (3)].p)); + } + break; + + case 106: +#line 2573 "parser.y" + { (yyval.p) = 0;} + break; + + case 107: +#line 2576 "parser.y" + { + Parm *parm; + SwigType_push((yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].decl).type); + (yyval.p) = new_node("typemapitem"); + parm = NewParm((yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].decl).id); + Setattr((yyval.p),"pattern",parm); + Setattr((yyval.p),"parms", (yyvsp[(2) - (2)].decl).parms); + Delete(parm); + /* $$ = NewParm($1,$2.id); + Setattr($$,"parms",$2.parms); */ + } + break; + + case 108: +#line 2587 "parser.y" + { + (yyval.p) = new_node("typemapitem"); + Setattr((yyval.p),"pattern",(yyvsp[(2) - (3)].pl)); + /* Setattr($$,"multitype",$2); */ + } + break; + + case 109: +#line 2592 "parser.y" + { + (yyval.p) = new_node("typemapitem"); + Setattr((yyval.p),"pattern", (yyvsp[(2) - (6)].pl)); + /* Setattr($$,"multitype",$2); */ + Setattr((yyval.p),"parms",(yyvsp[(5) - (6)].pl)); + } + break; + + case 110: +#line 2605 "parser.y" + { + (yyval.node) = new_node("types"); + Setattr((yyval.node),"parms",(yyvsp[(3) - (5)].pl)); + if ((yyvsp[(5) - (5)].str)) + Setattr((yyval.node),"convcode",NewString((yyvsp[(5) - (5)].str))); + } + break; + + case 111: +#line 2617 "parser.y" + { + Parm *p, *tp; + Node *n; + Node *tnode = 0; + Symtab *tscope = 0; + int specialized = 0; + + (yyval.node) = 0; + + tscope = Swig_symbol_current(); /* Get the current scope */ + + /* If the class name is qualified, we need to create or lookup namespace entries */ + if (!inclass) { + (yyvsp[(5) - (9)].str) = resolve_node_scope((yyvsp[(5) - (9)].str)); + } + + /* + We use the new namespace entry 'nscope' only to + emit the template node. The template parameters are + resolved in the current 'tscope'. + + This is closer to the C++ (typedef) behavior. + */ + n = Swig_cparse_template_locate((yyvsp[(5) - (9)].str),(yyvsp[(7) - (9)].p),tscope); + + /* Patch the argument types to respect namespaces */ + p = (yyvsp[(7) - (9)].p); + while (p) { + SwigType *value = Getattr(p,"value"); + if (!value) { + SwigType *ty = Getattr(p,"type"); + if (ty) { + SwigType *rty = 0; + int reduce = template_reduce; + if (reduce || !SwigType_ispointer(ty)) { + rty = Swig_symbol_typedef_reduce(ty,tscope); + if (!reduce) reduce = SwigType_ispointer(rty); + } + ty = reduce ? Swig_symbol_type_qualify(rty,tscope) : Swig_symbol_type_qualify(ty,tscope); + Setattr(p,"type",ty); + Delete(ty); + Delete(rty); + } + } else { + value = Swig_symbol_type_qualify(value,tscope); + Setattr(p,"value",value); + Delete(value); + } + + p = nextSibling(p); + } + + /* Look for the template */ + { + Node *nn = n; + Node *linklistend = 0; + while (nn) { + Node *templnode = 0; + if (Strcmp(nodeType(nn),"template") == 0) { + int nnisclass = (Strcmp(Getattr(nn,"templatetype"),"class") == 0); /* if not a templated class it is a templated function */ + Parm *tparms = Getattr(nn,"templateparms"); + if (!tparms) { + specialized = 1; + } + if (nnisclass && !specialized && ((ParmList_len((yyvsp[(7) - (9)].p)) > ParmList_len(tparms)))) { + Swig_error(cparse_file, cparse_line, "Too many template parameters. Maximum of %d.\n", ParmList_len(tparms)); + } else if (nnisclass && !specialized && ((ParmList_len((yyvsp[(7) - (9)].p)) < ParmList_numrequired(tparms)))) { + Swig_error(cparse_file, cparse_line, "Not enough template parameters specified. %d required.\n", ParmList_numrequired(tparms)); + } else if (!nnisclass && ((ParmList_len((yyvsp[(7) - (9)].p)) != ParmList_len(tparms)))) { + /* must be an overloaded templated method - ignore it as it is overloaded with a different number of template parameters */ + nn = Getattr(nn,"sym:nextSibling"); /* repeat for overloaded templated functions */ + continue; + } else { + String *tname = Copy((yyvsp[(5) - (9)].str)); + int def_supplied = 0; + /* Expand the template */ + Node *templ = Swig_symbol_clookup((yyvsp[(5) - (9)].str),0); + Parm *targs = templ ? Getattr(templ,"templateparms") : 0; + + ParmList *temparms; + if (specialized) temparms = CopyParmList((yyvsp[(7) - (9)].p)); + else temparms = CopyParmList(tparms); + + /* Create typedef's and arguments */ + p = (yyvsp[(7) - (9)].p); + tp = temparms; + if (!p && ParmList_len(p) != ParmList_len(temparms)) { + /* we have no template parameters supplied in %template for a template that has default args*/ + p = tp; + def_supplied = 1; + } + + while (p) { + String *value = Getattr(p,"value"); + if (def_supplied) { + Setattr(p,"default","1"); + } + if (value) { + Setattr(tp,"value",value); + } else { + SwigType *ty = Getattr(p,"type"); + if (ty) { + Setattr(tp,"type",ty); + } + Delattr(tp,"value"); + } + /* fix default arg values */ + if (targs) { + Parm *pi = temparms; + Parm *ti = targs; + String *tv = Getattr(tp,"value"); + if (!tv) tv = Getattr(tp,"type"); + while(pi != tp && ti && pi) { + String *name = Getattr(ti,"name"); + String *value = Getattr(pi,"value"); + if (!value) value = Getattr(pi,"type"); + Replaceid(tv, name, value); + pi = nextSibling(pi); + ti = nextSibling(ti); + } + } + p = nextSibling(p); + tp = nextSibling(tp); + if (!p && tp) { + p = tp; + def_supplied = 1; + } + } + + templnode = copy_node(nn); + /* We need to set the node name based on name used to instantiate */ + Setattr(templnode,"name",tname); + Delete(tname); + if (!specialized) { + Delattr(templnode,"sym:typename"); + } else { + Setattr(templnode,"sym:typename","1"); + } + if ((yyvsp[(3) - (9)].id)) { + /* + Comment this out for 1.3.28. We need to + re-enable it later but first we need to + move %ignore from using %rename to use + %feature(ignore). + + String *symname = Swig_name_make(templnode,0,$3,0,0); + */ + String *symname = (yyvsp[(3) - (9)].id); + Swig_cparse_template_expand(templnode,symname,temparms,tscope); + Setattr(templnode,"sym:name",symname); + } else { + static int cnt = 0; + String *nname = NewStringf("__dummy_%d__", cnt++); + Swig_cparse_template_expand(templnode,nname,temparms,tscope); + Setattr(templnode,"sym:name",nname); + Delete(nname); + Setattr(templnode,"feature:onlychildren", + "typemap,typemapitem,typemapcopy,typedef,types,fragment"); + } + Delattr(templnode,"templatetype"); + Setattr(templnode,"template",nn); + tnode = templnode; + Setfile(templnode,cparse_file); + Setline(templnode,cparse_line); + Delete(temparms); + + add_symbols_copy(templnode); + + if (Strcmp(nodeType(templnode),"class") == 0) { + + /* Identify pure abstract methods */ + Setattr(templnode,"abstract", pure_abstract(firstChild(templnode))); + + /* Set up inheritance in symbol table */ + { + Symtab *csyms; + List *baselist = Getattr(templnode,"baselist"); + csyms = Swig_symbol_current(); + Swig_symbol_setscope(Getattr(templnode,"symtab")); + if (baselist) { + List *bases = make_inherit_list(Getattr(templnode,"name"),baselist); + if (bases) { + Iterator s; + for (s = First(bases); s.item; s = Next(s)) { + Symtab *st = Getattr(s.item,"symtab"); + if (st) { + Setfile(st,Getfile(s.item)); + Setline(st,Getline(s.item)); + Swig_symbol_inherit(st); + } + } + Delete(bases); + } + } + Swig_symbol_setscope(csyms); + } + + /* Merge in addmethods for this class */ + + /* !!! This may be broken. We may have to add the + addmethods at the beginning of the class */ + + if (extendhash) { + String *stmp = 0; + String *clsname; + Node *am; + if (Namespaceprefix) { + clsname = stmp = NewStringf("%s::%s", Namespaceprefix, Getattr(templnode,"name")); + } else { + clsname = Getattr(templnode,"name"); + } + am = Getattr(extendhash,clsname); + if (am) { + Symtab *st = Swig_symbol_current(); + Swig_symbol_setscope(Getattr(templnode,"symtab")); + /* Printf(stdout,"%s: %s %x %x\n", Getattr(templnode,"name"), clsname, Swig_symbol_current(), Getattr(templnode,"symtab")); */ + merge_extensions(templnode,am); + Swig_symbol_setscope(st); + append_previous_extension(templnode,am); + Delattr(extendhash,clsname); + } + if (stmp) Delete(stmp); + } + /* Add to classes hash */ + if (!classes) classes = NewHash(); + + { + if (Namespaceprefix) { + String *temp = NewStringf("%s::%s", Namespaceprefix, Getattr(templnode,"name")); + Setattr(classes,temp,templnode); + Delete(temp); + } else { + String *qs = Swig_symbol_qualifiedscopename(templnode); + Setattr(classes, qs,templnode); + Delete(qs); + } + } + } + } + + /* all the overloaded templated functions are added into a linked list */ + if (nscope_inner) { + /* non-global namespace */ + if (templnode) { + appendChild(nscope_inner,templnode); + Delete(templnode); + if (nscope) (yyval.node) = nscope; + } + } else { + /* global namespace */ + if (!linklistend) { + (yyval.node) = templnode; + } else { + set_nextSibling(linklistend,templnode); + Delete(templnode); + } + linklistend = templnode; + } + } + nn = Getattr(nn,"sym:nextSibling"); /* repeat for overloaded templated functions. If a templated class there will never be a sibling. */ + } + } + Swig_symbol_setscope(tscope); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + break; + + case 112: +#line 2890 "parser.y" + { + Swig_warning(0,cparse_file, cparse_line,"%s\n", (yyvsp[(2) - (2)].id)); + (yyval.node) = 0; + } + break; + + case 113: +#line 2900 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + if ((yyval.node)) { + add_symbols((yyval.node)); + default_arguments((yyval.node)); + } + } + break; + + case 114: +#line 2907 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 115: +#line 2908 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 116: +#line 2912 "parser.y" + { + if (Strcmp((yyvsp[(2) - (3)].id),"C") == 0) { + cparse_externc = 1; + } + } + break; + + case 117: +#line 2916 "parser.y" + { + cparse_externc = 0; + if (Strcmp((yyvsp[(2) - (6)].id),"C") == 0) { + Node *n = firstChild((yyvsp[(5) - (6)].node)); + (yyval.node) = new_node("extern"); + Setattr((yyval.node),"name",(yyvsp[(2) - (6)].id)); + appendChild((yyval.node),n); + while (n) { + SwigType *decl = Getattr(n,"decl"); + if (SwigType_isfunction(decl)) { + Setattr(n,"storage","externc"); + } + n = nextSibling(n); + } + } else { + Swig_warning(WARN_PARSE_UNDEFINED_EXTERN,cparse_file, cparse_line,"Unrecognized extern type \"%s\".\n", (yyvsp[(2) - (6)].id)); + (yyval.node) = new_node("extern"); + Setattr((yyval.node),"name",(yyvsp[(2) - (6)].id)); + appendChild((yyval.node),firstChild((yyvsp[(5) - (6)].node))); + } + } + break; + + case 118: +#line 2943 "parser.y" + { + (yyval.node) = new_node("cdecl"); + if ((yyvsp[(4) - (5)].dtype).qualifier) SwigType_push((yyvsp[(3) - (5)].decl).type,(yyvsp[(4) - (5)].dtype).qualifier); + Setattr((yyval.node),"type",(yyvsp[(2) - (5)].type)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (5)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (5)].decl).id); + Setattr((yyval.node),"decl",(yyvsp[(3) - (5)].decl).type); + Setattr((yyval.node),"parms",(yyvsp[(3) - (5)].decl).parms); + Setattr((yyval.node),"value",(yyvsp[(4) - (5)].dtype).val); + Setattr((yyval.node),"throws",(yyvsp[(4) - (5)].dtype).throws); + Setattr((yyval.node),"throw",(yyvsp[(4) - (5)].dtype).throwf); + if (!(yyvsp[(5) - (5)].node)) { + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + } else { + Node *n = (yyvsp[(5) - (5)].node); + /* Inherit attributes */ + while (n) { + String *type = Copy((yyvsp[(2) - (5)].type)); + Setattr(n,"type",type); + Setattr(n,"storage",(yyvsp[(1) - (5)].id)); + n = nextSibling(n); + Delete(type); + } + } + if ((yyvsp[(4) - (5)].dtype).bitfield) { + Setattr((yyval.node),"bitfield", (yyvsp[(4) - (5)].dtype).bitfield); + } + + /* Look for "::" declarations (ignored) */ + if (Strstr((yyvsp[(3) - (5)].decl).id,"::")) { + /* This is a special case. If the scope name of the declaration exactly + matches that of the declaration, then we will allow it. Otherwise, delete. */ + String *p = Swig_scopename_prefix((yyvsp[(3) - (5)].decl).id); + if (p) { + if ((Namespaceprefix && Strcmp(p,Namespaceprefix) == 0) || + (inclass && Strcmp(p,Classprefix) == 0)) { + String *lstr = Swig_scopename_last((yyvsp[(3) - (5)].decl).id); + Setattr((yyval.node),"name",lstr); + Delete(lstr); + set_nextSibling((yyval.node),(yyvsp[(5) - (5)].node)); + } else { + Delete((yyval.node)); + (yyval.node) = (yyvsp[(5) - (5)].node); + } + Delete(p); + } else { + Delete((yyval.node)); + (yyval.node) = (yyvsp[(5) - (5)].node); + } + } else { + set_nextSibling((yyval.node),(yyvsp[(5) - (5)].node)); + } + } + break; + + case 119: +#line 3004 "parser.y" + { + (yyval.node) = 0; + Clear(scanner_ccode); + } + break; + + case 120: +#line 3008 "parser.y" + { + (yyval.node) = new_node("cdecl"); + if ((yyvsp[(3) - (4)].dtype).qualifier) SwigType_push((yyvsp[(2) - (4)].decl).type,(yyvsp[(3) - (4)].dtype).qualifier); + Setattr((yyval.node),"name",(yyvsp[(2) - (4)].decl).id); + Setattr((yyval.node),"decl",(yyvsp[(2) - (4)].decl).type); + Setattr((yyval.node),"parms",(yyvsp[(2) - (4)].decl).parms); + Setattr((yyval.node),"value",(yyvsp[(3) - (4)].dtype).val); + Setattr((yyval.node),"throws",(yyvsp[(3) - (4)].dtype).throws); + Setattr((yyval.node),"throw",(yyvsp[(3) - (4)].dtype).throwf); + if ((yyvsp[(3) - (4)].dtype).bitfield) { + Setattr((yyval.node),"bitfield", (yyvsp[(3) - (4)].dtype).bitfield); + } + if (!(yyvsp[(4) - (4)].node)) { + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + } else { + set_nextSibling((yyval.node),(yyvsp[(4) - (4)].node)); + } + } + break; + + case 121: +#line 3030 "parser.y" + { + skip_balanced('{','}'); + (yyval.node) = 0; + } + break; + + case 122: +#line 3036 "parser.y" + { + (yyval.dtype) = (yyvsp[(1) - (1)].dtype); + (yyval.dtype).qualifier = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 123: +#line 3042 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (2)].dtype); + (yyval.dtype).qualifier = (yyvsp[(1) - (2)].str); + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 124: +#line 3048 "parser.y" + { + (yyval.dtype) = (yyvsp[(5) - (5)].dtype); + (yyval.dtype).qualifier = 0; + (yyval.dtype).throws = (yyvsp[(3) - (5)].pl); + (yyval.dtype).throwf = NewString("1"); + } + break; + + case 125: +#line 3054 "parser.y" + { + (yyval.dtype) = (yyvsp[(6) - (6)].dtype); + (yyval.dtype).qualifier = (yyvsp[(1) - (6)].str); + (yyval.dtype).throws = (yyvsp[(4) - (6)].pl); + (yyval.dtype).throwf = NewString("1"); + } + break; + + case 126: +#line 3067 "parser.y" + { + SwigType *ty = 0; + (yyval.node) = new_node("enumforward"); + ty = NewStringf("enum %s", (yyvsp[(3) - (4)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (4)].id)); + Setattr((yyval.node),"type",ty); + Setattr((yyval.node),"sym:weak", "1"); + add_symbols((yyval.node)); + } + break; + + case 127: +#line 3082 "parser.y" + { + SwigType *ty = 0; + (yyval.node) = new_node("enum"); + ty = NewStringf("enum %s", (yyvsp[(3) - (7)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (7)].id)); + Setattr((yyval.node),"type",ty); + appendChild((yyval.node),(yyvsp[(5) - (7)].node)); + add_symbols((yyval.node)); /* Add to tag space */ + add_symbols((yyvsp[(5) - (7)].node)); /* Add enum values to id space */ + } + break; + + case 128: +#line 3092 "parser.y" + { + Node *n; + SwigType *ty = 0; + String *unnamed = 0; + int unnamedinstance = 0; + + (yyval.node) = new_node("enum"); + if ((yyvsp[(3) - (8)].id)) { + Setattr((yyval.node),"name",(yyvsp[(3) - (8)].id)); + ty = NewStringf("enum %s", (yyvsp[(3) - (8)].id)); + } else if ((yyvsp[(7) - (8)].decl).id) { + unnamed = make_unnamed(); + ty = NewStringf("enum %s", unnamed); + Setattr((yyval.node),"unnamed",unnamed); + /* name is not set for unnamed enum instances, e.g. enum { foo } Instance; */ + if ((yyvsp[(1) - (8)].id) && Cmp((yyvsp[(1) - (8)].id),"typedef") == 0) { + Setattr((yyval.node),"name",(yyvsp[(7) - (8)].decl).id); + } else { + unnamedinstance = 1; + } + Setattr((yyval.node),"storage",(yyvsp[(1) - (8)].id)); + } + if ((yyvsp[(7) - (8)].decl).id && Cmp((yyvsp[(1) - (8)].id),"typedef") == 0) { + Setattr((yyval.node),"tdname",(yyvsp[(7) - (8)].decl).id); + Setattr((yyval.node),"allows_typedef","1"); + } + appendChild((yyval.node),(yyvsp[(5) - (8)].node)); + n = new_node("cdecl"); + Setattr(n,"type",ty); + Setattr(n,"name",(yyvsp[(7) - (8)].decl).id); + Setattr(n,"storage",(yyvsp[(1) - (8)].id)); + Setattr(n,"decl",(yyvsp[(7) - (8)].decl).type); + Setattr(n,"parms",(yyvsp[(7) - (8)].decl).parms); + Setattr(n,"unnamed",unnamed); + + if (unnamedinstance) { + SwigType *cty = NewString("enum "); + Setattr((yyval.node),"type",cty); + Setattr((yyval.node),"unnamedinstance","1"); + Setattr(n,"unnamedinstance","1"); + Delete(cty); + } + if ((yyvsp[(8) - (8)].node)) { + Node *p = (yyvsp[(8) - (8)].node); + set_nextSibling(n,p); + while (p) { + SwigType *cty = Copy(ty); + Setattr(p,"type",cty); + Setattr(p,"unnamed",unnamed); + Setattr(p,"storage",(yyvsp[(1) - (8)].id)); + Delete(cty); + p = nextSibling(p); + } + } else { + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr(n,"code",code); + Delete(code); + } + } + + /* Ensure that typedef enum ABC {foo} XYZ; uses XYZ for sym:name, like structs. + * Note that class_rename/yyrename are bit of a mess so used this simple approach to change the name. */ + if ((yyvsp[(7) - (8)].decl).id && (yyvsp[(3) - (8)].id) && Cmp((yyvsp[(1) - (8)].id),"typedef") == 0) { + String *name = NewString((yyvsp[(7) - (8)].decl).id); + Setattr((yyval.node), "parser:makename", name); + Delete(name); + } + + add_symbols((yyval.node)); /* Add enum to tag space */ + set_nextSibling((yyval.node),n); + Delete(n); + add_symbols((yyvsp[(5) - (8)].node)); /* Add enum values to id space */ + add_symbols(n); + Delete(unnamed); + } + break; + + case 129: +#line 3170 "parser.y" + { + /* This is a sick hack. If the ctor_end has parameters, + and the parms parameter only has 1 parameter, this + could be a declaration of the form: + + type (id)(parms) + + Otherwise it's an error. */ + int err = 0; + (yyval.node) = 0; + + if ((ParmList_len((yyvsp[(4) - (6)].pl)) == 1) && (!Swig_scopename_check((yyvsp[(2) - (6)].type)))) { + SwigType *ty = Getattr((yyvsp[(4) - (6)].pl),"type"); + String *name = Getattr((yyvsp[(4) - (6)].pl),"name"); + err = 1; + if (!name) { + (yyval.node) = new_node("cdecl"); + Setattr((yyval.node),"type",(yyvsp[(2) - (6)].type)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (6)].id)); + Setattr((yyval.node),"name",ty); + + if ((yyvsp[(6) - (6)].decl).have_parms) { + SwigType *decl = NewStringEmpty(); + SwigType_add_function(decl,(yyvsp[(6) - (6)].decl).parms); + Setattr((yyval.node),"decl",decl); + Setattr((yyval.node),"parms",(yyvsp[(6) - (6)].decl).parms); + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + } + if ((yyvsp[(6) - (6)].decl).defarg) { + Setattr((yyval.node),"value",(yyvsp[(6) - (6)].decl).defarg); + } + Setattr((yyval.node),"throws",(yyvsp[(6) - (6)].decl).throws); + Setattr((yyval.node),"throw",(yyvsp[(6) - (6)].decl).throwf); + err = 0; + } + } + if (err) { + Swig_error(cparse_file,cparse_line,"Syntax error in input(2).\n"); + exit(1); + } + } + break; + + case 130: +#line 3221 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 131: +#line 3222 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 132: +#line 3223 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 133: +#line 3224 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 134: +#line 3225 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 135: +#line 3226 "parser.y" + { (yyval.node) = 0; } + break; + + case 136: +#line 3232 "parser.y" + { + List *bases = 0; + Node *scope = 0; + (yyval.node) = new_node("class"); + Setline((yyval.node),cparse_start_line); + Setattr((yyval.node),"kind",(yyvsp[(2) - (5)].id)); + if ((yyvsp[(4) - (5)].bases)) { + Setattr((yyval.node),"baselist", Getattr((yyvsp[(4) - (5)].bases),"public")); + Setattr((yyval.node),"protectedbaselist", Getattr((yyvsp[(4) - (5)].bases),"protected")); + Setattr((yyval.node),"privatebaselist", Getattr((yyvsp[(4) - (5)].bases),"private")); + } + Setattr((yyval.node),"allows_typedef","1"); + + /* preserve the current scope */ + prev_symtab = Swig_symbol_current(); + + /* If the class name is qualified. We need to create or lookup namespace/scope entries */ + scope = resolve_node_scope((yyvsp[(3) - (5)].str)); + Setfile(scope,cparse_file); + Setline(scope,cparse_line); + (yyvsp[(3) - (5)].str) = scope; + + /* support for old nested classes "pseudo" support, such as: + + %rename(Ala__Ola) Ala::Ola; + class Ala::Ola { + public: + Ola() {} + }; + + this should disappear when a proper implementation is added. + */ + if (nscope_inner && Strcmp(nodeType(nscope_inner),"namespace") != 0) { + if (Namespaceprefix) { + String *name = NewStringf("%s::%s", Namespaceprefix, (yyvsp[(3) - (5)].str)); + (yyvsp[(3) - (5)].str) = name; + Namespaceprefix = 0; + nscope_inner = 0; + } + } + Setattr((yyval.node),"name",(yyvsp[(3) - (5)].str)); + + Delete(class_rename); + class_rename = make_name((yyval.node),(yyvsp[(3) - (5)].str),0); + Classprefix = NewString((yyvsp[(3) - (5)].str)); + /* Deal with inheritance */ + if ((yyvsp[(4) - (5)].bases)) { + bases = make_inherit_list((yyvsp[(3) - (5)].str),Getattr((yyvsp[(4) - (5)].bases),"public")); + } + if (SwigType_istemplate((yyvsp[(3) - (5)].str))) { + String *fbase, *tbase, *prefix; + prefix = SwigType_templateprefix((yyvsp[(3) - (5)].str)); + if (Namespaceprefix) { + fbase = NewStringf("%s::%s", Namespaceprefix,(yyvsp[(3) - (5)].str)); + tbase = NewStringf("%s::%s", Namespaceprefix, prefix); + } else { + fbase = Copy((yyvsp[(3) - (5)].str)); + tbase = Copy(prefix); + } + Swig_name_inherit(tbase,fbase); + Delete(fbase); + Delete(tbase); + Delete(prefix); + } + if (strcmp((yyvsp[(2) - (5)].id),"class") == 0) { + cplus_mode = CPLUS_PRIVATE; + } else { + cplus_mode = CPLUS_PUBLIC; + } + Swig_symbol_newscope(); + Swig_symbol_setscopename((yyvsp[(3) - (5)].str)); + if (bases) { + Iterator s; + for (s = First(bases); s.item; s = Next(s)) { + Symtab *st = Getattr(s.item,"symtab"); + if (st) { + Setfile(st,Getfile(s.item)); + Setline(st,Getline(s.item)); + Swig_symbol_inherit(st); + } + } + Delete(bases); + } + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + cparse_start_line = cparse_line; + + /* If there are active template parameters, we need to make sure they are + placed in the class symbol table so we can catch shadows */ + + if (template_parameters) { + Parm *tp = template_parameters; + while(tp) { + String *tpname = Copy(Getattr(tp,"name")); + Node *tn = new_node("templateparm"); + Setattr(tn,"name",tpname); + Swig_symbol_cadd(tpname,tn); + tp = nextSibling(tp); + Delete(tpname); + } + } + if (class_level >= max_class_levels) { + if (!max_class_levels) { + max_class_levels = 16; + } else { + max_class_levels *= 2; + } + class_decl = (Node**) realloc(class_decl, sizeof(Node*) * max_class_levels); + if (!class_decl) { + Swig_error(cparse_file, cparse_line, "realloc() failed\n"); + } + } + class_decl[class_level++] = (yyval.node); + inclass = 1; + } + break; + + case 137: +#line 3346 "parser.y" + { + Node *p; + SwigType *ty; + Symtab *cscope = prev_symtab; + Node *am = 0; + String *scpname = 0; + (yyval.node) = class_decl[--class_level]; + inclass = 0; + + /* Check for pure-abstract class */ + Setattr((yyval.node),"abstract", pure_abstract((yyvsp[(7) - (9)].node))); + + /* This bit of code merges in a previously defined %extend directive (if any) */ + + if (extendhash) { + String *clsname = Swig_symbol_qualifiedscopename(0); + am = Getattr(extendhash,clsname); + if (am) { + merge_extensions((yyval.node),am); + Delattr(extendhash,clsname); + } + Delete(clsname); + } + if (!classes) classes = NewHash(); + scpname = Swig_symbol_qualifiedscopename(0); + Setattr(classes,scpname,(yyval.node)); + Delete(scpname); + + appendChild((yyval.node),(yyvsp[(7) - (9)].node)); + + if (am) append_previous_extension((yyval.node),am); + + p = (yyvsp[(9) - (9)].node); + if (p) { + set_nextSibling((yyval.node),p); + } + + if (cparse_cplusplus && !cparse_externc) { + ty = NewString((yyvsp[(3) - (9)].str)); + } else { + ty = NewStringf("%s %s", (yyvsp[(2) - (9)].id),(yyvsp[(3) - (9)].str)); + } + while (p) { + Setattr(p,"storage",(yyvsp[(1) - (9)].id)); + Setattr(p,"type",ty); + p = nextSibling(p); + } + /* Dump nested classes */ + { + String *name = (yyvsp[(3) - (9)].str); + if ((yyvsp[(9) - (9)].node)) { + SwigType *decltype = Getattr((yyvsp[(9) - (9)].node),"decl"); + if (Cmp((yyvsp[(1) - (9)].id),"typedef") == 0) { + if (!decltype || !Len(decltype)) { + String *cname; + name = Getattr((yyvsp[(9) - (9)].node),"name"); + cname = Copy(name); + Setattr((yyval.node),"tdname",cname); + Delete(cname); + + /* Use typedef name as class name */ + if (class_rename && (Strcmp(class_rename,(yyvsp[(3) - (9)].str)) == 0)) { + Delete(class_rename); + class_rename = NewString(name); + } + if (!Getattr(classes,name)) { + Setattr(classes,name,(yyval.node)); + } + Setattr((yyval.node),"decl",decltype); + } + } + } + appendChild((yyval.node),dump_nested(Char(name))); + } + + if (cplus_mode != CPLUS_PUBLIC) { + /* we 'open' the class at the end, to allow %template + to add new members */ + Node *pa = new_node("access"); + Setattr(pa,"kind","public"); + cplus_mode = CPLUS_PUBLIC; + appendChild((yyval.node),pa); + Delete(pa); + } + + Setattr((yyval.node),"symtab",Swig_symbol_popscope()); + + Classprefix = 0; + if (nscope_inner) { + /* this is tricky */ + /* we add the declaration in the original namespace */ + appendChild(nscope_inner,(yyval.node)); + Swig_symbol_setscope(Getattr(nscope_inner,"symtab")); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + add_symbols((yyval.node)); + if (nscope) (yyval.node) = nscope; + /* but the variable definition in the current scope */ + Swig_symbol_setscope(cscope); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + add_symbols((yyvsp[(9) - (9)].node)); + } else { + Delete(yyrename); + yyrename = Copy(class_rename); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + + add_symbols((yyval.node)); + add_symbols((yyvsp[(9) - (9)].node)); + } + Swig_symbol_setscope(cscope); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + break; + + case 138: +#line 3464 "parser.y" + { + String *unnamed; + unnamed = make_unnamed(); + (yyval.node) = new_node("class"); + Setline((yyval.node),cparse_start_line); + Setattr((yyval.node),"kind",(yyvsp[(2) - (3)].id)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (3)].id)); + Setattr((yyval.node),"unnamed",unnamed); + Setattr((yyval.node),"allows_typedef","1"); + Delete(class_rename); + class_rename = make_name((yyval.node),0,0); + if (strcmp((yyvsp[(2) - (3)].id),"class") == 0) { + cplus_mode = CPLUS_PRIVATE; + } else { + cplus_mode = CPLUS_PUBLIC; + } + Swig_symbol_newscope(); + cparse_start_line = cparse_line; + if (class_level >= max_class_levels) { + if (!max_class_levels) { + max_class_levels = 16; + } else { + max_class_levels *= 2; + } + class_decl = (Node**) realloc(class_decl, sizeof(Node*) * max_class_levels); + if (!class_decl) { + Swig_error(cparse_file, cparse_line, "realloc() failed\n"); + } + } + class_decl[class_level++] = (yyval.node); + inclass = 1; + Classprefix = NewStringEmpty(); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + break; + + case 139: +#line 3498 "parser.y" + { + String *unnamed; + Node *n; + Classprefix = 0; + (yyval.node) = class_decl[--class_level]; + inclass = 0; + unnamed = Getattr((yyval.node),"unnamed"); + + /* Check for pure-abstract class */ + Setattr((yyval.node),"abstract", pure_abstract((yyvsp[(5) - (8)].node))); + + n = new_node("cdecl"); + Setattr(n,"name",(yyvsp[(7) - (8)].decl).id); + Setattr(n,"unnamed",unnamed); + Setattr(n,"type",unnamed); + Setattr(n,"decl",(yyvsp[(7) - (8)].decl).type); + Setattr(n,"parms",(yyvsp[(7) - (8)].decl).parms); + Setattr(n,"storage",(yyvsp[(1) - (8)].id)); + if ((yyvsp[(8) - (8)].node)) { + Node *p = (yyvsp[(8) - (8)].node); + set_nextSibling(n,p); + while (p) { + String *type = Copy(unnamed); + Setattr(p,"name",(yyvsp[(7) - (8)].decl).id); + Setattr(p,"unnamed",unnamed); + Setattr(p,"type",type); + Delete(type); + Setattr(p,"storage",(yyvsp[(1) - (8)].id)); + p = nextSibling(p); + } + } + set_nextSibling((yyval.node),n); + Delete(n); + { + /* If a proper typedef name was given, we'll use it to set the scope name */ + String *name = 0; + if ((yyvsp[(1) - (8)].id) && (strcmp((yyvsp[(1) - (8)].id),"typedef") == 0)) { + if (!Len((yyvsp[(7) - (8)].decl).type)) { + String *scpname = 0; + name = (yyvsp[(7) - (8)].decl).id; + Setattr((yyval.node),"tdname",name); + Setattr((yyval.node),"name",name); + Swig_symbol_setscopename(name); + + /* If a proper name was given, we use that as the typedef, not unnamed */ + Clear(unnamed); + Append(unnamed, name); + + n = nextSibling(n); + set_nextSibling((yyval.node),n); + + /* Check for previous extensions */ + if (extendhash) { + String *clsname = Swig_symbol_qualifiedscopename(0); + Node *am = Getattr(extendhash,clsname); + if (am) { + /* Merge the extension into the symbol table */ + merge_extensions((yyval.node),am); + append_previous_extension((yyval.node),am); + Delattr(extendhash,clsname); + } + Delete(clsname); + } + if (!classes) classes = NewHash(); + scpname = Swig_symbol_qualifiedscopename(0); + Setattr(classes,scpname,(yyval.node)); + Delete(scpname); + } else { + Swig_symbol_setscopename((char*)"<unnamed>"); + } + } + appendChild((yyval.node),(yyvsp[(5) - (8)].node)); + appendChild((yyval.node),dump_nested(Char(name))); + } + /* Pop the scope */ + Setattr((yyval.node),"symtab",Swig_symbol_popscope()); + if (class_rename) { + Delete(yyrename); + yyrename = NewString(class_rename); + } + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + add_symbols((yyval.node)); + add_symbols(n); + Delete(unnamed); + } + break; + + case 140: +#line 3586 "parser.y" + { (yyval.node) = 0; } + break; + + case 141: +#line 3587 "parser.y" + { + (yyval.node) = new_node("cdecl"); + Setattr((yyval.node),"name",(yyvsp[(1) - (2)].decl).id); + Setattr((yyval.node),"decl",(yyvsp[(1) - (2)].decl).type); + Setattr((yyval.node),"parms",(yyvsp[(1) - (2)].decl).parms); + set_nextSibling((yyval.node),(yyvsp[(2) - (2)].node)); + } + break; + + case 142: +#line 3599 "parser.y" + { + if ((yyvsp[(1) - (4)].id) && (Strcmp((yyvsp[(1) - (4)].id),"friend") == 0)) { + /* Ignore */ + (yyval.node) = 0; + } else { + (yyval.node) = new_node("classforward"); + Setfile((yyval.node),cparse_file); + Setline((yyval.node),cparse_line); + Setattr((yyval.node),"kind",(yyvsp[(2) - (4)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (4)].str)); + Setattr((yyval.node),"sym:weak", "1"); + add_symbols((yyval.node)); + } + } + break; + + case 143: +#line 3619 "parser.y" + { template_parameters = (yyvsp[(3) - (4)].tparms); } + break; + + case 144: +#line 3619 "parser.y" + { + String *tname = 0; + int error = 0; + + /* check if we get a namespace node with a class declaration, and retrieve the class */ + Symtab *cscope = Swig_symbol_current(); + Symtab *sti = 0; + Node *ntop = (yyvsp[(6) - (6)].node); + Node *ni = ntop; + SwigType *ntype = ni ? nodeType(ni) : 0; + while (ni && Strcmp(ntype,"namespace") == 0) { + sti = Getattr(ni,"symtab"); + ni = firstChild(ni); + ntype = nodeType(ni); + } + if (sti) { + Swig_symbol_setscope(sti); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + (yyvsp[(6) - (6)].node) = ni; + } + + template_parameters = 0; + (yyval.node) = (yyvsp[(6) - (6)].node); + if ((yyval.node)) tname = Getattr((yyval.node),"name"); + + /* Check if the class is a template specialization */ + if (((yyval.node)) && (Strchr(tname,'<')) && (!is_operator(tname))) { + /* If a specialization. Check if defined. */ + Node *tempn = 0; + { + String *tbase = SwigType_templateprefix(tname); + tempn = Swig_symbol_clookup_local(tbase,0); + if (!tempn || (Strcmp(nodeType(tempn),"template") != 0)) { + SWIG_WARN_NODE_BEGIN(tempn); + Swig_warning(WARN_PARSE_TEMPLATE_SP_UNDEF, Getfile((yyval.node)),Getline((yyval.node)),"Specialization of non-template '%s'.\n", tbase); + SWIG_WARN_NODE_END(tempn); + tempn = 0; + error = 1; + } + Delete(tbase); + } + Setattr((yyval.node),"specialization","1"); + Setattr((yyval.node),"templatetype",nodeType((yyval.node))); + set_nodeType((yyval.node),"template"); + /* Template partial specialization */ + if (tempn && ((yyvsp[(3) - (6)].tparms)) && ((yyvsp[(6) - (6)].node))) { + List *tlist; + String *targs = SwigType_templateargs(tname); + tlist = SwigType_parmlist(targs); + /* Printf(stdout,"targs = '%s' %s\n", targs, tlist); */ + if (!Getattr((yyval.node),"sym:weak")) { + Setattr((yyval.node),"sym:typename","1"); + } + + if (Len(tlist) != ParmList_len(Getattr(tempn,"templateparms"))) { + Swig_error(Getfile((yyval.node)),Getline((yyval.node)),"Inconsistent argument count in template partial specialization. %d %d\n", Len(tlist), ParmList_len(Getattr(tempn,"templateparms"))); + + } else { + + /* This code builds the argument list for the partial template + specialization. This is a little hairy, but the idea is as + follows: + + $3 contains a list of arguments supplied for the template. + For example template<class T>. + + tlist is a list of the specialization arguments--which may be + different. For example class<int,T>. + + tp is a copy of the arguments in the original template definition. + + The patching algorithm walks through the list of supplied + arguments ($3), finds the position in the specialization arguments + (tlist), and then patches the name in the argument list of the + original template. + */ + + { + String *pn; + Parm *p, *p1; + int i, nargs; + Parm *tp = CopyParmList(Getattr(tempn,"templateparms")); + nargs = Len(tlist); + p = (yyvsp[(3) - (6)].tparms); + while (p) { + for (i = 0; i < nargs; i++){ + pn = Getattr(p,"name"); + if (Strcmp(pn,SwigType_base(Getitem(tlist,i))) == 0) { + int j; + Parm *p1 = tp; + for (j = 0; j < i; j++) { + p1 = nextSibling(p1); + } + Setattr(p1,"name",pn); + Setattr(p1,"partialarg","1"); + } + } + p = nextSibling(p); + } + p1 = tp; + i = 0; + while (p1) { + if (!Getattr(p1,"partialarg")) { + Delattr(p1,"name"); + Setattr(p1,"type", Getitem(tlist,i)); + } + i++; + p1 = nextSibling(p1); + } + Setattr((yyval.node),"templateparms",tp); + Delete(tp); + } +#if 0 + /* Patch the parameter list */ + if (tempn) { + Parm *p,*p1; + ParmList *tp = CopyParmList(Getattr(tempn,"templateparms")); + p = (yyvsp[(3) - (6)].tparms); + p1 = tp; + while (p && p1) { + String *pn = Getattr(p,"name"); + Printf(stdout,"pn = '%s'\n", pn); + if (pn) Setattr(p1,"name",pn); + else Delattr(p1,"name"); + pn = Getattr(p,"type"); + if (pn) Setattr(p1,"type",pn); + p = nextSibling(p); + p1 = nextSibling(p1); + } + Setattr((yyval.node),"templateparms",tp); + Delete(tp); + } else { + Setattr((yyval.node),"templateparms",(yyvsp[(3) - (6)].tparms)); + } +#endif + Delattr((yyval.node),"specialization"); + Setattr((yyval.node),"partialspecialization","1"); + /* Create a specialized name for matching */ + { + Parm *p = (yyvsp[(3) - (6)].tparms); + String *fname = NewString(Getattr((yyval.node),"name")); + String *ffname = 0; + + char tmp[32]; + int i, ilen; + while (p) { + String *n = Getattr(p,"name"); + if (!n) { + p = nextSibling(p); + continue; + } + ilen = Len(tlist); + for (i = 0; i < ilen; i++) { + if (Strstr(Getitem(tlist,i),n)) { + sprintf(tmp,"$%d",i+1); + Replaceid(fname,n,tmp); + } + } + p = nextSibling(p); + } + /* Patch argument names with typedef */ + { + Iterator tt; + List *tparms = SwigType_parmlist(fname); + ffname = SwigType_templateprefix(fname); + Append(ffname,"<("); + for (tt = First(tparms); tt.item; ) { + SwigType *rtt = Swig_symbol_typedef_reduce(tt.item,0); + SwigType *ttr = Swig_symbol_type_qualify(rtt,0); + Append(ffname,ttr); + tt = Next(tt); + if (tt.item) Putc(',',ffname); + Delete(rtt); + Delete(ttr); + } + Delete(tparms); + Append(ffname,")>"); + } + { + String *partials = Getattr(tempn,"partials"); + if (!partials) { + partials = NewList(); + Setattr(tempn,"partials",partials); + Delete(partials); + } + /* Printf(stdout,"partial: fname = '%s', '%s'\n", fname, Swig_symbol_typedef_reduce(fname,0)); */ + Append(partials,ffname); + } + Setattr((yyval.node),"partialargs",ffname); + Swig_symbol_cadd(ffname,(yyval.node)); + } + } + Delete(tlist); + Delete(targs); + } else { + /* Need to resolve exact specialization name */ + /* add default args from generic template */ + String *ty = Swig_symbol_template_deftype(tname,0); + String *fname = Swig_symbol_type_qualify(ty,0); + Swig_symbol_cadd(fname,(yyval.node)); + Delete(ty); + Delete(fname); + } + } else if ((yyval.node)) { + Setattr((yyval.node),"templatetype",nodeType((yyvsp[(6) - (6)].node))); + set_nodeType((yyval.node),"template"); + Setattr((yyval.node),"templateparms", (yyvsp[(3) - (6)].tparms)); + if (!Getattr((yyval.node),"sym:weak")) { + Setattr((yyval.node),"sym:typename","1"); + } + add_symbols((yyval.node)); + default_arguments((yyval.node)); + /* We also place a fully parameterized version in the symbol table */ + { + Parm *p; + String *fname = NewStringf("%s<(", Getattr((yyval.node),"name")); + p = (yyvsp[(3) - (6)].tparms); + while (p) { + String *n = Getattr(p,"name"); + if (!n) n = Getattr(p,"type"); + Append(fname,n); + p = nextSibling(p); + if (p) Putc(',',fname); + } + Append(fname,")>"); + Swig_symbol_cadd(fname,(yyval.node)); + } + } + (yyval.node) = ntop; + Swig_symbol_setscope(cscope); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + if (error) (yyval.node) = 0; + } + break; + + case 145: +#line 3854 "parser.y" + { + Swig_warning(WARN_PARSE_EXPLICIT_TEMPLATE, cparse_file, cparse_line, "Explicit template instantiation ignored.\n"); + (yyval.node) = 0; + } + break; + + case 146: +#line 3860 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 147: +#line 3863 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 148: +#line 3866 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 149: +#line 3869 "parser.y" + { + (yyval.node) = 0; + } + break; + + case 150: +#line 3872 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 151: +#line 3875 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + } + break; + + case 152: +#line 3880 "parser.y" + { + /* Rip out the parameter names */ + Parm *p = (yyvsp[(1) - (1)].pl); + (yyval.tparms) = (yyvsp[(1) - (1)].pl); + + while (p) { + String *name = Getattr(p,"name"); + if (!name) { + /* Hmmm. Maybe it's a 'class T' parameter */ + char *type = Char(Getattr(p,"type")); + /* Template template parameter */ + if (strncmp(type,"template<class> ",16) == 0) { + type += 16; + } + if ((strncmp(type,"class ",6) == 0) || (strncmp(type,"typename ", 9) == 0)) { + char *t = strchr(type,' '); + Setattr(p,"name", t+1); + } else { + /* + Swig_error(cparse_file, cparse_line, "Missing template parameter name\n"); + $$.rparms = 0; + $$.parms = 0; + break; */ + } + } + p = nextSibling(p); + } + } + break; + + case 153: +#line 3910 "parser.y" + { + set_nextSibling((yyvsp[(1) - (2)].p),(yyvsp[(2) - (2)].pl)); + (yyval.pl) = (yyvsp[(1) - (2)].p); + } + break; + + case 154: +#line 3914 "parser.y" + { (yyval.pl) = 0; } + break; + + case 155: +#line 3917 "parser.y" + { + (yyval.p) = NewParm(NewString((yyvsp[(1) - (1)].id)), 0); + } + break; + + case 156: +#line 3920 "parser.y" + { + (yyval.p) = (yyvsp[(1) - (1)].p); + } + break; + + case 157: +#line 3925 "parser.y" + { + set_nextSibling((yyvsp[(2) - (3)].p),(yyvsp[(3) - (3)].pl)); + (yyval.pl) = (yyvsp[(2) - (3)].p); + } + break; + + case 158: +#line 3929 "parser.y" + { (yyval.pl) = 0; } + break; + + case 159: +#line 3934 "parser.y" + { + String *uname = Swig_symbol_type_qualify((yyvsp[(2) - (3)].str),0); + String *name = Swig_scopename_last((yyvsp[(2) - (3)].str)); + (yyval.node) = new_node("using"); + Setattr((yyval.node),"uname",uname); + Setattr((yyval.node),"name", name); + Delete(uname); + Delete(name); + add_symbols((yyval.node)); + } + break; + + case 160: +#line 3944 "parser.y" + { + Node *n = Swig_symbol_clookup((yyvsp[(3) - (4)].str),0); + if (!n) { + Swig_error(cparse_file, cparse_line, "Nothing known about namespace '%s'\n", (yyvsp[(3) - (4)].str)); + (yyval.node) = 0; + } else { + + while (Strcmp(nodeType(n),"using") == 0) { + n = Getattr(n,"node"); + } + if (n) { + if (Strcmp(nodeType(n),"namespace") == 0) { + Symtab *current = Swig_symbol_current(); + Symtab *symtab = Getattr(n,"symtab"); + (yyval.node) = new_node("using"); + Setattr((yyval.node),"node",n); + Setattr((yyval.node),"namespace", (yyvsp[(3) - (4)].str)); + if (current != symtab) { + Swig_symbol_inherit(symtab); + } + } else { + Swig_error(cparse_file, cparse_line, "'%s' is not a namespace.\n", (yyvsp[(3) - (4)].str)); + (yyval.node) = 0; + } + } else { + (yyval.node) = 0; + } + } + } + break; + + case 161: +#line 3975 "parser.y" + { + Hash *h; + (yyvsp[(1) - (3)].node) = Swig_symbol_current(); + h = Swig_symbol_clookup((yyvsp[(2) - (3)].str),0); + if (h && ((yyvsp[(1) - (3)].node) == Getattr(h,"sym:symtab")) && (Strcmp(nodeType(h),"namespace") == 0)) { + if (Getattr(h,"alias")) { + h = Getattr(h,"namespace"); + Swig_warning(WARN_PARSE_NAMESPACE_ALIAS, cparse_file, cparse_line, "Namespace alias '%s' not allowed here. Assuming '%s'\n", + (yyvsp[(2) - (3)].str), Getattr(h,"name")); + (yyvsp[(2) - (3)].str) = Getattr(h,"name"); + } + Swig_symbol_setscope(Getattr(h,"symtab")); + } else { + Swig_symbol_newscope(); + Swig_symbol_setscopename((yyvsp[(2) - (3)].str)); + } + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + } + break; + + case 162: +#line 3993 "parser.y" + { + Node *n = (yyvsp[(5) - (6)].node); + set_nodeType(n,"namespace"); + Setattr(n,"name",(yyvsp[(2) - (6)].str)); + Setattr(n,"symtab", Swig_symbol_popscope()); + Swig_symbol_setscope((yyvsp[(1) - (6)].node)); + (yyval.node) = n; + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + add_symbols((yyval.node)); + } + break; + + case 163: +#line 4004 "parser.y" + { + Hash *h; + (yyvsp[(1) - (2)].node) = Swig_symbol_current(); + h = Swig_symbol_clookup((char *)" ",0); + if (h && (Strcmp(nodeType(h),"namespace") == 0)) { + Swig_symbol_setscope(Getattr(h,"symtab")); + } else { + Swig_symbol_newscope(); + /* we don't use "__unnamed__", but a long 'empty' name */ + Swig_symbol_setscopename(" "); + } + Namespaceprefix = 0; + } + break; + + case 164: +#line 4016 "parser.y" + { + (yyval.node) = (yyvsp[(4) - (5)].node); + set_nodeType((yyval.node),"namespace"); + Setattr((yyval.node),"unnamed","1"); + Setattr((yyval.node),"symtab", Swig_symbol_popscope()); + Swig_symbol_setscope((yyvsp[(1) - (5)].node)); + Delete(Namespaceprefix); + Namespaceprefix = Swig_symbol_qualifiedscopename(0); + add_symbols((yyval.node)); + } + break; + + case 165: +#line 4026 "parser.y" + { + /* Namespace alias */ + Node *n; + (yyval.node) = new_node("namespace"); + Setattr((yyval.node),"name",(yyvsp[(2) - (5)].id)); + Setattr((yyval.node),"alias",(yyvsp[(4) - (5)].str)); + n = Swig_symbol_clookup((yyvsp[(4) - (5)].str),0); + if (!n) { + Swig_error(cparse_file, cparse_line, "Unknown namespace '%s'\n", (yyvsp[(4) - (5)].str)); + (yyval.node) = 0; + } else { + if (Strcmp(nodeType(n),"namespace") != 0) { + Swig_error(cparse_file, cparse_line, "'%s' is not a namespace\n",(yyvsp[(4) - (5)].str)); + (yyval.node) = 0; + } else { + while (Getattr(n,"alias")) { + n = Getattr(n,"namespace"); + } + Setattr((yyval.node),"namespace",n); + add_symbols((yyval.node)); + /* Set up a scope alias */ + Swig_symbol_alias((yyvsp[(2) - (5)].id),Getattr(n,"symtab")); + } + } + } + break; + + case 166: +#line 4053 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (2)].node); + /* Insert cpp_member (including any siblings) to the front of the cpp_members linked list */ + if ((yyval.node)) { + Node *p = (yyval.node); + Node *pp =0; + while (p) { + pp = p; + p = nextSibling(p); + } + set_nextSibling(pp,(yyvsp[(2) - (2)].node)); + } else { + (yyval.node) = (yyvsp[(2) - (2)].node); + } + } + break; + + case 167: +#line 4068 "parser.y" + { + if (cplus_mode != CPLUS_PUBLIC) { + Swig_error(cparse_file,cparse_line,"%%extend can only be used in a public section\n"); + } + } + break; + + case 168: +#line 4072 "parser.y" + { + (yyval.node) = new_node("extend"); + tag_nodes((yyvsp[(4) - (6)].node),"feature:extend",(char*) "1"); + appendChild((yyval.node),(yyvsp[(4) - (6)].node)); + set_nextSibling((yyval.node),(yyvsp[(6) - (6)].node)); + } + break; + + case 169: +#line 4078 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 170: +#line 4079 "parser.y" + { (yyval.node) = 0;} + break; + + case 171: +#line 4080 "parser.y" + { + int start_line = cparse_line; + skip_decl(); + Swig_error(cparse_file,start_line,"Syntax error in input(3).\n"); + exit(1); + } + break; + + case 172: +#line 4085 "parser.y" + { + (yyval.node) = (yyvsp[(3) - (3)].node); + } + break; + + case 173: +#line 4096 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 174: +#line 4097 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + if (extendmode) { + String *symname; + symname= make_name((yyval.node),Getattr((yyval.node),"name"), Getattr((yyval.node),"decl")); + if (Strcmp(symname,Getattr((yyval.node),"name")) == 0) { + /* No renaming operation. Set name to class name */ + Delete(yyrename); + yyrename = NewString(Getattr(current_class,"sym:name")); + } else { + Delete(yyrename); + yyrename = symname; + } + } + add_symbols((yyval.node)); + default_arguments((yyval.node)); + } + break; + + case 175: +#line 4114 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 176: +#line 4115 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 177: +#line 4116 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 178: +#line 4117 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 179: +#line 4118 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 180: +#line 4119 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 181: +#line 4120 "parser.y" + { (yyval.node) = 0; } + break; + + case 182: +#line 4121 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 183: +#line 4122 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 184: +#line 4123 "parser.y" + { (yyval.node) = 0; } + break; + + case 185: +#line 4124 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 186: +#line 4125 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 187: +#line 4126 "parser.y" + { (yyval.node) = 0; } + break; + + case 188: +#line 4127 "parser.y" + {(yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 189: +#line 4128 "parser.y" + {(yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 190: +#line 4129 "parser.y" + { (yyval.node) = 0; } + break; + + case 191: +#line 4138 "parser.y" + { + if (Classprefix) { + SwigType *decl = NewStringEmpty(); + (yyval.node) = new_node("constructor"); + Setattr((yyval.node),"storage",(yyvsp[(1) - (6)].id)); + Setattr((yyval.node),"name",(yyvsp[(2) - (6)].type)); + Setattr((yyval.node),"parms",(yyvsp[(4) - (6)].pl)); + SwigType_add_function(decl,(yyvsp[(4) - (6)].pl)); + Setattr((yyval.node),"decl",decl); + Setattr((yyval.node),"throws",(yyvsp[(6) - (6)].decl).throws); + Setattr((yyval.node),"throw",(yyvsp[(6) - (6)].decl).throwf); + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + SetFlag((yyval.node),"feature:new"); + } else { + (yyval.node) = 0; + } + } + break; + + case 192: +#line 4163 "parser.y" + { + String *name = NewStringf("%s",(yyvsp[(2) - (6)].str)); + if (*(Char(name)) != '~') Insert(name,0,"~"); + (yyval.node) = new_node("destructor"); + Setattr((yyval.node),"name",name); + Delete(name); + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + { + String *decl = NewStringEmpty(); + SwigType_add_function(decl,(yyvsp[(4) - (6)].pl)); + Setattr((yyval.node),"decl",decl); + Delete(decl); + } + Setattr((yyval.node),"throws",(yyvsp[(6) - (6)].dtype).throws); + Setattr((yyval.node),"throw",(yyvsp[(6) - (6)].dtype).throwf); + add_symbols((yyval.node)); + } + break; + + case 193: +#line 4187 "parser.y" + { + String *name; + char *c = 0; + (yyval.node) = new_node("destructor"); + /* Check for template names. If the class is a template + and the constructor is missing the template part, we + add it */ + if (Classprefix) { + c = strchr(Char(Classprefix),'<'); + if (c && !Strchr((yyvsp[(3) - (7)].str),'<')) { + (yyvsp[(3) - (7)].str) = NewStringf("%s%s",(yyvsp[(3) - (7)].str),c); + } + } + Setattr((yyval.node),"storage","virtual"); + name = NewStringf("%s",(yyvsp[(3) - (7)].str)); + if (*(Char(name)) != '~') Insert(name,0,"~"); + Setattr((yyval.node),"name",name); + Delete(name); + Setattr((yyval.node),"throws",(yyvsp[(7) - (7)].dtype).throws); + Setattr((yyval.node),"throw",(yyvsp[(7) - (7)].dtype).throwf); + if ((yyvsp[(7) - (7)].dtype).val) { + Setattr((yyval.node),"value","0"); + } + if (Len(scanner_ccode)) { + String *code = Copy(scanner_ccode); + Setattr((yyval.node),"code",code); + Delete(code); + } + { + String *decl = NewStringEmpty(); + SwigType_add_function(decl,(yyvsp[(5) - (7)].pl)); + Setattr((yyval.node),"decl",decl); + Delete(decl); + } + + add_symbols((yyval.node)); + } + break; + + case 194: +#line 4228 "parser.y" + { + (yyval.node) = new_node("cdecl"); + Setattr((yyval.node),"type",(yyvsp[(3) - (8)].type)); + Setattr((yyval.node),"name",(yyvsp[(2) - (8)].str)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (8)].id)); + + SwigType_add_function((yyvsp[(4) - (8)].type),(yyvsp[(6) - (8)].pl)); + if ((yyvsp[(8) - (8)].dtype).qualifier) { + SwigType_push((yyvsp[(4) - (8)].type),(yyvsp[(8) - (8)].dtype).qualifier); + } + Setattr((yyval.node),"decl",(yyvsp[(4) - (8)].type)); + Setattr((yyval.node),"parms",(yyvsp[(6) - (8)].pl)); + Setattr((yyval.node),"conversion_operator","1"); + add_symbols((yyval.node)); + } + break; + + case 195: +#line 4243 "parser.y" + { + SwigType *decl; + (yyval.node) = new_node("cdecl"); + Setattr((yyval.node),"type",(yyvsp[(3) - (8)].type)); + Setattr((yyval.node),"name",(yyvsp[(2) - (8)].str)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (8)].id)); + decl = NewStringEmpty(); + SwigType_add_reference(decl); + SwigType_add_function(decl,(yyvsp[(6) - (8)].pl)); + if ((yyvsp[(8) - (8)].dtype).qualifier) { + SwigType_push(decl,(yyvsp[(8) - (8)].dtype).qualifier); + } + Setattr((yyval.node),"decl",decl); + Setattr((yyval.node),"parms",(yyvsp[(6) - (8)].pl)); + Setattr((yyval.node),"conversion_operator","1"); + add_symbols((yyval.node)); + } + break; + + case 196: +#line 4261 "parser.y" + { + String *t = NewStringEmpty(); + (yyval.node) = new_node("cdecl"); + Setattr((yyval.node),"type",(yyvsp[(3) - (7)].type)); + Setattr((yyval.node),"name",(yyvsp[(2) - (7)].str)); + Setattr((yyval.node),"storage",(yyvsp[(1) - (7)].id)); + SwigType_add_function(t,(yyvsp[(5) - (7)].pl)); + if ((yyvsp[(7) - (7)].dtype).qualifier) { + SwigType_push(t,(yyvsp[(7) - (7)].dtype).qualifier); + } + Setattr((yyval.node),"decl",t); + Setattr((yyval.node),"parms",(yyvsp[(5) - (7)].pl)); + Setattr((yyval.node),"conversion_operator","1"); + add_symbols((yyval.node)); + } + break; + + case 197: +#line 4280 "parser.y" + { + skip_balanced('{','}'); + (yyval.node) = 0; + } + break; + + case 198: +#line 4287 "parser.y" + { + (yyval.node) = new_node("access"); + Setattr((yyval.node),"kind","public"); + cplus_mode = CPLUS_PUBLIC; + } + break; + + case 199: +#line 4294 "parser.y" + { + (yyval.node) = new_node("access"); + Setattr((yyval.node),"kind","private"); + cplus_mode = CPLUS_PRIVATE; + } + break; + + case 200: +#line 4302 "parser.y" + { + (yyval.node) = new_node("access"); + Setattr((yyval.node),"kind","protected"); + cplus_mode = CPLUS_PROTECTED; + } + break; + + case 201: +#line 4325 "parser.y" + { cparse_start_line = cparse_line; skip_balanced('{','}'); + } + break; + + case 202: +#line 4326 "parser.y" + { + (yyval.node) = 0; + if (cplus_mode == CPLUS_PUBLIC) { + if ((yyvsp[(6) - (7)].decl).id && strcmp((yyvsp[(2) - (7)].id), "class") != 0) { + Nested *n = (Nested *) malloc(sizeof(Nested)); + n->code = NewStringEmpty(); + Printv(n->code, "typedef ", (yyvsp[(2) - (7)].id), " ", + Char(scanner_ccode), " $classname_", (yyvsp[(6) - (7)].decl).id, ";\n", NIL); + + n->name = Swig_copy_string((yyvsp[(6) - (7)].decl).id); + n->line = cparse_start_line; + n->type = NewStringEmpty(); + n->kind = (yyvsp[(2) - (7)].id); + n->unnamed = 0; + SwigType_push(n->type, (yyvsp[(6) - (7)].decl).type); + n->next = 0; + add_nested(n); + } else { + Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (ignored).\n", (yyvsp[(2) - (7)].id)); + if (strcmp((yyvsp[(2) - (7)].id), "class") == 0) { + /* For now, just treat the nested class as a forward + * declaration (SF bug #909387). */ + (yyval.node) = new_node("classforward"); + Setfile((yyval.node),cparse_file); + Setline((yyval.node),cparse_line); + Setattr((yyval.node),"kind",(yyvsp[(2) - (7)].id)); + Setattr((yyval.node),"name",(yyvsp[(3) - (7)].id)); + Setattr((yyval.node),"sym:weak", "1"); + add_symbols((yyval.node)); + } + } + } + } + break; + + case 203: +#line 4360 "parser.y" + { cparse_start_line = cparse_line; skip_balanced('{','}'); + } + break; + + case 204: +#line 4361 "parser.y" + { + (yyval.node) = 0; + if (cplus_mode == CPLUS_PUBLIC) { + if (strcmp((yyvsp[(2) - (6)].id),"class") == 0) { + Swig_warning(WARN_PARSE_NESTED_CLASS,cparse_file, cparse_line,"Nested class not currently supported (ignored)\n"); + /* Generate some code for a new class */ + } else if ((yyvsp[(5) - (6)].decl).id) { + /* Generate some code for a new class */ + Nested *n = (Nested *) malloc(sizeof(Nested)); + n->code = NewStringEmpty(); + Printv(n->code, "typedef ", (yyvsp[(2) - (6)].id), " " , + Char(scanner_ccode), " $classname_", (yyvsp[(5) - (6)].decl).id, ";\n",NIL); + n->name = Swig_copy_string((yyvsp[(5) - (6)].decl).id); + n->line = cparse_start_line; + n->type = NewStringEmpty(); + n->kind = (yyvsp[(2) - (6)].id); + n->unnamed = 1; + SwigType_push(n->type,(yyvsp[(5) - (6)].decl).type); + n->next = 0; + add_nested(n); + } else { + Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (ignored).\n", (yyvsp[(2) - (6)].id)); + } + } + } + break; + + case 205: +#line 4391 "parser.y" + { cparse_start_line = cparse_line; skip_balanced('{','}'); + } + break; + + case 206: +#line 4392 "parser.y" + { + (yyval.node) = 0; + if (cplus_mode == CPLUS_PUBLIC) { + Swig_warning(WARN_PARSE_NESTED_CLASS,cparse_file, cparse_line,"Nested class not currently supported (ignored)\n"); + } + } + break; + + case 207: +#line 4409 "parser.y" + { (yyval.decl) = (yyvsp[(1) - (1)].decl);} + break; + + case 208: +#line 4410 "parser.y" + { (yyval.decl).id = 0; } + break; + + case 209: +#line 4416 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 210: +#line 4419 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 211: +#line 4423 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 212: +#line 4426 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 213: +#line 4427 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 214: +#line 4428 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 215: +#line 4429 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 216: +#line 4430 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 217: +#line 4431 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 218: +#line 4432 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 219: +#line 4433 "parser.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); } + break; + + case 220: +#line 4436 "parser.y" + { + Clear(scanner_ccode); + (yyval.dtype).throws = (yyvsp[(1) - (2)].dtype).throws; + (yyval.dtype).throwf = (yyvsp[(1) - (2)].dtype).throwf; + } + break; + + case 221: +#line 4441 "parser.y" + { + skip_balanced('{','}'); + (yyval.dtype).throws = (yyvsp[(1) - (2)].dtype).throws; + (yyval.dtype).throwf = (yyvsp[(1) - (2)].dtype).throwf; + } + break; + + case 222: +#line 4448 "parser.y" + { + Clear(scanner_ccode); + (yyval.dtype).val = 0; + (yyval.dtype).qualifier = (yyvsp[(1) - (2)].dtype).qualifier; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = (yyvsp[(1) - (2)].dtype).throws; + (yyval.dtype).throwf = (yyvsp[(1) - (2)].dtype).throwf; + } + break; + + case 223: +#line 4456 "parser.y" + { + Clear(scanner_ccode); + (yyval.dtype).val = (yyvsp[(3) - (4)].dtype).val; + (yyval.dtype).qualifier = (yyvsp[(1) - (4)].dtype).qualifier; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = (yyvsp[(1) - (4)].dtype).throws; + (yyval.dtype).throwf = (yyvsp[(1) - (4)].dtype).throwf; + } + break; + + case 224: +#line 4464 "parser.y" + { + skip_balanced('{','}'); + (yyval.dtype).val = 0; + (yyval.dtype).qualifier = (yyvsp[(1) - (2)].dtype).qualifier; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = (yyvsp[(1) - (2)].dtype).throws; + (yyval.dtype).throwf = (yyvsp[(1) - (2)].dtype).throwf; + } + break; + + case 225: +#line 4475 "parser.y" + { } + break; + + case 226: +#line 4481 "parser.y" + { (yyval.id) = "extern"; } + break; + + case 227: +#line 4482 "parser.y" + { + if (strcmp((yyvsp[(2) - (2)].id),"C") == 0) { + (yyval.id) = "externc"; + } else { + Swig_warning(WARN_PARSE_UNDEFINED_EXTERN,cparse_file, cparse_line,"Unrecognized extern type \"%s\".\n", (yyvsp[(2) - (2)].id)); + (yyval.id) = 0; + } + } + break; + + case 228: +#line 4490 "parser.y" + { (yyval.id) = "static"; } + break; + + case 229: +#line 4491 "parser.y" + { (yyval.id) = "typedef"; } + break; + + case 230: +#line 4492 "parser.y" + { (yyval.id) = "virtual"; } + break; + + case 231: +#line 4493 "parser.y" + { (yyval.id) = "friend"; } + break; + + case 232: +#line 4494 "parser.y" + { (yyval.id) = "explicit"; } + break; + + case 233: +#line 4495 "parser.y" + { (yyval.id) = 0; } + break; + + case 234: +#line 4502 "parser.y" + { + Parm *p; + (yyval.pl) = (yyvsp[(1) - (1)].pl); + p = (yyvsp[(1) - (1)].pl); + while (p) { + Replace(Getattr(p,"type"),"typename ", "", DOH_REPLACE_ANY); + p = nextSibling(p); + } + } + break; + + case 235: +#line 4513 "parser.y" + { + set_nextSibling((yyvsp[(1) - (2)].p),(yyvsp[(2) - (2)].pl)); + (yyval.pl) = (yyvsp[(1) - (2)].p); + } + break; + + case 236: +#line 4517 "parser.y" + { (yyval.pl) = 0; } + break; + + case 237: +#line 4520 "parser.y" + { + set_nextSibling((yyvsp[(2) - (3)].p),(yyvsp[(3) - (3)].pl)); + (yyval.pl) = (yyvsp[(2) - (3)].p); + } + break; + + case 238: +#line 4524 "parser.y" + { (yyval.pl) = 0; } + break; + + case 239: +#line 4528 "parser.y" + { + SwigType_push((yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].decl).type); + (yyval.p) = NewParm((yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].decl).id); + Setfile((yyval.p),cparse_file); + Setline((yyval.p),cparse_line); + if ((yyvsp[(2) - (2)].decl).defarg) { + Setattr((yyval.p),"value",(yyvsp[(2) - (2)].decl).defarg); + } + } + break; + + case 240: +#line 4538 "parser.y" + { + (yyval.p) = NewParm(NewStringf("template<class> %s %s", (yyvsp[(5) - (7)].id),(yyvsp[(6) - (7)].str)), 0); + Setfile((yyval.p),cparse_file); + Setline((yyval.p),cparse_line); + if ((yyvsp[(7) - (7)].dtype).val) { + Setattr((yyval.p),"value",(yyvsp[(7) - (7)].dtype).val); + } + } + break; + + case 241: +#line 4546 "parser.y" + { + SwigType *t = NewString("v(...)"); + (yyval.p) = NewParm(t, 0); + Setfile((yyval.p),cparse_file); + Setline((yyval.p),cparse_line); + } + break; + + case 242: +#line 4554 "parser.y" + { + Parm *p; + (yyval.p) = (yyvsp[(1) - (1)].p); + p = (yyvsp[(1) - (1)].p); + while (p) { + if (Getattr(p,"type")) { + Replace(Getattr(p,"type"),"typename ", "", DOH_REPLACE_ANY); + } + p = nextSibling(p); + } + } + break; + + case 243: +#line 4567 "parser.y" + { + set_nextSibling((yyvsp[(1) - (2)].p),(yyvsp[(2) - (2)].p)); + (yyval.p) = (yyvsp[(1) - (2)].p); + } + break; + + case 244: +#line 4571 "parser.y" + { (yyval.p) = 0; } + break; + + case 245: +#line 4574 "parser.y" + { + set_nextSibling((yyvsp[(2) - (3)].p),(yyvsp[(3) - (3)].p)); + (yyval.p) = (yyvsp[(2) - (3)].p); + } + break; + + case 246: +#line 4578 "parser.y" + { (yyval.p) = 0; } + break; + + case 247: +#line 4582 "parser.y" + { + (yyval.p) = (yyvsp[(1) - (1)].p); + { + /* We need to make a possible adjustment for integer parameters. */ + SwigType *type; + Node *n = 0; + + while (!n) { + type = Getattr((yyvsp[(1) - (1)].p),"type"); + n = Swig_symbol_clookup(type,0); /* See if we can find a node that matches the typename */ + if ((n) && (Strcmp(nodeType(n),"cdecl") == 0)) { + SwigType *decl = Getattr(n,"decl"); + if (!SwigType_isfunction(decl)) { + String *value = Getattr(n,"value"); + if (value) { + String *v = Copy(value); + Setattr((yyvsp[(1) - (1)].p),"type",v); + Delete(v); + n = 0; + } + } + } else { + break; + } + } + } + + } + break; + + case 248: +#line 4610 "parser.y" + { + (yyval.p) = NewParm(0,0); + Setfile((yyval.p),cparse_file); + Setline((yyval.p),cparse_line); + Setattr((yyval.p),"value",(yyvsp[(1) - (1)].dtype).val); + } + break; + + case 249: +#line 4618 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (2)].dtype); + if ((yyvsp[(2) - (2)].dtype).type == T_ERROR) { + Swig_warning(WARN_PARSE_BAD_DEFAULT,cparse_file, cparse_line, "Can't set default argument (ignored)\n"); + (yyval.dtype).val = 0; + (yyval.dtype).rawval = 0; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + } + break; + + case 250: +#line 4629 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (5)].dtype); + if ((yyvsp[(2) - (5)].dtype).type == T_ERROR) { + Swig_warning(WARN_PARSE_BAD_DEFAULT,cparse_file, cparse_line, "Can't set default argument (ignored)\n"); + (yyval.dtype) = (yyvsp[(2) - (5)].dtype); + (yyval.dtype).val = 0; + (yyval.dtype).rawval = 0; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } else { + (yyval.dtype).val = NewStringf("%s[%s]",(yyvsp[(2) - (5)].dtype).val,(yyvsp[(4) - (5)].dtype).val); + } + } + break; + + case 251: +#line 4643 "parser.y" + { + skip_balanced('{','}'); + (yyval.dtype).val = 0; + (yyval.dtype).rawval = 0; + (yyval.dtype).type = T_INT; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 252: +#line 4652 "parser.y" + { + (yyval.dtype).val = 0; + (yyval.dtype).rawval = 0; + (yyval.dtype).type = 0; + (yyval.dtype).bitfield = (yyvsp[(2) - (2)].dtype).val; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 253: +#line 4660 "parser.y" + { + (yyval.dtype).val = 0; + (yyval.dtype).rawval = 0; + (yyval.dtype).type = T_INT; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 254: +#line 4670 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (2)].decl); + (yyval.decl).defarg = (yyvsp[(2) - (2)].dtype).rawval ? (yyvsp[(2) - (2)].dtype).rawval : (yyvsp[(2) - (2)].dtype).val; + } + break; + + case 255: +#line 4674 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (2)].decl); + (yyval.decl).defarg = (yyvsp[(2) - (2)].dtype).rawval ? (yyvsp[(2) - (2)].dtype).rawval : (yyvsp[(2) - (2)].dtype).val; + } + break; + + case 256: +#line 4678 "parser.y" + { + (yyval.decl).type = 0; + (yyval.decl).id = 0; + (yyval.decl).defarg = (yyvsp[(1) - (1)].dtype).rawval ? (yyvsp[(1) - (1)].dtype).rawval : (yyvsp[(1) - (1)].dtype).val; + } + break; + + case 257: +#line 4685 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (1)].decl); + if (SwigType_isfunction((yyvsp[(1) - (1)].decl).type)) { + Delete(SwigType_pop_function((yyvsp[(1) - (1)].decl).type)); + } else if (SwigType_isarray((yyvsp[(1) - (1)].decl).type)) { + SwigType *ta = SwigType_pop_arrays((yyvsp[(1) - (1)].decl).type); + if (SwigType_isfunction((yyvsp[(1) - (1)].decl).type)) { + Delete(SwigType_pop_function((yyvsp[(1) - (1)].decl).type)); + } else { + (yyval.decl).parms = 0; + } + SwigType_push((yyvsp[(1) - (1)].decl).type,ta); + Delete(ta); + } else { + (yyval.decl).parms = 0; + } + } + break; + + case 258: +#line 4702 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (1)].decl); + if (SwigType_isfunction((yyvsp[(1) - (1)].decl).type)) { + Delete(SwigType_pop_function((yyvsp[(1) - (1)].decl).type)); + } else if (SwigType_isarray((yyvsp[(1) - (1)].decl).type)) { + SwigType *ta = SwigType_pop_arrays((yyvsp[(1) - (1)].decl).type); + if (SwigType_isfunction((yyvsp[(1) - (1)].decl).type)) { + Delete(SwigType_pop_function((yyvsp[(1) - (1)].decl).type)); + } else { + (yyval.decl).parms = 0; + } + SwigType_push((yyvsp[(1) - (1)].decl).type,ta); + Delete(ta); + } else { + (yyval.decl).parms = 0; + } + } + break; + + case 259: +#line 4719 "parser.y" + { + (yyval.decl).type = 0; + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + } + break; + + case 260: +#line 4727 "parser.y" + { + (yyval.decl) = (yyvsp[(2) - (2)].decl); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (2)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (2)].type); + } + break; + + case 261: +#line 4735 "parser.y" + { + (yyval.decl) = (yyvsp[(3) - (3)].decl); + SwigType_add_reference((yyvsp[(1) - (3)].type)); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (3)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (3)].type); + } + break; + + case 262: +#line 4744 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (1)].decl); + if (!(yyval.decl).type) (yyval.decl).type = NewStringEmpty(); + } + break; + + case 263: +#line 4748 "parser.y" + { + (yyval.decl) = (yyvsp[(2) - (2)].decl); + (yyval.decl).type = NewStringEmpty(); + SwigType_add_reference((yyval.decl).type); + if ((yyvsp[(2) - (2)].decl).type) { + SwigType_push((yyval.decl).type,(yyvsp[(2) - (2)].decl).type); + Delete((yyvsp[(2) - (2)].decl).type); + } + } + break; + + case 264: +#line 4757 "parser.y" + { + SwigType *t = NewStringEmpty(); + + (yyval.decl) = (yyvsp[(3) - (3)].decl); + SwigType_add_memberpointer(t,(yyvsp[(1) - (3)].str)); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 265: +#line 4768 "parser.y" + { + SwigType *t = NewStringEmpty(); + (yyval.decl) = (yyvsp[(4) - (4)].decl); + SwigType_add_memberpointer(t,(yyvsp[(2) - (4)].str)); + SwigType_push((yyvsp[(1) - (4)].type),t); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (4)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (4)].type); + Delete(t); + } + break; + + case 266: +#line 4780 "parser.y" + { + (yyval.decl) = (yyvsp[(5) - (5)].decl); + SwigType_add_memberpointer((yyvsp[(1) - (5)].type),(yyvsp[(2) - (5)].str)); + SwigType_add_reference((yyvsp[(1) - (5)].type)); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (5)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (5)].type); + } + break; + + case 267: +#line 4790 "parser.y" + { + SwigType *t = NewStringEmpty(); + (yyval.decl) = (yyvsp[(4) - (4)].decl); + SwigType_add_memberpointer(t,(yyvsp[(1) - (4)].str)); + SwigType_add_reference(t); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 268: +#line 4803 "parser.y" + { + /* Note: This is non-standard C. Template declarator is allowed to follow an identifier */ + (yyval.decl).id = Char((yyvsp[(1) - (1)].str)); + (yyval.decl).type = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 269: +#line 4810 "parser.y" + { + (yyval.decl).id = Char(NewStringf("~%s",(yyvsp[(2) - (2)].str))); + (yyval.decl).type = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 270: +#line 4818 "parser.y" + { + (yyval.decl).id = Char((yyvsp[(2) - (3)].str)); + (yyval.decl).type = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 271: +#line 4834 "parser.y" + { + (yyval.decl) = (yyvsp[(3) - (4)].decl); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(2) - (4)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(2) - (4)].type); + } + break; + + case 272: +#line 4842 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(4) - (5)].decl); + t = NewStringEmpty(); + SwigType_add_memberpointer(t,(yyvsp[(2) - (5)].str)); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 273: +#line 4853 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (3)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(char*)""); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 274: +#line 4864 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(yyvsp[(3) - (4)].dtype).val); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 275: +#line 4875 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_function(t,(yyvsp[(3) - (4)].pl)); + if (!(yyval.decl).have_parms) { + (yyval.decl).parms = (yyvsp[(3) - (4)].pl); + (yyval.decl).have_parms = 1; + } + if (!(yyval.decl).type) { + (yyval.decl).type = t; + } else { + SwigType_push(t, (yyval.decl).type); + Delete((yyval.decl).type); + (yyval.decl).type = t; + } + } + break; + + case 276: +#line 4894 "parser.y" + { + /* Note: This is non-standard C. Template declarator is allowed to follow an identifier */ + (yyval.decl).id = Char((yyvsp[(1) - (1)].str)); + (yyval.decl).type = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 277: +#line 4902 "parser.y" + { + (yyval.decl).id = Char(NewStringf("~%s",(yyvsp[(2) - (2)].str))); + (yyval.decl).type = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 278: +#line 4919 "parser.y" + { + (yyval.decl) = (yyvsp[(3) - (4)].decl); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(2) - (4)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(2) - (4)].type); + } + break; + + case 279: +#line 4927 "parser.y" + { + (yyval.decl) = (yyvsp[(3) - (4)].decl); + if (!(yyval.decl).type) { + (yyval.decl).type = NewStringEmpty(); + } + SwigType_add_reference((yyval.decl).type); + } + break; + + case 280: +#line 4934 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(4) - (5)].decl); + t = NewStringEmpty(); + SwigType_add_memberpointer(t,(yyvsp[(2) - (5)].str)); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 281: +#line 4945 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (3)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(char*)""); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 282: +#line 4956 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(yyvsp[(3) - (4)].dtype).val); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 283: +#line 4967 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_function(t,(yyvsp[(3) - (4)].pl)); + if (!(yyval.decl).have_parms) { + (yyval.decl).parms = (yyvsp[(3) - (4)].pl); + (yyval.decl).have_parms = 1; + } + if (!(yyval.decl).type) { + (yyval.decl).type = t; + } else { + SwigType_push(t, (yyval.decl).type); + Delete((yyval.decl).type); + (yyval.decl).type = t; + } + } + break; + + case 284: +#line 4986 "parser.y" + { + (yyval.decl).type = (yyvsp[(1) - (1)].type); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 285: +#line 4992 "parser.y" + { + (yyval.decl) = (yyvsp[(2) - (2)].decl); + SwigType_push((yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].decl).type); + (yyval.decl).type = (yyvsp[(1) - (2)].type); + Delete((yyvsp[(2) - (2)].decl).type); + } + break; + + case 286: +#line 4998 "parser.y" + { + (yyval.decl).type = (yyvsp[(1) - (2)].type); + SwigType_add_reference((yyval.decl).type); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 287: +#line 5005 "parser.y" + { + (yyval.decl) = (yyvsp[(3) - (3)].decl); + SwigType_add_reference((yyvsp[(1) - (3)].type)); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (3)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (3)].type); + } + break; + + case 288: +#line 5014 "parser.y" + { + (yyval.decl) = (yyvsp[(1) - (1)].decl); + } + break; + + case 289: +#line 5017 "parser.y" + { + (yyval.decl) = (yyvsp[(2) - (2)].decl); + (yyval.decl).type = NewStringEmpty(); + SwigType_add_reference((yyval.decl).type); + if ((yyvsp[(2) - (2)].decl).type) { + SwigType_push((yyval.decl).type,(yyvsp[(2) - (2)].decl).type); + Delete((yyvsp[(2) - (2)].decl).type); + } + } + break; + + case 290: +#line 5026 "parser.y" + { + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + (yyval.decl).type = NewStringEmpty(); + SwigType_add_reference((yyval.decl).type); + } + break; + + case 291: +#line 5033 "parser.y" + { + (yyval.decl).type = NewStringEmpty(); + SwigType_add_memberpointer((yyval.decl).type,(yyvsp[(1) - (2)].str)); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + } + break; + + case 292: +#line 5040 "parser.y" + { + SwigType *t = NewStringEmpty(); + (yyval.decl).type = (yyvsp[(1) - (3)].type); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + SwigType_add_memberpointer(t,(yyvsp[(2) - (3)].str)); + SwigType_push((yyval.decl).type,t); + Delete(t); + } + break; + + case 293: +#line 5050 "parser.y" + { + (yyval.decl) = (yyvsp[(4) - (4)].decl); + SwigType_add_memberpointer((yyvsp[(1) - (4)].type),(yyvsp[(2) - (4)].str)); + if ((yyval.decl).type) { + SwigType_push((yyvsp[(1) - (4)].type),(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = (yyvsp[(1) - (4)].type); + } + break; + + case 294: +#line 5061 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (3)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(char*)""); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 295: +#line 5072 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_array(t,(yyvsp[(3) - (4)].dtype).val); + if ((yyval.decl).type) { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + } + (yyval.decl).type = t; + } + break; + + case 296: +#line 5083 "parser.y" + { + (yyval.decl).type = NewStringEmpty(); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + SwigType_add_array((yyval.decl).type,(char*)""); + } + break; + + case 297: +#line 5090 "parser.y" + { + (yyval.decl).type = NewStringEmpty(); + (yyval.decl).id = 0; + (yyval.decl).parms = 0; + (yyval.decl).have_parms = 0; + SwigType_add_array((yyval.decl).type,(yyvsp[(2) - (3)].dtype).val); + } + break; + + case 298: +#line 5097 "parser.y" + { + (yyval.decl) = (yyvsp[(2) - (3)].decl); + } + break; + + case 299: +#line 5100 "parser.y" + { + SwigType *t; + (yyval.decl) = (yyvsp[(1) - (4)].decl); + t = NewStringEmpty(); + SwigType_add_function(t,(yyvsp[(3) - (4)].pl)); + if (!(yyval.decl).type) { + (yyval.decl).type = t; + } else { + SwigType_push(t,(yyval.decl).type); + Delete((yyval.decl).type); + (yyval.decl).type = t; + } + if (!(yyval.decl).have_parms) { + (yyval.decl).parms = (yyvsp[(3) - (4)].pl); + (yyval.decl).have_parms = 1; + } + } + break; + + case 300: +#line 5117 "parser.y" + { + (yyval.decl).type = NewStringEmpty(); + SwigType_add_function((yyval.decl).type,(yyvsp[(2) - (3)].pl)); + (yyval.decl).parms = (yyvsp[(2) - (3)].pl); + (yyval.decl).have_parms = 1; + (yyval.decl).id = 0; + } + break; + + case 301: +#line 5127 "parser.y" + { + (yyval.type) = NewStringEmpty(); + SwigType_add_pointer((yyval.type)); + SwigType_push((yyval.type),(yyvsp[(2) - (3)].str)); + SwigType_push((yyval.type),(yyvsp[(3) - (3)].type)); + Delete((yyvsp[(3) - (3)].type)); + } + break; + + case 302: +#line 5134 "parser.y" + { + (yyval.type) = NewStringEmpty(); + SwigType_add_pointer((yyval.type)); + SwigType_push((yyval.type),(yyvsp[(2) - (2)].type)); + Delete((yyvsp[(2) - (2)].type)); + } + break; + + case 303: +#line 5140 "parser.y" + { + (yyval.type) = NewStringEmpty(); + SwigType_add_pointer((yyval.type)); + SwigType_push((yyval.type),(yyvsp[(2) - (2)].str)); + } + break; + + case 304: +#line 5145 "parser.y" + { + (yyval.type) = NewStringEmpty(); + SwigType_add_pointer((yyval.type)); + } + break; + + case 305: +#line 5151 "parser.y" + { + (yyval.str) = NewStringEmpty(); + if ((yyvsp[(1) - (1)].id)) SwigType_add_qualifier((yyval.str),(yyvsp[(1) - (1)].id)); + } + break; + + case 306: +#line 5155 "parser.y" + { + (yyval.str) = (yyvsp[(2) - (2)].str); + if ((yyvsp[(1) - (2)].id)) SwigType_add_qualifier((yyval.str),(yyvsp[(1) - (2)].id)); + } + break; + + case 307: +#line 5161 "parser.y" + { (yyval.id) = "const"; } + break; + + case 308: +#line 5162 "parser.y" + { (yyval.id) = "volatile"; } + break; + + case 309: +#line 5163 "parser.y" + { (yyval.id) = 0; } + break; + + case 310: +#line 5169 "parser.y" + { + (yyval.type) = (yyvsp[(1) - (1)].type); + Replace((yyval.type),"typename ","", DOH_REPLACE_ANY); + } + break; + + case 311: +#line 5175 "parser.y" + { + (yyval.type) = (yyvsp[(2) - (2)].type); + SwigType_push((yyval.type),(yyvsp[(1) - (2)].str)); + } + break; + + case 312: +#line 5179 "parser.y" + { (yyval.type) = (yyvsp[(1) - (1)].type); } + break; + + case 313: +#line 5180 "parser.y" + { + (yyval.type) = (yyvsp[(1) - (2)].type); + SwigType_push((yyval.type),(yyvsp[(2) - (2)].str)); + } + break; + + case 314: +#line 5184 "parser.y" + { + (yyval.type) = (yyvsp[(2) - (3)].type); + SwigType_push((yyval.type),(yyvsp[(3) - (3)].str)); + SwigType_push((yyval.type),(yyvsp[(1) - (3)].str)); + } + break; + + case 315: +#line 5191 "parser.y" + { (yyval.type) = (yyvsp[(1) - (1)].type); + /* Printf(stdout,"primitive = '%s'\n", $$);*/ + } + break; + + case 316: +#line 5194 "parser.y" + { (yyval.type) = (yyvsp[(1) - (1)].type); } + break; + + case 317: +#line 5195 "parser.y" + { (yyval.type) = (yyvsp[(1) - (1)].type); } + break; + + case 318: +#line 5196 "parser.y" + { (yyval.type) = NewStringf("%s%s",(yyvsp[(1) - (2)].type),(yyvsp[(2) - (2)].id)); } + break; + + case 319: +#line 5197 "parser.y" + { (yyval.type) = NewStringf("enum %s", (yyvsp[(2) - (2)].str)); } + break; + + case 320: +#line 5198 "parser.y" + { (yyval.type) = (yyvsp[(1) - (1)].type); } + break; + + case 321: +#line 5200 "parser.y" + { + (yyval.type) = (yyvsp[(1) - (1)].str); + } + break; + + case 322: +#line 5203 "parser.y" + { + (yyval.type) = NewStringf("%s %s", (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].str)); + } + break; + + case 323: +#line 5208 "parser.y" + { + if (!(yyvsp[(1) - (1)].ptype).type) (yyvsp[(1) - (1)].ptype).type = NewString("int"); + if ((yyvsp[(1) - (1)].ptype).us) { + (yyval.type) = NewStringf("%s %s", (yyvsp[(1) - (1)].ptype).us, (yyvsp[(1) - (1)].ptype).type); + Delete((yyvsp[(1) - (1)].ptype).us); + Delete((yyvsp[(1) - (1)].ptype).type); + } else { + (yyval.type) = (yyvsp[(1) - (1)].ptype).type; + } + if (Cmp((yyval.type),"signed int") == 0) { + Delete((yyval.type)); + (yyval.type) = NewString("int"); + } else if (Cmp((yyval.type),"signed long") == 0) { + Delete((yyval.type)); + (yyval.type) = NewString("long"); + } else if (Cmp((yyval.type),"signed short") == 0) { + Delete((yyval.type)); + (yyval.type) = NewString("short"); + } else if (Cmp((yyval.type),"signed long long") == 0) { + Delete((yyval.type)); + (yyval.type) = NewString("long long"); + } + } + break; + + case 324: +#line 5233 "parser.y" + { + (yyval.ptype) = (yyvsp[(1) - (1)].ptype); + } + break; + + case 325: +#line 5236 "parser.y" + { + if ((yyvsp[(1) - (2)].ptype).us && (yyvsp[(2) - (2)].ptype).us) { + Swig_error(cparse_file, cparse_line, "Extra %s specifier.\n", (yyvsp[(2) - (2)].ptype).us); + } + (yyval.ptype) = (yyvsp[(2) - (2)].ptype); + if ((yyvsp[(1) - (2)].ptype).us) (yyval.ptype).us = (yyvsp[(1) - (2)].ptype).us; + if ((yyvsp[(1) - (2)].ptype).type) { + if (!(yyvsp[(2) - (2)].ptype).type) (yyval.ptype).type = (yyvsp[(1) - (2)].ptype).type; + else { + int err = 0; + if ((Cmp((yyvsp[(1) - (2)].ptype).type,"long") == 0)) { + if ((Cmp((yyvsp[(2) - (2)].ptype).type,"long") == 0) || (Strncmp((yyvsp[(2) - (2)].ptype).type,"double",6) == 0)) { + (yyval.ptype).type = NewStringf("long %s", (yyvsp[(2) - (2)].ptype).type); + } else if (Cmp((yyvsp[(2) - (2)].ptype).type,"int") == 0) { + (yyval.ptype).type = (yyvsp[(1) - (2)].ptype).type; + } else { + err = 1; + } + } else if ((Cmp((yyvsp[(1) - (2)].ptype).type,"short")) == 0) { + if (Cmp((yyvsp[(2) - (2)].ptype).type,"int") == 0) { + (yyval.ptype).type = (yyvsp[(1) - (2)].ptype).type; + } else { + err = 1; + } + } else if (Cmp((yyvsp[(1) - (2)].ptype).type,"int") == 0) { + (yyval.ptype).type = (yyvsp[(2) - (2)].ptype).type; + } else if (Cmp((yyvsp[(1) - (2)].ptype).type,"double") == 0) { + if (Cmp((yyvsp[(2) - (2)].ptype).type,"long") == 0) { + (yyval.ptype).type = NewString("long double"); + } else if (Cmp((yyvsp[(2) - (2)].ptype).type,"complex") == 0) { + (yyval.ptype).type = NewString("double complex"); + } else { + err = 1; + } + } else if (Cmp((yyvsp[(1) - (2)].ptype).type,"float") == 0) { + if (Cmp((yyvsp[(2) - (2)].ptype).type,"complex") == 0) { + (yyval.ptype).type = NewString("float complex"); + } else { + err = 1; + } + } else if (Cmp((yyvsp[(1) - (2)].ptype).type,"complex") == 0) { + (yyval.ptype).type = NewStringf("%s complex", (yyvsp[(2) - (2)].ptype).type); + } else { + err = 1; + } + if (err) { + Swig_error(cparse_file, cparse_line, "Extra %s specifier.\n", (yyvsp[(1) - (2)].ptype).type); + } + } + } + } + break; + + case 326: +#line 5290 "parser.y" + { + (yyval.ptype).type = NewString("int"); + (yyval.ptype).us = 0; + } + break; + + case 327: +#line 5294 "parser.y" + { + (yyval.ptype).type = NewString("short"); + (yyval.ptype).us = 0; + } + break; + + case 328: +#line 5298 "parser.y" + { + (yyval.ptype).type = NewString("long"); + (yyval.ptype).us = 0; + } + break; + + case 329: +#line 5302 "parser.y" + { + (yyval.ptype).type = NewString("char"); + (yyval.ptype).us = 0; + } + break; + + case 330: +#line 5306 "parser.y" + { + (yyval.ptype).type = NewString("wchar_t"); + (yyval.ptype).us = 0; + } + break; + + case 331: +#line 5310 "parser.y" + { + (yyval.ptype).type = NewString("float"); + (yyval.ptype).us = 0; + } + break; + + case 332: +#line 5314 "parser.y" + { + (yyval.ptype).type = NewString("double"); + (yyval.ptype).us = 0; + } + break; + + case 333: +#line 5318 "parser.y" + { + (yyval.ptype).us = NewString("signed"); + (yyval.ptype).type = 0; + } + break; + + case 334: +#line 5322 "parser.y" + { + (yyval.ptype).us = NewString("unsigned"); + (yyval.ptype).type = 0; + } + break; + + case 335: +#line 5326 "parser.y" + { + (yyval.ptype).type = NewString("complex"); + (yyval.ptype).us = 0; + } + break; + + case 336: +#line 5330 "parser.y" + { + (yyval.ptype).type = NewString("__int8"); + (yyval.ptype).us = 0; + } + break; + + case 337: +#line 5334 "parser.y" + { + (yyval.ptype).type = NewString("__int16"); + (yyval.ptype).us = 0; + } + break; + + case 338: +#line 5338 "parser.y" + { + (yyval.ptype).type = NewString("__int32"); + (yyval.ptype).us = 0; + } + break; + + case 339: +#line 5342 "parser.y" + { + (yyval.ptype).type = NewString("__int64"); + (yyval.ptype).us = 0; + } + break; + + case 340: +#line 5348 "parser.y" + { /* scanner_check_typedef(); */ } + break; + + case 341: +#line 5348 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (2)].dtype); + if ((yyval.dtype).type == T_STRING) { + (yyval.dtype).rawval = NewStringf("\"%(escape)s\"",(yyval.dtype).val); + } else if ((yyval.dtype).type != T_CHAR) { + (yyval.dtype).rawval = 0; + } + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + scanner_ignore_typedef(); + } + break; + + case 342: +#line 5374 "parser.y" + { (yyval.id) = (yyvsp[(1) - (1)].id); } + break; + + case 343: +#line 5375 "parser.y" + { (yyval.id) = (char *) 0;} + break; + + case 344: +#line 5378 "parser.y" + { + + /* Ignore if there is a trailing comma in the enum list */ + if ((yyvsp[(3) - (3)].node)) { + Node *leftSibling = Getattr((yyvsp[(1) - (3)].node),"_last"); + if (!leftSibling) { + leftSibling=(yyvsp[(1) - (3)].node); + } + set_nextSibling(leftSibling,(yyvsp[(3) - (3)].node)); + Setattr((yyvsp[(1) - (3)].node),"_last",(yyvsp[(3) - (3)].node)); + } + (yyval.node) = (yyvsp[(1) - (3)].node); + } + break; + + case 345: +#line 5391 "parser.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + if ((yyvsp[(1) - (1)].node)) { + Setattr((yyvsp[(1) - (1)].node),"_last",(yyvsp[(1) - (1)].node)); + } + } + break; + + case 346: +#line 5399 "parser.y" + { + SwigType *type = NewSwigType(T_INT); + (yyval.node) = new_node("enumitem"); + Setattr((yyval.node),"name",(yyvsp[(1) - (1)].id)); + Setattr((yyval.node),"type",type); + SetFlag((yyval.node),"feature:immutable"); + Delete(type); + } + break; + + case 347: +#line 5407 "parser.y" + { + (yyval.node) = new_node("enumitem"); + Setattr((yyval.node),"name",(yyvsp[(1) - (3)].id)); + Setattr((yyval.node),"enumvalue", (yyvsp[(3) - (3)].dtype).val); + if ((yyvsp[(3) - (3)].dtype).type == T_CHAR) { + SwigType *type = NewSwigType(T_CHAR); + Setattr((yyval.node),"value",NewStringf("\'%(escape)s\'", (yyvsp[(3) - (3)].dtype).val)); + Setattr((yyval.node),"type",type); + Delete(type); + } else { + SwigType *type = NewSwigType(T_INT); + Setattr((yyval.node),"value",(yyvsp[(1) - (3)].id)); + Setattr((yyval.node),"type",type); + Delete(type); + } + SetFlag((yyval.node),"feature:immutable"); + } + break; + + case 348: +#line 5424 "parser.y" + { (yyval.node) = 0; } + break; + + case 349: +#line 5427 "parser.y" + { + (yyval.dtype) = (yyvsp[(1) - (1)].dtype); + if (((yyval.dtype).type != T_INT) && ((yyval.dtype).type != T_UINT) && + ((yyval.dtype).type != T_LONG) && ((yyval.dtype).type != T_ULONG) && + ((yyval.dtype).type != T_SHORT) && ((yyval.dtype).type != T_USHORT) && + ((yyval.dtype).type != T_SCHAR) && ((yyval.dtype).type != T_UCHAR) && + ((yyval.dtype).type != T_CHAR)) { + Swig_error(cparse_file,cparse_line,"Type error. Expecting an int\n"); + } + if ((yyval.dtype).type == T_CHAR) (yyval.dtype).type = T_INT; + } + break; + + case 350: +#line 5442 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 351: +#line 5443 "parser.y" + { + Node *n; + (yyval.dtype).val = (yyvsp[(1) - (1)].type); + (yyval.dtype).type = T_INT; + /* Check if value is in scope */ + n = Swig_symbol_clookup((yyvsp[(1) - (1)].type),0); + if (n) { + /* A band-aid for enum values used in expressions. */ + if (Strcmp(nodeType(n),"enumitem") == 0) { + String *q = Swig_symbol_qualified(n); + if (q) { + (yyval.dtype).val = NewStringf("%s::%s", q, Getattr(n,"name")); + Delete(q); + } + } + } + } + break; + + case 352: +#line 5462 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 353: +#line 5463 "parser.y" + { + (yyval.dtype).val = NewString((yyvsp[(1) - (1)].id)); + (yyval.dtype).type = T_STRING; + } + break; + + case 354: +#line 5467 "parser.y" + { + SwigType_push((yyvsp[(3) - (5)].type),(yyvsp[(4) - (5)].decl).type); + (yyval.dtype).val = NewStringf("sizeof(%s)",SwigType_str((yyvsp[(3) - (5)].type),0)); + (yyval.dtype).type = T_ULONG; + } + break; + + case 355: +#line 5472 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 356: +#line 5473 "parser.y" + { + (yyval.dtype).val = NewString((yyvsp[(1) - (1)].str)); + if (Len((yyval.dtype).val)) { + (yyval.dtype).rawval = NewStringf("'%(escape)s'", (yyval.dtype).val); + } else { + (yyval.dtype).rawval = NewString("'\\0'"); + } + (yyval.dtype).type = T_CHAR; + (yyval.dtype).bitfield = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 357: +#line 5487 "parser.y" + { + (yyval.dtype).val = NewStringf("(%s)",(yyvsp[(2) - (3)].dtype).val); + (yyval.dtype).type = (yyvsp[(2) - (3)].dtype).type; + } + break; + + case 358: +#line 5494 "parser.y" + { + (yyval.dtype) = (yyvsp[(4) - (4)].dtype); + if ((yyvsp[(4) - (4)].dtype).type != T_STRING) { + switch ((yyvsp[(2) - (4)].dtype).type) { + case T_FLOAT: + case T_DOUBLE: + case T_LONGDOUBLE: + case T_FLTCPLX: + case T_DBLCPLX: + (yyval.dtype).val = NewStringf("(%s)%s", (yyvsp[(2) - (4)].dtype).val, (yyvsp[(4) - (4)].dtype).val); /* SwigType_str and decimal points don't mix! */ + break; + default: + (yyval.dtype).val = NewStringf("(%s) %s", SwigType_str((yyvsp[(2) - (4)].dtype).val,0), (yyvsp[(4) - (4)].dtype).val); + break; + } + } + } + break; + + case 359: +#line 5511 "parser.y" + { + (yyval.dtype) = (yyvsp[(5) - (5)].dtype); + if ((yyvsp[(5) - (5)].dtype).type != T_STRING) { + SwigType_push((yyvsp[(2) - (5)].dtype).val,(yyvsp[(3) - (5)].type)); + (yyval.dtype).val = NewStringf("(%s) %s", SwigType_str((yyvsp[(2) - (5)].dtype).val,0), (yyvsp[(5) - (5)].dtype).val); + } + } + break; + + case 360: +#line 5518 "parser.y" + { + (yyval.dtype) = (yyvsp[(5) - (5)].dtype); + if ((yyvsp[(5) - (5)].dtype).type != T_STRING) { + SwigType_add_reference((yyvsp[(2) - (5)].dtype).val); + (yyval.dtype).val = NewStringf("(%s) %s", SwigType_str((yyvsp[(2) - (5)].dtype).val,0), (yyvsp[(5) - (5)].dtype).val); + } + } + break; + + case 361: +#line 5525 "parser.y" + { + (yyval.dtype) = (yyvsp[(6) - (6)].dtype); + if ((yyvsp[(6) - (6)].dtype).type != T_STRING) { + SwigType_push((yyvsp[(2) - (6)].dtype).val,(yyvsp[(3) - (6)].type)); + SwigType_add_reference((yyvsp[(2) - (6)].dtype).val); + (yyval.dtype).val = NewStringf("(%s) %s", SwigType_str((yyvsp[(2) - (6)].dtype).val,0), (yyvsp[(6) - (6)].dtype).val); + } + } + break; + + case 362: +#line 5533 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (2)].dtype); + (yyval.dtype).val = NewStringf("&%s",(yyvsp[(2) - (2)].dtype).val); + } + break; + + case 363: +#line 5537 "parser.y" + { + (yyval.dtype) = (yyvsp[(2) - (2)].dtype); + (yyval.dtype).val = NewStringf("*%s",(yyvsp[(2) - (2)].dtype).val); + } + break; + + case 364: +#line 5543 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 365: +#line 5544 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 366: +#line 5545 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 367: +#line 5546 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 368: +#line 5547 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 369: +#line 5548 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 370: +#line 5549 "parser.y" + { (yyval.dtype) = (yyvsp[(1) - (1)].dtype); } + break; + + case 371: +#line 5552 "parser.y" + { + (yyval.dtype).val = NewStringf("%s+%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 372: +#line 5556 "parser.y" + { + (yyval.dtype).val = NewStringf("%s-%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 373: +#line 5560 "parser.y" + { + (yyval.dtype).val = NewStringf("%s*%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 374: +#line 5564 "parser.y" + { + (yyval.dtype).val = NewStringf("%s/%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 375: +#line 5568 "parser.y" + { + (yyval.dtype).val = NewStringf("%s%%%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 376: +#line 5572 "parser.y" + { + (yyval.dtype).val = NewStringf("%s&%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 377: +#line 5576 "parser.y" + { + (yyval.dtype).val = NewStringf("%s|%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 378: +#line 5580 "parser.y" + { + (yyval.dtype).val = NewStringf("%s^%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote((yyvsp[(1) - (3)].dtype).type,(yyvsp[(3) - (3)].dtype).type); + } + break; + + case 379: +#line 5584 "parser.y" + { + (yyval.dtype).val = NewStringf("%s << %s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote_type((yyvsp[(1) - (3)].dtype).type); + } + break; + + case 380: +#line 5588 "parser.y" + { + (yyval.dtype).val = NewStringf("%s >> %s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = promote_type((yyvsp[(1) - (3)].dtype).type); + } + break; + + case 381: +#line 5592 "parser.y" + { + (yyval.dtype).val = NewStringf("%s&&%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 382: +#line 5596 "parser.y" + { + (yyval.dtype).val = NewStringf("%s||%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 383: +#line 5600 "parser.y" + { + (yyval.dtype).val = NewStringf("%s==%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 384: +#line 5604 "parser.y" + { + (yyval.dtype).val = NewStringf("%s!=%s",(yyvsp[(1) - (3)].dtype).val,(yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 385: +#line 5618 "parser.y" + { + /* Putting >= in the expression literally causes an infinite + * loop somewhere in the type system. Just workaround for now + * - SWIG_GE is defined in swiglabels.swg. */ + (yyval.dtype).val = NewStringf("%s SWIG_GE %s", (yyvsp[(1) - (3)].dtype).val, (yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 386: +#line 5625 "parser.y" + { + (yyval.dtype).val = NewStringf("%s SWIG_LE %s", (yyvsp[(1) - (3)].dtype).val, (yyvsp[(3) - (3)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 387: +#line 5629 "parser.y" + { + (yyval.dtype).val = NewStringf("%s?%s:%s", (yyvsp[(1) - (5)].dtype).val, (yyvsp[(3) - (5)].dtype).val, (yyvsp[(5) - (5)].dtype).val); + /* This may not be exactly right, but is probably good enough + * for the purposes of parsing constant expressions. */ + (yyval.dtype).type = promote((yyvsp[(3) - (5)].dtype).type, (yyvsp[(5) - (5)].dtype).type); + } + break; + + case 388: +#line 5635 "parser.y" + { + (yyval.dtype).val = NewStringf("-%s",(yyvsp[(2) - (2)].dtype).val); + (yyval.dtype).type = (yyvsp[(2) - (2)].dtype).type; + } + break; + + case 389: +#line 5639 "parser.y" + { + (yyval.dtype).val = NewStringf("+%s",(yyvsp[(2) - (2)].dtype).val); + (yyval.dtype).type = (yyvsp[(2) - (2)].dtype).type; + } + break; + + case 390: +#line 5643 "parser.y" + { + (yyval.dtype).val = NewStringf("~%s",(yyvsp[(2) - (2)].dtype).val); + (yyval.dtype).type = (yyvsp[(2) - (2)].dtype).type; + } + break; + + case 391: +#line 5647 "parser.y" + { + (yyval.dtype).val = NewStringf("!%s",(yyvsp[(2) - (2)].dtype).val); + (yyval.dtype).type = T_INT; + } + break; + + case 392: +#line 5651 "parser.y" + { + String *qty; + skip_balanced('(',')'); + qty = Swig_symbol_type_qualify((yyvsp[(1) - (2)].type),0); + if (SwigType_istemplate(qty)) { + String *nstr = SwigType_namestr(qty); + Delete(qty); + qty = nstr; + } + (yyval.dtype).val = NewStringf("%s%s",qty,scanner_ccode); + Clear(scanner_ccode); + (yyval.dtype).type = T_INT; + Delete(qty); + } + break; + + case 393: +#line 5667 "parser.y" + { + (yyval.bases) = (yyvsp[(1) - (1)].bases); + } + break; + + case 394: +#line 5672 "parser.y" + { inherit_list = 1; } + break; + + case 395: +#line 5672 "parser.y" + { (yyval.bases) = (yyvsp[(3) - (3)].bases); inherit_list = 0; } + break; + + case 396: +#line 5673 "parser.y" + { (yyval.bases) = 0; } + break; + + case 397: +#line 5676 "parser.y" + { + Hash *list = NewHash(); + Node *base = (yyvsp[(1) - (1)].node); + Node *name = Getattr(base,"name"); + List *lpublic = NewList(); + List *lprotected = NewList(); + List *lprivate = NewList(); + Setattr(list,"public",lpublic); + Setattr(list,"protected",lprotected); + Setattr(list,"private",lprivate); + Delete(lpublic); + Delete(lprotected); + Delete(lprivate); + Append(Getattr(list,Getattr(base,"access")),name); + (yyval.bases) = list; + } + break; + + case 398: +#line 5693 "parser.y" + { + Hash *list = (yyvsp[(1) - (3)].bases); + Node *base = (yyvsp[(3) - (3)].node); + Node *name = Getattr(base,"name"); + Append(Getattr(list,Getattr(base,"access")),name); + (yyval.bases) = list; + } + break; + + case 399: +#line 5702 "parser.y" + { + (yyval.node) = NewHash(); + Setfile((yyval.node),cparse_file); + Setline((yyval.node),cparse_line); + Setattr((yyval.node),"name",(yyvsp[(2) - (2)].str)); + if (last_cpptype && (Strcmp(last_cpptype,"struct") != 0)) { + Setattr((yyval.node),"access","private"); + Swig_warning(WARN_PARSE_NO_ACCESS,cparse_file,cparse_line, + "No access specifier given for base class %s (ignored).\n",(yyvsp[(2) - (2)].str)); + } else { + Setattr((yyval.node),"access","public"); + } + } + break; + + case 400: +#line 5715 "parser.y" + { + (yyval.node) = NewHash(); + Setfile((yyval.node),cparse_file); + Setline((yyval.node),cparse_line); + Setattr((yyval.node),"name",(yyvsp[(4) - (4)].str)); + Setattr((yyval.node),"access",(yyvsp[(2) - (4)].id)); + if (Strcmp((yyvsp[(2) - (4)].id),"public") != 0) { + Swig_warning(WARN_PARSE_PRIVATE_INHERIT, cparse_file, + cparse_line,"%s inheritance ignored.\n", (yyvsp[(2) - (4)].id)); + } + } + break; + + case 401: +#line 5728 "parser.y" + { (yyval.id) = (char*)"public"; } + break; + + case 402: +#line 5729 "parser.y" + { (yyval.id) = (char*)"private"; } + break; + + case 403: +#line 5730 "parser.y" + { (yyval.id) = (char*)"protected"; } + break; + + case 404: +#line 5734 "parser.y" + { + (yyval.id) = (char*)"class"; + if (!inherit_list) last_cpptype = (yyval.id); + } + break; + + case 405: +#line 5738 "parser.y" + { + (yyval.id) = (char *)"typename"; + if (!inherit_list) last_cpptype = (yyval.id); + } + break; + + case 406: +#line 5744 "parser.y" + { + (yyval.id) = (yyvsp[(1) - (1)].id); + } + break; + + case 407: +#line 5747 "parser.y" + { + (yyval.id) = (char*)"struct"; + if (!inherit_list) last_cpptype = (yyval.id); + } + break; + + case 408: +#line 5751 "parser.y" + { + (yyval.id) = (char*)"union"; + if (!inherit_list) last_cpptype = (yyval.id); + } + break; + + case 411: +#line 5761 "parser.y" + { + (yyval.dtype).qualifier = (yyvsp[(1) - (1)].str); + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 412: +#line 5766 "parser.y" + { + (yyval.dtype).qualifier = 0; + (yyval.dtype).throws = (yyvsp[(3) - (4)].pl); + (yyval.dtype).throwf = NewString("1"); + } + break; + + case 413: +#line 5771 "parser.y" + { + (yyval.dtype).qualifier = (yyvsp[(1) - (5)].str); + (yyval.dtype).throws = (yyvsp[(4) - (5)].pl); + (yyval.dtype).throwf = NewString("1"); + } + break; + + case 414: +#line 5776 "parser.y" + { + (yyval.dtype).qualifier = 0; + (yyval.dtype).throws = 0; + (yyval.dtype).throwf = 0; + } + break; + + case 415: +#line 5783 "parser.y" + { + Clear(scanner_ccode); + (yyval.decl).have_parms = 0; + (yyval.decl).defarg = 0; + (yyval.decl).throws = (yyvsp[(1) - (3)].dtype).throws; + (yyval.decl).throwf = (yyvsp[(1) - (3)].dtype).throwf; + } + break; + + case 416: +#line 5790 "parser.y" + { + skip_balanced('{','}'); + (yyval.decl).have_parms = 0; + (yyval.decl).defarg = 0; + (yyval.decl).throws = (yyvsp[(1) - (3)].dtype).throws; + (yyval.decl).throwf = (yyvsp[(1) - (3)].dtype).throwf; + } + break; + + case 417: +#line 5797 "parser.y" + { + Clear(scanner_ccode); + (yyval.decl).parms = (yyvsp[(2) - (4)].pl); + (yyval.decl).have_parms = 1; + (yyval.decl).defarg = 0; + (yyval.decl).throws = 0; + (yyval.decl).throwf = 0; + } + break; + + case 418: +#line 5805 "parser.y" + { + skip_balanced('{','}'); + (yyval.decl).parms = (yyvsp[(2) - (4)].pl); + (yyval.decl).have_parms = 1; + (yyval.decl).defarg = 0; + (yyval.decl).throws = 0; + (yyval.decl).throwf = 0; + } + break; + + case 419: +#line 5813 "parser.y" + { + (yyval.decl).have_parms = 0; + (yyval.decl).defarg = (yyvsp[(2) - (3)].dtype).val; + (yyval.decl).throws = 0; + (yyval.decl).throwf = 0; + } + break; + + case 424: +#line 5829 "parser.y" + { + skip_balanced('(',')'); + Clear(scanner_ccode); + } + break; + + case 425: +#line 5835 "parser.y" + { + String *s = NewStringEmpty(); + SwigType_add_template(s,(yyvsp[(2) - (3)].p)); + (yyval.id) = Char(s); + scanner_last_id(1); + } + break; + + case 426: +#line 5841 "parser.y" + { (yyval.id) = (char*)""; } + break; + + case 427: +#line 5844 "parser.y" + { (yyval.id) = (yyvsp[(1) - (1)].id); } + break; + + case 428: +#line 5845 "parser.y" + { (yyval.id) = (yyvsp[(1) - (1)].id); } + break; + + case 429: +#line 5848 "parser.y" + { (yyval.id) = (yyvsp[(1) - (1)].id); } + break; + + case 430: +#line 5849 "parser.y" + { (yyval.id) = 0; } + break; + + case 431: +#line 5852 "parser.y" + { + (yyval.str) = 0; + if (!(yyval.str)) (yyval.str) = NewStringf("%s%s", (yyvsp[(1) - (2)].str),(yyvsp[(2) - (2)].str)); + Delete((yyvsp[(2) - (2)].str)); + } + break; + + case 432: +#line 5857 "parser.y" + { + (yyval.str) = NewStringf("::%s%s",(yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].str)); + Delete((yyvsp[(4) - (4)].str)); + } + break; + + case 433: +#line 5861 "parser.y" + { + (yyval.str) = NewString((yyvsp[(1) - (1)].str)); + } + break; + + case 434: +#line 5864 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(3) - (3)].str)); + } + break; + + case 435: +#line 5867 "parser.y" + { + (yyval.str) = NewString((yyvsp[(1) - (1)].str)); + } + break; + + case 436: +#line 5870 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(3) - (3)].str)); + } + break; + + case 437: +#line 5875 "parser.y" + { + (yyval.str) = NewStringf("::%s%s",(yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].str)); + Delete((yyvsp[(3) - (3)].str)); + } + break; + + case 438: +#line 5879 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(2) - (2)].str)); + } + break; + + case 439: +#line 5882 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(2) - (2)].str)); + } + break; + + case 440: +#line 5889 "parser.y" + { + (yyval.str) = NewStringf("::~%s",(yyvsp[(2) - (2)].str)); + } + break; + + case 441: +#line 5895 "parser.y" + { + (yyval.str) = NewStringf("%s%s",(yyvsp[(1) - (2)].id),(yyvsp[(2) - (2)].id)); + /* if (Len($2)) { + scanner_last_id(1); + } */ + } + break; + + case 442: +#line 5904 "parser.y" + { + (yyval.str) = 0; + if (!(yyval.str)) (yyval.str) = NewStringf("%s%s", (yyvsp[(1) - (2)].id),(yyvsp[(2) - (2)].str)); + Delete((yyvsp[(2) - (2)].str)); + } + break; + + case 443: +#line 5909 "parser.y" + { + (yyval.str) = NewStringf("::%s%s",(yyvsp[(3) - (4)].id),(yyvsp[(4) - (4)].str)); + Delete((yyvsp[(4) - (4)].str)); + } + break; + + case 444: +#line 5913 "parser.y" + { + (yyval.str) = NewString((yyvsp[(1) - (1)].id)); + } + break; + + case 445: +#line 5916 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(3) - (3)].id)); + } + break; + + case 446: +#line 5919 "parser.y" + { + (yyval.str) = NewString((yyvsp[(1) - (1)].str)); + } + break; + + case 447: +#line 5922 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(3) - (3)].str)); + } + break; + + case 448: +#line 5927 "parser.y" + { + (yyval.str) = NewStringf("::%s%s",(yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].str)); + Delete((yyvsp[(3) - (3)].str)); + } + break; + + case 449: +#line 5931 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(2) - (2)].id)); + } + break; + + case 450: +#line 5934 "parser.y" + { + (yyval.str) = NewStringf("::%s",(yyvsp[(2) - (2)].str)); + } + break; + + case 451: +#line 5937 "parser.y" + { + (yyval.str) = NewStringf("::~%s",(yyvsp[(2) - (2)].id)); + } + break; + + case 452: +#line 5943 "parser.y" + { + (yyval.id) = (char *) malloc(strlen((yyvsp[(1) - (2)].id))+strlen((yyvsp[(2) - (2)].id))+1); + strcpy((yyval.id),(yyvsp[(1) - (2)].id)); + strcat((yyval.id),(yyvsp[(2) - (2)].id)); + } + break; + + case 453: +#line 5948 "parser.y" + { (yyval.id) = (yyvsp[(1) - (1)].id);} + break; + + case 454: +#line 5951 "parser.y" + { + (yyval.str) = NewString((yyvsp[(1) - (1)].id)); + } + break; + + case 455: +#line 5954 "parser.y" + { + skip_balanced('{','}'); + (yyval.str) = NewString(scanner_ccode); + } + break; + + case 456: +#line 5958 "parser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); + } + break; + + case 457: +#line 5963 "parser.y" + { + Hash *n; + (yyval.node) = NewHash(); + n = (yyvsp[(2) - (3)].node); + while(n) { + String *name, *value; + name = Getattr(n,"name"); + value = Getattr(n,"value"); + if (!value) value = (String *) "1"; + Setattr((yyval.node),name, value); + n = nextSibling(n); + } + } + break; + + case 458: +#line 5976 "parser.y" + { (yyval.node) = 0; } + break; + + case 459: +#line 5980 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(1) - (3)].id)); + Setattr((yyval.node),"value",(yyvsp[(3) - (3)].id)); + } + break; + + case 460: +#line 5985 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(1) - (5)].id)); + Setattr((yyval.node),"value",(yyvsp[(3) - (5)].id)); + set_nextSibling((yyval.node),(yyvsp[(5) - (5)].node)); + } + break; + + case 461: +#line 5991 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(1) - (1)].id)); + } + break; + + case 462: +#line 5995 "parser.y" + { + (yyval.node) = NewHash(); + Setattr((yyval.node),"name",(yyvsp[(1) - (3)].id)); + set_nextSibling((yyval.node),(yyvsp[(3) - (3)].node)); + } + break; + + case 463: +#line 6000 "parser.y" + { + (yyval.node) = (yyvsp[(3) - (3)].node); + Setattr((yyval.node),"name",(yyvsp[(1) - (3)].id)); + } + break; + + case 464: +#line 6004 "parser.y" + { + (yyval.node) = (yyvsp[(3) - (5)].node); + Setattr((yyval.node),"name",(yyvsp[(1) - (5)].id)); + set_nextSibling((yyval.node),(yyvsp[(5) - (5)].node)); + } + break; + + case 465: +#line 6011 "parser.y" + { + (yyval.id) = (yyvsp[(1) - (1)].id); + } + break; + + case 466: +#line 6014 "parser.y" + { + (yyval.id) = Char((yyvsp[(1) - (1)].dtype).val); + } + break; + + +/* Line 1267 of yacc.c. */ +#line 10178 "y.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 6021 "parser.y" + + +SwigType *Swig_cparse_type(String *s) { + String *ns; + ns = NewStringf("%s;",s); + Seek(ns,0,SEEK_SET); + scanner_file(ns); + top = 0; + scanner_next_token(PARSETYPE); + yyparse(); + /* Printf(stdout,"typeparse: '%s' ---> '%s'\n", s, top); */ + return top; +} + + +Parm *Swig_cparse_parm(String *s) { + String *ns; + ns = NewStringf("%s;",s); + Seek(ns,0,SEEK_SET); + scanner_file(ns); + top = 0; + scanner_next_token(PARSEPARM); + yyparse(); + /* Printf(stdout,"typeparse: '%s' ---> '%s'\n", s, top); */ + Delete(ns); + return top; +} + + +ParmList *Swig_cparse_parms(String *s) { + String *ns; + char *cs = Char(s); + if (cs && cs[0] != '(') { + ns = NewStringf("(%s);",s); + } else { + ns = NewStringf("%s;",s); + } + Seek(ns,0,SEEK_SET); + scanner_file(ns); + top = 0; + scanner_next_token(PARSEPARMS); + yyparse(); + /* Printf(stdout,"typeparse: '%s' ---> '%s'\n", s, top); */ + return top; +} + + |