]> andersk Git - splint.git/commitdiff
Fixed line numbering when multi-line macro parameters are used.
authorevans1629 <evans1629>
Sat, 2 Mar 2002 23:31:43 +0000 (23:31 +0000)
committerevans1629 <evans1629>
Sat, 2 Mar 2002 23:31:43 +0000 (23:31 +0000)
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.

81 files changed:
lib/standard.h
src/Headers/aliasTable.h
src/Headers/constraint.h
src/Headers/context.h
src/Headers/cpphash.h
src/Headers/cpplib.h
src/Headers/cstring.h
src/Headers/cstringList.h
src/Headers/cstringSList.h
src/Headers/exprChecks.h
src/Headers/exprNode.h
src/Headers/fileTable.h
src/Headers/flagMarker.h
src/Headers/flagMarkerList.h
src/Headers/flags.h
src/Headers/globals.h
src/Headers/llerror.h
src/Headers/misc.h
src/Headers/mstring.h [new file with mode: 0644]
src/Headers/sRef.h
src/Headers/splintMacros.nf
src/Headers/uentry.h
src/Headers/uentryList.h
src/Headers/valueTable.h
src/Makefile.am
src/Makefile.in
src/abstract.c
src/cgrammar.c.der
src/cgrammar.y
src/clabstract.c
src/constraint.c
src/constraintExpr.c
src/constraintGeneration.c
src/constraintTerm.c
src/context.c
src/cppexp.c
src/cpphash.c
src/cpplib.c
src/cppmain.c
src/cscanner.l
src/cstring.c
src/cstringList.c
src/cstringSList.c
src/ctbase.i
src/exprChecks.c
src/exprNode.c
src/fileTable.c
src/fileloc.c
src/flagMarker.c
src/flagMarkerList.c
src/flags.c
src/flags.def
src/general.c
src/inputStream.c
src/lcllib.c
src/llerror.c
src/macrocache.c
src/message.c
src/mtContextNode.c
src/nameChecks.c
src/osd.c
src/sRef.c
src/stateValue.c
src/structNames.c
src/uentry.c
src/uentryList.c
src/usymtab.c
src/usymtab_interface.c
src/valueTable.c
test/Makefile.am
test/Makefile.in
test/blocks.expect
test/compoundstmt.c [new file with mode: 0644]
test/compoundstmt.expect [new file with mode: 0644]
test/db1.expect
test/flags.expect
test/help.expect
test/moreBufferTests2.expect
test/tests2.4.expect
test/typeof.c [new file with mode: 0644]
test/typeof.expect [new file with mode: 0644]

index 2274eab0257f42819082687e2b1a328fb7f3bf20..20b39fbdf964c223744d0d298128d5de478e2c6c 100644 (file)
@@ -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; @*/
index 9075ab35f975448edb04a1055026e6ef00462629..be50060e65cf628b4b3b26f701edda8b63f05a04 100644 (file)
@@ -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;
index 39a11959a5df04ad1d6c3c4b96825fe724a726e4..173bf5777d415bdeebaaf569b3d5270a844494b6 100644 (file)
@@ -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) ;
index c357e84ed31b51eb544df15b44c677832f644f96..bf036a71ca67eb9865a876e91a898a35a5740711 100644 (file)
@@ -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);
index 7341be4471fa630679a273ba7add5a5986c128d3..f29180e4b4cf86b5546ef7b05276ed9bab688566 100644 (file)
@@ -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
index c7890e4159af192f3a8b7fbecec8f5754c4e43b3..cf8529bbfbc7837ad6d6ee790c74a6fcbc8bb8a7 100644 (file)
@@ -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) @*/;
 
index cc1bcbd760c34f56f2d81da1a5f8807f5562d372..d6d886bb1fcfeaab18e30174db75e7d4f32697bc 100644 (file)
 
 /* 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
index 6a655075dc2cf696748db47d1b4346a7eecbae15..c0766463957a12ec2f8a33b9037decf7e63847ee 100644 (file)
@@ -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) /*@*/ ;
 
index 609878796ed348d9e9a380e4f64b7f371f9d8f58..03c51dd9471dec5a11c16a4f6bdf192810fc6e95 100644 (file)
@@ -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
index f544fe803658e4c82048a703452369076ae8e2cd..cfb9dae8b877fe303955ac379823f2d24a383e80 100644 (file)
@@ -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);
 
index fa18494f63bd38a807c17b009267f36b122a8974..93ed2c2fd19856657359f3e8d7917674e4f8029c 100644 (file)
@@ -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 */
index db9a4d333bfcd8c3803bbec396cff32001a761a5..313f92da3d3af3811bcea8870227936c1dec04bc 100644 (file)
@@ -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;
 
index 6d3e8a0d943c855b160a82c6814a26794748e174..cdf4189bb9d6d3efab3a7e5d5ee96de680bec55f 100644 (file)
@@ -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) /*@*/ ; 
index cbd54321590cedcdc80b54d3bf22b1b9cff09774..86665de0f3e6642606aca2461b05ec5128ad6d7d 100644 (file)
@@ -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) /*@*/ ;
index 042948f34940b0bb2ef73203657ae7e670ba8d6d..d81d95ad571b3fdb8f0512b6f05c4f4007006cd7 100644 (file)
@@ -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) /*@*/ ;
index da374fe952db5d4b860a5de81fa20460a95c4abb..aafb222b6b8ad12adcd2e1282663711084bbd114 100644 (file)
@@ -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
index f9e5f707d5202f94441ad742e7d0c7b5a753cc48..ad37b966b30792a5b6bc5c3a0ac542d4748d4f8d 100644 (file)
@@ -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
index f31abd7297a0a48e2bc8e57d6de605b631c15e63..a13ec3a480be44ed4fbbd02cac856da2ea1fc99b 100644 (file)
@@ -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 (file)
index 0000000..0608cb8
--- /dev/null
@@ -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
+
+
+
+
+
index 373cc2ad4f879574884a5c015cfdb6145081b497..0b007f1eee9615308ea2aabd6742d79321ebc828 100644 (file)
@@ -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
index f441a1d0a952142564de02152b481f1643e9432f..265edf61688ccf6b8bcb065f9aa2cbca5effa329 100644 (file)
 /*@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)
 
 /*
index 1b030a1d541ade5290cbcef2cec43759afde25b6..4b89966260df3a8ef6765ded8cf13ef124e25d3b 100644 (file)
@@ -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 */
index c736e16d5e631734dfb6af2180eee501362eadc1..56cd289c7f4798fb7ee1f75c476bdc44240eed3f 100644 (file)
@@ -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
index f18892010eaeb24bf91709b5c5e34f7a32a3ff53..51efe10b2a9665c7cacf6bec526f9a03b20f5b83 100644 (file)
@@ -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@*/
 
index b5164d1bd434a0123f89d8aefb9a7cac6b83ec13..c65153181c396e0b98d044dc35a5e07fe75e1316 100644 (file)
@@ -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 \
index 7cd206af97b63edd53a777fd1373cfab14cbd8a3..7bbf655fecf257327fc8bc2f4c8d7da5607258ab 100644 (file)
@@ -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 \
index 46f8c4a146afaf4d581b67af94711c5c40790609..978ab86f404e05497464d6e79802157e6e588ba6 100644 (file)
@@ -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;
 
index 5706a9253b488fc8fceb4b927d2958ecd4096206..6f6f13237f418be6868c76126051c524fca5c255 100644 (file)
 #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 */
 
index 98ad6f26bcd17c5b7e9504f37acc0b074509c807..b9073bac728e0e6ca00291b38eedab1990e66998 100644 (file)
@@ -136,7 +136,7 @@ extern void yyerror (char *);
 %token <tok> TSEMI TLBRACE TRBRACE TCOMMA TCOLON TASSIGN TLPAREN 
 %token <tok> TRPAREN TLSQBR TRSQBR TDOT TAMPERSAND TEXCL TTILDE
 %token <tok> TMINUS TPLUS TMULT TDIV TPERCENT TLT TGT TCIRC TBAR TQUEST
-%token <tok> CSIZEOF CALIGNOF ARROW_OP CTYPEDEF COFFSETOF
+%token <tok> CSIZEOF CALIGNOF CTYPEOF ARROW_OP CTYPEDEF COFFSETOF
 %token <tok> INC_OP DEC_OP LEFT_OP RIGHT_OP
 %token <tok> LE_OP GE_OP EQ_OP NE_OP AND_OP OR_OP
 %token <tok> MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN SUB_ASSIGN
@@ -307,7 +307,8 @@ extern void yyerror (char *);
 %type <expr> compoundStmt compoundStmtAux compoundStmtRest compoundStmtAuxErr
 %type <expr> expressionStmt selectionStmt iterationStmt jumpStmt iterDefIterationStmt 
 %type <expr> stmtErr stmtListErr compoundStmtErr expressionStmtErr 
-%type <expr> iterationStmtErr initializerList initializer ifPred whilePred forPred iterWhilePred
+%type <expr> iterationStmtErr initializerList typeInitializerList initializer
+%type <expr> ifPred whilePred forPred iterWhilePred typeInitializer
 
 %type <expr> 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); } 
 
 %%
 
index 8c2f1989c89be5ed3f0321d3d0f3402eaa46299e..9c4fe209adab029ad747c498b1ee9dae4941aaf3 100644 (file)
@@ -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;\r
 # 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 
index 605875daf7fc34c49f7d1e7f79616d1e0294f761..ccdb179aaaca235e2903933af061c8690b920dae 100644 (file)
@@ -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 ();
 
index 1f22b7eb5fed73fe4563ed5751a663340edc8314..4249d9ca48bc0b682b3391f05b6bb9ce3a2ed6ce 100644 (file)
@@ -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);
index e3c0a1f5400ba73daefce377decd84f02cc3aa8a..6a71ce16052544b59abbbd2a6d9a870ec1af0836 100644 (file)
 /*@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_handleErrorexprNode 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 ("<error>");
-       }
-      
-      /*@-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);
        }
index 65012f95fdfee57d327ef860fdbec7e763fe2f20..8d1aa1306a42f8d319effd00326941488f61a6e7 100644 (file)
@@ -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)
     {
       
index 95735de8b4db692a5c694e208fe848fc16fd891c..d900745ca52db576b8ad66977f94d2c0374bf353 100644 (file)
@@ -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)));
 
index c19eb8bdb5a662e309e7ecd68fda2b703ab9065a..a41277e69c8a2d32750fbfa36ced2c543ef5557e 100644 (file)
@@ -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')
index 0d20855ced0d7c29ef38745383667b3b85070c49..cf98cdfa3e110457f4527aa324502117035746f9 100644 (file)
@@ -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
index b8837a62d5f78af69c50f8a46723703f8b66287c..302167c56d8b1fd778cb2c775723105da4ac59cd 100644 (file)
@@ -62,15 +62,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 # endif
 
 # include <string.h>
-
 # if !(defined (WIN32) || defined (OS2) && defined (__IBMC__))
 # include <unistd.h>
 # endif
-
 # include <sys/types.h>
 # include <sys/stat.h>
 # include <fcntl.h>
-
 # if defined (WIN32) || defined (OS2) && defined (__IBMC__)
 # include <io.h>
 # include <sys/utime.h>                /* 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 <MikeM@xata.com> */
                  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);
 
index d10b2cc65daf0132d550ec0fb8c6ce818e5bc1f3..74c68ba24658b90243418cd3c145003f1e4c0e4c 100644 (file)
@@ -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);
index 74a3779a8a07738bac204aee20ef4c8027cea494..7e1e4452703b93cdb7ea1e9567b649a4247a4150 100644 (file)
@@ -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__")) 
        {
index 256954600e011206cdf00e016a25cd10a1fbc096..4f3dd7a4ef7c779e4b4380186a491d44061d769c 100644 (file)
@@ -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;
 
index dc4d6120f260aef281692bf817d6056312c5d4bd..145c8d2339120738d549097c6868e1c86388ff1f 100644 (file)
@@ -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)
            {
index 9511e28377e27ff88401f13031783b43995e4cf0..e9cff1a0aa56504903aa0aa8e5f8c27f7df86258 100644 (file)
@@ -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)
            {
index 9c2fddf052817370e6fcea3cdd467769ca815867..03aeabb0fd1f7d1c10f0deacb9c773139a5830b8 100644 (file)
@@ -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;
index 75ce7f386d68a1a0b9ac61ac172fc91b88280264..4b3b81db593fbb0c26172eaef5f59be0a014b157 100644 (file)
@@ -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"));
index 40046dddbd3e14d652f63f258beb9d5be9f472c1..f3040f796fa2efb93015898828b3076726afab58 100644 (file)
@@ -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:
index 079783472a21faa065952a4c72b2db2b79f9a2b5..7869f87567ac7e130761c784ae59e8f38882d6f0 100644 (file)
@@ -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;
index 91bcf9e5d21e59c3f207b6e93516e4be841c19b5..063ec7ea84a186b60635e9f5ef9087c164d974f0 100644 (file)
@@ -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));
index f1ef51ae0e9a0e2a7d51bba5b989671cd1a41524..7580bb7c997c107d457fecb7495be6d9f1ab1872 100644 (file)
@@ -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)
index e935637731d0daa38362646663cb09f6ab4fc789..ec660634bbd151fc5d463e1b975c872068a50323 100644 (file)
@@ -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)
index eb68c11d6dd04df7cdff17ce7484de08953b9efa..8ddf84361066f812428f2f25898cbe65bfec6d45 100644 (file)
@@ -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;
        }
       
       /*
index 2ef3bce8772edeb1dfc5303cc26ac5cc31fc2b94..b230b3a4e7dde83ad4b9a3031cee30c17501655c 100644 (file)
@@ -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 "
index dd72788fd32809088471c8aafd635c546e8682b4..e621870367708b932b91aafda998c3f3a047b3fd 100644 (file)
@@ -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;
 
index 116f489882f3ae770c2a8facf666eb509454b728..c38bb077d0ae91a2e0161284c4ca4767e26c4050 100644 (file)
@@ -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;
 }
 
index 04e2a34d43d00e81a29a52b617739ce75e8ced15..efaa31fe5cb40ffacface938ed52291c2319edca 100644 (file)
@@ -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
index 7198b287c4406c7ec337dad2ea101cc92ff151ae..8f8b959cb711f04c3049440aeb74511fcc17a583 100644 (file)
@@ -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 ();
index e244784f226204c1301cd305c030b1a9ceb74f39..8f447087e3eebb192ef21c10d74bd02f304381e4 100644 (file)
@@ -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);
 }
 
index d12a1eb9803055f01f2058f26ead9010108a1c7b..8a825c95a988f388e79fa1af28bd93984cbcc623 100644 (file)
@@ -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
                  {
index ba307dae9ef109e64bcc0a7a7142ecd553c0c1e7..4cc6e9ed2faf930836e01a783a18156beb54e2c9 100644 (file)
@@ -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),
index 2cb8c563c44ede54444e3d350edd62ede86cbb96..5cbea671b79d6145ca63123348b9b8aff6f57b8c 100644 (file)
@@ -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)));
index 17f5a0f28eb064099dda8bae526c8a3b9cf1e67c..16f020dd881cfc357d98e0d551c4358185badea9 100644 (file)
--- 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);
index 1934a9d42c68102053a7adf9f775faf7c5989799..ed43a689062d4329db77d57e92e1e07b8f1460e7 100644 (file)
@@ -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;
index 973bd70015bb2eff5a97f73437bbaa24f7d54d4b..aacffde629cb24ed823e296fa3a00cca63e6fbbc 100644 (file)
@@ -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)));
 }
                  
index 5d0997418ff7f4cb96c8cc503eb0e9068699500e..3c09e826cafbc463990d5ed87f9274867870e363 100644 (file)
@@ -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) == '!'));
index ac39bb6ba577df17170f97cd93e2aca70873a051..fcea58ca7eee40a955570b57e04d90d012328ca2 100644 (file)
@@ -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*/
index 6c970911f73e573e56117b96e571b402090e62b7..ae3a8a67508afeb2afb8b7fdec6b9b226192b475 100644 (file)
@@ -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)
        {
index 3b60b2195453dfc9024739353985a0f7729e0b62..3d3f1a9d797935ec518b69af88d2faac35ae238d 100644 (file)
@@ -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);
index 3cfdff9c3667dec1f0275604792fad5555ca7dc2..d300f85521bfd8ea87b34803c2c6a488f7ff52be 100644 (file)
@@ -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)));
     }
 
index 623b811f19d35cf8827ed5cf7e141b811a59df45..b86d823aab7f7447f8dc73762967e2cee6a9d758 100644 (file)
@@ -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));
 }
index 6697c25d386bb2e928bc39b9342fb902c81c5bbd..e14febf654da8bccf51ddf767265c0451397cc16 100644 (file)
@@ -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 \
index 7f318b39474a34fbdc3fd7e8f610f7d44adbc837..f9ae307ee8f2fb4e1b7bc08c060199fb037eb178 100644 (file)
@@ -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
index 20e7897465580386eb56852b3bc24818b547be49..c4fadc900b5c2dcd9e5cdd9b1426ed3072f45bc9 100644 (file)
@@ -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 (file)
index 0000000..9962777
--- /dev/null
@@ -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 (file)
index 0000000..ce54dfa
--- /dev/null
@@ -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
index 4a2e17d94c71e8d70766fe9c4ab9cfd545e28ee2..3a27d48519e3e82afc7e1dbe08e1fbcb6fcd5c38 100644 (file)
@@ -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)
index 7ff81b942d720d1ee6cfdaea34c57c0f4644d430..7fe89bb314e949f3f8a68a357b8929b6c68fa643 100644 (file)
@@ -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
index cfd9582fc6ea4c7b1178ca7e2565c7c7a8575915..86c6a6e401b10aed8b2dacb1bbd501456d4cac4e 100644 (file)
@@ -423,7 +423,7 @@ Finished checking --- no code processed
    singleinclude               
    sizeofformalarray           
    sizeoftype                  
-   skipansiheaders             
+   skipisoheaders              
    skipposixheaders            
    skipsysheaders              
    slashslashcomment           
index 152baed0868909851b6ce6720da99c21955f2403..1119c82593e60030a410ac2191d94fdc3e98f4c6 100644 (file)
@@ -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
index 5fa174dd91be8ddbbf2d654041a67514bc5582d8..12b96e57be5bf8504e0b86f0f8aca6033f20f272 100644 (file)
@@ -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 (file)
index 0000000..4c77143
--- /dev/null
@@ -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 (file)
index 0000000..8adb1ae
--- /dev/null
@@ -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
This page took 0.792293 seconds and 5 git commands to generate.