From f79e2ff95fbb22eaf18e130c7cba8a9d40be3d75 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Tue, 27 Jul 2021 14:55:14 +0100 Subject: [PATCH] Create `defer` syntax and `OP_PUSHDEFER` opcode Adds syntax `defer { BLOCK }` to create a deferred block; code that is deferred until the scope exits. This syntax is guarded by use feature 'defer'; Adds a new opcode, `OP_PUSHDEFER`, which is a LOGOP whose `op_other` field gives the start of an optree to be deferred until scope exit. That op pointer will be stored on the save stack and invoked as part of scope unwind. Included is support for `B::Deparse` to deparse the optree back into syntax. --- MANIFEST | 1 + cop.h | 1 + embed.fnc | 1 + embed.h | 1 + ext/Opcode/Opcode.pm | 2 + feature.h | 43 +- gv.c | 2 +- keywords.c | 15 +- keywords.h | 435 +++++------ lib/B/Deparse-core.t | 1 + lib/B/Deparse.pm | 12 +- lib/B/Deparse.t | 6 + lib/B/Op_private.pm | 1 + lib/feature.pm | 11 +- lib/warnings.pm | 17 +- op.c | 38 + opcode.h | 9 +- opnames.h | 3 +- perl.h | 3 +- perly.act | 1104 +++++++++++++-------------- perly.h | 65 +- perly.tab | 1712 +++++++++++++++++++++--------------------- perly.y | 5 + pod/perldelta.pod | 8 + pod/perldiag.pod | 13 + pod/perlmod.pod | 4 + pod/perlsyn.pod | 81 ++ pp_ctl.c | 68 +- pp_proto.h | 1 + proto.h | 5 + regen/feature.pl | 9 +- regen/keywords.pl | 2 + regen/opcodes | 1 + regen/warnings.pl | 4 +- scope.c | 1 + sv.c | 1 + t/op/coreamp.t | 4 +- t/op/coresubs.t | 4 +- t/op/defer.t | 315 ++++++++ t/perf/opcount.t | 14 +- toke.c | 5 + warnings.h | 5 + 42 files changed, 2351 insertions(+), 1682 deletions(-) create mode 100644 t/op/defer.t diff --git a/MANIFEST b/MANIFEST index 92df2e5c79..8aa617e36b 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 fd0e12a84a..f7885887eb 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 a649aa4b63..c5b65567b5 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 4b23682197..6d7ba7ea7d 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 de332ee110..ce8b5bfa0e 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 29522eedb5..23cc5f3d31 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 306a5240f8..bde9c007bc 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 624debc80a..e06ada4b3e 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 @@ unknown: } /* Generated from: - * 3a4f2004642b00b871c01cbdc018f6ca5ead6b4e0b2b184120c60b0b62a229dd regen/keywords.pl + * de1ee232f68ea8ae75d09f4f70b58fee8a6e6244dec3ab68baab54f7af9ce306 regen/keywords.pl * ex: set ro: */ diff --git a/keywords.h b/keywords.h index 82694905cb..84e7719148 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 ae2a800682..7d8613f521 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 78703cd8b0..2d33039a80 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 fd4d63c779..3904773655 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 0388462b25..56cc70aa47 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 40274b553b..fc1d984d3e 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 4b634de4d4..da0a36362c 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 0a4f2b803c..d93b62a6d6 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 a1e7670f15..2fadc692ff 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 f6c1552a52..a78baab591 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 d09cdabfcb..75bb35eb25 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 00192e61d7..6cd3943690 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" - { (yyval.opval) = NULL; } - - break; - case 79: -#line 577 "perly.y" - { (yyval.opval) = op_scope((ps[0].val.opval)); } +#line 580 "perly.y" + { (yyval.opval) = NULL; } break; case 80: #line 582 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } + + break; + + 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" + case 86: +#line 607 "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(); } - - 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(FALSE, CVf_ANON); + SAVEFREESV(PL_compcv); } + + break; + + case 93: +#line 635 "perly.y" { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; - case 95: -#line 641 "perly.y" - { (yyval.opval) = NULL; } - - 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); } - - break; - - case 101: -#line 658 "perly.y" { (yyval.opval) = NULL; } break; + case 101: +#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" - { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } - - break; - case 112: -#line 778 "perly.y" +#line 781 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 113: -#line 784 "perly.y" - { (yyval.opval) = (ps[-1].val.opval); } +#line 783 "perly.y" + { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 114: -#line 786 "perly.y" +#line 789 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } + + break; + + 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" - { (yyval.opval) = (ps[0].val.opval); } - - break; - case 116: #line 795 "perly.y" - { (yyval.opval) = NULL; } + { (yyval.opval) = (ps[0].val.opval); } break; case 117: -#line 797 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 118: -#line 801 "perly.y" +#line 800 "perly.y" { (yyval.opval) = NULL; } break; - case 119: -#line 803 "perly.y" + case 118: +#line 802 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; + case 119: +#line 806 "perly.y" + { (yyval.opval) = NULL; } + + break; + case 120: -#line 807 "perly.y" - { (yyval.opval) = (ps[-1].val.opval); } +#line 808 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 121: -#line 810 "perly.y" +#line 812 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } + + break; + + 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" - { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } - - break; - case 143: -#line 965 "perly.y" +#line 968 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 144: -#line 967 "perly.y" +#line 970 "perly.y" + { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + + break; + + 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,24 +1244,15 @@ 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" - { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); - } - - break; - case 150: -#line 990 "perly.y" - { (yyval.opval) = newBINOP(OP_AELEM, 0, - ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), - scalar((ps[-1].val.opval))); +#line 992 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; @@ -1261,7 +1260,7 @@ case 2: case 151: #line 995 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, - ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), + ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); } @@ -1269,29 +1268,38 @@ case 2: case 152: #line 1000 "perly.y" - { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); + { (yyval.opval) = newBINOP(OP_AELEM, 0, + ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), + scalar((ps[-1].val.opval))); } break; case 153: -#line 1003 "perly.y" +#line 1005 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); + } + + break; + + 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" - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } - - break; - case 161: -#line 1042 "perly.y" - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } +#line 1045 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 162: #line 1047 "perly.y" - { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 163: -#line 1049 "perly.y" - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1052 "perly.y" + { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 164: -#line 1051 "perly.y" +#line 1054 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + 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))); } - - break; - - case 172: -#line 1070 "perly.y" - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (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)); } - - break; - - case 174: -#line 1074 "perly.y" - { (yyval.opval) = newLOGOP(OP_DOR, 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)); } - - break; - - case 176: -#line 1080 "perly.y" - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } - - break; - - case 177: -#line 1082 "perly.y" +#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 1073 "perly.y" + { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } + + break; + + case 173: +#line 1075 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 174: +#line 1077 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 175: +#line 1079 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 176: +#line 1081 "perly.y" + { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 177: +#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)); } - - break; - - case 181: -#line 1092 "perly.y" - { (yyval.opval) = cmpchain_extend((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)); } - - 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))); } - - break; - - case 184: -#line 1100 "perly.y" +#line 1091 "perly.y" { yyerror("syntax error"); YYERROR; } break; + case 181: +#line 1095 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 182: +#line 1097 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + + break; + + case 183: +#line 1101 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } + + break; + + case 184: +#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" + case 210: +#line 1181 "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" + case 211: +#line 1183 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; - case 211: -#line 1180 "perly.y" + case 212: +#line 1185 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; - case 212: -#line 1182 "perly.y" - { (yyval.opval) = (ps[0].val.opval); } - - 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()); } - - break; - - case 217: -#line 1192 "perly.y" +#line 1193 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; + case 217: +#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));} - - break; - - case 222: -#line 1202 "perly.y" +#line 1203 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; + case 222: +#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" - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } - - break; - case 242: -#line 1282 "perly.y" +#line 1285 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 243: -#line 1284 "perly.y" - { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } +#line 1287 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 244: -#line 1286 "perly.y" - { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } +#line 1289 "perly.y" + { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 245: -#line 1288 "perly.y" - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } +#line 1291 "perly.y" + { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 246: -#line 1290 "perly.y" +#line 1293 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } + + break; + + 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" + case 260: +#line 1333 "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); } - - 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); } - - break; - - case 271: -#line 1363 "perly.y" +#line 1362 "perly.y" { (yyval.opval) = NULL; } break; - case 272: -#line 1365 "perly.y" + case 271: +#line 1364 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; + case 272: +#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" - { (yyval.opval) = newHVREF((ps[-2].val.opval)); } - - break; - - case 293: + case 292: #line 1429 "perly.y" - { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } + { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; case 294: #line 1434 "perly.y" - { (yyval.opval) = scalar((ps[0].val.opval)); } + { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; case 295: -#line 1436 "perly.y" +#line 1439 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 296: -#line 1438 "perly.y" - { (yyval.opval) = op_scope((ps[0].val.opval)); } +#line 1441 "perly.y" + { (yyval.opval) = scalar((ps[0].val.opval)); } break; case 297: -#line 1441 "perly.y" +#line 1443 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } + + break; + + 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 e7917e4c40..4dcd5eea05 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 91a88c5c4b..eba44eeca1 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, - 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 186, 187, - 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, - 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, - 50, 51, 193, 194, 195, 196, 197, 198, 199, 200, - 52, 0, 0, 0, 201, 0, 0, 202, 203, 204, - 205, 0, 0, 0, 0, 53, 54, 0, 55, 18, - 56, 57, 19, 120, 0, 20, 0, 58, 21, 22, - 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, - 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, - 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, - 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, - 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, - 54, 0, 55, 0, 56, 57, 18, 83, 0, 19, - 0, 58, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, - 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, - 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 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, - 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, - 22, 23, 152, 0, 24, 25, 26, 27, 28, 29, - 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, - 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, - 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 54, 0, 55, 18, 56, 57, 19, 0, 0, - 20, 0, 58, 21, 22, 23, 0, 0, 24, 25, - 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, - 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, - 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 54, 0, 55, 18, 56, - 57, 19, 0, 0, 20, 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, + 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, 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, 283, 58, 21, 22, 23, 0, 0, - 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, - 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, - 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, - 18, 56, 57, 19, 0, 0, 20, 294, 58, 21, + 0, 0, 0, 53, 54, 0, 55, 0, 56, 57, + 18, 83, 0, 19, 0, 58, 20, 0, 0, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, + 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, + -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, 0, 68, 69, -1, 104, -1, -1, - 107, 108, 109, 110, 111, -1, -1, 14, 15, -1, - -1, -1, -1, -1, -1, 22, 23, 91, 92, 93, - 94, 95, 96, 97, 98, 99, -1, -1, -1, -1, - 104, -1, -1, 107, 108, 109, 110, -1, -1, -1, - 47, 48, 49, 50, -1, -1, -1, 54, -1, 56, - -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, - -1, 68, 69, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 81, -1, 83, 84, -1, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, -1, -1, -1, -1, 104, -1, -1, - 107, 108, 109, 110, 111, 10, 11, -1, 13, -1, - -1, 16, -1, -1, 19, 20, 21, -1, -1, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, - -1, -1, -1, -1, -1, -1, -1, -1, 68, 69, - -1, -1, -1, -1, -1, 60, -1, -1, 63, 64, - 65, 66, 67, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 92, 93, 94, 95, 96, 97, 98, 99, - 85, -1, -1, -1, 104, -1, -1, 107, 108, 109, - 110, -1, -1, -1, -1, 100, 101, -1, 103, 10, - 105, 106, 13, 14, -1, 16, -1, 112, 19, 20, - 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, - -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, - -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, - -1, -1, 63, 64, 65, 66, 67, -1, -1, 70, - 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, - -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, -1, 103, -1, 105, 106, 10, 11, -1, 13, - -1, 112, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, 26, 27, 28, 29, 30, -1, 32, 33, - 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 60, -1, -1, 63, - 64, 65, 66, 67, -1, -1, 70, 71, 72, 73, - 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, - -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 100, 101, -1, 103, - 10, 105, 106, 13, -1, -1, 16, -1, 112, 19, - 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, - 30, -1, 32, 33, 34, 35, 36, 37, -1, -1, - -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 60, -1, -1, 63, 64, 65, 66, 67, -1, -1, - 70, 71, 72, 73, 74, 75, 76, -1, -1, -1, - -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 100, 101, -1, 103, 10, 105, 106, 13, -1, -1, - 16, -1, 112, 19, 20, 21, -1, -1, 24, 25, - 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, - 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 60, -1, -1, 63, 64, 65, - 66, 67, -1, -1, 70, 71, 72, 73, 74, 75, - 76, -1, -1, -1, -1, -1, -1, -1, -1, 85, - -1, -1, -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, + 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, 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, -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, 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, 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, -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, -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, -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, -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, 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, 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, -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, + -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, -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, + -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, -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, + -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, 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 184fb0c158..bcebece3e3 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 37aabcb106..46adbf4c12 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 a799959b66..e972ba6dfb 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 fdfb3811e5..e1fc952e28 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 3e3a28f0f2..48b0e1c2d7 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 205beb295b..3841a660a7 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 a9bda73e3c..5f0b450a95 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 992381223d..b466a8d587 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 79f789a96d..a07986e38a 100755 --- a/regen/feature.pl +++ b/regen/feature.pl @@ -41,6 +41,7 @@ my %feature = ( 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 @@ read_only_bottom_close_and_rename($h); __END__ package feature; -our $VERSION = '1.67'; +our $VERSION = '1.68'; FEATURES @@ -838,6 +839,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/regen/keywords.pl b/regen/keywords.pl index 77f8aa9d93..ace205efb5 100755 --- a/regen/keywords.pl +++ b/regen/keywords.pl @@ -49,6 +49,7 @@ my %feature_kw = ( 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 6a3f8db024..0192f1c804 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 056851f592..3d128449a4 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 @@ my $tree = { [ 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 8119c4ac63..55e15c8538 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 6cf48289b8..08840a03d0 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 b32f18078a..64b66c0e31 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 30f0621f65..514114bfb6 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 0000000000..8443ad104b --- /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 21a6f36dcf..0e1353391b 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 e6f7a3a42f..8f687d803e 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 5658e2183f..fe020b55a5 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 */