This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
key/value hash slice operation
authorRuslan Zakirov <ruz@bestpractical.com>
Wed, 27 Feb 2013 15:39:39 +0000 (19:39 +0400)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 13 Sep 2013 08:25:34 +0000 (01:25 -0700)
kvhslice operator that implements %h{1,2,3,4} syntax which
returns list of key value pairs rather than just values
(regular slices).

dist/B-Deparse/Deparse.pm
op.c
opcode.h
opnames.h
perly.act
perly.h
perly.tab
perly.y
pp.c
pp_proto.h
regen/opcodes

index 6a63cf8..6aa8847 100644 (file)
@@ -3567,11 +3567,14 @@ sub slice {
     } else {
        $list = $self->elem_or_slice_single_index($kid);
     }
-    return "\@" . $array . $left . $list . $right;
+    my $lead = '@';
+    $lead = '%' if $op->name =~ /^kv/i;
+    return $lead . $array . $left . $list . $right;
 }
 
-sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
-sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
+sub pp_aslice   { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
+sub pp_hslice   { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
+sub pp_kvhslice {                 slice(@_, "{", "}", "rv2hv", "padhv")  }
 
 sub pp_lslice {
     my $self = shift;
diff --git a/op.c b/op.c
index ae3739e..d457d43 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1278,6 +1278,7 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_ASLICE:
     case OP_HELEM:
     case OP_HSLICE:
+    case OP_KVHSLICE:
     case OP_UNPACK:
     case OP_PACK:
     case OP_JOIN:
@@ -2061,6 +2062,10 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
     case OP_DBSTATE:
        PL_modcount = RETURN_UNLIMITED_NUMBER;
        break;
+    case OP_KVHSLICE:
+       if (type == OP_LEAVESUBLV)
+           o->op_private |= OPpMAYBE_LVSUB;
+        goto nomod;
     case OP_AV2ARYLEN:
        PL_hints |= HINT_BLOCK_SCOPE;
        if (type == OP_LEAVESUBLV)
@@ -5349,7 +5354,7 @@ S_is_list_assignment(pTHX_ const OP *o)
 
     if (type == OP_LIST || flags & OPf_PARENS ||
        type == OP_RV2AV || type == OP_RV2HV ||
-       type == OP_ASLICE || type == OP_HSLICE)
+       type == OP_ASLICE || type == OP_HSLICE || type == OP_KVHSLICE)
        return TRUE;
 
     if (type == OP_PADAV || type == OP_PADHV)
@@ -6557,7 +6562,8 @@ S_ref_array_or_hash(pTHX_ OP *cond)
 
     else if(cond
     && (cond->op_type == OP_ASLICE
-    ||  cond->op_type == OP_HSLICE)) {
+    ||  cond->op_type == OP_HSLICE
+    ||  cond->op_type == OP_KVHSLICE)) {
 
        /* anonlist now needs a list from this op, was previously used in
         * scalar context */
@@ -8296,6 +8302,9 @@ Perl_ck_delete(pTHX_ OP *o)
            /* FALL THROUGH */
        case OP_HELEM:
            break;
+       case OP_KVHSLICE:
+           Perl_croak(aTHX_ "%s argument is key/value hash slice, use hash slice",
+                 OP_DESC(o));
        default:
            Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
                  OP_DESC(o));
index 540dc0b..b91e7ad 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -291,6 +291,7 @@ EXTCONST char* const PL_op_name[] = {
        "rv2hv",
        "helem",
        "hslice",
+       "kvhslice",
        "unpack",
        "pack",
        "split",
@@ -676,6 +677,7 @@ EXTCONST char* const PL_op_desc[] = {
        "hash dereference",
        "hash element",
        "hash slice",
+       "key/value hash slice",
        "unpack",
        "pack",
        "split",
@@ -1075,6 +1077,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_rv2hv,  /* implemented by Perl_pp_rv2av */
        Perl_pp_helem,
        Perl_pp_hslice,
+       Perl_pp_kvhslice,
        Perl_pp_unpack,
        Perl_pp_pack,
        Perl_pp_split,
@@ -1470,6 +1473,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_rvconst,        /* rv2hv */
        Perl_ck_null,           /* helem */
        Perl_ck_null,           /* hslice */
+       Perl_ck_null,           /* kvhslice */
        Perl_ck_fun,            /* unpack */
        Perl_ck_fun,            /* pack */
        Perl_ck_split,          /* split */
@@ -1859,6 +1863,7 @@ EXTCONST U32 PL_opargs[] = {
        0x00000148,     /* rv2hv */
        0x00014204,     /* helem */
        0x00024401,     /* hslice */
+       0x00024401,     /* kvhslice */
        0x00091480,     /* unpack */
        0x0002140f,     /* pack */
        0x00111408,     /* split */
index 5502ba4..d64a333 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -157,244 +157,245 @@ typedef enum opcode {
        OP_RV2HV         = 140,
        OP_HELEM         = 141,
        OP_HSLICE        = 142,
-       OP_UNPACK        = 143,
-       OP_PACK          = 144,
-       OP_SPLIT         = 145,
-       OP_JOIN          = 146,
-       OP_LIST          = 147,
-       OP_LSLICE        = 148,
-       OP_ANONLIST      = 149,
-       OP_ANONHASH      = 150,
-       OP_SPLICE        = 151,
-       OP_PUSH          = 152,
-       OP_POP           = 153,
-       OP_SHIFT         = 154,
-       OP_UNSHIFT       = 155,
-       OP_SORT          = 156,
-       OP_REVERSE       = 157,
-       OP_GREPSTART     = 158,
-       OP_GREPWHILE     = 159,
-       OP_MAPSTART      = 160,
-       OP_MAPWHILE      = 161,
-       OP_RANGE         = 162,
-       OP_FLIP          = 163,
-       OP_FLOP          = 164,
-       OP_AND           = 165,
-       OP_OR            = 166,
-       OP_XOR           = 167,
-       OP_DOR           = 168,
-       OP_COND_EXPR     = 169,
-       OP_ANDASSIGN     = 170,
-       OP_ORASSIGN      = 171,
-       OP_DORASSIGN     = 172,
-       OP_METHOD        = 173,
-       OP_ENTERSUB      = 174,
-       OP_LEAVESUB      = 175,
-       OP_LEAVESUBLV    = 176,
-       OP_CALLER        = 177,
-       OP_WARN          = 178,
-       OP_DIE           = 179,
-       OP_RESET         = 180,
-       OP_LINESEQ       = 181,
-       OP_NEXTSTATE     = 182,
-       OP_DBSTATE       = 183,
-       OP_UNSTACK       = 184,
-       OP_ENTER         = 185,
-       OP_LEAVE         = 186,
-       OP_SCOPE         = 187,
-       OP_ENTERITER     = 188,
-       OP_ITER          = 189,
-       OP_ENTERLOOP     = 190,
-       OP_LEAVELOOP     = 191,
-       OP_RETURN        = 192,
-       OP_LAST          = 193,
-       OP_NEXT          = 194,
-       OP_REDO          = 195,
-       OP_DUMP          = 196,
-       OP_GOTO          = 197,
-       OP_EXIT          = 198,
-       OP_METHOD_NAMED  = 199,
-       OP_ENTERGIVEN    = 200,
-       OP_LEAVEGIVEN    = 201,
-       OP_ENTERWHEN     = 202,
-       OP_LEAVEWHEN     = 203,
-       OP_BREAK         = 204,
-       OP_CONTINUE      = 205,
-       OP_OPEN          = 206,
-       OP_CLOSE         = 207,
-       OP_PIPE_OP       = 208,
-       OP_FILENO        = 209,
-       OP_UMASK         = 210,
-       OP_BINMODE       = 211,
-       OP_TIE           = 212,
-       OP_UNTIE         = 213,
-       OP_TIED          = 214,
-       OP_DBMOPEN       = 215,
-       OP_DBMCLOSE      = 216,
-       OP_SSELECT       = 217,
-       OP_SELECT        = 218,
-       OP_GETC          = 219,
-       OP_READ          = 220,
-       OP_ENTERWRITE    = 221,
-       OP_LEAVEWRITE    = 222,
-       OP_PRTF          = 223,
-       OP_PRINT         = 224,
-       OP_SAY           = 225,
-       OP_SYSOPEN       = 226,
-       OP_SYSSEEK       = 227,
-       OP_SYSREAD       = 228,
-       OP_SYSWRITE      = 229,
-       OP_EOF           = 230,
-       OP_TELL          = 231,
-       OP_SEEK          = 232,
-       OP_TRUNCATE      = 233,
-       OP_FCNTL         = 234,
-       OP_IOCTL         = 235,
-       OP_FLOCK         = 236,
-       OP_SEND          = 237,
-       OP_RECV          = 238,
-       OP_SOCKET        = 239,
-       OP_SOCKPAIR      = 240,
-       OP_BIND          = 241,
-       OP_CONNECT       = 242,
-       OP_LISTEN        = 243,
-       OP_ACCEPT        = 244,
-       OP_SHUTDOWN      = 245,
-       OP_GSOCKOPT      = 246,
-       OP_SSOCKOPT      = 247,
-       OP_GETSOCKNAME   = 248,
-       OP_GETPEERNAME   = 249,
-       OP_LSTAT         = 250,
-       OP_STAT          = 251,
-       OP_FTRREAD       = 252,
-       OP_FTRWRITE      = 253,
-       OP_FTREXEC       = 254,
-       OP_FTEREAD       = 255,
-       OP_FTEWRITE      = 256,
-       OP_FTEEXEC       = 257,
-       OP_FTIS          = 258,
-       OP_FTSIZE        = 259,
-       OP_FTMTIME       = 260,
-       OP_FTATIME       = 261,
-       OP_FTCTIME       = 262,
-       OP_FTROWNED      = 263,
-       OP_FTEOWNED      = 264,
-       OP_FTZERO        = 265,
-       OP_FTSOCK        = 266,
-       OP_FTCHR         = 267,
-       OP_FTBLK         = 268,
-       OP_FTFILE        = 269,
-       OP_FTDIR         = 270,
-       OP_FTPIPE        = 271,
-       OP_FTSUID        = 272,
-       OP_FTSGID        = 273,
-       OP_FTSVTX        = 274,
-       OP_FTLINK        = 275,
-       OP_FTTTY         = 276,
-       OP_FTTEXT        = 277,
-       OP_FTBINARY      = 278,
-       OP_CHDIR         = 279,
-       OP_CHOWN         = 280,
-       OP_CHROOT        = 281,
-       OP_UNLINK        = 282,
-       OP_CHMOD         = 283,
-       OP_UTIME         = 284,
-       OP_RENAME        = 285,
-       OP_LINK          = 286,
-       OP_SYMLINK       = 287,
-       OP_READLINK      = 288,
-       OP_MKDIR         = 289,
-       OP_RMDIR         = 290,
-       OP_OPEN_DIR      = 291,
-       OP_READDIR       = 292,
-       OP_TELLDIR       = 293,
-       OP_SEEKDIR       = 294,
-       OP_REWINDDIR     = 295,
-       OP_CLOSEDIR      = 296,
-       OP_FORK          = 297,
-       OP_WAIT          = 298,
-       OP_WAITPID       = 299,
-       OP_SYSTEM        = 300,
-       OP_EXEC          = 301,
-       OP_KILL          = 302,
-       OP_GETPPID       = 303,
-       OP_GETPGRP       = 304,
-       OP_SETPGRP       = 305,
-       OP_GETPRIORITY   = 306,
-       OP_SETPRIORITY   = 307,
-       OP_TIME          = 308,
-       OP_TMS           = 309,
-       OP_LOCALTIME     = 310,
-       OP_GMTIME        = 311,
-       OP_ALARM         = 312,
-       OP_SLEEP         = 313,
-       OP_SHMGET        = 314,
-       OP_SHMCTL        = 315,
-       OP_SHMREAD       = 316,
-       OP_SHMWRITE      = 317,
-       OP_MSGGET        = 318,
-       OP_MSGCTL        = 319,
-       OP_MSGSND        = 320,
-       OP_MSGRCV        = 321,
-       OP_SEMOP         = 322,
-       OP_SEMGET        = 323,
-       OP_SEMCTL        = 324,
-       OP_REQUIRE       = 325,
-       OP_DOFILE        = 326,
-       OP_HINTSEVAL     = 327,
-       OP_ENTEREVAL     = 328,
-       OP_LEAVEEVAL     = 329,
-       OP_ENTERTRY      = 330,
-       OP_LEAVETRY      = 331,
-       OP_GHBYNAME      = 332,
-       OP_GHBYADDR      = 333,
-       OP_GHOSTENT      = 334,
-       OP_GNBYNAME      = 335,
-       OP_GNBYADDR      = 336,
-       OP_GNETENT       = 337,
-       OP_GPBYNAME      = 338,
-       OP_GPBYNUMBER    = 339,
-       OP_GPROTOENT     = 340,
-       OP_GSBYNAME      = 341,
-       OP_GSBYPORT      = 342,
-       OP_GSERVENT      = 343,
-       OP_SHOSTENT      = 344,
-       OP_SNETENT       = 345,
-       OP_SPROTOENT     = 346,
-       OP_SSERVENT      = 347,
-       OP_EHOSTENT      = 348,
-       OP_ENETENT       = 349,
-       OP_EPROTOENT     = 350,
-       OP_ESERVENT      = 351,
-       OP_GPWNAM        = 352,
-       OP_GPWUID        = 353,
-       OP_GPWENT        = 354,
-       OP_SPWENT        = 355,
-       OP_EPWENT        = 356,
-       OP_GGRNAM        = 357,
-       OP_GGRGID        = 358,
-       OP_GGRENT        = 359,
-       OP_SGRENT        = 360,
-       OP_EGRENT        = 361,
-       OP_GETLOGIN      = 362,
-       OP_SYSCALL       = 363,
-       OP_LOCK          = 364,
-       OP_ONCE          = 365,
-       OP_CUSTOM        = 366,
-       OP_REACH         = 367,
-       OP_RKEYS         = 368,
-       OP_RVALUES       = 369,
-       OP_COREARGS      = 370,
-       OP_RUNCV         = 371,
-       OP_FC            = 372,
-       OP_PADCV         = 373,
-       OP_INTROCV       = 374,
-       OP_CLONECV       = 375,
-       OP_PADRANGE      = 376,
+       OP_KVHSLICE      = 143,
+       OP_UNPACK        = 144,
+       OP_PACK          = 145,
+       OP_SPLIT         = 146,
+       OP_JOIN          = 147,
+       OP_LIST          = 148,
+       OP_LSLICE        = 149,
+       OP_ANONLIST      = 150,
+       OP_ANONHASH      = 151,
+       OP_SPLICE        = 152,
+       OP_PUSH          = 153,
+       OP_POP           = 154,
+       OP_SHIFT         = 155,
+       OP_UNSHIFT       = 156,
+       OP_SORT          = 157,
+       OP_REVERSE       = 158,
+       OP_GREPSTART     = 159,
+       OP_GREPWHILE     = 160,
+       OP_MAPSTART      = 161,
+       OP_MAPWHILE      = 162,
+       OP_RANGE         = 163,
+       OP_FLIP          = 164,
+       OP_FLOP          = 165,
+       OP_AND           = 166,
+       OP_OR            = 167,
+       OP_XOR           = 168,
+       OP_DOR           = 169,
+       OP_COND_EXPR     = 170,
+       OP_ANDASSIGN     = 171,
+       OP_ORASSIGN      = 172,
+       OP_DORASSIGN     = 173,
+       OP_METHOD        = 174,
+       OP_ENTERSUB      = 175,
+       OP_LEAVESUB      = 176,
+       OP_LEAVESUBLV    = 177,
+       OP_CALLER        = 178,
+       OP_WARN          = 179,
+       OP_DIE           = 180,
+       OP_RESET         = 181,
+       OP_LINESEQ       = 182,
+       OP_NEXTSTATE     = 183,
+       OP_DBSTATE       = 184,
+       OP_UNSTACK       = 185,
+       OP_ENTER         = 186,
+       OP_LEAVE         = 187,
+       OP_SCOPE         = 188,
+       OP_ENTERITER     = 189,
+       OP_ITER          = 190,
+       OP_ENTERLOOP     = 191,
+       OP_LEAVELOOP     = 192,
+       OP_RETURN        = 193,
+       OP_LAST          = 194,
+       OP_NEXT          = 195,
+       OP_REDO          = 196,
+       OP_DUMP          = 197,
+       OP_GOTO          = 198,
+       OP_EXIT          = 199,
+       OP_METHOD_NAMED  = 200,
+       OP_ENTERGIVEN    = 201,
+       OP_LEAVEGIVEN    = 202,
+       OP_ENTERWHEN     = 203,
+       OP_LEAVEWHEN     = 204,
+       OP_BREAK         = 205,
+       OP_CONTINUE      = 206,
+       OP_OPEN          = 207,
+       OP_CLOSE         = 208,
+       OP_PIPE_OP       = 209,
+       OP_FILENO        = 210,
+       OP_UMASK         = 211,
+       OP_BINMODE       = 212,
+       OP_TIE           = 213,
+       OP_UNTIE         = 214,
+       OP_TIED          = 215,
+       OP_DBMOPEN       = 216,
+       OP_DBMCLOSE      = 217,
+       OP_SSELECT       = 218,
+       OP_SELECT        = 219,
+       OP_GETC          = 220,
+       OP_READ          = 221,
+       OP_ENTERWRITE    = 222,
+       OP_LEAVEWRITE    = 223,
+       OP_PRTF          = 224,
+       OP_PRINT         = 225,
+       OP_SAY           = 226,
+       OP_SYSOPEN       = 227,
+       OP_SYSSEEK       = 228,
+       OP_SYSREAD       = 229,
+       OP_SYSWRITE      = 230,
+       OP_EOF           = 231,
+       OP_TELL          = 232,
+       OP_SEEK          = 233,
+       OP_TRUNCATE      = 234,
+       OP_FCNTL         = 235,
+       OP_IOCTL         = 236,
+       OP_FLOCK         = 237,
+       OP_SEND          = 238,
+       OP_RECV          = 239,
+       OP_SOCKET        = 240,
+       OP_SOCKPAIR      = 241,
+       OP_BIND          = 242,
+       OP_CONNECT       = 243,
+       OP_LISTEN        = 244,
+       OP_ACCEPT        = 245,
+       OP_SHUTDOWN      = 246,
+       OP_GSOCKOPT      = 247,
+       OP_SSOCKOPT      = 248,
+       OP_GETSOCKNAME   = 249,
+       OP_GETPEERNAME   = 250,
+       OP_LSTAT         = 251,
+       OP_STAT          = 252,
+       OP_FTRREAD       = 253,
+       OP_FTRWRITE      = 254,
+       OP_FTREXEC       = 255,
+       OP_FTEREAD       = 256,
+       OP_FTEWRITE      = 257,
+       OP_FTEEXEC       = 258,
+       OP_FTIS          = 259,
+       OP_FTSIZE        = 260,
+       OP_FTMTIME       = 261,
+       OP_FTATIME       = 262,
+       OP_FTCTIME       = 263,
+       OP_FTROWNED      = 264,
+       OP_FTEOWNED      = 265,
+       OP_FTZERO        = 266,
+       OP_FTSOCK        = 267,
+       OP_FTCHR         = 268,
+       OP_FTBLK         = 269,
+       OP_FTFILE        = 270,
+       OP_FTDIR         = 271,
+       OP_FTPIPE        = 272,
+       OP_FTSUID        = 273,
+       OP_FTSGID        = 274,
+       OP_FTSVTX        = 275,
+       OP_FTLINK        = 276,
+       OP_FTTTY         = 277,
+       OP_FTTEXT        = 278,
+       OP_FTBINARY      = 279,
+       OP_CHDIR         = 280,
+       OP_CHOWN         = 281,
+       OP_CHROOT        = 282,
+       OP_UNLINK        = 283,
+       OP_CHMOD         = 284,
+       OP_UTIME         = 285,
+       OP_RENAME        = 286,
+       OP_LINK          = 287,
+       OP_SYMLINK       = 288,
+       OP_READLINK      = 289,
+       OP_MKDIR         = 290,
+       OP_RMDIR         = 291,
+       OP_OPEN_DIR      = 292,
+       OP_READDIR       = 293,
+       OP_TELLDIR       = 294,
+       OP_SEEKDIR       = 295,
+       OP_REWINDDIR     = 296,
+       OP_CLOSEDIR      = 297,
+       OP_FORK          = 298,
+       OP_WAIT          = 299,
+       OP_WAITPID       = 300,
+       OP_SYSTEM        = 301,
+       OP_EXEC          = 302,
+       OP_KILL          = 303,
+       OP_GETPPID       = 304,
+       OP_GETPGRP       = 305,
+       OP_SETPGRP       = 306,
+       OP_GETPRIORITY   = 307,
+       OP_SETPRIORITY   = 308,
+       OP_TIME          = 309,
+       OP_TMS           = 310,
+       OP_LOCALTIME     = 311,
+       OP_GMTIME        = 312,
+       OP_ALARM         = 313,
+       OP_SLEEP         = 314,
+       OP_SHMGET        = 315,
+       OP_SHMCTL        = 316,
+       OP_SHMREAD       = 317,
+       OP_SHMWRITE      = 318,
+       OP_MSGGET        = 319,
+       OP_MSGCTL        = 320,
+       OP_MSGSND        = 321,
+       OP_MSGRCV        = 322,
+       OP_SEMOP         = 323,
+       OP_SEMGET        = 324,
+       OP_SEMCTL        = 325,
+       OP_REQUIRE       = 326,
+       OP_DOFILE        = 327,
+       OP_HINTSEVAL     = 328,
+       OP_ENTEREVAL     = 329,
+       OP_LEAVEEVAL     = 330,
+       OP_ENTERTRY      = 331,
+       OP_LEAVETRY      = 332,
+       OP_GHBYNAME      = 333,
+       OP_GHBYADDR      = 334,
+       OP_GHOSTENT      = 335,
+       OP_GNBYNAME      = 336,
+       OP_GNBYADDR      = 337,
+       OP_GNETENT       = 338,
+       OP_GPBYNAME      = 339,
+       OP_GPBYNUMBER    = 340,
+       OP_GPROTOENT     = 341,
+       OP_GSBYNAME      = 342,
+       OP_GSBYPORT      = 343,
+       OP_GSERVENT      = 344,
+       OP_SHOSTENT      = 345,
+       OP_SNETENT       = 346,
+       OP_SPROTOENT     = 347,
+       OP_SSERVENT      = 348,
+       OP_EHOSTENT      = 349,
+       OP_ENETENT       = 350,
+       OP_EPROTOENT     = 351,
+       OP_ESERVENT      = 352,
+       OP_GPWNAM        = 353,
+       OP_GPWUID        = 354,
+       OP_GPWENT        = 355,
+       OP_SPWENT        = 356,
+       OP_EPWENT        = 357,
+       OP_GGRNAM        = 358,
+       OP_GGRGID        = 359,
+       OP_GGRENT        = 360,
+       OP_SGRENT        = 361,
+       OP_EGRENT        = 362,
+       OP_GETLOGIN      = 363,
+       OP_SYSCALL       = 364,
+       OP_LOCK          = 365,
+       OP_ONCE          = 366,
+       OP_CUSTOM        = 367,
+       OP_REACH         = 368,
+       OP_RKEYS         = 369,
+       OP_RVALUES       = 370,
+       OP_COREARGS      = 371,
+       OP_RUNCV         = 372,
+       OP_FC            = 373,
+       OP_PADCV         = 374,
+       OP_INTROCV       = 375,
+       OP_CLONECV       = 376,
+       OP_PADRANGE      = 377,
        OP_max          
 } opcode;
 
-#define MAXO 377
+#define MAXO 378
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
index 6982660..ef82bc9 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -8,7 +8,7 @@ case 2:
 #line 141 "perly.y"
     {
                          PL_parser->expect = XSTATE;
-                       ;}
+                       }
     break;
 
   case 3:
@@ -16,14 +16,14 @@ case 2:
     {
                          newPROG(block_end((ps[(3) - (4)].val.ival),(ps[(4) - (4)].val.opval)));
                          (yyval.ival) = 0;
-                       ;}
+                       }
     break;
 
   case 4:
 #line 150 "perly.y"
     {
                          parser->expect = XTERM;
-                       ;}
+                       }
     break;
 
   case 5:
@@ -31,14 +31,14 @@ case 2:
     {
                          PL_eval_root = (ps[(3) - (3)].val.opval);
                          (yyval.ival) = 0;
-                       ;}
+                       }
     break;
 
   case 6:
 #line 159 "perly.y"
     {
                          parser->expect = XBLOCK;
-                       ;}
+                       }
     break;
 
   case 7:
@@ -49,14 +49,14 @@ case 2:
                          (yyval.ival) = 0;
                          yyunlex();
                          parser->yychar = YYEOF;
-                       ;}
+                       }
     break;
 
   case 8:
 #line 171 "perly.y"
     {
                          parser->expect = XSTATE;
-                       ;}
+                       }
     break;
 
   case 9:
@@ -67,14 +67,14 @@ case 2:
                          (yyval.ival) = 0;
                          yyunlex();
                          parser->yychar = YYEOF;
-                       ;}
+                       }
     break;
 
   case 10:
 #line 183 "perly.y"
     {
                          parser->expect = XSTATE;
-                       ;}
+                       }
     break;
 
   case 11:
@@ -85,14 +85,14 @@ case 2:
                          (yyval.ival) = 0;
                          yyunlex();
                          parser->yychar = YYEOF;
-                       ;}
+                       }
     break;
 
   case 12:
 #line 195 "perly.y"
     {
                          parser->expect = XSTATE;
-                       ;}
+                       }
     break;
 
   case 13:
@@ -100,7 +100,7 @@ case 2:
     {
                          PL_eval_root = (ps[(3) - (3)].val.opval);
                          (yyval.ival) = 0;
-                       ;}
+                       }
     break;
 
   case 14:
@@ -110,7 +110,7 @@ case 2:
                          (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 15:
@@ -120,12 +120,12 @@ case 2:
                          (yyval.opval) = block_end((ps[(2) - (7)].val.ival), (ps[(5) - (7)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (7)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(7) - (7)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 16:
 #line 226 "perly.y"
-    { (yyval.ival) = block_start(TRUE); ;}
+    { (yyval.ival) = block_start(TRUE); }
     break;
 
   case 17:
@@ -135,17 +135,17 @@ case 2:
                          (yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 18:
 #line 239 "perly.y"
-    { (yyval.ival) = block_start(FALSE); ;}
+    { (yyval.ival) = block_start(FALSE); }
     break;
 
   case 19:
 #line 244 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 20:
@@ -154,12 +154,12 @@ case 2:
                            PL_pad_reset_pending = TRUE;
                            if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
                                PL_hints |= HINT_BLOCK_SCOPE;
-                       ;}
+                       }
     break;
 
   case 21:
 #line 255 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 22:
@@ -168,7 +168,7 @@ case 2:
                            PL_pad_reset_pending = TRUE;
                            if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
                                PL_hints |= HINT_BLOCK_SCOPE;
-                       ;}
+                       }
     break;
 
   case 23:
@@ -179,12 +179,12 @@ case 2:
                          } else {
                              (yyval.opval) = IF_MAD(newOP(OP_NULL, 0), NULL);
                          }
-                       ;}
+                       }
     break;
 
   case 24:
 #line 274 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 25:
@@ -195,7 +195,7 @@ case 2:
                                          PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval),
                              (ps[(2) - (2)].val.opval) ? cLISTOPx((yyval.opval))->op_first : (yyval.opval), 'L');
-                       ;}
+                       }
     break;
 
   case 26:
@@ -205,12 +205,12 @@ case 2:
                                           * PVAL((ps[(1) - (2)].val.p_tkval))[strlen(PVAL((ps[(1) - (2)].val.p_tkval)))+1],
                                          PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval), cLISTOPx((yyval.opval))->op_first, 'L');
-                       ;}
+                       }
     break;
 
   case 27:
 #line 296 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 28:
@@ -218,7 +218,7 @@ case 2:
     {
                          (yyval.opval) = newOP(OP_NULL,0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'p');
-                       ;}
+                       }
     break;
 
   case 29:
@@ -238,7 +238,7 @@ case 2:
                              SvREFCNT_inc_simple_void(fmtcv);
                              pad_add_anon(fmtcv, OP_NULL);
                          }
-                       ;}
+                       }
     break;
 
   case 30:
@@ -263,7 +263,7 @@ case 2:
                              CvCLONE_on(PL_compcv);
                          PL_parser->in_my = 0;
                          PL_parser->in_my_stash = NULL;
-                       ;}
+                       }
     break;
 
   case 31:
@@ -294,7 +294,7 @@ case 2:
                          (yyval.opval) = (OP*)NULL;
 #endif
                          intro_my();
-                       ;}
+                       }
     break;
 
   case 32:
@@ -312,12 +312,12 @@ case 2:
                              package_version((ps[(2) - (4)].val.opval));
                          (yyval.opval) = (OP*)NULL;
 #endif
-                       ;}
+                       }
     break;
 
   case 33:
 #line 385 "perly.y"
-    { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
+    { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
     break;
 
   case 34:
@@ -335,7 +335,7 @@ case 2:
                          utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
                          (yyval.opval) = (OP*)NULL;
 #endif
-                       ;}
+                       }
     break;
 
   case 35:
@@ -347,7 +347,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 36:
@@ -359,7 +359,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 37:
@@ -373,17 +373,17 @@ case 2:
                                      ? 0
                                      : offset));
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 38:
 #line 431 "perly.y"
-    { (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); ;}
+    { (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); }
     break;
 
   case 39:
 #line 433 "perly.y"
-    { (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); ;}
+    { (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); }
     break;
 
   case 40:
@@ -396,7 +396,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (8)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (8)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 41:
@@ -409,7 +409,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (8)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (8)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 42:
@@ -432,7 +432,7 @@ case 2:
                          TOKEN_GETMAD((ps[(7) - (11)].val.i_tkval),(yyval.opval),'2');
                          TOKEN_GETMAD((ps[(10) - (11)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (11)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 43:
@@ -444,7 +444,7 @@ case 2:
                          TOKEN_GETMAD((ps[(5) - (9)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(7) - (9)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (9)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 44:
@@ -456,7 +456,7 @@ case 2:
                          TOKEN_GETMAD((ps[(3) - (8)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(6) - (8)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 45:
@@ -468,7 +468,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
                          PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 46:
@@ -477,7 +477,7 @@ case 2:
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                  (OP*)NULL, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval), 0);
-                       ;}
+                       }
     break;
 
   case 47:
@@ -487,7 +487,7 @@ case 2:
                          if ((ps[(2) - (5)].val.opval)) {
                              package_version((ps[(2) - (5)].val.opval));
                          }
-                       ;}
+                       }
     break;
 
   case 48:
@@ -500,7 +500,7 @@ case 2:
                          TOKEN_GETMAD((ps[(8) - (8)].val.i_tkval),(yyval.opval),'}');
                          if (PL_parser->copline > (line_t)IVAL((ps[(4) - (8)].val.i_tkval)))
                              PL_parser->copline = (line_t)IVAL((ps[(4) - (8)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 49:
@@ -509,7 +509,7 @@ case 2:
                          PL_parser->expect = XSTATE;
                          (yyval.opval) = (ps[(1) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),';');
-                       ;}
+                       }
     break;
 
   case 50:
@@ -519,7 +519,7 @@ case 2:
                          (yyval.opval) = IF_MAD(newOP(OP_NULL, 0), (OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),';');
                          PL_parser->copline = NOLINE;
-                       ;}
+                       }
     break;
 
   case 51:
@@ -543,55 +543,55 @@ case 2:
                          else PL_parser->copline--;
                          (yyval.opval) = newSTATEOP(0, NULL,
                                          convert(OP_FORMLINE, 0, list));
-                       ;}
+                       }
     break;
 
   case 52:
 #line 565 "perly.y"
-    { (yyval.opval) = NULL; ;}
+    { (yyval.opval) = NULL; }
     break;
 
   case 53:
 #line 567 "perly.y"
-    { (yyval.opval) = op_unscope((ps[(2) - (3)].val.opval)); ;}
+    { (yyval.opval) = op_unscope((ps[(2) - (3)].val.opval)); }
     break;
 
   case 54:
 #line 572 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 55:
 #line 574 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 56:
 #line 576 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
-                       ;}
+                       }
     break;
 
   case 57:
 #line 580 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
-                       ;}
+                       }
     break;
 
   case 58:
 #line 584 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
-                       ;}
+                       }
     break;
 
   case 59:
 #line 588 "perly.y"
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
-                       ;}
+                       }
     break;
 
   case 60:
@@ -599,17 +599,17 @@ case 2:
     { (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (3)].val.i_tkval));
-                       ;}
+                       }
     break;
 
   case 61:
 #line 597 "perly.y"
-    { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); ;}
+    { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); }
     break;
 
   case 62:
 #line 602 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 63:
@@ -618,7 +618,7 @@ case 2:
                          ((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS;
                          (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 64:
@@ -631,12 +631,12 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'I');
                          TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 65:
 #line 623 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 66:
@@ -644,91 +644,91 @@ case 2:
     {
                          (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 67:
 #line 633 "perly.y"
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
-                         intro_my(); ;}
+                         intro_my(); }
     break;
 
   case 68:
 #line 639 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 70:
 #line 645 "perly.y"
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
-                         (yyval.opval) = tmplval.opval; ;}
+                         (yyval.opval) = tmplval.opval; }
     break;
 
   case 72:
 #line 653 "perly.y"
-    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
+    { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); }
     break;
 
   case 73:
 #line 658 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
     break;
 
   case 74:
 #line 662 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
     break;
 
   case 75:
 #line 666 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
     break;
 
   case 76:
 #line 669 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 77:
 #line 670 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 78:
 #line 674 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, 0);
-                           SAVEFREESV(PL_compcv); ;}
+                           SAVEFREESV(PL_compcv); }
     break;
 
   case 79:
 #line 680 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
-                           SAVEFREESV(PL_compcv); ;}
+                           SAVEFREESV(PL_compcv); }
     break;
 
   case 80:
 #line 685 "perly.y"
     { (yyval.ival) = start_subparse(TRUE, 0);
-                           SAVEFREESV(PL_compcv); ;}
+                           SAVEFREESV(PL_compcv); }
     break;
 
   case 83:
 #line 696 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 85:
 #line 702 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 86:
 #line 704 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
-                       ;}
+                       }
     break;
 
   case 87:
@@ -738,14 +738,14 @@ case 2:
                                    (OP*)NULL
                                );
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),':');
-                       ;}
+                       }
     break;
 
   case 88:
 #line 718 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
-                       ;}
+                       }
     break;
 
   case 89:
@@ -755,12 +755,12 @@ case 2:
                                    (OP*)NULL
                                );
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),':');
-                       ;}
+                       }
     break;
 
   case 90:
 #line 731 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 91:
@@ -771,28 +771,28 @@ case 2:
                                );
                          PL_parser->expect = XSTATE;
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),';');
-                       ;}
+                       }
     break;
 
   case 92:
 #line 743 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 93:
 #line 747 "perly.y"
     { (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 94:
 #line 751 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 96:
@@ -805,7 +805,7 @@ case 2:
 #else
                          (yyval.opval) = (ps[(1) - (2)].val.opval);
 #endif
-                       ;}
+                       }
     break;
 
   case 97:
@@ -817,7 +817,7 @@ case 2:
                              token_getmad((ps[(2) - (3)].val.i_tkval),term,',');
                          )
                          (yyval.opval) = op_append_elem(OP_LIST, (ps[(1) - (3)].val.opval), term);
-                       ;}
+                       }
     break;
 
   case 99:
@@ -825,7 +825,7 @@ case 2:
     { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 100:
@@ -835,7 +835,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 101:
@@ -847,7 +847,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'A');
                          TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 102:
@@ -856,7 +856,7 @@ case 2:
                                op_append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
                                    newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'A');
-                       ;}
+                       }
     break;
 
   case 103:
@@ -865,7 +865,7 @@ case 2:
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
                                    newUNOP(OP_METHOD, 0, (ps[(1) - (3)].val.opval))));
-                       ;}
+                       }
     break;
 
   case 104:
@@ -876,14 +876,14 @@ case 2:
                                    newUNOP(OP_METHOD, 0, (ps[(1) - (5)].val.opval))));
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 105:
 #line 823 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 106:
@@ -892,13 +892,13 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 107:
 #line 833 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
-                         (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); ;}
+                         (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); }
     break;
 
   case 108:
@@ -906,7 +906,7 @@ case 2:
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 op_append_elem(OP_LIST,
                                   op_prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
-                       ;}
+                       }
     break;
 
   case 111:
@@ -916,7 +916,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 112:
@@ -924,7 +924,7 @@ case 2:
     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 113:
@@ -935,7 +935,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'a');
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 114:
@@ -945,7 +945,7 @@ case 2:
                                        scalar((ps[(3) - (4)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 115:
@@ -955,7 +955,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 116:
@@ -968,7 +968,7 @@ case 2:
                          TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(5) - (6)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 117:
@@ -980,7 +980,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 118:
@@ -990,7 +990,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 119:
@@ -1001,7 +1001,7 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'a');
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 120:
@@ -1011,7 +1011,7 @@ case 2:
                                               newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 121:
@@ -1020,7 +1020,7 @@ case 2:
                                   newCVREF(0, scalar((ps[(1) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 122:
@@ -1030,7 +1030,7 @@ case 2:
                          TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')');
                          TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 123:
@@ -1038,7 +1038,7 @@ case 2:
     { (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 124:
@@ -1048,21 +1048,21 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')');
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 125:
 #line 955 "perly.y"
     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 126:
 #line 959 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 127:
@@ -1071,49 +1071,49 @@ case 2:
                                scalar((ps[(1) - (3)].val.opval));
                            (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 128:
 #line 969 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 129:
 #line 973 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 130:
 #line 977 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 131:
 #line 981 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 132:
 #line 985 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 133:
 #line 989 "perly.y"
     { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 134:
@@ -1128,28 +1128,28 @@ case 2:
                              op = (UNOP*)op->op_first; /* get to range */
                              token_getmad((ps[(2) - (3)].val.i_tkval),(OP*)op,'o');
                            });
-                       ;}
+                       }
     break;
 
   case 135:
 #line 1005 "perly.y"
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 136:
 #line 1009 "perly.y"
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 137:
 #line 1013 "perly.y"
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 138:
@@ -1159,14 +1159,14 @@ case 2:
                                ((yyval.opval)->op_type == OP_NOT
                                    ? ((UNOP*)(yyval.opval))->op_first : (yyval.opval)),
                                '~');
-                       ;}
+                       }
     break;
 
   case 139:
 #line 1027 "perly.y"
     { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 140:
@@ -1176,21 +1176,21 @@ case 2:
                                    (ps[(2) - (2)].val.opval)
                                );
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'+');
-                       ;}
+                       }
     break;
 
   case 141:
 #line 1038 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 142:
 #line 1042 "perly.y"
     { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 143:
@@ -1198,7 +1198,7 @@ case 2:
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 144:
@@ -1206,7 +1206,7 @@ case 2:
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 145:
@@ -1214,7 +1214,7 @@ case 2:
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 146:
@@ -1222,7 +1222,7 @@ case 2:
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 147:
@@ -1230,7 +1230,7 @@ case 2:
     { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 148:
@@ -1238,7 +1238,7 @@ case 2:
     { (yyval.opval) = newANONLIST((OP*)NULL);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 149:
@@ -1247,7 +1247,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 150:
@@ -1256,7 +1256,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 151:
@@ -1266,21 +1266,21 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
                          OP_GETMAD((ps[(3) - (5)].val.opval),(yyval.opval),'s');
                          OP_GETMAD((ps[(4) - (5)].val.opval),(yyval.opval),'a');
-                       ;}
+                       }
     break;
 
   case 152:
 #line 1103 "perly.y"
     { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 153:
 #line 1107 "perly.y"
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
-                       ;}
+                       }
     break;
 
   case 154:
@@ -1295,7 +1295,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 155:
@@ -1311,7 +1311,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 156:
@@ -1322,7 +1322,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 157:
@@ -1334,7 +1334,7 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 162:
@@ -1342,26 +1342,26 @@ case 2:
     { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval));
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':');
-                       ;}
+                       }
     break;
 
   case 163:
 #line 1165 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, op_lvalue((ps[(2) - (2)].val.opval),OP_REFGEN));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
   case 164:
 #line 1169 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 165:
 #line 1171 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k');
-                       ;}
+                       }
     break;
 
   case 166:
@@ -1369,12 +1369,12 @@ case 2:
     { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 167:
 #line 1180 "perly.y"
-    { (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); ;}
+    { (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); }
     break;
 
   case 168:
@@ -1382,37 +1382,37 @@ case 2:
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
   case 169:
 #line 1187 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 170:
 #line 1189 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 171:
 #line 1191 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 172:
 #line 1193 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 173:
 #line 1195 "perly.y"
-    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
+    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));}
     break;
 
   case 174:
 #line 1197 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 175:
@@ -1424,7 +1424,7 @@ case 2:
                                        ref((ps[(1) - (4)].val.opval), OP_ASLICE)));
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
-                       ;}
+                       }
     break;
 
   case 176:
@@ -1438,29 +1438,43 @@ case 2:
                          TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
                          TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
-                       ;}
+                       }
     break;
 
   case 177:
 #line 1219 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+    { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
+                               newOP(OP_PUSHMARK, 0),
+                                   newLISTOP(OP_KVHSLICE, 0,
+                                       list((ps[(3) - (5)].val.opval)),
+                                       ref((ps[(1) - (5)].val.opval), OP_KVHSLICE)));
+                           PL_parser->expect = XOPERATOR;
+                         TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
+                         TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
+                         TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
+                       }
     break;
 
   case 178:
-#line 1221 "perly.y"
-    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); ;}
+#line 1230 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 179:
-#line 1223 "perly.y"
+#line 1232 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); }
+    break;
+
+  case 180:
+#line 1234 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 180:
-#line 1228 "perly.y"
+  case 181:
+#line 1239 "perly.y"
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
@@ -1472,122 +1486,122 @@ case 2:
                              token_getmad((ps[(2) - (4)].val.i_tkval),op,'(');
                              token_getmad((ps[(4) - (4)].val.i_tkval),op,')');
                          });
-                       ;}
+                       }
     break;
 
-  case 181:
-#line 1241 "perly.y"
+  case 182:
+#line 1252 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 182:
-#line 1246 "perly.y"
+  case 183:
+#line 1257 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE;
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 183:
-#line 1251 "perly.y"
+  case 184:
+#line 1262 "perly.y"
     { (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 184:
-#line 1255 "perly.y"
+  case 185:
+#line 1266 "perly.y"
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 185:
-#line 1259 "perly.y"
+  case 186:
+#line 1270 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 186:
-#line 1263 "perly.y"
+  case 187:
+#line 1274 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 187:
-#line 1267 "perly.y"
+  case 188:
+#line 1278 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 188:
-#line 1271 "perly.y"
+  case 189:
+#line 1282 "perly.y"
     { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 189:
-#line 1275 "perly.y"
+  case 190:
+#line 1286 "perly.y"
     { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 190:
-#line 1279 "perly.y"
-    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;}
+  case 191:
+#line 1290 "perly.y"
+    { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
     break;
 
-  case 191:
-#line 1281 "perly.y"
+  case 192:
+#line 1292 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                           op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); ;}
+                           op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); }
     break;
 
-  case 192:
-#line 1284 "perly.y"
+  case 193:
+#line 1295 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
-                       ;}
+                       }
     break;
 
-  case 193:
-#line 1288 "perly.y"
+  case 194:
+#line 1299 "perly.y"
     { (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0);
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 194:
-#line 1294 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+  case 195:
+#line 1305 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
-  case 195:
-#line 1296 "perly.y"
+  case 196:
+#line 1307 "perly.y"
     { (yyval.opval) = (ps[(1) - (3)].val.opval);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 196:
-#line 1301 "perly.y"
+  case 197:
+#line 1312 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                               scalar((ps[(1) - (1)].val.opval))); ;}
+                               scalar((ps[(1) - (1)].val.opval))); }
     break;
 
-  case 197:
-#line 1304 "perly.y"
+  case 198:
+#line 1315 "perly.y"
     { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
                            ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
                            : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
@@ -1595,20 +1609,20 @@ case 2:
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 198:
-#line 1313 "perly.y"
+  case 199:
+#line 1324 "perly.y"
     { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
                          TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 199:
-#line 1319 "perly.y"
+  case 200:
+#line 1330 "perly.y"
     {
                            if (   (ps[(1) - (1)].val.opval)->op_type != OP_TRANS
                                && (ps[(1) - (1)].val.opval)->op_type != OP_TRANSR
@@ -1618,169 +1632,166 @@ case 2:
                                SAVEFREESV(PL_compcv);
                            } else
                                (yyval.ival) = 0;
-                       ;}
+                       }
     break;
 
-  case 200:
-#line 1330 "perly.y"
+  case 201:
+#line 1341 "perly.y"
     { (yyval.opval) = pmruntime((ps[(1) - (5)].val.opval), (ps[(4) - (5)].val.opval), 1, (ps[(2) - (5)].val.ival));
                          TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 203:
-#line 1337 "perly.y"
+  case 204:
+#line 1348 "perly.y"
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'X');
-                       ;}
+                       }
     break;
 
-  case 205:
-#line 1347 "perly.y"
+  case 206:
+#line 1358 "perly.y"
     { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
                          DO_MAD(
                              token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
                              append_madprops((ps[(3) - (3)].val.opval)->op_madprop, (yyval.opval), 'a');
                              (ps[(3) - (3)].val.opval)->op_madprop = 0;
                          );
-                       ;}
+                       }
     break;
 
-  case 206:
-#line 1355 "perly.y"
+  case 207:
+#line 1366 "perly.y"
     { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
-                       ;}
+                       }
     break;
 
-  case 207:
-#line 1362 "perly.y"
+  case 208:
+#line 1373 "perly.y"
     { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
-                       ;}
+                       }
     break;
 
-  case 208:
-#line 1367 "perly.y"
+  case 209:
+#line 1378 "perly.y"
     { (yyval.opval) = sawparens(newNULLLIST());
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
-                       ;}
-    break;
-
-  case 209:
-#line 1372 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+                       }
     break;
 
   case 210:
-#line 1374 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1383 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 211:
-#line 1376 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1385 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 212:
-#line 1381 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 1387 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 213:
-#line 1383 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1392 "perly.y"
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 214:
-#line 1387 "perly.y"
-    { (yyval.opval) = (OP*)NULL; ;}
+#line 1394 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 215:
-#line 1389 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1398 "perly.y"
+    { (yyval.opval) = (OP*)NULL; }
     break;
 
   case 216:
-#line 1395 "perly.y"
-    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
+#line 1400 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
     break;
 
   case 217:
-#line 1399 "perly.y"
+#line 1406 "perly.y"
+    { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
+    break;
+
+  case 218:
+#line 1410 "perly.y"
     { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
-                       ;}
+                       }
     break;
 
-  case 218:
-#line 1405 "perly.y"
+  case 219:
+#line 1416 "perly.y"
     { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
-                       ;}
+                       }
     break;
 
-  case 219:
-#line 1411 "perly.y"
+  case 220:
+#line 1422 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
-                       ;}
+                       }
     break;
 
-  case 220:
-#line 1417 "perly.y"
+  case 221:
+#line 1428 "perly.y"
     { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
-                       ;}
+                       }
     break;
 
-  case 221:
-#line 1423 "perly.y"
+  case 222:
+#line 1434 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
-                       ;}
+                       }
     break;
 
-  case 222:
-#line 1429 "perly.y"
+  case 223:
+#line 1440 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
-                       ;}
-    break;
-
-  case 223:
-#line 1436 "perly.y"
-    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
+                       }
     break;
 
   case 224:
-#line 1438 "perly.y"
-    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
+#line 1447 "perly.y"
+    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
     break;
 
   case 225:
-#line 1440 "perly.y"
-    { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); ;}
+#line 1449 "perly.y"
+    { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
     break;
 
   case 226:
-#line 1443 "perly.y"
-    { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
+#line 1451 "perly.y"
+    { (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); }
     break;
 
-
-/* Line 1267 of yacc.c.  */
+  case 227:
+#line 1454 "perly.y"
+    { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+    break;
 
       default: break;
     
 
 /* Generated from:
- * 9e20ffc538d3ca3c4dbd4bd0d0c82f329cb509a0e5b976490f105c62fcddec27 perly.y
+ * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index cd50d6d..c570d60 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -5,27 +5,24 @@
  */
 
 #ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 2.3.  */
+/* A Bison parser, made by GNU Bison 2.6.5.  */
 
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
      PEG = 337
    };
 #endif
+
 /* Tokens.  */
 #define GRAMPROG 258
 #define GRAMEXPR 259
 #define PEG 337
 
 
-
-
 #ifdef PERL_IN_TOKE_C
 static bool
 S_is_opval_token(int type) {
@@ -239,6 +243,8 @@ S_is_opval_token(int type) {
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
 {
+/* Line 2042 of yacc.c  */
+
     I32        ival; /* __DEFAULT__ (marker for regen_perly.pl;
                                must always be 1st union member) */
     char *pval;
@@ -254,18 +260,32 @@ typedef union YYSTYPE
 #ifdef PERL_MAD
     TOKEN* tkval;
 #endif
-}
-/* Line 1529 of yacc.c.  */
-       YYSTYPE;
+
+
+/* Line 2042 of yacc.c  */
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
 
 /* Generated from:
- * 9e20ffc538d3ca3c4dbd4bd0d0c82f329cb509a0e5b976490f105c62fcddec27 perly.y
+ * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
index 88024ba..52cf54d 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,16 +6,16 @@
 
 #define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2910
+#define YYLAST   2833
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  66
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  226
+#define YYNRULES  227
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  455
+#define YYNSTATES  459
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -85,12 +85,12 @@ static const yytype_uint16 yyprhs[] =
      517,   520,   523,   526,   529,   532,   535,   538,   542,   545,
      550,   554,   560,   563,   566,   571,   577,   582,   588,   590,
      592,   594,   596,   602,   605,   607,   610,   614,   616,   619,
-     621,   623,   625,   627,   629,   631,   636,   642,   644,   646,
-     650,   655,   659,   661,   664,   667,   669,   672,   675,   677,
-     680,   682,   685,   687,   691,   693,   697,   699,   703,   708,
-     709,   715,   717,   719,   721,   723,   727,   730,   734,   737,
-     739,   741,   743,   744,   746,   747,   749,   751,   754,   757,
-     760,   763,   766,   769,   771,   773,   775
+     621,   623,   625,   627,   629,   631,   636,   642,   648,   650,
+     652,   656,   661,   665,   667,   670,   673,   675,   678,   681,
+     683,   686,   688,   691,   693,   697,   699,   703,   705,   709,
+     714,   715,   721,   723,   725,   727,   729,   733,   736,   740,
+     743,   745,   747,   749,   750,   752,   753,   755,   757,   760,
+     763,   766,   769,   772,   775,   777,   779,   781
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -160,20 +160,21 @@ static const yytype_int16 yyrhs[] =
      102,   146,   101,    -1,    29,    -1,   102,   101,    -1,   164,
       -1,   168,    -1,   166,    -1,   165,    -1,   167,    -1,   151,
       -1,   165,    11,   146,    12,    -1,   165,     9,   146,    20,
-      10,    -1,    26,    -1,   163,    -1,   163,   102,   101,    -1,
-     163,   102,   146,   101,    -1,    68,   141,   160,    -1,    53,
-      -1,    53,   156,    -1,    79,   147,    -1,    59,    -1,    59,
-     112,    -1,    59,   156,    -1,    71,    -1,    71,   156,    -1,
-      32,    -1,    32,   156,    -1,    56,    -1,    56,   102,   101,
-      -1,    30,    -1,    30,   102,   101,    -1,    31,    -1,    57,
-     102,   101,    -1,    57,   102,   146,   101,    -1,    -1,    27,
-     157,   102,   147,   101,    -1,    23,    -1,   148,    -1,    55,
-      -1,    34,    -1,    70,   159,   144,    -1,    70,   159,    -1,
-     102,   146,   101,    -1,   102,   101,    -1,   164,    -1,   166,
-      -1,   165,    -1,    -1,   147,    -1,    -1,   146,    -1,   164,
-      -1,    19,   169,    -1,    15,   169,    -1,    16,   169,    -1,
-      17,   169,    -1,    65,   169,    -1,    18,   169,    -1,    23,
-      -1,   164,    -1,   112,    -1,    28,    -1
+      10,    -1,   166,     9,   146,    20,    10,    -1,    26,    -1,
+     163,    -1,   163,   102,   101,    -1,   163,   102,   146,   101,
+      -1,    68,   141,   160,    -1,    53,    -1,    53,   156,    -1,
+      79,   147,    -1,    59,    -1,    59,   112,    -1,    59,   156,
+      -1,    71,    -1,    71,   156,    -1,    32,    -1,    32,   156,
+      -1,    56,    -1,    56,   102,   101,    -1,    30,    -1,    30,
+     102,   101,    -1,    31,    -1,    57,   102,   101,    -1,    57,
+     102,   146,   101,    -1,    -1,    27,   157,   102,   147,   101,
+      -1,    23,    -1,   148,    -1,    55,    -1,    34,    -1,    70,
+     159,   144,    -1,    70,   159,    -1,   102,   146,   101,    -1,
+     102,   101,    -1,   164,    -1,   166,    -1,   165,    -1,    -1,
+     147,    -1,    -1,   146,    -1,   164,    -1,    19,   169,    -1,
+      15,   169,    -1,    16,   169,    -1,    17,   169,    -1,    65,
+     169,    -1,    18,   169,    -1,    23,    -1,   164,    -1,   112,
+      -1,    28,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -196,16 +197,16 @@ static const yytype_uint16 yyrline[] =
     1030,  1037,  1041,  1045,  1050,  1055,  1060,  1069,  1074,  1079,
     1085,  1091,  1102,  1106,  1110,  1122,  1135,  1143,  1155,  1156,
     1157,  1158,  1159,  1164,  1168,  1170,  1174,  1179,  1181,  1186,
-    1188,  1190,  1192,  1194,  1196,  1198,  1207,  1218,  1220,  1222,
-    1227,  1240,  1245,  1250,  1254,  1258,  1262,  1266,  1270,  1274,
-    1278,  1280,  1283,  1287,  1293,  1295,  1300,  1303,  1312,  1319,
-    1318,  1334,  1335,  1336,  1342,  1346,  1354,  1361,  1366,  1371,
-    1373,  1375,  1380,  1382,  1387,  1388,  1394,  1398,  1404,  1410,
-    1416,  1422,  1428,  1435,  1437,  1439,  1442
+    1188,  1190,  1192,  1194,  1196,  1198,  1207,  1218,  1229,  1231,
+    1233,  1238,  1251,  1256,  1261,  1265,  1269,  1273,  1277,  1281,
+    1285,  1289,  1291,  1294,  1298,  1304,  1306,  1311,  1314,  1323,
+    1330,  1329,  1345,  1346,  1347,  1353,  1357,  1365,  1372,  1377,
+    1382,  1384,  1386,  1391,  1393,  1398,  1399,  1405,  1409,  1415,
+    1421,  1427,  1433,  1439,  1446,  1448,  1450,  1453
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -224,17 +225,17 @@ static const char *const yytname[] =
   "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "DORDOR", "OROR",
   "ANDAND", "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'", "'~'",
   "REFGEN", "UMINUS", "POWOP", "POSTDEC", "POSTINC", "PREDEC", "PREINC",
-  "ARROW", "')'", "'('", "PEG", "$accept", "grammar", "@1", "@2", "@3",
-  "@4", "@5", "@6", "block", "formblock", "remember", "mblock",
+  "ARROW", "')'", "'('", "PEG", "$accept", "grammar", "$@1", "$@2", "$@3",
+  "$@4", "$@5", "$@6", "block", "formblock", "remember", "mblock",
   "mremember", "stmtseq", "formstmtseq", "fullstmt", "labfullstmt",
-  "barestmt", "@7", "@8", "@9", "formline", "formarg", "sideff", "else",
+  "barestmt", "$@7", "$@8", "$@9", "formline", "formarg", "sideff", "else",
   "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr",
   "formname", "startsub", "startanonsub", "startformsub", "subname",
   "proto", "subattrlist", "myattrlist", "subbody", "expr", "listexpr",
   "listop", "@10", "method", "subscripted", "termbinop", "termunop",
   "anonymous", "termdo", "term", "@11", "myattrterm", "myterm",
   "optlistexpr", "optexpr", "my_scalar", "amper", "scalar", "ary", "hsh",
-  "arylen", "star", "indirob", 0
+  "arylen", "star", "indirob", YY_NULL
 };
 #endif
 
@@ -279,10 +280,10 @@ static const yytype_uint8 yyr1[] =
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   157,
-     156,   156,   156,   156,   156,   158,   158,   159,   159,   159,
-     159,   159,   160,   160,   161,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   169,   169,   169
+     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
+     157,   156,   156,   156,   156,   156,   158,   158,   159,   159,
+     159,   159,   159,   160,   160,   161,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   169,   169,   169
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -305,350 +306,368 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     3,     2,     4,
        3,     5,     2,     2,     4,     5,     4,     5,     1,     1,
        1,     1,     5,     2,     1,     2,     3,     1,     2,     1,
-       1,     1,     1,     1,     1,     4,     5,     1,     1,     3,
-       4,     3,     1,     2,     2,     1,     2,     2,     1,     2,
-       1,     2,     1,     3,     1,     3,     1,     3,     4,     0,
-       5,     1,     1,     1,     1,     3,     2,     3,     2,     1,
-       1,     1,     0,     1,     0,     1,     1,     2,     2,     2,
-       2,     2,     2,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     4,     5,     5,     1,     1,
+       3,     4,     3,     1,     2,     2,     1,     2,     2,     1,
+       2,     1,     2,     1,     3,     1,     3,     1,     3,     4,
+       0,     5,     1,     1,     1,     1,     3,     2,     3,     2,
+       1,     1,     1,     0,     1,     0,     1,     1,     2,     2,
+       2,     2,     2,     2,     1,     1,     1,     1
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     2,     4,     6,     8,    10,    12,     0,    16,   214,
+       0,     2,     4,     6,     8,    10,    12,     0,    16,   215,
        0,     0,     0,    19,     1,    19,     0,     0,     0,     0,
-       0,     0,     0,     0,   201,     0,     0,   177,   199,   167,
-     194,   196,   190,    79,   204,    79,   182,   203,   192,     0,
-       0,   185,   212,     0,     0,     0,     0,     0,     0,   188,
-       0,     0,     0,     0,     0,     0,     0,   215,    95,   202,
-     174,   158,   159,   160,   161,    98,   164,     5,   178,   169,
+       0,     0,     0,     0,   202,     0,     0,   178,   200,   167,
+     195,   197,   191,    79,   205,    79,   183,   204,   193,     0,
+       0,   186,   213,     0,     0,     0,     0,     0,     0,   189,
+       0,     0,     0,     0,     0,     0,     0,   216,    95,   203,
+     174,   158,   159,   160,   161,    98,   164,     5,   179,   169,
      172,   171,   173,   170,    16,     7,    54,    50,    27,    80,
        0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
        0,    28,    65,     9,     0,    55,     0,    11,    24,    23,
-       0,     0,   148,     0,   139,   140,   223,   226,   225,   224,
-     218,   219,   220,   222,   217,   212,     0,     0,     0,     0,
-     191,     0,    83,   183,     0,     0,   214,   186,   187,   223,
-     213,   105,   224,     0,   221,   201,    82,   153,     0,   152,
-     169,     0,     0,    81,   212,   165,     0,   206,   209,   211,
-     210,   189,   184,   141,   142,   163,   146,   145,   168,     0,
+       0,     0,   148,     0,   139,   140,   224,   227,   226,   225,
+     219,   220,   221,   223,   218,   213,     0,     0,     0,     0,
+     192,     0,    83,   184,     0,     0,   215,   187,   188,   224,
+     214,   105,   225,     0,   222,   202,    82,   153,     0,   152,
+     169,     0,     0,    81,   213,   165,     0,   207,   210,   212,
+     211,   190,   185,   141,   142,   163,   146,   145,   168,     0,
        0,     0,     0,    96,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   144,   143,     0,     0,     0,     0,     0,     0,
-       0,    19,    77,    78,     0,    33,    16,    16,    16,    16,
-      16,    16,     0,    16,    16,    39,     0,    46,    49,     0,
-       0,     0,     0,     0,     0,    26,    25,    20,   147,   103,
-     214,     0,     0,   195,   107,    84,    85,   193,   197,     0,
-       0,     0,    99,     0,     0,   150,     0,   181,   208,     0,
-      89,   205,     0,   166,    94,    93,    92,    97,     0,     0,
-     121,     0,   134,   130,   131,   127,   128,   125,     0,   137,
-     136,   135,   133,   132,   129,   138,   126,     0,     0,   109,
-       0,   102,   110,   179,     0,     0,     0,     0,     0,     0,
-       0,    76,     0,    30,     0,     0,    70,     0,     0,     0,
-       0,     0,    16,     0,     0,    66,    58,    59,    72,    56,
-      57,    60,    61,     0,     0,   123,   212,    87,     0,   198,
-     106,     0,   154,     0,   156,     0,   149,   207,    88,     0,
-       0,     0,   114,   120,     0,     0,     0,   118,     0,   214,
-     180,     0,   112,     0,   175,     0,    14,    16,    29,    83,
-      16,    32,     0,     0,    71,     0,     0,    73,    75,     0,
-       0,   216,    69,    74,     0,     0,    55,     0,     0,     0,
-     104,   200,   108,    86,   151,   100,   155,   157,   124,     0,
-     117,   162,     0,   113,   119,     0,   115,   176,   111,     0,
-      85,    47,   212,    67,    67,     0,     0,     0,     0,    70,
-       0,     0,     0,   122,   116,   101,     0,     0,    19,     0,
-       0,     0,    18,    62,    62,     0,    65,     0,     0,    37,
-      38,    21,    91,    90,    31,     0,    34,    65,    65,    19,
-       0,     0,    35,    36,     0,    45,    67,    65,     0,    48,
-      40,    41,     0,    63,     0,    65,     0,    44,     0,    52,
-      22,    17,     0,    43,     0,    15,    19,    51,     0,     0,
-       0,    62,    42,    53,    64
+       0,     0,    19,    77,    78,     0,    33,    16,    16,    16,
+      16,    16,    16,     0,    16,    16,    39,     0,    46,    49,
+       0,     0,     0,     0,     0,     0,    26,    25,    20,   147,
+     103,   215,     0,     0,   196,   107,    84,    85,   194,   198,
+       0,     0,     0,    99,     0,     0,   150,     0,   182,   209,
+       0,    89,   206,     0,   166,    94,    93,    92,    97,     0,
+       0,   121,     0,   134,   130,   131,   127,   128,   125,     0,
+     137,   136,   135,   133,   132,   129,   138,   126,     0,     0,
+     109,     0,   102,   110,   180,     0,     0,     0,     0,     0,
+       0,     0,     0,    76,     0,    30,     0,     0,    70,     0,
+       0,     0,     0,     0,    16,     0,     0,    66,    58,    59,
+      72,    56,    57,    60,    61,     0,     0,   123,   213,    87,
+       0,   199,   106,     0,   154,     0,   156,     0,   149,   208,
+      88,     0,     0,     0,   114,   120,     0,     0,     0,   118,
+       0,   215,   181,     0,   112,     0,   175,     0,     0,    14,
+      16,    29,    83,    16,    32,     0,     0,    71,     0,     0,
+      73,    75,     0,     0,   217,    69,    74,     0,     0,    55,
+       0,     0,     0,   104,   201,   108,    86,   151,   100,   155,
+     157,   124,     0,   117,   162,     0,   113,   119,     0,   115,
+     176,   177,   111,     0,    85,    47,   213,    67,    67,     0,
+       0,     0,     0,    70,     0,     0,     0,   122,   116,   101,
+       0,     0,    19,     0,     0,     0,    18,    62,    62,     0,
+      65,     0,     0,    37,    38,    21,    91,    90,    31,     0,
+      34,    65,    65,    19,     0,     0,    35,    36,     0,    45,
+      67,    65,     0,    48,    40,    41,     0,    63,     0,    65,
+       0,    44,     0,    52,    22,    17,     0,    43,     0,    15,
+      19,    51,     0,     0,     0,    62,    42,    53,    64
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     7,     8,     9,    10,    11,    12,    13,   108,   338,
-      15,   403,   419,   100,   428,   217,    98,    99,   339,   285,
-     398,   440,   447,    94,   422,   207,   400,   353,   343,   297,
-     346,   355,   349,   282,   195,   121,   192,   138,   226,   308,
-     241,   414,    95,    58,    59,   306,   271,    60,    61,    62,
-      63,    64,    65,   117,    66,   147,   131,    67,   350,    68,
+      -1,     7,     8,     9,    10,    11,    12,    13,   108,   341,
+      15,   407,   423,   100,   432,   218,    98,    99,   342,   287,
+     402,   444,   451,    94,   426,   208,   404,   356,   346,   299,
+     349,   358,   352,   284,   196,   121,   193,   138,   227,   310,
+     242,   418,    95,    58,    59,   308,   272,    60,    61,    62,
+      63,    64,    65,   117,    66,   147,   131,    67,   353,    68,
       69,    70,    71,    72,    73,   110
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -391
+#define YYPACT_NINF -399
 static const yytype_int16 yypact[] =
 {
-     594,  -391,  -391,  -391,  -391,  -391,  -391,    43,  -391,  2708,
-      17,  1095,  1000,  -391,  -391,  -391,  1792,  2708,  2708,   215,
-     215,   215,   215,   215,  -391,   215,   215,  -391,  -391,    28,
-     -17,  -391,  2708,  -391,  -391,  -391,  2708,  -391,    20,    25,
-      44,  1700,  1516,   215,  1608,  1882,    72,  2708,     3,  2708,
-    2708,  2708,  2708,  2708,  2708,  2708,  1972,    62,    38,  -391,
-       6,  -391,  -391,  -391,  -391,  2770,  -391,  -391,    49,    98,
-     143,  -391,  -391,   110,  -391,  -391,  -391,  -391,  -391,  -391,
-      72,   146,  -391,    86,   109,   114,   119,    -6,   120,   121,
-      17,  -391,   177,  -391,   220,  1698,  1000,  -391,  -391,  -391,
-     430,   525,  -391,    26,   408,   408,  -391,  -391,  -391,  -391,
-    -391,  -391,  -391,  -391,  -391,  2708,   139,   155,  2708,   144,
-     314,    17,   147,  2770,   157,  2064,  1516,  -391,   314,  1423,
-      38,  -391,  1344,  2708,  -391,   162,  -391,  -391,   167,   314,
-      21,   270,    16,  -391,  2708,   314,  2156,   218,  -391,  -391,
-    -391,   314,    38,   408,   408,   408,   -27,   -27,   276,   -29,
-    2708,  2708,  2708,  2708,  2708,  2708,  2248,  2708,  2708,  2708,
-    2708,  2708,  2708,  2708,  2708,  2708,  2708,  2708,  2708,  2708,
-    2708,  2708,  -391,  -391,    73,  2340,  2708,  2708,  2708,  2708,
-    2708,  -391,   271,  -391,   272,  -391,  -391,  -391,  -391,  -391,
-    -391,  -391,   212,  -391,  -391,  -391,    17,  -391,  -391,  2708,
-    2708,  2708,  2708,  2708,  2708,  -391,  -391,  -391,  -391,  -391,
-    2708,  2708,    48,  -391,  -391,  -391,   228,  -391,  -391,   113,
-     202,  2708,    38,  2432,  2524,  -391,   306,  -391,  -391,   116,
-     294,  -391,  2708,   310,   245,   245,  -391,  2770,    39,    53,
-    -391,   198,   247,  1593,   171,   417,   222,  2770,  2730,  1174,
-    1174,  1314,  1393,  1501,  1352,   408,   408,  2708,  2708,  -391,
-    2616,   224,  -391,  -391,   201,   125,    56,   142,    59,   175,
-     620,  -391,   309,  -391,    57,   304,  2708,  2708,  2708,  2708,
-     323,  1188,  -391,  2708,  2708,  -391,    62,  -391,    62,    62,
-      62,    62,    62,   240,   -38,  -391,  2708,   319,    17,  -391,
-    -391,   312,  -391,   320,  -391,   341,  -391,  -391,  -391,    66,
-    2708,   336,  -391,  -391,  2708,   178,    71,  -391,   415,  2708,
-    -391,   340,  -391,   345,  -391,   346,  -391,  -391,  -391,   147,
-    -391,  -391,   328,   258,    62,   259,   260,    62,  -391,   278,
-     279,  -391,  -391,  -391,   282,   360,   350,  2708,   284,   290,
-    -391,  -391,  -391,  -391,  -391,  -391,  -391,  -391,  -391,   100,
-    -391,  2810,   390,  -391,  -391,   301,  -391,  -391,  -391,   386,
-     228,  -391,  2708,  -391,  -391,   399,   399,  2708,   399,  2708,
-     311,   399,   399,  -391,  -391,  -391,   342,    78,  -391,   395,
-     399,   399,  -391,   153,   153,   322,   177,   400,   399,  -391,
-    -391,  -391,  -391,  -391,  -391,   715,  -391,   177,   177,  -391,
-     399,   330,  -391,  -391,   399,  -391,  -391,   177,    36,  -391,
-    -391,  -391,   810,  -391,  2708,   177,  1281,  -391,   402,   352,
-    -391,  -391,   332,  -391,   334,  -391,  -391,  -391,   399,   399,
-     905,   153,  -391,  -391,  -391
+     695,  -399,  -399,  -399,  -399,  -399,  -399,    76,  -399,  2714,
+      84,  1101,  1006,  -399,  -399,  -399,  1798,  2714,  2714,   204,
+     204,   204,   204,   204,  -399,   204,   204,  -399,  -399,   101,
+       6,  -399,  2714,  -399,  -399,  -399,  2714,  -399,    43,    52,
+      53,  1706,  1522,   204,  1614,  1888,    56,  2714,    48,  2714,
+    2714,  2714,  2714,  2714,  2714,  2714,  1978,    20,    79,  -399,
+       2,  -399,  -399,  -399,  -399,   332,  -399,  -399,    64,    96,
+     114,   156,  -399,   170,  -399,  -399,  -399,  -399,  -399,  -399,
+      56,   166,  -399,    88,    90,   102,   103,    -1,   119,   141,
+      84,  -399,   148,  -399,   178,  1976,  1006,  -399,  -399,  -399,
+     436,   531,  -399,    -3,   306,   306,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  2714,   143,   145,  2714,   115,
+    1873,    84,   229,   332,   155,  2070,  1522,  -399,  1873,  1429,
+      79,  -399,  1350,  2714,  -399,   160,  -399,  -399,   161,  1873,
+      13,   247,    63,  -399,  2714,  1873,  2162,   194,  -399,  -399,
+    -399,  1873,    79,   306,   306,   306,   140,   140,   257,   -31,
+    2714,  2714,  2714,  2714,  2714,  2714,  2254,  2714,  2714,  2714,
+    2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,  2714,
+    2714,  2714,  -399,  -399,    47,  2346,  2714,  2714,  2714,  2714,
+    2714,  2714,  -399,   246,  -399,   253,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,   169,  -399,  -399,  -399,    84,  -399,  -399,
+    2714,  2714,  2714,  2714,  2714,  2714,  -399,  -399,  -399,  -399,
+    -399,  2714,  2714,    11,  -399,  -399,  -399,   206,  -399,  -399,
+     117,   174,  2714,    79,  2438,  2530,  -399,   278,  -399,  -399,
+     230,   264,  -399,  2714,   282,   220,   220,  -399,   332,    75,
+      41,  -399,   243,  1182,  1783,  1599,   519,   421,   332,   251,
+    1320,  1320,  1399,  1507,  1691,  1358,   306,   306,  2714,  2714,
+    -399,  2622,   200,  -399,  -399,   248,   100,    60,   124,    70,
+     183,   203,   626,  -399,   283,  -399,    16,   293,  2714,  2714,
+    2714,  2714,   302,  1194,  -399,  2714,  2714,  -399,    20,  -399,
+      20,    20,    20,    20,    20,   221,    12,  -399,  2714,   297,
+      84,  -399,  -399,   281,  -399,   303,  -399,   307,  -399,  -399,
+    -399,    91,  2714,   333,  -399,  -399,  2714,   233,    94,  -399,
+     322,  2714,  -399,   335,  -399,   340,  -399,   344,   345,  -399,
+    -399,  -399,   229,  -399,  -399,   319,   260,    20,   261,   262,
+      20,  -399,   287,   290,  -399,  -399,  -399,   296,   385,   252,
+    2714,   309,   311,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,    97,  -399,  2733,   397,  -399,  -399,   314,  -399,
+    -399,  -399,  -399,   404,   206,  -399,  2714,  -399,  -399,   416,
+     416,  2714,   416,  2714,   329,   416,   416,  -399,  -399,  -399,
+     357,    57,  -399,   413,   416,   416,  -399,    21,    21,   334,
+     148,   419,   416,  -399,  -399,  -399,  -399,  -399,  -399,   721,
+    -399,   148,   148,  -399,   416,   338,  -399,  -399,   416,  -399,
+    -399,   148,    28,  -399,  -399,  -399,   816,  -399,  2714,   148,
+    1287,  -399,   420,   368,  -399,  -399,   342,  -399,   347,  -399,
+    -399,  -399,   416,   416,   911,    21,  -399,  -399,  -399
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -391,  -391,  -391,  -391,  -391,  -391,  -391,  -391,   -10,  -391,
-     -33,   -95,  -391,   -12,  -391,   424,   356,    18,  -391,  -391,
-    -391,  -391,  -391,  -286,  -390,   -78,  -347,  -391,    69,  -115,
-    -281,     1,  -391,  -391,   283,   403,  -391,   -13,   138,   104,
-    -391,  -391,    -5,   -34,  -391,  -391,  -391,  -391,  -391,  -391,
-    -391,  -391,   195,  -391,  -391,  -391,  -109,  -119,  -391,  -391,
-       2,   446,   454,  -391,  -391,    32
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -10,  -399,
+     -70,  -170,  -399,   -12,  -399,   434,   361,     4,  -399,  -399,
+    -399,  -399,  -399,  -276,  -398,   182,  -369,  -399,    65,  -165,
+    -275,    24,  -399,  -399,   288,   448,  -399,    -2,   157,   106,
+    -399,  -399,    -4,   -34,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,   197,  -399,  -399,  -399,  -109,  -119,  -399,  -399,
+       7,   449,   450,  -399,  -399,    17
 };
 
 /* 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 -202
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -203
 static const yytype_int16 yytable[] =
 {
-      75,    92,    92,   101,    57,   352,   219,   230,   130,    19,
-     354,   103,   358,   359,   423,   164,   152,   165,    19,    20,
-      21,   109,   109,   109,   109,   109,    74,   109,   109,    93,
-     186,   127,   187,   144,   137,   237,   236,   401,   218,   118,
-     142,   191,   163,    14,   132,   109,   140,   160,   161,   162,
-     148,   159,   111,   112,   113,   114,   438,   115,   116,   321,
-     305,   454,   439,   361,   200,   322,   340,   193,   332,  -202,
-    -202,   334,   243,   184,   133,   134,   390,   341,   368,   436,
-     205,   130,   267,   373,   268,   119,    92,    74,    19,   202,
-      92,    92,   160,   161,   162,   143,   201,   269,   412,   232,
-     136,   303,   160,   161,   162,   146,   405,   186,   166,   187,
-     130,   224,   393,   222,   216,   160,   161,   162,   163,   190,
-     229,    57,   124,   234,   160,   161,   162,   125,   132,   160,
-     161,   162,   160,   161,   162,   160,   161,   162,   160,   161,
-     162,   239,   160,   161,   162,   331,   126,   160,   161,   162,
-     352,   185,   188,   442,   189,   244,   245,   246,   231,   248,
-     249,   251,   333,   286,   287,   288,   289,   290,   291,   194,
-     293,   294,   345,   225,   348,   270,   160,   161,   162,   280,
-     274,   275,   276,   277,   278,   279,   272,   304,   196,   160,
-     161,   162,   160,   161,   162,   335,   295,   362,   372,   420,
-     421,   160,   161,   162,   296,   298,   299,   300,   301,   302,
-     375,   197,   104,   105,   309,    57,   198,   317,   160,   161,
-     162,   199,   203,   204,    74,   206,   311,   120,   313,   315,
-      19,   123,   168,  -202,   170,   171,   128,   319,   106,   139,
-     208,   220,   145,   107,   151,   223,   153,   154,   155,   156,
-     157,   160,   161,   162,   160,   161,   162,   221,   227,   357,
-     179,   180,   325,   326,   -81,   328,   181,   182,   183,   233,
-      92,   184,   130,   399,   160,   161,   162,   160,   161,   162,
-     235,   344,   298,   347,   298,   170,   356,   242,   347,   347,
-     240,   404,   351,   406,   281,   284,   409,   410,   364,   323,
-     307,  -202,   330,   310,   379,   417,   418,   381,   168,   169,
-     170,   171,   180,   427,   292,   369,   316,   181,   182,   183,
-     318,   320,   184,   162,    57,   433,   329,   342,   425,   435,
-     337,   174,   175,   176,   177,   178,   179,   180,    19,   430,
-     431,   360,   181,   182,   183,   363,   370,   184,   130,   437,
-     376,   382,   347,   451,   452,   377,   378,   443,   247,   383,
-     384,   385,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   170,   171,   386,
-     389,   387,   347,   388,   344,   391,   415,   413,   160,   161,
-     162,   392,   209,   210,   211,   212,   160,   161,   162,   213,
-     394,   214,   395,   179,   180,    92,   396,   432,   402,   181,
-     182,   183,   408,   365,   184,   416,   411,   160,   161,   162,
-     426,   366,    92,   424,   445,   446,   160,   161,   162,   347,
-     -13,    76,   434,   448,   450,   449,    97,   444,   122,    74,
-      92,    16,   367,    17,    18,    19,    20,    21,    22,    23,
-      77,   -73,   215,    24,    25,    26,    27,    28,   407,    29,
-      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
-      81,    82,    83,    84,    85,    86,   283,   380,     0,    87,
-      88,    89,    90,    36,   397,    37,    38,    39,    40,    41,
-      42,   160,   161,   162,   149,    43,    44,    45,    46,    47,
-      48,    49,   150,   181,   182,   183,     0,   180,   184,    50,
-       0,     0,   181,   182,   183,     0,   374,   184,     0,   371,
-       0,    51,    52,    53,     0,    -3,    76,     0,    54,    55,
-       0,     0,    56,    91,    74,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    49,     1,     2,     3,
-       4,     5,     6,     0,    50,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
-       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
-     336,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
-      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
-      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
-       0,     0,    56,    91,    74,   429,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
-       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
-       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
-     441,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
-      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
-      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
-       0,     0,    56,    91,    74,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,    96,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    49,     0,     0,   453,
-       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    51,    52,    53,     0,
-       0,    76,     0,    54,    55,     0,     0,    56,    91,    74,
-       0,    16,     0,    17,    18,    19,    20,    21,    22,    23,
-      77,     0,     0,    24,    25,    26,    27,    28,     0,    29,
-      30,    31,    32,    33,    34,    78,    96,    79,    80,    35,
-      81,    82,    83,    84,    85,    86,     0,     0,     0,    87,
-      88,    89,    90,    36,     0,    37,    38,    39,    40,    41,
-      42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
+      75,    92,    92,   101,   192,    57,   220,   231,   130,   219,
+     427,   164,   103,   165,    19,    93,   152,   355,   357,   405,
+     361,   362,   186,   307,   187,   343,   109,   109,   109,   109,
+     109,   127,   109,   109,   137,   238,   344,   111,   112,   113,
+     114,   142,   115,   116,   144,   160,   161,   162,   442,   132,
+     109,   140,   159,   324,   443,   148,   268,   458,   269,   133,
+     134,   440,    19,    19,    20,    21,    74,   424,   425,   201,
+     244,   270,   334,   160,   161,   162,    14,   416,   194,   143,
+     206,   130,   336,   237,   136,   394,    92,   160,   161,   162,
+      92,    92,   163,    74,   203,   323,   160,   161,   162,   233,
+     217,   202,   305,   371,   166,   186,   376,   187,   119,   397,
+     130,   225,   118,   364,   223,   235,   409,   160,   161,   162,
+     333,   230,    57,   188,   348,   189,   351,   288,   289,   290,
+     291,   292,   293,   132,   295,   296,   160,   161,   162,   160,
+     161,   162,   240,   232,   335,   124,   160,   161,   162,   271,
+     146,   160,   161,   162,   125,   126,   245,   246,   247,   163,
+     249,   250,   252,   446,   355,   190,   185,   160,   161,   162,
+     160,   161,   162,   160,   161,   162,   160,   161,   162,   191,
+     282,   275,   276,   277,   278,   279,   280,   281,   306,   195,
+     197,   273,   198,   160,   161,   162,   207,   297,   209,   365,
+     160,   161,   162,   337,   199,   200,   298,   300,   301,   302,
+     303,   304,   378,    74,   104,   105,   224,    57,   311,    19,
+     408,   204,   410,   338,   360,   413,   414,   106,   313,   120,
+     315,   317,   107,   123,   421,   422,  -203,  -203,   128,   321,
+     184,   139,   431,   205,   145,   221,   151,   222,   153,   154,
+     155,   156,   157,   375,   437,   226,   228,   236,   439,   160,
+     161,   162,   -81,   234,   327,   328,   241,   330,   243,   283,
+     383,   294,    92,   385,   130,   312,   286,   403,   309,   160,
+     161,   162,   455,   456,   347,   300,   350,   300,   318,   359,
+     320,   350,   350,   322,   210,   211,   212,   213,   162,   354,
+     367,   214,   331,   215,   340,   167,   160,   161,   162,   160,
+     161,   162,   168,   169,   170,   171,   345,    19,   372,   160,
+     161,   162,   363,   366,   160,   161,   162,    57,   160,   161,
+     162,   319,   172,   173,   326,   174,   175,   176,   177,   178,
+     179,   180,   386,   373,   325,   379,   181,   182,   183,   332,
+     380,   184,   130,   -73,   381,   382,   350,   160,   161,   162,
+     248,   387,   388,   389,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   160,
+     161,   162,   368,   160,   161,   162,   167,   350,   390,   347,
+     419,   417,   391,   168,   169,   170,   171,   392,   160,   161,
+     162,   181,   182,   183,   369,   393,   184,   398,   370,    92,
+     395,   436,   396,   172,   173,   399,   174,   175,   176,   177,
+     178,   179,   180,   377,   400,   406,    92,   181,   182,   183,
+     412,   415,   184,   420,   350,   428,   -13,    76,   454,   430,
+     438,   450,   449,   452,    92,    74,    97,    16,   453,    17,
+      18,    19,    20,    21,    22,    23,    77,   216,   411,    24,
+      25,    26,    27,    28,   448,    29,    30,    31,    32,    33,
+      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,   285,   122,   170,    87,    88,    89,    90,    36,
+     401,    37,    38,    39,    40,    41,    42,   149,   150,   384,
+       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
+       0,   180,     0,     0,     0,    50,   181,   182,   183,     0,
+       0,   184,     0,   374,     0,     0,     0,    51,    52,    53,
+       0,    -3,    76,     0,    54,    55,     0,     0,    56,    91,
+      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
+      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
+      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      41,    42,   429,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,    49,   434,   435,     0,     0,     0,     0,   180,
+      50,     0,     0,   441,   181,   182,   183,     0,     0,   184,
+       0,   447,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    91,    74,   339,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    49,     1,     2,
+       3,     4,     5,     6,     0,    50,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
+      74,   433,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
+      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
+      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,    49,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    91,    74,   445,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
+       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
+      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    78,    96,    79,    80,
+      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
+      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,    49,     0,     0,   457,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,     0,     0,    76,     0,    54,
+      55,     0,     0,    56,    91,    74,     0,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,    77,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    78,    96,    79,    80,    35,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,    87,    88,    89,    90,    36,
+       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
+       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
+       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
+       0,     0,    76,     0,    54,    55,     0,     0,    56,    91,
+      74,     0,    16,     0,    17,    18,    19,    20,    21,    22,
+      23,    77,     0,     0,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    78,     0,    79,    80,
+      35,    81,    82,    83,    84,    85,    86,     0,     0,     0,
+      87,    88,    89,    90,    36,     0,    37,    38,    39,    40,
+      41,    42,     0,     0,     0,     0,    43,    44,    45,    46,
+      47,    48,    49,     0,     0,     0,     0,     0,     0,     0,
+      50,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,    52,    53,    76,     0,     0,     0,    54,
+      55,     0,     0,    56,    91,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,   -68,     0,     0,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
+       0,     0,     0,    35,     0,     0,  -203,     0,     0,     0,
+       0,     0,     0,   168,   169,   170,   171,    36,     0,    37,
+      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
+      44,    45,    46,    47,    48,    49,   174,   175,   176,   177,
+     178,   179,   180,    50,     0,     0,     0,   181,   182,   183,
+       0,     0,   184,     0,     0,    51,    52,    53,    76,     0,
+       0,     0,    54,    55,     0,     0,    56,     0,    16,     0,
+      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,     0,     0,     0,     0,    35,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    51,    52,    53,     0,     0,    76,     0,    54,    55,
-       0,     0,    56,    91,    74,     0,    16,     0,    17,    18,
-      19,    20,    21,    22,    23,    77,     0,     0,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      78,     0,    79,    80,    35,    81,    82,    83,    84,    85,
-      86,     0,     0,     0,    87,    88,    89,    90,    36,     0,
-      37,    38,    39,    40,    41,    42,     0,     0,     0,     0,
-      43,    44,    45,    46,    47,    48,    49,     0,     0,     0,
-       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    51,    52,    53,    76,
-       0,     0,     0,    54,    55,     0,     0,    56,    91,    16,
-       0,    17,    18,    19,    20,    21,    22,    23,   -68,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,     0,   168,   169,   170,   171,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-     176,   177,   178,   179,   180,     0,     0,    50,     0,   181,
-     182,   183,     0,     0,   184,     0,     0,     0,     0,    51,
-      52,    53,    76,     0,     0,     0,    54,    55,     0,     0,
-      56,     0,    16,     0,    17,    18,    19,    20,    21,    22,
-      23,     0,     0,     0,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,     0,     0,     0,     0,
-      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    36,     0,    37,    38,    39,    40,
-      41,    42,     0,     0,  -169,     0,    43,    44,    45,    46,
-      47,    48,    49,   186,     0,   187,  -169,     0,     0,     0,
-      50,     0,     0,     0,  -169,     0,     0,     0,     0,     0,
-       0,     0,    51,    52,    53,   168,   169,   170,   171,    54,
-      55,     0,   -68,    56,     0,     0,  -169,  -169,  -169,  -169,
-       0,     0,     0,  -169,     0,  -169,     0,     0,  -169,     0,
-       0,   177,   178,   179,   180,  -169,  -169,  -169,  -169,   181,
-     182,   183,     0,     0,   184,   170,   171,     0,     0,     0,
-    -169,  -169,  -169,  -201,  -169,  -169,  -169,  -169,  -169,  -169,
-    -169,  -169,  -169,  -169,  -169,  -201,     0,     0,     0,  -169,
-    -169,  -169,   180,  -201,  -169,  -169,     0,   181,   182,   183,
-       0,     0,   184,     0,   168,   169,   170,   171,     0,     0,
-       0,     0,     0,     0,     0,  -201,  -201,  -201,  -201,     0,
-       0,     0,  -201,     0,  -201,     0,     0,  -201,     0,     0,
-       0,   178,   179,   180,  -201,  -201,  -201,  -201,   181,   182,
-     183,     0,     0,   184,     0,     0,     0,     0,     0,  -201,
-    -201,  -201,     0,  -201,  -201,  -201,  -201,  -201,  -201,  -201,
-    -201,  -201,  -201,  -201,     0,     0,     0,     0,  -201,  -201,
-    -201,     0,     0,  -201,  -201,    74,     0,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,     0,     0,     0,   129,
-      25,    26,    27,    28,   107,    29,    30,    31,    32,    33,
+      36,     0,    37,    38,    39,    40,    41,    42,     0,     0,
+    -169,     0,    43,    44,    45,    46,    47,    48,    49,   186,
+       0,   187,  -169,     0,     0,     0,    50,     0,     0,     0,
+    -169,     0,     0,     0,     0,     0,     0,     0,    51,    52,
+      53,   168,   169,   170,   171,    54,    55,     0,   -68,    56,
+       0,     0,  -169,  -169,  -169,  -169,     0,     0,     0,  -169,
+       0,  -169,     0,     0,  -169,     0,   176,   177,   178,   179,
+     180,  -169,  -169,  -169,  -169,   181,   182,   183,     0,     0,
+     184,   170,   171,     0,     0,     0,  -169,  -169,  -169,  -202,
+    -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,  -169,
+    -169,  -202,     0,     0,     0,  -169,  -169,  -169,   180,  -202,
+    -169,  -169,     0,   181,   182,   183,     0,     0,   184,     0,
+     168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
+       0,  -202,  -202,  -202,  -202,     0,     0,     0,  -202,     0,
+    -202,     0,     0,  -202,     0,     0,   177,   178,   179,   180,
+    -202,  -202,  -202,  -202,   181,   182,   183,     0,     0,   184,
+       0,     0,     0,     0,     0,  -202,  -202,  -202,     0,  -202,
+    -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,  -202,
+       0,     0,     0,     0,  -202,  -202,  -202,     0,     0,  -202,
+    -202,    74,     0,    16,     0,    17,    18,    19,    20,    21,
+      22,    23,     0,     0,     0,   129,    25,    26,    27,    28,
+     107,    29,    30,    31,    32,    33,    34,     0,     0,     0,
+       0,    35,     0,     0,     0,     0,     0,     0,   168,   169,
+     170,   171,     0,     0,     0,    36,     0,    37,    38,    39,
+      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
+      46,    47,    48,    49,     0,   178,   179,   180,     0,     0,
+       0,    50,   181,   182,   183,     0,     0,   184,     0,     0,
+       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
+      54,    55,     0,    74,    56,    16,     0,    17,    18,    19,
+      20,    21,    22,    23,     0,     0,     0,   135,    25,    26,
+      27,    28,   136,    29,    30,    31,    32,    33,    34,     0,
+       0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
+     168,  -203,   170,   171,     0,     0,     0,    36,     0,    37,
+      38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
+      44,    45,    46,    47,    48,    49,     0,     0,   179,   180,
+       0,     0,     0,    50,   181,   182,   183,     0,     0,   184,
+       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
+       0,     0,    54,    55,     0,    74,    56,    16,     0,    17,
+      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
       34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
        0,     0,   168,   169,   170,   171,     0,     0,     0,    36,
        0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
        0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
      179,   180,     0,     0,     0,    50,   181,   182,   183,     0,
        0,   184,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,    74,    56,    16,
-       0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,   135,    25,    26,    27,    28,   136,    29,    30,    31,
+       0,     0,     0,     0,    54,    55,     0,     0,    56,    16,
+     102,    17,    18,    19,    20,    21,    22,    23,     0,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
       32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,  -202,     0,   170,   171,     0,     0,
+       0,     0,     0,     0,  -203,     0,   170,   171,     0,     0,
        0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
        0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
        0,     0,   179,   180,     0,     0,     0,    50,   181,   182,
      183,     0,     0,   184,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,    74,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,    16,
+      56,    17,    18,    19,    20,    21,    22,    23,   141,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
+       0,     0,     0,     0,     0,     0,   170,   171,     0,     0,
+       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
+       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
+       0,     0,   179,   180,     0,     0,     0,    50,   181,   182,
+     183,     0,     0,   184,     0,     0,     0,     0,     0,    51,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,    16,
+      56,    17,    18,    19,    20,    21,    22,    23,     0,     0,
+       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,     0,     0,     0,     0,    35,   210,   211,
+     212,   213,     0,     0,     0,   214,     0,   215,     0,     0,
+       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
+       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
+       0,     0,   160,   161,   162,     0,     0,    50,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,   158,
       56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
        0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
       30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
-     209,   210,   211,   212,     0,     0,     0,   213,     0,   214,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    36,     0,    37,    38,    39,    40,    41,
       42,     0,     0,     0,     0,    43,    44,    45,    46,    47,
-      48,    49,     0,     0,   160,   161,   162,     0,     0,    50,
+      48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,     0,    56,    16,   102,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,    16,    56,    17,    18,    19,    20,    21,
-      22,    23,   141,     0,     0,    24,    25,    26,    27,    28,
-       0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    36,     0,    37,    38,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,    44,    45,
-      46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
-       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,    16,    56,    17,    18,    19,    20,    21,
+       0,   229,    56,    16,     0,    17,    18,    19,    20,    21,
       22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
        0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -657,7 +676,7 @@ static const yytype_int16 yytable[] =
       46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
        0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   158,    56,    16,     0,    17,    18,    19,
+      54,    55,     0,   239,    56,    16,     0,    17,    18,    19,
       20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
       27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
        0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
@@ -666,7 +685,7 @@ static const yytype_int16 yytable[] =
       44,    45,    46,    47,    48,    49,     0,     0,     0,     0,
        0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   228,    56,    16,     0,    17,
+       0,     0,    54,    55,     0,   251,    56,    16,     0,    17,
       18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
       25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
       34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
@@ -675,7 +694,7 @@ static const yytype_int16 yytable[] =
        0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
        0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   238,    56,    16,
+       0,     0,     0,     0,    54,    55,     0,   274,    56,    16,
        0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
        0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
       32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
@@ -684,7 +703,7 @@ static const yytype_int16 yytable[] =
        0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
        0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,   250,
+      52,    53,     0,     0,     0,     0,    54,    55,     0,   314,
       56,    16,     0,    17,    18,    19,    20,    21,    22,    23,
        0,     0,     0,    24,    25,    26,    27,    28,     0,    29,
       30,    31,    32,    33,    34,     0,     0,     0,     0,    35,
@@ -694,7 +713,7 @@ static const yytype_int16 yytable[] =
       48,    49,     0,     0,     0,     0,     0,     0,     0,    50,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    51,    52,    53,     0,     0,     0,     0,    54,    55,
-       0,   273,    56,    16,     0,    17,    18,    19,    20,    21,
+       0,   316,    56,    16,     0,    17,    18,    19,    20,    21,
       22,    23,     0,     0,     0,    24,    25,    26,    27,    28,
        0,    29,    30,    31,    32,    33,    34,     0,     0,     0,
        0,    35,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -703,248 +722,246 @@ static const yytype_int16 yytable[] =
       46,    47,    48,    49,     0,     0,     0,     0,     0,     0,
        0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    51,    52,    53,     0,     0,     0,     0,
-      54,    55,     0,   312,    56,    16,     0,    17,    18,    19,
+      54,    55,     0,   329,    56,    16,     0,    17,    18,    19,
       20,    21,    22,    23,     0,     0,     0,    24,    25,    26,
       27,    28,     0,    29,    30,    31,    32,    33,    34,     0,
        0,     0,     0,    35,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
       38,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-      44,    45,    46,    47,    48,    49,     0,     0,     0,     0,
-       0,     0,     0,    50,     0,     0,     0,     0,     0,     0,
+      44,    45,    46,    47,    48,    49,     0,   167,     0,     0,
+       0,     0,     0,    50,   168,   169,   170,   171,     0,     0,
        0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
-       0,     0,    54,    55,     0,   314,    56,    16,     0,    17,
-      18,    19,    20,    21,    22,    23,     0,     0,     0,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,     0,     0,     0,     0,    35,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,    37,    38,    39,    40,    41,    42,     0,     0,     0,
-       0,    43,    44,    45,    46,    47,    48,    49,     0,     0,
-       0,     0,     0,     0,     0,    50,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    51,    52,    53,
-       0,     0,     0,     0,    54,    55,     0,   327,    56,    16,
-       0,    17,    18,    19,    20,    21,    22,    23,     0,     0,
-       0,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,     0,     0,     0,     0,    35,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,    37,    38,    39,    40,    41,    42,     0,
-       0,     0,     0,    43,    44,    45,    46,    47,    48,    49,
-       0,     0,     0,     0,   167,     0,     0,    50,     0,     0,
-       0,   168,   169,   170,   171,     0,     0,     0,     0,    51,
-      52,    53,     0,     0,     0,     0,    54,    55,     0,     0,
-      56,   172,   173,   324,   174,   175,   176,   177,   178,   179,
-     180,     0,     0,     0,   167,   181,   182,   183,     0,     0,
-     184,   168,   169,   170,   171,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   172,   173,     0,   174,   175,   176,   177,   178,   179,
-     180,     0,     0,     0,   167,   181,   182,   183,     0,     0,
-     184,   168,   169,   170,   171,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   173,     0,   174,   175,   176,   177,   178,   179,
-     180,     0,     0,     0,     0,   181,   182,   183,     0,     0,
-     184
+       0,     0,    54,    55,     0,   173,    56,   174,   175,   176,
+     177,   178,   179,   180,     0,     0,     0,     0,   181,   182,
+     183,     0,     0,   184
 };
 
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-399)))
+
+#define yytable_value_is_error(Yytable_value) \
+  (!!((Yytable_value) == (-203)))
+
 static const yytype_int16 yycheck[] =
 {
-      10,    11,    12,    15,     9,   291,   115,   126,    42,    15,
-     291,    16,   293,   294,   404,     9,    50,    11,    15,    16,
-      17,    19,    20,    21,    22,    23,     9,    25,    26,    11,
-       9,    41,    11,    46,    44,   144,    20,   384,    12,    11,
-      45,    74,    80,     0,    42,    43,    44,    76,    77,    78,
-      48,    56,    20,    21,    22,    23,    20,    25,    26,    20,
-      12,   451,    26,   101,    70,    12,     9,    80,    12,    96,
-      97,    12,   101,   100,    42,    43,   357,    20,    12,   426,
-      90,   115,     9,    12,    11,   102,    96,     9,    15,    87,
-     100,   101,    76,    77,    78,    23,   102,    24,    20,   133,
-      28,   220,    76,    77,    78,   102,   387,     9,   102,    11,
-     144,   121,    12,   118,    96,    76,    77,    78,    80,     9,
-     125,   126,   102,   102,    76,    77,    78,   102,   126,    76,
-      77,    78,    76,    77,    78,    76,    77,    78,    76,    77,
-      78,   146,    76,    77,    78,    20,   102,    76,    77,    78,
-     436,   102,     9,   434,    11,   160,   161,   162,   126,   164,
-     165,   166,    20,   196,   197,   198,   199,   200,   201,    23,
-     203,   204,   287,    26,   289,   102,    76,    77,    78,   191,
-     185,   186,   187,   188,   189,   190,   184,   221,   102,    76,
-      77,    78,    76,    77,    78,    20,   206,   306,    20,    46,
-      47,    76,    77,    78,   209,   210,   211,   212,   213,   214,
-     329,   102,    17,    18,   101,   220,   102,   101,    76,    77,
-      78,   102,   102,   102,     9,    48,   231,    32,   233,   234,
-      15,    36,    61,    62,    63,    64,    41,   242,    23,    44,
-      20,   102,    47,    28,    49,   101,    51,    52,    53,    54,
-      55,    76,    77,    78,    76,    77,    78,   102,   101,   292,
-      89,    90,   267,   268,   102,   270,    95,    96,    97,   102,
-     280,   100,   306,   382,    76,    77,    78,    76,    77,    78,
-      10,   286,   287,   288,   289,    63,   291,    11,   293,   294,
-      72,   386,   290,   388,    23,    23,   391,   392,   308,   101,
-      72,    54,   101,   101,   337,   400,   401,   340,    61,    62,
-      63,    64,    90,   408,   102,   320,    10,    95,    96,    97,
-      26,    11,   100,    78,   329,   420,   102,    23,   406,   424,
-      21,    84,    85,    86,    87,    88,    89,    90,    15,   417,
-     418,   101,    95,    96,    97,    26,    10,   100,   382,   427,
-      10,    23,   357,   448,   449,    10,    10,   435,   163,   101,
-     101,   101,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,    63,    64,   101,
-      20,   102,   387,   101,   389,   101,   398,   397,    76,    77,
-      78,   101,    42,    43,    44,    45,    76,    77,    78,    49,
-      10,    51,   101,    89,    90,   415,    20,   419,     9,    95,
-      96,    97,   101,   101,   100,    20,    74,    76,    77,    78,
-      20,   101,   432,   101,    22,    73,    76,    77,    78,   434,
-       0,     1,   102,   101,   446,   101,    12,   436,    35,     9,
-     450,    11,   101,    13,    14,    15,    16,    17,    18,    19,
-      20,   101,    96,    23,    24,    25,    26,    27,   389,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,   193,   339,    -1,    49,
-      50,    51,    52,    53,   380,    55,    56,    57,    58,    59,
-      60,    76,    77,    78,    48,    65,    66,    67,    68,    69,
-      70,    71,    48,    95,    96,    97,    -1,    90,   100,    79,
-      -1,    -1,    95,    96,    97,    -1,   101,   100,    -1,   324,
-      -1,    91,    92,    93,    -1,     0,     1,    -1,    98,    99,
-      -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,     3,     4,     5,
-       6,     7,     8,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
-      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
-      10,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
-      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
-      -1,    -1,   102,   103,     9,    10,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
-      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
-      10,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
-      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
-      -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    74,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
-      -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,     9,
-      -1,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
-      20,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    -1,    -1,    -1,    49,
-      50,    51,    52,    53,    -1,    55,    56,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      10,    11,    12,    15,    74,     9,   115,   126,    42,    12,
+     408,     9,    16,    11,    15,    11,    50,   293,   293,   388,
+     295,   296,     9,    12,    11,     9,    19,    20,    21,    22,
+      23,    41,    25,    26,    44,   144,    20,    20,    21,    22,
+      23,    45,    25,    26,    46,    76,    77,    78,    20,    42,
+      43,    44,    56,    12,    26,    48,     9,   455,    11,    42,
+      43,   430,    15,    15,    16,    17,     9,    46,    47,    70,
+     101,    24,    12,    76,    77,    78,     0,    20,    80,    23,
+      90,   115,    12,    20,    28,   360,    96,    76,    77,    78,
+     100,   101,    80,     9,    87,    20,    76,    77,    78,   133,
+      96,   102,   221,    12,   102,     9,    12,    11,   102,    12,
+     144,   121,    11,   101,   118,   102,   391,    76,    77,    78,
+      20,   125,   126,     9,   289,    11,   291,   197,   198,   199,
+     200,   201,   202,   126,   204,   205,    76,    77,    78,    76,
+      77,    78,   146,   126,    20,   102,    76,    77,    78,   102,
+     102,    76,    77,    78,   102,   102,   160,   161,   162,    80,
+     164,   165,   166,   438,   440,     9,   102,    76,    77,    78,
+      76,    77,    78,    76,    77,    78,    76,    77,    78,     9,
+     192,   185,   186,   187,   188,   189,   190,   191,   222,    23,
+     102,   184,   102,    76,    77,    78,    48,   207,    20,   308,
+      76,    77,    78,    20,   102,   102,   210,   211,   212,   213,
+     214,   215,   331,     9,    17,    18,   101,   221,   101,    15,
+     390,   102,   392,    20,   294,   395,   396,    23,   232,    32,
+     234,   235,    28,    36,   404,   405,    96,    97,    41,   243,
+     100,    44,   412,   102,    47,   102,    49,   102,    51,    52,
+      53,    54,    55,    20,   424,    26,   101,    10,   428,    76,
+      77,    78,   102,   102,   268,   269,    72,   271,    11,    23,
+     340,   102,   282,   343,   308,   101,    23,   386,    72,    76,
+      77,    78,   452,   453,   288,   289,   290,   291,    10,   293,
+      26,   295,   296,    11,    42,    43,    44,    45,    78,   292,
+     310,    49,   102,    51,    21,    54,    76,    77,    78,    76,
+      77,    78,    61,    62,    63,    64,    23,    15,   322,    76,
+      77,    78,   101,    26,    76,    77,    78,   331,    76,    77,
+      78,   101,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    23,    10,   101,    10,    95,    96,    97,   101,
+      10,   100,   386,   101,    10,    10,   360,    76,    77,    78,
+     163,   101,   101,   101,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,    76,
+      77,    78,   101,    76,    77,    78,    54,   391,   101,   393,
+     402,   401,   102,    61,    62,    63,    64,   101,    76,    77,
+      78,    95,    96,    97,   101,    20,   100,    10,   101,   419,
+     101,   423,   101,    81,    82,   101,    84,    85,    86,    87,
+      88,    89,    90,   101,    20,     9,   436,    95,    96,    97,
+     101,    74,   100,    20,   438,   101,     0,     1,   450,    20,
+     102,    73,    22,   101,   454,     9,    12,    11,   101,    13,
+      14,    15,    16,    17,    18,    19,    20,    96,   393,    23,
+      24,    25,    26,    27,   440,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,   194,    35,    63,    49,    50,    51,    52,    53,
+     384,    55,    56,    57,    58,    59,    60,    48,    48,   342,
+      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      -1,    90,    -1,    -1,    -1,    79,    95,    96,    97,    -1,
+      -1,   100,    -1,   326,    -1,    -1,    -1,    91,    92,    93,
+      -1,     0,     1,    -1,    98,    99,    -1,    -1,   102,   103,
+       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      59,    60,   410,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    71,   421,   422,    -1,    -1,    -1,    -1,    90,
+      79,    -1,    -1,   431,    95,    96,    97,    -1,    -1,   100,
+      -1,   439,    91,    92,    93,    -1,    -1,     1,    -1,    98,
+      99,    -1,    -1,   102,   103,     9,    10,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,     3,     4,
+       5,     6,     7,     8,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
+       9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,
+      99,    -1,    -1,   102,   103,     9,    10,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
+       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    74,    -1,    -1,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,
+      99,    -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,
+      14,    15,    16,    17,    18,    19,    20,    -1,    -1,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
+      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      -1,    -1,     1,    -1,    98,    99,    -1,    -1,   102,   103,
+       9,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    -1,
+      29,    30,    31,    32,    33,    34,    35,    -1,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    -1,    -1,    -1,
+      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
+      69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,     1,    -1,    -1,    -1,    98,
+      99,    -1,    -1,   102,   103,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    20,    -1,    -1,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    54,    -1,    -1,    -1,
+      -1,    -1,    -1,    61,    62,    63,    64,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    71,    84,    85,    86,    87,
+      88,    89,    90,    79,    -1,    -1,    -1,    95,    96,    97,
+      -1,    -1,   100,    -1,    -1,    91,    92,    93,     1,    -1,
+      -1,    -1,    98,    99,    -1,    -1,   102,    -1,    11,    -1,
+      13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    32,
+      33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    -1,     1,    -1,    98,    99,
-      -1,    -1,   102,   103,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    -1,    -1,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    32,    33,    34,
-      35,    -1,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    69,    70,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,     1,
-      -1,    -1,    -1,    98,    99,    -1,    -1,   102,   103,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    61,    62,    63,    64,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      86,    87,    88,    89,    90,    -1,    -1,    79,    -1,    95,
-      96,    97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    91,
-      92,    93,     1,    -1,    -1,    -1,    98,    99,    -1,    -1,
-     102,    -1,    11,    -1,    13,    14,    15,    16,    17,    18,
-      19,    -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,
-      59,    60,    -1,    -1,     0,    -1,    65,    66,    67,    68,
-      69,    70,    71,     9,    -1,    11,    12,    -1,    -1,    -1,
-      79,    -1,    -1,    -1,    20,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    91,    92,    93,    61,    62,    63,    64,    98,
-      99,    -1,   101,   102,    -1,    -1,    42,    43,    44,    45,
-      -1,    -1,    -1,    49,    -1,    51,    -1,    -1,    54,    -1,
-      -1,    87,    88,    89,    90,    61,    62,    63,    64,    95,
-      96,    97,    -1,    -1,   100,    63,    64,    -1,    -1,    -1,
-      76,    77,    78,     0,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    12,    -1,    -1,    -1,    95,
-      96,    97,    90,    20,   100,   101,    -1,    95,    96,    97,
-      -1,    -1,   100,    -1,    61,    62,    63,    64,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    -1,
-      -1,    -1,    49,    -1,    51,    -1,    -1,    54,    -1,    -1,
-      -1,    88,    89,    90,    61,    62,    63,    64,    95,    96,
-      97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    78,    -1,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    -1,    -1,    -1,    -1,    95,    96,
-      97,    -1,    -1,   100,   101,     9,    -1,    11,    -1,    13,
+      53,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+       0,    -1,    65,    66,    67,    68,    69,    70,    71,     9,
+      -1,    11,    12,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    61,    62,    63,    64,    98,    99,    -1,   101,   102,
+      -1,    -1,    42,    43,    44,    45,    -1,    -1,    -1,    49,
+      -1,    51,    -1,    -1,    54,    -1,    86,    87,    88,    89,
+      90,    61,    62,    63,    64,    95,    96,    97,    -1,    -1,
+     100,    63,    64,    -1,    -1,    -1,    76,    77,    78,     0,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    12,    -1,    -1,    -1,    95,    96,    97,    90,    20,
+     100,   101,    -1,    95,    96,    97,    -1,    -1,   100,    -1,
+      61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,
+      51,    -1,    -1,    54,    -1,    -1,    87,    88,    89,    90,
+      61,    62,    63,    64,    95,    96,    97,    -1,    -1,   100,
+      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    -1,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      -1,    -1,    -1,    -1,    95,    96,    97,    -1,    -1,   100,
+     101,     9,    -1,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    61,    62,
+      63,    64,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    71,    -1,    88,    89,    90,    -1,    -1,
+      -1,    79,    95,    96,    97,    -1,    -1,   100,    -1,    -1,
+      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
+      98,    99,    -1,     9,   102,    11,    -1,    13,    14,    15,
+      16,    17,    18,    19,    -1,    -1,    -1,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      61,    62,    63,    64,    -1,    -1,    -1,    53,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    71,    -1,    -1,    89,    90,
+      -1,    -1,    -1,    79,    95,    96,    97,    -1,    -1,   100,
+      -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
+      -1,    -1,    98,    99,    -1,     9,   102,    11,    -1,    13,
       14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
       34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
       -1,    -1,    61,    62,    63,    64,    -1,    -1,    -1,    53,
       -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
       -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
       89,    90,    -1,    -1,    -1,    79,    95,    96,    97,    -1,
       -1,   100,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,    -1,    -1,    98,    99,    -1,     9,   102,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      -1,    -1,    -1,    -1,    98,    99,    -1,    -1,   102,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
       32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    61,    -1,    63,    64,    -1,    -1,
       -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
       -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
       -1,    -1,    89,    90,    -1,    -1,    -1,    79,    95,    96,
       97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,     9,
+      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,
+     102,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,    -1,
+      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    89,    90,    -1,    -1,    -1,    79,    95,    96,
+      97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    91,
+      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,    11,
+     102,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      32,    33,    34,    -1,    -1,    -1,    -1,    39,    42,    43,
+      44,    45,    -1,    -1,    -1,    49,    -1,    51,    -1,    -1,
+      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    76,    77,    78,    -1,    -1,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
+      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,   101,
      102,    11,    -1,    13,    14,    15,    16,    17,    18,    19,
       -1,    -1,    -1,    23,    24,    25,    26,    27,    -1,    29,
       30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    39,
-      42,    43,    44,    45,    -1,    -1,    -1,    49,    -1,    51,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    53,    -1,    55,    56,    57,    58,    59,
       60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    76,    77,    78,    -1,    -1,    79,
+      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    91,    92,    93,    -1,    -1,    -1,    -1,    98,    99,
-      -1,    -1,   102,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,    -1,    11,   102,    13,    14,    15,    16,    17,
-      18,    19,    20,    -1,    -1,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    53,    -1,    55,    56,    57,
-      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
-      68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,    -1,    11,   102,    13,    14,    15,    16,    17,
+      -1,   101,   102,    11,    -1,    13,    14,    15,    16,    17,
       18,    19,    -1,    -1,    -1,    23,    24,    25,    26,    27,
       -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -1005,39 +1022,12 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,    55,
       56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
-      66,    67,    68,    69,    70,    71,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    67,    68,    69,    70,    71,    -1,    54,    -1,    -1,
+      -1,    -1,    -1,    79,    61,    62,    63,    64,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,    -1,   101,   102,    11,    -1,    13,
-      14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    32,    33,
-      34,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
-      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    -1,    -1,    -1,    98,    99,    -1,   101,   102,    11,
-      -1,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      32,    33,    34,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    53,    -1,    55,    56,    57,    58,    59,    60,    -1,
-      -1,    -1,    -1,    65,    66,    67,    68,    69,    70,    71,
-      -1,    -1,    -1,    -1,    54,    -1,    -1,    79,    -1,    -1,
-      -1,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    -1,    -1,    -1,    98,    99,    -1,    -1,
-     102,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    -1,    -1,    -1,    54,    95,    96,    97,    -1,    -1,
-     100,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    82,    -1,    84,    85,    86,    87,    88,    89,
-      90,    -1,    -1,    -1,    54,    95,    96,    97,    -1,    -1,
-     100,    61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    -1,    84,    85,    86,    87,    88,    89,
-      90,    -1,    -1,    -1,    -1,    95,    96,    97,    -1,    -1,
-     100
+      -1,    -1,    98,    99,    -1,    82,   102,    84,    85,    86,
+      87,    88,    89,    90,    -1,    -1,    -1,    -1,    95,    96,
+      97,    -1,    -1,   100
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1063,33 +1053,33 @@ static const yytype_uint8 yystos[] =
       76,    77,    78,    80,     9,    11,   102,    54,    61,    62,
       63,    64,    81,    82,    84,    85,    86,    87,    88,    89,
       90,    95,    96,    97,   100,   102,     9,    11,     9,    11,
-       9,   114,   140,   141,    23,   138,   102,   102,   102,   102,
-      70,   102,   164,   102,   102,   112,    48,   129,    20,    42,
-      43,    44,    45,    49,    51,   120,   121,   119,    12,   160,
-     102,   102,   146,   101,   112,    26,   142,   101,   101,   146,
-     161,   169,   147,   102,   102,    10,    20,   160,   101,   146,
-      72,   144,    11,   101,   146,   146,   146,   156,   146,   146,
-     101,   146,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   156,   156,     9,    11,    24,
-     102,   150,   164,   101,   146,   146,   146,   146,   146,   146,
-     117,    23,   137,   138,    23,   123,   114,   114,   114,   114,
-     114,   114,   102,   114,   114,   112,   146,   133,   146,   146,
-     146,   146,   146,   161,   147,    12,   149,    72,   143,   101,
-     101,   146,   101,   146,   101,   146,    10,   101,    26,   146,
-      11,    20,    12,   101,    83,   146,   146,   101,   146,   102,
-     101,    20,    12,    20,    12,    20,    10,    21,   113,   122,
-       9,    20,    23,   132,   146,   133,   134,   146,   133,   136,
-     162,   164,   127,   131,   134,   135,   146,   114,   134,   134,
-     101,   101,   160,    26,   112,   101,   101,   101,    12,   146,
-      10,   156,    20,    12,   101,   161,    10,    10,    10,   114,
-     142,   114,    23,   101,   101,   101,   101,   102,   101,    20,
-     134,   101,   101,    12,    10,   101,    20,   143,   124,   160,
-     130,   130,     9,   115,   115,   134,   115,   132,   101,   115,
-     115,    74,    20,   112,   145,   117,    20,   115,   115,   116,
-      46,    47,   128,   128,   101,   129,    20,   115,   118,    10,
-     129,   129,   117,   115,   102,   115,   130,   129,    20,    26,
-     125,    10,   134,   129,   135,    22,    73,   126,   101,   101,
-     117,   115,   115,    74,   128
+       9,     9,   114,   140,   141,    23,   138,   102,   102,   102,
+     102,    70,   102,   164,   102,   102,   112,    48,   129,    20,
+      42,    43,    44,    45,    49,    51,   120,   121,   119,    12,
+     160,   102,   102,   146,   101,   112,    26,   142,   101,   101,
+     146,   161,   169,   147,   102,   102,    10,    20,   160,   101,
+     146,    72,   144,    11,   101,   146,   146,   146,   156,   146,
+     146,   101,   146,   156,   156,   156,   156,   156,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,     9,    11,
+      24,   102,   150,   164,   101,   146,   146,   146,   146,   146,
+     146,   146,   117,    23,   137,   138,    23,   123,   114,   114,
+     114,   114,   114,   114,   102,   114,   114,   112,   146,   133,
+     146,   146,   146,   146,   146,   161,   147,    12,   149,    72,
+     143,   101,   101,   146,   101,   146,   101,   146,    10,   101,
+      26,   146,    11,    20,    12,   101,    83,   146,   146,   101,
+     146,   102,   101,    20,    12,    20,    12,    20,    20,    10,
+      21,   113,   122,     9,    20,    23,   132,   146,   133,   134,
+     146,   133,   136,   162,   164,   127,   131,   134,   135,   146,
+     114,   134,   134,   101,   101,   160,    26,   112,   101,   101,
+     101,    12,   146,    10,   156,    20,    12,   101,   161,    10,
+      10,    10,    10,   114,   142,   114,    23,   101,   101,   101,
+     101,   102,   101,    20,   134,   101,   101,    12,    10,   101,
+      20,   143,   124,   160,   130,   130,     9,   115,   115,   134,
+     115,   132,   101,   115,   115,    74,    20,   112,   145,   117,
+      20,   115,   115,   116,    46,    47,   128,   128,   101,   129,
+      20,   115,   118,    10,   129,   129,   117,   115,   102,   115,
+     130,   129,    20,    26,   125,    10,   134,   129,   135,    22,
+      73,   126,   101,   101,   117,   115,   115,    74,   128
 };
 
 typedef enum {
@@ -1127,6 +1117,6 @@ static const toketypes yy_type_tab[] =
 };
 
 /* Generated from:
- * 9e20ffc538d3ca3c4dbd4bd0d0c82f329cb509a0e5b976490f105c62fcddec27 perly.y
+ * 48446ab3e028756e1df8ac7ff4e2967381f754ac8cf39430af8bf83b446076e0 perly.y
  * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
  * ex: set ro: */
diff --git a/perly.y b/perly.y
index 0f98f59..cf11a99 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -1215,6 +1215,17 @@ term     :       termbinop
                          TOKEN_GETMAD($4,$$,';');
                          TOKEN_GETMAD($5,$$,'}');
                        }
+       |       hsh '{' expr ';' '}'                 /* %hash{@keys} */
+                       { $$ = op_prepend_elem(OP_KVHSLICE,
+                               newOP(OP_PUSHMARK, 0),
+                                   newLISTOP(OP_KVHSLICE, 0,
+                                       list($3),
+                                       ref($1, OP_KVHSLICE)));
+                           PL_parser->expect = XOPERATOR;
+                         TOKEN_GETMAD($2,$$,'{');
+                         TOKEN_GETMAD($4,$$,';');
+                         TOKEN_GETMAD($5,$$,'}');
+                       }
        |       THING   %prec '('
                        { $$ = $1; }
        |       amper                                /* &foo; */
diff --git a/pp.c b/pp.c
index 5e0b02c..470ebd1 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -4753,6 +4753,54 @@ PP(pp_hslice)
     RETURN;
 }
 
+PP(pp_kvhslice)
+{
+    dVAR; dSP; dMARK; dORIGMARK;
+    HV * const hv = MUTABLE_HV(POPs);
+    I32 lval = (PL_op->op_flags & OPf_MOD);
+    I32 items = SP - MARK;
+
+    if (PL_op->op_private & OPpMAYBE_LVSUB) {
+       const I32 flags = is_lvalue_sub();
+       if (flags) {
+           if (!(flags & OPpENTERSUB_INARGS))
+              Perl_croak(aTHX_ "Can't modify key/value hash slice in list assignment");
+          lval = flags;
+       }
+    }
+
+    MEXTEND(SP,items);
+    while (items > 1) {
+       *(MARK+items*2-1) = *(MARK+items);
+       items--;
+    }
+    items = SP-MARK;
+    SP += items;
+
+    while (++MARK <= SP) {
+        SV * const keysv = *MARK;
+        SV **svp;
+        HE *he;
+
+        he = hv_fetch_ent(hv, keysv, lval, 0);
+        svp = he ? &HeVAL(he) : NULL;
+
+        if (lval) {
+            if (!svp || !*svp || *svp == &PL_sv_undef) {
+                DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
+            }
+           *MARK = sv_mortalcopy(*MARK);
+        }
+        *++MARK = svp && *svp ? *svp : &PL_sv_undef;
+    }
+    if (GIMME != G_ARRAY) {
+       MARK = SP - items*2;
+       *++MARK = items > 0 ? *SP : &PL_sv_undef;
+       SP = MARK;
+    }
+    RETURN;
+}
+
 /* List operators. */
 
 PP(pp_list)
index a4dd46d..1ede6ff 100644 (file)
@@ -123,6 +123,7 @@ PERL_CALLCONV OP *Perl_pp_introcv(pTHX);
 PERL_CALLCONV OP *Perl_pp_ioctl(pTHX);
 PERL_CALLCONV OP *Perl_pp_iter(pTHX);
 PERL_CALLCONV OP *Perl_pp_join(pTHX);
+PERL_CALLCONV OP *Perl_pp_kvhslice(pTHX);
 PERL_CALLCONV OP *Perl_pp_last(pTHX);
 PERL_CALLCONV OP *Perl_pp_lc(pTHX);
 PERL_CALLCONV OP *Perl_pp_le(pTHX);
index 9c86d69..61c0de5 100644 (file)
@@ -232,6 +232,7 @@ exists              exists                  ck_exists       is%     S
 rv2hv          hash dereference        ck_rvconst      dt1     
 helem          hash element            ck_null         s2      H S
 hslice         hash slice              ck_null         m@      H L
+kvhslice       key/value hash slice    ck_null         m@      H L
 
 # Explosives and implosives.