develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r34113 - in branches/pdd09gc_part1: . compilers/pirc compilers/pirc/doc compilers/pirc/new compilers/pirc/src config/gen/makefiles languages/lisp languages/perl6/docs tools/dev

From:
chromatic
Date:
December 19, 2008 09:30
Subject:
[svn:parrot] r34113 - in branches/pdd09gc_part1: . compilers/pirc compilers/pirc/doc compilers/pirc/new compilers/pirc/src config/gen/makefiles languages/lisp languages/perl6/docs tools/dev
Message ID:
20081219172925.3B020CBA12@x12.develooper.com
Author: chromatic
Date: Fri Dec 19 09:29:23 2008
New Revision: 34113

Removed:
   branches/pdd09gc_part1/compilers/pirc/doc/design.pod
   branches/pdd09gc_part1/compilers/pirc/src/
Modified:
   branches/pdd09gc_part1/   (props changed)
   branches/pdd09gc_part1/MANIFEST
   branches/pdd09gc_part1/MANIFEST.SKIP
   branches/pdd09gc_part1/compilers/pirc/README.pod
   branches/pdd09gc_part1/compilers/pirc/new/bcgen.c
   branches/pdd09gc_part1/compilers/pirc/new/bcgen.h
   branches/pdd09gc_part1/compilers/pirc/new/pir.y
   branches/pdd09gc_part1/compilers/pirc/new/pircompiler.c
   branches/pdd09gc_part1/compilers/pirc/new/pircompunit.c
   branches/pdd09gc_part1/compilers/pirc/new/pircompunit.h
   branches/pdd09gc_part1/compilers/pirc/new/pirparser.c
   branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.c
   branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.h
   branches/pdd09gc_part1/config/gen/makefiles/pirc.in
   branches/pdd09gc_part1/languages/lisp/cl.pir
   branches/pdd09gc_part1/languages/perl6/docs/spectest-progress.csv
   branches/pdd09gc_part1/tools/dev/mk_inno.pl

Log:
 r34132@waterwheel (orig r34101):  kjs | 2008-12-19 04:52:21 -0800
 [pirc] refactor of codesegment creation which is needed to get things working in future.
 + add runtime checks for lin.scan.reg.alloc; only if it's requested create the data structures. The tests are worth it, as they are only simple checks (probably 1 or 2 machine instructions), whereas data structure creation will invoke memory allocators, which is much more painful.
 r34133@waterwheel (orig r34102):  kjs | 2008-12-19 04:59:46 -0800
 [pirc] add a synopsis section to bcgen.c. This presents overview of how to use the ByteCodeGENerator file.
 r34134@waterwheel (orig r34103):  kjs | 2008-12-19 05:06:39 -0800
 [pirc] Remove old hand-written version of pirc. No point in keeping it; should we decide that a recursive-descent version is the way to go, I'd rather start over with experience and lessons learned with pirc/new.
 + update MANIFEST
 r34135@waterwheel (orig r34104):  kjs | 2008-12-19 05:09:14 -0800
 [pirc] put some stuff into the Memory Hole. and other updates.
 r34136@waterwheel (orig r34105):  kjs | 2008-12-19 05:11:51 -0800
 [pirc] remove old documentation about pirc/src. + update MANIFEST
 r34137@waterwheel (orig r34106):  kjs | 2008-12-19 05:24:06 -0800
 [config] fix pirc.in; it referred to src/pirlexer, should be new/~
 r34138@waterwheel (orig r34107):  kjs | 2008-12-19 05:41:10 -0800
 [config] remove a reference to non-existing file in pirc.in
 r34139@waterwheel (orig r34108):  kjs | 2008-12-19 05:44:37 -0800
 [pirc] refactoring of grammar + action code.
 r34140@waterwheel (orig r34109):  kjs | 2008-12-19 06:04:16 -0800
 [pirc] shortcuts and layout updates.
 r34141@waterwheel (orig r34110):  fperrad | 2008-12-19 07:45:10 -0800
 [win32] setup
 - now, update %PATH% when installing
 r34142@waterwheel (orig r34111):  fperrad | 2008-12-19 08:54:27 -0800
 [lisp]
 - fix opcode removed
 r34143@waterwheel (orig r34112):  pmichaud | 2008-12-19 09:28:23 -0800
 [rakudo]: spectest-progress.csv update: 250 files, 5213 passing, 0 failing
 
 


Modified: branches/pdd09gc_part1/MANIFEST
==============================================================================
--- branches/pdd09gc_part1/MANIFEST	(original)
+++ branches/pdd09gc_part1/MANIFEST	Fri Dec 19 09:29:23 2008
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools\dev\mk_manifest_and_skip.pl Wed Dec 17 21:37:57 2008 UT
+# generated by tools\dev\mk_manifest_and_skip.pl Fri Dec 19 13:11:06 2008 UT
 #
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
@@ -149,7 +149,6 @@
 compilers/pirc/README.pod                                   []
 compilers/pirc/TODO                                         []
 compilers/pirc/bctest.c                                     []
-compilers/pirc/doc/design.pod                               []
 compilers/pirc/heredoc/heredocmain.c                        []
 compilers/pirc/macro/lexer.h                                []
 compilers/pirc/macro/macro.h                                []
@@ -187,24 +186,6 @@
 compilers/pirc/new/pirsymbol.h                              []
 compilers/pirc/new/piryy.h                                  []
 compilers/pirc/pirc.c                                       []
-compilers/pirc/src/README.pod                               []
-compilers/pirc/src/jsonout.c                                []
-compilers/pirc/src/jsonout.h                                []
-compilers/pirc/src/pastout.c                                []
-compilers/pirc/src/pastout.h                                []
-compilers/pirc/src/pbcout.c                                 []
-compilers/pirc/src/pbcout.h                                 []
-compilers/pirc/src/pirlexer.c                               []
-compilers/pirc/src/pirlexer.h                               []
-compilers/pirc/src/pirmain.c                                []
-compilers/pirc/src/pirout.c                                 []
-compilers/pirc/src/pirout.h                                 []
-compilers/pirc/src/pirparser.c                              []
-compilers/pirc/src/pirparser.h                              []
-compilers/pirc/src/pirutil.c                                []
-compilers/pirc/src/pirutil.h                                []
-compilers/pirc/src/pirvtable.c                              []
-compilers/pirc/src/pirvtable.h                              []
 compilers/pirc/t/basic.t                                    []
 compilers/pirc/t/harness                                    []
 compilers/pirc/t/heredoc.t                                  []
@@ -1555,6 +1536,7 @@
 languages/ecmascript/src/parser/grammar.pg                  [ecmascript]
 languages/ecmascript/t/00-comments.t                        [ecmascript]
 languages/ecmascript/t/01-literals.t                        [ecmascript]
+languages/ecmascript/t/02-operators.t                       [ecmascript]
 languages/ecmascript/t/harness                              [ecmascript]
 languages/forth/MAINTAINER                                  [forth]
 languages/forth/config/makefiles/root.in                    [forth]
@@ -3061,7 +3043,6 @@
 src/pmc/callsignature.pmc                                   []
 src/pmc/capture.pmc                                         []
 src/pmc/class.pmc                                           []
-src/pmc/closure.pmc                                         []
 src/pmc/codestring.pmc                                      []
 src/pmc/complex.pmc                                         []
 src/pmc/continuation.pmc                                    []

Modified: branches/pdd09gc_part1/MANIFEST.SKIP
==============================================================================
--- branches/pdd09gc_part1/MANIFEST.SKIP	(original)
+++ branches/pdd09gc_part1/MANIFEST.SKIP	Fri Dec 19 09:29:23 2008
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools\dev\mk_manifest_and_skip.pl Wed Dec 17 21:37:57 2008 UT
+# generated by tools\dev\mk_manifest_and_skip.pl Fri Dec 19 13:05:26 2008 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for

Modified: branches/pdd09gc_part1/compilers/pirc/README.pod
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/README.pod	(original)
+++ branches/pdd09gc_part1/compilers/pirc/README.pod	Fri Dec 19 09:29:23 2008
@@ -319,9 +319,6 @@
 
 =item new - contains the Bison/Flex implementation of PIRC
 
-=item src - contains the hand-written, recursive-descent implementation of PIRC.
-Note that this is no longer maintained at the moment.
-
 =item t - for tests. No tests yet at this point.
 
 =item macro - contains the old implementation of the macro preprocessor. This is now
@@ -405,16 +402,6 @@
 
 =back
 
-At this moment, the following things are unclear to me; if anybody can answer these,
-that'd be helpful:
-
-=over 4
-
-=item * how are named args/params handled/represented in bytecode?
-
-=back
-
-
 =head1 SEE ALSO
 
 See also:
@@ -423,8 +410,6 @@
 
 =item * C<languages/PIR> for a PGE based implementation.
 
-=item * C<compilers/pirc/src>, a hand-written, recursive-descent PIR parser.
-
 =item * C<compilers/imcc>, the current I<standard> PIR implementation.
 
 =item * C<docs/imcc/syntax.pod> for a description of PIR syntax.

Modified: branches/pdd09gc_part1/compilers/pirc/new/bcgen.c
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/bcgen.c	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/bcgen.c	Fri Dec 19 09:29:23 2008
@@ -25,6 +25,30 @@
 private bits. Everything you need to know should be accessible through
 accessor functions.
 
+=head1 SYNOPSIS
+
+  // create a bytecode object
+  bytecode *bc = new_bytecode(interp, "foo.pir", codesize, bytes);
+
+  while ( ... ) {
+
+      // write opcodes
+      int opcode = ...
+
+      emit_opcode(bc, opcode);
+      // emit constants
+      int mystring = add_string_const(bc, "hello");
+
+      // emit the constant index into bytecode stream
+      emit_int_arg(bc, mystring);
+  }
+
+  // write the pbc file
+  write_pbc_file(bc, "foo.pbc");
+
+  // clean up
+  destroy_bytecode(bc);
+
 =cut
 
 */
@@ -209,16 +233,46 @@
     self              = VTABLE_get_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_INTERPRETER);
     add_pmc_const(bc, self);
 
+    create_codesegment(bc, codesize);
+
+    return bc;
+}
+
+/*
+
+Create a code segment of size C<codesize>.
+
+*/
+void
+create_codesegment(bytecode * const bc, int codesize) {
     /* allocate enough space. XXX I *think* bytes is /always/ codesize * 4. */
-    interp->code->base.data = (opcode_t *)mem_sys_realloc(interp->code->base.data, bytes);
-    interp->code->base.size = codesize;
+    bc->interp->code->base.data = (opcode_t *)mem_sys_realloc(bc->interp->code->base.data,
+                                                              codesize * 4);
+
+    bc->interp->code->base.size = codesize;
 
     /* initialize the cursor to write opcodes into the code segment */
-    bc->opcursor = (opcode_t *)interp->code->base.data;
+    bc->opcursor = (opcode_t *)bc->interp->code->base.data;
+}
 
-    return bc;
+/*
+
+=item C<void
+destroy_bytecode(bytecode * bc)>
+
+Destructor for bytecode struct; frees all memory.
+
+=cut
+
+*/
+void
+destroy_bytecode(bytecode * bc) {
+    /* XXX should we do this? Not Parrot? */
+    mem_sys_free(bc->interp->code->base.data);
+    mem_sys_free(bc);
 }
 
+
 /*
 
 =item C<void
@@ -277,6 +331,7 @@
         emit_opcode(bc, op);
 }
 
+/* XXX remove or update prototype once the XXX below has been resolved. */
 static STRING *add_string_const_from_cstring(bytecode * const bc, char const * const str);
 
 /*

Modified: branches/pdd09gc_part1/compilers/pirc/new/bcgen.h
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/bcgen.h	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/bcgen.h	Fri Dec 19 09:29:23 2008
@@ -16,6 +16,9 @@
 
 bytecode *new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize);
 
+
+void create_codesegment(bytecode * const bc, int codesize);
+
 /* call this to write the PBC file */
 void write_pbc_file(bytecode * const bc, char const * const filename) ;
 

Modified: branches/pdd09gc_part1/compilers/pirc/new/pir.y
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pir.y	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pir.y	Fri Dec 19 09:29:23 2008
@@ -398,6 +398,7 @@
              braced_contents
              braced_arg
              braced_item
+             rhs_ident
 
 %type <targ> sub
              pmc_object
@@ -1090,6 +1091,10 @@
 assignment_stat   : assignment "\n"
                   ;
 
+rhs_ident         : TK_IDENT
+                  | keyword
+                  ;
+
 assignment        : target '=' TK_INTC
                         {
                           if ($3 == 0)
@@ -1118,28 +1123,7 @@
                           set_instrf(lexer, "set", "%T%T", $1, $3);
                           get_opinfo(yyscanner);
                         }
-                  | target '=' TK_IDENT
-                        {
-                          symbol *sym = find_symbol(lexer, $3);
-                          if (sym) {
-                              target *rhs = target_from_symbol(lexer, sym);
-                              if (!targets_equal($1, rhs)) {
-                                  set_instrf(lexer, "set", "%T%T", $1, rhs);
-                                  get_opinfo(yyscanner);
-                              }
-                          }
-                          else { /* not a symbol */
-                              if (is_parrot_op(lexer, $3)) {
-                                  set_instrf(lexer, $3, "%T", $1);
-                                  get_opinfo(yyscanner);
-                              }
-                              else {
-                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
-                                             "nor a parrot opcode", $3);
-                              }
-                          }
-                        }
-                  | target '=' keyword
+                  | target '=' rhs_ident
                         {
                           symbol *sym = find_symbol(lexer, $3);
                           if (sym) {
@@ -1619,8 +1603,7 @@
                        ".end_call" "\n"
                             { /* $4 contains an invocation object */
                               set_invocation_args($4, $3);
-                              set_invocation_results($4, $6);
-                              $$ = $4;
+                              $$ = set_invocation_results($4, $6);
                             }
                      ;
 
@@ -1665,10 +1648,10 @@
                            { $$ = $1; }
                      | long_results long_result
                            {
-                               if ($2)
-                                   $$ = add_target(lexer, $1, $2);
-                               else
-                                   $$ = $1
+                             if ($2)
+                                 $$ = add_target(lexer, $1, $2);
+                             else
+                                 $$ = $1
                            }
                      ;
 
@@ -1683,17 +1666,11 @@
 
 
 short_invocation     : opt_target_list '=' simple_invocation
-                           { set_invocation_results($3, $1);
-                             $$ = $3;
-                           }
+                           { $$ = set_invocation_results($3, $1); }
                      | target '=' simple_invocation
-                           { set_invocation_results($3, $1);
-                             $$ = $3;
-                           }
+                           { $$ = set_invocation_results($3, $1); }
                      | simple_invocation
-                           { set_invocation_results($1, NULL);
-                             $$ = $1;
-                           }
+                           {  $$ = set_invocation_results($1, NULL); }
                      ;
 
 simple_invocation    : subcall
@@ -1702,13 +1679,8 @@
 
 methodcall           : pmc_object '.' method arguments
                            {
-                             target *invocant;
-
                              /* if $1 is not a register, check whether the symbol was declared */
-                             if (TEST_FLAG($1->flags, TARGET_FLAG_IS_REG)) {
-                                invocant = $1;
-                             }
-                             else { /* is not a register but a symbol */
+                             if (!TEST_FLAG($1->flags, TARGET_FLAG_IS_REG)) {
 
                                  symbol *sym = find_symbol(lexer, $1->info->id.name);
                                  if (sym == NULL)
@@ -1718,12 +1690,9 @@
                                      yypirerror(yyscanner, lexer,
                                              "cannot invoke method: '%s' is not of type 'pmc'",
                                              $1->info->id.name);
-
-                                 /* get a target based on the symbol, it contains a register */
-                                 invocant = $1;
                              }
 
-                             $$ = invoke(lexer, CALL_METHOD, invocant, $3);
+                             $$ = invoke(lexer, CALL_METHOD, $1, $3);
                              set_invocation_args($$, $4);
                            }
                      ;
@@ -1739,11 +1708,12 @@
                            { $$ = $1; }
                      | TK_STRINGC
                            {
-                               symbol *sym = find_symbol(lexer, $1);
-                               if (sym == NULL)
-                                   sym = new_symbol(lexer, $1, PMC_TYPE);
+                             symbol *sym = find_symbol(lexer, $1);
+                             if (sym == NULL)
+                                 sym = new_symbol(lexer, $1, PMC_TYPE);
 
-                               $$ = target_from_symbol(lexer, sym); }
+                             $$ = target_from_symbol(lexer, sym);
+                           }
                      ;
 
 method               : identifier
@@ -2748,7 +2718,7 @@
                                 no need to do expensive string comparison; it must be true. */
             if (STREQ(s, "0") || STREQ(s, ".0") || STREQ(s, "0.") || STREQ(s, "0.0"))
                 return 0;
-            else  /* short string but not equal to "0.0" or a variant */
+            else
                 return 1;
         }
         else /* strlen > 3, so does not contain "0.0" or a variant */

Modified: branches/pdd09gc_part1/compilers/pirc/new/pircompiler.c
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pircompiler.c	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pircompiler.c	Fri Dec 19 09:29:23 2008
@@ -181,8 +181,9 @@
     lexer->macros     = new_macro_table(NULL);
     lexer->macro_size = INIT_MACRO_SIZE;
 
-    /* create a new linear scan register allocator */
-    lexer->lsr        = new_linear_scan_register_allocator(lexer);
+    /* create a new linear scan register allocator, if requested */
+    if (TEST_FLAG(flags, LEXER_FLAG_REGALLOC))
+        lexer->lsr = new_linear_scan_register_allocator(lexer);
 
     return lexer;
 }

Modified: branches/pdd09gc_part1/compilers/pirc/new/pircompunit.c
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pircompunit.c	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pircompunit.c	Fri Dec 19 09:29:23 2008
@@ -1439,9 +1439,10 @@
 =cut
 
 */
-void
+invocation *
 set_invocation_args(invocation * const inv, argument * const args) {
     inv->arguments = args;
+    return inv;
 }
 
 /*
@@ -1454,9 +1455,10 @@
 =cut
 
 */
-void
+invocation *
 set_invocation_results(invocation * const inv, target * const results) {
     inv->results = results;
+    return inv;
 }
 
 /*
@@ -1469,9 +1471,10 @@
 =cut
 
 */
-void
+invocation *
 set_invocation_type(invocation * const inv, invoke_type type) {
     inv->type = type;
+    return inv;
 }
 
 /*

Modified: branches/pdd09gc_part1/compilers/pirc/new/pircompunit.h
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pircompunit.h	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pircompunit.h	Fri Dec 19 09:29:23 2008
@@ -386,9 +386,9 @@
 
 /* functions for creating an invocation node and setting various fields */
 invocation *invoke(struct lexer_state * const lexer, invoke_type, ...);
-void set_invocation_type(invocation * const inv, invoke_type type);
-void set_invocation_args(invocation * const inv, argument * const args);
-void set_invocation_results(invocation * const inv, target * const results);
+invocation *set_invocation_type(invocation * const inv, invoke_type type);
+invocation *set_invocation_args(invocation * const inv, argument * const args);
+invocation *set_invocation_results(invocation * const inv, target * const results);
 
 /* conversion functions that wrap their arguments into a target node */
 target *target_from_symbol(struct lexer_state * const lexer, struct symbol * const sym);

Modified: branches/pdd09gc_part1/compilers/pirc/new/pirparser.c
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pirparser.c	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pirparser.c	Fri Dec 19 09:29:23 2008
@@ -806,16 +806,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1053
+#define YYLAST   1014
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  162
+#define YYNNTS  163
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  414
+#define YYNRULES  415
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  645
+#define YYNSTATES  646
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -887,143 +887,143 @@
      301,   303,   305,   308,   310,   313,   316,   320,   324,   327,
      330,   332,   334,   336,   338,   339,   341,   343,   347,   351,
      353,   355,   357,   359,   361,   363,   366,   370,   372,   376,
-     383,   388,   395,   398,   402,   406,   410,   414,   418,   422,
-     426,   431,   436,   441,   445,   449,   453,   457,   461,   465,
-     469,   474,   480,   485,   490,   494,   498,   502,   506,   510,
-     514,   518,   522,   525,   531,   537,   543,   549,   555,   561,
-     567,   573,   579,   584,   590,   595,   600,   605,   610,   615,
-     620,   625,   630,   635,   640,   645,   650,   655,   659,   663,
-     667,   671,   675,   679,   683,   687,   691,   695,   699,   703,
-     705,   707,   709,   711,   713,   715,   719,   724,   726,   730,
-     733,   734,   736,   742,   744,   746,   748,   757,   758,   760,
-     762,   765,   769,   773,   776,   782,   783,   786,   787,   789,
-     791,   794,   798,   800,   803,   807,   811,   813,   815,   817,
-     822,   825,   827,   829,   831,   833,   835,   837,   839,   841,
-     845,   846,   848,   850,   854,   857,   858,   861,   863,   865,
-     867,   870,   872,   874,   876,   878,   880,   884,   888,   892,
-     896,   897,   899,   901,   905,   907,   909,   913,   916,   918,
-     924,   930,   931,   933,   935,   938,   942,   943,   945,   947,
-     950,   954,   955,   958,   960,   963,   964,   966,   970,   973,
-     975,   977,   980,   983,   988,   993,   998,  1003,  1005,  1007,
-    1009,  1011,  1013,  1015,  1017,  1019,  1021,  1023,  1025,  1027,
-    1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,  1045,  1047,
-    1049,  1051,  1053,  1055,  1057,  1059,  1061,  1063,  1065,  1067,
-    1069,  1071,  1073,  1075,  1077,  1079,  1081,  1083,  1085,  1087,
-    1089,  1091,  1093,  1095,  1097,  1099,  1101,  1103,  1105,  1107,
-    1109,  1111,  1113,  1115,  1117,  1119,  1121,  1123,  1125,  1127,
-    1129,  1131,  1133,  1135,  1137,  1139,  1141,  1143,  1146,  1148,
-    1150,  1153,  1155,  1158,  1160,  1163,  1166,  1168,  1171,  1174,
-    1176,  1178,  1180,  1184,  1186
+     383,   388,   395,   398,   400,   402,   406,   410,   414,   418,
+     422,   426,   431,   436,   441,   445,   449,   453,   457,   461,
+     465,   469,   474,   480,   485,   490,   494,   498,   502,   506,
+     510,   514,   518,   522,   525,   531,   537,   543,   549,   555,
+     561,   567,   573,   579,   584,   590,   595,   600,   605,   610,
+     615,   620,   625,   630,   635,   640,   645,   650,   655,   659,
+     663,   667,   671,   675,   679,   683,   687,   691,   695,   699,
+     703,   705,   707,   709,   711,   713,   715,   719,   724,   726,
+     730,   733,   734,   736,   742,   744,   746,   748,   757,   758,
+     760,   762,   765,   769,   773,   776,   782,   783,   786,   787,
+     789,   791,   794,   798,   800,   803,   807,   811,   813,   815,
+     817,   822,   825,   827,   829,   831,   833,   835,   837,   839,
+     841,   845,   846,   848,   850,   854,   857,   858,   861,   863,
+     865,   867,   870,   872,   874,   876,   878,   880,   884,   888,
+     892,   896,   897,   899,   901,   905,   907,   909,   913,   916,
+     918,   924,   930,   931,   933,   935,   938,   942,   943,   945,
+     947,   950,   954,   955,   958,   960,   963,   964,   966,   970,
+     973,   975,   977,   980,   983,   988,   993,   998,  1003,  1005,
+    1007,  1009,  1011,  1013,  1015,  1017,  1019,  1021,  1023,  1025,
+    1027,  1029,  1031,  1033,  1035,  1037,  1039,  1041,  1043,  1045,
+    1047,  1049,  1051,  1053,  1055,  1057,  1059,  1061,  1063,  1065,
+    1067,  1069,  1071,  1073,  1075,  1077,  1079,  1081,  1083,  1085,
+    1087,  1089,  1091,  1093,  1095,  1097,  1099,  1101,  1103,  1105,
+    1107,  1109,  1111,  1113,  1115,  1117,  1119,  1121,  1123,  1125,
+    1127,  1129,  1131,  1133,  1135,  1137,  1139,  1141,  1143,  1146,
+    1148,  1150,  1153,  1155,  1158,  1160,  1163,  1166,  1168,  1171,
+    1174,  1176,  1178,  1180,  1184,  1186
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     139,     0,    -1,   115,   140,    -1,   114,   291,    -1,   141,
+     139,     0,    -1,   115,   140,    -1,   114,   292,    -1,   141,
      142,   141,    -1,    -1,    35,    -1,   143,    -1,   142,    35,
-     143,    -1,   166,    -1,   276,    -1,   162,    -1,   160,    -1,
+     143,    -1,   166,    -1,   277,    -1,   162,    -1,   160,    -1,
      161,    -1,   157,    -1,   158,    -1,   159,    -1,   144,    -1,
      145,    -1,   146,    -1,   107,    37,   113,    -1,   147,   118,
-     148,   119,    35,   151,   104,    -1,   103,   286,    -1,    -1,
-     149,    -1,   150,    -1,   149,   120,   150,    -1,   286,    -1,
+     148,   119,    35,   151,   104,    -1,   103,   287,    -1,    -1,
+     149,    -1,   150,    -1,   149,   120,   150,    -1,   287,    -1,
       -1,   152,    -1,   153,    -1,   152,   153,    -1,   154,    35,
-      -1,   155,    -1,   156,    -1,   106,   108,    -1,   105,   282,
+      -1,   155,    -1,   156,    -1,   106,   108,    -1,   105,   283,
      109,    -1,     5,    46,    -1,    10,    47,    -1,    11,    46,
       -1,    34,    46,   120,    46,    -1,     3,    46,    -1,     4,
       46,   121,    46,    -1,    13,   122,   163,   123,    -1,    -1,
      164,    -1,   165,    -1,   164,   124,   165,    -1,    46,    -1,
      168,   170,    35,   173,   181,   167,    -1,     7,    -1,     6,
-     169,    -1,   286,    -1,    46,    -1,    -1,   170,   171,    -1,
+     169,    -1,   287,    -1,    46,    -1,    -1,   170,   171,    -1,
       85,    -1,    82,    -1,    83,    -1,    84,    -1,    89,    -1,
       91,    -1,    92,    -1,    90,    -1,    87,   118,   169,   119,
-      -1,    86,   272,    -1,    88,   272,    -1,    93,   273,    -1,
-      94,   273,    -1,    95,   273,    -1,   286,    -1,    46,    -1,
+      -1,    86,   273,    -1,    88,   273,    -1,    93,   274,    -1,
+      94,   274,    -1,    95,   274,    -1,   287,    -1,    46,    -1,
      208,    -1,   174,    -1,    -1,   174,   175,    -1,     8,   176,
-     177,    35,    -1,   282,   286,    -1,    -1,   177,   178,    -1,
-     250,    -1,   179,    -1,   180,    -1,   102,   118,   172,   119,
+     177,    35,    -1,   283,   287,    -1,    -1,   177,   178,    -1,
+     251,    -1,   179,    -1,   180,    -1,   102,   118,   172,   119,
       -1,    96,    -1,    -1,   181,   182,    -1,    36,   183,    -1,
-     183,    -1,   198,    -1,   214,    -1,   220,    -1,   221,    -1,
-     225,    -1,   274,    -1,   251,    -1,   226,    -1,   211,    -1,
+     183,    -1,   198,    -1,   215,    -1,   221,    -1,   222,    -1,
+     226,    -1,   275,    -1,   252,    -1,   227,    -1,   211,    -1,
      197,    -1,   196,    -1,   193,    -1,   194,    -1,   184,    -1,
      195,    -1,   185,    -1,   110,   186,    35,    -1,    -1,   118,
      187,   119,    -1,    -1,   188,    -1,   189,    -1,   188,   120,
      189,    -1,   111,    -1,   112,    -1,   110,   186,    -1,   190,
       -1,   125,   191,   126,    -1,    -1,   191,   192,    -1,    35,
       -1,   112,    -1,   111,    -1,   110,   186,    -1,    35,    -1,
-     158,    35,    -1,     1,    35,    -1,    44,   283,    35,    -1,
-      28,   245,    35,    -1,   199,    35,    -1,   200,   201,    -1,
+     158,    35,    -1,     1,    35,    -1,    44,   284,    35,    -1,
+      28,   246,    35,    -1,   199,    35,    -1,   200,   201,    -1,
      210,    -1,    37,    -1,   202,    -1,   204,    -1,    -1,   203,
-      -1,   205,    -1,   203,   120,   205,    -1,   208,   121,   279,
-      -1,   206,    -1,   208,    -1,   280,    -1,   286,    -1,   285,
-      -1,   207,    -1,   244,   208,    -1,   122,   209,   123,    -1,
-     279,    -1,   209,   124,   279,    -1,   283,   121,   200,   206,
-     120,   203,    -1,   283,   121,   200,   206,    -1,   283,   121,
-     200,   208,   120,   203,    -1,   212,    35,    -1,   283,   121,
-      47,    -1,   283,   121,    48,    -1,   283,   121,    46,    -1,
-     283,   121,   285,    -1,   283,   121,    37,    -1,   283,   121,
-     287,    -1,   283,   121,   213,    -1,   283,   121,   200,   208,
-      -1,   283,   121,   287,   208,    -1,   283,   121,    49,   208,
-      -1,   283,   290,   279,    -1,   283,    71,    47,    -1,   283,
-      71,    48,    -1,   283,    72,    47,    -1,   283,    72,    48,
-      -1,   283,    71,   283,    -1,   283,    72,   283,    -1,   283,
-     121,   288,   279,    -1,   283,   121,   283,   289,   279,    -1,
-     287,   208,   121,   279,    -1,    49,   208,   121,   279,    -1,
-      47,   289,   283,    -1,    48,   289,   283,    -1,    46,   289,
-     283,    -1,    46,   289,    46,    -1,    47,   289,    47,    -1,
-      48,   289,    48,    -1,    47,   289,    48,    -1,    48,   289,
-      47,    -1,   215,    35,    -1,   218,    44,    37,    45,   286,
-      -1,   218,    44,    38,    45,   286,    -1,   218,    44,    39,
-      45,   286,    -1,   218,    44,    40,    45,   286,    -1,   218,
-      44,    41,    45,   286,    -1,   218,    44,    42,    45,   286,
-      -1,   218,    44,    43,    45,   286,    -1,   218,    44,    45,
-      45,   286,    -1,   218,    44,    44,    45,   286,    -1,   218,
-     280,   219,   286,    -1,   218,    44,    49,   219,   286,    -1,
-     218,    37,   219,   286,    -1,   218,   285,   219,   286,    -1,
-     218,    38,   219,   286,    -1,   218,    39,   219,   286,    -1,
-     218,    40,   219,   286,    -1,   218,    41,   219,   286,    -1,
-     218,    42,   219,   286,    -1,   218,    43,   219,   286,    -1,
-     218,    45,    45,   286,    -1,   218,    45,   120,   286,    -1,
-     218,    44,    45,   286,    -1,   218,    44,   120,   286,    -1,
-     218,   216,    45,   286,    -1,   283,   281,   279,    -1,    47,
-     281,   283,    -1,    48,   281,   283,    -1,    46,   281,   283,
-      -1,    47,   281,    47,    -1,    47,   281,    48,    -1,    48,
-     281,    47,    -1,    48,   281,    48,    -1,    46,   281,    46,
-      -1,    46,   281,   217,    -1,    47,   281,    46,    -1,    48,
-     281,    46,    -1,    47,    -1,    48,    -1,    42,    -1,    43,
-      -1,    45,    -1,   120,    -1,    45,   286,    35,    -1,    12,
-     282,   222,    35,    -1,   223,    -1,   222,   120,   223,    -1,
-     286,   224,    -1,    -1,    96,    -1,     9,    46,   120,   244,
-      35,    -1,   227,    -1,   228,    -1,   237,    -1,    26,    35,
-     229,   232,    35,   234,    27,    35,    -1,    -1,   230,    -1,
-     231,    -1,   230,   231,    -1,    30,   260,    35,    -1,    29,
-     244,   233,    -1,    32,   244,    -1,    14,   244,    35,    15,
-     243,    -1,    -1,   120,   244,    -1,    -1,   235,    -1,   236,
-      -1,   235,   236,    -1,    31,   248,    35,    -1,   221,    -1,
-     238,    35,    -1,   245,   121,   239,    -1,   283,   121,   239,
-      -1,   239,    -1,   241,    -1,   240,    -1,   244,   127,   243,
-     255,    -1,   242,   255,    -1,   244,    -1,    46,    -1,   286,
-      -1,    49,    -1,    51,    -1,    46,    -1,   286,    -1,    49,
-      -1,   118,   246,   119,    -1,    -1,   247,    -1,   248,    -1,
-     247,   120,   248,    -1,   283,   249,    -1,    -1,   249,   250,
-      -1,   100,    -1,   101,    -1,    98,    -1,    97,   272,    -1,
-     252,    -1,   253,    -1,   262,    -1,   254,    -1,   263,    -1,
-      18,   255,    35,    -1,    33,   239,    35,    -1,    19,   255,
-      35,    -1,   118,   256,   119,    -1,    -1,   257,    -1,   258,
-      -1,   257,   120,   258,    -1,   260,    -1,   259,    -1,    46,
-      53,   261,    -1,   261,   270,    -1,   279,    -1,    24,    35,
-     267,    25,    35,    -1,    22,    35,   264,    23,    35,    -1,
-      -1,   265,    -1,   266,    -1,   265,   266,    -1,    20,   260,
-      35,    -1,    -1,   268,    -1,   269,    -1,   268,   269,    -1,
-      21,   260,    35,    -1,    -1,   270,   271,    -1,    99,    -1,
-      97,   272,    -1,    -1,   273,    -1,   118,    46,   119,    -1,
-     275,    35,    -1,   276,    -1,   277,    -1,    17,   278,    -1,
-      16,   278,    -1,    38,   286,   121,    47,    -1,    39,   286,
-     121,    48,    -1,    41,   286,   121,    46,    -1,    46,   286,
-     121,   280,    -1,   283,    -1,   280,    -1,    46,    -1,    47,
+      -1,   205,    -1,   203,   120,   205,    -1,   208,   121,   280,
+      -1,   206,    -1,   208,    -1,   281,    -1,   287,    -1,   286,
+      -1,   207,    -1,   245,   208,    -1,   122,   209,   123,    -1,
+     280,    -1,   209,   124,   280,    -1,   284,   121,   200,   206,
+     120,   203,    -1,   284,   121,   200,   206,    -1,   284,   121,
+     200,   208,   120,   203,    -1,   213,    35,    -1,    37,    -1,
+     288,    -1,   284,   121,    47,    -1,   284,   121,    48,    -1,
+     284,   121,    46,    -1,   284,   121,   286,    -1,   284,   121,
+     212,    -1,   284,   121,   214,    -1,   284,   121,   200,   208,
+      -1,   284,   121,   288,   208,    -1,   284,   121,    49,   208,
+      -1,   284,   291,   280,    -1,   284,    71,    47,    -1,   284,
+      71,    48,    -1,   284,    72,    47,    -1,   284,    72,    48,
+      -1,   284,    71,   284,    -1,   284,    72,   284,    -1,   284,
+     121,   289,   280,    -1,   284,   121,   284,   290,   280,    -1,
+     288,   208,   121,   280,    -1,    49,   208,   121,   280,    -1,
+      47,   290,   284,    -1,    48,   290,   284,    -1,    46,   290,
+     284,    -1,    46,   290,    46,    -1,    47,   290,    47,    -1,
+      48,   290,    48,    -1,    47,   290,    48,    -1,    48,   290,
+      47,    -1,   216,    35,    -1,   219,    44,    37,    45,   287,
+      -1,   219,    44,    38,    45,   287,    -1,   219,    44,    39,
+      45,   287,    -1,   219,    44,    40,    45,   287,    -1,   219,
+      44,    41,    45,   287,    -1,   219,    44,    42,    45,   287,
+      -1,   219,    44,    43,    45,   287,    -1,   219,    44,    45,
+      45,   287,    -1,   219,    44,    44,    45,   287,    -1,   219,
+     281,   220,   287,    -1,   219,    44,    49,   220,   287,    -1,
+     219,    37,   220,   287,    -1,   219,   286,   220,   287,    -1,
+     219,    38,   220,   287,    -1,   219,    39,   220,   287,    -1,
+     219,    40,   220,   287,    -1,   219,    41,   220,   287,    -1,
+     219,    42,   220,   287,    -1,   219,    43,   220,   287,    -1,
+     219,    45,    45,   287,    -1,   219,    45,   120,   287,    -1,
+     219,    44,    45,   287,    -1,   219,    44,   120,   287,    -1,
+     219,   217,    45,   287,    -1,   284,   282,   280,    -1,    47,
+     282,   284,    -1,    48,   282,   284,    -1,    46,   282,   284,
+      -1,    47,   282,    47,    -1,    47,   282,    48,    -1,    48,
+     282,    47,    -1,    48,   282,    48,    -1,    46,   282,    46,
+      -1,    46,   282,   218,    -1,    47,   282,    46,    -1,    48,
+     282,    46,    -1,    47,    -1,    48,    -1,    42,    -1,    43,
+      -1,    45,    -1,   120,    -1,    45,   287,    35,    -1,    12,
+     283,   223,    35,    -1,   224,    -1,   223,   120,   224,    -1,
+     287,   225,    -1,    -1,    96,    -1,     9,    46,   120,   245,
+      35,    -1,   228,    -1,   229,    -1,   238,    -1,    26,    35,
+     230,   233,    35,   235,    27,    35,    -1,    -1,   231,    -1,
+     232,    -1,   231,   232,    -1,    30,   261,    35,    -1,    29,
+     245,   234,    -1,    32,   245,    -1,    14,   245,    35,    15,
+     244,    -1,    -1,   120,   245,    -1,    -1,   236,    -1,   237,
+      -1,   236,   237,    -1,    31,   249,    35,    -1,   222,    -1,
+     239,    35,    -1,   246,   121,   240,    -1,   284,   121,   240,
+      -1,   240,    -1,   242,    -1,   241,    -1,   245,   127,   244,
+     256,    -1,   243,   256,    -1,   245,    -1,    46,    -1,   287,
+      -1,    49,    -1,    51,    -1,    46,    -1,   287,    -1,    49,
+      -1,   118,   247,   119,    -1,    -1,   248,    -1,   249,    -1,
+     248,   120,   249,    -1,   284,   250,    -1,    -1,   250,   251,
+      -1,   100,    -1,   101,    -1,    98,    -1,    97,   273,    -1,
+     253,    -1,   254,    -1,   263,    -1,   255,    -1,   264,    -1,
+      18,   256,    35,    -1,    33,   240,    35,    -1,    19,   256,
+      35,    -1,   118,   257,   119,    -1,    -1,   258,    -1,   259,
+      -1,   258,   120,   259,    -1,   261,    -1,   260,    -1,    46,
+      53,   262,    -1,   262,   271,    -1,   280,    -1,    24,    35,
+     268,    25,    35,    -1,    22,    35,   265,    23,    35,    -1,
+      -1,   266,    -1,   267,    -1,   266,   267,    -1,    20,   261,
+      35,    -1,    -1,   269,    -1,   270,    -1,   269,   270,    -1,
+      21,   261,    35,    -1,    -1,   271,   272,    -1,    99,    -1,
+      97,   273,    -1,    -1,   274,    -1,   118,    46,   119,    -1,
+     276,    35,    -1,   277,    -1,   278,    -1,    17,   279,    -1,
+      16,   279,    -1,    38,   287,   121,    47,    -1,    39,   287,
+     121,    48,    -1,    41,   287,   121,    46,    -1,    46,   287,
+     121,   281,    -1,   284,    -1,   281,    -1,    46,    -1,    47,
       -1,    48,    -1,    54,    -1,    55,    -1,    56,    -1,    57,
       -1,    59,    -1,    58,    -1,    38,    -1,    39,    -1,    40,
-      -1,    41,    -1,   284,    -1,   285,    -1,   286,    -1,    49,
-      -1,    50,    -1,    52,    -1,    51,    -1,    37,    -1,   287,
+      -1,    41,    -1,   285,    -1,   286,    -1,   287,    -1,    49,
+      -1,    50,    -1,    52,    -1,    51,    -1,    37,    -1,   288,
       -1,    42,    -1,    43,    -1,    45,    -1,    38,    -1,    39,
       -1,    41,    -1,    40,    -1,    44,    -1,   128,    -1,   129,
       -1,   130,    -1,   131,    -1,   128,    -1,   132,    -1,   133,
@@ -1033,58 +1033,58 @@
       -1,    56,    -1,    59,    -1,    58,    -1,    54,    -1,    73,
       -1,    74,    -1,    75,    -1,    76,    -1,    79,    -1,    77,
       -1,    78,    -1,    80,    -1,    81,    -1,    69,    -1,    70,
-      -1,    68,    -1,   292,   293,    -1,   141,    -1,   294,    -1,
-     293,   294,    -1,   295,    -1,   162,    35,    -1,   225,    -1,
-     158,    35,    -1,   144,    35,    -1,   185,    -1,    36,   296,
-      -1,   297,   296,    -1,   299,    -1,   193,    -1,   299,    -1,
-     298,   170,    36,    -1,   116,    -1,   200,   202,    35,    -1
+      -1,    68,    -1,   293,   294,    -1,   141,    -1,   295,    -1,
+     294,   295,    -1,   296,    -1,   162,    35,    -1,   226,    -1,
+     158,    35,    -1,   144,    35,    -1,   185,    -1,    36,   297,
+      -1,   298,   297,    -1,   300,    -1,   193,    -1,   300,    -1,
+     299,   170,    36,    -1,   116,    -1,   200,   202,    35,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   538,   538,   539,   544,   550,   551,   554,   555,   558,
-     559,   560,   561,   562,   563,   564,   565,   566,   573,   574,
-     577,   581,   587,   594,   595,   598,   599,   602,   606,   607,
-     610,   611,   614,   617,   618,   621,   625,   636,   640,   642,
-     646,   651,   655,   659,   664,   665,   669,   671,   675,   679,
-     685,   689,   693,   694,   697,   698,   701,   703,   705,   707,
-     709,   711,   713,   715,   717,   719,   721,   723,   725,   727,
-     731,   732,   733,   736,   754,   755,   759,   763,   768,   769,
-     773,   774,   775,   778,   785,   791,   792,   802,   804,   807,
-     808,   809,   810,   811,   812,   813,   814,   815,   816,   817,
-     818,   819,   820,   821,   827,   830,   835,   836,   841,   842,
-     845,   847,   855,   863,   864,   866,   869,   875,   876,   885,
-     886,   887,   888,   896,   900,   904,   913,   920,   927,   930,
-     931,   934,   943,   950,   953,   954,   957,   958,   961,   997,
-     999,  1006,  1008,  1013,  1015,  1019,  1042,  1046,  1048,  1057,
-    1068,  1080,  1090,  1093,  1102,  1111,  1116,  1121,  1142,  1163,
-    1168,  1208,  1226,  1233,  1238,  1249,  1260,  1271,  1282,  1287,
-    1292,  1297,  1307,  1326,  1360,  1362,  1364,  1366,  1368,  1370,
-    1372,  1374,  1379,  1388,  1390,  1392,  1394,  1396,  1398,  1400,
-    1402,  1404,  1406,  1418,  1423,  1425,  1427,  1429,  1431,  1433,
-    1435,  1437,  1439,  1441,  1443,  1445,  1447,  1478,  1504,  1512,
-    1521,  1530,  1532,  1534,  1536,  1538,  1542,  1547,  1549,  1554,
-    1555,  1558,  1559,  1562,  1563,  1566,  1574,  1578,  1580,  1584,
-    1588,  1589,  1592,  1607,  1611,  1612,  1615,  1628,  1629,  1633,
-    1635,  1639,  1643,  1645,  1647,  1653,  1654,  1659,  1660,  1664,
-    1666,  1675,  1677,  1681,  1685,  1689,  1693,  1699,  1700,  1703,
-    1731,  1738,  1740,  1749,  1766,  1768,  1770,  1774,  1783,  1788,
-    1793,  1794,  1798,  1800,  1804,  1809,  1810,  1814,  1816,  1818,
-    1820,  1830,  1834,  1835,  1836,  1837,  1840,  1845,  1856,  1863,
-    1868,  1869,  1873,  1875,  1879,  1880,  1883,  1887,  1891,  1895,
-    1904,  1914,  1915,  1920,  1922,  1927,  1932,  1933,  1937,  1939,
-    1943,  1949,  1950,  1954,  1956,  1964,  1965,  1969,  1973,  1976,
-    1977,  1980,  1984,  1988,  1990,  1992,  1994,  2002,  2003,  2007,
-    2008,  2009,  2012,  2013,  2014,  2015,  2016,  2017,  2020,  2021,
-    2022,  2023,  2031,  2034,  2035,  2047,  2048,  2049,  2050,  2054,
-    2055,  2058,  2059,  2060,  2061,  2062,  2063,  2064,  2065,  2068,
-    2069,  2070,  2073,  2074,  2075,  2076,  2077,  2078,  2079,  2080,
-    2081,  2082,  2083,  2084,  2085,  2086,  2087,  2088,  2089,  2090,
-    2091,  2092,  2093,  2094,  2095,  2101,  2102,  2103,  2104,  2105,
-    2106,  2107,  2108,  2109,  2110,  2111,  2112,  2124,  2132,  2136,
-    2137,  2140,  2141,  2142,  2143,  2144,  2145,  2148,  2150,  2151,
-    2154,  2155,  2158,  2162,  2167
+       0,   539,   539,   540,   545,   551,   552,   555,   556,   559,
+     560,   561,   562,   563,   564,   565,   566,   567,   574,   575,
+     578,   582,   588,   595,   596,   599,   600,   603,   607,   608,
+     611,   612,   615,   618,   619,   622,   626,   637,   641,   643,
+     647,   652,   656,   660,   665,   666,   670,   672,   676,   680,
+     686,   690,   694,   695,   698,   699,   702,   704,   706,   708,
+     710,   712,   714,   716,   718,   720,   722,   724,   726,   728,
+     732,   733,   734,   737,   755,   756,   760,   764,   769,   770,
+     774,   775,   776,   779,   786,   792,   793,   803,   805,   808,
+     809,   810,   811,   812,   813,   814,   815,   816,   817,   818,
+     819,   820,   821,   822,   828,   831,   836,   837,   842,   843,
+     846,   848,   856,   864,   865,   867,   870,   876,   877,   886,
+     887,   888,   889,   897,   901,   905,   914,   921,   928,   931,
+     932,   935,   944,   951,   954,   955,   958,   959,   962,   998,
+    1000,  1007,  1009,  1014,  1016,  1020,  1043,  1047,  1049,  1058,
+    1069,  1081,  1091,  1094,  1095,  1098,  1107,  1116,  1121,  1126,
+    1147,  1152,  1192,  1210,  1217,  1222,  1233,  1244,  1255,  1266,
+    1271,  1276,  1281,  1291,  1310,  1344,  1346,  1348,  1350,  1352,
+    1354,  1356,  1358,  1363,  1372,  1374,  1376,  1378,  1380,  1382,
+    1384,  1386,  1388,  1390,  1402,  1407,  1409,  1411,  1413,  1415,
+    1417,  1419,  1421,  1423,  1425,  1427,  1429,  1431,  1462,  1488,
+    1496,  1505,  1514,  1516,  1518,  1520,  1522,  1526,  1531,  1533,
+    1538,  1539,  1542,  1543,  1546,  1547,  1550,  1558,  1562,  1564,
+    1568,  1572,  1573,  1576,  1591,  1595,  1596,  1599,  1611,  1612,
+    1616,  1618,  1622,  1626,  1628,  1630,  1636,  1637,  1642,  1643,
+    1647,  1649,  1658,  1660,  1664,  1668,  1670,  1672,  1676,  1677,
+    1680,  1700,  1707,  1709,  1719,  1736,  1738,  1740,  1744,  1753,
+    1758,  1763,  1764,  1768,  1770,  1774,  1779,  1780,  1784,  1786,
+    1788,  1790,  1800,  1804,  1805,  1806,  1807,  1810,  1815,  1826,
+    1833,  1838,  1839,  1843,  1845,  1849,  1850,  1853,  1857,  1861,
+    1865,  1874,  1884,  1885,  1890,  1892,  1897,  1902,  1903,  1907,
+    1909,  1913,  1919,  1920,  1924,  1926,  1934,  1935,  1939,  1943,
+    1946,  1947,  1950,  1954,  1958,  1960,  1962,  1964,  1972,  1973,
+    1977,  1978,  1979,  1982,  1983,  1984,  1985,  1986,  1987,  1990,
+    1991,  1992,  1993,  2001,  2004,  2005,  2017,  2018,  2019,  2020,
+    2024,  2025,  2028,  2029,  2030,  2031,  2032,  2033,  2034,  2035,
+    2038,  2039,  2040,  2043,  2044,  2045,  2046,  2047,  2048,  2049,
+    2050,  2051,  2052,  2053,  2054,  2055,  2056,  2057,  2058,  2059,
+    2060,  2061,  2062,  2063,  2064,  2065,  2071,  2072,  2073,  2074,
+    2075,  2076,  2077,  2078,  2079,  2080,  2081,  2082,  2094,  2102,
+    2106,  2107,  2110,  2111,  2112,  2113,  2114,  2115,  2118,  2120,
+    2121,  2124,  2125,  2128,  2132,  2137
 };
 #endif
 
@@ -1138,18 +1138,18 @@
   "getresults_stat", "parrot_stat", "parrot_instruction", "parrot_op",
   "opt_op_args", "op_args", "parrot_op_args", "keylist_assignment",
   "op_arg", "op_arg_expr", "keyaccess", "keylist", "keys",
-  "parrot_op_assign", "assignment_stat", "assignment", "binary_expr",
-  "conditional_stat", "conditional_instr", "condition", "int_or_num",
-  "if_unless", "then", "goto_stat", "local_decl", "local_id_list",
-  "local_id", "has_unique_reg", "lex_decl", "invocation_stat",
-  "invocation", "long_invocation_stat", "opt_long_arguments",
-  "long_arguments", "long_argument", "long_invocation", "opt_ret_cont",
-  "opt_long_results", "long_results", "long_result",
-  "short_invocation_stat", "short_invocation", "simple_invocation",
-  "methodcall", "subcall", "sub", "method", "pmc_object",
-  "opt_target_list", "opt_list", "target_list", "result_target",
-  "target_flags", "target_flag", "return_stat", "return_instr",
-  "short_return_stat", "short_yield_stat", "arguments",
+  "parrot_op_assign", "assignment_stat", "rhs_ident", "assignment",
+  "binary_expr", "conditional_stat", "conditional_instr", "condition",
+  "int_or_num", "if_unless", "then", "goto_stat", "local_decl",
+  "local_id_list", "local_id", "has_unique_reg", "lex_decl",
+  "invocation_stat", "invocation", "long_invocation_stat",
+  "opt_long_arguments", "long_arguments", "long_argument",
+  "long_invocation", "opt_ret_cont", "opt_long_results", "long_results",
+  "long_result", "short_invocation_stat", "short_invocation",
+  "simple_invocation", "methodcall", "subcall", "sub", "method",
+  "pmc_object", "opt_target_list", "opt_list", "target_list",
+  "result_target", "target_flags", "target_flag", "return_stat",
+  "return_instr", "short_return_stat", "short_yield_stat", "arguments",
   "opt_arguments_list", "arguments_list", "argument", "named_arg",
   "short_arg", "arg", "long_return_stat", "long_yield_stat",
   "opt_yield_expressions", "yield_expressions", "yield_expression",
@@ -1204,33 +1204,33 @@
      192,   192,   192,   193,   194,   195,   196,   197,   198,   199,
      199,   200,   201,   201,   202,   202,   203,   203,   204,   205,
      205,   206,   206,   206,   206,   207,   208,   209,   209,   210,
-     210,   210,   211,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   213,   213,   213,   213,   213,   213,
-     213,   213,   214,   215,   215,   215,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   215,   215,   216,   216,   216,
-     216,   216,   216,   216,   216,   216,   216,   216,   216,   217,
-     217,   218,   218,   219,   219,   220,   221,   222,   222,   223,
-     224,   224,   225,   226,   227,   227,   228,   229,   229,   230,
-     230,   231,   232,   232,   232,   233,   233,   234,   234,   235,
-     235,   236,   236,   237,   238,   238,   238,   239,   239,   240,
-     241,   242,   242,   243,   243,   243,   243,   244,   244,   245,
-     246,   246,   247,   247,   248,   249,   249,   250,   250,   250,
-     250,   251,   252,   252,   252,   252,   253,   253,   254,   255,
-     256,   256,   257,   257,   258,   258,   259,   260,   261,   262,
-     263,   264,   264,   265,   265,   266,   267,   267,   268,   268,
-     269,   270,   270,   271,   271,   272,   272,   273,   274,   275,
-     275,   276,   277,   278,   278,   278,   278,   279,   279,   280,
-     280,   280,   281,   281,   281,   281,   281,   281,   282,   282,
-     282,   282,   283,   284,   284,   285,   285,   285,   285,   286,
-     286,   287,   287,   287,   287,   287,   287,   287,   287,   288,
-     288,   288,   289,   289,   289,   289,   289,   289,   289,   289,
-     289,   289,   289,   289,   289,   289,   289,   289,   289,   289,
-     289,   289,   289,   289,   289,   290,   290,   290,   290,   290,
-     290,   290,   290,   290,   290,   290,   290,   291,   292,   293,
-     293,   294,   294,   294,   294,   294,   294,   295,   295,   295,
-     296,   296,   297,   298,   299
+     210,   210,   211,   212,   212,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   214,   214,   214,   214,   214,
+     214,   214,   214,   215,   216,   216,   216,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   216,   217,   217,
+     217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+     218,   218,   219,   219,   220,   220,   221,   222,   223,   223,
+     224,   225,   225,   226,   227,   228,   228,   229,   230,   230,
+     231,   231,   232,   233,   233,   233,   234,   234,   235,   235,
+     236,   236,   237,   237,   238,   239,   239,   239,   240,   240,
+     241,   242,   243,   243,   244,   244,   244,   244,   245,   245,
+     246,   247,   247,   248,   248,   249,   250,   250,   251,   251,
+     251,   251,   252,   253,   253,   253,   253,   254,   254,   255,
+     256,   257,   257,   258,   258,   259,   259,   260,   261,   262,
+     263,   264,   265,   265,   266,   266,   267,   268,   268,   269,
+     269,   270,   271,   271,   272,   272,   273,   273,   274,   275,
+     276,   276,   277,   278,   279,   279,   279,   279,   280,   280,
+     281,   281,   281,   282,   282,   282,   282,   282,   282,   283,
+     283,   283,   283,   284,   285,   285,   286,   286,   286,   286,
+     287,   287,   288,   288,   288,   288,   288,   288,   288,   288,
+     289,   289,   289,   290,   290,   290,   290,   290,   290,   290,
+     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
+     290,   290,   290,   290,   290,   290,   291,   291,   291,   291,
+     291,   291,   291,   291,   291,   291,   291,   291,   292,   293,
+     294,   294,   295,   295,   295,   295,   295,   295,   296,   296,
+     296,   297,   297,   298,   299,   300
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1251,33 +1251,33 @@
        1,     1,     2,     1,     2,     2,     3,     3,     2,     2,
        1,     1,     1,     1,     0,     1,     1,     3,     3,     1,
        1,     1,     1,     1,     1,     2,     3,     1,     3,     6,
-       4,     6,     2,     3,     3,     3,     3,     3,     3,     3,
-       4,     4,     4,     3,     3,     3,     3,     3,     3,     3,
-       4,     5,     4,     4,     3,     3,     3,     3,     3,     3,
-       3,     3,     2,     5,     5,     5,     5,     5,     5,     5,
-       5,     5,     4,     5,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
-       1,     1,     1,     1,     1,     3,     4,     1,     3,     2,
-       0,     1,     5,     1,     1,     1,     8,     0,     1,     1,
-       2,     3,     3,     2,     5,     0,     2,     0,     1,     1,
-       2,     3,     1,     2,     3,     3,     1,     1,     1,     4,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     1,     1,     3,     2,     0,     2,     1,     1,     1,
-       2,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       0,     1,     1,     3,     1,     1,     3,     2,     1,     5,
-       5,     0,     1,     1,     2,     3,     0,     1,     1,     2,
-       3,     0,     2,     1,     2,     0,     1,     3,     2,     1,
-       1,     2,     2,     4,     4,     4,     4,     1,     1,     1,
+       4,     6,     2,     1,     1,     3,     3,     3,     3,     3,
+       3,     4,     4,     4,     3,     3,     3,     3,     3,     3,
+       3,     4,     5,     4,     4,     3,     3,     3,     3,     3,
+       3,     3,     3,     2,     5,     5,     5,     5,     5,     5,
+       5,     5,     5,     4,     5,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       1,     1,     1,     1,     1,     1,     3,     4,     1,     3,
+       2,     0,     1,     5,     1,     1,     1,     8,     0,     1,
+       1,     2,     3,     3,     2,     5,     0,     2,     0,     1,
+       1,     2,     3,     1,     2,     3,     3,     1,     1,     1,
+       4,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     0,     1,     1,     3,     2,     0,     2,     1,     1,
+       1,     2,     1,     1,     1,     1,     1,     3,     3,     3,
+       3,     0,     1,     1,     3,     1,     1,     3,     2,     1,
+       5,     5,     0,     1,     1,     2,     3,     0,     1,     1,
+       2,     3,     0,     2,     1,     2,     0,     1,     3,     2,
+       1,     1,     2,     2,     4,     4,     4,     4,     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,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       2,     1,     2,     1,     2,     2,     1,     2,     2,     1,
-       1,     1,     3,     1,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
+       1,     2,     1,     2,     1,     2,     2,     1,     2,     2,
+       1,     1,     1,     3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1285,71 +1285,71 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   398,     3,     0,     2,     0,
+       0,     5,     5,     0,     6,   399,     3,     0,     2,     0,
        1,     0,     0,     0,     0,     0,   131,     0,     0,   106,
-     413,     0,    18,    19,     0,     0,     0,   406,   134,   403,
-     397,   399,   401,     0,    54,   409,     0,     0,     0,     0,
+     414,     0,    18,    19,     0,     0,     0,   407,   134,   404,
+     398,   400,   402,     0,    54,   410,     0,     0,     0,     0,
        0,     0,     5,     7,    17,    14,    15,    16,    12,    13,
-      11,     9,    54,    10,     0,    38,    39,    44,   123,   410,
-     407,   411,   349,   354,   355,   357,   356,   351,   352,   358,
-     353,    22,   350,     0,   108,     0,   405,    23,   404,   402,
-     329,   330,   331,   345,   346,   348,   347,     0,     0,   135,
-     136,   139,   144,   140,     0,   141,   143,   142,   400,   408,
+      11,     9,    54,    10,     0,    38,    39,    44,   123,   411,
+     408,   412,   350,   355,   356,   358,   357,   352,   353,   359,
+     354,    22,   351,     0,   108,     0,   406,    23,   405,   403,
+     330,   331,   332,   346,   347,   349,   348,     0,     0,   135,
+     136,   139,   144,   140,     0,   141,   143,   142,   401,   409,
        0,    41,     0,    37,    53,    51,    52,     0,     0,     0,
-       0,   321,     0,     6,     4,     0,     0,    48,     0,    45,
+       0,   322,     0,     6,     4,     0,     0,    48,     0,    45,
       46,    20,   106,   112,   113,   117,     0,   109,   110,   115,
-     105,     0,    24,    25,    27,   345,     0,   147,   328,   327,
-     342,   343,   344,   414,     0,   145,   412,    57,    58,    59,
-      56,   315,     0,   315,    60,    63,    61,    62,     0,     0,
+     105,     0,    24,    25,    27,   346,     0,   147,   329,   328,
+     343,   344,   345,   415,     0,   145,   413,    57,    58,    59,
+      56,   316,     0,   316,    60,    63,    61,    62,     0,     0,
        0,    55,     0,     0,     0,     0,     0,     0,     8,    74,
-     268,     0,   267,    43,     0,   114,     0,   107,     0,     0,
-       0,   146,     0,   137,     0,    65,   316,     0,    66,    67,
+     269,     0,   268,    43,     0,   114,     0,   107,     0,     0,
+       0,   146,     0,   137,     0,    65,   317,     0,    66,    67,
       68,    69,    42,     0,     0,     0,     0,    40,    85,    73,
-     232,    47,   119,   106,   121,   120,   116,   118,   111,    28,
-      26,   148,     0,     0,   323,   324,   325,   326,     0,     0,
+     233,    47,   119,   106,   121,   120,   116,   118,   111,    28,
+      26,   148,     0,     0,   324,   325,   326,   327,     0,     0,
       75,   122,     0,     0,     0,    29,    30,     0,    33,    34,
-     317,    64,     0,    50,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   131,   351,   352,   358,   353,   262,
-     345,   270,     0,    49,    86,    88,   102,   104,   100,   101,
+     318,    64,     0,    50,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   131,   352,   353,   359,   354,   263,
+     346,   271,     0,    49,    86,    88,   102,   104,   100,   101,
      103,    99,    98,    89,     0,   134,   130,    97,     0,    90,
-       0,     0,    91,    92,    93,    96,   233,   234,   235,     0,
-     256,   258,   257,     0,   261,     0,    95,   281,   282,   284,
-     283,   285,    94,     0,   319,   320,     0,   344,   350,   338,
-     339,   340,   341,    78,     0,     0,    35,    21,    31,    32,
-     125,     0,   322,   290,     0,     0,   301,   306,   237,     0,
-       0,    87,     0,     0,     0,     0,   271,   272,   275,   124,
-     128,   129,   132,   133,   140,   152,   182,   349,   354,   355,
-     357,   356,   351,   352,   358,   353,   329,   330,   331,     0,
-       0,     0,   343,   253,   260,     0,     0,   318,   396,   394,
-     395,     0,     0,   385,   386,   387,   388,   390,   391,   389,
-     392,   393,     0,     0,     0,     0,    77,    36,     0,   227,
-     230,   329,     0,   291,   292,   295,   294,   311,   298,   286,
-     288,     0,     0,   302,   303,     0,     0,   307,   308,     0,
-       0,   238,   239,   127,   287,   126,   225,     0,   269,     0,
-     274,     0,   223,   224,     0,     0,     0,     0,     0,     0,
+       0,     0,    91,    92,    93,    96,   234,   235,   236,     0,
+     257,   259,   258,     0,   262,     0,    95,   282,   283,   285,
+     284,   286,    94,     0,   320,   321,     0,   345,   351,   339,
+     340,   341,   342,    78,     0,     0,    35,    21,    31,    32,
+     125,     0,   323,   291,     0,     0,   302,   307,   238,     0,
+       0,    87,     0,     0,     0,     0,   272,   273,   276,   124,
+     128,   129,   132,   133,   140,   152,   183,   350,   355,   356,
+     358,   357,   352,   353,   359,   354,   330,   331,   332,     0,
+       0,     0,   344,   254,   261,     0,     0,   319,   397,   395,
+     396,     0,     0,   386,   387,   388,   389,   391,   392,   390,
+     393,   394,     0,     0,     0,     0,    77,    36,     0,   228,
+     231,   330,     0,   292,   293,   296,   295,   312,   299,   287,
+     289,     0,     0,   303,   304,     0,     0,   308,   309,     0,
+       0,   239,   240,   127,   288,   126,   226,     0,   270,     0,
+     275,     0,   224,   225,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   332,   333,   334,   335,   337,   336,
-       0,     0,     0,     0,     0,     0,     0,   266,   264,   265,
-       0,   263,   254,   164,   165,   168,   166,   167,   169,   349,
-     155,   153,   154,   345,   359,   360,   361,     0,   159,   255,
-       0,   343,   350,     0,   163,     0,    76,    84,   315,   279,
-     277,   278,     0,    79,    81,    82,    80,   226,     0,   231,
-     229,     0,   289,     0,   297,     0,     0,   304,     0,     0,
-     309,     0,     0,     0,     0,     0,   240,   173,   273,   276,
-     138,   194,   196,   197,   198,   199,   200,   201,     0,     0,
-       0,     0,     0,     0,     0,     0,   353,   204,     0,   205,
-     202,   203,   215,   219,   220,   216,   210,   217,   211,   212,
-     208,   218,   213,   214,   209,   206,   192,   207,   195,   259,
-     384,   379,   381,   380,   383,   382,   372,   373,   374,   377,
-     375,   376,   378,   371,   363,   369,   362,   364,   365,   366,
-     367,   368,   370,     0,     0,     0,   162,   150,   160,     0,
-     161,   170,   172,   280,     0,   228,   296,   293,   315,   313,
-     312,   305,   300,   310,   299,   241,     0,   245,   243,   247,
-     183,   184,   185,   186,   187,   188,   189,   191,   190,   193,
-     177,   176,   178,   180,   174,   181,   179,   175,     0,     0,
-     171,    71,     0,    72,    70,   314,     0,     0,   242,     0,
-     252,     0,   248,   249,   149,   151,    83,     0,   246,     0,
-       0,   250,   244,   251,   236
+       0,     0,     0,     0,   333,   334,   335,   336,   338,   337,
+       0,     0,     0,     0,     0,     0,     0,   267,   265,   266,
+       0,   264,   255,   165,   166,   169,   167,   168,   170,   350,
+     157,   155,   156,   346,   360,   361,   362,     0,   159,   160,
+     256,     0,   344,   351,     0,   164,     0,    76,    84,   316,
+     280,   278,   279,     0,    79,    81,    82,    80,   227,     0,
+     232,   230,     0,   290,     0,   298,     0,     0,   305,     0,
+       0,   310,     0,     0,     0,     0,     0,   241,   174,   274,
+     277,   138,   195,   197,   198,   199,   200,   201,   202,     0,
+       0,     0,     0,     0,     0,     0,     0,   354,   205,     0,
+     206,   203,   204,   216,   220,   221,   217,   211,   218,   212,
+     213,   209,   219,   214,   215,   210,   207,   193,   208,   196,
+     260,   385,   380,   382,   381,   384,   383,   373,   374,   375,
+     378,   376,   377,   379,   372,   364,   370,   363,   365,   366,
+     367,   368,   369,   371,     0,     0,     0,   163,   150,   161,
+       0,   162,   171,   173,   281,     0,   229,   297,   294,   316,
+     314,   313,   306,   301,   311,   300,   242,     0,   246,   244,
+     248,   184,   185,   186,   187,   188,   189,   190,   192,   191,
+     194,   178,   177,   179,   181,   175,   182,   180,   176,     0,
+       0,   172,    71,     0,    72,    70,   315,     0,     0,   243,
+       0,   253,     0,   249,   250,   149,   151,    83,     0,   247,
+       0,     0,   251,   245,   252,   237
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1358,410 +1358,402 @@
       -1,     3,     8,     5,    42,    43,    21,    22,    23,    24,
      131,   132,   133,   224,   225,   226,   227,   228,   229,    45,
       25,    47,    48,    49,    26,   118,   119,   120,    51,   253,
-      52,   105,   100,   161,   622,   198,   199,   220,   303,   375,
-     483,   484,   485,   218,   254,   255,   256,    27,    75,   126,
+      52,   105,   100,   161,   623,   198,   199,   220,   303,   375,
+     484,   485,   486,   218,   254,   255,   256,    27,    75,   126,
      127,   128,   129,   176,   207,    59,   259,   260,   261,   262,
      263,   264,    28,   331,    88,    89,   333,    90,    91,    92,
-      93,   136,   266,   267,   268,   468,   269,   270,   349,   535,
-     271,   414,   272,   273,   378,   379,   490,    29,   275,   276,
-     277,   400,   401,   402,   505,   628,   631,   632,   633,   278,
-     279,   280,   281,   282,   283,   450,    94,   285,   325,   326,
-     327,   410,   486,   286,   287,   288,   289,   314,   382,   383,
-     384,   385,   386,   387,   290,   291,   392,   393,   394,   396,
-     397,   398,   494,   590,   185,   186,   292,   293,    53,   295,
-     111,   388,   138,   440,   304,   139,   140,   141,   142,    72,
-     473,   573,   373,     6,     7,    30,    31,    32,    60,    33,
-      34,    35
+      93,   136,   266,   267,   468,   268,   469,   269,   270,   349,
+     536,   271,   414,   272,   273,   378,   379,   491,    29,   275,
+     276,   277,   400,   401,   402,   506,   629,   632,   633,   634,
+     278,   279,   280,   281,   282,   283,   450,    94,   285,   325,
+     326,   327,   410,   487,   286,   287,   288,   289,   314,   382,
+     383,   384,   385,   386,   387,   290,   291,   392,   393,   394,
+     396,   397,   398,   495,   591,   185,   186,   292,   293,    53,
+     295,   111,   388,   138,   440,   304,   139,   140,   141,   142,
+      72,   474,   574,   373,     6,     7,    30,    31,    32,    60,
+      33,    34,    35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -585
+#define YYPACT_NINF -572
 static const yytype_int16 yypact[] =
 {
-     -38,    -5,    -5,    33,  -585,  -585,  -585,    15,  -585,    69,
-    -585,    -6,    -4,     7,   -65,   136,  -585,   212,    26,   -47,
-    -585,    46,  -585,  -585,   -34,    60,    85,  -585,   531,  -585,
-      15,  -585,  -585,   136,  -585,  -585,    80,   102,   111,   605,
-     104,   119,   133,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,    54,  -585,  -585,   134,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,    68,   -42,   177,  -585,   212,  -585,  -585,
-    -585,  -585,  -585,    91,  -585,  -585,  -585,   796,   179,    95,
-    -585,  -585,  -585,  -585,    96,  -585,  -585,    97,  -585,  -585,
-     706,  -585,    99,  -585,  -585,  -585,  -585,   212,   212,   212,
-     212,  -585,   101,    69,  -585,   677,   995,  -585,    94,   100,
-    -585,  -585,   -47,  -585,  -585,  -585,   110,   103,  -585,  -585,
-    -585,   114,   112,  -585,  -585,  -585,   -36,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,   531,  -585,  -585,  -585,  -585,  -585,
-    -585,   121,   125,   121,  -585,  -585,  -585,  -585,   121,   121,
-     121,  -585,   184,   116,   124,   126,   138,   214,  -585,  -585,
-    -585,   227,  -585,  -585,   134,  -585,   -14,  -585,   -42,   228,
-     212,  -585,   796,  -585,   218,  -585,  -585,   605,  -585,  -585,
-    -585,  -585,  -585,   219,   217,   222,   131,  -585,  -585,   272,
-    -585,  -585,  -585,   -47,  -585,  -585,  -585,  -585,  -585,    28,
-    -585,  -585,   162,   164,  -585,  -585,  -585,  -585,   260,   113,
-    -585,  -585,   113,   181,   186,    28,  -585,   250,  -585,  -585,
-    -585,  -585,   257,  -585,   113,   104,   189,   189,   273,   289,
-     292,   195,   676,   509,   705,   819,   835,   439,   212,  -585,
-     -33,   439,   295,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,   305,   531,  -585,  -585,   306,  -585,
-     307,   851,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   308,
-    -585,  -585,  -585,   189,   221,   223,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,   310,  -585,  -585,   734,    14,    96,  -585,
-    -585,  -585,  -585,  -585,   212,   237,  -585,  -585,  -585,  -585,
-    -585,   212,  -585,   867,   314,   315,   331,   332,   322,   319,
-     321,  -585,   323,   324,   236,   241,   242,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,   240,  -585,  -585,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   631,   -11,   278,   278,   278,   320,
-     -13,   278,   -13,  -585,  -585,   277,   676,  -585,  -585,  -585,
-    -585,   646,   931,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,   145,   796,   243,   109,  -585,  -585,   -15,  -585,
-     270,   318,   253,   254,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,   796,   352,   331,  -585,   796,   351,   332,  -585,   796,
-      30,   322,  -585,  -585,  -585,  -585,  -585,   796,  -585,   439,
-      61,   796,  -585,  -585,   212,   212,   212,   212,   212,   212,
-     212,   334,   335,   336,   338,   339,   340,   341,   342,  1008,
-     -13,   212,   212,   212,  -585,  -585,  -585,  -585,  -585,  -585,
-     883,   899,   915,   212,   212,   796,   212,  -585,  -585,  -585,
-     189,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   414,
-     574,   600,   600,   -33,  -585,  -585,  -585,   531,  -585,  -585,
-     600,   357,   -21,   796,  -585,   796,  -585,  -585,   121,  -585,
-    -585,  -585,   276,  -585,  -585,  -585,  -585,  -585,   212,  -585,
-    -585,   796,  -585,   867,   105,   360,   361,  -585,   369,   370,
-    -585,   371,   995,   995,   995,   372,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,  -585,   212,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,   979,   947,   963,  -585,   288,   290,   796,
-    -585,  -585,  -585,  -585,   393,  -585,  -585,  -585,   121,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,   374,   291,  -585,    11,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,   531,   531,
-    -585,  -585,   294,  -585,  -585,  -585,   402,   995,  -585,   439,
-    -585,   391,    11,  -585,    95,    95,  -585,   277,  -585,   384,
-     385,  -585,  -585,  -585,  -585
+     -31,    12,    12,    50,  -572,  -572,  -572,    15,  -572,    69,
+    -572,    17,    29,    42,   -20,     5,  -572,   172,    68,    -6,
+    -572,    85,  -572,  -572,    33,   119,   130,  -572,   532,  -572,
+      15,  -572,  -572,     5,  -572,  -572,   122,   125,   127,   606,
+     106,   128,   145,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,    80,  -572,  -572,   156,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,   109,   -44,   189,  -572,   172,  -572,  -572,
+    -572,  -572,  -572,   107,  -572,  -572,  -572,   750,   195,    87,
+    -572,  -572,  -572,  -572,   110,  -572,  -572,   111,  -572,  -572,
+     658,  -572,   116,  -572,  -572,  -572,  -572,   172,   172,   172,
+     172,  -572,   121,    69,  -572,   587,   965,  -572,   124,   115,
+    -572,  -572,    -6,  -572,  -572,  -572,   126,   139,  -572,  -572,
+    -572,   141,   142,  -572,  -572,  -572,    -9,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,   532,  -572,  -572,  -572,  -572,  -572,
+    -572,   146,   148,   146,  -572,  -572,  -572,  -572,   146,   146,
+     146,  -572,   219,   149,   161,   162,   164,   221,  -572,  -572,
+    -572,   233,  -572,  -572,   156,  -572,   -15,  -572,   -44,   254,
+     172,  -572,   750,  -572,   246,  -572,  -572,   606,  -572,  -572,
+    -572,  -572,  -572,   249,   245,   263,    23,  -572,  -572,   302,
+    -572,  -572,  -572,    -6,  -572,  -572,  -572,  -572,  -572,     4,
+    -572,  -572,   207,   209,  -572,  -572,  -572,  -572,   262,    94,
+    -572,  -572,    94,   222,   227,     4,  -572,   299,  -572,  -572,
+    -572,  -572,   300,  -572,    94,   106,   218,   218,   311,   313,
+     314,   232,   278,   510,   645,   766,   790,   440,   172,  -572,
+     -33,   440,   316,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,   317,   532,  -572,  -572,   318,  -572,
+     319,   806,  -572,  -572,  -572,  -572,  -572,  -572,  -572,   321,
+    -572,  -572,  -572,   218,   210,   236,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,   323,  -572,  -572,   705,   -74,   110,  -572,
+    -572,  -572,  -572,  -572,   172,   250,  -572,  -572,  -572,  -572,
+    -572,   172,  -572,   822,   325,   326,   342,   343,   335,   331,
+     332,  -572,   336,   339,   255,   256,   258,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,   260,  -572,  -572,   -22,   -22,   -22,
+     -22,   -22,   -22,   -22,   212,   -13,   286,   286,   286,   334,
+     -22,   286,   -22,  -572,  -572,   950,   278,  -572,  -572,  -572,
+    -572,   886,   902,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,   147,   750,   261,    81,  -572,  -572,   -14,  -572,
+     288,   333,   266,   267,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,   750,   365,   342,  -572,   750,   368,   343,  -572,   750,
+      32,   335,  -572,  -572,  -572,  -572,  -572,   750,  -572,   440,
+      61,   750,  -572,  -572,   172,   172,   172,   172,   172,   172,
+     172,   350,   351,   359,   360,   361,   362,   363,   364,   717,
+     -22,   172,   172,   172,  -572,  -572,  -572,  -572,  -572,  -572,
+     838,   854,   870,   172,   172,   750,   172,  -572,  -572,  -572,
+     218,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,   417,
+     575,   601,   601,   -33,  -572,  -572,  -572,   532,  -572,  -572,
+    -572,   601,   375,   -21,   750,  -572,   750,  -572,  -572,   146,
+    -572,  -572,  -572,   293,  -572,  -572,  -572,  -572,  -572,   172,
+    -572,  -572,   750,  -572,   822,    27,   378,   382,  -572,   383,
+     384,  -572,   385,   965,   965,   965,   386,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,   172,
+     172,   172,   172,   172,   172,   172,   172,   172,  -572,   172,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,   646,   918,   934,  -572,   303,   305,
+     750,  -572,  -572,  -572,  -572,   393,  -572,  -572,  -572,   146,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,   387,   308,  -572,
+      18,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,   532,
+     532,  -572,  -572,   322,  -572,  -572,  -572,   429,   965,  -572,
+     440,  -572,   418,    18,  -572,    87,    87,  -572,   950,  -572,
+     411,   412,  -572,  -572,  -572,  -572
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -585,  -585,  -585,    16,  -585,   309,     8,  -585,  -585,  -585,
-    -585,  -585,   244,  -585,  -585,   196,  -585,  -585,  -585,  -585,
-      -2,  -585,  -585,  -585,    10,  -585,  -585,   251,  -585,  -585,
-    -585,   256,   376,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -585,  -585,  -585,  -585,   201,  -585,  -189,   -95,  -585,
-    -585,   267,  -585,  -585,  -585,  -187,  -585,  -585,  -585,  -585,
-    -585,  -585,  -208,  -585,   182,  -505,  -585,   302,   -19,  -585,
-     -90,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,  -585,
-    -585,  -203,  -585,  -584,  -585,   -20,  -585,  -182,  -585,  -585,
-    -585,  -585,  -585,    66,  -585,  -585,  -585,  -585,  -163,  -585,
-    -585,  -226,  -585,  -585,  -585,  -167,  -114,   231,  -585,  -585,
-    -401,  -585,    63,  -585,  -585,  -585,  -585,  -228,  -585,  -585,
-     -18,  -585,  -289,     1,  -585,  -585,  -585,  -585,    81,  -585,
-    -585,    98,  -585,  -585,  -147,    40,  -585,  -585,  -179,  -585,
-     258,   -82,   -27,  -301,  -156,  -206,  -585,   -25,   -17,  -205,
-    -585,  -346,  -585,  -585,  -585,  -585,   466,  -585,   465,  -585,
-    -585,    34
+    -572,  -572,  -572,    13,  -572,   338,     8,  -572,  -572,  -572,
+    -572,  -572,   268,  -572,  -572,   224,  -572,  -572,  -572,  -572,
+       0,  -572,  -572,  -572,    10,  -572,  -572,   279,  -572,  -572,
+    -572,   283,   419,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -572,  -572,  -572,   230,  -572,  -200,   -95,  -572,
+    -572,   296,  -572,  -572,  -572,  -187,  -572,  -572,  -572,  -572,
+    -572,  -572,  -208,  -572,   211,  -477,  -572,   349,    30,  -572,
+     -90,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,  -572,
+    -572,  -572,  -202,  -572,  -571,  -572,     7,  -572,  -185,  -572,
+    -572,  -572,  -572,  -572,    74,  -572,  -572,  -572,  -572,  -139,
+    -572,  -572,  -226,  -572,  -572,  -572,  -138,  -114,   272,  -572,
+    -572,  -403,  -572,    89,  -572,  -572,  -572,  -572,  -229,  -572,
+    -572,    22,  -572,  -242,     9,  -572,  -572,  -572,  -572,   131,
+    -572,  -572,   120,  -572,  -572,  -146,    46,  -572,  -572,  -184,
+    -572,   290,   -82,   -27,  -128,  -186,  -206,  -572,   -25,   -17,
+    -205,  -572,  -384,  -572,  -572,  -572,  -572,   488,  -572,   490,
+    -572,  -572,    24
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -350
+#define YYTABLE_NINF -351
 static const yytype_int16 yytable[] =
 {
-      71,    95,   171,    96,   145,   137,   188,    46,   508,   315,
-     265,    97,   296,   298,  -158,   630,   320,    44,     9,    50,
-     487,   202,   106,   234,    11,    12,    13,   175,    14,   257,
-       4,   258,   412,    10,   432,   265,   274,   296,   298,   294,
-      54,   322,   629,    55,   502,   328,   441,   442,   630,    61,
-     445,    15,    16,    56,   257,   354,   258,    57,   114,   503,
-     134,   274,   504,    73,   294,   351,   305,    61,   122,   123,
-     124,    74,    36,    37,    38,    39,     1,     2,   311,    12,
-      13,    76,    14,   125,    77,  -268,    40,   181,   182,    87,
-     163,   164,   165,   166,  -268,    78,   203,   204,   205,   172,
-     211,    87,   495,    41,   284,   488,   498,   413,   221,   433,
-     501,    46,   206,   634,   635,   574,   575,    95,    17,    96,
-      79,    44,    18,    50,   579,    19,   101,    97,   284,   284,
-     452,    20,  -267,   222,   223,   415,   416,   417,   418,   419,
-     420,  -267,   107,   108,   476,   109,   469,   444,   102,   446,
-     110,   299,   300,   301,   302,   455,   458,   103,   478,   479,
-     324,   480,   481,   134,   467,   112,   470,   472,   113,   217,
-     106,    58,    17,    16,   116,   334,    18,    80,    81,    82,
-     117,   121,   459,    63,    64,    65,    66,    67,    68,    69,
-      70,   460,   461,   462,   463,    84,    85,    86,   189,   190,
-     191,   297,   588,   328,   589,   477,   478,   479,   374,   480,
-     481,   482,   130,  -268,   143,   144,   252,   173,    87,  -267,
-     162,   167,   549,   178,   174,   172,   297,   528,   639,   177,
-     192,   323,   180,   179,   536,   540,   544,   193,    95,   184,
-      96,   252,   284,   187,   350,   194,   352,   195,    97,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,   284,   196,
-     197,   232,   200,   209,   212,   215,   214,   233,   216,    11,
-      12,    13,   234,   464,   465,   466,   235,    40,   236,   237,
-     219,   230,   238,   231,   239,   309,   240,   376,   241,   306,
-     307,   474,   310,   242,   380,    58,   243,   244,    63,    64,
-      65,    66,   245,   246,   247,   248,   249,   313,   316,   250,
-      84,    85,    86,   251,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   447,   317,   507,   448,   318,   449,   510,
-     329,   583,   434,   435,   436,   437,   438,   439,   451,   172,
-     330,   335,   336,   353,   356,   357,   377,   471,   355,   389,
-     390,   391,   399,   395,   403,   297,   404,   407,   405,   406,
-     408,   411,   409,   547,   475,   443,   489,   611,   614,   617,
-      19,   491,   492,   576,   493,   496,   499,   578,   251,   518,
-     519,   520,   580,   521,   522,   523,   524,   525,   596,   597,
-     598,   581,  -156,   582,   584,   591,   592,   511,   512,   513,
-     514,   515,   516,   517,   593,   594,   595,   599,   618,   626,
-     619,   627,   527,   636,   529,   530,   531,   637,   640,   643,
-     644,   308,   168,   328,   210,   201,   545,   546,   115,   548,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   621,
-      95,   625,    96,   213,   321,   208,   183,   332,   577,  -157,
-      97,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,
-    -131,  -131,  -131,  -131,  -131,  -131,  -131,   506,   585,   641,
-     642,   380,   319,   509,   497,   587,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   172,   172,   172,   135,    84,
-      85,    86,   586,   312,   623,   500,    98,   620,    99,     0,
-       0,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-     232,   609,     0,   638,     0,    87,     0,     0,    11,    12,
-      13,   234,     0,     0,     0,   235,    40,   236,   237,     0,
-       0,   238,     0,   239,     0,   240,  -131,   241,     0,     0,
-       0,     0,   242,     0,    58,     0,   244,    63,    64,    65,
-      66,   245,   246,   247,   248,   249,     0,     0,   250,    84,
-      85,    86,     0,     0,     0,     0,     0,   624,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    80,    81,    82,
-      83,    84,    85,    86,     0,     0,     0,     0,     0,     0,
-       0,    95,    95,    96,    96,     0,     0,     0,     0,     0,
-       0,    97,    97,     0,     0,     0,     0,     0,     0,     0,
-     172,     0,     0,     0,     0,     0,     0,     0,     0,    19,
-     451,     0,     0,     0,     0,     0,     0,   251,   550,   551,
+      71,    95,   171,    96,   145,   137,   509,   188,   315,    46,
+     265,    97,   296,   298,  -154,     9,   320,    44,   257,    50,
+     202,   488,   106,   412,    11,    12,    13,   175,    14,   631,
+     234,   258,   432,   274,   294,   265,   305,   296,   298,    61,
+      58,   322,    16,   257,  -268,   328,   503,     4,   311,   630,
+      10,    15,    16,  -268,   354,   114,   258,    61,   274,   294,
+     134,   504,   631,    54,   505,   351,   122,   123,   124,    80,
+      81,    82,    36,    37,    38,    39,    55,   575,   576,    12,
+      13,   125,    14,     1,     2,  -269,    40,   580,    56,    87,
+     163,   164,   165,   166,  -269,   203,   204,   205,   413,   172,
+     211,    87,    57,    41,   284,    73,   489,   433,   221,   222,
+     223,   206,    74,    46,   181,   182,   477,    95,    17,    96,
+      76,    44,    18,    50,   589,    19,   590,    97,   284,   284,
+     452,    20,   299,   300,   301,   302,   415,   416,   417,   418,
+     419,   420,   635,   636,   107,   108,   470,   109,   444,   496,
+     446,    77,   110,   499,    78,   455,   458,   502,   479,   480,
+     324,   481,   482,   134,   467,    79,   471,   473,   101,   217,
+     106,   102,    17,   103,   112,   334,    18,   478,   479,   480,
+     113,   481,   482,   483,   459,    63,    64,    65,    66,    67,
+      68,    69,    70,   460,   461,   462,   463,    84,    85,    86,
+     116,   297,   117,   328,   189,   190,   191,   144,   374,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   252,   441,
+     442,   550,   121,   445,   130,   172,   297,   640,   529,  -269,
+     143,   323,    87,  -268,   537,   541,   545,   162,    95,   174,
+      96,   167,   284,   252,   350,   177,   352,   173,    97,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   284,   178,
+     179,   430,   180,   232,   184,   192,   187,   197,   200,   233,
+     193,    11,    12,    13,   234,   464,   465,   466,   235,    40,
+     236,   237,   194,   195,   238,   196,   239,   376,   240,   209,
+     241,   475,   212,   215,   380,   242,   214,    58,   243,   244,
+      63,    64,    65,    66,   245,   246,   247,   248,   249,   216,
+     219,   250,    84,    85,    86,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   249,   508,   230,   170,   231,   511,
+     306,   307,   431,   584,   309,   310,   313,   355,   451,   172,
+     434,   435,   436,   437,   438,   439,   316,   472,   317,   318,
+     251,   329,   330,   335,   336,   297,   353,   356,   357,   377,
+     389,   390,   391,   548,   395,   399,   403,   404,   612,   615,
+     618,   405,    19,   577,   406,   408,   407,   579,   409,   443,
+     251,   411,   476,   581,   490,   493,   492,   494,   497,   597,
+     598,   599,   582,   500,   583,   519,   520,   512,   513,   514,
+     515,   516,   517,   518,   521,   522,   523,   524,   525,   526,
+    -158,   585,   528,   592,   530,   531,   532,   593,   594,   595,
+     596,   600,   627,   619,   328,   620,   546,   547,   628,   549,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,   622,
+      95,   637,    96,   626,   638,   641,   644,   645,   210,   308,
+      97,   168,  -153,   201,  -131,  -131,  -131,  -131,  -131,  -131,
+    -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,  -131,
+     213,   115,   380,   321,   208,   507,   332,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   172,   172,   172,   135,
+      84,    85,    86,   183,   642,   624,   586,   578,   621,   510,
+     643,   587,   601,   602,   603,   604,   605,   606,   607,   608,
+     609,   232,   610,   319,   639,    87,   588,   501,    98,    11,
+      12,    13,   234,    99,   498,   312,   235,    40,   236,   237,
+       0,     0,   238,     0,   239,     0,   240,     0,   241,  -131,
+       0,     0,     0,   242,     0,    58,     0,   244,    63,    64,
+      65,    66,   245,   246,   247,   248,   249,     0,     0,   250,
+      84,    85,    86,     0,     0,     0,     0,     0,   625,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    80,    81,
+      82,    83,    84,    85,    86,     0,     0,     0,     0,     0,
+       0,     0,    95,    95,    96,    96,     0,     0,     0,     0,
+       0,     0,    97,    97,     0,     0,     0,     0,     0,     0,
+       0,   172,     0,     0,     0,     0,     0,     0,     0,     0,
+      19,   451,   169,     0,     0,     0,     0,     0,   251,   551,
      552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
-     562,   563,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,   104,     0,    87,   550,   551,   552,   553,   554,   555,
-     556,   557,   558,   559,   560,   561,   562,   563,   421,   422,
-     423,   424,   425,   426,   427,   428,   429,     0,     0,     0,
-     430,     0,     0,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,  -262,   453,   454,   135,    84,    85,    86,     0,
-       0,     0,   564,     0,   565,   566,   567,   568,   569,   570,
-     571,   572,   169,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,   249,     0,     0,   170,     0,     0,   564,     0,
-     565,   566,   567,   568,   569,   570,   571,   572,     0,     0,
-       0,     0,   146,     0,     0,     0,     0,     0,     0,     0,
-       0,   431,     0,     0,     0,     0,     0,     0,     0,   147,
+     562,   563,   564,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,   104,     0,    87,   551,   552,   553,   554,   555,
+     556,   557,   558,   559,   560,   561,   562,   563,   564,   147,
      148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,  -349,  -349,  -349,  -349,  -349,  -349,  -349,
-    -349,  -349,  -349,  -349,  -349,  -349,  -349,     0,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,     0,     0,     0,     0,
-       0,     0,     0,  -349,     0,     0,  -349,     0,     0,     0,
-       0,     0,  -349,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    80,    81,    82,   135,    84,    85,    86,     0,
-       0,     0,     0,     0,     0,   372,  -221,  -221,  -221,  -221,
-    -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,  -221,
-    -221,  -221,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,
-    -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,   337,   338,
-     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
-     135,    84,    85,    86,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   381,    81,    82,   135,    84,    85,    86,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   532,
-     533,   534,   135,    84,    85,    86,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   537,   538,   539,   135,    84,
-      85,    86,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,   541,   542,   543,   135,    84,    85,    86,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,     0,   456,   457,
-     135,    84,    85,    86,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,     0,   612,   613,   135,    84,    85,    86,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,     0,
-     615,   616,   135,    84,    85,    86,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,   610,     0,     0,   135,    84,
-      85,    86,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,     0,     0,     0,   170,    62,    63,    64,    65,    66,
-      67,    68,    69,   526
+     158,   159,   160,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,   611,  -263,   146,   135,    84,    85,    86,     0,
+       0,     0,     0,   565,     0,   566,   567,   568,   569,   570,
+     571,   572,   573,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,     0,     0,   565,
+       0,   566,   567,   568,   569,   570,   571,   572,   573,     0,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,    62,    63,    64,    65,    66,    67,
+      68,    69,   527,  -350,     0,     0,  -350,     0,     0,     0,
+       0,     0,  -350,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    80,    81,    82,   135,
+      84,    85,    86,  -222,  -222,  -222,  -222,  -222,  -222,  -222,
+    -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,  -222,     0,
+       0,     0,     0,     0,     0,     0,   372,  -223,  -223,  -223,
+    -223,  -223,  -223,  -223,  -223,  -223,  -223,  -223,  -223,  -223,
+    -223,  -223,  -223,   337,   338,   339,   340,   341,   342,   343,
+     344,   345,   346,   347,   348,   135,    84,    85,    86,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,   381,    81,
+      82,   135,    84,    85,    86,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,   533,   534,   535,   135,    84,    85,
+      86,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+     538,   539,   540,   135,    84,    85,    86,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   542,   543,   544,   135,
+      84,    85,    86,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,     0,   453,   454,   135,    84,    85,    86,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,     0,   456,
+     457,   135,    84,    85,    86,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,     0,   613,   614,   135,    84,    85,
+      86,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+       0,   616,   617,   135,    84,    85,    86,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,   447,     0,     0,   448,
+       0,   449,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,     0,     0,     0,   170
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,   116,    28,    94,    87,   153,     9,   409,   237,
-     218,    28,   218,   218,    35,   599,   242,     9,     2,     9,
-      35,    35,    39,    12,     9,    10,    11,   122,    13,   218,
-      35,   218,    45,     0,    45,   243,   218,   243,   243,   218,
-      46,   247,    31,    47,    14,   251,   347,   348,   632,    15,
-     351,    36,    37,    46,   243,   283,   243,   122,    42,    29,
-      77,   243,    32,    37,   243,   271,   222,    33,   110,   111,
-     112,   118,     3,     4,     5,     6,   114,   115,   234,    10,
-      11,    35,    13,   125,   118,   118,    17,   123,   124,   122,
-     107,   108,   109,   110,   127,    35,   110,   111,   112,   116,
-     182,   122,   391,    34,   218,   120,   395,   120,   203,   120,
-     399,   113,   126,   618,   619,   461,   462,   144,   103,   144,
-      35,   113,   107,   113,   470,   110,    46,   144,   242,   243,
-     356,   116,   118,   105,   106,   338,   339,   340,   341,   342,
-     343,   127,    38,    39,    35,    41,   372,   350,    46,   352,
-      46,    38,    39,    40,    41,   361,   362,    46,    97,    98,
-     250,   100,   101,   180,   372,    46,   372,   372,    35,   196,
-     187,    35,   103,    37,   120,   265,   107,    46,    47,    48,
-      46,   113,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,   158,   159,
-     160,   218,    97,   409,    99,    96,    97,    98,   298,   100,
-     101,   102,    35,   122,    35,   120,   218,   123,   122,   122,
-     121,   120,   450,   120,   124,   242,   243,   430,   629,   119,
-      46,   248,   120,   119,   440,   441,   442,   121,   265,   118,
-     265,   243,   356,   118,   271,   121,   271,   121,   265,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,   372,   121,
-      46,     1,    35,    35,    46,    48,    47,     7,    46,     9,
-      10,    11,    12,   128,   129,   130,    16,    17,    18,    19,
-       8,   119,    22,   119,    24,    35,    26,   304,    28,   108,
-     104,   373,    35,    33,   311,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,   118,    35,    49,
-      50,    51,    52,   118,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    35,   407,    49,    35,    51,   411,
-      35,   478,    54,    55,    56,    57,    58,    59,   355,   356,
-      35,    35,    35,    35,   121,    35,   109,   372,   127,    35,
-      35,    20,    30,    21,    35,   372,    35,   121,    35,    35,
-     119,   121,   120,   445,   121,    45,    96,   573,   574,   575,
-     110,    53,   119,   463,   120,    23,    25,   467,   118,    45,
-      45,    45,   472,    45,    45,    45,    45,    45,   502,   503,
-     504,   473,    35,   475,   118,    35,    35,   414,   415,   416,
-     417,   418,   419,   420,    35,    35,    35,    35,   120,    35,
-     120,   120,   429,   119,   431,   432,   433,    15,    27,    35,
-      35,   225,   113,   629,   180,   174,   443,   444,    52,   446,
+      17,    28,   116,    28,    94,    87,   409,   153,   237,     9,
+     218,    28,   218,   218,    35,     2,   242,     9,   218,     9,
+      35,    35,    39,    45,     9,    10,    11,   122,    13,   600,
+      12,   218,    45,   218,   218,   243,   222,   243,   243,    15,
+      35,   247,    37,   243,   118,   251,    14,    35,   234,    31,
+       0,    36,    37,   127,   283,    42,   243,    33,   243,   243,
+      77,    29,   633,    46,    32,   271,   110,   111,   112,    46,
+      47,    48,     3,     4,     5,     6,    47,   461,   462,    10,
+      11,   125,    13,   114,   115,   118,    17,   471,    46,   122,
+     107,   108,   109,   110,   127,   110,   111,   112,   120,   116,
+     182,   122,   122,    34,   218,    37,   120,   120,   203,   105,
+     106,   126,   118,   113,   123,   124,    35,   144,   103,   144,
+      35,   113,   107,   113,    97,   110,    99,   144,   242,   243,
+     356,   116,    38,    39,    40,    41,   338,   339,   340,   341,
+     342,   343,   619,   620,    38,    39,   372,    41,   350,   391,
+     352,   118,    46,   395,    35,   361,   362,   399,    97,    98,
+     250,   100,   101,   180,   372,    35,   372,   372,    46,   196,
+     187,    46,   103,    46,    46,   265,   107,    96,    97,    98,
+      35,   100,   101,   102,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+     120,   218,    46,   409,   158,   159,   160,   120,   298,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,   218,   347,
+     348,   450,   113,   351,    35,   242,   243,   630,   430,   122,
+      35,   248,   122,   122,   440,   441,   442,   121,   265,   124,
+     265,   120,   356,   243,   271,   119,   271,   123,   265,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,   372,   120,
+     119,    49,   120,     1,   118,    46,   118,    46,    35,     7,
+     121,     9,    10,    11,    12,   128,   129,   130,    16,    17,
+      18,    19,   121,   121,    22,   121,    24,   304,    26,    35,
+      28,   373,    46,    48,   311,    33,    47,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    46,
+       8,    49,    50,    51,    52,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,   407,   119,    49,   119,   411,
+     108,   104,   120,   479,    35,    35,   118,   127,   355,   356,
+      54,    55,    56,    57,    58,    59,    35,   372,    35,    35,
+     118,    35,    35,    35,    35,   372,    35,   121,    35,   109,
+      35,    35,    20,   445,    21,    30,    35,    35,   574,   575,
+     576,    35,   110,   463,    35,   119,   121,   467,   120,    45,
+     118,   121,   121,   473,    96,   119,    53,   120,    23,   503,
+     504,   505,   474,    25,   476,    45,    45,   414,   415,   416,
+     417,   418,   419,   420,    45,    45,    45,    45,    45,    45,
+      35,   118,   429,    35,   431,   432,   433,    35,    35,    35,
+      35,    35,    35,   120,   630,   120,   443,   444,   120,   446,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-     467,   588,   467,   187,   243,   178,   144,   265,   467,    35,
-     467,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,   401,   488,   632,
-     637,   488,   241,   410,   393,   493,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,   502,   503,   504,    49,    50,
-      51,    52,   491,   235,   584,   397,    30,   579,    33,    -1,
-      -1,   518,   519,   520,   521,   522,   523,   524,   525,   526,
-       1,   528,    -1,   627,    -1,   122,    -1,    -1,     9,    10,
-      11,    12,    -1,    -1,    -1,    16,    17,    18,    19,    -1,
-      -1,    22,    -1,    24,    -1,    26,   122,    28,    -1,    -1,
-      -1,    -1,    33,    -1,    35,    -1,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
-      51,    52,    -1,    -1,    -1,    -1,    -1,   584,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   618,   619,   618,   619,    -1,    -1,    -1,    -1,    -1,
-      -1,   618,   619,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     627,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-     637,    -1,    -1,    -1,    -1,    -1,    -1,   118,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,   122,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
-      49,    -1,    -1,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,   118,    47,    48,    49,    50,    51,    52,    -1,
-      -1,    -1,   128,    -1,   130,   131,   132,   133,   134,   135,
-     136,   137,    35,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    -1,    -1,    49,    -1,    -1,   128,    -1,
-     130,   131,   132,   133,   134,   135,   136,   137,    -1,    -1,
-      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+     467,   119,   467,   589,    15,    27,    35,    35,   180,   225,
+     467,   113,    35,   174,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+     187,    52,   489,   243,   178,   401,   265,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,   503,   504,   505,    49,
+      50,    51,    52,   144,   633,   585,   489,   467,   580,   410,
+     638,   492,   519,   520,   521,   522,   523,   524,   525,   526,
+     527,     1,   529,   241,   628,   122,   494,   397,    30,     9,
+      10,    11,    12,    33,   393,   235,    16,    17,    18,    19,
+      -1,    -1,    22,    -1,    24,    -1,    26,    -1,    28,   122,
+      -1,    -1,    -1,    33,    -1,    35,    -1,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
+      50,    51,    52,    -1,    -1,    -1,    -1,    -1,   585,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   619,   620,   619,   620,    -1,    -1,    -1,    -1,
+      -1,    -1,   619,   620,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   628,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     110,   638,    35,    -1,    -1,    -1,    -1,    -1,   118,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    -1,   122,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,   121,    -1,    -1,    -1,
-      -1,    -1,   127,    37,    38,    39,    40,    41,    42,    43,
+      93,    94,    95,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,   118,    36,    49,    50,    51,    52,    -1,
+      -1,    -1,    -1,   128,    -1,   130,   131,   132,   133,   134,
+     135,   136,   137,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,   128,
+      -1,   130,   131,   132,   133,   134,   135,   136,   137,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,   118,    -1,    -1,   121,    -1,    -1,    -1,
+      -1,    -1,   127,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    -1,    47,    48,
-      49,    50,    51,    52,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    -1,    47,    48,    49,    50,    51,    52,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    -1,
-      47,    48,    49,    50,    51,    52,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
-      51,    52,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    37,    38,    39,    40,    41,
-      42,    43,    44,    45
+      -1,    -1,    -1,    -1,    -1,    -1,   121,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    47,    48,    49,    50,    51,    52,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    -1,    47,
+      48,    49,    50,    51,    52,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    -1,    47,    48,    49,    50,    51,
+      52,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      -1,    47,    48,    49,    50,    51,    52,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
+      -1,    51,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    -1,    -1,    -1,    49
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   114,   115,   139,    35,   141,   291,   292,   140,   141,
+       0,   114,   115,   139,    35,   141,   292,   293,   140,   141,
        0,     9,    10,    11,    13,    36,    37,   103,   107,   110,
-     116,   144,   145,   146,   147,   158,   162,   185,   200,   225,
-     293,   294,   295,   297,   298,   299,     3,     4,     5,     6,
+     116,   144,   145,   146,   147,   158,   162,   185,   200,   226,
+     294,   295,   296,   298,   299,   300,     3,     4,     5,     6,
       17,    34,   142,   143,   144,   157,   158,   159,   160,   161,
-     162,   166,   168,   276,    46,    47,    46,   122,    35,   193,
-     296,   299,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,   286,   287,    37,   118,   186,    35,   118,    35,    35,
+     162,   166,   168,   277,    46,    47,    46,   122,    35,   193,
+     297,   300,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,   287,   288,    37,   118,   186,    35,   118,    35,    35,
       46,    47,    48,    49,    50,    51,    52,   122,   202,   203,
-     205,   206,   207,   208,   244,   280,   285,   286,   294,   296,
-     170,    46,    46,    46,    46,   169,   286,    38,    39,    41,
-      46,   278,    46,    35,   141,   170,   120,    46,   163,   164,
+     205,   206,   207,   208,   245,   281,   286,   287,   295,   297,
+     170,    46,    46,    46,    46,   169,   287,    38,    39,    41,
+      46,   279,    46,    35,   141,   170,   120,    46,   163,   164,
      165,   113,   110,   111,   112,   125,   187,   188,   189,   190,
-      35,   148,   149,   150,   286,    49,   209,   279,   280,   283,
-     284,   285,   286,    35,   120,   208,    36,    82,    83,    84,
+      35,   148,   149,   150,   287,    49,   209,   280,   281,   284,
+     285,   286,   287,    35,   120,   208,    36,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,   171,   121,   286,   286,   286,   286,   120,   143,    35,
-      49,   244,   286,   123,   124,   186,   191,   119,   120,   119,
-     120,   123,   124,   205,   118,   272,   273,   118,   272,   273,
-     273,   273,    46,   121,   121,   121,   121,    46,   173,   174,
+      95,   171,   121,   287,   287,   287,   287,   120,   143,    35,
+      49,   245,   287,   123,   124,   186,   191,   119,   120,   119,
+     120,   123,   124,   205,   118,   273,   274,   118,   273,   274,
+     274,   274,    46,   121,   121,   121,   121,    46,   173,   174,
       35,   165,    35,   110,   111,   112,   126,   192,   189,    35,
-     150,   279,    46,   169,    47,    48,    46,   280,   181,     8,
+     150,   280,    46,   169,    47,    48,    46,   281,   181,     8,
      175,   186,   105,   106,   151,   152,   153,   154,   155,   156,
      119,   119,     1,     7,    12,    16,    18,    19,    22,    24,
       26,    28,    33,    36,    37,    42,    43,    44,    45,    46,
       49,   118,   158,   167,   182,   183,   184,   185,   193,   194,
-     195,   196,   197,   198,   199,   200,   210,   211,   212,   214,
-     215,   218,   220,   221,   225,   226,   227,   228,   237,   238,
-     239,   240,   241,   242,   244,   245,   251,   252,   253,   254,
-     262,   263,   274,   275,   276,   277,   283,   286,   287,    38,
-      39,    40,    41,   176,   282,   282,   108,   104,   153,    35,
-      35,   282,   278,   118,   255,   255,    35,    35,    35,   245,
-     239,   183,   283,   286,   208,   246,   247,   248,   283,    35,
+     195,   196,   197,   198,   199,   200,   210,   211,   213,   215,
+     216,   219,   221,   222,   226,   227,   228,   229,   238,   239,
+     240,   241,   242,   243,   245,   246,   252,   253,   254,   255,
+     263,   264,   275,   276,   277,   278,   284,   287,   288,    38,
+      39,    40,    41,   176,   283,   283,   108,   104,   153,    35,
+      35,   283,   279,   118,   256,   256,    35,    35,    35,   246,
+     240,   183,   284,   287,   208,   247,   248,   249,   284,    35,
       35,   201,   202,   204,   208,    35,    35,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,   216,
-     280,   283,   285,    35,   255,   127,   121,    35,    68,    69,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,   217,
+     281,   284,   286,    35,   256,   127,   121,    35,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,   121,   290,   208,   177,   286,   109,   222,   223,
-     286,    46,   256,   257,   258,   259,   260,   261,   279,    35,
-      35,    20,   264,   265,   266,    21,   267,   268,   269,    30,
-     229,   230,   231,    35,    35,    35,    35,   121,   119,   120,
-     249,   121,    45,   120,   219,   219,   219,   219,   219,   219,
-     219,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      80,    81,   121,   291,   208,   177,   287,   109,   223,   224,
+     287,    46,   257,   258,   259,   260,   261,   262,   280,    35,
+      35,    20,   265,   266,   267,    21,   268,   269,   270,    30,
+     230,   231,   232,    35,    35,    35,    35,   121,   119,   120,
+     250,   121,    45,   120,   220,   220,   220,   220,   220,   220,
+     220,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       49,   120,    45,   120,    54,    55,    56,    57,    58,    59,
-     281,   281,   281,    45,   219,   281,   219,    46,    49,    51,
-     243,   286,   239,    47,    48,   283,    47,    48,   283,    37,
-      46,    47,    48,    49,   128,   129,   130,   200,   213,   239,
-     283,   285,   287,   288,   279,   121,    35,    96,    97,    98,
-     100,   101,   102,   178,   179,   180,   250,    35,   120,    96,
-     224,    53,   119,   120,   270,   260,    23,   266,   260,    25,
-     269,   260,    14,    29,    32,   232,   231,   279,   248,   250,
-     279,   286,   286,   286,   286,   286,   286,   286,    45,    45,
-      45,    45,    45,    45,    45,    45,    45,   286,   219,   286,
-     286,   286,    46,    47,    48,   217,   283,    46,    47,    48,
-     283,    46,    47,    48,   283,   286,   286,   279,   286,   255,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,   128,   130,   131,   132,   133,   134,
-     135,   136,   137,   289,   289,   289,   208,   206,   208,   289,
-     208,   279,   279,   272,   118,   223,   261,   258,    97,    99,
-     271,    35,    35,    35,    35,    35,   244,   244,   244,    35,
-     286,   286,   286,   286,   286,   286,   286,   286,   286,   286,
-      46,   283,    47,    48,   283,    47,    48,   283,   120,   120,
-     279,    46,   172,   208,   286,   272,    35,   120,   233,    31,
-     221,   234,   235,   236,   203,   203,   119,    15,   244,   248,
-      27,   236,   243,    35,    35
+     282,   282,   282,    45,   220,   282,   220,    46,    49,    51,
+     244,   287,   240,    47,    48,   284,    47,    48,   284,    37,
+      46,    47,    48,    49,   128,   129,   130,   200,   212,   214,
+     240,   284,   286,   288,   289,   280,   121,    35,    96,    97,
+      98,   100,   101,   102,   178,   179,   180,   251,    35,   120,
+      96,   225,    53,   119,   120,   271,   261,    23,   267,   261,
+      25,   270,   261,    14,    29,    32,   233,   232,   280,   249,
+     251,   280,   287,   287,   287,   287,   287,   287,   287,    45,
+      45,    45,    45,    45,    45,    45,    45,    45,   287,   220,
+     287,   287,   287,    46,    47,    48,   218,   284,    46,    47,
+      48,   284,    46,    47,    48,   284,   287,   287,   280,   287,
+     256,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,   128,   130,   131,   132,   133,
+     134,   135,   136,   137,   290,   290,   290,   208,   206,   208,
+     290,   208,   280,   280,   273,   118,   224,   262,   259,    97,
+      99,   272,    35,    35,    35,    35,    35,   245,   245,   245,
+      35,   287,   287,   287,   287,   287,   287,   287,   287,   287,
+     287,    46,   284,    47,    48,   284,    47,    48,   284,   120,
+     120,   280,    46,   172,   208,   287,   273,    35,   120,   234,
+      31,   222,   235,   236,   237,   203,   203,   119,    15,   245,
+     249,    27,   237,   244,    35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2589,22 +2581,22 @@
   switch (yyn)
     {
         case 4:
-#line 547 "pir.y"
+#line 548 "pir.y"
     { fixup_global_labels(lexer); ;}
     break;
 
   case 20:
-#line 578 "pir.y"
+#line 579 "pir.y"
     { new_macro_const(lexer->macros, (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval), yypirget_lineno(yyscanner)); ;}
     break;
 
   case 21:
-#line 584 "pir.y"
+#line 585 "pir.y"
     { /* fprintf(stderr, "macro body: [%s]\n", CURRENT_MACRO(lexer)->body);*/ ;}
     break;
 
   case 22:
-#line 588 "pir.y"
+#line 589 "pir.y"
     {
                           new_macro(lexer->macros, (yyvsp[(2) - (2)].sval), yypirget_lineno(yyscanner), TRUE,
                                     lexer->macro_size);
@@ -2612,17 +2604,17 @@
     break;
 
   case 27:
-#line 603 "pir.y"
+#line 604 "pir.y"
     { add_macro_param(CURRENT_MACRO(lexer), (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 35:
-#line 622 "pir.y"
+#line 623 "pir.y"
     { store_macro_string(CURRENT_MACRO(lexer), "%s\n", (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 36:
-#line 626 "pir.y"
+#line 627 "pir.y"
     {
                           store_macro_string(CURRENT_MACRO(lexer), ".local %s %s\n",
                                              pir_type_names[(yyvsp[(2) - (3)].ival)], (yyvsp[(3) - (3)].sval));
@@ -2630,142 +2622,142 @@
     break;
 
   case 37:
-#line 637 "pir.y"
+#line 638 "pir.y"
     { load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 38:
-#line 641 "pir.y"
+#line 642 "pir.y"
     { yypirset_lineno ((yyvsp[(2) - (2)].ival), yyscanner); ;}
     break;
 
   case 39:
-#line 643 "pir.y"
+#line 644 "pir.y"
     { lexer->filename = (yyvsp[(2) - (2)].sval); ;}
     break;
 
   case 41:
-#line 652 "pir.y"
+#line 653 "pir.y"
     { set_hll(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 42:
-#line 656 "pir.y"
+#line 657 "pir.y"
     { set_hll_map(lexer, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 43:
-#line 660 "pir.y"
+#line 661 "pir.y"
     { set_namespace(lexer, (yyvsp[(3) - (4)].key)); ;}
     break;
 
   case 44:
-#line 664 "pir.y"
+#line 665 "pir.y"
     { (yyval.key) = NULL; ;}
     break;
 
   case 45:
-#line 666 "pir.y"
+#line 667 "pir.y"
     { (yyval.key) = (yyvsp[(1) - (1)].key); ;}
     break;
 
   case 46:
-#line 670 "pir.y"
+#line 671 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 47:
-#line 672 "pir.y"
+#line 673 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 48:
-#line 676 "pir.y"
+#line 677 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
   case 50:
-#line 686 "pir.y"
+#line 687 "pir.y"
     { close_sub(lexer); ;}
     break;
 
   case 51:
-#line 690 "pir.y"
+#line 691 "pir.y"
     { new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 56:
-#line 702 "pir.y"
+#line 703 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_ANON);;}
     break;
 
   case 57:
-#line 704 "pir.y"
+#line 705 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_INIT); ;}
     break;
 
   case 58:
-#line 706 "pir.y"
+#line 707 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_LOAD); ;}
     break;
 
   case 59:
-#line 708 "pir.y"
+#line 709 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_MAIN); ;}
     break;
 
   case 60:
-#line 710 "pir.y"
+#line 711 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_LEX); ;}
     break;
 
   case 61:
-#line 712 "pir.y"
+#line 713 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_POSTCOMP); ;}
     break;
 
   case 62:
-#line 714 "pir.y"
+#line 715 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_IMMEDIATE); ;}
     break;
 
   case 63:
-#line 716 "pir.y"
+#line 717 "pir.y"
     { set_sub_flag(lexer, SUB_FLAG_MULTI); ;}
     break;
 
   case 64:
-#line 718 "pir.y"
+#line 719 "pir.y"
     { set_sub_outer(lexer, (yyvsp[(3) - (4)].sval)); ;}
     break;
 
   case 65:
-#line 720 "pir.y"
+#line 721 "pir.y"
     { set_sub_methodname(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 66:
-#line 722 "pir.y"
+#line 723 "pir.y"
     { set_sub_vtable(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 67:
-#line 724 "pir.y"
+#line 725 "pir.y"
     { set_sub_subid(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 68:
-#line 726 "pir.y"
+#line 727 "pir.y"
     { set_sub_instanceof(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 69:
-#line 728 "pir.y"
+#line 729 "pir.y"
     { set_sub_nsentry(lexer, (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 73:
-#line 737 "pir.y"
+#line 738 "pir.y"
     {
                            /* if there are parameters, then emit a get_params instruction. */
                            if ((yyvsp[(1) - (1)].ival) > 0) {
@@ -2783,37 +2775,37 @@
     break;
 
   case 74:
-#line 754 "pir.y"
+#line 755 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 75:
-#line 756 "pir.y"
+#line 757 "pir.y"
     { ++(yyval.ival); /* count number of parameters */ ;}
     break;
 
   case 76:
-#line 760 "pir.y"
+#line 761 "pir.y"
     { set_param_flag(lexer, (yyvsp[(2) - (4)].targ), (yyvsp[(3) - (4)].ival)); ;}
     break;
 
   case 77:
-#line 764 "pir.y"
+#line 765 "pir.y"
     { (yyval.targ) = add_param(lexer, (yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].sval)); ;}
     break;
 
   case 78:
-#line 768 "pir.y"
+#line 769 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
   case 79:
-#line 770 "pir.y"
+#line 771 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 83:
-#line 779 "pir.y"
+#line 780 "pir.y"
     { (yyval.ival) = TARGET_FLAG_INVOCANT;
                            /* XXX handle multi_type */
 
@@ -2821,12 +2813,12 @@
     break;
 
   case 84:
-#line 786 "pir.y"
+#line 787 "pir.y"
     { (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
     break;
 
   case 86:
-#line 793 "pir.y"
+#line 794 "pir.y"
     {
                          ++lexer->stmt_counter;
                          /* increment the logical statement counter; a statement can be
@@ -2837,37 +2829,37 @@
     break;
 
   case 87:
-#line 803 "pir.y"
+#line 804 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
   case 105:
-#line 831 "pir.y"
+#line 832 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (3)].mval), (yyvsp[(2) - (3)].pval)); ;}
     break;
 
   case 106:
-#line 835 "pir.y"
+#line 836 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 107:
-#line 837 "pir.y"
+#line 838 "pir.y"
     { (yyval.pval) = (yyvsp[(2) - (3)].pval); ;}
     break;
 
   case 108:
-#line 841 "pir.y"
+#line 842 "pir.y"
     { (yyval.pval) = NULL; ;}
     break;
 
   case 110:
-#line 846 "pir.y"
+#line 847 "pir.y"
     { (yyval.pval) = new_macro_param((yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 111:
-#line 848 "pir.y"
+#line 849 "pir.y"
     {
                           macro_param *param = new_macro_param((yyvsp[(3) - (3)].sval));
                           param->next = (yyvsp[(1) - (3)].pval);
@@ -2876,7 +2868,7 @@
     break;
 
   case 112:
-#line 856 "pir.y"
+#line 857 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                           if (sym == NULL) {
@@ -2887,22 +2879,22 @@
     break;
 
   case 114:
-#line 865 "pir.y"
+#line 866 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 116:
-#line 870 "pir.y"
+#line 871 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
   case 117:
-#line 875 "pir.y"
+#line 876 "pir.y"
     { (yyval.sval) = ""; ;}
     break;
 
   case 118:
-#line 877 "pir.y"
+#line 878 "pir.y"
     { /* XXX cleanup memory stuff */
                           char *newbuff = (char *)mem_sys_allocate((strlen((yyvsp[(1) - (2)].sval)) + strlen((yyvsp[(2) - (2)].sval)) + 2)
                                                                    * sizeof (char));
@@ -2912,17 +2904,17 @@
     break;
 
   case 122:
-#line 889 "pir.y"
+#line 890 "pir.y"
     { (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
     break;
 
   case 123:
-#line 897 "pir.y"
+#line 898 "pir.y"
     { set_instr(lexer, NULL); ;}
     break;
 
   case 125:
-#line 905 "pir.y"
+#line 906 "pir.y"
     {
                            if (lexer->parse_errors > MAX_NUM_ERRORS)
                                panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -2932,7 +2924,7 @@
     break;
 
   case 126:
-#line 914 "pir.y"
+#line 915 "pir.y"
     {
                            set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(yyscanner);
@@ -2940,7 +2932,7 @@
     break;
 
   case 127:
-#line 921 "pir.y"
+#line 922 "pir.y"
     {
                            set_instrf(lexer, "get_results", "%T", (yyvsp[(2) - (3)].targ));
                            get_opinfo(yyscanner);
@@ -2948,7 +2940,7 @@
     break;
 
   case 131:
-#line 935 "pir.y"
+#line 936 "pir.y"
     { /* at this point, TK_IDENT may in fact be a symbol identifier,
                             * not an op, so don't do any checks like is_parrot_op() just yet.
                             */
@@ -2958,7 +2950,7 @@
     break;
 
   case 132:
-#line 944 "pir.y"
+#line 945 "pir.y"
     { /* when this rule is activated, the initial identifier must
                            * be a parrot op.
                            */
@@ -2968,7 +2960,7 @@
     break;
 
   case 138:
-#line 962 "pir.y"
+#line 963 "pir.y"
     {
                          /* the "instruction" that was set now appears to be
                           * an identifier; get the name, and check its type.
@@ -3005,22 +2997,22 @@
     break;
 
   case 139:
-#line 998 "pir.y"
+#line 999 "pir.y"
     { push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 140:
-#line 1003 "pir.y"
+#line 1004 "pir.y"
     { push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
     break;
 
   case 141:
-#line 1007 "pir.y"
+#line 1008 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 142:
-#line 1009 "pir.y"
+#line 1010 "pir.y"
     { /* this is either a LABEL or a symbol; in the latter case, the type
                             * will be filled in later. */
                            (yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval));
@@ -3028,17 +3020,17 @@
     break;
 
   case 143:
-#line 1014 "pir.y"
+#line 1015 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 144:
-#line 1016 "pir.y"
+#line 1017 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 145:
-#line 1020 "pir.y"
+#line 1021 "pir.y"
     {
                            /* if $1 is a register, just return that */
                            if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3062,22 +3054,22 @@
     break;
 
   case 146:
-#line 1043 "pir.y"
+#line 1044 "pir.y"
     { (yyval.key) = (yyvsp[(2) - (3)].key); ;}
     break;
 
   case 147:
-#line 1047 "pir.y"
+#line 1048 "pir.y"
     { (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
   case 148:
-#line 1049 "pir.y"
+#line 1050 "pir.y"
     { (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
   case 149:
-#line 1058 "pir.y"
+#line 1059 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3091,7 +3083,7 @@
     break;
 
   case 150:
-#line 1069 "pir.y"
+#line 1070 "pir.y"
     {
                           /* the instruction is already set in parrot_op rule */
                           unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3106,7 +3098,7 @@
     break;
 
   case 151:
-#line 1081 "pir.y"
+#line 1082 "pir.y"
     { /* XXX create a PMC const for $4 */
                           unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3116,8 +3108,8 @@
                         ;}
     break;
 
-  case 153:
-#line 1094 "pir.y"
+  case 155:
+#line 1099 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3128,8 +3120,8 @@
                         ;}
     break;
 
-  case 154:
-#line 1103 "pir.y"
+  case 156:
+#line 1108 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 0.0)
                               set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3140,48 +3132,24 @@
                         ;}
     break;
 
-  case 155:
-#line 1112 "pir.y"
+  case 157:
+#line 1117 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%s", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].sval));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 156:
-#line 1117 "pir.y"
+  case 158:
+#line 1122 "pir.y"
     {
                           set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 157:
-#line 1122 "pir.y"
-    {
-                          symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
-                          if (sym) {
-                              target *rhs = target_from_symbol(lexer, sym);
-                              if (!targets_equal((yyvsp[(1) - (3)].targ), rhs)) {
-                                  set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), rhs);
-                                  get_opinfo(yyscanner);
-                              }
-                          }
-                          else { /* not a symbol */
-                              if (is_parrot_op(lexer, (yyvsp[(3) - (3)].sval))) {
-                                  set_instrf(lexer, (yyvsp[(3) - (3)].sval), "%T", (yyvsp[(1) - (3)].targ));
-                                  get_opinfo(yyscanner);
-                              }
-                              else {
-                                  yypirerror(yyscanner, lexer, "'%s' is neither a declared symbol "
-                                             "nor a parrot opcode", (yyvsp[(3) - (3)].sval));
-                              }
-                          }
-                        ;}
-    break;
-
-  case 158:
-#line 1143 "pir.y"
+  case 159:
+#line 1127 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
                           if (sym) {
@@ -3204,16 +3172,16 @@
                         ;}
     break;
 
-  case 159:
-#line 1164 "pir.y"
+  case 160:
+#line 1148 "pir.y"
     {
                           unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 160:
-#line 1169 "pir.y"
+  case 161:
+#line 1153 "pir.y"
     {
                           /*   $P0 = foo ["bar"]
                            *
@@ -3255,8 +3223,8 @@
                         ;}
     break;
 
-  case 161:
-#line 1209 "pir.y"
+  case 162:
+#line 1193 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
                           target *t;
@@ -3276,8 +3244,8 @@
                         ;}
     break;
 
-  case 162:
-#line 1227 "pir.y"
+  case 163:
+#line 1211 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
                           set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3286,16 +3254,16 @@
                         ;}
     break;
 
-  case 163:
-#line 1234 "pir.y"
+  case 164:
+#line 1218 "pir.y"
     {
                           set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 164:
-#line 1239 "pir.y"
+  case 165:
+#line 1223 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3308,8 +3276,8 @@
                         ;}
     break;
 
-  case 165:
-#line 1250 "pir.y"
+  case 166:
+#line 1234 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3322,8 +3290,8 @@
                         ;}
     break;
 
-  case 166:
-#line 1261 "pir.y"
+  case 167:
+#line 1245 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].ival) == 1)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3336,8 +3304,8 @@
                         ;}
     break;
 
-  case 167:
-#line 1272 "pir.y"
+  case 168:
+#line 1256 "pir.y"
     {
                           if ((yyvsp[(3) - (3)].dval) == 1.0)
                               set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3350,32 +3318,32 @@
                         ;}
     break;
 
-  case 168:
-#line 1283 "pir.y"
+  case 169:
+#line 1267 "pir.y"
     {
                           set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 169:
-#line 1288 "pir.y"
+  case 170:
+#line 1272 "pir.y"
     {
                           set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 170:
-#line 1293 "pir.y"
+  case 171:
+#line 1277 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
                           get_opinfo(yyscanner);
                         ;}
     break;
 
-  case 171:
-#line 1298 "pir.y"
+  case 172:
+#line 1282 "pir.y"
     {
                           if (targets_equal((yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ))) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
                               set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].expr));
@@ -3387,8 +3355,8 @@
                         ;}
     break;
 
-  case 172:
-#line 1308 "pir.y"
+  case 173:
+#line 1292 "pir.y"
     {
                           symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
                           target *t;
@@ -3409,8 +3377,8 @@
                       ;}
     break;
 
-  case 173:
-#line 1327 "pir.y"
+  case 174:
+#line 1311 "pir.y"
     {
                           target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
                           set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3419,98 +3387,98 @@
                         ;}
     break;
 
-  case 174:
-#line 1361 "pir.y"
+  case 175:
+#line 1345 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 175:
-#line 1363 "pir.y"
+  case 176:
+#line 1347 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 176:
-#line 1365 "pir.y"
+  case 177:
+#line 1349 "pir.y"
     { set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 177:
-#line 1367 "pir.y"
+  case 178:
+#line 1351 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_s_s(yyscanner, (yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval))); ;}
     break;
 
-  case 178:
-#line 1369 "pir.y"
+  case 179:
+#line 1353 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_i(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
-  case 179:
-#line 1371 "pir.y"
+  case 180:
+#line 1355 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_n(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
-  case 180:
-#line 1373 "pir.y"
+  case 181:
+#line 1357 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_i_n(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
     break;
 
-  case 181:
-#line 1375 "pir.y"
+  case 182:
+#line 1359 "pir.y"
     { set_instrf(lexer, "set", "%C", fold_n_i(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
     break;
 
-  case 182:
-#line 1380 "pir.y"
+  case 183:
+#line 1364 "pir.y"
     { get_opinfo(yyscanner); ;}
     break;
 
-  case 183:
-#line 1389 "pir.y"
+  case 184:
+#line 1373 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 184:
-#line 1391 "pir.y"
+  case 185:
+#line 1375 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 185:
-#line 1393 "pir.y"
+  case 186:
+#line 1377 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 186:
-#line 1395 "pir.y"
+  case 187:
+#line 1379 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 187:
-#line 1397 "pir.y"
+  case 188:
+#line 1381 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 188:
-#line 1399 "pir.y"
+  case 189:
+#line 1383 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 189:
-#line 1401 "pir.y"
+  case 190:
+#line 1385 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 190:
-#line 1403 "pir.y"
+  case 191:
+#line 1387 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 191:
-#line 1405 "pir.y"
+  case 192:
+#line 1389 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
     break;
 
-  case 192:
-#line 1407 "pir.y"
+  case 193:
+#line 1391 "pir.y"
     {
                           int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
                           /* if "unless", invert the true-ness */
@@ -3524,76 +3492,76 @@
                         ;}
     break;
 
-  case 193:
-#line 1419 "pir.y"
+  case 194:
+#line 1403 "pir.y"
     {
                           set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null", "%T%I",
                                      new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (5)].ival)), (yyvsp[(5) - (5)].sval));
                         ;}
     break;
 
-  case 194:
-#line 1424 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
-    break;
-
   case 195:
-#line 1426 "pir.y"
-    { set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
+#line 1408 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 196:
-#line 1428 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
+#line 1410 "pir.y"
+    { set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 197:
-#line 1430 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
+#line 1412 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 198:
-#line 1432 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
+#line 1414 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 199:
-#line 1434 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
+#line 1416 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 200:
-#line 1436 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
+#line 1418 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 201:
-#line 1438 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
+#line 1420 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 202:
-#line 1440 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
+#line 1422 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 203:
-#line 1442 "pir.y"
+#line 1424 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 204:
-#line 1444 "pir.y"
-    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
+#line 1426 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 205:
-#line 1446 "pir.y"
+#line 1428 "pir.y"
     { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 206:
-#line 1448 "pir.y"
+#line 1430 "pir.y"
+    { create_if_instr(yyscanner, lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
+    break;
+
+  case 207:
+#line 1432 "pir.y"
     {
                           if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
                              if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3620,8 +3588,8 @@
                         ;}
     break;
 
-  case 207:
-#line 1479 "pir.y"
+  case 208:
+#line 1463 "pir.y"
     {
                           /* the instructions "gt" and "ge" are converted to "lt" and "le".
                            * if so, then the arguments must be reversed as well. "lt" and
@@ -3649,8 +3617,8 @@
                         ;}
     break;
 
-  case 208:
-#line 1505 "pir.y"
+  case 209:
+#line 1489 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%i", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].ival));
@@ -3660,8 +3628,8 @@
                         ;}
     break;
 
-  case 209:
-#line 1513 "pir.y"
+  case 210:
+#line 1497 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%n", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].dval));
@@ -3672,8 +3640,8 @@
                         ;}
     break;
 
-  case 210:
-#line 1522 "pir.y"
+  case 211:
+#line 1506 "pir.y"
     {
                           if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
                               set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%s", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].sval));
@@ -3684,71 +3652,71 @@
                         ;}
     break;
 
-  case 211:
-#line 1531 "pir.y"
+  case 212:
+#line 1515 "pir.y"
     { (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 212:
-#line 1533 "pir.y"
+  case 213:
+#line 1517 "pir.y"
     { (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 213:
-#line 1535 "pir.y"
+  case 214:
+#line 1519 "pir.y"
     { (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
     break;
 
-  case 214:
-#line 1537 "pir.y"
+  case 215:
+#line 1521 "pir.y"
     { (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
     break;
 
-  case 215:
-#line 1539 "pir.y"
+  case 216:
+#line 1523 "pir.y"
     { (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 216:
-#line 1543 "pir.y"
+  case 217:
+#line 1527 "pir.y"
     {
                           yypirerror(yyscanner, lexer, "cannot compare string to %s",
                                      (yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
                         ;}
     break;
 
-  case 217:
-#line 1548 "pir.y"
+  case 218:
+#line 1532 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
     break;
 
-  case 218:
-#line 1550 "pir.y"
+  case 219:
+#line 1534 "pir.y"
     { yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
     break;
 
-  case 219:
-#line 1554 "pir.y"
+  case 220:
+#line 1538 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 220:
-#line 1555 "pir.y"
+  case 221:
+#line 1539 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 221:
-#line 1558 "pir.y"
+  case 222:
+#line 1542 "pir.y"
     { (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
     break;
 
-  case 222:
-#line 1559 "pir.y"
+  case 223:
+#line 1543 "pir.y"
     { (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
     break;
 
-  case 225:
-#line 1567 "pir.y"
+  case 226:
+#line 1551 "pir.y"
     {
                           set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
                           set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3756,38 +3724,38 @@
                         ;}
     break;
 
-  case 226:
-#line 1575 "pir.y"
+  case 227:
+#line 1559 "pir.y"
     { declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
     break;
 
-  case 227:
-#line 1579 "pir.y"
+  case 228:
+#line 1563 "pir.y"
     { (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
     break;
 
-  case 228:
-#line 1581 "pir.y"
+  case 229:
+#line 1565 "pir.y"
     { (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
     break;
 
-  case 229:
-#line 1585 "pir.y"
+  case 230:
+#line 1569 "pir.y"
     { (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 230:
-#line 1588 "pir.y"
+  case 231:
+#line 1572 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 231:
-#line 1589 "pir.y"
+  case 232:
+#line 1573 "pir.y"
     { (yyval.ival) = 1; ;}
     break;
 
-  case 232:
-#line 1593 "pir.y"
+  case 233:
+#line 1577 "pir.y"
     { /* if $4 is not a register, it must be a declared symbol */
                           if (!TEST_FLAG((yyvsp[(4) - (5)].targ)->flags, TARGET_FLAG_IS_REG)) {
 
@@ -3799,136 +3767,124 @@
                         ;}
     break;
 
-  case 233:
-#line 1608 "pir.y"
+  case 234:
+#line 1592 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 236:
-#line 1620 "pir.y"
+  case 237:
+#line 1604 "pir.y"
     { /* $4 contains an invocation object */
                               set_invocation_args((yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
-                              set_invocation_results((yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
-                              (yyval.invo) = (yyvsp[(4) - (8)].invo);
+                              (yyval.invo) = set_invocation_results((yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
                             ;}
     break;
 
-  case 237:
-#line 1628 "pir.y"
-    { (yyval.argm) = NULL; ;}
-    break;
-
   case 238:
-#line 1630 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1611 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 239:
-#line 1634 "pir.y"
+#line 1613 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 240:
-#line 1636 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
+#line 1617 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 241:
-#line 1640 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
+#line 1619 "pir.y"
+    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 242:
-#line 1644 "pir.y"
-    { (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
+#line 1623 "pir.y"
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 243:
-#line 1646 "pir.y"
-    { (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
+#line 1627 "pir.y"
+    { (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
   case 244:
-#line 1649 "pir.y"
-    { (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
+#line 1629 "pir.y"
+    { (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
     break;
 
   case 245:
-#line 1653 "pir.y"
-    { (yyval.targ) = NULL; ;}
+#line 1632 "pir.y"
+    { (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
   case 246:
-#line 1655 "pir.y"
-    { (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
+#line 1636 "pir.y"
+    { (yyval.targ) = NULL; ;}
     break;
 
   case 247:
-#line 1659 "pir.y"
-    { (yyval.targ) = NULL; ;}
+#line 1638 "pir.y"
+    { (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
     break;
 
   case 248:
-#line 1661 "pir.y"
-    { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
+#line 1642 "pir.y"
+    { (yyval.targ) = NULL; ;}
     break;
 
   case 249:
-#line 1665 "pir.y"
+#line 1644 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
   case 250:
-#line 1667 "pir.y"
+#line 1648 "pir.y"
+    { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
+    break;
+
+  case 251:
+#line 1650 "pir.y"
     {
-                               if ((yyvsp[(2) - (2)].targ))
-                                   (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
-                               else
-                                   (yyval.targ) = (yyvsp[(1) - (2)].targ)
+                             if ((yyvsp[(2) - (2)].targ))
+                                 (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
+                             else
+                                 (yyval.targ) = (yyvsp[(1) - (2)].targ)
                            ;}
     break;
 
-  case 251:
-#line 1676 "pir.y"
+  case 252:
+#line 1659 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
-  case 252:
-#line 1678 "pir.y"
+  case 253:
+#line 1661 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 254:
-#line 1686 "pir.y"
-    { set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
-                             (yyval.invo) = (yyvsp[(3) - (3)].invo);
-                           ;}
+  case 255:
+#line 1669 "pir.y"
+    { (yyval.invo) = set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
-  case 255:
-#line 1690 "pir.y"
-    { set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ));
-                             (yyval.invo) = (yyvsp[(3) - (3)].invo);
-                           ;}
+  case 256:
+#line 1671 "pir.y"
+    { (yyval.invo) = set_invocation_results((yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
     break;
 
-  case 256:
-#line 1694 "pir.y"
-    { set_invocation_results((yyvsp[(1) - (1)].invo), NULL);
-                             (yyval.invo) = (yyvsp[(1) - (1)].invo);
-                           ;}
+  case 257:
+#line 1673 "pir.y"
+    {  (yyval.invo) = set_invocation_results((yyvsp[(1) - (1)].invo), NULL); ;}
     break;
 
-  case 259:
-#line 1704 "pir.y"
+  case 260:
+#line 1681 "pir.y"
     {
-                             target *invocant;
-
                              /* if $1 is not a register, check whether the symbol was declared */
-                             if (TEST_FLAG((yyvsp[(1) - (4)].targ)->flags, TARGET_FLAG_IS_REG)) {
-                                invocant = (yyvsp[(1) - (4)].targ);
-                             }
-                             else { /* is not a register but a symbol */
+                             if (!TEST_FLAG((yyvsp[(1) - (4)].targ)->flags, TARGET_FLAG_IS_REG)) {
 
                                  symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].targ)->info->id.name);
                                  if (sym == NULL)
@@ -3938,41 +3894,39 @@
                                      yypirerror(yyscanner, lexer,
                                              "cannot invoke method: '%s' is not of type 'pmc'",
                                              (yyvsp[(1) - (4)].targ)->info->id.name);
-
-                                 /* get a target based on the symbol, it contains a register */
-                                 invocant = (yyvsp[(1) - (4)].targ);
                              }
 
-                             (yyval.invo) = invoke(lexer, CALL_METHOD, invocant, (yyvsp[(3) - (4)].expr));
+                             (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(1) - (4)].targ), (yyvsp[(3) - (4)].expr));
                              set_invocation_args((yyval.invo), (yyvsp[(4) - (4)].argm));
                            ;}
     break;
 
-  case 260:
-#line 1732 "pir.y"
+  case 261:
+#line 1701 "pir.y"
     {
                              (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
                              set_invocation_args((yyval.invo), (yyvsp[(2) - (2)].argm));
                            ;}
     break;
 
-  case 261:
-#line 1739 "pir.y"
+  case 262:
+#line 1708 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 262:
-#line 1741 "pir.y"
+  case 263:
+#line 1710 "pir.y"
     {
-                               symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
-                               if (sym == NULL)
-                                   sym = new_symbol(lexer, (yyvsp[(1) - (1)].sval), PMC_TYPE);
+                             symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
+                             if (sym == NULL)
+                                 sym = new_symbol(lexer, (yyvsp[(1) - (1)].sval), PMC_TYPE);
 
-                               (yyval.targ) = target_from_symbol(lexer, sym); ;}
+                             (yyval.targ) = target_from_symbol(lexer, sym);
+                           ;}
     break;
 
-  case 263:
-#line 1750 "pir.y"
+  case 264:
+#line 1720 "pir.y"
     { /* check that this identifier was declared */
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
 
@@ -3991,23 +3945,23 @@
                            ;}
     break;
 
-  case 264:
-#line 1767 "pir.y"
+  case 265:
+#line 1737 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 265:
-#line 1769 "pir.y"
+  case 266:
+#line 1739 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
     break;
 
-  case 266:
-#line 1771 "pir.y"
+  case 267:
+#line 1741 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval))); ;}
     break;
 
-  case 267:
-#line 1775 "pir.y"
+  case 268:
+#line 1745 "pir.y"
     {
                              symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                              if (sym == NULL)
@@ -4018,89 +3972,89 @@
                            ;}
     break;
 
-  case 268:
-#line 1784 "pir.y"
+  case 269:
+#line 1754 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 269:
-#line 1789 "pir.y"
+  case 270:
+#line 1759 "pir.y"
     { (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
     break;
 
-  case 270:
-#line 1793 "pir.y"
+  case 271:
+#line 1763 "pir.y"
     { (yyval.targ) = NULL; ;}
     break;
 
-  case 271:
-#line 1795 "pir.y"
+  case 272:
+#line 1765 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 272:
-#line 1799 "pir.y"
+  case 273:
+#line 1769 "pir.y"
     { (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
     break;
 
-  case 273:
-#line 1801 "pir.y"
+  case 274:
+#line 1771 "pir.y"
     { (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
     break;
 
-  case 274:
-#line 1805 "pir.y"
+  case 275:
+#line 1775 "pir.y"
     { (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 275:
-#line 1809 "pir.y"
+  case 276:
+#line 1779 "pir.y"
     { (yyval.ival) = 0; ;}
     break;
 
-  case 276:
-#line 1811 "pir.y"
+  case 277:
+#line 1781 "pir.y"
     { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 277:
-#line 1815 "pir.y"
+  case 278:
+#line 1785 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
     break;
 
-  case 278:
-#line 1817 "pir.y"
+  case 279:
+#line 1787 "pir.y"
     { (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
     break;
 
-  case 279:
-#line 1819 "pir.y"
+  case 280:
+#line 1789 "pir.y"
     { (yyval.ival) = TARGET_FLAG_SLURPY; ;}
     break;
 
-  case 280:
-#line 1821 "pir.y"
+  case 281:
+#line 1791 "pir.y"
     {
                              (yyval.ival) = TARGET_FLAG_NAMED;
                              set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
                            ;}
     break;
 
-  case 281:
-#line 1831 "pir.y"
+  case 282:
+#line 1801 "pir.y"
     { convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
     break;
 
-  case 286:
-#line 1841 "pir.y"
+  case 287:
+#line 1811 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 287:
-#line 1846 "pir.y"
+  case 288:
+#line 1816 "pir.y"
     { /* was the invocation a method call? then it becomes a method tail
                                * call, otherwise it's just a normal (sub) tail call.
                                */
@@ -4111,270 +4065,270 @@
                             ;}
     break;
 
-  case 288:
-#line 1857 "pir.y"
+  case 289:
+#line 1827 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args((yyval.invo), (yyvsp[(2) - (3)].argm));
                             ;}
     break;
 
-  case 289:
-#line 1864 "pir.y"
+  case 290:
+#line 1834 "pir.y"
     { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
-  case 290:
-#line 1868 "pir.y"
+  case 291:
+#line 1838 "pir.y"
     { (yyval.argm) = NULL; ;}
     break;
 
-  case 291:
-#line 1870 "pir.y"
+  case 292:
+#line 1840 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 292:
-#line 1874 "pir.y"
+  case 293:
+#line 1844 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
-  case 293:
-#line 1876 "pir.y"
+  case 294:
+#line 1846 "pir.y"
     { (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
     break;
 
-  case 296:
-#line 1884 "pir.y"
+  case 297:
+#line 1854 "pir.y"
     { (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
     break;
 
-  case 297:
-#line 1888 "pir.y"
+  case 298:
+#line 1858 "pir.y"
     { (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
-  case 298:
-#line 1892 "pir.y"
+  case 299:
+#line 1862 "pir.y"
     { (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr)));  ;}
     break;
 
-  case 299:
-#line 1898 "pir.y"
+  case 300:
+#line 1868 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_RETURN);
                               set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 300:
-#line 1907 "pir.y"
+  case 301:
+#line 1877 "pir.y"
     {
                               (yyval.invo) = invoke(lexer, CALL_YIELD);
                               set_invocation_args((yyval.invo), (yyvsp[(3) - (5)].argm));
                             ;}
     break;
 
-  case 301:
-#line 1914 "pir.y"
-    { (yyval.argm) = NULL; ;}
-    break;
-
   case 302:
-#line 1916 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1884 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 303:
-#line 1921 "pir.y"
+#line 1886 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 304:
-#line 1923 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
+#line 1891 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 305:
-#line 1928 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
+#line 1893 "pir.y"
+    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 306:
-#line 1932 "pir.y"
-    { (yyval.argm) = NULL; ;}
+#line 1898 "pir.y"
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 307:
-#line 1934 "pir.y"
-    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
+#line 1902 "pir.y"
+    { (yyval.argm) = NULL; ;}
     break;
 
   case 308:
-#line 1938 "pir.y"
+#line 1904 "pir.y"
     { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 309:
-#line 1940 "pir.y"
-    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
+#line 1908 "pir.y"
+    { (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
     break;
 
   case 310:
-#line 1944 "pir.y"
-    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
+#line 1910 "pir.y"
+    { (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
     break;
 
   case 311:
-#line 1949 "pir.y"
-    { (yyval.ival) = 0; ;}
+#line 1914 "pir.y"
+    { (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
     break;
 
   case 312:
-#line 1951 "pir.y"
-    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
+#line 1919 "pir.y"
+    { (yyval.ival) = 0; ;}
     break;
 
   case 313:
-#line 1955 "pir.y"
-    { (yyval.ival) = ARG_FLAG_FLAT; ;}
+#line 1921 "pir.y"
+    { SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
     break;
 
   case 314:
-#line 1957 "pir.y"
+#line 1925 "pir.y"
+    { (yyval.ival) = ARG_FLAG_FLAT; ;}
+    break;
+
+  case 315:
+#line 1927 "pir.y"
     {
                                (yyval.ival) = ARG_FLAG_NAMED;
                                set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
                              ;}
     break;
 
-  case 315:
-#line 1964 "pir.y"
+  case 316:
+#line 1934 "pir.y"
     { (yyval.sval) = NULL; ;}
     break;
 
-  case 316:
-#line 1966 "pir.y"
+  case 317:
+#line 1936 "pir.y"
     { (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
     break;
 
-  case 317:
-#line 1970 "pir.y"
+  case 318:
+#line 1940 "pir.y"
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
-  case 321:
-#line 1981 "pir.y"
+  case 322:
+#line 1951 "pir.y"
     { store_global_constant(lexer, (yyvsp[(2) - (2)].cval)); ;}
     break;
 
-  case 322:
-#line 1985 "pir.y"
+  case 323:
+#line 1955 "pir.y"
     { /* XXX is .globalconst to be kept? */ ;}
     break;
 
-  case 323:
-#line 1989 "pir.y"
+  case 324:
+#line 1959 "pir.y"
     { (yyval.cval) = new_named_const(lexer, INT_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
-  case 324:
-#line 1991 "pir.y"
+  case 325:
+#line 1961 "pir.y"
     { (yyval.cval) = new_named_const(lexer, NUM_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
-  case 325:
-#line 1993 "pir.y"
+  case 326:
+#line 1963 "pir.y"
     { (yyval.cval) = new_named_const(lexer, STRING_TYPE, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
-  case 326:
-#line 1995 "pir.y"
+  case 327:
+#line 1965 "pir.y"
     { (yyval.cval) = new_pmc_const((yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
-  case 327:
-#line 2002 "pir.y"
+  case 328:
+#line 1972 "pir.y"
     { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
-  case 328:
-#line 2003 "pir.y"
+  case 329:
+#line 1973 "pir.y"
     { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
-  case 329:
-#line 2007 "pir.y"
+  case 330:
+#line 1977 "pir.y"
     { (yyval.cval) = new_const(lexer, STRING_TYPE, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
-  case 330:
-#line 2008 "pir.y"
+  case 331:
+#line 1978 "pir.y"
     { (yyval.cval) = new_const(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 331:
-#line 2009 "pir.y"
+  case 332:
+#line 1979 "pir.y"
     { (yyval.cval) = new_const(lexer, NUM_TYPE, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
-  case 332:
-#line 2012 "pir.y"
+  case 333:
+#line 1982 "pir.y"
     { (yyval.ival) = OP_NE; ;}
     break;
 
-  case 333:
-#line 2013 "pir.y"
+  case 334:
+#line 1983 "pir.y"
     { (yyval.ival) = OP_EQ; ;}
     break;
 
-  case 334:
-#line 2014 "pir.y"
+  case 335:
+#line 1984 "pir.y"
     { (yyval.ival) = OP_LT; ;}
     break;
 
-  case 335:
-#line 2015 "pir.y"
+  case 336:
+#line 1985 "pir.y"
     { (yyval.ival) = OP_LE; ;}
     break;
 
-  case 336:
-#line 2016 "pir.y"
+  case 337:
+#line 1986 "pir.y"
     { (yyval.ival) = OP_GE; ;}
     break;
 
-  case 337:
-#line 2017 "pir.y"
+  case 338:
+#line 1987 "pir.y"
     { (yyval.ival) = OP_GT; ;}
     break;
 
-  case 338:
-#line 2020 "pir.y"
+  case 339:
+#line 1990 "pir.y"
     { (yyval.ival) = INT_TYPE; ;}
     break;
 
-  case 339:
-#line 2021 "pir.y"
+  case 340:
+#line 1991 "pir.y"
     { (yyval.ival) = NUM_TYPE; ;}
     break;
 
-  case 340:
-#line 2022 "pir.y"
+  case 341:
+#line 1992 "pir.y"
     { (yyval.ival) = PMC_TYPE; ;}
     break;
 
-  case 341:
-#line 2023 "pir.y"
+  case 342:
+#line 1993 "pir.y"
     { (yyval.ival) = STRING_TYPE; ;}
     break;
 
-  case 342:
-#line 2031 "pir.y"
+  case 343:
+#line 2001 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
-  case 344:
-#line 2035 "pir.y"
+  case 345:
+#line 2005 "pir.y"
     { /* a symbol must have been declared; check that at this point. */
                            symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
                            if (sym == NULL) {
@@ -4387,278 +4341,278 @@
                          ;}
     break;
 
-  case 345:
-#line 2047 "pir.y"
+  case 346:
+#line 2017 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 346:
-#line 2048 "pir.y"
+  case 347:
+#line 2018 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 347:
-#line 2049 "pir.y"
+  case 348:
+#line 2019 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 348:
-#line 2050 "pir.y"
+  case 349:
+#line 2020 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 351:
-#line 2058 "pir.y"
+  case 352:
+#line 2028 "pir.y"
     { (yyval.sval) = "if"; ;}
     break;
 
-  case 352:
-#line 2059 "pir.y"
+  case 353:
+#line 2029 "pir.y"
     { (yyval.sval) = "unless"; ;}
     break;
 
-  case 353:
-#line 2060 "pir.y"
+  case 354:
+#line 2030 "pir.y"
     { (yyval.sval) = "goto"; ;}
     break;
 
-  case 354:
-#line 2061 "pir.y"
+  case 355:
+#line 2031 "pir.y"
     { (yyval.sval) = "int"; ;}
     break;
 
-  case 355:
-#line 2062 "pir.y"
+  case 356:
+#line 2032 "pir.y"
     { (yyval.sval) = "num"; ;}
     break;
 
-  case 356:
-#line 2063 "pir.y"
+  case 357:
+#line 2033 "pir.y"
     { (yyval.sval) = "string"; ;}
     break;
 
-  case 357:
-#line 2064 "pir.y"
+  case 358:
+#line 2034 "pir.y"
     { (yyval.sval) = "pmc"; ;}
     break;
 
-  case 358:
-#line 2065 "pir.y"
+  case 359:
+#line 2035 "pir.y"
     { (yyval.sval) = "null"; ;}
     break;
 
-  case 359:
-#line 2068 "pir.y"
+  case 360:
+#line 2038 "pir.y"
     { (yyval.sval) = "neg"; ;}
     break;
 
-  case 360:
-#line 2069 "pir.y"
+  case 361:
+#line 2039 "pir.y"
     { (yyval.sval) = "not"; ;}
     break;
 
-  case 361:
-#line 2070 "pir.y"
+  case 362:
+#line 2040 "pir.y"
     { (yyval.sval) = "bnot"; ;}
     break;
 
-  case 362:
-#line 2073 "pir.y"
+  case 363:
+#line 2043 "pir.y"
     { (yyval.ival) = OP_ADD; ;}
     break;
 
-  case 363:
-#line 2074 "pir.y"
+  case 364:
+#line 2044 "pir.y"
     { (yyval.ival) = OP_SUB; ;}
     break;
 
-  case 364:
-#line 2075 "pir.y"
+  case 365:
+#line 2045 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 365:
-#line 2076 "pir.y"
+  case 366:
+#line 2046 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 366:
-#line 2077 "pir.y"
+  case 367:
+#line 2047 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 367:
-#line 2078 "pir.y"
+  case 368:
+#line 2048 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 368:
-#line 2079 "pir.y"
+  case 369:
+#line 2049 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 369:
-#line 2080 "pir.y"
+  case 370:
+#line 2050 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 370:
-#line 2081 "pir.y"
+  case 371:
+#line 2051 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 371:
-#line 2082 "pir.y"
+  case 372:
+#line 2052 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 372:
-#line 2083 "pir.y"
+  case 373:
+#line 2053 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 373:
-#line 2084 "pir.y"
+  case 374:
+#line 2054 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 374:
-#line 2085 "pir.y"
+  case 375:
+#line 2055 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 375:
-#line 2086 "pir.y"
+  case 376:
+#line 2056 "pir.y"
     { (yyval.ival) = OP_OR; ;}
     break;
 
-  case 376:
-#line 2087 "pir.y"
+  case 377:
+#line 2057 "pir.y"
     { (yyval.ival) = OP_AND; ;}
     break;
 
-  case 377:
-#line 2088 "pir.y"
+  case 378:
+#line 2058 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 378:
-#line 2089 "pir.y"
+  case 379:
+#line 2059 "pir.y"
     { (yyval.ival) = OP_XOR; ;}
     break;
 
-  case 379:
-#line 2090 "pir.y"
+  case 380:
+#line 2060 "pir.y"
     { (yyval.ival) = OP_ISEQ; ;}
     break;
 
-  case 380:
-#line 2091 "pir.y"
+  case 381:
+#line 2061 "pir.y"
     { (yyval.ival) = OP_ISLE; ;}
     break;
 
-  case 381:
-#line 2092 "pir.y"
+  case 382:
+#line 2062 "pir.y"
     { (yyval.ival) = OP_ISLT; ;}
     break;
 
-  case 382:
-#line 2093 "pir.y"
+  case 383:
+#line 2063 "pir.y"
     { (yyval.ival) = OP_ISGE; ;}
     break;
 
-  case 383:
-#line 2094 "pir.y"
+  case 384:
+#line 2064 "pir.y"
     { (yyval.ival) = OP_ISGT; ;}
     break;
 
-  case 384:
-#line 2095 "pir.y"
+  case 385:
+#line 2065 "pir.y"
     { (yyval.ival) = OP_ISNE; ;}
     break;
 
-  case 385:
-#line 2101 "pir.y"
+  case 386:
+#line 2071 "pir.y"
     { (yyval.ival) = OP_MUL; ;}
     break;
 
-  case 386:
-#line 2102 "pir.y"
+  case 387:
+#line 2072 "pir.y"
     { (yyval.ival) = OP_MOD; ;}
     break;
 
-  case 387:
-#line 2103 "pir.y"
+  case 388:
+#line 2073 "pir.y"
     { (yyval.ival) = OP_POW; ;}
     break;
 
-  case 388:
-#line 2104 "pir.y"
+  case 389:
+#line 2074 "pir.y"
     { (yyval.ival) = OP_DIV; ;}
     break;
 
-  case 389:
-#line 2105 "pir.y"
+  case 390:
+#line 2075 "pir.y"
     { (yyval.ival) = OP_FDIV; ;}
     break;
 
-  case 390:
-#line 2106 "pir.y"
+  case 391:
+#line 2076 "pir.y"
     { (yyval.ival) = OP_BOR; ;}
     break;
 
-  case 391:
-#line 2107 "pir.y"
+  case 392:
+#line 2077 "pir.y"
     { (yyval.ival) = OP_BAND; ;}
     break;
 
-  case 392:
-#line 2108 "pir.y"
+  case 393:
+#line 2078 "pir.y"
     { (yyval.ival) = OP_BXOR; ;}
     break;
 
-  case 393:
-#line 2109 "pir.y"
+  case 394:
+#line 2079 "pir.y"
     { (yyval.ival) = OP_CONCAT; ;}
     break;
 
-  case 394:
-#line 2110 "pir.y"
+  case 395:
+#line 2080 "pir.y"
     { (yyval.ival) = OP_SHR; ;}
     break;
 
-  case 395:
-#line 2111 "pir.y"
+  case 396:
+#line 2081 "pir.y"
     { (yyval.ival) = OP_SHL; ;}
     break;
 
-  case 396:
-#line 2112 "pir.y"
+  case 397:
+#line 2082 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 398:
-#line 2133 "pir.y"
+  case 399:
+#line 2103 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 407:
-#line 2149 "pir.y"
+  case 408:
+#line 2119 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 412:
-#line 2159 "pir.y"
+  case 413:
+#line 2129 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 413:
-#line 2163 "pir.y"
+  case 414:
+#line 2133 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 414:
-#line 2168 "pir.y"
+  case 415:
+#line 2138 "pir.y"
     {
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
                                       get_opinfo(yyscanner);
@@ -4670,7 +4624,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4674 "pirparser.c"
+#line 4628 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4884,7 +4838,7 @@
 }
 
 
-#line 2179 "pir.y"
+#line 2149 "pir.y"
 
 
 
@@ -5457,7 +5411,7 @@
                                 no need to do expensive string comparison; it must be true. */
             if (STREQ(s, "0") || STREQ(s, ".0") || STREQ(s, "0.") || STREQ(s, "0.0"))
                 return 0;
-            else  /* short string but not equal to "0.0" or a variant */
+            else
                 return 1;
         }
         else /* strlen > 3, so does not contain "0.0" or a variant */

Modified: branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.c
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.c	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.c	Fri Dec 19 09:29:23 2008
@@ -82,10 +82,12 @@
 assign_vanilla_register(NOTNULL(lexer_state * const lexer), symbol * const sym) {
     sym->info.color    = next_register(lexer, sym->info.type);
 
-    sym->info.interval = new_live_interval(lexer->lsr, lexer->stmt_counter, sym->info.type);
+    if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC)) {
+        sym->info.interval = new_live_interval(lexer->lsr, lexer->stmt_counter, sym->info.type);
 
-    /* set the reference of the interval to the symbol's color */
-    sym->info.interval->color = &sym->info.color;
+        /* set the reference of the interval to the symbol's color */
+        sym->info.interval->color = &sym->info.color;
+    }
 
     /* mark the interval, so that its register is not reused, if the :unique_reg
      * flag was set.
@@ -299,7 +301,8 @@
                 /* get a new reg from vanilla reg. allocator */
                 assign_vanilla_register(lexer, sym);
             else  /* update end point of interval */
-                sym->info.interval->endpoint = lexer->stmt_counter;
+                if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC))
+                    sym->info.interval->endpoint = lexer->stmt_counter;
 
 
             if (TEST_FLAG(lexer->flags, LEXER_FLAG_VERBOSE))
@@ -361,7 +364,9 @@
     while (iter != NULL) {
         if (iter->info.id.regno == regno) {
             /* update the end point of this register's live interval */
-            iter->info.interval->endpoint = lexer->stmt_counter;
+            if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC))
+                iter->info.interval->endpoint = lexer->stmt_counter;
+
             return iter;
         }
 
@@ -403,9 +408,12 @@
     reg->info.color = pasmregno;
 
     /* create a new live interval for this symbolic register */
-    reg->info.interval = new_live_interval(lexer->lsr, lexer->stmt_counter, type);
-    /* let the interval have a pointer to this symbolic register */
-    reg->info.interval->color = &reg->info.color;
+    if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC)) {
+        reg->info.interval = new_live_interval(lexer->lsr, lexer->stmt_counter, type);
+
+        /* let the interval have a pointer to this symbolic register */
+        reg->info.interval->color = &reg->info.color;
+    }
 
 
     /* link this register into the list of "colored" registers; each of
@@ -465,7 +473,9 @@
      */
     if (reg) {
         /* update end point of interval */
-        reg->info.interval->endpoint = lexer->stmt_counter;
+        if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC))
+            reg->info.interval->endpoint = lexer->stmt_counter;
+
         return reg->info.color;
     }
 
@@ -678,7 +688,7 @@
 
     /* no label found, emit an error message. */
     yypirerror(lexer->yyscanner, lexer, "in sub '%s': cannot find offset for label '%s'",
-             CURRENT_SUB(lexer)->sub_name, labelname);
+               CURRENT_SUB(lexer)->sub_name, labelname);
 
     return 0;
 }

Modified: branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.h
==============================================================================
--- branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.h	(original)
+++ branches/pdd09gc_part1/compilers/pirc/new/pirsymbol.h	Fri Dec 19 09:29:23 2008
@@ -33,6 +33,10 @@
 
 } syminfo;
 
+/* accessors for easy typing; X must be a pointer to a syminfo struct. */
+#define sym_name(X)     X->id.name
+#define sym_regno(X)    X->id.regno
+
 
 /* structure to represent a declared local variable or parameter */
 typedef struct symbol {

Modified: branches/pdd09gc_part1/config/gen/makefiles/pirc.in
==============================================================================
--- branches/pdd09gc_part1/config/gen/makefiles/pirc.in	(original)
+++ branches/pdd09gc_part1/config/gen/makefiles/pirc.in	Fri Dec 19 09:29:23 2008
@@ -65,7 +65,7 @@
 	@rpath_blib@ @libparrot_ldflags@ $(C_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC)
 
 new/pirparser$(O): new/pirparser.c new/pirparser.h
-new/pirlexer$(O): new/pirlexer.c src/pirlexer.h
+new/pirlexer$(O): new/pirlexer.c new/pirlexer.h
 new/pircompunit$(O): new/pircompunit.c new/pircompunit.h
 new/pircompiler$(O): new/pircompiler.c new/pircompiler.h
 new/pirsymbol$(O): new/pirsymbol.c new/pirsymbol.h
@@ -76,8 +76,7 @@
 new/bcgen$(O): new/bcgen.c new/bcgen.h
 
 test: all
-	podchecker $(SOURCES) \
-	doc/design.pod \
+	podchecker $(SOURCES) \	
 	README.pod
 	perl t/harness
 

Modified: branches/pdd09gc_part1/languages/lisp/cl.pir
==============================================================================
--- branches/pdd09gc_part1/languages/lisp/cl.pir	(original)
+++ branches/pdd09gc_part1/languages/lisp/cl.pir	Fri Dec 19 09:29:23 2008
@@ -311,7 +311,7 @@
   if k > leng goto BOUNDS
   if k < 0 goto BOUNDS
 
-  sstr = str[k]
+  sstr = substr str, k, 1
   retval = new 'LispString'
   retval = sstr
   goto DONE

Modified: branches/pdd09gc_part1/languages/perl6/docs/spectest-progress.csv
==============================================================================
--- branches/pdd09gc_part1/languages/perl6/docs/spectest-progress.csv	(original)
+++ branches/pdd09gc_part1/languages/perl6/docs/spectest-progress.csv	Fri Dec 19 09:29:23 2008
@@ -209,3 +209,5 @@
 "2008-12-15 00:00",33898,5101,0,383,1485,6969,9435,249
 "2008-12-16 00:00",33949,5139,0,357,1473,6969,9435,249
 "2008-12-17 00:00",34009,5170,0,350,1462,6982,9448,250
+"2008-12-18 00:00",34055,5213,0,350,1452,7015,9492,250
+"2008-12-19 00:00",34059,5213,0,350,1452,7015,9497,250

Modified: branches/pdd09gc_part1/tools/dev/mk_inno.pl
==============================================================================
--- branches/pdd09gc_part1/tools/dev/mk_inno.pl	(original)
+++ branches/pdd09gc_part1/tools/dev/mk_inno.pl	Fri Dec 19 09:29:23 2008
@@ -75,6 +75,7 @@
 SolidCompression=yes
 ChangesAssociations=yes
 PrivilegesRequired=none
+ChangesEnvironment=yes
 
 [Files]
 Source: "$prefix\\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
@@ -83,6 +84,9 @@
 
 [Icons]
 Name: "{group}\\{cm:UninstallProgram,parrot}"; Filename: "{uninstallexe}"
+
+[Registry]
+Root: HKLM; SubKey: "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\"; ValueType: string; ValueName: "Path"; ValueData: "{reg:HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\,Path};{app}\\bin"
 };
 
 close $OUT;



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About