diff --git a/MANIFEST b/MANIFEST index 92df2e5c793a..8aa617e36b9c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -5852,6 +5852,7 @@ t/op/crypt.t See if crypt works t/op/current_sub.t __SUB__ tests t/op/dbm.t See if dbmopen/dbmclose work t/op/decl-refs.t See if my \$foo works +t/op/defer.t See if defer blocks work t/op/defined.t See if defined() edge cases work t/op/defins.t See if auto-insert of defined() works t/op/delete.t See if delete works diff --git a/cop.h b/cop.h index fd0e12a84a15..f7885887eb86 100644 --- a/cop.h +++ b/cop.h @@ -1047,6 +1047,7 @@ struct context { #define CXt_FORMAT 10 #define CXt_EVAL 11 /* eval'', eval{}, try{} */ #define CXt_SUBST 12 +#define CXt_DEFER 13 /* SUBST doesn't feature in all switch statements. */ /* private flags for CXt_SUB and CXt_FORMAT */ diff --git a/embed.fnc b/embed.fnc index a649aa4b6371..c5b65567b549 100644 --- a/embed.fnc +++ b/embed.fnc @@ -1460,6 +1460,7 @@ ApdR |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o AdpbM |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \ |NULLOK OP* block ApdRx |OP* |newTRYCATCHOP |I32 flags|NN OP* tryblock|NN OP *catchvar|NN OP* catchblock +ApdRx |OP* |newDEFEROP |I32 flags|NN OP *block pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \ |NN XSUBADDR_t subaddr\ |NULLOK const char *const filename \ diff --git a/embed.h b/embed.h index 4b236821977f..6d7ba7ea7d53 100644 --- a/embed.h +++ b/embed.h @@ -352,6 +352,7 @@ #define newCONSTSUB(a,b,c) Perl_newCONSTSUB(aTHX_ a,b,c) #define newCONSTSUB_flags(a,b,c,d,e) Perl_newCONSTSUB_flags(aTHX_ a,b,c,d,e) #define newCVREF(a,b) Perl_newCVREF(aTHX_ a,b) +#define newDEFEROP(a,b) Perl_newDEFEROP(aTHX_ a,b) #define newDEFSVOP() Perl_newDEFSVOP(aTHX) #define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c) #define newFOROP(a,b,c,d,e) Perl_newFOROP(aTHX_ a,b,c,d,e) diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm index de332ee11030..ce8b5bfa0efc 100644 --- a/ext/Opcode/Opcode.pm +++ b/ext/Opcode/Opcode.pm @@ -441,6 +441,8 @@ These are a hotchpotch of opcodes still waiting to be considered break continue smartmatch + pushdefer + custom -- where should this go =item :base_math diff --git a/feature.h b/feature.h index 29522eedb5ec..23cc5f3d3147 100644 --- a/feature.h +++ b/feature.h @@ -16,20 +16,21 @@ #define FEATURE_BITWISE_BIT 0x0002 #define FEATURE___SUB___BIT 0x0004 #define FEATURE_MYREF_BIT 0x0008 -#define FEATURE_EVALBYTES_BIT 0x0010 -#define FEATURE_FC_BIT 0x0020 -#define FEATURE_INDIRECT_BIT 0x0040 -#define FEATURE_ISA_BIT 0x0080 -#define FEATURE_MULTIDIMENSIONAL_BIT 0x0100 -#define FEATURE_POSTDEREF_QQ_BIT 0x0200 -#define FEATURE_REFALIASING_BIT 0x0400 -#define FEATURE_SAY_BIT 0x0800 -#define FEATURE_SIGNATURES_BIT 0x1000 -#define FEATURE_STATE_BIT 0x2000 -#define FEATURE_SWITCH_BIT 0x4000 -#define FEATURE_TRY_BIT 0x8000 -#define FEATURE_UNIEVAL_BIT 0x10000 -#define FEATURE_UNICODE_BIT 0x20000 +#define FEATURE_DEFER_BIT 0x0010 +#define FEATURE_EVALBYTES_BIT 0x0020 +#define FEATURE_FC_BIT 0x0040 +#define FEATURE_INDIRECT_BIT 0x0080 +#define FEATURE_ISA_BIT 0x0100 +#define FEATURE_MULTIDIMENSIONAL_BIT 0x0200 +#define FEATURE_POSTDEREF_QQ_BIT 0x0400 +#define FEATURE_REFALIASING_BIT 0x0800 +#define FEATURE_SAY_BIT 0x1000 +#define FEATURE_SIGNATURES_BIT 0x2000 +#define FEATURE_STATE_BIT 0x4000 +#define FEATURE_SWITCH_BIT 0x8000 +#define FEATURE_TRY_BIT 0x10000 +#define FEATURE_UNIEVAL_BIT 0x20000 +#define FEATURE_UNICODE_BIT 0x40000 #define FEATURE_BUNDLE_DEFAULT 0 #define FEATURE_BUNDLE_510 1 @@ -80,6 +81,12 @@ FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \ ) +#define FEATURE_DEFER_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_DEFER_BIT) \ + ) + #define FEATURE_STATE_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ @@ -268,6 +275,14 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen, } return; + case 'd': + if (keylen == sizeof("feature_defer")-1 + && memcmp(subf+1, "efer", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_DEFER_BIT; + break; + } + return; + case 'e': if (keylen == sizeof("feature_evalbytes")-1 && memcmp(subf+1, "valbytes", keylen - sizeof("feature_")) == 0) { diff --git a/gv.c b/gv.c index 306a5240f80d..bde9c007bc28 100644 --- a/gv.c +++ b/gv.c @@ -545,7 +545,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, 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_catch : case KEY_cmp: - case KEY_default : case KEY_DESTROY: + case KEY_default : case KEY_defer : case KEY_DESTROY: case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif : case KEY_END : case KEY_eq : case KEY_eval : case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge : diff --git a/keywords.c b/keywords.c index 624debc80a4b..e06ada4b3e39 100644 --- a/keywords.c +++ b/keywords.c @@ -978,7 +978,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 5: /* 40 tokens of length 5 */ + case 5: /* 41 tokens of length 5 */ switch (name[0]) { case 'B': @@ -1142,6 +1142,17 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } + case 'd': + if (name[1] == 'e' && + name[2] == 'f' && + name[3] == 'e' && + name[4] == 'r') + { /* defer */ + return (all_keywords || FEATURE_DEFER_IS_ENABLED ? KEY_defer : 0); + } + + goto unknown; + case 'e': if (name[1] == 'l' && name[2] == 's' && @@ -3475,5 +3486,5 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) } /* Generated from: - * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl + * de1ee232f68ea8ae75d09f4f70b58fee8a6e6244dec3ab68baab54f7af9ce306 regen/keywords.pl * ex: set ro: */ diff --git a/keywords.h b/keywords.h index 82694905cb8e..84e7719148ce 100644 --- a/keywords.h +++ b/keywords.h @@ -55,223 +55,224 @@ #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 +#define KEY_defer 42 +#define KEY_defined 43 +#define KEY_delete 44 +#define KEY_die 45 +#define KEY_do 46 +#define KEY_dump 47 +#define KEY_each 48 +#define KEY_else 49 +#define KEY_elsif 50 +#define KEY_endgrent 51 +#define KEY_endhostent 52 +#define KEY_endnetent 53 +#define KEY_endprotoent 54 +#define KEY_endpwent 55 +#define KEY_endservent 56 +#define KEY_eof 57 +#define KEY_eq 58 +#define KEY_eval 59 +#define KEY_evalbytes 60 +#define KEY_exec 61 +#define KEY_exists 62 +#define KEY_exit 63 +#define KEY_exp 64 +#define KEY_fc 65 +#define KEY_fcntl 66 +#define KEY_fileno 67 +#define KEY_flock 68 +#define KEY_for 69 +#define KEY_foreach 70 +#define KEY_fork 71 +#define KEY_format 72 +#define KEY_formline 73 +#define KEY_ge 74 +#define KEY_getc 75 +#define KEY_getgrent 76 +#define KEY_getgrgid 77 +#define KEY_getgrnam 78 +#define KEY_gethostbyaddr 79 +#define KEY_gethostbyname 80 +#define KEY_gethostent 81 +#define KEY_getlogin 82 +#define KEY_getnetbyaddr 83 +#define KEY_getnetbyname 84 +#define KEY_getnetent 85 +#define KEY_getpeername 86 +#define KEY_getpgrp 87 +#define KEY_getppid 88 +#define KEY_getpriority 89 +#define KEY_getprotobyname 90 +#define KEY_getprotobynumber 91 +#define KEY_getprotoent 92 +#define KEY_getpwent 93 +#define KEY_getpwnam 94 +#define KEY_getpwuid 95 +#define KEY_getservbyname 96 +#define KEY_getservbyport 97 +#define KEY_getservent 98 +#define KEY_getsockname 99 +#define KEY_getsockopt 100 +#define KEY_given 101 +#define KEY_glob 102 +#define KEY_gmtime 103 +#define KEY_goto 104 +#define KEY_grep 105 +#define KEY_gt 106 +#define KEY_hex 107 +#define KEY_if 108 +#define KEY_index 109 +#define KEY_int 110 +#define KEY_ioctl 111 +#define KEY_isa 112 +#define KEY_join 113 +#define KEY_keys 114 +#define KEY_kill 115 +#define KEY_last 116 +#define KEY_lc 117 +#define KEY_lcfirst 118 +#define KEY_le 119 +#define KEY_length 120 +#define KEY_link 121 +#define KEY_listen 122 +#define KEY_local 123 +#define KEY_localtime 124 +#define KEY_lock 125 +#define KEY_log 126 +#define KEY_lstat 127 +#define KEY_lt 128 +#define KEY_m 129 +#define KEY_map 130 +#define KEY_mkdir 131 +#define KEY_msgctl 132 +#define KEY_msgget 133 +#define KEY_msgrcv 134 +#define KEY_msgsnd 135 +#define KEY_my 136 +#define KEY_ne 137 +#define KEY_next 138 +#define KEY_no 139 +#define KEY_not 140 +#define KEY_oct 141 +#define KEY_open 142 +#define KEY_opendir 143 +#define KEY_or 144 +#define KEY_ord 145 +#define KEY_our 146 +#define KEY_pack 147 +#define KEY_package 148 +#define KEY_pipe 149 +#define KEY_pop 150 +#define KEY_pos 151 +#define KEY_print 152 +#define KEY_printf 153 +#define KEY_prototype 154 +#define KEY_push 155 +#define KEY_q 156 +#define KEY_qq 157 +#define KEY_qr 158 +#define KEY_quotemeta 159 +#define KEY_qw 160 +#define KEY_qx 161 +#define KEY_rand 162 +#define KEY_read 163 +#define KEY_readdir 164 +#define KEY_readline 165 +#define KEY_readlink 166 +#define KEY_readpipe 167 +#define KEY_recv 168 +#define KEY_redo 169 +#define KEY_ref 170 +#define KEY_rename 171 +#define KEY_require 172 +#define KEY_reset 173 +#define KEY_return 174 +#define KEY_reverse 175 +#define KEY_rewinddir 176 +#define KEY_rindex 177 +#define KEY_rmdir 178 +#define KEY_s 179 +#define KEY_say 180 +#define KEY_scalar 181 +#define KEY_seek 182 +#define KEY_seekdir 183 +#define KEY_select 184 +#define KEY_semctl 185 +#define KEY_semget 186 +#define KEY_semop 187 +#define KEY_send 188 +#define KEY_setgrent 189 +#define KEY_sethostent 190 +#define KEY_setnetent 191 +#define KEY_setpgrp 192 +#define KEY_setpriority 193 +#define KEY_setprotoent 194 +#define KEY_setpwent 195 +#define KEY_setservent 196 +#define KEY_setsockopt 197 +#define KEY_shift 198 +#define KEY_shmctl 199 +#define KEY_shmget 200 +#define KEY_shmread 201 +#define KEY_shmwrite 202 +#define KEY_shutdown 203 +#define KEY_sin 204 +#define KEY_sleep 205 +#define KEY_socket 206 +#define KEY_socketpair 207 +#define KEY_sort 208 +#define KEY_splice 209 +#define KEY_split 210 +#define KEY_sprintf 211 +#define KEY_sqrt 212 +#define KEY_srand 213 +#define KEY_stat 214 +#define KEY_state 215 +#define KEY_study 216 +#define KEY_sub 217 +#define KEY_substr 218 +#define KEY_symlink 219 +#define KEY_syscall 220 +#define KEY_sysopen 221 +#define KEY_sysread 222 +#define KEY_sysseek 223 +#define KEY_system 224 +#define KEY_syswrite 225 +#define KEY_tell 226 +#define KEY_telldir 227 +#define KEY_tie 228 +#define KEY_tied 229 +#define KEY_time 230 +#define KEY_times 231 +#define KEY_tr 232 +#define KEY_try 233 +#define KEY_truncate 234 +#define KEY_uc 235 +#define KEY_ucfirst 236 +#define KEY_umask 237 +#define KEY_undef 238 +#define KEY_unless 239 +#define KEY_unlink 240 +#define KEY_unpack 241 +#define KEY_unshift 242 +#define KEY_untie 243 +#define KEY_until 244 +#define KEY_use 245 +#define KEY_utime 246 +#define KEY_values 247 +#define KEY_vec 248 +#define KEY_wait 249 +#define KEY_waitpid 250 +#define KEY_wantarray 251 +#define KEY_warn 252 +#define KEY_when 253 +#define KEY_while 254 +#define KEY_write 255 +#define KEY_x 256 +#define KEY_xor 257 +#define KEY_y 258 /* Generated from: - * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl + * de1ee232f68ea8ae75d09f4f70b58fee8a6e6244dec3ab68baab54f7af9ce306 regen/keywords.pl * ex: set ro: */ diff --git a/lib/B/Deparse-core.t b/lib/B/Deparse-core.t index ae2a80068251..7d8613f52199 100644 --- a/lib/B/Deparse-core.t +++ b/lib/B/Deparse-core.t @@ -366,6 +366,7 @@ my %not_tested = map { $_ => 1} qw( UNITCHECK catch default + defer else elsif for diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index 78703cd8b096..2d33039a80cf 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.57'; +$VERSION = '1.58'; use strict; our $AUTOLOAD; use warnings (); @@ -2306,6 +2306,7 @@ my %feature_keywords = ( fc => 'fc', try => 'try', catch => 'try', + defer => 'defer', ); # keywords that are strong and also have a prototype @@ -6582,6 +6583,15 @@ sub pp_argdefelem { } +sub pp_pushdefer { + my $self = shift; + my($op, $cx) = @_; + # defer block body is stored in the ->first of an OP_NULL that is + # ->first of OP_PUSHDEFER + my $body = $self->deparse($op->first->first); + return "defer {\n\t$body\n\b}\cK"; +} + 1; __END__ diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t index fd4d63c77980..390477365557 100644 --- a/lib/B/Deparse.t +++ b/lib/B/Deparse.t @@ -3180,3 +3180,9 @@ catch($var) { my $x; SECOND(); } +#### +# defer blocks +# CONTEXT use feature "defer"; no warnings 'experimental::defer'; +defer { + $a = 123; +} diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index 0388462b25e7..56cc70aa47a1 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -477,6 +477,7 @@ $bits{predec}{0} = $bf[0]; $bits{preinc}{0} = $bf[0]; $bits{prototype}{0} = $bf[0]; @{$bits{push}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{pushdefer}{0} = $bf[0]; $bits{quotemeta}{0} = $bf[0]; @{$bits{rand}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{range}{0} = $bf[0]; diff --git a/lib/feature.pm b/lib/feature.pm index 40274b553b08..fc1d984d3e10 100644 --- a/lib/feature.pm +++ b/lib/feature.pm @@ -5,13 +5,14 @@ package feature; -our $VERSION = '1.67'; +our $VERSION = '1.68'; our %feature = ( fc => 'feature_fc', isa => 'feature_isa', say => 'feature_say', try => 'feature_try', + defer => 'feature_defer', state => 'feature_state', switch => 'feature_switch', bitwise => 'feature_bitwise', @@ -35,7 +36,7 @@ our %feature_bundle = ( "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)], "5.35" => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state 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)], + "all" => [qw(bareword_filehandles bitwise current_sub declared_refs defer evalbytes fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)], "default" => [qw(bareword_filehandles indirect multidimensional)], ); @@ -431,6 +432,12 @@ C are caught by executing the body of the C block. For more information, see L. +=head2 The 'defer' feature + +This feature enables the C block syntax, which allows a block of code +to be deferred until when the flow of control leaves the block which contained +it. For more details, see L. + =head1 FEATURE BUNDLES It's possible to load multiple features together, using diff --git a/lib/warnings.pm b/lib/warnings.pm index 4b634de4d44b..da0a36362c48 100644 --- a/lib/warnings.pm +++ b/lib/warnings.pm @@ -5,7 +5,7 @@ package warnings; -our $VERSION = "1.53"; +our $VERSION = "1.54"; # Verify that we're called correctly so that warnings will work. # Can't use Carp, since Carp uses us! @@ -111,6 +111,9 @@ our %Offsets = ( # Warnings Categories added in Perl 5.033 'experimental::try' => 146, + + # Warnings Categories added in Perl 5.035 + 'experimental::defer' => 148, ); our %Bits = ( @@ -124,11 +127,12 @@ 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\x05\x54\x54\x05", # [51..56,58..61,65..67,69..73] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x05\x54\x54\x15", # [51..56,58..61,65..67,69..74] 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [66] '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] 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [65] + 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [74] 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [72] 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [52] 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [55] @@ -201,11 +205,12 @@ 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\x0a\xa8\xa8\x0a", # [51..56,58..61,65..67,69..73] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x0a\xa8\xa8\x2a", # [51..56,58..61,65..67,69..74] 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [66] '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] 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [65] + 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [74] 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [72] 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [52] 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [55] @@ -269,8 +274,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\x15\x54\x54\x05"; # [2,4,22,23,25,52..56,58..62,65..67,69..73] -our $LAST_BIT = 148 ; +our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x15\x54\x54\x15"; # [2,4,22,23,25,52..56,58..62,65..67,69..74] +our $LAST_BIT = 150 ; our $BYTES = 19 ; sub Croaker @@ -876,6 +881,8 @@ The current hierarchy is: | | | +- experimental::declared_refs | | + | +- experimental::defer + | | | +- experimental::isa | | | +- experimental::lexical_subs diff --git a/op.c b/op.c index 0a4f2b803c7c..d93b62a6d653 100644 --- a/op.c +++ b/op.c @@ -10612,6 +10612,43 @@ Perl_newWHENOP(pTHX_ OP *cond, OP *block) return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0); } +/* +=for apidoc newDEFEROP + +Constructs and returns a deferred-block statement that implements the +C semantics. The C optree is consumed by this function and +becomes part of the returned optree. + +The C argument is currently ignored. + +=cut + */ + +OP * +Perl_newDEFEROP(pTHX_ I32 flags, OP *block) +{ + OP *o, *start, *blockfirst; + + PERL_ARGS_ASSERT_NEWDEFEROP; + PERL_UNUSED_ARG(flags); + + start = LINKLIST(block); + + /* Hide the block inside an OP_NULL with no exection */ + block = newUNOP(OP_NULL, 0, block); + block->op_next = block; + + o = (OP *)alloc_LOGOP(OP_PUSHDEFER, block, start); + o->op_flags |= OPf_WANT_VOID; + + /* Terminate the block */ + blockfirst = cUNOPx(block)->op_first; + assert(blockfirst->op_type == OP_SCOPE || blockfirst->op_type == OP_LEAVE); + blockfirst->op_next = NULL; + + return o; +} + /* must not conflict with SVf_UTF8 */ #define CV_CKPROTO_CURSTASH 0x1 @@ -17748,6 +17785,7 @@ Perl_rpeep(pTHX_ OP *o) case OP_OR: case OP_DOR: case OP_CMPCHAIN_AND: + case OP_PUSHDEFER: while (cLOGOP->op_other->op_type == OP_NULL) cLOGOP->op_other = cLOGOP->op_other->op_next; while (o->op_next && ( o->op_type == o->op_next->op_type diff --git a/opcode.h b/opcode.h index a1e7670f1580..2fadc692ffbb 100644 --- a/opcode.h +++ b/opcode.h @@ -553,6 +553,7 @@ EXTCONST char* const PL_op_name[] = { "leavetrycatch", "poptry", "catch", + "pushdefer", "freed", }; #endif @@ -965,6 +966,7 @@ EXTCONST char* const PL_op_desc[] = { "try {block} exit", "pop try", "catch {} block", + "push defer {} block", "freed op", }; #endif @@ -1380,6 +1382,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_leavetrycatch, Perl_pp_poptry, Perl_pp_catch, + Perl_pp_pushdefer, } #endif ; @@ -1791,6 +1794,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_null, /* leavetrycatch */ Perl_ck_null, /* poptry */ Perl_ck_null, /* catch */ + Perl_ck_null, /* pushdefer */ } #endif ; @@ -2203,6 +2207,7 @@ EXTCONST U32 PL_opargs[] = { 0x00000400, /* leavetrycatch */ 0x00000400, /* poptry */ 0x00000300, /* catch */ + 0x00000300, /* pushdefer */ }; #endif @@ -2870,6 +2875,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { -1, /* leavetrycatch */ -1, /* poptry */ 0, /* catch */ + 0, /* pushdefer */ }; @@ -2888,7 +2894,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, entertrycatch, catch */ + 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, entertrycatch, catch, pushdefer */ 0x2fdc, 0x40d9, /* pushmark */ 0x00bd, /* wantarray, runcv */ 0x0438, 0x1a50, 0x418c, 0x3d28, 0x3505, /* const */ @@ -3370,6 +3376,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* LEAVETRYCATCH */ (0), /* POPTRY */ (0), /* CATCH */ (OPpARG1_MASK), + /* PUSHDEFER */ (OPpARG1_MASK), }; diff --git a/opnames.h b/opnames.h index f6c1552a52a9..a78baab59133 100644 --- a/opnames.h +++ b/opnames.h @@ -418,10 +418,11 @@ typedef enum opcode { OP_LEAVETRYCATCH = 401, OP_POPTRY = 402, OP_CATCH = 403, + OP_PUSHDEFER = 404, OP_max } opcode; -#define MAXO 404 +#define MAXO 405 #define OP_FREED MAXO /* the OP_IS_* macros are optimized to a simple range check because diff --git a/perl.h b/perl.h index d09cdabfcb05..75bb35eb2585 100644 --- a/perl.h +++ b/perl.h @@ -5288,7 +5288,8 @@ EXTCONST char* const PL_block_type[] = { "SUB", "FORMAT", "EVAL", - "SUBST" + "SUBST", + "DEFER" }; #else EXTCONST char* PL_block_type[]; diff --git a/perly.act b/perly.act index 00192e61d72f..6cd3943690f4 100644 --- a/perly.act +++ b/perly.act @@ -5,7 +5,7 @@ */ case 2: -#line 138 "perly.y" +#line 139 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -14,7 +14,7 @@ case 2: break; case 3: -#line 143 "perly.y" +#line 144 "perly.y" { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; @@ -24,7 +24,7 @@ case 2: break; case 4: -#line 149 "perly.y" +#line 150 "perly.y" { parser->expect = XTERM; (yyval.ival) = 0; @@ -33,7 +33,7 @@ case 2: break; case 5: -#line 154 "perly.y" +#line 155 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -42,7 +42,7 @@ case 2: break; case 6: -#line 159 "perly.y" +#line 160 "perly.y" { parser->expect = XBLOCK; (yyval.ival) = 0; @@ -51,7 +51,7 @@ case 2: break; case 7: -#line 164 "perly.y" +#line 165 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -63,7 +63,7 @@ case 2: break; case 8: -#line 172 "perly.y" +#line 173 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -72,7 +72,7 @@ case 2: break; case 9: -#line 177 "perly.y" +#line 178 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -84,7 +84,7 @@ case 2: break; case 10: -#line 185 "perly.y" +#line 186 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -93,7 +93,7 @@ case 2: break; case 11: -#line 190 "perly.y" +#line 191 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -105,7 +105,7 @@ case 2: break; case 12: -#line 198 "perly.y" +#line 199 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -114,7 +114,7 @@ case 2: break; case 13: -#line 203 "perly.y" +#line 204 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -123,7 +123,7 @@ case 2: break; case 14: -#line 208 "perly.y" +#line 209 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -132,7 +132,7 @@ case 2: break; case 15: -#line 213 "perly.y" +#line 214 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -141,7 +141,7 @@ case 2: break; case 16: -#line 221 "perly.y" +#line 222 "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,7 +150,7 @@ case 2: break; case 17: -#line 229 "perly.y" +#line 230 "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,14 +159,14 @@ case 2: break; case 18: -#line 236 "perly.y" +#line 237 "perly.y" { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 19: -#line 241 "perly.y" +#line 242 "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,20 +175,20 @@ case 2: break; case 20: -#line 248 "perly.y" +#line 249 "perly.y" { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 21: -#line 254 "perly.y" +#line 255 "perly.y" { (yyval.opval) = NULL; } break; case 22: -#line 256 "perly.y" +#line 257 "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)) @@ -198,13 +198,13 @@ case 2: break; case 23: -#line 265 "perly.y" +#line 266 "perly.y" { (yyval.opval) = NULL; } break; case 24: -#line 267 "perly.y" +#line 268 "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)) @@ -214,7 +214,7 @@ case 2: break; case 25: -#line 276 "perly.y" +#line 277 "perly.y" { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -222,13 +222,13 @@ case 2: break; case 26: -#line 280 "perly.y" +#line 281 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 27: -#line 284 "perly.y" +#line 285 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -239,7 +239,7 @@ case 2: break; case 28: -#line 291 "perly.y" +#line 292 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -250,13 +250,13 @@ case 2: break; case 29: -#line 301 "perly.y" +#line 302 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 30: -#line 303 "perly.y" +#line 304 "perly.y" { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -270,7 +270,7 @@ case 2: break; case 31: -#line 315 "perly.y" +#line 316 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -280,7 +280,7 @@ case 2: break; case 32: -#line 321 "perly.y" +#line 322 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -295,7 +295,7 @@ case 2: break; case 33: -#line 336 "perly.y" +#line 337 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -305,7 +305,7 @@ case 2: break; case 34: -#line 342 "perly.y" +#line 343 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-4].val.opval)->op_type == OP_CONST @@ -320,7 +320,7 @@ case 2: break; case 35: -#line 353 "perly.y" +#line 354 "perly.y" { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) @@ -331,13 +331,13 @@ case 2: break; case 36: -#line 360 "perly.y" +#line 361 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 37: -#line 362 "perly.y" +#line 363 "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)); @@ -348,7 +348,7 @@ case 2: break; case 38: -#line 369 "perly.y" +#line 370 "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))); @@ -358,7 +358,7 @@ case 2: break; case 39: -#line 375 "perly.y" +#line 376 "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)))); @@ -368,7 +368,7 @@ case 2: break; case 40: -#line 381 "perly.y" +#line 382 "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,19 +377,19 @@ case 2: break; case 41: -#line 386 "perly.y" +#line 387 "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 388 "perly.y" +#line 389 "perly.y" { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; case 43: -#line 390 "perly.y" +#line 391 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -400,7 +400,7 @@ case 2: break; case 44: -#line 397 "perly.y" +#line 398 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -411,19 +411,19 @@ case 2: break; case 45: -#line 404 "perly.y" +#line 405 "perly.y" { parser->expect = XTERM; } break; case 46: -#line 406 "perly.y" +#line 407 "perly.y" { parser->expect = XTERM; } break; case 47: -#line 409 "perly.y" +#line 410 "perly.y" { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, @@ -442,7 +442,7 @@ case 2: break; case 48: -#line 424 "perly.y" +#line 425 "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,7 +451,7 @@ case 2: break; case 49: -#line 429 "perly.y" +#line 430 "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))); @@ -461,13 +461,13 @@ case 2: break; case 50: -#line 435 "perly.y" +#line 436 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 51: -#line 437 "perly.y" +#line 438 "perly.y" { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -484,7 +484,7 @@ case 2: break; case 52: -#line 450 "perly.y" +#line 451 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, @@ -496,7 +496,7 @@ case 2: break; case 53: -#line 458 "perly.y" +#line 459 "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))); @@ -506,19 +506,19 @@ case 2: break; case 54: -#line 464 "perly.y" +#line 465 "perly.y" { parser->in_my = 1; } break; case 55: -#line 466 "perly.y" +#line 467 "perly.y" { parser->in_my = 0; intro_my(); } break; case 56: -#line 468 "perly.y" +#line 469 "perly.y" { (yyval.opval) = newTRYCATCHOP(0, (ps[-8].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[0].val.opval)))); @@ -527,7 +527,7 @@ case 2: break; case 57: -#line 473 "perly.y" +#line 474 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -537,7 +537,7 @@ case 2: break; case 58: -#line 479 "perly.y" +#line 480 "perly.y" { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { @@ -548,7 +548,7 @@ case 2: break; case 59: -#line 486 "perly.y" +#line 487 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -560,7 +560,7 @@ case 2: break; case 60: -#line 494 "perly.y" +#line 495 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -568,16 +568,24 @@ case 2: break; case 61: -#line 498 "perly.y" +#line 499 "perly.y" { - (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), - newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); + (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); } break; case 62: #line 503 "perly.y" + { + (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), + newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); + } + + break; + + case 63: +#line 508 "perly.y" { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -585,8 +593,8 @@ case 2: break; - case 63: -#line 511 "perly.y" + case 64: +#line 516 "perly.y" { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -604,75 +612,75 @@ case 2: break; - case 64: -#line 528 "perly.y" + case 65: +#line 533 "perly.y" { (yyval.opval) = NULL; } break; - case 65: -#line 530 "perly.y" + case 66: +#line 535 "perly.y" { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; - case 67: -#line 538 "perly.y" + case 68: +#line 543 "perly.y" { (yyval.opval) = NULL; } break; - case 68: -#line 540 "perly.y" + case 69: +#line 545 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 69: -#line 542 "perly.y" + case 70: +#line 547 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 70: -#line 544 "perly.y" + case 71: +#line 549 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 71: -#line 546 "perly.y" + case 72: +#line 551 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; - case 72: -#line 548 "perly.y" + case 73: +#line 553 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 73: -#line 550 "perly.y" + case 74: +#line 555 "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 553 "perly.y" + case 75: +#line 558 "perly.y" { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; - case 75: -#line 558 "perly.y" + case 76: +#line 563 "perly.y" { (yyval.opval) = NULL; } break; - case 76: -#line 560 "perly.y" + case 77: +#line 565 "perly.y" { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -680,8 +688,8 @@ case 2: break; - case 77: -#line 565 "perly.y" + case 78: +#line 570 "perly.y" { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -691,153 +699,153 @@ case 2: break; - case 78: -#line 575 "perly.y" + case 79: +#line 580 "perly.y" { (yyval.opval) = NULL; } break; - case 79: -#line 577 "perly.y" + case 80: +#line 582 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 80: -#line 582 "perly.y" + case 81: +#line 587 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } break; - case 81: -#line 588 "perly.y" + case 82: +#line 593 "perly.y" { (yyval.opval) = NULL; } break; - case 83: -#line 594 "perly.y" + case 84: +#line 599 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } break; - case 85: -#line 602 "perly.y" - { (yyval.opval) = invert(scalar((ps[0].val.opval))); } - - break; - case 86: #line 607 "perly.y" - { (yyval.opval) = (ps[0].val.opval); intro_my(); } + { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 87: -#line 611 "perly.y" +#line 612 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 88: -#line 614 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 616 "perly.y" + { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 89: -#line 615 "perly.y" - { (yyval.opval) = NULL; } +#line 619 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 90: -#line 619 "perly.y" - { (yyval.ival) = start_subparse(FALSE, 0); - SAVEFREESV(PL_compcv); } +#line 620 "perly.y" + { (yyval.opval) = NULL; } break; case 91: -#line 625 "perly.y" - { (yyval.ival) = start_subparse(FALSE, CVf_ANON); +#line 624 "perly.y" + { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 92: #line 630 "perly.y" - { (yyval.ival) = start_subparse(TRUE, 0); + { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; - case 95: -#line 641 "perly.y" - { (yyval.opval) = NULL; } + case 93: +#line 635 "perly.y" + { (yyval.ival) = start_subparse(TRUE, 0); + SAVEFREESV(PL_compcv); } break; - case 97: -#line 647 "perly.y" + case 96: +#line 646 "perly.y" { (yyval.opval) = NULL; } break; case 98: -#line 649 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 652 "perly.y" + { (yyval.opval) = NULL; } break; case 99: -#line 651 "perly.y" - { (yyval.opval) = NULL; } +#line 654 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 100: #line 656 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } + { (yyval.opval) = NULL; } break; case 101: -#line 658 "perly.y" - { (yyval.opval) = NULL; } +#line 661 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 102: -#line 669 "perly.y" - { parser->in_my = 0; (yyval.opval) = NULL; } +#line 663 "perly.y" + { (yyval.opval) = NULL; } break; case 103: -#line 671 "perly.y" - { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } +#line 674 "perly.y" + { parser->in_my = 0; (yyval.opval) = NULL; } break; case 104: #line 676 "perly.y" - { (yyval.ival) = '@'; } + { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; case 105: -#line 678 "perly.y" - { (yyval.ival) = '%'; } +#line 681 "perly.y" + { (yyval.ival) = '@'; } break; case 106: -#line 682 "perly.y" +#line 683 "perly.y" + { (yyval.ival) = '%'; } + + break; + + case 107: +#line 687 "perly.y" { I32 sigil = (ps[-2].val.ival); OP *var = (ps[-1].val.opval); @@ -856,26 +864,26 @@ case 2: break; - case 107: -#line 701 "perly.y" + case 108: +#line 706 "perly.y" { (yyval.opval) = NULL; } break; - case 108: -#line 703 "perly.y" + case 109: +#line 708 "perly.y" { (yyval.opval) = newOP(OP_NULL, 0); } break; - case 109: -#line 705 "perly.y" + case 110: +#line 710 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 110: -#line 711 "perly.y" + case 111: +#line 716 "perly.y" { OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -939,70 +947,70 @@ case 2: break; - case 111: -#line 776 "perly.y" + case 112: +#line 781 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 112: -#line 778 "perly.y" + case 113: +#line 783 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 113: -#line 784 "perly.y" + case 114: +#line 789 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 114: -#line 786 "perly.y" + case 115: +#line 791 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 115: -#line 790 "perly.y" + case 116: +#line 795 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 116: -#line 795 "perly.y" + case 117: +#line 800 "perly.y" { (yyval.opval) = NULL; } break; - case 117: -#line 797 "perly.y" + case 118: +#line 802 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 118: -#line 801 "perly.y" + case 119: +#line 806 "perly.y" { (yyval.opval) = NULL; } break; - case 119: -#line 803 "perly.y" + case 120: +#line 808 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 120: -#line 807 "perly.y" + case 121: +#line 812 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 121: -#line 810 "perly.y" + case 122: +#line 815 "perly.y" { ENTER; SAVEIV(parser->sig_elems); @@ -1016,8 +1024,8 @@ case 2: break; - case 122: -#line 821 "perly.y" + case 123: +#line 826 "perly.y" { OP *sigops = (ps[0].val.opval); struct op_argcheck_aux *aux; @@ -1075,20 +1083,20 @@ case 2: break; - case 123: -#line 878 "perly.y" + case 124: +#line 883 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 124: -#line 879 "perly.y" + case 125: +#line 884 "perly.y" { (yyval.opval) = NULL; } break; - case 125: -#line 885 "perly.y" + case 126: +#line 890 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1097,20 +1105,20 @@ case 2: break; - case 126: -#line 895 "perly.y" + case 127: +#line 900 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 127: -#line 896 "perly.y" + case 128: +#line 901 "perly.y" { (yyval.opval) = NULL; } break; - case 128: -#line 900 "perly.y" + case 129: +#line 905 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1120,26 +1128,26 @@ case 2: break; - case 129: -#line 911 "perly.y" + case 130: +#line 916 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 130: -#line 913 "perly.y" + case 131: +#line 918 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 132: -#line 919 "perly.y" + case 133: +#line 924 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 133: -#line 921 "perly.y" + case 134: +#line 926 "perly.y" { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1147,24 +1155,24 @@ case 2: break; - case 135: -#line 930 "perly.y" + case 136: +#line 935 "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 136: -#line 934 "perly.y" + case 137: +#line 939 "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 137: -#line 938 "perly.y" + case 138: +#line 943 "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)), @@ -1173,8 +1181,8 @@ case 2: break; - case 138: -#line 944 "perly.y" + case 139: +#line 949 "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)))); @@ -1182,8 +1190,8 @@ case 2: break; - case 139: -#line 949 "perly.y" + case 140: +#line 954 "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)), @@ -1192,8 +1200,8 @@ case 2: break; - case 140: -#line 955 "perly.y" + case 141: +#line 960 "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)), @@ -1202,33 +1210,33 @@ case 2: break; - case 141: -#line 961 "perly.y" + case 142: +#line 966 "perly.y" { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 142: -#line 963 "perly.y" + case 143: +#line 968 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 143: -#line 965 "perly.y" + case 144: +#line 970 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 144: -#line 967 "perly.y" + case 145: +#line 972 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); } break; - case 145: -#line 970 "perly.y" + case 146: +#line 975 "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))); @@ -1236,21 +1244,21 @@ case 2: break; - case 148: -#line 985 "perly.y" + case 149: +#line 990 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; - case 149: -#line 987 "perly.y" + case 150: +#line 992 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; - case 150: -#line 990 "perly.y" + case 151: +#line 995 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1258,8 +1266,8 @@ case 2: break; - case 151: -#line 995 "perly.y" + case 152: +#line 1000 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1267,31 +1275,31 @@ case 2: break; - case 152: -#line 1000 "perly.y" + case 153: +#line 1005 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; - case 153: -#line 1003 "perly.y" + case 154: +#line 1008 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 154: -#line 1007 "perly.y" + case 155: +#line 1012 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 155: -#line 1011 "perly.y" + case 156: +#line 1016 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1300,8 +1308,8 @@ case 2: break; - case 156: -#line 1017 "perly.y" + case 157: +#line 1022 "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))))); @@ -1311,8 +1319,8 @@ case 2: break; - case 157: -#line 1025 "perly.y" + case 158: +#line 1030 "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))))); @@ -1322,8 +1330,8 @@ case 2: break; - case 158: -#line 1032 "perly.y" + case 159: +#line 1037 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1332,38 +1340,38 @@ case 2: break; - case 159: -#line 1038 "perly.y" + case 160: +#line 1043 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; - case 160: -#line 1040 "perly.y" + case 161: +#line 1045 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; - case 161: -#line 1042 "perly.y" + case 162: +#line 1047 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; - case 162: -#line 1047 "perly.y" + case 163: +#line 1052 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; - case 163: -#line 1049 "perly.y" + case 164: +#line 1054 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 164: -#line 1051 "perly.y" + case 165: +#line 1056 "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))); @@ -1371,184 +1379,184 @@ case 2: break; - case 165: -#line 1056 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } - - break; - case 166: -#line 1058 "perly.y" +#line 1061 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 167: -#line 1060 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1063 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 168: -#line 1062 "perly.y" +#line 1065 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 169: -#line 1064 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1067 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 170: -#line 1066 "perly.y" +#line 1069 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 171: -#line 1068 "perly.y" - { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1071 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 172: -#line 1070 "perly.y" - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1073 "perly.y" + { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 173: -#line 1072 "perly.y" - { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1075 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 174: -#line 1074 "perly.y" - { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1077 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 175: -#line 1076 "perly.y" - { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1079 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 176: -#line 1080 "perly.y" - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1081 "perly.y" + { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 177: -#line 1082 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1085 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 178: -#line 1084 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1087 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 179: -#line 1086 "perly.y" +#line 1089 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 180: -#line 1090 "perly.y" - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1091 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 181: -#line 1092 "perly.y" - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1095 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 182: -#line 1096 "perly.y" - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1097 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 183: -#line 1098 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1101 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 184: -#line 1100 "perly.y" - { yyerror("syntax error"); YYERROR; } +#line 1103 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 185: -#line 1102 "perly.y" +#line 1105 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 186: -#line 1106 "perly.y" - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1107 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 187: -#line 1108 "perly.y" - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1111 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 188: #line 1113 "perly.y" - { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 189: -#line 1115 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1118 "perly.y" + { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 190: -#line 1118 "perly.y" - { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } +#line 1120 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 191: -#line 1120 "perly.y" - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } +#line 1123 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 192: -#line 1122 "perly.y" +#line 1125 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } + + break; + + case 193: +#line 1127 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; - case 193: -#line 1125 "perly.y" + case 194: +#line 1130 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; - case 194: -#line 1128 "perly.y" + case 195: +#line 1133 "perly.y" { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1562,156 +1570,156 @@ case 2: break; - case 195: -#line 1139 "perly.y" + case 196: +#line 1144 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; - case 196: -#line 1142 "perly.y" + case 197: +#line 1147 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; - case 197: -#line 1149 "perly.y" + case 198: +#line 1154 "perly.y" { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; - case 198: -#line 1151 "perly.y" + case 199: +#line 1156 "perly.y" { (yyval.opval) = newANONLIST(NULL);} break; - case 199: -#line 1153 "perly.y" + case 200: +#line 1158 "perly.y" { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; - case 200: -#line 1155 "perly.y" + case 201: +#line 1160 "perly.y" { (yyval.opval) = newANONHASH(NULL); } break; - case 201: -#line 1157 "perly.y" + case 202: +#line 1162 "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 202: -#line 1160 "perly.y" + case 203: +#line 1165 "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 203: -#line 1166 "perly.y" + case 204: +#line 1171 "perly.y" { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 204: -#line 1168 "perly.y" + case 205: +#line 1173 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; - case 209: -#line 1176 "perly.y" - { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } - - break; - case 210: -#line 1178 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } +#line 1181 "perly.y" + { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 211: -#line 1180 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } +#line 1183 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 212: -#line 1182 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1185 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 213: -#line 1184 "perly.y" - { (yyval.opval) = localize((ps[0].val.opval),0); } +#line 1187 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 214: -#line 1186 "perly.y" - { (yyval.opval) = sawparens((ps[-1].val.opval)); } +#line 1189 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 215: -#line 1188 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1191 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 216: -#line 1190 "perly.y" - { (yyval.opval) = sawparens(newNULLLIST()); } +#line 1193 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 217: -#line 1192 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1195 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 218: -#line 1194 "perly.y" +#line 1197 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 219: -#line 1196 "perly.y" +#line 1199 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 220: -#line 1198 "perly.y" +#line 1201 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 221: -#line 1200 "perly.y" - { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} +#line 1203 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 222: -#line 1202 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1205 "perly.y" + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; case 223: -#line 1204 "perly.y" +#line 1207 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 224: +#line 1209 "perly.y" { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1724,8 +1732,8 @@ case 2: break; - case 224: -#line 1214 "perly.y" + case 225: +#line 1219 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1738,8 +1746,8 @@ case 2: break; - case 225: -#line 1224 "perly.y" + case 226: +#line 1229 "perly.y" { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1752,8 +1760,8 @@ case 2: break; - case 226: -#line 1234 "perly.y" + case 227: +#line 1239 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1766,27 +1774,27 @@ case 2: break; - case 227: -#line 1244 "perly.y" + case 228: +#line 1249 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 228: -#line 1246 "perly.y" + case 229: +#line 1251 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 229: -#line 1248 "perly.y" + case 230: +#line 1253 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 230: -#line 1251 "perly.y" + case 231: +#line 1256 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1794,153 +1802,153 @@ case 2: break; - case 231: -#line 1256 "perly.y" + case 232: +#line 1261 "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 232: -#line 1260 "perly.y" + case 233: +#line 1265 "perly.y" { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; - case 233: -#line 1262 "perly.y" + case 234: +#line 1267 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 234: -#line 1264 "perly.y" + case 235: +#line 1269 "perly.y" { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; - case 235: -#line 1266 "perly.y" + case 236: +#line 1271 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; - case 236: -#line 1269 "perly.y" + case 237: +#line 1274 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; - case 237: -#line 1271 "perly.y" + case 238: +#line 1276 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; - case 238: -#line 1274 "perly.y" + case 239: +#line 1279 "perly.y" { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 239: -#line 1276 "perly.y" + case 240: +#line 1281 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 240: -#line 1278 "perly.y" + case 241: +#line 1283 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 241: -#line 1280 "perly.y" + case 242: +#line 1285 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 242: -#line 1282 "perly.y" + case 243: +#line 1287 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 243: -#line 1284 "perly.y" + case 244: +#line 1289 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; - case 244: -#line 1286 "perly.y" + case 245: +#line 1291 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; - case 245: -#line 1288 "perly.y" + case 246: +#line 1293 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 246: -#line 1290 "perly.y" + case 247: +#line 1295 "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 1293 "perly.y" + case 248: +#line 1298 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 248: -#line 1295 "perly.y" + case 249: +#line 1300 "perly.y" { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; - case 249: -#line 1297 "perly.y" + case 250: +#line 1302 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 250: -#line 1299 "perly.y" + case 251: +#line 1304 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; - case 251: -#line 1301 "perly.y" + case 252: +#line 1306 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 252: -#line 1303 "perly.y" + case 253: +#line 1308 "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 253: -#line 1307 "perly.y" + case 254: +#line 1312 "perly.y" { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 254: -#line 1309 "perly.y" + case 255: +#line 1314 "perly.y" { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -1954,186 +1962,186 @@ case 2: break; - case 255: -#line 1320 "perly.y" + case 256: +#line 1325 "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 1328 "perly.y" - { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } - - break; - case 260: -#line 1330 "perly.y" - { (yyval.opval) = localize((ps[0].val.opval),1); } +#line 1333 "perly.y" + { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 261: -#line 1332 "perly.y" - { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } +#line 1335 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 262: #line 1337 "perly.y" - { (yyval.opval) = sawparens((ps[-1].val.opval)); } + { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 263: -#line 1339 "perly.y" - { (yyval.opval) = sawparens(newNULLLIST()); } +#line 1342 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 264: -#line 1342 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1344 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 265: -#line 1344 "perly.y" +#line 1347 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 266: -#line 1346 "perly.y" +#line 1349 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 267: #line 1351 "perly.y" - { (yyval.opval) = NULL; } + { (yyval.opval) = (ps[0].val.opval); } break; case 268: -#line 1353 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1356 "perly.y" + { (yyval.opval) = NULL; } break; case 269: -#line 1357 "perly.y" - { (yyval.opval) = NULL; } +#line 1358 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 270: -#line 1359 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1362 "perly.y" + { (yyval.opval) = NULL; } break; case 271: -#line 1363 "perly.y" - { (yyval.opval) = NULL; } +#line 1364 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 272: -#line 1365 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } +#line 1368 "perly.y" + { (yyval.opval) = NULL; } break; case 273: -#line 1371 "perly.y" +#line 1370 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 274: +#line 1376 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; - case 281: -#line 1388 "perly.y" + case 282: +#line 1393 "perly.y" { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 282: -#line 1392 "perly.y" + case 283: +#line 1397 "perly.y" { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; - case 283: -#line 1396 "perly.y" + case 284: +#line 1401 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 284: -#line 1402 "perly.y" + case 285: +#line 1407 "perly.y" { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 285: -#line 1408 "perly.y" + case 286: +#line 1413 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 286: -#line 1410 "perly.y" + case 287: +#line 1415 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 287: -#line 1414 "perly.y" + case 288: +#line 1419 "perly.y" { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 289: -#line 1419 "perly.y" + case 290: +#line 1424 "perly.y" { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 291: -#line 1424 "perly.y" + case 292: +#line 1429 "perly.y" { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; - case 293: -#line 1429 "perly.y" + case 294: +#line 1434 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; - case 294: -#line 1434 "perly.y" + case 295: +#line 1439 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 295: -#line 1436 "perly.y" + case 296: +#line 1441 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 296: -#line 1438 "perly.y" + case 297: +#line 1443 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 297: -#line 1441 "perly.y" + case 298: +#line 1446 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; @@ -2144,6 +2152,6 @@ case 2: /* Generated from: - * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y + * 3759c9ee4ef2ae2879c32641e36adc50c85c0dc40dd6283752cdcac7e736fa5f perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/perly.h b/perly.h index e7917e4c404c..4dcd5eea05fe 100644 --- a/perly.h +++ b/perly.h @@ -135,37 +135,38 @@ extern int yydebug; 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 + DEFER = 337, + PREC_LOW = 338, + OROP = 339, + ANDOP = 340, + NOTOP = 341, + ASSIGNOP = 342, + PERLY_QUESTION_MARK = 343, + PERLY_COLON = 344, + OROR = 345, + DORDOR = 346, + ANDAND = 347, + BITOROP = 348, + BITANDOP = 349, + CHEQOP = 350, + NCEQOP = 351, + CHRELOP = 352, + NCRELOP = 353, + SHIFTOP = 354, + MATCHOP = 355, + PERLY_EXCLAMATION_MARK = 356, + PERLY_TILDE = 357, + UMINUS = 358, + REFGEN = 359, + POWOP = 360, + PREINC = 361, + PREDEC = 362, + POSTINC = 363, + POSTDEC = 364, + POSTJOIN = 365, + ARROW = 366, + PERLY_PAREN_CLOSE = 367, + PERLY_PAREN_OPEN = 368 }; #endif @@ -218,6 +219,6 @@ int yyparse (void); /* Generated from: - * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y + * 3759c9ee4ef2ae2879c32641e36adc50c85c0dc40dd6283752cdcac7e736fa5f perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/perly.tab b/perly.tab index 91a88c5c4b64..eba44eeca1ff 100644 --- a/perly.tab +++ b/perly.tab @@ -6,19 +6,19 @@ #define YYFINAL 16 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3177 +#define YYLAST 3245 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 113 +#define YYNTOKENS 114 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 99 /* YYNRULES -- Number of rules. */ -#define YYNRULES 297 +#define YYNRULES 298 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 581 +#define YYNSTATES 583 #define YYUNDEFTOK 2 -#define YYMAXUTOK 367 +#define YYMAXUTOK 368 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -65,43 +65,43 @@ static const yytype_uint8 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, 111, 112 + 105, 106, 107, 108, 109, 110, 111, 112, 113 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 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, 472, 479, 478, - 493, 497, 502, 510, 527, 529, 533, 537, 539, 541, - 543, 545, 547, 549, 552, 557, 559, 564, 574, 576, - 581, 587, 589, 593, 597, 601, 606, 610, 614, 615, - 618, 624, 629, 635, 636, 640, 642, 646, 648, 650, - 655, 657, 668, 670, 675, 677, 681, 700, 702, 704, - 710, 775, 777, 783, 785, 789, 794, 796, 800, 802, - 806, 810, 810, 878, 879, 884, 895, 896, 899, 910, - 912, 914, 918, 920, 925, 929, 933, 937, 943, 948, - 954, 960, 962, 964, 967, 966, 977, 978, 982, 986, - 989, 994, 999, 1002, 1006, 1010, 1016, 1024, 1031, 1037, - 1039, 1041, 1046, 1048, 1050, 1055, 1057, 1059, 1061, 1063, - 1065, 1067, 1069, 1071, 1073, 1075, 1079, 1081, 1083, 1085, - 1089, 1091, 1095, 1097, 1099, 1101, 1105, 1107, 1112, 1114, - 1117, 1119, 1121, 1124, 1127, 1138, 1141, 1148, 1150, 1152, - 1154, 1156, 1159, 1165, 1167, 1171, 1172, 1173, 1174, 1175, - 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, - 1197, 1199, 1201, 1203, 1213, 1223, 1233, 1243, 1245, 1247, - 1250, 1255, 1259, 1261, 1263, 1265, 1268, 1270, 1273, 1275, - 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1292, 1294, 1296, - 1298, 1300, 1302, 1306, 1309, 1308, 1321, 1322, 1323, 1327, - 1329, 1331, 1336, 1338, 1341, 1343, 1345, 1350, 1352, 1356, - 1358, 1362, 1364, 1370, 1374, 1375, 1376, 1379, 1380, 1383, - 1384, 1387, 1391, 1395, 1401, 1407, 1409, 1413, 1417, 1418, - 1422, 1423, 1427, 1428, 1433, 1435, 1437, 1440 + 0, 139, 139, 138, 150, 149, 160, 159, 173, 172, + 186, 185, 199, 198, 209, 208, 221, 229, 236, 241, + 248, 254, 256, 265, 267, 276, 280, 284, 291, 301, + 303, 316, 313, 337, 332, 353, 361, 360, 369, 375, + 381, 386, 388, 390, 397, 405, 407, 404, 424, 429, + 436, 435, 450, 458, 465, 467, 464, 473, 480, 479, + 494, 498, 502, 507, 515, 532, 534, 538, 542, 544, + 546, 548, 550, 552, 554, 557, 562, 564, 569, 579, + 581, 586, 592, 594, 598, 602, 606, 611, 615, 619, + 620, 623, 629, 634, 640, 641, 645, 647, 651, 653, + 655, 660, 662, 673, 675, 680, 682, 686, 705, 707, + 709, 715, 780, 782, 788, 790, 794, 799, 801, 805, + 807, 811, 815, 815, 883, 884, 889, 900, 901, 904, + 915, 917, 919, 923, 925, 930, 934, 938, 942, 948, + 953, 959, 965, 967, 969, 972, 971, 982, 983, 987, + 991, 994, 999, 1004, 1007, 1011, 1015, 1021, 1029, 1036, + 1042, 1044, 1046, 1051, 1053, 1055, 1060, 1062, 1064, 1066, + 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1084, 1086, 1088, + 1090, 1094, 1096, 1100, 1102, 1104, 1106, 1110, 1112, 1117, + 1119, 1122, 1124, 1126, 1129, 1132, 1143, 1146, 1153, 1155, + 1157, 1159, 1161, 1164, 1170, 1172, 1176, 1177, 1178, 1179, + 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, + 1200, 1202, 1204, 1206, 1208, 1218, 1228, 1238, 1248, 1250, + 1252, 1255, 1260, 1264, 1266, 1268, 1270, 1273, 1275, 1278, + 1280, 1282, 1284, 1286, 1288, 1290, 1292, 1294, 1297, 1299, + 1301, 1303, 1305, 1307, 1311, 1314, 1313, 1326, 1327, 1328, + 1332, 1334, 1336, 1341, 1343, 1346, 1348, 1350, 1355, 1357, + 1361, 1363, 1367, 1369, 1375, 1379, 1380, 1381, 1384, 1385, + 1388, 1389, 1392, 1396, 1400, 1406, 1412, 1414, 1418, 1422, + 1423, 1427, 1428, 1432, 1433, 1438, 1440, 1442, 1445 }; #endif @@ -124,21 +124,21 @@ static const char *const yytname[] = "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", "$@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", + "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND", "DEFER", "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", "$@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", @@ -165,83 +165,83 @@ static const yytype_uint16 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, 366, 367 + 365, 366, 367, 368 }; # endif -#define YYPACT_NINF -482 +#define YYPACT_NINF -488 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-482))) + (!!((Yystate) == (-488))) -#define YYTABLE_NINF -293 +#define YYTABLE_NINF -294 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-293))) + (!!((Yytable_value) == (-294))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 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 + 603, -488, -488, -488, -488, -488, -488, -488, 64, -488, + 3015, 70, 1505, 1407, -488, -488, -488, -488, 277, 2062, + 277, 3015, 277, 3015, 277, 277, -488, 277, 277, -488, + -488, 87, -6, -488, 3015, -488, -488, -488, -488, 3015, + 16, 22, -9, 2160, 1967, 277, 2160, 2255, 75, 3015, + 1, 3015, 3015, 3015, 3015, 3015, 3015, 3015, 2350, 90, + 125, -488, 9, -488, 179, 51, 114, 61, -488, -488, + -488, 471, -488, -488, 38, 43, 176, 248, -488, 157, + 313, 332, 210, -488, -488, -488, -488, -488, -488, 75, + 75, 156, -488, 118, 141, 169, 181, 17, 193, 199, + 70, 227, 219, 227, 283, -488, 250, 635, 1407, -488, + -488, -488, 604, -488, 93, 702, -488, -488, -488, -488, + -488, -488, 14, -488, 298, -488, 298, -488, -488, 3015, + 236, 278, 3015, 263, 396, 70, 333, 297, 471, 267, + 2445, 3015, 1967, -488, 396, 1864, 125, -488, 1763, 3015, + -488, -488, 396, 364, 10, -488, -488, 3015, 396, 3110, + 2540, 303, -488, -488, -488, 396, 125, 298, 298, 298, + 318, 318, 372, 112, 3015, 3015, 3015, 3015, 3015, 2635, + -488, -488, 3015, -488, -488, 3015, 3015, 3015, 3015, 3015, + 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015, + 3015, 3015, 3015, -488, -488, -488, 33, 2730, 3015, 3015, + 3015, 3015, 3015, 3015, 3015, -488, 365, -488, -488, 366, + -488, -488, -488, -488, -488, 296, 229, -488, -488, 289, + -488, -488, -488, -488, 342, -488, -488, 70, -488, -488, + 3015, 3015, 3015, 3015, 3015, 3015, -488, -488, -488, 380, + -488, -488, 380, -488, -488, -488, 397, -488, -488, -488, + 3015, 3015, 27, -488, -488, -488, 297, 384, -488, -488, + -488, 173, 335, 306, 3015, 125, -488, 418, -488, 2825, + 298, 303, 62, 78, 136, -488, 180, 402, -488, 3015, + 420, 349, -488, 471, 123, 31, -488, 183, 396, 222, + 273, 587, 441, 471, 425, 1797, 1797, 1584, 1950, 1831, + 222, 222, 396, 396, 288, 298, 298, 412, 3015, 3015, + 394, 414, 416, 423, -488, 424, 2920, 338, -488, -488, + 185, 143, 34, 159, 58, 163, 69, 166, 819, -488, + 427, -488, -488, 29, 435, 3015, 3015, 3015, 3015, -488, + 437, -488, -488, 350, -488, -488, -488, -488, 1600, 293, + -488, 3015, 3015, -488, 353, -488, -488, 90, -488, 90, + -488, -488, -488, -488, -488, 375, 375, 93, 355, 32, + -488, 3015, -488, -488, 356, -488, -488, -488, -488, 190, + -488, 49, 195, -488, -488, -488, 74, 3015, 456, -488, + -488, 3015, -488, 171, 79, -488, -488, -488, -488, -488, + -488, 202, 3015, -488, 458, -488, 460, -488, 461, -488, + 462, -488, -488, -488, 333, 297, -488, -488, 450, 367, + 90, 368, 370, 90, 373, 374, -488, -488, -488, -488, + 376, 468, 130, -488, 3015, 379, 385, 917, -488, 3015, + -488, -488, -488, -488, 3015, 417, -488, 488, -488, -488, + 491, -488, -488, 54, -488, 88, -488, 3134, 514, -488, + -488, 391, -488, -488, -488, -488, 505, 297, 506, -488, + 3015, -488, -488, 227, 227, 3015, 3015, 227, -488, 429, + 419, 227, 227, -488, -488, 471, 90, -488, -488, 426, + -488, -488, -488, -488, 464, 507, -488, -488, -488, -488, + 515, 227, 227, 264, 264, 432, 436, 283, 3015, 3015, + 227, -488, -488, 437, 1015, -488, 1113, -488, -488, -488, + -488, 1211, -488, 283, 283, 227, 434, -488, -488, 227, + 227, -488, 532, 443, 283, -488, -488, -488, 128, -488, + -488, -488, -488, 3015, 283, 283, -488, 227, -488, 444, + 540, 494, -488, 463, -488, -488, -488, 283, 227, -488, + -488, -488, 227, 1695, -488, -488, 1309, 264, 466, -488, + -488, 227, -488 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -250,94 +250,94 @@ static const yytype_int16 yypact[] = static const yytype_uint16 yydefact[] = { 0, 2, 4, 6, 8, 10, 12, 14, 0, 18, - 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, + 270, 0, 0, 0, 21, 122, 1, 21, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 0, 228, + 255, 216, 250, 252, 246, 92, 259, 92, 92, 238, + 248, 0, 0, 241, 268, 0, 0, 0, 0, 0, + 0, 244, 0, 0, 0, 0, 0, 0, 0, 271, + 132, 258, 223, 206, 168, 177, 169, 183, 207, 208, + 209, 135, 213, 5, 229, 218, 221, 220, 222, 219, + 0, 0, 0, 18, 7, 68, 63, 29, 93, 0, + 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 9, 0, 69, 0, 11, + 26, 25, 0, 15, 117, 0, 295, 298, 297, 296, + 282, 199, 0, 283, 189, 285, 190, 284, 288, 268, + 0, 0, 0, 0, 247, 0, 96, 98, 239, 0, + 0, 270, 270, 242, 243, 295, 269, 142, 296, 0, + 286, 205, 204, 0, 0, 94, 95, 268, 214, 0, + 0, 261, 265, 267, 266, 245, 240, 191, 192, 211, + 196, 197, 217, 0, 0, 0, 133, 0, 0, 0, + 180, 179, 0, 186, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 + 0, 0, 0, 193, 194, 195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 21, 90, 91, 91, 0, + 36, 18, 18, 18, 18, 18, 0, 18, 18, 0, + 18, 18, 42, 20, 0, 62, 61, 0, 57, 60, + 0, 0, 0, 0, 0, 0, 28, 27, 22, 103, + 106, 105, 103, 113, 112, 116, 118, 123, 198, 140, + 270, 0, 0, 251, 145, 97, 98, 100, 18, 249, + 253, 0, 0, 0, 0, 136, 201, 0, 232, 0, + 212, 0, 218, 221, 220, 264, 0, 102, 260, 0, + 215, 131, 130, 134, 0, 0, 159, 0, 182, 188, + 172, 165, 166, 163, 0, 174, 175, 173, 171, 170, + 187, 184, 181, 178, 167, 176, 164, 0, 0, 0, + 0, 292, 290, 294, 147, 0, 0, 139, 148, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 0, 31, 33, 0, 0, 84, 0, 0, 0, 280, + 0, 281, 278, 0, 279, 275, 276, 277, 0, 0, + 18, 0, 0, 21, 0, 80, 72, 67, 73, 86, + 70, 71, 74, 75, 104, 108, 108, 114, 0, 272, + 161, 268, 18, 99, 119, 203, 254, 144, 143, 0, + 200, 217, 0, 262, 263, 101, 0, 0, 0, 152, + 158, 0, 236, 0, 0, 233, 235, 234, 237, 287, + 156, 0, 270, 231, 0, 150, 0, 224, 0, 225, + 0, 16, 18, 30, 96, 98, 18, 35, 0, 0, + 85, 0, 0, 87, 0, 0, 274, 18, 83, 88, + 0, 0, 69, 50, 0, 0, 0, 0, 54, 109, + 111, 107, 115, 141, 0, 0, 146, 0, 202, 122, + 0, 120, 137, 215, 162, 0, 155, 210, 0, 151, + 157, 0, 153, 226, 227, 149, 0, 98, 18, 58, + 268, 81, 81, 0, 0, 0, 0, 0, 45, 0, + 0, 0, 0, 19, 18, 110, 273, 256, 21, 0, + 21, 160, 154, 138, 0, 18, 128, 34, 127, 21, + 0, 0, 0, 76, 76, 0, 0, 79, 84, 0, + 0, 40, 41, 0, 0, 121, 0, 23, 125, 32, + 124, 0, 37, 79, 79, 0, 0, 38, 39, 0, + 0, 53, 0, 0, 79, 55, 126, 129, 0, 59, + 43, 44, 77, 0, 79, 79, 46, 0, 49, 0, + 0, 65, 24, 0, 48, 52, 81, 79, 0, 17, + 21, 64, 0, 0, 51, 56, 0, 76, 0, 66, + 78, 0, 47 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -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 + -488, -488, -488, -488, -488, -488, -488, -488, -488, 41, + -488, -5, -97, -488, -17, -488, 560, 476, 30, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + 56, -343, -487, -271, -456, -488, 67, 228, -324, 40, + -488, 111, 310, -488, 262, 192, -265, 337, 369, -488, + -488, 243, -488, 245, -488, -488, -488, -488, 168, -488, + -488, 150, -488, 178, -8, -21, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, 401, -488, + -488, 498, -121, -123, -488, -488, 276, -488, -488, 439, + -15, -36, -34, -488, -488, -488, -488, -488, 52 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -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 + -1, 8, 9, 10, 11, 12, 13, 14, 15, 104, + 423, 384, 234, 363, 112, 548, 248, 110, 111, 424, + 425, 344, 518, 566, 489, 494, 559, 509, 562, 571, + 366, 106, 537, 238, 511, 439, 429, 368, 432, 441, + 340, 220, 135, 216, 157, 266, 268, 288, 375, 252, + 253, 450, 254, 255, 256, 257, 460, 461, 113, 114, + 529, 458, 507, 385, 107, 60, 61, 381, 327, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 131, + 72, 161, 147, 73, 455, 435, 352, 353, 228, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 123 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -345,746 +345,760 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 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, - 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, 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, + 115, 382, 59, 119, 17, 119, 236, 119, 259, 119, + 119, 122, 119, 119, 163, 438, 164, 20, 272, 273, + 177, 22, 178, 146, 434, 24, 512, 538, 258, 148, + 119, 166, 277, 20, 440, 162, 278, 445, 446, 154, + 426, 380, 105, 317, 318, 399, 319, 176, 415, 320, + 173, 427, 84, 321, 208, 454, 209, 322, 323, 118, + 324, 118, 289, 118, 16, 118, 118, 397, 118, 118, + 120, 141, 417, 208, 125, 209, 127, 128, 215, 129, + 130, 83, 229, 419, 143, 118, 118, 151, 464, -289, + 580, -289, 225, 469, 174, 175, 149, 150, 174, 175, + 132, 155, 501, 325, 142, 159, 156, 133, 146, 249, + 573, 174, 175, 250, 160, 174, 175, 251, 174, 175, + 490, 226, 179, 283, 262, 284, -264, 148, 275, 139, + 227, -263, 271, 59, 59, 140, 146, 378, 247, -265, + 176, 232, 174, 175, 282, 398, 326, -291, 182, -291, + 560, 207, 286, 174, 175, -267, 185, 561, 174, 175, + 478, 515, 516, 174, 175, 414, 291, 292, -293, 294, + 295, 297, 174, 175, 174, 175, 264, 240, 241, 242, + 243, 416, 219, 118, 244, 418, 245, -289, 420, -289, + 356, 328, 357, 468, 274, 543, 174, 175, 338, 330, + 331, 332, 333, 334, 335, 336, 337, 174, 175, 183, + 184, 355, 505, -266, 174, 175, 345, 346, 347, 348, + 350, 214, 358, 359, 290, 361, 362, 174, 175, 563, + 438, 221, 367, 369, 367, 367, 367, 367, 233, 18, + 379, 235, -87, 174, 175, 20, 541, 174, 175, 22, + 174, 175, 59, 24, 222, 174, 175, 174, 175, -291, + 456, -291, 550, 551, 174, 175, 389, 174, 175, 174, + 175, 392, 239, 558, 174, 175, 180, 181, 365, 174, + 175, 396, 223, 564, 565, 386, 174, 175, 83, 471, + 187, 188, 394, 20, 224, 400, 574, 413, 370, 371, + 372, 373, 462, 116, 351, 119, 230, 463, 117, 20, + 403, 404, 231, 22, 470, 535, 536, 24, 411, 198, + 199, 200, 201, 356, 210, 357, 211, 202, 341, 342, + 203, 204, 205, 206, -294, 436, 237, 430, 369, 433, + 433, 187, 188, 212, 355, 213, 447, 136, 137, 260, + 442, 217, 218, 433, 433, 444, 187, 188, 261, 510, + 146, 118, 265, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 267, 263, 276, 457, 202, 269, + 287, 203, 204, 205, 206, 289, 513, 514, 201, 465, + 517, 339, 343, 202, 521, 522, 203, 204, 205, 206, + 349, 364, 360, 202, 59, 83, 203, 204, 205, 206, + 20, 374, 377, 383, 533, 534, 387, 476, 388, 405, + 116, 479, 124, 544, 126, 117, -294, -294, -294, 206, + 390, 395, 486, 397, 175, 134, 433, 402, 552, 406, + 138, 407, 554, 555, 144, 422, 496, 152, 408, 409, + 158, 412, 165, 20, 167, 168, 169, 170, 171, 146, + 567, 428, 449, 437, 187, 188, 448, 453, 466, 459, + 472, 575, 473, 474, 475, 577, 480, 433, 433, 481, + 482, 524, 483, 526, 582, 484, 186, 485, 487, 523, + 488, 491, 531, 187, 188, 200, 201, 492, 497, 498, + 457, 202, 500, 503, 203, 204, 205, 206, 545, 187, + 430, 433, 189, 190, 401, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 502, 504, 506, 528, + 202, 520, 186, 203, 204, 205, 206, 532, 525, 187, + 188, 201, 519, 527, 539, 433, 202, 553, 540, 203, + 204, 205, 206, 576, 556, 557, 568, 569, 189, 190, + 280, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 570, 109, 431, 572, 202, 293, 581, 203, + 204, 205, 206, 298, 246, 542, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -13, 85, 1, 2, 3, 4, + 5, 6, 7, 578, 18, 83, 477, 19, 393, 451, + 20, 376, 452, 21, 22, 23, 86, 499, 24, 25, + 26, 27, 28, 29, 30, 443, 31, 32, 33, 34, + 35, 36, 87, 108, 88, 89, 90, 37, 38, 91, + 92, 93, 94, 95, 96, 530, 508, 281, 97, 98, + 99, 100, 101, 0, 39, 354, 102, 40, 41, 42, + 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, + 51, 0, 240, 241, 242, 243, 103, 201, 0, 244, + 52, 245, 202, 0, 0, 203, 204, 205, 206, 0, + 0, 0, -3, 85, 0, 53, 54, 0, 55, 0, + 56, 57, 18, 83, 0, 19, 0, 58, 20, 174, + 175, 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, + 87, 108, 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, 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, + 0, 0, 0, 0, 103, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 467, 53, 54, 0, 55, 0, 56, 57, + 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 83, 421, 19, 0, 0, 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, + 495, 31, 32, 33, 34, 35, 36, 87, 108, 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, + 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, + 0, 103, 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, 493, + 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, 108, 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, 103, + 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, 546, 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, 108, 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, 103, 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, 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, + 36, 87, 108, 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, 577, 0, 0, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 0, 103, 0, 0, 0, 52, 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, 85, 0, 53, 54, 0, 55, 0, 56, + 57, 18, 83, 549, 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, + 108, 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, 103, 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, 108, 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, 579, 0, + 0, 103, 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, 0, 88, 89, 90, + 32, 33, 34, 35, 36, 87, 108, 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, 85, 0, 0, 0, + 48, 49, 50, 51, 0, 0, 0, 0, 0, 103, + 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, 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, 103, 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, -82, 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, 187, 188, 0, 0, 0, 0, 0, 0, + 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 194, 195, 196, + 197, 198, 199, 200, 201, 0, 52, 0, 0, 202, + 0, 0, 203, 204, 205, 206, 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, 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, + 42, 43, 44, -218, 0, 45, 46, 47, 48, 49, + 50, 51, 0, 0, 208, 0, 209, -218, -218, 0, + 0, 52, 0, 0, 0, -218, -218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, + 0, 56, 57, 0, 0, 0, 0, -82, 58, 0, + -218, -218, -218, -218, 0, 0, 0, -218, 0, -218, + 0, 0, 0, 0, -218, 0, 0, 0, 0, 0, + 0, -218, -218, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -218, 0, 0, -218, -218, 0, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -257, 187, 188, 0, -218, 0, + 0, -218, -218, -218, -218, -218, 0, 0, -257, -257, + 0, 0, 0, 0, 0, 0, -257, -257, 0, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 0, 187, + 188, 0, 202, 0, 0, 203, 204, 205, 206, 0, + 0, -257, -257, -257, -257, 0, 0, 0, -257, 0, + -257, 0, 0, 0, 0, -257, 196, 197, 198, 199, + 200, 201, -257, -257, 0, 0, 202, 0, 0, 203, + 204, 205, 206, 0, 0, -257, 0, 0, -257, -257, + 0, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, 0, 0, 0, 0, -257, + 0, 0, -257, -257, -257, -257, -257, 18, 83, 0, + 19, 0, 0, 20, 0, 0, 21, 22, 23, 0, + 0, 24, 25, 145, 27, 28, 29, 30, 117, 31, + 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, + 37, 38, 0, 0, 0, 0, 0, 0, 187, 188, + 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, + 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, + 48, 49, 50, 51, 195, 196, 197, 198, 199, 200, + 201, 0, 0, 52, 0, 202, 0, 0, 203, 204, + 205, 206, 0, 0, 0, 0, 0, 0, 53, 54, + 0, 55, 18, 56, 57, 19, 121, 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, 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, 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, 153, 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, 186, 187, + 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, 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, + 50, 51, 0, 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, + 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, 52, 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, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 172, 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, 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, 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, + 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, 270, 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, - 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, - 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, 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, 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, + 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, 0, 52, 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, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 285, 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, 53, 54, 0, 55, 18, 56, 57, 19, - 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, 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, 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, + 18, 56, 57, 19, 0, 0, 20, 296, 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, 52, 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, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 329, 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, 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, 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, + 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, 391, 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, - 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, - 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, + 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, 0, 52, 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, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 410, 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, 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, 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, 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, + 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, - 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 + 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, 186, 52, 0, 0, 0, + 0, 0, 187, 188, 0, 0, 0, 0, 0, 0, + 0, 53, 54, 0, 55, 0, 56, 57, 0, 0, + 0, 0, 190, 279, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 0, 0, 0, 0, 202, + 0, 0, 203, 204, 205, 206 }; static const yytype_int16 yycheck[] = { - 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, + 17, 266, 10, 18, 9, 20, 103, 22, 129, 24, + 25, 19, 27, 28, 50, 358, 50, 16, 141, 142, + 11, 20, 13, 44, 348, 24, 482, 514, 14, 44, + 45, 52, 22, 16, 358, 50, 157, 361, 362, 47, + 11, 14, 12, 10, 11, 14, 13, 15, 14, 16, + 58, 22, 11, 20, 11, 23, 13, 24, 25, 18, + 27, 20, 13, 22, 0, 24, 25, 13, 27, 28, + 18, 80, 14, 11, 22, 13, 24, 25, 83, 27, + 28, 11, 97, 14, 43, 44, 45, 46, 14, 11, + 577, 13, 75, 14, 84, 85, 44, 45, 84, 85, + 13, 26, 14, 70, 113, 104, 31, 113, 129, 16, + 566, 84, 85, 20, 113, 84, 85, 24, 84, 85, + 444, 104, 113, 159, 132, 159, 77, 142, 149, 113, + 113, 77, 140, 141, 142, 113, 157, 260, 108, 77, + 15, 100, 84, 85, 159, 22, 113, 11, 97, 13, + 22, 113, 160, 84, 85, 77, 95, 29, 84, 85, + 425, 485, 486, 84, 85, 22, 174, 175, 11, 177, + 178, 179, 84, 85, 84, 85, 135, 47, 48, 49, + 50, 22, 26, 142, 54, 22, 56, 11, 22, 13, + 226, 206, 226, 22, 142, 519, 84, 85, 215, 207, + 208, 209, 210, 211, 212, 213, 214, 84, 85, 95, + 96, 226, 477, 77, 84, 85, 221, 222, 223, 224, + 225, 11, 227, 228, 112, 230, 231, 84, 85, 553, + 573, 113, 240, 241, 242, 243, 244, 245, 11, 10, + 261, 22, 112, 84, 85, 16, 517, 84, 85, 20, + 84, 85, 260, 24, 113, 84, 85, 84, 85, 11, + 381, 13, 533, 534, 84, 85, 274, 84, 85, 84, + 85, 279, 22, 544, 84, 85, 97, 98, 237, 84, + 85, 289, 113, 554, 555, 112, 84, 85, 11, 412, + 68, 69, 112, 16, 113, 112, 567, 112, 242, 243, + 244, 245, 112, 26, 75, 320, 113, 112, 31, 16, + 318, 319, 113, 20, 112, 51, 52, 24, 326, 97, + 98, 99, 100, 359, 11, 359, 13, 105, 217, 218, + 108, 109, 110, 111, 61, 350, 53, 345, 346, 347, + 348, 68, 69, 11, 359, 13, 363, 37, 38, 113, + 358, 89, 90, 361, 362, 360, 68, 69, 80, 480, + 381, 320, 29, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 77, 112, 12, 382, 105, 112, + 77, 108, 109, 110, 111, 13, 483, 484, 100, 397, + 487, 26, 26, 105, 491, 492, 108, 109, 110, 111, + 104, 59, 113, 105, 412, 11, 108, 109, 110, 111, + 16, 31, 15, 29, 511, 512, 81, 422, 112, 25, + 26, 426, 21, 520, 23, 31, 108, 109, 110, 111, + 12, 29, 437, 13, 85, 34, 444, 25, 535, 25, + 39, 25, 539, 540, 43, 18, 454, 46, 25, 25, + 49, 113, 51, 16, 53, 54, 55, 56, 57, 480, + 557, 26, 87, 113, 68, 69, 113, 112, 12, 113, + 12, 568, 12, 12, 12, 572, 26, 485, 486, 112, + 112, 498, 112, 500, 581, 112, 61, 113, 112, 494, + 22, 112, 509, 68, 69, 99, 100, 112, 81, 11, + 505, 105, 11, 112, 108, 109, 110, 111, 523, 68, + 518, 519, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 12, 22, 22, 22, + 105, 112, 61, 108, 109, 110, 111, 22, 112, 68, + 69, 100, 113, 79, 112, 553, 105, 113, 112, 108, + 109, 110, 111, 570, 22, 112, 112, 17, 87, 88, + 159, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 78, 13, 346, 112, 105, 176, 112, 108, + 109, 110, 111, 182, 108, 518, 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, + 199, 200, 201, 202, 0, 1, 3, 4, 5, 6, + 7, 8, 9, 573, 10, 11, 424, 13, 281, 376, + 16, 252, 377, 19, 20, 21, 22, 459, 24, 25, + 26, 27, 28, 29, 30, 359, 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, 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, + 46, 47, 48, 49, 50, 505, 478, 159, 54, 55, + 56, 57, 58, -1, 60, 226, 62, 63, 64, 65, + 66, 67, -1, -1, 70, 71, 72, 73, 74, 75, + 76, -1, 47, 48, 49, 50, 82, 100, -1, 54, + 86, 56, 105, -1, -1, 108, 109, 110, 111, -1, + -1, -1, 0, 1, -1, 101, 102, -1, 104, -1, + 106, 107, 10, 11, -1, 13, -1, 113, 16, 84, + 85, 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, + 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, 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, + -1, -1, -1, -1, 82, -1, -1, -1, 86, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 401, 101, 102, -1, 104, -1, 106, 107, + -1, -1, -1, -1, -1, 113, -1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + 11, 12, 13, -1, -1, 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, + 449, 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, + 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, + -1, 82, -1, -1, -1, 86, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, + 101, 102, -1, 104, -1, 106, 107, 10, 11, 12, + 13, -1, 113, 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, 82, + -1, -1, -1, 86, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 101, 102, + -1, 104, -1, 106, 107, 10, 11, 12, 13, -1, + 113, 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, 82, -1, -1, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, 101, 102, -1, 104, + -1, 106, 107, 10, 11, 12, 13, -1, 113, 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, 79, -1, -1, -1, -1, -1, 85, -1, + -1, -1, -1, -1, -1, 82, -1, -1, -1, 86, -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, -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, 101, 102, -1, 104, -1, 106, + 107, 10, 11, 12, 13, -1, 113, 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, 82, -1, -1, -1, 86, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, -1, 101, 102, -1, 104, -1, 106, 107, 10, + 11, -1, 13, -1, 113, 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, 79, -1, + -1, 82, -1, -1, -1, 86, -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, + 101, 102, -1, 104, -1, 106, 107, 10, 11, -1, + 13, -1, 113, 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, + 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, 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, 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, + 73, 74, 75, 76, -1, -1, -1, -1, -1, 82, + -1, -1, -1, 86, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, 101, 102, + -1, 104, -1, 106, 107, 10, 11, -1, 13, -1, + 113, 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, -1, 62, 63, 64, + 65, 66, 67, -1, -1, 70, 71, 72, 73, 74, + 75, 76, -1, -1, -1, -1, -1, 82, -1, -1, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, -1, 113, 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, 68, 69, -1, -1, -1, -1, -1, -1, + 60, -1, -1, 63, 64, 65, 66, 67, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, + 96, 97, 98, 99, 100, -1, 86, -1, -1, 105, + -1, -1, 108, 109, 110, 111, 1, -1, -1, -1, + -1, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, -1, 113, 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, 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, + -1, 86, -1, -1, -1, 22, 23, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + -1, 106, 107, -1, -1, -1, -1, 112, 113, -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, + -1, -1, -1, -1, 81, -1, -1, 84, 85, -1, 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, + 97, 98, 99, 100, 0, 68, 69, -1, 105, -1, + -1, 108, 109, 110, 111, 112, -1, -1, 14, 15, + -1, -1, -1, -1, -1, -1, 22, 23, -1, 92, + 93, 94, 95, 96, 97, 98, 99, 100, -1, 68, + 69, -1, 105, -1, -1, 108, 109, 110, 111, -1, + -1, 47, 48, 49, 50, -1, -1, -1, 54, -1, + 56, -1, -1, -1, -1, 61, 95, 96, 97, 98, + 99, 100, 68, 69, -1, -1, 105, -1, -1, 108, + 109, 110, 111, -1, -1, 81, -1, -1, 84, 85, + -1, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, -1, -1, -1, -1, 105, + -1, -1, 108, 109, 110, 111, 112, 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, 68, 69, + -1, -1, -1, -1, -1, -1, -1, 60, -1, -1, + 63, 64, 65, 66, 67, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 94, 95, 96, 97, 98, 99, + 100, -1, -1, 86, -1, 105, -1, -1, 108, 109, + 110, 111, -1, -1, -1, -1, -1, -1, 101, 102, + -1, 104, 10, 106, 107, 13, 14, -1, 16, -1, + 113, 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, -1, 86, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 101, 102, -1, 104, -1, 106, 107, + 10, 11, -1, 13, -1, 113, 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, -1, 86, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, -1, 113, 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, 68, 69, + -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, 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, + 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, -1, 113, 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, 86, -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, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, 112, 113, 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, 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, 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, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, 112, 113, 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, -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, + 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, -1, 86, -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, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, 112, 113, 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, 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, + -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, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, 112, 113, 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, 86, -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, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, 112, 113, 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, 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, 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, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, 112, 113, 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, -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, + 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, -1, 86, -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, 101, 102, -1, 104, 10, 106, 107, 13, -1, + -1, 16, 112, 113, 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, 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, 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, + -1, 86, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, 102, -1, 104, + 10, 106, 107, 13, -1, -1, 16, -1, 113, 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, 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 + 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, 61, 86, -1, -1, -1, + -1, -1, 68, 69, -1, -1, -1, -1, -1, -1, + -1, 101, 102, -1, 104, -1, 106, 107, -1, -1, + -1, -1, 88, 113, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, -1, -1, -1, -1, 105, + -1, -1, 108, 109, 110, 111 }; /* 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, 114, 115, - 116, 117, 118, 119, 120, 121, 0, 124, 10, 13, + 0, 3, 4, 5, 6, 7, 8, 9, 115, 116, + 117, 118, 119, 120, 121, 122, 0, 125, 10, 13, 16, 19, 20, 21, 24, 25, 26, 27, 28, 29, 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, + 75, 76, 86, 101, 102, 104, 106, 107, 113, 178, + 179, 180, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 194, 197, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 11, 123, 1, 22, 38, 40, 41, 42, 45, 46, 47, 48, 49, 50, 54, 55, 56, - 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 + 57, 58, 62, 82, 123, 132, 145, 178, 39, 130, + 131, 132, 128, 172, 173, 128, 26, 31, 123, 204, + 212, 14, 178, 212, 192, 212, 192, 212, 212, 212, + 212, 193, 13, 113, 192, 156, 156, 156, 192, 113, + 113, 80, 113, 123, 192, 26, 179, 196, 204, 212, + 212, 123, 192, 22, 178, 26, 31, 158, 192, 104, + 113, 195, 204, 205, 206, 192, 179, 192, 192, 192, + 192, 192, 112, 178, 84, 85, 15, 11, 13, 113, + 97, 98, 97, 95, 96, 95, 61, 68, 69, 87, + 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 105, 108, 109, 110, 111, 113, 11, 13, + 11, 13, 11, 13, 11, 125, 157, 158, 158, 26, + 155, 113, 113, 113, 113, 75, 104, 113, 202, 204, + 113, 113, 123, 11, 126, 22, 126, 53, 147, 22, + 47, 48, 49, 50, 54, 56, 131, 132, 130, 16, + 20, 24, 163, 164, 166, 167, 168, 169, 14, 196, + 113, 80, 178, 112, 123, 29, 159, 77, 160, 112, + 112, 178, 197, 197, 212, 179, 12, 22, 196, 113, + 192, 195, 204, 205, 206, 112, 178, 77, 161, 13, + 112, 178, 178, 192, 178, 178, 112, 178, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 10, 11, 13, + 16, 20, 24, 25, 27, 70, 113, 182, 204, 112, + 178, 178, 178, 178, 178, 178, 178, 178, 128, 26, + 154, 155, 155, 26, 135, 125, 125, 125, 125, 104, + 125, 75, 200, 201, 203, 204, 205, 206, 125, 125, + 113, 125, 125, 127, 59, 123, 144, 178, 151, 178, + 144, 144, 144, 144, 31, 162, 162, 15, 197, 179, + 14, 181, 160, 29, 125, 177, 112, 81, 112, 178, + 12, 112, 178, 161, 112, 29, 178, 13, 22, 14, + 112, 89, 25, 178, 178, 25, 25, 25, 25, 25, + 112, 178, 113, 112, 22, 14, 22, 14, 22, 14, + 22, 12, 18, 124, 133, 134, 11, 22, 26, 150, + 178, 151, 152, 178, 152, 199, 204, 113, 145, 149, + 152, 153, 178, 200, 125, 152, 152, 128, 113, 87, + 165, 165, 167, 112, 23, 198, 196, 125, 175, 113, + 170, 171, 112, 112, 14, 178, 12, 192, 22, 14, + 112, 197, 12, 12, 12, 12, 125, 159, 160, 125, + 26, 112, 112, 112, 112, 113, 125, 112, 22, 138, + 152, 112, 112, 12, 139, 192, 178, 81, 11, 172, + 11, 14, 12, 112, 22, 160, 22, 176, 177, 141, + 196, 148, 148, 126, 126, 152, 152, 126, 136, 113, + 112, 126, 126, 125, 128, 112, 128, 79, 22, 174, + 175, 128, 22, 126, 126, 51, 52, 146, 146, 112, + 112, 147, 150, 152, 126, 204, 12, 12, 129, 12, + 147, 147, 126, 113, 126, 126, 22, 112, 147, 140, + 22, 29, 142, 152, 147, 147, 137, 126, 112, 17, + 78, 143, 112, 148, 147, 126, 128, 126, 153, 79, + 146, 112, 126 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 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 + 0, 114, 116, 115, 117, 115, 118, 115, 119, 115, + 120, 115, 121, 115, 122, 115, 123, 124, 125, 126, + 127, 128, 128, 129, 129, 130, 130, 131, 131, 132, + 132, 133, 132, 134, 132, 132, 135, 132, 132, 132, + 132, 132, 132, 132, 132, 136, 137, 132, 132, 132, + 138, 132, 132, 132, 139, 140, 132, 132, 141, 132, + 132, 132, 132, 132, 142, 143, 143, 144, 145, 145, + 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, + 147, 148, 149, 149, 150, 150, 151, 152, 153, 154, + 154, 155, 156, 157, 158, 158, 159, 159, 160, 160, + 160, 161, 161, 162, 162, 163, 163, 164, 165, 165, + 165, 166, 167, 167, 168, 168, 168, 169, 169, 170, + 170, 171, 173, 172, 174, 174, 175, 176, 176, 177, + 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 181, 180, 182, 182, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, + 185, 186, 186, 187, 187, 187, 187, 188, 188, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, + 190, 190, 190, 190, 191, 191, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 193, 192, 192, 192, 192, + 194, 194, 194, 195, 195, 195, 195, 195, 196, 196, + 197, 197, 198, 198, 199, 200, 200, 200, 201, 201, + 202, 202, 203, 204, 205, 206, 207, 207, 208, 209, + 209, 210, 210, 211, 211, 212, 212, 212, 212 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1096,30 +1110,30 @@ static const yytype_uint8 yyr2[] = 4, 0, 7, 0, 6, 4, 0, 7, 7, 7, 6, 6, 2, 8, 8, 0, 0, 13, 9, 8, 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 + 2, 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 { @@ -1147,17 +1161,17 @@ static const toketypes yy_type_tab[] = 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_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_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_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, @@ -1168,6 +1182,6 @@ static const toketypes yy_type_tab[] = }; /* Generated from: - * 427b422b0ce1154d834dc461973a3254729575694f98ab600032f67ccab7b9e5 perly.y + * 3759c9ee4ef2ae2879c32641e36adc50c85c0dc40dd6283752cdcac7e736fa5f perly.y * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/perly.y b/perly.y index 184fb0c1583d..bcebece3e36e 100644 --- a/perly.y +++ b/perly.y @@ -77,6 +77,7 @@ %token LOCAL MY REQUIRE %token COLONATTR FORMLBRACK FORMRBRACK %token SUBLEXSTART SUBLEXEND +%token DEFER %type grammar remember mremember %type startsub startanonsub startformsub @@ -494,6 +495,10 @@ barestmt: PLUGSTMT { $$ = $sideff; } + | DEFER mblock + { + $$ = newDEFEROP(0, op_scope($2)); + } | YADAYADA PERLY_SEMICOLON { $$ = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 37aabcb106b0..46adbf4c12ed 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -27,6 +27,14 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] +=head2 C blocks + +This release adds support for C blocks, which are blocks of code +prefixed by the C modifier. They provide a section of code which runs +at a later time, during scope exit. + +For more information, see L. + =head1 Security XXX Any security-related notices go here. In particular, any security diff --git a/pod/perldiag.pod b/pod/perldiag.pod index a799959b66b4..e972ba6dfbde 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -757,6 +757,12 @@ of C scalars containing the arguments. integer format can only be used with positive integers, and you attempted to compress something else. See L. +=item Can't "%s" out of a defer block + +(F) An attempt was made to jump out of the scope of a defer block by using +a control-flow statement such as C, C or a loop control. This is +not permitted. + =item Can't bless non-reference value (F) Only hard references may be blessed. This is how Perl "enforces" @@ -2452,6 +2458,13 @@ a literal dollar sign, or was meant to introduce a variable name that happens to be missing. So you have to put either the backslash or the name. +=item defer is experimental + +(S experimental::defer) The C block modifier is experimental. If you +want to use the feature, disable the warning with +C, but know that in doing so you are taking +the risk that your code may break in a future Perl version. + =item flock() on closed filehandle %s (W closed) The filehandle you're attempting to flock() got itself closed diff --git a/pod/perlmod.pod b/pod/perlmod.pod index fdfb3811e5e6..e1fc952e288a 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -345,6 +345,10 @@ X<$?> Inside of a C block, the value of C<${^GLOBAL_PHASE}> will be C<"END">. +Similar to an C block are C blocks, though they operate on the +lifetime of individual block scopes, rather than the program as a whole. They +are documented in L. + C, C and C code blocks are useful to catch the transition between the compilation phase and the execution phase of the main program. diff --git a/pod/perlsyn.pod b/pod/perlsyn.pod index 3e3a28f0f220..48b0e1c2d767 100644 --- a/pod/perlsyn.pod +++ b/pod/perlsyn.pod @@ -710,6 +710,87 @@ Such constructs are quite frequently used, both because older versions of Perl had no official C statement, and also because the new version described immediately below remains experimental and can sometimes be confusing. +=head2 defer blocks +X + +A block prefixed by the C modifier provides a section of code which +runs at a later time during scope exit. + +A C block can appear at any point where a regular block or other +statement is permitted. If the flow of execution reaches this statement, the +body of the block is stored for later, but not invoked immediately. When the +flow of control leaves the containing block for any reason, this stored block +is executed on the way past. It provides a means of deferring execution until +a later time. This acts similarly to syntax provided by some other languages, +often using keywords named C. + +This syntax is available if enabled by the C named feature, and is +currently experimental. If experimental warnings are enabled it will emit a +warning when used. + + use feature 'defer'; + + { + say "This happens first"; + defer { say "This happens last"; } + + say "And this happens inbetween"; + } + +If multiple C blocks are contained in a single scope, they are +executed in LIFO order; the last one reached is the first one executed. + +The code stored by the C block will be invoked when control leaves +its containing block due to regular fallthrough, explicit C, +exceptions thrown by C or propagated by functions called by it, C, +or any of the loop control statements C, C or C. + +If the flow of control does not reach the C statement itself then its +body is not stored for later execution. (This is in direct contrast to the +code provided by an C phaser block, which is always enqueued by the +compiler, regardless of whether execution ever reached the line it was given +on.) + + use feature 'defer'; + + { + defer { say "This will run"; } + return; + defer { say "This will not"; } + } + +Exceptions thrown by code inside a C block will propagate to the +caller in the same way as any other exception thrown by normal code. + +If the C block is being executed due to a thrown exception and throws +another one it is not specified what happens, beyond that the caller will +definitely receive an exception. + +Besides throwing an exception, a C block is not permitted to +otherwise alter the control flow of its surrounding code. In particular, it +may not cause its containing function to C, nor may it C a +label, or control a containing loop using C, C or C. These +constructions are however, permitted entirely within the body of the +C. + + use feature 'defer'; + + { + defer { + foreach ( 1 .. 5 ) { + last if $_ == 3; # this is permitted + } + } + } + + { + foreach ( 6 .. 10 ) { + defer { + last if $_ == 8; # this is not + } + } + } + =head2 Switch Statements X X X X X diff --git a/pp_ctl.c b/pp_ctl.c index 205beb295b83..3841a660a7fe 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -1325,6 +1325,7 @@ static const char * const context_name[] = { "format", "eval", "substitution", + "defer block", }; STATIC I32 @@ -1622,6 +1623,7 @@ Perl_dounwind(pTHX_ I32 cxix) break; case CXt_BLOCK: case CXt_NULL: + case CXt_DEFER: /* these two don't have a POPFOO() */ break; case CXt_FORMAT: @@ -2488,6 +2490,12 @@ PP(pp_return) assert(cxstack_ix >= 0); if (cxix < cxstack_ix) { + I32 i; + /* Check for defer { return; } */ + for(i = cxstack_ix; i > cxix; i--) { + if(CxTYPE(&cxstack[i]) == CXt_DEFER) + Perl_croak(aTHX_ "Can't \"%s\" out of a defer block", "return"); + } if (cxix < 0) { if (!( PL_curstackinfo->si_type == PERLSI_SORT || ( PL_curstackinfo->si_type == PERLSI_MULTICALL @@ -2627,8 +2635,15 @@ S_unwind_loop(pTHX) label_len, label_flags | SVs_TEMP))); } - if (cxix < cxstack_ix) + if (cxix < cxstack_ix) { + I32 i; + /* Check for defer { last ... } etc */ + for(i = cxstack_ix; i > cxix; i--) { + if(CxTYPE(&cxstack[i]) == CXt_DEFER) + Perl_croak(aTHX_ "Can't \"%s\" out of a defer block", OP_NAME(PL_op)); + } dounwind(cxix); + } return &cxstack[cxix]; } @@ -2872,6 +2887,12 @@ PP(pp_goto) else if (CxMULTICALL(cx)) DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)"); + /* Check for defer { goto &...; } */ + for(ix = cxstack_ix; ix > cxix; ix--) { + if(CxTYPE(&cxstack[ix]) == CXt_DEFER) + Perl_croak(aTHX_ "Can't \"%s\" out of a defer block", "goto"); + } + /* First do some returnish stuff. */ SvREFCNT_inc_simple_void(cv); /* avoid premature free during unwind */ @@ -3110,6 +3131,8 @@ PP(pp_goto) case CXt_FORMAT: case CXt_NULL: DIE(aTHX_ "Can't \"goto\" out of a pseudo block"); + case CXt_DEFER: + DIE(aTHX_ "Can't \"%s\" out of a defer block", "goto"); default: if (ix) DIE(aTHX_ "panic: goto, type=%u, ix=%ld", @@ -5434,6 +5457,49 @@ PP(pp_break) return cx->blk_givwhen.leave_op; } +static void +invoke_defer_block(pTHX_ void *_arg) +{ + OP *start = (OP *)_arg; +#ifdef DEBUGGING + I32 was_cxstack_ix = cxstack_ix; +#endif + + cx_pushblock(CXt_DEFER, G_VOID, PL_stack_sp, PL_savestack_ix); + ENTER; + SAVETMPS; + + SAVEOP(); + PL_op = start; + + CALLRUNOPS(aTHX); + + FREETMPS; + LEAVE; + + { + PERL_CONTEXT *cx; + + cx = CX_CUR(); + assert(CxTYPE(cx) == CXt_DEFER); + + PL_stack_sp = PL_stack_base + cx->blk_oldsp; + + CX_LEAVE_SCOPE(cx); + cx_popblock(cx); + CX_POP(cx); + } + + assert(cxstack_ix == was_cxstack_ix); +} + +PP(pp_pushdefer) +{ + SAVEDESTRUCTOR_X(invoke_defer_block, cLOGOP->op_other); + + return NORMAL; +} + static MAGIC * S_doparseform(pTHX_ SV *sv) { diff --git a/pp_proto.h b/pp_proto.h index a9bda73e3ce8..5f0b450a95cb 100644 --- a/pp_proto.h +++ b/pp_proto.h @@ -205,6 +205,7 @@ PERL_CALLCONV OP *Perl_pp_print(pTHX); PERL_CALLCONV OP *Perl_pp_prototype(pTHX); PERL_CALLCONV OP *Perl_pp_prtf(pTHX); PERL_CALLCONV OP *Perl_pp_push(pTHX); +PERL_CALLCONV OP *Perl_pp_pushdefer(pTHX); PERL_CALLCONV OP *Perl_pp_pushmark(pTHX); PERL_CALLCONV OP *Perl_pp_qr(pTHX); PERL_CALLCONV OP *Perl_pp_quotemeta(pTHX); diff --git a/proto.h b/proto.h index 992381223d27..b466a8d58778 100644 --- a/proto.h +++ b/proto.h @@ -2308,6 +2308,11 @@ PERL_CALLCONV OP* Perl_newCVREF(pTHX_ I32 flags, OP* o) __attribute__warn_unused_result__; #define PERL_ARGS_ASSERT_NEWCVREF +PERL_CALLCONV OP* Perl_newDEFEROP(pTHX_ I32 flags, OP *block) + __attribute__warn_unused_result__; +#define PERL_ARGS_ASSERT_NEWDEFEROP \ + assert(block) + PERL_CALLCONV OP* Perl_newDEFSVOP(pTHX) __attribute__warn_unused_result__; #define PERL_ARGS_ASSERT_NEWDEFSVOP diff --git a/regen/feature.pl b/regen/feature.pl index 79f789a96d77..a07986e38ad5 100755 --- a/regen/feature.pl +++ b/regen/feature.pl @@ -41,6 +41,7 @@ BEGIN multidimensional => 'multidimensional', bareword_filehandles => 'bareword_filehandles', try => 'try', + defer => 'defer', ); # NOTE: If a feature is ever enabled in a non-contiguous range of Perl @@ -481,7 +482,7 @@ sub longest { __END__ package feature; -our $VERSION = '1.67'; +our $VERSION = '1.68'; FEATURES @@ -838,6 +839,12 @@ =head2 The 'try' feature. For more information, see L. +=head2 The 'defer' feature + +This feature enables the C block syntax, which allows a block of code +to be deferred until when the flow of control leaves the block which contained +it. For more details, see L. + =head1 FEATURE BUNDLES It's possible to load multiple features together, using diff --git a/regen/keywords.pl b/regen/keywords.pl index 77f8aa9d933d..ace205efb555 100755 --- a/regen/keywords.pl +++ b/regen/keywords.pl @@ -49,6 +49,7 @@ isa => 'isa', try => 'try', catch => 'try', + defer => 'defer', ); my %pos = map { ($_ => 1) } @{$by_strength{'+'}}; @@ -152,6 +153,7 @@ END -dbmclose -dbmopen +default ++defer +defined +delete -die diff --git a/regen/opcodes b/regen/opcodes index 6a3f8db0248c..0192f1c804c0 100644 --- a/regen/opcodes +++ b/regen/opcodes @@ -582,3 +582,4 @@ entertrycatch try {block} ck_trycatch | leavetrycatch try {block} exit ck_null @ poptry pop try ck_null @ catch catch {} block ck_null | +pushdefer push defer {} block ck_null | diff --git a/regen/warnings.pl b/regen/warnings.pl index 056851f592eb..3d128449a49a 100644 --- a/regen/warnings.pl +++ b/regen/warnings.pl @@ -16,7 +16,7 @@ # # This script is normally invoked from regen.pl. -$VERSION = '1.53'; +$VERSION = '1.54'; BEGIN { require './regen/regen_lib.pl'; @@ -119,6 +119,8 @@ BEGIN [ 5.031, DEFAULT_ON ], 'experimental::try' => [ 5.033, DEFAULT_ON ], + 'experimental::defer' => + [ 5.035, DEFAULT_ON ], }], 'missing' => [ 5.021, DEFAULT_OFF], diff --git a/scope.c b/scope.c index 8119c4ac632e..55e15c853839 100644 --- a/scope.c +++ b/scope.c @@ -1531,6 +1531,7 @@ Perl_cx_dump(pTHX_ PERL_CONTEXT *cx) switch (CxTYPE(cx)) { case CXt_NULL: case CXt_BLOCK: + case CXt_DEFER: break; case CXt_FORMAT: PerlIO_printf(Perl_debug_log, "BLK_FORMAT.CV = 0x%" UVxf "\n", diff --git a/sv.c b/sv.c index 6cf48289b887..08840a03d03c 100644 --- a/sv.c +++ b/sv.c @@ -14629,6 +14629,7 @@ Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param) case CXt_BLOCK: case CXt_NULL: case CXt_WHEN: + case CXt_DEFER: break; } } diff --git a/t/op/coreamp.t b/t/op/coreamp.t index b32f18078a1a..64b66c0e3150 100644 --- a/t/op/coreamp.t +++ b/t/op/coreamp.t @@ -1160,8 +1160,8 @@ like $@, qr'^Undefined format "STDOUT" called', my %nottest_words = map { $_ => 1 } qw( AUTOLOAD BEGIN CHECK CORE DESTROY END INIT UNITCHECK __DATA__ __END__ - 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 + and catch cmp default defer 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 ); diff --git a/t/op/coresubs.t b/t/op/coresubs.t index 30f0621f65b7..514114bfb627 100644 --- a/t/op/coresubs.t +++ b/t/op/coresubs.t @@ -15,8 +15,8 @@ BEGIN { use B; my %unsupported = map +($_=>1), qw ( - __DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK and - catch cmp default do dump else elsif eq eval for foreach + __DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK + and catch cmp default defer 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 diff --git a/t/op/defer.t b/t/op/defer.t new file mode 100644 index 000000000000..8443ad104b4c --- /dev/null +++ b/t/op/defer.t @@ -0,0 +1,315 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + require './test.pl'; + set_up_inc('../lib'); +} + +plan 29; + +use feature 'defer'; +no warnings 'experimental::defer'; + +{ + my $x = ""; + { + defer { $x = "a" } + } + is($x, "a", 'defer block is invoked'); + + { + defer { + $x = ""; + $x .= "abc"; + $x .= "123"; + } + } + is($x, "abc123", 'defer block can contain multiple statements'); + + { + defer {} + } + ok(1, 'Empty defer block parses OK'); +} + +{ + my $x = ""; + { + defer { $x .= "a" } + defer { $x .= "b" } + defer { $x .= "c" } + } + is($x, "cba", 'defer blocks happen in LIFO order'); +} + +{ + my $x = ""; + + { + defer { $x .= "a" } + $x .= "A"; + } + + is($x, "Aa", 'defer blocks happen after the main body'); +} + +{ + my $x = ""; + + foreach my $i (qw( a b c )) { + defer { $x .= $i } + } + + is($x, "abc", 'defer block happens for every iteration of foreach'); +} + +{ + my $x = ""; + + my $cond = 0; + if( $cond ) { + defer { $x .= "XXX" } + } + + is($x, "", 'defer block does not happen inside non-taken conditional branch'); +} + +{ + my $x = ""; + + while(1) { + last; + defer { $x .= "a" } + } + + is($x, "", 'defer block does not happen if entered but unencountered'); +} + +{ + my $x = ""; + + my $counter = 1; + { + defer { $x .= "A" } + redo if $counter++ < 5; + } + + is($x, "AAAAA", 'defer block can happen multiple times'); +} + +{ + my $x = ""; + + { + defer { + $x .= "a"; + defer { + $x .= "b"; + } + } + } + + is($x, "ab", 'defer block can contain another defer'); +} + +{ + my $x = ""; + my $value = do { + defer { $x .= "before" } + "value"; + }; + + is($x, "before", 'defer blocks run inside do { }'); + is($value, "value", 'defer block does not disturb do { } value'); +} + +{ + my $x = ""; + my $sub = sub { + defer { $x .= "a" } + }; + + $sub->(); + $sub->(); + $sub->(); + + is($x, "aaa", 'defer block inside sub'); +} + +{ + my $x = ""; + my $sub = sub { + return; + defer { $x .= "a" } + }; + + $sub->(); + + is($x, "", 'defer block inside sub does not happen if entered but returned early'); +} + +{ + my $x = ""; + + my sub after { + $x .= "c"; + } + + my sub before { + $x .= "a"; + defer { $x .= "b" } + goto \&after; + } + + before(); + + is($x, "abc", 'defer block invoked before tail-call'); +} + +# Sequencing with respect to variable cleanup + +{ + my $var = "outer"; + my $x; + { + my $var = "inner"; + defer { $x = $var } + } + + is($x, "inner", 'defer block captures live value of same-scope lexicals'); +} + +{ + my $var = "outer"; + my $x; + { + defer { $x = $var } + my $var = "inner"; + } + + is ($x, "outer", 'defer block correctly captures outer lexical when only shadowed afterwards'); +} + +{ + our $var = "outer"; + { + local $var = "inner"; + defer { $var = "finally" } + } + + is($var, "outer", 'defer after localization still unlocalizes'); +} + +{ + our $var = "outer"; + { + defer { $var = "finally" } + local $var = "inner"; + } + + is($var, "finally", 'defer before localization overwrites'); +} + +# Interactions with exceptions + +{ + my $x = ""; + my $sub = sub { + defer { $x .= "a" } + die "Oopsie\n"; + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + + is($x, "a", 'defer block still runs during exception unwind'); + is($e, "Oopsie\n", 'Thrown exception still occurs after defer'); +} + +{ + my $sub = sub { + defer { die "Oopsie\n"; } + return "retval"; + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + + is($e, "Oopsie\n", 'defer block can throw exception'); +} + +{ + my $sub = sub { + defer { die "Oopsie 1\n"; } + die "Oopsie 2\n"; + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + + # TODO: Currently the first exception gets lost without even a warning + # We should consider what the behaviour ought to be here + # This test is happy for either exception to be seen, does not care which + like($e, qr/^Oopsie \d\n/, 'defer block can throw exception during exception unwind'); +} + +{ + my $sub = sub { + while(1) { + defer { return "retval" } + last; + } + return "wrong"; + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + like($e, qr/^Can't "return" out of a defer block /, + 'Cannot return out of defer block'); +} + +{ + my $sub = sub { + while(1) { + defer { goto HERE } + } + HERE: + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + like($e, qr/^Can't "goto" out of a defer block /, + 'Cannot goto out of defer block'); +} + +{ + my $subA = sub { + my $subB = sub {}; + while(1) { + defer { goto &$subB } + } + }; + + my $e = defined eval { $subA->(); 1 } ? undef : $@; + like($e, qr/^Can't "goto" out of a defer block at /, + 'Cannot goto &SUB out of a defer block'); +} + +{ + my $sub = sub { + LOOP: while(1) { + defer { last LOOP } + } + }; + + my $e = defined eval { $sub->(); 1 } ? undef : $@; + like($e, qr/^Can't "last" out of a defer block /, + 'Cannot last out of defer block'); +} + +{ + # strictness failures are only checked at optree finalization time. This + # is a good way to test if that happens. + my $ok = eval 'defer { use strict; foo }'; + my $e = $@; + + ok(!$ok, 'defer BLOCK finalizes optree'); + like($e, qr/^Bareword "foo" not allowed while "strict subs" in use at /, + 'Error from finalization'); +} diff --git a/t/perf/opcount.t b/t/perf/opcount.t index 21a6f36dcfa5..0e1353391bd9 100644 --- a/t/perf/opcount.t +++ b/t/perf/opcount.t @@ -20,7 +20,7 @@ BEGIN { use warnings; use strict; -plan 2583; +plan 2584; use B (); @@ -675,3 +675,15 @@ test_opcount(0, "multiconcat: local assign", concat => 0, sassign => 1, }); + +{ + use feature 'defer'; + no warnings 'experimental::defer'; + + test_opcount(1, "pushdefer: block is optimized", + sub { my @a; defer { $a[0] } }, + { + aelemfast_lex => 1, + aelem => 0, + }); +} diff --git a/toke.c b/toke.c index e6f7a3a42fd7..8f687d803e46 100644 --- a/toke.c +++ b/toke.c @@ -7770,6 +7770,11 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct case KEY_default: PREBLOCK(DEFAULT); + case KEY_defer: + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__DEFER), "defer is experimental"); + PREBLOCK(DEFER); + case KEY_do: return yyl_do(aTHX_ s, orig_keyword); diff --git a/warnings.h b/warnings.h index 5658e2183f6f..fe020b55a5fc 100644 --- a/warnings.h +++ b/warnings.h @@ -133,6 +133,10 @@ /* Warnings Categories added in Perl 5.033 */ #define WARN_EXPERIMENTAL__TRY 73 + +/* Warnings Categories added in Perl 5.035 */ + +#define WARN_EXPERIMENTAL__DEFER 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" @@ -316,6 +320,7 @@ category parameters passed. =for apidoc Amnh||WARN_EXPERIMENTAL__VLB =for apidoc Amnh||WARN_EXPERIMENTAL__ISA =for apidoc Amnh||WARN_EXPERIMENTAL__TRY +=for apidoc Amnh||WARN_EXPERIMENTAL__DEFER =cut */