develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r34926 - trunk/compilers/pirc/src

From:
kjs
Date:
January 4, 2009 09:17
Subject:
[svn:parrot] r34926 - trunk/compilers/pirc/src
Message ID:
20090104171629.9998BCB9F9@x12.develooper.com
Author: kjs
Date: Sun Jan  4 09:16:28 2009
New Revision: 34926

Modified:
   trunk/compilers/pirc/src/pir.y
   trunk/compilers/pirc/src/pircompunit.c
   trunk/compilers/pirc/src/pirop.c
   trunk/compilers/pirc/src/pirparser.c
   trunk/compilers/pirc/src/pirsymbol.c

Log:
[pirc] more .const stuff. This is complex.
a sub-local .const can generate an instruction to load the constant in a P reg:
set_p_pc PX,PMCCONST(Y). However, a .const outside of a .sub cannot, as there's no sub to emit the instruction into. Whenever a global .const is referenced, it must be loaded into a P reg first. How to implement such load-on-demand behavior?
Likewise, a .globalconst /can/ emit the loading instruction, but whenever it's referenced in another sub (which is allowed, being global), it must be loaded there as well. Again, this asks for inserting another instruction.

Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y	(original)
+++ trunk/compilers/pirc/src/pir.y	Sun Jan  4 09:16:28 2009
@@ -576,7 +576,7 @@
                   ;
 
 pir_chunk         : sub_def
-                  | const_decl
+                  | const_decl_chunk
                   | namespace_decl
                   | hll_specifier
                   | hll_mapping
@@ -1132,7 +1132,7 @@
                           }
                         }
                   | target '=' parrot_op keylist ',' parrot_op_args
-                        { /* XXX create a PMC const for $4 */
+                        {
                           unshift_operand(lexer, expr_from_key(lexer, $4));
                           unshift_operand(lexer, expr_from_target(lexer, $1));
                           if (check_op_args_for_symbols(lexer))
@@ -1204,11 +1204,11 @@
                         }
                   | target '=' parrot_op keylist
                         {
-                          /*   $P0 = foo ["bar"]
+                          /*   $P0 = foo ["bar"]    # PIR style
                            *
                            * could be PIR sugar for this PASM code:
                            *
-                           *    foo $P0, ["bar"]
+                           *    foo $P0, ["bar"]    # PASM style
                            *
                            * but as this sugar is already used for keyed access, the parser
                            * will not allow the former syntax; if there is an op C<foo>,
@@ -1999,7 +1999,10 @@
                       ;
 
 const_decl_stat       : const_stat "\n"
+                      ;
 
+const_decl_chunk      : const_decl
+                            { store_global_constant(lexer, $1); }
                       ;
 
 const_stat            : const_decl
@@ -2007,7 +2010,7 @@
                       ;
 
 const_decl            : ".const" const_tail
-                            { /*store_global_constant(lexer, $2); */}
+                            { $$ = $2; }
                       ;
 
 globalconst_decl      : ".globalconst" const_tail

Modified: trunk/compilers/pirc/src/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/src/pircompunit.c	(original)
+++ trunk/compilers/pirc/src/pircompunit.c	Sun Jan  4 09:16:28 2009
@@ -30,6 +30,7 @@
 #include "pirdefines.h"
 #include "pirpcc.h"
 #include "pirerr.h"
+#include "pirop.h"
 #include "bcgen.h"
 
 #include <stdio.h>
@@ -1385,17 +1386,17 @@
          * as second; its type is PMC_VAL, which is processed further in
          * piremit::emit_pbc_const_arg(), case PMC_VAL.
          */
+
+         /* XXX always emit this? I prefer load-on-demand */
+
         new_sub_instr(lexer, PARROT_OP_set_p_pc, "set_p_pc", 0);
         push_operand(lexer, expr_from_target(lexer, consttarg));
         push_operand(lexer, expr_from_const(lexer, value));
-        /*set_instrf(lexer, "set", "%T%C", consttarg, value);
-        get_opinfo(lexer->yyscanner);
-        */
+
         decl->name     = name;
         decl->type     = PMC_VAL;
         decl->val.pval = value->val.sval;
     }
-
     else if (value->type == INT_VAL) {
 
         STRING *intclassname = string_from_cstring(lexer->interp, "Integer", 7);
@@ -1418,6 +1419,7 @@
             push_operand(lexer, expr_from_target(lexer, consttarg));
             push_operand(lexer, expr_from_int(lexer, index));
 
+
             /* declaration of an Integer means it's a PMC, not an INT_TYPE */
             decl->name     = name;
             decl->type     = PMC_VAL;

Modified: trunk/compilers/pirc/src/pirop.c
==============================================================================
--- trunk/compilers/pirc/src/pirop.c	(original)
+++ trunk/compilers/pirc/src/pirop.c	Sun Jan  4 09:16:28 2009
@@ -58,7 +58,8 @@
     switch (e->type) {
         case EXPR_TARGET:
             return 2 + ((e->expr.t->key != NULL) /* if there's a key on this target ... */
-                       ? get_signature_length(e->expr.t->key->head->expr) + 1 /* ... get its length. */
+                                                 /* ... get its length. */
+                       ? get_signature_length(e->expr.t->key->head->expr) + 1
                        : 0);
         case EXPR_CONSTANT:
             return 3;    /* for _, 'k', 'c' */

Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c	(original)
+++ trunk/compilers/pirc/src/pirparser.c	Sun Jan  4 09:16:28 2009
@@ -815,16 +815,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  10
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1055
+#define YYLAST   1078
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  139
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  167
+#define YYNNTS  168
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  423
+#define YYNRULES  424
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  661
+#define YYNSTATES  662
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -913,44 +913,44 @@
      892,   894,   896,   898,   902,   906,   910,   914,   915,   917,
      919,   923,   925,   927,   931,   934,   936,   942,   948,   949,
      951,   953,   956,   960,   961,   963,   965,   968,   972,   973,
-     976,   978,   981,   982,   984,   988,   991,   993,   995,   998,
-    1001,  1006,  1011,  1016,  1021,  1023,  1025,  1027,  1029,  1031,
+     976,   978,   981,   982,   984,   988,   991,   993,   995,   997,
+    1000,  1003,  1008,  1013,  1018,  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,  1145,  1147,  1149,  1151,
-    1153,  1155,  1157,  1159,  1161,  1163,  1165,  1168,  1170,  1172,
-    1175,  1177,  1180,  1182,  1185,  1188,  1190,  1193,  1196,  1198,
-    1200,  1202,  1206,  1208
+    1153,  1155,  1157,  1159,  1161,  1163,  1165,  1167,  1170,  1172,
+    1174,  1177,  1179,  1182,  1184,  1187,  1190,  1192,  1195,  1198,
+    1200,  1202,  1204,  1208,  1210
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     140,     0,    -1,   116,   141,    -1,   115,   297,    -1,   142,
+     140,     0,    -1,   116,   141,    -1,   115,   298,    -1,   142,
      143,   142,    -1,    -1,    35,    -1,   144,    -1,   143,    35,
-     144,    -1,   167,    -1,   281,    -1,   163,    -1,   161,    -1,
+     144,    -1,   167,    -1,   280,    -1,   163,    -1,   161,    -1,
      162,    -1,   158,    -1,   159,    -1,   160,    -1,   145,    -1,
      146,    -1,   147,    -1,   108,    37,   114,    -1,   148,   119,
-     149,   120,    35,   152,   105,    -1,   104,   292,    -1,    -1,
-     150,    -1,   151,    -1,   150,   121,   151,    -1,   292,    -1,
+     149,   120,    35,   152,   105,    -1,   104,   293,    -1,    -1,
+     150,    -1,   151,    -1,   150,   121,   151,    -1,   293,    -1,
       -1,   153,    -1,   154,    -1,   153,   154,    -1,   155,    35,
-      -1,   156,    -1,   157,    -1,   107,   109,    -1,   106,   288,
+      -1,   156,    -1,   157,    -1,   107,   109,    -1,   106,   289,
      110,    -1,     5,    46,    -1,    10,    48,    -1,    11,    46,
       -1,    34,    46,   121,    46,    -1,     3,    46,    -1,     4,
       46,   122,    46,    -1,    13,   123,   164,   124,    -1,    -1,
      165,    -1,   166,    -1,   165,   125,   166,    -1,    46,    -1,
      169,   171,    35,   177,   185,   168,    -1,     7,    -1,     6,
-     170,    -1,   292,    -1,    46,    -1,    -1,   171,   172,    -1,
+     170,    -1,   293,    -1,    46,    -1,    -1,   171,   172,    -1,
       86,    -1,    83,    -1,    84,    -1,    85,    -1,    90,    -1,
       92,    -1,    93,    -1,    91,   173,    -1,    88,   119,   170,
      120,    -1,    87,   277,    -1,    89,   277,    -1,    94,   278,
       -1,    95,   278,    -1,    96,   278,    -1,   119,   174,   120,
       -1,    -1,   175,    -1,   176,    -1,   175,   121,   176,    -1,
-     292,    -1,    46,    -1,   212,    -1,   178,    -1,    -1,   178,
-     179,    -1,     8,   180,   181,    35,    -1,   288,   292,    -1,
+     293,    -1,    46,    -1,   212,    -1,   178,    -1,    -1,   178,
+     179,    -1,     8,   180,   181,    35,    -1,   289,   293,    -1,
       -1,   181,   182,    -1,   255,    -1,   183,    -1,   184,    -1,
      103,   119,   176,   120,    -1,    97,    -1,    -1,   185,   186,
       -1,    36,   187,    -1,   187,    -1,   202,    -1,   219,    -1,
@@ -962,48 +962,48 @@
      111,   190,    -1,   194,    -1,   126,   195,   127,    -1,    -1,
      195,   196,    -1,    35,    -1,   113,    -1,   112,    -1,   111,
      190,    -1,    35,    -1,   159,    35,    -1,     1,    35,    -1,
-      44,   289,    35,    -1,    28,   250,    35,    -1,   203,    35,
+      44,   290,    35,    -1,    28,   250,    35,    -1,   203,    35,
       -1,   204,   205,    -1,   214,    -1,    37,    -1,   206,    -1,
      208,    -1,    -1,   207,    -1,   209,    -1,   207,   121,   209,
-      -1,   212,   122,   284,    -1,   210,    -1,   212,    -1,   285,
-      -1,   292,    -1,   291,    -1,   211,    -1,   249,   212,    -1,
-     123,   213,   124,    -1,   284,    -1,   213,   125,   284,    -1,
-     289,   122,   204,   210,   121,   207,    -1,   289,   122,   204,
-     210,    -1,   289,   122,   204,   212,   121,   207,    -1,   217,
-      35,    -1,    37,    -1,   293,    -1,   289,   122,    48,    -1,
-     289,   122,    49,    -1,   289,   122,   286,    -1,   289,   122,
-     291,    -1,   289,   122,   216,    -1,   289,   122,   218,    -1,
-     289,   122,   204,   212,    -1,   289,   122,   293,   212,    -1,
-     289,   122,    50,   212,    -1,   289,   296,   284,    -1,   289,
-      72,    48,    -1,   289,    72,    49,    -1,   289,    73,    48,
-      -1,   289,    73,    49,    -1,   289,    72,   289,    -1,   289,
-      73,   289,    -1,   289,   122,   294,   284,    -1,   289,   122,
-     289,   295,   284,    -1,   293,   212,   122,   284,    -1,    50,
-     212,   122,   284,    -1,    48,   295,   289,    -1,    49,   295,
-     289,    -1,    46,   295,   289,    -1,    46,   295,    46,    -1,
-      48,   295,    48,    -1,    49,   295,    49,    -1,    48,   295,
-      49,    -1,    49,   295,    48,    -1,   220,    35,    -1,   223,
-      44,    37,    45,   292,    -1,   223,    44,    38,    45,   292,
-      -1,   223,    44,    39,    45,   292,    -1,   223,    44,    40,
-      45,   292,    -1,   223,    44,    41,    45,   292,    -1,   223,
-      44,    42,    45,   292,    -1,   223,    44,    43,    45,   292,
-      -1,   223,    44,    45,    45,   292,    -1,   223,    44,    44,
-      45,   292,    -1,   223,   285,   224,   292,    -1,   223,    44,
-      50,   224,   292,    -1,   223,    37,   224,   292,    -1,   223,
-     291,   224,   292,    -1,   223,    38,   224,   292,    -1,   223,
-      39,   224,   292,    -1,   223,    40,   224,   292,    -1,   223,
-      41,   224,   292,    -1,   223,    42,   224,   292,    -1,   223,
-      43,   224,   292,    -1,   223,    45,    45,   292,    -1,   223,
-      45,   121,   292,    -1,   223,    44,    45,   292,    -1,   223,
-      44,   121,   292,    -1,   223,   221,    45,   292,    -1,   289,
-     287,   284,    -1,    48,   287,   289,    -1,    49,   287,   289,
-      -1,    46,   287,   289,    -1,    48,   287,    48,    -1,    48,
-     287,    49,    -1,    49,   287,    48,    -1,    49,   287,    49,
-      -1,    46,   287,    46,    -1,    46,   287,   222,    -1,    48,
-     287,    46,    -1,    49,   287,    46,    -1,    48,    -1,    49,
+      -1,   212,   122,   285,    -1,   210,    -1,   212,    -1,   286,
+      -1,   293,    -1,   292,    -1,   211,    -1,   249,   212,    -1,
+     123,   213,   124,    -1,   285,    -1,   213,   125,   285,    -1,
+     290,   122,   204,   210,   121,   207,    -1,   290,   122,   204,
+     210,    -1,   290,   122,   204,   212,   121,   207,    -1,   217,
+      35,    -1,    37,    -1,   294,    -1,   290,   122,    48,    -1,
+     290,   122,    49,    -1,   290,   122,   287,    -1,   290,   122,
+     292,    -1,   290,   122,   216,    -1,   290,   122,   218,    -1,
+     290,   122,   204,   212,    -1,   290,   122,   294,   212,    -1,
+     290,   122,    50,   212,    -1,   290,   297,   285,    -1,   290,
+      72,    48,    -1,   290,    72,    49,    -1,   290,    73,    48,
+      -1,   290,    73,    49,    -1,   290,    72,   290,    -1,   290,
+      73,   290,    -1,   290,   122,   295,   285,    -1,   290,   122,
+     290,   296,   285,    -1,   294,   212,   122,   285,    -1,    50,
+     212,   122,   285,    -1,    48,   296,   290,    -1,    49,   296,
+     290,    -1,    46,   296,   290,    -1,    46,   296,    46,    -1,
+      48,   296,    48,    -1,    49,   296,    49,    -1,    48,   296,
+      49,    -1,    49,   296,    48,    -1,   220,    35,    -1,   223,
+      44,    37,    45,   293,    -1,   223,    44,    38,    45,   293,
+      -1,   223,    44,    39,    45,   293,    -1,   223,    44,    40,
+      45,   293,    -1,   223,    44,    41,    45,   293,    -1,   223,
+      44,    42,    45,   293,    -1,   223,    44,    43,    45,   293,
+      -1,   223,    44,    45,    45,   293,    -1,   223,    44,    44,
+      45,   293,    -1,   223,   286,   224,   293,    -1,   223,    44,
+      50,   224,   293,    -1,   223,    37,   224,   293,    -1,   223,
+     292,   224,   293,    -1,   223,    38,   224,   293,    -1,   223,
+      39,   224,   293,    -1,   223,    40,   224,   293,    -1,   223,
+      41,   224,   293,    -1,   223,    42,   224,   293,    -1,   223,
+      43,   224,   293,    -1,   223,    45,    45,   293,    -1,   223,
+      45,   121,   293,    -1,   223,    44,    45,   293,    -1,   223,
+      44,   121,   293,    -1,   223,   221,    45,   293,    -1,   290,
+     288,   285,    -1,    48,   288,   290,    -1,    49,   288,   290,
+      -1,    46,   288,   290,    -1,    48,   288,    48,    -1,    48,
+     288,    49,    -1,    49,   288,    48,    -1,    49,   288,    49,
+      -1,    46,   288,    46,    -1,    46,   288,   222,    -1,    48,
+     288,    46,    -1,    49,   288,    46,    -1,    48,    -1,    49,
       -1,    42,    -1,    43,    -1,    45,    -1,   121,    -1,    45,
-     292,    35,    -1,    12,   288,   227,    35,    -1,   228,    -1,
-     227,   121,   228,    -1,   292,   229,    -1,    -1,    97,    -1,
+     293,    35,    -1,    12,   289,   227,    35,    -1,   228,    -1,
+     227,   121,   228,    -1,   293,   229,    -1,    -1,    97,    -1,
        9,    46,   121,   249,    35,    -1,   232,    -1,   233,    -1,
      242,    -1,    26,    35,   234,   237,    35,   239,    27,    35,
       -1,    -1,   235,    -1,   236,    -1,   235,   236,    -1,    30,
@@ -1011,46 +1011,46 @@
       14,   249,    35,    15,   248,    -1,    -1,   121,   249,    -1,
       -1,   240,    -1,   241,    -1,   240,   241,    -1,    31,   253,
       35,    -1,   226,    -1,   243,    35,    -1,   250,   122,   244,
-      -1,   289,   122,   244,    -1,   244,    -1,   246,    -1,   245,
+      -1,   290,   122,   244,    -1,   244,    -1,   246,    -1,   245,
       -1,   249,   128,   248,   260,    -1,   247,   260,    -1,   249,
-      -1,    46,    -1,   292,    -1,    50,    -1,    52,    -1,    46,
-      -1,   292,    -1,    50,    -1,   119,   251,   120,    -1,    -1,
-     252,    -1,   253,    -1,   252,   121,   253,    -1,   289,   254,
-      -1,    46,    54,   289,    -1,    -1,   254,   255,    -1,   101,
+      -1,    46,    -1,   293,    -1,    50,    -1,    52,    -1,    46,
+      -1,   293,    -1,    50,    -1,   119,   251,   120,    -1,    -1,
+     252,    -1,   253,    -1,   252,   121,   253,    -1,   290,   254,
+      -1,    46,    54,   290,    -1,    -1,   254,   255,    -1,   101,
       -1,   102,    -1,    99,    -1,    98,   277,    -1,   257,    -1,
      258,    -1,   267,    -1,   259,    -1,   268,    -1,    18,   260,
       35,    -1,    33,   244,    35,    -1,    19,   260,    35,    -1,
      119,   261,   120,    -1,    -1,   262,    -1,   263,    -1,   262,
      121,   263,    -1,   265,    -1,   264,    -1,    46,    54,   266,
-      -1,   266,   275,    -1,   284,    -1,    24,    35,   272,    25,
+      -1,   266,   275,    -1,   285,    -1,    24,    35,   272,    25,
       35,    -1,    22,    35,   269,    23,    35,    -1,    -1,   270,
       -1,   271,    -1,   270,   271,    -1,    20,   265,    35,    -1,
       -1,   273,    -1,   274,    -1,   273,   274,    -1,    21,   265,
       35,    -1,    -1,   275,   276,    -1,   100,    -1,    98,   277,
-      -1,    -1,   278,    -1,   119,    46,   120,    -1,   280,    35,
-      -1,   281,    -1,   282,    -1,    17,   283,    -1,    16,   283,
-      -1,    38,   292,   122,    48,    -1,    39,   292,   122,    49,
-      -1,    41,   292,   122,    46,    -1,    46,   292,   122,   285,
-      -1,   289,    -1,   285,    -1,    48,    -1,    49,    -1,   286,
-      -1,    46,    -1,    47,    -1,    55,    -1,    56,    -1,    57,
-      -1,    58,    -1,    60,    -1,    59,    -1,    38,    -1,    39,
-      -1,    40,    -1,    41,    -1,   290,    -1,   291,    -1,   292,
-      -1,    50,    -1,    51,    -1,    53,    -1,    52,    -1,    37,
-      -1,   293,    -1,    42,    -1,    43,    -1,    45,    -1,    38,
-      -1,    39,    -1,    41,    -1,    40,    -1,    44,    -1,   129,
-      -1,   130,    -1,   131,    -1,   132,    -1,   129,    -1,   133,
-      -1,   134,    -1,   135,    -1,   136,    -1,   137,    -1,   131,
-      -1,   138,    -1,    68,    -1,    61,    -1,    62,    -1,    63,
-      -1,    65,    -1,    66,    -1,    64,    -1,    67,    -1,    56,
-      -1,    58,    -1,    57,    -1,    60,    -1,    59,    -1,    55,
-      -1,    74,    -1,    75,    -1,    76,    -1,    77,    -1,    80,
-      -1,    78,    -1,    79,    -1,    81,    -1,    82,    -1,    70,
-      -1,    71,    -1,    69,    -1,   298,   299,    -1,   142,    -1,
-     300,    -1,   299,   300,    -1,   301,    -1,   163,    35,    -1,
-     230,    -1,   159,    35,    -1,   145,    35,    -1,   189,    -1,
-      36,   302,    -1,   303,   302,    -1,   305,    -1,   197,    -1,
-     305,    -1,   304,   171,    36,    -1,   117,    -1,   204,   206,
-      35,    -1
+      -1,    -1,   278,    -1,   119,    46,   120,    -1,   281,    35,
+      -1,   282,    -1,   282,    -1,   283,    -1,    17,   284,    -1,
+      16,   284,    -1,    38,   293,   122,    48,    -1,    39,   293,
+     122,    49,    -1,    41,   293,   122,    46,    -1,    46,   293,
+     122,   286,    -1,   290,    -1,   286,    -1,    48,    -1,    49,
+      -1,   287,    -1,    46,    -1,    47,    -1,    55,    -1,    56,
+      -1,    57,    -1,    58,    -1,    60,    -1,    59,    -1,    38,
+      -1,    39,    -1,    40,    -1,    41,    -1,   291,    -1,   292,
+      -1,   293,    -1,    50,    -1,    51,    -1,    53,    -1,    52,
+      -1,    37,    -1,   294,    -1,    42,    -1,    43,    -1,    45,
+      -1,    38,    -1,    39,    -1,    41,    -1,    40,    -1,    44,
+      -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,   129,
+      -1,   133,    -1,   134,    -1,   135,    -1,   136,    -1,   137,
+      -1,   131,    -1,   138,    -1,    68,    -1,    61,    -1,    62,
+      -1,    63,    -1,    65,    -1,    66,    -1,    64,    -1,    67,
+      -1,    56,    -1,    58,    -1,    57,    -1,    60,    -1,    59,
+      -1,    55,    -1,    74,    -1,    75,    -1,    76,    -1,    77,
+      -1,    80,    -1,    78,    -1,    79,    -1,    81,    -1,    82,
+      -1,    70,    -1,    71,    -1,    69,    -1,   299,   300,    -1,
+     142,    -1,   301,    -1,   300,   301,    -1,   302,    -1,   163,
+      35,    -1,   230,    -1,   159,    35,    -1,   145,    35,    -1,
+     189,    -1,    36,   303,    -1,   304,   303,    -1,   306,    -1,
+     197,    -1,   306,    -1,   305,   171,    36,    -1,   117,    -1,
+     204,   206,    35,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1088,17 +1088,17 @@
     1863,  1864,  1865,  1868,  1873,  1884,  1891,  1896,  1897,  1901,
     1903,  1907,  1908,  1911,  1915,  1919,  1923,  1932,  1942,  1943,
     1948,  1950,  1955,  1960,  1961,  1965,  1967,  1971,  1977,  1978,
-    1982,  1984,  1992,  1993,  1997,  2001,  2005,  2006,  2009,  2013,
-    2017,  2019,  2021,  2023,  2031,  2032,  2036,  2037,  2038,  2041,
-    2042,  2045,  2046,  2047,  2048,  2049,  2050,  2053,  2054,  2055,
-    2056,  2064,  2067,  2068,  2079,  2080,  2081,  2082,  2086,  2087,
-    2090,  2091,  2092,  2093,  2094,  2095,  2096,  2097,  2100,  2101,
-    2102,  2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,
-    2114,  2115,  2116,  2117,  2118,  2119,  2120,  2121,  2122,  2123,
-    2124,  2125,  2126,  2127,  2133,  2134,  2135,  2136,  2137,  2138,
-    2139,  2140,  2141,  2142,  2143,  2144,  2156,  2164,  2168,  2169,
-    2172,  2173,  2174,  2175,  2176,  2177,  2180,  2182,  2183,  2186,
-    2187,  2190,  2194,  2199
+    1982,  1984,  1992,  1993,  1997,  2001,  2004,  2008,  2009,  2012,
+    2016,  2020,  2022,  2024,  2026,  2034,  2035,  2039,  2040,  2041,
+    2044,  2045,  2048,  2049,  2050,  2051,  2052,  2053,  2056,  2057,
+    2058,  2059,  2067,  2070,  2071,  2082,  2083,  2084,  2085,  2089,
+    2090,  2093,  2094,  2095,  2096,  2097,  2098,  2099,  2100,  2103,
+    2104,  2105,  2108,  2109,  2110,  2111,  2112,  2113,  2114,  2115,
+    2116,  2117,  2118,  2119,  2120,  2121,  2122,  2123,  2124,  2125,
+    2126,  2127,  2128,  2129,  2130,  2136,  2137,  2138,  2139,  2140,
+    2141,  2142,  2143,  2144,  2145,  2146,  2147,  2159,  2167,  2171,
+    2172,  2175,  2176,  2177,  2178,  2179,  2180,  2183,  2185,  2186,
+    2189,  2190,  2193,  2197,  2202
 };
 #endif
 
@@ -1170,12 +1170,12 @@
   "opt_yield_expressions", "yield_expressions", "yield_expression",
   "opt_return_expressions", "return_expressions", "return_expression",
   "arg_flags", "arg_flag", "opt_paren_string", "paren_string",
-  "const_decl_stat", "const_stat", "const_decl", "globalconst_decl",
-  "const_tail", "expression", "constant", "stringconst", "rel_op", "type",
-  "target", "symbol", "reg", "identifier", "keyword", "unop", "binop",
-  "augmented_op", "pasm_contents", "pasm_init", "pasm_lines", "pasm_line",
-  "pasm_statement", "opt_pasm_instruction", "pasm_sub_directive",
-  "pasm_sub_head", "pasm_instruction", 0
+  "const_decl_stat", "const_decl_chunk", "const_stat", "const_decl",
+  "globalconst_decl", "const_tail", "expression", "constant",
+  "stringconst", "rel_op", "type", "target", "symbol", "reg", "identifier",
+  "keyword", "unop", "binop", "augmented_op", "pasm_contents", "pasm_init",
+  "pasm_lines", "pasm_line", "pasm_statement", "opt_pasm_instruction",
+  "pasm_sub_directive", "pasm_sub_head", "pasm_instruction", 0
 };
 #endif
 
@@ -1236,17 +1236,17 @@
      257,   257,   257,   258,   258,   259,   260,   261,   261,   262,
      262,   263,   263,   264,   265,   266,   267,   268,   269,   269,
      270,   270,   271,   272,   272,   273,   273,   274,   275,   275,
-     276,   276,   277,   277,   278,   279,   280,   280,   281,   282,
-     283,   283,   283,   283,   284,   284,   285,   285,   285,   286,
-     286,   287,   287,   287,   287,   287,   287,   288,   288,   288,
-     288,   289,   290,   290,   291,   291,   291,   291,   292,   292,
-     293,   293,   293,   293,   293,   293,   293,   293,   294,   294,
-     294,   295,   295,   295,   295,   295,   295,   295,   295,   295,
-     295,   295,   295,   295,   295,   295,   295,   295,   295,   295,
-     295,   295,   295,   295,   296,   296,   296,   296,   296,   296,
-     296,   296,   296,   296,   296,   296,   297,   298,   299,   299,
-     300,   300,   300,   300,   300,   300,   301,   301,   301,   302,
-     302,   303,   304,   305
+     276,   276,   277,   277,   278,   279,   280,   281,   281,   282,
+     283,   284,   284,   284,   284,   285,   285,   286,   286,   286,
+     287,   287,   288,   288,   288,   288,   288,   288,   289,   289,
+     289,   289,   290,   291,   291,   292,   292,   292,   292,   293,
+     293,   294,   294,   294,   294,   294,   294,   294,   294,   295,
+     295,   295,   296,   296,   296,   296,   296,   296,   296,   296,
+     296,   296,   296,   296,   296,   296,   296,   296,   296,   296,
+     296,   296,   296,   296,   296,   297,   297,   297,   297,   297,
+     297,   297,   297,   297,   297,   297,   297,   298,   299,   300,
+     300,   301,   301,   301,   301,   301,   301,   302,   302,   302,
+     303,   303,   304,   305,   306
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1284,17 +1284,17 @@
        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,     2,     0,     1,     3,     2,     1,     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,     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,     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
@@ -1302,489 +1302,493 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     5,     5,     0,     6,   407,     3,     0,     2,     0,
+       0,     5,     5,     0,     6,   408,     3,     0,     2,     0,
        1,     0,     0,     0,     0,     0,   136,     0,     0,   111,
-     422,     0,    18,    19,     0,     0,     0,   415,   139,   412,
-     406,   408,   410,     0,    54,   418,     0,     0,     0,     0,
+     423,     0,    18,    19,     0,     0,     0,   416,   139,   413,
+     407,   409,   411,     0,    54,   419,     0,     0,     0,     0,
        0,     0,     5,     7,    17,    14,    15,    16,    12,    13,
-      11,     9,    54,    10,     0,    38,    39,    44,   128,   419,
-     416,   420,   358,   363,   364,   366,   365,   360,   361,   367,
-     362,    22,   359,     0,   113,     0,   414,    23,   413,   411,
-     339,   340,   336,   337,   354,   355,   357,   356,     0,     0,
-     140,   141,   144,   149,   145,     0,   146,   338,   148,   147,
-     409,   417,     0,    41,     0,    37,    53,    51,    52,     0,
-       0,     0,     0,   328,     0,     6,     4,     0,     0,    48,
-       0,    45,    46,    20,   111,   117,   118,   122,     0,   114,
-     115,   120,   110,     0,    24,    25,    27,   354,     0,   152,
-     335,   334,   351,   352,   353,   423,     0,   150,   421,    57,
-      58,    59,    56,   322,     0,   322,    60,     0,    61,    62,
-       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
-       8,    79,   274,     0,   273,    43,     0,   119,     0,   112,
-       0,     0,     0,   151,     0,   142,     0,    65,   323,     0,
-      66,    71,    63,    67,    68,    69,    42,     0,     0,     0,
-       0,    40,    90,    78,   238,    47,   124,   111,   126,   125,
-     121,   123,   116,    28,    26,   153,     0,     0,    76,     0,
-      72,    73,    77,    75,   330,   331,   332,   333,     0,     0,
-      80,   127,     0,     0,     0,    29,    30,     0,    33,    34,
-     324,    64,    70,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   136,   360,   361,   367,
-     362,   268,   354,   276,     0,    49,    91,    93,   107,   109,
-     105,   106,   108,   104,   103,    94,     0,   139,   135,   102,
-       0,    95,     0,     0,    96,    97,    98,   101,   239,   240,
-     241,     0,   262,   264,   263,     0,   267,     0,   100,   288,
-     289,   291,   290,   292,    99,     0,   326,   327,     0,   353,
-     359,   347,   348,   349,   350,    83,     0,     0,    35,    21,
-      31,    32,    74,   130,     0,   329,   297,     0,     0,   308,
-     313,   243,     0,     0,    92,     0,     0,     0,     0,     0,
-     277,   278,   282,   129,   133,   134,   137,   138,   145,   157,
-     188,   358,   363,   364,   366,   365,   360,   361,   367,   362,
-     339,   336,   337,     0,     0,     0,   352,   259,   266,     0,
-       0,   325,   405,   403,   404,     0,     0,   394,   395,   396,
-     397,   399,   400,   398,   401,   402,     0,     0,     0,     0,
-      82,    36,     0,   233,   236,   339,     0,   298,   299,   302,
-     301,   318,   305,   293,   295,     0,     0,   309,   310,     0,
-       0,   314,   315,     0,     0,   244,   245,   132,   294,   131,
-     231,     0,     0,   275,     0,   280,     0,   229,   230,     0,
+      11,     9,    54,    10,   326,     0,    38,    39,    44,   128,
+     420,   417,   421,   359,   364,   365,   367,   366,   361,   362,
+     368,   363,    22,   360,     0,   113,     0,   415,    23,   414,
+     412,   340,   341,   337,   338,   355,   356,   358,   357,     0,
+       0,   140,   141,   144,   149,   145,     0,   146,   339,   148,
+     147,   410,   418,     0,    41,     0,    37,    53,    51,    52,
+       0,     0,     0,     0,   329,     0,     6,     4,     0,     0,
+      48,     0,    45,    46,    20,   111,   117,   118,   122,     0,
+     114,   115,   120,   110,     0,    24,    25,    27,   355,     0,
+     152,   336,   335,   352,   353,   354,   424,     0,   150,   422,
+      57,    58,    59,    56,   322,     0,   322,    60,     0,    61,
+      62,     0,     0,     0,    55,     0,     0,     0,     0,     0,
+       0,     8,    79,   274,     0,   273,    43,     0,   119,     0,
+     112,     0,     0,     0,   151,     0,   142,     0,    65,   323,
+       0,    66,    71,    63,    67,    68,    69,    42,     0,     0,
+       0,     0,    40,    90,    78,   238,    47,   124,   111,   126,
+     125,   121,   123,   116,    28,    26,   153,     0,     0,    76,
+       0,    72,    73,    77,    75,   331,   332,   333,   334,     0,
+       0,    80,   127,     0,     0,     0,    29,    30,     0,    33,
+      34,   324,    64,    70,     0,     0,    50,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   136,   361,   362,
+     368,   363,   268,   355,   276,     0,    49,    91,    93,   107,
+     109,   105,   106,   108,   104,   103,    94,     0,   139,   135,
+     102,     0,    95,     0,     0,    96,    97,    98,   101,   239,
+     240,   241,     0,   262,   264,   263,     0,   267,     0,   100,
+     288,   289,   291,   290,   292,    99,     0,   327,   328,     0,
+     354,   360,   348,   349,   350,   351,    83,     0,     0,    35,
+      21,    31,    32,    74,   130,     0,   330,   297,     0,     0,
+     308,   313,   243,     0,     0,    92,     0,     0,     0,     0,
+       0,   277,   278,   282,   129,   133,   134,   137,   138,   145,
+     157,   188,   359,   364,   365,   367,   366,   361,   362,   368,
+     363,   340,   337,   338,     0,     0,     0,   353,   259,   266,
+       0,     0,   325,   406,   404,   405,     0,     0,   395,   396,
+     397,   398,   400,   401,   399,   402,   403,     0,     0,     0,
+       0,    82,    36,     0,   233,   236,   340,     0,   298,   299,
+     302,   301,   318,   305,   293,   295,     0,     0,   309,   310,
+       0,     0,   314,   315,     0,     0,   244,   245,   132,   294,
+     131,   231,     0,     0,   275,     0,   280,     0,   229,   230,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   341,
-     342,   343,   344,   346,   345,     0,     0,     0,     0,     0,
-       0,     0,   272,   270,   271,     0,   269,   260,   170,   171,
-     174,   172,   173,   175,   358,   268,   160,   161,   354,   368,
-     369,   370,     0,   164,   165,   261,   162,     0,   352,   359,
-       0,   169,     0,    81,    89,   322,   286,   284,   285,     0,
-      84,    86,    87,    85,   232,     0,   237,   235,     0,   296,
-       0,   304,     0,     0,   311,     0,     0,   316,     0,     0,
-       0,     0,     0,   246,   179,   281,   279,   283,   143,   200,
-     202,   203,   204,   205,   206,   207,     0,     0,     0,     0,
-       0,     0,     0,     0,   362,   210,     0,   211,   208,   209,
-     221,   225,   226,   222,   216,   223,   217,   218,   214,   224,
-     219,   220,   215,   212,   198,   213,   201,   265,   393,   388,
-     390,   389,   392,   391,   381,   382,   383,   386,   384,   385,
-     387,   380,   372,   378,   371,   373,   374,   375,   376,   377,
-     379,     0,     0,     0,   168,   155,   166,     0,   167,   176,
-     178,   287,     0,   234,   303,   300,   322,   320,   319,   312,
-     307,   317,   306,   247,     0,   251,   267,   249,   253,   189,
-     190,   191,   192,   193,   194,   195,   197,   196,   199,   183,
-     182,   184,   186,   180,   187,   185,   181,     0,     0,   177,
-       0,   321,     0,     0,   248,     0,   258,     0,   254,   255,
-     154,   156,    88,     0,   252,     0,     0,   256,   250,   257,
-     242
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     342,   343,   344,   345,   347,   346,     0,     0,     0,     0,
+       0,     0,     0,   272,   270,   271,     0,   269,   260,   170,
+     171,   174,   172,   173,   175,   359,   268,   160,   161,   355,
+     369,   370,   371,     0,   164,   165,   261,   162,     0,   353,
+     360,     0,   169,     0,    81,    89,   322,   286,   284,   285,
+       0,    84,    86,    87,    85,   232,     0,   237,   235,     0,
+     296,     0,   304,     0,     0,   311,     0,     0,   316,     0,
+       0,     0,     0,     0,   246,   179,   281,   279,   283,   143,
+     200,   202,   203,   204,   205,   206,   207,     0,     0,     0,
+       0,     0,     0,     0,     0,   363,   210,     0,   211,   208,
+     209,   221,   225,   226,   222,   216,   223,   217,   218,   214,
+     224,   219,   220,   215,   212,   198,   213,   201,   265,   394,
+     389,   391,   390,   393,   392,   382,   383,   384,   387,   385,
+     386,   388,   381,   373,   379,   372,   374,   375,   376,   377,
+     378,   380,     0,     0,     0,   168,   155,   166,     0,   167,
+     176,   178,   287,     0,   234,   303,   300,   322,   320,   319,
+     312,   307,   317,   306,   247,     0,   251,   267,   249,   253,
+     189,   190,   191,   192,   193,   194,   195,   197,   196,   199,
+     183,   182,   184,   186,   180,   187,   185,   181,     0,     0,
+     177,     0,   321,     0,     0,   248,     0,   258,     0,   254,
+     255,   154,   156,    88,     0,   252,     0,     0,   256,   250,
+     257,   242
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     3,     8,     5,    42,    43,    21,    22,    23,    24,
-     133,   134,   135,   234,   235,   236,   237,   238,   239,    45,
-      25,    47,    48,    49,    26,   120,   121,   122,    51,   265,
-      52,   107,   102,   163,   192,   219,   220,   221,   202,   203,
-     230,   315,   389,   500,   501,   502,   228,   266,   267,   268,
-      27,    75,   128,   129,   130,   131,   178,   211,    59,   271,
-     272,   273,   274,   275,   276,    28,   345,    89,    90,   347,
-      91,    92,    93,    94,   138,   278,   279,   483,   280,   484,
-     281,   282,   363,   553,   283,   429,   284,   285,   392,   393,
-     507,    29,   287,   288,   289,   414,   415,   416,   522,   644,
-     647,   648,   649,   290,   291,   292,   293,   294,   295,   465,
-      95,   297,   339,   340,   341,   425,   503,   298,   299,   300,
-     301,   327,   396,   397,   398,   399,   400,   401,   302,   303,
-     406,   407,   408,   410,   411,   412,   511,   608,   187,   188,
-     304,   305,    53,   307,   113,   402,   140,    97,   455,   316,
-     141,   142,   143,   144,    72,   490,   591,   387,     6,     7,
-      30,    31,    32,    60,    33,    34,    35
+     134,   135,   136,   235,   236,   237,   238,   239,   240,    45,
+      25,    47,    48,    49,    26,   121,   122,   123,    51,   266,
+      52,   108,   103,   164,   193,   220,   221,   222,   203,   204,
+     231,   316,   390,   501,   502,   503,   229,   267,   268,   269,
+      27,    76,   129,   130,   131,   132,   179,   212,    60,   272,
+     273,   274,   275,   276,   277,    28,   346,    90,    91,   348,
+      92,    93,    94,    95,   139,   279,   280,   484,   281,   485,
+     282,   283,   364,   554,   284,   430,   285,   286,   393,   394,
+     508,    29,   288,   289,   290,   415,   416,   417,   523,   645,
+     648,   649,   650,   291,   292,   293,   294,   295,   296,   466,
+      96,   298,   340,   341,   342,   426,   504,   299,   300,   301,
+     302,   328,   397,   398,   399,   400,   401,   402,   303,   304,
+     407,   408,   409,   411,   412,   413,   512,   609,   188,   189,
+     305,    53,   306,    54,   308,   114,   403,   141,    98,   456,
+     317,   142,   143,   144,   145,    73,   491,   592,   388,     6,
+       7,    30,    31,    32,    61,    33,    34,    35
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -596
+#define YYPACT_NINF -601
 static const yytype_int16 yypact[] =
 {
-     -67,    -7,    -7,    38,  -596,  -596,  -596,    20,  -596,    72,
-    -596,    -2,    36,    51,   -15,    88,  -596,   333,    67,    52,
-    -596,    95,  -596,  -596,    56,   120,   150,  -596,   610,  -596,
-      20,  -596,  -596,    88,  -596,  -596,   137,   166,   168,  1000,
-      97,   170,   187,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,   102,  -596,  -596,   178,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,   114,    33,   194,  -596,   333,  -596,  -596,
-    -596,  -596,  -596,  -596,   107,  -596,  -596,  -596,   757,   196,
-     111,  -596,  -596,  -596,  -596,   110,  -596,  -596,  -596,   113,
-    -596,  -596,   628,  -596,   112,  -596,  -596,  -596,  -596,   333,
-     333,   333,   333,  -596,   118,    72,  -596,   609,   360,  -596,
-     116,   117,  -596,  -596,    52,  -596,  -596,  -596,   121,   123,
-    -596,  -596,  -596,   125,   128,  -596,  -596,  -596,    -8,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,   610,  -596,  -596,  -596,
-    -596,  -596,  -596,   132,   134,   132,  -596,   135,  -596,  -596,
-     132,   132,   132,  -596,   209,   139,   152,   153,   154,   213,
-    -596,  -596,  -596,   246,  -596,  -596,   178,  -596,     0,  -596,
-      33,   247,   333,  -596,   757,  -596,   238,  -596,  -596,  1000,
-    -596,   226,  -596,  -596,  -596,  -596,  -596,   241,   242,   244,
-     115,  -596,  -596,   288,  -596,  -596,  -596,    52,  -596,  -596,
-    -596,  -596,  -596,   103,  -596,  -596,   177,   181,  -596,   183,
-     184,  -596,  -596,  -596,  -596,  -596,  -596,  -596,   276,   180,
-    -596,  -596,   180,   199,   205,   103,  -596,   289,  -596,  -596,
-    -596,  -596,  -596,   226,   290,  -596,   180,    97,   204,   204,
-     306,   307,   309,   227,   293,   527,   665,   779,   796,   590,
-     333,  -596,   -23,   966,   312,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,   315,   610,  -596,  -596,
-     316,  -596,   319,   813,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,   320,  -596,  -596,  -596,   204,   228,   235,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,   323,  -596,  -596,   693,   -55,
-     110,  -596,  -596,  -596,  -596,  -596,   333,   249,  -596,  -596,
-    -596,  -596,  -596,  -596,   333,  -596,   830,   325,   327,   344,
-     345,   335,   332,   346,  -596,   351,   353,   258,   314,   270,
-     271,  -596,  -596,  -596,  -596,  -596,  -596,  -596,   269,  -596,
-    -596,   -30,   -30,   -30,   -30,   -30,   -30,   -30,   455,   -19,
-     148,   148,   148,   348,   -30,   148,   -30,  -596,  -596,   408,
-     293,  -596,  -596,  -596,  -596,   898,   915,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,   149,   757,   272,    55,
-    -596,  -596,   -22,  -596,   322,   366,   301,   302,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,   757,   399,   344,  -596,   757,
-     400,   345,  -596,   757,    13,   335,  -596,  -596,  -596,  -596,
-    -596,   757,   590,  -596,   966,    80,   757,  -596,  -596,   333,
-     333,   333,   333,   333,   333,   333,   379,   381,   383,   387,
-     388,   389,   390,   392,  1010,   -30,   333,   333,   333,  -596,
-    -596,  -596,  -596,  -596,  -596,   847,   864,   881,   333,   333,
-     757,   333,  -596,  -596,  -596,   204,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,   429,   539,   623,   623,   -23,  -596,
-    -596,  -596,   610,  -596,  -596,  -596,  -596,   623,   403,   -14,
-     757,  -596,   757,  -596,  -596,   132,  -596,  -596,  -596,   321,
-    -596,  -596,  -596,  -596,  -596,   333,  -596,  -596,   757,  -596,
-     830,    34,   404,   421,  -596,   426,   427,  -596,   428,   360,
-     293,   360,   448,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,   333,   333,   333,   333,
-     333,   333,   333,   333,   333,  -596,   333,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,   983,   932,   949,  -596,   363,   364,   757,  -596,  -596,
-    -596,  -596,   226,  -596,  -596,  -596,   132,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,   451,   368,  -596,  -596,    31,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,   610,   610,  -596,
-     367,  -596,   475,   360,  -596,   966,  -596,   416,    31,  -596,
-     111,   111,  -596,   408,  -596,   456,   466,  -596,  -596,  -596,
-    -596
+       2,    -5,    -5,    33,  -601,  -601,  -601,    15,  -601,    54,
+    -601,    23,    37,    97,   -23,    94,  -601,  1024,    70,    35,
+    -601,   121,  -601,  -601,    57,   137,   152,  -601,   430,  -601,
+      15,  -601,  -601,    94,  -601,  -601,   165,   186,   187,  1014,
+     114,   188,   200,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,   115,  -601,  -601,   191,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,   126,    25,   206,  -601,  1024,  -601,
+    -601,  -601,  -601,  -601,  -601,   119,  -601,  -601,  -601,   759,
+     208,   124,  -601,  -601,  -601,  -601,   123,  -601,  -601,  -601,
+     125,  -601,  -601,   619,  -601,   127,  -601,  -601,  -601,  -601,
+    1024,  1024,  1024,  1024,  -601,   129,    54,  -601,   508,  1000,
+    -601,   128,   122,  -601,  -601,    35,  -601,  -601,  -601,   134,
+     139,  -601,  -601,  -601,   138,   144,  -601,  -601,  -601,    39,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,   430,  -601,  -601,
+    -601,  -601,  -601,  -601,   147,   148,   147,  -601,   149,  -601,
+    -601,   147,   147,   147,  -601,   223,   176,   177,   179,   180,
+     224,  -601,  -601,  -601,   268,  -601,  -601,   191,  -601,    -3,
+    -601,    25,   269,  1024,  -601,   759,  -601,   259,  -601,  -601,
+    1014,  -601,    36,  -601,  -601,  -601,  -601,  -601,   287,   288,
+     290,   132,  -601,  -601,   330,  -601,  -601,  -601,    35,  -601,
+    -601,  -601,  -601,  -601,    61,  -601,  -601,   221,   222,  -601,
+     227,   228,  -601,  -601,  -601,  -601,  -601,  -601,  -601,   530,
+     175,  -601,  -601,   175,   234,   239,    61,  -601,   313,  -601,
+    -601,  -601,  -601,  -601,    36,   315,  -601,   175,   114,   232,
+     232,   317,   320,   321,   238,   986,   634,   653,   776,   799,
+     396,  1024,  -601,    16,   952,   323,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,   324,   430,  -601,
+    -601,   325,  -601,   326,   816,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,   328,  -601,  -601,  -601,   232,   237,   245,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,   331,  -601,  -601,   713,
+     -36,   123,  -601,  -601,  -601,  -601,  -601,  1024,   258,  -601,
+    -601,  -601,  -601,  -601,  -601,  1024,  -601,   833,   334,   336,
+     352,   355,   347,   343,   345,  -601,   346,   348,   260,   332,
+     264,   266,  -601,  -601,  -601,  -601,  -601,  -601,  -601,   270,
+    -601,  -601,   -24,   -24,   -24,   -24,   -24,   -24,   -24,   289,
+     -16,   163,   163,   163,   349,   -24,   163,   -24,  -601,  -601,
+     456,   986,  -601,  -601,  -601,  -601,   699,   901,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,   244,   759,   271,
+      93,  -601,  -601,   -20,  -601,   291,   337,   277,   280,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,   759,   367,   352,  -601,
+     759,   377,   355,  -601,   759,   113,   347,  -601,  -601,  -601,
+    -601,  -601,   759,   396,  -601,   952,    87,   759,  -601,  -601,
+    1024,  1024,  1024,  1024,  1024,  1024,  1024,   358,   359,   363,
+     375,   376,   378,   379,   380,  1033,   -24,  1024,  1024,  1024,
+    -601,  -601,  -601,  -601,  -601,  -601,   850,   867,   884,  1024,
+    1024,   759,  1024,  -601,  -601,  -601,   232,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,   272,   142,   633,   633,    16,
+    -601,  -601,  -601,   430,  -601,  -601,  -601,  -601,   633,   387,
+     -19,   759,  -601,   759,  -601,  -601,   147,  -601,  -601,  -601,
+     293,  -601,  -601,  -601,  -601,  -601,  1024,  -601,  -601,   759,
+    -601,   833,    -9,   391,   392,  -601,   394,   409,  -601,   415,
+    1000,   986,  1000,   416,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  1024,  1024,  1024,
+    1024,  1024,  1024,  1024,  1024,  1024,  -601,  1024,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,   969,   918,   935,  -601,   333,   338,   759,  -601,
+    -601,  -601,  -601,    36,  -601,  -601,  -601,   147,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,   418,   339,  -601,  -601,    19,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,   430,   430,
+    -601,   335,  -601,   446,  1000,  -601,   952,  -601,   435,    19,
+    -601,   124,   124,  -601,   456,  -601,   428,   429,  -601,  -601,
+    -601,  -601
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -596,  -596,  -596,    16,  -596,   391,     5,  -596,  -596,  -596,
-    -596,  -596,   326,  -596,  -596,   275,  -596,  -596,  -596,  -596,
-       7,  -596,  -596,  -596,    11,  -596,  -596,   331,  -596,  -596,
-    -596,   324,   459,  -596,  -596,  -596,  -596,  -239,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -596,  -596,  -596,   257,  -596,
-    -203,  -100,  -596,  -596,   334,  -596,  -596,  -596,  -196,  -596,
-    -596,  -596,  -596,  -596,  -596,  -218,  -596,   240,  -498,  -596,
-     369,    49,  -596,   -93,  -596,  -596,  -596,  -596,  -596,  -596,
-    -596,  -596,  -596,  -596,  -596,  -285,  -596,  -595,  -596,    27,
-    -596,  -194,  -596,  -596,  -596,  -596,  -596,   119,  -596,  -596,
-    -596,  -596,  -130,  -596,  -596,  -237,  -596,  -596,    15,  -120,
-    -113,   287,  -596,  -596,  -418,  -596,   122,  -596,  -596,  -596,
-    -596,  -240,  -596,  -596,    40,  -596,  -295,    46,  -596,  -596,
-    -596,  -596,   141,  -596,  -596,   130,  -596,  -596,  -147,   -74,
-    -596,  -596,  -192,  -596,   295,   -81,   -27,   171,  -214,  -166,
-    -209,  -596,   -25,   -17,  -216,  -596,  -436,  -596,  -596,  -596,
-    -596,   526,  -596,   525,  -596,  -596,    32
+    -601,  -601,  -601,    45,  -601,   368,     5,  -601,  -601,  -601,
+    -601,  -601,   282,  -601,  -601,   249,  -601,  -601,  -601,  -601,
+      -1,  -601,  -601,  -601,     9,  -601,  -601,   309,  -601,  -601,
+    -601,   297,   436,  -601,  -601,  -601,  -601,  -239,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -601,  -601,  -601,   235,  -601,
+    -202,  -102,  -601,  -601,   311,  -601,  -601,  -601,  -193,  -601,
+    -601,  -601,  -601,  -601,  -601,  -217,  -601,   212,  -414,  -601,
+     360,    27,  -601,   -94,  -601,  -601,  -601,  -601,  -601,  -601,
+    -601,  -601,  -601,  -601,  -601,  -312,  -601,  -600,  -601,     6,
+    -601,  -157,  -601,  -601,  -601,  -601,  -601,    95,  -601,  -601,
+    -601,  -601,  -136,  -601,  -601,  -238,  -601,  -601,    -7,  -139,
+    -115,   263,  -601,  -601,  -416,  -601,    92,  -601,  -601,  -601,
+    -601,  -240,  -601,  -601,     8,  -601,  -249,    24,  -601,  -601,
+    -601,  -601,   130,  -601,  -601,   120,  -601,  -601,  -150,   -15,
+    -601,  -601,  -601,  -145,  -601,   286,   -82,   -27,   157,  -250,
+    -213,  -194,  -601,   -25,   -17,  -216,  -601,  -440,  -601,  -601,
+    -601,  -601,   505,  -601,   503,  -601,  -601,    53
 };
 
 /* 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 -359
+#define YYTABLE_NINF -360
 static const yytype_int16 yytable[] =
 {
-      71,    96,   147,    98,   322,   173,   526,   139,   190,   328,
-     277,    99,   310,   504,    44,   427,    46,   333,     9,   308,
-      50,  -159,   108,   646,   177,   269,   447,   519,     4,    11,
-      12,    13,   270,    14,   286,   206,   306,   277,    10,   310,
-     592,   593,   520,   246,    54,   521,   308,    61,     1,     2,
-     335,   597,   269,   646,   342,   368,    15,    16,   116,   270,
-     136,   286,   645,   306,  -273,    61,   317,   430,   431,   432,
-     433,   434,   435,  -273,   365,    36,    37,    38,    39,   459,
-     324,   461,    12,    13,    55,    14,   193,   194,   195,    40,
-     493,   428,   165,   166,   167,   168,  -274,    56,   222,   505,
-      88,   174,   448,   215,    73,  -274,    41,   231,    57,    88,
-     512,   207,   208,   209,   515,   296,   183,   184,   518,    96,
-      44,    98,    46,    58,    17,    16,    50,   210,    18,    99,
-      76,    19,   606,   467,   607,   109,   110,    20,   111,   650,
-     651,   296,   296,   112,   124,   125,   126,   456,   457,   485,
-     222,   460,   494,   495,   496,    78,   497,   498,   499,   127,
-     546,    80,    81,    82,    83,   136,   470,   473,   482,   337,
-     489,    74,   108,   227,   223,    77,    17,   487,   495,   496,
-      18,   497,   498,   103,   348,    79,   474,    63,    64,    65,
-      66,    67,    68,    69,    70,   475,    81,   476,   477,   478,
-      85,    86,    87,   449,   450,   451,   452,   453,   454,   232,
-     233,   309,   104,   525,   105,   342,   114,   388,   311,   312,
-     313,   314,   115,   118,   119,   567,   223,   655,   123,   132,
-    -274,   145,   146,    88,   164,   264,  -273,   174,   309,   169,
-     175,   179,   176,   336,   180,   181,   554,   558,   562,   182,
-      96,   186,    98,   189,   191,   196,   364,   296,   366,   201,
-      99,   197,   264,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,   218,   296,   198,   199,   200,   244,   479,   480,
-     481,   204,   213,   245,   216,    11,    12,    13,   246,   224,
-     226,   225,   247,    40,   248,   249,   229,   240,   250,   390,
-     251,   241,   252,   242,   253,   243,   491,   394,   318,   254,
-     319,    58,   255,   256,    63,    64,    65,    66,   257,   258,
-     259,   260,   261,   326,   321,   323,   262,    85,    86,    87,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   261,
-     524,   329,   330,   172,   331,   528,   263,   343,   601,    88,
-     344,   349,   466,   174,   350,   367,   369,   370,   371,   391,
-     403,   488,   404,   640,   405,   413,   409,   417,   422,   309,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   565,
-     421,   418,   630,   633,   636,   594,   419,    19,   420,   596,
-     423,   426,   424,   458,   492,   263,   598,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   614,   616,   617,   599,
-     172,   600,   529,   530,   531,   532,   533,   534,   535,   506,
-     508,   509,   513,   510,   536,   516,   537,   545,   538,   547,
-     548,   549,   539,   540,   541,   542,   342,   543,  -163,   609,
-     602,   563,   564,   656,   566,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,   462,    96,   610,    98,   463,   641,
-     464,   611,   612,   613,  -158,    99,  -136,  -136,  -136,  -136,
+      72,    97,   148,    99,   174,   323,   191,   140,    46,   527,
+     329,   100,   278,   311,    44,   505,  -159,   334,    50,   647,
+     318,   428,   109,   178,    11,    12,    13,   270,    14,   448,
+       4,   247,   207,    10,   325,   309,   271,   593,   594,   278,
+     311,   431,   432,   433,   434,   435,   436,     9,   598,   647,
+     646,    15,    16,   460,   270,   462,   369,    36,    37,    38,
+      39,   137,   309,   271,    12,    13,   336,    14,    62,    55,
+     343,    40,   287,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,   219,  -273,   307,    56,    62,   117,    41,   607,
+     366,   608,  -273,   166,   167,   168,   169,   429,   223,   287,
+      58,   506,   175,   216,    89,   449,   232,    74,   208,   209,
+     210,   307,   457,   458,   297,    46,   461,     1,     2,    17,
+      97,    44,    99,    18,   211,    50,    19,   520,   494,    59,
+     100,    16,    20,   468,   547,  -274,   125,   126,   127,    89,
+     297,   297,   521,    57,  -274,   522,   194,   195,   196,   486,
+     223,   128,   110,   111,    75,   112,    77,   513,    17,    89,
+     113,   516,    18,   184,   185,   519,   137,   233,   234,   338,
+     483,   490,    79,   109,   228,   224,    78,  -340,    81,    82,
+      83,    84,   471,   474,   349,   496,   497,    80,   498,   499,
+     495,   496,   497,   488,   498,   499,   500,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
+     582,   104,   310,   312,   313,   314,   315,   389,   450,   451,
+     452,   453,   454,   455,   651,   652,   568,   224,   265,   526,
+     656,   343,   105,   106,   115,   116,   119,   120,   175,   310,
+     124,   133,  -274,   146,   337,   147,    89,   177,  -273,   165,
+     170,    97,   176,    99,   180,   265,   297,   365,   182,   367,
+     181,   100,   555,   559,   563,   183,   187,   190,   192,   197,
+     202,   583,   297,   584,   585,   586,   587,   588,   589,   590,
+     591,   475,    64,    65,    66,    67,    68,    69,    70,    71,
+     476,    82,   477,   478,   479,    86,    87,    88,   198,   199,
+     391,   200,   201,   205,   214,   217,   492,  -158,   395,  -136,
     -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,  -136,
-    -136,  -136,  -136,   618,   637,   638,   642,   652,   394,   643,
-     653,   659,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   660,   174,   174,   174,   445,   170,   205,   214,   222,
-     320,   117,   334,   217,   212,   185,   639,   346,   657,   619,
-     620,   621,   622,   623,   624,   625,   626,   627,   244,   628,
-     654,   595,   603,   658,   523,   615,    11,    12,    13,   246,
-     332,   517,   325,   247,    40,   248,   249,   527,   514,   250,
-     605,   251,  -136,   252,   604,   253,   100,   486,   101,     0,
-     254,     0,    58,     0,   256,    63,    64,    65,    66,   257,
-     258,   259,   260,   261,  -339,     0,   446,   262,    85,    86,
-      87,     0,     0,     0,     0,   223,     0,     0,     0,     0,
-       0,     0,     0,     0,   568,   569,   570,   571,   572,   573,
-     574,   575,   576,   577,   578,   579,   580,   581,     0,     0,
-      96,    96,    98,    98,     0,     0,     0,     0,     0,     0,
-      99,    99,     0,     0,     0,     0,   174,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   466,     0,    19,     0,
-     137,    85,    86,    87,   171,     0,   263,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    80,    81,    82,    83,
-      84,    85,    86,    87,   148,     0,     0,     0,   582,     0,
-     583,   584,   585,   586,   587,   588,   589,   590,   568,   569,
-     570,   571,   572,   573,   574,   575,   576,   577,   578,   579,
-     580,   581,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,     0,     0,     0,     0,
-       0,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,     0,     0,     0,     0,     0,
-       0,     0,     0,    88,  -358,  -358,  -358,  -358,  -358,  -358,
-    -358,  -358,  -358,  -358,  -358,  -358,  -358,  -358,     0,     0,
-       0,     0,   582,     0,   583,   584,   585,   586,   587,   588,
-     589,   590,   372,   373,   374,   375,   376,   377,   378,   379,
-     380,   381,   382,   383,   384,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,  -358,     0,     0,  -358,     0,     0,
-       0,     0,     0,  -358,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    80,    81,    82,    83,   137,    85,    86,
-      87,     0,     0,     0,     0,   386,  -227,  -227,  -227,  -227,
+    -136,  -136,  -136,  -136,  -136,  -136,   437,   438,   439,   440,
+     441,   442,   443,   444,   445,   225,   227,   226,   230,   446,
+     525,   241,   242,   319,   320,   529,   602,   243,   322,   244,
+     324,   327,   330,   467,   175,   331,   332,   264,   344,   345,
+     350,   351,   489,   368,   641,   370,   372,   371,   392,   404,
+     310,   405,   406,   480,   481,   482,   410,   414,   418,   566,
+     419,   420,   422,   421,   424,   595,   423,   425,   507,   597,
+     514,   509,   427,   493,   459,  -136,   599,   510,   631,   634,
+     637,   511,   517,   537,   538,   615,   617,   618,   539,   600,
+     447,   601,   603,   530,   531,   532,   533,   534,   535,   536,
+     540,   541,  -163,   542,   543,   544,   610,   611,   546,   612,
+     548,   549,   550,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,   564,   565,   613,   567,   138,    86,    87,    88,
+     614,   619,   343,   643,   638,   653,    97,   642,    99,   639,
+     644,   654,   657,   660,   661,   215,   100,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    81,    82,    83,    84,
+      85,    86,    87,    88,   171,   321,   206,   218,   118,   395,
+     347,   335,   213,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,   463,   175,   175,   175,   464,   186,   465,   223,
+     596,   524,   604,   658,   616,   659,   640,   333,   528,   606,
+     620,   621,   622,   623,   624,   625,   626,   627,   628,   655,
+     629,   245,   518,   605,   326,   101,   102,   246,   515,    11,
+      12,    13,   247,   172,   487,     0,   248,    40,   249,   250,
+       0,     0,   251,    89,   252,     0,   253,     0,   254,     0,
+       0,     0,     0,   255,     0,    59,   256,   257,    64,    65,
+      66,    67,   258,   259,   260,   261,   262,     0,     0,     0,
+     263,    86,    87,    88,     0,     0,   224,     0,     0,     0,
+       0,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,     0,     0,     0,     0,     0,
+       0,    97,    97,    99,    99,     0,     0,     0,     0,     0,
+       0,   100,   100,     0,     0,     0,     0,   175,     0,     0,
+       0,     0,     0,     0,     0,   245,     0,   467,     0,     0,
+       0,    19,     0,    11,    12,    13,   247,     0,     0,   264,
+     248,    40,   249,   250,     0,   149,   251,     0,   252,     0,
+     253,     0,   254,     0,     0,     0,     0,   255,     0,    59,
+       0,   257,    64,    65,    66,    67,   258,   259,   260,   261,
+     262,     0,     0,     0,   263,    86,    87,    88,   569,   570,
+     571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
+     581,   582,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,     0,     0,     0,     0,
+       0,     0,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    19,     0,   469,   470,   138,
+      86,    87,    88,   264,     0,     0,     0,     0,     0,     0,
+       0,     0,   583,     0,   584,   585,   586,   587,   588,   589,
+     590,   591,  -359,     0,     0,  -359,     0,     0,     0,     0,
+       0,  -359,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,   385,   386,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    81,    82,    83,    84,   138,
+      86,    87,    88,  -227,  -227,  -227,  -227,  -227,  -227,  -227,
     -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,  -227,
-    -227,  -227,  -227,  -228,  -228,  -228,  -228,  -228,  -228,  -228,
+       0,     0,     0,     0,     0,   387,  -228,  -228,  -228,  -228,
     -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,  -228,
-     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
-      81,   361,   362,   137,    85,    86,    87,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   395,    81,    82,    83,
-     137,    85,    86,    87,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,   550,     0,   551,   552,   137,    85,    86,
-      87,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-     555,     0,   556,   557,   137,    85,    86,    87,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,   559,     0,   560,
-     561,   137,    85,    86,    87,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,     0,     0,   468,   469,   137,    85,
-      86,    87,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,     0,     0,   471,   472,   137,    85,    86,    87,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,     0,     0,
-     631,   632,   137,    85,    86,    87,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,     0,     0,   634,   635,   137,
-      85,    86,    87,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,   338,     0,     0,     0,   137,    85,    86,    87,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,   629,
-       0,     0,     0,   137,    85,    86,    87,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,   106,    62,    63,    64,
-      65,    66,    67,    68,    69,   544
+    -228,  -228,  -228,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,    82,   362,   363,   138,    86,    87,    88,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,   396,
+      82,    83,    84,   138,    86,    87,    88,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,   551,     0,   552,   553,
+     138,    86,    87,    88,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,   556,     0,   557,   558,   138,    86,    87,
+      88,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+     560,     0,   561,   562,   138,    86,    87,    88,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,     0,     0,   472,
+     473,   138,    86,    87,    88,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,     0,     0,   632,   633,   138,    86,
+      87,    88,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,     0,     0,   635,   636,   138,    86,    87,    88,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,   339,     0,
+       0,     0,   138,    86,    87,    88,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,   630,     0,     0,     0,   138,
+      86,    87,    88,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,   262,     0,     0,     0,   173,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,     0,     0,     0,     0,
+     173,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+     107,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      63,    64,    65,    66,    67,    68,    69,    70,   545
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,    28,    95,    28,   243,   118,   424,    88,   155,   249,
-     228,    28,   228,    35,     9,    45,     9,   254,     2,   228,
-       9,    35,    39,   618,   124,   228,    45,    14,    35,     9,
-      10,    11,   228,    13,   228,    35,   228,   255,     0,   255,
-     476,   477,    29,    12,    46,    32,   255,    15,   115,   116,
-     259,   487,   255,   648,   263,   295,    36,    37,    42,   255,
-      77,   255,    31,   255,   119,    33,   232,   352,   353,   354,
-     355,   356,   357,   128,   283,     3,     4,     5,     6,   364,
-     246,   366,    10,    11,    48,    13,   160,   161,   162,    17,
-      35,   121,   109,   110,   111,   112,   119,    46,   191,   121,
-     123,   118,   121,   184,    37,   128,    34,   207,   123,   123,
-     405,   111,   112,   113,   409,   228,   124,   125,   413,   146,
-     115,   146,   115,    35,   104,    37,   115,   127,   108,   146,
-      35,   111,    98,   370,   100,    38,    39,   117,    41,   637,
-     638,   254,   255,    46,   111,   112,   113,   361,   362,   386,
-     243,   365,    97,    98,    99,    35,   101,   102,   103,   126,
-     445,    46,    47,    48,    49,   182,   375,   376,   386,   262,
-     386,   119,   189,   200,   191,   119,   104,   386,    98,    99,
-     108,   101,   102,    46,   277,    35,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    55,    56,    57,    58,    59,    60,   106,
-     107,   228,    46,   422,    46,   424,    46,   310,    38,    39,
-      40,    41,    35,   121,    46,   465,   243,   645,   114,    35,
-     123,    35,   121,   123,   122,   228,   123,   254,   255,   121,
-     124,   120,   125,   260,   121,   120,   455,   456,   457,   121,
-     277,   119,   277,   119,   119,    46,   283,   370,   283,    46,
-     277,   122,   255,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,   386,   122,   122,   122,     1,   129,   130,
-     131,    35,    35,     7,    46,     9,    10,    11,    12,    48,
-      46,    49,    16,    17,    18,    19,     8,   120,    22,   316,
-      24,   120,    26,   120,    28,   121,   387,   324,   109,    33,
-     105,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,   119,    35,    35,    50,    51,    52,    53,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-     421,    35,    35,    50,    35,   426,   119,    35,   495,   123,
-      35,    35,   369,   370,    35,    35,   128,   122,    35,   110,
-      35,   386,    35,   602,    20,    30,    21,    35,    54,   386,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,   460,
-     122,    35,   591,   592,   593,   478,    35,   111,    35,   482,
-     120,   122,   121,    45,   122,   119,   489,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,   519,   520,   521,   490,
-      50,   492,   429,   430,   431,   432,   433,   434,   435,    97,
-      54,   120,    23,   121,    45,    25,    45,   444,    45,   446,
-     447,   448,    45,    45,    45,    45,   645,    45,    35,    35,
-     119,   458,   459,    27,   461,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,   482,    35,   482,    50,   606,
-      52,    35,    35,    35,    35,   482,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    35,   121,   121,    35,   120,   505,   121,
-      15,    35,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    35,   519,   520,   521,    50,   115,   176,   182,   602,
-     235,    52,   255,   189,   180,   146,   597,   277,   648,   536,
-     537,   538,   539,   540,   541,   542,   543,   544,     1,   546,
-     643,   482,   505,   653,   415,   520,     9,    10,    11,    12,
-     253,   411,   247,    16,    17,    18,    19,   425,   407,    22,
-     510,    24,   123,    26,   508,    28,    30,   386,    33,    -1,
-      33,    -1,    35,    -1,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    35,    -1,   121,    50,    51,    52,
-      53,    -1,    -1,    -1,    -1,   602,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    -1,    -1,
-     637,   638,   637,   638,    -1,    -1,    -1,    -1,    -1,    -1,
-     637,   638,    -1,    -1,    -1,    -1,   643,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,   653,    -1,   111,    -1,
-      50,    51,    52,    53,    35,    -1,   119,    37,    38,    39,
+      17,    28,    96,    28,   119,   244,   156,    89,     9,   425,
+     250,    28,   229,   229,     9,    35,    35,   255,     9,   619,
+     233,    45,    39,   125,     9,    10,    11,   229,    13,    45,
+      35,    12,    35,     0,   247,   229,   229,   477,   478,   256,
+     256,   353,   354,   355,   356,   357,   358,     2,   488,   649,
+      31,    36,    37,   365,   256,   367,   296,     3,     4,     5,
+       6,    78,   256,   256,    10,    11,   260,    13,    15,    46,
+     264,    17,   229,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,   119,   229,    48,    33,    42,    34,    98,
+     284,   100,   128,   110,   111,   112,   113,   121,   192,   256,
+     123,   121,   119,   185,   123,   121,   208,    37,   111,   112,
+     113,   256,   362,   363,   229,   116,   366,   115,   116,   104,
+     147,   116,   147,   108,   127,   116,   111,    14,    35,    35,
+     147,    37,   117,   371,   446,   119,   111,   112,   113,   123,
+     255,   256,    29,    46,   128,    32,   161,   162,   163,   387,
+     244,   126,    38,    39,   119,    41,    35,   406,   104,   123,
+      46,   410,   108,   124,   125,   414,   183,   106,   107,   263,
+     387,   387,    35,   190,   201,   192,   119,    35,    46,    47,
+      48,    49,   376,   377,   278,    98,    99,    35,   101,   102,
+      97,    98,    99,   387,   101,   102,   103,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    46,   229,    38,    39,    40,    41,   311,    55,    56,
+      57,    58,    59,    60,   638,   639,   466,   244,   229,   423,
+     646,   425,    46,    46,    46,    35,   121,    46,   255,   256,
+     114,    35,   123,    35,   261,   121,   123,   125,   123,   122,
+     121,   278,   124,   278,   120,   256,   371,   284,   120,   284,
+     121,   278,   456,   457,   458,   121,   119,   119,   119,    46,
+      46,   129,   387,   131,   132,   133,   134,   135,   136,   137,
+     138,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,   122,   122,
+     317,   122,   122,    35,    35,    46,   388,    35,   325,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    48,    46,    49,     8,    50,
+     422,   120,   120,   109,   105,   427,   496,   120,    35,   121,
+      35,   119,    35,   370,   371,    35,    35,   119,    35,    35,
+      35,    35,   387,    35,   603,   128,    35,   122,   110,    35,
+     387,    35,    20,   129,   130,   131,    21,    30,    35,   461,
+      35,    35,   122,    35,   120,   479,    54,   121,    97,   483,
+      23,    54,   122,   122,    45,   123,   490,   120,   592,   593,
+     594,   121,    25,    45,    45,   520,   521,   522,    45,   491,
+     121,   493,   119,   430,   431,   432,   433,   434,   435,   436,
+      45,    45,    35,    45,    45,    45,    35,    35,   445,    35,
+     447,   448,   449,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   459,   460,    35,   462,    50,    51,    52,    53,
+      35,    35,   646,    35,   121,   120,   483,   607,   483,   121,
+     121,    15,    27,    35,    35,   183,   483,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    36,    -1,    -1,    -1,   129,    -1,
-     131,   132,   133,   134,   135,   136,   137,   138,    55,    56,
+      50,    51,    52,    53,   116,   236,   177,   190,    52,   506,
+     278,   256,   181,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,   520,   521,   522,    50,   147,    52,   603,
+     483,   416,   506,   649,   521,   654,   598,   254,   426,   511,
+     537,   538,   539,   540,   541,   542,   543,   544,   545,   644,
+     547,     1,   412,   509,   248,    30,    33,     7,   408,     9,
+      10,    11,    12,    35,   387,    -1,    16,    17,    18,    19,
+      -1,    -1,    22,   123,    24,    -1,    26,    -1,    28,    -1,
+      -1,    -1,    -1,    33,    -1,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    -1,    -1,    -1,
+      50,    51,    52,    53,    -1,    -1,   603,    -1,    -1,    -1,
+      -1,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    -1,    -1,    -1,    -1,    -1,
+      -1,   638,   639,   638,   639,    -1,    -1,    -1,    -1,    -1,
+      -1,   638,   639,    -1,    -1,    -1,    -1,   644,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     1,    -1,   654,    -1,    -1,
+      -1,   111,    -1,     9,    10,    11,    12,    -1,    -1,   119,
+      16,    17,    18,    19,    -1,    36,    22,    -1,    24,    -1,
+      26,    -1,    28,    -1,    -1,    -1,    -1,    33,    -1,    35,
+      -1,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    -1,    -1,    -1,    50,    51,    52,    53,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    83,    84,    85,    86,    87,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    -1,    -1,    -1,    -1,
-      -1,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   123,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      -1,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,   111,    -1,    48,    49,    50,
+      51,    52,    53,   119,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   129,    -1,   131,   132,   133,   134,   135,   136,
-     137,   138,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   119,    -1,    -1,   122,    -1,    -1,
-      -1,    -1,    -1,   128,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    -1,    -1,   122,    37,    38,    39,    40,
+     137,   138,   119,    -1,    -1,   122,    -1,    -1,    -1,    -1,
+      -1,   128,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    -1,    -1,    -1,   122,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      40,    41,    42,    43,    44,    45,    46,    -1,    48,    49,
       50,    51,    52,    53,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    -1,    48,    49,    50,    51,    52,
       53,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    -1,    48,    49,    50,    51,    52,    53,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    -1,    48,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    48,
       49,    50,    51,    52,    53,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    -1,    -1,    48,    49,    50,    51,
       52,    53,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    -1,    -1,    48,    49,    50,    51,    52,    53,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    -1,    -1,
-      48,    49,    50,    51,    52,    53,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    -1,    -1,    48,    49,    50,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+      -1,    -1,    50,    51,    52,    53,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    -1,    -1,    -1,    50,
       51,    52,    53,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    -1,    -1,    -1,    50,    51,    52,    53,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      -1,    -1,    -1,    50,    51,    52,    53,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    37,    38,    39,
-      40,    41,    42,    43,    44,    45
+      44,    45,    46,    -1,    -1,    -1,    50,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    -1,
+      50,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      37,    38,    39,    40,    41,    42,    43,    44,    45
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   115,   116,   140,    35,   142,   297,   298,   141,   142,
+       0,   115,   116,   140,    35,   142,   298,   299,   141,   142,
        0,     9,    10,    11,    13,    36,    37,   104,   108,   111,
      117,   145,   146,   147,   148,   159,   163,   189,   204,   230,
-     299,   300,   301,   303,   304,   305,     3,     4,     5,     6,
+     300,   301,   302,   304,   305,   306,     3,     4,     5,     6,
       17,    34,   143,   144,   145,   158,   159,   160,   161,   162,
-     163,   167,   169,   281,    46,    48,    46,   123,    35,   197,
-     302,   305,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,   292,   293,    37,   119,   190,    35,   119,    35,    35,
-      46,    47,    48,    49,    50,    51,    52,    53,   123,   206,
-     207,   209,   210,   211,   212,   249,   285,   286,   291,   292,
-     300,   302,   171,    46,    46,    46,    46,   170,   292,    38,
-      39,    41,    46,   283,    46,    35,   142,   171,   121,    46,
-     164,   165,   166,   114,   111,   112,   113,   126,   191,   192,
-     193,   194,    35,   149,   150,   151,   292,    50,   213,   284,
-     285,   289,   290,   291,   292,    35,   121,   212,    36,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,   172,   122,   292,   292,   292,   292,   121,
-     144,    35,    50,   249,   292,   124,   125,   190,   195,   120,
-     121,   120,   121,   124,   125,   209,   119,   277,   278,   119,
-     277,   119,   173,   278,   278,   278,    46,   122,   122,   122,
-     122,    46,   177,   178,    35,   166,    35,   111,   112,   113,
-     127,   196,   193,    35,   151,   284,    46,   170,    46,   174,
-     175,   176,   212,   292,    48,    49,    46,   285,   185,     8,
-     179,   190,   106,   107,   152,   153,   154,   155,   156,   157,
-     120,   120,   120,   121,     1,     7,    12,    16,    18,    19,
-      22,    24,    26,    28,    33,    36,    37,    42,    43,    44,
-      45,    46,    50,   119,   159,   168,   186,   187,   188,   189,
-     197,   198,   199,   200,   201,   202,   203,   204,   214,   215,
-     217,   219,   220,   223,   225,   226,   230,   231,   232,   233,
-     242,   243,   244,   245,   246,   247,   249,   250,   256,   257,
-     258,   259,   267,   268,   279,   280,   281,   282,   289,   292,
-     293,    38,    39,    40,    41,   180,   288,   288,   109,   105,
-     154,    35,   176,    35,   288,   283,   119,   260,   260,    35,
-      35,    35,   250,   244,   187,   289,   292,   212,    46,   251,
-     252,   253,   289,    35,    35,   205,   206,   208,   212,    35,
-      35,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    48,    49,   221,   285,   289,   291,    35,   260,   128,
-     122,    35,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,   122,   296,   212,   181,
-     292,   110,   227,   228,   292,    46,   261,   262,   263,   264,
-     265,   266,   284,    35,    35,    20,   269,   270,   271,    21,
-     272,   273,   274,    30,   234,   235,   236,    35,    35,    35,
-      35,   122,    54,   120,   121,   254,   122,    45,   121,   224,
-     224,   224,   224,   224,   224,   224,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    50,   121,    45,   121,    55,
-      56,    57,    58,    59,    60,   287,   287,   287,    45,   224,
-     287,   224,    46,    50,    52,   248,   292,   244,    48,    49,
-     289,    48,    49,   289,    37,    46,    48,    49,    50,   129,
-     130,   131,   204,   216,   218,   244,   286,   289,   291,   293,
-     294,   284,   122,    35,    97,    98,    99,   101,   102,   103,
-     182,   183,   184,   255,    35,   121,    97,   229,    54,   120,
-     121,   275,   265,    23,   271,   265,    25,   274,   265,    14,
-      29,    32,   237,   236,   284,   289,   253,   255,   284,   292,
-     292,   292,   292,   292,   292,   292,    45,    45,    45,    45,
-      45,    45,    45,    45,    45,   292,   224,   292,   292,   292,
-      46,    48,    49,   222,   289,    46,    48,    49,   289,    46,
-      48,    49,   289,   292,   292,   284,   292,   260,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,   129,   131,   132,   133,   134,   135,   136,   137,
-     138,   295,   295,   295,   212,   210,   212,   295,   212,   284,
-     284,   277,   119,   228,   266,   263,    98,   100,   276,    35,
-      35,    35,    35,    35,   249,   247,   249,   249,    35,   292,
-     292,   292,   292,   292,   292,   292,   292,   292,   292,    46,
-     289,    48,    49,   289,    48,    49,   289,   121,   121,   284,
-     176,   277,    35,   121,   238,    31,   226,   239,   240,   241,
-     207,   207,   120,    15,   249,   253,    27,   241,   248,    35,
-      35
+     163,   167,   169,   280,   282,    46,    48,    46,   123,    35,
+     197,   303,   306,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   293,   294,    37,   119,   190,    35,   119,    35,
+      35,    46,    47,    48,    49,    50,    51,    52,    53,   123,
+     206,   207,   209,   210,   211,   212,   249,   286,   287,   292,
+     293,   301,   303,   171,    46,    46,    46,    46,   170,   293,
+      38,    39,    41,    46,   284,    46,    35,   142,   171,   121,
+      46,   164,   165,   166,   114,   111,   112,   113,   126,   191,
+     192,   193,   194,    35,   149,   150,   151,   293,    50,   213,
+     285,   286,   290,   291,   292,   293,    35,   121,   212,    36,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,   172,   122,   293,   293,   293,   293,
+     121,   144,    35,    50,   249,   293,   124,   125,   190,   195,
+     120,   121,   120,   121,   124,   125,   209,   119,   277,   278,
+     119,   277,   119,   173,   278,   278,   278,    46,   122,   122,
+     122,   122,    46,   177,   178,    35,   166,    35,   111,   112,
+     113,   127,   196,   193,    35,   151,   285,    46,   170,    46,
+     174,   175,   176,   212,   293,    48,    49,    46,   286,   185,
+       8,   179,   190,   106,   107,   152,   153,   154,   155,   156,
+     157,   120,   120,   120,   121,     1,     7,    12,    16,    18,
+      19,    22,    24,    26,    28,    33,    36,    37,    42,    43,
+      44,    45,    46,    50,   119,   159,   168,   186,   187,   188,
+     189,   197,   198,   199,   200,   201,   202,   203,   204,   214,
+     215,   217,   219,   220,   223,   225,   226,   230,   231,   232,
+     233,   242,   243,   244,   245,   246,   247,   249,   250,   256,
+     257,   258,   259,   267,   268,   279,   281,   282,   283,   290,
+     293,   294,    38,    39,    40,    41,   180,   289,   289,   109,
+     105,   154,    35,   176,    35,   289,   284,   119,   260,   260,
+      35,    35,    35,   250,   244,   187,   290,   293,   212,    46,
+     251,   252,   253,   290,    35,    35,   205,   206,   208,   212,
+      35,    35,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    48,    49,   221,   286,   290,   292,    35,   260,
+     128,   122,    35,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,   122,   297,   212,
+     181,   293,   110,   227,   228,   293,    46,   261,   262,   263,
+     264,   265,   266,   285,    35,    35,    20,   269,   270,   271,
+      21,   272,   273,   274,    30,   234,   235,   236,    35,    35,
+      35,    35,   122,    54,   120,   121,   254,   122,    45,   121,
+     224,   224,   224,   224,   224,   224,   224,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    50,   121,    45,   121,
+      55,    56,    57,    58,    59,    60,   288,   288,   288,    45,
+     224,   288,   224,    46,    50,    52,   248,   293,   244,    48,
+      49,   290,    48,    49,   290,    37,    46,    48,    49,    50,
+     129,   130,   131,   204,   216,   218,   244,   287,   290,   292,
+     294,   295,   285,   122,    35,    97,    98,    99,   101,   102,
+     103,   182,   183,   184,   255,    35,   121,    97,   229,    54,
+     120,   121,   275,   265,    23,   271,   265,    25,   274,   265,
+      14,    29,    32,   237,   236,   285,   290,   253,   255,   285,
+     293,   293,   293,   293,   293,   293,   293,    45,    45,    45,
+      45,    45,    45,    45,    45,    45,   293,   224,   293,   293,
+     293,    46,    48,    49,   222,   290,    46,    48,    49,   290,
+      46,    48,    49,   290,   293,   293,   285,   293,   260,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,   129,   131,   132,   133,   134,   135,   136,
+     137,   138,   296,   296,   296,   212,   210,   212,   296,   212,
+     285,   285,   277,   119,   228,   266,   263,    98,   100,   276,
+      35,    35,    35,    35,    35,   249,   247,   249,   249,    35,
+     293,   293,   293,   293,   293,   293,   293,   293,   293,   293,
+      46,   290,    48,    49,   290,    48,    49,   290,   121,   121,
+     285,   176,   277,    35,   121,   238,    31,   226,   239,   240,
+     241,   207,   207,   120,    15,   249,   253,    27,   241,   248,
+      35,    35
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3192,7 +3196,7 @@
 
   case 156:
 #line 1135 "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)));
                           if (check_op_args_for_symbols(lexer))
@@ -3276,11 +3280,11 @@
   case 166:
 #line 1206 "pir.y"
     {
-                          /*   $P0 = foo ["bar"]
+                          /*   $P0 = foo ["bar"]    # PIR style
                            *
                            * could be PIR sugar for this PASM code:
                            *
-                           *    foo $P0, ["bar"]
+                           *    foo $P0, ["bar"]    # PASM style
                            *
                            * but as this sugar is already used for keyed access, the parser
                            * will not allow the former syntax; if there is an op C<foo>,
@@ -4318,123 +4322,128 @@
     { (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
     break;
 
-  case 328:
-#line 2010 "pir.y"
-    { /*store_global_constant(lexer, $2); */;}
+  case 326:
+#line 2005 "pir.y"
+    { store_global_constant(lexer, (yyvsp[(1) - (1)].cdec)); ;}
     break;
 
   case 329:
-#line 2014 "pir.y"
-    { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
+#line 2013 "pir.y"
+    { (yyval.cdec) = (yyvsp[(2) - (2)].cdec); ;}
     break;
 
   case 330:
-#line 2018 "pir.y"
-    { (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
+#line 2017 "pir.y"
+    { store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
     break;
 
   case 331:
-#line 2020 "pir.y"
-    { (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
+#line 2021 "pir.y"
+    { (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
     break;
 
   case 332:
-#line 2022 "pir.y"
-    { (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
+#line 2023 "pir.y"
+    { (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
     break;
 
   case 333:
-#line 2024 "pir.y"
-    { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
+#line 2025 "pir.y"
+    { (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
     break;
 
   case 334:
-#line 2031 "pir.y"
-    { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
+#line 2027 "pir.y"
+    { (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
     break;
 
   case 335:
-#line 2032 "pir.y"
-    { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
+#line 2034 "pir.y"
+    { (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
     break;
 
   case 336:
-#line 2036 "pir.y"
-    { (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
+#line 2035 "pir.y"
+    { (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
     break;
 
   case 337:
-#line 2037 "pir.y"
-    { (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
+#line 2039 "pir.y"
+    { (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 339:
-#line 2041 "pir.y"
-    { (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
+  case 338:
+#line 2040 "pir.y"
+    { (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
     break;
 
   case 340:
-#line 2042 "pir.y"
-    { (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
+#line 2044 "pir.y"
+    { (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
     break;
 
   case 341:
 #line 2045 "pir.y"
-    { (yyval.ival) = OP_NE; ;}
+    { (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
     break;
 
   case 342:
-#line 2046 "pir.y"
-    { (yyval.ival) = OP_EQ; ;}
+#line 2048 "pir.y"
+    { (yyval.ival) = OP_NE; ;}
     break;
 
   case 343:
-#line 2047 "pir.y"
-    { (yyval.ival) = OP_LT; ;}
+#line 2049 "pir.y"
+    { (yyval.ival) = OP_EQ; ;}
     break;
 
   case 344:
-#line 2048 "pir.y"
-    { (yyval.ival) = OP_LE; ;}
+#line 2050 "pir.y"
+    { (yyval.ival) = OP_LT; ;}
     break;
 
   case 345:
-#line 2049 "pir.y"
-    { (yyval.ival) = OP_GE; ;}
+#line 2051 "pir.y"
+    { (yyval.ival) = OP_LE; ;}
     break;
 
   case 346:
-#line 2050 "pir.y"
-    { (yyval.ival) = OP_GT; ;}
+#line 2052 "pir.y"
+    { (yyval.ival) = OP_GE; ;}
     break;
 
   case 347:
 #line 2053 "pir.y"
-    { (yyval.ival) = INT_TYPE; ;}
+    { (yyval.ival) = OP_GT; ;}
     break;
 
   case 348:
-#line 2054 "pir.y"
-    { (yyval.ival) = NUM_TYPE; ;}
+#line 2056 "pir.y"
+    { (yyval.ival) = INT_TYPE; ;}
     break;
 
   case 349:
-#line 2055 "pir.y"
-    { (yyval.ival) = PMC_TYPE; ;}
+#line 2057 "pir.y"
+    { (yyval.ival) = NUM_TYPE; ;}
     break;
 
   case 350:
-#line 2056 "pir.y"
-    { (yyval.ival) = STRING_TYPE; ;}
+#line 2058 "pir.y"
+    { (yyval.ival) = PMC_TYPE; ;}
     break;
 
   case 351:
-#line 2064 "pir.y"
+#line 2059 "pir.y"
+    { (yyval.ival) = STRING_TYPE; ;}
+    break;
+
+  case 352:
+#line 2067 "pir.y"
     { set_curtarget(lexer, (yyvsp[(1) - (1)].targ));  ;}
     break;
 
-  case 353:
-#line 2068 "pir.y"
+  case 354:
+#line 2071 "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) {
@@ -4446,278 +4455,278 @@
                          ;}
     break;
 
-  case 354:
-#line 2079 "pir.y"
+  case 355:
+#line 2082 "pir.y"
     { (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 355:
-#line 2080 "pir.y"
+  case 356:
+#line 2083 "pir.y"
     { (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 356:
-#line 2081 "pir.y"
+  case 357:
+#line 2084 "pir.y"
     { (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival));    ;}
     break;
 
-  case 357:
-#line 2082 "pir.y"
+  case 358:
+#line 2085 "pir.y"
     { (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
     break;
 
-  case 360:
-#line 2090 "pir.y"
-    { (yyval.sval) = "if"; ;}
-    break;
-
   case 361:
-#line 2091 "pir.y"
-    { (yyval.sval) = "unless"; ;}
+#line 2093 "pir.y"
+    { (yyval.sval) = "if"; ;}
     break;
 
   case 362:
-#line 2092 "pir.y"
-    { (yyval.sval) = "goto"; ;}
+#line 2094 "pir.y"
+    { (yyval.sval) = "unless"; ;}
     break;
 
   case 363:
-#line 2093 "pir.y"
-    { (yyval.sval) = "int"; ;}
+#line 2095 "pir.y"
+    { (yyval.sval) = "goto"; ;}
     break;
 
   case 364:
-#line 2094 "pir.y"
-    { (yyval.sval) = "num"; ;}
+#line 2096 "pir.y"
+    { (yyval.sval) = "int"; ;}
     break;
 
   case 365:
-#line 2095 "pir.y"
-    { (yyval.sval) = "string"; ;}
+#line 2097 "pir.y"
+    { (yyval.sval) = "num"; ;}
     break;
 
   case 366:
-#line 2096 "pir.y"
-    { (yyval.sval) = "pmc"; ;}
+#line 2098 "pir.y"
+    { (yyval.sval) = "string"; ;}
     break;
 
   case 367:
-#line 2097 "pir.y"
-    { (yyval.sval) = "null"; ;}
+#line 2099 "pir.y"
+    { (yyval.sval) = "pmc"; ;}
     break;
 
   case 368:
 #line 2100 "pir.y"
-    { (yyval.sval) = "neg"; ;}
+    { (yyval.sval) = "null"; ;}
     break;
 
   case 369:
-#line 2101 "pir.y"
-    { (yyval.sval) = "not"; ;}
+#line 2103 "pir.y"
+    { (yyval.sval) = "neg"; ;}
     break;
 
   case 370:
-#line 2102 "pir.y"
-    { (yyval.sval) = "bnot"; ;}
+#line 2104 "pir.y"
+    { (yyval.sval) = "not"; ;}
     break;
 
   case 371:
 #line 2105 "pir.y"
-    { (yyval.ival) = OP_ADD; ;}
+    { (yyval.sval) = "bnot"; ;}
     break;
 
   case 372:
-#line 2106 "pir.y"
-    { (yyval.ival) = OP_SUB; ;}
+#line 2108 "pir.y"
+    { (yyval.ival) = OP_ADD; ;}
     break;
 
   case 373:
-#line 2107 "pir.y"
-    { (yyval.ival) = OP_DIV; ;}
+#line 2109 "pir.y"
+    { (yyval.ival) = OP_SUB; ;}
     break;
 
   case 374:
-#line 2108 "pir.y"
-    { (yyval.ival) = OP_MUL; ;}
+#line 2110 "pir.y"
+    { (yyval.ival) = OP_DIV; ;}
     break;
 
   case 375:
-#line 2109 "pir.y"
-    { (yyval.ival) = OP_MOD; ;}
+#line 2111 "pir.y"
+    { (yyval.ival) = OP_MUL; ;}
     break;
 
   case 376:
-#line 2110 "pir.y"
-    { (yyval.ival) = OP_BOR; ;}
+#line 2112 "pir.y"
+    { (yyval.ival) = OP_MOD; ;}
     break;
 
   case 377:
-#line 2111 "pir.y"
-    { (yyval.ival) = OP_BAND; ;}
+#line 2113 "pir.y"
+    { (yyval.ival) = OP_BOR; ;}
     break;
 
   case 378:
-#line 2112 "pir.y"
-    { (yyval.ival) = OP_BXOR; ;}
+#line 2114 "pir.y"
+    { (yyval.ival) = OP_BAND; ;}
     break;
 
   case 379:
-#line 2113 "pir.y"
-    { (yyval.ival) = OP_POW; ;}
+#line 2115 "pir.y"
+    { (yyval.ival) = OP_BXOR; ;}
     break;
 
   case 380:
-#line 2114 "pir.y"
-    { (yyval.ival) = OP_CONCAT; ;}
+#line 2116 "pir.y"
+    { (yyval.ival) = OP_POW; ;}
     break;
 
   case 381:
-#line 2115 "pir.y"
-    { (yyval.ival) = OP_LSR; ;}
+#line 2117 "pir.y"
+    { (yyval.ival) = OP_CONCAT; ;}
     break;
 
   case 382:
-#line 2116 "pir.y"
-    { (yyval.ival) = OP_SHR; ;}
+#line 2118 "pir.y"
+    { (yyval.ival) = OP_LSR; ;}
     break;
 
   case 383:
-#line 2117 "pir.y"
-    { (yyval.ival) = OP_SHL; ;}
+#line 2119 "pir.y"
+    { (yyval.ival) = OP_SHR; ;}
     break;
 
   case 384:
-#line 2118 "pir.y"
-    { (yyval.ival) = OP_OR; ;}
+#line 2120 "pir.y"
+    { (yyval.ival) = OP_SHL; ;}
     break;
 
   case 385:
-#line 2119 "pir.y"
-    { (yyval.ival) = OP_AND; ;}
+#line 2121 "pir.y"
+    { (yyval.ival) = OP_OR; ;}
     break;
 
   case 386:
-#line 2120 "pir.y"
-    { (yyval.ival) = OP_FDIV; ;}
+#line 2122 "pir.y"
+    { (yyval.ival) = OP_AND; ;}
     break;
 
   case 387:
-#line 2121 "pir.y"
-    { (yyval.ival) = OP_XOR; ;}
+#line 2123 "pir.y"
+    { (yyval.ival) = OP_FDIV; ;}
     break;
 
   case 388:
-#line 2122 "pir.y"
-    { (yyval.ival) = OP_ISEQ; ;}
+#line 2124 "pir.y"
+    { (yyval.ival) = OP_XOR; ;}
     break;
 
   case 389:
-#line 2123 "pir.y"
-    { (yyval.ival) = OP_ISLE; ;}
+#line 2125 "pir.y"
+    { (yyval.ival) = OP_ISEQ; ;}
     break;
 
   case 390:
-#line 2124 "pir.y"
-    { (yyval.ival) = OP_ISLT; ;}
+#line 2126 "pir.y"
+    { (yyval.ival) = OP_ISLE; ;}
     break;
 
   case 391:
-#line 2125 "pir.y"
-    { (yyval.ival) = OP_ISGE; ;}
+#line 2127 "pir.y"
+    { (yyval.ival) = OP_ISLT; ;}
     break;
 
   case 392:
-#line 2126 "pir.y"
-    { (yyval.ival) = OP_ISGT; ;}
+#line 2128 "pir.y"
+    { (yyval.ival) = OP_ISGE; ;}
     break;
 
   case 393:
-#line 2127 "pir.y"
-    { (yyval.ival) = OP_ISNE; ;}
+#line 2129 "pir.y"
+    { (yyval.ival) = OP_ISGT; ;}
     break;
 
   case 394:
-#line 2133 "pir.y"
-    { (yyval.ival) = OP_MUL; ;}
+#line 2130 "pir.y"
+    { (yyval.ival) = OP_ISNE; ;}
     break;
 
   case 395:
-#line 2134 "pir.y"
-    { (yyval.ival) = OP_MOD; ;}
+#line 2136 "pir.y"
+    { (yyval.ival) = OP_MUL; ;}
     break;
 
   case 396:
-#line 2135 "pir.y"
-    { (yyval.ival) = OP_POW; ;}
+#line 2137 "pir.y"
+    { (yyval.ival) = OP_MOD; ;}
     break;
 
   case 397:
-#line 2136 "pir.y"
-    { (yyval.ival) = OP_DIV; ;}
+#line 2138 "pir.y"
+    { (yyval.ival) = OP_POW; ;}
     break;
 
   case 398:
-#line 2137 "pir.y"
-    { (yyval.ival) = OP_FDIV; ;}
+#line 2139 "pir.y"
+    { (yyval.ival) = OP_DIV; ;}
     break;
 
   case 399:
-#line 2138 "pir.y"
-    { (yyval.ival) = OP_BOR; ;}
+#line 2140 "pir.y"
+    { (yyval.ival) = OP_FDIV; ;}
     break;
 
   case 400:
-#line 2139 "pir.y"
-    { (yyval.ival) = OP_BAND; ;}
+#line 2141 "pir.y"
+    { (yyval.ival) = OP_BOR; ;}
     break;
 
   case 401:
-#line 2140 "pir.y"
-    { (yyval.ival) = OP_BXOR; ;}
+#line 2142 "pir.y"
+    { (yyval.ival) = OP_BAND; ;}
     break;
 
   case 402:
-#line 2141 "pir.y"
-    { (yyval.ival) = OP_CONCAT; ;}
+#line 2143 "pir.y"
+    { (yyval.ival) = OP_BXOR; ;}
     break;
 
   case 403:
-#line 2142 "pir.y"
-    { (yyval.ival) = OP_SHR; ;}
+#line 2144 "pir.y"
+    { (yyval.ival) = OP_CONCAT; ;}
     break;
 
   case 404:
-#line 2143 "pir.y"
-    { (yyval.ival) = OP_SHL; ;}
+#line 2145 "pir.y"
+    { (yyval.ival) = OP_SHR; ;}
     break;
 
   case 405:
-#line 2144 "pir.y"
+#line 2146 "pir.y"
+    { (yyval.ival) = OP_SHL; ;}
+    break;
+
+  case 406:
+#line 2147 "pir.y"
     { (yyval.ival) = OP_LSR; ;}
     break;
 
-  case 407:
-#line 2165 "pir.y"
+  case 408:
+#line 2168 "pir.y"
     { new_subr(lexer, "@start"); ;}
     break;
 
-  case 416:
-#line 2181 "pir.y"
+  case 417:
+#line 2184 "pir.y"
     { set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
     break;
 
-  case 421:
-#line 2191 "pir.y"
+  case 422:
+#line 2194 "pir.y"
     { set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
     break;
 
-  case 422:
-#line 2195 "pir.y"
+  case 423:
+#line 2198 "pir.y"
     { new_subr(lexer, NULL); ;}
     break;
 
-  case 423:
-#line 2200 "pir.y"
+  case 424:
+#line 2203 "pir.y"
     {
                                   if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval)))
                                       get_opinfo(lexer);
@@ -4729,7 +4738,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 4733 "pirparser.c"
+#line 4742 "pirparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4943,7 +4952,7 @@
 }
 
 
-#line 2211 "pir.y"
+#line 2214 "pir.y"
 
 
 

Modified: trunk/compilers/pirc/src/pirsymbol.c
==============================================================================
--- trunk/compilers/pirc/src/pirsymbol.c	(original)
+++ trunk/compilers/pirc/src/pirsymbol.c	Sun Jan  4 09:16:28 2009
@@ -51,6 +51,36 @@
 
 #define NO_REG_ALLOCATED    -1
 
+/* Conversion Look-Up Table (CLUT) for pir_type and value_type enums.
+ *
+ * Lookup table to convert value_type values into pir_type values.
+ * when indexing with a pir_type value, the value_type is returned;
+ * when looking up with a value_type, the corresponding
+ * pir_type value is returned. For both STRING_VAL and
+ * USTRING_VAL, STRING_TYPE is returned.
+ *
+ * Example input:  INT_TYPE (value "0")
+ *         output: INT_VAL  (value "5")
+ *
+ * Example input:  INT_VAL  (value "5")
+ *         output: INT_TYPE (value "0")
+ *
+ * When input is STRING_TYPE you'll only get STRING_VAL,
+ * never USTRING_VAL (indicating unicode string).
+ */
+static const int valuetype_pirtype_clut[10] = {
+    INT_VAL,      /* INT_TYPE -> INT_VAL */
+    STRING_VAL,   /* STRING_TYPE -> STRING_VAL */
+    PMC_VAL,      /* PMC_TYPE -> PMC_VAL */
+    NUM_VAL,      /* NUM_TYPE -> NUM_VAL */
+    UNKNOWN_TYPE, /* UNKNOWN_TYPE -> UNKNOWN_TYPE */
+    INT_TYPE,     /* INT_VAL -> INT_TYPE */
+    STRING_TYPE,  /* STRING_VAL -> STRING_TYPE */
+    PMC_TYPE,     /* PMC_VAL -> PMC_TYPE */
+    NUM_TYPE,     /* NUM_VAL -> NUM_TYPE */
+    STRING_TYPE   /* USTRING_VAL -> STRING_TYPE */
+};
+
 /*
 
 =item C<static int
@@ -222,18 +252,20 @@
         }
 
 
-        if (b == NULL) { /* loop was broken because b == NULL, so it wasnt found; */
+        if (b == NULL) { /* loop was broken because b == NULL, so it wasn't found; */
             b = new_bucket(lexer);
             bucket_symbol(b) = iter;
             store_bucket(table, b, hash);
             iter->info.type  = type;
+            fprintf(stderr, "declare_local(): [%s]\n", iter->info.id.name);
         }
 
         iter = iter->next;
     }
-
 }
 
+
+
 /*
 
 =item C<void
@@ -271,24 +303,7 @@
     while (subiter != lexer->subs->next); /* iterate over all subs */
 }
 
-/* Lookup table to convert value_type values into pir_type values.
- * when indexing with a pir_type value, the pir_type value itself
- * is returned; when looking up with a value_type, the corresponding
- * pir_type value is returned. For instance, for both STRING_VAL and
- * USTRING_VAL, STRING_TYPE is returned.
- */
-static const int convert_valuetype_to_pirtype[10] = {
-    INT_TYPE,
-    STRING_TYPE,
-    PMC_TYPE,
-    NUM_TYPE,
-    UNKNOWN_TYPE,
-    INT_TYPE,     /* INT_VAL -> INT_TYPE */
-    STRING_TYPE,  /* STRING_VAL -> STRING_TYPE */
-    PMC_TYPE,     /* PMC_VAL -> PMC_TYPE */
-    NUM_TYPE,     /* NUM_VAL -> NUM_TYPE */
-    STRING_TYPE   /* USTRING_VAL -> STRING_TYPE */
-};
+
 
 /*
 
@@ -341,12 +356,15 @@
     /* it's not a symbol; try the constants */
     c = find_global_constant(lexer, name);
     if (c) {
-        symbol *sym = new_symbol(lexer, name, convert_valuetype_to_pirtype[c->type]);
+        /* convert the constdecl->type (value_type) to a pir_type value */
+        symbol *sym = new_symbol(lexer, name, valuetype_pirtype_clut[c->type]);
         /*
         fprintf(stderr, "symbol type: %d ==> %d\n", c->type, convert_valuetype_to_pirtype[c->type]);
         */
+        /*
         if (sym->info.color == NO_REG_ALLOCATED)
             assign_vanilla_register(lexer, sym);
+        */
         return sym;
     }
 
@@ -622,7 +640,7 @@
     bucket *b            = new_bucket(lexer);
     bucket_constant(b)   = c;
     store_bucket(table, b, hash);
-    fprintf(stderr, "store global constant\n");
+    fprintf(stderr, "store global constant (%s)\n", c->name);
 }
 
 /*



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