From abd7f89523564e5e238e5852585b98f72c3b48f4 Mon Sep 17 00:00:00 2001 From: evans1629 Date: Sat, 2 Mar 2002 23:31:43 +0000 Subject: [PATCH] Fixed line numbering when multi-line macro parameters are used. Changed handling of comments, location is now start of comment. [some problems with this still in processing macros] Fixed most of the problems detected by null checking, except in constraint code. --- lib/standard.h | 9 +- src/Headers/aliasTable.h | 2 +- src/Headers/constraint.h | 33 +- src/Headers/context.h | 10 +- src/Headers/cpphash.h | 11 +- src/Headers/cpplib.h | 8 +- src/Headers/cstring.h | 48 +- src/Headers/cstringList.h | 2 +- src/Headers/cstringSList.h | 2 +- src/Headers/exprChecks.h | 8 +- src/Headers/exprNode.h | 18 +- src/Headers/fileTable.h | 2 +- src/Headers/flagMarker.h | 2 + src/Headers/flagMarkerList.h | 4 +- src/Headers/flags.h | 3 + src/Headers/globals.h | 3 - src/Headers/llerror.h | 10 + src/Headers/misc.h | 38 +- src/Headers/mstring.h | 62 + src/Headers/sRef.h | 4 - src/Headers/splintMacros.nf | 8 +- src/Headers/uentry.h | 2 +- src/Headers/uentryList.h | 3 + src/Headers/valueTable.h | 4 +- src/Makefile.am | 18 +- src/Makefile.in | 61 +- src/abstract.c | 2 +- src/cgrammar.c.der | 5054 +++++++++++++++++----------------- src/cgrammar.y | 26 +- src/clabstract.c | 4 +- src/constraint.c | 2 +- src/constraintExpr.c | 4 +- src/constraintGeneration.c | 979 ++++--- src/constraintTerm.c | 6 +- src/context.c | 184 +- src/cppexp.c | 9 +- src/cpphash.c | 26 +- src/cpplib.c | 431 +-- src/cppmain.c | 6 +- src/cscanner.l | 61 +- src/cstring.c | 94 +- src/cstringList.c | 6 +- src/cstringSList.c | 6 +- src/ctbase.i | 4 +- src/exprChecks.c | 37 +- src/exprNode.c | 161 +- src/fileTable.c | 10 +- src/fileloc.c | 2 + src/flagMarker.c | 29 + src/flagMarkerList.c | 82 +- src/flags.c | 8 +- src/flags.def | 8 +- src/general.c | 13 +- src/inputStream.c | 6 + src/lcllib.c | 4 +- src/llerror.c | 25 +- src/macrocache.c | 2 +- src/message.c | 4 +- src/mtContextNode.c | 6 +- src/nameChecks.c | 28 +- src/osd.c | 4 +- src/sRef.c | 53 +- src/stateValue.c | 3 + src/structNames.c | 2 +- src/uentry.c | 152 +- src/uentryList.c | 2 +- src/usymtab.c | 28 +- src/usymtab_interface.c | 4 +- src/valueTable.c | 3 +- test/Makefile.am | 14 +- test/Makefile.in | 14 +- test/blocks.expect | 22 +- test/compoundstmt.c | 12 + test/compoundstmt.expect | 8 + test/db1.expect | 55 +- test/flags.expect | 6 +- test/help.expect | 2 +- test/moreBufferTests2.expect | 4 +- test/tests2.4.expect | 2 +- test/typeof.c | 14 + test/typeof.expect | 6 + 81 files changed, 4309 insertions(+), 3805 deletions(-) create mode 100644 src/Headers/mstring.h create mode 100644 test/compoundstmt.c create mode 100644 test/compoundstmt.expect create mode 100644 test/typeof.c create mode 100644 test/typeof.expect diff --git a/lib/standard.h b/lib/standard.h index 2274eab..20b39fb 100644 --- a/lib/standard.h +++ b/lib/standard.h @@ -343,11 +343,12 @@ void va_end (va_list va) /*@modifies va;@*/ ; typedef /*@abstract@*/ /*@mutable@*/ void *FILE; typedef /*@abstract@*/ /*@mutable@*/ void *fpos_t; -/*@constant int _IOFBF; @*/ -/*@constant int _IOLBF; @*/ -/*@constant int _IONBF; @*/ +/*@constant size_t _IOFBF; @*/ +/*@constant size_t _IOLBF; @*/ +/*@constant size_t _IONBF; @*/ + +/*@constant size_t BUFSIZ; @*/ /* evans 2002-02-27 change suggested by Walter Briscoe */ -/*@constant int BUFSIZ; @*/ /*@constant int EOF; @*/ /*@constant int FOPEN_MAX; @*/ diff --git a/src/Headers/aliasTable.h b/src/Headers/aliasTable.h index 9075ab3..be50060 100644 --- a/src/Headers/aliasTable.h +++ b/src/Headers/aliasTable.h @@ -13,7 +13,7 @@ typedef /*@only@*/ sRefSet o_sRefSet; typedef /*@exposed@*/ sRef e_sRef; -struct s_aliasTable /*@i32 reserved works for struct identifiers@*/ +struct s_aliasTable { int nelements; int nspace; diff --git a/src/Headers/constraint.h b/src/Headers/constraint.h index 39a1195..173bf57 100644 --- a/src/Headers/constraint.h +++ b/src/Headers/constraint.h @@ -16,7 +16,7 @@ struct s_constraint { arithType ar; constraintExpr expr; bool post; - /*@observer@*/ /*@exposed@*/ /*@dependent@*/ exprNode generatingExpr; + /*@exposed@*/ /*@dependent@*/ exprNode generatingExpr; } ; /*@constant null constraint constraint_undefined; @*/ @@ -38,19 +38,27 @@ extern void constraint_free (/*@only@*/ constraint p_c); /*@i22*/ /*@-czechfcns*/ -extern constraint constraint_makeReadSafeExprNode ( /*@dependent@*/ /*@observer@*/ exprNode p_po, /*@dependent@*/ /*@observer@*/ exprNode p_ind); +extern constraint +constraint_makeReadSafeExprNode (/*@observer@*/ exprNode p_po, + /*@observer@*/ exprNode p_ind); -extern /*@only@*/ constraint constraint_makeWriteSafeExprNode (/*@dependent@*/ /*@observer@*/ exprNode p_po, /*@dependent@*/ /*@observer@*/ exprNode p_ind); +extern /*@only@*/ constraint constraint_makeWriteSafeExprNode (/*@observer@*/ exprNode p_po, + /*@observer@*/ exprNode p_ind); -extern /*@only@*/ constraint constraint_makeReadSafeInt (/*@dependent@*/ /*@observer@*/ exprNode p_t1, int p_index); +extern /*@only@*/ constraint constraint_makeReadSafeInt (/*@observer@*/ exprNode p_t1, int p_index); -extern /*@only@*/ constraint constraint_makeEnsureMaxReadAtLeast (/*@dependent@*/ /*@observer@*/ exprNode p_t1, /*@dependent@*/ /*@observer@*/ exprNode p_t2, fileloc p_sequencePoint); +extern /*@only@*/ constraint +constraint_makeEnsureMaxReadAtLeast (/*@observer@*/ exprNode p_t1, + /*@observer@*/ exprNode p_t2, fileloc p_sequencePoint); -extern void constraint_overWrite (constraint p_c1, /*@observer@*/ constraint p_c2) /*@modifies p_c1 @*/; +extern void constraint_overWrite (constraint p_c1, /*@observer@*/ constraint p_c2) + /*@modifies p_c1 @*/; -extern /*@only@*/ constraint constraint_copy (/*@temp@*/ /*@observer@*/ constraint p_c); +extern /*@only@*/ constraint constraint_copy (/*@temp@*/ constraint p_c); -extern bool fileloc_closer (/*@observer@*/ fileloc p_loc1, /*@observer@*/ fileloc p_loc2, /*@observer@*/ fileloc p_loc3) /*@*/; +extern bool fileloc_closer (/*@observer@*/ fileloc p_loc1, + /*@observer@*/ fileloc p_loc2, + /*@observer@*/ fileloc p_loc3) /*@*/; extern /*@only@*/ cstring arithType_print (arithType p_ar) /*@*/; @@ -106,10 +114,13 @@ extern constraint constraint_addGeneratingExpr (/*@returned@*/ constraint p_c, / extern bool constraint_hasMaxSet(constraint p_c); /*from constraintGenreation.c*/ -extern void exprNode_exprTraverse (/*@dependent@*/ exprNode p_e, bool p_definatelv, bool p_definaterv, /*@temp@*/ /*@observer@*/ fileloc p_sequencePoint); +extern void exprNode_exprTraverse (exprNode p_e, bool p_definatelv, bool p_definaterv, /*@temp@*/ /*@observer@*/ fileloc p_sequencePoint); -extern /*@only@*/ constraintList exprNode_traversRequiresConstraints (/*@dependent@*/ exprNode p_e); -extern /*@only@*/ constraintList exprNode_traversEnsuresConstraints (/*@dependent@*/ exprNode p_e); +extern /*@only@*/ constraintList +exprNode_traversRequiresConstraints (exprNode p_e); + +extern /*@only@*/ constraintList +exprNode_traversEnsuresConstraints (exprNode p_e); extern constraint constraint_togglePost (/*@returned@*/ constraint p_c); extern bool constraint_same (constraint p_c1, constraint p_c2) ; diff --git a/src/Headers/context.h b/src/Headers/context.h index c357e84..bf036a7 100644 --- a/src/Headers/context.h +++ b/src/Headers/context.h @@ -118,8 +118,8 @@ extern void context_resetSpecLines (void) /*@modifies internalState@*/ ; # endif extern void context_exitMacroCache (void); -extern void context_enterSuppressRegion (void); -extern void context_exitSuppressRegion (void); +extern void context_enterSuppressRegion (fileloc); +extern void context_exitSuppressRegion (fileloc); extern void context_enterMacroFile (void); extern typeIdSet context_fileAccessTypes (void); extern void context_addFileAccessType (typeId p_t); @@ -201,7 +201,7 @@ extern void context_setFilename(fileId p_fid, int p_lineno) /*@globals fileloc g_currentloc; @*/ /*@modifies g_currentloc@*/ ; -extern void context_fileSetFlag (flagcode p_f, ynm p_set); +extern void context_fileSetFlag (flagcode p_f, ynm p_set, fileloc p_loc); extern /*@unused@*/ /*@only@*/ cstring context_unparseAccess (void) /*@*/ ; extern bool context_inFunction(void) /*@*/ ; @@ -221,8 +221,8 @@ extern void context_exitTrueClause (exprNode p_pred, exprNode p_tbranch); extern void context_destroyMod (void) /*@modifies internalState@*/ ; extern void context_addMacroCache (/*@only@*/ cstring p_def); extern void context_processAllMacros (void); -extern void context_addComment (/*@only@*/ cstring p_def); -extern void context_enterSuppressLine (int p_count); +extern void context_addComment (/*@only@*/ cstring p_def, fileloc p_loc); +extern void context_enterSuppressLine (int p_count, fileloc p_loc); extern bool context_inSuppressZone (fileloc p_fl) /*@*/ ; extern void context_dumpModuleAccess (FILE *p_fout); extern void context_loadModuleAccess (FILE *p_in); diff --git a/src/Headers/cpphash.h b/src/Headers/cpphash.h index 7341be4..f29180e 100644 --- a/src/Headers/cpphash.h +++ b/src/Headers/cpphash.h @@ -8,7 +8,7 @@ of a hash node. Actually, this may be useless now. */ typedef union u_hashvalue { int ival; - /*@owned@*/ char *cpval; + /*@null@*/ /*@owned@*/ char *cpval; /*@owned@*/ DEFINITION *defn; } hashValue; @@ -26,7 +26,7 @@ struct s_hashNode { /*@null@*/ /*@dependent@*/ hashNode *bucket_hdr; enum node_type type; /* type of special token */ - int length; /* length of token, for quick comparison */ + size_t length; /* length of token, for quick comparison */ cstring name; /* the actual name */ hashValue value; /* pointer to expansion, or whatever */ } ; @@ -47,14 +47,15 @@ extern /*@exposed@*/ hashNode cpphash_install (char *, int, extern void cppReader_hashCleanup (void); extern /*@null@*/ /*@exposed@*/ hashNode cpphash_lookup (char *, int, int); -extern /*@null@*/ /*@exposed@*/ hashNode cpphash_lookupExpand (char *, int, int, bool p_forceExpand); +extern /*@null@*/ /*@exposed@*/ hashNode cpphash_lookupExpand (char *, int, int, + bool p_forceExpand); -extern int cpphash_hashCode (const char *p_name, int p_len, int p_hashsize) /*@*/ ; +extern int cpphash_hashCode (const char *p_name, size_t p_len, int p_hashsize) /*@*/ ; extern void cppReader_saveHashtab (void); extern void cppReader_restoreHashtab (void); extern /*@exposed@*/ hashNode -cpphash_installMacro (char *p_name, int p_len, +cpphash_installMacro (char *p_name, size_t p_len, /*@only@*/ struct definition *p_defn, int p_hash); # else diff --git a/src/Headers/cpplib.h b/src/Headers/cpplib.h index c7890e4..cf8529b 100644 --- a/src/Headers/cpplib.h +++ b/src/Headers/cpplib.h @@ -56,7 +56,7 @@ struct parse_marker { struct arglist { /*@null@*/ struct arglist *next; /*@dependent@*/ char *name; - int length; + size_t length; int argno; int rest_args; }; @@ -460,7 +460,7 @@ struct s_macrodef { /*@null@*/ struct definition *defn; /*@exposed@*/ /*@relnull@*/ char *symnam; /* null if defn is null */ - int symlen; + size_t symlen; }; /* Structure allocated for every #define. For a simple replacement @@ -633,8 +633,8 @@ extern bool isIdentifierChar (char) /*@*/ ; #define INCLUDE_LEN_FUDGE 0 #endif -extern int cppReader_checkMacroName (cppReader *p_pfile, char *p_symname, - cstring p_usage); +extern size_t cppReader_checkMacroName (cppReader *p_pfile, char *p_symname, + cstring p_usage); extern struct operation cppReader_parseNumber (cppReader * p_pfile, char * p_start, int p_olen) /*@requires maxRead(p_start) >= (p_olen - 1) @*/; diff --git a/src/Headers/cstring.h b/src/Headers/cstring.h index cc1bcbd..d6d886b 100644 --- a/src/Headers/cstring.h +++ b/src/Headers/cstring.h @@ -20,17 +20,19 @@ /* typedefs in forwardTypes */ -extern /*@notnull@*/ cstring cstring_create (int p_n) /*@*/ /*@ensures maxSet(result) == p_n @*/ ; +extern /*@notnull@*/ cstring cstring_create (size_t p_n) /*@*/ /*@ensures maxSet(result) == p_n @*/ ; extern /*@only@*/ /*@notnull@*/ cstring cstring_newEmpty (void) ; extern /*@notnull@*/ cstring cstring_appendChar (/*@only@*/ cstring p_s1, char p_c); -extern cstring cstring_concatLength (/*@only@*/ cstring p_s1, char *p_s2, int p_len) /*@*/ /*@requires maxSet(p_s2) >= (p_len - 1) @*/; +extern cstring cstring_concatLength (/*@only@*/ cstring p_s1, char *p_s2, size_t p_len) + /*@*/ + /*@requires maxSet(p_s2) >= (p_len - 1) @*/ ; extern /*@notnull@*/ cstring cstring_prependChar (char p_c, /*@temp@*/ cstring p_s1); extern /*@notnull@*/ cstring cstring_prependCharO (char p_c, /*@only@*/ cstring p_s1); extern cstring cstring_downcase (cstring p_s) /*@*/ ; extern cstring cstring_copy (cstring p_s) /*@*/ /*@ensures maxSet(result) == maxRead(p_s) /\ maxRead(result) == maxRead(p_s) @*/ ; -extern cstring cstring_copyLength (char *p_s, int p_len) /*@*/ /*@requires maxSet(p_s) >= (p_len - 1) @*/; +extern cstring cstring_copyLength (char *p_s, size_t p_len) /*@*/ /*@requires maxSet(p_s) >= (p_len - 1) @*/; extern int cstring_toPosInt (cstring p_s) /*@*/ ; @@ -42,9 +44,10 @@ typedef enum { } cmpcode; extern cmpcode cstring_genericEqual (cstring p_s, cstring p_t, - int p_nchars, + size_t p_nchars, bool p_caseinsensitive, - bool p_lookalike) /*@*/ /*@requires maxRead(p_s) >= p_nchars /\ maxRead(p_t) >= p_nchars @*/ ; + bool p_lookalike) /*@*/ + /*@requires maxRead(p_s) >= p_nchars /\ maxRead(p_t) >= p_nchars @*/ ; /* evans 2001-09-09 - removed conditional compilation on this (for WIN32, OS2) */ extern void cstring_replaceAll (cstring p_s, char p_old, char p_snew) /*@modifies p_s@*/ ; @@ -56,8 +59,10 @@ extern void cstring_replaceLit (/*@unique@*/ cstring p_s, char *p_old, char *p_s extern char cstring_firstChar (cstring p_s) /*@*/ ; extern char cstring_secondChar (cstring p_s) /*@*/ ; extern char cstring_lastChar (cstring p_s) /*@*/ ; -extern char cstring_getChar (cstring p_s, int p_n); -extern void cstring_setChar (cstring p_s, int p_n, char p_c) /*@requires maxRead(p_s) >= (p_n - 1) /\ maxSet(p_s) >= (p_n - 1) @*/ ; +extern char cstring_getChar (cstring p_s, size_t p_n); + +extern void cstring_setChar (cstring p_s, size_t p_n, char p_c) + /*@requires maxRead(p_s) >= (p_n - 1) /\ maxSet(p_s) >= (p_n - 1) @*/ ; # define cstring_secondChar(s) cstring_getChar (s, 2) @@ -65,13 +70,14 @@ extern /*@exposed@*/ /*@notnull@*/ /*@untainted@*/ char * cstring_toCharsSafe (/*@temp@*/ /*@exposed@*/ /*@returned@*/ cstring p_s) /*@*/ ; - extern int cstring_length (cstring p_s) /*@*/ /*@ensures result == maxRead(p_s) @*/; +extern size_t cstring_length (cstring p_s) /*@*/ /*@ensures result == maxRead(p_s) @*/; + extern bool cstring_contains (/*@unique@*/ cstring p_c, cstring p_sub) /*@*/ ; extern bool cstring_containsChar (cstring p_c, char p_ch) /*@*/ ; extern bool cstring_equal (cstring p_c1, cstring p_c2) /*@*/ ; extern bool cstring_equalCaseInsensitive (cstring p_c1, cstring p_c2) /*@*/ ; -extern bool cstring_equalLen (cstring p_c1, cstring p_c2, int p_len) /*@*/ ; -extern bool cstring_equalLenCaseInsensitive (cstring p_c1, cstring p_c2, int p_len) /*@*/ ; +extern bool cstring_equalLen (cstring p_c1, cstring p_c2, size_t p_len) /*@*/ ; +extern bool cstring_equalLenCaseInsensitive (cstring p_c1, cstring p_c2, size_t p_len) /*@*/ ; extern bool cstring_equalPrefix (cstring p_c1, cstring p_c2) /*@*/ ; extern bool cstring_equalPrefixLit (cstring p_c1, /*@observer@*/ const char *p_c2) /*@*/ ; extern bool cstring_equalLit (cstring p_c1, char *p_c2) /*@*/ ; @@ -82,9 +88,11 @@ extern int cstring_xcompare (cstring *p_c1, cstring *p_c2) /*@*/ ; extern bool cstring_hasNonAlphaNumBar (cstring p_s) /*@*/ ; # endif -extern cstring cstring_elide (cstring p_s, int p_len) /*@*/ ; -extern cstring cstring_clip (/*@returned@*/ cstring p_s, int p_len) +extern cstring cstring_elide (cstring p_s, size_t p_len) /*@*/ ; + +extern cstring cstring_clip (/*@returned@*/ cstring p_s, size_t p_len) /*@modifies p_s@*/ ; + extern void cstring_stripChars (cstring p_s, const char *p_clist) /*@modifies p_s@*/ ; extern /*@dependent@*/ cstring @@ -153,9 +161,15 @@ extern /*@observer@*/ /*@dependent@*/ cstring extern cstring cstring_capitalize (cstring p_s) /*@*/ /*@requires maxSet(p_s) >= 0 @*/ ; extern cstring cstring_capitalizeFree (/*@only@*/ cstring p_s) /*@modifies p_s@*/ /*@requires maxSet(p_s) >= 0 /\ maxRead(p_s) >= 0 @*/ ; -extern cstring cstring_fill (cstring p_s, int p_n) /*@*/ /*@requires p_n >= 0 @*/; -extern cstring cstring_prefix (cstring p_s, int p_n) /*@*/ /*@requires maxRead(p_s) >= p_n /\ maxSet(p_s) >= p_n @*/ /*@ensures maxRead(result) == p_n /\ maxSet(result) == p_n @*/; -extern /*@observer@*/ cstring cstring_suffix (cstring p_s, int p_n) /*@*/ ; + +extern cstring cstring_fill (cstring p_s, size_t p_n) /*@*/ /*@requires p_n >= 0 @*/; + +extern cstring cstring_prefix (cstring p_s, size_t p_n) + /*@*/ + /*@requires maxRead(p_s) >= p_n /\ maxSet(p_s) >= p_n @*/ + /*@ensures maxRead(result) == p_n /\ maxSet(result) == p_n @*/ ; + +extern /*@observer@*/ cstring cstring_suffix (cstring p_s, size_t p_n) /*@*/ ; extern cstring cstring_concat (cstring p_s, cstring p_t) /*@*/ /*@requires maxSet(p_s) >= 0 @*/; extern cstring @@ -190,11 +204,11 @@ extern /*@exposed@*/ cstring cstring_afterChar (cstring p_s, char p_c) /*@*/ ; extern /*@observer@*/ cstring cstring_advanceWhiteSpace (cstring) /*@*/ ; extern /*@only@*/ /*@notnull@*/ cstring -cstring_copySegment (cstring p_s, int p_findex, int p_tindex) /*@*/ ; +cstring_copySegment (cstring p_s, size_t p_findex, size_t p_tindex) /*@*/ ; /*drl added 01/22/2001 Expands the escape squences i.e "\\n\\t\\000" becomes "\n\t0" */ -extern cstring cstring_expandEscapes (cstring p_s); +extern /*@notnull@*/ cstring cstring_expandEscapes (cstring p_s); /*drl added 01/23/2001 Gives you the number of characters in an expanded escape squences. This can be different from strlen bc/ of diff --git a/src/Headers/cstringList.h b/src/Headers/cstringList.h index 6a65507..c076646 100644 --- a/src/Headers/cstringList.h +++ b/src/Headers/cstringList.h @@ -49,7 +49,7 @@ extern /*@unused@*/ /*@only@*/ cstring cstringList_unparseAbbrev (cstringList p_ extern /*@unused@*/ /*@only@*/ cstring cstringList_unparse (cstringList p_s) ; extern void cstringList_free (/*@only@*/ cstringList p_s) ; -extern /*@unused@*/ void cstringList_printSpaced (cstringList p_s, int p_indent, int p_gap, int p_linelen); +extern /*@unused@*/ void cstringList_printSpaced (cstringList p_s, size_t p_indent, size_t p_gap, int p_linelen); extern /*@only@*/ cstringList cstringList_copy (cstringList p_s) /*@*/ ; diff --git a/src/Headers/cstringSList.h b/src/Headers/cstringSList.h index 6098787..03c51dd 100644 --- a/src/Headers/cstringSList.h +++ b/src/Headers/cstringSList.h @@ -45,7 +45,7 @@ extern /*@only@*/ cstring cstringSList_unparseAbbrev (cstringSList p_s) /*@*/ ; extern /*@unused@*/ /*@only@*/ cstring cstringSList_unparse (cstringSList p_s) ; extern void cstringSList_free (/*@only@*/ cstringSList p_s) ; -extern void cstringSList_printSpaced (cstringSList p_s, int p_indent, int p_gap, int p_linelen); +extern void cstringSList_printSpaced (cstringSList p_s, size_t p_indent, size_t p_gap, int p_linelen); /*@constant int cstringSListBASESIZE;@*/ # define cstringSListBASESIZE MIDBASESIZE diff --git a/src/Headers/exprChecks.h b/src/Headers/exprChecks.h index f544fe8..cfb9dae 100644 --- a/src/Headers/exprChecks.h +++ b/src/Headers/exprChecks.h @@ -15,7 +15,11 @@ extern void exprNode_checkAllMods (sRefSet p_mods, uentry p_ue); extern void exprNode_checkCallModifyVal (sRef p_s, exprNodeList p_args, exprNode p_f, exprNode p_err); extern void exprChecks_checkEmptyMacroBody (void); extern void exprChecks_checkExport (uentry p_e); -extern void exprNode_checkFunction (uentry p_ue, /*@only@*/ exprNode p_fcnBody); + +extern void exprChecks_inCompoundStatementExpression (void) /*@modifies internalState@*/ ; +extern void exprChecks_leaveCompoundStatementExpression (void) /*@modifies internalState@*/ ; + +extern void exprNode_checkFunction (uentry p_ue, /*@only@*/ exprNode p_body); extern void exprNode_checkFunctionBody (exprNode p_body); extern void exprNode_checkIterBody (/*@only@*/ exprNode p_body); extern void exprNode_checkIterEnd (/*@only@*/ exprNode p_body); @@ -25,6 +29,6 @@ extern void exprNode_checkModifyVal (exprNode p_e, exprNode p_err); extern void exprChecks_checkNullReturn (fileloc p_loc); extern void exprNode_checkPred (cstring p_c, exprNode p_e); extern void exprNode_checkReturn (exprNode p_e); -extern void exprNode_checkStatement (exprNode p_e); +extern void exprChecks_checkStatementEffect (exprNode p_e); extern void exprChecks_checkUsedGlobs (globSet p_decl, globSet p_used); diff --git a/src/Headers/exprNode.h b/src/Headers/exprNode.h index fa18494..93ed2c2 100644 --- a/src/Headers/exprNode.h +++ b/src/Headers/exprNode.h @@ -274,21 +274,23 @@ extern exprNode exprNode_vaArg (/*@only@*/ lltok p_tok, /*@only@*/ exprNode p_arg, /*@only@*/ qtype p_qt) /*@globals internalState@*/ ; +extern bool exprNode_isMultiStatement (exprNode p_e) /*@*/ ; + /* ** Has surrounding quotes. */ -extern exprNode +extern /*@only@*/ /*@notnull@*/ exprNode exprNode_stringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ; -extern /*@only@*/ exprNode +extern /*@only@*/ /*@notnull@*/ exprNode exprNode_wideStringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ; /* ** No surrounding quotes. */ -extern exprNode +extern /*@notnull@*/ exprNode exprNode_rawStringLiteral (/*@only@*/ cstring p_t, /*@only@*/ fileloc p_loc) /*@*/ ; extern exprNode exprNode_comma (/*@only@*/ exprNode p_e1, /*@only@*/ exprNode p_e2) /*@*/ ; @@ -300,9 +302,10 @@ extern exprNode exprNode_caseMarker (/*@only@*/ exprNode p_test, bool p_fallThrough) /*@*/ ; extern exprNode exprNode_concat (/*@only@*/ exprNode p_e1, /*@only@*/ exprNode p_e2); -extern exprNode exprNode_createTok (/*@only@*/ lltok p_t) /*@*/ ; +extern /*@notnull@*/ exprNode exprNode_createTok (/*@only@*/ lltok p_t) /*@*/ ; extern exprNode exprNode_statement (/*@only@*/ exprNode p_e, /*@only@*/ lltok p_t); extern exprNode exprNode_makeBlock (/*@only@*/ exprNode p_e); +extern exprNode exprNode_compoundStatementExpression (/*@only@*/ lltok p_tlparen, /*@only@*/ exprNode p_e) ; extern void exprNode_checkIfPred (exprNode p_pred) /*@modifies g_msgstream@*/ ; @@ -321,8 +324,9 @@ extern exprNode exprNode_return (/*@only@*/ exprNode p_e); extern /*@dependent@*/ /*@observer@*/ cstring exprNode_unparse (/*@temp@*/ exprNode p_e) /*@*/ ; -extern bool exprNode_isCharLit (exprNode p_e) /*@*/ ; -extern bool exprNode_isNumLit (exprNode p_e) /*@*/ ; +extern /*@falsewhennull@*/ bool exprNode_isBlock (exprNode p_e) /*@*/ ; +extern /*@falsewhennull@*/ bool exprNode_isCharLit (exprNode p_e) /*@*/ ; +extern /*@falsewhennull@*/ bool exprNode_isNumLit (exprNode p_e) /*@*/ ; extern exprNode exprNode_makeInitialization (/*@only@*/ idDecl p_t, /*@only@*/ exprNode p_e); @@ -371,7 +375,7 @@ extern exprNode exprNode_updateLocation (/*@returned@*/ exprNode p_e, /*@temp@*/ fileloc p_loc); extern void exprNode_freeShallow (/*@only@*/ exprNode p_e); extern void exprNode_destroyMod (void) /*@modifies internalState@*/ ; -extern bool exprNode_isAssign (exprNode p_e) /*@*/ ; +extern /*@falsewhennull@*/ bool exprNode_isAssign (exprNode p_e) /*@*/ ; /* added 8-15-00 by DRL */ diff --git a/src/Headers/fileTable.h b/src/Headers/fileTable.h index db9a4d3..313f92d 100644 --- a/src/Headers/fileTable.h +++ b/src/Headers/fileTable.h @@ -34,7 +34,7 @@ typedef enum { FILE_NORMAL, FILE_LSLTEMP, FILE_NODELETE, typedef /*@only@*/ ftentry o_ftentry; typedef /*@only@*/ struct { - /*@dependent@*/ /*@exposed@*/ FILE *f; + /*@null@*/ /*@dependent@*/ /*@exposed@*/ FILE *f; /*@only@*/ cstring fname; } *foentry; diff --git a/src/Headers/flagMarker.h b/src/Headers/flagMarker.h index 6d3e8a0..cdf4189 100644 --- a/src/Headers/flagMarker.h +++ b/src/Headers/flagMarker.h @@ -70,6 +70,8 @@ extern /*@only@*/ cstring flagMarker_unparse (flagMarker p_c) /*@*/ ; extern bool flagMarker_beforeMarker (flagMarker p_c, fileloc p_loc) /*@*/ ; +extern bool flagMarker_equal (flagMarker p_f1, flagMarker p_f2) /*@*/ ; + extern ynm flagMarker_getSet (flagMarker p_f) /*@*/ ; extern flagcode flagMarker_getCode (flagMarker p_f) /*@*/ ; extern int flagMarker_getCount (flagMarker p_f) /*@*/ ; diff --git a/src/Headers/flagMarkerList.h b/src/Headers/flagMarkerList.h index cbd5432..86665de 100644 --- a/src/Headers/flagMarkerList.h +++ b/src/Headers/flagMarkerList.h @@ -25,8 +25,8 @@ extern /*@unused@*/ /*@only@*/ cstring flagMarkerList_unparse (flagMarkerList p_s) /*@*/ ; extern void flagMarkerList_free (/*@only@*/ flagMarkerList p_s) ; -extern void flagMarkerList_add (flagMarkerList p_s, /*@only@*/ flagMarker p_fm) - /*@modifies p_s@*/ ; +extern bool flagMarkerList_add (flagMarkerList p_s, /*@only@*/ flagMarker p_fm) + /*@modifies p_s@*/ ; extern ynm flagMarkerList_suppressError (flagMarkerList p_s, flagcode p_code, fileloc p_loc) /*@*/ ; diff --git a/src/Headers/flags.h b/src/Headers/flags.h index 042948f..d81d95a 100644 --- a/src/Headers/flags.h +++ b/src/Headers/flags.h @@ -49,6 +49,9 @@ extern /*@observer@*/ cstring flagcode_unparse (flagcode p_code) /*@*/ ; extern int flagcode_valueIndex (flagcode p_f) /*@*/ ; extern int flagcode_stringIndex (flagcode p_f) /*@*/ ; +extern bool flagcode_equal (flagcode p_code1, flagcode p_code2) /*@*/ ; +# define flagcode_equal(c1, c2) ((c1) == (c2)) + extern /*@observer@*/ cstring flagcodeHint (flagcode p_f); extern flagkind identifyCategory (cstring p_s) /*@*/ ; diff --git a/src/Headers/globals.h b/src/Headers/globals.h index da374fe..aafb222 100644 --- a/src/Headers/globals.h +++ b/src/Headers/globals.h @@ -110,9 +110,6 @@ extern void setFileLine (fileId p_s, int p_line) # define setFileLine(s, line) \ (context_setFilename(s, line)) -/*@constant int PRINTBREADTH;@*/ /* For printing lists. Should be parameter... */ /*@i32@*/ -# define PRINTBREADTH 3 - # else # error "Multiple include" # endif diff --git a/src/Headers/llerror.h b/src/Headers/llerror.h index f9e5f70..ad37b96 100644 --- a/src/Headers/llerror.h +++ b/src/Headers/llerror.h @@ -32,6 +32,16 @@ extern /*@noreturnwhenfalse@*/ void llassertretnull (/*@sef@*/ bool p_test); llbuglit ("llassert failed: " #tst); \ }} while (FALSE) +extern /*@noreturnwhenfalse@*/ void llassertretval (/*@sef@*/ bool p_test, /*@sef@*/ void *p_val); +# define llassertretval(tst,val) \ + do { if (!(tst)) { \ + if (context_getFlag (FLG_TRYTORECOVER)) checkParseError (); \ + lldiagmsg (message ("%s:%d: at source point", \ + cstring_makeLiteralTemp (__FILE__), __LINE__)); \ + llbuglit ("llassert failed: " #tst); \ + /*@-type@*/ return (val); /*@=type@*/ \ + }} while (FALSE) + /* ** Use this for assertions in error-generation code (that ** might lead to infinite loops of failed assertions if diff --git a/src/Headers/misc.h b/src/Headers/misc.h index f31abd7..a13ec3a 100644 --- a/src/Headers/misc.h +++ b/src/Headers/misc.h @@ -33,44 +33,8 @@ extern int long_toInt (long p_x) /*@*/ /*@ensures result==p_x@*/; extern long unsigned longUnsigned_fromInt (int p_x) /*@*/ /*@ensures result==p_x@*/ ; /*@=czechfcns@*/ -/* string functions */ +# include "mstring.h" -typedef /*@concrete@*/ char *mstring; -typedef /*@observer@*/ char *ob_mstring; -typedef /*@observer@*/ /*@null@*/ char *bn_mstring; - -extern /*@unused@*/ /*@notnull@*/ /*@observer@*/ char * - mstring_safePrint (/*@returned@*/ /*@null@*/ mstring p_s) /*@*/ ; -extern char *mstring_spaces (int p_n) /*@*/ ; -extern char *mstring_concat (const char *p_s1, const char *p_s2) /*@*/ ; -extern char *mstring_concatFree (/*@only@*/ char *p_s1, /*@only@*/ char *p_s2) /*@modifies *p_s1, *p_s2*/ ; -extern char *mstring_concatFree1 (/*@only@*/ char *p_s1, const char *p_s2); -extern char *mstring_append (/*@only@*/ char *p_s1, char p_c); -extern char *mstring_copy (/*@null@*/ char *p_s1) /*@*/ /*@ensures maxRead(result) == maxRead(p_s1) /\ maxSet(result) == maxSet(p_s1) @*/ ; -extern bool mstring_equalPrefix (const char *p_c1, const char *p_c2) /*@*/ ; -extern bool mstring_equal (/*@null@*/ const char *p_s1, /*@null@*/ const char *p_s2) /*@*/ ; -extern bool mstring_containsChar (/*@unique@*/ const char *p_s, char p_c) /*@*/ ; -extern bool mstring_containsString (/*@unique@*/ const char *p_s, /*@unique@*/ const char *p_c) /*@*/ ; - -extern int mstring_length (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; -# define mstring_length(s) \ - (((s) != NULL) ? size_toInt (strlen (s)) : 0) - -extern /*@falsewhennull@*/ bool mstring_isDefined (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; -# define mstring_isDefined(s) ((s) != NULL) - -extern /*@nullwhentrue@*/ bool mstring_isEmpty (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; -# define mstring_isEmpty(s) (mstring_length(s) == 0) - -extern void mstring_markFree (/*@owned@*/ char *p_s) /*@modifies *p_s;@*/ ; - -extern /*@notnull@*/ /*@only@*/ char *mstring_create (int p_n) /*@*/ /*@ensures maxSet(result) == p_n /\ maxRead(result) == 0 @*/ ; -extern /*@notnull@*/ /*@only@*/ char *mstring_createEmpty (void) /*@*/ ; - -extern void mstring_free (/*@out@*/ /*@only@*/ /*@null@*/ char *p_s); -# define mstring_free(s) sfree(s) - -# define mstring_createEmpty() mstring_create(0) extern int int_compare (/*@sef@*/ int p_x, /*@sef@*/ int p_y) /*@*/ ; # define int_compare(x,y) (((x) > (y)) ? 1 : (((x) < (y)) ? -1 : 0)) diff --git a/src/Headers/mstring.h b/src/Headers/mstring.h new file mode 100644 index 0000000..0608cb8 --- /dev/null +++ b/src/Headers/mstring.h @@ -0,0 +1,62 @@ +/* +** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001. +** See ../LICENSE for license information. +** +*/ +/* +** mstring.h +*/ + +# ifndef MSTRING_H +# define MSTRING_H + +/* mstring is a non-abstract string (char *) */ + +typedef /*@concrete@*/ char *mstring; +typedef /*@observer@*/ char *ob_mstring; +typedef /*@observer@*/ /*@null@*/ char *bn_mstring; + +extern /*@unused@*/ /*@notnull@*/ /*@observer@*/ char * + mstring_safePrint (/*@returned@*/ /*@null@*/ mstring p_s) /*@*/ ; +extern char *mstring_spaces (int p_n) /*@*/ ; +extern char *mstring_concat (const char *p_s1, const char *p_s2) /*@*/ ; +extern char *mstring_concatFree (/*@only@*/ char *p_s1, /*@only@*/ char *p_s2) /*@modifies *p_s1, *p_s2*/ ; +extern char *mstring_concatFree1 (/*@only@*/ char *p_s1, const char *p_s2); +extern char *mstring_append (/*@only@*/ char *p_s1, char p_c); +extern char *mstring_copy (/*@null@*/ char *p_s1) /*@*/ /*@ensures maxRead(result) == maxRead(p_s1) /\ maxSet(result) == maxSet(p_s1) @*/ ; +extern bool mstring_equalPrefix (const char *p_c1, const char *p_c2) /*@*/ ; +extern bool mstring_equal (/*@null@*/ const char *p_s1, /*@null@*/ const char *p_s2) /*@*/ ; +extern bool mstring_containsChar (/*@unique@*/ const char *p_s, char p_c) /*@*/ ; +extern bool mstring_containsString (/*@unique@*/ const char *p_s, /*@unique@*/ const char *p_c) /*@*/ ; + +extern size_t mstring_length (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; +# define mstring_length(s) \ + (((s) != NULL) ? strlen (s) : 0) + +extern /*@falsewhennull@*/ bool mstring_isDefined (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; +# define mstring_isDefined(s) ((s) != NULL) + +extern /*@nullwhentrue@*/ bool mstring_isEmpty (/*@sef@*/ /*@null@*/ char *p_s) /*@*/ ; +# define mstring_isEmpty(s) (mstring_length(s) == 0) + +extern void mstring_markFree (/*@owned@*/ char *p_s) /*@modifies *p_s;@*/ ; + +extern /*@notnull@*/ /*@only@*/ char *mstring_create (size_t p_n) + /*@*/ + /*@ensures maxSet(result) == p_n /\ maxRead(result) == 0 @*/ ; + +extern /*@notnull@*/ /*@only@*/ char *mstring_createEmpty (void) /*@*/ ; + +extern void mstring_free (/*@out@*/ /*@only@*/ /*@null@*/ char *p_s); +# define mstring_free(s) sfree(s) + +# define mstring_createEmpty() mstring_create(0) + +# else +# error "Multiple include" +# endif + + + + + diff --git a/src/Headers/sRef.h b/src/Headers/sRef.h index 373cc2a..0b007f1 100644 --- a/src/Headers/sRef.h +++ b/src/Headers/sRef.h @@ -697,10 +697,6 @@ sRef_aliasSetCompleteAlkParam (void (p_predf) (sRef, alkind, fileloc), sRef p_s, alkind p_kind, fileloc p_loc) /*@modifies p_s@*/ ; - - - - # else # error "Multiple include" # endif diff --git a/src/Headers/splintMacros.nf b/src/Headers/splintMacros.nf index f441a1d..265edf6 100644 --- a/src/Headers/splintMacros.nf +++ b/src/Headers/splintMacros.nf @@ -111,14 +111,14 @@ /*@notfunction@*/ # define NOALIAS(s,t) (/*@ignore@*/ (s == NULL) || (s != t) /*@end@*/) -/*@i343434*/ /*fix this before release verion*/ -/* get rid of @-formatconst@ */ +/*@i34@*/ /*fix this before release version*/ +/* evans 2002-02-24: got rid of -formatconst */ /*@notfunction@*/ # define TPRINTF(arg) \ - do { /*@-mustfree@*/ /*@-null@*/ /*@-formatconst@*/ (void) fflush (stderr); (void) fflush (stdout); \ + do { /*@-mustfree@*/ /*@-null@*/ (void) fflush (stderr); (void) fflush (stdout); \ printf ("%s:%d [%s]: >> ", __FILE__, __LINE__, cstring_toCharsSafe (fileloc_unparse(g_currentloc))); \ - (void)printf arg; printf("\n"); /*@=formatconst@*/ /*@=mustfree@*/ /*@=null@*/ (void) fflush (stdout); \ + (void)printf arg; printf("\n"); /*@=mustfree@*/ /*@=null@*/ (void) fflush (stdout); \ } while (FALSE) /* diff --git a/src/Headers/uentry.h b/src/Headers/uentry.h index 1b030a1..4b89966 100644 --- a/src/Headers/uentry.h +++ b/src/Headers/uentry.h @@ -53,7 +53,7 @@ typedef enum { BB_NOTNULLTERMINATED /* buffer is known to be not nullterm */ } bbufstate; -typedef struct s_bbufinfo { +typedef /*@null@*/ struct s_bbufinfo { bbufstate bufstate; /* state of the buffer */ int size; /* size of the buffer allocated */ int len; /* len of the buffer VALID ONLY IF state is NULLTERM */ diff --git a/src/Headers/uentryList.h b/src/Headers/uentryList.h index c736e16..56cd289 100644 --- a/src/Headers/uentryList.h +++ b/src/Headers/uentryList.h @@ -92,6 +92,9 @@ extern bool uentryList_matchParams (uentryList p_p1, uentryList p_p2, bool p_for /*@constant int uentryListBASESIZE;@*/ # define uentryListBASESIZE MIDBASESIZE +/*@constant int uentryList_abbrevBreadth@*/ +# define uentryList_abbrevBreadth 3 + # else # error "Multiple include" # endif diff --git a/src/Headers/valueTable.h b/src/Headers/valueTable.h index f188920..51efe10 100644 --- a/src/Headers/valueTable.h +++ b/src/Headers/valueTable.h @@ -57,11 +57,11 @@ extern /*@only@*/ valueTable valueTable_copy (valueTable p_s) ; # define valueTable_elements(p_g, m_key, m_el) \ { if (valueTable_isDefined (p_g)) { int m_ind; \ - { /*@i32@*/ for (m_ind = 0 ; m_ind < (p_g)->size; m_ind++) \ + { for (m_ind = 0 ; m_ind < (p_g)->size; m_ind++) \ { ghbucket m_hb; m_hb = (p_g)->buckets[m_ind]; \ if (m_hb != NULL) { \ int m_j; \ - for (m_j = 0; m_j < (m_hb)->size; m_j++) { \ + for (m_j = 0; m_j < (m_hb)->size; m_j++) { \ cstring m_key; stateValue m_el; m_key = (m_hb)->entries[m_j]->key; \ /*@access stateValue@*/ m_el = (stateValue) (m_hb)->entries[m_j]->val; /*@noaccess stateValue@*/ diff --git a/src/Makefile.am b/src/Makefile.am index b5164d1..c651531 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -36,16 +36,16 @@ LISTSRC = clauseStack.c filelocStack.c \ CPPSRC = cppmain.c cpplib.c cppexp.c cpphash.c cpperror.c -CSRC = uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \ +CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \ stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \ globalsClause.c modifiesClause.c warnClause.c functionClause.c \ functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \ metaStateExpression.c metaStateSpecifier.c functionConstraint.c -SPLINTSRC = exprNode.c exprChecks.c llmain.c +SPLINTSRC = exprNode.c exprChecks.c llmain.c $(OVERFLOWCHSRC) CHECKSRC = structNames.c transferChecks.c varKinds.c nameChecks.c -GLOBSRC = context.c globals.c flags.c general.c osd.c reader.c mtreader.c +GLOBSRC = globals.c flags.c general.c osd.c reader.c mtreader.c GRAMSRC = cgrammar.c cscanner.c mtscanner.c mtgrammar.c llgrammar.c signature.c @@ -245,7 +245,7 @@ DER_BISON_FILES = signature.c.der cgrammar.c.der mtgrammar.c.der \ DER_FILES = $(DER_BISON_FILES) -COMMONSRC = $(OVERFLOWCHSRC) $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \ +COMMONSRC = $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \ $(GLOBSRC) $(IFACESRC) $(LISTSRC) $(SETSRC) $(METASTATESRC) ALLSRC = $(GRAMSRC) $(COMMONSRC) $(SPLINTSRC) $(DER_FILES) $(HEADERSRC) @@ -299,7 +299,7 @@ Headers/cgrammar_tokens.h cgrammar.c: cgrammar.c.der cgrammar.y $(CP) cgrammar.c.der cgrammar.c; \ else \ echo '* Making cgrammar.c'; \ - echo '* Expect 142 shift/reduce conflicts and 111 reduce/reduce conflicts.'; \ + echo '* Expect 145 shift/reduce conflicts and 111 reduce/reduce conflicts.'; \ echo '* (see cgrammar.y for explanation)'; \ $(BISON) $(YFLAGS) cgrammar.y; \ $(CAT) bison.head cgrammar.tab.c bison.reset >cgrammar.c; \ @@ -375,9 +375,11 @@ etags: lintnew: splintme splintme: - ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint \ - +forcehints -misplacedsharequal +showsourceloc -unrecogcomments \ - -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw + ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw + +splinttest: + ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude cpplib.c +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw +keep +supcounts +partial -null + lintbuffercheck: ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint \ diff --git a/src/Makefile.in b/src/Makefile.in index 7cd206a..7bbf655 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -117,17 +117,17 @@ LISTSRC = clauseStack.c filelocStack.c \ CPPSRC = cppmain.c cpplib.c cppexp.c cpphash.c cpperror.c -CSRC = uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \ +CSRC = context.c uentry.c cprim.c macrocache.c qual.c qtype.c stateClause.c \ stateClauseList.c ctype.c cvar.c clabstract.c idDecl.c clause.c \ globalsClause.c modifiesClause.c warnClause.c functionClause.c \ functionClauseList.c metaStateConstraint.c metaStateConstraintList.c \ metaStateExpression.c metaStateSpecifier.c functionConstraint.c -SPLINTSRC = exprNode.c exprChecks.c llmain.c +SPLINTSRC = exprNode.c exprChecks.c llmain.c $(OVERFLOWCHSRC) CHECKSRC = structNames.c transferChecks.c varKinds.c nameChecks.c -GLOBSRC = context.c globals.c flags.c general.c osd.c reader.c mtreader.c +GLOBSRC = globals.c flags.c general.c osd.c reader.c mtreader.c GRAMSRC = cgrammar.c cscanner.c mtscanner.c mtgrammar.c llgrammar.c signature.c @@ -329,7 +329,7 @@ DER_BISON_FILES = signature.c.der cgrammar.c.der mtgrammar.c.der \ DER_FILES = $(DER_BISON_FILES) -COMMONSRC = $(OVERFLOWCHSRC) $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \ +COMMONSRC = $(CPPSRC) $(CSRC) $(CHECKSRC) $(GENERALSRC) \ $(GLOBSRC) $(IFACESRC) $(LISTSRC) $(SETSRC) $(METASTATESRC) @@ -397,17 +397,13 @@ lcl_DEPENDENCIES = lcl_LDFLAGS = am_splint_OBJECTS = cgrammar.$(OBJEXT) cscanner.$(OBJEXT) \ mtscanner.$(OBJEXT) mtgrammar.$(OBJEXT) llgrammar.$(OBJEXT) \ - signature.$(OBJEXT) constraintGeneration.$(OBJEXT) \ - constraintTerm.$(OBJEXT) constraintExprData.$(OBJEXT) \ - constraintExpr.$(OBJEXT) constraint.$(OBJEXT) \ - constraintList.$(OBJEXT) constraintResolve.$(OBJEXT) \ - constraintOutput.$(OBJEXT) loopHeuristics.$(OBJEXT) \ - cppmain.$(OBJEXT) cpplib.$(OBJEXT) cppexp.$(OBJEXT) \ - cpphash.$(OBJEXT) cpperror.$(OBJEXT) uentry.$(OBJEXT) \ - cprim.$(OBJEXT) macrocache.$(OBJEXT) qual.$(OBJEXT) \ - qtype.$(OBJEXT) stateClause.$(OBJEXT) stateClauseList.$(OBJEXT) \ - ctype.$(OBJEXT) cvar.$(OBJEXT) clabstract.$(OBJEXT) \ - idDecl.$(OBJEXT) clause.$(OBJEXT) globalsClause.$(OBJEXT) \ + signature.$(OBJEXT) cppmain.$(OBJEXT) cpplib.$(OBJEXT) \ + cppexp.$(OBJEXT) cpphash.$(OBJEXT) cpperror.$(OBJEXT) \ + context.$(OBJEXT) uentry.$(OBJEXT) cprim.$(OBJEXT) \ + macrocache.$(OBJEXT) qual.$(OBJEXT) qtype.$(OBJEXT) \ + stateClause.$(OBJEXT) stateClauseList.$(OBJEXT) ctype.$(OBJEXT) \ + cvar.$(OBJEXT) clabstract.$(OBJEXT) idDecl.$(OBJEXT) \ + clause.$(OBJEXT) globalsClause.$(OBJEXT) \ modifiesClause.$(OBJEXT) warnClause.$(OBJEXT) \ functionClause.$(OBJEXT) functionClauseList.$(OBJEXT) \ metaStateConstraint.$(OBJEXT) metaStateConstraintList.$(OBJEXT) \ @@ -422,16 +418,15 @@ am_splint_OBJECTS = cgrammar.$(OBJEXT) cscanner.$(OBJEXT) \ sRefTable.$(OBJEXT) genericTable.$(OBJEXT) ekind.$(OBJEXT) \ usymtab.$(OBJEXT) multiVal.$(OBJEXT) lltok.$(OBJEXT) \ sRef.$(OBJEXT) lcllib.$(OBJEXT) randomNumbers.$(OBJEXT) \ - fileLib.$(OBJEXT) context.$(OBJEXT) globals.$(OBJEXT) \ - flags.$(OBJEXT) general.$(OBJEXT) osd.$(OBJEXT) \ - reader.$(OBJEXT) mtreader.$(OBJEXT) clauseStack.$(OBJEXT) \ - filelocStack.$(OBJEXT) cstringList.$(OBJEXT) \ - cstringSList.$(OBJEXT) sRefSetList.$(OBJEXT) \ - ctypeList.$(OBJEXT) enumNameList.$(OBJEXT) \ - enumNameSList.$(OBJEXT) exprNodeList.$(OBJEXT) \ - exprNodeSList.$(OBJEXT) uentryList.$(OBJEXT) \ - fileIdList.$(OBJEXT) filelocList.$(OBJEXT) qualList.$(OBJEXT) \ - sRefList.$(OBJEXT) flagMarkerList.$(OBJEXT) \ + fileLib.$(OBJEXT) globals.$(OBJEXT) flags.$(OBJEXT) \ + general.$(OBJEXT) osd.$(OBJEXT) reader.$(OBJEXT) \ + mtreader.$(OBJEXT) clauseStack.$(OBJEXT) filelocStack.$(OBJEXT) \ + cstringList.$(OBJEXT) cstringSList.$(OBJEXT) \ + sRefSetList.$(OBJEXT) ctypeList.$(OBJEXT) \ + enumNameList.$(OBJEXT) enumNameSList.$(OBJEXT) \ + exprNodeList.$(OBJEXT) exprNodeSList.$(OBJEXT) \ + uentryList.$(OBJEXT) fileIdList.$(OBJEXT) filelocList.$(OBJEXT) \ + qualList.$(OBJEXT) sRefList.$(OBJEXT) flagMarkerList.$(OBJEXT) \ idDeclList.$(OBJEXT) flagSpec.$(OBJEXT) globSet.$(OBJEXT) \ intSet.$(OBJEXT) typeIdSet.$(OBJEXT) guardSet.$(OBJEXT) \ usymIdSet.$(OBJEXT) sRefSet.$(OBJEXT) stateInfo.$(OBJEXT) \ @@ -448,7 +443,12 @@ am_splint_OBJECTS = cgrammar.$(OBJEXT) cscanner.$(OBJEXT) \ mtLoseReference.$(OBJEXT) mtDefaultsDeclList.$(OBJEXT) \ mtDefaultsDecl.$(OBJEXT) mtMergeItem.$(OBJEXT) \ mtMergeClause.$(OBJEXT) mtMergeClauseList.$(OBJEXT) \ - exprNode.$(OBJEXT) exprChecks.$(OBJEXT) llmain.$(OBJEXT) + exprNode.$(OBJEXT) exprChecks.$(OBJEXT) llmain.$(OBJEXT) \ + constraintGeneration.$(OBJEXT) constraintTerm.$(OBJEXT) \ + constraintExprData.$(OBJEXT) constraintExpr.$(OBJEXT) \ + constraint.$(OBJEXT) constraintList.$(OBJEXT) \ + constraintResolve.$(OBJEXT) constraintOutput.$(OBJEXT) \ + loopHeuristics.$(OBJEXT) splint_OBJECTS = $(am_splint_OBJECTS) splint_LDFLAGS = @@ -986,7 +986,7 @@ Headers/cgrammar_tokens.h cgrammar.c: cgrammar.c.der cgrammar.y $(CP) cgrammar.c.der cgrammar.c; \ else \ echo '* Making cgrammar.c'; \ - echo '* Expect 142 shift/reduce conflicts and 111 reduce/reduce conflicts.'; \ + echo '* Expect 145 shift/reduce conflicts and 111 reduce/reduce conflicts.'; \ echo '* (see cgrammar.y for explanation)'; \ $(BISON) $(YFLAGS) cgrammar.y; \ $(CAT) bison.head cgrammar.tab.c bison.reset >cgrammar.c; \ @@ -1051,9 +1051,10 @@ etags: lintnew: splintme splintme: - ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint \ - +forcehints -misplacedsharequal +showsourceloc -unrecogcomments \ - -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw + ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -supcounts -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw + +splinttest: + ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude cpplib.c +forcehints -misplacedsharequal +showsourceloc -unrecogcomments -fcnuse -incondefs -exportlocal -constuse -mts file -mts filerw +keep +supcounts +partial -null lintbuffercheck: ./splint $(DEFAULT_INCLUDES) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) +singleinclude $(LINTSRC) $(LCLSRC) -dump lclint \ diff --git a/src/abstract.c b/src/abstract.c index 46f8c4a..978ab86 100644 --- a/src/abstract.c +++ b/src/abstract.c @@ -1078,7 +1078,7 @@ importNode_makeBracketed (/*@only@*/ ltoken t) static cstring extractQuote (/*@only@*/ cstring s) { - int len = cstring_length (s); + size_t len = cstring_length (s); char *sc = cstring_toCharsSafe (s); cstring t; diff --git a/src/cgrammar.c.der b/src/cgrammar.c.der index 5706a92..6f6f132 100644 --- a/src/cgrammar.c.der +++ b/src/cgrammar.c.der @@ -97,155 +97,156 @@ #define TQUEST 295 #define CSIZEOF 296 #define CALIGNOF 297 -#define ARROW_OP 298 -#define CTYPEDEF 299 -#define COFFSETOF 300 -#define INC_OP 301 -#define DEC_OP 302 -#define LEFT_OP 303 -#define RIGHT_OP 304 -#define LE_OP 305 -#define GE_OP 306 -#define EQ_OP 307 -#define NE_OP 308 -#define AND_OP 309 -#define OR_OP 310 -#define MUL_ASSIGN 311 -#define DIV_ASSIGN 312 -#define MOD_ASSIGN 313 -#define ADD_ASSIGN 314 -#define SUB_ASSIGN 315 -#define LEFT_ASSIGN 316 -#define RIGHT_ASSIGN 317 -#define AND_ASSIGN 318 -#define XOR_ASSIGN 319 -#define OR_ASSIGN 320 -#define CSTRUCT 321 -#define CUNION 322 -#define CENUM 323 -#define VA_ARG 324 -#define VA_DCL 325 -#define QWARN 326 -#define QGLOBALS 327 -#define QMODIFIES 328 -#define QNOMODS 329 -#define QCONSTANT 330 -#define QFUNCTION 331 -#define QITER 332 -#define QDEFINES 333 -#define QUSES 334 -#define QALLOCATES 335 -#define QSETS 336 -#define QRELEASES 337 -#define QPRECLAUSE 338 -#define QPOSTCLAUSE 339 -#define QINVARIANT 340 -#define QALT 341 -#define QUNDEF 342 -#define QKILLED 343 -#define QENDMACRO 344 -#define LLMACRO 345 -#define LLMACROITER 346 -#define LLMACROEND 347 -#define TENDMACRO 348 -#define QSWITCHBREAK 349 -#define QLOOPBREAK 350 -#define QINNERBREAK 351 -#define QSAFEBREAK 352 -#define QINNERCONTINUE 353 -#define QFALLTHROUGH 354 -#define QLINTNOTREACHED 355 -#define QLINTFALLTHROUGH 356 -#define QLINTFALLTHRU 357 -#define QARGSUSED 358 -#define QPRINTFLIKE 359 -#define QLINTPRINTFLIKE 360 -#define QSCANFLIKE 361 -#define QMESSAGELIKE 362 -#define QNOTREACHED 363 -#define QCONST 364 -#define QVOLATILE 365 -#define QINLINE 366 -#define QEXTENSION 367 -#define QEXTERN 368 -#define QSTATIC 369 -#define QAUTO 370 -#define QREGISTER 371 -#define QOUT 372 -#define QIN 373 -#define QYIELD 374 -#define QONLY 375 -#define QTEMP 376 -#define QSHARED 377 -#define QREF 378 -#define QUNIQUE 379 -#define QCHECKED 380 -#define QUNCHECKED 381 -#define QCHECKEDSTRICT 382 -#define QCHECKMOD 383 -#define QKEEP 384 -#define QKEPT 385 -#define QPARTIAL 386 -#define QSPECIAL 387 -#define QOWNED 388 -#define QDEPENDENT 389 -#define QRETURNED 390 -#define QEXPOSED 391 -#define QNULL 392 -#define QOBSERVER 393 -#define QISNULL 394 -#define QEXITS 395 -#define QMAYEXIT 396 -#define QNEVEREXIT 397 -#define QTRUEEXIT 398 -#define QFALSEEXIT 399 -#define QLONG 400 -#define QSIGNED 401 -#define QUNSIGNED 402 -#define QSHORT 403 -#define QUNUSED 404 -#define QSEF 405 -#define QNOTNULL 406 -#define QRELNULL 407 -#define QABSTRACT 408 -#define QCONCRETE 409 -#define QMUTABLE 410 -#define QIMMUTABLE 411 -#define QTRUENULL 412 -#define QFALSENULL 413 -#define QEXTERNAL 414 -#define QREFCOUNTED 415 -#define QREFS 416 -#define QNEWREF 417 -#define QTEMPREF 418 -#define QKILLREF 419 -#define QRELDEF 420 -#define CGCHAR 421 -#define CBOOL 422 -#define CINT 423 -#define CGFLOAT 424 -#define CDOUBLE 425 -#define CVOID 426 -#define QANYTYPE 427 -#define QINTEGRALTYPE 428 -#define QUNSIGNEDINTEGRALTYPE 429 -#define QSIGNEDINTEGRALTYPE 430 -#define QNULLTERMINATED 431 -#define QSETBUFFERSIZE 432 -#define QSETSTRINGLENGTH 433 -#define QMAXSET 434 -#define QMAXREAD 435 -#define QTESTINRANGE 436 -#define TCAND 437 -#define IDENTIFIER 438 -#define NEW_IDENTIFIER 439 -#define TYPE_NAME_OR_ID 440 -#define CANNOTATION 441 -#define CCONSTANT 442 -#define ITER_NAME 443 -#define ITER_ENDNAME 444 -#define TYPE_NAME 445 -#define METASTATE_NAME 446 +#define CTYPEOF 298 +#define ARROW_OP 299 +#define CTYPEDEF 300 +#define COFFSETOF 301 +#define INC_OP 302 +#define DEC_OP 303 +#define LEFT_OP 304 +#define RIGHT_OP 305 +#define LE_OP 306 +#define GE_OP 307 +#define EQ_OP 308 +#define NE_OP 309 +#define AND_OP 310 +#define OR_OP 311 +#define MUL_ASSIGN 312 +#define DIV_ASSIGN 313 +#define MOD_ASSIGN 314 +#define ADD_ASSIGN 315 +#define SUB_ASSIGN 316 +#define LEFT_ASSIGN 317 +#define RIGHT_ASSIGN 318 +#define AND_ASSIGN 319 +#define XOR_ASSIGN 320 +#define OR_ASSIGN 321 +#define CSTRUCT 322 +#define CUNION 323 +#define CENUM 324 +#define VA_ARG 325 +#define VA_DCL 326 +#define QWARN 327 +#define QGLOBALS 328 +#define QMODIFIES 329 +#define QNOMODS 330 +#define QCONSTANT 331 +#define QFUNCTION 332 +#define QITER 333 +#define QDEFINES 334 +#define QUSES 335 +#define QALLOCATES 336 +#define QSETS 337 +#define QRELEASES 338 +#define QPRECLAUSE 339 +#define QPOSTCLAUSE 340 +#define QINVARIANT 341 +#define QALT 342 +#define QUNDEF 343 +#define QKILLED 344 +#define QENDMACRO 345 +#define LLMACRO 346 +#define LLMACROITER 347 +#define LLMACROEND 348 +#define TENDMACRO 349 +#define QSWITCHBREAK 350 +#define QLOOPBREAK 351 +#define QINNERBREAK 352 +#define QSAFEBREAK 353 +#define QINNERCONTINUE 354 +#define QFALLTHROUGH 355 +#define QLINTNOTREACHED 356 +#define QLINTFALLTHROUGH 357 +#define QLINTFALLTHRU 358 +#define QARGSUSED 359 +#define QPRINTFLIKE 360 +#define QLINTPRINTFLIKE 361 +#define QSCANFLIKE 362 +#define QMESSAGELIKE 363 +#define QNOTREACHED 364 +#define QCONST 365 +#define QVOLATILE 366 +#define QINLINE 367 +#define QEXTENSION 368 +#define QEXTERN 369 +#define QSTATIC 370 +#define QAUTO 371 +#define QREGISTER 372 +#define QOUT 373 +#define QIN 374 +#define QYIELD 375 +#define QONLY 376 +#define QTEMP 377 +#define QSHARED 378 +#define QREF 379 +#define QUNIQUE 380 +#define QCHECKED 381 +#define QUNCHECKED 382 +#define QCHECKEDSTRICT 383 +#define QCHECKMOD 384 +#define QKEEP 385 +#define QKEPT 386 +#define QPARTIAL 387 +#define QSPECIAL 388 +#define QOWNED 389 +#define QDEPENDENT 390 +#define QRETURNED 391 +#define QEXPOSED 392 +#define QNULL 393 +#define QOBSERVER 394 +#define QISNULL 395 +#define QEXITS 396 +#define QMAYEXIT 397 +#define QNEVEREXIT 398 +#define QTRUEEXIT 399 +#define QFALSEEXIT 400 +#define QLONG 401 +#define QSIGNED 402 +#define QUNSIGNED 403 +#define QSHORT 404 +#define QUNUSED 405 +#define QSEF 406 +#define QNOTNULL 407 +#define QRELNULL 408 +#define QABSTRACT 409 +#define QCONCRETE 410 +#define QMUTABLE 411 +#define QIMMUTABLE 412 +#define QTRUENULL 413 +#define QFALSENULL 414 +#define QEXTERNAL 415 +#define QREFCOUNTED 416 +#define QREFS 417 +#define QNEWREF 418 +#define QTEMPREF 419 +#define QKILLREF 420 +#define QRELDEF 421 +#define CGCHAR 422 +#define CBOOL 423 +#define CINT 424 +#define CGFLOAT 425 +#define CDOUBLE 426 +#define CVOID 427 +#define QANYTYPE 428 +#define QINTEGRALTYPE 429 +#define QUNSIGNEDINTEGRALTYPE 430 +#define QSIGNEDINTEGRALTYPE 431 +#define QNULLTERMINATED 432 +#define QSETBUFFERSIZE 433 +#define QSETSTRINGLENGTH 434 +#define QMAXSET 435 +#define QMAXREAD 436 +#define QTESTINRANGE 437 +#define TCAND 438 +#define IDENTIFIER 439 +#define NEW_IDENTIFIER 440 +#define TYPE_NAME_OR_ID 441 +#define CANNOTATION 442 +#define CCONSTANT 443 +#define ITER_NAME 444 +#define ITER_ENDNAME 445 +#define TYPE_NAME 446 +#define METASTATE_NAME 447 /* @@ -366,11 +367,11 @@ typedef union -#define YYFINAL 1210 +#define YYFINAL 1233 #define YYFLAG -32768 -#define YYNTBASE 193 +#define YYNTBASE 194 -#define YYTRANSLATE(x) ((unsigned)(x) <= 446 ? yytranslate[x] : 454) +#define YYTRANSLATE(x) ((unsigned)(x) <= 447 ? yytranslate[x] : 459) static const short yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -417,7 +418,7 @@ static const short yytranslate[] = { 0, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192 + 187, 188, 189, 190, 191, 192, 193 }; #if YYDEBUG != 0 @@ -439,348 +440,354 @@ static const short yyprhs[] = { 0, 410, 412, 416, 421, 424, 428, 432, 436, 438, 440, 442, 446, 448, 450, 454, 459, 462, 466, 470, 474, 475, 477, 479, 483, 485, 487, 489, 493, 495, 497, - 499, 504, 508, 513, 520, 526, 532, 535, 538, 540, - 544, 546, 549, 552, 555, 558, 561, 564, 567, 570, - 572, 574, 578, 580, 590, 591, 595, 600, 603, 608, - 611, 613, 618, 620, 624, 628, 632, 634, 638, 642, - 644, 648, 652, 654, 658, 662, 666, 670, 672, 676, - 680, 682, 686, 688, 692, 694, 698, 700, 701, 706, - 708, 709, 714, 716, 717, 718, 726, 728, 732, 736, - 740, 744, 748, 752, 756, 760, 764, 768, 772, 774, - 778, 779, 781, 783, 785, 787, 789, 793, 794, 804, - 805, 817, 820, 821, 828, 829, 838, 843, 848, 849, - 850, 853, 855, 860, 861, 866, 868, 872, 877, 880, - 883, 886, 888, 891, 895, 898, 900, 904, 906, 908, - 910, 912, 914, 917, 918, 925, 928, 931, 932, 939, - 940, 946, 948, 950, 952, 954, 956, 958, 960, 962, - 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, - 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, - 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, - 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, - 1044, 1046, 1048, 1050, 1053, 1056, 1059, 1062, 1065, 1068, - 1071, 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, - 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1129, - 1131, 1136, 1138, 1142, 1145, 1148, 1151, 1152, 1154, 1155, - 1156, 1157, 1170, 1171, 1172, 1184, 1191, 1198, 1199, 1200, - 1211, 1212, 1213, 1224, 1230, 1236, 1241, 1246, 1247, 1249, - 1251, 1254, 1260, 1264, 1267, 1272, 1274, 1278, 1283, 1290, - 1291, 1300, 1305, 1307, 1311, 1314, 1316, 1321, 1323, 1325, - 1328, 1331, 1333, 1336, 1338, 1341, 1343, 1345, 1347, 1350, - 1352, 1355, 1358, 1362, 1364, 1368, 1370, 1374, 1376, 1378, - 1382, 1383, 1386, 1387, 1392, 1397, 1399, 1401, 1404, 1406, - 1408, 1411, 1412, 1414, 1420, 1423, 1427, 1431, 1436, 1440, - 1445, 1450, 1456, 1458, 1460, 1462, 1464, 1466, 1468, 1470, - 1472, 1474, 1476, 1478, 1480, 1483, 1486, 1494, 1501, 1504, - 1505, 1506, 1517, 1518, 1525, 1527, 1529, 1531, 1533, 1536, - 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1554, 1556, 1557, - 1561, 1564, 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, - 1583, 1585, 1587, 1591, 1593, 1595, 1598, 1601, 1602, 1605, - 1606, 1611, 1612, 1619, 1620, 1624, 1625, 1631, 1635, 1638, - 1642, 1643, 1644, 1645, 1646, 1647, 1649, 1652, 1655, 1659, - 1662, 1666, 1670, 1675, 1678, 1681, 1685, 1689, 1694, 1696, - 1699, 1701, 1704, 1706, 1709, 1711, 1714, 1716, 1719, 1721, - 1726, 1729, 1730, 1736, 1737, 1744, 1749, 1754, 1755, 1756, - 1767, 1769, 1770, 1775, 1777, 1779, 1781, 1783, 1785, 1788, - 1790, 1794, 1796, 1801, 1805, 1810, 1817, 1823, 1829, 1832, - 1835, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, - 1863, 1865, 1870, 1872, 1876, 1880, 1884, 1886, 1890, 1894, - 1896, 1900, 1904, 1906, 1910, 1914, 1918, 1922, 1924, 1928, - 1932, 1934, 1938, 1940, 1944, 1946, 1950, 1952, 1956, 1958, - 1962, 1964, 1965, 1966, 1974, 1976, 1980, 1984, 1988, 1992, - 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2022, 2023, 2025, - 2028, 2036, 2039, 2042, 2050, 2057, 2060, 2064, 2067, 2071, - 2074, 2078, 2082, 2086, 2090, 2093, 2097, 2098, 2100, 2102, - 2104, 2106, 2108, 2110, 2112, 2114 + 498, 503, 505, 510, 514, 519, 526, 532, 538, 541, + 544, 552, 554, 558, 560, 563, 566, 569, 572, 575, + 578, 581, 584, 586, 588, 592, 594, 604, 605, 609, + 614, 617, 622, 625, 627, 632, 634, 638, 642, 646, + 648, 652, 656, 658, 662, 666, 668, 672, 676, 680, + 684, 686, 690, 694, 696, 700, 702, 706, 708, 712, + 714, 715, 720, 722, 723, 728, 730, 731, 732, 740, + 742, 746, 750, 754, 758, 762, 766, 770, 774, 778, + 782, 786, 788, 792, 793, 795, 797, 799, 801, 803, + 807, 808, 818, 819, 831, 834, 835, 842, 843, 852, + 857, 862, 863, 864, 867, 869, 874, 875, 880, 882, + 886, 891, 894, 897, 900, 902, 905, 909, 912, 914, + 918, 920, 922, 924, 926, 928, 931, 932, 939, 942, + 945, 946, 953, 954, 960, 962, 964, 966, 968, 970, + 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, + 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, + 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, + 1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, + 1052, 1054, 1056, 1058, 1060, 1062, 1064, 1067, 1070, 1073, + 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, + 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, + 1136, 1139, 1143, 1145, 1150, 1152, 1156, 1159, 1162, 1165, + 1166, 1168, 1169, 1170, 1171, 1184, 1185, 1186, 1198, 1205, + 1212, 1213, 1214, 1225, 1226, 1227, 1238, 1244, 1250, 1255, + 1260, 1261, 1263, 1265, 1268, 1274, 1278, 1281, 1286, 1288, + 1292, 1297, 1304, 1305, 1314, 1319, 1321, 1325, 1328, 1330, + 1335, 1337, 1339, 1342, 1345, 1347, 1350, 1352, 1355, 1357, + 1359, 1361, 1364, 1366, 1369, 1372, 1376, 1378, 1382, 1384, + 1388, 1390, 1392, 1396, 1397, 1400, 1401, 1406, 1411, 1413, + 1415, 1418, 1420, 1422, 1425, 1426, 1428, 1434, 1437, 1441, + 1445, 1450, 1454, 1459, 1464, 1470, 1472, 1474, 1476, 1478, + 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, 1497, 1500, + 1508, 1515, 1518, 1519, 1520, 1531, 1532, 1539, 1541, 1543, + 1545, 1547, 1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, + 1568, 1570, 1571, 1575, 1578, 1581, 1583, 1585, 1587, 1589, + 1591, 1593, 1595, 1597, 1599, 1601, 1605, 1607, 1609, 1612, + 1615, 1616, 1619, 1620, 1625, 1626, 1633, 1634, 1638, 1639, + 1645, 1649, 1652, 1656, 1657, 1658, 1659, 1660, 1661, 1663, + 1666, 1669, 1673, 1676, 1680, 1684, 1689, 1692, 1695, 1699, + 1703, 1708, 1710, 1713, 1715, 1718, 1720, 1724, 1726, 1731, + 1733, 1736, 1738, 1741, 1743, 1746, 1748, 1753, 1756, 1757, + 1763, 1764, 1771, 1776, 1781, 1782, 1783, 1794, 1796, 1797, + 1802, 1804, 1806, 1808, 1810, 1812, 1815, 1817, 1821, 1823, + 1828, 1832, 1837, 1844, 1850, 1856, 1859, 1862, 1864, 1867, + 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1890, 1892, 1897, + 1899, 1903, 1907, 1911, 1913, 1917, 1921, 1923, 1927, 1931, + 1933, 1937, 1941, 1945, 1949, 1951, 1955, 1959, 1961, 1965, + 1967, 1971, 1973, 1977, 1979, 1983, 1985, 1989, 1991, 1992, + 1993, 2001, 2003, 2007, 2011, 2015, 2019, 2023, 2027, 2031, + 2035, 2039, 2043, 2047, 2049, 2050, 2052, 2055, 2063, 2066, + 2069, 2077, 2084, 2087, 2091, 2094, 2098, 2101, 2105, 2109, + 2113, 2117, 2120, 2124, 2125, 2127, 2128, 2130, 2132, 2134, + 2136, 2138, 2140, 2142, 2144, 2146, 2151 }; static const short yyrhs[] = { -1, - 194, 0, 195, 0, 194, 195, 0, 256, 450, 0, - 196, 0, 197, 0, 207, 0, 210, 0, 293, 0, - 18, 0, 1, 0, 76, 334, 348, 358, 348, 450, - 301, 90, 0, 76, 334, 348, 358, 348, 23, 301, - 306, 305, 450, 90, 0, 0, 77, 198, 199, 450, - 90, 0, 200, 0, 334, 348, 200, 0, 204, 0, - 362, 204, 0, 452, 0, 301, 24, 348, 358, 301, - 25, 0, 201, 26, 27, 0, 201, 26, 301, 292, - 27, 348, 0, 0, 201, 302, 24, 25, 202, 228, - 0, 0, 201, 302, 24, 359, 25, 203, 228, 0, - 452, 0, 301, 24, 348, 200, 301, 25, 0, 204, - 26, 27, 0, 204, 26, 301, 292, 27, 348, 0, - 0, 204, 302, 24, 25, 205, 229, 0, 0, 204, - 302, 24, 359, 25, 206, 229, 0, 0, 0, 78, - 452, 24, 359, 25, 208, 229, 209, 450, 90, 0, - 91, 389, 94, 0, 92, 375, 94, 0, 93, 376, - 94, 0, 91, 94, 0, 251, 0, 213, 23, 216, - 0, 0, 225, 214, 22, 217, 0, 0, 5, 215, - 22, 217, 0, 213, 0, 213, 40, 216, 0, 192, - 0, 183, 0, 55, 0, 220, 218, 219, 0, 220, - 0, 223, 222, 223, 0, 180, 0, 181, 0, 52, - 0, 51, 0, 53, 0, 224, 0, 226, 24, 223, - 25, 0, 24, 223, 227, 223, 25, 0, 225, 0, - 188, 0, 451, 0, 185, 0, 225, 26, 27, 0, - 225, 26, 188, 27, 0, 34, 225, 0, 24, 225, - 25, 0, 225, 28, 452, 0, 225, 44, 452, 0, - 221, 0, 33, 0, 32, 0, 0, 230, 228, 0, - 0, 231, 229, 0, 232, 0, 236, 0, 235, 0, - 312, 0, 315, 0, 242, 0, 233, 0, 237, 0, - 235, 0, 313, 0, 317, 0, 243, 0, 233, 90, - 0, 0, 73, 234, 244, 450, 0, 75, 0, 237, - 90, 0, 0, 74, 238, 257, 0, 240, 0, 240, - 40, 239, 0, 185, 0, 242, 0, 0, 243, 90, - 0, 72, 239, 426, 0, 72, 239, 0, 245, 0, - 244, 21, 245, 0, 246, 247, 0, 0, 248, 246, - 0, 451, 0, 185, 0, 293, 0, 88, 0, 89, - 0, 118, 0, 119, 0, 132, 0, 79, 0, 80, - 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, - 0, 358, 0, 334, 348, 358, 0, 0, 19, 253, - 406, 0, 0, 0, 254, 410, 255, 399, 0, 211, - 252, 0, 260, 450, 0, 450, 0, 451, 0, 185, - 0, 258, 26, 27, 0, 258, 26, 259, 27, 0, - 34, 258, 0, 24, 258, 25, 0, 258, 28, 452, - 0, 258, 44, 452, 0, 258, 0, 426, 0, 258, - 0, 260, 21, 258, 0, 451, 0, 185, 0, 261, - 26, 27, 0, 261, 26, 259, 27, 0, 34, 261, - 0, 24, 261, 25, 0, 261, 28, 452, 0, 261, - 44, 452, 0, 0, 263, 0, 261, 0, 263, 21, - 261, 0, 451, 0, 185, 0, 426, 0, 24, 290, - 25, 0, 186, 0, 113, 0, 264, 0, 265, 26, - 290, 27, 0, 265, 24, 25, 0, 265, 24, 266, - 25, 0, 70, 24, 289, 21, 370, 25, 0, 265, - 348, 28, 452, 301, 0, 265, 348, 44, 452, 301, - 0, 265, 47, 0, 265, 48, 0, 289, 0, 266, - 21, 289, 0, 265, 0, 47, 267, 0, 48, 267, - 0, 29, 273, 0, 34, 273, 0, 33, 273, 0, - 32, 273, 0, 31, 273, 0, 30, 273, 0, 270, - 0, 269, 0, 268, 28, 452, 0, 452, 0, 46, - 301, 24, 370, 348, 21, 268, 25, 301, 0, 0, - 301, 271, 272, 0, 42, 24, 370, 25, 0, 42, - 267, 0, 43, 24, 370, 25, 0, 43, 267, 0, - 267, 0, 24, 370, 25, 273, 0, 273, 0, 274, - 34, 273, 0, 274, 35, 273, 0, 274, 36, 273, - 0, 274, 0, 275, 33, 274, 0, 275, 32, 274, - 0, 275, 0, 276, 49, 275, 0, 276, 50, 275, - 0, 276, 0, 277, 37, 276, 0, 277, 38, 276, - 0, 277, 51, 276, 0, 277, 52, 276, 0, 277, - 0, 278, 53, 277, 0, 278, 54, 277, 0, 278, - 0, 279, 29, 278, 0, 279, 0, 280, 39, 279, - 0, 280, 0, 281, 40, 280, 0, 281, 0, 0, - 282, 55, 283, 281, 0, 282, 0, 0, 284, 56, - 285, 282, 0, 284, 0, 0, 0, 284, 41, 287, - 290, 22, 288, 286, 0, 286, 0, 267, 23, 289, - 0, 267, 57, 289, 0, 267, 58, 289, 0, 267, - 59, 289, 0, 267, 60, 289, 0, 267, 61, 289, - 0, 267, 62, 289, 0, 267, 63, 289, 0, 267, - 64, 289, 0, 267, 65, 289, 0, 267, 66, 289, - 0, 289, 0, 290, 21, 289, 0, 0, 290, 0, - 286, 0, 294, 0, 71, 0, 299, 0, 334, 301, - 18, 0, 0, 334, 348, 358, 348, 295, 301, 305, - 18, 301, 0, 0, 334, 348, 358, 348, 23, 296, - 301, 306, 305, 18, 301, 0, 358, 348, 0, 0, - 358, 348, 23, 298, 301, 306, 0, 0, 45, 334, - 300, 348, 303, 301, 241, 18, 0, 45, 334, 301, - 18, 0, 45, 303, 301, 18, 0, 0, 0, 304, - 301, 0, 297, 0, 303, 21, 348, 297, 0, 0, - 305, 21, 348, 297, 0, 289, 0, 19, 310, 20, - 0, 19, 310, 21, 20, 0, 307, 306, 0, 308, - 23, 0, 452, 22, 0, 309, 0, 308, 309, 0, - 26, 292, 27, 0, 28, 452, 0, 306, 0, 310, - 21, 306, 0, 114, 0, 112, 0, 115, 0, 116, - 0, 117, 0, 313, 90, 0, 0, 249, 348, 314, - 263, 450, 301, 0, 317, 90, 0, 250, 348, 0, - 0, 316, 323, 318, 262, 450, 301, 0, 0, 316, - 319, 320, 450, 301, 0, 219, 0, 212, 0, 141, - 0, 142, 0, 144, 0, 145, 0, 143, 0, 126, - 0, 129, 0, 127, 0, 128, 0, 134, 0, 135, - 0, 120, 0, 122, 0, 121, 0, 130, 0, 131, - 0, 123, 0, 125, 0, 138, 0, 140, 0, 153, - 0, 152, 0, 137, 0, 139, 0, 177, 0, 187, - 0, 136, 0, 151, 0, 150, 0, 160, 0, 158, - 0, 159, 0, 154, 0, 155, 0, 156, 0, 157, - 0, 161, 0, 162, 0, 165, 0, 166, 0, 163, - 0, 164, 0, 149, 0, 146, 0, 147, 0, 148, - 0, 118, 0, 119, 0, 132, 0, 133, 0, 110, - 301, 0, 111, 301, 0, 330, 301, 0, 323, 301, - 0, 321, 301, 0, 324, 301, 0, 322, 301, 0, - 326, 301, 0, 325, 301, 0, 327, 301, 0, 328, - 301, 0, 167, 348, 0, 169, 348, 0, 168, 348, - 0, 170, 348, 0, 171, 348, 0, 172, 348, 0, - 173, 348, 0, 174, 348, 0, 175, 348, 0, 176, - 348, 0, 453, 348, 0, 339, 348, 0, 353, 348, - 0, 329, 348, 0, 301, 334, 301, 0, 336, 0, - 336, 87, 335, 90, 0, 370, 0, 370, 21, 335, - 0, 311, 337, 0, 331, 337, 0, 332, 337, 0, - 0, 334, 0, 0, 0, 0, 348, 67, 452, 301, - 19, 340, 403, 349, 404, 341, 20, 338, 0, 0, - 0, 348, 68, 452, 301, 19, 342, 403, 349, 404, - 343, 20, 0, 348, 67, 452, 301, 19, 20, 0, - 348, 68, 452, 301, 19, 20, 0, 0, 0, 348, - 67, 301, 19, 344, 403, 349, 404, 345, 20, 0, - 0, 0, 348, 68, 301, 19, 346, 403, 349, 404, - 347, 20, 0, 348, 67, 301, 19, 20, 0, 348, - 68, 301, 19, 20, 0, 348, 67, 452, 348, 0, - 348, 68, 452, 348, 0, 0, 350, 0, 210, 0, - 349, 350, 0, 334, 348, 351, 301, 18, 0, 334, - 301, 18, 0, 352, 348, 0, 351, 21, 352, 348, - 0, 358, 0, 22, 301, 292, 0, 358, 22, 301, - 292, 0, 348, 69, 19, 355, 20, 301, 0, 0, - 348, 69, 452, 19, 354, 355, 20, 301, 0, 348, - 69, 452, 301, 0, 356, 0, 355, 21, 356, 0, - 355, 21, 0, 452, 0, 452, 23, 301, 292, 0, - 201, 0, 372, 0, 362, 191, 0, 362, 357, 0, - 201, 0, 362, 201, 0, 365, 0, 348, 363, 0, - 110, 0, 111, 0, 360, 0, 361, 360, 0, 34, - 0, 34, 361, 0, 34, 362, 0, 34, 361, 362, - 0, 364, 0, 364, 21, 5, 0, 452, 0, 364, - 21, 452, 0, 5, 0, 366, 0, 366, 21, 5, - 0, 0, 367, 369, 0, 0, 366, 21, 368, 369, - 0, 301, 334, 357, 301, 0, 452, 0, 333, 0, - 333, 371, 0, 362, 0, 373, 0, 362, 373, 0, - 0, 373, 0, 301, 24, 348, 371, 25, 0, 26, - 27, 0, 26, 292, 27, 0, 373, 26, 27, 0, - 373, 26, 292, 27, 0, 301, 24, 25, 0, 301, - 24, 365, 25, 0, 373, 301, 24, 25, 0, 373, - 301, 24, 365, 25, 0, 391, 0, 393, 0, 396, - 0, 399, 0, 412, 0, 415, 0, 447, 0, 420, - 0, 449, 0, 377, 0, 375, 0, 384, 0, 377, - 384, 0, 419, 377, 0, 446, 390, 11, 24, 290, - 25, 18, 0, 446, 390, 11, 24, 290, 25, 0, - 379, 384, 0, 0, 0, 13, 24, 291, 18, 291, - 18, 380, 291, 381, 25, 0, 0, 189, 401, 24, - 383, 423, 25, 0, 190, 0, 391, 0, 393, 0, - 396, 0, 387, 410, 0, 387, 0, 388, 0, 412, - 0, 385, 0, 378, 0, 382, 0, 449, 0, 24, - 384, 25, 0, 1, 0, 0, 414, 386, 384, 0, - 401, 19, 0, 405, 20, 0, 390, 0, 409, 0, - 391, 0, 393, 0, 396, 0, 400, 0, 413, 0, - 415, 0, 420, 0, 448, 0, 24, 390, 25, 0, - 449, 0, 1, 0, 452, 22, 0, 109, 374, 0, - 0, 100, 392, 0, 0, 6, 292, 394, 22, 0, - 0, 100, 392, 6, 292, 395, 22, 0, 0, 7, - 397, 22, 0, 0, 100, 392, 7, 398, 22, 0, - 24, 399, 25, 0, 401, 407, 0, 401, 408, 402, - 0, 0, 0, 0, 0, 0, 20, 0, 109, 20, - 0, 411, 20, 0, 411, 109, 20, 0, 410, 20, - 0, 410, 109, 20, 0, 410, 411, 20, 0, 410, - 411, 109, 20, 0, 19, 406, 0, 19, 20, 0, - 19, 409, 20, 0, 19, 410, 20, 0, 19, 410, - 411, 20, 0, 390, 0, 409, 390, 0, 293, 0, - 410, 293, 0, 374, 0, 411, 374, 0, 18, 0, - 290, 18, 0, 18, 0, 290, 18, 0, 290, 0, - 8, 24, 290, 25, 0, 414, 374, 0, 0, 414, - 374, 9, 416, 374, 0, 0, 10, 24, 290, 417, - 25, 374, 0, 11, 24, 290, 25, 0, 11, 24, - 290, 25, 0, 0, 0, 189, 421, 401, 24, 422, - 423, 25, 399, 445, 402, 0, 425, 0, 0, 423, - 424, 21, 425, 0, 444, 0, 451, 0, 186, 0, - 185, 0, 188, 0, 426, 188, 0, 426, 0, 24, - 290, 25, 0, 427, 0, 265, 26, 290, 27, 0, - 265, 24, 25, 0, 265, 24, 266, 25, 0, 70, - 24, 289, 21, 370, 25, 0, 265, 348, 28, 452, - 301, 0, 265, 348, 44, 452, 301, 0, 265, 47, - 0, 265, 48, 0, 428, 0, 47, 267, 0, 48, - 267, 0, 29, 273, 0, 34, 273, 0, 33, 273, - 0, 32, 273, 0, 31, 273, 0, 30, 273, 0, - 270, 0, 429, 0, 24, 370, 25, 273, 0, 430, - 0, 274, 34, 273, 0, 274, 35, 273, 0, 274, - 36, 273, 0, 431, 0, 275, 33, 274, 0, 275, - 32, 274, 0, 432, 0, 276, 49, 275, 0, 276, - 50, 275, 0, 433, 0, 277, 37, 276, 0, 277, - 38, 276, 0, 277, 51, 276, 0, 277, 52, 276, - 0, 434, 0, 278, 53, 277, 0, 278, 54, 277, - 0, 435, 0, 279, 29, 278, 0, 436, 0, 280, - 39, 279, 0, 437, 0, 281, 40, 280, 0, 438, - 0, 282, 55, 281, 0, 439, 0, 284, 56, 282, - 0, 440, 0, 0, 0, 284, 41, 442, 290, 22, - 443, 286, 0, 441, 0, 267, 23, 289, 0, 267, - 57, 289, 0, 267, 58, 289, 0, 267, 59, 289, - 0, 267, 60, 289, 0, 267, 61, 289, 0, 267, - 62, 289, 0, 267, 63, 289, 0, 267, 64, 289, - 0, 267, 65, 289, 0, 267, 66, 289, 0, 190, - 0, 0, 12, 0, 418, 374, 0, 446, 374, 11, - 24, 290, 25, 18, 0, 379, 374, 0, 418, 390, - 0, 446, 390, 11, 24, 290, 25, 18, 0, 446, - 390, 11, 24, 290, 25, 0, 379, 390, 0, 14, - 452, 18, 0, 15, 18, 0, 99, 15, 18, 0, - 16, 18, 0, 95, 16, 18, 0, 96, 16, 18, - 0, 97, 16, 18, 0, 98, 16, 18, 0, 17, - 18, 0, 17, 290, 18, 0, 0, 18, 0, 184, - 0, 185, 0, 189, 0, 190, 0, 451, 0, 186, - 0, 191, 0, 186, 0 + 195, 0, 196, 0, 195, 196, 0, 257, 454, 0, + 197, 0, 198, 0, 208, 0, 211, 0, 295, 0, + 18, 0, 1, 0, 77, 336, 350, 360, 350, 454, + 303, 91, 0, 77, 336, 350, 360, 350, 23, 303, + 308, 307, 454, 91, 0, 0, 78, 199, 200, 454, + 91, 0, 201, 0, 336, 350, 201, 0, 205, 0, + 364, 205, 0, 457, 0, 303, 24, 350, 360, 303, + 25, 0, 202, 26, 27, 0, 202, 26, 303, 294, + 27, 350, 0, 0, 202, 304, 24, 25, 203, 229, + 0, 0, 202, 304, 24, 361, 25, 204, 229, 0, + 457, 0, 303, 24, 350, 201, 303, 25, 0, 205, + 26, 27, 0, 205, 26, 303, 294, 27, 350, 0, + 0, 205, 304, 24, 25, 206, 230, 0, 0, 205, + 304, 24, 361, 25, 207, 230, 0, 0, 0, 79, + 457, 24, 361, 25, 209, 230, 210, 454, 91, 0, + 92, 391, 95, 0, 93, 377, 95, 0, 94, 378, + 95, 0, 92, 95, 0, 252, 0, 214, 23, 217, + 0, 0, 226, 215, 22, 218, 0, 0, 5, 216, + 22, 218, 0, 214, 0, 214, 40, 217, 0, 193, + 0, 184, 0, 56, 0, 221, 219, 220, 0, 221, + 0, 224, 223, 224, 0, 181, 0, 182, 0, 53, + 0, 52, 0, 54, 0, 225, 0, 227, 24, 224, + 25, 0, 24, 224, 228, 224, 25, 0, 226, 0, + 189, 0, 456, 0, 186, 0, 226, 26, 27, 0, + 226, 26, 189, 27, 0, 34, 226, 0, 24, 226, + 25, 0, 226, 28, 457, 0, 226, 45, 457, 0, + 222, 0, 33, 0, 32, 0, 0, 231, 229, 0, + 0, 232, 230, 0, 233, 0, 237, 0, 236, 0, + 314, 0, 317, 0, 243, 0, 234, 0, 238, 0, + 236, 0, 315, 0, 319, 0, 244, 0, 234, 91, + 0, 0, 74, 235, 245, 454, 0, 76, 0, 238, + 91, 0, 0, 75, 239, 258, 0, 241, 0, 241, + 40, 240, 0, 186, 0, 243, 0, 0, 244, 91, + 0, 73, 240, 430, 0, 73, 240, 0, 246, 0, + 245, 21, 246, 0, 247, 248, 0, 0, 249, 247, + 0, 456, 0, 186, 0, 295, 0, 89, 0, 90, + 0, 119, 0, 120, 0, 133, 0, 80, 0, 81, + 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, + 0, 360, 0, 336, 350, 360, 0, 0, 19, 254, + 408, 0, 0, 0, 255, 412, 256, 401, 0, 212, + 253, 0, 261, 454, 0, 454, 0, 456, 0, 186, + 0, 259, 26, 27, 0, 259, 26, 260, 27, 0, + 34, 259, 0, 24, 259, 25, 0, 259, 28, 457, + 0, 259, 45, 457, 0, 259, 0, 430, 0, 259, + 0, 261, 21, 259, 0, 456, 0, 186, 0, 262, + 26, 27, 0, 262, 26, 260, 27, 0, 34, 262, + 0, 24, 262, 25, 0, 262, 28, 457, 0, 262, + 45, 457, 0, 0, 264, 0, 262, 0, 264, 21, + 262, 0, 456, 0, 186, 0, 430, 0, 24, 292, + 25, 0, 187, 0, 114, 0, 0, 24, 266, 401, + 25, 0, 265, 0, 267, 26, 292, 27, 0, 267, + 24, 25, 0, 267, 24, 268, 25, 0, 71, 24, + 291, 21, 372, 25, 0, 267, 350, 28, 457, 303, + 0, 267, 350, 45, 457, 303, 0, 267, 48, 0, + 267, 49, 0, 24, 372, 25, 19, 413, 455, 20, + 0, 291, 0, 268, 21, 291, 0, 267, 0, 48, + 269, 0, 49, 269, 0, 29, 275, 0, 34, 275, + 0, 33, 275, 0, 32, 275, 0, 31, 275, 0, + 30, 275, 0, 272, 0, 271, 0, 270, 28, 457, + 0, 457, 0, 47, 303, 24, 372, 350, 21, 270, + 25, 303, 0, 0, 303, 273, 274, 0, 42, 24, + 372, 25, 0, 42, 269, 0, 43, 24, 372, 25, + 0, 43, 269, 0, 269, 0, 24, 372, 25, 275, + 0, 275, 0, 276, 34, 275, 0, 276, 35, 275, + 0, 276, 36, 275, 0, 276, 0, 277, 33, 276, + 0, 277, 32, 276, 0, 277, 0, 278, 50, 277, + 0, 278, 51, 277, 0, 278, 0, 279, 37, 278, + 0, 279, 38, 278, 0, 279, 52, 278, 0, 279, + 53, 278, 0, 279, 0, 280, 54, 279, 0, 280, + 55, 279, 0, 280, 0, 281, 29, 280, 0, 281, + 0, 282, 39, 281, 0, 282, 0, 283, 40, 282, + 0, 283, 0, 0, 284, 56, 285, 283, 0, 284, + 0, 0, 286, 57, 287, 284, 0, 286, 0, 0, + 0, 286, 41, 289, 292, 22, 290, 288, 0, 288, + 0, 269, 23, 291, 0, 269, 58, 291, 0, 269, + 59, 291, 0, 269, 60, 291, 0, 269, 61, 291, + 0, 269, 62, 291, 0, 269, 63, 291, 0, 269, + 64, 291, 0, 269, 65, 291, 0, 269, 66, 291, + 0, 269, 67, 291, 0, 291, 0, 292, 21, 291, + 0, 0, 292, 0, 288, 0, 296, 0, 72, 0, + 301, 0, 336, 303, 18, 0, 0, 336, 350, 360, + 350, 297, 303, 307, 18, 303, 0, 0, 336, 350, + 360, 350, 23, 298, 303, 308, 307, 18, 303, 0, + 360, 350, 0, 0, 360, 350, 23, 300, 303, 308, + 0, 0, 46, 336, 302, 350, 305, 303, 242, 18, + 0, 46, 336, 303, 18, 0, 46, 305, 303, 18, + 0, 0, 0, 306, 303, 0, 299, 0, 305, 21, + 350, 299, 0, 0, 307, 21, 350, 299, 0, 291, + 0, 19, 312, 20, 0, 19, 312, 21, 20, 0, + 309, 308, 0, 310, 23, 0, 457, 22, 0, 311, + 0, 310, 311, 0, 26, 294, 27, 0, 28, 457, + 0, 308, 0, 312, 21, 308, 0, 115, 0, 113, + 0, 116, 0, 117, 0, 118, 0, 315, 91, 0, + 0, 250, 350, 316, 264, 454, 303, 0, 319, 91, + 0, 251, 350, 0, 0, 318, 325, 320, 263, 454, + 303, 0, 0, 318, 321, 322, 454, 303, 0, 220, + 0, 213, 0, 142, 0, 143, 0, 145, 0, 146, + 0, 144, 0, 127, 0, 130, 0, 128, 0, 129, + 0, 135, 0, 136, 0, 121, 0, 123, 0, 122, + 0, 131, 0, 132, 0, 124, 0, 126, 0, 139, + 0, 141, 0, 154, 0, 153, 0, 138, 0, 140, + 0, 178, 0, 188, 0, 137, 0, 152, 0, 151, + 0, 161, 0, 159, 0, 160, 0, 155, 0, 156, + 0, 157, 0, 158, 0, 162, 0, 163, 0, 166, + 0, 167, 0, 164, 0, 165, 0, 150, 0, 147, + 0, 148, 0, 149, 0, 119, 0, 120, 0, 133, + 0, 134, 0, 111, 303, 0, 112, 303, 0, 332, + 303, 0, 325, 303, 0, 323, 303, 0, 326, 303, + 0, 324, 303, 0, 328, 303, 0, 327, 303, 0, + 329, 303, 0, 330, 303, 0, 168, 350, 0, 170, + 350, 0, 169, 350, 0, 171, 350, 0, 172, 350, + 0, 173, 350, 0, 174, 350, 0, 175, 350, 0, + 176, 350, 0, 177, 350, 0, 458, 350, 0, 341, + 350, 0, 355, 350, 0, 331, 350, 0, 303, 336, + 303, 0, 338, 0, 338, 88, 337, 91, 0, 372, + 0, 372, 21, 337, 0, 313, 339, 0, 333, 339, + 0, 334, 339, 0, 0, 336, 0, 0, 0, 0, + 350, 68, 457, 303, 19, 342, 405, 351, 406, 343, + 20, 340, 0, 0, 0, 350, 69, 457, 303, 19, + 344, 405, 351, 406, 345, 20, 0, 350, 68, 457, + 303, 19, 20, 0, 350, 69, 457, 303, 19, 20, + 0, 0, 0, 350, 68, 303, 19, 346, 405, 351, + 406, 347, 20, 0, 0, 0, 350, 69, 303, 19, + 348, 405, 351, 406, 349, 20, 0, 350, 68, 303, + 19, 20, 0, 350, 69, 303, 19, 20, 0, 350, + 68, 457, 350, 0, 350, 69, 457, 350, 0, 0, + 352, 0, 211, 0, 351, 352, 0, 336, 350, 353, + 303, 18, 0, 336, 303, 18, 0, 354, 350, 0, + 353, 21, 354, 350, 0, 360, 0, 22, 303, 294, + 0, 360, 22, 303, 294, 0, 350, 70, 19, 357, + 20, 303, 0, 0, 350, 70, 457, 19, 356, 357, + 20, 303, 0, 350, 70, 457, 303, 0, 358, 0, + 357, 21, 358, 0, 357, 21, 0, 457, 0, 457, + 23, 303, 294, 0, 202, 0, 374, 0, 364, 192, + 0, 364, 359, 0, 202, 0, 364, 202, 0, 367, + 0, 350, 365, 0, 111, 0, 112, 0, 362, 0, + 363, 362, 0, 34, 0, 34, 363, 0, 34, 364, + 0, 34, 363, 364, 0, 366, 0, 366, 21, 5, + 0, 457, 0, 366, 21, 457, 0, 5, 0, 368, + 0, 368, 21, 5, 0, 0, 369, 371, 0, 0, + 368, 21, 370, 371, 0, 303, 336, 359, 303, 0, + 457, 0, 335, 0, 335, 373, 0, 364, 0, 375, + 0, 364, 375, 0, 0, 375, 0, 303, 24, 350, + 373, 25, 0, 26, 27, 0, 26, 294, 27, 0, + 375, 26, 27, 0, 375, 26, 294, 27, 0, 303, + 24, 25, 0, 303, 24, 367, 25, 0, 375, 303, + 24, 25, 0, 375, 303, 24, 367, 25, 0, 393, + 0, 395, 0, 398, 0, 401, 0, 416, 0, 419, + 0, 451, 0, 424, 0, 453, 0, 379, 0, 377, + 0, 386, 0, 379, 386, 0, 423, 379, 0, 450, + 392, 11, 24, 292, 25, 18, 0, 450, 392, 11, + 24, 292, 25, 0, 381, 386, 0, 0, 0, 13, + 24, 293, 18, 293, 18, 382, 293, 383, 25, 0, + 0, 190, 403, 24, 385, 427, 25, 0, 191, 0, + 393, 0, 395, 0, 398, 0, 389, 412, 0, 389, + 0, 390, 0, 416, 0, 387, 0, 380, 0, 384, + 0, 453, 0, 24, 386, 25, 0, 1, 0, 0, + 418, 388, 386, 0, 403, 19, 0, 407, 20, 0, + 392, 0, 411, 0, 393, 0, 395, 0, 398, 0, + 402, 0, 417, 0, 419, 0, 424, 0, 452, 0, + 24, 392, 25, 0, 453, 0, 1, 0, 457, 22, + 0, 110, 376, 0, 0, 101, 394, 0, 0, 6, + 294, 396, 22, 0, 0, 101, 394, 6, 294, 397, + 22, 0, 0, 7, 399, 22, 0, 0, 101, 394, + 7, 400, 22, 0, 24, 401, 25, 0, 403, 409, + 0, 403, 410, 404, 0, 0, 0, 0, 0, 0, + 20, 0, 110, 20, 0, 415, 20, 0, 415, 110, + 20, 0, 412, 20, 0, 412, 110, 20, 0, 412, + 415, 20, 0, 412, 415, 110, 20, 0, 19, 408, + 0, 19, 20, 0, 19, 411, 20, 0, 19, 412, + 20, 0, 19, 412, 415, 20, 0, 392, 0, 411, + 392, 0, 295, 0, 412, 295, 0, 414, 0, 413, + 21, 414, 0, 291, 0, 19, 413, 455, 20, 0, + 376, 0, 415, 376, 0, 18, 0, 292, 18, 0, + 18, 0, 292, 18, 0, 292, 0, 8, 24, 292, + 25, 0, 418, 376, 0, 0, 418, 376, 9, 420, + 376, 0, 0, 10, 24, 292, 421, 25, 376, 0, + 11, 24, 292, 25, 0, 11, 24, 292, 25, 0, + 0, 0, 190, 425, 403, 24, 426, 427, 25, 401, + 449, 404, 0, 429, 0, 0, 427, 428, 21, 429, + 0, 448, 0, 456, 0, 187, 0, 186, 0, 189, + 0, 430, 189, 0, 430, 0, 24, 292, 25, 0, + 431, 0, 267, 26, 292, 27, 0, 267, 24, 25, + 0, 267, 24, 268, 25, 0, 71, 24, 291, 21, + 372, 25, 0, 267, 350, 28, 457, 303, 0, 267, + 350, 45, 457, 303, 0, 267, 48, 0, 267, 49, + 0, 432, 0, 48, 269, 0, 49, 269, 0, 29, + 275, 0, 34, 275, 0, 33, 275, 0, 32, 275, + 0, 31, 275, 0, 30, 275, 0, 272, 0, 433, + 0, 24, 372, 25, 275, 0, 434, 0, 276, 34, + 275, 0, 276, 35, 275, 0, 276, 36, 275, 0, + 435, 0, 277, 33, 276, 0, 277, 32, 276, 0, + 436, 0, 278, 50, 277, 0, 278, 51, 277, 0, + 437, 0, 279, 37, 278, 0, 279, 38, 278, 0, + 279, 52, 278, 0, 279, 53, 278, 0, 438, 0, + 280, 54, 279, 0, 280, 55, 279, 0, 439, 0, + 281, 29, 280, 0, 440, 0, 282, 39, 281, 0, + 441, 0, 283, 40, 282, 0, 442, 0, 284, 56, + 283, 0, 443, 0, 286, 57, 284, 0, 444, 0, + 0, 0, 286, 41, 446, 292, 22, 447, 288, 0, + 445, 0, 269, 23, 291, 0, 269, 58, 291, 0, + 269, 59, 291, 0, 269, 60, 291, 0, 269, 61, + 291, 0, 269, 62, 291, 0, 269, 63, 291, 0, + 269, 64, 291, 0, 269, 65, 291, 0, 269, 66, + 291, 0, 269, 67, 291, 0, 191, 0, 0, 12, + 0, 422, 376, 0, 450, 376, 11, 24, 292, 25, + 18, 0, 381, 376, 0, 422, 392, 0, 450, 392, + 11, 24, 292, 25, 18, 0, 450, 392, 11, 24, + 292, 25, 0, 381, 392, 0, 14, 457, 18, 0, + 15, 18, 0, 100, 15, 18, 0, 16, 18, 0, + 96, 16, 18, 0, 97, 16, 18, 0, 98, 16, + 18, 0, 99, 16, 18, 0, 17, 18, 0, 17, + 292, 18, 0, 0, 18, 0, 0, 21, 0, 185, + 0, 186, 0, 190, 0, 191, 0, 456, 0, 187, + 0, 192, 0, 187, 0, 44, 24, 292, 25, 0, + 44, 24, 372, 25, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 324, 325, 328, 329, 332, 333, 334, 335, 336, 337, - 338, 339, 342, 344, 348, 348, 355, 361, 365, 366, - 370, 371, 373, 375, 390, 393, 403, 406, 414, 415, - 417, 419, 435, 438, 446, 449, 457, 459, 459, 463, - 464, 465, 466, 469, 472, 476, 476, 479, 479, 484, - 485, 488, 493, 494, 497, 498, 501, 506, 507, 510, - 511, 512, 515, 516, 517, 522, 523, 526, 528, 530, - 532, 541, 543, 545, 547, 563, 567, 568, 575, 576, - 584, 586, 590, 591, 592, 593, 594, 595, 598, 599, - 600, 601, 602, 603, 606, 609, 610, 617, 620, 623, - 629, 637, 639, 643, 646, 647, 650, 653, 659, 663, - 664, 667, 670, 671, 674, 675, 676, 679, 680, 681, - 682, 683, 686, 687, 688, 689, 690, 693, 694, 697, - 703, 707, 709, 713, 714, 716, 723, 733, 734, 737, - 738, 739, 740, 741, 742, 743, 744, 748, 749, 753, - 754, 757, 759, 761, 762, 763, 764, 765, 767, 771, - 772, 775, 779, 791, 792, 793, 794, 795, 796, 799, - 800, 801, 802, 803, 804, 805, 806, 807, 810, 811, - 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, - 824, 827, 828, 831, 835, 836, 839, 840, 841, 842, - 845, 846, 850, 851, 852, 853, 856, 857, 858, 861, - 862, 863, 866, 867, 868, 869, 870, 873, 874, 875, - 878, 879, 882, 883, 887, 888, 891, 892, 897, 903, - 904, 910, 916, 917, 917, 919, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 936, 937, - 940, 941, 944, 949, 950, 951, 954, 968, 973, 979, - 981, 987, 992, 992, 996, 997, 999, 1000, 1003, 1006, - 1009, 1012, 1013, 1016, 1017, 1020, 1021, 1022, 1023, 1030, - 1031, 1035, 1036, 1039, 1040, 1043, 1045, 1054, 1055, 1056, - 1057, 1058, 1061, 1064, 1070, 1079, 1082, 1085, 1092, 1099, - 1105, 1130, 1131, 1134, 1135, 1136, 1137, 1138, 1141, 1142, - 1143, 1144, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, - 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1167, - 1168, 1171, 1172, 1175, 1176, 1179, 1180, 1181, 1182, 1185, - 1186, 1187, 1188, 1189, 1190, 1193, 1194, 1195, 1196, 1199, - 1200, 1201, 1202, 1205, 1206, 1207, 1208, 1209, 1210, 1211, - 1212, 1213, 1214, 1215, 1222, 1223, 1224, 1225, 1226, 1227, - 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1238, 1242, - 1243, 1247, 1248, 1252, 1253, 1254, 1257, 1258, 1262, 1269, - 1271, 1273, 1274, 1276, 1278, 1279, 1281, 1283, 1285, 1287, - 1288, 1289, 1292, 1293, 1295, 1297, 1298, 1301, 1304, 1305, - 1306, 1309, 1311, 1315, 1317, 1321, 1322, 1323, 1327, 1329, - 1329, 1331, 1334, 1336, 1338, 1341, 1346, 1353, 1354, 1355, - 1362, 1366, 1367, 1371, 1372, 1375, 1376, 1379, 1380, 1383, - 1384, 1385, 1386, 1389, 1390, 1393, 1394, 1397, 1398, 1399, - 1402, 1402, 1403, 1404, 1407, 1419, 1435, 1436, 1439, 1440, - 1441, 1444, 1445, 1448, 1450, 1451, 1453, 1454, 1456, 1458, - 1460, 1462, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1480, 1483, 1486, 1487, 1491, 1493, 1495, 1497, 1501, - 1502, 1504, 1508, 1510, 1512, 1515, 1516, 1517, 1518, 1519, - 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1530, 1531, - 1536, 1539, 1542, 1543, 1546, 1547, 1548, 1549, 1550, 1551, - 1552, 1553, 1554, 1555, 1556, 1559, 1560, 1567, 1568, 1574, - 1575, 1576, 1577, 1580, 1581, 1582, 1583, 1586, 1587, 1591, - 1594, 1597, 1600, 1603, 1606, 1609, 1610, 1611, 1612, 1614, - 1615, 1617, 1619, 1625, 1629, 1631, 1633, 1635, 1639, 1640, - 1643, 1644, 1647, 1648, 1651, 1652, 1655, 1656, 1657, 1660, - 1673, 1678, 1679, 1683, 1684, 1687, 1692, 1695, 1696, 1697, - 1705, 1706, 1706, 1710, 1711, 1712, 1723, 1730, 1731, 1734, - 1735, 1738, 1739, 1740, 1741, 1742, 1744, 1745, 1746, 1747, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, - 1762, 1763, 1766, 1767, 1768, 1769, 1772, 1773, 1774, 1777, - 1778, 1779, 1782, 1783, 1784, 1785, 1786, 1789, 1790, 1791, - 1794, 1795, 1798, 1799, 1803, 1804, 1807, 1808, 1811, 1812, - 1815, 1816, 1817, 1818, 1821, 1822, 1823, 1824, 1825, 1826, - 1827, 1828, 1829, 1830, 1831, 1832, 1835, 1836, 1839, 1842, - 1844, 1846, 1850, 1851, 1853, 1855, 1858, 1859, 1860, 1862, - 1863, 1864, 1865, 1866, 1867, 1868, 1871, 1872, 1875, 1878, - 1879, 1880, 1881, 1882, 1885, 1886 + 325, 326, 329, 330, 333, 334, 335, 336, 337, 338, + 339, 340, 343, 345, 349, 349, 356, 362, 366, 367, + 371, 372, 374, 376, 391, 394, 404, 407, 415, 416, + 418, 420, 436, 439, 447, 450, 458, 460, 460, 464, + 465, 466, 467, 470, 473, 477, 477, 480, 480, 485, + 486, 489, 494, 495, 498, 499, 502, 507, 508, 511, + 512, 513, 516, 517, 518, 523, 524, 527, 529, 531, + 533, 542, 544, 546, 548, 564, 568, 569, 576, 577, + 585, 587, 591, 592, 593, 594, 595, 596, 599, 600, + 601, 602, 603, 604, 607, 610, 611, 618, 621, 624, + 630, 638, 640, 644, 647, 648, 651, 654, 660, 664, + 665, 668, 671, 672, 675, 676, 677, 680, 681, 682, + 683, 684, 687, 688, 689, 690, 691, 694, 695, 698, + 704, 708, 710, 714, 715, 717, 724, 734, 735, 738, + 739, 740, 741, 742, 743, 744, 745, 749, 750, 754, + 755, 758, 760, 762, 763, 764, 765, 766, 768, 772, + 773, 776, 780, 792, 793, 794, 795, 796, 797, 798, + 799, 803, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 816, 817, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 833, 834, 837, 841, 842, 845, + 846, 847, 848, 851, 852, 856, 857, 858, 859, 862, + 863, 864, 867, 868, 869, 872, 873, 874, 875, 876, + 879, 880, 881, 884, 885, 888, 889, 893, 894, 897, + 898, 903, 909, 910, 916, 922, 923, 923, 925, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, + 939, 942, 943, 946, 947, 950, 955, 956, 957, 960, + 974, 979, 985, 987, 993, 998, 998, 1002, 1003, 1005, + 1006, 1009, 1012, 1015, 1018, 1019, 1022, 1023, 1026, 1027, + 1028, 1029, 1036, 1037, 1041, 1042, 1045, 1046, 1049, 1051, + 1060, 1061, 1062, 1063, 1064, 1067, 1070, 1076, 1085, 1088, + 1091, 1098, 1105, 1111, 1136, 1137, 1140, 1141, 1142, 1143, + 1144, 1147, 1148, 1149, 1150, 1153, 1154, 1155, 1156, 1157, + 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, + 1168, 1169, 1173, 1174, 1177, 1178, 1181, 1182, 1185, 1186, + 1187, 1188, 1191, 1192, 1193, 1194, 1195, 1196, 1199, 1200, + 1201, 1202, 1205, 1206, 1207, 1208, 1211, 1212, 1213, 1214, + 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1228, 1229, 1230, + 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, + 1241, 1244, 1248, 1249, 1253, 1254, 1258, 1259, 1260, 1263, + 1264, 1268, 1275, 1277, 1279, 1280, 1282, 1284, 1285, 1287, + 1289, 1291, 1293, 1294, 1295, 1298, 1299, 1301, 1303, 1304, + 1307, 1310, 1311, 1312, 1315, 1317, 1321, 1323, 1327, 1328, + 1329, 1333, 1335, 1335, 1337, 1340, 1342, 1344, 1347, 1352, + 1359, 1360, 1361, 1368, 1372, 1373, 1377, 1378, 1381, 1382, + 1385, 1386, 1389, 1390, 1391, 1392, 1395, 1396, 1399, 1400, + 1403, 1404, 1405, 1408, 1408, 1409, 1410, 1413, 1425, 1441, + 1442, 1445, 1446, 1447, 1450, 1451, 1454, 1456, 1457, 1459, + 1460, 1462, 1464, 1466, 1468, 1474, 1475, 1476, 1477, 1478, + 1479, 1480, 1481, 1482, 1486, 1489, 1492, 1493, 1497, 1499, + 1501, 1503, 1507, 1508, 1510, 1514, 1516, 1518, 1521, 1522, + 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, + 1533, 1536, 1537, 1542, 1545, 1548, 1549, 1552, 1553, 1554, + 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1565, 1566, + 1573, 1574, 1580, 1581, 1582, 1583, 1586, 1587, 1588, 1589, + 1592, 1593, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1616, + 1617, 1618, 1620, 1621, 1623, 1625, 1631, 1635, 1637, 1639, + 1641, 1645, 1646, 1649, 1650, 1653, 1654, 1657, 1658, 1661, + 1662, 1665, 1666, 1669, 1670, 1671, 1674, 1687, 1692, 1693, + 1697, 1698, 1701, 1706, 1709, 1710, 1711, 1719, 1720, 1720, + 1724, 1725, 1726, 1737, 1744, 1745, 1748, 1749, 1752, 1753, + 1754, 1755, 1756, 1758, 1759, 1760, 1761, 1764, 1765, 1766, + 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1776, 1777, 1780, + 1781, 1782, 1783, 1786, 1787, 1788, 1791, 1792, 1793, 1796, + 1797, 1798, 1799, 1800, 1803, 1804, 1805, 1808, 1809, 1812, + 1813, 1817, 1818, 1821, 1822, 1825, 1826, 1829, 1830, 1831, + 1832, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, + 1844, 1845, 1846, 1849, 1850, 1853, 1856, 1858, 1860, 1864, + 1865, 1867, 1869, 1872, 1873, 1874, 1876, 1877, 1878, 1879, + 1880, 1881, 1882, 1885, 1886, 1889, 1890, 1893, 1896, 1897, + 1898, 1899, 1900, 1903, 1904, 1905, 1906 }; #endif @@ -792,9 +799,9 @@ static const char * const yytname[] = { "$","error","$undefined.","BADTOK", "CFOR","GOTO","CONTINUE","BREAK","RETURN","TSEMI","TLBRACE","TRBRACE","TCOMMA", "TCOLON","TASSIGN","TLPAREN","TRPAREN","TLSQBR","TRSQBR","TDOT","TAMPERSAND", "TEXCL","TTILDE","TMINUS","TPLUS","TMULT","TDIV","TPERCENT","TLT","TGT","TCIRC", -"TBAR","TQUEST","CSIZEOF","CALIGNOF","ARROW_OP","CTYPEDEF","COFFSETOF","INC_OP", -"DEC_OP","LEFT_OP","RIGHT_OP","LE_OP","GE_OP","EQ_OP","NE_OP","AND_OP","OR_OP", -"MUL_ASSIGN","DIV_ASSIGN","MOD_ASSIGN","ADD_ASSIGN","SUB_ASSIGN","LEFT_ASSIGN", +"TBAR","TQUEST","CSIZEOF","CALIGNOF","CTYPEOF","ARROW_OP","CTYPEDEF","COFFSETOF", +"INC_OP","DEC_OP","LEFT_OP","RIGHT_OP","LE_OP","GE_OP","EQ_OP","NE_OP","AND_OP", +"OR_OP","MUL_ASSIGN","DIV_ASSIGN","MOD_ASSIGN","ADD_ASSIGN","SUB_ASSIGN","LEFT_ASSIGN", "RIGHT_ASSIGN","AND_ASSIGN","XOR_ASSIGN","OR_ASSIGN","CSTRUCT","CUNION","CENUM", "VA_ARG","VA_DCL","QWARN","QGLOBALS","QMODIFIES","QNOMODS","QCONSTANT","QFUNCTION", "QITER","QDEFINES","QUSES","QALLOCATES","QSETS","QRELEASES","QPRECLAUSE","QPOSTCLAUSE", @@ -825,110 +832,112 @@ static const char * const yytname[] = { "$","error","$undefined.","BADTOK", "globIdListExpr","optGlobQuals","globId","globQual","stateTag","conditionTag", "fcnDefHdrAux","fcnBody","@12","@13","@14","fcnDef","locModifies","modListExpr", "mExpr","modList","specClauseListExpr","optSpecClauseList","specClauseList", -"primaryExpr","postfixExpr","argumentExprList","unaryExpr","fieldDesignator", -"offsetofExpr","sizeofExpr","@15","sizeofExprAux","castExpr","timesExpr","plusExpr", +"primaryExpr","@15","postfixExpr","argumentExprList","unaryExpr","fieldDesignator", +"offsetofExpr","sizeofExpr","@16","sizeofExprAux","castExpr","timesExpr","plusExpr", "shiftExpr","relationalExpr","equalityExpr","bitandExpr","xorExpr","bitorExpr", -"andExpr","@16","orExpr","@17","conditionalExpr","@18","@19","assignExpr","expr", -"optExpr","constantExpr","initializer","instanceDecl","@20","@21","namedInitializer", -"@22","typeDecl","@23","IsType","PushType","namedInitializerList","namedInitializerListAux", +"andExpr","@17","orExpr","@18","conditionalExpr","@19","@20","assignExpr","expr", +"optExpr","constantExpr","initializer","instanceDecl","@21","@22","namedInitializer", +"@23","typeDecl","@24","IsType","PushType","namedInitializerList","namedInitializerListAux", "optDeclarators","init","designation","designatorList","designator","initList", -"storageSpecifier","stateClause","stateClausePlain","@24","conditionClause", -"startConditionClause","conditionClausePlain","@25","@26","functionConstraint", +"storageSpecifier","stateClause","stateClausePlain","@25","conditionClause", +"startConditionClause","conditionClausePlain","@26","@27","functionConstraint", "exitsQualifier","checkQualifier","stateQualifier","paramQualifier","visibilityQualifier", "returnQualifier","typedefQualifier","refcountQualifier","typeModifier","definedQualifier", "typeQualifier","typeSpecifier","completeType","completeTypeSpecifier","altType", -"completeTypeSpecifierAux","optCompleteType","optStructInvariant","suSpc","@27", -"@28","@29","@30","@31","@32","@33","@34","NotType","structDeclList","structDecl", -"structNamedDeclList","structNamedDecl","enumSpc","@35","enumeratorList","enumerator", +"completeTypeSpecifierAux","optCompleteType","optStructInvariant","suSpc","@28", +"@29","@30","@31","@32","@33","@34","@35","NotType","structDeclList","structDecl", +"structNamedDeclList","structNamedDecl","enumSpc","@36","enumeratorList","enumerator", "optNamedDecl","namedDecl","genericParamList","innerMods","innerModsList","pointers", -"paramIdList","idList","paramTypeList","paramList","@36","@37","paramDecl","typeExpression", +"paramIdList","idList","paramTypeList","paramList","@37","@38","paramDecl","typeExpression", "abstractDecl","optAbstractDeclBase","abstractDeclBase","stmt","iterBody","endBody", -"iterDefStmtList","iterDefIterationStmt","forPred","@38","@39","partialIterStmt", -"@40","iterDefStmt","iterSelectionStmt","@41","openScope","closeScope","macroBody", -"stmtErr","labeledStmt","optExtraFallThroughs","caseStmt","@42","@43","defaultStmt", -"@44","@45","compoundStmt","compoundStmtErr","CreateInnerScope","DeleteInnerScope", +"iterDefStmtList","iterDefIterationStmt","forPred","@39","@40","partialIterStmt", +"@41","iterDefStmt","iterSelectionStmt","@42","openScope","closeScope","macroBody", +"stmtErr","labeledStmt","optExtraFallThroughs","caseStmt","@43","@44","defaultStmt", +"@45","@46","compoundStmt","compoundStmtErr","CreateInnerScope","DeleteInnerScope", "CreateStructInnerScope","DeleteStructInnerScope","DeleteInnerScopeSafe","compoundStmtRest", -"compoundStmtAux","compoundStmtAuxErr","stmtListErr","initializerList","stmtList", -"expressionStmt","expressionStmtErr","ifPred","selectionStmt","@46","@47","whilePred", -"iterWhilePred","iterStmt","@48","@49","iterArgList","@50","iterArgExpr","cconstantExpr", -"primaryIterExpr","postfixIterExpr","unaryIterExpr","castIterExpr","timesIterExpr", -"plusIterExpr","shiftIterExpr","relationalIterExpr","equalityIterExpr","bitandIterExpr", -"xorIterExpr","bitorIterExpr","andIterExpr","orIterExpr","conditionalIterExpr", -"@51","@52","assignIterExpr","endIter","doHeader","iterationStmt","iterationStmtErr", -"jumpStmt","optSemi","id","newId","typeName", NULL +"compoundStmtAux","compoundStmtAuxErr","stmtListErr","initializerList","typeInitializerList", +"typeInitializer","stmtList","expressionStmt","expressionStmtErr","ifPred","selectionStmt", +"@47","@48","whilePred","iterWhilePred","iterStmt","@49","@50","iterArgList", +"@51","iterArgExpr","cconstantExpr","primaryIterExpr","postfixIterExpr","unaryIterExpr", +"castIterExpr","timesIterExpr","plusIterExpr","shiftIterExpr","relationalIterExpr", +"equalityIterExpr","bitandIterExpr","xorIterExpr","bitorIterExpr","andIterExpr", +"orIterExpr","conditionalIterExpr","@52","@53","assignIterExpr","endIter","doHeader", +"iterationStmt","iterationStmtErr","jumpStmt","optSemi","optComma","id","newId", +"typeName", NULL }; #endif static const short yyr1[] = { 0, - 193, 193, 194, 194, 195, 195, 195, 195, 195, 195, - 195, 195, 196, 196, 198, 197, 199, 199, 200, 200, - 201, 201, 201, 201, 202, 201, 203, 201, 204, 204, - 204, 204, 205, 204, 206, 204, 208, 209, 207, 210, - 210, 210, 210, 211, 212, 214, 213, 215, 213, 216, - 216, 217, 218, 218, 219, 219, 220, 221, 221, 222, - 222, 222, 223, 223, 223, 224, 224, 225, 225, 225, - 225, 225, 225, 225, 225, 226, 227, 227, 228, 228, - 229, 229, 230, 230, 230, 230, 230, 230, 231, 231, - 231, 231, 231, 231, 232, 234, 233, 235, 236, 238, - 237, 239, 239, 240, 241, 241, 242, 243, 243, 244, - 244, 245, 246, 246, 247, 247, 247, 248, 248, 248, - 248, 248, 249, 249, 249, 249, 249, 250, 250, 251, - 251, 253, 252, 254, 255, 252, 256, 257, 257, 258, - 258, 258, 258, 258, 258, 258, 258, 259, 259, 260, - 260, 261, 261, 261, 261, 261, 261, 261, 261, 262, - 262, 263, 263, 264, 264, 264, 264, 264, 264, 265, - 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 268, 268, 269, 271, 270, 272, 272, 272, 272, - 273, 273, 274, 274, 274, 274, 275, 275, 275, 276, - 276, 276, 277, 277, 277, 277, 277, 278, 278, 278, - 279, 279, 280, 280, 281, 281, 282, 283, 282, 284, - 285, 284, 286, 287, 288, 286, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 290, 290, - 291, 291, 292, 293, 293, 293, 294, 295, 294, 296, - 294, 297, 298, 297, 300, 299, 299, 299, 301, 302, - 303, 304, 304, 305, 305, 306, 306, 306, 306, 307, - 307, 308, 308, 309, 309, 310, 310, 311, 311, 311, - 311, 311, 312, 314, 313, 315, 316, 318, 317, 319, - 317, 320, 320, 321, 321, 321, 321, 321, 322, 322, - 322, 322, 323, 323, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 323, 324, - 324, 325, 325, 326, 326, 327, 327, 327, 327, 328, - 328, 328, 328, 328, 328, 329, 329, 329, 329, 330, - 330, 330, 330, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 333, 334, - 334, 335, 335, 336, 336, 336, 337, 337, 338, 340, - 341, 339, 342, 343, 339, 339, 339, 344, 345, 339, - 346, 347, 339, 339, 339, 339, 339, 348, 349, 349, - 349, 350, 350, 351, 351, 352, 352, 352, 353, 354, - 353, 353, 355, 355, 355, 356, 356, 357, 357, 357, - 357, 358, 358, 359, 359, 360, 360, 361, 361, 362, - 362, 362, 362, 363, 363, 364, 364, 365, 365, 365, - 367, 366, 368, 366, 369, 369, 370, 370, 371, 371, - 371, 372, 372, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 374, 374, 374, 374, 374, 374, 374, 374, - 374, 375, 376, 377, 377, 378, 378, 378, 378, 380, - 381, 379, 383, 382, 382, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 384, 384, 384, 386, 385, - 387, 388, 389, 389, 390, 390, 390, 390, 390, 390, - 390, 390, 390, 390, 390, 391, 391, 392, 392, 394, - 393, 395, 393, 397, 396, 398, 396, 399, 399, 400, - 401, 402, 403, 404, 405, 406, 406, 406, 406, 406, - 406, 406, 406, 407, 408, 408, 408, 408, 409, 409, - 410, 410, 411, 411, 412, 412, 413, 413, 413, 414, - 415, 416, 415, 417, 415, 418, 419, 421, 422, 420, - 423, 424, 423, 425, 425, 425, 425, 426, 426, 427, - 427, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, - 430, 430, 431, 431, 431, 431, 432, 432, 432, 433, - 433, 433, 434, 434, 434, 434, 434, 435, 435, 435, - 436, 436, 437, 437, 438, 438, 439, 439, 440, 440, - 441, 442, 443, 441, 444, 444, 444, 444, 444, 444, - 444, 444, 444, 444, 444, 444, 445, 445, 446, 447, - 447, 447, 448, 448, 448, 448, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 450, 450, 451, 452, - 452, 452, 452, 452, 453, 453 + 194, 194, 195, 195, 196, 196, 196, 196, 196, 196, + 196, 196, 197, 197, 199, 198, 200, 200, 201, 201, + 202, 202, 202, 202, 203, 202, 204, 202, 205, 205, + 205, 205, 206, 205, 207, 205, 209, 210, 208, 211, + 211, 211, 211, 212, 213, 215, 214, 216, 214, 217, + 217, 218, 219, 219, 220, 220, 221, 222, 222, 223, + 223, 223, 224, 224, 224, 225, 225, 226, 226, 226, + 226, 226, 226, 226, 226, 227, 228, 228, 229, 229, + 230, 230, 231, 231, 231, 231, 231, 231, 232, 232, + 232, 232, 232, 232, 233, 235, 234, 236, 237, 239, + 238, 240, 240, 241, 242, 242, 243, 244, 244, 245, + 245, 246, 247, 247, 248, 248, 248, 249, 249, 249, + 249, 249, 250, 250, 250, 250, 250, 251, 251, 252, + 252, 254, 253, 255, 256, 253, 257, 258, 258, 259, + 259, 259, 259, 259, 259, 259, 259, 260, 260, 261, + 261, 262, 262, 262, 262, 262, 262, 262, 262, 263, + 263, 264, 264, 265, 265, 265, 265, 265, 265, 266, + 265, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 268, 268, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 270, 270, 271, 273, 272, 274, + 274, 274, 274, 275, 275, 276, 276, 276, 276, 277, + 277, 277, 278, 278, 278, 279, 279, 279, 279, 279, + 280, 280, 280, 281, 281, 282, 282, 283, 283, 284, + 285, 284, 286, 287, 286, 288, 289, 290, 288, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 292, 292, 293, 293, 294, 295, 295, 295, 296, + 297, 296, 298, 296, 299, 300, 299, 302, 301, 301, + 301, 303, 304, 305, 306, 306, 307, 307, 308, 308, + 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, + 313, 313, 313, 313, 313, 314, 316, 315, 317, 318, + 320, 319, 321, 319, 322, 322, 323, 323, 323, 323, + 323, 324, 324, 324, 324, 325, 325, 325, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 325, 326, 326, 327, 327, 328, 328, 329, 329, + 329, 329, 330, 330, 330, 330, 330, 330, 331, 331, + 331, 331, 332, 332, 332, 332, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 335, 336, 336, 337, 337, 338, 338, 338, 339, + 339, 340, 342, 343, 341, 344, 345, 341, 341, 341, + 346, 347, 341, 348, 349, 341, 341, 341, 341, 341, + 350, 351, 351, 351, 352, 352, 353, 353, 354, 354, + 354, 355, 356, 355, 355, 357, 357, 357, 358, 358, + 359, 359, 359, 359, 360, 360, 361, 361, 362, 362, + 363, 363, 364, 364, 364, 364, 365, 365, 366, 366, + 367, 367, 367, 369, 368, 370, 368, 371, 371, 372, + 372, 373, 373, 373, 374, 374, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, + 376, 376, 376, 376, 377, 378, 379, 379, 380, 380, + 380, 380, 382, 383, 381, 385, 384, 384, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, + 386, 388, 387, 389, 390, 391, 391, 392, 392, 392, + 392, 392, 392, 392, 392, 392, 392, 392, 393, 393, + 394, 394, 396, 395, 397, 395, 399, 398, 400, 398, + 401, 401, 402, 403, 404, 405, 406, 407, 408, 408, + 408, 408, 408, 408, 408, 408, 409, 410, 410, 410, + 410, 411, 411, 412, 412, 413, 413, 414, 414, 415, + 415, 416, 416, 417, 417, 417, 418, 419, 420, 419, + 421, 419, 422, 423, 425, 426, 424, 427, 428, 427, + 429, 429, 429, 429, 430, 430, 431, 431, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 434, 434, 435, + 435, 435, 435, 436, 436, 436, 437, 437, 437, 438, + 438, 438, 438, 438, 439, 439, 439, 440, 440, 441, + 441, 442, 442, 443, 443, 444, 444, 445, 446, 447, + 445, 448, 448, 448, 448, 448, 448, 448, 448, 448, + 448, 448, 448, 449, 449, 450, 451, 451, 451, 452, + 452, 452, 452, 453, 453, 453, 453, 453, 453, 453, + 453, 453, 453, 454, 454, 455, 455, 456, 457, 457, + 457, 457, 457, 458, 458, 458, 458 }; static const short yyr2[] = { 0, @@ -948,1693 +957,1720 @@ static const short yyr2[] = { 0, 3, 0, 3, 0, 0, 4, 2, 2, 1, 1, 1, 3, 4, 2, 3, 3, 3, 1, 1, 1, 3, 1, 1, 3, 4, 2, 3, 3, 3, 0, - 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, - 4, 3, 4, 6, 5, 5, 2, 2, 1, 3, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 3, 1, 9, 0, 3, 4, 2, 4, 2, - 1, 4, 1, 3, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, - 1, 3, 1, 3, 1, 3, 1, 0, 4, 1, - 0, 4, 1, 0, 0, 7, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, - 0, 1, 1, 1, 1, 1, 3, 0, 9, 0, - 11, 2, 0, 6, 0, 8, 4, 4, 0, 0, - 2, 1, 4, 0, 4, 1, 3, 4, 2, 2, - 2, 1, 2, 3, 2, 1, 3, 1, 1, 1, - 1, 1, 2, 0, 6, 2, 2, 0, 6, 0, - 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 1, 1, 3, 1, 1, 0, + 4, 1, 4, 3, 4, 6, 5, 5, 2, 2, + 7, 1, 3, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 3, 1, 9, 0, 3, 4, + 2, 4, 2, 1, 4, 1, 3, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 3, 3, 3, + 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, + 0, 4, 1, 0, 4, 1, 0, 0, 7, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1, 3, 0, 1, 1, 1, 1, 1, 3, + 0, 9, 0, 11, 2, 0, 6, 0, 8, 4, + 4, 0, 0, 2, 1, 4, 0, 4, 1, 3, + 4, 2, 2, 2, 1, 2, 3, 2, 1, 3, + 1, 1, 1, 1, 1, 2, 0, 6, 2, 2, + 0, 6, 0, 5, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, - 4, 1, 3, 2, 2, 2, 0, 1, 0, 0, - 0, 12, 0, 0, 11, 6, 6, 0, 0, 10, - 0, 0, 10, 5, 5, 4, 4, 0, 1, 1, - 2, 5, 3, 2, 4, 1, 3, 4, 6, 0, - 8, 4, 1, 3, 2, 1, 4, 1, 1, 2, - 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, - 2, 2, 3, 1, 3, 1, 3, 1, 1, 3, - 0, 2, 0, 4, 4, 1, 1, 2, 1, 1, - 2, 0, 1, 5, 2, 3, 3, 4, 3, 4, - 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 7, 6, 2, 0, - 0, 10, 0, 6, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 0, 3, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 1, 2, 2, 0, 2, 0, - 4, 0, 6, 0, 3, 0, 5, 3, 2, 3, - 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, - 3, 3, 4, 2, 2, 3, 3, 4, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, - 2, 0, 5, 0, 6, 4, 4, 0, 0, 10, - 1, 0, 4, 1, 1, 1, 1, 1, 2, 1, - 3, 1, 4, 3, 4, 6, 5, 5, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 4, 1, 3, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, - 1, 0, 0, 7, 1, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 1, 0, 1, 2, - 7, 2, 2, 7, 6, 2, 3, 2, 3, 2, - 3, 3, 3, 3, 2, 3, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 1, 4, 1, 3, 2, 2, 2, 0, + 1, 0, 0, 0, 12, 0, 0, 11, 6, 6, + 0, 0, 10, 0, 0, 10, 5, 5, 4, 4, + 0, 1, 1, 2, 5, 3, 2, 4, 1, 3, + 4, 6, 0, 8, 4, 1, 3, 2, 1, 4, + 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, + 1, 2, 1, 2, 2, 3, 1, 3, 1, 3, + 1, 1, 3, 0, 2, 0, 4, 4, 1, 1, + 2, 1, 1, 2, 0, 1, 5, 2, 3, 3, + 4, 3, 4, 4, 5, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 7, + 6, 2, 0, 0, 10, 0, 6, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 0, 3, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, 2, 2, + 0, 2, 0, 4, 0, 6, 0, 3, 0, 5, + 3, 2, 3, 0, 0, 0, 0, 0, 1, 2, + 2, 3, 2, 3, 3, 4, 2, 2, 3, 3, + 4, 1, 2, 1, 2, 1, 3, 1, 4, 1, + 2, 1, 2, 1, 2, 1, 4, 2, 0, 5, + 0, 6, 4, 4, 0, 0, 10, 1, 0, 4, + 1, 1, 1, 1, 1, 2, 1, 3, 1, 4, + 3, 4, 6, 5, 5, 2, 2, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 4, 1, + 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, + 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 0, 0, + 7, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 0, 1, 2, 7, 2, 2, + 7, 6, 2, 3, 2, 3, 2, 3, 3, 3, + 3, 2, 3, 0, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 4 }; static const short yydefact[] = { 0, - 12, 11, 440, 408, 255, 408, 15, 0, 0, 0, - 0, 269, 269, 289, 288, 290, 291, 292, 350, 351, - 315, 317, 316, 320, 321, 309, 311, 312, 310, 318, - 319, 352, 353, 313, 314, 330, 326, 322, 327, 323, - 304, 305, 308, 306, 307, 347, 348, 349, 346, 332, - 331, 325, 324, 336, 337, 338, 339, 334, 335, 333, - 340, 341, 344, 345, 342, 343, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 328, 679, 680, 684, - 329, 681, 682, 685, 0, 3, 6, 7, 432, 8, - 9, 134, 44, 677, 10, 254, 256, 0, 387, 269, - 269, 269, 269, 269, 269, 269, 269, 408, 269, 387, - 387, 408, 380, 408, 0, 408, 130, 269, 683, 21, - 408, 436, 437, 438, 441, 442, 272, 269, 269, 265, - 408, 686, 408, 408, 684, 0, 525, 269, 534, 0, - 0, 0, 659, 0, 0, 0, 0, 269, 567, 0, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 0, - 43, 0, 0, 0, 0, 0, 528, 269, 169, 165, - 168, 588, 578, 170, 181, 201, 191, 190, 203, 207, - 210, 213, 218, 221, 223, 225, 227, 230, 233, 237, - 249, 569, 195, 0, 0, 559, 515, 516, 517, 518, - 0, 0, 519, 269, 520, 0, 521, 166, 0, 522, - 524, 164, 0, 508, 0, 565, 0, 541, 495, 0, - 0, 0, 504, 0, 505, 484, 503, 500, 501, 496, - 497, 498, 0, 0, 502, 509, 0, 0, 506, 483, - 0, 354, 355, 365, 367, 366, 368, 369, 370, 371, - 372, 373, 374, 4, 269, 0, 132, 137, 408, 678, - 5, 408, 388, 384, 358, 360, 357, 359, 362, 361, - 363, 364, 378, 356, 385, 386, 0, 269, 269, 376, - 269, 269, 0, 377, 433, 375, 439, 443, 408, 0, - 271, 408, 0, 262, 269, 677, 17, 19, 0, 408, - 269, 29, 451, 269, 165, 168, 201, 253, 530, 164, - 0, 269, 269, 269, 269, 0, 668, 670, 675, 0, - 0, 408, 457, 0, 0, 184, 189, 188, 187, 186, - 185, 0, 269, 182, 183, 269, 0, 0, 0, 0, - 0, 528, 0, 269, 527, 269, 473, 474, 475, 476, - 0, 477, 478, 269, 480, 269, 479, 481, 541, 269, - 269, 177, 178, 0, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 228, 234, 231, 568, 269, 0, 666, 40, 0, - 542, 560, 571, 663, 589, 0, 526, 269, 0, 0, - 0, 566, 41, 485, 489, 561, 408, 499, 511, 512, - 0, 0, 0, 42, 23, 269, 451, 408, 408, 269, - 257, 131, 408, 0, 382, 0, 408, 0, 408, 0, - 269, 269, 268, 269, 267, 263, 408, 0, 269, 0, - 408, 269, 20, 448, 0, 0, 434, 449, 269, 0, - 0, 535, 0, 574, 0, 252, 0, 667, 676, 167, - 269, 269, 0, 459, 458, 460, 269, 523, 269, 0, - 671, 672, 673, 674, 669, 529, 269, 536, 0, 662, - 408, 539, 660, 0, 0, 172, 0, 179, 0, 0, - 0, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 204, 205, 206, 209, 208, 211, 212, 214, - 215, 216, 217, 219, 220, 222, 224, 226, 269, 269, - 269, 250, 269, 269, 196, 555, 168, 559, 0, 408, - 540, 572, 0, 0, 507, 493, 269, 562, 510, 0, - 0, 25, 0, 546, 269, 563, 133, 408, 269, 541, - 269, 258, 381, 269, 398, 0, 406, 401, 0, 407, - 0, 423, 426, 420, 422, 273, 269, 269, 677, 16, - 31, 269, 451, 269, 18, 435, 444, 446, 37, 453, - 408, 452, 456, 531, 570, 0, 576, 269, 379, 465, - 0, 451, 461, 269, 0, 202, 408, 269, 532, 0, - 538, 554, 0, 579, 269, 173, 171, 269, 269, 229, - 0, 232, 269, 198, 269, 200, 556, 557, 269, 269, - 269, 577, 269, 408, 269, 408, 79, 27, 547, 550, - 269, 269, 548, 269, 564, 541, 136, 0, 260, 269, - 383, 404, 543, 390, 405, 543, 393, 269, 425, 269, - 0, 106, 269, 269, 269, 0, 33, 0, 269, 0, - 81, 450, 269, 462, 269, 0, 466, 469, 269, 0, - 467, 0, 451, 0, 0, 0, 537, 269, 269, 180, - 175, 176, 235, 0, 0, 558, 573, 0, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 0, 165, 168, - 181, 201, 190, 207, 210, 213, 218, 221, 223, 225, - 227, 230, 0, 582, 581, 166, 592, 601, 611, 613, - 617, 620, 623, 628, 631, 633, 635, 637, 639, 641, - 645, 584, 164, 0, 24, 0, 96, 100, 98, 123, - 124, 125, 126, 127, 128, 129, 26, 79, 83, 0, - 85, 84, 0, 88, 0, 408, 408, 86, 0, 87, - 300, 0, 79, 551, 552, 269, 549, 22, 269, 274, - 408, 396, 543, 408, 397, 543, 419, 424, 269, 0, - 0, 105, 269, 269, 0, 276, 264, 269, 0, 282, - 0, 269, 0, 408, 81, 35, 0, 445, 447, 38, - 81, 89, 91, 90, 94, 92, 93, 454, 428, 0, - 269, 462, 429, 463, 575, 490, 0, 470, 468, 471, - 0, 0, 174, 533, 0, 582, 269, 197, 199, 665, - 0, 0, 184, 189, 188, 187, 186, 185, 182, 183, - 269, 269, 269, 177, 178, 0, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 228, 642, 231, 494, 0, 488, 104, - 109, 102, 113, 677, 80, 95, 99, 107, 294, 297, - 293, 0, 298, 296, 28, 553, 269, 0, 410, 408, - 408, 409, 408, 408, 408, 427, 269, 266, 286, 0, - 0, 285, 279, 280, 283, 281, 274, 13, 32, 34, - 81, 30, 677, 82, 451, 455, 430, 431, 269, 464, - 472, 0, 193, 0, 541, 236, 664, 167, 269, 0, - 172, 0, 0, 0, 0, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 204, 205, 206, 209, - 208, 211, 212, 214, 215, 216, 217, 219, 220, 222, - 224, 226, 638, 269, 640, 269, 487, 108, 0, 118, - 119, 120, 121, 122, 677, 110, 408, 113, 0, 0, - 141, 101, 150, 677, 139, 140, 0, 48, 0, 0, - 58, 59, 69, 67, 303, 0, 302, 56, 76, 0, - 63, 66, 0, 677, 68, 160, 274, 269, 408, 0, - 269, 411, 399, 408, 402, 408, 421, 277, 269, 284, - 677, 36, 0, 269, 491, 269, 0, 661, 658, 202, - 269, 173, 171, 269, 269, 0, 583, 103, 113, 97, - 116, 112, 117, 115, 114, 0, 144, 0, 0, 0, - 0, 138, 0, 0, 153, 162, 677, 152, 0, 0, - 66, 0, 72, 0, 54, 53, 0, 61, 60, 62, - 0, 0, 0, 0, 0, 0, 269, 677, 161, 0, - 259, 269, 413, 269, 269, 408, 416, 0, 391, 0, - 394, 278, 287, 0, 39, 269, 0, 194, 192, 657, - 542, 0, 175, 176, 643, 111, 145, 142, 148, 0, - 149, 146, 147, 151, 0, 156, 0, 0, 0, 0, - 269, 0, 78, 77, 0, 73, 0, 50, 45, 46, - 55, 66, 57, 70, 0, 74, 75, 0, 0, 301, - 269, 269, 275, 269, 269, 0, 414, 269, 400, 0, - 403, 0, 14, 492, 580, 174, 269, 143, 157, 154, - 0, 158, 159, 163, 295, 52, 49, 0, 0, 71, - 47, 64, 299, 261, 417, 408, 412, 269, 389, 395, - 644, 155, 65, 51, 415, 418, 392, 0, 0, 0 + 12, 11, 443, 0, 411, 258, 411, 15, 0, 0, + 0, 0, 272, 272, 292, 291, 293, 294, 295, 353, + 354, 318, 320, 319, 323, 324, 312, 314, 315, 313, + 321, 322, 355, 356, 316, 317, 333, 329, 325, 330, + 326, 307, 308, 311, 309, 310, 350, 351, 352, 349, + 335, 334, 328, 327, 339, 340, 341, 342, 337, 338, + 336, 343, 344, 347, 348, 345, 346, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 331, 688, 689, + 693, 332, 690, 691, 694, 0, 3, 6, 7, 435, + 8, 9, 134, 44, 684, 10, 257, 259, 0, 390, + 272, 272, 272, 272, 272, 272, 272, 272, 411, 272, + 390, 390, 411, 383, 411, 0, 411, 130, 272, 692, + 21, 411, 439, 440, 441, 444, 445, 272, 275, 272, + 272, 268, 411, 695, 411, 411, 693, 0, 528, 272, + 537, 0, 0, 0, 666, 0, 0, 0, 0, 272, + 574, 0, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 0, 43, 0, 0, 0, 0, 0, 531, 272, + 169, 165, 168, 595, 585, 172, 184, 204, 194, 193, + 206, 210, 213, 216, 221, 224, 226, 228, 230, 233, + 236, 240, 252, 576, 198, 0, 0, 562, 518, 519, + 520, 521, 0, 0, 522, 272, 523, 0, 524, 166, + 0, 525, 527, 164, 0, 511, 0, 572, 0, 544, + 498, 0, 0, 0, 507, 0, 508, 487, 506, 503, + 504, 499, 500, 501, 0, 0, 505, 512, 0, 0, + 509, 486, 0, 357, 358, 368, 370, 369, 371, 372, + 373, 374, 375, 376, 377, 4, 272, 0, 132, 137, + 411, 685, 5, 411, 391, 387, 361, 363, 360, 362, + 365, 364, 366, 367, 381, 359, 388, 389, 0, 272, + 272, 379, 272, 272, 0, 380, 436, 378, 442, 446, + 272, 165, 168, 0, 411, 460, 0, 164, 411, 0, + 274, 411, 0, 265, 272, 684, 17, 19, 0, 411, + 272, 29, 454, 204, 256, 533, 0, 272, 272, 272, + 272, 0, 675, 677, 682, 0, 544, 0, 0, 0, + 187, 192, 191, 190, 189, 188, 0, 272, 185, 186, + 272, 0, 0, 0, 0, 0, 531, 0, 272, 530, + 272, 476, 477, 478, 479, 0, 480, 481, 272, 483, + 272, 482, 484, 544, 272, 272, 179, 180, 0, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 231, 237, 234, 575, + 272, 0, 673, 40, 0, 545, 563, 578, 670, 596, + 0, 529, 272, 0, 0, 0, 573, 41, 488, 492, + 564, 411, 502, 514, 515, 0, 0, 0, 42, 23, + 272, 454, 411, 411, 272, 260, 131, 411, 0, 385, + 0, 411, 0, 411, 0, 272, 0, 696, 272, 272, + 0, 462, 461, 463, 697, 272, 271, 272, 270, 266, + 411, 0, 272, 0, 411, 272, 20, 451, 0, 0, + 437, 452, 272, 0, 538, 0, 581, 0, 255, 0, + 674, 683, 544, 0, 167, 272, 526, 272, 0, 0, + 678, 679, 680, 681, 676, 532, 272, 539, 0, 669, + 411, 542, 667, 0, 0, 174, 0, 182, 0, 0, + 0, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 207, 208, 209, 212, 211, 214, 215, 217, + 218, 219, 220, 222, 223, 225, 227, 229, 272, 272, + 272, 253, 272, 272, 199, 558, 695, 562, 0, 411, + 543, 579, 0, 0, 510, 496, 272, 565, 513, 0, + 0, 25, 0, 549, 272, 570, 133, 411, 272, 544, + 272, 261, 384, 272, 401, 0, 409, 404, 0, 410, + 0, 426, 429, 423, 425, 382, 468, 0, 454, 464, + 272, 0, 276, 272, 272, 684, 16, 31, 272, 454, + 272, 18, 438, 447, 449, 37, 456, 411, 455, 459, + 534, 577, 0, 583, 272, 171, 272, 205, 411, 0, + 272, 535, 0, 541, 557, 0, 586, 272, 175, 173, + 272, 272, 232, 0, 235, 272, 201, 272, 203, 559, + 560, 272, 272, 272, 584, 272, 411, 272, 411, 79, + 27, 550, 553, 272, 272, 551, 272, 571, 136, 0, + 263, 272, 386, 407, 546, 393, 408, 546, 396, 272, + 428, 272, 0, 469, 472, 272, 0, 470, 0, 454, + 106, 272, 272, 272, 0, 33, 0, 272, 0, 81, + 453, 272, 465, 272, 0, 272, 568, 686, 566, 0, + 0, 0, 540, 272, 272, 183, 177, 178, 238, 0, + 0, 561, 580, 0, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 0, 165, 168, 184, 204, 193, 210, + 213, 216, 221, 224, 226, 228, 230, 233, 0, 589, + 588, 166, 599, 608, 618, 620, 624, 627, 630, 635, + 638, 640, 642, 644, 646, 648, 652, 591, 164, 0, + 24, 0, 96, 100, 98, 123, 124, 125, 126, 127, + 128, 129, 26, 79, 83, 0, 85, 84, 0, 88, + 0, 411, 411, 86, 0, 87, 303, 0, 79, 554, + 555, 272, 552, 22, 272, 277, 411, 399, 546, 411, + 400, 546, 422, 427, 272, 0, 0, 473, 471, 474, + 0, 0, 105, 272, 272, 0, 279, 267, 272, 0, + 285, 0, 272, 0, 411, 81, 35, 0, 448, 450, + 38, 81, 89, 91, 90, 94, 92, 93, 457, 431, + 0, 272, 465, 432, 466, 582, 493, 686, 272, 0, + 0, 176, 536, 0, 589, 272, 200, 202, 672, 0, + 0, 187, 192, 191, 190, 189, 188, 185, 186, 272, + 272, 272, 179, 180, 0, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 231, 649, 234, 497, 0, 491, 104, 109, + 102, 113, 684, 80, 95, 99, 107, 297, 300, 296, + 0, 301, 299, 28, 556, 272, 0, 413, 411, 411, + 412, 411, 411, 411, 430, 272, 467, 475, 269, 289, + 0, 0, 288, 282, 283, 286, 284, 277, 13, 32, + 34, 81, 30, 684, 82, 454, 458, 433, 434, 272, + 0, 567, 181, 0, 196, 0, 544, 239, 671, 167, + 272, 0, 174, 0, 0, 0, 0, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 207, 208, + 209, 212, 211, 214, 215, 217, 218, 219, 220, 222, + 223, 225, 227, 229, 645, 272, 647, 272, 490, 108, + 0, 118, 119, 120, 121, 122, 684, 110, 411, 113, + 0, 0, 141, 101, 150, 684, 139, 140, 0, 48, + 0, 0, 58, 59, 69, 67, 306, 0, 305, 56, + 76, 0, 63, 66, 0, 684, 68, 160, 277, 272, + 411, 0, 272, 414, 402, 411, 405, 411, 424, 280, + 272, 287, 684, 36, 0, 272, 494, 569, 272, 0, + 668, 665, 205, 272, 175, 173, 272, 272, 0, 590, + 103, 113, 97, 116, 112, 117, 115, 114, 0, 144, + 0, 0, 0, 0, 138, 0, 0, 153, 162, 684, + 152, 0, 0, 66, 0, 72, 0, 54, 53, 0, + 61, 60, 62, 0, 0, 0, 0, 0, 0, 272, + 684, 161, 0, 262, 272, 416, 272, 272, 411, 419, + 0, 394, 0, 397, 281, 290, 0, 39, 272, 0, + 197, 195, 664, 545, 0, 177, 178, 650, 111, 145, + 142, 148, 0, 149, 146, 147, 151, 0, 156, 0, + 0, 0, 0, 272, 0, 78, 77, 0, 73, 0, + 50, 45, 46, 55, 66, 57, 70, 0, 74, 75, + 0, 0, 304, 272, 272, 278, 272, 272, 0, 417, + 272, 403, 0, 406, 0, 14, 495, 587, 176, 272, + 143, 157, 154, 0, 158, 159, 163, 298, 52, 49, + 0, 0, 71, 47, 64, 302, 264, 420, 411, 415, + 272, 392, 398, 651, 155, 65, 51, 418, 421, 395, + 0, 0, 0 }; -static const short yydefgoto[] = { 1208, - 85, 86, 87, 88, 134, 296, 297, 89, 637, 773, - 298, 805, 931, 90, 671, 933, 909, 92, 1015, 1148, - 1095, 1079, 1149, 1187, 1087, 1017, 1018, 1019, 1091, 1020, - 1021, 1152, 1023, 1145, 757, 810, 758, 811, 759, 812, - 893, 813, 762, 814, 894, 891, 892, 791, 764, 765, - 995, 996, 997, 1062, 998, 766, 767, 93, 258, 428, - 259, 560, 94, 1002, 1129, 1130, 1004, 1076, 1098, 1077, - 174, 175, 497, 176, 942, 177, 178, 397, 535, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 529, - 189, 531, 190, 530, 837, 191, 220, 467, 309, 416, - 96, 650, 779, 127, 578, 97, 292, 193, 256, 128, - 129, 908, 797, 798, 799, 800, 920, 99, 768, 816, - 1007, 770, 771, 817, 1026, 902, 1024, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 323, - 417, 434, 113, 264, 1207, 114, 783, 1170, 786, 1172, - 653, 1108, 656, 1110, 115, 911, 912, 1105, 1106, 116, - 661, 571, 572, 821, 131, 456, 124, 125, 118, 586, - 587, 457, 458, 459, 673, 592, 324, 827, 823, 476, - 345, 221, 241, 222, 223, 346, 939, 1117, 225, 633, - 226, 227, 421, 228, 229, 195, 402, 347, 343, 348, - 461, 686, 349, 311, 610, 350, 200, 351, 541, 781, - 1033, 234, 557, 492, 401, 202, 558, 559, 352, 203, - 204, 353, 630, 596, 354, 237, 355, 359, 689, 724, - 888, 725, 208, 727, 728, 729, 730, 731, 732, 733, - 734, 735, 736, 737, 738, 739, 740, 741, 984, 1177, - 742, 1121, 356, 357, 210, 358, 261, 310, 213, 121 +static const short yydefgoto[] = { 1231, + 86, 87, 88, 89, 136, 306, 307, 90, 650, 789, + 308, 826, 952, 91, 690, 954, 928, 93, 1037, 1171, + 1118, 1102, 1172, 1210, 1110, 1039, 1040, 1041, 1114, 1042, + 1043, 1175, 1045, 1168, 773, 831, 774, 832, 775, 833, + 912, 834, 778, 835, 913, 910, 911, 812, 780, 781, + 1017, 1018, 1019, 1085, 1020, 782, 783, 94, 260, 433, + 261, 570, 95, 1024, 1152, 1153, 1026, 1099, 1121, 1100, + 176, 327, 177, 507, 178, 964, 179, 180, 402, 545, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 539, 191, 541, 192, 540, 856, 193, 222, 480, 316, + 421, 97, 662, 795, 129, 595, 98, 302, 195, 258, + 130, 131, 927, 818, 819, 820, 821, 941, 100, 784, + 837, 1029, 786, 787, 838, 1048, 921, 1046, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 296, 422, 439, 114, 266, 1230, 115, 799, 1193, 802, + 1195, 665, 1131, 668, 1133, 116, 930, 931, 1128, 1129, + 117, 673, 581, 582, 842, 133, 470, 125, 126, 119, + 603, 604, 471, 472, 473, 692, 609, 329, 807, 844, + 454, 350, 223, 243, 224, 225, 351, 960, 1140, 227, + 646, 228, 229, 426, 230, 231, 197, 407, 352, 348, + 353, 474, 702, 354, 317, 623, 355, 202, 356, 551, + 797, 1055, 236, 567, 502, 406, 204, 568, 698, 699, + 569, 357, 205, 206, 358, 643, 613, 359, 239, 360, + 364, 705, 740, 907, 741, 210, 743, 744, 745, 746, + 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, + 757, 1006, 1200, 758, 1144, 361, 362, 212, 363, 263, + 850, 298, 215, 122 }; -static const short yypact[] = { 2153, --32768,-32768, 37, 5269,-32768, 6398,-32768, 493, 3112, 3409, - 3409,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 2126, +-32768,-32768, 46, 55, 5187,-32768, 6479,-32768, 810, 3178, + 3478, 3478,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 450, --32768,-32768,-32768,-32768, 2352,-32768,-32768,-32768, 364,-32768, --32768, 54,-32768, 86,-32768,-32768,-32768, 131, 6233,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 6233, - 6233, 169, 113,-32768, 828,-32768,-32768, 493,-32768,-32768, --32768,-32768,-32768,-32768, 37,-32768,-32768, 184,-32768, 169, --32768,-32768,-32768, 5269,-32768, 209,-32768, 5499,-32768, 216, - 225, 234,-32768, 245, 493, 262, 320, 852,-32768, 2730, - 5499, 5499, 5499, 5499, 5499, 5499,-32768, 5524, 5524, 324, --32768, 345, 356, 362, 404, 419, 350, 4685,-32768, 436, - 445,-32768, 460,-32768, 681, 677,-32768,-32768,-32768, 1030, - 132, 261, 554, 354, 461, 463, 470, 491, 100,-32768, --32768, 337,-32768, 3535, 457, 462,-32768,-32768,-32768,-32768, - 559, 3156,-32768, 4685,-32768, 3535,-32768, 397, 3535,-32768, --32768, 571, 599,-32768, 575,-32768, 2921, 460, 615, 458, - 555, 3305,-32768, 3409,-32768,-32768,-32768, 5856,-32768,-32768, --32768,-32768, 661, 670,-32768,-32768, 3409, 3535,-32768,-32768, - 591,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 706, 738,-32768,-32768, 6122,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 752, 532,-32768,-32768, - 493, 493, 391,-32768, 364,-32768,-32768,-32768,-32768, 757, --32768,-32768, 766, 722, 532, 86,-32768, 403, 784,-32768, - 493,-32768, 41, 5499,-32768,-32768,-32768,-32768,-32768,-32768, - 788, 5499, 5499, 5499, 1753, 801,-32768,-32768,-32768, 601, - 782, 5723, 283, 808, 850,-32768,-32768,-32768,-32768,-32768, --32768, 879, 5499,-32768,-32768, 5499, 891, 917, 933, 965, - 970, 350, 665, 5126,-32768, 4685,-32768,-32768,-32768,-32768, - 983,-32768,-32768, 4685,-32768, 4685,-32768,-32768,-32768, 1275, - 5499,-32768,-32768, 66, 5499, 5499, 5499, 5499, 5499, 5499, - 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, - 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, - 5499,-32768,-32768,-32768,-32768, 5499, 479,-32768,-32768, 2539, --32768,-32768, 999,-32768,-32768, 1024,-32768, 5499, 966, 1026, - 1034,-32768,-32768,-32768,-32768,-32768, 169, 5856,-32768,-32768, - 3409, 1972, 1056,-32768,-32768, 5499, 309, 3639, 4767, 532, --32768, 515, 6398, 990, 1077, 1087, 1095, 1098, 1095, 493, - 1099, 532,-32768, 532,-32768,-32768,-32768, 1031, 1093, 1100, --32768, 532, 403,-32768, 493, 1107,-32768, 1112, 493, 272, - 1113,-32768, 295, 1115, 439, 1115, 1116,-32768,-32768,-32768, --32768, 5437, 1118, 415,-32768, 688, 5499,-32768,-32768, 1122, --32768,-32768,-32768,-32768,-32768,-32768, 5499,-32768, 1119,-32768, - 3639,-32768,-32768, 1135, 1123,-32768, 471,-32768, 60, 493, - 493,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 1030, 1030, 132, 132, 261, - 261, 261, 261, 554, 554, 354, 461, 463, 5499, 5499, - 5499,-32768, 5556, 5611,-32768,-32768, 5115,-32768, 3349, 3825, --32768,-32768, 1125, 548,-32768,-32768, 532,-32768,-32768, 1127, - 1129,-32768, 1132,-32768, 4197,-32768,-32768, 4011, 4241, 1130, --32768, 1136,-32768,-32768, 1141, 1143,-32768, 1144, 1148,-32768, - 699,-32768, 1146,-32768,-32768,-32768, 184,-32768, 82,-32768, --32768, 5499, 342, 532,-32768,-32768, 1147,-32768,-32768, 1166, - 6398,-32768,-32768,-32768,-32768, 1149,-32768, 1753,-32768,-32768, - 1150, 519, 688, 5448, 1151,-32768,-32768,-32768,-32768, 1154, --32768,-32768, 1155,-32768, 5499,-32768,-32768,-32768,-32768, 470, - 733, 491, 5499,-32768, 5499,-32768,-32768,-32768, 4345, 4685, - 5499,-32768, 5644,-32768, 5499,-32768, 896,-32768,-32768,-32768, - 4389, 4493,-32768, 4537,-32768, 1130,-32768, 1153,-32768,-32768, --32768,-32768,-32768, 1160,-32768,-32768, 1161,-32768, 493,-32768, - 493, 1101, 5034,-32768,-32768, 1156,-32768, 1159,-32768, 466, - 896,-32768, 493, 740, 4685, 1168,-32768,-32768, 148, 1163, --32768, 1164, 78, 1171, 1169, 1173,-32768, 5499, 5644,-32768, --32768,-32768,-32768, 1172, 1174,-32768,-32768, 577, 5499, 5499, - 5499, 5499, 5499, 5499, 5499, 5524, 5524, 1176, 800, 827, - 977, 882, 844, 1091, 759, 777, 798, 804, 1193, 1184, - 1158, 1138, 263, 1199,-32768, 53,-32768,-32768,-32768,-32768, + 694,-32768,-32768,-32768,-32768, 2309,-32768,-32768,-32768, 272, +-32768,-32768, 109,-32768, 126,-32768,-32768,-32768, 141, 6074, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 853, 867,-32768, 1040,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 896,-32768, 1137, --32768,-32768, 1139,-32768, 1140,-32768,-32768,-32768, 1162,-32768, - 1538, 1165, 896,-32768,-32768, 4641,-32768,-32768,-32768,-32768, - 6320,-32768,-32768, 6320,-32768,-32768,-32768,-32768, 5499, 846, - 1208,-32768, 5034, 5499, 493,-32768,-32768, 5034, 620,-32768, - 1206, 5034, 1170,-32768, 896,-32768, 1209,-32768,-32768,-32768, - 896,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 364, 1207, --32768, 727,-32768, 688,-32768,-32768, 1210,-32768,-32768,-32768, - 1211, 493,-32768,-32768, 902, 1212, 5499,-32768,-32768, 1215, - 913, 1213, 931, 932, 995, 997, 998, 1027, 1028, 1029, - 5499, 5468, 5499, 1035, 1036, 195, 5499, 5499, 5499, 5499, - 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, - 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, - 5499, 5499, 5499, 5499,-32768, 5499,-32768, 1218, 1222,-32768, - 1053, 1203, 576, 155,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 289,-32768,-32768,-32768,-32768, 5034, 639,-32768, 169, - 4845,-32768, 6320, 4845, 6320,-32768,-32768,-32768,-32768, 894, - 1219,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 896,-32768, 86,-32768, 411,-32768,-32768,-32768, 5479,-32768, --32768, 735,-32768, 1227, 1130,-32768,-32768, 1038, 5499, 1228, - 1051, 1054, 110, 493, 493,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 1064, 1065, 1067, 885, - 938, 822, 839, 71, 142, 539, 582, 91, 731, 55, - 817, 101, 470, 5499, 491, 5644,-32768, 397, 1040,-32768, --32768,-32768,-32768,-32768, 768,-32768, 5989, 576, 218, 218, --32768,-32768, 107, 859,-32768,-32768, 319,-32768, 518, 432, --32768,-32768,-32768,-32768,-32768, 1225,-32768, 3,-32768, 1078, --32768, 640, 1226, 86,-32768, 319,-32768,-32768,-32768, 1236, - 507,-32768,-32768, 4845,-32768, 4845,-32768,-32768, 5009,-32768, - 869,-32768, 1175, 747,-32768,-32768, 493,-32768, 1066, 1074, --32768, 1076, 1079,-32768,-32768, 1008,-32768,-32768, 576,-32768, --32768,-32768,-32768,-32768,-32768, 437, 107, 810, 493, 493, - 218,-32768, 319, 319,-32768, 373, 946,-32768, 1240, 1010, - 721, 432, 535, 83,-32768,-32768, 518,-32768,-32768,-32768, - 518, 28, 493, 493, 1241, 518,-32768, 86, 1243, 964, --32768, 532,-32768,-32768, 1246,-32768, 1247, 1248,-32768, 1250, --32768,-32768,-32768, 1183,-32768, 229, 1249,-32768,-32768,-32768, --32768, 1252, 1082, 1084,-32768,-32768,-32768,-32768, 107, 1253, - 397,-32768,-32768, 107, 762, 373, 829, 493, 493, 319, --32768, 1092,-32768,-32768, 518,-32768, 721, 1239,-32768, 535, --32768, 535,-32768,-32768, 1255,-32768,-32768, 1092, 1258,-32768, --32768,-32768,-32768, 5499, 507, 1267,-32768,-32768,-32768, 1266, --32768, 1270,-32768,-32768,-32768, 1090, 5499,-32768,-32768,-32768, - 1260,-32768,-32768, 373,-32768,-32768,-32768, 1271, 83,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 5499,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 1291, 1297,-32768 + 6074, 6074, 161, 102,-32768, 187,-32768,-32768, 810,-32768, +-32768,-32768,-32768,-32768,-32768, 46,-32768, 5488,-32768, 182, +-32768, 161,-32768,-32768,-32768, 5187,-32768, 253,-32768, 5488, +-32768, 265, 285, 301,-32768, 322, 810, 335, 347, 754, +-32768, 2689, 5488, 5488, 5488, 5488, 5488, 5488,-32768, 5534, + 5534, 351,-32768, 375, 385, 394, 402, 409, 329, 4680, +-32768, 441, 449,-32768, 478,-32768, 555, 1166,-32768,-32768, +-32768, 770, 183, 563, 69, 570, 476, 486, 472, 500, + 72,-32768,-32768, 464,-32768, 3523, 497, 507,-32768,-32768, +-32768,-32768, 557, 3223,-32768, 4680,-32768, 3523,-32768, 444, + 3523,-32768,-32768, 587, 647,-32768, 650,-32768, 2881, 478, + 685, 481, 592, 3328,-32768, 3478,-32768,-32768,-32768, 5804, +-32768,-32768,-32768,-32768, 696, 701,-32768,-32768, 3478, 3523, +-32768,-32768, 646,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 752, 744,-32768,-32768, + 6344,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 763, 454, +-32768,-32768, 810, 810, 420,-32768, 272,-32768,-32768,-32768, + 1167,-32768,-32768, 266, 5669, 294, 764,-32768,-32768, 777, +-32768,-32768, 809, 806, 454, 126,-32768, 307, 814,-32768, + 810,-32768, 78,-32768,-32768,-32768, 833, 5488, 5488, 5488, + 3429, 855,-32768,-32768,-32768, 506, 840, 443, 858, 867, +-32768,-32768,-32768,-32768,-32768,-32768, 870, 1167,-32768,-32768, + 5488, 889, 891, 916, 924, 926, 329, 644, 4586,-32768, + 4680,-32768,-32768,-32768,-32768, 947,-32768,-32768, 4680,-32768, + 4680,-32768,-32768,-32768, 5356, 5488,-32768,-32768, 50, 5488, + 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, + 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, + 5488, 5488, 5488, 5488, 5488, 5488,-32768,-32768,-32768,-32768, + 5488, 658,-32768,-32768, 2497,-32768,-32768, 1029,-32768,-32768, + 987,-32768, 5488, 733, 1005, 969,-32768,-32768,-32768,-32768, +-32768, 161, 5804,-32768,-32768, 3478, 2037, 1036,-32768,-32768, + 5488, 157, 3628, 4763, 454,-32768, 434, 6479, 945, 1028, + 1035, 1043, 1050, 1043, 810, 1055, 342,-32768,-32768, 5367, + 1051, 417,-32768, 688,-32768, 454,-32768, 454,-32768,-32768, +-32768, 994, 1053, 1063,-32768, 454, 307,-32768, 810, 1064, +-32768, 1067, 810, 1068,-32768, 355, 1074, 404, 1074, 1083, +-32768,-32768, 840, 1077,-32768, 5087,-32768,-32768, 1078, 1085, +-32768,-32768,-32768,-32768,-32768,-32768, 5488,-32768, 1079,-32768, + 3628,-32768,-32768, 1097, 1099,-32768, 471,-32768, 89, 810, + 810,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 770, 770, 183, 183, 563, + 563, 563, 563, 69, 69, 570, 476, 486, 5488, 5488, + 5488,-32768, 5546, 5579,-32768,-32768, 3073,-32768, 3373, 3815, +-32768,-32768, 1102, 473,-32768,-32768, 454,-32768,-32768, 1103, + 1082,-32768, 1105,-32768, 4189,-32768,-32768, 4002, 4233, 840, +-32768, 1089,-32768,-32768, 1108, 1117,-32768, 1118, 1121,-32768, + 741,-32768, 1114,-32768,-32768,-32768,-32768, 1125, 363, 688, + 5401, 1124,-32768, 182,-32768, 52,-32768,-32768, 5488, 559, + 454,-32768,-32768, 1120,-32768,-32768, 1151, 6479,-32768,-32768, +-32768,-32768, 1140,-32768, 3429,-32768, 5108,-32768,-32768, 1147, +-32768,-32768, 1145,-32768,-32768, 1146,-32768, 5488,-32768,-32768, +-32768,-32768, 472, 791, 500, 1167,-32768, 1167,-32768,-32768, +-32768, 4338, 4680, 5488,-32768, 5590,-32768, 5488,-32768, 1350, +-32768,-32768,-32768, 4382, 4487,-32768, 4531,-32768,-32768, 1144, +-32768,-32768,-32768,-32768,-32768, 1152,-32768,-32768, 1154,-32768, + 810,-32768, 810,-32768,-32768, 108, 1155,-32768, 1149, 62, + 1104, 1789,-32768,-32768, 1157,-32768, 1168,-32768, 290, 1350, +-32768, 810, 968, 4680, 1161, 5108,-32768, 1173,-32768, 1182, + 1179, 1160,-32768, 5488, 5590,-32768,-32768,-32768,-32768, 1180, + 1181,-32768,-32768, 545, 1167, 5488, 5488, 5488, 5488, 5488, + 5488, 5534, 5534, 1183, 609, 635, 923, 1486, 665, 970, + 984, 905, 756, 935, 1184, 1169, 1170, 1153, 74, 1186, +-32768, 41,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 699, 714, +-32768, 1032,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 1350,-32768, 1128,-32768,-32768, 1129,-32768, + 1130,-32768,-32768,-32768, 1131,-32768, 1975, 1143, 1350,-32768, +-32768, 4636,-32768,-32768,-32768,-32768, 6209,-32768,-32768, 6209, +-32768,-32768,-32768,-32768, 5488, 1021, 1210,-32768,-32768,-32768, + 1211, 1219,-32768, 1789, 5488, 810,-32768,-32768, 1789, 653, +-32768, 1217, 1789, 1150,-32768, 1350,-32768, 1218,-32768,-32768, +-32768, 1350,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 272, + 1221,-32768, 773,-32768, 688,-32768,-32768, 1173, 1710, 1222, + 810,-32768,-32768, 727, 1223, 5488, 1147, 1147, 1231, 735, + 1225, 799, 801, 820, 831, 841, 846, 851, 868, 5488, + 5412, 5488, 878, 897, 221, 5488, 5488, 5488, 5488, 5488, + 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, + 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, + 5488, 5488, 5488,-32768, 5488,-32768, 1230, 1234,-32768, 1065, + 1213, 529, 359,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 218,-32768,-32768,-32768,-32768, 1789, 537,-32768, 161, 4922, +-32768, 6209, 4922, 6209,-32768,-32768,-32768,-32768,-32768,-32768, + 1025, 1232,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 1350,-32768, 126,-32768, 512,-32768,-32768,-32768, 5460, + 1237,-32768,-32768, 505,-32768, 1242, 840,-32768,-32768, 903, + 5087, 1241, 908, 910, 156, 810, 810,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 948, 966, + 982, 861, 902, 929, 949, 428, 602, 659, 819, 738, + 853, 105, 411, 315, 472, 5488, 500, 5590,-32768, 444, + 1032,-32768,-32768,-32768,-32768,-32768, 556,-32768, 5939, 529, + 321, 321,-32768,-32768, 515, 640,-32768,-32768, 362,-32768, + 588, 450,-32768,-32768,-32768,-32768,-32768, 1240,-32768, -17, +-32768, 1004,-32768, 63, 1244, 126,-32768, 362,-32768,-32768, +-32768, 1246, 400,-32768,-32768, 4922,-32768, 4922,-32768,-32768, + 1315,-32768, 883,-32768, 1175, 886,-32768,-32768,-32768, 810, +-32768, 1080, 990,-32768, 993, 1002,-32768,-32768, 1030,-32768, +-32768, 529,-32768,-32768,-32768,-32768,-32768,-32768, 386, 515, + 661, 810, 810, 321,-32768, 362, 362,-32768, 678, 898, +-32768, 1247, 1027, 490, 450, 712, 193,-32768,-32768, 588, +-32768,-32768,-32768, 588, 24, 810, 810, 1248, 588,-32768, + 126, 1251, 957,-32768, 454,-32768,-32768, 1252,-32768, 1254, + 1257,-32768, 1258,-32768,-32768,-32768, 1189,-32768, 546, 1249, +-32768,-32768,-32768,-32768, 1262, 1003, 1012,-32768,-32768,-32768, +-32768, 515, 1256, 444,-32768,-32768, 515, 638, 678, 794, + 810, 810, 362,-32768, 1095,-32768,-32768, 588,-32768, 490, + 1261,-32768, 712,-32768, 712,-32768,-32768, 1264,-32768,-32768, + 1095, 1269,-32768,-32768,-32768,-32768, 5488, 400, 1271,-32768, +-32768,-32768, 1278,-32768, 1282,-32768,-32768,-32768, 1014, 5488, +-32768,-32768,-32768, 1277,-32768,-32768, 678,-32768,-32768,-32768, + 1280, 193,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 5488,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 1306, 1308,-32768 }; static const short yypgoto[] = {-32768, --32768, 1230,-32768,-32768,-32768,-32768, -400, -112,-32768,-32768, - 1009,-32768,-32768,-32768,-32768,-32768, 59,-32768,-32768, 396, --32768,-32768, 122, 154,-32768, 226,-32768,-32768,-32768, -942, --32768, -848,-32768,-32768, -409, -716,-32768,-32768,-32768, -580, --32768, -544,-32768, -512,-32768, 327,-32768,-32768, 655, -639, --32768, 259, 326,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, -876, 188,-32768, -960,-32768, 300, --32768, -592, 475, 1263,-32768,-32768, -591,-32768,-32768, -90, - -363, -362, -361, -360, -368, -359, -358, -514, -481,-32768, - -588,-32768, -136,-32768,-32768, 836, 174, -564, -397, 14, --32768,-32768,-32768, -435,-32768,-32768,-32768, 711, -242, 884, --32768, -857, -754,-32768,-32768, 533,-32768,-32768,-32768, -507, --32768,-32768,-32768, -335,-32768,-32768,-32768,-32768,-32768, 560, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 47, 769,-32768, 967,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 1145, -744, -652,-32768, 170,-32768, --32768, 676, 679, 517, 1, -384, 1221,-32768, 2,-32768, --32768, -572,-32768,-32768,-32768, 667, -266, 1021,-32768, -462, - 129, 1336,-32768, 1111,-32768, 187,-32768,-32768,-32768,-32768, - -145,-32768,-32768,-32768,-32768,-32768, 168, 1283, 1007, 1292, --32768,-32768, 1332,-32768,-32768, -341,-32768, 26, 230, -565, - -846,-32768, 861,-32768,-32768, 950, -190, -456, 128,-32768, - 149, 51,-32768,-32768, 97,-32768, 106,-32768,-32768, 664, --32768, 368, -607,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 1227,-32768,-32768,-32768,-32768, -414, -113,-32768,-32768, + 998,-32768,-32768,-32768,-32768,-32768, 65,-32768,-32768, 395, +-32768,-32768, 103, 136,-32768, 208,-32768,-32768,-32768, -987, +-32768, -893,-32768,-32768, -634, -750,-32768,-32768,-32768, -538, +-32768, -536,-32768, -477,-32768, 309,-32768,-32768, 641, -648, +-32768, 239, 305,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, -873, 166,-32768, -943,-32768, 281, +-32768,-32768, -624, 460, 989,-32768,-32768, -588,-32768,-32768, + -122, -371, -370, -343, -336, -379, -388, -376, -513, -511, +-32768, -585,-32768, -137,-32768,-32768, 1087, 1379, -586, -423, + 25,-32768,-32768,-32768, -455,-32768,-32768,-32768, 729, -270, + 874,-32768, -885, -746,-32768,-32768, 513,-32768,-32768,-32768, + -418,-32768,-32768,-32768, -417,-32768,-32768,-32768,-32768,-32768, + 549,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 188, 766,-32768, 953,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 28, -763, -524,-32768, 149, +-32768,-32768, 669, 667, 508, 2, -382, 1229,-32768, 20, +-32768,-32768, -571,-32768,-32768,-32768, 666, -107, 1061,-32768, + -448, -152, 1347,-32768, 1127,-32768, 706,-32768,-32768,-32768, +-32768, -155,-32768,-32768,-32768,-32768,-32768, 14, 1071, 1022, + 1088,-32768,-32768, 1437,-32768,-32768, -308,-32768, 82, 243, + -613, -810,-32768, 887,-32768,-32768, 985, -177, 697, 543, + -478, 113,-32768, 189, 33,-32768,-32768, 39,-32768, 162, +-32768,-32768, 689,-32768, 387, -587,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 1389,-32768,-32768, 1626, -247, 0, 449,-32768 +-32768,-32768,-32768,-32768,-32768, 1443,-32768,-32768, 1527, -246, + 548, 0, 442,-32768 }; -#define YYLAST 6589 - - -static const short yytable[] = { 119, - 117, 308, 489, 119, 126, 285, 576, 119, 212, 212, - 212, 603, 435, 95, 620, 516, 517, 1003, 518, 519, - 526, 520, 521, 522, 523, 726, 524, 525, 551, 680, - 527, 815, 528, 676, 201, 233, 233, 418, 919, 914, - 711, 713, 553, 923, 723, 454, 112, 927, 448, 622, - 130, 585, 133, 1022, 1154, 450, 760, 1085, 91, 205, - 326, 327, 328, 329, 330, 331, 1080, 1035, 429, 1041, - 3, 410, 257, -590, 601, -632, 414, -590, 415, -632, - 396, 726, 454, 629, 119, 117, 617, 1008, 930, 609, - 784, -624, 761, 500, 934, -624, 711, 713, 95, 260, - 723, 642, 830, 260, 664, 206, 1082, 387, 388, 501, - 831, -629, 1135, 1136, 207, -629, 1010, 119, 721, 381, - 382, -636, 1066, 1067, 763, -636, 288, 383, 384, 769, - 396, 112, 1068, 119, 1069, 301, 1053, 235, 235, 390, - 393, 385, 386, 91, 119, 263, 122, 123, 1153, 212, - 1070, 722, 1027, 1159, 262, 394, 263, 263, 236, 236, - 1081, 1083, -625, 379, 380, 815, -625, 212, 1034, 1100, - 1036, 815, 260, 472, 721, 201, 196, 760, 999, 1184, - 300, 3, 192, 669, 666, 1086, -269, 1109, 1000, 1111, - 381, 382, 760, 212, 1134, 194, 224, 224, 668, 279, - 205, 212, 1188, 212, 289, 212, 682, 722, 212, 540, - 450, 824, 607, 761, 1042, 1155, 212, 913, 647, 201, - 915, 212, 954, 212, -408, -408, -408, 201, 761, -408, - -408, 201, 303, 1147, 201, 1150, 212, 212, 955, 312, - 405, 999, 233, 411, 205, 763, 206, 233, 313, 233, - 769, 1000, 205, -459, 472, 207, 205, 314, 1032, 205, - 763, 1032, 233, 201, 718, 769, 78, 1013, 315, 714, - 715, 716, 717, 719, 720, 549, 414, 119, 432, 317, - 119, 119, 119, 988, 1113, 513, 514, 515, 205, 308, - 206, 815, 396, 1008, 119, 447, 470, 435, 206, 207, - 119, 772, 206, 885, 489, 206, -269, 207, 472, 381, - 382, 207, 1009, 454, 207, 396, 3, 325, 886, 595, - 718, 320, 1010, 321, 474, 714, 715, 716, 717, 719, - 720, 665, 403, 552, 206, 308, 194, 318, 78, 1001, - 1150, 685, 1073, 207, 235, 212, 454, 336, 895, 235, - 308, 235, 1074, 212, 395, 212, 694, 396, 695, 824, - 337, 398, 680, 905, 235, 236, 667, 192, 471, 983, - 236, 338, 236, 404, 1045, 192, 406, 339, 726, 192, - 194, 1032, 192, 1032, 495, 236, 606, -270, 194, 255, - 409, 916, 194, 711, 713, 194, 921, 723, 1137, 212, - 1138, 78, 1001, 224, 985, 423, 387, 388, 224, 440, - 224, 192, 78, 79, 135, 454, 1139, 82, 83, 340, - 212, 212, 772, 224, 194, 201, -270, 212, 449, 119, - 561, 548, 842, 341, -408, 678, -408, 772, -269, 119, - 472, 119, 548, 119, -408, 308, 233, 233, 120, 342, - 205, 119, 120, 301, 119, 1082, 136, -680, 119, 396, - 1131, 1127, 1068, 597, 1069, 1010, -684, 308, 1011, 1012, - 808, 721, 78, 1013, 490, 412, 1014, 460, 396, 471, - 1070, -681, 493, -686, 494, 463, 464, 465, 466, 389, - 212, 615, -408, -408, -408, 616, 206, -408, -408, 119, - 119, 390, 78, 1075, 722, 207, 460, 970, 971, 391, - 972, 973, 980, 974, 975, 976, 977, 460, 978, 979, - 533, 534, 981, 454, 982, -408, -408, -408, 1104, 1131, - -408, -408, -408, 120, 499, -408, -686, -408, 212, 212, - 3, 1009, -408, 678, -408, 392, 119, 634, 235, 235, - 399, 1010, -408, 548, 212, -513, 556, 212, 212, -626, - 1092, 819, 1093, -626, 201, 3, 120, 538, 396, 236, - 236, 548, 632, 192, 78, 79, 135, 400, 1094, 82, - 83, 544, 302, 119, 405, 301, 194, 381, 382, 205, - 383, 384, -683, 316, -408, -408, -408, 396, 408, -408, - -408, 840, -627, 1049, 385, 386, -627, 224, 224, 843, - 844, 845, 846, 847, 848, 78, 1013, 718, 469, 556, - 407, 396, 714, 715, 716, 717, 719, 720, 212, 212, - 381, 382, 743, -686, -686, 206, -682, 674, -686, -686, - 212, 212, 924, 212, 207, 794, 1005, 795, 413, 78, - 79, 135, 308, 603, 82, 83, 1028, 308, 119, 1029, - 119, -46, 212, 990, 991, 1092, 1163, 1093, 556, 119, - 487, 488, 119, 119, 212, 822, 78, 79, 135, 419, - 474, 82, 83, 1094, 424, 1043, 556, 645, 743, 420, - 78, 79, 135, 992, 993, 82, 83, 1011, 1012, 365, - 946, 78, 1013, 621, 360, 1014, 361, 994, -408, 819, - 98, -269, 192, 604, 98, 78, 79, 135, 658, 659, - 82, 83, 242, 243, -408, 194, 120, 362, 363, 437, - 439, 441, 425, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 120, 446, 1146, 1092, 1060, 1093, 302, - -269, -630, 472, 396, 693, -630, 1072, 645, 697, 1046, - 3, 427, 1047, -269, 1094, 472, 1195, 383, 384, 431, - 645, 466, 472, 3, 443, 212, 1097, 967, 968, 969, - 3, 385, 386, 445, 1122, 260, 1179, 1137, 1059, 1138, - 871, 872, 212, 1114, 119, 98, 460, 212, 460, 395, - 1206, 212, 396, 825, 698, 1139, 470, 451, 744, 462, - 265, 266, 267, 268, 269, 270, 271, 272, 468, 274, - -587, 119, 277, 822, -587, 873, 874, 910, 98, 1141, - 910, 119, 477, 999, 875, 876, 1128, -634, 290, 291, - 293, -634, -621, 1000, 299, 389, -621, -586, 877, 878, - 1161, -586, 999, 379, 380, 1180, 879, 880, 1050, -622, - 322, 835, 1000, -622, -610, 917, 659, 332, -610, 319, - 379, 380, 841, -585, 478, 304, 260, -585, 120, 1071, - 151, 152, 153, 154, 155, 156, 260, 396, 573, 1029, - 120, 889, 120, 1006, 281, 282, 283, 157, 158, 159, - 302, 1025, 479, 588, 857, -619, 212, 593, 481, -619, - 78, 79, 135, 1038, 1039, 82, 83, 937, 376, 377, - 378, 160, 396, 78, 79, 135, 944, 322, 82, 83, - 78, 79, 135, 396, 482, 82, 83, 948, 858, 859, - 860, 861, 862, 863, 864, 865, 866, 867, 618, 619, - 483, -604, -609, 119, 119, -604, -609, 910, -618, 910, - 910, 910, -618, 260, 169, 426, 1140, 746, 747, 748, - 749, 376, 377, 378, 750, 751, 752, 753, 754, 755, - 756, 1162, 484, 412, 1029, 743, 396, 485, 98, 433, - 470, 436, 438, 78, 1001, 120, 1064, 172, 1006, 1006, - 852, 491, 853, 285, -408, 98, 1078, 542, 1025, 1025, - 1063, 299, 78, 1001, 322, -608, 172, -607, -606, -608, - -408, -607, -606, 854, 855, 1078, 953, 308, 396, 1125, - 119, 1107, 302, 473, 543, 78, 305, 306, 212, 172, - 1201, 1143, 1144, 119, 561, 1116, 119, -605, -602, -603, - 545, -605, -602, -603, 322, -599, -600, 546, -591, -599, - -600, 308, -591, 376, 377, 378, 550, 1006, 119, 119, - 1006, -594, 1078, 1078, 615, -594, 275, 276, 1052, 563, - 910, 1025, 910, 1025, -614, -615, 1025, -616, -614, -615, - 1025, -616, 119, 119, -612, 1025, -595, 564, -612, -593, - -595, 119, -597, -593, -598, 565, -597, 573, -598, 573, - -596, 801, 466, -269, -596, 119, 568, 574, 809, 581, - 580, 593, 120, 583, 868, 869, 870, 277, 1088, 1089, - 1090, 589, 590, 598, 594, 396, 1006, 119, 119, 1078, - 98, 602, 608, 611, 1025, 613, 614, 566, 631, 569, - 635, 575, 98, 646, 98, 636, 638, 1056, 649, 582, - 652, 654, 299, 655, 119, 1107, 657, 670, 660, 591, - 672, 480, 746, 675, 683, 687, 677, 778, 688, 782, - 785, 599, 804, 806, 473, 826, 605, 828, 1025, 433, - 829, 832, 884, 833, 834, 498, 838, 883, 839, 851, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 881, 882, 887, 890, 918, 896, 926, 897, 898, - 935, 532, 947, 932, 940, 941, 945, 949, 986, 987, - 172, 801, 989, 922, 1048, 1040, 801, 1084, 1051, 1096, - 801, 901, 273, 1103, 904, 1120, 278, 98, 280, 928, - 284, 1142, 1158, 1140, 1115, 286, 1165, 1169, 1168, 1171, - 120, 648, 1173, 1174, 433, 294, 1176, 295, 1189, 1178, - 943, 1190, 1192, 1186, 1197, 1199, 1202, 662, 663, 1200, - 1209, 197, 230, 230, 299, 1203, 1210, 1016, 304, 496, - 198, 231, 231, 151, 152, 153, 154, 155, 156, 453, - 1204, 1191, 1151, 605, 254, 1058, 792, 1126, 433, 364, - 157, 158, 159, 1065, 1181, 1099, 952, 577, 691, 692, - 903, 925, 651, 322, 1196, 322, 790, 788, 938, 818, - 199, 232, 232, 475, 160, 287, 240, 422, 486, 539, - 1175, 612, 836, 1057, 0, 801, 0, 0, 0, 0, - 780, 0, 0, 0, 0, 0, 0, 0, 787, 0, - 789, 0, 0, 0, 802, 803, 0, 0, 0, 807, - 0, 0, 0, 591, 820, 0, 0, 169, 0, 473, - 0, 0, 0, 0, 0, 0, 0, 209, 238, 238, - 307, 0, 1054, 1055, 0, 0, 430, 0, 0, 322, - 0, 0, 0, 307, 307, 307, 307, 307, 307, 0, - 334, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 442, 0, 0, 444, 0, 0, 0, - 0, 198, 0, 0, 452, 0, 0, 455, 0, 0, - 690, 0, 0, 0, 0, 0, 0, 0, 78, 305, - 306, 0, 172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 197, 0, 0, 120, - 0, 199, 0, 0, 197, 198, 0, 801, 197, 907, - 0, 197, 120, 198, 0, 1119, 0, 198, 796, 230, - 198, 0, 0, 0, 230, 0, 230, 0, 231, 0, - 0, 0, 0, 231, 0, 231, 0, 1132, 1133, 230, - 197, 0, 0, 0, 0, 199, 0, 0, 231, 198, - 0, 936, 820, 199, 605, 0, 0, 199, 209, 0, - 199, 1156, 1157, 0, 0, 0, 0, 0, 232, 0, - 120, 0, 0, 232, 0, 232, 0, 0, 0, 0, - 0, 547, 0, 0, 120, 0, 0, 0, 232, 199, - 0, 455, 0, 0, 0, 0, 562, 0, 0, 0, - 0, 567, 209, 570, 0, 0, 1182, 1183, 0, 0, - 209, 579, 0, 0, 209, 584, 0, 209, 0, 0, - 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 238, 0, 238, 120, 0, 0, 0, 0, 0, 0, - 1030, 0, 0, 0, 0, 238, 209, 1037, 796, 0, - 0, 0, 0, 796, 211, 239, 239, 796, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 0, 0, 0, 21, 22, 23, - 24, 0, 25, 0, 0, 0, 0, 30, 31, 0, - 0, 34, 35, 0, 37, 38, 39, 40, 0, 0, - 0, 0, 197, 0, 0, 0, 950, 498, 307, 52, - 53, 198, 956, 957, 958, 959, 960, 961, 962, 963, - 964, 965, 966, 230, 230, 0, 0, 0, 0, 0, - 0, 0, 231, 231, 77, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 81, 0, 0, 455, 0, 0, - 0, 199, 0, 0, 307, 0, 0, 0, 1101, 307, - 0, 98, 796, 0, 0, 0, 679, 0, 0, 307, - 0, 684, 232, 232, 820, 0, 1118, 0, 0, 0, - 0, 433, 0, 0, 1123, 1124, 0, 0, 0, 0, - -251, 0, 0, 0, 0, 211, 304, 0, 562, 0, - 745, 151, 152, 153, 154, 155, 156, 0, 209, 0, - 0, 307, 0, 307, 0, 624, 626, 0, 157, 158, - 159, 0, 0, 0, 0, 0, 0, 1160, 0, 238, - 238, 0, 98, 0, 1164, 1166, 0, 0, 0, 211, - 0, 197, 160, 0, 0, 0, 820, 211, 0, 0, - 198, 211, 0, 0, 211, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 307, 0, 0, 239, 0, 239, - 0, 1185, 0, 0, 0, 856, 0, 0, 0, 0, - 0, 0, 239, 211, 0, 169, 307, 0, 0, 0, - 199, 1193, 1194, 0, 796, 98, 0, 0, 1198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 899, 900, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, - 0, 0, 0, 0, 0, 0, 78, 305, 306, 0, - 172, 0, 0, 0, 0, 0, 0, 0, 929, 0, - 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 307, 307, 307, 307, 307, 307, 849, 850, - 0, 0, 214, 0, 0, 0, 0, 138, 139, 140, - 0, 0, 215, 143, 144, 145, 146, 147, 148, 216, - -486, -486, 0, 0, 0, 217, -486, 0, 0, 0, - 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, - 0, 0, 0, -269, -269, 0, 0, 157, 158, 159, - 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 160, 0, 0, 0, 0, 239, 239, 0, 0, - 0, 307, 0, 0, 1031, 0, 307, 0, 0, 0, - 0, 0, 0, 0, 0, -486, 162, 163, 164, 165, - 166, 167, 0, 0, 0, 0, 0, 0, 0, 1044, - 168, 0, 0, 0, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 0, 307, 0, - 0, 0, -1, 1, 0, 78, 170, 171, 0, 172, - 218, 219, 0, 0, 211, 0, 0, 0, 0, 0, - 2, 0, 0, 1102, 0, 0, -269, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, +#define YYLAST 6671 + + +static const short yytable[] = { 120, + 593, 118, 315, 590, 120, 287, 537, 561, 120, 214, + 214, 214, 526, 527, 536, 528, 529, 677, 484, 538, + 297, 727, 127, 198, 96, 633, 588, 1044, 695, 635, + 331, 332, 333, 334, 335, 336, 933, 464, 1108, 1025, + 499, 836, 207, 1103, 530, 531, 532, 533, 208, 563, + 1177, 602, 423, 408, 800, 534, 535, 729, 742, 462, + 739, -597, 1063, 415, 92, -597, 468, 940, 419, 262, + 420, 642, 944, 622, 683, 951, 948, 510, 128, 3, + 727, 955, 468, 434, -46, 120, 810, 118, 1115, 655, + 1116, 203, 235, 235, 511, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 388, 389, 1117, 811, 401, + 96, 776, 398, 777, 904, 630, 729, 742, 120, 739, + 390, 391, 1057, 237, 237, -639, 1176, 259, 399, -639, + 905, 1182, 737, 450, 738, 120, 275, 1104, 1106, 914, + 280, 3, 282, 262, 286, 290, 120, 1089, 1090, 288, + 92, 214, 1158, 1159, 924, 311, 123, 124, 392, 393, + 304, 468, 305, 1123, 264, 330, 1109, 679, 1056, 214, + 1058, 209, 779, 440, 499, 685, 401, 836, -272, 1049, + 1211, 562, 1076, 836, 207, 932, 688, 113, 934, 281, + 208, 737, 132, 738, 135, 214, 464, 1030, 500, 238, + 238, 1064, 299, 214, 369, 214, 503, 214, 504, 403, + 214, 1170, 1178, 1173, 384, 385, 1105, 687, 214, 1207, + 1157, 409, 1030, 214, 411, 214, 1032, 550, 207, 410, + 489, 785, 788, 203, 208, 776, 207, 777, 214, 214, + 207, 1031, 208, 207, 845, 1132, 208, 1134, 976, 208, + 776, 1032, 777, 428, 283, 284, 285, 735, 523, 524, + 525, 659, -411, -411, -411, 977, 734, -411, -411, 736, + 559, 419, 207, 113, 730, 731, 313, 203, 208, 120, + 566, 437, 120, 120, 120, 203, 401, 265, 318, 203, + 448, 435, 203, 315, 829, -273, 779, 257, 265, 265, + 235, 416, 732, 836, 120, 235, 461, 235, 319, 733, + 120, 779, 315, 209, 1136, 452, 735, -272, 1173, 450, + 235, 203, 1010, 310, 320, 734, 456, 3, 736, 458, + -273, 237, 463, 730, 731, -643, 237, 466, 237, -643, + 469, -411, -411, -411, 1021, 321, -411, -411, 566, 684, + 214, 237, 323, 395, 1022, 785, 788, 209, 214, 315, + 214, 732, 401, 618, 324, 209, 485, 468, 733, 209, + 785, 788, 209, 1067, 341, 401, 262, 79, 1035, 612, + 619, 935, 1021, 727, 677, 1096, -411, 675, -411, 1005, + 342, 942, 1022, 1007, 845, 1097, -411, 566, 1033, 1034, + 343, 209, 79, 1035, 214, 1054, 1036, 238, 1054, 344, + 1150, 1091, 238, 1092, 238, 566, 658, 345, 548, 729, + 742, 1127, 739, 346, 401, 214, 214, 238, 614, 347, + 1093, -641, 214, 3, 120, -641, 571, 207, 445, 394, + -272, 121, 450, 208, 120, 505, 121, 558, -631, 557, + 138, -411, -631, 315, -411, 120, -411, 120, 558, 469, + 400, 315, -689, 401, 572, 120, 440, 485, 120, 577, + -693, 580, 120, 1105, 79, 80, 137, 386, 387, 83, + 84, 400, 449, 1032, 401, 311, 203, 3, 596, 658, + 713, 628, 601, 401, 737, 629, 738, 645, 417, -690, + 214, 401, 658, 1154, 394, 79, 1023, 235, 235, 120, + 120, 396, 1003, 701, 1169, 1115, 468, 1116, 992, 993, + 1002, 994, 995, 482, 395, 1004, 401, 121, 710, 1069, + 711, 1054, 1070, 1054, 1117, -411, 675, -411, 237, 237, + 1091, 846, 1092, 79, 1023, -411, 79, 1098, 214, 214, + 996, 997, 998, 999, 1050, 397, 120, 1051, 647, 1093, + 121, 1000, 1001, 468, 214, 401, 209, 214, 214, 859, + -462, 450, 1154, 262, 558, 405, 1082, 312, 365, 840, + 366, 207, -411, 686, 79, 80, 137, 208, 322, 83, + 84, 404, 558, 862, 863, 864, 865, 866, 867, -411, + 120, -516, 367, 368, 79, 80, 137, 861, -692, 83, + 84, 1031, 386, 387, 238, 238, 676, 1012, 1013, 735, + 311, 1032, -632, 392, 393, 449, -632, 469, 734, -594, + 203, 736, 410, -594, 79, 1035, 730, 731, 79, 80, + 137, 214, 214, 83, 84, 759, 700, 1014, 1015, 497, + 498, 386, 387, 214, 214, -593, 214, 262, 1072, -593, + 1094, 1016, 1202, 1160, 732, 1161, 1027, 315, 412, 1186, + 120, 733, 120, 413, 572, 945, 761, 315, 815, -633, + 816, 214, 1162, -633, 1021, -617, 418, 1151, 120, -617, + 590, 120, 120, 214, 1022, 452, -411, -411, -411, 543, + 544, -411, -411, 1160, 759, 1161, -691, 1065, 386, 387, + 209, -272, 843, 591, 424, 196, 226, 226, 968, -592, + 425, 121, 1162, -592, 442, 444, 446, -695, 99, 840, + 79, 80, 137, 99, 401, 83, 84, 1115, 908, 1116, + 429, 244, 245, -411, -411, -411, 121, 401, -411, -411, + 417, 966, 312, 401, 875, 401, 1117, 485, -636, 970, + 670, 671, -636, 1218, 989, 990, 991, 432, 1033, 1034, + 1083, 325, 79, 1035, 388, 389, 1036, 291, 430, 1095, + 436, -695, 153, 154, 155, 156, 157, 158, 455, 390, + 391, 214, 894, 895, 457, 693, -272, 1229, 450, 1120, + 159, 160, 161, 381, 382, 383, 3, 896, 897, 918, + 919, 401, 709, 214, 99, 120, 1137, 1021, 214, -611, + 1203, -616, 214, -611, 162, -616, 459, 1022, 460, 267, + 268, 269, 270, 271, 272, 273, 274, 465, 276, -634, + -615, 279, 120, -634, -615, 79, 1023, 99, 1073, 174, + 120, -614, 950, 1164, 475, -614, 295, 196, 300, 301, + 303, -613, 843, 483, 309, -613, -612, 171, 386, 387, + -612, -609, 481, -637, 1184, -609, 121, -637, -695, -695, + 295, -626, 486, -695, -695, -626, 583, 337, -610, 388, + 389, 487, -610, 488, 381, 382, 383, 121, -606, 121, + 262, 196, -606, 1051, 390, 391, 491, 312, 492, 196, + 605, 450, 1028, 196, 610, 262, 196, -607, 1163, 3, + 1047, -607, -625, -598, 226, 214, -625, -598, -601, 226, + 628, 226, -601, 493, 1075, 381, 382, 383, 79, 292, + 293, 494, 174, 495, 226, 196, 871, 295, 872, -628, + -411, 631, 632, -628, 892, 893, 1053, 79, 80, 137, + 384, 385, 83, 84, 958, 501, 1145, -411, -621, -629, + 873, 874, -621, -629, 1185, 120, 120, 1051, 79, 1023, + 384, 385, 174, 1066, 929, 431, -622, 929, 898, 899, + -622, -272, 556, 450, 79, 80, 137, 553, 121, 83, + 84, 3, -623, 887, 888, 889, -623, 759, 99, 438, + -619, 441, 443, -602, -619, 890, 891, -602, 1087, 295, + 1028, 1028, -600, -604, 451, 287, -600, -604, 1101, 555, + 1047, 1047, -605, 99, -603, 573, -605, 552, -603, 309, + 936, 671, 312, 1086, 1060, 1061, 560, 1101, 574, 315, + 401, 1148, 120, 575, 1130, 1111, 1112, 1113, 1166, 1167, + 214, -272, 1224, 277, 278, 120, 295, 571, 578, 120, + 79, 80, 137, 584, 589, 83, 84, 295, 1125, 598, + 199, 232, 232, 315, 597, 1139, 600, 607, 606, 611, + 1028, 120, 120, 1028, 401, 1101, 1101, 200, 233, 233, + 615, 616, 620, 624, 1047, 621, 1047, 626, 649, 1047, + 196, 661, 583, 1047, 583, 120, 120, 929, 1047, 929, + 929, 929, 627, 822, 120, 644, 648, 664, 314, 651, + 830, 226, 226, 610, 121, 666, 672, 667, 120, 669, + 689, 314, 314, 314, 314, 314, 314, 680, 339, 340, + 279, 674, 79, 80, 137, 691, 1190, 83, 84, 1028, + 120, 120, 1101, 99, 694, 617, 703, 1047, 794, 704, + 576, 798, 579, 801, 585, 809, 762, 586, 847, 808, + 451, 853, 592, 825, 99, -170, 99, 120, 370, 1130, + 291, 599, 827, 849, 309, 153, 154, 155, 156, 157, + 158, 608, 851, 852, 857, 858, 870, 901, 903, 902, + 906, 1047, 900, 159, 160, 161, 438, 909, 915, 916, + 917, 920, 199, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 923, 937, 938, 939, 162, 947, 200, + 949, 963, 953, 929, 956, 929, 1228, 967, 969, 971, + 1008, 1009, 1011, 174, 196, 822, 1068, 943, 1062, 1071, + 822, 1074, 1107, 1126, 822, 1138, 199, 1119, 1165, 1181, + 1143, 1163, 1188, 1197, 199, 1191, 1192, 1194, 199, 1196, + 171, 199, 1201, 200, 121, 99, 1199, 1209, 1220, 232, + 1213, 200, 965, 1215, 232, 200, 232, 1222, 200, 660, + 1212, 1223, 438, 1225, 1226, 1232, 233, 1233, 467, 232, + 199, 233, 256, 233, 1227, 1038, 1214, 1174, 592, 1081, + 1149, 813, 681, 682, 1088, 1204, 233, 200, 1122, 309, + 974, 594, 946, 814, 1135, 922, 1219, 804, 291, 663, + 815, 806, 816, 153, 154, 155, 156, 157, 158, 438, + 959, 79, 292, 293, 289, 174, 453, 839, 242, 707, + 708, 159, 160, 161, 295, 427, 295, 822, 496, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 162, 1198, 625, 194, 549, + 796, 962, 848, 855, 1080, 961, 0, 0, 803, 0, + 805, 0, 0, 0, 451, 0, 0, 0, 0, 0, + 0, 823, 824, 0, 0, 0, 828, 1077, 1078, 314, + 608, 841, 762, 763, 764, 765, 0, 490, 171, 766, + 767, 768, 769, 770, 771, 772, 0, 0, 314, 0, + 0, 0, 0, 295, 0, 0, 201, 234, 234, 0, + 0, 508, 211, 240, 240, 0, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 0, 0, 0, + 0, 0, 0, 0, 314, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 314, 0, 542, 0, 0, + 0, 0, 200, 0, 121, 0, 232, 232, 0, 79, + 172, 173, 822, 174, 83, 84, 294, 121, 876, 0, + 0, 1142, 0, 233, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 926, 0, 0, 0, 314, 326, 314, + 328, 637, 639, 1155, 1156, 0, 213, 241, 241, 0, + 0, 0, 0, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 0, 0, 0, 0, 1179, 1180, 0, + 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, + 957, 841, 0, 592, 194, 0, 0, 0, 0, 314, + 121, 0, 194, 0, 0, 0, 194, 314, 201, 194, + 0, 0, 0, 0, 211, 0, 0, 414, 0, 0, + 0, 0, 1205, 1206, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 194, 199, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, + 0, 0, 201, 0, 728, 0, 200, 0, 211, 0, + 201, 0, 0, 0, 201, 0, 211, 201, 0, 0, + 211, 0, 0, 211, 0, 234, 0, 1052, 0, 0, + 234, 240, 234, 0, 1059, 0, 240, 0, 240, 447, + 0, 0, 0, 0, 0, 234, 201, 0, 213, 0, + 0, 240, 211, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 728, 0, 0, 476, 477, 478, 479, + 0, 0, 0, 697, 314, 314, 314, 314, 314, 314, + 868, 869, 0, 0, 706, 0, 447, 0, 0, 0, + 0, 0, 213, 0, 0, 0, 0, 447, 696, -687, + 213, 0, 0, 291, 213, 0, 0, 213, 153, 154, + 155, 156, 157, 158, 509, 241, 0, 0, 0, 0, + 241, 0, 241, 0, 0, 0, 159, 160, 161, 0, + 0, 0, 0, 0, 0, 241, 213, 0, 817, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1124, 0, + 162, 99, 697, 194, 0, 0, 0, 0, 0, 0, + 0, 554, 0, 314, 841, 0, 0, 1141, 0, 0, + 0, 0, 438, 314, 0, 1146, 1147, 814, 0, 0, + 0, 0, 291, 0, 815, 0, 816, 153, 154, 155, + 156, 157, 158, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 159, 160, 161, 0, 0, + 0, 201, 0, 0, 314, 0, 0, 211, 1183, 0, + 0, 0, 0, 99, 0, 1187, 1189, 0, 0, 162, + 0, 0, 234, 234, 0, 0, 0, 841, 240, 240, + 0, 0, 0, 0, 0, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 1208, 314, 79, 292, 293, 0, 174, 0, + 817, 0, 171, 0, 0, 817, 0, 0, 0, 817, + 0, 0, 1216, 1217, 0, 0, 99, 0, 634, 1221, + 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, + 0, 213, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 307, 0, 0, 0, 0, 0, 0, 0, -408, - -408, -408, 0, 5, 0, 0, 0, 0, 6, 7, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 10, 11, 0, 0, 712, 0, - 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 13, 14, 0, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 0, 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, - 0, 0, 0, 0, 0, 0, 78, 79, 80, 81, - 1205, 82, 83, 84, 0, 0, 0, 0, 0, 0, - 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, -269, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -408, -408, - -408, 0, 5, 0, 0, 0, 307, 6, 7, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 9, 10, 11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 307, 12, 13, 14, 0, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 0, 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, 0, - 0, 0, 0, 0, 0, 78, 79, 80, 81, 137, - 82, 83, 84, 0, 138, 139, 140, 0, 141, 142, - 143, 144, 145, 146, 147, 148, 149, -541, 536, 0, - 0, 0, 150, 0, 0, 0, 0, 151, 152, 153, - 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, - -269, -269, 0, 4, 157, 158, 159, 0, 0, 0, + 0, 0, 241, 241, 0, 0, 972, 508, 0, 314, + 0, 0, 978, 979, 980, 981, 982, 983, 984, 985, + 986, 987, 988, 79, 172, 173, 0, 174, 83, 84, + 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, + 0, 211, 0, 479, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -408, -408, -408, 160, 5, + 0, 0, 817, 0, 447, 0, 447, 0, 0, 0, + 0, 0, 714, 0, 0, 0, 760, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, + 0, 0, 140, 141, 142, 0, 0, 217, 145, 146, + 147, 148, 149, 150, 218, -489, -489, 0, 0, 0, + 219, -489, 0, 0, 0, 153, 154, 155, 156, 157, + 158, 0, 0, 0, 0, 213, 0, 0, -272, -272, + 0, 0, 854, 159, 160, 161, 0, 0, 0, 0, + 0, 0, 0, 860, 0, 22, 23, 24, 25, 0, + 26, 0, 0, 0, 0, 31, 32, 162, 0, 35, + 36, 0, 38, 39, 40, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -1, 1, 53, 54, 0, + 0, -489, 164, 165, 166, 167, 168, 169, 0, 0, + 0, 0, 0, 2, 0, 0, 170, 817, 0, -272, + 171, 0, 78, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 82, 0, 0, 0, 0, 0, 0, 4, + 0, 5, 0, 0, 0, 314, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, + 0, 0, 0, -411, -411, -411, 0, 6, 0, 0, + 0, 0, 7, 8, 9, 0, 0, 0, 0, 314, + 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, + 0, 79, 172, 173, 0, 174, 220, 221, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 975, 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, 0, 0, 0, 0, -2, 1, + 79, 80, 81, 82, 0, 83, 84, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, -272, 0, 0, 0, 0, 0, 479, 0, + 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -411, -411, -411, 0, + 6, 0, 0, 0, 1079, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 163, 164, 165, 166, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 12, 13, - 14, 169, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 25, 26, 27, 28, 29, 30, 31, + 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 14, 15, 0, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 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, 0, 0, 0, 0, - 0, 0, 78, 170, 537, 81, 172, 173, 83, 84, - 137, 0, 0, 0, 0, 138, 139, 140, 0, 141, - 142, 143, 144, 145, 146, 147, 148, 149, -541, 0, - 0, 0, 0, 150, 0, 0, 0, 0, 151, 152, - 153, 154, 155, 156, 0, 0, 0, 0, 0, 0, - 0, -269, -269, 0, 0, 157, 158, 159, 0, 0, + 72, 73, 74, 75, 76, 77, 78, 0, 0, 0, + 0, 0, 0, 79, 80, 81, 82, 139, 83, 84, + 85, 0, 140, 141, 142, 0, 143, 144, 145, 146, + 147, 148, 149, 150, 151, -544, 546, 0, 0, 0, + 152, 0, 0, 0, 0, 153, 154, 155, 156, 157, + 158, 0, 0, 0, 0, 0, 0, 0, -272, -272, + 4, 0, 5, 159, 160, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -411, -411, -411, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -269, -269, -269, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 164, 165, 166, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 170, 13, 14, 15, + 171, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 0, 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, 0, 0, 0, 0, 0, + 0, 79, 172, 547, 82, 174, 175, 84, 85, 139, + 0, 0, 0, 0, 140, 141, 142, 0, 143, 144, + 145, 146, 147, 148, 149, 150, 151, -170, 0, 0, + 0, 0, 152, 0, 0, 0, 0, 153, 154, 155, + 156, 157, 158, 0, 0, 0, 0, 0, 0, 0, + -272, -272, -272, 0, 0, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 162, 163, 164, 165, 166, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 168, -269, - -269, -269, 169, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, 0, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, 0, 0, 0, - 0, 0, 0, 78, 170, 171, -269, 172, 173, 83, - -269, 214, 0, 0, 0, 0, 138, 139, 140, 0, - 0, 215, 143, 144, 145, 146, 147, 148, 216, -541, - -545, 0, 0, 0, 217, 0, 0, 0, 0, 151, - 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, - 0, 0, -269, -269, 0, 0, 157, 158, 159, 0, + 0, 0, 0, 0, 0, 0, -272, -272, -272, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -269, -269, -269, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, - -269, -269, -269, 169, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, 0, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 0, 0, - 0, 0, 0, 0, 78, 170, 171, -269, 172, 218, - 219, -269, 137, 0, 0, 0, 0, 138, 139, 140, - 0, 141, 142, 143, 144, 145, 146, 147, 148, 149, - -541, 0, 0, 0, 0, 150, 0, 0, 0, 0, - 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, - 0, 0, 0, -269, -269, 0, 137, 157, 158, 159, - 0, 138, 139, 140, 0, 141, 142, 143, 144, 145, - 146, 147, 148, 149, -541, 0, 0, 0, 0, 150, - 0, 160, 0, 0, 151, 152, 153, 154, 155, 156, - 0, 0, 0, 0, 0, 0, 0, -269, -269, 0, - 0, 157, 158, 159, 0, 161, 162, 163, 164, 165, - 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 0, 0, 0, 169, 160, 0, 0, 0, 0, + 0, 0, 0, 0, 164, 165, 166, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 170, -272, + -272, -272, 171, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, 0, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, 0, 0, 0, + 0, 0, 0, 79, 172, 173, -272, 174, 175, 84, + -272, 216, 0, 0, 0, 0, 140, 141, 142, 0, + 0, 217, 145, 146, 147, 148, 149, 150, 218, -170, + -548, 0, 0, 0, 219, 0, 0, 0, 0, 153, + 154, 155, 156, 157, 158, 0, 0, 0, 0, 0, + 0, 0, -272, -272, -272, 0, 0, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -514, - 162, 163, 164, 165, 166, 167, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -272, -272, + -272, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 164, 165, 166, 167, + 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 170, -272, -272, -272, 171, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 0, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, 0, + 0, 0, 0, 0, 0, 79, 172, 173, -272, 174, + 220, 221, -272, -168, 0, 0, 0, 0, -168, -168, + -168, 0, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -693, -168, -168, 0, -168, 0, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, 0, -168, 0, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + 0, 0, 0, -168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 170, 171, 0, 172, - 173, 83, 0, 0, 0, 214, 0, 0, 0, 0, - 138, 139, 140, 0, 0, 215, 143, 144, 145, 146, - 147, 148, 216, -541, -545, 0, 0, 0, 217, 0, - 0, 0, 0, 151, 152, 153, 154, 155, 156, 78, - 170, 171, 0, 172, 173, 83, -269, -269, 0, 137, - 157, 158, 159, 0, 138, 139, 140, 0, 141, 142, - 143, 144, 145, 146, 147, 148, 149, -541, 627, 0, - 0, 0, 150, 0, 160, 0, 0, 151, 152, 153, - 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, - -269, -269, 0, 0, 157, 158, 159, 0, -482, 162, - 163, 164, 165, 166, 167, 0, 0, 0, 0, 214, - 0, 0, 0, 168, 138, 139, 140, 169, 160, 215, - 143, 144, 145, 146, 147, 148, 216, -541, -545, 0, - 0, 0, 217, 0, 0, 0, 0, 151, 152, 153, - 154, 155, 156, 162, 163, 164, 165, 166, 167, 0, - -269, -269, 0, 0, 157, 158, 159, 168, 0, 0, - 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 170, - 171, 0, 172, 218, 219, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 163, 164, 165, 166, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, - 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 170, 171, 137, 172, 173, 83, 0, - 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, - 147, 148, 149, -541, 0, 0, 0, 0, 150, 0, - 0, 0, 0, 151, 152, 153, 154, 155, 156, 0, - 0, 0, 0, 0, 0, 0, -269, -269, 0, 0, - 157, 158, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 170, 171, 0, 172, 218, 219, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -168, -168, + -168, -168, -168, -168, 0, 0, 0, 0, 139, 0, + 0, 0, -168, 140, 141, 142, -168, 143, 144, 145, + 146, 147, 148, 149, 150, 151, -544, 0, 0, 0, + 0, 152, 0, 0, 0, 0, 153, 154, 155, 156, + 157, 158, 0, 0, 0, 0, 0, 0, 0, -272, + -272, 0, 0, 139, 159, 160, 161, 0, 140, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 149, 150, + 151, -544, 0, 0, 0, 0, 152, 0, 162, 0, + 0, 153, 154, 155, 156, 157, 158, -168, -168, -168, + 0, -168, -168, -168, -272, -272, 0, 0, 0, 159, + 160, 161, 163, 164, 165, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 171, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 163, 164, 165, 166, 167, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 138, 139, 140, 169, 141, 142, - 143, 144, 145, 146, 147, 148, 216, -541, 554, 0, - 0, 0, 344, 0, 0, 0, 0, 151, 152, 153, - 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, - -269, -269, 0, 4, 157, 158, 159, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -517, 164, 165, + 166, 167, 168, 169, 0, 0, 0, 0, 216, 0, + 0, 0, 170, 140, 141, 142, 171, 0, 217, 145, + 146, 147, 148, 149, 150, 218, -544, -548, 0, 0, + 0, 219, 0, 0, 0, 0, 153, 154, 155, 156, + 157, 158, 79, 172, 173, 0, 174, 175, 84, -272, + -272, 0, 0, 139, 159, 160, 161, 0, 140, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 149, 150, + 151, -544, 640, 0, 0, 0, 152, 0, 162, 0, + 0, 153, 154, 155, 156, 157, 158, 79, 172, 173, + 0, 174, 175, 84, -272, -272, 0, 0, 0, 159, + 160, 161, -485, 164, 165, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 171, 0, 162, 0, 0, -254, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 153, 154, 155, + 156, 157, 158, 0, 0, 0, 0, 0, 164, 165, + 166, 167, 168, 169, 0, 159, 160, 161, 216, 0, + 0, 0, 170, 140, 141, 142, 171, 0, 217, 145, + 146, 147, 148, 149, 150, 218, -544, -548, 0, 162, + 0, 219, 0, 0, 0, 0, 153, 154, 155, 156, + 157, 158, 79, 172, 173, 0, 174, 220, 221, -272, + -272, 0, 0, 139, 159, 160, 161, 0, 140, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 149, 150, + 151, -544, 171, 0, 0, 0, 152, 0, 162, 0, + 0, 153, 154, 155, 156, 157, 158, 79, 172, 173, + 0, 174, 175, 84, -272, -272, 0, 0, 0, 159, + 160, 161, 0, 164, 165, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 171, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 170, - 171, 0, 172, 173, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 163, 164, 165, 166, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 555, 12, 13, - 14, 169, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 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, 0, 0, 0, 0, - 0, 0, 78, 170, 537, 81, 172, 173, 83, 84, - 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, - 147, 148, 216, -541, 628, 0, 0, 0, 344, 0, - 0, 0, 0, 151, 152, 153, 154, 155, 156, 0, - 0, 0, 0, 0, 0, 0, -269, -269, 0, 4, - 157, 158, 159, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79, 292, 293, 0, 174, 164, 165, + 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 140, 141, 142, 171, 143, 144, 145, + 146, 147, 148, 149, 150, 218, -544, 564, 0, 0, + 0, 349, 0, 0, 0, 0, 153, 154, 155, 156, + 157, 158, 79, 172, 173, 0, 174, 220, 221, -272, + -272, 4, 0, 5, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 6, + 0, 0, 0, 0, 0, 0, 0, 79, 172, 173, + 0, 174, 175, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 164, 165, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 565, 13, 14, + 15, 171, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 0, 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, 0, 0, 0, 0, + 0, 0, 79, 172, 547, 82, 174, 175, 84, 85, + 140, 141, 142, 0, 143, 144, 145, 146, 147, 148, + 149, 150, 218, -544, 641, 0, 0, 0, 349, 0, + 0, 0, 0, 153, 154, 155, 156, 157, 158, 0, + 0, 0, 0, 0, 0, 0, -272, -272, 4, 0, + 5, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 163, 164, 165, 166, 167, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 12, 13, 14, 169, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 0, 25, + 0, 0, 0, 0, 0, 162, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 164, 165, 166, 167, 168, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 13, 14, 15, 171, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 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, 0, 0, 0, 0, 0, 0, 78, 170, - 537, 81, 172, 173, 83, 84, 138, 139, 140, 0, - 141, 142, 143, 144, 145, 146, 147, 148, 216, -541, - 640, 0, 0, 0, 344, 0, 0, 0, 0, 151, - 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, - 0, 0, -269, -269, 0, 4, 157, 158, 159, 0, + 76, 77, 78, 0, 0, 0, 0, 0, 0, 79, + 172, 547, 82, 174, 175, 84, 85, 140, 141, 142, + 0, 143, 144, 145, 146, 147, 148, 149, 150, 218, + -544, 653, 0, 0, 0, 349, 0, 0, 0, 0, + 153, 154, 155, 156, 157, 158, 0, 0, 0, 0, + 0, 0, 0, -272, -272, 4, 0, 5, 159, 160, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 165, 166, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 654, 13, 14, 15, 171, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 0, 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, + 0, 0, 0, 0, 0, 0, 79, 172, 547, 82, + 174, 175, 84, 85, 140, 141, 142, 0, 143, 144, + 145, 146, 147, 148, 149, 150, 218, -544, 652, 0, + 0, 0, 349, 0, 0, 0, 0, 153, 154, 155, + 156, 157, 158, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 159, 160, 161, 140, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 149, 150, + 218, -544, 656, 0, 0, 0, 349, 0, 0, 162, + 0, 153, 154, 155, 156, 157, 158, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, + 160, 161, 0, 0, 164, 165, 166, 167, 168, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, + 0, 0, 171, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 641, - 12, 13, 14, 169, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 0, 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, 0, 0, - 0, 0, 0, 0, 78, 170, 537, 81, 172, 173, - 83, 84, 138, 139, 140, 0, 141, 142, 143, 144, - 145, 146, 147, 148, 216, -541, 639, 0, 0, 0, - 344, 0, 0, 0, 0, 151, 152, 153, 154, 155, - 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 157, 158, 159, 0, 138, 139, 140, 0, - 141, 142, 143, 144, 145, 146, 147, 148, 216, -541, - 643, 0, 0, 0, 344, 0, 160, 0, 0, 151, - 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 157, 158, 159, 0, - 0, 162, 163, 164, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 0, 0, 168, 0, 0, 0, 169, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 164, 165, + 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 657, 140, 141, 142, 171, 143, 144, 145, + 146, 147, 148, 149, 150, 218, -544, 712, 0, 0, + 0, 349, 0, 0, 0, 0, 153, 154, 155, 156, + 157, 158, 0, 79, 172, 173, 0, 174, 175, 84, + 0, 0, 0, 0, 159, 160, 161, 140, 141, 142, + 0, 143, 144, 145, 146, 147, 148, 149, 150, 218, + -544, 790, 0, 0, 0, 349, 0, 0, 162, 0, + 153, 154, 155, 156, 157, 158, 0, 79, 172, 173, + 0, 174, 175, 84, 0, 0, 0, 0, 159, 160, + 161, 0, 0, 164, 165, 166, 167, 168, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 171, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 644, - 138, 139, 140, 169, 141, 142, 143, 144, 145, 146, - 147, 148, 216, -541, 696, 0, 0, 0, 344, 0, - 0, 0, 0, 151, 152, 153, 154, 155, 156, 0, - 78, 170, 171, 0, 172, 173, 83, 0, 0, 0, - 157, 158, 159, 0, 138, 139, 140, 0, 141, 142, - 143, 144, 145, 146, 147, 148, 216, -541, 774, 0, - 0, 0, 344, 0, 160, 0, 0, 151, 152, 153, - 154, 155, 156, 0, 78, 170, 171, 0, 172, 173, - 83, 0, 0, 0, 157, 158, 159, 0, 0, 162, - 163, 164, 165, 166, 167, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 0, 0, 0, 169, 160, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 165, 166, + 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 170, 140, 141, 142, 171, 143, 144, 145, 146, + 147, 148, 149, 150, 218, -544, 791, 0, 0, 0, + 349, 0, 0, 0, 0, 153, 154, 155, 156, 157, + 158, 0, 79, 172, 173, 0, 174, 175, 84, 0, + 0, 0, 0, 159, 160, 161, 140, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 149, 150, 218, -544, + 793, 0, 0, 0, 349, 0, 0, 162, 0, 153, + 154, 155, 156, 157, 158, 0, 79, 172, 173, 0, + 174, 175, 84, 0, 0, 0, 0, 159, 160, 161, + 0, 0, 164, 165, 166, 167, 168, 169, 0, 0, + 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, + 171, 162, 0, 0, -170, 0, 0, 0, 0, 349, + 0, 0, 0, 0, 153, 154, 155, 156, 157, 158, + 0, 0, 0, 0, 0, 0, 164, 165, 166, 167, + 168, 169, 159, 160, 161, 0, 0, 0, 0, 0, + 170, 140, 141, 142, 171, 143, 144, 145, 146, 147, + 148, 149, 150, 218, -544, 925, 162, 0, 0, 349, + 0, 0, 0, 0, 153, 154, 155, 156, 157, 158, + 0, 79, 172, 173, 0, 174, 175, 84, 0, 0, + 0, 0, 159, 160, 161, 140, 141, 142, 0, 143, + 144, 145, 146, 147, 148, 149, 150, 218, -544, 171, + 0, 0, 0, 349, 0, 0, 162, 0, 153, 154, + 155, 156, 157, 158, 0, 79, 172, 173, 0, 174, + 175, 84, 0, 0, 0, 0, 159, 160, 161, 0, + 0, 164, 165, 166, 167, 168, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 0, 0, 0, 171, + 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 292, 293, 0, 174, 164, 165, 166, 167, 168, + 169, -135, 0, 0, 0, 0, -135, 0, 0, 170, + 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 163, 164, 165, 166, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 138, 139, - 140, 169, 141, 142, 143, 144, 145, 146, 147, 148, - 216, -541, 775, 0, 0, 0, 344, 0, 0, 0, - 0, 151, 152, 153, 154, 155, 156, 0, 78, 170, - 171, 0, 172, 173, 83, 0, 0, 0, 157, 158, - 159, 0, 138, 139, 140, 0, 141, 142, 143, 144, - 145, 146, 147, 148, 216, -541, 777, 0, 0, 0, - 344, 0, 160, 0, 0, 151, 152, 153, 154, 155, - 156, 0, 78, 170, 171, 0, 172, 173, 83, 0, - 0, 0, 157, 158, 159, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, - 0, 776, 0, 0, 0, 169, 160, 0, 0, 0, + 79, 172, 173, 0, 174, 175, 84, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 163, 164, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 0, 0, 168, 138, 139, 140, 169, - 141, 142, 143, 144, 145, 146, 147, 148, 216, -541, - 906, 0, 0, 0, 344, 0, 0, 0, 0, 151, - 152, 153, 154, 155, 156, 0, 78, 170, 171, 0, - 172, 173, 83, 0, 0, 0, 157, 158, 159, 0, - 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, - 147, 148, 216, -541, 0, 0, 0, 0, 344, 0, - 160, 0, 0, 151, 152, 153, 154, 155, 156, 0, - 78, 170, 171, 0, 172, 173, 83, 0, 0, 0, - 157, 158, 159, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, - 0, 0, 0, 169, 160, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 172, 173, 0, 174, 175, + 84, 0, 0, 13, 14, 15, 0, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 0, 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, -547, 0, 0, 0, 0, 0, 0, 0, 134, + 82, 0, 0, 0, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 163, 164, 165, 166, 167, -135, 0, 0, 0, 0, - -135, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 78, 170, 171, 0, 172, 173, - 83, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -544, 0, 0, 0, 78, 170, - 171, 0, 172, 173, 83, 0, 12, 13, 14, 0, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 0, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 81, 12, 13, 14, 84, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 0, 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, 0, 0, 0, 0, 0, 793, 1112, 0, - 132, 81, 304, 0, 794, 84, 795, 151, 152, 153, - 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 793, 0, 157, 158, 159, 304, 0, 794, - 0, 795, 151, 152, 153, 154, 155, 156, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 157, - 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -684, 0, 0, 0, - 0, 0, 0, 0, -541, 0, 169, 0, 0, 344, - 0, 0, 0, 0, 151, 152, 153, 154, 155, 156, + 0, 0, 13, 14, 15, 0, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 0, 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, + 0, 0, 0, 0, 0, 617, 0, 0, 134, 82, + 291, 0, 0, 85, 0, 153, 154, 155, 156, 157, + 158, 0, 0, 0, 0, 0, 696, 0, 0, 0, + 0, 291, 0, 159, 160, 161, 153, 154, 155, 156, + 157, 158, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 171, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 157, 158, 159, 0, 0, 0, 0, 0, 0, - 0, -686, -686, -686, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 170, 171, 160, 172, 82, 83, 0, - 0, -686, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 170, 171, - 0, 172, 82, 83, -686, -686, -686, 0, -686, -686, - -686, -686, -686, -686, -686, -686, -686, -686, 169, -686, - -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, - -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, - -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, - -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, - -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, - -686, -686, -269, 0, 0, 0, 0, 0, 0, 0, - 0, -686, 3, 0, 0, -686, 0, 0, 0, 78, - 305, 306, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 79, 292, 293, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 79, 292, 293, 0, 174, 13, 14, 15, + 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 0, 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, 0, 0, 0, 0, 0, + 0, 79, 80, 81, 82, 0, 83, 84, 85, 291, + 506, 0, 0, 0, 153, 154, 155, 156, 157, 158, + 291, 0, 0, 587, 0, 153, 154, 155, 156, 157, + 158, 0, 159, 160, 161, 0, 0, 0, 0, 0, + 0, 0, 0, 159, 160, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 291, 0, 162, 678, 0, 153, + 154, 155, 156, 157, 158, 291, 973, 162, 0, 0, + 153, 154, 155, 156, 157, 158, 0, 159, 160, 161, + 0, 0, 0, 0, 0, 0, 0, 0, 159, 160, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 171, + 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, + 171, 0, 162, 291, -254, 0, 0, 0, 153, 154, + 155, 156, 157, 158, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 160, 161, 0, + 0, 291, 0, 0, 171, 0, 153, 154, 155, 156, + 157, 158, 0, 0, 0, 171, 0, 0, 0, 0, + 162, 0, 0, 0, 159, 160, 161, 0, 0, 0, + 79, 292, 293, 0, 174, 0, 0, 0, 0, 0, + 0, 79, 292, 293, 0, 174, 0, 338, 162, 0, + 0, 0, 153, 154, 155, 156, 157, 158, 0, 636, + 0, 0, 0, 171, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 0, 0, 79, 292, 293, 0, 174, + 0, 0, 159, 160, 161, 0, 79, 292, 293, 0, + 174, 171, 638, 0, 162, 0, 0, 153, 154, 155, + 156, 157, 158, 715, 0, 0, 162, 0, 716, 717, + 718, 719, 720, 721, 0, 159, 160, 161, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 722, 723, 0, + 0, 0, 0, 0, 79, 292, 293, 171, 174, 162, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, + 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 79, 292, 293, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, + -198, -198, 4, 0, 0, 0, 0, 0, 79, 292, + 293, 0, 174, 0, 0, 0, 0, 0, 0, 0, + 79, 292, 293, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, - 14, 0, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 25, 26, 27, 28, 29, 30, 31, + 0, 0, 0, 79, 292, 293, 0, 174, 0, 0, + 0, 0, 0, 0, 79, 725, 726, 0, 174, 13, + 14, 15, 0, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 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, 0, 0, 0, 0, - 0, 0, 78, 79, 80, 81, 0, 82, 83, 84, - 304, 0, 0, 600, 0, 151, 152, 153, 154, 155, - 156, 304, 0, 0, 681, 0, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 0, 0, 0, 0, 0, - 0, 304, 951, 157, 158, 159, 151, 152, 153, 154, - 155, 156, 304, -251, 0, 0, 160, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 0, 160, 0, 0, - 0, 0, 304, 0, 157, 158, 159, 151, 152, 153, - 154, 155, 156, 0, 0, 0, 0, 160, 0, 0, - 0, 0, 0, 0, 157, 158, 159, 333, 160, 169, - 0, 0, 151, 152, 153, 154, 155, 156, 0, 0, - 169, 0, 0, 0, 0, 0, 0, 0, 160, 157, - 158, 159, 0, 0, 0, 0, 0, 0, 0, 623, - 169, 0, 0, 0, 151, 152, 153, 154, 155, 156, - 0, 169, 0, 160, 0, 0, 0, 0, 0, 0, - 0, 157, 158, 159, 0, 0, 0, 0, 0, 0, - 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, - 78, 305, 306, 0, 172, 160, 0, 0, 0, 0, - 0, 78, 305, 306, 625, 172, 169, 0, 0, 151, - 152, 153, 154, 155, 156, 0, 0, 0, 0, 0, - 0, 78, 305, 306, 0, 172, 157, 158, 159, 0, - 0, 0, 78, 305, 306, 0, 172, 699, 169, 0, - 0, 0, 700, 701, 702, 703, 704, 705, 0, 0, - 160, 0, 78, 305, 306, 0, 172, 0, 0, 157, - 706, 707, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 305, 306, - 0, 172, 0, 708, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 305, 306, 0, 172, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, - 0, 0, 0, 0, -195, -195, 0, 0, 0, 0, + 72, 73, 74, 75, 76, 77, 78, 4, 0, 5, + 0, 0, 0, 0, 0, 134, 82, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -411, -411, -411, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 78, 305, 306, 0, 172, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 14, 15, 0, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 0, 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, 4, 0, 5, 0, 0, 0, 0, 0, + 134, 82, 0, 0, 0, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 709, 710, - 0, 172, 12, 13, 14, 0, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 0, 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, - 4, 0, 0, 0, 0, 0, 0, 0, 132, 81, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, -408, -408, -408, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 14, 15, 0, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 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, 4, 0, 0, + 0, 0, 0, 79, 1084, 134, 82, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -411, -411, -411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 13, 14, 0, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, - 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, 4, 0, 0, 0, 0, 0, 0, - 0, 132, 81, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 0, 0, 0, 0, 13, 14, 15, 0, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 0, 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, 4, 0, 0, 0, 0, 0, 0, 0, + 134, 82, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, - 14, 0, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 0, 25, 26, 27, 28, 29, 30, 31, + 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 14, 15, 0, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 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, 4, 0, 0, 0, - 0, 0, 78, 1061, 132, 81, 0, 0, 0, 84, + 72, 73, 74, 75, 76, 77, 78, 4, 0, 5, + 0, 0, 0, 0, 0, 134, 82, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 14, 15, 0, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 0, 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, 4, 0, 0, 0, 0, 0, 0, 0, + 134, 82, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12, 13, 14, 0, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 0, 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, -408, - -408, -408, 0, 0, 0, 0, 0, 132, 81, 0, - 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 13, 14, 0, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 0, 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, - 9, 10, 11, 0, 0, 0, 0, 0, 132, 81, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 12, - 13, 14, 0, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 81, 12, 13, 14, - 84, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 81, 0, 0, 0, 84 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 14, 15, 0, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 82, 0, 0, 0, + 85 }; static const short yycheck[] = { 0, - 0, 138, 344, 4, 3, 118, 442, 8, 9, 10, - 11, 474, 279, 0, 529, 379, 380, 894, 381, 382, - 389, 383, 384, 385, 386, 633, 387, 388, 426, 602, - 390, 671, 391, 598, 9, 10, 11, 228, 793, 784, - 633, 633, 427, 798, 633, 5, 0, 802, 296, 531, - 4, 452, 6, 902, 27, 298, 637, 55, 0, 9, - 151, 152, 153, 154, 155, 156, 1009, 914, 259, 927, - 34, 217, 19, 21, 472, 21, 222, 25, 224, 25, - 21, 689, 5, 540, 85, 85, 27, 5, 805, 487, - 656, 21, 637, 28, 811, 25, 689, 689, 85, 18, - 689, 558, 25, 18, 23, 9, 24, 53, 54, 44, - 683, 21, 1073, 1074, 9, 25, 34, 118, 633, 49, - 50, 21, 999, 1000, 637, 25, 125, 37, 38, 637, - 21, 85, 26, 134, 28, 134, 27, 10, 11, 39, - 41, 51, 52, 85, 145, 99, 110, 111, 1091, 150, - 44, 633, 907, 1096, 24, 56, 110, 111, 10, 11, - 1009, 1010, 21, 32, 33, 805, 25, 168, 913, 1027, - 915, 811, 18, 26, 689, 150, 9, 758, 24, 1140, - 134, 34, 9, 584, 582, 183, 18, 1034, 34, 1036, - 49, 50, 773, 194, 1071, 9, 10, 11, 583, 87, - 150, 202, 1145, 204, 21, 206, 604, 689, 209, 400, - 453, 674, 479, 758, 931, 188, 217, 783, 560, 194, - 786, 222, 28, 224, 184, 185, 186, 202, 773, 189, - 190, 206, 24, 1082, 209, 1084, 237, 238, 44, 24, - 188, 24, 217, 218, 194, 758, 150, 222, 24, 224, - 758, 34, 202, 25, 26, 150, 206, 24, 911, 209, - 773, 914, 237, 238, 633, 773, 184, 185, 24, 633, - 633, 633, 633, 633, 633, 421, 422, 278, 278, 18, - 281, 282, 283, 891, 1039, 376, 377, 378, 238, 426, - 194, 931, 21, 5, 295, 295, 25, 564, 202, 194, - 301, 637, 206, 41, 646, 209, 24, 202, 26, 49, - 50, 206, 24, 5, 209, 21, 34, 150, 56, 25, - 689, 148, 34, 150, 323, 689, 689, 689, 689, 689, - 689, 579, 204, 25, 238, 472, 150, 18, 184, 185, - 1189, 608, 24, 238, 217, 346, 5, 24, 758, 222, - 487, 224, 34, 354, 18, 356, 623, 21, 625, 822, - 16, 194, 935, 773, 237, 217, 25, 194, 322, 884, - 222, 16, 224, 206, 939, 202, 209, 16, 986, 206, - 194, 1034, 209, 1036, 359, 237, 477, 24, 202, 26, - 217, 789, 206, 986, 986, 209, 794, 986, 26, 400, - 28, 184, 185, 217, 886, 238, 53, 54, 222, 19, - 224, 238, 184, 185, 186, 5, 44, 189, 190, 16, - 421, 422, 758, 237, 238, 400, 24, 428, 26, 430, - 430, 418, 699, 15, 24, 25, 26, 773, 24, 440, - 26, 442, 429, 444, 34, 582, 421, 422, 0, 100, - 400, 452, 4, 452, 455, 24, 8, 22, 459, 21, - 1068, 25, 26, 25, 28, 34, 22, 604, 180, 181, - 5, 986, 184, 185, 346, 18, 188, 304, 21, 433, - 44, 22, 354, 34, 356, 312, 313, 314, 315, 29, - 491, 21, 184, 185, 186, 25, 400, 189, 190, 500, - 501, 39, 184, 185, 986, 400, 333, 871, 872, 40, - 873, 874, 881, 875, 876, 877, 878, 344, 879, 880, - 42, 43, 882, 5, 883, 184, 185, 186, 22, 1137, - 189, 190, 18, 85, 361, 21, 87, 23, 539, 540, - 34, 24, 24, 25, 26, 55, 547, 547, 421, 422, - 94, 34, 34, 540, 555, 94, 428, 558, 559, 21, - 26, 674, 28, 25, 539, 34, 118, 400, 21, 421, - 422, 558, 25, 400, 184, 185, 186, 19, 44, 189, - 190, 408, 134, 584, 188, 584, 400, 49, 50, 539, - 37, 38, 22, 145, 184, 185, 186, 21, 24, 189, - 190, 25, 21, 945, 51, 52, 25, 421, 422, 700, - 701, 702, 703, 704, 705, 184, 185, 986, 18, 491, - 22, 21, 986, 986, 986, 986, 986, 986, 629, 630, - 49, 50, 633, 184, 185, 539, 22, 591, 189, 190, - 641, 642, 23, 644, 539, 26, 894, 28, 94, 184, - 185, 186, 789, 1116, 189, 190, 18, 794, 659, 21, - 661, 22, 663, 88, 89, 26, 1102, 28, 540, 670, - 6, 7, 673, 674, 675, 674, 184, 185, 186, 19, - 679, 189, 190, 44, 94, 933, 558, 559, 689, 20, - 184, 185, 186, 118, 119, 189, 190, 180, 181, 23, - 837, 184, 185, 530, 24, 188, 26, 132, 28, 822, - 0, 24, 539, 26, 4, 184, 185, 186, 20, 21, - 189, 190, 12, 13, 44, 539, 278, 47, 48, 281, - 282, 283, 27, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 295, 23, 25, 26, 995, 28, 301, - 24, 21, 26, 21, 22, 25, 1004, 629, 630, 25, - 34, 24, 28, 24, 44, 26, 1164, 37, 38, 18, - 642, 598, 26, 34, 18, 776, 1024, 868, 869, 870, - 34, 51, 52, 18, 1051, 18, 25, 26, 21, 28, - 32, 33, 793, 1041, 795, 85, 623, 798, 625, 18, - 1198, 802, 21, 675, 631, 44, 25, 24, 635, 22, - 100, 101, 102, 103, 104, 105, 106, 107, 18, 109, - 21, 822, 112, 822, 25, 49, 50, 781, 118, 1077, - 784, 832, 25, 24, 37, 38, 27, 21, 128, 129, - 130, 25, 21, 34, 134, 29, 25, 21, 51, 52, - 1098, 25, 24, 32, 33, 27, 53, 54, 949, 21, - 150, 688, 34, 25, 21, 20, 21, 157, 25, 18, - 32, 33, 699, 21, 25, 24, 18, 25, 430, 21, - 29, 30, 31, 32, 33, 34, 18, 21, 440, 21, - 442, 25, 444, 894, 67, 68, 69, 46, 47, 48, - 452, 902, 24, 455, 23, 21, 907, 459, 18, 25, - 184, 185, 186, 20, 21, 189, 190, 191, 34, 35, - 36, 70, 21, 184, 185, 186, 25, 217, 189, 190, - 184, 185, 186, 21, 18, 189, 190, 25, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 500, 501, - 18, 21, 21, 954, 955, 25, 25, 911, 21, 913, - 914, 915, 25, 18, 113, 255, 21, 72, 73, 74, - 75, 34, 35, 36, 79, 80, 81, 82, 83, 84, - 85, 18, 18, 18, 21, 986, 21, 18, 278, 279, - 25, 281, 282, 184, 185, 547, 997, 188, 999, 1000, - 24, 19, 26, 1116, 28, 295, 1007, 9, 1009, 1010, - 997, 301, 184, 185, 304, 21, 188, 21, 21, 25, - 44, 25, 25, 47, 48, 1026, 853, 1164, 21, 22, - 1031, 1031, 584, 323, 11, 184, 185, 186, 1039, 188, - 1177, 32, 33, 1044, 1044, 1044, 1047, 21, 21, 21, - 25, 25, 25, 25, 344, 21, 21, 24, 21, 25, - 25, 1198, 25, 34, 35, 36, 11, 1068, 1069, 1070, - 1071, 21, 1073, 1074, 21, 25, 110, 111, 25, 90, - 1034, 1082, 1036, 1084, 21, 21, 1087, 21, 25, 25, - 1091, 25, 1093, 1094, 21, 1096, 21, 21, 25, 21, - 25, 1102, 21, 25, 21, 19, 25, 659, 25, 661, - 21, 663, 939, 19, 25, 1116, 19, 19, 670, 27, - 90, 673, 674, 24, 34, 35, 36, 417, 51, 52, - 53, 25, 21, 18, 22, 21, 1137, 1138, 1139, 1140, - 430, 24, 21, 25, 1145, 11, 24, 437, 24, 439, - 24, 441, 442, 24, 444, 27, 25, 984, 23, 449, - 20, 19, 452, 20, 1165, 1165, 19, 21, 23, 459, - 5, 336, 72, 25, 24, 22, 27, 25, 24, 20, - 20, 471, 27, 25, 474, 18, 476, 25, 1189, 479, - 27, 21, 55, 25, 22, 360, 25, 40, 25, 24, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 29, 39, 25, 185, 18, 90, 22, 90, 90, - 24, 396, 18, 25, 25, 25, 25, 25, 21, 18, - 188, 793, 40, 795, 18, 27, 798, 23, 21, 24, - 802, 90, 108, 18, 90, 190, 112, 547, 114, 90, - 116, 22, 22, 21, 90, 121, 21, 20, 22, 20, - 822, 561, 90, 25, 564, 131, 25, 133, 40, 27, - 832, 27, 25, 192, 18, 20, 27, 577, 578, 20, - 0, 9, 10, 11, 584, 25, 0, 902, 24, 25, - 9, 10, 11, 29, 30, 31, 32, 33, 34, 301, - 1189, 1158, 1087, 603, 85, 989, 662, 1059, 608, 175, - 46, 47, 48, 998, 1137, 1026, 852, 444, 618, 619, - 771, 799, 564, 623, 1165, 625, 661, 659, 822, 673, - 9, 10, 11, 323, 70, 125, 11, 237, 342, 400, - 1121, 491, 689, 986, -1, 907, -1, -1, -1, -1, - 650, -1, -1, -1, -1, -1, -1, -1, 658, -1, - 660, -1, -1, -1, 664, 665, -1, -1, -1, 669, - -1, -1, -1, 673, 674, -1, -1, 113, -1, 679, - -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, - 138, -1, 954, 955, -1, -1, 262, -1, -1, 699, - -1, -1, -1, 151, 152, 153, 154, 155, 156, -1, - 158, 159, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 150, 289, -1, -1, 292, -1, -1, -1, - -1, 150, -1, -1, 300, -1, -1, 303, -1, -1, - 615, -1, -1, -1, -1, -1, -1, -1, 184, 185, - 186, -1, 188, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 194, -1, -1, 1031, - -1, 150, -1, -1, 202, 194, -1, 1039, 206, 779, - -1, 209, 1044, 202, -1, 1047, -1, 206, 663, 217, - 209, -1, -1, -1, 222, -1, 224, -1, 217, -1, - -1, -1, -1, 222, -1, 224, -1, 1069, 1070, 237, - 238, -1, -1, -1, -1, 194, -1, -1, 237, 238, - -1, 821, 822, 202, 824, -1, -1, 206, 150, -1, - 209, 1093, 1094, -1, -1, -1, -1, -1, 217, -1, - 1102, -1, -1, 222, -1, 224, -1, -1, -1, -1, - -1, 417, -1, -1, 1116, -1, -1, -1, 237, 238, - -1, 427, -1, -1, -1, -1, 432, -1, -1, -1, - -1, 437, 194, 439, -1, -1, 1138, 1139, -1, -1, - 202, 447, -1, -1, 206, 451, -1, 209, -1, -1, - -1, -1, -1, -1, -1, 217, -1, -1, -1, -1, - 222, -1, 224, 1165, -1, -1, -1, -1, -1, -1, - 910, -1, -1, -1, -1, 237, 238, 917, 793, -1, - -1, -1, -1, 798, 9, 10, 11, 802, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, -1, -1, -1, 120, 121, 122, - 123, -1, 125, -1, -1, -1, -1, 130, 131, -1, - -1, 134, 135, -1, 137, 138, 139, 140, -1, -1, - -1, -1, 400, -1, -1, -1, 851, 852, 426, 152, - 153, 400, 857, 858, 859, 860, 861, 862, 863, 864, - 865, 866, 867, 421, 422, -1, -1, -1, -1, -1, - -1, -1, 421, 422, 177, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 187, -1, -1, 583, -1, -1, - -1, 400, -1, -1, 472, -1, -1, -1, 1028, 477, - -1, 1031, 907, -1, -1, -1, 602, -1, -1, 487, - -1, 607, 421, 422, 1044, -1, 1046, -1, -1, -1, - -1, 1051, -1, -1, 1054, 1055, -1, -1, -1, -1, - 18, -1, -1, -1, -1, 150, 24, -1, 634, -1, - 636, 29, 30, 31, 32, 33, 34, -1, 400, -1, - -1, 529, -1, 531, -1, 533, 534, -1, 46, 47, - 48, -1, -1, -1, -1, -1, -1, 1097, -1, 421, - 422, -1, 1102, -1, 1104, 1105, -1, -1, -1, 194, - -1, 539, 70, -1, -1, -1, 1116, 202, -1, -1, - 539, 206, -1, -1, 209, -1, -1, -1, -1, -1, - -1, -1, 217, -1, 582, -1, -1, 222, -1, 224, - -1, 1141, -1, -1, -1, 711, -1, -1, -1, -1, - -1, -1, 237, 238, -1, 113, 604, -1, -1, -1, - 539, 1161, 1162, -1, 1039, 1165, -1, -1, 1168, -1, + 456, 0, 140, 452, 5, 119, 395, 431, 9, 10, + 11, 12, 384, 385, 394, 386, 387, 589, 327, 396, + 128, 646, 3, 10, 0, 539, 450, 921, 615, 541, + 153, 154, 155, 156, 157, 158, 800, 308, 56, 913, + 349, 690, 10, 1031, 388, 389, 390, 391, 10, 432, + 27, 466, 230, 206, 668, 392, 393, 646, 646, 306, + 646, 21, 948, 219, 0, 25, 5, 814, 224, 18, + 226, 550, 819, 497, 23, 826, 823, 28, 24, 34, + 705, 832, 5, 261, 22, 86, 25, 86, 26, 568, + 28, 10, 11, 12, 45, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 37, 38, 45, 680, 21, + 86, 650, 41, 650, 41, 27, 705, 705, 119, 705, + 52, 53, 933, 11, 12, 21, 1114, 19, 57, 25, + 57, 1119, 646, 26, 646, 136, 109, 1031, 1032, 774, + 113, 34, 115, 18, 117, 126, 147, 1021, 1022, 122, + 86, 152, 1096, 1097, 789, 136, 111, 112, 54, 55, + 133, 5, 135, 1049, 24, 152, 184, 591, 932, 170, + 934, 10, 650, 281, 483, 599, 21, 826, 18, 926, + 1168, 25, 27, 832, 152, 799, 601, 0, 802, 88, + 152, 705, 5, 705, 7, 196, 467, 5, 351, 11, + 12, 952, 21, 204, 177, 206, 359, 208, 361, 196, + 211, 1105, 189, 1107, 32, 33, 24, 600, 219, 1163, + 1094, 208, 5, 224, 211, 226, 34, 405, 196, 189, + 338, 650, 650, 152, 196, 774, 204, 774, 239, 240, + 208, 24, 204, 211, 693, 1056, 208, 1058, 28, 211, + 789, 34, 789, 240, 68, 69, 70, 646, 381, 382, + 383, 570, 185, 186, 187, 45, 646, 190, 191, 646, + 426, 427, 240, 86, 646, 646, 24, 196, 240, 280, + 433, 280, 283, 284, 285, 204, 21, 100, 24, 208, + 25, 264, 211, 431, 5, 24, 774, 26, 111, 112, + 219, 220, 646, 952, 305, 224, 305, 226, 24, 646, + 311, 789, 450, 152, 1061, 296, 705, 24, 1212, 26, + 239, 240, 910, 136, 24, 705, 299, 34, 705, 302, + 24, 219, 26, 705, 705, 21, 224, 310, 226, 25, + 313, 185, 186, 187, 24, 24, 190, 191, 501, 596, + 351, 239, 18, 39, 34, 774, 774, 196, 359, 497, + 361, 705, 21, 486, 18, 204, 25, 5, 705, 208, + 789, 789, 211, 960, 24, 21, 18, 185, 186, 25, + 488, 805, 24, 1008, 956, 24, 24, 25, 26, 903, + 16, 815, 34, 905, 843, 34, 34, 550, 181, 182, + 16, 240, 185, 186, 405, 930, 189, 219, 933, 16, + 25, 26, 224, 28, 226, 568, 569, 16, 405, 1008, + 1008, 22, 1008, 15, 21, 426, 427, 239, 25, 101, + 45, 21, 433, 34, 435, 25, 435, 405, 19, 29, + 24, 0, 26, 405, 445, 364, 5, 423, 21, 422, + 9, 18, 25, 591, 21, 456, 23, 458, 434, 432, + 18, 599, 22, 21, 437, 466, 574, 25, 469, 442, + 22, 444, 473, 24, 185, 186, 187, 50, 51, 190, + 191, 18, 295, 34, 21, 466, 405, 34, 461, 642, + 643, 21, 465, 21, 1008, 25, 1008, 25, 18, 22, + 501, 21, 655, 1091, 29, 185, 186, 426, 427, 510, + 511, 40, 901, 621, 25, 26, 5, 28, 890, 891, + 900, 892, 893, 18, 39, 902, 21, 86, 636, 25, + 638, 1056, 28, 1058, 45, 24, 25, 26, 426, 427, + 26, 694, 28, 185, 186, 34, 185, 186, 549, 550, + 894, 895, 896, 897, 18, 56, 557, 21, 557, 45, + 119, 898, 899, 5, 565, 21, 405, 568, 569, 25, + 25, 26, 1160, 18, 550, 19, 21, 136, 24, 693, + 26, 549, 28, 25, 185, 186, 187, 549, 147, 190, + 191, 95, 568, 716, 717, 718, 719, 720, 721, 45, + 601, 95, 48, 49, 185, 186, 187, 715, 22, 190, + 191, 24, 50, 51, 426, 427, 589, 89, 90, 1008, + 601, 34, 21, 54, 55, 438, 25, 600, 1008, 21, + 549, 1008, 189, 25, 185, 186, 1008, 1008, 185, 186, + 187, 642, 643, 190, 191, 646, 619, 119, 120, 6, + 7, 50, 51, 654, 655, 21, 657, 18, 967, 25, + 21, 133, 25, 26, 1008, 28, 913, 805, 22, 1125, + 671, 1008, 673, 24, 647, 23, 649, 815, 26, 21, + 28, 682, 45, 25, 24, 21, 95, 27, 689, 25, + 1139, 692, 693, 694, 34, 676, 185, 186, 187, 42, + 43, 190, 191, 26, 705, 28, 22, 954, 50, 51, + 549, 24, 693, 26, 19, 10, 11, 12, 856, 21, + 20, 280, 45, 25, 283, 284, 285, 34, 0, 843, + 185, 186, 187, 5, 21, 190, 191, 26, 25, 28, + 95, 13, 14, 185, 186, 187, 305, 21, 190, 191, + 18, 25, 311, 21, 727, 21, 45, 25, 21, 25, + 20, 21, 25, 1187, 887, 888, 889, 24, 181, 182, + 1017, 18, 185, 186, 37, 38, 189, 24, 27, 1026, + 18, 88, 29, 30, 31, 32, 33, 34, 25, 52, + 53, 792, 37, 38, 18, 608, 24, 1221, 26, 1046, + 47, 48, 49, 34, 35, 36, 34, 52, 53, 782, + 783, 21, 22, 814, 86, 816, 1063, 24, 819, 21, + 27, 21, 823, 25, 71, 25, 18, 34, 23, 101, + 102, 103, 104, 105, 106, 107, 108, 24, 110, 21, + 21, 113, 843, 25, 25, 185, 186, 119, 971, 189, + 851, 21, 825, 1100, 22, 25, 128, 152, 130, 131, + 132, 21, 843, 24, 136, 25, 21, 114, 50, 51, + 25, 21, 18, 21, 1121, 25, 435, 25, 185, 186, + 152, 21, 25, 190, 191, 25, 445, 159, 21, 37, + 38, 25, 25, 24, 34, 35, 36, 456, 21, 458, + 18, 196, 25, 21, 52, 53, 18, 466, 18, 204, + 469, 26, 913, 208, 473, 18, 211, 21, 21, 34, + 921, 25, 21, 21, 219, 926, 25, 25, 21, 224, + 21, 226, 25, 18, 25, 34, 35, 36, 185, 186, + 187, 18, 189, 18, 239, 240, 24, 219, 26, 21, + 28, 510, 511, 25, 50, 51, 929, 185, 186, 187, + 32, 33, 190, 191, 192, 19, 1074, 45, 21, 21, + 48, 49, 25, 25, 18, 976, 977, 21, 185, 186, + 32, 33, 189, 956, 797, 257, 21, 800, 54, 55, + 25, 24, 24, 26, 185, 186, 187, 11, 557, 190, + 191, 34, 21, 34, 35, 36, 25, 1008, 280, 281, + 21, 283, 284, 21, 25, 32, 33, 25, 1019, 291, + 1021, 1022, 21, 21, 296, 1139, 25, 25, 1029, 25, + 1031, 1032, 21, 305, 21, 91, 25, 9, 25, 311, + 20, 21, 601, 1019, 20, 21, 11, 1048, 21, 1187, + 21, 22, 1053, 19, 1053, 52, 53, 54, 32, 33, + 1061, 19, 1200, 111, 112, 1066, 338, 1066, 19, 1070, + 185, 186, 187, 19, 24, 190, 191, 349, 1051, 27, + 10, 11, 12, 1221, 91, 1066, 24, 21, 25, 22, + 1091, 1092, 1093, 1094, 21, 1096, 1097, 10, 11, 12, + 18, 25, 25, 25, 1105, 21, 1107, 11, 27, 1110, + 405, 23, 671, 1114, 673, 1116, 1117, 930, 1119, 932, + 933, 934, 24, 682, 1125, 24, 24, 20, 140, 25, + 689, 426, 427, 692, 693, 19, 23, 20, 1139, 19, + 21, 153, 154, 155, 156, 157, 158, 24, 160, 161, + 422, 27, 185, 186, 187, 5, 1129, 190, 191, 1160, + 1161, 1162, 1163, 435, 25, 19, 22, 1168, 25, 24, + 442, 20, 444, 20, 446, 27, 73, 449, 18, 25, + 452, 22, 454, 27, 456, 19, 458, 1188, 23, 1188, + 24, 463, 25, 21, 466, 29, 30, 31, 32, 33, + 34, 473, 21, 25, 25, 25, 24, 39, 56, 40, + 25, 1212, 29, 47, 48, 49, 488, 186, 91, 91, + 91, 91, 152, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 91, 25, 25, 18, 71, 22, 152, + 91, 20, 25, 1056, 24, 1058, 1219, 25, 18, 25, + 21, 18, 40, 189, 549, 814, 20, 816, 27, 18, + 819, 21, 23, 18, 823, 91, 196, 24, 22, 22, + 191, 21, 21, 25, 204, 22, 20, 20, 208, 91, + 114, 211, 27, 196, 843, 557, 25, 193, 18, 219, + 27, 204, 851, 25, 224, 208, 226, 20, 211, 571, + 40, 20, 574, 27, 25, 0, 219, 0, 311, 239, + 240, 224, 86, 226, 1212, 921, 1181, 1110, 590, 1011, + 1082, 681, 594, 595, 1020, 1160, 239, 240, 1048, 601, + 871, 458, 820, 19, 20, 787, 1188, 671, 24, 574, + 26, 673, 28, 29, 30, 31, 32, 33, 34, 621, + 843, 185, 186, 187, 126, 189, 296, 692, 12, 631, + 632, 47, 48, 49, 636, 239, 638, 926, 347, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 71, 1144, 501, 10, 405, + 662, 849, 696, 705, 1008, 848, -1, -1, 670, -1, + 672, -1, -1, -1, 676, -1, -1, -1, -1, -1, + -1, 683, 684, -1, -1, -1, 688, 976, 977, 431, + 692, 693, 73, 74, 75, 76, -1, 341, 114, 80, + 81, 82, 83, 84, 85, 86, -1, -1, 450, -1, + -1, -1, -1, 715, -1, -1, 10, 11, 12, -1, + -1, 365, 10, 11, 12, -1, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, -1, -1, -1, + -1, -1, -1, -1, 486, 405, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 497, -1, 401, -1, -1, + -1, -1, 405, -1, 1053, -1, 426, 427, -1, 185, + 186, 187, 1061, 189, 190, 191, 128, 1066, 23, -1, + -1, 1070, -1, 426, 427, -1, -1, -1, -1, -1, + -1, -1, -1, 795, -1, -1, -1, 539, 150, 541, + 152, 543, 544, 1092, 1093, -1, 10, 11, 12, -1, + -1, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, 1116, 1117, -1, + -1, -1, -1, -1, -1, -1, 1125, -1, -1, -1, + 842, 843, -1, 845, 196, -1, -1, -1, -1, 591, + 1139, -1, 204, -1, -1, -1, 208, 599, 152, 211, + -1, -1, -1, -1, 152, -1, -1, 219, -1, -1, + -1, -1, 1161, 1162, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 240, 549, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1188, + -1, -1, 196, -1, 646, -1, 549, -1, 196, -1, + 204, -1, -1, -1, 208, -1, 204, 211, -1, -1, + 208, -1, -1, 211, -1, 219, -1, 929, -1, -1, + 224, 219, 226, -1, 936, -1, 224, -1, 226, 291, + -1, -1, -1, -1, -1, 239, 240, -1, 152, -1, + -1, 239, 240, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 705, -1, -1, 318, 319, 320, 321, + -1, -1, -1, 617, 716, 717, 718, 719, 720, 721, + 722, 723, -1, -1, 628, -1, 338, -1, -1, -1, + -1, -1, 196, -1, -1, -1, -1, 349, 19, 20, + 204, -1, -1, 24, 208, -1, -1, 211, 29, 30, + 31, 32, 33, 34, 366, 219, -1, -1, -1, -1, + 224, -1, 226, -1, -1, -1, 47, 48, 49, -1, + -1, -1, -1, -1, -1, 239, 240, -1, 682, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1050, -1, + 71, 1053, 696, 405, -1, -1, -1, -1, -1, -1, + -1, 413, -1, 805, 1066, -1, -1, 1069, -1, -1, + -1, -1, 1074, 815, -1, 1077, 1078, 19, -1, -1, + -1, -1, 24, -1, 26, -1, 28, 29, 30, 31, + 32, 33, 34, 114, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, 48, 49, -1, -1, + -1, 405, -1, -1, 856, -1, -1, 405, 1120, -1, + -1, -1, -1, 1125, -1, 1127, 1128, -1, -1, 71, + -1, -1, 426, 427, -1, -1, -1, 1139, 426, 427, + -1, -1, -1, -1, -1, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 1164, 905, 185, 186, 187, -1, 189, -1, + 814, -1, 114, -1, -1, 819, -1, -1, -1, 823, + -1, -1, 1184, 1185, -1, -1, 1188, -1, 540, 1191, + -1, -1, -1, -1, -1, -1, -1, 549, -1, -1, + -1, 405, -1, -1, -1, 849, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 633, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 766, 767, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 539, -1, -1, - -1, -1, -1, -1, -1, -1, 184, 185, 186, -1, - 188, -1, -1, -1, -1, -1, -1, -1, 804, -1, - -1, 689, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 700, 701, 702, 703, 704, 705, 706, 707, - -1, -1, 1, -1, -1, -1, -1, 6, 7, 8, - -1, -1, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, -1, -1, -1, 24, 25, -1, -1, -1, - 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, - -1, -1, -1, 42, 43, -1, -1, 46, 47, 48, - -1, -1, -1, -1, -1, 400, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, -1, -1, -1, -1, 421, 422, -1, -1, - -1, 789, -1, -1, 910, -1, 794, -1, -1, -1, - -1, -1, -1, -1, -1, 94, 95, 96, 97, 98, - 99, 100, -1, -1, -1, -1, -1, -1, -1, 935, - 109, -1, -1, -1, 113, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 837, + -1, -1, 426, 427, -1, -1, 870, 871, -1, 971, + -1, -1, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 185, 186, 187, -1, 189, 190, 191, + -1, -1, -1, -1, -1, 549, -1, -1, -1, -1, + -1, 549, -1, 615, -1, -1, 1008, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 926, -1, 636, -1, 638, -1, -1, -1, + -1, -1, 644, -1, -1, -1, 648, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, -1, 6, 7, 8, -1, -1, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, + 24, 25, -1, -1, -1, 29, 30, 31, 32, 33, + 34, -1, -1, -1, -1, 549, -1, -1, 42, 43, + -1, -1, 704, 47, 48, 49, -1, -1, -1, -1, + -1, -1, -1, 715, -1, 121, 122, 123, 124, -1, + 126, -1, -1, -1, -1, 131, 132, 71, -1, 135, + 136, -1, 138, 139, 140, 141, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, 1, 153, 154, -1, + -1, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, 18, -1, -1, 110, 1061, -1, 24, + 114, -1, 178, -1, -1, -1, -1, -1, -1, 34, + -1, -1, 188, -1, -1, -1, -1, -1, -1, 44, + -1, 46, -1, -1, -1, 1187, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1200, -1, + -1, -1, -1, 68, 69, 70, -1, 72, -1, -1, + -1, -1, 77, 78, 79, -1, -1, -1, -1, 1221, + -1, -1, -1, -1, -1, -1, -1, 92, 93, 94, + -1, 185, 186, 187, -1, 189, 190, 191, -1, -1, + -1, -1, -1, -1, -1, -1, 111, 112, 113, -1, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 872, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, -1, -1, -1, -1, 0, 1, + 185, 186, 187, 188, -1, 190, 191, 192, -1, -1, + -1, -1, -1, -1, -1, -1, 18, -1, -1, -1, + -1, -1, 24, -1, -1, -1, -1, -1, 960, -1, + -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 68, 69, 70, -1, + 72, -1, -1, -1, 1006, 77, 78, 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, -1, 886, -1, - -1, -1, 0, 1, -1, 184, 185, 186, -1, 188, - 189, 190, -1, -1, 539, -1, -1, -1, -1, -1, - 18, -1, -1, 1029, -1, -1, 24, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 34, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, + 92, 93, 94, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, + 112, 113, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, -1, -1, -1, + -1, -1, -1, 185, 186, 187, 188, 1, 190, 191, + 192, -1, 6, 7, 8, -1, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, + 24, -1, -1, -1, -1, 29, 30, 31, 32, 33, + 34, -1, -1, -1, -1, -1, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 949, -1, -1, -1, -1, -1, -1, -1, 67, - 68, 69, -1, 71, -1, -1, -1, -1, 76, 77, - 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 91, 92, 93, -1, -1, 986, -1, - 1106, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 110, 111, 112, -1, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, -1, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - -1, -1, -1, -1, -1, -1, 184, 185, 186, 187, - 1196, 189, 190, 191, -1, -1, -1, -1, -1, -1, - -1, 0, 1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, - -1, -1, -1, -1, -1, 24, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 34, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 45, -1, -1, -1, + -1, -1, -1, -1, 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 67, 68, - 69, -1, 71, -1, -1, -1, 1164, 76, 77, 78, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1177, - -1, -1, 91, 92, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1198, 110, 111, 112, -1, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, -1, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, -1, - -1, -1, -1, -1, -1, 184, 185, 186, 187, 1, - 189, 190, 191, -1, 6, 7, 8, -1, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, + -1, -1, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, -1, -1, -1, -1, -1, + -1, 185, 186, 187, 188, 189, 190, 191, 192, 1, + -1, -1, -1, -1, 6, 7, 8, -1, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, -1, -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, - 42, 43, -1, 45, 46, 47, 48, -1, -1, -1, + 42, 43, 44, -1, -1, 47, 48, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 67, 68, 69, 70, 71, + -1, -1, -1, -1, -1, -1, 68, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, 97, 98, 99, 100, -1, - -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + -1, -1, -1, -1, 96, 97, 98, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, -1, 125, 126, 127, 128, 129, 130, 131, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, -1, -1, -1, -1, - -1, -1, 184, 185, 186, 187, 188, 189, 190, 191, - 1, -1, -1, -1, -1, 6, 7, 8, -1, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, -1, - -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, - 31, 32, 33, 34, -1, -1, -1, -1, -1, -1, - -1, 42, 43, -1, -1, 46, 47, 48, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 67, 68, 69, 70, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 95, 96, 97, 98, 99, 100, - -1, -1, -1, -1, -1, -1, -1, -1, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, -1, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, -1, -1, -1, - -1, -1, -1, 184, 185, 186, 187, 188, 189, 190, - 191, 1, -1, -1, -1, -1, 6, 7, 8, -1, + 172, 173, 174, 175, 176, 177, 178, -1, -1, -1, + -1, -1, -1, 185, 186, 187, 188, 189, 190, 191, + 192, 1, -1, -1, -1, -1, 6, 7, 8, -1, -1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, - -1, -1, 42, 43, -1, -1, 46, 47, 48, -1, + -1, -1, 42, 43, 44, -1, -1, 47, 48, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 67, 68, 69, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 68, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, 97, 98, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, + -1, -1, -1, -1, -1, -1, 96, 97, 98, 99, + 100, 101, -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, -1, 125, 126, 127, 128, 129, + 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, -1, -1, - -1, -1, -1, -1, 184, 185, 186, 187, 188, 189, - 190, 191, 1, -1, -1, -1, -1, 6, 7, 8, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, -1, -1, -1, -1, 24, -1, -1, -1, -1, - 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, - -1, -1, -1, 42, 43, -1, 1, 46, 47, 48, - -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, -1, -1, -1, -1, 24, - -1, 70, -1, -1, 29, 30, 31, 32, 33, 34, - -1, -1, -1, -1, -1, -1, -1, 42, 43, -1, - -1, 46, 47, 48, -1, 94, 95, 96, 97, 98, - 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, - 109, -1, -1, -1, 113, 70, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - 95, 96, 97, 98, 99, 100, -1, -1, -1, -1, - -1, -1, -1, -1, 109, -1, -1, -1, 113, -1, + 170, 171, 172, 173, 174, 175, 176, 177, 178, -1, + -1, -1, -1, -1, -1, 185, 186, 187, 188, 189, + 190, 191, 192, 1, -1, -1, -1, -1, 6, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, -1, 26, -1, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, -1, 45, -1, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, 1, -1, + -1, -1, 110, 6, 7, 8, 114, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, -1, -1, -1, + -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, 42, + 43, -1, -1, 1, 47, 48, 49, -1, 6, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, -1, -1, -1, -1, 24, -1, 71, -1, + -1, 29, 30, 31, 32, 33, 34, 185, 186, 187, + -1, 189, 190, 191, 42, 43, -1, -1, -1, 47, + 48, 49, 95, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, -1, 110, -1, -1, + -1, 114, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 184, 185, 186, -1, 188, - 189, 190, -1, -1, -1, 1, -1, -1, -1, -1, - 6, 7, 8, -1, -1, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, -1, -1, -1, 24, -1, - -1, -1, -1, 29, 30, 31, 32, 33, 34, 184, - 185, 186, -1, 188, 189, 190, 42, 43, -1, 1, - 46, 47, 48, -1, 6, 7, 8, -1, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, - -1, -1, 24, -1, 70, -1, -1, 29, 30, 31, - 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, - 42, 43, -1, -1, 46, 47, 48, -1, 94, 95, - 96, 97, 98, 99, 100, -1, -1, -1, -1, 1, - -1, -1, -1, 109, 6, 7, 8, 113, 70, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, + -1, -1, -1, -1, -1, -1, -1, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, 1, -1, + -1, -1, 110, 6, 7, 8, 114, -1, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, + -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, + 33, 34, 185, 186, 187, -1, 189, 190, 191, 42, + 43, -1, -1, 1, 47, 48, 49, -1, 6, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, -1, -1, -1, 24, -1, 71, -1, + -1, 29, 30, 31, 32, 33, 34, 185, 186, 187, + -1, 189, 190, 191, 42, 43, -1, -1, -1, 47, + 48, 49, 95, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, -1, 110, -1, -1, + -1, 114, -1, 71, -1, -1, 18, -1, -1, -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, - 32, 33, 34, 95, 96, 97, 98, 99, 100, -1, - 42, 43, -1, -1, 46, 47, 48, 109, -1, -1, - -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 184, 185, - 186, -1, 188, 189, 190, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, 97, 98, 99, 100, -1, - -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, - -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 184, 185, 186, 1, 188, 189, 190, -1, - 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, -1, -1, -1, -1, 24, -1, - -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, - -1, -1, -1, -1, -1, -1, 42, 43, -1, -1, - 46, 47, 48, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 184, 185, 186, -1, 188, 189, 190, -1, - -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, + 32, 33, 34, -1, -1, -1, -1, -1, 96, 97, + 98, 99, 100, 101, -1, 47, 48, 49, 1, -1, + -1, -1, 110, 6, 7, 8, 114, -1, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, -1, 71, + -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, + 33, 34, 185, 186, 187, -1, 189, 190, 191, 42, + 43, -1, -1, 1, 47, 48, 49, -1, 6, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 114, -1, -1, -1, 24, -1, 71, -1, + -1, 29, 30, 31, 32, 33, 34, 185, 186, 187, + -1, 189, 190, 191, 42, 43, -1, -1, -1, 47, + 48, 49, -1, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, -1, 110, -1, -1, + -1, 114, -1, 71, -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, 95, - 96, 97, 98, 99, 100, -1, -1, -1, -1, -1, - -1, -1, -1, 109, 6, 7, 8, 113, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, - -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, - 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, - 42, 43, -1, 45, 46, 47, 48, -1, -1, -1, + -1, -1, -1, 185, 186, 187, -1, 189, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, -1, 110, 6, 7, 8, 114, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, + -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, + 33, 34, 185, 186, 187, -1, 189, 190, 191, 42, + 43, 44, -1, 46, 47, 48, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, - -1, -1, -1, -1, -1, -1, -1, -1, 184, 185, - 186, -1, 188, 189, 190, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, 97, 98, 99, 100, -1, - -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, -1, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, -1, -1, -1, -1, - -1, -1, 184, 185, 186, 187, 188, 189, 190, 191, + -1, -1, -1, -1, -1, -1, -1, -1, 71, 72, + -1, -1, -1, -1, -1, -1, -1, 185, 186, 187, + -1, 189, 190, 191, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, -1, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, -1, -1, -1, -1, + -1, -1, 185, 186, 187, 188, 189, 190, 191, 192, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, - -1, -1, -1, -1, -1, -1, 42, 43, -1, 45, - 46, 47, 48, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, - 96, 97, 98, 99, 100, -1, -1, -1, -1, -1, - -1, -1, -1, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, -1, 125, + 96, 97, 98, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, -1, -1, -1, -1, -1, 184, 185, - 186, 187, 188, 189, 190, 191, 6, 7, 8, -1, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, -1, -1, -1, 24, -1, -1, -1, -1, 29, - 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, - -1, -1, 42, 43, -1, 45, 46, 47, 48, -1, + 176, 177, 178, -1, -1, -1, -1, -1, -1, 185, + 186, 187, 188, 189, 190, 191, 192, 6, 7, 8, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, -1, -1, -1, 24, -1, -1, -1, -1, + 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, + -1, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 71, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + -1, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, -1, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + -1, -1, -1, -1, -1, -1, 185, 186, 187, 188, + 189, 190, 191, 192, 6, 7, 8, -1, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, + -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, + 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 47, 48, 49, 6, 7, + 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, -1, -1, -1, 24, -1, -1, 71, + -1, 29, 30, 31, 32, 33, 34, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, + 48, 49, -1, -1, 96, 97, 98, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, -1, 110, -1, + -1, -1, 114, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, 97, 98, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, -1, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, -1, -1, - -1, -1, -1, -1, 184, 185, 186, 187, 188, 189, - 190, 191, 6, 7, 8, -1, 10, 11, 12, 13, + -1, -1, -1, -1, -1, -1, -1, -1, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, -1, -1, + -1, -1, 110, 6, 7, 8, 114, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, + -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, + 33, 34, -1, 185, 186, 187, -1, 189, 190, 191, + -1, -1, -1, -1, 47, 48, 49, 6, 7, 8, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, -1, -1, -1, 24, -1, -1, 71, -1, + 29, 30, 31, 32, 33, 34, -1, 185, 186, 187, + -1, 189, 190, 191, -1, -1, -1, -1, 47, 48, + 49, -1, -1, 96, 97, 98, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, -1, 110, -1, -1, + -1, 114, 71, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + -1, 110, 6, 7, 8, 114, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, 24, -1, -1, -1, -1, 29, 30, 31, 32, 33, - 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 46, 47, 48, -1, 6, 7, 8, -1, + 34, -1, 185, 186, 187, -1, 189, 190, 191, -1, + -1, -1, -1, 47, 48, 49, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, -1, -1, -1, 24, -1, 70, -1, -1, 29, - 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 46, 47, 48, -1, - -1, 95, 96, 97, 98, 99, 100, -1, -1, -1, - -1, -1, -1, -1, -1, 109, -1, -1, -1, 113, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 20, -1, -1, -1, 24, -1, -1, 71, -1, 29, + 30, 31, 32, 33, 34, -1, 185, 186, 187, -1, + 189, 190, 191, -1, -1, -1, -1, 47, 48, 49, + -1, -1, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, -1, 110, -1, -1, -1, + 114, 71, -1, -1, 19, -1, -1, -1, -1, 24, + -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, + -1, -1, -1, -1, -1, -1, 96, 97, 98, 99, + 100, 101, 47, 48, 49, -1, -1, -1, -1, -1, + 110, 6, 7, 8, 114, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 71, -1, -1, 24, + -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, + -1, 185, 186, 187, -1, 189, 190, 191, -1, -1, + -1, -1, 47, 48, 49, 6, 7, 8, -1, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 114, + -1, -1, -1, 24, -1, -1, 71, -1, 29, 30, + 31, 32, 33, 34, -1, 185, 186, 187, -1, 189, + 190, 191, -1, -1, -1, -1, 47, 48, 49, -1, + -1, 96, 97, 98, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, -1, 110, -1, -1, -1, 114, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, 97, 98, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, - 6, 7, 8, 113, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, -1, -1, -1, 24, -1, - -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, - 184, 185, 186, -1, 188, 189, 190, -1, -1, -1, - 46, 47, 48, -1, 6, 7, 8, -1, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, -1, - -1, -1, 24, -1, 70, -1, -1, 29, 30, 31, - 32, 33, 34, -1, 184, 185, 186, -1, 188, 189, - 190, -1, -1, -1, 46, 47, 48, -1, -1, 95, - 96, 97, 98, 99, 100, -1, -1, -1, -1, -1, - -1, -1, -1, 109, -1, -1, -1, 113, 70, -1, + 185, 186, 187, -1, 189, 96, 97, 98, 99, 100, + 101, 19, -1, -1, -1, -1, 24, -1, -1, 110, + -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, -1, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 185, 186, 187, -1, 189, 190, 191, -1, -1, -1, + -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, 97, 98, 99, 100, -1, - -1, -1, -1, -1, -1, -1, -1, 109, 6, 7, - 8, 113, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, -1, -1, -1, 24, -1, -1, -1, - -1, 29, 30, 31, 32, 33, 34, -1, 184, 185, - 186, -1, 188, 189, 190, -1, -1, -1, 46, 47, - 48, -1, 6, 7, 8, -1, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, -1, -1, -1, - 24, -1, 70, -1, -1, 29, 30, 31, 32, 33, - 34, -1, 184, 185, 186, -1, 188, 189, 190, -1, - -1, -1, 46, 47, 48, -1, -1, 95, 96, 97, - 98, 99, 100, -1, -1, -1, -1, -1, -1, -1, - -1, 109, -1, -1, -1, 113, 70, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 185, 186, 187, -1, 189, 190, + 191, -1, -1, 111, 112, 113, -1, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, -1, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 20, -1, -1, -1, -1, -1, -1, -1, 187, + 188, -1, -1, -1, 192, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 44, -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, 95, 96, 97, 98, 99, 100, -1, -1, -1, - -1, -1, -1, -1, -1, 109, 6, 7, 8, 113, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, -1, -1, -1, 24, -1, -1, -1, -1, 29, - 30, 31, 32, 33, 34, -1, 184, 185, 186, -1, - 188, 189, 190, -1, -1, -1, 46, 47, 48, -1, - 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, -1, -1, -1, -1, 24, -1, - 70, -1, -1, 29, 30, 31, 32, 33, 34, -1, - 184, 185, 186, -1, 188, 189, 190, -1, -1, -1, - 46, 47, 48, -1, -1, 95, 96, 97, 98, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, - -1, -1, -1, 113, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, - 96, 97, 98, 99, 100, 19, -1, -1, -1, -1, - 24, -1, -1, 109, -1, -1, -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 184, 185, 186, -1, 188, 189, - 190, -1, -1, -1, -1, -1, -1, 71, -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, 20, -1, -1, -1, 184, 185, - 186, -1, 188, 189, 190, -1, 110, 111, 112, -1, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - -1, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, -1, -1, -1, -1, -1, -1, - -1, -1, 186, 187, 110, 111, 112, 191, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, -1, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, -1, -1, -1, -1, 19, 20, -1, - 186, 187, 24, -1, 26, 191, 28, 29, 30, 31, - 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 19, -1, 46, 47, 48, 24, -1, 26, - -1, 28, 29, 30, 31, 32, 33, 34, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 46, - 47, 48, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 111, 112, 113, -1, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, -1, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + -1, -1, -1, -1, -1, 19, -1, -1, 187, 188, + 24, -1, -1, 192, -1, 29, 30, 31, 32, 33, + 34, -1, -1, -1, -1, -1, 19, -1, -1, -1, + -1, 24, -1, 47, 48, 49, 29, 30, 31, 32, + 33, 34, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, 48, 49, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, - -1, -1, -1, -1, 19, -1, 113, -1, -1, 24, - -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, -1, - -1, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, 184, 185, 186, 70, 188, 189, 190, -1, - -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 184, 185, 186, - -1, 188, 189, 190, 110, 111, 112, -1, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 113, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 24, -1, -1, -1, -1, -1, -1, -1, - -1, 187, 34, -1, -1, 191, -1, -1, -1, 184, - 185, 186, -1, 188, -1, -1, -1, -1, -1, -1, + 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 34, 114, -1, -1, -1, -1, -1, -1, -1, -1, + 44, -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, -1, -1, -1, -1, -1, -1, + -1, 185, 186, 187, -1, 189, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 185, 186, 187, -1, 189, 111, 112, 113, + -1, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, -1, -1, -1, -1, -1, + -1, 185, 186, 187, 188, -1, 190, 191, 192, 24, + 25, -1, -1, -1, 29, 30, 31, 32, 33, 34, + 24, -1, -1, 27, -1, 29, 30, 31, 32, 33, + 34, -1, 47, 48, 49, -1, -1, -1, -1, -1, + -1, -1, -1, 47, 48, 49, -1, -1, -1, -1, + -1, -1, -1, -1, 24, -1, 71, 27, -1, 29, + 30, 31, 32, 33, 34, 24, 25, 71, -1, -1, + 29, 30, 31, 32, 33, 34, -1, 47, 48, 49, + -1, -1, -1, -1, -1, -1, -1, -1, 47, 48, + 49, -1, -1, -1, -1, -1, -1, -1, -1, 114, + -1, 71, -1, -1, -1, -1, -1, -1, -1, -1, + 114, -1, 71, 24, 25, -1, -1, -1, 29, 30, + 31, 32, 33, 34, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, 48, 49, -1, + -1, 24, -1, -1, 114, -1, 29, 30, 31, 32, + 33, 34, -1, -1, -1, 114, -1, -1, -1, -1, + 71, -1, -1, -1, 47, 48, 49, -1, -1, -1, + 185, 186, 187, -1, 189, -1, -1, -1, -1, -1, + -1, 185, 186, 187, -1, 189, -1, 24, 71, -1, + -1, -1, 29, 30, 31, 32, 33, 34, -1, 24, + -1, -1, -1, 114, 29, 30, 31, 32, 33, 34, + 47, 48, 49, -1, -1, 185, 186, 187, -1, 189, + -1, -1, 47, 48, 49, -1, 185, 186, 187, -1, + 189, 114, 24, -1, 71, -1, -1, 29, 30, 31, + 32, 33, 34, 24, -1, -1, 71, -1, 29, 30, + 31, 32, 33, 34, -1, 47, 48, 49, -1, -1, + -1, -1, -1, -1, -1, -1, 47, 48, 49, -1, + -1, -1, -1, -1, 185, 186, 187, 114, 189, 71, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 114, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 185, 186, 187, -1, 189, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, - 112, -1, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, -1, 125, 126, 127, 128, 129, 130, 131, + -1, -1, 114, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, -1, -1, -1, -1, 185, 186, + 187, -1, 189, -1, -1, -1, -1, -1, -1, -1, + 185, 186, 187, -1, 189, -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, 185, 186, 187, -1, 189, -1, -1, + -1, -1, -1, -1, 185, 186, 187, -1, 189, 111, + 112, 113, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, -1, -1, -1, -1, - -1, -1, 184, 185, 186, 187, -1, 189, 190, 191, - 24, -1, -1, 27, -1, 29, 30, 31, 32, 33, - 34, 24, -1, -1, 27, -1, 29, 30, 31, 32, - 33, 34, 46, 47, 48, -1, -1, -1, -1, -1, - -1, 24, 25, 46, 47, 48, 29, 30, 31, 32, - 33, 34, 24, 25, -1, -1, 70, 29, 30, 31, - 32, 33, 34, 46, 47, 48, -1, 70, -1, -1, - -1, -1, 24, -1, 46, 47, 48, 29, 30, 31, - 32, 33, 34, -1, -1, -1, -1, 70, -1, -1, - -1, -1, -1, -1, 46, 47, 48, 24, 70, 113, - -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, - 113, -1, -1, -1, -1, -1, -1, -1, 70, 46, - 47, 48, -1, -1, -1, -1, -1, -1, -1, 24, - 113, -1, -1, -1, 29, 30, 31, 32, 33, 34, - -1, 113, -1, 70, -1, -1, -1, -1, -1, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, -1, - -1, 113, -1, -1, -1, -1, -1, -1, -1, -1, - 184, 185, 186, -1, 188, 70, -1, -1, -1, -1, - -1, 184, 185, 186, 24, 188, 113, -1, -1, 29, - 30, 31, 32, 33, 34, -1, -1, -1, -1, -1, - -1, 184, 185, 186, -1, 188, 46, 47, 48, -1, - -1, -1, 184, 185, 186, -1, 188, 24, 113, -1, - -1, -1, 29, 30, 31, 32, 33, 34, -1, -1, - 70, -1, 184, 185, 186, -1, 188, -1, -1, 46, - 47, 48, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 184, 185, 186, - -1, 188, -1, 70, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 113, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 184, - 185, 186, -1, 188, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 113, -1, -1, -1, - -1, -1, -1, -1, 42, 43, -1, -1, -1, -1, + 172, 173, 174, 175, 176, 177, 178, 44, -1, 46, + -1, -1, -1, -1, -1, 187, 188, -1, -1, -1, + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 68, 69, 70, -1, 72, -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, 184, 185, 186, -1, 188, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 111, 112, 113, -1, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 44, -1, 46, -1, -1, -1, -1, -1, + 187, 188, -1, -1, -1, 192, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 72, -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, -1, -1, -1, 184, 185, 186, - -1, 188, 110, 111, 112, -1, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, -1, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 45, -1, -1, -1, -1, -1, -1, -1, 186, 187, - -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, - -1, -1, 67, 68, 69, -1, 71, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, + 112, 113, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 44, -1, -1, + -1, -1, -1, 185, 186, 187, 188, -1, -1, -1, + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 68, 69, 70, -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, -1, -1, -1, - -1, -1, -1, -1, -1, 110, 111, 112, -1, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, -1, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 45, -1, -1, -1, -1, -1, -1, - -1, 186, 187, -1, -1, -1, 191, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, + -1, -1, -1, -1, 111, 112, 113, -1, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 44, -1, -1, -1, -1, -1, -1, -1, + 187, 188, -1, -1, -1, 192, -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, - 112, -1, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, -1, 125, 126, 127, 128, 129, 130, 131, + 92, 93, 94, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, + 112, 113, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 45, -1, -1, -1, - -1, -1, 184, 185, 186, 187, -1, -1, -1, 191, + 172, 173, 174, 175, 176, 177, 178, 44, -1, 46, + -1, -1, -1, -1, -1, 187, 188, -1, -1, -1, + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 71, -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, 111, 112, 113, -1, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 44, -1, -1, -1, -1, -1, -1, -1, + 187, 188, -1, -1, -1, 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 110, 111, 112, -1, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, -1, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 67, - 68, 69, -1, -1, -1, -1, -1, 186, 187, -1, - -1, -1, 191, -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, 110, 111, 112, -1, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, -1, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 91, 92, 93, -1, -1, -1, -1, -1, 186, 187, - -1, -1, -1, 191, -1, -1, -1, -1, -1, 110, - 111, 112, -1, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, -1, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, -1, -1, -1, - -1, -1, -1, -1, -1, 186, 187, 110, 111, 112, - 191, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, -1, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, -1, -1, -1, -1, -1, - -1, -1, -1, 186, 187, -1, -1, -1, 191 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, + 112, 113, -1, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, -1, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, -1, -1, -1, + -1, -1, -1, -1, -1, 187, 188, -1, -1, -1, + 192 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ @@ -3725,44 +3761,44 @@ case 168: case 169: { yyval.expr = exprNode_makeError (); ; break;} -case 171: -{ yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ; +case 170: +{ exprChecks_inCompoundStatementExpression (); ; break;} -case 172: -{ yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ; +case 171: +{ exprChecks_leaveCompoundStatementExpression (); yyval.expr = exprNode_compoundStatementExpression (yyvsp[-3].tok, yyvsp[-1].expr); ; break;} case 173: -{ yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ; +{ yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ; break;} case 174: -{ yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ; +{ yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ; break;} case 175: -{ yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; +{ yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ; break;} case 176: -{ yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; +{ yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ; break;} case 177: -{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; +{ yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; break;} case 178: -{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; +{ yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; break;} case 179: -{ yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ; +{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; break;} case 180: -{ yyval.exprlist = exprNodeList_push (yyvsp[-2].exprlist, yyvsp[0].expr); ; +{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; + break;} +case 181: +{ /* added for C99 */ yyval.expr = exprNode_undefined; /*@i87 no checking */ ; break;} case 182: -{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; +{ yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ; break;} case 183: -{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; - break;} -case 184: -{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; +{ yyval.exprlist = exprNodeList_push (yyvsp[-2].exprlist, yyvsp[0].expr); ; break;} case 185: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; @@ -3780,48 +3816,51 @@ case 189: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 190: -{ yyval.expr = yyvsp[0].expr; ; +{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 191: -{ yyval.expr = yyvsp[0].expr; ; +{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 192: -{ yyval.cstringlist = cstringList_add (yyvsp[-2].cstringlist, yyvsp[0].cname); ; +{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 193: -{ yyval.cstringlist = cstringList_single (yyvsp[0].cname); ; +{ yyval.expr = yyvsp[0].expr; ; break;} case 194: -{ yyval.expr = exprNode_offsetof (yyvsp[-5].qtyp, yyvsp[-2].cstringlist); ; +{ yyval.expr = yyvsp[0].expr; ; break;} case 195: -{ context_setProtectVars (); ; +{ yyval.cstringlist = cstringList_add (yyvsp[-2].cstringlist, yyvsp[0].cname); ; break;} case 196: -{ context_sizeofReleaseVars (); yyval.expr = yyvsp[0].expr; ; +{ yyval.cstringlist = cstringList_single (yyvsp[0].cname); ; break;} case 197: -{ yyval.expr = exprNode_sizeofType (yyvsp[-1].qtyp); ; +{ yyval.expr = exprNode_offsetof (yyvsp[-5].qtyp, yyvsp[-2].cstringlist); ; break;} case 198: -{ yyval.expr = exprNode_sizeofExpr (yyvsp[0].expr); ; +{ context_setProtectVars (); ; break;} case 199: -{ yyval.expr = exprNode_alignofType (yyvsp[-1].qtyp); ; +{ context_sizeofReleaseVars (); yyval.expr = yyvsp[0].expr; ; break;} case 200: -{ yyval.expr = exprNode_alignofExpr (yyvsp[0].expr); ; +{ yyval.expr = exprNode_sizeofType (yyvsp[-1].qtyp); ; + break;} +case 201: +{ yyval.expr = exprNode_sizeofExpr (yyvsp[0].expr); ; break;} case 202: -{ yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ; +{ yyval.expr = exprNode_alignofType (yyvsp[-1].qtyp); ; break;} -case 204: -{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; +case 203: +{ yyval.expr = exprNode_alignofExpr (yyvsp[0].expr); ; break;} case 205: -{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; +{ yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ; break;} -case 206: +case 207: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 208: @@ -3842,10 +3881,10 @@ case 214: case 215: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 216: +case 217: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 217: +case 218: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 219: @@ -3857,52 +3896,49 @@ case 220: case 222: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 224: +case 223: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 226: +case 225: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 228: +case 227: +{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; + break;} +case 229: +{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; + break;} +case 231: { exprNode_produceGuards (yyvsp[-1].expr); context_enterAndClause (yyvsp[-1].expr); ; break;} -case 229: +case 232: { yyval.expr = exprNode_op (yyvsp[-3].expr, yyvsp[0].expr, yyvsp[-2].tok); context_exitAndClause (yyval.expr, yyvsp[0].expr); ; break;} -case 231: +case 234: { exprNode_produceGuards (yyvsp[-1].expr); context_enterOrClause (yyvsp[-1].expr); ; break;} -case 232: +case 235: { yyval.expr = exprNode_op (yyvsp[-3].expr, yyvsp[0].expr, yyvsp[-2].tok); context_exitOrClause (yyval.expr, yyvsp[0].expr); ; break;} -case 234: +case 237: { exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); ; break;} -case 235: -{ context_enterFalseClause (yyvsp[-4].expr); ; - break;} -case 236: -{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); context_exitClause (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ; - break;} case 238: -{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; +{ context_enterFalseClause (yyvsp[-4].expr); ; break;} case 239: -{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; - break;} -case 240: -{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; +{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); context_exitClause (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ; break;} case 241: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; @@ -3926,152 +3962,161 @@ case 247: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 248: +{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; + break;} +case 249: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 250: -{ yyval.expr = exprNode_comma (yyvsp[-2].expr, yyvsp[0].expr); ; +{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} case 251: -{ yyval.expr = exprNode_undefined; ; +{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; + break;} +case 253: +{ yyval.expr = exprNode_comma (yyvsp[-2].expr, yyvsp[0].expr); ; break;} case 254: +{ yyval.expr = exprNode_undefined; ; + break;} +case 257: { yyval.expr = yyvsp[0].expr; ; break;} -case 255: +case 258: { doVaDcl (); yyval.expr = exprNode_makeError (); ; break;} -case 256: +case 259: { yyval.expr = exprNode_makeError (); ; break;} -case 257: +case 260: { yyval.expr = exprNode_makeError (); ; break;} -case 258: +case 261: { setProcessingVars (yyvsp[-3].qtyp); processNamedDecl (yyvsp[-1].ntyp); ; break;} -case 259: +case 262: { unsetProcessingVars (); yyval.expr = exprNode_makeEmptyInitialization (yyvsp[-6].ntyp); DPRINTF (("Empty initialization: %s", exprNode_unparse (yyval.expr))); ; break;} -case 260: +case 263: { setProcessingVars (yyvsp[-4].qtyp); processNamedDecl (yyvsp[-2].ntyp); ; break;} -case 261: +case 264: { yyval.expr = exprNode_concat (yyvsp[-2].expr, exprNode_makeInitialization (yyvsp[-8].ntyp, yyvsp[-3].expr)); unsetProcessingVars (); ; break;} -case 262: +case 265: { processNamedDecl (yyvsp[-1].ntyp); yyval.expr = exprNode_makeEmptyInitialization (yyvsp[-1].ntyp); ; break;} -case 263: +case 266: { processNamedDecl (yyvsp[-2].ntyp); ; break;} -case 264: +case 267: { yyval.expr = exprNode_makeInitialization (yyvsp[-5].ntyp, yyvsp[0].expr); ; break;} -case 265: +case 268: { setProcessingTypedef (yyvsp[0].qtyp); ; break;} -case 266: +case 269: { clabstract_declareType (yyvsp[-3].exprlist, yyvsp[-1].warnclause); ; break;} -case 267: +case 270: { /* in the ANSI grammar, semantics unclear */ ; break;} -case 268: +case 271: { /* in the ANSI grammar, semantics unclear */ ; break;} -case 269: +case 272: { g_expectingTypeName = TRUE; ; break;} -case 270: +case 273: { g_expectingTypeName = TRUE; context_pushLoc (); ; break;} -case 271: +case 274: { yyval.exprlist = yyvsp[-1].exprlist; ; break;} -case 272: +case 275: { yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ; break;} -case 273: +case 276: { yyval.exprlist = exprNodeList_push (yyvsp[-3].exprlist, yyvsp[0].expr); ; break;} -case 274: +case 277: { yyval.expr = exprNode_makeError (); ; break;} -case 275: +case 278: { yyval.expr = exprNode_concat (yyvsp[-3].expr, yyvsp[0].expr); ; break;} -case 277: +case 280: { yyval.expr = exprNode_makeInitBlock (yyvsp[-2].tok, yyvsp[-1].exprlist); ; break;} -case 278: +case 281: { yyval.expr = exprNode_makeInitBlock (yyvsp[-3].tok, yyvsp[-2].exprlist); ; break;} -case 279: +case 282: { yyval.expr = exprNode_undefined; ; break;} -case 280: +case 283: { yyval.expr = yyvsp[-1].expr; ; break;} -case 281: +case 284: { yyval.expr = exprNode_undefined; /* gcc extension, obsolete since 2.5 */ ; break;} -case 282: +case 285: { yyval.expr = exprNode_undefined; ; break;} -case 283: +case 286: { yyval.expr = exprNode_undefined; ; break;} -case 284: +case 287: { yyval.expr = exprNode_undefined; ; break;} -case 285: +case 288: { yyval.expr = exprNode_undefined; ; break;} -case 286: +case 289: { yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ; break;} -case 287: +case 290: { yyval.exprlist = exprNodeList_push (yyvsp[-2].exprlist, yyvsp[0].expr); ; break;} -case 288: +case 291: { setStorageClass (SCEXTERN); yyval.typequal = qual_createExtern (); ; break;} -case 289: +case 292: { yyval.typequal = qual_createInline (); ; break;} -case 290: +case 293: { setStorageClass (SCSTATIC); yyval.typequal = qual_createStatic (); ; break;} -case 291: +case 294: { yyval.typequal = qual_createAuto (); ; break;} -case 292: +case 295: { yyval.typequal = qual_createRegister (); ; break;} -case 293: +case 296: { yyval.stateclause = yyvsp[-1].stateclause; ; break;} -case 294: +case 297: { context_setProtectVars (); enterParamsTemp (); sRef_setGlobalScopeSafe (); ; break;} -case 295: +case 298: { exitParamsTemp (); sRef_clearGlobalScopeSafe (); @@ -4079,13 +4124,13 @@ case 295: yyval.stateclause = stateClause_createPlain (yyvsp[-5].tok, yyvsp[-2].srset); ; break;} -case 296: +case 299: { yyval.funcclause = yyvsp[-1].funcclause; ; break;} -case 297: +case 300: { yyval.tok = yyvsp[-1].tok; context_enterFunctionHeader (); ; break;} -case 298: +case 301: { context_exitFunctionHeader (); context_setProtectVars (); @@ -4093,7 +4138,7 @@ case 298: sRef_setGlobalScopeSafe (); ; break;} -case 299: +case 302: { exitParamsTemp (); sRef_clearGlobalScopeSafe (); @@ -4101,14 +4146,14 @@ case 299: yyval.funcclause = functionClause_createState (stateClause_create (yyvsp[-5].tok, yyvsp[-4].typequal, yyvsp[-2].srset)); ; break;} -case 300: +case 303: { context_setProtectVars (); enterParamsTemp (); sRef_setGlobalScopeSafe (); ; break;} -case 301: +case 304: { context_exitFunctionHeader (); exitParamsTemp (); @@ -4132,176 +4177,167 @@ case 301: DPRINTF (("FunctionclauseS: %s", functionClause_unparse (yyval.funcclause))); ; break;} -case 302: -{ yyval.fcnconstraint = functionConstraint_createBufferConstraint (yyvsp[0].conL); ; - break;} -case 303: -{ yyval.fcnconstraint = functionConstraint_createMetaStateConstraint (yyvsp[0].msconstraint); DPRINTF (("Made constraint: %s", functionConstraint_unparse (yyval.fcnconstraint))); ; - break;} -case 304: -{ yyval.typequal = qual_createExits (); ; - break;} case 305: -{ yyval.typequal = qual_createMayExit (); ; +{ yyval.fcnconstraint = functionConstraint_createBufferConstraint (yyvsp[0].conL); ; break;} case 306: -{ yyval.typequal = qual_createTrueExit (); ; +{ yyval.fcnconstraint = functionConstraint_createMetaStateConstraint (yyvsp[0].msconstraint); DPRINTF (("Made constraint: %s", functionConstraint_unparse (yyval.fcnconstraint))); ; break;} case 307: -{ yyval.typequal = qual_createFalseExit (); ; +{ yyval.typequal = qual_createExits (); ; break;} case 308: -{ yyval.typequal = qual_createNeverExit (); ; +{ yyval.typequal = qual_createMayExit (); ; break;} case 309: -{ yyval.typequal = qual_createChecked (); ; +{ yyval.typequal = qual_createTrueExit (); ; break;} case 310: -{ yyval.typequal = qual_createCheckMod (); ; +{ yyval.typequal = qual_createFalseExit (); ; break;} case 311: -{ yyval.typequal = qual_createUnchecked (); ; +{ yyval.typequal = qual_createNeverExit (); ; break;} case 312: -{ yyval.typequal = qual_createCheckedStrict (); ; +{ yyval.typequal = qual_createChecked (); ; break;} case 313: -{ yyval.typequal = qual_createOwned (); ; +{ yyval.typequal = qual_createCheckMod (); ; break;} case 314: -{ yyval.typequal = qual_createDependent (); ; +{ yyval.typequal = qual_createUnchecked (); ; break;} case 315: -{ yyval.typequal = qual_createYield (); ; +{ yyval.typequal = qual_createCheckedStrict (); ; break;} case 316: -{ yyval.typequal = qual_createTemp (); ; +{ yyval.typequal = qual_createOwned (); ; break;} case 317: -{ yyval.typequal = qual_createOnly (); ; +{ yyval.typequal = qual_createDependent (); ; break;} case 318: -{ yyval.typequal = qual_createKeep (); ; +{ yyval.typequal = qual_createYield (); ; break;} case 319: -{ yyval.typequal = qual_createKept (); ; +{ yyval.typequal = qual_createTemp (); ; break;} case 320: -{ yyval.typequal = qual_createShared (); ; +{ yyval.typequal = qual_createOnly (); ; break;} case 321: -{ yyval.typequal = qual_createUnique (); ; +{ yyval.typequal = qual_createKeep (); ; break;} case 322: -{ yyval.typequal = qual_createNull (); ; +{ yyval.typequal = qual_createKept (); ; break;} case 323: -{ yyval.typequal = qual_createIsNull (); ; +{ yyval.typequal = qual_createShared (); ; break;} case 324: -{ yyval.typequal = qual_createRelNull (); ; +{ yyval.typequal = qual_createUnique (); ; break;} case 325: -{ yyval.typequal = qual_createNotNull (); ; +{ yyval.typequal = qual_createNull (); ; break;} case 326: -{ yyval.typequal = qual_createExposed (); ; +{ yyval.typequal = qual_createIsNull (); ; break;} case 327: -{ yyval.typequal = qual_createObserver (); ; +{ yyval.typequal = qual_createRelNull (); ; break;} case 328: -{ yyval.typequal = qual_createNullTerminated (); ; +{ yyval.typequal = qual_createNotNull (); ; break;} case 329: -{ yyval.typequal = qual_createMetaState (yyvsp[0].annotation); ; +{ yyval.typequal = qual_createExposed (); ; break;} case 330: -{ yyval.typequal = qual_createReturned (); ; +{ yyval.typequal = qual_createObserver (); ; break;} case 331: -{ yyval.typequal = qual_createSef (); ; +{ yyval.typequal = qual_createNullTerminated (); ; break;} case 332: -{ yyval.typequal = qual_createUnused (); ; +{ yyval.typequal = qual_createMetaState (yyvsp[0].annotation); ; break;} case 333: -{ yyval.typequal = qual_createExternal (); ; +{ yyval.typequal = qual_createReturned (); ; break;} case 334: -{ yyval.typequal = qual_createTrueNull (); ; +{ yyval.typequal = qual_createSef (); ; break;} case 335: -{ yyval.typequal = qual_createFalseNull (); ; +{ yyval.typequal = qual_createUnused (); ; break;} case 336: -{ yyval.typequal = qual_createAbstract (); ; +{ yyval.typequal = qual_createExternal (); ; break;} case 337: -{ yyval.typequal = qual_createConcrete (); ; +{ yyval.typequal = qual_createTrueNull (); ; break;} case 338: -{ yyval.typequal = qual_createMutable (); ; +{ yyval.typequal = qual_createFalseNull (); ; break;} case 339: -{ yyval.typequal = qual_createImmutable (); ; +{ yyval.typequal = qual_createAbstract (); ; break;} case 340: -{ yyval.typequal = qual_createRefCounted (); ; +{ yyval.typequal = qual_createConcrete (); ; break;} case 341: -{ yyval.typequal = qual_createRefs (); ; +{ yyval.typequal = qual_createMutable (); ; break;} case 342: -{ yyval.typequal = qual_createKillRef (); ; +{ yyval.typequal = qual_createImmutable (); ; break;} case 343: -{ yyval.typequal = qual_createRelDef (); ; +{ yyval.typequal = qual_createRefCounted (); ; break;} case 344: -{ yyval.typequal = qual_createNewRef (); ; +{ yyval.typequal = qual_createRefs (); ; break;} case 345: -{ yyval.typequal = qual_createTempRef (); ; +{ yyval.typequal = qual_createKillRef (); ; break;} case 346: -{ yyval.typequal = qual_createShort (); ; +{ yyval.typequal = qual_createRelDef (); ; break;} case 347: -{ yyval.typequal = qual_createLong (); ; +{ yyval.typequal = qual_createNewRef (); ; break;} case 348: -{ yyval.typequal = qual_createSigned (); ; +{ yyval.typequal = qual_createTempRef (); ; break;} case 349: -{ yyval.typequal = qual_createUnsigned (); ; +{ yyval.typequal = qual_createShort (); ; break;} case 350: -{ yyval.typequal = qual_createOut (); ; +{ yyval.typequal = qual_createLong (); ; break;} case 351: -{ yyval.typequal = qual_createIn (); ; +{ yyval.typequal = qual_createSigned (); ; break;} case 352: -{ yyval.typequal = qual_createPartial (); ; +{ yyval.typequal = qual_createUnsigned (); ; break;} case 353: -{ yyval.typequal = qual_createSpecial (); ; +{ yyval.typequal = qual_createOut (); ; break;} case 354: -{ yyval.typequal = qual_createConst (); ; +{ yyval.typequal = qual_createIn (); ; break;} case 355: -{ yyval.typequal = qual_createVolatile (); ; +{ yyval.typequal = qual_createPartial (); ; break;} case 356: -{ yyval.typequal = yyvsp[-1].typequal; ; +{ yyval.typequal = qual_createSpecial (); ; break;} case 357: -{ yyval.typequal = yyvsp[-1].typequal; ; +{ yyval.typequal = qual_createConst (); ; break;} case 358: -{ yyval.typequal = yyvsp[-1].typequal; ; +{ yyval.typequal = qual_createVolatile (); ; break;} case 359: { yyval.typequal = yyvsp[-1].typequal; ; @@ -4321,169 +4357,178 @@ case 363: case 364: { yyval.typequal = yyvsp[-1].typequal; ; break;} -case 371: +case 365: +{ yyval.typequal = yyvsp[-1].typequal; ; + break;} +case 366: +{ yyval.typequal = yyvsp[-1].typequal; ; + break;} +case 367: +{ yyval.typequal = yyvsp[-1].typequal; ; + break;} +case 374: { yyval.ctyp = ctype_unknown; ; break;} -case 372: +case 375: { yyval.ctyp = ctype_anyintegral; ; break;} -case 373: +case 376: { yyval.ctyp = ctype_unsignedintegral; ; break;} -case 374: +case 377: { yyval.ctyp = ctype_signedintegral; ; break;} -case 378: +case 381: { yyval.ctyp = ctype_fromQual (yyvsp[-1].typequal); ; break;} -case 379: +case 382: { yyval.qtyp = qtype_resolve (yyvsp[-1].qtyp); ; break;} -case 380: +case 383: { yyval.qtyp = yyvsp[0].qtyp; ; break;} -case 381: +case 384: { yyval.qtyp = qtype_mergeAlt (yyvsp[-3].qtyp, yyvsp[-1].qtyp); ; break;} -case 383: +case 386: { yyval.qtyp = qtype_mergeAlt (yyvsp[-2].qtyp, yyvsp[0].qtyp); ; break;} -case 384: +case 387: { yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ; break;} -case 385: +case 388: { yyval.qtyp = qtype_addQual (yyvsp[0].qtyp, yyvsp[-1].typequal); ; break;} -case 386: +case 389: { yyval.qtyp = qtype_combine (yyvsp[0].qtyp, yyvsp[-1].ctyp); ; break;} -case 387: +case 390: { yyval.qtyp = qtype_unknown (); ; break;} -case 388: +case 391: { yyval.qtyp = yyvsp[0].qtyp; ; break;} -case 389: +case 392: { yyval.conL = constraintList_undefined; ; break;} -case 390: +case 393: { sRef_setGlobalScopeSafe (); ; break;} -case 391: +case 394: { sRef_clearGlobalScopeSafe (); ; break;} -case 392: +case 395: { {ctype ct; ct = declareStruct (yyvsp[-9].cname, yyvsp[-4].flist); /* setGlobalStructInfo(ct, $12);*/ yyval.ctyp = ct;} ; break;} -case 393: +case 396: { sRef_setGlobalScopeSafe (); ; break;} -case 394: +case 397: { sRef_clearGlobalScopeSafe (); ; break;} -case 395: +case 398: { yyval.ctyp = declareUnion (yyvsp[-8].cname, yyvsp[-3].flist); ; break;} -case 396: +case 399: { yyval.ctyp = declareStruct (yyvsp[-3].cname, uentryList_new ()); ; break;} -case 397: +case 400: { yyval.ctyp = declareUnion (yyvsp[-3].cname, uentryList_new ()); ; break;} -case 398: +case 401: { sRef_setGlobalScopeSafe (); ; break;} -case 399: +case 402: { sRef_clearGlobalScopeSafe (); ; break;} -case 400: +case 403: { yyval.ctyp = declareUnnamedStruct (yyvsp[-3].flist); ; break;} -case 401: +case 404: { sRef_setGlobalScopeSafe (); ; break;} -case 402: +case 405: { sRef_clearGlobalScopeSafe (); ; break;} -case 403: +case 406: { yyval.ctyp = declareUnnamedUnion (yyvsp[-3].flist); ; break;} -case 404: +case 407: { yyval.ctyp = ctype_createUnnamedStruct (uentryList_new ()); ; break;} -case 405: +case 408: { yyval.ctyp = ctype_createUnnamedUnion (uentryList_new ()); ; break;} -case 406: +case 409: { yyval.ctyp = handleStruct (yyvsp[-1].cname); ; break;} -case 407: +case 410: { yyval.ctyp = handleUnion (yyvsp[-1].cname); ; break;} -case 408: +case 411: { g_expectingTypeName = FALSE; ; break;} -case 410: +case 413: { yyval.flist = uentryList_undefined; /* bogus! */ ; break;} -case 411: +case 414: { yyval.flist = uentryList_mergeFields (yyvsp[-1].flist, yyvsp[0].flist); ; break;} -case 412: +case 415: { yyval.flist = fixUentryList (yyvsp[-2].ntyplist, yyvsp[-4].qtyp); ; break;} -case 413: +case 416: { yyval.flist = fixUnnamedDecl (yyvsp[-2].qtyp); ; break;} -case 414: +case 417: { yyval.ntyplist = idDeclList_singleton (yyvsp[-1].ntyp); ; break;} -case 415: +case 418: { yyval.ntyplist = idDeclList_add (yyvsp[-3].ntyplist, yyvsp[-1].ntyp); ; break;} -case 416: +case 419: { yyval.ntyp = yyvsp[0].ntyp; ; break;} -case 417: +case 420: { yyval.ntyp = idDecl_undefined; ; break;} -case 418: +case 421: { yyval.ntyp = yyvsp[-3].ntyp; ; break;} -case 419: +case 422: { yyval.ctyp = declareUnnamedEnum (yyvsp[-2].enumnamelist); ; break;} -case 420: +case 423: { context_pushLoc (); ; break;} -case 421: +case 424: { context_popLoc (); yyval.ctyp = declareEnum (yyvsp[-5].cname, yyvsp[-2].enumnamelist); ; break;} -case 422: +case 425: { yyval.ctyp = handleEnum (yyvsp[-1].cname); ; break;} -case 423: +case 426: { yyval.enumnamelist = enumNameList_single (yyvsp[0].cname); ; break;} -case 424: +case 427: { yyval.enumnamelist = enumNameList_push (yyvsp[-2].enumnamelist, yyvsp[0].cname); ; break;} -case 426: +case 429: { uentry ue = uentry_makeEnumConstant (yyvsp[0].cname, ctype_unknown); usymtab_supGlobalEntry (ue); yyval.cname = yyvsp[0].cname; ; break;} -case 427: +case 430: { uentry ue = uentry_makeEnumInitializedConstant (yyvsp[-3].cname, ctype_unknown, yyvsp[0].expr); usymtab_supGlobalEntry (ue); yyval.cname = yyvsp[-3].cname; ; break;} -case 429: +case 432: { yyval.ntyp = idDecl_create (cstring_undefined, qtype_create (yyvsp[0].ctyp)); ; break;} -case 430: +case 433: { qtype qt = qtype_unknown (); @@ -4491,70 +4536,70 @@ case 430: yyval.ntyp = idDecl_create (cstring_copy (LastIdentifier ()), qt); ; break;} -case 431: +case 434: { yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ; break;} -case 433: +case 436: { yyval.ntyp = yyvsp[0].ntyp; qtype_adjustPointers (yyvsp[-1].count, idDecl_getTyp (yyval.ntyp)); ; break;} -case 434: +case 437: { yyval.entrylist = handleParamTypeList (yyvsp[0].entrylist); ; break;} -case 435: +case 438: { yyval.entrylist = handleParamIdList (yyvsp[0].entrylist); ; break;} -case 436: +case 439: { /* ignored for now */; ; break;} -case 437: +case 440: { ; ; break;} -case 438: +case 441: { ; ; break;} -case 439: +case 442: { ; ; break;} -case 440: +case 443: { yyval.count = 1; ; break;} -case 441: +case 444: { yyval.count = 1; ; break;} -case 442: +case 445: { yyval.count = 1 + yyvsp[0].count; ; break;} -case 443: +case 446: { yyval.count = 1 + yyvsp[0].count; ; break;} -case 445: +case 448: { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ; break;} -case 446: +case 449: { yyval.entrylist = uentryList_single (uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ; break;} -case 447: +case 450: { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeVariableLoc (yyvsp[0].cname, ctype_int)); ; break;} -case 448: +case 451: { yyval.entrylist = uentryList_single (uentry_makeElipsisMarker ()); ; break;} -case 450: +case 453: { yyval.entrylist = uentryList_add (yyvsp[-2].entrylist, uentry_makeElipsisMarker ()); ; break;} -case 451: +case 454: { storeLoc (); ; break;} -case 452: +case 455: { yyval.entrylist = uentryList_single (yyvsp[0].oentry); ; break;} -case 453: +case 456: { storeLoc (); ; break;} -case 454: +case 457: { yyval.entrylist = uentryList_add (yyvsp[-3].entrylist, yyvsp[0].oentry); ; break;} -case 455: +case 458: { if (isFlipOldStyle ()) { @@ -4567,7 +4612,7 @@ case 455: yyval.oentry = makeCurrentParam (idDecl_fixParamBase (yyvsp[-1].ntyp, yyvsp[-2].qtyp)); ; break;} -case 456: +case 459: { idDecl tparam = idDecl_create (yyvsp[0].cname, qtype_unknown ()); @@ -4582,304 +4627,316 @@ case 456: idDecl_free (tparam); ; break;} -case 458: +case 461: { yyval.qtyp = qtype_newBase (yyvsp[-1].qtyp, yyvsp[0].ctyp); ; break;} -case 459: +case 462: { yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ; break;} -case 461: +case 464: { yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ; break;} -case 462: +case 465: { yyval.ctyp = ctype_unknown; ; break;} -case 464: +case 467: { yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ; break;} -case 465: +case 468: { yyval.ctyp = ctype_makeArray (ctype_unknown); ; break;} -case 466: +case 469: { yyval.ctyp = ctype_makeFixedArray (ctype_unknown, exprNode_getLongValue (yyvsp[-1].expr)); ; break;} -case 467: +case 470: { yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ; break;} -case 468: +case 471: { yyval.ctyp = ctype_makeInnerFixedArray (yyvsp[-3].ctyp, exprNode_getLongValue (yyvsp[-1].expr)); ; break;} -case 469: +case 472: { yyval.ctyp = ctype_makeFunction (ctype_unknown, uentryList_makeMissingParams ()); ; break;} -case 470: +case 473: { yyval.ctyp = ctype_makeParamsFunction (ctype_unknown, yyvsp[-1].entrylist); ; break;} -case 471: +case 474: { yyval.ctyp = ctype_makeFunction (yyvsp[-3].ctyp, uentryList_makeMissingParams ()); ; break;} -case 472: +case 475: { yyval.ctyp = ctype_makeParamsFunction (yyvsp[-4].ctyp, yyvsp[-1].entrylist); ; break;} -case 482: +case 485: { yyval.expr = yyvsp[0].expr; ; break;} -case 485: +case 488: { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 486: +case 489: { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 487: +case 490: { yyval.expr = exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr); ; break;} -case 488: +case 491: { yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ; break;} -case 489: +case 492: { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 490: +case 493: { context_setProtectVars (); ; break;} -case 491: +case 494: { context_sizeofReleaseVars (); ; break;} -case 492: +case 495: { yyval.expr = exprNode_forPred (yyvsp[-7].expr, yyvsp[-5].expr, yyvsp[-2].expr); context_enterForClause (yyvsp[-5].expr); ; break;} -case 493: +case 496: { setProcessingIterVars (yyvsp[-2].entry); ; break;} -case 494: +case 497: { yyval.expr = exprNode_iterStart (yyvsp[-5].entry, yyvsp[-1].exprlist); ; break;} -case 495: +case 498: { yyval.expr = exprNode_createId (yyvsp[0].entry); ; break;} -case 499: +case 502: { yyval.expr = yyvsp[-1].expr; DPRINTF (("def stmt: %s", exprNode_unparse (yyval.expr))); ; break;} -case 507: +case 510: { yyval.expr = yyvsp[-1].expr; ; break;} -case 508: +case 511: { yyval.expr = exprNode_makeError (); ; break;} -case 509: +case 512: { exprNode_checkIfPred (yyvsp[0].expr); ; break;} -case 510: +case 513: { /* don't: context_exitTrueClause ($1, $2); */ yyval.expr = exprNode_if (yyvsp[-2].expr, yyvsp[0].expr); ; break;} -case 511: +case 514: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 512: +case 515: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 523: +case 526: { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ; break;} -case 525: +case 528: { yyval.expr = exprNode_makeError (); ; break;} -case 526: +case 529: { yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ; break;} -case 527: +case 530: { yyval.expr = exprNode_notReached (yyvsp[0].expr); ; break;} -case 528: +case 531: { ; ; break;} -case 529: +case 532: { ; ; break;} -case 530: +case 533: { context_enterCaseClause (yyvsp[0].expr); ; break;} -case 531: +case 534: { yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ; break;} -case 532: +case 535: { context_enterCaseClause (yyvsp[0].expr); ; break;} -case 533: +case 536: { yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ; break;} -case 534: +case 537: { context_enterCaseClause (exprNode_undefined); ; break;} -case 535: +case 538: { yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ; break;} -case 536: +case 539: { context_enterCaseClause (exprNode_undefined); ; break;} -case 537: +case 540: { yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ; break;} -case 538: +case 541: { yyval.expr = yyvsp[-1].expr; ; break;} -case 539: +case 542: { yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ; break;} -case 540: +case 543: { yyval.expr = yyvsp[-1].expr; ; break;} -case 541: +case 544: { context_enterInnerContext (); ; break;} -case 542: +case 545: { context_exitInnerPlain (); ; break;} -case 543: +case 546: { context_enterStructInnerContext (); ; break;} -case 544: +case 547: { context_exitStructInnerContext (); ; break;} -case 545: +case 548: { context_exitInnerSafe (); ; break;} -case 546: +case 549: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 547: +case 550: { yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ; break;} -case 548: +case 551: { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ; break;} -case 549: +case 552: { yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ; break;} -case 550: +case 553: { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ; break;} -case 551: +case 554: { yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ; break;} -case 552: +case 555: { yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ; break;} -case 553: +case 556: { yyval.expr = exprNode_notReached (exprNode_updateLocation (exprNode_concat (yyvsp[-3].expr, yyvsp[-2].expr), lltok_getLoc (yyvsp[-1].tok))); ; break;} -case 554: +case 557: { yyval.expr = exprNode_makeBlock (yyvsp[0].expr); ; break;} -case 555: +case 558: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 556: +case 559: { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ; break;} -case 557: +case 560: { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ; break;} -case 558: +case 561: { yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ; break;} -case 560: +case 563: { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 561: +case 564: { yyval.expr = yyvsp[0].expr; ; break;} -case 562: +case 565: { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 563: +case 566: { yyval.expr = yyvsp[0].expr; ; break;} -case 564: +case 567: +{ yyval.expr = exprNode_concat (yyvsp[-2].expr, yyvsp[0].expr); ; + break;} +case 568: +{ yyval.expr = yyvsp[0].expr; ; + break;} +case 569: +{ yyval.expr = yyvsp[-2].expr; ; + break;} +case 570: +{ yyval.expr = yyvsp[0].expr; ; + break;} +case 571: { yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 565: +case 572: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 566: +case 573: { yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ; break;} -case 567: +case 574: { yyval.expr = exprNode_createTok (yyvsp[0].tok); ; break;} -case 568: +case 575: { yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ; break;} -case 569: +case 576: { yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ; break;} -case 570: +case 577: { exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); exprNode_checkIfPred (yyvsp[-1].expr); yyval.expr = yyvsp[-1].expr; ; break;} -case 571: +case 578: { context_exitTrueClause (yyvsp[-1].expr, yyvsp[0].expr); yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 572: +case 579: { context_enterFalseClause (yyvsp[-2].expr); ; break;} -case 573: +case 580: { context_exitClause (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr); yyval.expr = exprNode_ifelse (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr); ; break;} -case 574: +case 581: { context_enterSwitch (yyvsp[0].expr); ; break;} -case 575: +case 582: { yyval.expr = exprNode_switch (yyvsp[-3].expr, yyvsp[0].expr); ; break;} -case 576: +case 583: { yyval.expr = exprNode_whilePred (yyvsp[-1].expr); context_enterWhileClause (yyvsp[-1].expr); ; break;} -case 577: +case 584: { yyval.expr = exprNode_whilePred(yyvsp[-1].expr); ; break;} -case 578: +case 585: { context_enterIterClause (); ; break;} -case 579: +case 586: { setProcessingIterVars (yyvsp[-3].entry); ; break;} -case 580: +case 587: { yyval.expr = exprNode_iter (yyvsp[-9].entry, yyvsp[-4].exprlist, yyvsp[-2].expr, yyvsp[-1].entry); ; break;} -case 581: +case 588: { yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ; break;} -case 582: +case 589: { nextIterParam (); ; break;} -case 583: +case 590: { yyval.exprlist = exprNodeList_push (yyvsp[-3].exprlist, yyvsp[0].expr); ; break;} -case 584: +case 591: { yyval.expr = exprNode_iterExpr (yyvsp[0].expr); ; break;} -case 585: +case 592: { yyval.expr = exprNode_iterId (yyvsp[0].entry); ; break;} -case 586: +case 593: { uentry ue = coerceIterId (yyvsp[0].cname); if (uentry_isValid (ue)) @@ -4892,243 +4949,252 @@ case 586: } ; break;} -case 587: +case 594: { yyval.expr = exprNode_iterNewId (yyvsp[0].cname); ; break;} -case 589: +case 596: { yyval.expr = exprNode_combineLiterals (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 591: +case 598: { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ; break;} -case 593: +case 600: { yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ; break;} -case 594: +case 601: { yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ; break;} -case 595: +case 602: { yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ; break;} -case 596: +case 603: { yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ; break;} -case 597: +case 604: { yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; break;} -case 598: +case 605: { yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ; break;} -case 599: +case 606: { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; break;} -case 600: +case 607: { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ; break;} -case 602: +case 609: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 603: +case 610: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 604: +case 611: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 605: +case 612: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 606: +case 613: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 607: +case 614: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 608: +case 615: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 609: +case 616: { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 610: +case 617: { yyval.expr = yyvsp[0].expr; ; break;} -case 612: +case 619: { yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ; break;} -case 614: +case 621: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 615: +case 622: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 616: +case 623: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 618: +case 625: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 619: +case 626: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 621: +case 628: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 622: +case 629: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 624: +case 631: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 625: +case 632: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 626: +case 633: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 627: +case 634: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 629: +case 636: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 630: +case 637: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 632: +case 639: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 634: +case 641: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 636: +case 643: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 638: +case 645: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 640: +case 647: { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 642: +case 649: { context_enterTrueClause (yyvsp[-1].expr); ; break;} -case 643: +case 650: { context_enterFalseClause (yyvsp[-4].expr); ; break;} -case 644: +case 651: { yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ; break;} -case 646: +case 653: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 647: +case 654: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 648: +case 655: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 649: +case 656: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 650: +case 657: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 651: +case 658: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 652: +case 659: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 653: +case 660: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 654: +case 661: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 655: +case 662: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 656: +case 663: { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ; break;} -case 657: +case 664: { yyval.entry = yyvsp[0].entry; ; break;} -case 658: +case 665: { yyval.entry = uentry_undefined; ; break;} -case 659: +case 666: { context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ; break;} -case 660: +case 667: { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 661: +case 668: { yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ; break;} -case 662: +case 669: { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 663: +case 670: { yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 664: +case 671: { yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ; break;} -case 665: +case 672: { yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ; break;} -case 666: +case 673: { yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ; break;} -case 667: +case 674: { yyval.expr = exprNode_goto (yyvsp[-1].cname); ; break;} -case 668: +case 675: { yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ; break;} -case 669: +case 676: { yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ; break;} -case 670: +case 677: { yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ; break;} -case 671: +case 678: { yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ; break;} -case 672: +case 679: { yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ; break;} -case 673: +case 680: { yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ; break;} -case 674: +case 681: { yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ; break;} -case 675: +case 682: { yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ; break;} -case 676: +case 683: { yyval.expr = exprNode_return (yyvsp[-1].expr); ; break;} -case 678: +case 685: { ; ; break;} -case 681: +case 687: +{ ; ; + break;} +case 690: { yyval.cname = uentry_getName (yyvsp[0].entry); ; break;} -case 682: +case 691: { yyval.cname = uentry_getName (yyvsp[0].entry); ; break;} -case 683: +case 692: { yyval.cname = uentry_getName (yyvsp[0].entry); ; break;} -case 684: +case 693: { yyval.cname = yyvsp[0].cname; ; break;} -case 686: +case 695: { yyval.ctyp = ctype_unknown; ; break;} +case 696: +{ yyval.ctyp = exprNode_getType (yyvsp[-1].expr); exprNode_free (yyvsp[-1].expr); ; + break;} +case 697: +{ yyval.ctyp = qtype_getType (yyvsp[-1].qtyp); ; + break;} } /* the action file gets copied in in place of this dollarsign */ diff --git a/src/cgrammar.y b/src/cgrammar.y index 98ad6f2..b9073ba 100644 --- a/src/cgrammar.y +++ b/src/cgrammar.y @@ -136,7 +136,7 @@ extern void yyerror (char *); %token TSEMI TLBRACE TRBRACE TCOMMA TCOLON TASSIGN TLPAREN %token TRPAREN TLSQBR TRSQBR TDOT TAMPERSAND TEXCL TTILDE %token TMINUS TPLUS TMULT TDIV TPERCENT TLT TGT TCIRC TBAR TQUEST -%token CSIZEOF CALIGNOF ARROW_OP CTYPEDEF COFFSETOF +%token CSIZEOF CALIGNOF CTYPEOF ARROW_OP CTYPEDEF COFFSETOF %token INC_OP DEC_OP LEFT_OP RIGHT_OP %token LE_OP GE_OP EQ_OP NE_OP AND_OP OR_OP %token MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN SUB_ASSIGN @@ -307,7 +307,8 @@ extern void yyerror (char *); %type compoundStmt compoundStmtAux compoundStmtRest compoundStmtAuxErr %type expressionStmt selectionStmt iterationStmt jumpStmt iterDefIterationStmt %type stmtErr stmtListErr compoundStmtErr expressionStmtErr -%type iterationStmtErr initializerList initializer ifPred whilePred forPred iterWhilePred +%type iterationStmtErr initializerList typeInitializerList initializer +%type ifPred whilePred forPred iterWhilePred typeInitializer %type designator designatorList designation @@ -794,6 +795,9 @@ primaryExpr | TLPAREN expr TRPAREN { $$ = exprNode_addParens ($1, $2); } | TYPE_NAME_OR_ID { $$ = exprNode_fromIdentifier (coerceId ($1)); } | QEXTENSION { $$ = exprNode_makeError (); } + | TLPAREN { exprChecks_inCompoundStatementExpression (); } + compoundStmt TRPAREN + { exprChecks_leaveCompoundStatementExpression (); $$ = exprNode_compoundStatementExpression ($1, $3); } postfixExpr : primaryExpr @@ -805,7 +809,9 @@ postfixExpr | postfixExpr NotType ARROW_OP newId IsType { $$ = exprNode_arrowAccess ($1, $3, $4); } | postfixExpr INC_OP { $$ = exprNode_postOp ($1, $2); } | postfixExpr DEC_OP { $$ = exprNode_postOp ($1, $2); } - + | TLPAREN typeExpression TRPAREN TLBRACE typeInitializerList optComma TRBRACE + { /* added for C99 */ $$ = exprNode_undefined; /*@i87 no checking */ } + argumentExprList : assignExpr { $$ = exprNodeList_singleton ($1); } | argumentExprList TCOMMA assignExpr { $$ = exprNodeList_push ($1, $3); } @@ -1643,6 +1649,14 @@ initializerList : initializer { $$ = $1; } | initializerList initializer { $$ = exprNode_concat ($1, $2); } +typeInitializerList + : typeInitializer { $$ = $1; } + | typeInitializerList TCOMMA typeInitializer { $$ = exprNode_concat ($1, $3); } + +typeInitializer + : assignExpr { $$ = $1; } + | TLBRACE typeInitializerList optComma TRBRACE { $$ = $2; } + stmtList : stmt { $$ = $1; } | stmtList stmt { $$ = exprNode_concat ($1, $2); } @@ -1871,6 +1885,10 @@ optSemi : | TSEMI { ; } +optComma + : + | TCOMMA { ; } + id : IDENTIFIER @@ -1884,6 +1902,8 @@ newId typeName : TYPE_NAME | TYPE_NAME_OR_ID { $$ = ctype_unknown; } + | CTYPEOF TLPAREN expr TRPAREN { $$ = exprNode_getType ($3); exprNode_free ($3); } + | CTYPEOF TLPAREN typeExpression TRPAREN { $$ = qtype_getType ($3); } %% diff --git a/src/clabstract.c b/src/clabstract.c index 8c2f198..9c4fe20 100644 --- a/src/clabstract.c +++ b/src/clabstract.c @@ -2199,7 +2199,7 @@ void checkModifiesId (uentry ue) } else { - fileloc loc = fileloc_decColumn (g_currentloc, cstring_length (s)); + fileloc loc = fileloc_decColumn (g_currentloc, size_toInt (cstring_length (s))); ret = sRef_undefined; voptgenerror @@ -2275,7 +2275,7 @@ sRef fixStateClausesId (cstring s) /*@unused@*/ uentry ue2; /*@unused@*/ ctype ct; # endif - fileloc loc = fileloc_decColumn (g_currentloc, cstring_length (s)); + fileloc loc = fileloc_decColumn (g_currentloc, size_toInt (cstring_length (s))); ret = sRef_undefined; # if 0 /*drl commenting this out for now diff --git a/src/constraint.c b/src/constraint.c index 605875d..ccdb179 100644 --- a/src/constraint.c +++ b/src/constraint.c @@ -314,7 +314,7 @@ bool constraint_hasMaxSet (constraint c) return FALSE; } -constraint constraint_makeReadSafeExprNode ( exprNode po, exprNode ind) +constraint constraint_makeReadSafeExprNode (exprNode po, exprNode ind) { constraint ret = constraint_makeNew (); diff --git a/src/constraintExpr.c b/src/constraintExpr.c index 1f22b7e..4249d9c 100644 --- a/src/constraintExpr.c +++ b/src/constraintExpr.c @@ -356,7 +356,7 @@ static bool isZeroBinaryOp (constraintExpr expr) } /*@special@*/ -static constraintExpr constraintExpr_alloc (void) /*@post:isnull result->data@*/ +static /*@notnull@*/ constraintExpr constraintExpr_alloc (void) /*@post:isnull result->data@*/ { constraintExpr ret; ret = dmalloc (sizeof (*ret) ); @@ -392,7 +392,7 @@ static constraintExpr constraintExpr_alloc (void) /*@post:isnull result->data@*/ constraintExpr constraintExpr_copy (constraintExpr expr) { constraintExpr ret; - ret = constraintExpr_alloc(); + ret = constraintExpr_alloc (); ret->kind = expr->kind; ret->data = copyExprData (expr->data, expr->kind); diff --git a/src/constraintGeneration.c b/src/constraintGeneration.c index e3c0a1f..6a71ce1 100644 --- a/src/constraintGeneration.c +++ b/src/constraintGeneration.c @@ -40,23 +40,21 @@ /*@access exprNode @*/ -static bool exprNode_handleError(/*@dependent@*/ exprNode p_e); +static /*@truewhennull@*/ bool exprNode_handleError (/*@temp@*/ exprNode p_e); -static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode p_e); +static void exprNode_stmt (/*@temp@*/ /*@temp@*/ exprNode p_e); +static void exprNode_multiStatement (/*@temp@*/ exprNode p_e); -static bool exprNode_isMultiStatement(/*@dependent@*/ exprNode p_e); -static void exprNode_multiStatement (/*@dependent@*/ exprNode p_e); - -static constraintList exprNode_traversTrueEnsuresConstraints (/*@dependent@*/ exprNode p_e); -static constraintList exprNode_traversFalseEnsuresConstraints (/*@dependent@*/ exprNode p_e); +static constraintList exprNode_traversTrueEnsuresConstraints (/*@temp@*/ exprNode p_e); +static constraintList exprNode_traversFalseEnsuresConstraints (/*@temp@*/ exprNode p_e); static void checkArgumentList (/*@out@*/ exprNode p_temp, exprNodeList p_arglist, fileloc p_sequencePoint) /*@modifies p_temp @*/; -static constraintList checkCall (/*@dependent@*/ exprNode p_fcn, exprNodeList p_arglist); +static constraintList checkCall (/*@temp@*/ exprNode p_fcn, exprNodeList p_arglist); -static bool exprNode_isUnhandled (/*@dependent@*/ /*@observer@*/ exprNode e) +static bool exprNode_isUnhandled (/*@temp@*/ /*@observer@*/ exprNode e) { - llassert( exprNode_isDefined(e) ); + llassert(exprNode_isDefined(e)); switch (e->kind) { case XPR_INITBLOCK: @@ -82,7 +80,7 @@ static bool exprNode_isUnhandled (/*@dependent@*/ /*@observer@*/ exprNode e) case XPR_FTCASE: case XPR_CASE: case XPR_NODE: - DPRINTF((message ("Warning current constraint generation does not handle expression %s", exprNode_unparse(e)) ) ); + DPRINTF((message ("Warning current constraint generation does not handle expression %s", exprNode_unparse(e)))); return TRUE; /*@notreached@*/ break; @@ -94,37 +92,32 @@ static bool exprNode_isUnhandled (/*@dependent@*/ /*@observer@*/ exprNode e) return FALSE; } -bool exprNode_handleError( exprNode e) +bool exprNode_handleError (exprNode e) { - if (exprNode_isError (e) || exprNode_isUnhandled(e) ) + if (exprNode_isError (e) || exprNode_isUnhandled (e)) { - static /*@only@*/ cstring error = cstring_undefined; - - if (!cstring_isDefined (error)) - { - error = cstring_makeLiteral (""); - } - - /*@-unqualifiedtrans*/ return TRUE; /*@=unqualifiedtrans*/ + return TRUE; } + return FALSE; } -bool /*@alt void@*/ exprNode_generateConstraints (/*@dependent@*/ exprNode e) +/* evans 2002-03-2 - parameter was dependent */ +bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode e) { - if (exprNode_isError (e) ) + if (exprNode_isError (e)) return FALSE; - if (exprNode_isUnhandled (e) ) + if (exprNode_isUnhandled (e)) { - DPRINTF((message("Warning ignoring %s", exprNode_unparse (e) ) ) ); + DPRINTF((message("Warning ignoring %s", exprNode_unparse (e)))); return FALSE; } - DPRINTF((message ("exprNode_generateConstraints Analysising %s at %s", exprNode_unparse( e), - fileloc_unparse(exprNode_getfileloc(e) ) ) ) ); + DPRINTF((message ("exprNode_generateConstraints Analysising %s at %s", exprNode_unparse(e), + fileloc_unparse(exprNode_getfileloc(e))))); - if (exprNode_isMultiStatement ( e) ) + if (exprNode_isMultiStatement (e)) { exprNode_multiStatement(e); } @@ -150,45 +143,17 @@ bool /*@alt void@*/ exprNode_generateConstraints (/*@dependent@*/ exprNode e) constraintList_free(c); } - DPRINTF ((message ("e->requiresConstraints %s", constraintList_printDetailed (e->requiresConstraints) ) ) ); - return FALSE; -} - - -/* handles multiple statements */ - -bool exprNode_isMultiStatement(exprNode e) -{ -if (exprNode_handleError (e) != NULL) + DPRINTF ((message ("e->requiresConstraints %s", constraintList_printDetailed (e->requiresConstraints)))); return FALSE; - - switch (e->kind) - { - case XPR_FOR: - case XPR_FORPRED: - case XPR_IF: - case XPR_IFELSE: - case XPR_WHILE: - case XPR_WHILEPRED: - case XPR_DOWHILE: - case XPR_BLOCK: - case XPR_STMT: - case XPR_STMTLIST: - case XPR_SWITCH: - return TRUE; - default: - return FALSE; - } - } -static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) +static void exprNode_stmt (/*@temp@*/ exprNode e) { exprNode snode; fileloc loc; cstring s; - if (exprNode_isError(e) ) + if (exprNode_isError(e)) { return; } @@ -196,15 +161,15 @@ static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) /*e->requiresConstraints = constraintList_makeNew(); e->ensuresConstraints = constraintList_makeNew(); */ - DPRINTF(( "expNode_stmt: STMT:") ); + DPRINTF(("expNode_stmt: STMT:")); s = exprNode_unparse(e); - DPRINTF (( message("exprNode_stmt: STMT: %s ", s) ) ); + DPRINTF ((message("exprNode_stmt: STMT: %s ", s))); if (e->kind == XPR_INIT) { constraintList tempList; - DPRINTF (("Init") ); - DPRINTF ((message ("%s ", exprNode_unparse (e)) ) ); + DPRINTF (("Init")); + DPRINTF ((message ("%s ", exprNode_unparse (e)))); loc = exprNode_getNextSequencePoint(e); /* reduces to an expression */ exprNode_exprTraverse (e, FALSE, FALSE, loc); fileloc_free(loc); @@ -238,8 +203,8 @@ static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) if (e->kind != XPR_STMT) { - DPRINTF (("Not Stmt") ); - DPRINTF ((message ("%s ", exprNode_unparse (e)) ) ); + DPRINTF (("Not Stmt")); + DPRINTF ((message ("%s ", exprNode_unparse (e)))); if (exprNode_isMultiStatement (e)) { @@ -256,8 +221,8 @@ static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) return; } - DPRINTF (("Stmt") ); - DPRINTF ((message ("%s ", exprNode_unparse (e)) ) ); + DPRINTF (("Stmt")); + DPRINTF ((message ("%s ", exprNode_unparse (e)))); snode = exprData_getUopNode (e->edata); @@ -285,7 +250,7 @@ static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) DPRINTF ((message ("smtlist constraints are: pre: %s \n and \t post %s\n", constraintList_print(e->requiresConstraints), - constraintList_print(e->ensuresConstraints) ) ) ); + constraintList_print(e->ensuresConstraints)))); return; } @@ -293,7 +258,7 @@ static void exprNode_stmt ( /*@dependent@*/ /*@temp@*/ exprNode e) static void exprNode_stmtList (/*@dependent@*/ exprNode e) { exprNode stmt1, stmt2; - if (exprNode_isError (e) ) + if (exprNode_isError (e)) { return; } @@ -309,24 +274,24 @@ static void exprNode_stmtList (/*@dependent@*/ exprNode e) return; } llassert (e->kind == XPR_STMTLIST); - DPRINTF(( "exprNode_stmtList STMTLIST:") ); - DPRINTF ((cstring_toCharsSafe (exprNode_unparse(e)) ) ); + DPRINTF(("exprNode_stmtList STMTLIST:")); + DPRINTF ((cstring_toCharsSafe (exprNode_unparse(e)))); stmt1 = exprData_getPairA (e->edata); stmt2 = exprData_getPairB (e->edata); - DPRINTF(("exprNode_stmtlist ") ); - DPRINTF ((message("XW%s | %s", exprNode_unparse(stmt1), exprNode_unparse(stmt2) ) ) ); + DPRINTF(("exprNode_stmtlist ")); + DPRINTF ((message("XW%s | %s", exprNode_unparse(stmt1), exprNode_unparse(stmt2)))); exprNode_stmt (stmt1); - DPRINTF(("\nstmt after stmtList call " )); + DPRINTF(("\nstmt after stmtList call ")); exprNode_stmt (stmt2); - exprNode_mergeResolve (e, stmt1, stmt2 ); + exprNode_mergeResolve (e, stmt1, stmt2); DPRINTF ((message ("smtlist constraints are: pre: %s \n and \t post %s\n", constraintList_print(e->requiresConstraints), - constraintList_print(e->ensuresConstraints) ) ) ); + constraintList_print(e->ensuresConstraints)))); return; } @@ -334,30 +299,30 @@ static exprNode doIf (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode test, { constraintList temp; - DPRINTF ((message ("doIf: %s ", exprNode_unparse(e) ) ) ); + DPRINTF ((message ("doIf: %s ", exprNode_unparse(e)))); - llassert(exprNode_isDefined(test) ); - llassert (exprNode_isDefined (e) ); - llassert (exprNode_isDefined (body) ); + llassert(exprNode_isDefined(test)); + llassert (exprNode_isDefined (e)); + llassert (exprNode_isDefined (body)); - DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints) ) )); + DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints)))); - DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints) ) )); + DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints)))); - DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->trueEnsuresConstraints) ) )); + DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->trueEnsuresConstraints)))); - DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->falseEnsuresConstraints) ) )); + DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->falseEnsuresConstraints)))); - DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->ensuresConstraints) ) )); + DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->ensuresConstraints)))); - DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->ensuresConstraints) ) )); + DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->ensuresConstraints)))); - DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->trueEnsuresConstraints) ) )); + DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->trueEnsuresConstraints)))); - DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->falseEnsuresConstraints) ) )); + DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(test), constraintList_printDetailed(test->falseEnsuresConstraints)))); @@ -376,9 +341,9 @@ static exprNode doIf (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode test, test->trueEnsuresConstraints = constraintList_substituteFreeTarget(test->trueEnsuresConstraints, test->ensuresConstraints); - DPRINTF ((message ("doIf: test ensures %s ", constraintList_print(test->ensuresConstraints) ) ) ); + DPRINTF ((message ("doIf: test ensures %s ", constraintList_print(test->ensuresConstraints)))); - DPRINTF ((message ("doIf: test true ensures %s ", constraintList_print(test->trueEnsuresConstraints) ) ) ); + DPRINTF ((message ("doIf: test true ensures %s ", constraintList_print(test->trueEnsuresConstraints)))); constraintList_free(e->requiresConstraints); @@ -396,14 +361,14 @@ static exprNode doIf (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode test, constraintList_free(e->ensuresConstraints); e->ensuresConstraints = constraintList_copy (test->ensuresConstraints); - if (exprNode_mayEscape (body) ) + if (exprNode_mayEscape (body)) { - DPRINTF (( message("doIf: the if statement body %s returns or exits", exprNode_unparse(body) ) )); + DPRINTF ((message("doIf: the if statement body %s returns or exits", exprNode_unparse(body)))); e->ensuresConstraints = constraintList_mergeEnsuresFreeFirst (e->ensuresConstraints, test->falseEnsuresConstraints); } - DPRINTF ((message ("doIf: if requiers %s ", constraintList_print(e->requiresConstraints) ) ) ); + DPRINTF ((message ("doIf: if requiers %s ", constraintList_print(e->requiresConstraints)))); return e; } @@ -418,12 +383,15 @@ static exprNode doIf (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode test, exprNode_traversFalseEnsuresConstraints have all been run */ - static exprNode doIfElse (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode p, /*@dependent@*/ exprNode trueBranch, /*@dependent@*/ exprNode falseBranch) { constraintList c1, cons, t, t2, f, f2; - DPRINTF ((message ("doIfElse: %s ", exprNode_unparse(e) ) ) ); + llassert (exprNode_isDefined (e)); + llassert (exprNode_isDefined (p)); + llassert (exprNode_isDefined (trueBranch)); + llassert (exprNode_isDefined (falseBranch)); + DPRINTF ((message ("doIfElse: %s ", exprNode_unparse(e)))); /* do requires clauses */ c1 = constraintList_copy (p->ensuresConstraints); @@ -434,7 +402,7 @@ static exprNode doIfElse (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode p, cons = constraintList_reflectChanges(falseBranch->requiresConstraints, p->falseEnsuresConstraints); cons = constraintList_reflectChangesFreePre (cons, c1); - constraintList_free(e->requiresConstraints); + constraintList_free (e->requiresConstraints); e->requiresConstraints = constraintList_mergeRequiresFreeFirst (t, cons); e->requiresConstraints = constraintList_mergeRequiresFreeFirst (e->requiresConstraints, p->requiresConstraints); @@ -463,15 +431,15 @@ static exprNode doIfElse (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode p, constraintList_free(cons); constraintList_free(c1); - DPRINTF ((message ("doIfElse: if requires %q ", constraintList_print(e->requiresConstraints) ) ) ); - DPRINTF ((message ("doIfElse: if ensures %q ", constraintList_print(e->ensuresConstraints) ) ) ); + DPRINTF ((message ("doIfElse: if requires %q ", constraintList_print(e->requiresConstraints)))); + DPRINTF ((message ("doIfElse: if ensures %q ", constraintList_print(e->ensuresConstraints)))); return e; } static exprNode doWhile (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode test, /*@dependent@*/ exprNode body) { - DPRINTF ((message ("doWhile: %s ", exprNode_unparse(e) ) ) ); + DPRINTF ((message ("doWhile: %s ", exprNode_unparse(e)))); return doIf (e, test, body); } @@ -483,28 +451,28 @@ static exprNode doWhile (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode tes sRefSet_elements (s, el) { - if (sRef_isFixedArray(el) ) + if (sRef_isFixedArray(el)) { long int size; DPRINTF((message("%s is a fixed array", - sRef_unparse(el)) ) ); + sRef_unparse(el)))); size = sRef_getArraySize(el); DPRINTF((message("%s is a fixed array with size %d", - sRef_unparse(el), (int)size) ) ); + sRef_unparse(el), (int)size))); con = constraint_makeSRefSetBufferSize (el, (size - 1)); ret = constraintList_add(ret, con); } else { DPRINTF((message("%s is not a fixed array", - sRef_unparse(el)) ) ); + sRef_unparse(el)))); - if (sRef_isExternallyVisible (el) ) + if (sRef_isExternallyVisible (el)) { /* DPRINTF((message("%s is externally visible", - sRef_unparse(el) ) )); + sRef_unparse(el)))); con = constraint_makeSRefWriteSafeInt(el, 0); ret = constraintList_add(ret, con); @@ -517,8 +485,8 @@ static exprNode doWhile (/*@returned@*/ exprNode e, /*@dependent@*/ exprNode tes } end_sRefSet_elements ; - DPRINTF(( message("constraintList_makeFixedArrayConstraints returning %s", - constraintList_print(ret) ) )); + DPRINTF((message("constraintList_makeFixedArrayConstraints returning %s", + constraintList_print(ret)))); return ret; } @@ -541,17 +509,22 @@ static void doFor (/*@dependent@*/ exprNode e, /*@dependent@*/ exprNode forPred, exprNode init, test, inc; /* merge the constraints: modle as if statement */ - /* init - if (test) - for body - inc */ - init = exprData_getTripleInit (forPred->edata); - test = exprData_getTripleTest (forPred->edata); - inc = exprData_getTripleInc (forPred->edata); + /* init + if (test) + for body + inc */ - if (( (exprNode_isError (test) /*|| (exprNode_isError(init) )*/ ) || (exprNode_isError (inc) ) ) ) + llassert (exprNode_isDefined (e)); + llassert (exprNode_isDefined (forPred)); + llassert (exprNode_isDefined (forBody)); + + init = exprData_getTripleInit (forPred->edata); + test = exprData_getTripleTest (forPred->edata); + inc = exprData_getTripleInc (forPred->edata); + + if (((exprNode_isError (test) /*|| (exprNode_isError(init))*/) || (exprNode_isError (inc)))) { - DPRINTF ((message ("strange for statement:%s, ignoring it", exprNode_unparse(e) ) ) ); + DPRINTF ((message ("strange for statement:%s, ignoring it", exprNode_unparse(e)))); return; } @@ -564,12 +537,12 @@ static void doFor (/*@dependent@*/ exprNode e, /*@dependent@*/ exprNode forPred, if (!forBody->canBreak) { - e->ensuresConstraints = constraintList_addListFree(e->ensuresConstraints, constraintList_copy(forPred->ensuresConstraints) ); - e->ensuresConstraints = constraintList_addListFree(e->ensuresConstraints,constraintList_copy( test->falseEnsuresConstraints)); + e->ensuresConstraints = constraintList_addListFree(e->ensuresConstraints, constraintList_copy(forPred->ensuresConstraints)); + e->ensuresConstraints = constraintList_addListFree(e->ensuresConstraints,constraintList_copy(test->falseEnsuresConstraints)); } else { - DPRINTF(("Can break") ); + DPRINTF(("Can break")); } } @@ -593,11 +566,11 @@ exprNode_doGenerateConstraintSwitch { exprNode stmt, stmtList; - DPRINTF(( message("exprNode_doGenerateConstraintSwitch: (switch %s) %s", + DPRINTF((message("exprNode_doGenerateConstraintSwitch: (switch %s) %s", exprNode_unparse(switchExpr), exprNode_unparse(body) - ) )); + ))); - if (exprNode_isError(body) ) + if (exprNode_isError(body)) { *currentRequires = constraintList_makeNew (); *currentEnsures = constraintList_makeNew (); @@ -609,10 +582,10 @@ exprNode_doGenerateConstraintSwitch /*@=onlytrans@*/ } - if (body->kind != XPR_STMTLIST ) + if (body->kind != XPR_STMTLIST) { DPRINTF((message("exprNode_doGenerateConstraintSwitch: non stmtlist: %s", - exprNode_unparse(body) ))); + exprNode_unparse(body)))); stmt = body; stmtList = exprNode_undefined; stmt = exprNode_makeDependent(stmt); @@ -627,14 +600,14 @@ exprNode_doGenerateConstraintSwitch } DPRINTF((message("exprNode_doGenerateConstraintSwitch: stmtlist: %s stmt: %s", - exprNode_unparse(stmtList), exprNode_unparse(stmt) ) - )); + exprNode_unparse(stmtList), exprNode_unparse(stmt)) + )); exprNode_doGenerateConstraintSwitch (switchExpr, stmtList, currentRequires, currentEnsures, - savedRequires, savedEnsures ); + savedRequires, savedEnsures); - if (exprNode_isError(stmt) ) + if (exprNode_isError(stmt)) /*@-onlytrans@*/ return; /*@=onlytrans@*/ @@ -643,13 +616,13 @@ exprNode_doGenerateConstraintSwitch switchExpr = exprNode_makeDependent (switchExpr); - if (! exprNode_isCaseMarker(stmt) ) + if (! exprNode_isCaseMarker(stmt)) { constraintList temp; - DPRINTF (( message("Got normal statement %s (requires %s ensures %s)", exprNode_unparse(stmt), - constraintList_unparse(stmt->requiresConstraints), constraintList_unparse(stmt->ensuresConstraints) ) )); + DPRINTF ((message("Got normal statement %s (requires %s ensures %s)", exprNode_unparse(stmt), + constraintList_unparse(stmt->requiresConstraints), constraintList_unparse(stmt->ensuresConstraints)))); temp = constraintList_reflectChanges (stmt->requiresConstraints, *currentEnsures); @@ -663,18 +636,18 @@ exprNode_doGenerateConstraintSwitch *currentEnsures = constraintList_mergeEnsuresFreeFirst (*currentEnsures, stmt->ensuresConstraints); - DPRINTF(( message("returning from exprNode_doGenerateConstraintSwitch: (switch %s) %s currentRequires:" + DPRINTF((message("returning from exprNode_doGenerateConstraintSwitch: (switch %s) %s currentRequires:" "%s currentEnsures:%s", exprNode_unparse(switchExpr), exprNode_unparse(body), constraintList_print(*currentRequires), constraintList_print(*currentEnsures) - ) )); + ))); /*@-onlytrans@*/ return; /*@=onlytrans@*/ } - if (exprNode_isCaseMarker(stmt) && exprNode_mustEscape(stmtList) ) + if (exprNode_isCaseMarker(stmt) && exprNode_mustEscape(stmtList)) { /* ** merge current and saved constraint with Logical Or... @@ -684,19 +657,19 @@ exprNode_doGenerateConstraintSwitch constraintList temp; constraint con; - DPRINTF (( message("Got case marker") )); + DPRINTF ((message("Got case marker"))); if (constraintList_isUndefined(*savedEnsures) && - constraintList_isUndefined(*savedRequires) ) + constraintList_isUndefined(*savedRequires)) { - llassert(constraintList_isUndefined(*savedEnsures) ); - llassert(constraintList_isUndefined(*savedRequires) ); + llassert(constraintList_isUndefined(*savedEnsures)); + llassert(constraintList_isUndefined(*savedRequires)); *savedEnsures = constraintList_copy(*currentEnsures); *savedRequires = constraintList_copy(*currentRequires); } else { - DPRINTF (( message("Doing logical or") )); + DPRINTF ((message("Doing logical or"))); temp = constraintList_logicalOr (*savedEnsures, *currentEnsures); constraintList_free (*savedEnsures); *savedEnsures = temp; @@ -705,7 +678,7 @@ exprNode_doGenerateConstraintSwitch } con = constraint_makeEnsureEqual (switchExpr, exprData_getSingle - (stmt->edata), exprNode_getfileloc(stmt) ); + (stmt->edata), exprNode_getfileloc(stmt)); constraintList_free(*currentEnsures); @@ -714,15 +687,15 @@ exprNode_doGenerateConstraintSwitch constraintList_free(*currentRequires); *currentRequires = constraintList_makeNew(); - DPRINTF(( message("exprNode_doGenerateConstraintSwitch: (switch %s) %s savedRequires:" + DPRINTF((message("exprNode_doGenerateConstraintSwitch: (switch %s) %s savedRequires:" "%s savedEnsures:%s", exprNode_unparse(switchExpr), exprNode_unparse(body), constraintList_print(*savedRequires), constraintList_print(*savedEnsures) - ) )); + ))); } - else if (exprNode_isCaseMarker(stmt) ) + else if (exprNode_isCaseMarker(stmt)) /* prior case has no break. */ { /* @@ -736,16 +709,16 @@ exprNode_doGenerateConstraintSwitch constraintList ensuresTemp; - DPRINTF (( message("Got case marker with no prior break") )); + DPRINTF ((message("Got case marker with no prior break"))); con = constraint_makeEnsureEqual (switchExpr, exprData_getSingle - (stmt->edata), exprNode_getfileloc(stmt) ); + (stmt->edata), exprNode_getfileloc(stmt)); ensuresTemp = constraintList_makeNew(); ensuresTemp = constraintList_add (ensuresTemp, con); - if (exprNode_isError(stmtList) ) + if (exprNode_isError(stmtList)) { constraintList_free(*currentEnsures); @@ -776,19 +749,18 @@ exprNode_doGenerateConstraintSwitch BADEXIT; } - DPRINTF(( message("returning from exprNode_doGenerateConstraintSwitch: (switch %s) %s currentRequires:" + DPRINTF((message("returning from exprNode_doGenerateConstraintSwitch: (switch %s) %s currentRequires:" "%s currentEnsures:%s", exprNode_unparse(switchExpr), exprNode_unparse(body), constraintList_print(*currentRequires), constraintList_print(*currentEnsures) - ) )); + ))); /*@-onlytrans@*/ return; /*@=onlytrans@*/ - } -static void exprNode_generateConstraintSwitch (exprNode switchStmt) +static void exprNode_generateConstraintSwitch (/*@notnull@*/ exprNode switchStmt) { constraintList constraintsRequires; constraintList constraintsEnsures; @@ -798,13 +770,18 @@ static void exprNode_generateConstraintSwitch (exprNode switchStmt) exprNode body; exprNode switchExpr; - switchExpr = exprData_getPairA(switchStmt->edata); - body = exprData_getPairB(switchStmt->edata); + switchExpr = exprData_getPairA (switchStmt->edata); + body = exprData_getPairB (switchStmt->edata); + + if (!exprNode_isDefined (body)) + { + return; + } /*@i22*/ - DPRINTF((message("") )); + DPRINTF((message(""))); - if ( body->kind == XPR_BLOCK) + if (body->kind == XPR_BLOCK) body = exprData_getSingle(body->edata); /* @@ -829,7 +806,7 @@ static void exprNode_generateConstraintSwitch (exprNode switchStmt) constraintList_free(switchStmt->requiresConstraints); constraintList_free(switchStmt->ensuresConstraints); - if (constraintList_isDefined(constraintsEnsures) && constraintList_isDefined(constraintsRequires) ) + if (constraintList_isDefined(constraintsEnsures) && constraintList_isDefined(constraintsRequires)) { switchStmt->ensuresConstraints = constraintList_logicalOr(constraintsEnsures, lastEnsures); switchStmt->requiresConstraints = constraintList_mergeRequires(constraintsRequires, lastRequires); @@ -846,21 +823,21 @@ static void exprNode_generateConstraintSwitch (exprNode switchStmt) constraintList_free (lastEnsures); DPRINTF(((message(" exprNode_generateConstraintSwitch returning requires: %s and ensures %s", - constraintList_print( switchStmt->requiresConstraints), - constraintList_print( switchStmt->ensuresConstraints) - ) - ) )); + constraintList_print(switchStmt->requiresConstraints), + constraintList_print(switchStmt->ensuresConstraints) + ) + ))); } -static exprNode doSwitch (/*@returned@*/ exprNode e) +static exprNode doSwitch (/*@returned@*/ /*@notnull@*/ exprNode e) { exprNode body; exprData data; data = e->edata; - DPRINTF (( message ("doSwitch for: switch (%s) %s", + DPRINTF ((message ("doSwitch for: switch (%s) %s", exprNode_unparse (exprData_getPairA (data)), - exprNode_unparse (exprData_getPairB (data))) )); + exprNode_unparse (exprData_getPairB (data))))); body = exprData_getPairB (data); exprNode_generateConstraintSwitch (e); @@ -879,8 +856,8 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) constraintList temp; - DPRINTF((message ("exprNode_multistatement Analysising %s %s at", exprNode_unparse( e), - fileloc_unparse(exprNode_getfileloc(e) ) ) ) ); + DPRINTF((message ("exprNode_multistatement Analysising %s %s at", exprNode_unparse(e), + fileloc_unparse(exprNode_getfileloc(e))))); if (exprNode_handleError (e)) { @@ -908,12 +885,12 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) break; case XPR_FORPRED: - exprNode_generateConstraints (exprData_getTripleInit (data) ); + exprNode_generateConstraints (exprData_getTripleInit (data)); test = exprData_getTripleTest (data); exprNode_exprTraverse (test,FALSE, FALSE, exprNode_loc(e)); - exprNode_generateConstraints (exprData_getTripleInc (data) ); + exprNode_generateConstraints (exprData_getTripleInc (data)); - if (!exprNode_isError(test) ) + if (!exprNode_isError(test)) { constraintList temp2; temp2 = test->trueEnsuresConstraints; @@ -938,8 +915,8 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) break; case XPR_IF: - DPRINTF(( "IF:") ); - DPRINTF ((exprNode_unparse(e) ) ); + DPRINTF(("IF:")); + DPRINTF ((exprNode_unparse(e))); e1 = exprData_getPairA (data); e2 = exprData_getPairB (data); @@ -952,6 +929,7 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) case XPR_IFELSE: DPRINTF(("Starting IFELSE")); p = exprData_getTriplePred (data); + trueBranch = exprData_getTripleTrue (data); falseBranch = exprData_getTripleFalse (data); @@ -960,6 +938,7 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) exprNode_generateConstraints (trueBranch); exprNode_generateConstraints (falseBranch); + llassert (exprNode_isDefined (p)); temp = p->ensuresConstraints; p->ensuresConstraints = exprNode_traversEnsuresConstraints (p); constraintList_free(temp); @@ -976,8 +955,8 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) p->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(p); constraintList_free(temp); - e = doIfElse (e, p, trueBranch, falseBranch); - DPRINTF(("Done IFELSE") ); + e = doIfElse (e, p, trueBranch, falseBranch); + DPRINTF(("Done IFELSE")); break; case XPR_DOWHILE: @@ -985,11 +964,11 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) e2 = (exprData_getPairB (data)); e1 = (exprData_getPairA (data)); - DPRINTF((message ("do { %s } while (%s)", exprNode_unparse(e2), exprNode_unparse(e1) ) )); + DPRINTF((message ("do { %s } while (%s)", exprNode_unparse(e2), exprNode_unparse(e1)))); exprNode_generateConstraints (e2); exprNode_generateConstraints (e1); e = exprNode_copyConstraints (e, e2); - DPRINTF ((message ("e = %s ", constraintList_print(e->requiresConstraints) ) )); + DPRINTF ((message ("e = %s ", constraintList_print(e->requiresConstraints)))); break; @@ -997,10 +976,10 @@ void exprNode_multiStatement (/*@dependent@*/ exprNode e) exprNode_generateConstraints (exprData_getSingle (data)); constraintList_free(e->requiresConstraints); - e->requiresConstraints = constraintList_copy ((exprData_getSingle (data))->requiresConstraints ); + e->requiresConstraints = constraintList_copy ((exprData_getSingle (data))->requiresConstraints); constraintList_free(e->ensuresConstraints); - e->ensuresConstraints = constraintList_copy ((exprData_getSingle (data))->ensuresConstraints ); + e->ensuresConstraints = constraintList_copy ((exprData_getSingle (data))->ensuresConstraints); break; case XPR_SWITCH: @@ -1024,36 +1003,36 @@ static bool lltok_isBoolean_Op (lltok tok) I don't want to violate the abstraction maybe this should go in lltok.c */ - if (lltok_isEq_Op (tok) ) + if (lltok_isEq_Op (tok)) { return TRUE; } - if (lltok_isAnd_Op (tok) ) + if (lltok_isAnd_Op (tok)) { return TRUE; } - if (lltok_isOr_Op (tok) ) + if (lltok_isOr_Op (tok)) { return TRUE; } - if (lltok_isGt_Op (tok) ) + if (lltok_isGt_Op (tok)) { return TRUE; } - if (lltok_isLt_Op (tok) ) + if (lltok_isLt_Op (tok)) { return TRUE; } - if (lltok_isLe_Op (tok) ) + if (lltok_isLe_Op (tok)) { return TRUE; } - if (lltok_isGe_Op (tok) ) + if (lltok_isGe_Op (tok)) { return TRUE; } @@ -1080,14 +1059,14 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b /* arithmetic tests */ - if (lltok_isEq_Op (tok) ) + if (lltok_isEq_Op (tok)) { cons = constraint_makeEnsureEqual (t1, t2, sequencePoint); e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons); } - if (lltok_isLt_Op (tok) ) + if (lltok_isLt_Op (tok)) { cons = constraint_makeEnsureLessThan (t1, t2, sequencePoint); e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons); @@ -1095,7 +1074,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b e->falseEnsuresConstraints = constraintList_add(e->falseEnsuresConstraints, cons); } - if (lltok_isGe_Op (tok) ) + if (lltok_isGe_Op (tok)) { cons = constraint_makeEnsureGreaterThanEqual (t1, t2, sequencePoint); e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons); @@ -1104,7 +1083,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b e->falseEnsuresConstraints = constraintList_add(e->falseEnsuresConstraints, cons); } - if (lltok_isGt_Op (tok) ) + if (lltok_isGt_Op (tok)) { cons = constraint_makeEnsureGreaterThan (t1, t2, sequencePoint); e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons); @@ -1112,7 +1091,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b e->falseEnsuresConstraints = constraintList_add(e->falseEnsuresConstraints, cons); } - if (lltok_isLe_Op (tok) ) + if (lltok_isLe_Op (tok)) { cons = constraint_makeEnsureLessThanEqual (t1, t2, sequencePoint); e->trueEnsuresConstraints = constraintList_add(e->trueEnsuresConstraints, cons); @@ -1123,7 +1102,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b /* Logical operations */ - if (lltok_isAnd_Op (tok) ) + if (lltok_isAnd_Op (tok)) { /* true ensures */ tempList = constraintList_copy (t1->trueEnsuresConstraints); @@ -1140,7 +1119,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b /* evans - was constraintList_addList - memory leak detected by splint */ e->falseEnsuresConstraints = constraintList_addListFree (e->falseEnsuresConstraints, tempList); } - else if (lltok_isOr_Op (tok) ) + else if (lltok_isOr_Op (tok)) { /* false ensures */ tempList = constraintList_copy (t1->falseEnsuresConstraints); @@ -1160,7 +1139,7 @@ static void exprNode_booleanTraverse (/*@dependent@*/ exprNode e, /*@unused@*/ b } else { - DPRINTF((message("%s is not a boolean operation", lltok_unparse(tok) ) )); + DPRINTF((message("%s is not a boolean operation", lltok_unparse(tok)))); } } @@ -1174,13 +1153,13 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob constraintList temp; - if (exprNode_isError(e) ) + if (exprNode_isError(e)) { return; } - DPRINTF((message ("exprNode_exprTraverset Analysising %s %s at", exprNode_unparse( e), - fileloc_unparse(exprNode_getfileloc(e) ) ) ) ); + DPRINTF((message ("exprNode_exprTraverset Analysising %s %s at", exprNode_unparse(e), + fileloc_unparse(exprNode_getfileloc(e))))); /*e->requiresConstraints = constraintList_makeNew(); e->ensuresConstraints = constraintList_makeNew(); @@ -1188,7 +1167,7 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob e->falseEnsuresConstraints = constraintList_makeNew();; */ - if (exprNode_isUnhandled (e) ) + if (exprNode_isUnhandled (e)) { return; } @@ -1207,17 +1186,17 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_FETCH: - if (definatelv ) + if (definatelv) { - t1 = (exprData_getPairA (data) ); - t2 = (exprData_getPairB (data) ); + t1 = (exprData_getPairA (data)); + t2 = (exprData_getPairB (data)); cons = constraint_makeWriteSafeExprNode (t1, t2); } else { - t1 = (exprData_getPairA (data) ); - t2 = (exprData_getPairB (data) ); - cons = constraint_makeReadSafeExprNode (t1, t2 ); + t1 = (exprData_getPairA (data)); + t2 = (exprData_getPairB (data)); + cons = constraint_makeReadSafeExprNode (t1, t2); } e->requiresConstraints = constraintList_add(e->requiresConstraints, cons); @@ -1253,13 +1232,13 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob /* DPRINTF(((message("initialization: %s = %s", exprNode_unparse(lhs), exprNode_unparse(t2) - ) - ) )); */ + ) + ))); */ - exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint ); + exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint); /* this test is nessecary because some expressions generate a null expression node. function pointer do that -- drl */ - if ((!exprNode_isError (e)) && (!exprNode_isError(t2)) ) + if ((!exprNode_isError (e)) && (!exprNode_isError(t2))) { cons = constraint_makeEnsureEqual (e, t2, sequencePoint); e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons); @@ -1270,11 +1249,11 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_ASSIGN: t1 = exprData_getOpA (data); t2 = exprData_getOpB (data); - exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint ); - exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint ); + exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint); + exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint); /* this test is nessecary because some expressions generate a null expression node. function pointer do that -- drl */ - if ((!exprNode_isError (t1)) && (!exprNode_isError(t2)) ) + if ((!exprNode_isError (t1)) && (!exprNode_isError(t2))) { cons = constraint_makeEnsureEqual (t1, t2, sequencePoint); e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons); @@ -1283,32 +1262,31 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_OP: t1 = exprData_getOpA (data); t2 = exprData_getOpB (data); - tok = exprData_getOpTok (data); - + tok = exprData_getOpTok (data); if (tok.tok == ADD_ASSIGN) { - exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint ); - exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint ); + exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint); + exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint); - cons = constraint_makeAddAssign (t1, t2, sequencePoint ); + cons = constraint_makeAddAssign (t1, t2, sequencePoint); e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons); } else if (tok.tok == SUB_ASSIGN) { - exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint ); - exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint ); + exprNode_exprTraverse (t1, TRUE, definaterv, sequencePoint); + exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint); - cons = constraint_makeSubtractAssign (t1, t2, sequencePoint ); + cons = constraint_makeSubtractAssign (t1, t2, sequencePoint); e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons); } else { - exprNode_exprTraverse (t1, definatelv, definaterv, sequencePoint ); - exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (t1, definatelv, definaterv, sequencePoint); + exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint); } - if (lltok_isBoolean_Op (tok) ) + if (lltok_isBoolean_Op (tok)) exprNode_booleanTraverse (e, definatelv, definaterv, sequencePoint); break; @@ -1328,23 +1306,23 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_CALL: fcn = exprData_getFcn(data); - exprNode_exprTraverse (fcn, definatelv, definaterv, sequencePoint ); - DPRINTF ((message ("Got call that %s ( %s) ", exprNode_unparse(fcn), exprNodeList_unparse (exprData_getArgs (data) ) ) ) ); + exprNode_exprTraverse (fcn, definatelv, definaterv, sequencePoint); + DPRINTF ((message ("Got call that %s (%s) ", exprNode_unparse(fcn), exprNodeList_unparse (exprData_getArgs (data))))); fcn->requiresConstraints = constraintList_addListFree (fcn->requiresConstraints, - checkCall (fcn, exprData_getArgs (data) ) ); + checkCall (fcn, exprData_getArgs (data) )); fcn->ensuresConstraints = constraintList_addListFree (fcn->ensuresConstraints, - exprNode_getPostConditions(fcn, exprData_getArgs (data),e ) ); + exprNode_getPostConditions(fcn, exprData_getArgs (data),e )); - t1 = exprNode_createNew (exprNode_getType (e) ); + t1 = exprNode_createNew (exprNode_getType (e)); checkArgumentList (t1, exprData_getArgs(data), sequencePoint); exprNode_mergeResolve (e, t1, fcn); exprNode_free(t1); break; case XPR_RETURN: - exprNode_exprTraverse (exprData_getSingle (data), definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (exprData_getSingle (data), definatelv, definaterv, sequencePoint); break; case XPR_NULLRETURN: @@ -1353,11 +1331,11 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_FACCESS: - exprNode_exprTraverse (exprData_getFieldNode (data), definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (exprData_getFieldNode (data), definatelv, definaterv, sequencePoint); break; case XPR_ARROW: - exprNode_exprTraverse (exprData_getFieldNode (data), definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (exprData_getFieldNode (data), definatelv, definaterv, sequencePoint); break; case XPR_STRINGLITERAL: @@ -1371,23 +1349,23 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob case XPR_PREOP: t1 = exprData_getUopNode(data); tok = (exprData_getUopTok (data)); - exprNode_exprTraverse (t1, definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (t1, definatelv, definaterv, sequencePoint); /*handle * pointer access */ - if (lltok_isInc_Op (tok) ) + if (lltok_isInc_Op (tok)) { DPRINTF(("doing ++(var)")); t1 = exprData_getUopNode (data); - cons = constraint_makeMaxSetSideEffectPostIncrement (t1, sequencePoint ); + cons = constraint_makeMaxSetSideEffectPostIncrement (t1, sequencePoint); e->ensuresConstraints = constraintList_add (e->ensuresConstraints, cons); } - else if (lltok_isDec_Op (tok) ) + else if (lltok_isDec_Op (tok)) { DPRINTF(("doing --(var)")); t1 = exprData_getUopNode (data); - cons = constraint_makeMaxSetSideEffectPostDecrement (t1, sequencePoint ); + cons = constraint_makeMaxSetSideEffectPostDecrement (t1, sequencePoint); e->ensuresConstraints = constraintList_add (e->ensuresConstraints, cons); } - else if (lltok_isMult( tok ) ) + else if (lltok_isMult(tok )) { if (definatelv) { @@ -1399,7 +1377,7 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob } e->requiresConstraints = constraintList_add(e->requiresConstraints, cons); } - else if (lltok_isNot_Op (tok) ) + else if (lltok_isNot_Op (tok)) /* ! expr */ { constraintList_free(e->trueEnsuresConstraints); @@ -1409,136 +1387,136 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob e->falseEnsuresConstraints = constraintList_copy (t1->trueEnsuresConstraints); } - else if (lltok_isAmpersand_Op (tok) ) + else if (lltok_isAmpersand_Op (tok)) { break; } - else if (lltok_isMinus_Op (tok) ) + else if (lltok_isMinus_Op (tok)) { break; } - else if ( lltok_isExcl_Op (tok) ) + else if (lltok_isExcl_Op (tok)) { break; } - else if (lltok_isTilde_Op (tok) ) + else if (lltok_isTilde_Op (tok)) { break; } else { - llcontbug((message("Unsupported preop in %s", exprNode_unparse(e) ) )); + llcontbug (message("Unsupported preop in %s", exprNode_unparse(e))); BADEXIT; } break; case XPR_POSTOP: + exprNode_exprTraverse (exprData_getUopNode (data), TRUE, + definaterv, sequencePoint); - exprNode_exprTraverse (exprData_getUopNode (data), TRUE, definaterv, sequencePoint ); - - if (lltok_isInc_Op (exprData_getUopTok (data) ) ) + if (lltok_isInc_Op (exprData_getUopTok (data))) { DPRINTF(("doing ++")); t1 = exprData_getUopNode (data); - cons = constraint_makeMaxSetSideEffectPostIncrement (t1, sequencePoint ); + cons = constraint_makeMaxSetSideEffectPostIncrement (t1, sequencePoint); e->ensuresConstraints = constraintList_add (e->ensuresConstraints, cons); } - if (lltok_isDec_Op (exprData_getUopTok (data) ) ) + if (lltok_isDec_Op (exprData_getUopTok (data))) { DPRINTF(("doing --")); t1 = exprData_getUopNode (data); - cons = constraint_makeMaxSetSideEffectPostDecrement (t1, sequencePoint ); + cons = constraint_makeMaxSetSideEffectPostDecrement (t1, sequencePoint); e->ensuresConstraints = constraintList_add (e->ensuresConstraints, cons); } break; case XPR_CAST: { t2 = exprData_getCastNode (data); - DPRINTF (( message ("Examining cast (%q)%s", + DPRINTF ((message ("Examining cast (%q)%s", qtype_unparse (exprData_getCastType (data)), - exprNode_unparse (t2) ) - )); - exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint ); + exprNode_unparse (t2)) + )); + exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint); } break; case XPR_COND: { exprNode pred, trueBranch, falseBranch; - llassert(FALSE); - pred = exprData_getTriplePred (data); - trueBranch = exprData_getTripleTrue (data); - falseBranch = exprData_getTripleFalse (data); - - exprNode_exprTraverse (pred, FALSE, TRUE, sequencePoint ); - - temp = pred->ensuresConstraints; - pred->ensuresConstraints = exprNode_traversEnsuresConstraints(pred); - constraintList_free(temp); - - temp = pred->requiresConstraints; - pred->requiresConstraints = exprNode_traversRequiresConstraints(pred); - constraintList_free(temp); - - temp = pred->trueEnsuresConstraints; - pred->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(pred); - constraintList_free(temp); - - temp = pred->falseEnsuresConstraints; - pred->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(pred); - constraintList_free(temp); - - - exprNode_exprTraverse (trueBranch, FALSE, TRUE, sequencePoint ); - - temp = trueBranch->ensuresConstraints; - trueBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(trueBranch); - constraintList_free(temp); - - - temp = trueBranch->requiresConstraints; - trueBranch->requiresConstraints = exprNode_traversRequiresConstraints(trueBranch); - constraintList_free(temp); - - - temp = trueBranch->trueEnsuresConstraints; - trueBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(trueBranch); - constraintList_free(temp); - - temp = trueBranch->falseEnsuresConstraints; - trueBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(trueBranch); - constraintList_free(temp); - - exprNode_exprTraverse (falseBranch, FALSE, TRUE, sequencePoint ); - - temp = falseBranch->ensuresConstraints; - falseBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(falseBranch); - constraintList_free(temp); - - - temp = falseBranch->requiresConstraints; - falseBranch->requiresConstraints = exprNode_traversRequiresConstraints(falseBranch); - constraintList_free(temp); - - - temp = falseBranch->trueEnsuresConstraints; - falseBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(falseBranch); - constraintList_free(temp); - - temp = falseBranch->falseEnsuresConstraints; - falseBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(falseBranch); - constraintList_free(temp); - - /* if pred is true e equals true otherwise pred equals false */ - - cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint); - trueBranch->ensuresConstraints = constraintList_add(trueBranch->ensuresConstraints, cons); - - cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint); - falseBranch->ensuresConstraints = constraintList_add(falseBranch->ensuresConstraints, cons); + llassert(FALSE); + pred = exprData_getTriplePred (data); + trueBranch = exprData_getTripleTrue (data); + falseBranch = exprData_getTripleFalse (data); + + llassert (exprNode_isDefined (pred)); + llassert (exprNode_isDefined (trueBranch)); + llassert (exprNode_isDefined (falseBranch)); - e = doIfElse (e, pred, trueBranch, falseBranch); - + exprNode_exprTraverse (pred, FALSE, TRUE, sequencePoint); + + temp = pred->ensuresConstraints; + pred->ensuresConstraints = exprNode_traversEnsuresConstraints(pred); + constraintList_free(temp); + + temp = pred->requiresConstraints; + pred->requiresConstraints = exprNode_traversRequiresConstraints(pred); + constraintList_free(temp); + + temp = pred->trueEnsuresConstraints; + pred->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(pred); + constraintList_free(temp); + + temp = pred->falseEnsuresConstraints; + pred->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(pred); + constraintList_free(temp); + + exprNode_exprTraverse (trueBranch, FALSE, TRUE, sequencePoint); + + temp = trueBranch->ensuresConstraints; + trueBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(trueBranch); + constraintList_free(temp); + + temp = trueBranch->requiresConstraints; + trueBranch->requiresConstraints = exprNode_traversRequiresConstraints(trueBranch); + constraintList_free(temp); + + + temp = trueBranch->trueEnsuresConstraints; + trueBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(trueBranch); + constraintList_free(temp); + + temp = trueBranch->falseEnsuresConstraints; + trueBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(trueBranch); + constraintList_free(temp); + + exprNode_exprTraverse (falseBranch, FALSE, TRUE, sequencePoint); + + temp = falseBranch->ensuresConstraints; + falseBranch->ensuresConstraints = exprNode_traversEnsuresConstraints(falseBranch); + constraintList_free(temp); + + + temp = falseBranch->requiresConstraints; + falseBranch->requiresConstraints = exprNode_traversRequiresConstraints(falseBranch); + constraintList_free(temp); + + temp = falseBranch->trueEnsuresConstraints; + falseBranch->trueEnsuresConstraints = exprNode_traversTrueEnsuresConstraints(falseBranch); + constraintList_free(temp); + + temp = falseBranch->falseEnsuresConstraints; + falseBranch->falseEnsuresConstraints = exprNode_traversFalseEnsuresConstraints(falseBranch); + constraintList_free(temp); + + /* if pred is true e equals true otherwise pred equals false */ + + cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint); + trueBranch->ensuresConstraints = constraintList_add(trueBranch->ensuresConstraints, cons); + + cons = constraint_makeEnsureEqual (e, trueBranch, sequencePoint); + falseBranch->ensuresConstraints = constraintList_add(falseBranch->ensuresConstraints, cons); + + e = doIfElse (e, pred, trueBranch, falseBranch); } break; case XPR_COMMA: @@ -1548,8 +1526,8 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob /* we essiantially treat this like expr1; expr2 of course sequencePoint isn't adjusted so this isn't completely accurate problems../ */ - exprNode_exprTraverse (t1, FALSE, FALSE, sequencePoint ); - exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint ); + exprNode_exprTraverse (t1, FALSE, FALSE, sequencePoint); + exprNode_exprTraverse (t2, definatelv, definaterv, sequencePoint); exprNode_mergeResolve (e, t1, t2); break; @@ -1557,22 +1535,22 @@ void exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv, /*@ob handledExprNode = FALSE; } - e->requiresConstraints = constraintList_preserveOrig ( e->requiresConstraints); - e->ensuresConstraints = constraintList_preserveOrig ( e->ensuresConstraints); - e->requiresConstraints = constraintList_addGeneratingExpr ( e->requiresConstraints, e); + e->requiresConstraints = constraintList_preserveOrig (e->requiresConstraints); + e->ensuresConstraints = constraintList_preserveOrig (e->ensuresConstraints); + e->requiresConstraints = constraintList_addGeneratingExpr (e->requiresConstraints, e); - e->ensuresConstraints = constraintList_addGeneratingExpr ( e->ensuresConstraints, e); + e->ensuresConstraints = constraintList_addGeneratingExpr (e->ensuresConstraints, e); - e->requiresConstraints = constraintList_removeSurpressed( e->requiresConstraints); + e->requiresConstraints = constraintList_removeSurpressed(e->requiresConstraints); - DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints) ) )); + DPRINTF((message ("ensures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints)))); - DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints) ) )); + DPRINTF((message ("Requires constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->ensuresConstraints)))); - DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->trueEnsuresConstraints) ) )); + DPRINTF((message ("trueEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->trueEnsuresConstraints)))); - DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->falseEnsuresConstraints) ) )); + DPRINTF((message ("falseEnsures constraints for %s are %s", exprNode_unparse(e), constraintList_printDetailed(e->falseEnsuresConstraints)))); return; } @@ -1591,7 +1569,8 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e) ret = constraintList_makeNew(); return ret; } - ret = constraintList_copy (e->trueEnsuresConstraints ); + + ret = constraintList_copy (e->trueEnsuresConstraints); handledExprNode = TRUE; @@ -1601,55 +1580,55 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e) { case XPR_WHILEPRED: t1 = exprData_getSingle (data); - ret = constraintList_addListFree ( ret, exprNode_traversTrueEnsuresConstraints (t1) ); + ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints (t1)); break; case XPR_FETCH: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getPairA (data) ) ); + (exprData_getPairA (data))); ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getPairB (data) ) ); + (exprData_getPairB (data))); break; case XPR_PREOP: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_PARENS: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_INIT: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getInitNode (data) ) ); + (exprData_getInitNode (data))); break; case XPR_ASSIGN: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_OP: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_SIZEOFT: break; @@ -1658,20 +1637,20 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_CALL: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getFcn (data) ) ); - /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data) ); */ + (exprData_getFcn (data))); + /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data)); */ break; case XPR_RETURN: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_NULLRETURN: @@ -1680,13 +1659,13 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e) case XPR_FACCESS: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_ARROW: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_STRINGLITERAL: @@ -1698,14 +1677,14 @@ constraintList exprNode_traversTrueEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_CAST: ret = constraintList_addListFree (ret, exprNode_traversTrueEnsuresConstraints - (exprData_getCastNode (data) ) ); + (exprData_getCastNode (data))); break; default: @@ -1721,70 +1700,68 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) bool handledExprNode; exprData data; constraintList ret; - - if (exprNode_handleError (e)) - { - ret = constraintList_makeNew(); - return ret; - } - - ret = constraintList_copy (e->falseEnsuresConstraints ); - - handledExprNode = TRUE; - + + if (exprNode_handleError (e)) + { + ret = constraintList_makeNew(); + return ret; + } + + ret = constraintList_copy (e->falseEnsuresConstraints); + handledExprNode = TRUE; data = e->edata; switch (e->kind) { case XPR_WHILEPRED: t1 = exprData_getSingle (data); - ret = constraintList_addListFree ( ret,exprNode_traversFalseEnsuresConstraints (t1) ); + ret = constraintList_addListFree (ret,exprNode_traversFalseEnsuresConstraints (t1)); break; case XPR_FETCH: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getPairA (data) ) ); + (exprData_getPairA (data))); ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getPairB (data) ) ); + (exprData_getPairB (data))); break; case XPR_PREOP: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_PARENS: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_INIT: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - ( exprData_getInitNode (data) ) ); + ( exprData_getInitNode (data))); break; case XPR_ASSIGN: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_OP: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_SIZEOFT: break; @@ -1793,20 +1770,20 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_CALL: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getFcn (data) ) ); - /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data) ); */ + (exprData_getFcn (data))); + /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data)); */ break; case XPR_RETURN: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_NULLRETURN: @@ -1815,13 +1792,13 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) case XPR_FACCESS: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_ARROW: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_STRINGLITERAL: @@ -1833,14 +1810,14 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_CAST: ret = constraintList_addListFree (ret, exprNode_traversFalseEnsuresConstraints - (exprData_getCastNode (data) ) ); + (exprData_getCastNode (data))); break; default: @@ -1865,63 +1842,62 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) ret = constraintList_makeNew(); return ret; } - ret = constraintList_copy (e->requiresConstraints ); - - handledExprNode = TRUE; - + + ret = constraintList_copy (e->requiresConstraints); + handledExprNode = TRUE; data = e->edata; switch (e->kind) { case XPR_WHILEPRED: t1 = exprData_getSingle (data); - ret = constraintList_addListFree ( ret, exprNode_traversRequiresConstraints (t1) ); + ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints (t1)); break; case XPR_FETCH: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getPairA (data) ) ); + (exprData_getPairA (data))); ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getPairB (data) ) ); + (exprData_getPairB (data))); break; case XPR_PREOP: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_PARENS: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_INIT: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getInitNode (data) ) ); + (exprData_getInitNode (data))); break; case XPR_ASSIGN: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_OP: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getOpA (data) ) ); + (exprData_getOpA (data))); ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getOpB (data) ) ); + (exprData_getOpB (data))); break; case XPR_SIZEOFT: break; @@ -1930,20 +1906,20 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_CALL: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getFcn (data) ) ); - /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data) ); */ + (exprData_getFcn (data))); + /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data)); */ break; case XPR_RETURN: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getSingle (data) ) ); + (exprData_getSingle (data))); break; case XPR_NULLRETURN: @@ -1952,13 +1928,13 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) case XPR_FACCESS: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_ARROW: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; case XPR_STRINGLITERAL: @@ -1970,14 +1946,14 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_CAST: ret = constraintList_addListFree (ret, exprNode_traversRequiresConstraints - (exprData_getCastNode (data) ) ); + (exprData_getCastNode (data))); break; default: @@ -1997,20 +1973,19 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) exprData data; constraintList ret; - - if (exprNode_handleError (e)) - { - ret = constraintList_makeNew(); - return ret; - } - - ret = constraintList_copy (e->ensuresConstraints ); - handledExprNode = TRUE; - + if (exprNode_handleError (e)) + { + ret = constraintList_makeNew(); + return ret; + } + + ret = constraintList_copy (e->ensuresConstraints); + handledExprNode = TRUE; + data = e->edata; - - DPRINTF((message ( - "exprnode_traversEnsuresConstraints call for %s with constraintList of %s", + + DPRINTF ((message ("exprnode_traversEnsuresConstraints call for %s with " + "constraintList of %s", exprNode_unparse (e), constraintList_print(e->ensuresConstraints) ) @@ -2019,128 +1994,116 @@ constraintList exprNode_traversFalseEnsuresConstraints (exprNode e) switch (e->kind) { - case XPR_WHILEPRED: + case XPR_WHILEPRED: t1 = exprData_getSingle (data); - ret = constraintList_addListFree ( ret,exprNode_traversEnsuresConstraints (t1) ); + ret = constraintList_addListFree (ret,exprNode_traversEnsuresConstraints (t1)); break; case XPR_FETCH: - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getPairA (data) ) ); - + exprNode_traversEnsuresConstraints + (exprData_getPairA (data))); + ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getPairB (data) ) ); + exprNode_traversEnsuresConstraints + (exprData_getPairB (data))); break; case XPR_PREOP: - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getUopNode (data) ) ); + exprNode_traversEnsuresConstraints + (exprData_getUopNode (data))); break; case XPR_PARENS: ret = constraintList_addListFree (ret, exprNode_traversEnsuresConstraints - (exprData_getUopNode (data) ) ); + (exprData_getUopNode (data))); break; case XPR_INIT: ret = constraintList_addListFree (ret, exprNode_traversEnsuresConstraints - (exprData_getInitNode (data) ) ); - break; - - + (exprData_getInitNode (data))); + break; + + case XPR_ASSIGN: - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getOpA (data) ) ); - - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getOpB (data) ) ); - break; + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getOpA (data))); + + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getOpB (data))); + break; case XPR_OP: - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getOpA (data) ) ); - - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getOpB (data) ) ); - break; + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getOpA (data))); + + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getOpB (data))); + break; case XPR_SIZEOFT: break; case XPR_SIZEOF: - - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getSingle (data) ) ); - break; - + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getSingle (data))); + break; case XPR_CALL: ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getFcn (data) ) ); - /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data) ); */ + exprNode_traversEnsuresConstraints + (exprData_getFcn (data))); + /*@i11*/ /* exprNodeList_unparse (exprData_getArgs (data)); */ break; - case XPR_RETURN: ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getSingle (data) ) ); + exprNode_traversEnsuresConstraints + (exprData_getSingle (data))); break; - case XPR_NULLRETURN: break; - case XPR_FACCESS: ret = constraintList_addListFree (ret, exprNode_traversEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; - case XPR_ARROW: ret = constraintList_addListFree (ret, exprNode_traversEnsuresConstraints - (exprData_getFieldNode (data) ) ); + (exprData_getFieldNode (data))); break; - case XPR_STRINGLITERAL: break; - case XPR_NUMLIT: break; case XPR_POSTOP: - - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getUopNode (data) ) ); - break; + ret = constraintList_addListFree (ret, + exprNode_traversEnsuresConstraints + (exprData_getUopNode (data))); + break; case XPR_CAST: - ret = constraintList_addListFree (ret, - exprNode_traversEnsuresConstraints - (exprData_getCastNode (data) ) ); + exprNode_traversEnsuresConstraints + (exprData_getCastNode (data))); break; - default: break; } - - DPRINTF((message ( - "exprnode_traversEnsuresConstraints call for %s with constraintList of is returning %s", - exprNode_unparse (e), - constraintList_print(ret)))); + + DPRINTF((message ("exprnode_traversEnsuresConstraints call for %s with " + "constraintList of is returning %s", + exprNode_unparse (e), + constraintList_print(ret)))); return ret; } /*drl moved out of constraintResolve.c 07-02-001 */ -void checkArgumentList (/*@out@*/ exprNode temp, exprNodeList arglist, fileloc sequencePoint) +void checkArgumentList (/*@out@*/ exprNode temp, exprNodeList arglist, + fileloc sequencePoint) { temp->requiresConstraints = constraintList_makeNew(); temp->ensuresConstraints = constraintList_makeNew(); @@ -2174,7 +2137,7 @@ constraintList exprNode_getPostConditions (exprNode fcn, exprNodeList arglist, e { constraintList postconditions; uentry temp; - DPRINTF((message ("Got call that %s ( %s) ", exprNode_unparse(fcn), exprNodeList_unparse (arglist ) ) ) ); + DPRINTF((message ("Got call that %s (%s) ", exprNode_unparse(fcn), exprNodeList_unparse (arglist)))); temp = exprNode_getUentry (fcn); @@ -2197,14 +2160,14 @@ constraintList exprNode_getPostConditions (exprNode fcn, exprNodeList arglist, e comment this out for now we'll include it in a production release when its stable... - void findStructs ( exprNodeList arglist) + void findStructs (exprNodeList arglist) { ctype ct, rt; DPRINTF(( - message("doing findStructs: %s", exprNodeList_unparse(arglist) ) - )); + message("doing findStructs: %s", exprNodeList_unparse(arglist)) + )); exprNodeList_elements(arglist, expr) @@ -2213,24 +2176,24 @@ we'll include it in a production release when its stable... rt = ctype_realType (ct); - if ( ctype_isStruct (rt ) ) - TPRINTF(( message("Found structure %s", exprNode_unparse(expr) ) - )); - if (hasInvariants(ct) ) + if (ctype_isStruct (rt)) + TPRINTF((message("Found structure %s", exprNode_unparse(expr)) + )); + if (hasInvariants(ct)) { constraintList invars; invars = getInvariants(ct); - TPRINTF(( message ("findStructs has invariants %s ", constraintList_print (invars) ) - )); + TPRINTF((message ("findStructs has invariants %s ", constraintList_print (invars)) + )); - invars = constraintList_doSRefFixStructConstraint(invars, exprNode_getSref(expr), ct ); + invars = constraintList_doSRefFixStructConstraint(invars, exprNode_getSref(expr), ct); - TPRINTF(( message ("findStructs finded invariants to be %s ", constraintList_print (invars) ) - )); + TPRINTF((message ("findStructs finded invariants to be %s ", constraintList_print (invars)) + )); } } end_exprNodeList_elements; @@ -2243,13 +2206,13 @@ constraintList checkCall (/*@dependent@*/ exprNode fcn, exprNodeList arglist) { constraintList preconditions; uentry temp; - DPRINTF((message ("Got call that %s ( %s) ", exprNode_unparse(fcn), exprNodeList_unparse (arglist ) ) ) ); + DPRINTF((message ("Got call that %s (%s) ", exprNode_unparse(fcn), exprNodeList_unparse (arglist)))); temp = exprNode_getUentry (fcn); preconditions = uentry_getFcnPreconditions (temp); - if (constraintList_isDefined(preconditions) ) + if (constraintList_isDefined(preconditions)) { preconditions = constraintList_togglePost (preconditions); preconditions = constraintList_preserveCallInfo(preconditions, fcn); @@ -2257,11 +2220,11 @@ constraintList checkCall (/*@dependent@*/ exprNode fcn, exprNodeList arglist) } else { - if (constraintList_isUndefined(preconditions) ) + if (constraintList_isUndefined(preconditions)) preconditions = constraintList_makeNew(); } - DPRINTF (( message("Done checkCall\n") )); - DPRINTF (( message("Returning list %q ", constraintList_printDetailed(preconditions) ) )); + DPRINTF ((message("Done checkCall\n"))); + DPRINTF ((message("Returning list %q ", constraintList_printDetailed(preconditions)))); /* drl we're going to comment this out for now @@ -2282,7 +2245,7 @@ constraintList checkCall (/*@dependent@*/ exprNode fcn, exprNodeList arglist) but this is the easy way to do this If I have time I'd like to cause the exprNode to get created correctly in the first place */ /*@i223*/ -void exprNode_findValue( exprNode e) +void exprNode_findValue(exprNode e) { exprData data; @@ -2291,7 +2254,7 @@ void exprNode_findValue( exprNode e) data = e->edata; - if (exprNode_hasValue(e) ) + if (exprNode_hasValue(e)) return; if (e->kind == XPR_OP) @@ -2303,31 +2266,33 @@ void exprNode_findValue( exprNode e) exprNode_findValue(t1); exprNode_findValue(t2); - if (!(exprNode_knownIntValue(t1) && (exprNode_knownIntValue(t2) ) ) ) + if (!(exprNode_knownIntValue(t1) && (exprNode_knownIntValue(t2)))) return; - if (lltok_isPlus_Op (tok) ) + if (lltok_isPlus_Op (tok)) { long v1, v2; v1 = exprNode_getLongValue(t1); v2 = exprNode_getLongValue(t2); - if (multiVal_isDefined(e->val) ) + if (multiVal_isDefined(e->val)) multiVal_free (e->val); e->val = multiVal_makeInt (v1 + v2); } - if ( lltok_isMinus_Op (tok) ) + if (lltok_isMinus_Op (tok)) { long v1, v2; v1 = exprNode_getLongValue(t1); v2 = exprNode_getLongValue(t2); - if (multiVal_isDefined(e->val) ) - multiVal_free (e->val); + if (multiVal_isDefined(e->val)) + { + multiVal_free (e->val); + } e->val = multiVal_makeInt (v1 - v2); } diff --git a/src/constraintTerm.c b/src/constraintTerm.c index 65012f9..8d1aa13 100644 --- a/src/constraintTerm.c +++ b/src/constraintTerm.c @@ -597,7 +597,7 @@ void constraintTerm_dump ( /*@observer@*/ constraintTerm t, FILE *f) } -/*@only@*/ constraintTerm constraintTerm_undump ( FILE *f) +/*@only@*/ constraintTerm constraintTerm_undump (FILE *f) { constraintTermType kind; constraintTerm ret; @@ -611,9 +611,13 @@ void constraintTerm_dump ( /*@observer@*/ constraintTerm t, FILE *f) str = fgets (os, MAX_DUMP_LINE_LENGTH, f); + llassert (str != NULL); + kind = (constraintTermType) reader_getInt(&str); str = fgets(os, MAX_DUMP_LINE_LENGTH, f); + llassert (str != NULL); + switch (kind) { diff --git a/src/context.c b/src/context.c index 95735de..d900745 100644 --- a/src/context.c +++ b/src/context.c @@ -171,14 +171,16 @@ static void context_exitClauseSimp (void) /*@modifies gc@*/ ; static void context_exitClausePlain (void) /*@modifies gc@*/ ; static void context_setJustPopped (void) /*@modifies gc.justpopped@*/ ; static void context_setValue (flagcode p_flag, int p_val) /*@modifies gc.flags@*/ ; -static void context_setFlag (flagcode p_f, bool p_b) +static void context_setFlag (flagcode p_f, bool p_b, fileloc p_loc) /*@modifies gc.flags@*/ ; static void - context_setFlagAux (flagcode p_f, bool p_b, bool p_inFile, bool p_isRestore) + context_setFlagAux (flagcode p_f, bool p_b, bool p_inFile, + bool p_isRestore, fileloc p_loc) /*@modifies gc.flags@*/ ; -static void context_restoreFlag (flagcode p_f) /*@modifies gc.flags@*/ ; +static void context_restoreFlag (flagcode p_f, fileloc p_loc) + /*@modifies gc.flags@*/ ; /*@+enumindex@*/ @@ -270,10 +272,9 @@ context_addMacroCache (/*@only@*/ cstring def) } void -context_addComment (/*@only@*/ cstring def) +context_addComment (/*@only@*/ cstring def, fileloc loc) { - DPRINTF (("macro comment: %s", def)); - macrocache_addComment (gc.mc, fileloc_copy (g_currentloc), def); + macrocache_addComment (gc.mc, fileloc_copy (loc), def); } /* @@ -391,39 +392,47 @@ context_inSuppressRegion (void) } void -context_enterSuppressRegion (void) +context_enterSuppressRegion (fileloc loc) { if (gc.insuppressregion) { gc.insuppressregion = FALSE; /* get this msg! */ llmsg (message ("%q: New ignore errors region entered while in ignore errors region", - fileloc_unparse (g_currentloc))); + fileloc_unparse (loc))); } gc.insuppressregion = TRUE; - flagMarkerList_add (gc.markers, flagMarker_createIgnoreOn (g_currentloc)); + (void) flagMarkerList_add (gc.markers, flagMarker_createIgnoreOn (loc)); } static void -context_addFlagMarker (flagcode code, ynm set) +context_addFlagMarker (flagcode code, ynm set, fileloc loc) { - flagMarkerList_add (gc.markers, - flagMarker_createLocalSet (code, set, g_currentloc)); + (void) flagMarkerList_add (gc.markers, + flagMarker_createLocalSet (code, set, loc)); } void -context_enterSuppressLine (int count) +context_enterSuppressLine (int count, fileloc loc) { - fileloc nextline = fileloc_copy (g_currentloc); + if (context_processingMacros ()) + { + return; + } - flagMarkerList_add (gc.markers, - flagMarker_createIgnoreCount (count, g_currentloc)); + if (flagMarkerList_add + (gc.markers, + flagMarker_createIgnoreCount (count, loc))) + { + fileloc nextline = fileloc_copy (loc); + fileloc_nextLine (nextline); + fileloc_setColumn (nextline, 0); - fileloc_nextLine (nextline); - flagMarkerList_add (gc.markers, - flagMarker_createIgnoreOff (nextline)); - fileloc_free (nextline); + check (flagMarkerList_add (gc.markers, + flagMarker_createIgnoreOff (nextline))); + fileloc_free (nextline); + } } void context_checkSuppressCounts (void) @@ -441,16 +450,18 @@ void context_incLineno (void) } void -context_exitSuppressRegion (void) +context_exitSuppressRegion (fileloc loc) { if (!gc.insuppressregion) { - llerrorlit (FLG_SYNTAX, - "End ignore errors in region while not ignoring errors"); + voptgenerror + (FLG_SYNTAX, + message ("End ignore errors in region while not ignoring errors"), + loc); } - - gc.insuppressregion = FALSE; - flagMarkerList_add (gc.markers, flagMarker_createIgnoreOff (g_currentloc)); + + gc.insuppressregion = FALSE; + (void) flagMarkerList_add (gc.markers, flagMarker_createIgnoreOff (loc)); } void @@ -668,13 +679,12 @@ typeIdSet context_fileAccessTypes (void) void context_resetModeFlags (void) -{ - +{ allFlagCodes (code) { if (flagcode_isModeFlag (code)) { - context_setFlag (code, FALSE); + context_setFlag (code, FALSE, g_currentloc); } } end_allFlagCodes; } @@ -843,7 +853,7 @@ context_resetAllFlags (void) gc.flags[FLG_ZEROPTR] = TRUE; gc.flags[FLG_NUMLITERAL] = TRUE; gc.flags[FLG_DUPLICATEQUALS] = TRUE; - gc.flags[FLG_SKIPANSIHEADERS] = TRUE; + gc.flags[FLG_SKIPISOHEADERS] = TRUE; gc.flags[FLG_SKIPPOSIXHEADERS] = TRUE; gc.flags[FLG_SYSTEMDIREXPAND] = TRUE; gc.flags[FLG_UNRECOGCOMMENTS] = TRUE; @@ -943,7 +953,7 @@ context_resetAllFlags (void) if (!flagcode_isModeFlag (modeflags[i])) \ { llbug (message ("not a mode flag: %s", \ flagcode_unparse (modeflags[i]))); } \ - else { context_setFlag (modeflags[i], TRUE); } i++; }} + else { context_setFlag (modeflags[i], TRUE, g_currentloc); } i++; }} static void context_setModeAux (cstring p_s, bool p_warn) ; @@ -1214,7 +1224,7 @@ context_setModeAux (cstring s, bool warn) FLG_LOOPLOOPBREAK, FLG_SWITCHLOOPBREAK, FLG_MODGLOBS, FLG_CHECKSTRICTGLOBALS, FLG_IMPCHECKEDSPECGLOBALS, FLG_MACROMATCHNAME, FLG_WARNLINTCOMMENTS, - FLG_INCLUDENEST, FLG_ANSIRESERVED, FLG_CPPNAMES, + FLG_INCLUDENEST, FLG_ISORESERVED, FLG_CPPNAMES, FLG_NOPARAMS, FLG_IFEMPTY, FLG_WHILEEMPTY, FLG_REALCOMPARE, FLG_BOOLOPS, FLG_SHIFTNEGATIVE, FLG_SHIFTIMPLEMENTATION, @@ -1263,7 +1273,7 @@ context_setModeAux (cstring s, bool warn) FLG_PTRNUMCOMPARE, FLG_BOOLCOMPARE, FLG_UNSIGNEDCOMPARE, FLG_NOEFFECT, FLG_RETVALINT, FLG_RETVALBOOL, FLG_RETVALOTHER, - FLG_ANSIRESERVED, FLG_ANSIRESERVEDLOCAL, FLG_CPPNAMES, + FLG_ISORESERVED, FLG_ISORESERVEDLOCAL, FLG_CPPNAMES, FLG_RETVALBOOL, FLG_RETVALINT, FLG_SPECUNDEF, FLG_DECLUNDEF, FLG_STRICTOPS, FLG_INCONDEFS, FLG_MISPLACEDSHAREQUAL, FLG_REDUNDANTSHAREQUAL, @@ -1335,7 +1345,7 @@ context_setModeAux (cstring s, bool warn) FLG_IMPCHECKEDSTRICTSPECGLOBALS, FLG_IMPCHECKMODINTERNALS, FLG_WARNMISSINGGLOBALS, FLG_WARNMISSINGGLOBALSNOGLOBS, - FLG_WARNLINTCOMMENTS, FLG_ANSIRESERVEDLOCAL, + FLG_WARNLINTCOMMENTS, FLG_ISORESERVEDLOCAL, FLG_INCLUDENEST, FLG_STRINGLITERALLEN, FLG_NUMSTRUCTFIELDS, FLG_NUMENUMMEMBERS, FLG_CONTROLNESTDEPTH, @@ -2785,15 +2795,15 @@ context_setValue (flagcode flag, int val) { llerror_flagWarning (message ("Value for %s must be a positive " - "number (given %d)", - flagcode_unparse (flag), val)); + "number (given %d)", + flagcode_unparse (flag), val)); return; } if (flag == FLG_LINELEN && val < MINLINELEN) { llerror_flagWarning (message ("Value for %s must be at least %d (given %d)", - flagcode_unparse (flag), - MINLINELEN, val)); + flagcode_unparse (flag), + MINLINELEN, val)); val = MINLINELEN; } break; @@ -2891,19 +2901,19 @@ context_setString (flagcode flag, cstring val) { int n = cstring_length (tval) - 1; - while (isspace ((int) cstring_getChar (tval, n))) + while (isspace ((int) cstring_getChar (tval, size_fromInt (n)))) { n--; } - if (cstring_getChar (tval, n) != '\"') + if (cstring_getChar (tval, size_fromInt (n)) != '\"') { llerror_flagWarning (message ("Setting -systemdirs to string with unmatching quotes: %s", val)); } else { cstring otval = tval; - tval = cstring_prefix (tval, n); + tval = cstring_prefix (tval, size_fromInt (n)); cstring_free (otval); } } @@ -3625,10 +3635,11 @@ context_userSetFlag (flagcode f, bool b) { if (gc.flags[FLG_EXPORTHEADER]) { - llerror_flagWarning (cstring_makeLiteral - ("setting +neverinclude after +exportheader. " - "Turning off exportheader, since headers are not checked " - "when +neverinclude is used.")); + llerror_flagWarning + (cstring_makeLiteral + ("setting +neverinclude after +exportheader. " + "Turning off exportheader, since headers are not checked " + "when +neverinclude is used.")); gc.flags[FLG_EXPORTHEADER] = FALSE; } @@ -3639,10 +3650,11 @@ context_userSetFlag (flagcode f, bool b) { if (gc.flags[FLG_NEVERINCLUDE]) { - llerror_flagWarning (cstring_makeLiteral - ("setting +exportheader after +neverinclude. " - "Not setting exportheader, since headers are not checked " - "when +neverinclude is used.")); + llerror_flagWarning + (cstring_makeLiteral + ("setting +exportheader after +neverinclude. " + "Not setting exportheader, since headers are not checked " + "when +neverinclude is used.")); gc.flags[FLG_EXPORTHEADER] = FALSE; return; } @@ -3658,9 +3670,10 @@ context_userSetFlag (flagcode f, bool b) && !flagcode_isIdemFlag (f) && !flagcode_hasArgument (f)) { - llerror_flagWarning (message ("setting %s%s redundant with current value", - cstring_makeLiteralTemp (b ? "+" : "-"), - flagcode_unparse (f))); + llerror_flagWarning + (message ("setting %s%s redundant with current value", + cstring_makeLiteralTemp (b ? "+" : "-"), + flagcode_unparse (f))); } } @@ -3668,9 +3681,9 @@ context_userSetFlag (flagcode f, bool b) { if (!context_getFlag (FLG_WARNUSE)) { - llerror_flagWarning (message ("flag +%s is canceled by -warnuse", - flagcode_unparse (f))); - + llerror_flagWarning + (message ("flag +%s is canceled by -warnuse", + flagcode_unparse (f))); } } @@ -3680,40 +3693,44 @@ context_userSetFlag (flagcode f, bool b) if (gc.library != FLG_ANSILIB && gc.library != f) { - llerror_flagWarning (message ("selecting library %s after library %s was " - "selected (only one library may be used)", - flagcode_unparse (f), - flagcode_unparse (gc.library))); + llerror_flagWarning + (message ("selecting library %s after library %s was " + "selected (only one library may be used)", + flagcode_unparse (f), + flagcode_unparse (gc.library))); } - + if (f == FLG_UNIXLIB) { if (context_getFlag (FLG_WARNUNIXLIB)) { - llerror_flagWarning (cstring_makeLiteral - ("selecting unix library. Unix library is " - "ad hoc addition to POSIX library. Recommend " - "use +posixlib to select POSIX library instead. " - "Use -warnunixlib to suppress this message.")); + llerror_flagWarning + (cstring_makeLiteral + ("selecting unix library. Unix library is " + "ad hoc addition to POSIX library. Recommend " + "use +posixlib to select POSIX library instead. " + "Use -warnunixlib to suppress this message.")); } } gc.library = f; } - + if (flagcode_isNameChecksFlag (f) && b && !context_maybeSet (FLG_NAMECHECKS)) { - llerror_flagWarning (message - ("setting +%s will not produce warnings with -namechecks. Must set +namechecks also.", - flagcode_unparse (f))); + llerror_flagWarning + (message + ("setting +%s will not produce warnings with -namechecks. " + "Must set +namechecks also.", + flagcode_unparse (f))); } - + gc.setGlobally[f] = TRUE; - context_setFlag (f, b); + context_setFlag (f, b, g_currentloc); } void -context_fileSetFlag (flagcode f, ynm set) +context_fileSetFlag (flagcode f, ynm set, fileloc loc) { if (!gc.savedFlags) { @@ -3722,23 +3739,22 @@ context_fileSetFlag (flagcode f, ynm set) if (ynm_isOff (set)) { - context_setFlagAux (f, FALSE, TRUE, FALSE); + context_setFlagAux (f, FALSE, TRUE, FALSE, loc); } else if (ynm_isOn (set)) { - context_setFlagAux (f, TRUE, TRUE, FALSE); + context_setFlagAux (f, TRUE, TRUE, FALSE, loc); gc.setLocally[f] = TRUE; } else { - context_restoreFlag (f); + context_restoreFlag (f, loc); } } static void -context_restoreFlag (flagcode f) +context_restoreFlag (flagcode f, fileloc loc) { - if (!gc.savedFlags) { voptgenerror @@ -3746,20 +3762,20 @@ context_restoreFlag (flagcode f) message ("Attempt to restore flag %s when no file scope flags " "have been set.", flagcode_unparse (f)), - g_currentloc); + loc); } else { - context_addFlagMarker (f, MAYBE); - context_setFlagAux (f, gc.saveflags[f], FALSE, TRUE); + context_addFlagMarker (f, MAYBE, loc); + context_setFlagAux (f, gc.saveflags[f], FALSE, TRUE, loc); } } static void -context_setFlag (flagcode f, bool b) +context_setFlag (flagcode f, bool b, fileloc loc) { - context_setFlagAux (f, b, FALSE, FALSE); + context_setFlagAux (f, b, FALSE, FALSE, loc); } void @@ -3772,13 +3788,13 @@ context_setFlagTemp (flagcode f, bool b) /*@notfunction@*/ # define DOSET(ff,b) \ do { if (inFile) { gc.setLocally[ff] = TRUE; \ - context_addFlagMarker (ff, ynm_fromBool (b)); } \ + context_addFlagMarker (ff, ynm_fromBool (b), loc); } \ DPRINTF (("set flag: %s / %s", flagcode_unparse (ff), bool_unparse (b))); \ gc.flags[ff] = b; } while (FALSE) static void context_setFlagAux (flagcode f, bool b, bool inFile, - /*@unused@*/ bool isRestore) + /*@unused@*/ bool isRestore, fileloc loc) { DPRINTF (("Set flag: %s / %s", flagcode_unparse (f), bool_unparse (b))); diff --git a/src/cppexp.c b/src/cppexp.c index c19eb8b..a41277e 100644 --- a/src/cppexp.c +++ b/src/cppexp.c @@ -434,7 +434,14 @@ struct operation cppexp_lex (cppReader *pfile) ic = cpplib_bufPeek (cppReader_getBufferSafe (pfile)); c = (char) ic; - llassert (c != '#'); + + if (c == '#') + { + /* was: llassert (c != '#'); - Solaris uses this, attempt to continue anyway... */ + cppReader_pedwarn (pfile, + message ("non-standard pre-processor directive: %c", c)); + } + DPRINTF (("Read: %c", c)); if (c == '\n') diff --git a/src/cpphash.c b/src/cpphash.c index 0d20855..cf98cdf 100644 --- a/src/cpphash.c +++ b/src/cpphash.c @@ -244,7 +244,7 @@ static void hashNode_delete (/*@only@*/ /*@null@*/ hashNode node) computed a step at a time, elsewhere */ int -cpphash_hashCode (const char *name, int len, int hashsize) +cpphash_hashCode (const char *name, size_t len, int hashsize) { unsigned int r = 0; @@ -260,10 +260,10 @@ cpphash_hashCode (const char *name, int len, int hashsize) ** Find the most recent hash node for name name (ending with first ** non-identifier char) cpphash_installed by install ** -** If LEN is >= 0, it is the length of the name. +** If len is >= 0, it is the length of the name. ** Otherwise, compute the length by scanning the entire name. ** -** If HASH is >= 0, it is the precomputed hash code. +** If hash is >= 0, it is the precomputed hash code. ** Otherwise, compute the hash code. */ @@ -284,15 +284,15 @@ cpphash_hashCode (const char *name, int len, int hashsize) if (hash < 0) { - hash = cpphash_hashCode (name, len, CPP_HASHSIZE); + hash = cpphash_hashCode (name, size_fromInt (len), CPP_HASHSIZE); } bucket = hashtab[hash]; while (bucket != NULL) { - if (bucket->length == len && - cstring_equalLen (bucket->name, cstring_fromChars (name), len)) + if (bucket->length == size_fromInt (len) && + cstring_equalLen (bucket->name, cstring_fromChars (name), size_fromInt (len))) { return bucket; } @@ -359,6 +359,10 @@ cppReader_deleteMacro (hashNode hp) /* make sure that the bucket chain header that the deleted guy was on points to the right thing afterwards. */ + + llassert (hp != NULL); + llassert (hp->bucket_hdr != NULL); + if (hp == *hp->bucket_hdr) { *hp->bucket_hdr = hp->next; } @@ -420,7 +424,7 @@ hashNode cpphash_install (char *name, int len, enum node_type type, if (hash < 0) { - hash = cpphash_hashCode (name, len, CPP_HASHSIZE); + hash = cpphash_hashCode (name, size_fromInt (len), CPP_HASHSIZE); } i = sizeof (*hp) + len + 1; @@ -440,7 +444,7 @@ hashNode cpphash_install (char *name, int len, enum node_type type, hashtab[bucket] = hp; hp->type = type; - hp->length = len; + hp->length = size_fromInt (len); if (hp->type == T_CONST) { @@ -452,7 +456,7 @@ hashNode cpphash_install (char *name, int len, enum node_type type, hp->value.cpval = value; } - hp->name = cstring_clip (cstring_fromCharsNew (name), len); + hp->name = cstring_clip (cstring_fromCharsNew (name), size_fromInt (len)); DPRINTF (("Name: *%s*", hp->name)); /*@-mustfree@*/ /*@-uniondef@*/ /*@-compdef@*/ /*@-compmempass@*/ @@ -460,11 +464,11 @@ hashNode cpphash_install (char *name, int len, enum node_type type, /*@=mustfree@*/ /*@=uniondef@*/ /*@=compdef@*/ /*@=compmempass@*/ } -hashNode cpphash_installMacro (char *name, int len, +hashNode cpphash_installMacro (char *name, size_t len, struct definition *defn, int hash) { DPRINTF (("install macro: %s", name)); - return cpphash_install (name, len, T_MACRO, 0, (char *) defn, hash); + return cpphash_install (name, size_toInt (len), T_MACRO, 0, (char *) defn, hash); } void diff --git a/src/cpplib.c b/src/cpplib.c index b8837a6..302167c 100644 --- a/src/cpplib.c +++ b/src/cpplib.c @@ -62,15 +62,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # endif # include - # if !(defined (WIN32) || defined (OS2) && defined (__IBMC__)) # include # endif - # include # include # include - # if defined (WIN32) || defined (OS2) && defined (__IBMC__) # include # include /* for __DATE__ and __TIME__ */ @@ -149,12 +146,10 @@ static void cpp_setLocation (cppReader *p_pfile) static enum cpp_token cpp_handleComment (cppReader *p_pfile, struct parse_marker *p_smark) /*@modifies p_pfile, p_smark@*/; - + static bool cpp_shouldCheckMacro (cppReader *p_pfile, char *p_p) /*@modifies p_p@*/ ; -static int cppReader_checkMacroNameLoc (fileloc p_loc, - char *p_symname, - cstring p_usage) ; +static size_t cppReader_checkMacroNameLoc (fileloc p_loc, char *p_symname, cstring p_usage) ; static bool cpp_skipIncludeFile (cstring p_fname) /*@*/ ; @@ -163,7 +158,7 @@ static bool cpp_skipIncludeFile (cstring p_fname) /*@*/ ; #endif /* Symbols to predefine. */ - + #ifdef CPP_PREDEFINES static /*@observer@*/ char *predefs = CPP_PREDEFINES; #else @@ -196,7 +191,7 @@ static /*@observer@*/ char *predefs = ""; /*@constant observer char *WCHAR_TYPE@*/ #define WCHAR_TYPE "int" #endif - + /* The string value for __USER_LABEL_PREFIX__ */ #ifndef USER_LABEL_PREFIX @@ -219,7 +214,7 @@ static bool is_idstart[256]; static bool is_hor_space[256]; /* table to tell if c is horizontal or vertical space. */ static bool is_space[256]; - + static /*@exposed@*/ /*@null@*/ cppBuffer * cppReader_getBuffer (/*@special@*/ cppReader *p_pfile) /*@uses p_pfile->buffer@*/ @@ -242,7 +237,7 @@ static int cpp_peekN (cppReader *p_pfile, int p_n) /*@*/ ; modifies *p_file; @*/ # define cppReader_puts(PFILE, STR, N) \ cpplib_reserve(PFILE, N), cppReader_putStrN (PFILE, STR,N) - + /* Append character CH to PFILE's output buffer. Assume sufficient space. */ /*@function static void cppReader_putCharQ (cppReader *p_file, char p_ch) @@ -378,7 +373,7 @@ static int /*@alt void@*/ finclude (cppReader *p_pfile, int p_f, /*@dependent@*/ /*@null@*/ struct file_name_list *p_dirptr); static void validate_else (cppReader *p_pfile, cstring p_directive); - + static void conditional_skip (cppReader *p_pfile, int p_skip, enum node_type p_type, /*@dependent@*/ /*@null@*/ char *p_control_macro); @@ -462,7 +457,7 @@ static int do_warning (cppReader *, struct directive *, char *, char *); /* -I directories are added to the end, then the defaults are added. */ /*@access cstring@*/ - + static struct default_include { /*@dependent@*/ /*@observer@*/ cstring fname; /* The name of the directory. */ int cplusplus; /* Only look here if we're compiling C++. */ @@ -581,7 +576,7 @@ static void quote_string (cppReader *pfile, char *src) { char c; - + cppReader_putCharQ (pfile, '\"'); for (;;) { @@ -722,7 +717,7 @@ cppReader_define (cppReader *pfile, char *str) (void) do_define (pfile, NULL, buf, buf + strlen (buf)); sfree (buf); } - + /* Append a chain of `struct file_name_list's to the end of the main include chain. FIRST is gthe beginning of the chain to append, and LAST is the end. */ @@ -767,7 +762,7 @@ cppReader_appendIncludeChain (cppReader *pfile, /* last->next = NULL; */ opts->last_include = last; } - + # if 0 static /*@unused@*/ void cppReader_showIncludeChain (cppReader *pfile) @@ -790,7 +785,7 @@ cppReader_showIncludeChain (cppReader *pfile) } } # endif - + cstring cppReader_getIncludePath () { @@ -856,7 +851,7 @@ static void path_include (cppReader *pfile, char *path) { char *p; - + #ifdef __CYGWIN32__ char *win32temp; @@ -912,7 +907,7 @@ path_include (cppReader *pfile, char *path) p++; } } - + void cppOptions_init (cppOptions *opts) { @@ -1667,7 +1662,7 @@ collect_expansion (cppReader *pfile, char *buf, char *limit, /* Handle the start of a symbol. */ if (is_idchar[(int) c] && nargs > 0) { char *id_beg = p - 1; - int id_len; + size_t id_len; --exp_p; while (p != limit && is_idchar[(int) *p]) @@ -1675,7 +1670,7 @@ collect_expansion (cppReader *pfile, char *buf, char *limit, p++; } - id_len = p - id_beg; + id_len = size_fromInt (p - id_beg); if (is_idstart[(int) c] && ! (id_len == 1 && c == 'L' && (*p == '\'' || *p == '\"'))) { @@ -1686,7 +1681,7 @@ collect_expansion (cppReader *pfile, char *buf, char *limit, if (arg->name[0] == c && arg->length == id_len - && strncmp (arg->name, id_beg, size_fromInt (id_len)) == 0) { + && strncmp (arg->name, id_beg, id_len) == 0) { char *p1; if (expected_delimiter && CPPOPTIONS (pfile)->warn_stringify) { @@ -1984,7 +1979,7 @@ collect_expansionLoc (fileloc loc, char *buf, char *limit, continue; } /*@switchbreak@*/ break; - + case '/': if (expected_delimiter != '\0') /* No comments inside strings. */ /*@switchbreak@*/ break; @@ -2006,7 +2001,7 @@ collect_expansionLoc (fileloc loc, char *buf, char *limit, /* Handle the start of a symbol. */ if (is_idchar[(int) c] && nargs > 0) { char *id_beg = p - 1; - int id_len; + size_t id_len; --exp_p; while (p != limit && is_idchar[(int) *p]) @@ -2014,7 +2009,7 @@ collect_expansionLoc (fileloc loc, char *buf, char *limit, p++; } - id_len = p - id_beg; + id_len = size_fromInt (p - id_beg); if (is_idstart[(int) c] && ! (id_len == 1 && c == 'L' && (*p == '\'' || *p == '\"'))) { @@ -2025,7 +2020,7 @@ collect_expansionLoc (fileloc loc, char *buf, char *limit, if (arg->name[0] == c && arg->length == id_len - && strncmp (arg->name, id_beg, size_fromInt (id_len)) == 0) { + && strncmp (arg->name, id_beg, id_len) == 0) { char *p1; if (expected_delimiter) { /* && CPPOPTIONS (pfile)->warn_stringify) { */ @@ -2155,7 +2150,7 @@ static char rest_extension[] = "..."; /* Create a DEFINITION node from a #define directive. Arguments are as for do_define. */ - + static /*@null@*/ macroDef create_definition (/*@exposed@*/ char *buf, char *limit, cppReader *pfile, bool predefinition, @@ -2163,7 +2158,7 @@ create_definition (/*@exposed@*/ char *buf, char *limit, { char *bp; /* temp ptr into input buffer */ char *symname; /* remember where symbol name starts */ - int sym_length; /* and how long it is */ + size_t sym_length; /* and how long it is */ int rest_args = 0; /* really int! */ int line; int col; @@ -2242,7 +2237,7 @@ create_definition (/*@exposed@*/ char *buf, char *limit, } } - temp->length = bp - temp->name; + temp->length = size_fromInt (bp - temp->name); if (rest_args != 0) { @@ -2273,7 +2268,7 @@ create_definition (/*@exposed@*/ char *buf, char *limit, for (otemp = temp->next; otemp != NULL; otemp = otemp->next) { if (temp->length == otemp->length && - strncmp (temp->name, otemp->name, size_fromInt (temp->length)) == 0) { + strncmp (temp->name, otemp->name, temp->length) == 0) { cstring name = cstring_copyLength (temp->name, temp->length); cppReader_error (pfile, message ("duplicate argument name `%x' in `#define'", name)); @@ -2282,7 +2277,7 @@ create_definition (/*@exposed@*/ char *buf, char *limit, } } } - + ++bp; /* skip paren */ SKIP_WHITE_SPACE (bp); /* now everything from bp before limit is the definition. */ @@ -2293,19 +2288,21 @@ create_definition (/*@exposed@*/ char *buf, char *limit, the argument names in reverse order with comma-space between them. */ defn->args.argnames = (char *) dmalloc (size_fromInt (arglengths + 1)); - + { struct arglist *temp; int i = 0; - for (temp = arg_ptrs; temp != NULL; temp = temp->next) { - memcpy (&defn->args.argnames[i], temp->name, size_fromInt (temp->length)); - i += temp->length; - if (temp->next != 0) { - defn->args.argnames[i++] = ','; - defn->args.argnames[i++] = ' '; + for (temp = arg_ptrs; temp != NULL; temp = temp->next) + { + memcpy (&defn->args.argnames[i], temp->name, temp->length); + i += temp->length; + if (temp->next != 0) + { + defn->args.argnames[i++] = ','; + defn->args.argnames[i++] = ' '; + } } - } - + defn->args.argnames[i] = '\0'; } @@ -2377,7 +2374,7 @@ cpplib_createDefinition (cstring def, char *limit = buf + cstring_length (def); char *bp; /* temp ptr into input buffer */ char *symname; /* remember where symbol name starts */ - int sym_length; /* and how long it is */ + size_t sym_length; /* and how long it is */ int rest_args = 0; /* really int! */ int line = fileloc_lineno (loc); cstring file = fileloc_filename (loc); @@ -2412,7 +2409,7 @@ cpplib_createDefinition (cstring def, if (*bp == '(') { struct arglist *arg_ptrs = NULL; int argno = 0; - + bp++; /* skip '(' */ SKIP_WHITE_SPACE (bp); @@ -2456,7 +2453,7 @@ cpplib_createDefinition (cstring def, } } - temp->length = bp - temp->name; + temp->length = size_fromInt (bp - temp->name); if (rest_args != 0) { @@ -2489,7 +2486,7 @@ cpplib_createDefinition (cstring def, for (otemp = temp->next; otemp != NULL; otemp = otemp->next) { if (temp->length == otemp->length && - strncmp (temp->name, otemp->name, size_fromInt (temp->length)) == 0) { + strncmp (temp->name, otemp->name, temp->length) == 0) { cstring name = cstring_copyLength (temp->name, temp->length); voptgenerror (FLG_PREPROC, @@ -2516,7 +2513,7 @@ cpplib_createDefinition (cstring def, struct arglist *temp; int i = 0; for (temp = arg_ptrs; temp != NULL; temp = temp->next) { - memcpy (&defn->args.argnames[i], temp->name, size_fromInt (temp->length)); + memcpy (&defn->args.argnames[i], temp->name, temp->length); i += temp->length; if (temp->next != 0) { defn->args.argnames[i++] = ','; @@ -2593,9 +2590,7 @@ nope: /* Check a purported macro name SYMNAME, and yield its length. USAGE is the kind of name this is intended for. */ -int cppReader_checkMacroName (cppReader *pfile, - char *symname, - cstring usage) +size_t cppReader_checkMacroName (cppReader *pfile, char *symname, cstring usage) { char *p; size_t sym_length; @@ -2629,17 +2624,15 @@ int cppReader_checkMacroName (cppReader *pfile, } } - return size_toInt (sym_length); + return sym_length; } - + /* ** evans 2001-12-31 ** Gasp...cut-and-pasted from above to deal with pfile (should replace throughout with this...) */ -int cppReader_checkMacroNameLoc (fileloc loc, - char *symname, - cstring usage) +size_t cppReader_checkMacroNameLoc (fileloc loc, char *symname, cstring usage) { char *p; size_t sym_length; @@ -2675,9 +2668,9 @@ int cppReader_checkMacroNameLoc (fileloc loc, } } - return size_toInt (sym_length); + return sym_length; } - + /* Return zero if two DEFINITIONs are isomorphic. */ static bool @@ -2734,7 +2727,7 @@ compare_defs (DEFINITION *d1, DEFINITION *d2) so ignore leading whitespace entirely. LAST means these parts are the last of a macro definition; so ignore trailing whitespace entirely. */ - + /*@i2@*/ static bool comp_def_part (bool first, char *beg1, int len1, char *beg2, int len2, bool last) { @@ -2765,7 +2758,7 @@ comp_def_part (bool first, char *beg1, int len1, char *beg2, int len2, bool last LIMIT points to the first character past the end of the definition. KEYWORD is the keyword-table entry for #define, or NULL for a "predefined" macro. */ - + /*@i2@*/ static int do_defineAux (cppReader *pfile, struct directive *keyword, /*@exposed@*/ char *buf, char *limit, bool noExpand) @@ -2773,21 +2766,21 @@ do_defineAux (cppReader *pfile, struct directive *keyword, int hashcode; macroDef mdef; hashNode hp; - + /*@i2@*/ DPRINTF (("Define aux: %d", noExpand)); - + /*@i2@*/ mdef = create_definition (buf, limit, pfile, keyword == NULL, noExpand); if (mdef.defn == 0) goto nope; - + /*@i2@*/ hashcode = cpphash_hashCode (mdef.symnam, mdef.symlen, CPP_HASHSIZE); - + /*@i2@*/ DPRINTF (("Macro: %s / %s", cstring_copyLength (mdef.symnam, mdef.symlen), bool_unparse (noExpand))); - - if ((hp = cpphash_lookup (mdef.symnam, mdef.symlen, hashcode)) != NULL) + /*@i2@*/ + if ((hp = cpphash_lookup (mdef.symnam, size_toInt (mdef.symlen), hashcode)) != NULL) { bool ok = FALSE; @@ -2803,7 +2796,7 @@ do_defineAux (cppReader *pfile, struct directive *keyword, else { BADBRANCH; } - + /*@i2@*/ /* Print the warning if it's not ok. */ if (!ok) { @@ -2819,7 +2812,7 @@ do_defineAux (cppReader *pfile, struct directive *keyword, } cpp_setLocation (pfile); - + /*@i2@*/ if (hp->type == T_MACRO) { if (hp->value.defn->noExpand) @@ -2844,7 +2837,7 @@ do_defineAux (cppReader *pfile, struct directive *keyword, message ("Macro %q already defined", cstring_copyLength (mdef.symnam, mdef.symlen))); - + /*@i2@*/ } } @@ -2860,7 +2853,7 @@ do_defineAux (cppReader *pfile, struct directive *keyword, */ hashNode hn; - + /*@i2@*/ if (CPPOPTIONS (pfile)->debug_output && (keyword != NULL)) { pass_thru_directive (buf, limit, pfile, keyword); @@ -2874,9 +2867,9 @@ do_defineAux (cppReader *pfile, struct directive *keyword, } /*@=branchstate@*/ return 0; - + /*@i2@*/ nope: - + /*@i2@*/ return 1; } @@ -2887,7 +2880,7 @@ do_define (cppReader *pfile, struct directive *keyword, DPRINTF (("Regular do define")); return do_defineAux (pfile, keyword, buf, limit, FALSE); } - + /*@i2@*/ /* This structure represents one parsed argument in a macro call. `raw' points to the argument text as written (`raw_length' is its length). `expanded' points to the argument's macro-expansion @@ -2897,11 +2890,11 @@ do_define (cppReader *pfile, struct directive *keyword, `use_count' is the number of times this macro arg is substituted into the macro. If the actual use count exceeds 10, the value stored is 10. */ - + /*@i2@*/ /* raw and expanded are relative to ARG_BASE */ /*@notfunction@*/ #define ARG_BASE ((pfile)->token_buffer) - + /*@i2@*/ struct argdata { /* Strings relative to pfile->token_buffer */ long raw; @@ -2918,11 +2911,11 @@ struct argdata { If BUFFER != NULL, then use the LENGTH characters in BUFFER as the new input buffer. Return the new buffer, or NULL on failure. */ - + /*@i2@*/ /*@null@*/ /*@exposed@*/ cppBuffer * cppReader_pushBuffer (cppReader *pfile, char *buffer, size_t length) { - cppBuffer *buf = cppReader_getBuffer (pfile); + cppBuffer *buf = cppReader_getBufferSafe (pfile); if (buf == pfile->buffer_stack) { @@ -2959,7 +2952,7 @@ cppReader_pushBuffer (cppReader *pfile, char *buffer, size_t length) return buf; } - + /*@i2@*/ cppBuffer * cppReader_popBuffer (cppReader *pfile) { @@ -2973,7 +2966,7 @@ cppReader_popBuffer (cppReader *pfile) /* Scan until CPPBUFFER (PFILE) is exhausted into PFILE->token_buffer. Pop the buffer when done. */ - + /*@i2@*/ void cppReader_scanBuffer (cppReader *pfile) { @@ -2996,6 +2989,7 @@ cppReader_scanBuffer (cppReader *pfile) } } } + /*@i2@*/ /* * Rescan a string (which may have escape marks) into pfile's buffer. @@ -3519,7 +3513,7 @@ special_symbol (hashNode hp, cppReader *pfile) case T_SPEC_DEFINED: buf = cstring_makeLiteral (" 0 "); /* Assume symbol is not defined */ ip = cppReader_getBuffer (pfile); - + llassert (ip != NULL); llassert (ip->cur != NULL); SKIP_WHITE_SPACE (ip->cur); @@ -3567,7 +3561,7 @@ special_symbol (hashNode hp, cppReader *pfile) llfatalerror (message ("Pre-processing error: invalid special hash type")); } - len = size_fromInt (cstring_length (buf)); + len = cstring_length (buf); cpplib_reserve (pfile, len + 1); cppReader_putStrN (pfile, cstring_toCharsSafe (buf), len); @@ -3895,6 +3889,8 @@ cpplib_macroExpand (cppReader *pfile, /*@dependent@*/ hashNode hp) char *oxbuf = NULL; int start_line; int start_column; + int end_line; + int end_column; size_t xbuf_len; size_t old_written = cpplib_getWritten (pfile); int rest_args; @@ -3903,8 +3899,8 @@ cpplib_macroExpand (cppReader *pfile, /*@dependent@*/ hashNode hp) struct argdata *args = NULL; pfile->output_escapes++; - cppBuffer_lineAndColumn (cppReader_fileBuffer (pfile), &start_line, &start_column); + DPRINTF (("Expand macro: %d:%d", start_line, start_column)); nargs = defn->nargs; @@ -4038,6 +4034,14 @@ cpplib_macroExpand (cppReader *pfile, /*@dependent@*/ hashNode hp) } } + /* + ** If the agrument list was multiple lines, need to insert new lines to keep line + ** numbers accurate. + */ + + cppBuffer_lineAndColumn (cppReader_fileBuffer (pfile), &end_line, &end_column); + DPRINTF (("Expand macro: %d:%d", end_line, end_column)); + /* If macro wants zero args, we parsed the arglist for checking only. Read directly from the macro definition. */ @@ -4383,8 +4387,47 @@ cpplib_macroExpand (cppReader *pfile, /*@dependent@*/ hashNode hp) /* Now put the expansion on the input stack so our caller will commence reading from it. */ + DPRINTF (("Pushing expansion: %s", cstring_copyLength (xbuf, xbuf_len))); + + if (end_line != start_line) + { + /* xbuf must have enough newlines */ + int newlines = end_line - start_line; + int foundnewlines = 0; + char *xbufptr = xbuf; + + while ((xbufptr = strchr (xbufptr, '\n')) != NULL && foundnewlines <= newlines) + { + foundnewlines++; + xbufptr++; + + if (*xbufptr == '\0') + { + break; + } + } + + if (foundnewlines < newlines) + { + cstring newbuf = cstring_copyLength (xbuf, xbuf_len); + + while (foundnewlines < newlines) + { + newbuf = cstring_appendChar (newbuf, '\n'); + foundnewlines++; + } + + sfree (oxbuf); + xbuf = cstring_toCharsSafe (newbuf); + xbuf_len = cstring_length (newbuf); + /*@-branchstate@*/ + } /*@=branchstate@*/ + } + + DPRINTF (("Pushing expansion: %s", cstring_copyLength (xbuf, xbuf_len))); + push_macro_expansion (pfile, xbuf, xbuf_len, hp); - cppReader_getBuffer (pfile)->has_escapes = 1; + cppReader_getBufferSafe (pfile)->has_escapes = 1; /* Pop the space we've used in the token_buffer for argument expansion. */ cppReader_setWritten (pfile, old_written); @@ -4500,8 +4543,7 @@ do_include (cppReader *pfile, struct directive *keyword, struct file_name_list dsp[1]; /* First in chain, if #include "..." */ struct file_name_list *searchptr = NULL; size_t old_written = cpplib_getWritten (pfile); - - int flen; + size_t flen; int f; /* file number */ int angle_brackets = 0; /* 0 for "...", 1 for <...> */ @@ -4664,10 +4706,10 @@ do_include (cppReader *pfile, struct directive *keyword, } } } - + cppReader_setWritten (pfile, old_written); - flen = fend - fbeg; + flen = size_fromInt (fend - fbeg); DPRINTF (("fbeg: %s", fbeg)); @@ -4921,21 +4963,22 @@ is_system_include (cppReader *pfile, cstring filename) searchptr != NULL; searchptr = searchptr->next) { - if (!cstring_isEmpty (searchptr->fname)) { - cstring sys_dir = searchptr->fname; - int length = cstring_length (sys_dir); - - if (cstring_equalLen (sys_dir, filename, length) - && osd_isConnectChar (cstring_getChar (filename, length))) - { - if (searchptr->c_system_include_path) - return 2; - else - return 1; - } - } + if (!cstring_isEmpty (searchptr->fname)) + { + cstring sys_dir = searchptr->fname; + size_t length = cstring_length (sys_dir); + + if (cstring_equalLen (sys_dir, filename, length) + && osd_isConnectChar (cstring_getChar (filename, length))) + { + if (searchptr->c_system_include_path) + return 2; + else + return 1; + } + } } - + return 0; } @@ -5006,6 +5049,7 @@ do_line (cppReader *pfile, /*@unused@*/ struct directive *keyword) enum file_change_code file_change = same_file; enum cpp_token token; + llassert (ip != NULL); token = get_directive_token (pfile); if (token != CPP_NUMBER @@ -5038,7 +5082,7 @@ do_line (cppReader *pfile, /*@unused@*/ struct directive *keyword) hashNode *hash_bucket; char *p; size_t num_start; - int fname_length; + size_t fname_length; /* Turn the file name, which is a character string literal, into a null-terminated string. Do this in place. */ @@ -5050,7 +5094,7 @@ do_line (cppReader *pfile, /*@unused@*/ struct directive *keyword) goto bad_line_directive; } - fname_length = end_name - fname; + fname_length = size_fromInt (end_name - fname); num_start = cpplib_getWritten (pfile); token = get_directive_token (pfile); @@ -5092,15 +5136,21 @@ do_line (cppReader *pfile, /*@unused@*/ struct directive *keyword) hash_bucket = &fname_table[cpphash_hashCode (fname, fname_length, FNAME_HASHSIZE)]; + for (hp = *hash_bucket; hp != NULL; hp = hp->next) { - if (hp->length == fname_length && - strncmp (hp->value.cpval, fname, size_fromInt (fname_length)) == 0) { - ip->nominal_fname = cstring_fromChars (hp->value.cpval); - break; - } + if (hp->length == fname_length) + { + llassert (hp->value.cpval != NULL); + + if (strncmp (hp->value.cpval, fname, fname_length) == 0) + { + ip->nominal_fname = cstring_fromChars (hp->value.cpval); + break; + } + } } - + if (hp == 0) { /* Didn't find it; cons up a new one. */ hp = (hashNode) dmalloc (sizeof (*hp)); @@ -5115,7 +5165,7 @@ do_line (cppReader *pfile, /*@unused@*/ struct directive *keyword) hp->length = fname_length; hp->value.cpval = dmalloc (sizeof (*hp->value.cpval) * (fname_length + 1)); - memcpy (hp->value.cpval, fname, size_fromInt (fname_length)); + memcpy (hp->value.cpval, fname, fname_length); hp->value.cpval[fname_length] = '\0'; ip->nominal_fname = cstring_fromChars (hp->value.cpval); } @@ -5149,7 +5199,7 @@ static int do_undef (cppReader *pfile, struct directive *keyword, char *buf, char *limit) { - int sym_length; + size_t sym_length; hashNode hp; char *orig_buf = buf; @@ -5157,7 +5207,7 @@ do_undef (cppReader *pfile, struct directive *keyword, char *buf, char *limit) sym_length = cppReader_checkMacroName (pfile, buf, cstring_makeLiteralTemp ("macro")); - while ((hp = cpphash_lookup (buf, sym_length, -1)) != NULL) + while ((hp = cpphash_lookup (buf, size_toInt (sym_length), -1)) != NULL) { /* If we are generating additional info for debugging (with -g) we need to pass through all effective #undef commands. */ @@ -5200,7 +5250,7 @@ static int do_error (cppReader *pfile, /*@unused@*/ struct directive *keyword, char *buf, char *limit) { - int length = limit - buf; + size_t length = size_fromInt (limit - buf); cstring copy = cstring_copyLength (buf, length); cstring adv = cstring_advanceWhiteSpace (copy); @@ -5219,7 +5269,7 @@ static int do_warning (cppReader *pfile, /*@unused@*/ struct directive *keyword, char *buf, char *limit) { - int length = limit - buf; + size_t length = size_fromInt (limit - buf); cstring copy = cstring_copyLength (buf, length); cstring adv = cstring_advanceWhiteSpace (copy); cppReader_warning (pfile, message ("#warning %s", adv)); @@ -5235,7 +5285,8 @@ do_ident (cppReader *pfile, /*@unused@*/ struct directive *keyword, /*@unused@*/ char *buf, /*@unused@*/ char *limit) { /* Allow #ident in system headers, since that's not user's fault. */ - if (cppReader_isPedantic (pfile) && !cppReader_getBuffer (pfile)->system_header_p) + if (cppReader_isPedantic (pfile) + && !cppReader_getBufferSafe (pfile)->system_header_p) cppReader_pedwarnLit (pfile, cstring_makeLiteralTemp ("ANSI C does not allow `#ident'")); @@ -5261,14 +5312,14 @@ do_pragma (cppReader *pfile, /*@unused@*/ struct directive *keyword, been included yet. */ struct file_name_list *ptr; char *p = buf + 14, *fname, *inc_fname; - int fname_len; + size_t fname_len; SKIP_WHITE_SPACE (p); if (*p == '\n' || *p != '\"') return 0; fname = p + 1; p = (char *) strchr (fname, '\"'); - fname_len = p != NULL ? p - fname : mstring_length (fname); + fname_len = p != NULL ? size_fromInt (p - fname) : mstring_length (fname); for (ptr = pfile->all_include_files; ptr != NULL; ptr = ptr->next) { @@ -5277,7 +5328,7 @@ do_pragma (cppReader *pfile, /*@unused@*/ struct directive *keyword, ? inc_fname + 1 : cstring_toCharsSafe (ptr->fname); if ((inc_fname != NULL) - && (strncmp (inc_fname, fname, size_fromInt (fname_len)) == 0)) + && (strncmp (inc_fname, fname, fname_len) == 0)) { cpp_setLocation (pfile); @@ -5323,7 +5374,7 @@ do_if (cppReader *pfile, /*@unused@*/ struct directive *keyword, static int do_elif (cppReader *pfile, /*@unused@*/ struct directive *keyword, char *buf, char *limit) { - if (pfile->if_stack == cppReader_getBuffer (pfile)->if_stack) + if (pfile->if_stack == cppReader_getBufferSafe (pfile)->if_stack) { cppReader_errorLit (pfile, cstring_makeLiteralTemp ("Preprocessor command #elif is not within a conditional")); @@ -5339,9 +5390,9 @@ static int do_elif (cppReader *pfile, /*@unused@*/ struct directive *keyword, cstring_makeLiteralTemp ("`#elif' after `#else'")); if (pfile->if_stack->fname != NULL - && cppReader_getBuffer (pfile)->fname != NULL + && cppReader_getBufferSafe (pfile)->fname != NULL && !cstring_equal (pfile->if_stack->fname, - cppReader_getBuffer (pfile)->nominal_fname)) + cppReader_getBufferSafe (pfile)->nominal_fname)) fprintf (stderr, ", file %s", cstring_toCharsSafe (pfile->if_stack->fname)); fprintf (stderr, ")\n"); } @@ -5407,9 +5458,9 @@ do_xifdef (cppReader *pfile, struct directive *keyword, /*@unused@*/ char *unused1, /*@unused@*/ char *unused2) { int skip; - cppBuffer *ip = cppReader_getBuffer (pfile); + cppBuffer *ip = cppReader_getBufferSafe (pfile); char *ident; - int ident_length; + size_t ident_length; enum cpp_token token; int start_of_file = 0; char *control_macro = 0; @@ -5431,7 +5482,7 @@ do_xifdef (cppReader *pfile, struct directive *keyword, ident = pfile->token_buffer + old_written; DPRINTF (("Ident: %s", ident)); - ident_length = size_toInt (cpplib_getWritten (pfile) - old_written); + ident_length = cpplib_getWritten (pfile) - old_written; cppReader_setWritten (pfile, old_written); /* Pop */ if (token == CPP_VSPACE || token == CPP_POP || token == CPP_EOF) @@ -5445,17 +5496,11 @@ do_xifdef (cppReader *pfile, struct directive *keyword, } else if (token == CPP_NAME) { - hashNode hp = cpphash_lookup (ident, ident_length, -1); + hashNode hp = cpphash_lookup (ident, size_toInt (ident_length), -1); - DPRINTF (("Lookup: %s %d", ident, ident_length)); - - skip = (keyword->type == T_IFDEF) - ? (hp == NULL) : (hp != NULL); + skip = (keyword->type == T_IFDEF) ? (hp == NULL) : (hp != NULL); - DPRINTF (("hp null: %d / %d / %d", - (hp == NULL), - (keyword->type == T_IFNDEF), - skip)); + DPRINTF (("hp null: %d / %d / %d", hp == NULL, keyword->type == T_IFNDEF, skip)); if (start_of_file && !skip) { @@ -5505,7 +5550,7 @@ conditional_skip (cppReader *pfile, int skip, { cppIfStackFrame *temp = (cppIfStackFrame *) dmalloc (sizeof (*temp)); - temp->fname = cppReader_getBuffer (pfile)->nominal_fname; + temp->fname = cppReader_getBufferSafe (pfile)->nominal_fname; temp->next = pfile->if_stack; temp->control_macro = control_macro; temp->lineno = 0; @@ -5554,7 +5599,7 @@ skip_if_group (cppReader *pfile, int any) beg_of_line: if (CPPOPTIONS (pfile)->output_conditionals) { - cppBuffer *pbuf = cppReader_getBuffer (pfile); + cppBuffer *pbuf = cppReader_getBufferSafe (pfile); char *start_line; llassert (pbuf->buf != NULL); @@ -5600,7 +5645,7 @@ beg_of_line: case T_IFNDEF: temp = (cppIfStackFrame *) dmalloc (sizeof (*temp)); temp->next = pfile->if_stack; - temp->fname = cppReader_getBuffer (pfile)->nominal_fname; + temp->fname = cppReader_getBufferSafe (pfile)->nominal_fname; temp->type = kt->type; temp->lineno = 0; temp->if_succeeded = 0; @@ -5615,7 +5660,7 @@ beg_of_line: cstring_makeLiteralTemp (kt->type == T_ELSE ? "#else" : "#endif")); /*@fallthrough@*/ case T_ELIF: - if (pfile->if_stack == cppReader_getBuffer (pfile)->if_stack) + if (pfile->if_stack == cppReader_getBufferSafe (pfile)->if_stack) { cppReader_error (pfile, message ("Preprocessor command #%s is not within a conditional", kt->name)); @@ -5736,7 +5781,7 @@ do_else (cppReader *pfile, /*@unused@*/ struct directive *keyword, cppReader_skipRestOfLine (pfile); - if (pfile->if_stack == cppReader_getBuffer (pfile)->if_stack) { + if (pfile->if_stack == cppReader_getBufferSafe (pfile)->if_stack) { cppReader_errorLit (pfile, cstring_makeLiteralTemp ("Preprocessor command #else is not within a conditional")); return 0; @@ -5786,7 +5831,7 @@ do_endif (cppReader *pfile, /*@unused@*/ struct directive *keyword, cppReader_skipRestOfLine (pfile); - if (pfile->if_stack == cppReader_getBuffer (pfile)->if_stack) + if (pfile->if_stack == cppReader_getBufferSafe (pfile)->if_stack) { cppReader_errorLit (pfile, cstring_makeLiteralTemp ("Unbalanced #endif")); } @@ -5831,7 +5876,7 @@ do_endif (cppReader *pfile, /*@unused@*/ struct directive *keyword, for ( ; ifile != NULL; ifile = ifile->next) { - if (cstring_equal (ifile->fname, cppReader_getBuffer (pfile)->fname)) + if (cstring_equal (ifile->fname, cppReader_getBufferSafe (pfile)->fname)) { ifile->control_macro = temp->control_macro; break; @@ -5888,7 +5933,7 @@ cpplib_getTokenAux (cppReader *pfile, bool forceExpand) int start_line, start_column; enum cpp_token token; struct cppOptions *opts = CPPOPTIONS (pfile); - cppReader_getBuffer (pfile)->prev = cppReader_getBuffer (pfile)->cur; + cppReader_getBufferSafe (pfile)->prev = cppReader_getBufferSafe (pfile)->cur; get_next: c = cppReader_getC (pfile); @@ -5897,7 +5942,7 @@ get_next: if (c == EOF) { handle_eof: - if (cppReader_getBuffer (pfile)->seen_eof) + if (cppReader_getBufferSafe (pfile)->seen_eof) { cppBuffer *buf = cppReader_popBuffer (pfile); @@ -5912,10 +5957,10 @@ get_next: } else { - cppBuffer *next_buf = cppBuffer_prevBuffer (cppReader_getBuffer (pfile)); - cppReader_getBuffer (pfile)->seen_eof = 1; + cppBuffer *next_buf = cppBuffer_prevBuffer (cppReader_getBufferSafe (pfile)); + cppReader_getBufferSafe (pfile)->seen_eof = 1; - if (cstring_isDefined (cppReader_getBuffer (pfile)->nominal_fname) + if (cstring_isDefined (cppReader_getBufferSafe (pfile)->nominal_fname) && next_buf != cppReader_nullBuffer (pfile)) { /* We're about to return from an #include file. @@ -6027,9 +6072,9 @@ get_next: Otherwise, only -D can make a macro with an unmatched quote. */ cppBuffer *next_buf - = cppBuffer_prevBuffer (cppReader_getBuffer (pfile)); - (*cppReader_getBuffer (pfile)->cleanup) - (cppReader_getBuffer (pfile), pfile); + = cppBuffer_prevBuffer (cppReader_getBufferSafe (pfile)); + (*cppReader_getBufferSafe (pfile)->cleanup) + (cppReader_getBufferSafe (pfile), pfile); CPPBUFFER (pfile) = next_buf; continue; } @@ -6220,7 +6265,7 @@ get_next: return CPP_OTHER; case '@': - if (cppReader_getBuffer (pfile)->has_escapes) + if (cppReader_getBufferSafe (pfile)->has_escapes) { c = cppReader_getC (pfile); if (c == '-') @@ -6375,7 +6420,7 @@ get_next: hashNode hp; char *ident; size_t before_name_written = cpplib_getWritten (pfile); - int ident_len; + size_t ident_len; parse_name (pfile, c); pfile->only_seen_white = 0; @@ -6388,9 +6433,9 @@ get_next: ident = pfile->token_buffer + before_name_written; DPRINTF (("Ident: %s", ident)); - ident_len = (cpplib_getPWritten (pfile)) - ident; + ident_len = size_fromInt ((cpplib_getPWritten (pfile)) - ident); - hp = cpphash_lookupExpand (ident, ident_len, -1, forceExpand); + hp = cpphash_lookupExpand (ident, size_toInt (ident_len), -1, forceExpand); if (hp == NULL) { @@ -6409,7 +6454,7 @@ get_next: ident = pfile->token_buffer + before_name_written; cppReader_adjustWritten (pfile, 2); - for (i = ident_len; i >= 0; i--) + for (i = size_toInt (ident_len); i >= 0; i--) { ident[i+2] = ident[i]; } @@ -6441,8 +6486,8 @@ get_next: /*@loopbreak@*/ break; } - next_buf = cppBuffer_prevBuffer (cppReader_getBuffer (pfile)); - (*cppReader_getBuffer (pfile)->cleanup) (cppReader_getBuffer (pfile), pfile); + next_buf = cppBuffer_prevBuffer (cppReader_getBufferSafe (pfile)); + (*cppReader_getBufferSafe (pfile)->cleanup) (cppReader_getBufferSafe (pfile), pfile); CPPBUFFER (pfile) = next_buf; } @@ -6657,7 +6702,7 @@ struct file_name_map_list { struct file_name_map_list *map_list_next; cstring map_list_name; - struct file_name_map *map_list_map; + /*@null@*/ struct file_name_map *map_list_map; }; /* Read the file name map file for DIRNAME. */ @@ -6845,7 +6890,7 @@ open_include_file (cppReader *pfile, if ((searchptr != NULL) && (cstring_isDefined (searchptr->fname)) - && (cstring_length (searchptr->fname) == p - filename) + && (size_toInt (cstring_length (searchptr->fname)) == p - filename) && !strncmp (cstring_toCharsSafe (searchptr->fname), filename, size_fromInt (p - filename))) @@ -6939,7 +6984,7 @@ finclude (cppReader *pfile, int f, /*@=mustfree@*/ } - fp = cppReader_getBuffer (pfile); + fp = cppReader_getBufferSafe (pfile); /*@-temptrans@*/ /* fname shouldn't really be temp */ fp->nominal_fname = fp->fname = fname; @@ -7170,7 +7215,7 @@ static int safe_read (int desc, char *ptr, int len) void parseSetMark (struct parse_marker *pmark, cppReader *pfile) { - cppBuffer *pbuf = cppReader_getBuffer (pfile); + cppBuffer *pbuf = cppReader_getBufferSafe (pfile); pmark->next = pbuf->marks; /*@-temptrans@*/ @@ -7201,7 +7246,7 @@ void parseClearMark (struct parse_marker *pmark) void parseGotoMark (struct parse_marker *pmark, cppReader *pfile) { - cppBuffer *pbuf = cppReader_getBuffer (pfile); + cppBuffer *pbuf = cppReader_getBufferSafe (pfile); if (pbuf != pmark->buf) { @@ -7219,7 +7264,7 @@ parseGotoMark (struct parse_marker *pmark, cppReader *pfile) void parseMoveMark (struct parse_marker *pmark, cppReader *pfile) { - cppBuffer *pbuf = cppReader_getBuffer (pfile); + cppBuffer *pbuf = cppReader_getBufferSafe (pfile); if (pbuf != pmark->buf) { @@ -7414,20 +7459,21 @@ void cpplib_initializeReader (cppReader *pfile) /* Must be done after library is /* Unless -fnostdinc, tack on the standard include file dirs to the specified list */ + if (!opts->no_standard_includes) { struct default_include *p = include_defaults; char *specd_prefix = opts->include_prefix; char *default_prefix = mstring_copy (GCC_INCLUDE_DIR); int default_len = 0; - - /* Remove the `include' from /usr/local/lib/gcc.../include. */ - if (default_prefix != NULL) { - if (!strcmp (default_prefix + strlen (default_prefix) - 8, "/include")) { - default_len = strlen (default_prefix) - 7; - default_prefix[default_len] = 0; + + /* Remove the `include' from /usr/local/lib/gcc.../include. */ + if (default_prefix != NULL) { + if (!strcmp (default_prefix + strlen (default_prefix) - 8, "/include")) { + default_len = strlen (default_prefix) - 7; + default_prefix[default_len] = 0; + } } - } - + /* Search "translated" versions of GNU directories. These have /usr/local/lib/gcc... replaced by specd_prefix. */ if (specd_prefix != 0 && default_len != 0) @@ -7436,6 +7482,8 @@ void cpplib_initializeReader (cppReader *pfile) /* Must be done after library is if (!p->cplusplus || (opts->cplusplus && !opts->no_standard_cplusplus_includes)) { /* Does this dir start with the prefix? */ + llassert (default_prefix != NULL); + if (!strncmp (cstring_toCharsSafe (p->fname), default_prefix, size_fromInt (default_len))) { @@ -7624,9 +7672,9 @@ static void cpp_setLocation (cppReader *pfile) if (pfile->buffer != NULL) { - if (cstring_isDefined (cppReader_getBuffer (pfile)->nominal_fname)) + if (cstring_isDefined (cppReader_getBufferSafe (pfile)->nominal_fname)) { - cstring fname = cppReader_getBuffer (pfile)->nominal_fname; + cstring fname = cppReader_getBufferSafe (pfile)->nominal_fname; DPRINTF (("Looking up: %s", fname)); @@ -7639,16 +7687,16 @@ static void cpp_setLocation (cppReader *pfile) DPRINTF (("Trying %s", cppReader_getBuffer (pfile)->fname)); fid = fileTable_lookup (context_fileTable (), - cppReader_getBuffer (pfile)->fname); + cppReader_getBufferSafe (pfile)->fname); } } else { fid = fileTable_lookup (context_fileTable (), - cppReader_getBuffer (pfile)->fname); + cppReader_getBufferSafe (pfile)->fname); } - line = cppReader_getBuffer (pfile)->lineno; + line = cppReader_getBufferSafe (pfile)->lineno; fileloc_free (g_currentloc); if (fileId_isValid (fid)) @@ -7946,9 +7994,10 @@ static bool cpp_shouldCheckMacro (cppReader *pfile, char *p) /*@modifies p*/ static enum cpp_token cpp_handleComment (cppReader *pfile, struct parse_marker *smark) { - cppBuffer *pbuf = cppReader_getBuffer (pfile); + cppBuffer *pbuf = cppReader_getBufferSafe (pfile); char *start; int len; + fileloc loc; bool eliminateComment = FALSE; llassert (pbuf->buf != NULL); @@ -7965,6 +8014,9 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) char c = ' '; char *scomment = start + 2; char savec = start[len]; + + cpp_setLocation (pfile); + loc = fileloc_copy (g_currentloc); start[0] = BEFORE_COMMENT_MARKER[0]; start[1] = BEFORE_COMMENT_MARKER[1]; @@ -7997,14 +8049,14 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) { if (!context_getFlag (FLG_NOCOMMENTS)) { - context_enterSuppressRegion (); + context_enterSuppressRegion (loc); } } else if (mstring_equalPrefix (scomment, "end")) { if (!context_getFlag (FLG_NOCOMMENTS)) { - context_exitSuppressRegion (); + context_exitSuppressRegion (loc); } } else if (mstring_equalPrefix (scomment, "notparseable")) @@ -8084,27 +8136,32 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) { /* fix from Mike Miller */ context_fileSetFlag (FLG_NESTCOMMENT, - ynm_fromCodeChar (sChar)); + ynm_fromCodeChar (sChar), + loc); } else if (mstring_equalPrefix (rest, "namechecks")) { context_fileSetFlag (FLG_NAMECHECKS, - ynm_fromCodeChar (sChar)); + ynm_fromCodeChar (sChar), + loc); } else if (mstring_equalPrefix (rest, "macroredef")) { context_fileSetFlag (FLG_MACROREDEF, - ynm_fromCodeChar (sChar)); + ynm_fromCodeChar (sChar), + loc); } else if (mstring_equalPrefix (rest, "usevarargs")) { context_fileSetFlag (FLG_USEVARARGS, - ynm_fromCodeChar (sChar)); + ynm_fromCodeChar (sChar), + loc); } else if (mstring_equalPrefix (rest, "nextlinemacros")) { context_fileSetFlag (FLG_MACRONEXTLINE, - ynm_fromCodeChar (sChar)); + ynm_fromCodeChar (sChar), + loc); } else if (mstring_equalPrefix (rest, "allmacros") || mstring_equalPrefix (rest, "fcnmacros") @@ -8126,8 +8183,7 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) fl = FLG_CONSTMACROS; } - - context_fileSetFlag (fl, ynm_fromCodeChar (sChar)); + context_fileSetFlag (fl, ynm_fromCodeChar (sChar), loc); notfunction = FALSE; } else @@ -8213,11 +8269,11 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) c = BEFORE_COMMENT_MARKER[0]; start[0] = BEFORE_COMMENT_MARKER[1]; - llassert (cstring_length (lintcomment) == len - 3); + llassert (size_toLong (cstring_length (lintcomment)) == len - 3); for (i = 1; i < len - 2; i++) { - start[i] = cstring_getChar (lintcomment, i); + start[i] = cstring_getChar (lintcomment, size_fromInt (i)); } start[len - 2] = AFTER_COMMENT_MARKER[0]; @@ -8231,9 +8287,10 @@ cpp_handleComment (cppReader *pfile, struct parse_marker *smark) if (start[i] == '/' && i < len - 1 && start[i + 1] == '*') { - (void) cppoptgenerror (FLG_NESTCOMMENT, - message ("Comment starts inside comment"), - pfile); + (void) cppoptgenerror + (FLG_NESTCOMMENT, + message ("Comment starts inside comment"), + pfile); } if (start[i] != '\n') @@ -8326,7 +8383,7 @@ static bool cpp_skipIncludeFile (cstring fname) static int cpp_peekN (cppReader *pfile, int n) { - cppBuffer *buf = cppReader_getBuffer (pfile); + cppBuffer *buf = cppReader_getBufferSafe (pfile); llassert (buf->cur != NULL); diff --git a/src/cppmain.c b/src/cppmain.c index d10b2cc..74c68ba 100644 --- a/src/cppmain.c +++ b/src/cppmain.c @@ -211,14 +211,14 @@ void cppDoDefine (cstring str) void cppDoUndefine (cstring str) { - int sym_length; + size_t sym_length; hashNode hp; char *buf = cstring_toCharsSafe (str); sym_length = cppReader_checkMacroName (&g_cppState, buf, - cstring_makeLiteralTemp ("macro")); + cstring_makeLiteralTemp ("macro")); - while ((hp = cpphash_lookup (buf, sym_length, -1)) != NULL) + while ((hp = cpphash_lookup (buf, size_toInt (sym_length), -1)) != NULL) { /*@-exposetrans@*/ /*@-dependenttrans@*/ cppReader_deleteMacro (hp); diff --git a/src/cscanner.l b/src/cscanner.l index 74a3779..7e1e445 100644 --- a/src/cscanner.l +++ b/src/cscanner.l @@ -1995,7 +1995,7 @@ static int handleLlSpecial () (FLG_SYNTAX, message ("Likely parse error: syntactic comment token spans multiple lines: %s", cstring_fromChars (s)), - g_currentloc); + loc); } s = mstring_append (s, c); @@ -2073,7 +2073,7 @@ static int handleLlSpecial () (FLG_UNRECOGFLAGCOMMENTS, message ("Unrecognized option in semantic comment: %s", flagname), - g_currentloc); + loc); } } else if (flagcode_isGlobalFlag (fflag)) @@ -2084,11 +2084,11 @@ static int handleLlSpecial () ("Semantic comment attempts to set global flag %s. " "A global flag cannot be set locally.", flagname), - g_currentloc); + loc); } else { - context_fileSetFlag (fflag, set); + context_fileSetFlag (fflag, set, loc); if (flagcode_hasArgument (fflag)) { @@ -2100,7 +2100,7 @@ static int handleLlSpecial () ("Semantic comment attempts to restore flag %s. " "A flag for setting a value cannot be restored.", flagname), - g_currentloc); + loc); } else { /* cut-and-pastied from llmain...blecch */ @@ -2179,7 +2179,7 @@ static int handleLlSpecial () if (context_inHeader () && !isArtificial (cstring_fromChars (os))) { DPRINTF (("Here adding comment: %s", os)); - context_addComment (cstring_fromCharsNew (os)); + context_addComment (cstring_fromCharsNew (os), loc); } else { @@ -2247,8 +2247,14 @@ static int handleLlSpecial () && macrocode != SKIPTOK && !isArtificial (cstring_fromChars (os))) { - DPRINTF (("Add comment: %s", os)); - context_addComment (cstring_fromCharsNew (os)); + if (context_processingMacros ()) + { + /* evans 2002-02-24: don't add comments when procssing macros */ + } + else + { + context_addComment (cstring_fromCharsNew (os), loc); + } } else { @@ -2265,7 +2271,7 @@ static int handleLlSpecial () { if (!context_getFlag (FLG_NOCOMMENTS)) { - context_enterSuppressRegion (); + context_enterSuppressRegion (loc); } } else if ((*t == 'i' || *t == 't') @@ -2274,7 +2280,7 @@ static int handleLlSpecial () if (!context_getFlag (FLG_NOCOMMENTS) && (*t == 'i' || context_getFlag (FLG_TMPCOMMENTS))) { - context_enterSuppressLine (-1); /* infinite suppression */ + context_enterSuppressLine (-1, loc); /* infinite suppression */ } } else if (((*t == 'i') || (*t == 't')) @@ -2297,19 +2303,19 @@ static int handleLlSpecial () lc = *(++tt); } } - if (!context_getFlag (FLG_NOCOMMENTS) && (!tmpcomment || context_getFlag (FLG_TMPCOMMENTS))) { - context_enterSuppressLine (val); + DPRINTF (("Here: enter suppress: %s", fileloc_unparse (loc))); + context_enterSuppressLine (val, loc); } } else if (mstring_equal (t, "end")) { if (!context_getFlag (FLG_NOCOMMENTS)) { - context_exitSuppressRegion (); + context_exitSuppressRegion (loc); } } else if (mstring_equal (t, "notfunction")) @@ -2364,20 +2370,20 @@ static int handleLlSpecial () message ("Non-abstract type %s used in access comment", tname), - g_currentloc); + loc); } } else { if (!(context_inSuppressRegion () - || context_inSuppressZone (g_currentloc))) + || context_inSuppressZone (loc))) { voptgenerror (FLG_COMMENTERROR, message ("Unrecognized type %s used in access comment", tname), - g_currentloc); + loc); } } } @@ -2435,7 +2441,7 @@ static int handleLlSpecial () else { if (!(context_inSuppressRegion () - || context_inSuppressZone (g_currentloc))) + || context_inSuppressZone (loc))) { uentry ue = usymtab_getTypeEntry (tuid); @@ -2446,7 +2452,7 @@ static int handleLlSpecial () message ("Non-accessible abstract type %s used in noaccess comment", tname), - g_currentloc); + loc); } else { @@ -2455,7 +2461,7 @@ static int handleLlSpecial () message ("Non-abstract type %s used in noaccess comment", tname), - g_currentloc); + loc); } } } @@ -2463,14 +2469,14 @@ static int handleLlSpecial () else { if (!(context_inSuppressRegion () - || context_inSuppressZone (g_currentloc))) + || context_inSuppressZone (loc))) { voptgenerror (FLG_COMMENTERROR, message ("Unrecognized type %s used in noaccess comment", tname), - g_currentloc); + loc); } } } @@ -2490,9 +2496,10 @@ static int handleLlSpecial () { voptgenerror (FLG_UNRECOGCOMMENTS, message ("Semantic comment unrecognized: %s", - cstring_fromChars (os)), loc); + cstring_fromChars (os)), + loc); } - + sfree (t); } @@ -2657,6 +2664,14 @@ static int processIdentifier (cstring id) { tok = CALIGNOF; /* alignof is parsed like sizeof */ } + else if (cstring_equalLit (id, "__typeof__")) + { + tok = CTYPEOF; + } + else if (cstring_equalLit (id, "typeof")) + { + tok = CTYPEOF; + } else if (cstring_equalLit (id, "__FUNCTION__") || cstring_equalLit (id, "__PRETTY_FUNCTION__")) { diff --git a/src/cstring.c b/src/cstring.c index 2569546..4f3dd7a 100644 --- a/src/cstring.c +++ b/src/cstring.c @@ -50,9 +50,9 @@ char cstring_firstChar (cstring s) return (s[0]); } -char cstring_getChar (cstring s, int n) +char cstring_getChar (cstring s, size_t n) { - int length = cstring_length (s); + size_t length = cstring_length (s); llassert (cstring_isDefined (s)); llassert (n >= 1 && n <= length); @@ -60,7 +60,7 @@ char cstring_getChar (cstring s, int n) return (s[n - 1]); } -cstring cstring_suffix (cstring s, int n) +cstring cstring_suffix (cstring s, size_t n) { llassert (cstring_isDefined (s)); llassert (n <= cstring_length (s)); @@ -68,7 +68,9 @@ cstring cstring_suffix (cstring s, int n) return (s + n); } -cstring cstring_prefix (cstring s, int n) /*@requires maxRead(s) >= n /\ maxSet(s) >= n @*/ /*@ensures maxRead(result) == n /\ maxSet(result) == n @*/ +cstring cstring_prefix (cstring s, size_t n) + /*@requires maxRead(s) >= n /\ maxSet(s) >= n @*/ + /*@ensures maxRead(result) == n /\ maxSet(result) == n @*/ { cstring t; char c; @@ -137,7 +139,7 @@ cstring cstring_beforeChar (cstring s, char c) return cstring_undefined; } -void cstring_setChar (cstring s, int n, char c) /*@requires maxRead(s) >= (n - 1) /\ maxSet(s) >= (n - 1) @*/ +void cstring_setChar (cstring s, size_t n, char c) /*@requires maxRead(s) >= (n - 1) /\ maxSet(s) >= (n - 1) @*/ { llassert (cstring_isDefined (s)); llassert (n > 0 && n <= cstring_length (s)); @@ -147,7 +149,7 @@ void cstring_setChar (cstring s, int n, char c) /*@requires maxRead(s) >= (n - 1 char cstring_lastChar (cstring s) { - int length; + size_t length; llassert (cstring_isDefined (s)); @@ -169,11 +171,11 @@ char cstring_lastChar (cstring s) } } -/*@only@*/ cstring cstring_copyLength (char *s, int len) /*@requires maxSet(s) >= (len - 1) @*/ +/*@only@*/ cstring cstring_copyLength (char *s, size_t len) /*@requires maxSet(s) >= (len - 1) @*/ { char *res = mstring_create (len + 1); - strncpy (res, s, size_fromInt (len)); + strncpy (res, s, len); res[len] = '\0'; return res; } @@ -259,11 +261,12 @@ void cstring_stripChars (cstring s, const char *clist) if (cstring_isDefined (s)) { int i; - int size = cstring_length (s); + size_t size = cstring_length (s); - for (i = 0; i < size; i++) + for (i = 0; i < size_toInt (size); i++) { -/*drl bee: is*/ char c = s[i]; + /*drl bee: is*/ + char c = s[i]; if (strchr (clist, c) != NULL) { @@ -271,13 +274,13 @@ void cstring_stripChars (cstring s, const char *clist) int j; size--; - - for (j = i; j < size; j++) + + for (j = i; j < size_toInt (size); j++) { - /*drl bee: is*/ /*drl bee: is*/ s[j] = s[j+1]; + /*drl bee: is*/ /*drl bee: is*/ s[j] = s[j+1]; } - - /*drl bee: is*/ s[size] = '\0'; + + /*drl bee: is*/ s[size] = '\0'; i--; } } @@ -323,9 +326,10 @@ static char lookLike (char c) /*@*/ } cmpcode cstring_genericEqual (cstring s, cstring t, - int nchars, + size_t nchars, bool caseinsensitive, - bool lookalike) /*@requires maxRead(s) >= nchars /\ maxRead(t) >= nchars @*/ + bool lookalike) + /*@requires maxRead(s) >= nchars /\ maxRead(t) >= nchars @*/ { if (s == t) return CGE_SAME; else if (cstring_isUndefined (s)) @@ -344,7 +348,7 @@ cmpcode cstring_genericEqual (cstring s, cstring t, while (*s != '\0') { - if (nchars > 0 && i >= nchars) + if (nchars > 0 && i >= size_toInt (nchars)) { break; } @@ -411,12 +415,12 @@ bool cstring_equal (cstring c1, cstring c2) else return (strcmp (c1, c2) == 0); } -bool cstring_equalLen (cstring c1, cstring c2, int len) +bool cstring_equalLen (cstring c1, cstring c2, size_t len) { if (c1 == c2) return TRUE; else if (cstring_isUndefined (c1)) return cstring_isEmpty (c2); else if (cstring_isUndefined (c2)) return cstring_isEmpty (c1); - else return (strncmp (c1, c2, size_fromInt (len)) == 0); + else return (strncmp (c1, c2, len) == 0); } bool cstring_equalCaseInsensitive (cstring c1, cstring c2) @@ -427,10 +431,8 @@ bool cstring_equalCaseInsensitive (cstring c1, cstring c2) else return (cstring_genericEqual (c1, c2, 0, TRUE, FALSE) != CGE_DISTINCT); } -bool cstring_equalLenCaseInsensitive (cstring c1, cstring c2, int len) +bool cstring_equalLenCaseInsensitive (cstring c1, cstring c2, size_t len) { - llassert (len >= 0); - if (c1 == c2) return TRUE; else if (cstring_isUndefined (c1)) return cstring_isEmpty (c2); else if (cstring_isUndefined (c2)) return cstring_isEmpty (c1); @@ -544,12 +546,13 @@ cstring cstring_fromChars (/*@exposed@*/ const char *cp) } } -int cstring_length (cstring s) +size_t cstring_length (cstring s) { if (cstring_isDefined (s)) { - return size_toInt (strlen (s)); + return strlen (s); } + return 0; } @@ -580,7 +583,7 @@ cstring_capitalizeFree (cstring s) /*@requires maxSet(s) >= 0 /\ maxRead(s) >= 0 } cstring -cstring_clip (cstring s, int len) +cstring_clip (cstring s, size_t len) { if (cstring_isUndefined (s) || cstring_length (s) <= len) { @@ -589,14 +592,15 @@ cstring_clip (cstring s, int len) else { llassert (s != NULL); - /*drl bee: mrms*/ *(s + len) = '\0'; + /*drl bee: mrms*/ + *(s + len) = '\0'; } - + return s; } /*@only@*/ cstring -cstring_elide (cstring s, int len) +cstring_elide (cstring s, size_t len) { if (cstring_isUndefined (s) || cstring_length (s) <= len) { @@ -605,23 +609,25 @@ cstring_elide (cstring s, int len) else { cstring sc = cstring_create (len); - - strncpy (sc, s, size_fromInt (len)); - /*drl bee: mrms*/ *(sc + len - 1) = '\0'; + + strncpy (sc, s, len); + /*drl bee: mrms*/ + *(sc + len - 1) = '\0'; *(sc + len - 2) = '.'; *(sc + len - 3) = '.'; *(sc + len - 4) = '.'; + return sc; } } /*@only@*/ cstring -cstring_fill (cstring s, int n) /*@requires n >= 0 @*/ +cstring_fill (cstring s, size_t n) /*@requires n >= 0 @*/ { cstring t = cstring_create (n + 1); cstring ot = t; - int len = cstring_length (s); - int i; + size_t len = cstring_length (s); + size_t i; if (len > n) { @@ -683,7 +689,7 @@ cstring_downcase (cstring s) /*@notnull@*/ cstring cstring_appendChar (/*@only@*/ cstring s1, char c) { - int l = cstring_length (s1); + size_t l = cstring_length (s1); char *s; s = (char *) dmalloc (sizeof (*s) * (l + 2)); @@ -732,7 +738,7 @@ cstring_concatChars (cstring s, char *t) # endif /*@only@*/ cstring -cstring_concatLength (cstring s1, char *s2, int len) /*@requires maxSet(s2) >= (len - 1) @*/ +cstring_concatLength (cstring s1, char *s2, size_t len) /*@requires maxSet(s2) >= (len - 1) @*/ { cstring tmp = cstring_copyLength (s2, len); cstring res = cstring_concat (s1, tmp); @@ -771,7 +777,7 @@ cstring_prependCharO (char c, /*@only@*/ cstring s1) /*@notnull@*/ /*@only@*/ cstring cstring_prependChar (char c, /*@temp@*/ cstring s1) { - int l = cstring_length (s1); + size_t l = cstring_length (s1); char *s = (char *) dmalloc (sizeof (*s) * (l + 2)); /*drl bee: dm*/ *(s) = c; @@ -810,16 +816,16 @@ cstring_hasNonAlphaNumBar (cstring s) # endif /*@only@*/ /*@notnull@*/ cstring -cstring_create (int n) +cstring_create (size_t n) { char *s = dmalloc (sizeof (*s) * (n + 1)); - - /*drl bee: dm*/ *s = '\0'; + + /*drl bee: dm*/ *s = '\0'; return s; } /*@only@*/ /*@notnull@*/ cstring -cstring_copySegment (cstring s, int findex, int tindex) +cstring_copySegment (cstring s, size_t findex, size_t tindex) { cstring res = cstring_create (tindex - findex + 1); @@ -985,7 +991,7 @@ static mstring doExpandEscapes (cstring s, /*@out@*/ int * len) llassert(cstring_isDefined (s)); - ret = mstring_create (cstring_length(s) ); + ret = mstring_create (cstring_length(s)); ptr = s; diff --git a/src/cstringList.c b/src/cstringList.c index dc4d612..145c8d2 100644 --- a/src/cstringList.c +++ b/src/cstringList.c @@ -174,7 +174,7 @@ cstringList_unparseSep (cstringList s, cstring sep) } void -cstringList_printSpaced (cstringList s, int indent, int gap, int linelen) +cstringList_printSpaced (cstringList s, size_t indent, size_t gap, int linelen) { if (cstringList_isDefined (s)) { @@ -182,7 +182,7 @@ cstringList_printSpaced (cstringList s, int indent, int gap, int linelen) cstring istring = cstring_fill (cstring_undefined, indent); cstring gstring = cstring_fill (cstring_undefined, gap); int numcol; - int longest = 0; + size_t longest = 0; int i; /* @@ -191,7 +191,7 @@ cstringList_printSpaced (cstringList s, int indent, int gap, int linelen) for (i = 0; i < s->nelements; i++) { - int len = cstring_length (s->elements[i]); + size_t len = cstring_length (s->elements[i]); if (len > longest) { diff --git a/src/cstringSList.c b/src/cstringSList.c index 9511e28..e9cff1a 100644 --- a/src/cstringSList.c +++ b/src/cstringSList.c @@ -140,7 +140,7 @@ cstringSList_unparseSep (cstringSList s, cstring sep) } void -cstringSList_printSpaced (cstringSList s, int indent, int gap, int linelen) +cstringSList_printSpaced (cstringSList s, size_t indent, size_t gap, int linelen) { if (cstringSList_isDefined (s)) { @@ -148,7 +148,7 @@ cstringSList_printSpaced (cstringSList s, int indent, int gap, int linelen) cstring istring = cstring_fill (cstring_undefined, indent); cstring gstring = cstring_fill (cstring_undefined, gap); int numcol; - int longest = 0; + size_t longest = 0; int i; /* @@ -157,7 +157,7 @@ cstringSList_printSpaced (cstringSList s, int indent, int gap, int linelen) for (i = 0; i < s->nelements; i++) { - int len = cstring_length (s->elements[i]); + size_t len = cstring_length (s->elements[i]); if (len > longest) { diff --git a/src/ctbase.i b/src/ctbase.i index 9c2fddf..03aeabb 100644 --- a/src/ctbase.i +++ b/src/ctbase.i @@ -1167,13 +1167,13 @@ ctbase_expectFunction (ctype c) } static bool -ctbase_isExpectFunction (ctbase ct) /*@*/ +ctbase_isExpectFunction (/*@notnull@*/ ctbase ct) /*@*/ { return (ct->type == CT_EXPFCN); } static ctype -ctbase_getExpectFunction (ctbase ct) +ctbase_getExpectFunction (/*@notnull@*/ ctbase ct) { llassert (ctbase_isExpectFunction (ct)); return ct->contents.base; diff --git a/src/exprChecks.c b/src/exprChecks.c index 75ce7f3..4b3b81d 100644 --- a/src/exprChecks.c +++ b/src/exprChecks.c @@ -52,11 +52,36 @@ static void checkSafeReturnExpr (/*@notnull@*/ exprNode p_e); ** */ +static int inCompoundStatementExpression = 0; + +void +exprChecks_inCompoundStatementExpression (void) +{ + inCompoundStatementExpression++; +} + +void +exprChecks_leaveCompoundStatementExpression (void) +{ + inCompoundStatementExpression--; + llassert (inCompoundStatementExpression >= 0); +} + void -exprNode_checkStatement (exprNode e) +exprChecks_checkStatementEffect (exprNode e) { bool hasError = FALSE; + if (inCompoundStatementExpression > 0) + { + /* + ** Okay to have effectless statments in compound statement expression (should check + ** it is the last statement, but we don't for now). + */ + + return; + } + if (!exprNode_isError (e)) { exprKind ek = e->kind; @@ -913,17 +938,14 @@ void exprNode_checkFunctionBody (exprNode body) /*drl modified */ -void exprNode_checkFunction (/*@unused@*/ uentry ue, /*@only@*/ exprNode fcnBody) +void exprNode_checkFunction (/*@unused@*/ uentry ue, /*@only@*/ exprNode body) { constraintList c, t, post; constraintList c2, fix; constraintList implicitFcnConstraints; - - /*@owned@*/ exprNode body; - context_enterInnerContext (); - body = fcnBody; + llassert (exprNode_isDefined (body)); /* if we're not going to be printing any errors for buffer overflows @@ -948,7 +970,8 @@ void exprNode_checkFunction (/*@unused@*/ uentry ue, /*@only@*/ exprNode fcnBody } } - exprNode_generateConstraints (body); + exprNode_generateConstraints (body); /* evans 2002-03-02: this should not be declared to take a + dependent... fix it! */ c = uentry_getFcnPreconditions (ue); DPRINTF(("function constraints\n")); diff --git a/src/exprNode.c b/src/exprNode.c index 40046dd..f3040f7 100644 --- a/src/exprNode.c +++ b/src/exprNode.c @@ -39,7 +39,7 @@ static bool exprNode_sameStorage (exprNode p_e1, exprNode p_e2) /*@*/ ; static bool exprNode_isEmptyStatement (exprNode p_e); static /*@exposed@*/ exprNode exprNode_firstStatement (/*@returned@*/ exprNode p_e); static bool exprNode_isFalseConstant (exprNode p_e) /*@*/ ; -static bool exprNode_isBlock (exprNode p_e); +static bool exprNode_isStatement (exprNode p_e); static void checkGlobUse (uentry p_glob, bool p_isCall, /*@notnull@*/ exprNode p_e); static void exprNode_addUse (exprNode p_e, /*@exposed@*/ sRef p_s); static bool exprNode_matchArgType (ctype p_ct, exprNode p_e); @@ -815,17 +815,17 @@ exprNode_combineLiterals (exprNode e, exprNode rest) exprNode_rawStringLiteral (/*@only@*/ cstring t, /*@only@*/ fileloc loc) { exprNode e = exprNode_createLoc (ctype_string, loc); - int len = cstring_length (t); + size_t len = cstring_length (t); if (context_getFlag (FLG_STRINGLITERALLEN)) { - if (len > context_getValue (FLG_STRINGLITERALLEN)) + if (len > size_fromInt (context_getValue (FLG_STRINGLITERALLEN))) { voptgenerror (FLG_STRINGLITERALLEN, message ("String literal length (%d) exceeds maximum " "length (%d): \"%s\"", - len, + size_toInt (len), context_getValue (FLG_STRINGLITERALLEN), t), e->loc); @@ -855,19 +855,18 @@ exprNode_wideStringLiteral (/*@only@*/ cstring t, /*@only@*/ fileloc loc) { exprNode res = exprNode_stringLiteral (t, loc); res->typ = ctype_makeWideString (); - return res; } /*@only@*/ exprNode exprNode_stringLiteral (/*@only@*/ cstring t, /*@only@*/ fileloc loc) { - int len = cstring_length (t) - 2; + size_t len = size_fromInt (cstring_length (t) - 2); char *ts = cstring_toCharsSafe (t); char *s = cstring_toCharsSafe (cstring_create (len + 1)); llassert (*ts == '\"' && *(ts + len + 1) == '\"'); - strncpy (s, ts+1, size_fromInt (len)); + strncpy (s, ts+1, len); *(s + len) = '\0'; cstring_free (t); return exprNode_rawStringLiteral (cstring_fromCharsO (s), loc); @@ -1063,7 +1062,6 @@ static void exprNode_checkStringLiteralLength (ctype t1, exprNode e2) if (ctype_isFixedArray (t1)) { - int nelements = long_toInt (ctype_getArraySize (t1)); llassert (multiVal_isString (mval)); @@ -1071,12 +1069,13 @@ static void exprNode_checkStringLiteralLength (ctype t1, exprNode e2) len = cstring_lengthExpandEscapes (slit); - + llassert (exprNode_isDefined (e2)); + if (len == nelements) { mstring temp; - temp = cstring_expandEscapes(slit); + temp = cstring_expandEscapes (slit); if (temp[len-1] == '\0') { @@ -1091,16 +1090,14 @@ static void exprNode_checkStringLiteralLength (ctype t1, exprNode e2) } else { - - - voptgenerror - (FLG_STRINGLITNOROOM, - message ("String literal with %d character%& " - "is assigned to %s (no room for null terminator): %s", - len + 1, - ctype_unparse (t1), - exprNode_unparse (e2)), - e2->loc); + voptgenerror + (FLG_STRINGLITNOROOM, + message ("String literal with %d character%& " + "is assigned to %s (no room for null terminator): %s", + len + 1, + ctype_unparse (t1), + exprNode_unparse (e2)), + e2->loc); } } else if (len > nelements) @@ -3299,7 +3296,9 @@ reflectEnsuresClause (exprNode ret, uentry le, exprNode f, exprNodeList args) sRefSet srs = stateClause_getRefs (cl); sRefModVal modf = stateClause_getEnsuresFunction (cl); int eparam = stateClause_getStateParameter (cl); - + + llassert (modf != NULL); + DPRINTF (("Reflect after clause: %s / %s", stateClause_unparse (cl), sRefSet_unparse (srs))); @@ -3673,6 +3672,8 @@ checkRequiresClause (uentry le, exprNode f, exprNodeList args) stateClause_unparse (cl), sRefSet_unparse (srs))); + llassert (modf != NULL); + sRefSet_elements (srs, sel) { sRef s; @@ -5999,8 +6000,7 @@ void exprNode_checkAssignMod (exprNode e1, exprNode ret) } exprNode -exprNode_assign (/*@only@*/ exprNode e1, - /*@only@*/ exprNode e2, /*@only@*/ lltok op) +exprNode_assign (/*@only@*/ exprNode e1, /*@only@*/ exprNode e2, /*@only@*/ lltok op) { bool isalloc = FALSE; bool isjustalloc = FALSE; @@ -6021,13 +6021,17 @@ exprNode_assign (/*@only@*/ exprNode e1, ctype_unparse (e1->typ), ctype_unparse (e2->typ))); - if (ctype_isNumeric (e2->typ) - || ctype_isNumeric (e1->typ)) + if (exprNode_isDefined (e1) + && exprNode_isDefined (e2)) { - /* Its a pointer arithmetic expression like ptr += i */ - noalias = TRUE; - } - } + if (ctype_isNumeric (e2->typ) + || ctype_isNumeric (e1->typ)) + { + /* Its a pointer arithmetic expression like ptr += i */ + noalias = TRUE; + } + } + } else { ret = exprNode_createPartialCopy (e1); @@ -6127,7 +6131,17 @@ exprNode_assign (/*@only@*/ exprNode e1, ctype te1 = exprNode_getType (e1); ctype te2 = exprNode_getType (e2); - if (!ctype_forceMatch (te1, te2)) + if (ctype_isVoid (te2)) + { + (void) gentypeerror + (te2, e2, te1, e1, + message ("Assignment of void value to %t: %s %s %s", + te1, exprNode_unparse (e1), + lltok_unparse (op), + exprNode_unparse (e2)), + e1->loc); + } + else if (!ctype_forceMatch (te1, te2)) { if (exprNode_matchLiteral (te1, e2)) { @@ -6144,6 +6158,10 @@ exprNode_assign (/*@only@*/ exprNode e1, e1->loc); } } + else + { + /* Type checks okay */ + } } exprNode_mergeUSs (ret, e2); @@ -6692,6 +6710,7 @@ exprNode exprNode_concat (/*@only@*/ exprNode e1, /*@only@*/ exprNode e2) usymtab_setMustBreak (); } + DPRINTF (("==> %s", exprNode_unparse (ret))); return ret; } @@ -6708,7 +6727,7 @@ exprNode exprNode_statement (/*@only@*/ exprNode e, /*@only@*/ lltok t) { if (!exprNode_isError (e)) { - exprNode_checkStatement(e); + exprChecks_checkStatementEffect(e); } return (exprNode_statementError (e, t)); @@ -6763,6 +6782,36 @@ void exprNode_produceGuards (exprNode pred) } } +exprNode exprNode_compoundStatementExpression (/*@only@*/ lltok tlparen, /*@only@*/ exprNode e) +{ + exprNode laststmt; + + DPRINTF (("Compound: %s", exprNode_unparse (e))); + + if (!context_flagOn (FLG_GNUEXTENSIONS, exprNode_loc (e))) + { + (void) llgenhinterror + (FLG_SYNTAX, + message ("Compound statement expressions is not supported by ISO C99"), + message ("Use +gnuextensions to allow compound statement expressions (and other GNU language extensions) " + "without this warning"), + exprNode_loc (e)); + } + + /* + ** The type of a compoundStatementExpression is the type of the last statement + */ + + llassert (exprNode_isBlock (e)); + laststmt = exprNode_lastStatement (e); + + DPRINTF (("Last statement: %s / %s", exprNode_unparse (laststmt), ctype_unparse (exprNode_getType (laststmt)))); + DPRINTF (("e: %s", exprNode_unparse (e))); + e->typ = exprNode_getType (laststmt); + return exprNode_addParens (tlparen, e); +} + + exprNode exprNode_makeBlock (/*@only@*/ exprNode e) { exprNode ret = exprNode_createPartialCopy (e); @@ -6774,8 +6823,10 @@ exprNode exprNode_makeBlock (/*@only@*/ exprNode e) ret->mustBreak = e->mustBreak; } + DPRINTF (("Block e: %s", exprNode_unparse (e))); ret->edata = exprData_makeSingle (e); ret->kind = XPR_BLOCK; + DPRINTF (("Block: %s", exprNode_unparse (ret))); return ret; } @@ -6784,6 +6835,12 @@ bool exprNode_isBlock (exprNode e) return (exprNode_isDefined (e) && ((e)->kind == XPR_BLOCK)); } + +bool exprNode_isStatement (exprNode e) +{ + return (exprNode_isDefined (e) + && ((e)->kind == XPR_STMT)); +} bool exprNode_isAssign (exprNode e) { @@ -6802,6 +6859,22 @@ bool exprNode_isEmptyStatement (exprNode e) && (lltok_isSemi (exprData_getTok (e->edata)))); } +bool exprNode_isMultiStatement (exprNode e) +{ + return (exprNode_isDefined (e) + && ((e->kind == XPR_FOR) + || (e->kind == XPR_FORPRED) + || (e->kind == XPR_IF) + || (e->kind == XPR_IFELSE) + || (e->kind == XPR_WHILE) + || (e->kind == XPR_WHILEPRED) + || (e->kind == XPR_DOWHILE) + || (e->kind == XPR_BLOCK) + || (e->kind == XPR_STMT) + || (e->kind == XPR_STMTLIST) + || (e->kind == XPR_SWITCH))); +} + void exprNode_checkIfPred (exprNode pred) { exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred); @@ -8350,7 +8423,7 @@ static bool exprNode_checkOneInit (/*@notnull@*/ exprNode el, exprNode val) return hasError; } -static exprNode +static /*@notnull@*/ exprNode exprNode_makeInitializationAux (/*@temp@*/ idDecl t) { exprNode ret; @@ -9462,17 +9535,31 @@ static /*@only@*/ cstring exprNode_doUnparse (exprNode e) break; case XPR_BLOCK: - ret = message ("{ %s }", exprNode_unparseFirst (exprData_getSingle (data))); + ret = message ("{ %s }", exprNode_unparse (exprData_getSingle (data))); + /* evans 2002-02-20 was unparseFirst! */ break; case XPR_STMT: - ret = cstring_copy (exprNode_unparse (exprData_getUopNode (data))); + ret = message ("%s;", exprNode_unparse (exprData_getUopNode (data))); break; case XPR_STMTLIST: - ret = message ("%s; %s", - exprNode_unparse (exprData_getPairA (data)), - exprNode_unparse (exprData_getPairB (data))); + if (exprNode_isStatement (exprData_getPairA (data))) + { + /* + ** statement expressions already print the ; + */ + + ret = message ("%s %s", + exprNode_unparse (exprData_getPairA (data)), + exprNode_unparse (exprData_getPairB (data))); + } + else + { + ret = message ("%s; %s", + exprNode_unparse (exprData_getPairA (data)), + exprNode_unparse (exprData_getPairB (data))); + } break; case XPR_FTDEFAULT: diff --git a/src/fileTable.c b/src/fileTable.c index 0797834..7869f87 100644 --- a/src/fileTable.c +++ b/src/fileTable.c @@ -99,6 +99,8 @@ static cstring ftentry_unparse (fileTable ft, ftentry fte) { if (fileId_isValid (fte->fder)) { + llassert (fileTable_isDefined (ft)); + return message ("%s %q %d (%s)", fte->fname, fileType_unparse (fte->ftype), @@ -1015,13 +1017,19 @@ void fileTable_closeAll (fileTable ft) { int i = 0; + llassert (fileTable_isDefined (ft)); + for (i = 0; i < ft->nopen; i++) { /* lldiagmsg (message ("Unclosed file at exit: %s", ft->openelements[i]->fname)); */ + + if (ft->openelements[i]->f != NULL) + { + (void) fclose (ft->openelements[i]->f); /* No check - cleaning up after errors */ + } - (void) fclose (ft->openelements[i]->f); /* No check - cleaning up after errors */ ft->openelements[i]->f = NULL; foentry_free (ft->openelements[i]); ft->openelements[i] = NULL; diff --git a/src/fileloc.c b/src/fileloc.c index 91bcf9e..063ec7e 100644 --- a/src/fileloc.c +++ b/src/fileloc.c @@ -64,6 +64,8 @@ fileloc_decColumn (fileloc f, int x) { fileloc ret = fileloc_copy (f); + llassert (x >= 0); + if (x > 0 && fileloc_isDefined (ret)) { llassertprint (ret->column > x, ("decColumn: %d", x)); diff --git a/src/flagMarker.c b/src/flagMarker.c index f1ef51a..7580bb7 100644 --- a/src/flagMarker.c +++ b/src/flagMarker.c @@ -107,6 +107,35 @@ int flagMarker_getCount (flagMarker f) return f->info.nerrors; } +bool flagMarker_equal (flagMarker f1, flagMarker f2) +{ + if (f1->kind != f2->kind) + { + return FALSE; + } + + if (!fileloc_equal (f1->loc, f2->loc)) + { + return FALSE; + } + + switch (f1->kind) + { + case FMK_LOCALSET: + return (f1->info.set == f2->info.set + && flagcode_equal (f1->code, f2->code)); + case FMK_IGNORECOUNT: + return (f1->info.nerrors == f2->info.nerrors); + case FMK_IGNOREON: + case FMK_IGNOREOFF: + return TRUE; + case FMK_SUPPRESS: + return (flagcode_equal (f1->code, f2->code)); + } + + BADBRANCH; +} + cstring flagMarker_unparse (flagMarker c) { switch (c->kind) diff --git a/src/flagMarkerList.c b/src/flagMarkerList.c index e935637..ec66063 100644 --- a/src/flagMarkerList.c +++ b/src/flagMarkerList.c @@ -36,6 +36,9 @@ static int flagMarkerList_lastBeforeLoc (flagMarkerList p_s, fileloc p_loc) /*@*/ ; +static bool +flagMarkerList_contains (flagMarkerList p_s, flagMarker p_fm) /*@*/ ; + flagMarkerList flagMarkerList_new () { @@ -69,12 +72,19 @@ flagMarkerList_grow (flagMarkerList s) s->elements = newelements; } -void flagMarkerList_add (flagMarkerList s, flagMarker fm) +bool flagMarkerList_add (flagMarkerList s, flagMarker fm) { int i = s->nelements - 1; int lastloc; - DPRINTF (("Flag marker: %s", flagMarker_unparse (fm))); + DPRINTF (("Add: %s", flagMarker_unparse (fm))); + + if (flagMarkerList_contains (s, fm)) + { + flagMarker_free (fm); + DPRINTF (("List contains: %s", flagMarkerList_unparse (s))); + return FALSE; + } if (i > 0) { @@ -114,7 +124,7 @@ void flagMarkerList_add (flagMarkerList s, flagMarker fm) } flagMarker_free (fm); - return; + return FALSE; } } else @@ -132,12 +142,14 @@ void flagMarkerList_add (flagMarkerList s, flagMarker fm) { if (llforceerror (FLG_WARNFLAGS, - cstring_makeLiteral ("Cannot set flag inside ignore " - "count region."), + cstring_makeLiteral + ("Cannot set flag inside ignore " + "count region."), flagMarker_getLoc (fm))) { llgenindentmsg - (cstring_makeLiteral ("Ignore count region starts"), + (cstring_makeLiteral + ("Ignore count region starts"), flagMarker_getLoc (nlast)); DPRINTF (("Last: %s / %s", fileloc_unparse (flagMarker_getLoc (last)), @@ -162,7 +174,7 @@ void flagMarkerList_add (flagMarkerList s, flagMarker fm) } flagMarker_free (fm); - return; + return FALSE; } } } @@ -205,7 +217,7 @@ void flagMarkerList_add (flagMarkerList s, flagMarker fm) } s->nelements++; - DPRINTF (("Add flag ==> %s", flagMarkerList_unparse (s))); + return TRUE; } void flagMarkerList_checkSuppressCounts (flagMarkerList s) @@ -222,7 +234,7 @@ void flagMarkerList_checkSuppressCounts (flagMarkerList s) DPRINTF (("flagMarker: %s / %s", flagMarker_unparse (current), bool_unparse (inCount))); - + if (flagMarker_isIgnoreCount (current)) { llassert (!inCount); @@ -328,23 +340,6 @@ flagMarkerList_free (flagMarkerList s) sfree (s); } -/* -** returns YES iff -** > in ignore region (there is an ignore ON marker not followed by OFF) -** > code is OFF (-) -** -** returns NO iff -** > not in ignore region -** > code is ON (+) -** -** returns MAYBE iff -** > not in ignore region -** > code is unset or = -** -** requires: invariant for flagMarkerList: -** flagMarker's are sorted by line and col -*/ - static int flagMarkerList_lastBeforeLoc (flagMarkerList s, fileloc loc) { @@ -363,6 +358,41 @@ flagMarkerList_lastBeforeLoc (flagMarkerList s, fileloc loc) return -1; } + +static bool +flagMarkerList_contains (flagMarkerList s, flagMarker fm) +{ + int i; + + for (i = s->nelements - 1; i >= 0; i--) + { + flagMarker current = s->elements[i]; + + if (flagMarker_equal (current, fm)) + { + return TRUE; + } + } + + return FALSE; +} + +/* +** returns YES iff +** > in ignore region (there is an ignore ON marker not followed by OFF) +** > code is OFF (-) +** +** returns NO iff +** > not in ignore region +** > code is ON (+) +** +** returns MAYBE iff +** > not in ignore region +** > code is unset or = +** +** requires: invariant for flagMarkerList: +** flagMarker's are sorted by line and col +*/ ynm flagMarkerList_suppressError (flagMarkerList s, flagcode code, fileloc loc) diff --git a/src/flags.c b/src/flags.c index eb68c11..8ddf843 100644 --- a/src/flags.c +++ b/src/flags.c @@ -1051,7 +1051,7 @@ flags_identifyFlagAux (cstring s, bool quiet) } else if (cstring_equalLit (cflag, "ansireservedlocal")) { - res = FLG_ANSIRESERVEDLOCAL; + res = FLG_ISORESERVEDLOCAL; } else if (cstring_equalLit (cflag, "warnposix")) { @@ -1095,15 +1095,15 @@ flags_identifyFlagAux (cstring s, bool quiet) } else if (cstring_equalLit (cflag, "skipansiheaders")) { - res = FLG_SKIPANSIHEADERS; + res = FLG_SKIPISOHEADERS; } else if (cstring_equalLit (cflag, "ansireserved")) { - res = FLG_ANSIRESERVED; + res = FLG_ISORESERVED; } else if (cstring_equalLit (cflag, "ansireservedinternal")) { - res = FLG_ANSIRESERVEDLOCAL; + res = FLG_ISORESERVEDLOCAL; } /* diff --git a/src/flags.def b/src/flags.def index 2ef3bce..b230b3a 100644 --- a/src/flags.def +++ b/src/flags.def @@ -2550,7 +2550,7 @@ static flaglist flags = { FK_NAMES, FK_ANSI, modeFlag, "isoreserved", - FLG_ANSIRESERVED, + FLG_ISORESERVED, "external name conflicts with name reserved for system or standard library", "External name is reserved for system use by ISO C99 standard.", 0, 0 @@ -2568,7 +2568,7 @@ static flaglist flags = { FK_NAMES, FK_ANSI, modeFlag, "isoreservedinternal", - FLG_ANSIRESERVEDLOCAL, + FLG_ISORESERVEDLOCAL, "internal name conflicts with name reserved for system or standard library", "Internal name is reserved for system in ISO C99 standard (this should not be necessary unless you are worried about C library implementations that violate the standard and use macros).", 0, 0 @@ -3140,8 +3140,8 @@ static flaglist flags = }, { FK_DIRECT, FK_FILES, plainFlag, - "skipansiheaders", - FLG_SKIPANSIHEADERS, + "skipisoheaders", + FLG_SKIPISOHEADERS, "prevent inclusion of header files in a system directory with " "names that match standard ANSI headers. The symbolic information " "in the standard library is used instead. Flag in effect only " diff --git a/src/general.c b/src/general.c index dd72788..e621870 100644 --- a/src/general.c +++ b/src/general.c @@ -113,8 +113,15 @@ static long unsigned size_toLongUnsigned (size_t x) { if (size == 0) { - llbug (message ("Zero allocation at %q.", - fileloc_unparseRaw (cstring_fromChars (name), line))); + llcontbug (message ("Zero allocation at %q.", + fileloc_unparseRaw (cstring_fromChars (name), line))); + + /* + ** evans 2002-03-01 + ** Return some allocated storage...hope we get lucky. + */ + + return dimalloc (16, name, line); } else { @@ -335,7 +342,7 @@ char *mstring_safePrint (char *s) } extern -char *mstring_create (int n) +char *mstring_create (size_t n) { char *s; diff --git a/src/inputStream.c b/src/inputStream.c index 116f489..c38bb07 100644 --- a/src/inputStream.c +++ b/src/inputStream.c @@ -161,6 +161,7 @@ extern int inputStream_nextChar (inputStream s) extern int inputStream_peekNChar (inputStream s, int n) /* Doesn't work across lines! */ { + llassert (inputStream_isDefined (s)); llassert (s->curLine != NULL); llassert (s->charNo + n < strlen (s->curLine)); return ((int) s->curLine [s->charNo + n]); @@ -168,6 +169,8 @@ extern int inputStream_peekNChar (inputStream s, int n) extern int inputStream_peekChar (inputStream s) { + llassert (inputStream_isDefined (s)); + if (s->curLine == NULL) { char *cur; @@ -198,6 +201,7 @@ char *inputStream_nextLine (inputStream s) char *currentLine; int len; + llassert (inputStream_isDefined (s)); llassert (s->curLine == NULL); s->charNo = 0; @@ -267,6 +271,7 @@ char *inputStream_nextLine (inputStream s) extern bool inputStream_open (inputStream s) { + llassert (inputStream_isDefined (s)); if (s->fromString) { /* not an error: tail is dependent */ @@ -335,6 +340,7 @@ extern bool inputStream_getPath (cstring path, inputStream s) /*:open:*/ FILE *inputStream_getFile (inputStream s) { llassert (inputStream_isDefined (s)); + llassert (s->file != NULL); return s->file; } diff --git a/src/lcllib.c b/src/lcllib.c index 04e2a34..efaa31f 100644 --- a/src/lcllib.c +++ b/src/lcllib.c @@ -168,7 +168,7 @@ lcllib_isSkipHeader (cstring sname) return TRUE; } - if (context_getFlag (FLG_SKIPANSIHEADERS) + if (context_getFlag (FLG_SKIPISOHEADERS) && context_usingAnsiLibrary ()) { @@ -226,7 +226,7 @@ lcllib_isSkipHeader (cstring sname) if (context_getFlag (FLG_SKIPPOSIXHEADERS)) { cstring_free (xname); - return TRUE; + return TRUE; /* evans 2002-03-02: investigate this warning */ } } else diff --git a/src/llerror.c b/src/llerror.c index 7198b28..8f8b959 100644 --- a/src/llerror.c +++ b/src/llerror.c @@ -46,7 +46,7 @@ static void printIndentMessage (FILE *p_stream, /*@only@*/ cstring p_sc, int p_i static int lclerrors = 0; # endif -static int lastfileloclen = 10; +static size_t lastfileloclen = 10; static /*@only@*/ cstring lastmsg = cstring_undefined; static int mcount = 0; static /*@only@*/ cstring saveOneMessage = cstring_undefined; @@ -1175,9 +1175,9 @@ static void printError (FILE *stream, /*@only@*/ cstring sc) { int maxlen = context_getLineLen (); - int nspaces = lastfileloclen + 5; + size_t nspaces = lastfileloclen + 5; int nextlen = maxlen - nspaces; - int len = cstring_length (sc); + size_t len = cstring_length (sc); int indent = 0; char *s = cstring_toCharsSafe (sc); char *os = s; @@ -1185,7 +1185,7 @@ void printError (FILE *stream, /*@only@*/ cstring sc) DPRINTF (("Print error: [%s]", sc)); - if (len < (maxlen + nextlen) && (strchr (s, '\n') == NULL)) + if (size_toInt (len) < (maxlen + nextlen) && (strchr (s, '\n') == NULL)) { mstring_split (&s, &t, maxlen, &indent); @@ -1195,8 +1195,8 @@ void printError (FILE *stream, /*@only@*/ cstring sc) { len = mstring_length (t); - if (len < (maxlen - 3) && (strchr (t, '\n') == NULL) - && len > (nextlen - 1)) + if (size_toInt (len) < (maxlen - 3) && (strchr (t, '\n') == NULL) + && size_toInt (len) > (nextlen - 1)) { fprintf (stream, " %s\n", t); } @@ -1205,7 +1205,7 @@ void printError (FILE *stream, /*@only@*/ cstring sc) char *spaces = (char *) dmalloc ((nspaces + 1) * sizeof (*spaces)); int i; - for (i = 0; i < nspaces; i++) + for (i = 0; i < size_toInt (nspaces); i++) { spaces[i] = ' '; } @@ -1227,7 +1227,7 @@ void printError (FILE *stream, /*@only@*/ cstring sc) { DPRINTF (("Here 1: [%s]", sc)); - if (len < (maxlen + maxlen - 1) && (strchr (s, '\n') != NULL)) + if (size_toInt (len) < (maxlen + maxlen - 1) && (strchr (s, '\n') != NULL)) { nspaces = ((maxlen + maxlen - 1) - len) / 2; @@ -1244,7 +1244,7 @@ void printError (FILE *stream, /*@only@*/ cstring sc) char *spaces = (char *) dmalloc ((nspaces + 1) * sizeof (*spaces)); int i; - for (i = 0; i < nspaces; i++) + for (i = 0; i < size_toInt (nspaces); i++) { spaces[i] = ' '; } @@ -1276,7 +1276,7 @@ void printError (FILE *stream, /*@only@*/ cstring sc) if (t != NULL) { char *spaces = (char *) dmalloc ((nspaces + 1) * sizeof (*spaces)); - int i; + size_t i; for (i = 0; i < nspaces; i++) { @@ -1385,13 +1385,16 @@ void llbugaux (cstring file, int line, /*@only@*/ cstring s) fileloc_unparse (g_currentloc), fileloc_unparseRaw (file, line), s, errno)); - printCodePoint (); + + /* printCodePoint (); no longer useful */ (void) fflush (stderr); + if (errno != 0) { perror ("Possible system error diagnostic: "); } + (void) fflush (stderr); printBugReport (); diff --git a/src/macrocache.c b/src/macrocache.c index e244784..8f44708 100644 --- a/src/macrocache.c +++ b/src/macrocache.c @@ -179,7 +179,7 @@ macrocache_addEntry (macrocache s, /*@only@*/ fileloc fl, /*@only@*/ cstring def void macrocache_addComment (macrocache s, /*@only@*/ fileloc fl, /*@only@*/ cstring def) { - DPRINTF (("Add comment: %s / %s", fileloc_unparse (fl), def)); + DPRINTF (("Macrocache add comment: %s / %s", fileloc_unparse (fl), def)); macrocache_addGenEntry (s, fl, def, TRUE); } diff --git a/src/message.c b/src/message.c index d12a1eb..8a825c9 100644 --- a/src/message.c +++ b/src/message.c @@ -186,7 +186,7 @@ message (/*@temp@*/ char *fmt, ...) if (modcode != 0) { ret = mstring_concatFree (ret, cstring_toCharsSafe - (cstring_fill (s, modcode))); + (cstring_fill (s, size_fromInt (modcode)))); } else { @@ -205,7 +205,7 @@ message (/*@temp@*/ char *fmt, ...) if (modcode != 0) { ret = mstring_concatFree (ret, cstring_toCharsSafe - (cstring_fill (s, modcode))); + (cstring_fill (s, size_fromInt (modcode)))); } else { diff --git a/src/mtContextNode.c b/src/mtContextNode.c index ba307da..4cc6e9e 100644 --- a/src/mtContextNode.c +++ b/src/mtContextNode.c @@ -184,7 +184,8 @@ bool mtContextNode_matchesRef (mtContextNode context, sRef sr) bool mtContextNode_matchesRefStrict (mtContextNode context, sRef s) { - if (mtContextNode_matchesRef (context, s)) + if (mtContextNode_isDefined (context) + && mtContextNode_matchesRef (context, s)) { if (ctype_isKnown (context->type) && (ctype_isUnknown (sRef_getType (s)) @@ -204,6 +205,7 @@ bool mtContextNode_matchesRefStrict (mtContextNode context, sRef s) bool mtContextNode_matchesType (mtContextNode context, ctype ct) { DPRINTF (("Context type...")); + llassert (mtContextNode_isDefined (context)); if (!ctype_match (context->type, ct)) { @@ -230,6 +232,8 @@ bool mtContextNode_matchesType (mtContextNode context, ctype ct) cstring mtContextNode_unparse (mtContextNode node) { + llassert (mtContextNode_isDefined (node)); + if (ctype_isKnown (node->type)) { return message ("%s %s", mtContextKind_unparse (node->context), diff --git a/src/nameChecks.c b/src/nameChecks.c index 2cb8c56..5cbea67 100644 --- a/src/nameChecks.c +++ b/src/nameChecks.c @@ -42,7 +42,7 @@ static cstring czechPrefix (cstring name) static cstring slovakPrefix (cstring name) { - int i = 0; + size_t i = 0; cstring_chars (name, c) { @@ -119,9 +119,9 @@ static bool matchPrefix (cstring name, cstring prefix) } else { - int namelen = cstring_length (name); + size_t namelen = cstring_length (name); int last = (int) '\0'; - int n = 1; + size_t n = 1; cstring_chars (prefix, pc) { @@ -1181,7 +1181,7 @@ checkAnsiName (uentry ue) { bool hasError = FALSE; cstring name = uentry_observeRealName (ue); - int length = cstring_length (name); + size_t length = cstring_length (name); char fchar = (length >= 1) ? cstring_firstChar (name) : '\0'; char schar = (length >= 2) ? cstring_secondChar (name) : '\0'; char tchar = (length >= 3) ? cstring_getChar (name, 3) : '\0'; @@ -1231,19 +1231,19 @@ checkAnsiName (uentry ue) NRESERVEDNAMES))) { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is reserved for the standard library", name), uentry_whereLast (ue)); } if (uentry_isFileStatic (ue) || uentry_isVisibleExternally (ue) || uentry_isAnyTag (ue) - || context_getFlag (FLG_ANSIRESERVEDLOCAL)) + || context_getFlag (FLG_ISORESERVEDLOCAL)) { if (fchar == '_') { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is in the implementation name space (any identifier " "beginning with underscore)", @@ -1263,7 +1263,7 @@ checkAnsiName (uentry ue) && (schar == '_' || isupper ((int) schar))) { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is in the implementation name space (any identifier " "beginning with underscore and either an uppercase letter or " @@ -1283,7 +1283,7 @@ checkAnsiName (uentry ue) || isupper ((int) schar))) { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is reserved for future library extensions. " "Macros beginning with E and a digit or uppercase letter " @@ -1305,7 +1305,7 @@ checkAnsiName (uentry ue) && (isupper ((int) rchar))) { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is reserved for future library extensions. " "Macros beginning with \"LC_\" and an uppercase letter may " @@ -1326,7 +1326,7 @@ checkAnsiName (uentry ue) || (isupper ((int) rchar)))) { hasError |= optgenerror2 - (FLG_ANSIRESERVED, FLG_NAMECHECKS, + (FLG_ISORESERVED, FLG_NAMECHECKS, message ("Name %s is reserved for future library extensions. " "Macros that begin with SIG and an uppercase letter or SIG_ " @@ -1339,7 +1339,7 @@ checkAnsiName (uentry ue) DPRINTF (("Here...")); if ((uentry_isVisibleExternally (ue) && !uentry_isAnyTag (ue)) - || context_getFlag (FLG_ANSIRESERVEDLOCAL)) + || context_getFlag (FLG_ISORESERVEDLOCAL)) { flagcode flg; @@ -1347,11 +1347,11 @@ checkAnsiName (uentry ue) if (uentry_isVisibleExternally (ue) && !uentry_isAnyTag (ue)) { - flg = FLG_ANSIRESERVED; + flg = FLG_ISORESERVED; } else { - flg = FLG_ANSIRESERVEDLOCAL; + flg = FLG_ISORESERVEDLOCAL; } DPRINTF (("ue: %s", uentry_unparseFull (ue))); diff --git a/src/osd.c b/src/osd.c index 17f5a0f..16f020d 100644 --- a/src/osd.c +++ b/src/osd.c @@ -1039,8 +1039,10 @@ cstring osd_outputPath (cstring filename) cstring cwd_p = osd_cwd; char *path_p; int unmatched_slash_count = 0; - size_t filename_len = size_fromInt (cstring_length (filename)); + size_t filename_len = cstring_length (filename); + llassertretval (filename_len > 0, /*@-type@*/ filename /*@=type@*/); + /*@access cstring@*/ path_p = filename; rel_buf_p = rel_buffer = (char *) dmalloc (filename_len); diff --git a/src/sRef.c b/src/sRef.c index 1934a9d..ed43a68 100644 --- a/src/sRef.c +++ b/src/sRef.c @@ -369,6 +369,8 @@ static /*@dependent@*/ /*@notnull@*/ /*@special@*/ sRef /* start modifications */ s->bufinfo.bufstate = BB_NOTNULLTERMINATED; + s->bufinfo.size = -1; /*@i24 unknown@*/ + s->bufinfo.len = -1; /*@i24 unknown@*/ /* end modifications */ s->aliaskind = AK_UNKNOWN; @@ -2239,9 +2241,6 @@ sRef_closeEnough (sRef s1, sRef s2) return ce; } } - - - } /*@exposed@*/ sRef @@ -2286,9 +2285,14 @@ sRef_fixBaseParam (/*@returned@*/ sRef s, exprNodeList args) (sRef_fixBaseParam (s->info->arrayfetch->arr, args))); } case SK_FIELD: - return (sRef_makeField (sRef_fixBaseParam (s->info->field->rec, args), - s->info->field->field)); - + { + sRef res; + DPRINTF (("Fix field: %s", sRef_unparseFull (s))); + res = sRef_makeField (sRef_fixBaseParam (s->info->field->rec, args), + s->info->field->field); + DPRINTF (("Returns: %s", sRef_unparseFull (res))); + return res; + } case SK_PTR: return (sRef_makePointer (sRef_fixBaseParam (s->info->ref, args))); @@ -4338,7 +4342,7 @@ sRef_makeUnknown () return s; } -static /*@owned@*/ sRef +static /*@owned@*/ /*@notnull@*/ sRef sRef_makeSpecial (speckind sk) /*@*/ { sRef s = sRef_new (); @@ -5146,6 +5150,7 @@ static void sRef_setDefinedAux (sRef s, fileloc loc, bool clear) /* evans 2001-07-12: need to define the derived references */ sRefSet_elements (s->deriv, el) { + llassert (sRef_isValid (el)); el->defstate = SS_DEFINED; } end_sRefSet_elements ; } @@ -5414,9 +5419,12 @@ void sRef_setNotNull (sRef s, fileloc loc) void sRef_setNullStateN (sRef s, nstate n) { - sRef_checkMutable (s); - s->nullstate = n; - sRef_resetAliasKind (s); + if (sRef_isValid (s)) + { + sRef_checkMutable (s); + s->nullstate = n; + sRef_resetAliasKind (s); + } } void sRef_setNullState (sRef s, nstate n, fileloc loc) @@ -5430,19 +5438,20 @@ void sRef_setNullState (sRef s, nstate n, fileloc loc) void sRef_setNullTerminatedStateInnerComplete (sRef s, struct s_bbufinfo b, /*@unused@*/ fileloc loc) { switch (b.bufstate) { - case BB_NULLTERMINATED: - sRef_setNullTerminatedState (s); - sRef_setLen (s, b.len); - break; - case BB_POSSIBLYNULLTERMINATED: - sRef_setPossiblyNullTerminatedState(s); - break; - case BB_NOTNULLTERMINATED: - sRef_setNotNullTerminatedState (s); - break; + case BB_NULLTERMINATED: + sRef_setNullTerminatedState (s); + sRef_setLen (s, b.len); + break; + case BB_POSSIBLYNULLTERMINATED: + sRef_setPossiblyNullTerminatedState(s); + break; + case BB_NOTNULLTERMINATED: + sRef_setNotNullTerminatedState (s); + break; } - sRef_setSize (s, b.size); + sRef_setSize (s, b.size); + /* PL: TO BE DONE : Aliases are not modified right now, have to be similar to * setNullStateInnerComplete. */ @@ -9399,7 +9408,7 @@ static speckind speckind_fromInt (int i) } -static void sRef_updateNullState (sRef res, sRef other) +static void sRef_updateNullState (/*@notnull@*/ sRef res, /*@notnull@*/ sRef other) /*@modifies res@*/ { res->nullstate = other->nullstate; diff --git a/src/stateValue.c b/src/stateValue.c index 973bd70..aacffde 100644 --- a/src/stateValue.c +++ b/src/stateValue.c @@ -110,8 +110,11 @@ void stateValue_updateValueLoc (stateValue s, int value, fileloc loc) void stateValue_update (stateValue res, stateValue val) { llassert (stateValue_isDefined (res)); + llassert (stateValue_isDefined (val)); + res->value = val->value; res->info = stateInfo_update (res->info, val->info); + DPRINTF (("update state: %s", stateValue_unparse (res))); } diff --git a/src/structNames.c b/src/structNames.c index 5d09974..3c09e82 100644 --- a/src/structNames.c +++ b/src/structNames.c @@ -141,7 +141,7 @@ void setTagNo (unsigned int n) bool isFakeTag (cstring s) { - int length = cstring_length (s); + size_t length = cstring_length (s); return ((length >= 1 && cstring_firstChar (s) == '!') || (length >= 2 && cstring_getChar (s, 2) == '!')); diff --git a/src/uentry.c b/src/uentry.c index ac39bb6..fcea58c 100644 --- a/src/uentry.c +++ b/src/uentry.c @@ -1445,13 +1445,14 @@ uentry_fixupSref (uentry ue) if (uentry_isVariable (ue)) { - /*@i634 ue->sref = sRef_saveCopyShallow (ue->info->var->origsref); */ + + /*@i634 ue->sref = sRef_saveCopyShallow (ue->info->var->origsref); */ sRef_setDefState (sr, ue->info->var->defstate, fileloc_undefined); sRef_setNullState (sr, ue->info->var->nullstate, fileloc_undefined); } } -static void uentry_addStateClause (uentry ue, stateClause sc) +static void uentry_addStateClause (/*@notnull@*/ uentry ue, stateClause sc) { /* ** Okay to allow multiple clauses of the same kind. @@ -1596,6 +1597,7 @@ bool uentry_hasWarning (uentry ue) void uentry_addWarning (uentry ue, /*@only@*/ warnClause warn) { + llassert (uentry_isValid (ue)); llassert (warnClause_isUndefined (ue->warn)); ue->warn = warn; } @@ -3262,14 +3264,14 @@ void uentry_setCheckedStrict (uentry ue) } static /*@only@*/ /*@notnull@*/ - uentry uentry_makeVariableAux (cstring n, ctype t, - fileloc f, - /*@exposed@*/ sRef s, - bool priv, vkind kind) +uentry uentry_makeVariableAux (cstring n, ctype t, + fileloc f, + /*@exposed@*/ sRef s, + bool priv, vkind kind) { uentry e = uentry_alloc (); ctype rt = t; - + DPRINTF (("Make variable: %s %s %s", n, ctype_unparse (t), sRef_unparse (s))); e->ukind = KVAR; @@ -3320,19 +3322,17 @@ static /*@only@*/ /*@notnull@*/ it allocates memory and sets the fields. We check if the type of the variable is a pointer or array and allocate a `bbufinfo' struct accordingly */ - if( ctype_isArray (t) || ctype_isPointer(t)) { - /*@i222@*/e->info->var->bufinfo = dmalloc( sizeof(*e->info->var->bufinfo) ); - e->info->var->bufinfo->bufstate = BB_NOTNULLTERMINATED; - /*@access sRef@*/ /*i@222*/ - /* It probably isn't necessary to violate the abstraction here - I'll fix this later - */ - s->bufinfo.bufstate = BB_NOTNULLTERMINATED; - /*@noaccess sRef@*/ - } else { - e->info->var->bufinfo = NULL; - }/* end else */ -/* end modification */ + if (ctype_isArray (t) || ctype_isPointer(t)) + { + /*@i222@*/ e->info->var->bufinfo = dmalloc (sizeof (*e->info->var->bufinfo)); + e->info->var->bufinfo->bufstate = BB_NOTNULLTERMINATED; + sRef_setNotNullTerminatedState (s); + } + else + { + e->info->var->bufinfo = NULL; + }/* end else */ + /* end modification */ return (e); } @@ -9818,12 +9818,12 @@ uentry_sameKind (uentry u1, uentry u2) static void uentry_updateInto (/*@unique@*/ uentry unew, uentry old) { - ekind okind = unew->ukind; + ekind okind; llassert (uentry_isValid (unew)); llassert (uentry_isValid (old)); DPRINTF (("Update into: %s / %s", uentry_unparseFull (unew), uentry_unparseFull (old))); - + okind = unew->ukind; unew->ukind = old->ukind; llassert (cstring_equal (unew->uname, old->uname)); unew->utype = old->utype; @@ -10070,8 +10070,8 @@ static bool uentry_relevantReference (sRef sr, bool flip) } static void -uentry_mergeAliasStates (uentry res, uentry other, fileloc loc, - bool mustReturn, bool flip, bool opt, +uentry_mergeAliasStates (/*@notnull@*/ uentry res, /*@notnull@*/ uentry other, + fileloc loc, bool mustReturn, bool flip, bool opt, clause cl) { sRef rs = res->sref; @@ -10227,7 +10227,8 @@ uentry_mergeAliasStates (uentry res, uentry other, fileloc loc, } static void -uentry_mergeValueStates (uentry res, uentry other, fileloc loc, bool mustReturn, /*@unused@*/ bool flip) +uentry_mergeValueStates (/*@notnull@*/ uentry res, /*@notnull@*/ uentry other, + fileloc loc, bool mustReturn, /*@unused@*/ bool flip) { valueTable rvalues; valueTable ovalues; @@ -10406,7 +10407,8 @@ uentry_mergeValueStates (uentry res, uentry other, fileloc loc, bool mustReturn, static void -uentry_mergeSetStates (uentry res, uentry other, /*@unused@*/ fileloc loc, +uentry_mergeSetStates (/*@notnull@*/ uentry res, + /*@notnull@*/ uentry other, /*@unused@*/ fileloc loc, bool flip, clause cl) { if (cl == DOWHILECLAUSE) @@ -11116,20 +11118,19 @@ effects: sets the state of the variable */ -void uentry_setPossiblyNullTerminatedState (uentry p_e) { - /*@access sRef@*/ /*i523 shouldn't do this! */ - if( uentry_isValid(p_e) ) { - if( p_e->info != NULL) { - if( p_e->info->var != NULL) { - p_e->info->var->bufinfo->bufstate = BB_POSSIBLYNULLTERMINATED; - p_e->sref->bufinfo.bufstate = BB_POSSIBLYNULLTERMINATED; - return; - } - } - } - /*@noaccess sRef@*/ +void uentry_setPossiblyNullTerminatedState (uentry p_e) +{ + llassert (uentry_isValid (p_e)); - fprintf(stderr, "uentry:Error in setPossiblyNullTerminatedState\n"); + if (p_e->info != NULL) + { + if (p_e->info->var != NULL) + { + llassert (p_e->info->var->bufinfo != NULL); + p_e->info->var->bufinfo->bufstate = BB_POSSIBLYNULLTERMINATED; + sRef_setPossiblyNullTerminatedState (p_e->sref); + } + } } /* @@ -11139,19 +11140,17 @@ effects: sets the size of the buffer */ void uentry_setNullTerminatedState (uentry p_e) { - if( uentry_isValid(p_e) ) { - if( p_e->info != NULL) { - if( p_e->info->var != NULL) { - p_e->info->var->bufinfo->bufstate = BB_NULLTERMINATED; - /*@access sRef@*/ /*@i523 bad!*/ - p_e->sref->bufinfo.bufstate = BB_NULLTERMINATED; - /*@noaccess sRef@*/ - return; - } - } - } + llassert (uentry_isValid (p_e)); - fprintf(stderr, "uentry:Error in setNullTerminatedState\n"); + if (p_e->info != NULL) + { + if (p_e->info->var != NULL) + { + llassert (p_e->info->var->bufinfo != NULL); + p_e->info->var->bufinfo->bufstate = BB_NULLTERMINATED; + sRef_setNullTerminatedState (p_e->sref); + } + } } /* @@ -11160,43 +11159,40 @@ modifies: p_e effects: sets the size of the buffer */ -void uentry_setSize (uentry p_e, int size) { - if( uentry_isValid(p_e) ) { - if( p_e->info != NULL) { - if( p_e->info->var != NULL) { - p_e->info->var->bufinfo->size = size; - /*@access sRef@*/ /*@i523 bad!*/ - p_e->sref->bufinfo.size = size; - /*@noaccess sRef@*/ - return; - } +void uentry_setSize (uentry p_e, int size) +{ + if (uentry_isValid (p_e)) + { + if (p_e->info != NULL) + { + if (p_e->info->var != NULL) + { + llassert (p_e->info->var->bufinfo != NULL); + p_e->info->var->bufinfo->size = size; + sRef_setSize (p_e->sref, size); + } + } } - } - - fprintf(stderr, "uentry:Error in setSize\n"); } - /* requires: p_e is defined, is a ptr/array variable modifies: p_e effects: sets the length of the buffer */ -void uentry_setLen (uentry p_e, int len) { - if( uentry_isValid(p_e) ) { - if( p_e->info != NULL) { - if( p_e->info->var != NULL) { - p_e->info->var->bufinfo->len = len; - /*@access sRef@*/ /*@i523 bad!*/ - p_e->sref->bufinfo.len = len; - /*@noaccess sRef@*/ - return; - } +void uentry_setLen (uentry p_e, int len) +{ + if (uentry_isValid (p_e)) + { + if (p_e->info != NULL + && p_e->info->var != NULL) + { + llassert (p_e->info->var->bufinfo != NULL); + p_e->info->var->bufinfo->len = len; + sRef_setLen (p_e->sref, len); + } } - } - - fprintf(stderr, "uentry:Error in setLen\n"); } /*@=type*/ diff --git a/src/uentryList.c b/src/uentryList.c index 6c97091..ae3a8a6 100644 --- a/src/uentryList.c +++ b/src/uentryList.c @@ -229,7 +229,7 @@ uentryList_unparseAbbrev (uentryList p) if (uentryList_size (p) == 0) return cstring_makeLiteral ("void"); - for (i = 0; i < p->nelements && i < PRINTBREADTH; i++) + for (i = 0; i < p->nelements && i < uentryList_abbrevBreadth; i++) { if (first) { diff --git a/src/usymtab.c b/src/usymtab.c index 3b60b21..3d3f1a9 100644 --- a/src/usymtab.c +++ b/src/usymtab.c @@ -4512,13 +4512,7 @@ uentry_directParamNo (uentry ue) if (sRef_lexLevel (sr) == functionScope) { - int index; - - /*@access sRef@*/ - llassert (sr->info != NULL); - llassert (sr->info->cvar != NULL); - index = sr->info->cvar->index; - /*@noaccess sRef@*/ + int index = sRef_getScopeIndex (sr); if (index < uentryList_size (context_getParams ())) { @@ -4949,6 +4943,7 @@ usymtab_lookupQuietAux (usymtab s, cstring k, bool noalt) } else { + llassert (s != NULL); /*@i523 should not need this? */ s = s->env; } } @@ -5979,7 +5974,7 @@ static bool checkDistinctExternalName (uentry e) /*@globals globtab@*/ /*@modifies *g_msgstream@*/ { - int checklen = context_getValue (FLG_EXTERNALNAMELEN); + size_t checklen = size_fromInt (context_getValue (FLG_EXTERNALNAMELEN)); bool ignorecase = context_getFlag (FLG_EXTERNALNAMECASEINSENSITIVE); bool gotone = FALSE; bool extras = FALSE; @@ -6054,7 +6049,7 @@ static bool checkDistinctExternalName (uentry e) "in the first %d characters (%q)", uentry_getName (e), uentry_getName (oe), - checklen, + size_toInt (checklen), cstring_clip (uentry_getName (e), checklen)), /*@=sefparams@*/ uentry_whereLast (e))) @@ -6080,7 +6075,7 @@ static bool checkDistinctExternalName (uentry e) "is ignored", uentry_getName (e), uentry_getName (oe), - checklen), + size_toInt (checklen)), uentry_whereLast (e))) { uentry_showWhereAny (oe); @@ -6106,7 +6101,7 @@ static bool checkDistinctExternalName (uentry e) "in the first %d characters (%q)", uentry_getName (e), uentry_getName (oe), - checklen, + size_toInt (checklen), cstring_clip (uentry_getName (e), checklen)), /*@=sefparams@*/ uentry_whereLast (e))) @@ -6142,7 +6137,7 @@ static bool checkDistinctInternalName (uentry e) { usymtab ttab = utab; cstring name = uentry_rawName (e); - int numchars = context_getValue (FLG_INTERNALNAMELEN); + size_t numchars = size_fromInt (context_getValue (FLG_INTERNALNAMELEN)); bool caseinsensitive = context_getFlag (FLG_INTERNALNAMECASEINSENSITIVE); bool lookalike = context_getFlag (FLG_INTERNALNAMELOOKALIKE); @@ -6182,7 +6177,7 @@ static bool checkDistinctInternalName (uentry e) "in the first %d characters (%q)", uentry_getName (e), uentry_getName (oe), - numchars, + size_toInt (numchars), cstring_clip (uentry_getName (e), numchars)), /*@=sefparams@*/ uentry_whereLast (e))) @@ -6195,8 +6190,7 @@ static bool checkDistinctInternalName (uentry e) /*@switchbreak@*/ break; case CGE_CASE: - if (numchars == 0 - || (cstring_length (name) <= numchars)) + if (numchars == 0 || (cstring_length (name) <= numchars)) { if (optgenerror (FLG_DISTINCTINTERNALNAMES, @@ -6221,7 +6215,7 @@ static bool checkDistinctInternalName (uentry e) "in the first %d characters without case sensitivity", uentry_getName (e), uentry_getName (oe), - numchars), + size_toInt (numchars)), uentry_whereLast (e))) { uentry_showWhereAny (oe); @@ -6258,7 +6252,7 @@ static bool checkDistinctInternalName (uentry e) "in the first %d characters except by lookalike characters", uentry_getName (e), uentry_getName (oe), - numchars), + size_toInt (numchars)), uentry_whereLast (e))) { uentry_showWhereAny (oe); diff --git a/src/usymtab_interface.c b/src/usymtab_interface.c index 3cfdff9..d300f85 100644 --- a/src/usymtab_interface.c +++ b/src/usymtab_interface.c @@ -586,11 +586,11 @@ static /*@only@*/ multiVal if /*@-usedef@*/ (first == '\"') /*@=usedef@*/ { - int len = cstring_length (text) - 2; + size_t len = cstring_length (text) - 2; char *val = mstring_create (len); llassert (cstring_lastChar (text) == '\"'); - strncpy (val, cstring_toCharsSafe (text) + 1, size_fromInt (len)); + strncpy (val, cstring_toCharsSafe (text) + 1, len); return (multiVal_makeString (cstring_fromCharsO (val))); } diff --git a/src/valueTable.c b/src/valueTable.c index 623b811..b86d823 100644 --- a/src/valueTable.c +++ b/src/valueTable.c @@ -67,12 +67,13 @@ cstring valueTable_unparse (valueTable h) void valueTable_insert (valueTable h, cstring key, stateValue value) { + llassert (stateValue_isDefined (value)); genericTable_insert ((genericTable) (h), key, (void *) (value)); } void valueTable_update (valueTable h, cstring key, stateValue newval) { DPRINTF (("Update: %s -> %s", key, stateValue_unparse (newval))); - + llassert (stateValue_isDefined (newval)); genericTable_update ((genericTable) (h), key, (void *) (newval)); } diff --git a/test/Makefile.am b/test/Makefile.am index 6697c25..e14febf 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -38,7 +38,7 @@ UNITTESTS = \ help \ abstptr abstract alias alttypes ansireserved argorder \ args arraydims blocks break cases cast charlit clauses commentchar compdestroy \ - compoundliterals constannot controldepth csyntax czechnames czechoslovaknames deadparam \ + compoundliterals compoundstmt constannot controldepth csyntax czechnames czechoslovaknames deadparam \ decl divzero enum exports external fields flags forbody format freearray \ funcpointer functionmacro glob globals impabstract info init inparam internal iter keep libs \ linked lintcomments list loopexec \ @@ -49,7 +49,7 @@ UNITTESTS = \ specclauses \ special stack staticarray strings \ stringliteral \ - structassign typequals ud ulstypes union unioninit unreachable unsignedcompare \ + structassign typequals typeof ud ulstypes union unioninit unreachable unsignedcompare \ unused ullint utypes void widestrings UNITEXPECTS = $(addsuffix .expect, $(UNITTESTS)) @@ -285,6 +285,10 @@ compdestroy: compoundliterals: ${SPLINTRN} compoundliterals.c +.PHONY: compoundstmt +compoundstmt: + ${SPLINTRN} compoundstmt.c -expect 3 + .PHONY: constannot constannot: ${SPLINTRN} constannot.c +boundswrite -exportlocal -expect 2 @@ -756,6 +760,10 @@ strings: structassign: -$(SPLINTR) structassign.c -expect 4 +.PHONY: typeof +typeof: + -$(SPLINTR) typeof.c -expect 2 + .PHONY: typequals typequals: -$(SPLINTR) typequals.c tq.lcl -expect 5 @@ -1017,6 +1025,8 @@ EXTRA_DIST = ./abst_t.lcl ./abst_t.lcs \ ./commentchar.c \ ./commentcmd.c \ ./compdestroy.c \ + ./compoundliterals.c ./compoundliterals.expect \ + ./compoundstmt.c ./compoundstmt.expect \ ./csyntax.c \ ./constannot.c \ ./controldepth.c \ diff --git a/test/Makefile.in b/test/Makefile.in index 7f318b3..f9ae307 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -115,7 +115,7 @@ UNITTESTS = \ help \ abstptr abstract alias alttypes ansireserved argorder \ args arraydims blocks break cases cast charlit clauses commentchar compdestroy \ - compoundliterals constannot controldepth csyntax czechnames czechoslovaknames deadparam \ + compoundliterals compoundstmt constannot controldepth csyntax czechnames czechoslovaknames deadparam \ decl divzero enum exports external fields flags forbody format freearray \ funcpointer functionmacro glob globals impabstract info init inparam internal iter keep libs \ linked lintcomments list loopexec \ @@ -126,7 +126,7 @@ UNITTESTS = \ specclauses \ special stack staticarray strings \ stringliteral \ - structassign typequals ud ulstypes union unioninit unreachable unsignedcompare \ + structassign typequals typeof ud ulstypes union unioninit unreachable unsignedcompare \ unused ullint utypes void widestrings UNITEXPECTS = $(addsuffix .expect, $(UNITTESTS)) @@ -287,6 +287,8 @@ EXTRA_DIST = ./abst_t.lcl ./abst_t.lcs \ ./commentchar.c \ ./commentcmd.c \ ./compdestroy.c \ + ./compoundliterals.c ./compoundliterals.expect \ + ./compoundstmt.c ./compoundstmt.expect \ ./csyntax.c \ ./constannot.c \ ./controldepth.c \ @@ -1102,6 +1104,10 @@ compdestroy: compoundliterals: ${SPLINTRN} compoundliterals.c +.PHONY: compoundstmt +compoundstmt: + ${SPLINTRN} compoundstmt.c -expect 3 + .PHONY: constannot constannot: ${SPLINTRN} constannot.c +boundswrite -exportlocal -expect 2 @@ -1569,6 +1575,10 @@ strings: structassign: -$(SPLINTR) structassign.c -expect 4 +.PHONY: typeof +typeof: + -$(SPLINTR) typeof.c -expect 2 + .PHONY: typequals typequals: -$(SPLINTR) typequals.c tq.lcl -expect 5 diff --git a/test/blocks.expect b/test/blocks.expect index 20e7897..c4fadc9 100644 --- a/test/blocks.expect +++ b/test/blocks.expect @@ -12,9 +12,10 @@ blocks.c: (in function f) blocks.c:3:15: Body of if statement is empty blocks.c:4:10: Suspected infinite loop. No value used in loop test (x) is modified by test or loop body. -blocks.c:6:15: Body of if statement is not a block: x++ -blocks.c:16:12: Incomplete else if logic (no final else): if (x == 1) { x = 4 } -blocks.c:19:8: Body of else clause of if statement is not a block: x = 4 +blocks.c:6:15: Body of if statement is not a block: x++; +blocks.c:16:12: Incomplete else if logic (no final else): if (x == 1) { x = 4; + } +blocks.c:19:8: Body of else clause of if statement is not a block: x = 4; blocks.c:21:16: Body of if clause of if statement is empty blocks.c:22:9: Body of else clause of if statement is empty @@ -24,7 +25,7 @@ blocks.c: (in function f) blocks.c:4:18: Body of while statement is empty blocks.c:4:10: Suspected infinite loop. No value used in loop test (x) is modified by test or loop body. -blocks.c:7:18: Body of while statement is not a block: x++ +blocks.c:7:18: Body of while statement is not a block: x++; Finished checking --- 3 code warnings, as expected @@ -32,7 +33,7 @@ blocks.c: (in function f) blocks.c:4:10: Suspected infinite loop. No value used in loop test (x) is modified by test or loop body. blocks.c:12:23: Body of for statement is empty -blocks.c:13:23: Body of for statement is not a block: x++ +blocks.c:13:23: Body of for statement is not a block: x++; Finished checking --- 3 code warnings, as expected @@ -52,12 +53,13 @@ blocks.c:3:15: Body of if statement is empty blocks.c:4:18: Body of while statement is empty blocks.c:4:10: Suspected infinite loop. No value used in loop test (x) is modified by test or loop body. -blocks.c:6:15: Body of if statement is not a block: x++ -blocks.c:7:18: Body of while statement is not a block: x++ +blocks.c:6:15: Body of if statement is not a block: x++; +blocks.c:7:18: Body of while statement is not a block: x++; blocks.c:12:23: Body of for statement is empty -blocks.c:13:23: Body of for statement is not a block: x++ -blocks.c:16:12: Incomplete else if logic (no final else): if (x == 1) { x = 4 } -blocks.c:19:8: Body of else clause of if statement is not a block: x = 4 +blocks.c:13:23: Body of for statement is not a block: x++; +blocks.c:16:12: Incomplete else if logic (no final else): if (x == 1) { x = 4; + } +blocks.c:19:8: Body of else clause of if statement is not a block: x = 4; blocks.c:21:16: Body of if clause of if statement is empty blocks.c:22:9: Body of else clause of if statement is empty diff --git a/test/compoundstmt.c b/test/compoundstmt.c new file mode 100644 index 0000000..9962777 --- /dev/null +++ b/test/compoundstmt.c @@ -0,0 +1,12 @@ +/* GCC extension: http://gcc.gnu.org/onlinedocs/gcc-3.0.3/gcc_5.html#SEC68 */ + +extern void fvoid (void) ; + +int main (int argc, char **argv) { + int i, j; + j = 1; + i = ({ int __tmp; __tmp=(5); __tmp; }); + j = ({ int __tmp; __tmp=(5); fvoid (); }); + printf("%d\n", i); + return 1; +} diff --git a/test/compoundstmt.expect b/test/compoundstmt.expect new file mode 100644 index 0000000..ce54dfa --- /dev/null +++ b/test/compoundstmt.expect @@ -0,0 +1,8 @@ + +compoundstmt.c: (in function main) +compoundstmt.c:9:3: Assignment of void value to int: j = ({ int __tmp; + __tmp = (5); fvoid(); }) +compoundstmt.c:5:15: Parameter argc not used +compoundstmt.c:5:28: Parameter argv not used + +Finished checking --- 3 code warnings, as expected diff --git a/test/db1.expect b/test/db1.expect index 4a2e17d..3a27d48 100644 --- a/test/db1.expect +++ b/test/db1.expect @@ -132,7 +132,7 @@ eref.c:40: Undocumented use of global eref_Pool eref.c:41: Undocumented use of global eref_Pool eref.c:41: Undocumented modification of eref_Pool.status[]: eref_Pool.status[i] = avail -eref.c:41: Body of for statement is not a block: eref_Pool.status[i] = avail +eref.c:41: Body of for statement is not a block: eref_Pool.status[i] = avail; eref.c:41: Undocumented use of global eref_Pool (in post loop test) eref.c:44: Undocumented use of global eref_Pool eref.c:44: Undocumented modification of eref_Pool.status[]: @@ -194,8 +194,8 @@ empset.c:5: Name _empset_get is in the implementation name space (any empset.c: (in function _empset_get) empset.c:11: Undocumented modification of s possible from call to erc_iterStart: erc_iterStart(s) -empset.c:15: Body of if statement is not a block: - do { { erc_iterFinal(it) } } while (FALSE) +empset.c:15: Body of if statement is not a block: do { { erc_iterFinal(it); + return er } } while (FALSE); empset.c: (in function empset_insert) empset.c:30: Undetected modification possible from call to unconstrained function _empset_get: _empset_get @@ -214,29 +214,29 @@ empset.c:85: Undocumented modification of s1 possible from call to empset.c:85: Undocumented modification of s2 possible from call to erc_iterStart: erc_iterStart(s2) empset.c:86: Body of for statement is not a block: - empset_insertUnique(result, eref_get(er)) + empset_insertUnique(result, eref_get(er)); empset.c: (in function empset_union) empset.c:108: Undocumented modification of s2 possible from call to erc_iterStart (through alias s1): erc_iterStart(s1) empset.c:108: Undocumented modification of s1 possible from call to erc_iterStart: erc_iterStart(s1) -empset.c:110: Body of if statement is not a block: erc_insert(result, er) +empset.c:110: Body of if statement is not a block: erc_insert(result, er); empset.c:109: Body of for statement is not a block: - if (!empset_member(eref_get(er), s2)) erc_insert(result, er) + if (!empset_member(eref_get(er), s2)) erc_insert(result, er); empset.c: (in function empset_intersect) -empset.c:125: Body of if statement is not a block: erc_insert(toDelete, er) +empset.c:125: Body of if statement is not a block: erc_insert(toDelete, er); empset.c:124: Body of for statement is not a block: - if (!empset_member(eref_get(er), s2)) erc_insert(toDelete, er) + if (!empset_member(eref_get(er), s2)) erc_insert(toDelete, er); empset.c:128: Return value (type bool) ignored: erc_delete(s1, er) -empset.c:128: Body of for statement is not a block: erc_delete(s1, er) +empset.c:128: Body of for statement is not a block: erc_delete(s1, er); empset.c: (in function empset_subset) empset.c:139: Undocumented modification of s1 possible from call to erc_iterStart: erc_iterStart(s1) -empset.c:141: Body of if statement is not a block: - do { { erc_iterFinal(it) } } while (FALSE) +empset.c:141: Body of if statement is not a block: do { { erc_iterFinal(it); + return FALSE } } while (FALSE); empset.c:140: Body of for statement is not a block: - if (!empset_member(eref_get(er), s2)) do { { erc_iterFinal(it) - } } while (FALSE) + if (!empset_member(eref_get(er), s2)) do { { erc_iterFinal(it); + return FALSE } } while (FALSE); empset.c:135: Variable e declared but not used empset.c: (in function empset_initMod) empset.c:148: Undocumented use of file static initDone @@ -302,7 +302,7 @@ erc.c:118: Variable it is released in true branch, but live in continuation. erc.c:117: Storage it is released erc.c:121: Only storage *it->next assigned to unqualified: *(it) = (*it)->next erc.c: (in function erc_join) -erc.c:130: Body of for statement is not a block: erc_insert(c1, tmpc->val) +erc.c:130: Body of for statement is not a block: erc_insert(c1, tmpc->val); erc.c: (in function erc_sprint) erc.c:141: Function malloc expects arg 1 to be size_t gets int: erc_size(c) * (employeePrintSize + 1) + 1 @@ -380,9 +380,9 @@ dbase.c:123: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: dbase.c:123: Undocumented modification of db[] possible from call to erc_insert: erc_insert(db[mNON], er) dbase.c:121: Body of if clause of if statement is not a block: - erc_insert(db[mMGRS], er) + erc_insert(db[mMGRS], er); dbase.c:123: Body of else clause of if statement is not a block: - erc_insert(db[mNON], er) + erc_insert(db[mNON], er); dbase.c:126: Undocumented use of global db dbase.c:126: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: db[fMGRS] @@ -394,11 +394,11 @@ dbase.c:128: Array fetch using non-integer, enum { mMGRS, fMGRS, mNON, fNON }: dbase.c:128: Undocumented modification of db[] possible from call to erc_insert: erc_insert(db[fNON], er) dbase.c:126: Body of if clause of if statement is not a block: - erc_insert(db[fMGRS], er) + erc_insert(db[fMGRS], er); dbase.c:128: Body of else clause of if statement is not a block: - erc_insert(db[fNON], er) + erc_insert(db[fNON], er); dbase.c:123: Body of if clause of if statement is not a block: - if (e.j == MGR) erc_insert(db[mMGRS], er) else erc_insert(db[mNON], er) + if (e.j == MGR) erc_insert(db[mMGRS], er); else erc_insert(db[mNON], er); dbase.c: (in function fire) dbase.c:137: Assignment of enum { mMGRS, fMGRS, mNON, fNON } to int: i = mMGRS dbase.c:137: Operands of <= have incompatible types (int, enum { mMGRS, fMGRS, @@ -411,10 +411,12 @@ dbase.c:142: Undocumented modification of db[] possible from call to erc_delete: erc_delete(db[i], er) dbase.c:142: Return value (type bool) ignored: erc_delete(db[i]... dbase.c:139: Body of for statement is not a block: - if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it) } + if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it); + erc_delete(db[i], er);; return TRUE } dbase.c:139: Body of for statement is not a block: for (er = erc_yield(it = erc_iterStart(db[i])); !eref_equal(er, erefNIL); - er = erc_yield(it)) if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it) } + er = erc_yield(it)) if (eref_get(er).ssNum == ssNum) { erc_iterFinal(it); + erc_delete(db[i], er);; return TRUE } dbase.c:137: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) (in post loop test): i <= fNON dbase.c: (in function promote) @@ -462,7 +464,7 @@ dbase.c:227: Undocumented use of global db dbase.c:227: Undetected modification possible from call to unconstrained function _db_addEmpls: _db_addEmpls dbase.c:227: Body of for statement is not a block: - numAdded += _db_addEmpls(db[i], l, h, s) + numAdded += _db_addEmpls(db[i], l, h, s); dbase.c:226: Incompatible types for <= (int, enum { mMGRS, fMGRS, mNON, fNON }) (in post loop test): i <= fNON dbase.c:230: Undocumented use of global db @@ -546,10 +548,11 @@ drive.c:65: Return value (type bool) ignored: empset_delete(em... drive.c:82: Return value (type bool) ignored: employee_setName... drive.c:83: Return value (type bool) ignored: empset_insert(em... drive.c:107: Return value (type bool) ignored: empset_delete(em... -drive.c:116: Body of if clause of if statement is not a block: e.gen = MALE -drive.c:116: Body of else clause of if statement is not a block: e.gen = FEMALE -drive.c:117: Body of if clause of if statement is not a block: e.j = NONMGR -drive.c:117: Body of else clause of if statement is not a block: e.j = MGR +drive.c:116: Body of if clause of if statement is not a block: e.gen = MALE; +drive.c:116: Body of else clause of if statement is not a block: + e.gen = FEMALE; +drive.c:117: Body of if clause of if statement is not a block: e.j = NONMGR; +drive.c:117: Body of else clause of if statement is not a block: e.j = MGR; drive.c:119: Return value (type bool) ignored: employee_setName... drive.c:123: Return value (type db_status) ignored: hire(e) drive.c:127: Assignment of db_status to int: j = hire(e) diff --git a/test/flags.expect b/test/flags.expect index 7ff81b9..7fe89bb 100644 --- a/test/flags.expect +++ b/test/flags.expect @@ -18,15 +18,15 @@ flags.c:11:5: flags.c:10:5: Declaration of xx1 -flags.c:13:18: +flags.c:13:4: Semantic comment attempts to restore flag linelen. A flag for setting a value cannot be restored. -flags.c:15:17: Semantic comment attempts to set global flag dump. A - global flag cannot be set locally. +flags.c:15:4: Semantic comment attempts to set global flag dump. A + global flag cannot be set locally. flags.c:16:22: Flag macrovarprefix (in semantic comment) must be followed by an argument flags.c:17:26: Flag macrovarprefix (in semantic comment) must be diff --git a/test/help.expect b/test/help.expect index cfd9582..86c6a6e 100644 --- a/test/help.expect +++ b/test/help.expect @@ -423,7 +423,7 @@ Finished checking --- no code processed singleinclude sizeofformalarray sizeoftype - skipansiheaders + skipisoheaders skipposixheaders skipsysheaders slashslashcomment diff --git a/test/moreBufferTests2.expect b/test/moreBufferTests2.expect index 152baed..1119c82 100644 --- a/test/moreBufferTests2.expect +++ b/test/moreBufferTests2.expect @@ -13,9 +13,9 @@ fixedArrayType.c: (in function fixedArrayTouch) fixedArrayType.c:9:3: Possible out-of-bounds store: buffer[sizeof(Array) - 1] Unable to resolve constraint: - requires sizeof(Array) @ fixedArrayType.c:9:24 <= 10 + requires sizeof(Array) @ fixedArrayType.c:9:25 <= 10 needed to satisfy precondition: requires maxSet(buffer @ fixedArrayType.c:9:3) >= sizeof(Array) @ - fixedArrayType.c:9:24 - 1 + fixedArrayType.c:9:25 - 1 Finished checking --- 1 code warning, as expected diff --git a/test/tests2.4.expect b/test/tests2.4.expect index 5fa174d..12b96e5 100644 --- a/test/tests2.4.expect +++ b/test/tests2.4.expect @@ -25,7 +25,7 @@ bug2.c: (in function main) bug2.c:6:8: Fall through case (no preceding break) bug2.c:10:10: Fall through case (no preceding break) bug2.c:16:8: Fall through case (no preceding break) -bug2.c:5:5: Statement after switch is not a case: printf("here 1") +bug2.c:5:5: Statement after switch is not a case: printf("here 1"); bug2.c:20:2: Path with no return in function declared to return int Finished checking --- 5 code warnings, as expected diff --git a/test/typeof.c b/test/typeof.c new file mode 100644 index 0000000..4c77143 --- /dev/null +++ b/test/typeof.c @@ -0,0 +1,14 @@ +/* gcc extension: http://gcc.gnu.org/onlinedocs/gcc-3.0.3/gcc_5.html#SEC74 */ + +int main (int /*@unused{*/ argc, char /*@unused@*/ **argv) { + int i = 0; + typeof (i) j; + __typeof__ (int *) ip; + typeof (typeof (char *) [4]) y; /* char *y[4] */ + + j = 10; + *ip = j; + *y[3] = 'a'; + printf("%d\n", *ip); + return 1; +} diff --git a/test/typeof.expect b/test/typeof.expect new file mode 100644 index 0000000..8adb1ae --- /dev/null +++ b/test/typeof.expect @@ -0,0 +1,6 @@ + +typeof.c: (in function main) +typeof.c:10:4: Variable ip used before definition +typeof.c:11:4: Array element y[3] used before definition + +Finished checking --- 2 code warnings, as expected -- 2.45.2