diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2021-01-22 17:57:08 +0000 |
---|---|---|
committer | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2021-02-04 14:20:53 +0000 |
commit | a1325b902d57aa7a99bed3d2ec0fa5ce42836207 (patch) | |
tree | 37ce967cbad3faa9d65d10d33aab6919ec353616 | |
parent | 99dbf64538ee1c097b9f7e93df5a45dbf1fa3e22 (diff) | |
download | perl-a1325b902d57aa7a99bed3d2ec0fa5ce42836207.tar.gz |
Initial attempt at feature 'try'
* Add feature, experimental warning, keyword
* Basic parsing
* Basic implementation as optree fragment
See also
https://github.com/Perl/perl5/issues/18504
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | cop.h | 5 | ||||
-rw-r--r-- | ext/Opcode/Opcode.pm | 4 | ||||
-rw-r--r-- | feature.h | 19 | ||||
-rw-r--r-- | gv.c | 4 | ||||
-rw-r--r-- | keywords.c | 42 | ||||
-rw-r--r-- | keywords.h | 468 | ||||
-rw-r--r-- | lib/B/Deparse-core.t | 2 | ||||
-rw-r--r-- | lib/B/Deparse.pm | 4 | ||||
-rw-r--r-- | lib/B/Op_private.pm | 1 | ||||
-rw-r--r-- | lib/feature.pm | 13 | ||||
-rw-r--r-- | lib/warnings.pm | 15 | ||||
-rw-r--r-- | op.c | 2 | ||||
-rw-r--r-- | op.h | 1 | ||||
-rw-r--r-- | opcode.h | 9 | ||||
-rw-r--r-- | opnames.h | 3 | ||||
-rw-r--r-- | perly.act | 1446 | ||||
-rw-r--r-- | perly.h | 119 | ||||
-rw-r--r-- | perly.tab | 1708 | ||||
-rw-r--r-- | perly.y | 26 | ||||
-rw-r--r-- | pod/perldelta.pod | 18 | ||||
-rw-r--r-- | pod/perldiag.pod | 6 | ||||
-rw-r--r-- | pod/perlsyn.pod | 40 | ||||
-rw-r--r-- | pp_ctl.c | 66 | ||||
-rw-r--r-- | pp_proto.h | 1 | ||||
-rwxr-xr-x | regen/feature.pl | 11 | ||||
-rwxr-xr-x | regen/keywords.pl | 4 | ||||
-rw-r--r-- | regen/opcodes | 2 | ||||
-rw-r--r-- | regen/warnings.pl | 2 | ||||
-rw-r--r-- | t/op/coreamp.t | 8 | ||||
-rw-r--r-- | t/op/coresubs.t | 4 | ||||
-rw-r--r-- | t/op/try.t | 154 | ||||
-rw-r--r-- | toke.c | 12 | ||||
-rw-r--r-- | warnings.h | 5 |
34 files changed, 2341 insertions, 1884 deletions
@@ -5961,6 +5961,7 @@ t/op/time.t See if time functions work t/op/time_loop.t Test that very large values don't hang gmtime and localtime. t/op/tr.t See if tr works t/op/tr_latin1.t See if tr works, but file isn't encoded in UTF-8 +t/op/try.t See if try works t/op/undef.t See if undef works t/op/universal.t See if UNIVERSAL class works t/op/unlink.t See if unlink works @@ -940,7 +940,7 @@ struct context { or plain block { ...; } */ #define CXt_SUB 9 #define CXt_FORMAT 10 -#define CXt_EVAL 11 +#define CXt_EVAL 11 /* eval'', eval{}, try{} */ #define CXt_SUBST 12 /* SUBST doesn't feature in all switch statements. */ @@ -954,6 +954,7 @@ struct context { /* private flags for CXt_EVAL */ #define CXp_REAL 0x20 /* truly eval'', not a lookalike */ #define CXp_EVALBLOCK 0x40 /* eval{}, not eval'' or similar */ +#define CXp_TRY 0x80 /* try {} block */ /* private flags for CXt_LOOP */ @@ -977,6 +978,8 @@ struct context { == (CXt_EVAL|CXp_REAL)) #define CxEVALBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_EVALBLOCK)) \ == (CXt_EVAL|CXp_EVALBLOCK)) +#define CxTRY(c) (((c)->cx_type & (CXTYPEMASK|CXp_TRY)) \ + == (CXt_EVAL|CXp_TRY)) #define CxFOREACH(c) ( CxTYPE(cx) >= CXt_LOOP_ARY \ && CxTYPE(cx) <= CXt_LOOP_LIST) diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm index fd3fbee618..f1b2247b07 100644 --- a/ext/Opcode/Opcode.pm +++ b/ext/Opcode/Opcode.pm @@ -6,7 +6,7 @@ use strict; our($VERSION, @ISA, @EXPORT_OK); -$VERSION = "1.49"; +$VERSION = "1.50"; use Carp; use Exporter (); @@ -344,7 +344,7 @@ invert_opset function. cond_expr flip flop andassign orassign dorassign and or dor xor - warn die lineseq nextstate scope enter leave + warn die lineseq nextstate scope enter leave catch rv2cv anoncode prototype coreargs avhvswitch anonconst @@ -27,8 +27,9 @@ #define FEATURE_SIGNATURES_BIT 0x1000 #define FEATURE_STATE_BIT 0x2000 #define FEATURE_SWITCH_BIT 0x4000 -#define FEATURE_UNIEVAL_BIT 0x8000 -#define FEATURE_UNICODE_BIT 0x10000 +#define FEATURE_TRY_BIT 0x8000 +#define FEATURE_UNIEVAL_BIT 0x10000 +#define FEATURE_UNICODE_BIT 0x20000 #define FEATURE_BUNDLE_DEFAULT 0 #define FEATURE_BUNDLE_510 1 @@ -72,6 +73,12 @@ FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \ ) +#define FEATURE_TRY_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \ + ) + #define FEATURE_STATE_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ @@ -337,6 +344,14 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen, } return; + case 't': + if (keylen == sizeof("feature_try")-1 + && memcmp(subf+1, "ry", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_TRY_BIT; + break; + } + return; + case 'u': if (keylen == sizeof("feature_unicode")-1 && memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) { @@ -544,7 +544,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, /* no support for \&CORE::infix; no support for funcs that do not parse like funcs */ case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD: - case KEY_BEGIN : case KEY_CHECK : case KEY_cmp: + case KEY_BEGIN : case KEY_CHECK : case KEY_catch : case KEY_cmp: case KEY_default : case KEY_DESTROY: case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif : case KEY_END : case KEY_eq : case KEY_eval : @@ -559,7 +559,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, case KEY_qx : case KEY_redo : case KEY_require: case KEY_return: case KEY_s : case KEY_say : case KEY_sort : case KEY_state: case KEY_sub : - case KEY_tr : case KEY_UNITCHECK: case KEY_unless: + case KEY_tr : case KEY_try : case KEY_UNITCHECK: case KEY_unless: case KEY_until: case KEY_use : case KEY_when : case KEY_while : case KEY_x : case KEY_xor : case KEY_y : return NULL; diff --git a/keywords.c b/keywords.c index b2dd655fdd..624debc80a 100644 --- a/keywords.c +++ b/keywords.c @@ -203,7 +203,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 3: /* 29 tokens of length 3 */ + case 3: /* 30 tokens of length 3 */ switch (name[0]) { case 'E': @@ -463,13 +463,27 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) } case 't': - if (name[1] == 'i' && - name[2] == 'e') - { /* tie */ - return -KEY_tie; - } + switch (name[1]) + { + case 'i': + if (name[2] == 'e') + { /* tie */ + return -KEY_tie; + } - goto unknown; + goto unknown; + + case 'r': + if (name[2] == 'y') + { /* try */ + return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_try : 0); + } + + goto unknown; + + default: + goto unknown; + } case 'u': if (name[1] == 's' && @@ -964,7 +978,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 5: /* 39 tokens of length 5 */ + case 5: /* 40 tokens of length 5 */ switch (name[0]) { case 'B': @@ -1046,6 +1060,16 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) case 'c': switch (name[1]) { + case 'a': + if (name[2] == 't' && + name[3] == 'c' && + name[4] == 'h') + { /* catch */ + return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_catch : 0); + } + + goto unknown; + case 'h': switch (name[2]) { @@ -3451,5 +3475,5 @@ unknown: } /* Generated from: - * dd384f0c948716414a93d758d89a38e3c8116acfdc48eb7e34fa6737887097d5 regen/keywords.pl + * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl * ex: set ro: */ diff --git a/keywords.h b/keywords.h index 50dc717984..82694905cb 100644 --- a/keywords.h +++ b/keywords.h @@ -37,239 +37,241 @@ #define KEY_bless 21 #define KEY_break 22 #define KEY_caller 23 -#define KEY_chdir 24 -#define KEY_chmod 25 -#define KEY_chomp 26 -#define KEY_chop 27 -#define KEY_chown 28 -#define KEY_chr 29 -#define KEY_chroot 30 -#define KEY_close 31 -#define KEY_closedir 32 -#define KEY_cmp 33 -#define KEY_connect 34 -#define KEY_continue 35 -#define KEY_cos 36 -#define KEY_crypt 37 -#define KEY_dbmclose 38 -#define KEY_dbmopen 39 -#define KEY_default 40 -#define KEY_defined 41 -#define KEY_delete 42 -#define KEY_die 43 -#define KEY_do 44 -#define KEY_dump 45 -#define KEY_each 46 -#define KEY_else 47 -#define KEY_elsif 48 -#define KEY_endgrent 49 -#define KEY_endhostent 50 -#define KEY_endnetent 51 -#define KEY_endprotoent 52 -#define KEY_endpwent 53 -#define KEY_endservent 54 -#define KEY_eof 55 -#define KEY_eq 56 -#define KEY_eval 57 -#define KEY_evalbytes 58 -#define KEY_exec 59 -#define KEY_exists 60 -#define KEY_exit 61 -#define KEY_exp 62 -#define KEY_fc 63 -#define KEY_fcntl 64 -#define KEY_fileno 65 -#define KEY_flock 66 -#define KEY_for 67 -#define KEY_foreach 68 -#define KEY_fork 69 -#define KEY_format 70 -#define KEY_formline 71 -#define KEY_ge 72 -#define KEY_getc 73 -#define KEY_getgrent 74 -#define KEY_getgrgid 75 -#define KEY_getgrnam 76 -#define KEY_gethostbyaddr 77 -#define KEY_gethostbyname 78 -#define KEY_gethostent 79 -#define KEY_getlogin 80 -#define KEY_getnetbyaddr 81 -#define KEY_getnetbyname 82 -#define KEY_getnetent 83 -#define KEY_getpeername 84 -#define KEY_getpgrp 85 -#define KEY_getppid 86 -#define KEY_getpriority 87 -#define KEY_getprotobyname 88 -#define KEY_getprotobynumber 89 -#define KEY_getprotoent 90 -#define KEY_getpwent 91 -#define KEY_getpwnam 92 -#define KEY_getpwuid 93 -#define KEY_getservbyname 94 -#define KEY_getservbyport 95 -#define KEY_getservent 96 -#define KEY_getsockname 97 -#define KEY_getsockopt 98 -#define KEY_given 99 -#define KEY_glob 100 -#define KEY_gmtime 101 -#define KEY_goto 102 -#define KEY_grep 103 -#define KEY_gt 104 -#define KEY_hex 105 -#define KEY_if 106 -#define KEY_index 107 -#define KEY_int 108 -#define KEY_ioctl 109 -#define KEY_isa 110 -#define KEY_join 111 -#define KEY_keys 112 -#define KEY_kill 113 -#define KEY_last 114 -#define KEY_lc 115 -#define KEY_lcfirst 116 -#define KEY_le 117 -#define KEY_length 118 -#define KEY_link 119 -#define KEY_listen 120 -#define KEY_local 121 -#define KEY_localtime 122 -#define KEY_lock 123 -#define KEY_log 124 -#define KEY_lstat 125 -#define KEY_lt 126 -#define KEY_m 127 -#define KEY_map 128 -#define KEY_mkdir 129 -#define KEY_msgctl 130 -#define KEY_msgget 131 -#define KEY_msgrcv 132 -#define KEY_msgsnd 133 -#define KEY_my 134 -#define KEY_ne 135 -#define KEY_next 136 -#define KEY_no 137 -#define KEY_not 138 -#define KEY_oct 139 -#define KEY_open 140 -#define KEY_opendir 141 -#define KEY_or 142 -#define KEY_ord 143 -#define KEY_our 144 -#define KEY_pack 145 -#define KEY_package 146 -#define KEY_pipe 147 -#define KEY_pop 148 -#define KEY_pos 149 -#define KEY_print 150 -#define KEY_printf 151 -#define KEY_prototype 152 -#define KEY_push 153 -#define KEY_q 154 -#define KEY_qq 155 -#define KEY_qr 156 -#define KEY_quotemeta 157 -#define KEY_qw 158 -#define KEY_qx 159 -#define KEY_rand 160 -#define KEY_read 161 -#define KEY_readdir 162 -#define KEY_readline 163 -#define KEY_readlink 164 -#define KEY_readpipe 165 -#define KEY_recv 166 -#define KEY_redo 167 -#define KEY_ref 168 -#define KEY_rename 169 -#define KEY_require 170 -#define KEY_reset 171 -#define KEY_return 172 -#define KEY_reverse 173 -#define KEY_rewinddir 174 -#define KEY_rindex 175 -#define KEY_rmdir 176 -#define KEY_s 177 -#define KEY_say 178 -#define KEY_scalar 179 -#define KEY_seek 180 -#define KEY_seekdir 181 -#define KEY_select 182 -#define KEY_semctl 183 -#define KEY_semget 184 -#define KEY_semop 185 -#define KEY_send 186 -#define KEY_setgrent 187 -#define KEY_sethostent 188 -#define KEY_setnetent 189 -#define KEY_setpgrp 190 -#define KEY_setpriority 191 -#define KEY_setprotoent 192 -#define KEY_setpwent 193 -#define KEY_setservent 194 -#define KEY_setsockopt 195 -#define KEY_shift 196 -#define KEY_shmctl 197 -#define KEY_shmget 198 -#define KEY_shmread 199 -#define KEY_shmwrite 200 -#define KEY_shutdown 201 -#define KEY_sin 202 -#define KEY_sleep 203 -#define KEY_socket 204 -#define KEY_socketpair 205 -#define KEY_sort 206 -#define KEY_splice 207 -#define KEY_split 208 -#define KEY_sprintf 209 -#define KEY_sqrt 210 -#define KEY_srand 211 -#define KEY_stat 212 -#define KEY_state 213 -#define KEY_study 214 -#define KEY_sub 215 -#define KEY_substr 216 -#define KEY_symlink 217 -#define KEY_syscall 218 -#define KEY_sysopen 219 -#define KEY_sysread 220 -#define KEY_sysseek 221 -#define KEY_system 222 -#define KEY_syswrite 223 -#define KEY_tell 224 -#define KEY_telldir 225 -#define KEY_tie 226 -#define KEY_tied 227 -#define KEY_time 228 -#define KEY_times 229 -#define KEY_tr 230 -#define KEY_truncate 231 -#define KEY_uc 232 -#define KEY_ucfirst 233 -#define KEY_umask 234 -#define KEY_undef 235 -#define KEY_unless 236 -#define KEY_unlink 237 -#define KEY_unpack 238 -#define KEY_unshift 239 -#define KEY_untie 240 -#define KEY_until 241 -#define KEY_use 242 -#define KEY_utime 243 -#define KEY_values 244 -#define KEY_vec 245 -#define KEY_wait 246 -#define KEY_waitpid 247 -#define KEY_wantarray 248 -#define KEY_warn 249 -#define KEY_when 250 -#define KEY_while 251 -#define KEY_write 252 -#define KEY_x 253 -#define KEY_xor 254 -#define KEY_y 255 +#define KEY_catch 24 +#define KEY_chdir 25 +#define KEY_chmod 26 +#define KEY_chomp 27 +#define KEY_chop 28 +#define KEY_chown 29 +#define KEY_chr 30 +#define KEY_chroot 31 +#define KEY_close 32 +#define KEY_closedir 33 +#define KEY_cmp 34 +#define KEY_connect 35 +#define KEY_continue 36 +#define KEY_cos 37 +#define KEY_crypt 38 +#define KEY_dbmclose 39 +#define KEY_dbmopen 40 +#define KEY_default 41 +#define KEY_defined 42 +#define KEY_delete 43 +#define KEY_die 44 +#define KEY_do 45 +#define KEY_dump 46 +#define KEY_each 47 +#define KEY_else 48 +#define KEY_elsif 49 +#define KEY_endgrent 50 +#define KEY_endhostent 51 +#define KEY_endnetent 52 +#define KEY_endprotoent 53 +#define KEY_endpwent 54 +#define KEY_endservent 55 +#define KEY_eof 56 +#define KEY_eq 57 +#define KEY_eval 58 +#define KEY_evalbytes 59 +#define KEY_exec 60 +#define KEY_exists 61 +#define KEY_exit 62 +#define KEY_exp 63 +#define KEY_fc 64 +#define KEY_fcntl 65 +#define KEY_fileno 66 +#define KEY_flock 67 +#define KEY_for 68 +#define KEY_foreach 69 +#define KEY_fork 70 +#define KEY_format 71 +#define KEY_formline 72 +#define KEY_ge 73 +#define KEY_getc 74 +#define KEY_getgrent 75 +#define KEY_getgrgid 76 +#define KEY_getgrnam 77 +#define KEY_gethostbyaddr 78 +#define KEY_gethostbyname 79 +#define KEY_gethostent 80 +#define KEY_getlogin 81 +#define KEY_getnetbyaddr 82 +#define KEY_getnetbyname 83 +#define KEY_getnetent 84 +#define KEY_getpeername 85 +#define KEY_getpgrp 86 +#define KEY_getppid 87 +#define KEY_getpriority 88 +#define KEY_getprotobyname 89 +#define KEY_getprotobynumber 90 +#define KEY_getprotoent 91 +#define KEY_getpwent 92 +#define KEY_getpwnam 93 +#define KEY_getpwuid 94 +#define KEY_getservbyname 95 +#define KEY_getservbyport 96 +#define KEY_getservent 97 +#define KEY_getsockname 98 +#define KEY_getsockopt 99 +#define KEY_given 100 +#define KEY_glob 101 +#define KEY_gmtime 102 +#define KEY_goto 103 +#define KEY_grep 104 +#define KEY_gt 105 +#define KEY_hex 106 +#define KEY_if 107 +#define KEY_index 108 +#define KEY_int 109 +#define KEY_ioctl 110 +#define KEY_isa 111 +#define KEY_join 112 +#define KEY_keys 113 +#define KEY_kill 114 +#define KEY_last 115 +#define KEY_lc 116 +#define KEY_lcfirst 117 +#define KEY_le 118 +#define KEY_length 119 +#define KEY_link 120 +#define KEY_listen 121 +#define KEY_local 122 +#define KEY_localtime 123 +#define KEY_lock 124 +#define KEY_log 125 +#define KEY_lstat 126 +#define KEY_lt 127 +#define KEY_m 128 +#define KEY_map 129 +#define KEY_mkdir 130 +#define KEY_msgctl 131 +#define KEY_msgget 132 +#define KEY_msgrcv 133 +#define KEY_msgsnd 134 +#define KEY_my 135 +#define KEY_ne 136 +#define KEY_next 137 +#define KEY_no 138 +#define KEY_not 139 +#define KEY_oct 140 +#define KEY_open 141 +#define KEY_opendir 142 +#define KEY_or 143 +#define KEY_ord 144 +#define KEY_our 145 +#define KEY_pack 146 +#define KEY_package 147 +#define KEY_pipe 148 +#define KEY_pop 149 +#define KEY_pos 150 +#define KEY_print 151 +#define KEY_printf 152 +#define KEY_prototype 153 +#define KEY_push 154 +#define KEY_q 155 +#define KEY_qq 156 +#define KEY_qr 157 +#define KEY_quotemeta 158 +#define KEY_qw 159 +#define KEY_qx 160 +#define KEY_rand 161 +#define KEY_read 162 +#define KEY_readdir 163 +#define KEY_readline 164 +#define KEY_readlink 165 +#define KEY_readpipe 166 +#define KEY_recv 167 +#define KEY_redo 168 +#define KEY_ref 169 +#define KEY_rename 170 +#define KEY_require 171 +#define KEY_reset 172 +#define KEY_return 173 +#define KEY_reverse 174 +#define KEY_rewinddir 175 +#define KEY_rindex 176 +#define KEY_rmdir 177 +#define KEY_s 178 +#define KEY_say 179 +#define KEY_scalar 180 +#define KEY_seek 181 +#define KEY_seekdir 182 +#define KEY_select 183 +#define KEY_semctl 184 +#define KEY_semget 185 +#define KEY_semop 186 +#define KEY_send 187 +#define KEY_setgrent 188 +#define KEY_sethostent 189 +#define KEY_setnetent 190 +#define KEY_setpgrp 191 +#define KEY_setpriority 192 +#define KEY_setprotoent 193 +#define KEY_setpwent 194 +#define KEY_setservent 195 +#define KEY_setsockopt 196 +#define KEY_shift 197 +#define KEY_shmctl 198 +#define KEY_shmget 199 +#define KEY_shmread 200 +#define KEY_shmwrite 201 +#define KEY_shutdown 202 +#define KEY_sin 203 +#define KEY_sleep 204 +#define KEY_socket 205 +#define KEY_socketpair 206 +#define KEY_sort 207 +#define KEY_splice 208 +#define KEY_split 209 +#define KEY_sprintf 210 +#define KEY_sqrt 211 +#define KEY_srand 212 +#define KEY_stat 213 +#define KEY_state 214 +#define KEY_study 215 +#define KEY_sub 216 +#define KEY_substr 217 +#define KEY_symlink 218 +#define KEY_syscall 219 +#define KEY_sysopen 220 +#define KEY_sysread 221 +#define KEY_sysseek 222 +#define KEY_system 223 +#define KEY_syswrite 224 +#define KEY_tell 225 +#define KEY_telldir 226 +#define KEY_tie 227 +#define KEY_tied 228 +#define KEY_time 229 +#define KEY_times 230 +#define KEY_tr 231 +#define KEY_try 232 +#define KEY_truncate 233 +#define KEY_uc 234 +#define KEY_ucfirst 235 +#define KEY_umask 236 +#define KEY_undef 237 +#define KEY_unless 238 +#define KEY_unlink 239 +#define KEY_unpack 240 +#define KEY_unshift 241 +#define KEY_untie 242 +#define KEY_until 243 +#define KEY_use 244 +#define KEY_utime 245 +#define KEY_values 246 +#define KEY_vec 247 +#define KEY_wait 248 +#define KEY_waitpid 249 +#define KEY_wantarray 250 +#define KEY_warn 251 +#define KEY_when 252 +#define KEY_while 253 +#define KEY_write 254 +#define KEY_x 255 +#define KEY_xor 256 +#define KEY_y 257 /* Generated from: - * dd384f0c948716414a93d758d89a38e3c8116acfdc48eb7e34fa6737887097d5 regen/keywords.pl + * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl * ex: set ro: */ diff --git a/lib/B/Deparse-core.t b/lib/B/Deparse-core.t index cdbd27ce5e..9d891a7507 100644 --- a/lib/B/Deparse-core.t +++ b/lib/B/Deparse-core.t @@ -362,6 +362,7 @@ my %not_tested = map { $_ => 1} qw( END INIT UNITCHECK + catch default else elsif @@ -381,6 +382,7 @@ my %not_tested = map { $_ => 1} qw( require s tr + try unless until use diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index 2317aa1498..96d569acb9 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring MDEREF_SHIFT ); -$VERSION = '1.55'; +$VERSION = '1.56'; use strict; our $AUTOLOAD; use warnings (); @@ -2304,6 +2304,8 @@ my %feature_keywords = ( evalbytes=>'evalbytes', __SUB__ => '__SUB__', fc => 'fc', + try => 'try', + catch => 'try', ); # keywords that are strong and also have a prototype diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index a3666a7181..480dac69a0 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -275,6 +275,7 @@ $bits{backtick}{0} = $bf[0]; @{$bits{bit_xor}}{1,0} = ($bf[1], $bf[1]); @{$bits{bless}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{caller}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{catch}{0} = $bf[0]; @{$bits{chdir}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{chmod}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{chomp}{0} = $bf[0]; diff --git a/lib/feature.pm b/lib/feature.pm index a8e943a819..e6e0442582 100644 --- a/lib/feature.pm +++ b/lib/feature.pm @@ -5,12 +5,13 @@ package feature; -our $VERSION = '1.62'; +our $VERSION = '1.63'; our %feature = ( fc => 'feature_fc', isa => 'feature_isa', say => 'feature_say', + try => 'feature_try', state => 'feature_state', switch => 'feature_switch', bitwise => 'feature_bitwise', @@ -33,7 +34,7 @@ our %feature_bundle = ( "5.15" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)], "5.23" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], "5.27" => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], - "all" => [qw(bareword_filehandles bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)], + "all" => [qw(bareword_filehandles bitwise current_sub declared_refs evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)], "default" => [qw(bareword_filehandles indirect multidimensional)], ); @@ -409,6 +410,14 @@ previous versions it was simply on all the time. You can use the L<bareword::filehandles> module on CPAN to disable bareword filehandles for older versions of perl. +=head2 The 'try' feature. + +This feature enables the C<try> and C<catch> syntax, which allows exception +handling, where exceptions throwin from the body of the block introduced with +C<try> are caught by executing the body of the C<catch> block. + +For more information, see L<perlsyn/"Try Catch Exception Handling">. + =head1 FEATURE BUNDLES It's possible to load multiple features together, using diff --git a/lib/warnings.pm b/lib/warnings.pm index da1ca6caa4..a92d4904c2 100644 --- a/lib/warnings.pm +++ b/lib/warnings.pm @@ -109,6 +109,9 @@ our %Offsets = ( # Warnings Categories added in Perl 5.031 'experimental::isa' => 146, + + # Warnings Categories added in Perl 5.033 + 'experimental::try' => 148, ); our %Bits = ( @@ -122,7 +125,7 @@ our %Bits = ( 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] - 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x05", # [51..56,58..62,66..68,70..73] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x15", # [51..56,58..62,66..68,70..74] 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [67] 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [58] 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [59] @@ -137,6 +140,7 @@ our %Bits = ( 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [68] 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [56] 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [54] + 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [74] 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [71] 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [72] 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [62] @@ -199,7 +203,7 @@ our %DeadBits = ( 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] - 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x0a", # [51..56,58..62,66..68,70..73] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x2a", # [51..56,58..62,66..68,70..74] 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [67] 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [58] 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [59] @@ -214,6 +218,7 @@ our %DeadBits = ( 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [68] 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [56] 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [54] + 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [74] 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [71] 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [72] 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [62] @@ -267,8 +272,8 @@ our %DeadBits = ( # These are used by various things, including our own tests our $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; -our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05"; # [2,4,22,23,25,52..56,58..63,66..68,70..73] -our $LAST_BIT = 148 ; +our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x15"; # [2,4,22,23,25,52..56,58..63,66..68,70..74] +our $LAST_BIT = 150 ; our $BYTES = 19 ; sub Croaker @@ -888,6 +893,8 @@ The current hierarchy is: | | | +- experimental::smartmatch | | + | +- experimental::try + | | | +- experimental::uniprop_wildcards | | | +- experimental::vlb @@ -12753,6 +12753,8 @@ Perl_ck_eval(pTHX_ OP *o) op_free(o); enter = alloc_LOGOP(OP_ENTERTRY, NULL, NULL); + if(o->op_flags & OPf_SPECIAL) + enter->op_flags |= OPf_SPECIAL; /* establish postfix order */ enter->op_next = (OP*)enter; @@ -147,6 +147,7 @@ Deprecated. Use C<GIMME_V> instead. /* On OP_DUMP, has no label */ /* On OP_UNSTACK, in a C-style for loop */ /* On OP_READLINE, it's for <<>>, not <> */ + /* On OP_ENTERTRY, this is a real try {} block. */ /* There is no room in op_flags for this one, so it has its own bit- field member (op_folded) instead. The flag is only used to tell op_convert_list to set op_folded. */ @@ -549,6 +549,7 @@ EXTCONST char* const PL_op_name[] = { "isa", "cmpchain_and", "cmpchain_dup", + "catch", "freed", }; #endif @@ -957,6 +958,7 @@ EXTCONST char* const PL_op_desc[] = { "derived class test", "comparison chaining", "comparand shuffling", + "catch {} block", "freed op", }; #endif @@ -1368,6 +1370,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_isa, Perl_pp_cmpchain_and, Perl_pp_cmpchain_dup, + Perl_pp_catch, } #endif ; @@ -1775,6 +1778,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_isa, /* isa */ Perl_ck_null, /* cmpchain_and */ Perl_ck_null, /* cmpchain_dup */ + Perl_ck_null, /* catch */ } #endif ; @@ -2183,6 +2187,7 @@ EXTCONST U32 PL_opargs[] = { 0x00000204, /* isa */ 0x00000300, /* cmpchain_and */ 0x00000100, /* cmpchain_dup */ + 0x00000300, /* catch */ }; #endif @@ -2850,6 +2855,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 12, /* isa */ 0, /* cmpchain_and */ 0, /* cmpchain_dup */ + 0, /* catch */ }; @@ -2868,7 +2874,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { */ EXTCONST U16 PL_op_private_bitdefs[] = { - 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup */ + 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup, catch */ 0x2fdc, 0x41b9, /* pushmark */ 0x00bd, /* wantarray, runcv */ 0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */ @@ -3346,6 +3352,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* ISA */ (OPpARG2_MASK), /* CMPCHAIN_AND */ (OPpARG1_MASK), /* CMPCHAIN_DUP */ (OPpARG1_MASK), + /* CATCH */ (OPpARG1_MASK), }; @@ -414,10 +414,11 @@ typedef enum opcode { OP_ISA = 397, OP_CMPCHAIN_AND = 398, OP_CMPCHAIN_DUP = 399, + OP_CATCH = 400, OP_max } opcode; -#define MAXO 400 +#define MAXO 401 #define OP_FREED MAXO /* the OP_IS_* macros are optimized to a simple range check because @@ -5,8 +5,8 @@ */ case 2: -#line 137 "perly.y" - { +#line 138 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -14,8 +14,8 @@ case 2: break; case 3: -#line 142 "perly.y" - { +#line 143 "perly.y" + { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; (yyval.ival) = 0; @@ -24,8 +24,8 @@ case 2: break; case 4: -#line 148 "perly.y" - { +#line 149 "perly.y" + { parser->expect = XTERM; (yyval.ival) = 0; } @@ -33,8 +33,8 @@ case 2: break; case 5: -#line 153 "perly.y" - { +#line 154 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -42,8 +42,8 @@ case 2: break; case 6: -#line 158 "perly.y" - { +#line 159 "perly.y" + { parser->expect = XBLOCK; (yyval.ival) = 0; } @@ -51,8 +51,8 @@ case 2: break; case 7: -#line 163 "perly.y" - { +#line 164 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -63,8 +63,8 @@ case 2: break; case 8: -#line 171 "perly.y" - { +#line 172 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -72,8 +72,8 @@ case 2: break; case 9: -#line 176 "perly.y" - { +#line 177 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -84,8 +84,8 @@ case 2: break; case 10: -#line 184 "perly.y" - { +#line 185 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -93,8 +93,8 @@ case 2: break; case 11: -#line 189 "perly.y" - { +#line 190 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -105,8 +105,8 @@ case 2: break; case 12: -#line 197 "perly.y" - { +#line 198 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -114,8 +114,8 @@ case 2: break; case 13: -#line 202 "perly.y" - { +#line 203 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -123,8 +123,8 @@ case 2: break; case 14: -#line 207 "perly.y" - { +#line 208 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -132,8 +132,8 @@ case 2: break; case 15: -#line 212 "perly.y" - { +#line 213 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -141,8 +141,8 @@ case 2: break; case 16: -#line 220 "perly.y" - { if (parser->copline > (line_t)(ps[-3].val.ival)) +#line 221 "perly.y" + { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); } @@ -150,8 +150,8 @@ case 2: break; case 17: -#line 228 "perly.y" - { if (parser->copline > (line_t)(ps[-6].val.ival)) +#line 229 "perly.y" + { if (parser->copline > (line_t)(ps[-6].val.ival)) parser->copline = (line_t)(ps[-6].val.ival); (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); } @@ -159,15 +159,15 @@ case 2: break; case 18: -#line 235 "perly.y" - { (yyval.ival) = block_start(TRUE); +#line 236 "perly.y" + { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 19: -#line 240 "perly.y" - { if (parser->copline > (line_t)(ps[-3].val.ival)) +#line 241 "perly.y" + { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); } @@ -175,21 +175,21 @@ case 2: break; case 20: -#line 247 "perly.y" - { (yyval.ival) = block_start(FALSE); +#line 248 "perly.y" + { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 21: -#line 253 "perly.y" - { (yyval.opval) = NULL; } +#line 254 "perly.y" + { (yyval.opval) = NULL; } break; case 22: -#line 255 "perly.y" - { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); +#line 256 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) PL_hints |= HINT_BLOCK_SCOPE; @@ -198,14 +198,14 @@ case 2: break; case 23: -#line 264 "perly.y" - { (yyval.opval) = NULL; } +#line 265 "perly.y" + { (yyval.opval) = NULL; } break; case 24: -#line 266 "perly.y" - { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); +#line 267 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) PL_hints |= HINT_BLOCK_SCOPE; @@ -214,22 +214,22 @@ case 2: break; case 25: -#line 275 "perly.y" - { +#line 276 "perly.y" + { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } break; case 26: -#line 279 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 280 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 27: -#line 283 "perly.y" - { +#line 284 "perly.y" + { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, savepv(SvPVX_const(label)), (ps[0].val.opval)); @@ -239,8 +239,8 @@ case 2: break; case 28: -#line 290 "perly.y" - { +#line 291 "perly.y" + { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, savepv(SvPVX_const(label)), (ps[0].val.opval)); @@ -250,14 +250,14 @@ case 2: break; case 29: -#line 300 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 301 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 30: -#line 302 "perly.y" - { +#line 303 "perly.y" + { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); (yyval.opval) = NULL; @@ -270,8 +270,8 @@ case 2: break; case 31: -#line 314 "perly.y" - { +#line 315 "perly.y" + { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; parser->in_my_stash = NULL; @@ -280,8 +280,8 @@ case 2: break; case 32: -#line 320 "perly.y" - { +#line 321 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST ? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)) @@ -295,8 +295,8 @@ case 2: break; case 33: -#line 335 "perly.y" - { +#line 336 "perly.y" + { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; parser->in_my_stash = NULL; @@ -305,8 +305,8 @@ case 2: break; case 34: -#line 341 "perly.y" - { +#line 342 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (ps[-4].val.opval)->op_type == OP_CONST ? newATTRSUB((ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), (ps[0].val.opval)) @@ -320,8 +320,8 @@ case 2: break; case 35: -#line 352 "perly.y" - { +#line 353 "perly.y" + { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) package_version((ps[-2].val.opval)); @@ -331,14 +331,14 @@ case 2: break; case 36: -#line 359 "perly.y" - { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } +#line 360 "perly.y" + { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 37: -#line 361 "perly.y" - { +#line 362 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval)); parser->parsed_sub = 1; @@ -348,8 +348,8 @@ case 2: break; case 38: -#line 368 "perly.y" - { +#line 369 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -358,8 +358,8 @@ case 2: break; case 39: -#line 374 "perly.y" - { +#line 375 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); parser->copline = (line_t)(ps[-6].val.ival); @@ -368,8 +368,8 @@ case 2: break; case 40: -#line 380 "perly.y" - { +#line 381 "perly.y" + { (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0)); parser->copline = (line_t)(ps[-5].val.ival); } @@ -377,20 +377,20 @@ case 2: break; case 41: -#line 385 "perly.y" - { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } +#line 386 "perly.y" + { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } break; case 42: -#line 387 "perly.y" - { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } +#line 388 "perly.y" + { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; case 43: -#line 389 "perly.y" - { +#line 390 "perly.y" + { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); @@ -400,8 +400,8 @@ case 2: break; case 44: -#line 396 "perly.y" - { +#line 397 "perly.y" + { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); @@ -411,20 +411,20 @@ case 2: break; case 45: -#line 403 "perly.y" - { parser->expect = XTERM; } +#line 404 "perly.y" + { parser->expect = XTERM; } break; case 46: -#line 405 "perly.y" - { parser->expect = XTERM; } +#line 406 "perly.y" + { parser->expect = XTERM; } break; case 47: -#line 408 "perly.y" - { +#line 409 "perly.y" + { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival)); @@ -442,8 +442,8 @@ case 2: break; case 48: -#line 423 "perly.y" - { +#line 424 "perly.y" + { (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-8].val.ival); } @@ -451,8 +451,8 @@ case 2: break; case 49: -#line 428 "perly.y" - { +#line 429 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-7].val.ival); @@ -461,14 +461,14 @@ case 2: break; case 50: -#line 434 "perly.y" - { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } +#line 435 "perly.y" + { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 51: -#line 436 "perly.y" - { +#line 437 "perly.y" + { (yyval.opval) = block_end( (ps[-7].val.ival), newFOROP(0, @@ -484,8 +484,8 @@ case 2: break; case 52: -#line 449 "perly.y" - { +#line 450 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, (ps[-6].val.opval)), @@ -496,8 +496,8 @@ case 2: break; case 53: -#line 457 "perly.y" - { +#line 458 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -506,8 +506,45 @@ case 2: break; case 54: -#line 463 "perly.y" - { +#line 464 "perly.y" + { parser->in_my = 1; } + + break; + + case 55: +#line 466 "perly.y" + { parser->in_my = 0; intro_my(); } + + break; + + case 56: +#line 468 "perly.y" + { + OP *tryblock, *catchblock; + + tryblock = newUNOP(OP_ENTERTRY, OPf_SPECIAL, (ps[-8].val.opval)); + + catchblock = newLOGOP(OP_CATCH, 0, + newOP(OP_NULL, 0), /* LOGOP always needs an op_first */ + block_end((ps[-4].val.ival), op_scope((ps[0].val.opval)))); + + /* catchblock itself is an OP_NULL; the real OP_CATCH is + * its op_first */ + assert(cUNOPx(catchblock)->op_first->op_type == OP_CATCH); + cUNOPx(catchblock)->op_first->op_targ = (ps[-3].val.opval)->op_targ; + op_free((ps[-3].val.opval)); + + (yyval.opval) = op_append_list(OP_LEAVE, + newOP(OP_ENTER, 0), + op_append_list(OP_LINESEQ, + tryblock, catchblock)); + } + + break; + + case 57: +#line 489 "perly.y" + { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, (ps[-1].val.opval), (ps[0].val.opval), 0); @@ -515,9 +552,9 @@ case 2: break; - case 55: -#line 469 "perly.y" - { + case 58: +#line 495 "perly.y" + { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { package_version((ps[-3].val.opval)); @@ -526,9 +563,9 @@ case 2: break; - case 56: -#line 476 "perly.y" - { + case 59: +#line 502 "perly.y" + { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); @@ -538,35 +575,35 @@ case 2: break; - case 57: -#line 484 "perly.y" - { + case 60: +#line 510 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 58: -#line 488 "perly.y" - { + case 61: +#line 514 "perly.y" + { (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); } break; - case 59: -#line 493 "perly.y" - { + case 62: +#line 519 "perly.y" + { (yyval.opval) = NULL; parser->copline = NOLINE; } break; - case 60: -#line 501 "perly.y" - { OP *list; + case 63: +#line 527 "perly.y" + { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); list = op_append_elem(OP_LIST, (ps[-1].val.opval), term); @@ -583,241 +620,241 @@ case 2: break; - case 61: -#line 518 "perly.y" - { (yyval.opval) = NULL; } - - break; - - case 62: -#line 520 "perly.y" - { (yyval.opval) = op_unscope((ps[-1].val.opval)); } - - break; - case 64: -#line 528 "perly.y" - { (yyval.opval) = NULL; } +#line 544 "perly.y" + { (yyval.opval) = NULL; } break; case 65: -#line 530 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 66: -#line 532 "perly.y" - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } +#line 546 "perly.y" + { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 67: -#line 534 "perly.y" - { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } +#line 554 "perly.y" + { (yyval.opval) = NULL; } break; case 68: -#line 536 "perly.y" - { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } +#line 556 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 69: -#line 538 "perly.y" - { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } +#line 558 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 70: -#line 540 "perly.y" - { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); - parser->copline = (line_t)(ps[-1].val.ival); } +#line 560 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 71: -#line 543 "perly.y" - { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } +#line 562 "perly.y" + { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 72: -#line 548 "perly.y" - { (yyval.opval) = NULL; } +#line 564 "perly.y" + { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 73: -#line 550 "perly.y" - { - ((ps[0].val.opval))->op_flags |= OPf_PARENS; - (yyval.opval) = op_scope((ps[0].val.opval)); - } +#line 566 "perly.y" + { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); + parser->copline = (line_t)(ps[-1].val.ival); } break; case 74: -#line 555 "perly.y" - { parser->copline = (line_t)(ps[-5].val.ival); - (yyval.opval) = newCONDOP(0, - newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), - op_scope((ps[-1].val.opval)), (ps[0].val.opval)); - PL_hints |= HINT_BLOCK_SCOPE; - } +#line 569 "perly.y" + { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 75: -#line 565 "perly.y" - { (yyval.opval) = NULL; } +#line 574 "perly.y" + { (yyval.opval) = NULL; } break; case 76: -#line 567 "perly.y" - { (yyval.opval) = op_scope((ps[0].val.opval)); } +#line 576 "perly.y" + { + ((ps[0].val.opval))->op_flags |= OPf_PARENS; + (yyval.opval) = op_scope((ps[0].val.opval)); + } break; case 77: -#line 572 "perly.y" - { (yyval.ival) = (PL_min_intro_pending && - PL_max_intro_pending >= PL_min_intro_pending); - intro_my(); } +#line 581 "perly.y" + { parser->copline = (line_t)(ps[-5].val.ival); + (yyval.opval) = newCONDOP(0, + newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), + op_scope((ps[-1].val.opval)), (ps[0].val.opval)); + PL_hints |= HINT_BLOCK_SCOPE; + } break; case 78: -#line 578 "perly.y" - { (yyval.opval) = NULL; } +#line 591 "perly.y" + { (yyval.opval) = NULL; } break; - case 80: -#line 584 "perly.y" - { YYSTYPE tmplval; - (void)scan_num("1", &tmplval); - (yyval.opval) = tmplval.opval; } + case 79: +#line 593 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 82: -#line 592 "perly.y" - { (yyval.opval) = invert(scalar((ps[0].val.opval))); } + case 80: +#line 598 "perly.y" + { (yyval.ival) = (PL_min_intro_pending && + PL_max_intro_pending >= PL_min_intro_pending); + intro_my(); } break; - case 83: -#line 597 "perly.y" - { (yyval.opval) = (ps[0].val.opval); intro_my(); } + case 81: +#line 604 "perly.y" + { (yyval.opval) = NULL; } break; - case 84: -#line 601 "perly.y" - { (yyval.opval) = (ps[0].val.opval); intro_my(); } + case 83: +#line 610 "perly.y" + { YYSTYPE tmplval; + (void)scan_num("1", &tmplval); + (yyval.opval) = tmplval.opval; } break; case 85: -#line 604 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 618 "perly.y" + { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 86: -#line 605 "perly.y" - { (yyval.opval) = NULL; } +#line 623 "perly.y" + { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 87: -#line 609 "perly.y" - { (yyval.ival) = start_subparse(FALSE, 0); - SAVEFREESV(PL_compcv); } +#line 627 "perly.y" + { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 88: -#line 615 "perly.y" - { (yyval.ival) = start_subparse(FALSE, CVf_ANON); - SAVEFREESV(PL_compcv); } +#line 630 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 89: -#line 620 "perly.y" - { (yyval.ival) = start_subparse(TRUE, 0); - SAVEFREESV(PL_compcv); } +#line 631 "perly.y" + { (yyval.opval) = NULL; } break; - case 92: -#line 631 "perly.y" - { (yyval.opval) = NULL; } + case 90: +#line 635 "perly.y" + { (yyval.ival) = start_subparse(FALSE, 0); + SAVEFREESV(PL_compcv); } break; - case 94: -#line 637 "perly.y" - { (yyval.opval) = NULL; } + case 91: +#line 641 "perly.y" + { (yyval.ival) = start_subparse(FALSE, CVf_ANON); + SAVEFREESV(PL_compcv); } break; - case 95: -#line 639 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 92: +#line 646 "perly.y" + { (yyval.ival) = start_subparse(TRUE, 0); + SAVEFREESV(PL_compcv); } break; - case 96: -#line 641 "perly.y" - { (yyval.opval) = NULL; } + case 95: +#line 657 "perly.y" + { (yyval.opval) = NULL; } break; case 97: -#line 646 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 663 "perly.y" + { (yyval.opval) = NULL; } break; case 98: -#line 648 "perly.y" - { (yyval.opval) = NULL; } +#line 665 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 99: -#line 659 "perly.y" - { parser->in_my = 0; (yyval.opval) = NULL; } +#line 667 "perly.y" + { (yyval.opval) = NULL; } break; case 100: -#line 661 "perly.y" - { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } +#line 672 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 101: -#line 666 "perly.y" - { (yyval.ival) = '@'; } +#line 674 "perly.y" + { (yyval.opval) = NULL; } break; case 102: -#line 668 "perly.y" - { (yyval.ival) = '%'; } +#line 685 "perly.y" + { parser->in_my = 0; (yyval.opval) = NULL; } break; case 103: -#line 672 "perly.y" - { +#line 687 "perly.y" + { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } + + break; + + case 104: +#line 692 "perly.y" + { (yyval.ival) = '@'; } + + break; + + case 105: +#line 694 "perly.y" + { (yyval.ival) = '%'; } + + break; + + case 106: +#line 698 "perly.y" + { I32 sigil = (ps[-2].val.ival); OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -835,27 +872,27 @@ case 2: break; - case 104: -#line 691 "perly.y" - { (yyval.opval) = NULL; } + case 107: +#line 717 "perly.y" + { (yyval.opval) = NULL; } break; - case 105: -#line 693 "perly.y" - { (yyval.opval) = newOP(OP_NULL, 0); } + case 108: +#line 719 "perly.y" + { (yyval.opval) = newOP(OP_NULL, 0); } break; - case 106: -#line 695 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 109: +#line 721 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 107: -#line 701 "perly.y" - { + case 110: +#line 727 "perly.y" + { OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -918,71 +955,71 @@ case 2: break; - case 108: -#line 766 "perly.y" - { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } + case 111: +#line 792 "perly.y" + { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 109: -#line 768 "perly.y" - { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } + case 112: +#line 794 "perly.y" + { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 110: -#line 774 "perly.y" - { (yyval.opval) = (ps[-1].val.opval); } + case 113: +#line 800 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 111: -#line 776 "perly.y" - { + case 114: +#line 802 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 112: -#line 780 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 115: +#line 806 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 113: -#line 785 "perly.y" - { (yyval.opval) = NULL; } + case 116: +#line 811 "perly.y" + { (yyval.opval) = NULL; } break; - case 114: -#line 787 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 117: +#line 813 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 115: -#line 791 "perly.y" - { (yyval.opval) = NULL; } + case 118: +#line 817 "perly.y" + { (yyval.opval) = NULL; } break; - case 116: -#line 793 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 119: +#line 819 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 117: -#line 797 "perly.y" - { (yyval.opval) = (ps[-1].val.opval); } + case 120: +#line 823 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 118: -#line 800 "perly.y" - { + case 121: +#line 826 "perly.y" + { ENTER; SAVEIV(parser->sig_elems); SAVEIV(parser->sig_optelems); @@ -995,9 +1032,9 @@ case 2: break; - case 119: -#line 811 "perly.y" - { + case 122: +#line 837 "perly.y" + { OP *sigops = (ps[0].val.opval); struct op_argcheck_aux *aux; OP *check; @@ -1054,21 +1091,21 @@ case 2: break; - case 120: -#line 868 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 123: +#line 894 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 121: -#line 869 "perly.y" - { (yyval.opval) = NULL; } + case 124: +#line 895 "perly.y" + { (yyval.opval) = NULL; } break; - case 122: -#line 875 "perly.y" - { + case 125: +#line 901 "perly.y" + { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); (yyval.opval) = block_end((ps[-3].val.ival), (ps[-1].val.opval)); @@ -1076,21 +1113,21 @@ case 2: break; - case 123: -#line 885 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 126: +#line 911 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 124: -#line 886 "perly.y" - { (yyval.opval) = NULL; } + case 127: +#line 912 "perly.y" + { (yyval.opval) = NULL; } break; - case 125: -#line 890 "perly.y" - { + case 128: +#line 916 "perly.y" + { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); (yyval.opval) = block_end((ps[-4].val.ival), @@ -1099,52 +1136,52 @@ case 2: break; - case 126: -#line 901 "perly.y" - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + case 129: +#line 927 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 127: -#line 903 "perly.y" - { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } + case 130: +#line 929 "perly.y" + { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 129: -#line 909 "perly.y" - { (yyval.opval) = (ps[-1].val.opval); } + case 132: +#line 935 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 130: -#line 911 "perly.y" - { + case 133: +#line 937 "perly.y" + { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); } break; - case 132: -#line 920 "perly.y" - { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, + case 135: +#line 946 "perly.y" + { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) ); } break; - case 133: -#line 924 "perly.y" - { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, + case 136: +#line 950 "perly.y" + { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) ); } break; - case 134: -#line 928 "perly.y" - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 137: +#line 954 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-3].val.opval)))); @@ -1152,18 +1189,18 @@ case 2: break; - case 135: -#line 934 "perly.y" - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 138: +#line 960 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-2].val.opval)), newMETHOP(OP_METHOD, 0, (ps[0].val.opval)))); } break; - case 136: -#line 939 "perly.y" - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 139: +#line 965 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-2].val.opval)))); @@ -1171,9 +1208,9 @@ case 2: break; - case 137: -#line 945 "perly.y" - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 140: +#line 971 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-4].val.opval)))); @@ -1181,97 +1218,97 @@ case 2: break; - case 138: -#line 951 "perly.y" - { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } + case 141: +#line 977 "perly.y" + { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 139: -#line 953 "perly.y" - { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + case 142: +#line 979 "perly.y" + { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 140: -#line 955 "perly.y" - { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + case 143: +#line 981 "perly.y" + { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 141: -#line 957 "perly.y" - { SvREFCNT_inc_simple_void(PL_compcv); + case 144: +#line 983 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); } break; - case 142: -#line 960 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 145: +#line 986 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval))); } break; - case 145: -#line 975 "perly.y" - { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } + case 148: +#line 1001 "perly.y" + { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; - case 146: -#line 977 "perly.y" - { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); + case 149: +#line 1003 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; - case 147: -#line 980 "perly.y" - { (yyval.opval) = newBINOP(OP_AELEM, 0, + case 150: +#line 1006 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); } break; - case 148: -#line 985 "perly.y" - { (yyval.opval) = newBINOP(OP_AELEM, 0, + case 151: +#line 1011 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); } break; - case 149: -#line 990 "perly.y" - { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); + case 152: +#line 1016 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; - case 150: -#line 993 "perly.y" - { (yyval.opval) = newBINOP(OP_HELEM, 0, + case 153: +#line 1019 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 151: -#line 997 "perly.y" - { (yyval.opval) = newBINOP(OP_HELEM, 0, + case 154: +#line 1023 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 152: -#line 1001 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 155: +#line 1027 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; @@ -1279,9 +1316,9 @@ case 2: break; - case 153: -#line 1007 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 156: +#line 1033 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); if (parser->expect == XBLOCK) @@ -1290,9 +1327,9 @@ case 2: break; - case 154: -#line 1015 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 157: +#line 1041 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); if (parser->expect == XBLOCK) @@ -1301,9 +1338,9 @@ case 2: break; - case 155: -#line 1022 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 158: +#line 1048 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; @@ -1311,387 +1348,387 @@ case 2: break; - case 156: -#line 1028 "perly.y" - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } - - break; - - case 157: -#line 1030 "perly.y" - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } - - break; - - case 158: -#line 1032 "perly.y" - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } - - break; - case 159: -#line 1037 "perly.y" - { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } +#line 1054 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 160: -#line 1039 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1056 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 161: -#line 1041 "perly.y" - { if ((ps[-1].val.ival) != OP_REPEAT) - scalar((ps[-2].val.opval)); - (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); - } +#line 1058 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 162: -#line 1046 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1063 "perly.y" + { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 163: -#line 1048 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1065 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 164: -#line 1050 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1067 "perly.y" + { if ((ps[-1].val.ival) != OP_REPEAT) + scalar((ps[-2].val.opval)); + (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); + } break; case 165: -#line 1052 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1072 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 166: -#line 1054 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1074 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 167: -#line 1056 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1076 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 168: -#line 1058 "perly.y" - { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1078 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 169: -#line 1060 "perly.y" - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1080 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 170: -#line 1062 "perly.y" - { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1082 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 171: -#line 1064 "perly.y" - { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1084 "perly.y" + { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 172: -#line 1066 "perly.y" - { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1086 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 173: -#line 1070 "perly.y" - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1088 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 174: -#line 1072 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1090 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 175: -#line 1074 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1092 "perly.y" + { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 176: -#line 1076 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1096 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 177: -#line 1080 "perly.y" - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1098 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 178: -#line 1082 "perly.y" - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1100 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 179: -#line 1086 "perly.y" - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1102 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 180: -#line 1088 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1106 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 181: -#line 1090 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1108 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 182: -#line 1092 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1112 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 183: -#line 1096 "perly.y" - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1114 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 184: -#line 1098 "perly.y" - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1116 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 185: -#line 1103 "perly.y" - { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } +#line 1118 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 186: -#line 1105 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1122 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 187: -#line 1108 "perly.y" - { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } +#line 1124 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 188: -#line 1110 "perly.y" - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } +#line 1129 "perly.y" + { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 189: -#line 1112 "perly.y" - { (yyval.opval) = newUNOP(OP_POSTINC, 0, - op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } +#line 1131 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 190: -#line 1115 "perly.y" - { (yyval.opval) = newUNOP(OP_POSTDEC, 0, - op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} +#line 1134 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 191: -#line 1118 "perly.y" - { (yyval.opval) = op_convert_list(OP_JOIN, 0, - op_append_elem( - OP_LIST, - newSVREF(scalar( - newSVOP(OP_CONST,0, - newSVpvs("\"")) - )), - (ps[-1].val.opval) - )); - } +#line 1136 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; case 192: -#line 1129 "perly.y" - { (yyval.opval) = newUNOP(OP_PREINC, 0, - op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } +#line 1138 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTINC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; case 193: -#line 1132 "perly.y" - { (yyval.opval) = newUNOP(OP_PREDEC, 0, - op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } +#line 1141 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTDEC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; case 194: -#line 1139 "perly.y" - { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } +#line 1144 "perly.y" + { (yyval.opval) = op_convert_list(OP_JOIN, 0, + op_append_elem( + OP_LIST, + newSVREF(scalar( + newSVOP(OP_CONST,0, + newSVpvs("\"")) + )), + (ps[-1].val.opval) + )); + } break; case 195: -#line 1141 "perly.y" - { (yyval.opval) = newANONLIST(NULL);} +#line 1155 "perly.y" + { (yyval.opval) = newUNOP(OP_PREINC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; case 196: -#line 1143 "perly.y" - { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } +#line 1158 "perly.y" + { (yyval.opval) = newUNOP(OP_PREDEC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; case 197: -#line 1145 "perly.y" - { (yyval.opval) = newANONHASH(NULL); } +#line 1165 "perly.y" + { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; case 198: -#line 1147 "perly.y" - { SvREFCNT_inc_simple_void(PL_compcv); - (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } +#line 1167 "perly.y" + { (yyval.opval) = newANONLIST(NULL);} break; case 199: -#line 1150 "perly.y" - { SvREFCNT_inc_simple_void(PL_compcv); - (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } +#line 1169 "perly.y" + { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; case 200: -#line 1156 "perly.y" - { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} +#line 1171 "perly.y" + { (yyval.opval) = newANONHASH(NULL); } break; case 201: -#line 1158 "perly.y" - { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} +#line 1173 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 206: -#line 1166 "perly.y" - { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } + case 202: +#line 1176 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 207: -#line 1168 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } + case 203: +#line 1182 "perly.y" + { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 208: -#line 1170 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } + case 204: +#line 1184 "perly.y" + { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; case 209: -#line 1172 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1192 "perly.y" + { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 210: -#line 1174 "perly.y" - { (yyval.opval) = localize((ps[0].val.opval),0); } +#line 1194 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 211: -#line 1176 "perly.y" - { (yyval.opval) = sawparens((ps[-1].val.opval)); } +#line 1196 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 212: -#line 1178 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1198 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 213: -#line 1180 "perly.y" - { (yyval.opval) = sawparens(newNULLLIST()); } +#line 1200 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 214: -#line 1182 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1202 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 215: -#line 1184 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1204 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 216: -#line 1186 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1206 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 217: -#line 1188 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1208 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 218: -#line 1190 "perly.y" - { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} +#line 1210 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 219: -#line 1192 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1212 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 220: -#line 1194 "perly.y" - { (yyval.opval) = op_prepend_elem(OP_ASLICE, +#line 1214 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 221: +#line 1216 "perly.y" + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} + + break; + + case 222: +#line 1218 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 223: +#line 1220 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list((ps[-1].val.opval)), @@ -1703,9 +1740,9 @@ case 2: break; - case 221: -#line 1204 "perly.y" - { (yyval.opval) = op_prepend_elem(OP_KVASLICE, + case 224: +#line 1230 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, list((ps[-1].val.opval)), @@ -1717,9 +1754,9 @@ case 2: break; - case 222: -#line 1214 "perly.y" - { (yyval.opval) = op_prepend_elem(OP_HSLICE, + case 225: +#line 1240 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, list((ps[-2].val.opval)), @@ -1731,9 +1768,9 @@ case 2: break; - case 223: -#line 1224 "perly.y" - { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, + case 226: +#line 1250 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, list((ps[-2].val.opval)), @@ -1745,378 +1782,377 @@ case 2: break; - case 224: -#line 1234 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + case 227: +#line 1260 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 225: -#line 1236 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } + case 228: +#line 1262 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 226: -#line 1238 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); + case 229: +#line 1264 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 227: -#line 1241 "perly.y" - { + case 230: +#line 1267 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); } break; - case 228: -#line 1246 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 231: +#line 1272 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 229: -#line 1250 "perly.y" - { (yyval.opval) = newSVREF((ps[-3].val.opval)); } - - break; - - case 230: -#line 1252 "perly.y" - { (yyval.opval) = newAVREF((ps[-3].val.opval)); } - - break; - - case 231: -#line 1254 "perly.y" - { (yyval.opval) = newHVREF((ps[-3].val.opval)); } - - break; - case 232: -#line 1256 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, - scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } +#line 1276 "perly.y" + { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; case 233: -#line 1259 "perly.y" - { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } +#line 1278 "perly.y" + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 234: -#line 1261 "perly.y" - { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); - PL_hints |= HINT_BLOCK_SCOPE; } +#line 1280 "perly.y" + { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; case 235: -#line 1264 "perly.y" - { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } +#line 1282 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, + scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; case 236: -#line 1266 "perly.y" - { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } +#line 1285 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; case 237: -#line 1268 "perly.y" - { (yyval.opval) = newOP((ps[0].val.ival), 0); } +#line 1287 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); + PL_hints |= HINT_BLOCK_SCOPE; } break; case 238: -#line 1270 "perly.y" - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } +#line 1290 "perly.y" + { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; case 239: -#line 1272 "perly.y" - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } +#line 1292 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 240: -#line 1274 "perly.y" - { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } +#line 1294 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 241: -#line 1276 "perly.y" - { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } +#line 1296 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 242: -#line 1278 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } +#line 1298 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 243: -#line 1280 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } +#line 1300 "perly.y" + { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 244: -#line 1283 "perly.y" - { (yyval.opval) = newOP((ps[0].val.ival), 0); } +#line 1302 "perly.y" + { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 245: -#line 1285 "perly.y" - { (yyval.opval) = newOP((ps[-2].val.ival), 0);} +#line 1304 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 246: -#line 1287 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1306 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; case 247: -#line 1289 "perly.y" - { (yyval.opval) = (ps[-2].val.opval); } +#line 1309 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 248: -#line 1291 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } +#line 1311 "perly.y" + { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; case 249: -#line 1293 "perly.y" - { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) - ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) - : newOP((ps[-2].val.ival), OPf_SPECIAL); } +#line 1313 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 250: -#line 1297 "perly.y" - { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } +#line 1315 "perly.y" + { (yyval.opval) = (ps[-2].val.opval); } break; case 251: -#line 1299 "perly.y" - { - if ( (ps[0].val.opval)->op_type != OP_TRANS - && (ps[0].val.opval)->op_type != OP_TRANSR - && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV)) - { - (yyval.ival) = start_subparse(FALSE, CVf_ANON); - SAVEFREESV(PL_compcv); - } else - (yyval.ival) = 0; - } +#line 1317 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 252: -#line 1310 "perly.y" - { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } +#line 1319 "perly.y" + { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) + ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) + : newOP((ps[-2].val.ival), OPf_SPECIAL); } break; - case 256: -#line 1318 "perly.y" - { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } + case 253: +#line 1323 "perly.y" + { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 257: -#line 1320 "perly.y" - { (yyval.opval) = localize((ps[0].val.opval),1); } + case 254: +#line 1325 "perly.y" + { + if ( (ps[0].val.opval)->op_type != OP_TRANS + && (ps[0].val.opval)->op_type != OP_TRANSR + && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV)) + { + (yyval.ival) = start_subparse(FALSE, CVf_ANON); + SAVEFREESV(PL_compcv); + } else + (yyval.ival) = 0; + } break; - case 258: -#line 1322 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } + case 255: +#line 1336 "perly.y" + { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; case 259: -#line 1327 "perly.y" - { (yyval.opval) = sawparens((ps[-1].val.opval)); } +#line 1344 "perly.y" + { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 260: -#line 1329 "perly.y" - { (yyval.opval) = sawparens(newNULLLIST()); } +#line 1346 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 261: -#line 1332 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1348 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 262: -#line 1334 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1353 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 263: -#line 1336 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1355 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 264: -#line 1341 "perly.y" - { (yyval.opval) = NULL; } +#line 1358 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 265: -#line 1343 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1360 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 266: -#line 1347 "perly.y" - { (yyval.opval) = NULL; } +#line 1362 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 267: -#line 1349 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1367 "perly.y" + { (yyval.opval) = NULL; } break; case 268: -#line 1353 "perly.y" - { (yyval.opval) = NULL; } +#line 1369 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 269: -#line 1355 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1373 "perly.y" + { (yyval.opval) = NULL; } break; case 270: -#line 1361 "perly.y" - { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } +#line 1375 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 278: -#line 1378 "perly.y" - { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } + case 271: +#line 1379 "perly.y" + { (yyval.opval) = NULL; } break; - case 279: -#line 1382 "perly.y" - { (yyval.opval) = newSVREF((ps[0].val.opval)); } + case 272: +#line 1381 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 280: -#line 1386 "perly.y" - { (yyval.opval) = newAVREF((ps[0].val.opval)); - if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); - } + case 273: +#line 1387 "perly.y" + { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 281: -#line 1392 "perly.y" - { (yyval.opval) = newHVREF((ps[0].val.opval)); - if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); - } +#line 1404 "perly.y" + { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; case 282: -#line 1398 "perly.y" - { (yyval.opval) = newAVREF((ps[0].val.opval)); } +#line 1408 "perly.y" + { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; case 283: -#line 1400 "perly.y" - { (yyval.opval) = newAVREF((ps[-3].val.opval)); } +#line 1412 "perly.y" + { (yyval.opval) = newAVREF((ps[0].val.opval)); + if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); + } break; case 284: -#line 1404 "perly.y" - { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } +#line 1418 "perly.y" + { (yyval.opval) = newHVREF((ps[0].val.opval)); + if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); + } break; - case 286: -#line 1409 "perly.y" - { (yyval.opval) = newAVREF((ps[-2].val.opval)); } + case 285: +#line 1424 "perly.y" + { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 288: -#line 1414 "perly.y" - { (yyval.opval) = newHVREF((ps[-2].val.opval)); } + case 286: +#line 1426 "perly.y" + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 290: -#line 1419 "perly.y" - { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } + case 287: +#line 1430 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 291: -#line 1424 "perly.y" - { (yyval.opval) = scalar((ps[0].val.opval)); } + case 289: +#line 1435 "perly.y" + { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 292: -#line 1426 "perly.y" - { (yyval.opval) = scalar((ps[0].val.opval)); } + case 291: +#line 1440 "perly.y" + { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; case 293: -#line 1428 "perly.y" - { (yyval.opval) = op_scope((ps[0].val.opval)); } +#line 1445 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; case 294: -#line 1431 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1450 "perly.y" + { (yyval.opval) = scalar((ps[0].val.opval)); } break; + case 295: +#line 1452 "perly.y" + { (yyval.opval) = scalar((ps[0].val.opval)); } + + break; + + case 296: +#line 1454 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } + + break; + + case 297: +#line 1457 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; @@ -2124,6 +2160,6 @@ case 2: /* Generated from: - * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y + * 672539c523be1568df09c599b38a828c80473c60e1fddd63764d66f74e4e7b11 perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ @@ -4,14 +4,14 @@ Any changes made here will be lost! */ -#define PERL_BISON_VERSION 30005 +#define PERL_BISON_VERSION 30003 #ifdef PERL_CORE -/* A Bison parser, made by GNU Bison 3.5.1. */ +/* A Bison parser, made by GNU Bison 3.3. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -111,59 +111,61 @@ extern int yydebug; GIVEN = 310, WHEN = 311, DEFAULT = 312, - LOOPEX = 313, - DOTDOT = 314, - YADAYADA = 315, - FUNC0 = 316, - FUNC1 = 317, - FUNC = 318, - UNIOP = 319, - LSTOP = 320, - MULOP = 321, - ADDOP = 322, - DOLSHARP = 323, - DO = 324, - HASHBRACK = 325, - NOAMP = 326, - LOCAL = 327, - MY = 328, - REQUIRE = 329, - COLONATTR = 330, - FORMLBRACK = 331, - FORMRBRACK = 332, - SUBLEXSTART = 333, - SUBLEXEND = 334, - PREC_LOW = 335, - OROP = 336, - ANDOP = 337, - NOTOP = 338, - ASSIGNOP = 339, - PERLY_QUESTION_MARK = 340, - PERLY_COLON = 341, - OROR = 342, - DORDOR = 343, - ANDAND = 344, - BITOROP = 345, - BITANDOP = 346, - CHEQOP = 347, - NCEQOP = 348, - CHRELOP = 349, - NCRELOP = 350, - SHIFTOP = 351, - MATCHOP = 352, - PERLY_EXCLAMATION_MARK = 353, - PERLY_TILDE = 354, - UMINUS = 355, - REFGEN = 356, - POWOP = 357, - PREINC = 358, - PREDEC = 359, - POSTINC = 360, - POSTDEC = 361, - POSTJOIN = 362, - ARROW = 363, - PERLY_PAREN_CLOSE = 364, - PERLY_PAREN_OPEN = 365 + TRY = 313, + CATCH = 314, + LOOPEX = 315, + DOTDOT = 316, + YADAYADA = 317, + FUNC0 = 318, + FUNC1 = 319, + FUNC = 320, + UNIOP = 321, + LSTOP = 322, + MULOP = 323, + ADDOP = 324, + DOLSHARP = 325, + DO = 326, + HASHBRACK = 327, + NOAMP = 328, + LOCAL = 329, + MY = 330, + REQUIRE = 331, + COLONATTR = 332, + FORMLBRACK = 333, + FORMRBRACK = 334, + SUBLEXSTART = 335, + SUBLEXEND = 336, + PREC_LOW = 337, + OROP = 338, + ANDOP = 339, + NOTOP = 340, + ASSIGNOP = 341, + PERLY_QUESTION_MARK = 342, + PERLY_COLON = 343, + OROR = 344, + DORDOR = 345, + ANDAND = 346, + BITOROP = 347, + BITANDOP = 348, + CHEQOP = 349, + NCEQOP = 350, + CHRELOP = 351, + NCRELOP = 352, + SHIFTOP = 353, + MATCHOP = 354, + PERLY_EXCLAMATION_MARK = 355, + PERLY_TILDE = 356, + UMINUS = 357, + REFGEN = 358, + POWOP = 359, + PREINC = 360, + PREDEC = 361, + POSTINC = 362, + POSTDEC = 363, + POSTJOIN = 364, + ARROW = 365, + PERLY_PAREN_CLOSE = 366, + PERLY_PAREN_OPEN = 367 }; #endif @@ -193,6 +195,7 @@ S_is_opval_token(int type) { #endif /* PERL_IN_TOKE_C */ #endif /* PERL_CORE */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { @@ -202,8 +205,8 @@ union YYSTYPE OP *opval; GV *gvval; - }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -215,6 +218,6 @@ int yyparse (void); /* Generated from: - * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y + * 672539c523be1568df09c599b38a828c80473c60e1fddd63764d66f74e4e7b11 perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ @@ -6,29 +6,28 @@ #define YYFINAL 16 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3128 +#define YYLAST 3177 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 111 +#define YYNTOKENS 113 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 97 +#define YYNNTS 99 /* YYNRULES -- Number of rules. */ -#define YYNRULES 294 +#define YYNRULES 297 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 571 +#define YYNSTATES 581 #define YYUNDEFTOK 2 -#define YYMAXUTOK 365 - +#define YYMAXUTOK 367 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ -static const yytype_int8 yytranslate[] = +static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -66,43 +65,43 @@ static const yytype_int8 yytranslate[] = 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110 + 105, 106, 107, 108, 109, 110, 111, 112 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_int16 yyrline[] = +static const yytype_uint16 yyrline[] = { - 0, 137, 137, 136, 148, 147, 158, 157, 171, 170, - 184, 183, 197, 196, 207, 206, 219, 227, 234, 239, - 246, 252, 254, 263, 265, 274, 278, 282, 289, 299, - 301, 314, 311, 335, 330, 351, 359, 358, 367, 373, - 379, 384, 386, 388, 395, 403, 405, 402, 422, 427, - 434, 433, 448, 456, 462, 469, 468, 483, 487, 492, - 500, 517, 519, 523, 527, 529, 531, 533, 535, 537, - 539, 542, 547, 549, 554, 564, 566, 571, 577, 579, - 583, 587, 591, 596, 600, 604, 605, 608, 614, 619, - 625, 626, 630, 632, 636, 638, 640, 645, 647, 658, - 660, 665, 667, 671, 690, 692, 694, 700, 765, 767, - 773, 775, 779, 784, 786, 790, 792, 796, 800, 800, - 868, 869, 874, 885, 886, 889, 900, 902, 904, 908, - 910, 915, 919, 923, 927, 933, 938, 944, 950, 952, - 954, 957, 956, 967, 968, 972, 976, 979, 984, 989, - 992, 996, 1000, 1006, 1014, 1021, 1027, 1029, 1031, 1036, - 1038, 1040, 1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, - 1061, 1063, 1065, 1069, 1071, 1073, 1075, 1079, 1081, 1085, - 1087, 1089, 1091, 1095, 1097, 1102, 1104, 1107, 1109, 1111, - 1114, 1117, 1128, 1131, 1138, 1140, 1142, 1144, 1146, 1149, - 1155, 1157, 1161, 1162, 1163, 1164, 1165, 1167, 1169, 1171, - 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, - 1193, 1203, 1213, 1223, 1233, 1235, 1237, 1240, 1245, 1249, - 1251, 1253, 1255, 1258, 1260, 1263, 1265, 1267, 1269, 1271, - 1273, 1275, 1277, 1279, 1282, 1284, 1286, 1288, 1290, 1292, - 1296, 1299, 1298, 1311, 1312, 1313, 1317, 1319, 1321, 1326, - 1328, 1331, 1333, 1335, 1340, 1342, 1346, 1348, 1352, 1354, - 1360, 1364, 1365, 1366, 1369, 1370, 1373, 1374, 1377, 1381, - 1385, 1391, 1397, 1399, 1403, 1407, 1408, 1412, 1413, 1417, - 1418, 1423, 1425, 1427, 1430 + 0, 138, 138, 137, 149, 148, 159, 158, 172, 171, + 185, 184, 198, 197, 208, 207, 220, 228, 235, 240, + 247, 253, 255, 264, 266, 275, 279, 283, 290, 300, + 302, 315, 312, 336, 331, 352, 360, 359, 368, 374, + 380, 385, 387, 389, 396, 404, 406, 403, 423, 428, + 435, 434, 449, 457, 464, 466, 463, 488, 495, 494, + 509, 513, 518, 526, 543, 545, 549, 553, 555, 557, + 559, 561, 563, 565, 568, 573, 575, 580, 590, 592, + 597, 603, 605, 609, 613, 617, 622, 626, 630, 631, + 634, 640, 645, 651, 652, 656, 658, 662, 664, 666, + 671, 673, 684, 686, 691, 693, 697, 716, 718, 720, + 726, 791, 793, 799, 801, 805, 810, 812, 816, 818, + 822, 826, 826, 894, 895, 900, 911, 912, 915, 926, + 928, 930, 934, 936, 941, 945, 949, 953, 959, 964, + 970, 976, 978, 980, 983, 982, 993, 994, 998, 1002, + 1005, 1010, 1015, 1018, 1022, 1026, 1032, 1040, 1047, 1053, + 1055, 1057, 1062, 1064, 1066, 1071, 1073, 1075, 1077, 1079, + 1081, 1083, 1085, 1087, 1089, 1091, 1095, 1097, 1099, 1101, + 1105, 1107, 1111, 1113, 1115, 1117, 1121, 1123, 1128, 1130, + 1133, 1135, 1137, 1140, 1143, 1154, 1157, 1164, 1166, 1168, + 1170, 1172, 1175, 1181, 1183, 1187, 1188, 1189, 1190, 1191, + 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, + 1213, 1215, 1217, 1219, 1229, 1239, 1249, 1259, 1261, 1263, + 1266, 1271, 1275, 1277, 1279, 1281, 1284, 1286, 1289, 1291, + 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1308, 1310, 1312, + 1314, 1316, 1318, 1322, 1325, 1324, 1337, 1338, 1339, 1343, + 1345, 1347, 1352, 1354, 1357, 1359, 1361, 1366, 1368, 1372, + 1374, 1378, 1380, 1386, 1390, 1391, 1392, 1395, 1396, 1399, + 1400, 1403, 1407, 1411, 1417, 1423, 1425, 1429, 1433, 1434, + 1438, 1439, 1443, 1444, 1449, 1451, 1453, 1456 }; #endif @@ -122,38 +121,38 @@ static const char *const yytname[] = "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL", "FORMAT", "SUB", "SIGSUB", "ANONSUB", "ANON_SIGSUB", "PACKAGE", "USE", "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT", - "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", - "LSTOP", "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP", - "LOCAL", "MY", "REQUIRE", "COLONATTR", "FORMLBRACK", "FORMRBRACK", - "SUBLEXSTART", "SUBLEXEND", "PREC_LOW", "OROP", "ANDOP", "NOTOP", - "ASSIGNOP", "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR", "DORDOR", - "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP", + "TRY", "CATCH", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", + "UNIOP", "LSTOP", "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", + "NOAMP", "LOCAL", "MY", "REQUIRE", "COLONATTR", "FORMLBRACK", + "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND", "PREC_LOW", "OROP", "ANDOP", + "NOTOP", "ASSIGNOP", "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR", + "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP", "NCRELOP", "SHIFTOP", "MATCHOP", "PERLY_EXCLAMATION_MARK", "PERLY_TILDE", "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "POSTJOIN", "ARROW", "PERLY_PAREN_CLOSE", "PERLY_PAREN_OPEN", "$accept", "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block", "formblock", "remember", "mblock", "mremember", "stmtseq", "formstmtseq", "fullstmt", "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11", - "$@12", "@13", "$@14", "formline", "formarg", "condition", "sideff", - "else", "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", - "formname", "startsub", "startanonsub", "startformsub", "subname", - "proto", "subattrlist", "myattrlist", "sigvarname", "sigslurpsigil", - "sigslurpelem", "sigdefault", "sigscalarelem", "sigelem", "siglist", - "siglistornull", "optsubsignature", "subsignature", "subsigguts", "$@15", - "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "expr", - "listexpr", "listop", "@16", "method", "subscripted", "termbinop", - "termrelop", "relopchain", "termeqop", "eqopchain", "termunop", - "anonymous", "termdo", "term", "@17", "myattrterm", "myterm", - "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var", - "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", "arylen", - "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR + "$@12", "@13", "$@14", "$@15", "$@16", "formline", "formarg", + "condition", "sideff", "else", "cont", "mintro", "nexpr", "texpr", + "iexpr", "mexpr", "mnexpr", "formname", "startsub", "startanonsub", + "startformsub", "subname", "proto", "subattrlist", "myattrlist", + "sigvarname", "sigslurpsigil", "sigslurpelem", "sigdefault", + "sigscalarelem", "sigelem", "siglist", "siglistornull", + "optsubsignature", "subsignature", "subsigguts", "$@17", "optsubbody", + "subbody", "optsigsubbody", "sigsubbody", "expr", "listexpr", "listop", + "@18", "method", "subscripted", "termbinop", "termrelop", "relopchain", + "termeqop", "eqopchain", "termunop", "anonymous", "termdo", "term", + "@19", "myattrterm", "myterm", "optlistexpr", "optexpr", "optrepl", + "my_scalar", "my_var", "refgen_topic", "my_refgen", "amper", "scalar", + "ary", "hsh", "arylen", "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_int16 yytoknum[] = +static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -166,177 +165,179 @@ static const yytype_int16 yytoknum[] = 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365 + 365, 366, 367 }; # endif -#define YYPACT_NINF (-464) +#define YYPACT_NINF -482 -#define yypact_value_is_default(Yyn) \ - ((Yyn) == YYPACT_NINF) +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-482))) -#define YYTABLE_NINF (-290) +#define YYTABLE_NINF -293 -#define yytable_value_is_error(Yyn) \ - ((Yyn) == YYTABLE_NINF) +#define yytable_value_is_error(Yytable_value) \ + (!!((Yytable_value) == (-293))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 470, -464, -464, -464, -464, -464, -464, -464, 7, -464, - 2748, 5, 1383, 1288, -464, -464, -464, -464, 225, 1825, - 225, 2748, 225, 2748, 225, 225, -464, 225, 225, -464, - -464, 47, -47, -464, 2748, -464, -464, -464, -464, 2748, - -36, -31, -25, 1920, 1733, 225, 1920, 2012, 211, 2748, - -2, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2104, 91, - 52, -464, 4, -464, 159, 35, 167, -6, -464, -464, - -464, 2900, -464, -464, -3, 45, 150, 180, -464, 134, - 252, 314, 168, -464, -464, -464, -464, -464, -464, 211, - 211, 112, -464, 99, 116, 169, 194, 16, 197, 201, - 5, 246, 276, -464, 322, 1034, 1288, -464, -464, -464, - 528, -464, 20, 623, -464, -464, -464, -464, -464, -464, - 13, -464, 786, -464, 786, -464, -464, 2748, 250, 278, - 2748, 289, 703, 5, 348, 312, 2900, 290, 2196, 2748, - 1733, -464, 703, 357, 52, -464, 1633, 2748, -464, -464, - 703, 388, 66, -464, -464, 2748, 703, 2840, 2288, 327, - -464, -464, -464, 703, 52, 786, 786, 786, 268, 268, - 390, 43, 2748, 2748, 2748, 2748, 2748, 2380, -464, -464, - 2748, -464, -464, 2748, 2748, 2748, 2748, 2748, 2748, 2748, - 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, - 2748, -464, -464, -464, 165, 2472, 2748, 2748, 2748, 2748, - 2748, 2748, 2748, -464, 382, -464, -464, 383, -464, -464, - -464, -464, -464, 311, 228, -464, -464, 305, -464, -464, - -464, -464, 5, -464, -464, 2748, 2748, 2748, 2748, 2748, - 2748, -464, -464, -464, 395, -464, -464, 395, -464, -464, - -464, 419, -464, -464, -464, 2748, 2748, 19, -464, -464, - -464, 312, 406, -464, -464, -464, 78, 361, 347, 2748, - 52, -464, 443, -464, 2564, 786, 327, 36, 58, 131, - -464, 153, 431, -464, 2748, 448, 385, -464, 2900, 164, - 24, -464, 158, 703, 391, 2988, 288, 893, 2900, 425, - 3020, 3020, 513, 608, 325, 391, 391, 703, 703, 798, - 786, 786, 446, 2748, 2748, 787, 455, 457, 458, -464, - 465, 2656, 392, -464, -464, 221, 200, 28, 227, 38, - 233, 54, 236, 718, -464, 477, -464, -464, 32, 478, - 2748, 2748, 2748, 2748, -464, 487, -464, -464, 396, -464, - -464, -464, -464, 1475, 345, -464, 2748, 2748, -464, -464, - 91, -464, 91, -464, -464, -464, -464, -464, 421, 421, - 20, 399, 151, -464, 2748, -464, -464, 413, -464, -464, - -464, -464, 255, -464, 21, 259, -464, -464, -464, 102, - 2748, 512, -464, -464, 2748, -464, 242, 113, -464, -464, - -464, -464, -464, -464, 277, 2748, -464, 514, -464, 522, - -464, 524, -464, 525, -464, -464, -464, 348, 312, -464, - -464, 499, 434, 91, 436, 437, 91, 442, 449, -464, - -464, -464, -464, 472, 565, 272, -464, 2748, 485, 486, - 2748, -464, -464, -464, -464, 2748, 533, -464, 602, -464, - -464, 603, -464, -464, 22, -464, 126, -464, 2944, 604, - -464, -464, 508, -464, -464, -464, -464, 600, 312, 606, - -464, 2748, -464, -464, 614, 614, 2748, 2748, 614, -464, - 520, 526, 614, 614, 2900, 91, -464, -464, 531, -464, - -464, -464, -464, 560, 619, -464, -464, -464, -464, 624, - 614, 614, -464, 287, 287, 545, 567, 276, 2748, 2748, - 614, -464, -464, 813, -464, 908, -464, -464, -464, -464, - 1003, -464, 276, 276, -464, 614, 572, -464, -464, 614, - 614, -464, 667, 581, 276, -464, -464, 8, -464, -464, - -464, 1098, -464, 2748, 276, 276, -464, 614, -464, 681, - 631, -464, -464, 599, -464, -464, -464, 276, -464, -464, - -464, 614, 1567, -464, 1193, 287, 609, -464, -464, 614, - -464 + 533, -482, -482, -482, -482, -482, -482, -482, 32, -482, + 2902, 25, 1407, 1310, -482, -482, -482, -482, 299, 1959, + 299, 2902, 299, 2902, 299, 299, -482, 299, 299, -482, + -482, 10, -66, -482, 2902, -482, -482, -482, -482, 2902, + -63, -56, -47, 2056, 1865, 299, 2056, 2150, 67, 2902, + 60, 2902, 2902, 2902, 2902, 2902, 2902, 2902, 2244, 144, + 43, -482, 50, -482, 156, -25, 233, -11, -482, -482, + -482, 3067, -482, -482, -35, 62, 228, 250, -482, 78, + 267, 270, 92, -482, -482, -482, -482, -482, -482, 67, + 67, 83, -482, 18, 41, 52, 97, -1, 108, 135, + 25, 203, 173, 207, -482, 243, 330, 1310, -482, -482, + -482, 534, -482, 220, 631, -482, -482, -482, -482, -482, + -482, 12, -482, 992, -482, 992, -482, -482, 2902, 172, + 176, 2902, 193, 808, 25, 285, 246, 3067, 218, 2338, + 2902, 1865, -482, 808, 1763, 43, -482, 1663, 2902, -482, + -482, 808, 329, 124, -482, -482, 2902, 808, 2996, 2432, + 269, -482, -482, -482, 808, 43, 992, 992, 992, 338, + 338, 337, 23, 2902, 2902, 2902, 2902, 2902, 2526, -482, + -482, 2902, -482, -482, 2902, 2902, 2902, 2902, 2902, 2902, + 2902, 2902, 2902, 2902, 2902, 2902, 2902, 2902, 2902, 2902, + 2902, 2902, -482, -482, -482, 27, 2620, 2902, 2902, 2902, + 2902, 2902, 2902, 2902, -482, 335, -482, -482, 340, -482, + -482, -482, -482, -482, 278, 151, -482, -482, 261, -482, + -482, -482, -482, 326, -482, 25, -482, -482, 2902, 2902, + 2902, 2902, 2902, 2902, -482, -482, -482, 370, -482, -482, + 370, -482, -482, -482, 390, -482, -482, -482, 2902, 2902, + 34, -482, -482, -482, 246, 378, -482, -482, -482, 159, + 327, 298, 2902, 43, -482, 400, -482, 2714, 992, 269, + 44, 168, 169, -482, 223, 389, -482, 2902, 407, 339, + -482, 3067, 165, 45, -482, 234, 808, 711, 423, 395, + 289, 3067, 3023, 1696, 1696, 1850, 518, 614, 711, 711, + 808, 808, 905, 992, 992, 397, 2902, 2902, 410, 399, + 404, 415, -482, 424, 2808, 357, -482, -482, 236, 171, + 54, 184, 65, 189, 90, 191, 728, -482, 452, -482, + -482, 79, 451, 2902, 2902, 2902, 2902, -482, 462, -482, + -482, 368, -482, -482, -482, -482, 1501, 242, -482, 2902, + 2902, -482, 371, -482, -482, 144, -482, 144, -482, -482, + -482, -482, -482, 396, 396, 220, 374, 76, -482, 2902, + -482, -482, 376, -482, -482, -482, -482, 238, -482, 59, + 248, -482, -482, -482, 94, 2902, 474, -482, -482, 2902, + -482, 229, 102, -482, -482, -482, -482, -482, -482, 281, + 2902, -482, 477, -482, 481, -482, 483, -482, 484, -482, + -482, -482, 285, 246, -482, -482, 471, 412, 144, 413, + 414, 144, 417, 398, -482, -482, -482, -482, 418, 479, + 320, -482, 2902, 435, 438, 825, -482, 2902, -482, -482, + -482, -482, 2902, 426, -482, 500, -482, -482, 515, -482, + -482, 68, -482, 105, -482, 364, 540, -482, -482, 446, + -482, -482, -482, -482, 543, 246, 563, -482, 2902, -482, + -482, 203, 203, 2902, 2902, 203, -482, 490, 482, 203, + 203, -482, -482, 3067, 144, -482, -482, 492, -482, -482, + -482, -482, 516, 596, -482, -482, -482, -482, 598, 203, + 203, 288, 288, 510, 512, 207, 2902, 2902, 203, -482, + -482, 462, 922, -482, 1019, -482, -482, -482, -482, 1116, + -482, 207, 207, 203, 517, -482, -482, 203, 203, -482, + 602, 519, 207, -482, -482, -482, 162, -482, -482, -482, + -482, 2902, 207, 207, -482, 203, -482, 522, 619, 560, + -482, 532, -482, -482, -482, 207, 203, -482, -482, -482, + 203, 1595, -482, -482, 1213, 288, 537, -482, -482, 203, + -482 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_int16 yydefact[] = +static const yytype_uint16 yydefact[] = { 0, 2, 4, 6, 8, 10, 12, 14, 0, 18, - 266, 0, 0, 0, 21, 118, 1, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 253, 0, 0, 224, - 251, 212, 246, 248, 242, 88, 255, 88, 88, 234, - 244, 0, 0, 237, 264, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 0, 0, 0, 0, 0, 267, - 128, 254, 219, 202, 164, 173, 165, 179, 203, 204, - 205, 131, 209, 5, 225, 214, 217, 216, 218, 215, - 0, 0, 0, 18, 7, 64, 59, 29, 89, 0, - 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 9, 0, 65, 0, 11, 26, 25, - 0, 15, 113, 0, 291, 294, 293, 292, 278, 195, - 0, 279, 185, 281, 186, 280, 284, 264, 0, 0, - 0, 0, 243, 0, 92, 94, 235, 0, 0, 266, - 266, 238, 239, 291, 265, 138, 292, 0, 282, 201, - 200, 0, 0, 90, 91, 264, 210, 0, 0, 257, - 261, 263, 262, 241, 236, 187, 188, 207, 192, 193, - 213, 0, 0, 0, 129, 0, 0, 0, 176, 175, - 0, 182, 181, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 21, 121, 1, 21, 0, 0, + 0, 0, 0, 0, 0, 0, 256, 0, 0, 227, + 254, 215, 249, 251, 245, 91, 258, 91, 91, 237, + 247, 0, 0, 240, 267, 0, 0, 0, 0, 0, + 0, 243, 0, 0, 0, 0, 0, 0, 0, 270, + 131, 257, 222, 205, 167, 176, 168, 182, 206, 207, + 208, 134, 212, 5, 228, 217, 220, 219, 221, 218, + 0, 0, 0, 18, 7, 67, 62, 29, 92, 0, + 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 78, 9, 0, 68, 0, 11, 26, + 25, 0, 15, 116, 0, 294, 297, 296, 295, 281, + 198, 0, 282, 188, 284, 189, 283, 287, 267, 0, + 0, 0, 0, 246, 0, 95, 97, 238, 0, 0, + 269, 269, 241, 242, 294, 268, 141, 295, 0, 285, + 204, 203, 0, 0, 93, 94, 267, 213, 0, 0, + 260, 264, 266, 265, 244, 239, 190, 191, 210, 195, + 196, 216, 0, 0, 0, 132, 0, 0, 0, 179, + 178, 0, 185, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 189, 190, 191, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 86, 87, 87, 0, 36, 18, - 18, 18, 18, 18, 0, 18, 18, 0, 18, 18, - 42, 58, 0, 54, 57, 0, 0, 0, 0, 0, - 0, 28, 27, 22, 99, 102, 101, 99, 109, 108, - 112, 114, 119, 194, 136, 266, 0, 0, 247, 141, - 93, 94, 96, 18, 245, 249, 0, 0, 0, 0, - 132, 197, 0, 228, 0, 208, 0, 214, 217, 216, - 260, 0, 98, 256, 0, 211, 127, 126, 130, 0, - 0, 155, 0, 178, 184, 168, 161, 162, 159, 0, - 170, 171, 169, 167, 166, 183, 180, 177, 174, 163, - 172, 160, 0, 0, 0, 0, 288, 286, 290, 143, - 0, 0, 135, 144, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 0, 31, 33, 0, 0, - 80, 0, 0, 0, 276, 0, 277, 274, 0, 275, - 271, 272, 273, 0, 0, 18, 0, 0, 76, 68, - 63, 69, 82, 66, 67, 70, 71, 100, 104, 104, - 110, 0, 268, 157, 264, 18, 95, 115, 199, 250, - 140, 139, 0, 196, 213, 0, 258, 259, 97, 0, - 0, 0, 148, 154, 0, 232, 0, 0, 229, 231, - 230, 233, 283, 152, 0, 266, 227, 0, 146, 0, - 220, 0, 221, 0, 16, 18, 30, 92, 94, 18, - 35, 0, 0, 81, 0, 0, 83, 0, 0, 270, - 18, 79, 84, 0, 0, 65, 50, 0, 0, 0, - 105, 107, 103, 111, 137, 0, 0, 142, 0, 198, - 118, 0, 116, 133, 211, 158, 0, 151, 206, 0, - 147, 153, 0, 149, 222, 223, 145, 0, 94, 18, - 55, 264, 77, 77, 0, 0, 0, 0, 0, 45, - 0, 0, 0, 0, 106, 269, 252, 21, 0, 21, - 156, 150, 134, 0, 18, 124, 34, 123, 21, 0, - 0, 0, 20, 72, 72, 0, 0, 75, 80, 0, - 0, 40, 41, 0, 117, 0, 23, 121, 32, 120, - 0, 37, 75, 75, 21, 0, 0, 38, 39, 0, - 0, 53, 0, 0, 75, 122, 125, 0, 56, 43, - 44, 0, 73, 0, 75, 75, 46, 0, 49, 0, - 61, 24, 19, 0, 48, 52, 77, 75, 17, 21, - 60, 0, 0, 51, 0, 72, 0, 62, 74, 0, + 0, 0, 192, 193, 194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 89, 90, 90, 0, 36, + 18, 18, 18, 18, 18, 0, 18, 18, 0, 18, + 18, 42, 20, 0, 61, 0, 57, 60, 0, 0, + 0, 0, 0, 0, 28, 27, 22, 102, 105, 104, + 102, 112, 111, 115, 117, 122, 197, 139, 269, 0, + 0, 250, 144, 96, 97, 99, 18, 248, 252, 0, + 0, 0, 0, 135, 200, 0, 231, 0, 211, 0, + 217, 220, 219, 263, 0, 101, 259, 0, 214, 130, + 129, 133, 0, 0, 158, 0, 181, 187, 171, 164, + 165, 162, 0, 173, 174, 172, 170, 169, 186, 183, + 180, 177, 166, 175, 163, 0, 0, 0, 0, 291, + 289, 293, 146, 0, 0, 138, 147, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 31, + 33, 0, 0, 83, 0, 0, 0, 279, 0, 280, + 277, 0, 278, 274, 275, 276, 0, 0, 18, 0, + 0, 21, 0, 79, 71, 66, 72, 85, 69, 70, + 73, 74, 103, 107, 107, 113, 0, 271, 160, 267, + 18, 98, 118, 202, 253, 143, 142, 0, 199, 216, + 0, 261, 262, 100, 0, 0, 0, 151, 157, 0, + 235, 0, 0, 232, 234, 233, 236, 286, 155, 0, + 269, 230, 0, 149, 0, 223, 0, 224, 0, 16, + 18, 30, 95, 97, 18, 35, 0, 0, 84, 0, + 0, 86, 0, 0, 273, 18, 82, 87, 0, 0, + 68, 50, 0, 0, 0, 0, 54, 108, 110, 106, + 114, 140, 0, 0, 145, 0, 201, 121, 0, 119, + 136, 214, 161, 0, 154, 209, 0, 150, 156, 0, + 152, 225, 226, 148, 0, 97, 18, 58, 267, 80, + 80, 0, 0, 0, 0, 0, 45, 0, 0, 0, + 0, 19, 18, 109, 272, 255, 21, 0, 21, 159, + 153, 137, 0, 18, 127, 34, 126, 21, 0, 0, + 0, 75, 75, 0, 0, 78, 83, 0, 0, 40, + 41, 0, 0, 120, 0, 23, 124, 32, 123, 0, + 37, 78, 78, 0, 0, 38, 39, 0, 0, 53, + 0, 0, 78, 55, 125, 128, 0, 59, 43, 44, + 76, 0, 78, 78, 46, 0, 49, 0, 0, 64, + 24, 0, 48, 52, 80, 78, 0, 17, 21, 63, + 0, 0, 51, 56, 0, 75, 0, 65, 77, 0, 47 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -464, -464, -464, -464, -464, -464, -464, -464, -464, 37, - -464, -5, 2417, -464, -17, -464, 696, 605, 12, -464, - -464, -464, -464, -464, -464, -464, -464, -464, 33, -343, - -463, -156, -453, -464, 204, 376, -266, 161, -464, 127, - 346, -464, 273, 303, -256, 456, 488, -464, -464, 356, - -464, 366, -464, -464, -464, -464, 291, -464, -464, 283, - -464, 280, -8, -43, -464, -464, -464, -464, -464, -464, - -464, -464, -464, -464, -464, -464, 100, -464, -464, 627, - -124, -127, -464, -464, 417, -464, -464, 561, 1, -44, - -42, -464, -464, -464, -464, -464, 48 + -482, -482, -482, -482, -482, -482, -482, -482, -482, 42, + -482, -5, -127, -482, -17, -482, 632, 542, 8, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + 224, -342, -481, -115, -459, -482, 138, 318, -246, 113, + -482, 155, 352, -482, 305, 268, -263, 420, 442, -482, + -482, 341, -482, 325, -482, -482, -482, -482, 257, -482, + -482, 214, -482, 244, -8, -36, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, 101, -482, + -482, 561, -122, -99, -482, -482, 369, -482, -482, 502, + -15, -33, -31, -482, -482, -482, -482, -482, 0 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 8, 9, 10, 11, 12, 13, 14, 15, 102, - 416, 377, 503, 524, 110, 537, 243, 108, 109, 417, - 418, 339, 508, 556, 480, 498, 551, 560, 359, 104, - 527, 233, 500, 432, 422, 361, 425, 434, 335, 218, - 133, 214, 155, 261, 263, 283, 368, 247, 248, 441, - 249, 250, 251, 252, 451, 452, 111, 112, 518, 449, - 496, 378, 105, 60, 61, 374, 322, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 129, 72, 159, - 145, 73, 446, 428, 347, 348, 226, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 121 + -1, 8, 9, 10, 11, 12, 13, 14, 15, 103, + 421, 382, 233, 361, 111, 546, 246, 109, 110, 422, + 423, 342, 516, 564, 487, 492, 557, 507, 560, 569, + 364, 105, 535, 236, 509, 437, 427, 366, 430, 439, + 338, 219, 134, 215, 156, 264, 266, 286, 373, 250, + 251, 448, 252, 253, 254, 255, 458, 459, 112, 113, + 527, 456, 505, 383, 106, 60, 61, 379, 325, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 130, + 72, 160, 146, 73, 453, 433, 350, 351, 227, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 122 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -344,141 +345,124 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 113, 144, 59, 254, 17, 375, 161, 16, 162, 164, - 431, 120, 267, 268, 20, 175, 83, 176, 22, 117, - 501, 117, 24, 117, 103, 117, 117, 253, 117, 117, - 549, 273, 20, 373, 284, 390, 244, 550, 392, 152, - 245, 528, 408, 419, 246, 146, 117, 206, 84, 207, - 171, 160, 410, 139, 420, 116, 206, 116, 207, 116, - 130, 116, 116, 131, 116, 116, 118, 174, 412, -285, - 123, -285, 125, 126, 137, 127, 128, 427, 213, 138, - 141, 116, 116, 149, 144, 140, 183, 433, 272, 223, - 438, 439, 147, 148, 172, 173, -260, -259, 227, 157, - 172, 173, 568, 562, 270, 172, 173, 205, 158, 172, - 173, -261, 144, 278, 177, 279, 455, 224, 242, 172, - 173, 122, 257, 124, 172, 173, 225, 460, 371, 180, - 266, 59, 59, -263, 132, 172, 173, 230, 217, 136, - 490, 146, -287, 142, -287, -289, 150, 172, 173, 156, - 281, 163, 285, 165, 166, 167, 168, 169, 277, 172, - 173, -285, 469, -285, 286, 287, 174, 289, 290, 292, - 259, 481, 172, 173, 445, 312, 313, 116, 314, 212, - 351, 315, 352, 172, 173, 316, 391, 379, 269, 317, - 318, -287, 319, -287, 172, 173, 333, 325, 326, 327, - 328, 329, 330, 331, 332, 323, -262, 172, 173, 219, - 505, 506, 494, 372, 340, 341, 342, 343, 345, 431, - 353, 354, 407, 356, 357, 350, 220, 360, 362, 360, - 360, 360, 360, 320, 172, 173, 83, 153, 18, 172, - 173, 20, 154, 533, 20, 172, 173, 59, 22, 409, - 447, 114, 24, 178, 179, 411, 115, 275, 413, 181, - 182, 382, 387, 208, 459, 209, 385, 393, 231, 358, - 363, 364, 365, 366, 288, 321, 389, 553, 462, 221, - 293, 172, 173, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 346, 172, 173, 222, 396, 397, 228, 172, 173, - 351, 229, 352, 404, 172, 173, 117, 172, 173, 235, - 236, 237, 238, 172, 173, 210, 239, 211, 240, 232, - 406, 144, 423, 362, 426, 426, 172, 173, 525, 526, - 172, 173, 336, 337, 234, 435, 429, 499, 426, 426, - 437, 531, 116, 172, 173, 350, 256, -253, 172, 173, - 255, 20, 215, 216, 453, 22, 539, 540, 454, 24, - 448, -253, -253, -290, -290, -290, 204, 260, 548, -253, - -253, -83, 456, 134, 135, 199, 461, 262, 554, 555, - 200, 185, 186, 201, 202, 203, 204, 59, 258, 264, - 271, 563, 282, 284, -253, -253, -253, -253, 334, 338, - 467, -253, 344, -253, 470, 355, -253, 194, 195, 196, - 197, 198, 199, -253, -253, 477, 367, 200, 144, 426, - 201, 202, 203, 204, 370, 376, -253, 485, -253, -253, - 380, -253, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, 383, 381, 185, 186, -253, - 388, 390, -253, -253, -253, -253, -253, 173, 426, 426, - 513, 395, 515, 1, 2, 3, 4, 5, 6, 7, - 399, 520, 400, 401, 184, 196, 197, 198, 199, 448, - 402, 185, 186, 200, 458, 415, 201, 202, 203, 204, - 423, 426, 405, 20, 421, 440, 430, 541, 444, 187, - 188, 394, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 450, 457, 471, 463, 200, -13, 85, - 201, 202, 203, 204, 464, 426, 465, 466, 18, 83, - 484, 19, 564, 472, 20, 473, 474, 21, 22, 23, - 86, 475, 24, 25, 26, 27, 28, 29, 30, 476, - 31, 32, 33, 34, 35, 36, 87, 106, 88, 89, - 90, 37, 38, 91, 92, 93, 94, 95, 96, 185, - 186, 478, 97, 98, 99, 100, 39, 479, 101, 40, - 41, 42, 43, 44, 482, 483, 45, 46, 47, 48, - 49, 50, 51, 192, 193, 194, 195, 196, 197, 198, - 199, 52, 486, 487, 489, 200, 491, 492, 201, 202, - 203, 204, 493, -3, 85, 502, 53, 54, 495, 55, - 509, 56, 57, 18, 83, 510, 19, 516, 58, 20, - 514, 517, 21, 22, 23, 86, 521, 24, 25, 26, - 27, 28, 29, 30, 529, 31, 32, 33, 34, 35, - 36, 87, 106, 88, 89, 90, 37, 38, 91, 92, - 93, 94, 95, 96, 185, 186, 530, 97, 98, 99, - 100, 39, 543, 101, 40, 41, 42, 43, 44, 546, - 547, 45, 46, 47, 48, 49, 50, 51, 558, 193, - 194, 195, 196, 197, 198, 199, 52, 559, 561, 107, - 200, 241, 532, 201, 202, 203, 204, 424, 569, 85, - 468, 53, 54, 566, 55, 442, 56, 57, 18, 83, - 414, 19, 386, 58, 20, 369, 443, 21, 22, 23, - 86, 488, 24, 25, 26, 27, 28, 29, 30, 497, - 31, 32, 33, 34, 35, 36, 87, 106, 88, 89, - 90, 37, 38, 91, 92, 93, 94, 95, 96, 185, - 186, 436, 97, 98, 99, 100, 39, 519, 101, 40, - 41, 42, 43, 44, 276, 349, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 83, 198, - 199, 52, 0, 20, 0, 200, 0, 0, 201, 202, - 203, 204, 398, 114, 85, 0, 53, 54, 115, 55, - 0, 56, 57, 18, 83, 535, 19, 0, 58, 20, - 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, - 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, - 36, 87, 106, 88, 89, 90, 37, 38, 91, 92, - 93, 94, 95, 96, 185, 186, 0, 97, 98, 99, - 100, 39, 0, 101, 40, 41, 42, 43, 44, 0, - 0, 45, 46, 47, 48, 49, 50, 51, 200, 0, - 0, 201, 202, 203, 204, 199, 52, 0, 0, 0, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 85, - 0, 53, 54, 0, 55, 0, 56, 57, 18, 83, - 536, 19, 0, 58, 20, 0, 0, 21, 22, 23, - 86, 0, 24, 25, 26, 27, 28, 29, 30, 0, - 31, 32, 33, 34, 35, 36, 87, 106, 88, 89, - 90, 37, 38, 91, 92, 93, 94, 95, 96, 185, - 0, 0, 97, 98, 99, 100, 39, 0, 101, 40, - 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 199, 52, 0, 0, 0, 200, 0, 0, 201, 202, - 203, 204, 0, 0, 85, 0, 53, 54, 0, 55, - 0, 56, 57, 18, 83, 538, 19, 0, 58, 20, - 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, - 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, - 36, 87, 106, 88, 89, 90, 37, 38, 91, 92, - 93, 94, 95, 96, 0, 0, 0, 97, 98, 99, - 100, 39, 0, 101, 40, 41, 42, 43, 44, 0, - 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, - 0, 235, 236, 237, 238, 0, 52, 0, 239, 0, - 240, 0, 0, 0, 0, 0, 0, 0, 0, 85, - 0, 53, 54, 0, 55, 0, 56, 57, 18, 83, - 552, 19, 0, 58, 20, 172, 173, 21, 22, 23, - 86, 0, 24, 25, 26, 27, 28, 29, 30, 0, - 31, 32, 33, 34, 35, 36, 87, 106, 88, 89, - 90, 37, 38, 91, 92, 93, 94, 95, 96, 0, - 0, 0, 97, 98, 99, 100, 39, 0, 101, 40, - 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 0, 53, 54, 0, 55, - 0, 56, 57, 18, 83, 0, 19, 0, 58, 20, - 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, - 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, - 36, 87, 106, 88, 89, 90, 37, 38, 91, 92, - 93, 94, 95, 96, 0, 0, 0, 97, 98, 99, - 100, 39, 0, 101, 40, 41, 42, 43, 44, 0, - 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, - 567, 0, 0, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 114, 380, 59, 118, 17, 118, 257, 118, 145, 118, + 118, 121, 118, 118, 436, 20, 165, 162, 119, 163, + 104, 510, 124, 131, 126, 127, 256, 128, 129, 147, + 118, 536, 16, 140, 276, 161, 83, 315, 316, 153, + 317, 270, 271, 318, 148, 149, 132, 319, 378, 138, + 172, 320, 321, 84, 322, 207, 139, 208, 175, 397, + 117, 176, 117, 177, 117, 141, 117, 117, 413, 117, + 117, 181, 287, 207, 224, 208, 20, 206, 214, 415, + 22, 395, 228, 184, 24, 142, 117, 117, 150, -292, + 424, 175, 145, 154, 578, 173, 174, 323, 155, 452, + 432, 425, 225, 213, 417, 571, 173, 174, 462, 218, + 438, 226, 273, 443, 444, 245, 467, 173, 174, 499, + 145, -264, 123, 260, 125, 281, 147, 282, 173, 174, + 220, 269, 59, 59, 288, 133, -263, 173, 174, 324, + 137, 272, 231, 280, 143, -262, 275, 151, 173, 174, + 157, 284, 164, 221, 166, 167, 168, 169, 170, 376, + 476, 18, 178, 158, 222, 289, 290, 20, 292, 293, + 295, 22, 159, 173, 174, 24, 262, 173, 174, -288, + -290, -288, -290, 117, 558, 173, 174, 396, 173, 174, + 326, 559, 354, 412, 355, 234, 488, 336, 328, 329, + 330, 331, 332, 333, 334, 335, 414, 173, 174, 223, + 353, 416, 503, 418, 232, 343, 344, 345, 346, 348, + 229, 356, 357, 377, 359, 360, 349, 173, 174, 436, + 365, 367, 365, 365, 365, 365, 247, 513, 514, -288, + 248, -288, 173, 174, 249, -266, -265, 230, 173, 174, + 59, 466, 179, 180, 173, 174, 259, 454, 20, 278, + 235, -290, 22, -290, 387, 237, 24, 173, 174, 390, + 384, 541, 173, 174, 173, 174, 291, 363, 209, 394, + 210, 211, 296, 212, 258, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 118, 261, 561, 173, 174, 401, 402, + 83, 469, 173, 174, 263, 20, 409, 173, 174, 173, + 174, 173, 174, 265, 354, 115, 355, 182, 183, 267, + 116, 173, 174, 434, 392, 428, 367, 431, 431, 533, + 534, 274, 353, 145, 445, 398, 285, 411, 440, 460, + 287, 431, 431, 442, 511, 512, 508, 186, 515, 461, + 117, 337, 519, 520, 173, 174, 341, 238, 239, 240, + 241, 339, 340, 358, 242, 455, 243, 238, 239, 240, + 241, 347, 531, 532, 242, 362, 243, 463, 200, 135, + 136, 542, 468, 201, 216, 217, 202, 203, 204, 205, + 539, 372, 59, 173, 174, 375, 550, 381, 385, 386, + 552, 553, 388, 173, 174, 474, 548, 549, 393, 477, + 395, 83, 400, 174, 404, 185, 20, 556, 565, 405, + 484, -86, 186, 187, 431, 403, 115, 562, 563, 573, + 406, 116, 145, 575, 494, -293, -293, -293, 205, 407, + 572, 189, 580, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 368, 369, 370, 371, 201, 410, + 420, 202, 203, 204, 205, 431, 431, 426, 20, 522, + 435, 524, 447, 446, -293, 451, 464, 521, 457, 470, + 529, 186, 187, 471, 200, 472, 473, 478, 455, 201, + 465, 486, 202, 203, 204, 205, 543, 495, 428, 431, + 483, 496, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 479, 480, 481, 498, 201, 482, 485, + 202, 203, 204, 205, -13, 85, 1, 2, 3, 4, + 5, 6, 7, 431, 18, 83, 489, 19, 493, 490, + 20, 574, 500, 21, 22, 23, 86, 501, 24, 25, + 26, 27, 28, 29, 30, 502, 31, 32, 33, 34, + 35, 36, 87, 107, 88, 89, 90, 37, 38, 91, + 92, 93, 94, 95, 96, 504, 186, 187, 97, 98, + 99, 100, 101, 518, 39, 525, 102, 40, 41, 42, + 43, 44, 517, 523, 45, 46, 47, 48, 49, 50, + 51, 194, 195, 196, 197, 198, 199, 200, 526, 52, + 530, 537, 201, 538, 554, 202, 203, 204, 205, 551, + 555, -3, 85, 566, 53, 54, 567, 55, 568, 56, + 57, 18, 83, 570, 19, 108, 58, 20, 579, 244, + 21, 22, 23, 86, 540, 24, 25, 26, 27, 28, + 29, 30, 429, 31, 32, 33, 34, 35, 36, 87, + 107, 88, 89, 90, 37, 38, 91, 92, 93, 94, + 95, 96, 186, 187, 576, 97, 98, 99, 100, 101, + 475, 39, 374, 102, 40, 41, 42, 43, 44, 391, + 450, 45, 46, 47, 48, 49, 50, 51, 195, 196, + 197, 198, 199, 200, 497, 449, 52, 528, 201, 279, + 506, 202, 203, 204, 205, 0, 441, 352, 0, 85, 0, 53, 54, 0, 55, 0, 56, 57, 18, 83, - 0, 19, 0, 58, 20, 0, 0, 21, 22, 23, + 419, 19, 0, 58, 20, 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, 27, 28, 29, 30, 0, - 31, 32, 33, 34, 35, 36, 87, 106, 88, 89, - 90, 37, 38, 91, 92, 93, 94, 95, 96, 0, - 0, 0, 97, 98, 99, 100, 39, 0, 101, 40, + 31, 32, 33, 34, 35, 36, 87, 107, 88, 89, + 90, 37, 38, 91, 92, 93, 94, 95, 96, 186, + 187, 0, 97, 98, 99, 100, 101, 0, 39, 0, + 102, 40, 41, 42, 43, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 51, 0, 0, 197, 198, 199, + 200, 0, 0, 52, 0, 201, 0, 0, 202, 203, + 204, 205, 0, 0, 0, 0, 85, 0, 53, 54, + 0, 55, 0, 56, 57, 18, 83, 491, 19, 0, + 58, 20, 0, 0, 21, 22, 23, 86, 0, 24, + 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, + 34, 35, 36, 87, 107, 88, 89, 90, 37, 38, + 91, 92, 93, 94, 95, 96, 186, 187, 0, 97, + 98, 99, 100, 101, 0, 39, 0, 102, 40, 41, + 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, + 50, 51, 0, 0, 0, 0, 199, 200, 0, 0, + 52, 0, 201, 0, 0, 202, 203, 204, 205, 0, + 0, 0, 0, 85, 0, 53, 54, 0, 55, 0, + 56, 57, 18, 83, 544, 19, 0, 58, 20, 0, + 0, 21, 22, 23, 86, 0, 24, 25, 26, 27, + 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, + 87, 107, 88, 89, 90, 37, 38, 91, 92, 93, + 94, 95, 96, 186, 187, 0, 97, 98, 99, 100, + 101, 0, 39, 0, 102, 40, 41, 42, 43, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 0, 0, 0, 200, 0, 0, 52, 0, 201, + 0, 0, 202, 203, 204, 205, 0, 0, 0, 0, + 85, 0, 53, 54, 0, 55, 0, 56, 57, 18, + 83, 545, 19, 0, 58, 20, 0, 0, 21, 22, + 23, 86, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 87, 107, 88, + 89, 90, 37, 38, 91, 92, 93, 94, 95, 96, + 0, 0, 0, 97, 98, 99, 100, 101, 0, 39, + 0, 102, 40, 41, 42, 43, 44, 0, 0, 45, + 46, 47, 48, 49, 50, 51, 201, 0, 0, 202, + 203, 204, 205, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 85, 0, 53, + 54, 0, 55, 0, 56, 57, 18, 83, 547, 19, + 0, 58, 20, 0, 0, 21, 22, 23, 86, 0, + 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, + 33, 34, 35, 36, 87, 107, 88, 89, 90, 37, + 38, 91, 92, 93, 94, 95, 96, 0, 0, 0, + 97, 98, 99, 100, 101, 0, 39, 0, 102, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, @@ -486,70 +470,101 @@ static const yytype_int16 yytable[] = 0, 56, 57, 18, 83, 0, 19, 0, 58, 20, 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, - 36, 87, 0, 88, 89, 90, 37, 38, 91, 92, + 36, 87, 107, 88, 89, 90, 37, 38, 91, 92, 93, 94, 95, 96, 0, 0, 0, 97, 98, 99, - 100, 39, 0, 101, 40, 41, 42, 43, 44, 0, - 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, - 0, 53, 54, 0, 55, 18, 56, 57, 19, 0, - 0, 20, 0, 58, 21, 22, 23, -78, 0, 24, - 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, - 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, + 100, 101, 0, 39, 0, 102, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, + 0, 0, 577, 0, 0, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 53, 54, 0, 55, 0, 56, 57, + 18, 83, 0, 19, 0, 58, 20, 0, 0, 21, + 22, 23, 86, 0, 24, 25, 26, 27, 28, 29, + 30, 0, 31, 32, 33, 34, 35, 36, 87, 107, + 88, 89, 90, 37, 38, 91, 92, 93, 94, 95, + 96, 0, 0, 0, 97, 98, 99, 100, 101, 0, + 39, 0, 102, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, - 0, 0, 0, 53, 54, 0, 55, 18, 56, 57, - 19, 0, 0, 20, 0, 58, 21, 22, 23, 0, + 53, 54, 0, 55, 0, 56, 57, 18, 83, 0, + 19, 0, 58, 20, 0, 0, 21, 22, 23, 86, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, - 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, - 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, - 42, 43, 44, -214, 0, 45, 46, 47, 48, 49, - 50, 51, 0, 0, 206, 0, 207, -214, -214, 0, - 52, 0, 0, 0, 0, -214, -214, 0, 0, 0, - 0, 0, 0, 0, 0, 53, 54, 0, 55, 0, - 56, 57, 0, 0, 0, 0, -78, 58, 0, 0, - -214, -214, -214, -214, 0, 0, 0, -214, 0, -214, - 0, 0, -214, 0, 0, 0, 0, 0, 0, -214, - -214, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -214, 0, -214, -214, 0, -214, -214, -214, - -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, - -214, 0, 0, 0, 0, -214, 0, 0, -214, -214, - -214, -214, -214, 18, 83, 0, 19, 0, 0, 20, - 0, 0, 21, 22, 23, 0, 0, 24, 25, 143, - 27, 28, 29, 30, 115, 31, 32, 33, 34, 35, - 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, + 32, 33, 34, 35, 36, 87, 0, 88, 89, 90, + 37, 38, 91, 92, 93, 94, 95, 96, 0, 0, + 0, 97, 98, 99, 100, 101, 0, 39, 0, 102, + 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, + 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 0, 0, 53, 54, 0, + 55, 18, 56, 57, 19, 0, 0, 20, 0, 58, + 21, 22, 23, -81, 0, 24, 25, 26, 27, 28, + 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, + 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 54, 0, 55, 18, 56, 57, 19, 119, + 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, + 0, 53, 54, 0, 55, 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, - 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 53, 54, 0, 55, 0, 56, 57, - 18, 83, 0, 19, 0, 58, 20, 0, 0, 21, - 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, + 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, + 42, 43, 44, -217, 0, 45, 46, 47, 48, 49, + 50, 51, 0, 0, 207, 0, 208, -217, -217, 0, + 52, 0, 0, 0, 0, -217, -217, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 54, 0, 55, 0, + 56, 57, 0, 0, 0, 0, -81, 58, 0, 0, + -217, -217, -217, -217, 0, 0, 0, -217, 0, -217, + 0, 0, 0, 0, -217, 0, 0, 0, 0, 0, + 0, -217, -217, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -217, 0, -217, -217, 0, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -256, 186, 187, 0, -217, 0, 0, + -217, -217, -217, -217, -217, 0, 0, -256, -256, 0, + 0, 0, 0, 0, 0, -256, -256, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 0, 0, 0, 0, + 201, 0, 0, 202, 203, 204, 205, 0, 0, 0, + -256, -256, -256, -256, 0, 0, 0, -256, 0, -256, + 0, 0, 0, 0, -256, 0, 0, 0, 0, 0, + 0, -256, -256, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -256, 0, -256, -256, 0, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, 0, 0, 0, 0, -256, 0, 0, + -256, -256, -256, -256, -256, 18, 83, 0, 19, 0, + 0, 20, 0, 0, 21, 22, 23, 0, 0, 24, + 25, 144, 27, 28, 29, 30, 116, 31, 32, 33, + 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 186, 187, + 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, + 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, + 50, 51, 193, 194, 195, 196, 197, 198, 199, 200, + 52, 0, 0, 0, 201, 0, 0, 202, 203, 204, + 205, 0, 0, 0, 0, 53, 54, 0, 55, 18, + 56, 57, 19, 120, 0, 20, 0, 58, 21, 22, + 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, + 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, + 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, + 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 54, 0, 55, 0, 56, 57, 18, 83, 0, 19, + 0, 58, 20, 0, 0, 21, 22, 23, 0, 0, + 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, + 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, + 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, + 22, 23, 152, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, - 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, - 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, - 0, 55, 18, 56, 57, 19, 0, 0, 20, 0, - 58, 21, 22, 23, 151, 0, 24, 25, 26, 27, - 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, - 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, @@ -560,554 +575,551 @@ static const yytype_int16 yytable[] = 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, - 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 54, 0, 55, 18, 56, 57, 19, - 0, 0, 20, 170, 58, 21, 22, 23, 0, 0, - 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, - 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, - 57, 19, 0, 0, 20, 265, 58, 21, 22, 23, + 57, 19, 0, 0, 20, 171, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, - 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, - 18, 56, 57, 19, 0, 0, 20, 280, 58, 21, - 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, - 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, - 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, - 0, 55, 18, 56, 57, 19, 0, 0, 20, 291, + 0, 55, 18, 56, 57, 19, 0, 0, 20, 268, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, - 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 54, 0, 55, 18, 56, 57, 19, 0, 0, - 20, 324, 58, 21, 22, 23, 0, 0, 24, 25, - 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, - 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, 57, 19, - 0, 0, 20, 384, 58, 21, 22, 23, 0, 0, + 0, 0, 20, 283, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, + 18, 56, 57, 19, 0, 0, 20, 294, 58, 21, + 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, + 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, + 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 54, 0, 55, 18, 56, 57, 19, 0, 0, + 20, 327, 58, 21, 22, 23, 0, 0, 24, 25, + 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, + 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, - 57, 19, 0, 0, 20, 403, 58, 21, 22, 23, + 57, 19, 0, 0, 20, 389, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, + 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, + 0, 55, 18, 56, 57, 19, 0, 0, 20, 408, + 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, + 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, + 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 54, 0, 55, 18, 56, 57, 19, + 0, 0, 20, 0, 58, 21, 22, 23, 0, 0, + 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, + 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, - 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, - 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, - 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, - 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, - 0, 0, 504, 0, 0, 507, 0, 0, 39, 511, - 512, 40, 41, 42, 43, 44, 0, 0, 45, 46, - 47, 48, 49, 50, 51, 0, 0, 522, 523, 0, - 0, 0, 0, 52, 0, 0, 0, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, - 0, 55, 542, 56, 57, 0, 544, 545, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 184, - 0, 0, 0, 0, 557, 0, 185, 186, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, - 0, 0, 0, 0, 187, 188, 570, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 0, 0, - 0, 0, 200, 184, 0, 201, 202, 203, 204, 0, - 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 0, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 0, 0, 0, 0, 200, -290, 0, 201, - 202, 203, 204, 0, 185, 186, 0, 0, 0, 0, + 0, 52, 0, 0, 185, 0, 0, 0, 0, 0, + 0, 186, 187, 0, 0, 0, 53, 54, 0, 55, + 0, 56, 57, 0, 0, 0, 0, 0, 277, 188, + 189, 399, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 0, 0, 0, 0, 201, 185, 0, + 202, 203, 204, 205, 0, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 185, 186, 0, 0, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 0, 0, - 0, 0, 200, 0, 0, 201, 202, 203, 204 + 0, 0, 0, 188, 189, 0, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 0, 0, 0, + 0, 201, 0, 0, 202, 203, 204, 205 }; static const yytype_int16 yycheck[] = { - 17, 44, 10, 127, 9, 261, 50, 0, 50, 52, - 353, 19, 139, 140, 16, 11, 11, 13, 20, 18, - 473, 20, 24, 22, 12, 24, 25, 14, 27, 28, - 22, 155, 16, 14, 13, 13, 16, 29, 14, 47, - 20, 504, 14, 11, 24, 44, 45, 11, 11, 13, - 58, 50, 14, 78, 22, 18, 11, 20, 13, 22, - 13, 24, 25, 110, 27, 28, 18, 15, 14, 11, - 22, 13, 24, 25, 110, 27, 28, 343, 83, 110, - 43, 44, 45, 46, 127, 110, 92, 353, 22, 73, - 356, 357, 44, 45, 81, 82, 75, 75, 97, 101, - 81, 82, 565, 556, 147, 81, 82, 110, 110, 81, - 82, 75, 155, 157, 110, 157, 14, 101, 106, 81, - 82, 21, 130, 23, 81, 82, 110, 14, 255, 94, - 138, 139, 140, 75, 34, 81, 82, 100, 26, 39, - 14, 140, 11, 43, 13, 11, 46, 81, 82, 49, - 158, 51, 109, 53, 54, 55, 56, 57, 157, 81, - 82, 11, 418, 13, 172, 173, 15, 175, 176, 177, - 133, 437, 81, 82, 23, 10, 11, 140, 13, 11, - 224, 16, 224, 81, 82, 20, 22, 109, 140, 24, - 25, 11, 27, 13, 81, 82, 213, 205, 206, 207, - 208, 209, 210, 211, 212, 204, 75, 81, 82, 110, - 476, 477, 468, 256, 219, 220, 221, 222, 223, 562, - 225, 226, 22, 228, 229, 224, 110, 235, 236, 237, - 238, 239, 240, 68, 81, 82, 11, 26, 10, 81, - 82, 16, 31, 509, 16, 81, 82, 255, 20, 22, - 374, 26, 24, 94, 95, 22, 31, 157, 22, 92, - 93, 269, 109, 11, 22, 13, 274, 109, 22, 232, - 237, 238, 239, 240, 174, 110, 284, 543, 405, 110, - 180, 81, 82, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 73, 81, 82, 110, 313, 314, 110, 81, 82, - 354, 110, 354, 321, 81, 82, 315, 81, 82, 47, - 48, 49, 50, 81, 82, 11, 54, 13, 56, 53, - 109, 374, 340, 341, 342, 343, 81, 82, 51, 52, - 81, 82, 215, 216, 22, 353, 345, 471, 356, 357, - 355, 507, 315, 81, 82, 354, 78, 0, 81, 82, - 110, 16, 89, 90, 109, 20, 522, 523, 109, 24, - 375, 14, 15, 105, 106, 107, 108, 29, 534, 22, - 23, 109, 390, 37, 38, 97, 109, 75, 544, 545, - 102, 66, 67, 105, 106, 107, 108, 405, 109, 109, - 12, 557, 75, 13, 47, 48, 49, 50, 26, 26, - 415, 54, 101, 56, 419, 110, 59, 92, 93, 94, - 95, 96, 97, 66, 67, 430, 31, 102, 471, 437, - 105, 106, 107, 108, 15, 29, 79, 445, 81, 82, - 79, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 12, 109, 66, 67, 102, - 29, 13, 105, 106, 107, 108, 109, 82, 476, 477, - 487, 25, 489, 3, 4, 5, 6, 7, 8, 9, - 25, 498, 25, 25, 59, 94, 95, 96, 97, 494, - 25, 66, 67, 102, 394, 18, 105, 106, 107, 108, - 508, 509, 110, 16, 26, 84, 110, 524, 109, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 110, 12, 26, 12, 102, 0, 1, - 105, 106, 107, 108, 12, 543, 12, 12, 10, 11, - 440, 13, 559, 109, 16, 109, 109, 19, 20, 21, - 22, 109, 24, 25, 26, 27, 28, 29, 30, 110, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 66, - 67, 109, 54, 55, 56, 57, 58, 22, 60, 61, - 62, 63, 64, 65, 109, 109, 68, 69, 70, 71, - 72, 73, 74, 90, 91, 92, 93, 94, 95, 96, - 97, 83, 79, 11, 11, 102, 12, 109, 105, 106, - 107, 108, 22, 0, 1, 11, 98, 99, 22, 101, - 110, 103, 104, 10, 11, 109, 13, 77, 110, 16, - 109, 22, 19, 20, 21, 22, 22, 24, 25, 26, - 27, 28, 29, 30, 109, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 66, 67, 109, 54, 55, 56, - 57, 58, 110, 60, 61, 62, 63, 64, 65, 22, - 109, 68, 69, 70, 71, 72, 73, 74, 17, 91, - 92, 93, 94, 95, 96, 97, 83, 76, 109, 13, - 102, 106, 508, 105, 106, 107, 108, 341, 109, 1, - 417, 98, 99, 562, 101, 369, 103, 104, 10, 11, - 12, 13, 276, 110, 16, 247, 370, 19, 20, 21, - 22, 450, 24, 25, 26, 27, 28, 29, 30, 469, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 66, - 67, 354, 54, 55, 56, 57, 58, 494, 60, 61, - 62, 63, 64, 65, 157, 224, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, 11, 96, - 97, 83, -1, 16, -1, 102, -1, -1, 105, 106, - 107, 108, 25, 26, 1, -1, 98, 99, 31, 101, - -1, 103, 104, 10, 11, 12, 13, -1, 110, 16, - -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 66, 67, -1, 54, 55, 56, - 57, 58, -1, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, 73, 74, 102, -1, - -1, 105, 106, 107, 108, 97, 83, -1, -1, -1, - 102, -1, -1, 105, 106, 107, 108, -1, -1, 1, - -1, 98, 99, -1, 101, -1, 103, 104, 10, 11, - 12, 13, -1, 110, 16, -1, -1, 19, 20, 21, - 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 66, - -1, -1, 54, 55, 56, 57, 58, -1, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, - 97, 83, -1, -1, -1, 102, -1, -1, 105, 106, - 107, 108, -1, -1, 1, -1, 98, 99, -1, 101, - -1, 103, 104, 10, 11, 12, 13, -1, 110, 16, - -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, -1, -1, -1, 54, 55, 56, - 57, 58, -1, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, 73, 74, -1, -1, - -1, 47, 48, 49, 50, -1, 83, -1, 54, -1, - 56, -1, -1, -1, -1, -1, -1, -1, -1, 1, - -1, 98, 99, -1, 101, -1, 103, 104, 10, 11, - 12, 13, -1, 110, 16, 81, 82, 19, 20, 21, + 17, 264, 10, 18, 9, 20, 128, 22, 44, 24, + 25, 19, 27, 28, 356, 16, 52, 50, 18, 50, + 12, 480, 22, 13, 24, 25, 14, 27, 28, 44, + 45, 512, 0, 80, 156, 50, 11, 10, 11, 47, + 13, 140, 141, 16, 44, 45, 112, 20, 14, 112, + 58, 24, 25, 11, 27, 11, 112, 13, 15, 14, + 18, 11, 20, 13, 22, 112, 24, 25, 14, 27, + 28, 96, 13, 11, 75, 13, 16, 112, 83, 14, + 20, 13, 97, 94, 24, 43, 44, 45, 46, 11, + 11, 15, 128, 26, 575, 83, 84, 70, 31, 23, + 346, 22, 103, 11, 14, 564, 83, 84, 14, 26, + 356, 112, 148, 359, 360, 107, 14, 83, 84, 14, + 156, 77, 21, 131, 23, 158, 141, 158, 83, 84, + 112, 139, 140, 141, 111, 34, 77, 83, 84, 112, + 39, 141, 100, 158, 43, 77, 22, 46, 83, 84, + 49, 159, 51, 112, 53, 54, 55, 56, 57, 258, + 423, 10, 112, 103, 112, 173, 174, 16, 176, 177, + 178, 20, 112, 83, 84, 24, 134, 83, 84, 11, + 11, 13, 13, 141, 22, 83, 84, 22, 83, 84, + 205, 29, 225, 22, 225, 22, 442, 214, 206, 207, + 208, 209, 210, 211, 212, 213, 22, 83, 84, 112, + 225, 22, 475, 22, 11, 220, 221, 222, 223, 224, + 112, 226, 227, 259, 229, 230, 75, 83, 84, 571, + 238, 239, 240, 241, 242, 243, 16, 483, 484, 11, + 20, 13, 83, 84, 24, 77, 77, 112, 83, 84, + 258, 22, 96, 97, 83, 84, 80, 379, 16, 158, + 53, 11, 20, 13, 272, 22, 24, 83, 84, 277, + 111, 517, 83, 84, 83, 84, 175, 235, 11, 287, + 13, 11, 181, 13, 112, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 318, 111, 551, 83, 84, 316, 317, + 11, 410, 83, 84, 29, 16, 324, 83, 84, 83, + 84, 83, 84, 77, 357, 26, 357, 94, 95, 111, + 31, 83, 84, 348, 111, 343, 344, 345, 346, 51, + 52, 12, 357, 379, 361, 111, 77, 111, 356, 111, + 13, 359, 360, 358, 481, 482, 478, 68, 485, 111, + 318, 26, 489, 490, 83, 84, 26, 47, 48, 49, + 50, 216, 217, 112, 54, 380, 56, 47, 48, 49, + 50, 103, 509, 510, 54, 59, 56, 395, 99, 37, + 38, 518, 111, 104, 89, 90, 107, 108, 109, 110, + 515, 31, 410, 83, 84, 15, 533, 29, 81, 111, + 537, 538, 12, 83, 84, 420, 531, 532, 29, 424, + 13, 11, 25, 84, 25, 61, 16, 542, 555, 25, + 435, 111, 68, 69, 442, 25, 26, 552, 553, 566, + 25, 31, 478, 570, 452, 107, 108, 109, 110, 25, + 565, 87, 579, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 240, 241, 242, 243, 104, 112, + 18, 107, 108, 109, 110, 483, 484, 26, 16, 496, + 112, 498, 86, 112, 61, 111, 12, 492, 112, 12, + 507, 68, 69, 12, 99, 12, 12, 26, 503, 104, + 399, 22, 107, 108, 109, 110, 521, 81, 516, 517, + 112, 11, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 111, 111, 111, 11, 104, 111, 111, + 107, 108, 109, 110, 0, 1, 3, 4, 5, 6, + 7, 8, 9, 551, 10, 11, 111, 13, 447, 111, + 16, 568, 12, 19, 20, 21, 22, 111, 24, 25, + 26, 27, 28, 29, 30, 22, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 22, 68, 69, 54, 55, + 56, 57, 58, 111, 60, 79, 62, 63, 64, 65, + 66, 67, 112, 111, 70, 71, 72, 73, 74, 75, + 76, 93, 94, 95, 96, 97, 98, 99, 22, 85, + 22, 111, 104, 111, 22, 107, 108, 109, 110, 112, + 111, 0, 1, 111, 100, 101, 17, 103, 78, 105, + 106, 10, 11, 111, 13, 13, 112, 16, 111, 107, + 19, 20, 21, 22, 516, 24, 25, 26, 27, 28, + 29, 30, 344, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 68, 69, 571, 54, 55, 56, 57, 58, + 422, 60, 250, 62, 63, 64, 65, 66, 67, 279, + 375, 70, 71, 72, 73, 74, 75, 76, 94, 95, + 96, 97, 98, 99, 457, 374, 85, 503, 104, 158, + 476, 107, 108, 109, 110, -1, 357, 225, -1, 1, + -1, 100, 101, -1, 103, -1, 105, 106, 10, 11, + 12, 13, -1, 112, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, - -1, -1, 54, 55, 56, 57, 58, -1, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, 98, 99, -1, 101, - -1, 103, 104, 10, 11, -1, 13, -1, 110, 16, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 68, + 69, -1, 54, 55, 56, 57, 58, -1, 60, -1, + 62, 63, 64, 65, 66, 67, -1, -1, 70, 71, + 72, 73, 74, 75, 76, -1, -1, 96, 97, 98, + 99, -1, -1, 85, -1, 104, -1, -1, 107, 108, + 109, 110, -1, -1, -1, -1, 1, -1, 100, 101, + -1, 103, -1, 105, 106, 10, 11, 12, 13, -1, + 112, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 68, 69, -1, 54, + 55, 56, 57, 58, -1, 60, -1, 62, 63, 64, + 65, 66, 67, -1, -1, 70, 71, 72, 73, 74, + 75, 76, -1, -1, -1, -1, 98, 99, -1, -1, + 85, -1, 104, -1, -1, 107, 108, 109, 110, -1, + -1, -1, -1, 1, -1, 100, 101, -1, 103, -1, + 105, 106, 10, 11, 12, 13, -1, 112, 16, -1, + -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 68, 69, -1, 54, 55, 56, 57, + 58, -1, 60, -1, 62, 63, 64, 65, 66, 67, + -1, -1, 70, 71, 72, 73, 74, 75, 76, -1, + -1, -1, -1, -1, 99, -1, -1, 85, -1, 104, + -1, -1, 107, 108, 109, 110, -1, -1, -1, -1, + 1, -1, 100, 101, -1, 103, -1, 105, 106, 10, + 11, 12, 13, -1, 112, 16, -1, -1, 19, 20, + 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + -1, -1, -1, 54, 55, 56, 57, 58, -1, 60, + -1, 62, 63, 64, 65, 66, 67, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 104, -1, -1, 107, + 108, 109, 110, -1, 85, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1, -1, 100, + 101, -1, 103, -1, 105, 106, 10, 11, 12, 13, + -1, 112, 16, -1, -1, 19, 20, 21, 22, -1, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, -1, -1, -1, + 54, 55, 56, 57, 58, -1, 60, -1, 62, 63, + 64, 65, 66, 67, -1, -1, 70, 71, 72, 73, + 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, + -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, 100, 101, -1, 103, + -1, 105, 106, 10, 11, -1, 13, -1, 112, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, -1, -1, 54, 55, 56, - 57, 58, -1, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, 73, 74, -1, -1, - 77, -1, -1, -1, -1, -1, 83, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, - -1, 98, 99, -1, 101, -1, 103, 104, 10, 11, - -1, 13, -1, 110, 16, -1, -1, 19, 20, 21, - 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, - -1, -1, 54, 55, 56, 57, 58, -1, 60, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, 98, 99, -1, 101, - -1, 103, 104, 10, 11, -1, 13, -1, 110, 16, - -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, - 37, 38, -1, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, -1, -1, -1, 54, 55, 56, - 57, 58, -1, 60, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, 73, 74, -1, -1, - -1, -1, -1, -1, -1, -1, 83, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, - -1, 98, 99, -1, 101, 10, 103, 104, 13, -1, - -1, 16, -1, 110, 19, 20, 21, 22, -1, 24, - 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, - 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, + 57, 58, -1, 60, -1, 62, 63, 64, 65, 66, + 67, -1, -1, 70, 71, 72, 73, 74, 75, 76, + -1, -1, 79, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, -1, -1, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, 73, 74, - -1, -1, -1, -1, -1, -1, -1, -1, 83, -1, + -1, 1, -1, 100, 101, -1, 103, -1, 105, 106, + 10, 11, -1, 13, -1, 112, 16, -1, -1, 19, + 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, -1, -1, -1, 54, 55, 56, 57, 58, -1, + 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, + 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, + -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, - -1, -1, -1, 98, 99, -1, 101, 10, 103, 104, - 13, -1, -1, 16, -1, 110, 19, 20, 21, -1, + 100, 101, -1, 103, -1, 105, 106, 10, 11, -1, + 13, -1, 112, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, - 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, - 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, -1, -1, 61, 62, - 63, 64, 65, 0, -1, 68, 69, 70, 71, 72, - 73, 74, -1, -1, 11, -1, 13, 14, 15, -1, - 83, -1, -1, -1, -1, 22, 23, -1, -1, -1, - -1, -1, -1, -1, -1, 98, 99, -1, 101, -1, - 103, 104, -1, -1, -1, -1, 109, 110, -1, -1, - 47, 48, 49, 50, -1, -1, -1, 54, -1, 56, - -1, -1, 59, -1, -1, -1, -1, -1, -1, 66, - 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, -1, 81, 82, -1, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, -1, -1, -1, -1, 102, -1, -1, 105, 106, - 107, 108, 109, 10, 11, -1, 13, -1, -1, 16, - -1, -1, 19, 20, 21, -1, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, + 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, -1, -1, + -1, 54, 55, 56, 57, 58, -1, 60, -1, 62, + 63, 64, 65, 66, 67, -1, -1, 70, 71, 72, + 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, + -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, -1, -1, -1, -1, 100, 101, -1, + 103, 10, 105, 106, 13, -1, -1, 16, -1, 112, + 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, + -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 58, -1, -1, 61, 62, 63, 64, 65, -1, - -1, 68, 69, 70, 71, 72, 73, 74, -1, -1, - -1, -1, -1, -1, -1, -1, 83, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 98, 99, -1, 101, 10, 103, 104, 13, 14, - -1, 16, -1, 110, 19, 20, 21, -1, -1, 24, + -1, 60, -1, -1, 63, 64, 65, 66, 67, -1, + -1, 70, 71, 72, 73, 74, 75, 76, -1, -1, + -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, + -1, 100, 101, -1, 103, 10, 105, 106, 13, -1, + -1, 16, -1, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, -1, -1, 61, 62, 63, 64, - 65, -1, -1, 68, 69, 70, 71, 72, 73, 74, - -1, -1, -1, -1, -1, -1, -1, -1, 83, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 98, 99, -1, 101, -1, 103, 104, - 10, 11, -1, 13, -1, 110, 16, -1, -1, 19, - 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, + -1, -1, -1, -1, -1, 60, -1, -1, 63, 64, + 65, 66, 67, 0, -1, 70, 71, 72, 73, 74, + 75, 76, -1, -1, 11, -1, 13, 14, 15, -1, + 85, -1, -1, -1, -1, 22, 23, -1, -1, -1, + -1, -1, -1, -1, -1, 100, 101, -1, 103, -1, + 105, 106, -1, -1, -1, -1, 111, 112, -1, -1, + 47, 48, 49, 50, -1, -1, -1, 54, -1, 56, + -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, + -1, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, -1, 83, 84, -1, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 0, 68, 69, -1, 104, -1, -1, + 107, 108, 109, 110, 111, -1, -1, 14, 15, -1, + -1, -1, -1, -1, -1, 22, 23, 91, 92, 93, + 94, 95, 96, 97, 98, 99, -1, -1, -1, -1, + 104, -1, -1, 107, 108, 109, 110, -1, -1, -1, + 47, 48, 49, 50, -1, -1, -1, 54, -1, 56, + -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, + -1, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, -1, 83, 84, -1, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, -1, -1, -1, -1, 104, -1, -1, + 107, 108, 109, 110, 111, 10, 11, -1, 13, -1, + -1, 16, -1, -1, 19, 20, 21, -1, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, + -1, -1, -1, -1, -1, -1, -1, -1, 68, 69, + -1, -1, -1, -1, -1, 60, -1, -1, 63, 64, + 65, 66, 67, -1, -1, 70, 71, 72, 73, 74, + 75, 76, 92, 93, 94, 95, 96, 97, 98, 99, + 85, -1, -1, -1, 104, -1, -1, 107, 108, 109, + 110, -1, -1, -1, -1, 100, 101, -1, 103, 10, + 105, 106, 13, 14, -1, 16, -1, 112, 19, 20, + 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, + -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + -1, -1, 63, 64, 65, 66, 67, -1, -1, 70, + 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, + -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, + 101, -1, 103, -1, 105, 106, 10, 11, -1, 13, + -1, 112, 16, -1, -1, 19, 20, 21, -1, -1, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 60, -1, -1, 63, + 64, 65, 66, 67, -1, -1, 70, 71, 72, 73, + 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, + -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, -1, 103, + 10, 105, 106, 13, -1, -1, 16, -1, 112, 19, + 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, - -1, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, 73, 74, -1, -1, -1, -1, -1, - -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 98, 99, - -1, 101, 10, 103, 104, 13, -1, -1, 16, -1, - 110, 19, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, - -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, -1, -1, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, 73, 74, -1, -1, -1, - -1, -1, -1, -1, -1, 83, -1, -1, -1, -1, + 60, -1, -1, 63, 64, 65, 66, 67, -1, -1, + 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, + -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, -1, 101, 10, 103, 104, 13, -1, -1, - 16, -1, 110, 19, 20, 21, -1, -1, 24, 25, + 100, 101, -1, 103, 10, 105, 106, 13, -1, -1, + 16, -1, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 58, -1, -1, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, 73, 74, -1, - -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, + -1, -1, -1, -1, 60, -1, -1, 63, 64, 65, + 66, 67, -1, -1, 70, 71, 72, 73, 74, 75, + 76, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 98, 99, -1, 101, 10, 103, 104, 13, - -1, -1, 16, 109, 110, 19, 20, 21, -1, -1, - 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, - 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 58, -1, -1, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, 73, - 74, -1, -1, -1, -1, -1, -1, -1, -1, 83, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 98, 99, -1, 101, 10, 103, - 104, 13, -1, -1, 16, 109, 110, 19, 20, 21, + -1, -1, -1, -1, 100, 101, -1, 103, 10, 105, + 106, 13, -1, -1, 16, 111, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, -1, -1, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 98, 99, -1, 101, - 10, 103, 104, 13, -1, -1, 16, 109, 110, 19, + -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, + -1, 63, 64, 65, 66, 67, -1, -1, 70, 71, + 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, + -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + -1, 103, 10, 105, 106, 13, -1, -1, 16, 111, + 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 60, -1, -1, 63, 64, 65, 66, 67, + -1, -1, 70, 71, 72, 73, 74, 75, 76, -1, + -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, -1, 103, 10, 105, 106, 13, + -1, -1, 16, 111, 112, 19, 20, 21, -1, -1, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 60, -1, -1, 63, + 64, 65, 66, 67, -1, -1, 70, 71, 72, 73, + 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, + -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, -1, 103, + 10, 105, 106, 13, -1, -1, 16, 111, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, - -1, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, 73, 74, -1, -1, -1, -1, -1, - -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 98, 99, - -1, 101, 10, 103, 104, 13, -1, -1, 16, 109, - 110, 19, 20, 21, -1, -1, 24, 25, 26, 27, - 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, - -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, -1, -1, 61, 62, 63, 64, 65, -1, -1, - 68, 69, 70, 71, 72, 73, 74, -1, -1, -1, - -1, -1, -1, -1, -1, 83, -1, -1, -1, -1, + 60, -1, -1, 63, 64, 65, 66, 67, -1, -1, + 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, + -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, -1, 101, 10, 103, 104, 13, -1, -1, - 16, 109, 110, 19, 20, 21, -1, -1, 24, 25, + 100, 101, -1, 103, 10, 105, 106, 13, -1, -1, + 16, 111, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 58, -1, -1, 61, 62, 63, 64, 65, - -1, -1, 68, 69, 70, 71, 72, 73, 74, -1, - -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, + -1, -1, -1, -1, 60, -1, -1, 63, 64, 65, + 66, 67, -1, -1, 70, 71, 72, 73, 74, 75, + 76, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 98, 99, -1, 101, 10, 103, 104, 13, - -1, -1, 16, 109, 110, 19, 20, 21, -1, -1, - 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, - 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 58, -1, -1, 61, 62, 63, - 64, 65, -1, -1, 68, 69, 70, 71, 72, 73, - 74, -1, -1, -1, -1, -1, -1, -1, -1, 83, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 98, 99, -1, 101, 10, 103, - 104, 13, -1, -1, 16, 109, 110, 19, 20, 21, + -1, -1, -1, -1, 100, 101, -1, 103, 10, 105, + 106, 13, -1, -1, 16, 111, 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, -1, -1, 61, - 62, 63, 64, 65, -1, -1, 68, 69, 70, 71, - 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 98, 99, -1, 101, - 10, 103, 104, 13, -1, -1, 16, -1, 110, 19, - 20, 21, -1, -1, 24, 25, 26, 27, 28, 29, - 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, - -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, - -1, -1, 475, -1, -1, 478, -1, -1, 58, 482, - 483, 61, 62, 63, 64, 65, -1, -1, 68, 69, - 70, 71, 72, 73, 74, -1, -1, 500, 501, -1, - -1, -1, -1, 83, -1, -1, -1, 510, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 98, 99, - -1, 101, 525, 103, 104, -1, 529, 530, -1, -1, - 110, -1, -1, -1, -1, -1, -1, -1, -1, 59, - -1, -1, -1, -1, 547, -1, 66, 67, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 561, -1, - -1, -1, -1, -1, 84, 85, 569, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, -1, -1, - -1, -1, 102, 59, -1, 105, 106, 107, 108, -1, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, - -1, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, -1, -1, -1, -1, 102, 59, -1, 105, - 106, 107, 108, -1, 66, 67, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, + -1, 63, 64, 65, 66, 67, -1, -1, 70, 71, + 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, + -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + -1, 103, 10, 105, 106, 13, -1, -1, 16, 111, + 112, 19, 20, 21, -1, -1, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 66, 67, -1, -1, - 102, -1, -1, 105, 106, 107, 108, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 89, - 90, 91, 92, 93, 94, 95, 96, 97, -1, -1, - -1, -1, 102, -1, -1, 105, 106, 107, 108 + -1, -1, 60, -1, -1, 63, 64, 65, 66, 67, + -1, -1, 70, 71, 72, 73, 74, 75, 76, -1, + -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, -1, 103, 10, 105, 106, 13, + -1, -1, 16, -1, 112, 19, 20, 21, -1, -1, + 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 60, -1, -1, 63, + 64, 65, 66, 67, -1, -1, 70, 71, 72, 73, + 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, + -1, 85, -1, -1, 61, -1, -1, -1, -1, -1, + -1, 68, 69, -1, -1, -1, 100, 101, -1, 103, + -1, 105, 106, -1, -1, -1, -1, -1, 112, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, -1, -1, -1, -1, 104, 61, -1, + 107, 108, 109, 110, -1, 68, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 86, 87, -1, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, -1, -1, -1, + -1, 104, -1, -1, 107, 108, 109, 110 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 4, 5, 6, 7, 8, 9, 112, 113, - 114, 115, 116, 117, 118, 119, 0, 122, 10, 13, + 0, 3, 4, 5, 6, 7, 8, 9, 114, 115, + 116, 117, 118, 119, 120, 121, 0, 124, 10, 13, 16, 19, 20, 21, 24, 25, 26, 27, 28, 29, - 30, 32, 33, 34, 35, 36, 37, 43, 44, 58, - 61, 62, 63, 64, 65, 68, 69, 70, 71, 72, - 73, 74, 83, 98, 99, 101, 103, 104, 110, 173, - 174, 175, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 189, 192, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 11, 120, 1, 22, 38, 40, 41, + 30, 32, 33, 34, 35, 36, 37, 43, 44, 60, + 63, 64, 65, 66, 67, 70, 71, 72, 73, 74, + 75, 76, 85, 100, 101, 103, 105, 106, 112, 177, + 178, 179, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 193, 196, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 11, 122, 1, 22, 38, 40, 41, 42, 45, 46, 47, 48, 49, 50, 54, 55, 56, - 57, 60, 120, 129, 140, 173, 39, 127, 128, 129, - 125, 167, 168, 125, 26, 31, 120, 199, 207, 14, - 173, 207, 187, 207, 187, 207, 207, 207, 207, 188, - 13, 110, 187, 151, 151, 151, 187, 110, 110, 78, - 110, 120, 187, 26, 174, 191, 199, 207, 207, 120, - 187, 22, 173, 26, 31, 153, 187, 101, 110, 190, - 199, 200, 201, 187, 174, 187, 187, 187, 187, 187, - 109, 173, 81, 82, 15, 11, 13, 110, 94, 95, - 94, 92, 93, 92, 59, 66, 67, 84, 85, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 102, 105, 106, 107, 108, 110, 11, 13, 11, 13, - 11, 13, 11, 122, 152, 153, 153, 26, 150, 110, - 110, 110, 110, 73, 101, 110, 197, 199, 110, 110, - 120, 22, 53, 142, 22, 47, 48, 49, 50, 54, - 56, 128, 129, 127, 16, 20, 24, 158, 159, 161, - 162, 163, 164, 14, 191, 110, 78, 173, 109, 120, - 29, 154, 75, 155, 109, 109, 173, 192, 192, 207, - 174, 12, 22, 191, 110, 187, 190, 199, 200, 201, - 109, 173, 75, 156, 13, 109, 173, 173, 187, 173, - 173, 109, 173, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 10, 11, 13, 16, 20, 24, 25, 27, - 68, 110, 177, 199, 109, 173, 173, 173, 173, 173, - 173, 173, 173, 125, 26, 149, 150, 150, 26, 132, - 122, 122, 122, 122, 101, 122, 73, 195, 196, 198, - 199, 200, 201, 122, 122, 110, 122, 122, 120, 139, - 173, 146, 173, 139, 139, 139, 139, 31, 157, 157, - 15, 192, 174, 14, 176, 155, 29, 122, 172, 109, - 79, 109, 173, 12, 109, 173, 156, 109, 29, 173, - 13, 22, 14, 109, 86, 25, 173, 173, 25, 25, - 25, 25, 25, 109, 173, 110, 109, 22, 14, 22, - 14, 22, 14, 22, 12, 18, 121, 130, 131, 11, - 22, 26, 145, 173, 146, 147, 173, 147, 194, 199, - 110, 140, 144, 147, 148, 173, 195, 122, 147, 147, - 84, 160, 160, 162, 109, 23, 193, 191, 122, 170, - 110, 165, 166, 109, 109, 14, 173, 12, 187, 22, - 14, 109, 192, 12, 12, 12, 12, 122, 154, 155, - 122, 26, 109, 109, 109, 109, 110, 122, 109, 22, - 135, 147, 109, 109, 187, 173, 79, 11, 167, 11, - 14, 12, 109, 22, 155, 22, 171, 172, 136, 191, - 143, 143, 11, 123, 123, 147, 147, 123, 133, 110, - 109, 123, 123, 125, 109, 125, 77, 22, 169, 170, - 125, 22, 123, 123, 124, 51, 52, 141, 141, 109, - 109, 142, 145, 147, 123, 12, 12, 126, 12, 142, - 142, 125, 123, 110, 123, 123, 22, 109, 142, 22, - 29, 137, 12, 147, 142, 142, 134, 123, 17, 76, - 138, 109, 143, 142, 125, 123, 148, 77, 141, 109, - 123 + 57, 58, 62, 122, 131, 144, 177, 39, 129, 130, + 131, 127, 171, 172, 127, 26, 31, 122, 203, 211, + 14, 177, 211, 191, 211, 191, 211, 211, 211, 211, + 192, 13, 112, 191, 155, 155, 155, 191, 112, 112, + 80, 112, 122, 191, 26, 178, 195, 203, 211, 211, + 122, 191, 22, 177, 26, 31, 157, 191, 103, 112, + 194, 203, 204, 205, 191, 178, 191, 191, 191, 191, + 191, 111, 177, 83, 84, 15, 11, 13, 112, 96, + 97, 96, 94, 95, 94, 61, 68, 69, 86, 87, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 104, 107, 108, 109, 110, 112, 11, 13, 11, + 13, 11, 13, 11, 124, 156, 157, 157, 26, 154, + 112, 112, 112, 112, 75, 103, 112, 201, 203, 112, + 112, 122, 11, 125, 22, 53, 146, 22, 47, 48, + 49, 50, 54, 56, 130, 131, 129, 16, 20, 24, + 162, 163, 165, 166, 167, 168, 14, 195, 112, 80, + 177, 111, 122, 29, 158, 77, 159, 111, 111, 177, + 196, 196, 211, 178, 12, 22, 195, 112, 191, 194, + 203, 204, 205, 111, 177, 77, 160, 13, 111, 177, + 177, 191, 177, 177, 111, 177, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 10, 11, 13, 16, 20, + 24, 25, 27, 70, 112, 181, 203, 111, 177, 177, + 177, 177, 177, 177, 177, 177, 127, 26, 153, 154, + 154, 26, 134, 124, 124, 124, 124, 103, 124, 75, + 199, 200, 202, 203, 204, 205, 124, 124, 112, 124, + 124, 126, 59, 122, 143, 177, 150, 177, 143, 143, + 143, 143, 31, 161, 161, 15, 196, 178, 14, 180, + 159, 29, 124, 176, 111, 81, 111, 177, 12, 111, + 177, 160, 111, 29, 177, 13, 22, 14, 111, 88, + 25, 177, 177, 25, 25, 25, 25, 25, 111, 177, + 112, 111, 22, 14, 22, 14, 22, 14, 22, 12, + 18, 123, 132, 133, 11, 22, 26, 149, 177, 150, + 151, 177, 151, 198, 203, 112, 144, 148, 151, 152, + 177, 199, 124, 151, 151, 127, 112, 86, 164, 164, + 166, 111, 23, 197, 195, 124, 174, 112, 169, 170, + 111, 111, 14, 177, 12, 191, 22, 14, 111, 196, + 12, 12, 12, 12, 124, 158, 159, 124, 26, 111, + 111, 111, 111, 112, 124, 111, 22, 137, 151, 111, + 111, 12, 138, 191, 177, 81, 11, 171, 11, 14, + 12, 111, 22, 159, 22, 175, 176, 140, 195, 147, + 147, 125, 125, 151, 151, 125, 135, 112, 111, 125, + 125, 124, 127, 111, 127, 79, 22, 173, 174, 127, + 22, 125, 125, 51, 52, 145, 145, 111, 111, 146, + 149, 151, 125, 203, 12, 12, 128, 12, 146, 146, + 125, 112, 125, 125, 22, 111, 146, 139, 22, 29, + 141, 151, 146, 146, 136, 125, 111, 17, 78, 142, + 111, 147, 146, 125, 127, 125, 152, 79, 145, 111, + 125 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 111, 113, 112, 114, 112, 115, 112, 116, 112, - 117, 112, 118, 112, 119, 112, 120, 121, 122, 123, - 124, 125, 125, 126, 126, 127, 127, 128, 128, 129, - 129, 130, 129, 131, 129, 129, 132, 129, 129, 129, - 129, 129, 129, 129, 129, 133, 134, 129, 129, 129, - 135, 129, 129, 129, 129, 136, 129, 129, 129, 129, - 137, 138, 138, 139, 140, 140, 140, 140, 140, 140, - 140, 140, 141, 141, 141, 142, 142, 143, 144, 144, - 145, 145, 146, 147, 148, 149, 149, 150, 151, 152, - 153, 153, 154, 154, 155, 155, 155, 156, 156, 157, - 157, 158, 158, 159, 160, 160, 160, 161, 162, 162, - 163, 163, 163, 164, 164, 165, 165, 166, 168, 167, - 169, 169, 170, 171, 171, 172, 173, 173, 173, 174, - 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 176, 175, 177, 177, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 180, 180, 180, 180, 181, 181, 182, - 182, 182, 182, 183, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, - 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 188, 187, 187, 187, 187, 189, 189, 189, 190, - 190, 190, 190, 190, 191, 191, 192, 192, 193, 193, - 194, 195, 195, 195, 196, 196, 197, 197, 198, 199, - 200, 201, 202, 202, 203, 204, 204, 205, 205, 206, - 206, 207, 207, 207, 207 + 0, 113, 115, 114, 116, 114, 117, 114, 118, 114, + 119, 114, 120, 114, 121, 114, 122, 123, 124, 125, + 126, 127, 127, 128, 128, 129, 129, 130, 130, 131, + 131, 132, 131, 133, 131, 131, 134, 131, 131, 131, + 131, 131, 131, 131, 131, 135, 136, 131, 131, 131, + 137, 131, 131, 131, 138, 139, 131, 131, 140, 131, + 131, 131, 131, 141, 142, 142, 143, 144, 144, 144, + 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, + 147, 148, 148, 149, 149, 150, 151, 152, 153, 153, + 154, 155, 156, 157, 157, 158, 158, 159, 159, 159, + 160, 160, 161, 161, 162, 162, 163, 164, 164, 164, + 165, 166, 166, 167, 167, 167, 168, 168, 169, 169, + 170, 172, 171, 173, 173, 174, 175, 175, 176, 177, + 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, + 179, 179, 179, 179, 180, 179, 181, 181, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, + 185, 185, 186, 186, 186, 186, 187, 187, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, + 189, 189, 189, 190, 190, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + 191, 191, 191, 191, 192, 191, 191, 191, 191, 193, + 193, 193, 194, 194, 194, 194, 194, 195, 195, 196, + 196, 197, 197, 198, 199, 199, 199, 200, 200, 201, + 201, 202, 203, 204, 205, 206, 206, 207, 208, 208, + 209, 209, 210, 210, 211, 211, 211, 211 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_int8 yyr2[] = +static const yytype_uint8 yyr2[] = { 0, 2, 0, 4, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 4, 7, 0, 4, 0, 0, 2, 0, 2, 1, 1, 2, 2, 1, 4, 0, 7, 0, 6, 4, 0, 7, 7, 7, 6, 6, 2, 8, 8, 0, 0, 13, 9, 8, - 0, 10, 9, 7, 2, 0, 8, 2, 2, 1, - 2, 0, 3, 1, 1, 1, 3, 3, 3, 3, - 3, 3, 0, 2, 6, 0, 2, 0, 0, 1, - 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, - 1, 1, 0, 1, 0, 2, 1, 2, 1, 0, - 1, 1, 1, 3, 0, 1, 2, 3, 1, 1, - 2, 3, 1, 0, 1, 0, 1, 3, 0, 2, - 1, 1, 4, 1, 1, 5, 3, 3, 1, 2, - 3, 1, 3, 5, 6, 3, 3, 5, 2, 4, - 4, 0, 5, 1, 1, 5, 4, 5, 4, 5, - 6, 5, 4, 5, 4, 3, 6, 4, 5, 3, - 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 1, 3, 2, 2, 3, 3, 1, - 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 4, 3, 5, 4, - 2, 2, 1, 1, 1, 1, 5, 2, 3, 1, - 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 4, 4, 5, 5, 1, 1, 3, 4, 3, 4, - 4, 4, 4, 4, 1, 2, 2, 1, 2, 2, - 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, - 4, 0, 6, 1, 1, 1, 3, 2, 4, 3, - 2, 1, 1, 1, 0, 1, 0, 1, 0, 2, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 4, 2, 1, 3, 1, 3, 1, - 3, 1, 1, 1, 1 + 0, 10, 9, 7, 0, 0, 10, 2, 0, 8, + 2, 2, 1, 2, 0, 3, 1, 1, 1, 3, + 3, 3, 3, 3, 3, 0, 2, 6, 0, 2, + 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 0, 1, 0, 2, 1, + 2, 1, 0, 1, 1, 1, 3, 0, 1, 2, + 3, 1, 1, 2, 3, 1, 0, 1, 0, 1, + 3, 0, 2, 1, 1, 4, 1, 1, 5, 3, + 3, 1, 2, 3, 1, 3, 5, 6, 3, 3, + 5, 2, 4, 4, 0, 5, 1, 1, 5, 4, + 5, 4, 5, 6, 5, 4, 5, 4, 3, 6, + 4, 5, 3, 3, 3, 3, 3, 1, 1, 3, + 3, 3, 3, 3, 3, 3, 1, 3, 2, 2, + 3, 3, 1, 3, 2, 2, 3, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 4, + 3, 5, 4, 2, 2, 1, 1, 1, 1, 5, + 2, 3, 1, 2, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 4, 4, 5, 5, 1, 1, 3, + 4, 3, 4, 4, 4, 4, 4, 1, 2, 2, + 1, 2, 2, 1, 2, 1, 2, 1, 3, 1, + 3, 1, 3, 4, 0, 6, 1, 1, 1, 3, + 2, 4, 3, 2, 1, 1, 1, 0, 1, 0, + 1, 0, 2, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 4, 2, 1, 3, + 1, 3, 1, 3, 1, 1, 1, 1 }; typedef enum { @@ -1128,34 +1140,34 @@ static const toketypes yy_type_tab[] = toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval }; /* Generated from: - * 9a5909b0af5f61f96907e330008f3cdc9dadcab1417c5bcb188cb3b9f6593c01 perly.y + * 672539c523be1568df09c599b38a828c80473c60e1fddd63764d66f74e4e7b11 perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ @@ -69,6 +69,7 @@ %token <ival> FORMAT SUB SIGSUB ANONSUB ANON_SIGSUB PACKAGE USE %token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR %token <ival> GIVEN WHEN DEFAULT +%token <ival> TRY CATCH %token <ival> LOOPEX DOTDOT YADAYADA %token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP %token <ival> MULOP ADDOP @@ -459,6 +460,31 @@ barestmt: PLUGSTMT newFOROP(0, NULL, $mexpr, $mblock, $cont)); parser->copline = (line_t)$FOR; } + | TRY mblock[try] CATCH PERLY_PAREN_OPEN + { parser->in_my = 1; } + remember scalar + { parser->in_my = 0; intro_my(); } + PERLY_PAREN_CLOSE mblock[catch] + { + OP *tryblock, *catchblock; + + tryblock = newUNOP(OP_ENTERTRY, OPf_SPECIAL, $try); + + catchblock = newLOGOP(OP_CATCH, 0, + newOP(OP_NULL, 0), /* LOGOP always needs an op_first */ + block_end($remember, op_scope($catch))); + + /* catchblock itself is an OP_NULL; the real OP_CATCH is + * its op_first */ + assert(cUNOPx(catchblock)->op_first->op_type == OP_CATCH); + cUNOPx(catchblock)->op_first->op_targ = $scalar->op_targ; + op_free($scalar); + + $$ = op_append_list(OP_LEAVE, + newOP(OP_ENTER, 0), + op_append_list(OP_LINESEQ, + tryblock, catchblock)); + } | block cont { /* a block is a loop that happens once */ diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f858802a04..b021aeac35 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -21,9 +21,21 @@ XXX Any important notices here =head1 Core Enhancements -XXX New core language features go here. Summarize user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L</Performance Enhancements> section. +=head2 Experimental Try/Catch Syntax + +An initial experimental attempt at providing C<try>/C<catch> notation has +been added. + + use feature 'try'; + + try { + a_function(); + } + catch ($e) { + warn "An error occurred: $e"; + } + +For more information, see L<perlsyn/"Try Catch Exception Handling">. [ List each enhancement as a =head2 entry ] diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 63f57f220e..98d159dc21 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -6453,6 +6453,12 @@ disallowed. See L<Safe>. (F) Your machine doesn't implement a file truncation mechanism that Configure knows about. +=item try/catch is experimental + +(S experimental::try) This warning is emitted if you use the C<try> and +C<catch> syntax. This syntax is currently experimental and its behaviour may +change in future releases of Perl. + =item Type of arg %d to &CORE::%s must be %s (F) The subroutine in question in the CORE package requires its argument diff --git a/pod/perlsyn.pod b/pod/perlsyn.pod index fa4b78a278..0ce267bfdb 100644 --- a/pod/perlsyn.pod +++ b/pod/perlsyn.pod @@ -282,6 +282,10 @@ The following compound statements may be used to control flow: PHASE BLOCK +If enabled by the experimental C<try> feature, the following may also be used + + try BLOCK catch (VAR) BLOCK + The experimental C<given> statement is I<not automatically enabled>; see L</"Switch Statements"> below for how to do so, and the attendant caveats. @@ -606,6 +610,42 @@ block. The reward for this discovery is this cautionary advice: The return value of a C<for> loop is unspecified and may change without notice. Do not rely on it. +=head2 Try Catch Exception Handling +X<try> X<catch> + +The C<try>/C<catch> syntax provides control flow relating to exceptions +handling. The C<try> keyword introduces a block which will be executed when it +is encountered, and the C<catch> block provides code to handle any exception +that may be thrown by the first. + + try { + my $x = call_a_function(); + $x < 100 or die "Too big"; + send_output($x); + } + catch ($e) { + warn "Unable to output a value; $e"; + } + print "Finished\n"; + +Here, the body of the C<catch> block (i.e. the C<warn> statement) will be +executed if the initial block invokes the conditional C<die>, or if either of +the functions it invokes throw an uncaught exception. The C<catch> block can +inspect the C<$e> lexical variable in this case to see what the exception was. +If no exception was thrown then the C<catch> block does not happen. In either +case, execution will then continue from the following statement - in this +example the C<print>. + +The C<catch> keyword is immediately followed by a variable declaration in +parentheses, which introduces a new variable visible to the body of the +subsequent block. Inside the block this variable will contain the exception +value that was thrown by the code in the C<try> block. It is not necessary +to use the C<my> keyword to declare this variable; this is implied (similar +as it is for function signatures). + +This syntax is currently experimental and must be enabled with +C<use feature 'try'>. It emits a warning in the C<experimental::try> category. + =head2 Basic BLOCKs X<block> @@ -1335,10 +1335,13 @@ S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags) for (i = cxstack_ix; i >= 0; i--) { const PERL_CONTEXT * const cx = &cxstack[i]; switch (CxTYPE(cx)) { + case CXt_EVAL: + if(CxTRY(cx)) + continue; + /* FALLTHROUGH */ case CXt_SUBST: case CXt_SUB: case CXt_FORMAT: - case CXt_EVAL: case CXt_NULL: /* diag_listed_as: Exiting subroutine via %s */ Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s", @@ -1451,8 +1454,15 @@ S_dopoptosub_at(pTHX_ const PERL_CONTEXT *cxstk, I32 startingblock) * code block. Hide this faked entry from the world. */ if (cx->cx_type & CXp_SUB_RE_FAKE) continue; - /* FALLTHROUGH */ + DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i)); + return i; + case CXt_EVAL: + if (CxTRY(cx)) + continue; + DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i)); + return i; + case CXt_FORMAT: DEBUG_l( Perl_deb(aTHX_ "(dopoptosub_at(): found sub at cx=%ld)\n", (long)i)); return i; @@ -1485,10 +1495,13 @@ S_dopoptoloop(pTHX_ I32 startingblock) for (i = startingblock; i >= 0; i--) { const PERL_CONTEXT * const cx = &cxstack[i]; switch (CxTYPE(cx)) { + case CXt_EVAL: + if(CxTRY(cx)) + continue; + /* FALLTHROUGH */ case CXt_SUBST: case CXt_SUB: case CXt_FORMAT: - case CXt_EVAL: case CXt_NULL: /* diag_listed_as: Exiting subroutine via %s */ Perl_ck_warner(aTHX_ packWARN(WARN_EXITING), "Exiting %s via %s", @@ -2471,7 +2484,15 @@ PP(pp_return) { dSP; dMARK; PERL_CONTEXT *cx; - const I32 cxix = dopopto_cursub(); + I32 cxix = dopopto_cursub(); + +again: + cx = &cxstack[cxix]; + if(CxTRY(cx)) { + /* This was a try {}. keep going */ + cxix = dopoptosub_at(cxstack, cxix - 1); + goto again; + } assert(cxstack_ix >= 0); if (cxix < cxstack_ix) { @@ -4593,6 +4614,22 @@ PP(pp_leaveeval) return retop; } +PP(pp_catch) +{ + dTARGET; + + if(!SvROK(ERRSV) && !SvTRUE(ERRSV)) { + /* ERRSV is neither an object nor true, therefore no exception happened */ + return cLOGOP->op_next; + } + + save_clearsv(&(PAD_SVl(PL_op->op_targ))); + sv_setsv(TARG, ERRSV); + CLEAR_ERRSV(); + + return cLOGOP->op_other; +} + /* Common code for Perl_call_sv and Perl_fold_constants, put here to keep it close to the related Perl_create_eval_scope. */ void @@ -4631,10 +4668,29 @@ Perl_create_eval_scope(pTHX_ OP *retop, U32 flags) PP(pp_entertry) { + OP *retop = cLOGOP->op_other->op_next; + RUN_PP_CATCHABLY(Perl_pp_entertry); assert(!CATCH_GET); - create_eval_scope(cLOGOP->op_other->op_next, 0); + + if(PL_op->op_flags & OPf_SPECIAL) { /* a try {} block */ + PERL_CONTEXT *cx; + const U8 gimme = GIMME_V; + + save_scalar(PL_errgv); + CLEAR_ERRSV(); + + cx = cx_pushblock((CXt_EVAL|CXp_EVALBLOCK|CXp_TRY), gimme, + PL_stack_sp, PL_savestack_ix); + cx_pusheval(cx, retop, NULL); + + PL_in_eval = EVAL_INEVAL; + } + else { /* an eval {} block */ + create_eval_scope(retop, 0); + } + return PL_op->op_next; } diff --git a/pp_proto.h b/pp_proto.h index 6ddb1f6634..48558d31c2 100644 --- a/pp_proto.h +++ b/pp_proto.h @@ -34,6 +34,7 @@ PERL_CALLCONV OP *Perl_pp_bit_or(pTHX); PERL_CALLCONV OP *Perl_pp_bless(pTHX); PERL_CALLCONV OP *Perl_pp_break(pTHX); PERL_CALLCONV OP *Perl_pp_caller(pTHX); +PERL_CALLCONV OP *Perl_pp_catch(pTHX); PERL_CALLCONV OP *Perl_pp_chdir(pTHX); PERL_CALLCONV OP *Perl_pp_chop(pTHX); PERL_CALLCONV OP *Perl_pp_chown(pTHX); diff --git a/regen/feature.pl b/regen/feature.pl index e626ca9fee..ffe3fee994 100755 --- a/regen/feature.pl +++ b/regen/feature.pl @@ -40,6 +40,7 @@ my %feature = ( indirect => 'indirect', multidimensional => 'multidimensional', bareword_filehandles => 'bareword_filehandles', + try => 'try', ); # NOTE: If a feature is ever enabled in a non-contiguous range of Perl @@ -477,7 +478,7 @@ read_only_bottom_close_and_rename($h); __END__ package feature; -our $VERSION = '1.62'; +our $VERSION = '1.63'; FEATURES @@ -815,6 +816,14 @@ previous versions it was simply on all the time. You can use the L<bareword::filehandles> module on CPAN to disable bareword filehandles for older versions of perl. +=head2 The 'try' feature. + +This feature enables the C<try> and C<catch> syntax, which allows exception +handling, where exceptions throwin from the body of the block introduced with +C<try> are caught by executing the body of the C<catch> block. + +For more information, see L<perlsyn/"Try Catch Exception Handling">. + =head1 FEATURE BUNDLES It's possible to load multiple features together, using diff --git a/regen/keywords.pl b/regen/keywords.pl index b9ae8cf0f2..77f8aa9d93 100755 --- a/regen/keywords.pl +++ b/regen/keywords.pl @@ -47,6 +47,8 @@ my %feature_kw = ( __SUB__ => '__SUB__', fc => 'fc', isa => 'isa', + try => 'try', + catch => 'try', ); my %pos = map { ($_ => 1) } @{$by_strength{'+'}}; @@ -132,6 +134,7 @@ __END__ -bless -break -caller ++catch -chdir -chmod -chomp @@ -339,6 +342,7 @@ __END__ -time -times +tr ++try -truncate -uc -ucfirst diff --git a/regen/opcodes b/regen/opcodes index 4d5ba36d78..2a2da77c5c 100644 --- a/regen/opcodes +++ b/regen/opcodes @@ -577,3 +577,5 @@ isa derived class test ck_isa s2 cmpchain_and comparison chaining ck_null | cmpchain_dup comparand shuffling ck_null 1 + +catch catch {} block ck_null | diff --git a/regen/warnings.pl b/regen/warnings.pl index f08d2d6379..c4d6b4e7b9 100644 --- a/regen/warnings.pl +++ b/regen/warnings.pl @@ -119,6 +119,8 @@ my $tree = { [ 5.029, DEFAULT_ON ], 'experimental::isa' => [ 5.031, DEFAULT_ON ], + 'experimental::try' => + [ 5.033, DEFAULT_ON ], }], 'missing' => [ 5.021, DEFAULT_OFF], diff --git a/t/op/coreamp.t b/t/op/coreamp.t index b57609bef0..3e55e8ddb4 100644 --- a/t/op/coreamp.t +++ b/t/op/coreamp.t @@ -1162,10 +1162,10 @@ like $@, qr'^Undefined format "STDOUT" called', my %nottest_words = map { $_ => 1 } qw( AUTOLOAD BEGIN CHECK CORE DESTROY END INIT UNITCHECK __DATA__ __END__ - and cmp default do dump else elsif eq eval for foreach format ge given goto - grep gt if isa last le local lt m map my ne next no or our package print - printf q qq qr qw qx redo require return s say sort state sub tr unless - until use when while x xor y + and catch cmp default do dump else elsif eq eval for foreach format ge + given goto grep gt if isa last le local lt m map my ne next no or our + package print printf q qq qr qw qx redo require return s say sort state + sub tr try unless until use when while x xor y ); open my $kh, $keywords_file or die "$0 cannot open $keywords_file: $!"; diff --git a/t/op/coresubs.t b/t/op/coresubs.t index 1fa11c02f0..30f0621f65 100644 --- a/t/op/coresubs.t +++ b/t/op/coresubs.t @@ -16,10 +16,10 @@ use B; my %unsupported = map +($_=>1), qw ( __DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK and - cmp default do dump else elsif eq eval for foreach + catch cmp default do dump else elsif eq eval for foreach format ge given goto grep gt if isa last le local lt m map my ne next no or our package print printf q qq qr qw qx redo require - return s say sort state sub tr unless until use + return s say sort state sub tr try unless until use when while x xor y ); my %args_for = ( diff --git a/t/op/try.t b/t/op/try.t new file mode 100644 index 0000000000..cfc5d82b6b --- /dev/null +++ b/t/op/try.t @@ -0,0 +1,154 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + require './test.pl'; + set_up_inc('../lib'); + require Config; +} + +use strict; +use warnings; +use feature 'try'; +no warnings 'experimental::try'; + +{ + my $x; + try { + $x .= "try"; + } + catch ($e) { + $x .= "catch"; + } + is($x, "try", 'successful try/catch runs try but not catch'); +} + +{ + my $x; + my $caught; + try { + $x .= "try"; + die "Oopsie\n"; + } + catch ($e) { + $x .= "catch"; + $caught = $e; + is($@, "", '$@ is empty within catch block'); + } + is($x, "trycatch", 'die in try runs catch block'); + is($caught, "Oopsie\n", 'catch block saw exception value'); +} + +# return inside try {} makes containing function return +{ + sub f + { + try { + return "return inside try"; + } + catch ($e) { } + return "return from func"; + } + is(f(), "return inside try", 'return inside try'); +} + +# Loop controls inside try {} do not emit warnings +{ + my $warnings = ""; + local $SIG{__WARN__} = sub { $warnings .= $_[0] }; + + { + try { + last; + } + catch ($e) { } + } + + { + try { + next; + } + catch ($e) { } + } + + my $count = 0; + { + try { + $count++; + redo if $count < 2; + } + catch ($e) { } + } + + is($warnings, "", 'No warnings emitted by next/last/redo inside try'); + + $warnings = ""; + + LOOP_L: { + try { + last LOOP_L; + } + catch ($e) { } + } + + LOOP_N: { + try { + next LOOP_N; + } + catch ($e) { } + } + + $count = 0; + LOOP_R: { + try { + $count++; + redo LOOP_R if $count < 2; + } + catch ($e) { } + } + + is($warnings, "", 'No warnings emitted by next/last/redo LABEL inside try'); +} + +# try/catch should localise $@ +{ + eval { die "Value before\n"; }; + + try { die "Localized value\n" } catch ($e) {} + + is($@, "Value before\n", 'try/catch localized $@'); +} + +# try/catch is not confused by false values +{ + my $caught; + try { + die 0; + } + catch ($e) { + $caught++; + } + + ok( $caught, 'catch{} sees a false exception' ); +} + +# try/catch is not confused by always-false objects +{ + my $caught; + try { + die FALSE->new; + } + catch ($e) { + $caught++; + } + + ok( $caught, 'catch{} sees a false-overload exception object' ); + + { + package FALSE; + use overload 'bool' => sub { 0 }; + sub new { bless [], shift } + } +} + +done_testing; @@ -345,6 +345,7 @@ static struct debug_tokens { { ASSIGNOP, TOKENTYPE_OPNUM, "ASSIGNOP" }, { BITANDOP, TOKENTYPE_OPNUM, "BITANDOP" }, { BITOROP, TOKENTYPE_OPNUM, "BITOROP" }, + { CATCH, TOKENTYPE_IVAL, "CATCH" }, { CHEQOP, TOKENTYPE_OPNUM, "CHEQOP" }, { CHRELOP, TOKENTYPE_OPNUM, "CHRELOP" }, { COLONATTR, TOKENTYPE_NONE, "COLONATTR" }, @@ -424,6 +425,7 @@ static struct debug_tokens { { SUBLEXEND, TOKENTYPE_NONE, "SUBLEXEND" }, { SUBLEXSTART, TOKENTYPE_NONE, "SUBLEXSTART" }, { THING, TOKENTYPE_OPVAL, "THING" }, + { TRY, TOKENTYPE_IVAL, "TRY" }, { UMINUS, TOKENTYPE_NONE, "UMINUS" }, { UNIOP, TOKENTYPE_OPNUM, "UNIOP" }, { UNIOPSUB, TOKENTYPE_OPVAL, "UNIOPSUB" }, @@ -7704,6 +7706,11 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct case KEY_break: FUN0(OP_BREAK); + case KEY_catch: + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__TRY), "try/catch is experimental"); + PREBLOCK(CATCH); + case KEY_chop: UNI(OP_CHOP); @@ -8435,6 +8442,11 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct case KEY_truncate: LOP(OP_TRUNCATE,XTERM); + case KEY_try: + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__TRY), "try/catch is experimental"); + PREBLOCK(TRY); + case KEY_uc: UNI(OP_UC); diff --git a/warnings.h b/warnings.h index b129f6e250..5547a1161a 100644 --- a/warnings.h +++ b/warnings.h @@ -130,6 +130,10 @@ /* Warnings Categories added in Perl 5.031 */ #define WARN_EXPERIMENTAL__ISA 73 + +/* Warnings Categories added in Perl 5.033 */ + +#define WARN_EXPERIMENTAL__TRY 74 #define WARNsize 19 #define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125" #define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" @@ -313,6 +317,7 @@ category parameters passed. =for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS =for apidoc Amnh||WARN_EXPERIMENTAL__VLB =for apidoc Amnh||WARN_EXPERIMENTAL__ISA +=for apidoc Amnh||WARN_EXPERIMENTAL__TRY =cut */ |