From 5eb0d3bb3151de11867085370258764446a4bbe6 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Mon, 27 Jan 2025 15:26:33 +0000 Subject: [PATCH 1/6] regen_perly.y: Slight modernisation; use Getopt::Long; support -Wfoo passthrough to bison --- regen_perly.pl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/regen_perly.pl b/regen_perly.pl index cb6feacab777..c69f0b930f8d 100644 --- a/regen_perly.pl +++ b/regen_perly.pl @@ -29,21 +29,20 @@ # it may work elsewhere but no specific attempt has been made to make it # portable. -use 5.006; -sub usage { die "usage: $0 [ -b bison_executable ] [ file.y ]\n" } - +use v5.10; use warnings; -use strict; +sub usage { die "usage: $0 [ -b bison_executable ] [ file.y ]\n" } our $Verbose; BEGIN { require './regen/regen_lib.pl'; } -my $bison = 'bison'; +use Getopt::Long; +Getopt::Long::Configure(qw( bundling bundling_values no_ignore_case )); -if (@ARGV >= 2 and $ARGV[0] eq '-b') { - shift; - $bison = shift; -} +GetOptions( + 'b|bison=s' => \(my $bison = 'bison'), + 'W=s' => \my @bison_warnings, +) or usage; my $y_file = shift || 'perly.y'; @@ -90,7 +89,8 @@ $version = $1; # creates $tmpc_file and $tmph_file -my_system("$bison -d -o $tmpc_file $y_file"); +my_system("$bison -d -o $tmpc_file $y_file " . + join(" ", map { "-W$_" } @bison_warnings)); open my $ctmp_fh, '<', $tmpc_file or die "Can't open $tmpc_file: $!\n"; my $clines; From aa01106531ea698500d7fcea9e9208787190a069 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Fri, 24 Jan 2025 18:11:24 +0000 Subject: [PATCH 2/6] Initial attempt at defining an `equ` operator As per PPC0030. Currently only defines the stringy version, not the numerical version. TODO: Currently lacks any attempt at documentation or perldelta. TODO: Also lacks any consideration on how an `equ` operator would interact with `use overload`. Further thought is required here. fixup with magic --- MANIFEST | 1 + gv.c | 2 +- keywords.c | 12 +- keywords.h | 405 ++++++++++++++++++++++--------------------- lib/B/Deparse-core.t | 1 + lib/B/Deparse.pm | 5 +- lib/B/Op_private.pm | 5 +- op.c | 10 +- opcode.h | 239 ++++++++++++------------- pp.c | 9 + regen/keywords.pl | 1 + regen/op_private | 4 + t/op/coreamp.t | 2 +- t/op/coresubs.t | 4 +- t/op/equ.t | 36 ++++ toke.c | 6 + 16 files changed, 411 insertions(+), 331 deletions(-) create mode 100644 t/op/equ.t diff --git a/MANIFEST b/MANIFEST index c6d980cc8c8e..c58263085cd5 100644 --- a/MANIFEST +++ b/MANIFEST @@ -6315,6 +6315,7 @@ t/op/dor.t See if defined-or (//) works t/op/dump.t See if dump works. t/op/each.t See if hash iterators work t/op/each_array.t See if array iterators work +t/op/equ.t See if the equ operator works t/op/eval.t See if eval operator works t/op/evalbytes.t See if evalbytes operator works t/op/exec.t See if exec, system and qx work diff --git a/gv.c b/gv.c index 81dca3d74ed2..4b8167dcfde4 100644 --- a/gv.c +++ b/gv.c @@ -614,7 +614,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, case KEY_catch : case KEY_class : case KEY_continue: case KEY_cmp : case KEY_defer : case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif : - case KEY_eq : case KEY_eval : case KEY_field : + case KEY_eq : case KEY_equ : case KEY_eval : case KEY_field : case KEY_finally: case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge : case KEY_goto : case KEY_grep : case KEY_gt : diff --git a/keywords.c b/keywords.c index fb4bfd8e3982..8ace663e124d 100644 --- a/keywords.c +++ b/keywords.c @@ -203,7 +203,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 3: /* 32 tokens of length 3 */ + case 3: /* 33 tokens of length 3 */ switch (name[0]) { case 'E': @@ -306,6 +306,14 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; + case 'q': + if (name[2] == 'u') + { /* equ */ + return -KEY_equ; + } + + goto unknown; + case 'x': if (name[2] == 'p') { /* exp */ @@ -3532,5 +3540,5 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) } /* Generated from: - * 86050f368b9e57b4a97be585340ba2fb90e67ad48b8f44878e15020c52a47d8c regen/keywords.pl + * 93a0bae6c32726e80724e51b90f6b376f2b6c5705f1d20d705e97b7ea12bebe2 regen/keywords.pl * ex: set ro ft=c: */ diff --git a/keywords.h b/keywords.h index 675b0d4be4df..566d4a5c6d58 100644 --- a/keywords.h +++ b/keywords.h @@ -75,208 +75,209 @@ #define KEY_endservent 59 #define KEY_eof 60 #define KEY_eq 61 -#define KEY_eval 62 -#define KEY_evalbytes 63 -#define KEY_exec 64 -#define KEY_exists 65 -#define KEY_exit 66 -#define KEY_exp 67 -#define KEY_fc 68 -#define KEY_fcntl 69 -#define KEY_field 70 -#define KEY_fileno 71 -#define KEY_finally 72 -#define KEY_flock 73 -#define KEY_for 74 -#define KEY_foreach 75 -#define KEY_fork 76 -#define KEY_format 77 -#define KEY_formline 78 -#define KEY_ge 79 -#define KEY_getc 80 -#define KEY_getgrent 81 -#define KEY_getgrgid 82 -#define KEY_getgrnam 83 -#define KEY_gethostbyaddr 84 -#define KEY_gethostbyname 85 -#define KEY_gethostent 86 -#define KEY_getlogin 87 -#define KEY_getnetbyaddr 88 -#define KEY_getnetbyname 89 -#define KEY_getnetent 90 -#define KEY_getpeername 91 -#define KEY_getpgrp 92 -#define KEY_getppid 93 -#define KEY_getpriority 94 -#define KEY_getprotobyname 95 -#define KEY_getprotobynumber 96 -#define KEY_getprotoent 97 -#define KEY_getpwent 98 -#define KEY_getpwnam 99 -#define KEY_getpwuid 100 -#define KEY_getservbyname 101 -#define KEY_getservbyport 102 -#define KEY_getservent 103 -#define KEY_getsockname 104 -#define KEY_getsockopt 105 -#define KEY_glob 106 -#define KEY_gmtime 107 -#define KEY_goto 108 -#define KEY_grep 109 -#define KEY_gt 110 -#define KEY_hex 111 -#define KEY_if 112 -#define KEY_index 113 -#define KEY_int 114 -#define KEY_ioctl 115 -#define KEY_isa 116 -#define KEY_join 117 -#define KEY_keys 118 -#define KEY_kill 119 -#define KEY_last 120 -#define KEY_lc 121 -#define KEY_lcfirst 122 -#define KEY_le 123 -#define KEY_length 124 -#define KEY_link 125 -#define KEY_listen 126 -#define KEY_local 127 -#define KEY_localtime 128 -#define KEY_lock 129 -#define KEY_log 130 -#define KEY_lstat 131 -#define KEY_lt 132 -#define KEY_m 133 -#define KEY_map 134 -#define KEY_method 135 -#define KEY_mkdir 136 -#define KEY_msgctl 137 -#define KEY_msgget 138 -#define KEY_msgrcv 139 -#define KEY_msgsnd 140 -#define KEY_my 141 -#define KEY_ne 142 -#define KEY_next 143 -#define KEY_no 144 -#define KEY_not 145 -#define KEY_oct 146 -#define KEY_open 147 -#define KEY_opendir 148 -#define KEY_or 149 -#define KEY_ord 150 -#define KEY_our 151 -#define KEY_pack 152 -#define KEY_package 153 -#define KEY_pipe 154 -#define KEY_pop 155 -#define KEY_pos 156 -#define KEY_print 157 -#define KEY_printf 158 -#define KEY_prototype 159 -#define KEY_push 160 -#define KEY_q 161 -#define KEY_qq 162 -#define KEY_qr 163 -#define KEY_quotemeta 164 -#define KEY_qw 165 -#define KEY_qx 166 -#define KEY_rand 167 -#define KEY_read 168 -#define KEY_readdir 169 -#define KEY_readline 170 -#define KEY_readlink 171 -#define KEY_readpipe 172 -#define KEY_recv 173 -#define KEY_redo 174 -#define KEY_ref 175 -#define KEY_rename 176 -#define KEY_require 177 -#define KEY_reset 178 -#define KEY_return 179 -#define KEY_reverse 180 -#define KEY_rewinddir 181 -#define KEY_rindex 182 -#define KEY_rmdir 183 -#define KEY_s 184 -#define KEY_say 185 -#define KEY_scalar 186 -#define KEY_seek 187 -#define KEY_seekdir 188 -#define KEY_select 189 -#define KEY_semctl 190 -#define KEY_semget 191 -#define KEY_semop 192 -#define KEY_send 193 -#define KEY_setgrent 194 -#define KEY_sethostent 195 -#define KEY_setnetent 196 -#define KEY_setpgrp 197 -#define KEY_setpriority 198 -#define KEY_setprotoent 199 -#define KEY_setpwent 200 -#define KEY_setservent 201 -#define KEY_setsockopt 202 -#define KEY_shift 203 -#define KEY_shmctl 204 -#define KEY_shmget 205 -#define KEY_shmread 206 -#define KEY_shmwrite 207 -#define KEY_shutdown 208 -#define KEY_sin 209 -#define KEY_sleep 210 -#define KEY_socket 211 -#define KEY_socketpair 212 -#define KEY_sort 213 -#define KEY_splice 214 -#define KEY_split 215 -#define KEY_sprintf 216 -#define KEY_sqrt 217 -#define KEY_srand 218 -#define KEY_stat 219 -#define KEY_state 220 -#define KEY_study 221 -#define KEY_sub 222 -#define KEY_substr 223 -#define KEY_symlink 224 -#define KEY_syscall 225 -#define KEY_sysopen 226 -#define KEY_sysread 227 -#define KEY_sysseek 228 -#define KEY_system 229 -#define KEY_syswrite 230 -#define KEY_tell 231 -#define KEY_telldir 232 -#define KEY_tie 233 -#define KEY_tied 234 -#define KEY_time 235 -#define KEY_times 236 -#define KEY_tr 237 -#define KEY_try 238 -#define KEY_truncate 239 -#define KEY_uc 240 -#define KEY_ucfirst 241 -#define KEY_umask 242 -#define KEY_undef 243 -#define KEY_unless 244 -#define KEY_unlink 245 -#define KEY_unpack 246 -#define KEY_unshift 247 -#define KEY_untie 248 -#define KEY_until 249 -#define KEY_use 250 -#define KEY_utime 251 -#define KEY_values 252 -#define KEY_vec 253 -#define KEY_wait 254 -#define KEY_waitpid 255 -#define KEY_wantarray 256 -#define KEY_warn 257 -#define KEY_while 258 -#define KEY_write 259 -#define KEY_x 260 -#define KEY_xor 261 -#define KEY_y 262 +#define KEY_equ 62 +#define KEY_eval 63 +#define KEY_evalbytes 64 +#define KEY_exec 65 +#define KEY_exists 66 +#define KEY_exit 67 +#define KEY_exp 68 +#define KEY_fc 69 +#define KEY_fcntl 70 +#define KEY_field 71 +#define KEY_fileno 72 +#define KEY_finally 73 +#define KEY_flock 74 +#define KEY_for 75 +#define KEY_foreach 76 +#define KEY_fork 77 +#define KEY_format 78 +#define KEY_formline 79 +#define KEY_ge 80 +#define KEY_getc 81 +#define KEY_getgrent 82 +#define KEY_getgrgid 83 +#define KEY_getgrnam 84 +#define KEY_gethostbyaddr 85 +#define KEY_gethostbyname 86 +#define KEY_gethostent 87 +#define KEY_getlogin 88 +#define KEY_getnetbyaddr 89 +#define KEY_getnetbyname 90 +#define KEY_getnetent 91 +#define KEY_getpeername 92 +#define KEY_getpgrp 93 +#define KEY_getppid 94 +#define KEY_getpriority 95 +#define KEY_getprotobyname 96 +#define KEY_getprotobynumber 97 +#define KEY_getprotoent 98 +#define KEY_getpwent 99 +#define KEY_getpwnam 100 +#define KEY_getpwuid 101 +#define KEY_getservbyname 102 +#define KEY_getservbyport 103 +#define KEY_getservent 104 +#define KEY_getsockname 105 +#define KEY_getsockopt 106 +#define KEY_glob 107 +#define KEY_gmtime 108 +#define KEY_goto 109 +#define KEY_grep 110 +#define KEY_gt 111 +#define KEY_hex 112 +#define KEY_if 113 +#define KEY_index 114 +#define KEY_int 115 +#define KEY_ioctl 116 +#define KEY_isa 117 +#define KEY_join 118 +#define KEY_keys 119 +#define KEY_kill 120 +#define KEY_last 121 +#define KEY_lc 122 +#define KEY_lcfirst 123 +#define KEY_le 124 +#define KEY_length 125 +#define KEY_link 126 +#define KEY_listen 127 +#define KEY_local 128 +#define KEY_localtime 129 +#define KEY_lock 130 +#define KEY_log 131 +#define KEY_lstat 132 +#define KEY_lt 133 +#define KEY_m 134 +#define KEY_map 135 +#define KEY_method 136 +#define KEY_mkdir 137 +#define KEY_msgctl 138 +#define KEY_msgget 139 +#define KEY_msgrcv 140 +#define KEY_msgsnd 141 +#define KEY_my 142 +#define KEY_ne 143 +#define KEY_next 144 +#define KEY_no 145 +#define KEY_not 146 +#define KEY_oct 147 +#define KEY_open 148 +#define KEY_opendir 149 +#define KEY_or 150 +#define KEY_ord 151 +#define KEY_our 152 +#define KEY_pack 153 +#define KEY_package 154 +#define KEY_pipe 155 +#define KEY_pop 156 +#define KEY_pos 157 +#define KEY_print 158 +#define KEY_printf 159 +#define KEY_prototype 160 +#define KEY_push 161 +#define KEY_q 162 +#define KEY_qq 163 +#define KEY_qr 164 +#define KEY_quotemeta 165 +#define KEY_qw 166 +#define KEY_qx 167 +#define KEY_rand 168 +#define KEY_read 169 +#define KEY_readdir 170 +#define KEY_readline 171 +#define KEY_readlink 172 +#define KEY_readpipe 173 +#define KEY_recv 174 +#define KEY_redo 175 +#define KEY_ref 176 +#define KEY_rename 177 +#define KEY_require 178 +#define KEY_reset 179 +#define KEY_return 180 +#define KEY_reverse 181 +#define KEY_rewinddir 182 +#define KEY_rindex 183 +#define KEY_rmdir 184 +#define KEY_s 185 +#define KEY_say 186 +#define KEY_scalar 187 +#define KEY_seek 188 +#define KEY_seekdir 189 +#define KEY_select 190 +#define KEY_semctl 191 +#define KEY_semget 192 +#define KEY_semop 193 +#define KEY_send 194 +#define KEY_setgrent 195 +#define KEY_sethostent 196 +#define KEY_setnetent 197 +#define KEY_setpgrp 198 +#define KEY_setpriority 199 +#define KEY_setprotoent 200 +#define KEY_setpwent 201 +#define KEY_setservent 202 +#define KEY_setsockopt 203 +#define KEY_shift 204 +#define KEY_shmctl 205 +#define KEY_shmget 206 +#define KEY_shmread 207 +#define KEY_shmwrite 208 +#define KEY_shutdown 209 +#define KEY_sin 210 +#define KEY_sleep 211 +#define KEY_socket 212 +#define KEY_socketpair 213 +#define KEY_sort 214 +#define KEY_splice 215 +#define KEY_split 216 +#define KEY_sprintf 217 +#define KEY_sqrt 218 +#define KEY_srand 219 +#define KEY_stat 220 +#define KEY_state 221 +#define KEY_study 222 +#define KEY_sub 223 +#define KEY_substr 224 +#define KEY_symlink 225 +#define KEY_syscall 226 +#define KEY_sysopen 227 +#define KEY_sysread 228 +#define KEY_sysseek 229 +#define KEY_system 230 +#define KEY_syswrite 231 +#define KEY_tell 232 +#define KEY_telldir 233 +#define KEY_tie 234 +#define KEY_tied 235 +#define KEY_time 236 +#define KEY_times 237 +#define KEY_tr 238 +#define KEY_try 239 +#define KEY_truncate 240 +#define KEY_uc 241 +#define KEY_ucfirst 242 +#define KEY_umask 243 +#define KEY_undef 244 +#define KEY_unless 245 +#define KEY_unlink 246 +#define KEY_unpack 247 +#define KEY_unshift 248 +#define KEY_untie 249 +#define KEY_until 250 +#define KEY_use 251 +#define KEY_utime 252 +#define KEY_values 253 +#define KEY_vec 254 +#define KEY_wait 255 +#define KEY_waitpid 256 +#define KEY_wantarray 257 +#define KEY_warn 258 +#define KEY_while 259 +#define KEY_write 260 +#define KEY_x 261 +#define KEY_xor 262 +#define KEY_y 263 /* Generated from: - * 86050f368b9e57b4a97be585340ba2fb90e67ad48b8f44878e15020c52a47d8c regen/keywords.pl + * 93a0bae6c32726e80724e51b90f6b376f2b6c5705f1d20d705e97b7ea12bebe2 regen/keywords.pl * ex: set ro ft=c: */ diff --git a/lib/B/Deparse-core.t b/lib/B/Deparse-core.t index 2f8bedecc734..71c01a1c9ef2 100644 --- a/lib/B/Deparse-core.t +++ b/lib/B/Deparse-core.t @@ -502,6 +502,7 @@ endpwent 0 - endservent 0 - eof 01 - # also tested specially eq B - +equ B - eval 01 $+ evalbytes 01 $ exec @ p1 # also tested specially diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index f7ebf6cea1c8..566e12b6c859 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -7,7 +7,7 @@ # This is based on the module of the same name by Malcolm Beattie, # but essentially none of his code remains. -package B::Deparse 1.82; +package B::Deparse 1.83; use strict; use Carp; use B qw(class main_root main_start main_cv svref_2object opnumber perlstring @@ -17,6 +17,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPpCONST_BARE OPpEMPTYAVHV_IS_HV OPpCONST_TOKEN_MASK OPpCONST_TOKEN_LINE OPpCONST_TOKEN_FILE OPpCONST_TOKEN_PACKAGE + OPpEQ_UNDEF OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER OPpREPEAT_DOLIST OPpSORT_REVERSE OPpMULTIDEREF_EXISTS OPpMULTIDEREF_DELETE @@ -3144,7 +3145,7 @@ sub pp_i_ge { binop(@_, ">=", 15) } sub pp_i_le { binop(@_, "<=", 15) } sub pp_i_ncmp { maybe_targmy(@_, \&binop, "<=>", 14) } -sub pp_seq { binop(@_, "eq", 14) } +sub pp_seq { my $priv = $_[1]->private; binop(@_, $priv & OPpEQ_UNDEF ? "equ" : "eq", 14) } sub pp_sne { binop(@_, "ne", 14) } sub pp_slt { binop(@_, "lt", 15) } sub pp_sgt { binop(@_, "gt", 15) } diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index d4a4869d38c3..16e7d01be594 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -550,7 +550,7 @@ $bits{scomplement}{0} = $bf[0]; @{$bits{semget}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{semop}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{send}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); -@{$bits{seq}}{1,0} = ($bf[1], $bf[1]); +@{$bits{seq}}{7,1,0} = ('OPpEQ_UNDEF', $bf[1], $bf[1]); @{$bits{setpgrp}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{setpriority}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{sge}}{1,0} = ($bf[1], $bf[1]); @@ -668,6 +668,7 @@ our %defines = ( OPpENTERSUB_HASTARG => 4, OPpENTERSUB_INARGS => 1, OPpENTERSUB_NOPAREN => 128, + OPpEQ_UNDEF => 128, OPpEVAL_BYTES => 8, OPpEVAL_COPHH => 16, OPpEVAL_EVALSV => 64, @@ -792,6 +793,7 @@ our %labels = ( OPpENTERSUB_HASTARG => 'TARG', OPpENTERSUB_INARGS => 'INARGS', OPpENTERSUB_NOPAREN => 'NO()', + OPpEQ_UNDEF => 'UNDEF', OPpEVAL_BYTES => 'BYTES', OPpEVAL_COPHH => 'COPHH', OPpEVAL_EVALSV => 'EVALSV', @@ -888,6 +890,7 @@ our %ops_using = ( OPpENTERSUB_HASTARG => [qw(ceil entersub floor goto refaddr reftype rv2cv)], OPpENTERSUB_INARGS => [qw(entersub)], OPpENTERSUB_NOPAREN => [qw(rv2cv)], + OPpEQ_UNDEF => [qw(seq)], OPpEVAL_BYTES => [qw(entereval)], OPpEXISTS_SUB => [qw(exists)], OPpFLIP_LINENUM => [qw(flip flop)], diff --git a/op.c b/op.c index 1b5c11c58bc1..3689406f8845 100644 --- a/op.c +++ b/op.c @@ -4387,6 +4387,9 @@ Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right) BINOP *bop; OP *op; + U8 priv = 2 | (type >> 16); + type &= 0xFFFF; + if (!left) left = newOP(OP_NULL, 0); else @@ -4400,7 +4403,7 @@ Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right) ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP); OpTYPE_set(op, type); cBINOPx(op)->op_flags = OPf_KIDS; - cBINOPx(op)->op_private = 2; + cBINOPx(op)->op_private = priv; cBINOPx(op)->op_first = left; cBINOPx(op)->op_last = right; OpMORESIB_set(left, right); @@ -4414,6 +4417,9 @@ Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right) BINOP *bop; OP *op; + U8 priv = 2 | (type >> 16); + type &= 0xFFFF; + PERL_ARGS_ASSERT_CMPCHAIN_EXTEND; if (!right) right = newOP(OP_NULL, 0); @@ -4433,7 +4439,7 @@ Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right) cright = cBINOPx(ch)->op_last; cBINOPx(ch)->op_first = NULL; cBINOPx(ch)->op_last = NULL; - cBINOPx(ch)->op_private = 0; + cBINOPx(ch)->op_private = priv; cBINOPx(ch)->op_flags = 0; cUNOPx(nch)->op_first = cright; OpMORESIB_set(cright, ch); diff --git a/opcode.h b/opcode.h index c292061121a6..0e51378f48f7 100644 --- a/opcode.h +++ b/opcode.h @@ -2389,6 +2389,7 @@ END_EXTERN_C #define OPpCOREARGS_PUSHMARK 0x80 #define OPpDEFER_FINALLY 0x80 #define OPpENTERSUB_NOPAREN 0x80 +#define OPpEQ_UNDEF 0x80 #define OPpHELEMEXISTSOR_DELETE 0x80 #define OPpINITFIELDS 0x80 #define OPpLVALUE 0x80 @@ -2525,6 +2526,7 @@ EXTCONST char PL_op_private_labels[] = { 'T','A','R','G','M','Y','\0', 'T','O','K','E','N','\0', 'T','R','A','N','S','\0', + 'U','N','D','E','F','\0', 'U','N','I','\0', 'U','S','E','I','N','T','\0', 'U','S','E','_','S','V','O','P','\0', @@ -2551,11 +2553,11 @@ EXTCONST I16 PL_op_private_bitfields[] = { 0, 8, -1, 0, 8, -1, 0, 715, 1, 554, 2, 71, 3, 298, -1, - 0, 749, -1, + 0, 755, -1, 0, 8, -1, 0, 8, -1, - 0, 756, -1, - 0, 745, -1, + 0, 762, -1, + 0, 751, -1, 1, -1, 0, 694, 1, 39, 2, 324, -1, 4, -1, 1, 185, 2, 192, 3, 199, -1, 4, -1, 0, 694, 1, 39, 2, 324, 3, 131, -1, @@ -2658,22 +2660,22 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 13, /* sgt */ 13, /* sle */ 13, /* sge */ - 13, /* seq */ + 105, /* seq */ 13, /* sne */ 13, /* scmp */ - 105, /* bit_and */ - 105, /* bit_xor */ - 105, /* bit_or */ + 107, /* bit_and */ + 107, /* bit_xor */ + 107, /* bit_or */ 103, /* nbit_and */ 103, /* nbit_xor */ 103, /* nbit_or */ - 105, /* sbit_and */ - 105, /* sbit_xor */ - 105, /* sbit_or */ + 107, /* sbit_and */ + 107, /* sbit_xor */ + 107, /* sbit_or */ 78, /* negate */ 78, /* i_negate */ 0, /* not */ - 105, /* complement */ + 107, /* complement */ 103, /* ncomplement */ 78, /* scomplement */ 101, /* atan2 */ @@ -2688,12 +2690,12 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 78, /* hex */ 78, /* oct */ 78, /* abs */ - 106, /* length */ - 109, /* substr */ - 112, /* substr_left */ - 114, /* vec */ - 116, /* index */ - 116, /* rindex */ + 108, /* length */ + 111, /* substr */ + 114, /* substr_left */ + 116, /* vec */ + 118, /* index */ + 118, /* rindex */ 56, /* sprintf */ 56, /* formline */ 78, /* ord */ @@ -2704,94 +2706,94 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* uc */ 0, /* lc */ 0, /* quotemeta */ - 120, /* rv2av */ - 127, /* aelemfast */ - 127, /* aelemfast_lex */ - 127, /* aelemfastlex_store */ - 128, /* aelem */ - 133, /* aslice */ - 136, /* kvaslice */ + 122, /* rv2av */ + 129, /* aelemfast */ + 129, /* aelemfast_lex */ + 129, /* aelemfastlex_store */ + 130, /* aelem */ + 135, /* aslice */ + 138, /* kvaslice */ 0, /* aeach */ 0, /* avalues */ 44, /* akeys */ 0, /* each */ 44, /* values */ 44, /* keys */ - 137, /* delete */ - 141, /* exists */ - 143, /* rv2hv */ - 128, /* helem */ - 133, /* hslice */ - 136, /* kvhslice */ - 151, /* multideref */ + 139, /* delete */ + 143, /* exists */ + 145, /* rv2hv */ + 130, /* helem */ + 135, /* hslice */ + 138, /* kvhslice */ + 153, /* multideref */ 56, /* unpack */ 56, /* pack */ - 158, /* split */ + 160, /* split */ 56, /* join */ - 163, /* list */ + 165, /* list */ 13, /* lslice */ 56, /* anonlist */ 56, /* anonhash */ - 165, /* emptyavhv */ + 167, /* emptyavhv */ 56, /* splice */ 101, /* push */ 0, /* pop */ 0, /* shift */ 101, /* unshift */ - 170, /* sort */ - 175, /* reverse */ + 172, /* sort */ + 177, /* reverse */ 0, /* grepstart */ - 177, /* grepwhile */ + 179, /* grepwhile */ -1, /* anystart */ -1, /* allstart */ 0, /* anywhile */ 0, /* mapstart */ 0, /* mapwhile */ 0, /* range */ - 179, /* flip */ - 179, /* flop */ + 181, /* flip */ + 181, /* flop */ 0, /* and */ 0, /* or */ 13, /* xor */ 0, /* dor */ - 181, /* cond_expr */ + 183, /* cond_expr */ 0, /* andassign */ 0, /* orassign */ 0, /* dorassign */ - 183, /* entersub */ - 190, /* leavesub */ - 190, /* leavesublv */ + 185, /* entersub */ + 192, /* leavesub */ + 192, /* leavesublv */ 0, /* argcheck */ - 192, /* argelem */ - 194, /* argdefelem */ - 197, /* caller */ + 194, /* argelem */ + 196, /* argdefelem */ + 199, /* caller */ 56, /* warn */ 56, /* die */ 56, /* reset */ -1, /* lineseq */ - 199, /* nextstate */ - 199, /* dbstate */ + 201, /* nextstate */ + 201, /* dbstate */ -1, /* unstack */ -1, /* enter */ - 200, /* leave */ + 202, /* leave */ -1, /* scope */ - 202, /* enteriter */ - 206, /* iter */ + 204, /* enteriter */ + 208, /* iter */ -1, /* enterloop */ - 208, /* leaveloop */ + 210, /* leaveloop */ -1, /* return */ - 210, /* last */ - 210, /* next */ - 210, /* redo */ - 210, /* dump */ - 212, /* goto */ + 212, /* last */ + 212, /* next */ + 212, /* redo */ + 212, /* dump */ + 214, /* goto */ 56, /* exit */ - 215, /* method */ - 215, /* method_named */ - 215, /* method_super */ - 215, /* method_redir */ - 215, /* method_redir_super */ - 217, /* open */ + 217, /* method */ + 217, /* method_named */ + 217, /* method_super */ + 217, /* method_redir */ + 217, /* method_redir_super */ + 219, /* open */ 56, /* close */ 56, /* pipe_op */ 56, /* fileno */ @@ -2807,7 +2809,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 56, /* getc */ 56, /* read */ 56, /* enterwrite */ - 190, /* leavewrite */ + 192, /* leavewrite */ -1, /* prtf */ -1, /* print */ -1, /* say */ @@ -2837,33 +2839,33 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* getpeername */ 0, /* lstat */ 0, /* stat */ - 222, /* ftrread */ - 222, /* ftrwrite */ - 222, /* ftrexec */ - 222, /* fteread */ - 222, /* ftewrite */ - 222, /* fteexec */ - 227, /* ftis */ - 227, /* ftsize */ - 227, /* ftmtime */ - 227, /* ftatime */ - 227, /* ftctime */ - 227, /* ftrowned */ - 227, /* fteowned */ - 227, /* ftzero */ - 227, /* ftsock */ - 227, /* ftchr */ - 227, /* ftblk */ - 227, /* ftfile */ - 227, /* ftdir */ - 227, /* ftpipe */ - 227, /* ftsuid */ - 227, /* ftsgid */ - 227, /* ftsvtx */ - 227, /* ftlink */ - 227, /* fttty */ - 227, /* fttext */ - 227, /* ftbinary */ + 224, /* ftrread */ + 224, /* ftrwrite */ + 224, /* ftrexec */ + 224, /* fteread */ + 224, /* ftewrite */ + 224, /* fteexec */ + 229, /* ftis */ + 229, /* ftsize */ + 229, /* ftmtime */ + 229, /* ftatime */ + 229, /* ftctime */ + 229, /* ftrowned */ + 229, /* fteowned */ + 229, /* ftzero */ + 229, /* ftsock */ + 229, /* ftchr */ + 229, /* ftblk */ + 229, /* ftfile */ + 229, /* ftdir */ + 229, /* ftpipe */ + 229, /* ftsuid */ + 229, /* ftsgid */ + 229, /* ftsvtx */ + 229, /* ftlink */ + 229, /* fttty */ + 229, /* fttext */ + 229, /* ftbinary */ 56, /* chdir */ 101, /* chown */ 78, /* chroot */ @@ -2883,17 +2885,17 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* rewinddir */ 0, /* closedir */ -1, /* fork */ - 231, /* wait */ + 233, /* wait */ 101, /* waitpid */ 101, /* system */ 101, /* exec */ 101, /* kill */ - 231, /* getppid */ + 233, /* getppid */ 101, /* getpgrp */ 101, /* setpgrp */ 101, /* getpriority */ 101, /* setpriority */ - 231, /* time */ + 233, /* time */ -1, /* tms */ 0, /* localtime */ 56, /* gmtime */ @@ -2913,8 +2915,8 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* require */ 0, /* dofile */ -1, /* hintseval */ - 232, /* entereval */ - 190, /* leaveeval */ + 234, /* entereval */ + 192, /* leaveeval */ 0, /* entertry */ -1, /* leavetry */ 0, /* ghbyname */ @@ -2952,17 +2954,17 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* lock */ 0, /* once */ -1, /* custom */ - 239, /* coreargs */ - 243, /* avhvswitch */ + 241, /* coreargs */ + 245, /* avhvswitch */ 3, /* runcv */ 0, /* fc */ -1, /* padcv */ -1, /* introcv */ -1, /* clonecv */ - 245, /* padrange */ - 247, /* refassign */ - 253, /* lvref */ - 259, /* lvrefslice */ + 247, /* padrange */ + 249, /* refassign */ + 255, /* lvref */ + 261, /* lvrefslice */ 17, /* lvavref */ 0, /* anonconst */ 13, /* isa */ @@ -2972,20 +2974,20 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { -1, /* leavetrycatch */ -1, /* poptry */ 0, /* catch */ - 260, /* pushdefer */ + 262, /* pushdefer */ 0, /* is_bool */ 0, /* is_weak */ 0, /* weaken */ 0, /* unweaken */ 53, /* blessed */ - 262, /* refaddr */ - 262, /* reftype */ - 262, /* ceil */ - 262, /* floor */ + 264, /* refaddr */ + 264, /* reftype */ + 264, /* ceil */ + 264, /* floor */ 0, /* is_tainted */ - 265, /* helemexistsor */ - 267, /* methstart */ - 269, /* initfield */ + 267, /* helemexistsor */ + 269, /* methstart */ + 271, /* initfield */ -1, /* classname */ }; @@ -3011,7 +3013,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x077e, 0x0554, 0x1b70, 0x542c, 0x4fc8, 0x4225, /* const */ 0x3cfc, 0x47f9, /* gvsv */ 0x19d5, /* gv */ - 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, lslice, xor, isa */ + 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, sne, scmp, lslice, xor, isa */ 0x3cfc, 0x5378, 0x04f7, /* padsv */ 0x3cfc, 0x5378, 0x0003, /* padsv_store, lvavref */ 0x3cfc, 0x5378, 0x06d4, 0x3dec, 0x5149, /* padav */ @@ -3024,7 +3026,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x02af, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, chdir, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */ 0x49dc, 0x48f8, 0x2e74, 0x2db0, 0x0003, /* backtick */ 0x06d5, /* subst */ - 0x129c, 0x5b98, 0x0ad4, 0x528c, 0x28e8, 0x00c7, /* trans, transr */ + 0x129c, 0x5c58, 0x0ad4, 0x528c, 0x28e8, 0x00c7, /* trans, transr */ 0x10dc, 0x05f8, 0x0067, /* sassign */ 0x0d98, 0x0c94, 0x0b90, 0x3dec, 0x06c8, 0x0067, /* aassign */ 0x57d0, 0x0003, /* chomp, schomp, negate, i_negate, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */ @@ -3035,8 +3037,9 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x3fd8, 0x57d0, 0x0067, /* concat */ 0x3cfc, 0x0338, 0x1e34, 0x57d0, 0x550c, 0x0003, /* multiconcat */ 0x57d0, 0x02af, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */ - 0x57d0, 0x5aa9, /* left_shift, right_shift, nbit_and, nbit_xor, nbit_or, ncomplement */ - 0x5aa9, /* bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, complement */ + 0x57d0, 0x5b69, /* left_shift, right_shift, nbit_and, nbit_xor, nbit_or, ncomplement */ + 0x5a3c, 0x0067, /* seq */ + 0x5b69, /* bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, complement */ 0x06d4, 0x57d0, 0x0003, /* length */ 0x4d30, 0x3dec, 0x024b, /* substr */ 0x57d0, 0x024b, /* substr_left */ @@ -3069,14 +3072,14 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x3cfc, 0x47f8, 0x120c, 0x4ea5, /* enteriter */ 0x2f08, 0x4ea5, /* iter */ 0x3b9c, 0x0067, /* leaveloop */ - 0x5cbc, 0x0003, /* last, next, redo, dump */ - 0x5cbc, 0x5728, 0x0003, /* goto */ + 0x5d7c, 0x0003, /* last, next, redo, dump */ + 0x5d7c, 0x5728, 0x0003, /* goto */ 0x42e4, 0x0003, /* method, method_named, method_super, method_redir, method_redir_super */ 0x49dc, 0x48f8, 0x2e74, 0x2db0, 0x02af, /* open */ 0x2190, 0x23ec, 0x22a8, 0x2064, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */ 0x2190, 0x23ec, 0x22a8, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */ 0x57d1, /* wait, getppid, time */ - 0x1c78, 0x4c34, 0x0fb0, 0x082c, 0x5a28, 0x2704, 0x0003, /* entereval */ + 0x1c78, 0x4c34, 0x0fb0, 0x082c, 0x5ae8, 0x2704, 0x0003, /* entereval */ 0x3ebc, 0x0018, 0x14c4, 0x13e1, /* coreargs */ 0x3dec, 0x01e7, /* avhvswitch */ 0x3cfc, 0x031b, /* padrange */ @@ -3186,7 +3189,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* SGT */ (OPpARG2_MASK), /* SLE */ (OPpARG2_MASK), /* SGE */ (OPpARG2_MASK), - /* SEQ */ (OPpARG2_MASK), + /* SEQ */ (OPpARG2_MASK|OPpEQ_UNDEF), /* SNE */ (OPpARG2_MASK), /* SCMP */ (OPpARG2_MASK), /* BIT_AND */ (OPpUSEINT), diff --git a/pp.c b/pp.c index a3fd122c9152..99e1857b9247 100644 --- a/pp.c +++ b/pp.c @@ -2451,6 +2451,15 @@ PP(pp_seq) SV *right = PL_stack_sp[0]; SV *left = PL_stack_sp[-1]; + if(UNLIKELY(PL_op->op_private & OPpEQ_UNDEF)) { + bool lundef = !SvOK(left), rundef = !SvOK(right); + + if(lundef || rundef) { + rpp_replace_2_IMM_NN(boolSV(lundef && rundef)); + return NORMAL; + } + } + rpp_replace_2_IMM_NN(boolSV(sv_eq_flags(left, right, 0)));; return NORMAL; } diff --git a/regen/keywords.pl b/regen/keywords.pl index fef5b4186792..7bb37242530f 100755 --- a/regen/keywords.pl +++ b/regen/keywords.pl @@ -177,6 +177,7 @@ END -endservent -eof -eq +-equ +eval -evalbytes -exec diff --git a/regen/op_private b/regen/op_private index 302710c897ab..39797a65beea 100644 --- a/regen/op_private +++ b/regen/op_private @@ -920,6 +920,10 @@ addbits('emptyavhv', # 4 OPpTARGET_MY ); +addbits('seq', + 7 => qw(OPpEQ_UNDEF UNDEF), +); + addbits('argdefelem', 7 => qw(OPpARG_IF_UNDEF IF_UNDEF), 6 => qw(OPpARG_IF_FALSE IF_FALSE), diff --git a/t/op/coreamp.t b/t/op/coreamp.t index 1c2ee711363d..bb6528280f61 100644 --- a/t/op/coreamp.t +++ b/t/op/coreamp.t @@ -1167,7 +1167,7 @@ like $@, qr'^Undefined format "STDOUT" called', ADJUST AUTOLOAD BEGIN CHECK CORE DESTROY END INIT UNITCHECK __DATA__ __END__ all and any catch class cmp continue default defer do dump else elsif - eq eval field finally + eq equ eval field finally for foreach format ge given goto grep gt if isa last le local lt m map method 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 afcc072c46cd..c05f89b4c93e 100644 --- a/t/op/coresubs.t +++ b/t/op/coresubs.t @@ -18,8 +18,8 @@ use B; my %unsupported = map +($_=>1), qw ( __DATA__ __END__ ADJUST AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK - all and any catch class cmp continue defer do dump else elsif eq eval field - finally for foreach format ge goto grep gt if isa last le local + all and any catch class cmp continue defer do dump else elsif eq equ eval + field finally for foreach format ge goto grep gt if isa last le local lt m map method 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 while x xor y diff --git a/t/op/equ.t b/t/op/equ.t new file mode 100644 index 000000000000..cdf46d4eb180 --- /dev/null +++ b/t/op/equ.t @@ -0,0 +1,36 @@ +#!./perl + +use strict; +use warnings; + +BEGIN { + chdir 't' if -d 't'; + require './test.pl'; + set_up_inc('../lib'); +} + +# equ behaves like eq on defined strings +ok("abc" equ "abc", 'equ on identical values'); +ok("" equ "", 'equ on empty/empty'); +ok(not("abc" equ "def"), 'equ on different values'); + +# equ treats undef as distinct, equal to itself, with no warnings +{ + my $warnings = 0; + local $SIG{__WARN__} = sub { $warnings++; }; + + ok(undef equ undef, 'equ on undef/undef'); + ok(not(undef equ ""), 'equ on undef/empty'); + + is($warnings, 0, 'no warnings were produced by use of undef'); +} + +# performs GETMAGIC +{ + "abc" =~ m/(\d+)/; + # $1 should now be undef + "abc" =~ m/(\w+)/; + ok($1 equ "abc", 'equ performs GETMAGIC'); +} + +done_testing(); diff --git a/toke.c b/toke.c index 53857005992f..5995c2c928b3 100644 --- a/toke.c +++ b/toke.c @@ -8088,6 +8088,12 @@ yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct return REPORT(0); ChEop(OP_SEQ); + case KEY_equ: + /* TODO: feature guard? */ + if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) + return REPORT(0); + ChEop(OP_SEQ | (OPpEQ_UNDEF << 16)); + case KEY_exists: UNI(OP_EXISTS); From 6545ece10c9896cb3f273f2b9a87551fac8875b4 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Mon, 27 Jan 2025 16:39:05 +0000 Subject: [PATCH 3/6] Work-in-progress: Implement a PPC0031-style `eq:u` flagged operator Adds: * operator flag parser token type (OPFLAGS) * expected next token to be opflags or term (XOPFLAGTERM) * internal API function to modify operator opcode to add private flags (apply_opflags) Still TODO: * More robustness testing, especially around new PL_expect value * Think about and test how actual chaining works with multiple of these --- embed.fnc | 2 + embed.h | 1 + op.c | 22 + perl.h | 3 +- perly.act | 790 ++++++++-------- perly.h | 88 +- perly.tab | 2278 +++++++++++++++++++++++----------------------- perly.y | 26 +- pod/perldiag.pod | 9 + proto.h | 4 + t/op/equ.t | 28 + toke.c | 28 +- 12 files changed, 1709 insertions(+), 1570 deletions(-) diff --git a/embed.fnc b/embed.fnc index fbb3ed84f0ca..8f91f7b397ad 100644 --- a/embed.fnc +++ b/embed.fnc @@ -701,6 +701,8 @@ Apx |void |apply_attrs_string \ Adp |OP * |apply_builtin_cv_attributes \ |NN CV *cv \ |NULLOK OP *attrlist +Xp |U32 |apply_opflags |U32 optype \ + |NULLOK char *flagstr CTp |void |atfork_lock CTp |void |atfork_unlock Cop |SV ** |av_arylen_p |NN AV *av diff --git a/embed.h b/embed.h index 28d55b529cb5..e19d8227023b 100644 --- a/embed.h +++ b/embed.h @@ -1000,6 +1000,7 @@ # define amagic_applies(a,b,c) Perl_amagic_applies(aTHX_ a,b,c) # define amagic_is_enabled(a) Perl_amagic_is_enabled(aTHX_ a) # define apply(a,b,c) Perl_apply(aTHX_ a,b,c) +# define apply_opflags(a,b) Perl_apply_opflags(aTHX_ a,b) # define av_extend_guts(a,b,c,d,e) Perl_av_extend_guts(aTHX_ a,b,c,d,e) # define av_nonelem(a,b) Perl_av_nonelem(aTHX_ a,b) # define av_remove_offset(a) Perl_av_remove_offset(aTHX_ a) diff --git a/op.c b/op.c index 3689406f8845..1549303c5252 100644 --- a/op.c +++ b/op.c @@ -16192,6 +16192,28 @@ Perl_rcpv_copy(pTHX_ char *pv) { return pv; } +U32 +Perl_apply_opflags(pTHX_ U32 opcode, char *flagstr) +{ + U16 opcode_base = opcode & 0xFFFF; + U8 priv = (opcode_base >> 16) & 0xFF; + + for(char flag; (flag = *flagstr); flagstr++) { + switch(opcode_base) { + case OP_SEQ: + case OP_EQ: + switch(flag) { + case 'u': + priv |= OPpEQ_UNDEF; + continue; + } + } + croak("Unrecognized flag '%c' for %s", flag, PL_op_desc[opcode_base]); + } + + return opcode_base | (priv << 16); +} + /* * ex: set ts=8 sts=4 sw=4 et: */ diff --git a/perl.h b/perl.h index ec8f9a379b27..a692b39a8161 100644 --- a/perl.h +++ b/perl.h @@ -5898,7 +5898,8 @@ typedef enum { XTERMBLOCK, XBLOCKTERM, XPOSTDEREF, - XTERMORDORDOR /* evil hack */ + XTERMORDORDOR, /* evil hack */ + XOPFLAGSTERM, /* next token should be opflags or a term */ /* update exp_name[] in toke.c if adding to this enum */ } expectation; diff --git a/perly.act b/perly.act index 8a1ec84c054a..8815c8df5ff3 100644 --- a/perly.act +++ b/perly.act @@ -5,7 +5,7 @@ */ case 2: /* @1: %empty */ -#line 160 "perly.y" +#line 163 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -14,7 +14,7 @@ case 2: /* @1: %empty */ break; case 3: /* grammar: GRAMPROG @1 remember stmtseq */ -#line 165 "perly.y" +#line 168 "perly.y" { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; @@ -24,7 +24,7 @@ case 2: /* @1: %empty */ break; case 4: /* @2: %empty */ -#line 171 "perly.y" +#line 174 "perly.y" { parser->expect = XTERM; (yyval.ival) = 0; @@ -33,7 +33,7 @@ case 2: /* @1: %empty */ break; case 5: /* grammar: GRAMEXPR @2 optexpr */ -#line 176 "perly.y" +#line 179 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -42,7 +42,7 @@ case 2: /* @1: %empty */ break; case 6: /* @3: %empty */ -#line 181 "perly.y" +#line 184 "perly.y" { parser->expect = XBLOCK; (yyval.ival) = 0; @@ -51,7 +51,7 @@ case 2: /* @1: %empty */ break; case 7: /* grammar: GRAMBLOCK @3 block */ -#line 186 "perly.y" +#line 189 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -63,7 +63,7 @@ case 2: /* @1: %empty */ break; case 8: /* @4: %empty */ -#line 194 "perly.y" +#line 197 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -72,7 +72,7 @@ case 2: /* @1: %empty */ break; case 9: /* grammar: GRAMBARESTMT @4 barestmt */ -#line 199 "perly.y" +#line 202 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -84,7 +84,7 @@ case 2: /* @1: %empty */ break; case 10: /* @5: %empty */ -#line 207 "perly.y" +#line 210 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -93,7 +93,7 @@ case 2: /* @1: %empty */ break; case 11: /* grammar: GRAMFULLSTMT @5 fullstmt */ -#line 212 "perly.y" +#line 215 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -105,7 +105,7 @@ case 2: /* @1: %empty */ break; case 12: /* @6: %empty */ -#line 220 "perly.y" +#line 223 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -114,7 +114,7 @@ case 2: /* @1: %empty */ break; case 13: /* grammar: GRAMSTMTSEQ @6 stmtseq */ -#line 225 "perly.y" +#line 228 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -123,7 +123,7 @@ case 2: /* @1: %empty */ break; case 14: /* @7: %empty */ -#line 230 "perly.y" +#line 233 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -132,7 +132,7 @@ case 2: /* @1: %empty */ break; case 15: /* grammar: GRAMSUBSIGNATURE @7 subsigguts */ -#line 235 "perly.y" +#line 238 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -141,19 +141,19 @@ case 2: /* @1: %empty */ break; case 16: /* sigsub_or_method_named: KW_SUB_named_sig */ -#line 244 "perly.y" +#line 247 "perly.y" { (yyval.ival) = KW_SUB_named_sig; } break; case 17: /* sigsub_or_method_named: KW_METHOD_named */ -#line 246 "perly.y" +#line 249 "perly.y" { (yyval.ival) = KW_METHOD_named; } break; case 18: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */ -#line 251 "perly.y" +#line 254 "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)); @@ -162,13 +162,13 @@ case 2: /* @1: %empty */ break; case 19: /* empty: %empty */ -#line 258 "perly.y" +#line 261 "perly.y" { (yyval.opval) = NULL; } break; case 20: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */ -#line 263 "perly.y" +#line 266 "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)); @@ -177,14 +177,14 @@ case 2: /* @1: %empty */ break; case 21: /* remember: %empty */ -#line 270 "perly.y" +#line 273 "perly.y" { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 22: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */ -#line 275 "perly.y" +#line 278 "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)); @@ -193,32 +193,32 @@ case 2: /* @1: %empty */ break; case 23: /* mremember: %empty */ -#line 282 "perly.y" +#line 285 "perly.y" { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 25: /* $@8: %empty */ -#line 291 "perly.y" +#line 294 "perly.y" { parser->in_my = 1; } break; case 26: /* $@9: %empty */ -#line 293 "perly.y" +#line 296 "perly.y" { parser->in_my = 0; intro_my(); } break; case 27: /* catch_paren: PERLY_PAREN_OPEN $@8 scalar $@9 PERLY_PAREN_CLOSE */ -#line 295 "perly.y" +#line 298 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 29: /* stmtseq: stmtseq fullstmt */ -#line 302 "perly.y" +#line 305 "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)) @@ -228,7 +228,7 @@ case 2: /* @1: %empty */ break; case 31: /* formstmtseq: formstmtseq formline */ -#line 313 "perly.y" +#line 316 "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)) @@ -238,7 +238,7 @@ case 2: /* @1: %empty */ break; case 32: /* fullstmt: barestmt */ -#line 322 "perly.y" +#line 325 "perly.y" { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -246,13 +246,13 @@ case 2: /* @1: %empty */ break; case 33: /* fullstmt: labfullstmt */ -#line 326 "perly.y" +#line 329 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 34: /* labfullstmt: LABEL barestmt */ -#line 330 "perly.y" +#line 333 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -263,7 +263,7 @@ case 2: /* @1: %empty */ break; case 35: /* labfullstmt: LABEL labfullstmt */ -#line 337 "perly.y" +#line 340 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -274,13 +274,13 @@ case 2: /* @1: %empty */ break; case 36: /* barestmt: PLUGSTMT */ -#line 347 "perly.y" +#line 350 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 37: /* barestmt: KW_FORMAT startformsub formname formblock */ -#line 349 "perly.y" +#line 352 "perly.y" { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -294,7 +294,7 @@ case 2: /* @1: %empty */ break; case 38: /* $@10: %empty */ -#line 361 "perly.y" +#line 364 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -304,7 +304,7 @@ case 2: /* @1: %empty */ break; case 39: /* barestmt: KW_SUB_named subname startsub $@10 proto subattrlist optsubbody */ -#line 367 "perly.y" +#line 370 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -319,7 +319,7 @@ case 2: /* @1: %empty */ break; case 40: /* $@11: %empty */ -#line 382 "perly.y" +#line 385 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); if((ps[-2].val.ival) == KW_METHOD_named) { @@ -333,7 +333,7 @@ case 2: /* @1: %empty */ break; case 41: /* barestmt: sigsub_or_method_named subname startsub $@11 subattrlist optsigsubbody */ -#line 392 "perly.y" +#line 395 "perly.y" { OP *body = (ps[0].val.opval); @@ -350,7 +350,7 @@ case 2: /* @1: %empty */ break; case 42: /* $@12: %empty */ -#line 405 "perly.y" +#line 408 "perly.y" { switch((ps[-1].val.ival)) { case KEY_ADJUST: @@ -365,7 +365,7 @@ case 2: /* @1: %empty */ break; case 43: /* barestmt: PHASER startsub $@12 optsubbody */ -#line 416 "perly.y" +#line 419 "perly.y" { OP *body = (ps[0].val.opval); SvREFCNT_inc_simple_void(PL_compcv); @@ -384,7 +384,7 @@ case 2: /* @1: %empty */ break; case 44: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */ -#line 435 "perly.y" +#line 438 "perly.y" { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) @@ -395,7 +395,7 @@ case 2: /* @1: %empty */ break; case 45: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_SEMICOLON */ -#line 442 "perly.y" +#line 445 "perly.y" { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) @@ -410,13 +410,13 @@ case 2: /* @1: %empty */ break; case 46: /* $@13: %empty */ -#line 453 "perly.y" +#line 456 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 47: /* barestmt: KW_USE_or_NO startsub $@13 BAREWORD BAREWORD optlistexpr PERLY_SEMICOLON */ -#line 457 "perly.y" +#line 460 "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)); @@ -427,7 +427,7 @@ case 2: /* @1: %empty */ break; case 48: /* barestmt: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 464 "perly.y" +#line 467 "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))); @@ -437,7 +437,7 @@ case 2: /* @1: %empty */ break; case 49: /* barestmt: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 470 "perly.y" +#line 473 "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)))); @@ -447,7 +447,7 @@ case 2: /* @1: %empty */ break; case 50: /* barestmt: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 476 "perly.y" +#line 479 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -458,7 +458,7 @@ case 2: /* @1: %empty */ break; case 51: /* barestmt: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 483 "perly.y" +#line 486 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -469,19 +469,19 @@ case 2: /* @1: %empty */ break; case 52: /* $@14: %empty */ -#line 490 "perly.y" +#line 493 "perly.y" { parser->expect = XTERM; } break; case 53: /* $@15: %empty */ -#line 492 "perly.y" +#line 495 "perly.y" { parser->expect = XTERM; } break; case 54: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mnexpr PERLY_SEMICOLON $@14 texpr PERLY_SEMICOLON $@15 mintro mnexpr PERLY_PAREN_CLOSE mblock */ -#line 495 "perly.y" +#line 498 "perly.y" { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, @@ -500,7 +500,7 @@ case 2: /* @1: %empty */ break; case 55: /* barestmt: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 510 "perly.y" +#line 513 "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); @@ -509,7 +509,7 @@ case 2: /* @1: %empty */ break; case 56: /* barestmt: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 515 "perly.y" +#line 518 "perly.y" { if ((ps[-6].val.opval)->op_type == OP_PADSV) /* degenerate case of 1 var: for my ($x) .... @@ -522,7 +522,7 @@ case 2: /* @1: %empty */ break; case 57: /* barestmt: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 524 "perly.y" +#line 527 "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))); @@ -532,13 +532,13 @@ case 2: /* @1: %empty */ break; case 58: /* @16: %empty */ -#line 530 "perly.y" +#line 533 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 59: /* barestmt: KW_FOR my_refgen remember my_var @16 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 532 "perly.y" +#line 535 "perly.y" { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -555,7 +555,7 @@ case 2: /* @1: %empty */ break; case 60: /* barestmt: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 545 "perly.y" +#line 548 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, @@ -567,7 +567,7 @@ case 2: /* @1: %empty */ break; case 61: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 553 "perly.y" +#line 556 "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))); @@ -577,7 +577,7 @@ case 2: /* @1: %empty */ break; case 62: /* $@17: %empty */ -#line 559 "perly.y" +#line 562 "perly.y" { if(!(ps[0].val.opval)) { yyerror("catch block requires a (VAR)"); @@ -588,7 +588,7 @@ case 2: /* @1: %empty */ break; case 63: /* barestmt: KW_TRY mblock KW_CATCH remember catch_paren $@17 mblock finally */ -#line 566 "perly.y" +#line 569 "perly.y" { (yyval.opval) = newTRYCATCHOP(0, (ps[-6].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[-1].val.opval)))); @@ -600,7 +600,7 @@ case 2: /* @1: %empty */ break; case 64: /* barestmt: block cont */ -#line 574 "perly.y" +#line 577 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -610,7 +610,7 @@ case 2: /* @1: %empty */ break; case 65: /* $@18: %empty */ -#line 580 "perly.y" +#line 583 "perly.y" { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { @@ -621,7 +621,7 @@ case 2: /* @1: %empty */ break; case 66: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_BRACE_OPEN remember $@18 stmtseq PERLY_BRACE_CLOSE */ -#line 587 "perly.y" +#line 590 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -633,7 +633,7 @@ case 2: /* @1: %empty */ break; case 67: /* $@19: %empty */ -#line 595 "perly.y" +#line 598 "perly.y" { package((ps[-3].val.opval)); @@ -649,7 +649,7 @@ case 2: /* @1: %empty */ break; case 68: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_BRACE_OPEN remember $@19 stmtseq PERLY_BRACE_CLOSE */ -#line 607 "perly.y" +#line 610 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -661,7 +661,7 @@ case 2: /* @1: %empty */ break; case 69: /* barestmt: fielddecl PERLY_SEMICOLON */ -#line 615 "perly.y" +#line 618 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -669,7 +669,7 @@ case 2: /* @1: %empty */ break; case 70: /* barestmt: sideff PERLY_SEMICOLON */ -#line 619 "perly.y" +#line 622 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -677,7 +677,7 @@ case 2: /* @1: %empty */ break; case 71: /* barestmt: KW_DEFER mblock */ -#line 623 "perly.y" +#line 626 "perly.y" { (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); } @@ -685,7 +685,7 @@ case 2: /* @1: %empty */ break; case 72: /* barestmt: YADAYADA PERLY_SEMICOLON */ -#line 627 "perly.y" +#line 630 "perly.y" { /* diag_listed_as: Unimplemented */ (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), @@ -695,7 +695,7 @@ case 2: /* @1: %empty */ break; case 73: /* barestmt: PERLY_SEMICOLON */ -#line 633 "perly.y" +#line 636 "perly.y" { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -704,7 +704,7 @@ case 2: /* @1: %empty */ break; case 74: /* formline: THING formarg */ -#line 641 "perly.y" +#line 644 "perly.y" { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -723,56 +723,56 @@ case 2: /* @1: %empty */ break; case 76: /* formarg: FORMLBRACK stmtseq FORMRBRACK */ -#line 660 "perly.y" +#line 663 "perly.y" { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 78: /* sideff: error */ -#line 668 "perly.y" +#line 671 "perly.y" { (yyval.opval) = NULL; } break; case 79: /* sideff: expr */ -#line 670 "perly.y" +#line 673 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 80: /* sideff: expr KW_IF condition */ -#line 672 "perly.y" +#line 675 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 81: /* sideff: expr KW_UNLESS condition */ -#line 674 "perly.y" +#line 677 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 82: /* sideff: expr KW_WHILE condition */ -#line 676 "perly.y" +#line 679 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 83: /* sideff: expr KW_UNTIL iexpr */ -#line 678 "perly.y" +#line 681 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 84: /* sideff: expr KW_FOR condition */ -#line 680 "perly.y" +#line 683 "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 86: /* else: KW_ELSE mblock */ -#line 688 "perly.y" +#line 691 "perly.y" { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -781,7 +781,7 @@ case 2: /* @1: %empty */ break; case 87: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */ -#line 693 "perly.y" +#line 696 "perly.y" { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -792,25 +792,25 @@ case 2: /* @1: %empty */ break; case 89: /* cont: KW_CONTINUE block */ -#line 705 "perly.y" +#line 708 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 90: /* finally: %empty */ -#line 710 "perly.y" +#line 713 "perly.y" { (yyval.opval) = NULL; } break; case 91: /* finally: KW_FINALLY block */ -#line 712 "perly.y" +#line 715 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 92: /* mintro: %empty */ -#line 717 "perly.y" +#line 720 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -818,7 +818,7 @@ case 2: /* @1: %empty */ break; case 95: /* texpr: %empty */ -#line 729 "perly.y" +#line 732 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -826,59 +826,59 @@ case 2: /* @1: %empty */ break; case 97: /* iexpr: expr */ -#line 737 "perly.y" +#line 740 "perly.y" { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 98: /* mexpr: expr */ -#line 742 "perly.y" +#line 745 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 99: /* mnexpr: nexpr */ -#line 746 "perly.y" +#line 749 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 100: /* formname: BAREWORD */ -#line 749 "perly.y" +#line 752 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 102: /* startsub: %empty */ -#line 754 "perly.y" +#line 757 "perly.y" { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 103: /* startanonsub: %empty */ -#line 760 "perly.y" +#line 763 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 104: /* startanonmethod: %empty */ -#line 765 "perly.y" +#line 768 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD); SAVEFREESV(PL_compcv); } break; case 105: /* startformsub: %empty */ -#line 770 "perly.y" +#line 773 "perly.y" { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 111: /* subattrlist: COLONATTR THING */ -#line 789 "perly.y" +#line 792 "perly.y" { OP *attrlist = (ps[0].val.opval); if(attrlist && !PL_parser->sig_seen) @@ -889,49 +889,49 @@ case 2: /* @1: %empty */ break; case 112: /* subattrlist: COLONATTR */ -#line 796 "perly.y" +#line 799 "perly.y" { (yyval.opval) = NULL; } break; case 113: /* myattrlist: COLONATTR THING */ -#line 801 "perly.y" +#line 804 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 114: /* myattrlist: COLONATTR */ -#line 803 "perly.y" +#line 806 "perly.y" { (yyval.opval) = NULL; } break; case 115: /* sigvarname: %empty */ -#line 814 "perly.y" +#line 817 "perly.y" { parser->in_my = 0; (yyval.opval) = NULL; } break; case 116: /* sigvarname: PRIVATEREF */ -#line 816 "perly.y" +#line 819 "perly.y" { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; case 117: /* sigslurpsigil: PERLY_SNAIL */ -#line 821 "perly.y" +#line 824 "perly.y" { (yyval.ival) = '@'; } break; case 118: /* sigslurpsigil: PERLY_PERCENT_SIGN */ -#line 823 "perly.y" +#line 826 "perly.y" { (yyval.ival) = '%'; } break; case 119: /* sigslurpelem: sigslurpsigil sigvarname sigdefault */ -#line 827 "perly.y" +#line 830 "perly.y" { I32 sigil = (ps[-2].val.ival); OP *var = (ps[-1].val.opval); @@ -951,13 +951,13 @@ case 2: /* @1: %empty */ break; case 121: /* sigdefault: ASSIGNOP */ -#line 848 "perly.y" +#line 851 "perly.y" { (yyval.opval) = newARGDEFELEMOP(0, newOP(OP_NULL, 0), parser->sig_elems); } break; case 122: /* sigdefault: ASSIGNOP term */ -#line 850 "perly.y" +#line 853 "perly.y" { I32 flags = 0; if ((ps[-1].val.ival) == OP_DORASSIGN) @@ -970,7 +970,7 @@ case 2: /* @1: %empty */ break; case 123: /* sigscalarelem: PERLY_DOLLAR sigvarname sigdefault */ -#line 863 "perly.y" +#line 866 "perly.y" { OP *var = (ps[-1].val.opval); OP *defop = (ps[0].val.opval); @@ -1030,25 +1030,25 @@ case 2: /* @1: %empty */ break; case 124: /* sigelem: sigscalarelem */ -#line 923 "perly.y" +#line 926 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 125: /* sigelem: sigslurpelem */ -#line 925 "perly.y" +#line 928 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; case 126: /* siglist: siglist PERLY_COMMA */ -#line 931 "perly.y" +#line 934 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 127: /* siglist: siglist PERLY_COMMA sigelem */ -#line 933 "perly.y" +#line 936 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } @@ -1056,19 +1056,19 @@ case 2: /* @1: %empty */ break; case 128: /* siglist: sigelem */ -#line 937 "perly.y" +#line 940 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 133: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ -#line 954 "perly.y" +#line 957 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 134: /* $@20: %empty */ -#line 957 "perly.y" +#line 960 "perly.y" { ENTER; SAVEIV(parser->sig_elems); @@ -1083,7 +1083,7 @@ case 2: /* @1: %empty */ break; case 135: /* subsigguts: $@20 optsiglist */ -#line 968 "perly.y" +#line 971 "perly.y" { OP *sigops = (ps[0].val.opval); struct op_argcheck_aux *aux; @@ -1140,13 +1140,13 @@ case 2: /* @1: %empty */ break; case 137: /* optsubbody: PERLY_SEMICOLON */ -#line 1025 "perly.y" +#line 1028 "perly.y" { (yyval.opval) = NULL; } break; case 138: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ -#line 1031 "perly.y" +#line 1034 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1156,19 +1156,19 @@ case 2: /* @1: %empty */ break; case 140: /* optsigsubbody: PERLY_SEMICOLON */ -#line 1043 "perly.y" +#line 1046 "perly.y" { (yyval.opval) = NULL; } break; case 141: /* $@21: %empty */ -#line 1048 "perly.y" +#line 1051 "perly.y" { PL_parser->sig_seen = FALSE; } break; case 142: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ -#line 1050 "perly.y" +#line 1053 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); @@ -1179,37 +1179,37 @@ case 2: /* @1: %empty */ break; case 143: /* expr: expr ANDOP expr */ -#line 1061 "perly.y" +#line 1064 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 144: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ -#line 1063 "perly.y" +#line 1066 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 145: /* expr: expr OROP expr */ -#line 1065 "perly.y" +#line 1068 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 146: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ -#line 1067 "perly.y" +#line 1070 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 148: /* listexpr: listexpr PERLY_COMMA */ -#line 1073 "perly.y" +#line 1076 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; case 149: /* listexpr: listexpr PERLY_COMMA term */ -#line 1075 "perly.y" +#line 1078 "perly.y" { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1218,7 +1218,7 @@ case 2: /* @1: %empty */ break; case 151: /* listop: LSTOP indirob listexpr */ -#line 1084 "perly.y" +#line 1087 "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)) ); } @@ -1226,7 +1226,7 @@ case 2: /* @1: %empty */ break; case 152: /* listop: BLKLSTOP block listexpr */ -#line 1088 "perly.y" +#line 1091 "perly.y" { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newUNOP(OP_NULL, 0, op_scope((ps[-1].val.opval))), (ps[0].val.opval)) ); } @@ -1234,7 +1234,7 @@ case 2: /* @1: %empty */ break; case 153: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ -#line 1092 "perly.y" +#line 1095 "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)) ); } @@ -1242,7 +1242,7 @@ case 2: /* @1: %empty */ break; case 154: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1096 "perly.y" +#line 1099 "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)), @@ -1252,7 +1252,7 @@ case 2: /* @1: %empty */ break; case 155: /* listop: term ARROW methodname */ -#line 1102 "perly.y" +#line 1105 "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)))); @@ -1261,7 +1261,7 @@ case 2: /* @1: %empty */ break; case 156: /* listop: METHCALL0 indirob optlistexpr */ -#line 1107 "perly.y" +#line 1110 "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)), @@ -1271,7 +1271,7 @@ case 2: /* @1: %empty */ break; case 157: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1113 "perly.y" +#line 1116 "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)), @@ -1281,25 +1281,25 @@ case 2: /* @1: %empty */ break; case 158: /* listop: LSTOP optlistexpr */ -#line 1119 "perly.y" +#line 1122 "perly.y" { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 159: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1121 "perly.y" +#line 1124 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 160: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ -#line 1123 "perly.y" +#line 1126 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; case 161: /* @22: %empty */ -#line 1125 "perly.y" +#line 1128 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); /* prevent double op_free() if the following fails to parse */ @@ -1309,7 +1309,7 @@ case 2: /* @1: %empty */ break; case 162: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ -#line 1131 "perly.y" +#line 1134 "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))); @@ -1318,20 +1318,20 @@ case 2: /* @1: %empty */ break; case 165: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1146 "perly.y" +#line 1149 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; case 166: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1148 "perly.y" +#line 1151 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; case 167: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1151 "perly.y" +#line 1154 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1340,7 +1340,7 @@ case 2: /* @1: %empty */ break; case 168: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1156 "perly.y" +#line 1159 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1349,14 +1349,14 @@ case 2: /* @1: %empty */ break; case 169: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1161 "perly.y" +#line 1164 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; case 170: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1164 "perly.y" +#line 1167 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1364,7 +1364,7 @@ case 2: /* @1: %empty */ break; case 171: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1168 "perly.y" +#line 1171 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } @@ -1372,7 +1372,7 @@ case 2: /* @1: %empty */ break; case 172: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1172 "perly.y" +#line 1175 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1382,7 +1382,7 @@ case 2: /* @1: %empty */ break; case 173: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1178 "perly.y" +#line 1181 "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))))); @@ -1393,7 +1393,7 @@ case 2: /* @1: %empty */ break; case 174: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1186 "perly.y" +#line 1189 "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))))); @@ -1404,7 +1404,7 @@ case 2: /* @1: %empty */ break; case 175: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1193 "perly.y" +#line 1196 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1414,55 +1414,55 @@ case 2: /* @1: %empty */ break; case 176: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1199 "perly.y" +#line 1202 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 177: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1201 "perly.y" +#line 1204 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 178: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1203 "perly.y" +#line 1206 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 179: /* termbinop: term PLUGIN_HIGH_OP term */ -#line 1208 "perly.y" +#line 1211 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 180: /* termbinop: term ASSIGNOP term */ -#line 1210 "perly.y" +#line 1213 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 181: /* termbinop: term PLUGIN_ASSIGN_OP term */ -#line 1212 "perly.y" +#line 1215 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 182: /* termbinop: term POWOP term */ -#line 1214 "perly.y" +#line 1217 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 183: /* termbinop: term PLUGIN_POW_OP term */ -#line 1216 "perly.y" +#line 1219 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 184: /* termbinop: term MULOP term */ -#line 1218 "perly.y" +#line 1221 "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))); @@ -1471,219 +1471,235 @@ case 2: /* @1: %empty */ break; case 185: /* termbinop: term PLUGIN_MUL_OP term */ -#line 1223 "perly.y" +#line 1226 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 186: /* termbinop: term ADDOP term */ -#line 1225 "perly.y" +#line 1228 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 187: /* termbinop: term PLUGIN_ADD_OP term */ -#line 1227 "perly.y" +#line 1230 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 188: /* termbinop: term SHIFTOP term */ -#line 1229 "perly.y" +#line 1232 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 189: /* termbinop: termrelop */ -#line 1231 "perly.y" +#line 1234 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 190: /* termbinop: termeqop */ -#line 1233 "perly.y" +#line 1236 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 191: /* termbinop: term BITANDOP term */ -#line 1235 "perly.y" +#line 1238 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 192: /* termbinop: term BITOROP term */ -#line 1237 "perly.y" +#line 1240 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 193: /* termbinop: term DOTDOT term */ -#line 1239 "perly.y" +#line 1242 "perly.y" { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 194: /* termbinop: term ANDAND term */ -#line 1241 "perly.y" +#line 1244 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 195: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ -#line 1243 "perly.y" +#line 1246 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 196: /* termbinop: term OROR term */ -#line 1245 "perly.y" +#line 1248 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 197: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ -#line 1247 "perly.y" +#line 1250 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 198: /* termbinop: term DORDOR term */ -#line 1249 "perly.y" +#line 1252 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 199: /* termbinop: term MATCHOP term */ -#line 1251 "perly.y" +#line 1254 "perly.y" { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 200: /* termbinop: term PLUGIN_LOW_OP term */ -#line 1253 "perly.y" +#line 1256 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 201: /* termrelop: relopchain */ -#line 1257 "perly.y" +#line 1260 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 202: /* termrelop: term NCRELOP term */ -#line 1259 "perly.y" +#line 1262 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 203: /* termrelop: termrelop NCRELOP */ -#line 1261 "perly.y" +#line 1264 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 204: /* termrelop: termrelop CHRELOP */ -#line 1263 "perly.y" +#line 1266 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 205: /* termrelop: term PLUGIN_REL_OP term */ -#line 1265 "perly.y" +#line 1268 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; case 206: /* relopchain: term CHRELOP term */ -#line 1269 "perly.y" +#line 1272 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 207: /* relopchain: relopchain CHRELOP term */ -#line 1271 "perly.y" +#line 1274 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 208: /* termeqop: eqopchain */ -#line 1275 "perly.y" +#line 1278 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 209: /* termeqop: term NCEQOP term */ -#line 1277 "perly.y" +#line 1280 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 210: /* termeqop: termeqop NCEQOP */ -#line 1279 "perly.y" +#line 1282 "perly.y" { yyerror("syntax error"); YYERROR; } break; case 211: /* termeqop: termeqop CHEQOP */ -#line 1281 "perly.y" +#line 1284 "perly.y" { yyerror("syntax error"); YYERROR; } break; - case 212: /* eqopchain: term CHEQOP term */ -#line 1285 "perly.y" - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + case 212: /* optopflags: %empty */ +#line 1288 "perly.y" + { (yyval.svval) = NULL; } break; - case 213: /* eqopchain: eqopchain CHEQOP term */ -#line 1287 "perly.y" - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } + case 214: /* eqopchain: term CHEQOP optopflags term */ +#line 1293 "perly.y" + { U32 opcode = (ps[-2].val.ival); + if((ps[-1].val.svval)) { + SAVEFREESV((ps[-1].val.svval)); + opcode = apply_opflags(opcode, SvPV_nolen((ps[-1].val.svval))); + } + (yyval.opval) = cmpchain_start(opcode, (ps[-3].val.opval), (ps[0].val.opval)); } break; - case 214: /* termunop: PERLY_MINUS term */ -#line 1292 "perly.y" + case 215: /* eqopchain: eqopchain CHEQOP optopflags term */ +#line 1300 "perly.y" + { U32 opcode = (ps[-2].val.ival); + if((ps[-1].val.svval)) { + SAVEFREESV((ps[-1].val.svval)); + opcode = apply_opflags(opcode, SvPV_nolen((ps[-1].val.svval))); + } + (yyval.opval) = cmpchain_extend(opcode, (ps[-3].val.opval), (ps[0].val.opval)); } + + break; + + case 216: /* termunop: PERLY_MINUS term */ +#line 1310 "perly.y" { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; - case 215: /* termunop: PERLY_PLUS term */ -#line 1294 "perly.y" + case 217: /* termunop: PERLY_PLUS term */ +#line 1312 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 216: /* termunop: PERLY_EXCLAMATION_MARK term */ -#line 1297 "perly.y" + case 218: /* termunop: PERLY_EXCLAMATION_MARK term */ +#line 1315 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 217: /* termunop: PERLY_TILDE term */ -#line 1299 "perly.y" + case 219: /* termunop: PERLY_TILDE term */ +#line 1317 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; - case 218: /* termunop: term POSTINC */ -#line 1301 "perly.y" + case 220: /* termunop: term POSTINC */ +#line 1319 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; - case 219: /* termunop: term POSTDEC */ -#line 1304 "perly.y" + case 221: /* termunop: term POSTDEC */ +#line 1322 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; - case 220: /* termunop: term POSTJOIN */ -#line 1307 "perly.y" + case 222: /* termunop: term POSTJOIN */ +#line 1325 "perly.y" { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1697,48 +1713,48 @@ case 2: /* @1: %empty */ break; - case 221: /* termunop: PREINC term */ -#line 1318 "perly.y" + case 223: /* termunop: PREINC term */ +#line 1336 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; - case 222: /* termunop: PREDEC term */ -#line 1321 "perly.y" + case 224: /* termunop: PREDEC term */ +#line 1339 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; - case 223: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ -#line 1329 "perly.y" + case 225: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ +#line 1347 "perly.y" { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; - case 224: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1331 "perly.y" + case 226: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1349 "perly.y" { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; - case 225: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ -#line 1333 "perly.y" + case 227: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ +#line 1351 "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 226: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ -#line 1336 "perly.y" + case 228: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ +#line 1354 "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 227: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ -#line 1339 "perly.y" + case 229: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ +#line 1357 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); @@ -1746,98 +1762,98 @@ case 2: /* @1: %empty */ break; - case 228: /* termdo: KW_DO term */ -#line 1347 "perly.y" + case 230: /* termdo: KW_DO term */ +#line 1365 "perly.y" { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 229: /* termdo: KW_DO block */ -#line 1349 "perly.y" + case 231: /* termdo: KW_DO block */ +#line 1367 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; - case 234: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ -#line 1357 "perly.y" + case 236: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ +#line 1375 "perly.y" { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 235: /* term: REFGEN term */ -#line 1359 "perly.y" + case 237: /* term: REFGEN term */ +#line 1377 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; - case 236: /* term: myattrterm */ -#line 1361 "perly.y" + case 238: /* term: myattrterm */ +#line 1379 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 237: /* term: KW_LOCAL term */ -#line 1363 "perly.y" + case 239: /* term: KW_LOCAL term */ +#line 1381 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),0); } break; - case 238: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1365 "perly.y" + case 240: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1383 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 239: /* term: QWLIST */ -#line 1367 "perly.y" + case 241: /* term: QWLIST */ +#line 1385 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 240: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1369 "perly.y" + case 242: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1387 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 241: /* term: scalar */ -#line 1371 "perly.y" + case 243: /* term: scalar */ +#line 1389 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 242: /* term: star */ -#line 1373 "perly.y" + case 244: /* term: star */ +#line 1391 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 243: /* term: hsh */ -#line 1375 "perly.y" + case 245: /* term: hsh */ +#line 1393 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 244: /* term: ary */ -#line 1377 "perly.y" + case 246: /* term: ary */ +#line 1395 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 245: /* term: arylen */ -#line 1379 "perly.y" + case 247: /* term: arylen */ +#line 1397 "perly.y" { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; - case 246: /* term: subscripted */ -#line 1381 "perly.y" + case 248: /* term: subscripted */ +#line 1399 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 247: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1383 "perly.y" + case 249: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1401 "perly.y" { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1850,8 +1866,8 @@ case 2: /* @1: %empty */ break; - case 248: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1393 "perly.y" + case 250: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1411 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1864,8 +1880,8 @@ case 2: /* @1: %empty */ break; - case 249: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1403 "perly.y" + case 251: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1421 "perly.y" { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1878,8 +1894,8 @@ case 2: /* @1: %empty */ break; - case 250: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1413 "perly.y" + case 252: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1431 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1892,27 +1908,27 @@ case 2: /* @1: %empty */ break; - case 251: /* term: THING */ -#line 1423 "perly.y" + case 253: /* term: THING */ +#line 1441 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 252: /* term: amper */ -#line 1425 "perly.y" + case 254: /* term: amper */ +#line 1443 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 253: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1427 "perly.y" + case 255: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1445 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 254: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1430 "perly.y" + case 256: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1448 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1920,153 +1936,153 @@ case 2: /* @1: %empty */ break; - case 255: /* term: NOAMP subname optlistexpr */ -#line 1435 "perly.y" + case 257: /* term: NOAMP subname optlistexpr */ +#line 1453 "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 256: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ -#line 1439 "perly.y" + case 258: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ +#line 1457 "perly.y" { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; - case 257: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ -#line 1441 "perly.y" + case 259: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ +#line 1459 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 258: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ -#line 1443 "perly.y" + case 260: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ +#line 1461 "perly.y" { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; - case 259: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ -#line 1445 "perly.y" + case 261: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ +#line 1463 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; - case 260: /* term: term ARROW PERLY_STAR PERLY_STAR */ -#line 1448 "perly.y" + case 262: /* term: term ARROW PERLY_STAR PERLY_STAR */ +#line 1466 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; - case 261: /* term: LOOPEX */ -#line 1450 "perly.y" + case 263: /* term: LOOPEX */ +#line 1468 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; - case 262: /* term: LOOPEX term */ -#line 1453 "perly.y" + case 264: /* term: LOOPEX term */ +#line 1471 "perly.y" { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 263: /* term: NOTOP listexpr */ -#line 1455 "perly.y" + case 265: /* term: NOTOP listexpr */ +#line 1473 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 264: /* term: UNIOP */ -#line 1457 "perly.y" + case 266: /* term: UNIOP */ +#line 1475 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 265: /* term: UNIOP block */ -#line 1459 "perly.y" + case 267: /* term: UNIOP block */ +#line 1477 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 266: /* term: UNIOP term */ -#line 1461 "perly.y" + case 268: /* term: UNIOP term */ +#line 1479 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 267: /* term: KW_REQUIRE */ -#line 1463 "perly.y" + case 269: /* term: KW_REQUIRE */ +#line 1481 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; - case 268: /* term: KW_REQUIRE term */ -#line 1465 "perly.y" + case 270: /* term: KW_REQUIRE term */ +#line 1483 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; - case 269: /* term: UNIOPSUB */ -#line 1467 "perly.y" + case 271: /* term: UNIOPSUB */ +#line 1485 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 270: /* term: UNIOPSUB term */ -#line 1469 "perly.y" + case 272: /* term: UNIOPSUB term */ +#line 1487 "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 271: /* term: FUNC0 */ -#line 1472 "perly.y" + case 273: /* term: FUNC0 */ +#line 1490 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 272: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1474 "perly.y" + case 274: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1492 "perly.y" { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; - case 273: /* term: FUNC0OP */ -#line 1476 "perly.y" + case 275: /* term: FUNC0OP */ +#line 1494 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 274: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1478 "perly.y" + case 276: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1496 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; - case 275: /* term: FUNC0SUB */ -#line 1480 "perly.y" + case 277: /* term: FUNC0SUB */ +#line 1498 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 276: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1482 "perly.y" + case 278: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1500 "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 277: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1486 "perly.y" + case 279: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1504 "perly.y" { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 278: /* @23: %empty */ -#line 1488 "perly.y" + case 280: /* @23: %empty */ +#line 1506 "perly.y" { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -2080,68 +2096,68 @@ case 2: /* @1: %empty */ break; - case 279: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ -#line 1499 "perly.y" + case 281: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ +#line 1517 "perly.y" { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; - case 283: /* myattrterm: KW_MY myterm myattrlist */ -#line 1508 "perly.y" + case 285: /* myattrterm: KW_MY myterm myattrlist */ +#line 1526 "perly.y" { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; - case 284: /* myattrterm: KW_MY myterm */ -#line 1510 "perly.y" + case 286: /* myattrterm: KW_MY myterm */ +#line 1528 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),1); } break; - case 285: /* myattrterm: KW_MY REFGEN myterm myattrlist */ -#line 1512 "perly.y" + case 287: /* myattrterm: KW_MY REFGEN myterm myattrlist */ +#line 1530 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; - case 286: /* myattrterm: KW_MY REFGEN term */ -#line 1514 "perly.y" + case 288: /* myattrterm: KW_MY REFGEN term */ +#line 1532 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; - case 287: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1519 "perly.y" + case 289: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1537 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 288: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1521 "perly.y" + case 290: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1539 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 289: /* myterm: scalar */ -#line 1524 "perly.y" + case 291: /* myterm: scalar */ +#line 1542 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 290: /* myterm: hsh */ -#line 1526 "perly.y" + case 292: /* myterm: hsh */ +#line 1544 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 291: /* myterm: ary */ -#line 1528 "perly.y" + case 293: /* myterm: ary */ +#line 1546 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 292: /* fieldvar: scalar */ -#line 1533 "perly.y" + case 294: /* fieldvar: scalar */ +#line 1551 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2149,8 +2165,8 @@ case 2: /* @1: %empty */ break; - case 293: /* fieldvar: hsh */ -#line 1538 "perly.y" + case 295: /* fieldvar: hsh */ +#line 1556 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2158,8 +2174,8 @@ case 2: /* @1: %empty */ break; - case 294: /* fieldvar: ary */ -#line 1543 "perly.y" + case 296: /* fieldvar: ary */ +#line 1561 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2167,20 +2183,20 @@ case 2: /* @1: %empty */ break; - case 295: /* optfieldattrlist: COLONATTR THING */ -#line 1551 "perly.y" + case 297: /* optfieldattrlist: COLONATTR THING */ +#line 1569 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 296: /* optfieldattrlist: COLONATTR */ -#line 1553 "perly.y" + case 298: /* optfieldattrlist: COLONATTR */ +#line 1571 "perly.y" { (yyval.opval) = NULL; } break; - case 298: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ -#line 1559 "perly.y" + case 300: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ +#line 1577 "perly.y" { parser->in_my = 0; if((ps[0].val.opval)) @@ -2190,8 +2206,8 @@ case 2: /* @1: %empty */ break; - case 299: /* $@24: %empty */ -#line 1566 "perly.y" + case 301: /* $@24: %empty */ +#line 1584 "perly.y" { parser->in_my = 0; if((ps[-1].val.opval)) @@ -2202,8 +2218,8 @@ case 2: /* @1: %empty */ break; - case 300: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ -#line 1574 "perly.y" + case 302: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ +#line 1592 "perly.y" { class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval)); LEAVE; @@ -2212,122 +2228,122 @@ case 2: /* @1: %empty */ break; - case 306: /* optrepl: PERLY_SLASH expr */ -#line 1594 "perly.y" + case 308: /* optrepl: PERLY_SLASH expr */ +#line 1612 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 307: /* my_scalar: scalar */ -#line 1600 "perly.y" + case 309: /* my_scalar: scalar */ +#line 1618 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; - case 308: /* list_of_scalars: list_of_scalars PERLY_COMMA */ -#line 1605 "perly.y" + case 310: /* list_of_scalars: list_of_scalars PERLY_COMMA */ +#line 1623 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 309: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ -#line 1607 "perly.y" + case 311: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ +#line 1625 "perly.y" { (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 311: /* my_list_of_scalars: list_of_scalars */ -#line 1614 "perly.y" + case 313: /* my_list_of_scalars: list_of_scalars */ +#line 1632 "perly.y" { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; - case 319: /* amper: PERLY_AMPERSAND indirob */ -#line 1631 "perly.y" + case 321: /* amper: PERLY_AMPERSAND indirob */ +#line 1649 "perly.y" { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 320: /* scalar: PERLY_DOLLAR indirob */ -#line 1635 "perly.y" + case 322: /* scalar: PERLY_DOLLAR indirob */ +#line 1653 "perly.y" { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; - case 321: /* ary: PERLY_SNAIL indirob */ -#line 1639 "perly.y" + case 323: /* ary: PERLY_SNAIL indirob */ +#line 1657 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 322: /* hsh: PERLY_PERCENT_SIGN indirob */ -#line 1645 "perly.y" + case 324: /* hsh: PERLY_PERCENT_SIGN indirob */ +#line 1663 "perly.y" { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 323: /* arylen: DOLSHARP indirob */ -#line 1651 "perly.y" + case 325: /* arylen: DOLSHARP indirob */ +#line 1669 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 324: /* arylen: term ARROW DOLSHARP PERLY_STAR */ -#line 1653 "perly.y" + case 326: /* arylen: term ARROW DOLSHARP PERLY_STAR */ +#line 1671 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 325: /* star: PERLY_STAR indirob */ -#line 1657 "perly.y" + case 327: /* star: PERLY_STAR indirob */ +#line 1675 "perly.y" { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 327: /* sliceme: term ARROW PERLY_SNAIL */ -#line 1662 "perly.y" + case 329: /* sliceme: term ARROW PERLY_SNAIL */ +#line 1680 "perly.y" { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 329: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ -#line 1667 "perly.y" + case 331: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ +#line 1685 "perly.y" { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; - case 331: /* gelem: term ARROW PERLY_STAR */ -#line 1672 "perly.y" + case 333: /* gelem: term ARROW PERLY_STAR */ +#line 1690 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; - case 332: /* indirob: BAREWORD */ -#line 1677 "perly.y" + case 334: /* indirob: BAREWORD */ +#line 1695 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 333: /* indirob: scalar */ -#line 1679 "perly.y" + case 335: /* indirob: scalar */ +#line 1697 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 334: /* indirob: block */ -#line 1681 "perly.y" + case 336: /* indirob: block */ +#line 1699 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 335: /* indirob: PRIVATEREF */ -#line 1684 "perly.y" + case 337: /* indirob: PRIVATEREF */ +#line 1702 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; @@ -2339,6 +2355,6 @@ case 2: /* @1: %empty */ /* Generated from: - * cdef9ff44874bfb2f6175adcd920473f8c6601794f20f7977a13e1c2e2be5e26 perly.y - * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl + * 16cad63d58556f25bdc7bd9e2f74b72688d69b25b2c13f81b0d707deb4473909 perly.y + * 6353b7a4fdf3e67f2196c3ed55c684ba252625686c4f21c9ff7e67a312925e3b regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.h b/perly.h index 54e8f9750883..2bafbd6e7617 100644 --- a/perly.h +++ b/perly.h @@ -146,47 +146,48 @@ extern int yydebug; SUBLEXSTART = 340, /* SUBLEXSTART */ SUBLEXEND = 341, /* SUBLEXEND */ PHASER = 342, /* PHASER */ - PREC_LOW = 343, /* PREC_LOW */ - PLUGIN_LOW_OP = 344, /* PLUGIN_LOW_OP */ - OROP = 345, /* OROP */ - PLUGIN_LOGICAL_OR_LOW_OP = 346, /* PLUGIN_LOGICAL_OR_LOW_OP */ - ANDOP = 347, /* ANDOP */ - PLUGIN_LOGICAL_AND_LOW_OP = 348, /* PLUGIN_LOGICAL_AND_LOW_OP */ - NOTOP = 349, /* NOTOP */ - ASSIGNOP = 350, /* ASSIGNOP */ - PLUGIN_ASSIGN_OP = 351, /* PLUGIN_ASSIGN_OP */ - PERLY_QUESTION_MARK = 352, /* PERLY_QUESTION_MARK */ - PERLY_COLON = 353, /* PERLY_COLON */ - OROR = 354, /* OROR */ - DORDOR = 355, /* DORDOR */ - PLUGIN_LOGICAL_OR_OP = 356, /* PLUGIN_LOGICAL_OR_OP */ - ANDAND = 357, /* ANDAND */ - PLUGIN_LOGICAL_AND_OP = 358, /* PLUGIN_LOGICAL_AND_OP */ - BITOROP = 359, /* BITOROP */ - BITANDOP = 360, /* BITANDOP */ - CHEQOP = 361, /* CHEQOP */ - NCEQOP = 362, /* NCEQOP */ - CHRELOP = 363, /* CHRELOP */ - NCRELOP = 364, /* NCRELOP */ - PLUGIN_REL_OP = 365, /* PLUGIN_REL_OP */ - SHIFTOP = 366, /* SHIFTOP */ - PLUGIN_ADD_OP = 367, /* PLUGIN_ADD_OP */ - PLUGIN_MUL_OP = 368, /* PLUGIN_MUL_OP */ - MATCHOP = 369, /* MATCHOP */ - PERLY_EXCLAMATION_MARK = 370, /* PERLY_EXCLAMATION_MARK */ - PERLY_TILDE = 371, /* PERLY_TILDE */ - UMINUS = 372, /* UMINUS */ - REFGEN = 373, /* REFGEN */ - PLUGIN_POW_OP = 374, /* PLUGIN_POW_OP */ - PREINC = 375, /* PREINC */ - PREDEC = 376, /* PREDEC */ - POSTINC = 377, /* POSTINC */ - POSTDEC = 378, /* POSTDEC */ - POSTJOIN = 379, /* POSTJOIN */ - PLUGIN_HIGH_OP = 380, /* PLUGIN_HIGH_OP */ - ARROW = 381, /* ARROW */ - PERLY_PAREN_CLOSE = 382, /* PERLY_PAREN_CLOSE */ - PERLY_PAREN_OPEN = 383 /* PERLY_PAREN_OPEN */ + OPFLAGS = 343, /* OPFLAGS */ + PREC_LOW = 344, /* PREC_LOW */ + PLUGIN_LOW_OP = 345, /* PLUGIN_LOW_OP */ + OROP = 346, /* OROP */ + PLUGIN_LOGICAL_OR_LOW_OP = 347, /* PLUGIN_LOGICAL_OR_LOW_OP */ + ANDOP = 348, /* ANDOP */ + PLUGIN_LOGICAL_AND_LOW_OP = 349, /* PLUGIN_LOGICAL_AND_LOW_OP */ + NOTOP = 350, /* NOTOP */ + ASSIGNOP = 351, /* ASSIGNOP */ + PLUGIN_ASSIGN_OP = 352, /* PLUGIN_ASSIGN_OP */ + PERLY_QUESTION_MARK = 353, /* PERLY_QUESTION_MARK */ + PERLY_COLON = 354, /* PERLY_COLON */ + OROR = 355, /* OROR */ + DORDOR = 356, /* DORDOR */ + PLUGIN_LOGICAL_OR_OP = 357, /* PLUGIN_LOGICAL_OR_OP */ + ANDAND = 358, /* ANDAND */ + PLUGIN_LOGICAL_AND_OP = 359, /* PLUGIN_LOGICAL_AND_OP */ + BITOROP = 360, /* BITOROP */ + BITANDOP = 361, /* BITANDOP */ + CHEQOP = 362, /* CHEQOP */ + NCEQOP = 363, /* NCEQOP */ + CHRELOP = 364, /* CHRELOP */ + NCRELOP = 365, /* NCRELOP */ + PLUGIN_REL_OP = 366, /* PLUGIN_REL_OP */ + SHIFTOP = 367, /* SHIFTOP */ + PLUGIN_ADD_OP = 368, /* PLUGIN_ADD_OP */ + PLUGIN_MUL_OP = 369, /* PLUGIN_MUL_OP */ + MATCHOP = 370, /* MATCHOP */ + PERLY_EXCLAMATION_MARK = 371, /* PERLY_EXCLAMATION_MARK */ + PERLY_TILDE = 372, /* PERLY_TILDE */ + UMINUS = 373, /* UMINUS */ + REFGEN = 374, /* REFGEN */ + PLUGIN_POW_OP = 375, /* PLUGIN_POW_OP */ + PREINC = 376, /* PREINC */ + PREDEC = 377, /* PREDEC */ + POSTINC = 378, /* POSTINC */ + POSTDEC = 379, /* POSTDEC */ + POSTJOIN = 380, /* POSTJOIN */ + PLUGIN_HIGH_OP = 381, /* PLUGIN_HIGH_OP */ + ARROW = 382, /* ARROW */ + PERLY_PAREN_CLOSE = 383, /* PERLY_PAREN_CLOSE */ + PERLY_PAREN_OPEN = 384 /* PERLY_PAREN_OPEN */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -225,6 +226,7 @@ union YYSTYPE void *pval; OP *opval; GV *gvval; + SV *svval; }; @@ -241,6 +243,6 @@ int yyparse (void); /* Generated from: - * cdef9ff44874bfb2f6175adcd920473f8c6601794f20f7977a13e1c2e2be5e26 perly.y - * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl + * 16cad63d58556f25bdc7bd9e2f74b72688d69b25b2c13f81b0d707deb4473909 perly.y + * 6353b7a4fdf3e67f2196c3ed55c684ba252625686c4f21c9ff7e67a312925e3b regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.tab b/perly.tab index 1ad0130de9d3..627b31371f15 100644 --- a/perly.tab +++ b/perly.tab @@ -96,161 +96,163 @@ enum yysymbol_kind_t YYSYMBOL_SUBLEXSTART = 85, /* SUBLEXSTART */ YYSYMBOL_SUBLEXEND = 86, /* SUBLEXEND */ YYSYMBOL_PHASER = 87, /* PHASER */ - YYSYMBOL_PREC_LOW = 88, /* PREC_LOW */ - YYSYMBOL_PLUGIN_LOW_OP = 89, /* PLUGIN_LOW_OP */ - YYSYMBOL_OROP = 90, /* OROP */ - YYSYMBOL_PLUGIN_LOGICAL_OR_LOW_OP = 91, /* PLUGIN_LOGICAL_OR_LOW_OP */ - YYSYMBOL_ANDOP = 92, /* ANDOP */ - YYSYMBOL_PLUGIN_LOGICAL_AND_LOW_OP = 93, /* PLUGIN_LOGICAL_AND_LOW_OP */ - YYSYMBOL_NOTOP = 94, /* NOTOP */ - YYSYMBOL_ASSIGNOP = 95, /* ASSIGNOP */ - YYSYMBOL_PLUGIN_ASSIGN_OP = 96, /* PLUGIN_ASSIGN_OP */ - YYSYMBOL_PERLY_QUESTION_MARK = 97, /* PERLY_QUESTION_MARK */ - YYSYMBOL_PERLY_COLON = 98, /* PERLY_COLON */ - YYSYMBOL_OROR = 99, /* OROR */ - YYSYMBOL_DORDOR = 100, /* DORDOR */ - YYSYMBOL_PLUGIN_LOGICAL_OR_OP = 101, /* PLUGIN_LOGICAL_OR_OP */ - YYSYMBOL_ANDAND = 102, /* ANDAND */ - YYSYMBOL_PLUGIN_LOGICAL_AND_OP = 103, /* PLUGIN_LOGICAL_AND_OP */ - YYSYMBOL_BITOROP = 104, /* BITOROP */ - YYSYMBOL_BITANDOP = 105, /* BITANDOP */ - YYSYMBOL_CHEQOP = 106, /* CHEQOP */ - YYSYMBOL_NCEQOP = 107, /* NCEQOP */ - YYSYMBOL_CHRELOP = 108, /* CHRELOP */ - YYSYMBOL_NCRELOP = 109, /* NCRELOP */ - YYSYMBOL_PLUGIN_REL_OP = 110, /* PLUGIN_REL_OP */ - YYSYMBOL_SHIFTOP = 111, /* SHIFTOP */ - YYSYMBOL_PLUGIN_ADD_OP = 112, /* PLUGIN_ADD_OP */ - YYSYMBOL_PLUGIN_MUL_OP = 113, /* PLUGIN_MUL_OP */ - YYSYMBOL_MATCHOP = 114, /* MATCHOP */ - YYSYMBOL_PERLY_EXCLAMATION_MARK = 115, /* PERLY_EXCLAMATION_MARK */ - YYSYMBOL_PERLY_TILDE = 116, /* PERLY_TILDE */ - YYSYMBOL_UMINUS = 117, /* UMINUS */ - YYSYMBOL_REFGEN = 118, /* REFGEN */ - YYSYMBOL_PLUGIN_POW_OP = 119, /* PLUGIN_POW_OP */ - YYSYMBOL_PREINC = 120, /* PREINC */ - YYSYMBOL_PREDEC = 121, /* PREDEC */ - YYSYMBOL_POSTINC = 122, /* POSTINC */ - YYSYMBOL_POSTDEC = 123, /* POSTDEC */ - YYSYMBOL_POSTJOIN = 124, /* POSTJOIN */ - YYSYMBOL_PLUGIN_HIGH_OP = 125, /* PLUGIN_HIGH_OP */ - YYSYMBOL_ARROW = 126, /* ARROW */ - YYSYMBOL_PERLY_PAREN_CLOSE = 127, /* PERLY_PAREN_CLOSE */ - YYSYMBOL_PERLY_PAREN_OPEN = 128, /* PERLY_PAREN_OPEN */ - YYSYMBOL_YYACCEPT = 129, /* $accept */ - YYSYMBOL_grammar = 130, /* grammar */ - YYSYMBOL_131_1 = 131, /* @1 */ - YYSYMBOL_132_2 = 132, /* @2 */ - YYSYMBOL_133_3 = 133, /* @3 */ - YYSYMBOL_134_4 = 134, /* @4 */ - YYSYMBOL_135_5 = 135, /* @5 */ - YYSYMBOL_136_6 = 136, /* @6 */ - YYSYMBOL_137_7 = 137, /* @7 */ - YYSYMBOL_sigsub_or_method_named = 138, /* sigsub_or_method_named */ - YYSYMBOL_block = 139, /* block */ - YYSYMBOL_empty = 140, /* empty */ - YYSYMBOL_formblock = 141, /* formblock */ - YYSYMBOL_remember = 142, /* remember */ - YYSYMBOL_mblock = 143, /* mblock */ - YYSYMBOL_mremember = 144, /* mremember */ - YYSYMBOL_catch_paren = 145, /* catch_paren */ - YYSYMBOL_146_8 = 146, /* $@8 */ - YYSYMBOL_147_9 = 147, /* $@9 */ - YYSYMBOL_stmtseq = 148, /* stmtseq */ - YYSYMBOL_formstmtseq = 149, /* formstmtseq */ - YYSYMBOL_fullstmt = 150, /* fullstmt */ - YYSYMBOL_labfullstmt = 151, /* labfullstmt */ - YYSYMBOL_barestmt = 152, /* barestmt */ - YYSYMBOL_153_10 = 153, /* $@10 */ - YYSYMBOL_154_11 = 154, /* $@11 */ - YYSYMBOL_155_12 = 155, /* $@12 */ - YYSYMBOL_156_13 = 156, /* $@13 */ - YYSYMBOL_157_14 = 157, /* $@14 */ - YYSYMBOL_158_15 = 158, /* $@15 */ - YYSYMBOL_159_16 = 159, /* @16 */ - YYSYMBOL_160_17 = 160, /* $@17 */ - YYSYMBOL_161_18 = 161, /* $@18 */ - YYSYMBOL_162_19 = 162, /* $@19 */ - YYSYMBOL_formline = 163, /* formline */ - YYSYMBOL_formarg = 164, /* formarg */ - YYSYMBOL_condition = 165, /* condition */ - YYSYMBOL_sideff = 166, /* sideff */ - YYSYMBOL_else = 167, /* else */ - YYSYMBOL_cont = 168, /* cont */ - YYSYMBOL_finally = 169, /* finally */ - YYSYMBOL_mintro = 170, /* mintro */ - YYSYMBOL_nexpr = 171, /* nexpr */ - YYSYMBOL_texpr = 172, /* texpr */ - YYSYMBOL_iexpr = 173, /* iexpr */ - YYSYMBOL_mexpr = 174, /* mexpr */ - YYSYMBOL_mnexpr = 175, /* mnexpr */ - YYSYMBOL_formname = 176, /* formname */ - YYSYMBOL_startsub = 177, /* startsub */ - YYSYMBOL_startanonsub = 178, /* startanonsub */ - YYSYMBOL_startanonmethod = 179, /* startanonmethod */ - YYSYMBOL_startformsub = 180, /* startformsub */ - YYSYMBOL_subname = 181, /* subname */ - YYSYMBOL_proto = 182, /* proto */ - YYSYMBOL_subattrlist = 183, /* subattrlist */ - YYSYMBOL_myattrlist = 184, /* myattrlist */ - YYSYMBOL_sigvarname = 185, /* sigvarname */ - YYSYMBOL_sigslurpsigil = 186, /* sigslurpsigil */ - YYSYMBOL_sigslurpelem = 187, /* sigslurpelem */ - YYSYMBOL_sigdefault = 188, /* sigdefault */ - YYSYMBOL_sigscalarelem = 189, /* sigscalarelem */ - YYSYMBOL_sigelem = 190, /* sigelem */ - YYSYMBOL_siglist = 191, /* siglist */ - YYSYMBOL_optsiglist = 192, /* optsiglist */ - YYSYMBOL_optsubsignature = 193, /* optsubsignature */ - YYSYMBOL_subsignature = 194, /* subsignature */ - YYSYMBOL_subsigguts = 195, /* subsigguts */ - YYSYMBOL_196_20 = 196, /* $@20 */ - YYSYMBOL_optsubbody = 197, /* optsubbody */ - YYSYMBOL_subbody = 198, /* subbody */ - YYSYMBOL_optsigsubbody = 199, /* optsigsubbody */ - YYSYMBOL_sigsubbody = 200, /* sigsubbody */ - YYSYMBOL_201_21 = 201, /* $@21 */ - YYSYMBOL_expr = 202, /* expr */ - YYSYMBOL_listexpr = 203, /* listexpr */ - YYSYMBOL_listop = 204, /* listop */ - YYSYMBOL_205_22 = 205, /* @22 */ - YYSYMBOL_methodname = 206, /* methodname */ - YYSYMBOL_subscripted = 207, /* subscripted */ - YYSYMBOL_termbinop = 208, /* termbinop */ - YYSYMBOL_termrelop = 209, /* termrelop */ - YYSYMBOL_relopchain = 210, /* relopchain */ - YYSYMBOL_termeqop = 211, /* termeqop */ - YYSYMBOL_eqopchain = 212, /* eqopchain */ - YYSYMBOL_termunop = 213, /* termunop */ - YYSYMBOL_anonymous = 214, /* anonymous */ - YYSYMBOL_termdo = 215, /* termdo */ - YYSYMBOL_term = 216, /* term */ - YYSYMBOL_217_23 = 217, /* @23 */ - YYSYMBOL_myattrterm = 218, /* myattrterm */ - YYSYMBOL_myterm = 219, /* myterm */ - YYSYMBOL_fieldvar = 220, /* fieldvar */ - YYSYMBOL_optfieldattrlist = 221, /* optfieldattrlist */ - YYSYMBOL_fielddecl = 222, /* fielddecl */ - YYSYMBOL_223_24 = 223, /* $@24 */ - YYSYMBOL_optlistexpr = 224, /* optlistexpr */ - YYSYMBOL_optexpr = 225, /* optexpr */ - YYSYMBOL_optrepl = 226, /* optrepl */ - YYSYMBOL_my_scalar = 227, /* my_scalar */ - YYSYMBOL_list_of_scalars = 228, /* list_of_scalars */ - YYSYMBOL_my_list_of_scalars = 229, /* my_list_of_scalars */ - YYSYMBOL_my_var = 230, /* my_var */ - YYSYMBOL_refgen_topic = 231, /* refgen_topic */ - YYSYMBOL_my_refgen = 232, /* my_refgen */ - YYSYMBOL_amper = 233, /* amper */ - YYSYMBOL_scalar = 234, /* scalar */ - YYSYMBOL_ary = 235, /* ary */ - YYSYMBOL_hsh = 236, /* hsh */ - YYSYMBOL_arylen = 237, /* arylen */ - YYSYMBOL_star = 238, /* star */ - YYSYMBOL_sliceme = 239, /* sliceme */ - YYSYMBOL_kvslice = 240, /* kvslice */ - YYSYMBOL_gelem = 241, /* gelem */ - YYSYMBOL_indirob = 242 /* indirob */ + YYSYMBOL_OPFLAGS = 88, /* OPFLAGS */ + YYSYMBOL_PREC_LOW = 89, /* PREC_LOW */ + YYSYMBOL_PLUGIN_LOW_OP = 90, /* PLUGIN_LOW_OP */ + YYSYMBOL_OROP = 91, /* OROP */ + YYSYMBOL_PLUGIN_LOGICAL_OR_LOW_OP = 92, /* PLUGIN_LOGICAL_OR_LOW_OP */ + YYSYMBOL_ANDOP = 93, /* ANDOP */ + YYSYMBOL_PLUGIN_LOGICAL_AND_LOW_OP = 94, /* PLUGIN_LOGICAL_AND_LOW_OP */ + YYSYMBOL_NOTOP = 95, /* NOTOP */ + YYSYMBOL_ASSIGNOP = 96, /* ASSIGNOP */ + YYSYMBOL_PLUGIN_ASSIGN_OP = 97, /* PLUGIN_ASSIGN_OP */ + YYSYMBOL_PERLY_QUESTION_MARK = 98, /* PERLY_QUESTION_MARK */ + YYSYMBOL_PERLY_COLON = 99, /* PERLY_COLON */ + YYSYMBOL_OROR = 100, /* OROR */ + YYSYMBOL_DORDOR = 101, /* DORDOR */ + YYSYMBOL_PLUGIN_LOGICAL_OR_OP = 102, /* PLUGIN_LOGICAL_OR_OP */ + YYSYMBOL_ANDAND = 103, /* ANDAND */ + YYSYMBOL_PLUGIN_LOGICAL_AND_OP = 104, /* PLUGIN_LOGICAL_AND_OP */ + YYSYMBOL_BITOROP = 105, /* BITOROP */ + YYSYMBOL_BITANDOP = 106, /* BITANDOP */ + YYSYMBOL_CHEQOP = 107, /* CHEQOP */ + YYSYMBOL_NCEQOP = 108, /* NCEQOP */ + YYSYMBOL_CHRELOP = 109, /* CHRELOP */ + YYSYMBOL_NCRELOP = 110, /* NCRELOP */ + YYSYMBOL_PLUGIN_REL_OP = 111, /* PLUGIN_REL_OP */ + YYSYMBOL_SHIFTOP = 112, /* SHIFTOP */ + YYSYMBOL_PLUGIN_ADD_OP = 113, /* PLUGIN_ADD_OP */ + YYSYMBOL_PLUGIN_MUL_OP = 114, /* PLUGIN_MUL_OP */ + YYSYMBOL_MATCHOP = 115, /* MATCHOP */ + YYSYMBOL_PERLY_EXCLAMATION_MARK = 116, /* PERLY_EXCLAMATION_MARK */ + YYSYMBOL_PERLY_TILDE = 117, /* PERLY_TILDE */ + YYSYMBOL_UMINUS = 118, /* UMINUS */ + YYSYMBOL_REFGEN = 119, /* REFGEN */ + YYSYMBOL_PLUGIN_POW_OP = 120, /* PLUGIN_POW_OP */ + YYSYMBOL_PREINC = 121, /* PREINC */ + YYSYMBOL_PREDEC = 122, /* PREDEC */ + YYSYMBOL_POSTINC = 123, /* POSTINC */ + YYSYMBOL_POSTDEC = 124, /* POSTDEC */ + YYSYMBOL_POSTJOIN = 125, /* POSTJOIN */ + YYSYMBOL_PLUGIN_HIGH_OP = 126, /* PLUGIN_HIGH_OP */ + YYSYMBOL_ARROW = 127, /* ARROW */ + YYSYMBOL_PERLY_PAREN_CLOSE = 128, /* PERLY_PAREN_CLOSE */ + YYSYMBOL_PERLY_PAREN_OPEN = 129, /* PERLY_PAREN_OPEN */ + YYSYMBOL_YYACCEPT = 130, /* $accept */ + YYSYMBOL_grammar = 131, /* grammar */ + YYSYMBOL_132_1 = 132, /* @1 */ + YYSYMBOL_133_2 = 133, /* @2 */ + YYSYMBOL_134_3 = 134, /* @3 */ + YYSYMBOL_135_4 = 135, /* @4 */ + YYSYMBOL_136_5 = 136, /* @5 */ + YYSYMBOL_137_6 = 137, /* @6 */ + YYSYMBOL_138_7 = 138, /* @7 */ + YYSYMBOL_sigsub_or_method_named = 139, /* sigsub_or_method_named */ + YYSYMBOL_block = 140, /* block */ + YYSYMBOL_empty = 141, /* empty */ + YYSYMBOL_formblock = 142, /* formblock */ + YYSYMBOL_remember = 143, /* remember */ + YYSYMBOL_mblock = 144, /* mblock */ + YYSYMBOL_mremember = 145, /* mremember */ + YYSYMBOL_catch_paren = 146, /* catch_paren */ + YYSYMBOL_147_8 = 147, /* $@8 */ + YYSYMBOL_148_9 = 148, /* $@9 */ + YYSYMBOL_stmtseq = 149, /* stmtseq */ + YYSYMBOL_formstmtseq = 150, /* formstmtseq */ + YYSYMBOL_fullstmt = 151, /* fullstmt */ + YYSYMBOL_labfullstmt = 152, /* labfullstmt */ + YYSYMBOL_barestmt = 153, /* barestmt */ + YYSYMBOL_154_10 = 154, /* $@10 */ + YYSYMBOL_155_11 = 155, /* $@11 */ + YYSYMBOL_156_12 = 156, /* $@12 */ + YYSYMBOL_157_13 = 157, /* $@13 */ + YYSYMBOL_158_14 = 158, /* $@14 */ + YYSYMBOL_159_15 = 159, /* $@15 */ + YYSYMBOL_160_16 = 160, /* @16 */ + YYSYMBOL_161_17 = 161, /* $@17 */ + YYSYMBOL_162_18 = 162, /* $@18 */ + YYSYMBOL_163_19 = 163, /* $@19 */ + YYSYMBOL_formline = 164, /* formline */ + YYSYMBOL_formarg = 165, /* formarg */ + YYSYMBOL_condition = 166, /* condition */ + YYSYMBOL_sideff = 167, /* sideff */ + YYSYMBOL_else = 168, /* else */ + YYSYMBOL_cont = 169, /* cont */ + YYSYMBOL_finally = 170, /* finally */ + YYSYMBOL_mintro = 171, /* mintro */ + YYSYMBOL_nexpr = 172, /* nexpr */ + YYSYMBOL_texpr = 173, /* texpr */ + YYSYMBOL_iexpr = 174, /* iexpr */ + YYSYMBOL_mexpr = 175, /* mexpr */ + YYSYMBOL_mnexpr = 176, /* mnexpr */ + YYSYMBOL_formname = 177, /* formname */ + YYSYMBOL_startsub = 178, /* startsub */ + YYSYMBOL_startanonsub = 179, /* startanonsub */ + YYSYMBOL_startanonmethod = 180, /* startanonmethod */ + YYSYMBOL_startformsub = 181, /* startformsub */ + YYSYMBOL_subname = 182, /* subname */ + YYSYMBOL_proto = 183, /* proto */ + YYSYMBOL_subattrlist = 184, /* subattrlist */ + YYSYMBOL_myattrlist = 185, /* myattrlist */ + YYSYMBOL_sigvarname = 186, /* sigvarname */ + YYSYMBOL_sigslurpsigil = 187, /* sigslurpsigil */ + YYSYMBOL_sigslurpelem = 188, /* sigslurpelem */ + YYSYMBOL_sigdefault = 189, /* sigdefault */ + YYSYMBOL_sigscalarelem = 190, /* sigscalarelem */ + YYSYMBOL_sigelem = 191, /* sigelem */ + YYSYMBOL_siglist = 192, /* siglist */ + YYSYMBOL_optsiglist = 193, /* optsiglist */ + YYSYMBOL_optsubsignature = 194, /* optsubsignature */ + YYSYMBOL_subsignature = 195, /* subsignature */ + YYSYMBOL_subsigguts = 196, /* subsigguts */ + YYSYMBOL_197_20 = 197, /* $@20 */ + YYSYMBOL_optsubbody = 198, /* optsubbody */ + YYSYMBOL_subbody = 199, /* subbody */ + YYSYMBOL_optsigsubbody = 200, /* optsigsubbody */ + YYSYMBOL_sigsubbody = 201, /* sigsubbody */ + YYSYMBOL_202_21 = 202, /* $@21 */ + YYSYMBOL_expr = 203, /* expr */ + YYSYMBOL_listexpr = 204, /* listexpr */ + YYSYMBOL_listop = 205, /* listop */ + YYSYMBOL_206_22 = 206, /* @22 */ + YYSYMBOL_methodname = 207, /* methodname */ + YYSYMBOL_subscripted = 208, /* subscripted */ + YYSYMBOL_termbinop = 209, /* termbinop */ + YYSYMBOL_termrelop = 210, /* termrelop */ + YYSYMBOL_relopchain = 211, /* relopchain */ + YYSYMBOL_termeqop = 212, /* termeqop */ + YYSYMBOL_optopflags = 213, /* optopflags */ + YYSYMBOL_eqopchain = 214, /* eqopchain */ + YYSYMBOL_termunop = 215, /* termunop */ + YYSYMBOL_anonymous = 216, /* anonymous */ + YYSYMBOL_termdo = 217, /* termdo */ + YYSYMBOL_term = 218, /* term */ + YYSYMBOL_219_23 = 219, /* @23 */ + YYSYMBOL_myattrterm = 220, /* myattrterm */ + YYSYMBOL_myterm = 221, /* myterm */ + YYSYMBOL_fieldvar = 222, /* fieldvar */ + YYSYMBOL_optfieldattrlist = 223, /* optfieldattrlist */ + YYSYMBOL_fielddecl = 224, /* fielddecl */ + YYSYMBOL_225_24 = 225, /* $@24 */ + YYSYMBOL_optlistexpr = 226, /* optlistexpr */ + YYSYMBOL_optexpr = 227, /* optexpr */ + YYSYMBOL_optrepl = 228, /* optrepl */ + YYSYMBOL_my_scalar = 229, /* my_scalar */ + YYSYMBOL_list_of_scalars = 230, /* list_of_scalars */ + YYSYMBOL_my_list_of_scalars = 231, /* my_list_of_scalars */ + YYSYMBOL_my_var = 232, /* my_var */ + YYSYMBOL_refgen_topic = 233, /* refgen_topic */ + YYSYMBOL_my_refgen = 234, /* my_refgen */ + YYSYMBOL_amper = 235, /* amper */ + YYSYMBOL_scalar = 236, /* scalar */ + YYSYMBOL_ary = 237, /* ary */ + YYSYMBOL_hsh = 238, /* hsh */ + YYSYMBOL_arylen = 239, /* arylen */ + YYSYMBOL_star = 240, /* star */ + YYSYMBOL_sliceme = 241, /* sliceme */ + YYSYMBOL_kvslice = 242, /* kvslice */ + YYSYMBOL_gelem = 243, /* gelem */ + YYSYMBOL_indirob = 244 /* indirob */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -259,19 +261,19 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; #define YYFINAL 16 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3641 +#define YYLAST 3687 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 129 +#define YYNTOKENS 130 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 114 +#define YYNNTS 115 /* YYNRULES -- Number of rules. */ -#define YYNRULES 335 +#define YYNRULES 337 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 657 +#define YYNSTATES 660 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 383 +#define YYMAXUTOK 384 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -323,47 +325,47 @@ static const yytype_uint8 yytranslate[] = 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128 + 125, 126, 127, 128, 129 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 160, 160, 159, 171, 170, 181, 180, 194, 193, - 207, 206, 220, 219, 230, 229, 243, 245, 250, 258, - 262, 269, 274, 281, 287, 291, 293, 290, 300, 301, - 311, 312, 321, 325, 329, 336, 346, 348, 361, 358, - 382, 377, 405, 404, 430, 441, 453, 452, 463, 469, - 475, 482, 490, 492, 489, 509, 514, 523, 530, 529, - 544, 552, 559, 558, 573, 580, 579, 595, 594, 614, - 618, 622, 626, 632, 640, 658, 659, 663, 667, 669, - 671, 673, 675, 677, 679, 686, 687, 692, 703, 704, - 709, 711, 716, 723, 724, 728, 732, 736, 741, 745, - 749, 750, 753, 759, 764, 769, 775, 776, 781, 782, - 787, 788, 795, 800, 802, 813, 815, 820, 822, 826, - 846, 847, 849, 862, 922, 924, 930, 932, 936, 942, - 943, 948, 949, 953, 957, 957, 1024, 1025, 1030, 1042, - 1043, 1048, 1047, 1060, 1062, 1064, 1066, 1068, 1072, 1074, - 1079, 1083, 1087, 1091, 1095, 1101, 1106, 1112, 1118, 1120, - 1122, 1125, 1124, 1138, 1139, 1143, 1147, 1150, 1155, 1160, - 1163, 1167, 1171, 1177, 1185, 1192, 1198, 1200, 1202, 1207, - 1209, 1211, 1213, 1215, 1217, 1222, 1224, 1226, 1228, 1230, - 1232, 1234, 1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, - 1252, 1256, 1258, 1260, 1262, 1264, 1268, 1270, 1274, 1276, - 1278, 1280, 1284, 1286, 1291, 1293, 1296, 1298, 1300, 1303, - 1306, 1317, 1320, 1328, 1330, 1332, 1335, 1338, 1346, 1348, - 1352, 1353, 1354, 1355, 1356, 1358, 1360, 1362, 1364, 1366, - 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1392, 1402, - 1412, 1422, 1424, 1426, 1429, 1434, 1438, 1440, 1442, 1444, - 1447, 1449, 1452, 1454, 1456, 1458, 1460, 1462, 1464, 1466, - 1468, 1471, 1473, 1475, 1477, 1479, 1481, 1485, 1488, 1487, - 1500, 1501, 1502, 1507, 1509, 1511, 1513, 1518, 1520, 1523, - 1525, 1527, 1532, 1537, 1542, 1550, 1552, 1554, 1558, 1566, - 1565, 1583, 1584, 1588, 1589, 1593, 1594, 1599, 1604, 1606, - 1610, 1613, 1617, 1618, 1619, 1622, 1623, 1626, 1627, 1630, - 1634, 1638, 1644, 1650, 1652, 1656, 1660, 1661, 1665, 1666, - 1670, 1671, 1676, 1678, 1680, 1683 + 0, 163, 163, 162, 174, 173, 184, 183, 197, 196, + 210, 209, 223, 222, 233, 232, 246, 248, 253, 261, + 265, 272, 277, 284, 290, 294, 296, 293, 303, 304, + 314, 315, 324, 328, 332, 339, 349, 351, 364, 361, + 385, 380, 408, 407, 433, 444, 456, 455, 466, 472, + 478, 485, 493, 495, 492, 512, 517, 526, 533, 532, + 547, 555, 562, 561, 576, 583, 582, 598, 597, 617, + 621, 625, 629, 635, 643, 661, 662, 666, 670, 672, + 674, 676, 678, 680, 682, 689, 690, 695, 706, 707, + 712, 714, 719, 726, 727, 731, 735, 739, 744, 748, + 752, 753, 756, 762, 767, 772, 778, 779, 784, 785, + 790, 791, 798, 803, 805, 816, 818, 823, 825, 829, + 849, 850, 852, 865, 925, 927, 933, 935, 939, 945, + 946, 951, 952, 956, 960, 960, 1027, 1028, 1033, 1045, + 1046, 1051, 1050, 1063, 1065, 1067, 1069, 1071, 1075, 1077, + 1082, 1086, 1090, 1094, 1098, 1104, 1109, 1115, 1121, 1123, + 1125, 1128, 1127, 1141, 1142, 1146, 1150, 1153, 1158, 1163, + 1166, 1170, 1174, 1180, 1188, 1195, 1201, 1203, 1205, 1210, + 1212, 1214, 1216, 1218, 1220, 1225, 1227, 1229, 1231, 1233, + 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, + 1255, 1259, 1261, 1263, 1265, 1267, 1271, 1273, 1277, 1279, + 1281, 1283, 1287, 1289, 1292, 1299, 1309, 1311, 1314, 1316, + 1318, 1321, 1324, 1335, 1338, 1346, 1348, 1350, 1353, 1356, + 1364, 1366, 1370, 1371, 1372, 1373, 1374, 1376, 1378, 1380, + 1382, 1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 1400, + 1410, 1420, 1430, 1440, 1442, 1444, 1447, 1452, 1456, 1458, + 1460, 1462, 1465, 1467, 1470, 1472, 1474, 1476, 1478, 1480, + 1482, 1484, 1486, 1489, 1491, 1493, 1495, 1497, 1499, 1503, + 1506, 1505, 1518, 1519, 1520, 1525, 1527, 1529, 1531, 1536, + 1538, 1541, 1543, 1545, 1550, 1555, 1560, 1568, 1570, 1572, + 1576, 1584, 1583, 1601, 1602, 1606, 1607, 1611, 1612, 1617, + 1622, 1624, 1628, 1631, 1635, 1636, 1637, 1640, 1641, 1644, + 1645, 1648, 1652, 1656, 1662, 1668, 1670, 1674, 1678, 1679, + 1683, 1684, 1688, 1689, 1694, 1696, 1698, 1701 }; #endif @@ -396,20 +398,21 @@ static const char *const yytname[] = "LABEL", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", "BLKLSTOP", "POWOP", "MULOP", "ADDOP", "DOLSHARP", "HASHBRACK", "NOAMP", "COLONATTR", "FORMLBRACK", "FORMRBRACK", - "SUBLEXSTART", "SUBLEXEND", "PHASER", "PREC_LOW", "PLUGIN_LOW_OP", - "OROP", "PLUGIN_LOGICAL_OR_LOW_OP", "ANDOP", "PLUGIN_LOGICAL_AND_LOW_OP", - "NOTOP", "ASSIGNOP", "PLUGIN_ASSIGN_OP", "PERLY_QUESTION_MARK", - "PERLY_COLON", "OROR", "DORDOR", "PLUGIN_LOGICAL_OR_OP", "ANDAND", - "PLUGIN_LOGICAL_AND_OP", "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", - "CHRELOP", "NCRELOP", "PLUGIN_REL_OP", "SHIFTOP", "PLUGIN_ADD_OP", - "PLUGIN_MUL_OP", "MATCHOP", "PERLY_EXCLAMATION_MARK", "PERLY_TILDE", - "UMINUS", "REFGEN", "PLUGIN_POW_OP", "PREINC", "PREDEC", "POSTINC", - "POSTDEC", "POSTJOIN", "PLUGIN_HIGH_OP", "ARROW", "PERLY_PAREN_CLOSE", - "PERLY_PAREN_OPEN", "$accept", "grammar", "@1", "@2", "@3", "@4", "@5", - "@6", "@7", "sigsub_or_method_named", "block", "empty", "formblock", - "remember", "mblock", "mremember", "catch_paren", "$@8", "$@9", - "stmtseq", "formstmtseq", "fullstmt", "labfullstmt", "barestmt", "$@10", - "$@11", "$@12", "$@13", "$@14", "$@15", "@16", "$@17", "$@18", "$@19", + "SUBLEXSTART", "SUBLEXEND", "PHASER", "OPFLAGS", "PREC_LOW", + "PLUGIN_LOW_OP", "OROP", "PLUGIN_LOGICAL_OR_LOW_OP", "ANDOP", + "PLUGIN_LOGICAL_AND_LOW_OP", "NOTOP", "ASSIGNOP", "PLUGIN_ASSIGN_OP", + "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR", "DORDOR", + "PLUGIN_LOGICAL_OR_OP", "ANDAND", "PLUGIN_LOGICAL_AND_OP", "BITOROP", + "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP", "NCRELOP", "PLUGIN_REL_OP", + "SHIFTOP", "PLUGIN_ADD_OP", "PLUGIN_MUL_OP", "MATCHOP", + "PERLY_EXCLAMATION_MARK", "PERLY_TILDE", "UMINUS", "REFGEN", + "PLUGIN_POW_OP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "POSTJOIN", + "PLUGIN_HIGH_OP", "ARROW", "PERLY_PAREN_CLOSE", "PERLY_PAREN_OPEN", + "$accept", "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", + "sigsub_or_method_named", "block", "empty", "formblock", "remember", + "mblock", "mremember", "catch_paren", "$@8", "$@9", "stmtseq", + "formstmtseq", "fullstmt", "labfullstmt", "barestmt", "$@10", "$@11", + "$@12", "$@13", "$@14", "$@15", "@16", "$@17", "$@18", "$@19", "formline", "formarg", "condition", "sideff", "else", "cont", "finally", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname", "startsub", "startanonsub", "startanonmethod", "startformsub", "subname", @@ -418,12 +421,13 @@ static const char *const yytname[] = "optsiglist", "optsubsignature", "subsignature", "subsigguts", "$@20", "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "$@21", "expr", "listexpr", "listop", "@22", "methodname", "subscripted", "termbinop", - "termrelop", "relopchain", "termeqop", "eqopchain", "termunop", - "anonymous", "termdo", "term", "@23", "myattrterm", "myterm", "fieldvar", - "optfieldattrlist", "fielddecl", "$@24", "optlistexpr", "optexpr", - "optrepl", "my_scalar", "list_of_scalars", "my_list_of_scalars", - "my_var", "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", - "arylen", "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR + "termrelop", "relopchain", "termeqop", "optopflags", "eqopchain", + "termunop", "anonymous", "termdo", "term", "@23", "myattrterm", "myterm", + "fieldvar", "optfieldattrlist", "fielddecl", "$@24", "optlistexpr", + "optexpr", "optrepl", "my_scalar", "list_of_scalars", + "my_list_of_scalars", "my_var", "refgen_topic", "my_refgen", "amper", + "scalar", "ary", "hsh", "arylen", "star", "sliceme", "kvslice", "gelem", + "indirob", YY_NULLPTR }; static const char * @@ -433,12 +437,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-535) +#define YYPACT_NINF (-546) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-334) +#define YYTABLE_NINF (-336) #define yytable_value_is_error(Yyn) \ ((Yyn) == YYTABLE_NINF) @@ -447,72 +451,72 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 393, -535, -535, -535, -535, -535, -535, -535, 28, -535, - 2956, 41, 1912, 1799, -535, -535, -535, -535, 94, 2956, - 94, 2956, 94, 2956, 94, 94, 2956, 54, 2956, 2236, - -535, -535, -535, -535, 94, 94, -535, -535, 24, -122, - -535, 2956, -535, -535, 2956, -67, -64, -34, 2236, 2156, - 41, 94, 2956, 1, 2956, 2956, 2956, 2956, 2956, 2956, - 2316, -535, 556, 62, -535, -1, -535, 105, -27, 120, - 2, -535, -535, -535, 3146, -535, -535, -28, 80, 147, - 176, -535, 103, 209, 230, 110, -535, -535, -535, -535, - -535, 75, 101, 199, 37, 48, 6, 66, 72, 148, - 148, -535, 1, -535, -535, -535, 151, -535, 1, 168, - -535, 195, 340, 218, 1799, -535, -535, -535, -535, 683, - -535, 336, 853, -535, -535, -535, -535, -535, 242, -535, - 347, -535, 347, -535, -535, 3515, 3036, 2396, 183, -535, - -535, -535, 3515, -535, 3515, 204, 198, 198, 2956, 169, - 173, 2956, 188, 3515, 41, 3146, 197, 2476, 2956, 2156, - -535, 3515, 3116, -535, 62, -535, 2556, 2956, 2956, -535, - 306, -535, -535, 2956, 62, 347, 347, 347, 178, 178, - 318, 291, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2636, - -535, -535, 2956, -535, -535, 2956, 2956, 2956, 2956, 2956, - 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, - 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, - 2956, -535, -535, -535, 2956, 47, 2716, 2956, 2956, 2956, - 2956, 2956, 2956, 2956, -535, 281, 282, 283, 259, -535, - -535, -535, -535, -535, 221, 542, -535, -535, 223, -535, - -535, -535, 312, -535, -535, -535, -535, -535, -535, 41, - -535, -535, -535, 2956, 2956, 2956, 2956, 2956, -535, -535, - -535, -535, 300, -535, -535, -535, 300, -535, -535, -535, - 344, -535, -535, 2796, 347, 183, 22, 84, 130, -535, - 403, 305, -535, -535, -535, 198, 307, -535, -535, -535, - -535, 2956, 2956, 88, -535, -535, -535, -535, 508, 278, - 243, 2956, 62, 62, 362, -535, 2956, 366, 181, 181, - -535, -535, 3250, -7, 93, -535, 512, 335, 3495, 3354, - 347, 400, 461, 3198, 3250, 3250, 1001, 3393, 3393, 3393, - 3416, 3416, 3455, 3476, 3495, 3495, 335, 335, 519, 315, - 461, 400, 347, 347, 163, 363, 2956, 2956, 452, 364, - 379, 380, -535, 384, 2876, 293, -535, -535, 574, 142, - 111, 202, 118, 226, 154, 257, 966, -535, -535, 369, - 51, 198, 354, -535, 324, 2956, 2956, -535, -5, -535, - -535, 296, -535, -535, -535, -535, 1994, 199, -535, 2956, - 2956, -535, -535, 372, -535, 420, -535, -535, -535, 556, - -535, -535, -535, 556, -535, -535, 355, 355, 336, 21, - 681, -535, -535, -535, -535, -535, 323, -535, -535, 357, - 73, -535, 2956, -535, -535, -535, 688, -535, 179, 2956, - 455, -535, -535, 2956, -535, 276, 185, -535, -535, -535, - -535, -535, -535, 692, 2956, -535, 462, -535, 474, -535, - 477, -535, 478, -535, -535, -535, -535, -535, 57, -535, - -535, 373, 556, 375, 475, 376, -535, -535, -535, -535, - -535, 381, 481, 160, -535, 2956, 382, 385, 556, 1121, - 378, 458, 204, -535, 504, -535, -535, 198, 2956, -535, - -535, -535, -535, 27, -535, -535, -535, 505, -535, -535, - 2956, -535, 431, -535, -535, -535, 191, -535, 3302, 515, - -535, -535, 401, -535, -535, -535, -535, 507, -535, -535, - -535, 2956, 148, 148, 516, 405, -535, 2956, 2956, 148, - -535, 406, 409, -535, -535, -535, -535, -535, -535, 2956, - 198, -535, 520, 3146, 414, -535, 556, -535, -535, -535, - -535, 464, -535, -535, 3146, 280, 280, 475, 417, 423, - 424, 168, 2956, 2956, 148, 148, 148, 475, 148, 531, - 420, 1234, -535, -535, -535, -535, -535, -535, 1347, -535, - 148, 426, -535, -535, -535, -535, 2956, 148, 148, -535, - 537, 436, 168, 168, 168, -535, 523, -535, -535, -535, - 1460, -535, 19, -535, 1573, -535, 2956, 440, 168, 168, - -535, 148, -535, -535, -535, 444, 41, -535, -535, 559, - 496, -535, -535, 454, 148, -535, -535, -535, 168, -535, - -535, -535, -535, -535, -535, 148, 168, 2076, -535, 1686, - 280, -535, 463, -535, -535, 148, -535 + 664, -546, -546, -546, -546, -546, -546, -546, 57, -546, + 2978, 80, 1925, 1811, -546, -546, -546, -546, 336, 2978, + 336, 2978, 336, 2978, 336, 336, 2978, 63, 2978, 2249, + -546, -546, -546, -546, 336, 336, -546, -546, 68, -13, + -546, 2978, -546, -546, 2978, 4, 28, -44, 2249, 2168, + 80, 336, 2978, 35, 2978, 2978, 2978, 2978, 2978, 2978, + 2330, -546, 141, 108, -546, -3, -546, -14, 51, -7, + 33, -546, -546, -546, 3227, -546, -546, 46, 64, 161, + 165, -546, 134, 184, 211, 168, -546, -546, -546, -546, + -546, 130, 136, 70, 78, 85, -1, 88, 90, 238, + 238, -546, 35, -546, -546, -546, 228, -546, 35, 212, + -546, 231, 377, 234, 1811, -546, -546, -546, -546, 686, + -546, 127, 856, -546, -546, -546, -546, -546, 243, -546, + 379, -546, 379, -546, -546, 3560, 3059, 2411, 176, -546, + -546, -546, 3560, -546, 3560, 204, 183, 183, 2978, 142, + 185, 2978, 150, 3560, 80, 3227, 156, 2492, 2978, 2168, + -546, 3560, 3140, -546, 108, -546, 2573, 2978, 2978, -546, + 261, -546, -546, 2978, 108, 379, 379, 379, 659, 659, + 275, 225, 2978, 2978, 2978, 2978, 2978, 2978, 2978, 2654, + -546, -546, 2978, -546, -546, 198, 2978, 2978, 2978, 2978, + 2978, 2978, 2978, 2978, 2978, 2978, 2978, 2978, 2978, 2978, + 2978, 198, 2978, 2978, 2978, 2978, 2978, 2978, 2978, 2978, + 2978, -546, -546, -546, 2978, 48, 2735, 2978, 2978, 2978, + 2978, 2978, 2978, 2978, -546, 237, 249, 251, 232, -546, + -546, -546, -546, -546, 196, 597, -546, -546, 202, -546, + -546, -546, 296, -546, -546, -546, -546, -546, -546, 80, + -546, -546, -546, 2978, 2978, 2978, 2978, 2978, -546, -546, + -546, -546, 280, -546, -546, -546, 280, -546, -546, -546, + 324, -546, -546, 2816, 379, 176, 15, 21, 22, -546, + 273, 285, -546, -546, -546, 183, 292, -546, -546, -546, + -546, 2978, 2978, 107, -546, -546, -546, -546, 369, 263, + 226, 2978, 108, 108, 344, -546, 2978, 355, 16, 16, + -546, -546, 3333, 112, 118, -546, 381, 522, -546, 2978, + 3439, 379, 459, 401, 3280, 3333, 3333, 3174, 1006, 1006, + 1006, 3479, 3479, 3501, 3541, 2978, 3520, 522, 522, 699, + 3405, 401, 459, 379, 379, 38, 346, 2978, 2978, 155, + 348, 350, 352, -546, 354, 2897, 252, -546, -546, 420, + 267, 154, 291, 182, 306, 188, 341, 978, -546, -546, + 370, 40, 183, 335, -546, 297, 2978, 2978, -546, -5, + -546, -546, 274, -546, -546, -546, -546, 2006, 70, -546, + 2978, 2978, -546, -546, 339, -546, 374, -546, -546, -546, + 141, -546, -546, -546, 141, -546, -546, 308, 308, 127, + 24, 438, -546, -546, -546, -546, -546, 276, -546, -546, + 283, 61, -546, 2978, -546, -546, -546, 477, -546, 201, + 2978, 390, -546, -546, 3520, 2978, 3520, -546, 347, 206, + -546, -546, -546, -546, -546, -546, 496, 2978, -546, 404, + -546, 406, -546, 407, -546, 408, -546, -546, -546, -546, + -546, 52, -546, -546, 294, 141, 298, 409, 295, -546, + -546, -546, -546, -546, 300, 421, 149, -546, 2978, 301, + 302, 141, 1127, 313, 378, 204, -546, 434, -546, -546, + 183, 2978, -546, -546, -546, -546, 25, -546, -546, -546, + 435, -546, -546, 2978, -546, 362, -546, -546, -546, 230, + -546, 3386, 437, -546, -546, 322, -546, -546, -546, -546, + 429, -546, -546, -546, 2978, 238, 238, 441, 330, -546, + 2978, 2978, 238, -546, 338, 353, -546, -546, -546, -546, + -546, -546, 2978, 183, -546, 442, 3227, 359, -546, 141, + -546, -546, -546, -546, 416, -546, -546, 3227, 193, 193, + 409, 363, 360, 373, 212, 2978, 2978, 238, 238, 238, + 409, 238, 469, 374, 1241, -546, -546, -546, -546, -546, + -546, 1355, -546, 238, 391, -546, -546, -546, -546, 2978, + 238, 238, -546, 485, 394, 212, 212, 212, -546, 481, + -546, -546, -546, 1469, -546, 14, -546, 1583, -546, 2978, + 405, 212, 212, -546, 238, -546, -546, -546, 411, 80, + -546, -546, 517, 454, -546, -546, 412, 238, -546, -546, + -546, 212, -546, -546, -546, -546, -546, -546, 238, 212, + 2087, -546, 1697, 193, -546, 417, -546, -546, 238, -546 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -522,104 +526,104 @@ static const yytype_int16 yydefact[] = { 0, 2, 4, 6, 8, 10, 12, 14, 0, 21, 19, 0, 0, 0, 19, 134, 1, 19, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 103, 103, 104, 280, 0, 0, 251, 278, 239, 273, - 275, 269, 103, 282, 261, 271, 0, 0, 264, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 103, 103, 104, 282, 0, 0, 253, 280, 241, 275, + 277, 271, 103, 284, 263, 273, 0, 0, 266, 19, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 303, 304, 147, 281, 246, 230, 189, 201, 190, - 208, 231, 232, 233, 150, 236, 5, 252, 241, 244, - 243, 245, 242, 0, 0, 0, 21, 7, 78, 73, + 0, 305, 306, 147, 283, 248, 232, 189, 201, 190, + 208, 233, 234, 235, 150, 238, 5, 254, 243, 246, + 245, 247, 244, 0, 0, 0, 21, 7, 78, 73, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 16, 17, 36, 0, 102, 0, 19, 9, 0, 79, 0, 0, 11, 33, 32, 28, 0, - 15, 19, 0, 332, 335, 334, 333, 319, 0, 320, - 214, 322, 215, 321, 325, 237, 0, 0, 284, 289, - 291, 290, 268, 229, 228, 19, 19, 19, 19, 0, - 0, 0, 0, 270, 0, 262, 0, 0, 19, 19, - 265, 266, 280, 301, 302, 158, 241, 0, 0, 323, - 0, 106, 107, 19, 263, 216, 217, 235, 221, 222, - 240, 0, 0, 0, 0, 0, 148, 0, 0, 0, - 204, 203, 0, 211, 210, 0, 0, 0, 0, 0, + 15, 19, 0, 334, 337, 336, 335, 321, 0, 322, + 216, 324, 217, 323, 327, 239, 0, 0, 286, 291, + 293, 292, 270, 231, 230, 19, 19, 19, 19, 0, + 0, 0, 0, 272, 0, 264, 0, 0, 19, 19, + 267, 268, 282, 303, 304, 158, 243, 0, 0, 325, + 0, 106, 107, 19, 265, 218, 219, 237, 223, 224, + 242, 0, 0, 0, 0, 0, 148, 0, 0, 0, + 204, 203, 0, 211, 210, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 218, 219, 220, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 19, 0, 0, 19, 292, - 294, 293, 21, 21, 21, 0, 21, 21, 0, 21, + 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 220, 221, 222, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 19, 0, 0, 19, 294, + 296, 295, 21, 21, 21, 0, 21, 21, 0, 21, 21, 23, 0, 71, 46, 102, 72, 42, 102, 0, 88, 64, 70, 0, 0, 0, 0, 0, 69, 35, 34, 29, 115, 118, 117, 129, 115, 125, 124, 128, - 130, 135, 223, 0, 286, 0, 241, 244, 243, 288, - 0, 114, 283, 109, 108, 19, 112, 110, 21, 21, - 156, 19, 0, 0, 274, 161, 272, 276, 0, 0, - 0, 0, 151, 152, 0, 255, 0, 238, 145, 146, - 143, 144, 149, 0, 0, 175, 0, 207, 213, 193, - 182, 184, 186, 200, 180, 181, 0, 196, 198, 197, - 194, 195, 192, 191, 212, 209, 206, 202, 205, 188, - 187, 185, 199, 183, 179, 0, 0, 0, 0, 329, - 327, 331, 163, 0, 0, 155, 164, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 100, 101, 0, - 0, 19, 296, 297, 298, 0, 0, 317, 0, 318, - 315, 0, 316, 312, 313, 314, 0, 0, 21, 0, - 95, 19, 21, 0, 38, 21, 40, 89, 80, 77, - 81, 84, 83, 97, 82, 116, 19, 19, 126, 240, - 0, 285, 287, 113, 21, 111, 19, 226, 227, 0, - 19, 177, 19, 277, 160, 159, 0, 224, 0, 0, - 0, 168, 174, 0, 259, 0, 0, 256, 258, 257, - 260, 324, 172, 0, 19, 254, 0, 166, 0, 247, - 0, 248, 0, 18, 21, 37, 21, 44, 0, 295, - 299, 0, 98, 0, 0, 0, 307, 21, 93, 94, - 99, 0, 0, 79, 58, 0, 0, 0, 96, 0, - 19, 0, 19, 137, 0, 43, 136, 19, 121, 120, - 123, 119, 127, 238, 225, 134, 131, 0, 132, 157, - 0, 305, 0, 162, 153, 178, 0, 171, 234, 0, - 167, 173, 0, 169, 249, 250, 165, 0, 65, 21, - 45, 0, 0, 0, 311, 0, 310, 0, 0, 0, - 52, 0, 0, 92, 92, 22, 25, 24, 62, 19, - 19, 19, 21, 122, 0, 141, 306, 279, 176, 170, - 154, 0, 19, 67, 300, 19, 19, 308, 0, 0, - 0, 19, 95, 0, 0, 0, 0, 0, 0, 0, - 21, 0, 140, 41, 139, 133, 19, 19, 0, 19, - 0, 0, 85, 48, 49, 309, 0, 0, 0, 61, - 0, 0, 19, 19, 19, 26, 90, 47, 39, 138, - 0, 30, 0, 66, 0, 86, 0, 0, 19, 19, - 53, 0, 57, 51, 50, 0, 0, 63, 142, 0, - 19, 31, 68, 0, 0, 55, 60, 92, 19, 27, - 91, 20, 19, 75, 74, 0, 19, 0, 59, 0, - 19, 56, 0, 76, 87, 0, 54 + 130, 135, 225, 0, 288, 0, 243, 246, 245, 290, + 0, 114, 285, 109, 108, 19, 112, 110, 21, 21, + 156, 19, 0, 0, 276, 161, 274, 278, 0, 0, + 0, 0, 151, 152, 0, 257, 0, 240, 145, 146, + 143, 144, 149, 0, 0, 175, 0, 207, 213, 0, + 193, 182, 184, 186, 200, 180, 181, 0, 196, 198, + 197, 194, 195, 192, 191, 0, 209, 206, 202, 205, + 188, 187, 185, 199, 183, 179, 0, 0, 0, 0, + 331, 329, 333, 163, 0, 0, 155, 164, 255, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, + 0, 0, 19, 298, 299, 300, 0, 0, 319, 0, + 320, 317, 0, 318, 314, 315, 316, 0, 0, 21, + 0, 95, 19, 21, 0, 38, 21, 40, 89, 80, + 77, 81, 84, 83, 97, 82, 116, 19, 19, 126, + 242, 0, 287, 289, 113, 21, 111, 19, 228, 229, + 0, 19, 177, 19, 279, 160, 159, 0, 226, 0, + 0, 0, 168, 174, 215, 0, 214, 261, 0, 0, + 258, 260, 259, 262, 326, 172, 0, 19, 256, 0, + 166, 0, 249, 0, 250, 0, 18, 21, 37, 21, + 44, 0, 297, 301, 0, 98, 0, 0, 0, 309, + 21, 93, 94, 99, 0, 0, 79, 58, 0, 0, + 0, 96, 0, 19, 0, 19, 137, 0, 43, 136, + 19, 121, 120, 123, 119, 127, 240, 227, 134, 131, + 0, 132, 157, 0, 307, 0, 162, 153, 178, 0, + 171, 236, 0, 167, 173, 0, 169, 251, 252, 165, + 0, 65, 21, 45, 0, 0, 0, 313, 0, 312, + 0, 0, 0, 52, 0, 0, 92, 92, 22, 25, + 24, 62, 19, 19, 19, 21, 122, 0, 141, 308, + 281, 176, 170, 154, 0, 19, 67, 302, 19, 19, + 310, 0, 0, 0, 19, 95, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 140, 41, 139, 133, 19, + 19, 0, 19, 0, 0, 85, 48, 49, 311, 0, + 0, 0, 61, 0, 0, 19, 19, 19, 26, 90, + 47, 39, 138, 0, 30, 0, 66, 0, 86, 0, + 0, 19, 19, 53, 0, 57, 51, 50, 0, 0, + 63, 142, 0, 19, 31, 68, 0, 0, 55, 60, + 92, 19, 27, 91, 20, 19, 75, 74, 0, 19, + 0, 59, 0, 19, 56, 0, 76, 87, 0, 54 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -4, -10, -535, 83, -77, -535, -535, -535, -535, -16, - -535, 569, 492, 26, -535, -535, -535, -535, -535, -535, - -535, -535, -535, -535, -535, -535, 150, -388, -534, -281, - -535, -531, -535, 16, 192, -367, -40, -535, -81, 45, - -535, -535, 43, 119, -142, 325, 337, -535, -535, 201, - -535, 196, -535, -535, -535, -535, 114, -535, 35, 200, - -535, -295, -535, 79, -6, -535, -535, -535, -535, -535, - -535, -535, -535, -535, -535, -535, -535, 632, -535, -535, - 485, -535, -535, -535, -535, -146, -2, -535, -535, -535, - -535, 228, -535, -535, 389, 95, -24, -3, -535, -535, - -535, -535, -535, 31 + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -4, -10, -546, 83, -83, -546, -546, -546, -546, -16, + -546, 531, 433, 11, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -111, -391, -545, -271, + -546, -535, -546, -20, 151, -347, -97, -546, -85, 36, + -546, -546, -48, 62, -143, 271, 284, -546, -546, 143, + -546, 158, -546, -546, -546, -546, 54, -546, -2, 153, + -546, -286, -546, 79, -6, -546, -546, -546, -546, -546, + -546, -546, -546, 380, -546, -546, -546, -546, 635, -546, + -546, 457, -546, -546, -546, -546, -146, 0, -546, -546, + -546, -546, 203, -546, -546, 349, 95, -24, -22, -546, + -546, -546, -546, -546, 31 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 108, - 109, 118, 465, 426, 252, 401, 548, 577, 625, 119, - 612, 271, 116, 117, 492, 497, 405, 403, 572, 637, - 541, 578, 562, 589, 631, 644, 408, 111, 593, 261, - 627, 575, 480, 487, 412, 471, 482, 379, 254, 145, - 147, 235, 173, 295, 298, 292, 416, 276, 277, 500, - 278, 279, 280, 281, 507, 508, 120, 121, 495, 496, - 583, 427, 586, 112, 63, 64, 432, 365, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 150, 75, - 138, 238, 384, 113, 531, 165, 76, 512, 475, 534, - 535, 390, 391, 247, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 129 + 109, 118, 468, 427, 252, 402, 551, 580, 628, 119, + 615, 271, 116, 117, 495, 500, 406, 404, 575, 640, + 544, 581, 565, 592, 634, 647, 409, 111, 596, 261, + 630, 578, 483, 490, 413, 474, 485, 380, 254, 145, + 147, 235, 173, 295, 298, 292, 417, 276, 277, 503, + 278, 279, 280, 281, 510, 511, 120, 121, 498, 499, + 586, 428, 589, 112, 63, 64, 433, 366, 65, 66, + 67, 68, 69, 329, 70, 71, 72, 73, 74, 150, + 75, 138, 238, 385, 113, 534, 165, 76, 515, 478, + 537, 538, 391, 392, 247, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 129 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -627,105 +631,94 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 61, 122, 300, 140, 428, 299, 152, 87, 479, 61, - 187, 20, 188, 576, 125, 440, 125, 128, 125, 473, - 125, 125, 20, 253, 141, 143, 257, 315, 16, 481, - 125, 125, 594, 227, 316, 228, 244, 151, 110, 163, - 439, 629, 61, 164, 160, 125, 168, 125, 174, 127, - 170, 158, 86, 131, 171, 133, 134, 355, 356, 172, - 357, 156, 466, 358, 157, 148, 149, 359, 529, 240, - 20, 360, 361, 467, 22, 630, 146, 186, 24, 530, - 167, 192, 169, 182, 183, 184, 185, 154, 186, 62, - 241, 227, 17, 228, 159, -326, 510, -326, 62, 260, - 226, 362, 431, -288, -289, 86, 647, 441, 195, -287, - 20, 275, 287, 126, -330, 126, 654, 126, 542, 126, - 126, 233, 139, 474, 245, 457, 363, 189, 236, 126, - 126, 62, 459, 288, 246, 294, 297, 297, 163, 181, - 270, -328, 164, -328, 166, 255, 126, 123, 61, 61, - 305, 258, 124, 424, 237, 125, 309, 310, -326, 251, - -326, 312, 313, 163, 456, 242, -291, 164, 461, 234, - 569, 570, 136, 256, 404, 364, 243, 406, 182, 183, - 184, 185, 137, 182, 183, 184, 185, -328, 239, -328, - 311, 248, 263, 515, 249, 264, 265, 266, 267, 520, - 250, 182, 183, 184, 185, 558, 601, 259, 182, 183, - 184, 185, -290, 190, 191, 20, 290, 262, 376, 22, - 229, 394, 230, 24, 458, 378, 193, 194, 383, 617, - 303, 286, 182, 183, 184, 185, 308, 62, 62, 468, - 268, 231, 395, 232, 182, 183, 184, 185, 460, 633, - 182, 183, 184, 185, 166, 407, 282, 584, 302, 479, - 293, 318, 319, 320, 321, 291, 323, 324, 326, 182, - 183, 184, 185, 184, 185, 182, 183, 184, 185, 462, - 296, 182, 183, 184, 185, 297, 513, -98, -334, 225, - 599, 61, 182, 183, 184, 185, 430, 301, 519, 429, - -334, -334, -334, 224, 225, 368, 369, 370, 371, 372, - 373, 374, 375, 590, 591, 304, 182, 183, 184, 185, - 366, 622, 623, 624, 306, 385, 386, 388, 314, 396, - 397, 316, 399, 400, 377, 380, 381, 635, 636, 387, - 393, 382, 409, 409, 409, 413, 409, 182, 183, 184, - 185, 398, 272, 402, 125, 552, 273, 648, 415, 418, - 274, 423, 420, 425, 434, 651, 182, 183, 184, 185, - 435, 297, 263, 394, 437, 264, 265, 266, 267, 439, - 62, 182, 183, 184, 185, 489, 478, 464, 444, 448, - 436, 197, 198, 199, 395, 438, 1, 2, 3, 4, - 5, 6, 7, 579, 449, 450, 499, 499, 580, 451, - 469, 197, 198, 199, 410, 411, 506, 414, 317, 470, - 511, 454, 163, 197, 477, 491, 164, 217, 218, 219, - 182, 183, 184, 185, 220, 445, 446, 221, 222, 223, - 224, 225, 493, 453, 61, 215, 216, 217, 218, 219, - 498, 505, 522, 126, 220, 565, 566, 221, 222, 223, - 224, 225, 571, 86, 472, 472, 220, 517, 20, 221, - 222, 223, 224, 225, 523, 483, 197, 447, 413, 488, - 547, 485, 294, 476, 509, 490, 524, 297, 494, 525, - 526, 20, 393, 182, 183, 184, 185, 602, 603, 604, - 532, 606, 533, 540, 537, 123, 546, 494, 539, 543, - 124, 549, 544, 615, 219, 551, 555, 557, 516, 220, - 618, 619, 221, 222, 223, 224, 225, 559, 560, 561, - 422, 567, 568, 62, 573, 581, 574, 197, 198, 163, - 297, 585, 582, 164, 638, 596, 588, 527, 587, 528, - 597, 598, 18, 607, 616, 592, 592, 646, 20, 620, - 538, 260, 22, 621, 472, 626, 24, 634, 650, 536, - 610, 639, 389, 614, 218, 219, 641, 611, 656, 642, - 220, 645, 115, 221, 222, 223, 224, 225, 600, 556, - 655, 486, 260, 260, 260, 197, 198, 199, 182, 183, - 184, 185, 182, 183, 184, 185, 269, 652, 260, 260, - 421, 550, 563, 417, 502, 608, 472, 472, 501, 554, - 643, 285, 640, 0, 504, 484, 649, 0, 260, -334, - 216, 217, 218, 219, 392, 433, 260, 478, 220, 442, - 592, 221, 222, 223, 224, 225, 182, 183, 184, 185, - 0, 488, 472, 130, 0, 132, 0, 0, 135, 0, - 142, 144, 595, 494, 182, 183, 184, 185, 0, 0, - 0, 0, 605, 153, 0, 472, 155, 0, 0, 0, - 161, 0, 0, -13, 88, 0, 0, 175, 176, 177, - 178, 179, 0, 18, 86, 472, 19, 0, 0, 20, - 0, 455, 21, 22, 23, 89, 0, 24, 25, 90, - 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, - 97, 98, 0, 99, 0, 0, 100, 28, 29, 101, - 102, 103, 30, 31, 104, 32, 33, 34, 35, 36, - 37, 0, 38, 39, 40, 41, 42, 43, 105, 114, - 44, 0, 106, 45, 46, 47, 48, 49, 50, 0, - 0, 0, 51, 52, 53, 0, 0, 0, 284, 0, - 107, 182, 183, 184, 185, 0, 0, 54, 182, 183, - 184, 185, 182, 183, 184, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, - 0, 57, 0, 58, 59, 0, 0, 0, 503, 0, - 0, 60, 0, 0, 0, 514, 0, 0, 322, 521, - 0, 0, 0, 0, 327, 0, 0, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -3, 88, 0, 354, 0, 0, 0, - 0, 0, 0, 18, 86, 0, 19, 0, 0, 20, - 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, - 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, - 97, 98, 0, 99, 0, 0, 100, 28, 29, 101, - 102, 103, 30, 31, 104, 32, 33, 34, 35, 36, - 37, 0, 38, 39, 40, 41, 42, 43, 105, 114, - 44, 0, 106, 45, 46, 47, 48, 49, 50, 0, - 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 61, 122, 300, 140, 299, 141, 482, 87, 187, 61, + 188, 20, 579, 429, 125, 20, 125, 253, 125, 128, + 125, 125, 257, 110, 597, 143, 227, 315, 228, 244, + 125, 125, -328, -330, -328, -330, 632, 316, 440, 163, + 476, 158, 61, 164, 160, 125, 168, 125, 174, 127, + 484, 469, 170, 131, 255, 133, 134, 16, 356, 357, + 258, 358, 470, 532, 359, 148, 149, 146, 360, 240, + 633, 241, 361, 362, 533, 227, 186, 228, 154, 20, + 167, 151, 169, 22, 513, 159, 20, 24, 171, 62, + 22, 86, 17, 172, 24, 190, 191, -291, 62, 260, + 193, 194, 363, -293, -292, 650, -290, -289, 657, 184, + 185, 275, 287, 126, 288, 126, 152, 126, 245, 126, + 126, 432, 139, 186, 477, 270, 189, 364, 246, 126, + 126, 62, 442, 156, 441, 294, 297, 297, 163, 181, + 195, 545, 164, 272, 166, -332, 126, 273, 61, 61, + 305, 274, 425, 411, 412, 125, 415, 157, 309, 310, + 192, 312, 313, 163, -336, 225, 86, 164, 460, 234, + 405, 20, -328, 407, -328, 226, -330, 365, -330, 233, + 450, 263, 136, 236, 264, 265, 266, 267, 239, 237, + 311, 248, 137, 572, 573, 229, 462, 230, 182, 183, + 184, 185, 464, 182, 183, 184, 185, 242, 123, 182, + 183, 184, 185, 124, 243, 518, 290, 249, 377, 250, + 523, 395, 231, 396, 232, 379, 593, 594, 384, 604, + 303, 286, 182, 183, 184, 185, 308, 62, 62, 471, + 182, 183, 184, 185, 561, 182, 183, 184, 185, 251, + 256, 259, 620, 262, 166, 408, 268, 282, 291, 482, + 293, 318, 319, 320, 321, 296, 323, 324, 326, 587, + 302, 301, 636, 182, 183, 184, 185, -98, 304, 182, + 183, 184, 185, 314, 306, 297, 328, 516, 316, 459, + 378, 61, 182, 183, 184, 185, 431, 182, 183, 184, + 185, 430, 381, 602, 382, 369, 370, 371, 372, 373, + 374, 375, 376, 461, 383, 388, 182, 183, 184, 185, + 367, 182, 183, 184, 185, 386, 387, 389, 463, 397, + 398, 399, 400, 401, 625, 626, 627, 403, 416, 419, + 394, 424, 410, 410, 410, 414, 410, 86, 426, 435, + 638, 639, 20, 317, 436, 125, 438, 555, 182, 183, + 184, 185, 421, 465, 182, 183, 184, 185, 440, 522, + 651, 447, 297, 451, 395, 452, 396, 453, 654, 454, + 62, 457, 182, 183, 184, 185, 492, 481, 467, 123, + 437, 472, 494, 473, 124, 439, 496, 182, 183, 184, + 185, 423, 520, 480, 501, 508, 582, 502, 502, 263, + 583, 512, 264, 265, 266, 267, 526, 509, 527, 528, + 529, 514, 535, 163, 540, 20, 536, 164, 542, 546, + 547, 552, 182, 183, 184, 185, 448, 449, 182, 183, + 184, 185, 549, 543, 456, 554, 558, 61, 560, 562, + 563, 564, 568, 569, 126, 197, 570, 525, 571, 574, + 182, 183, 184, 185, 585, 475, 475, 576, 182, 183, + 184, 185, 182, 183, 184, 185, 486, 197, 198, 414, + 491, 577, 488, 550, 479, 294, 493, 588, 600, 497, + 297, 610, 599, 394, 605, 606, 607, 434, 609, 220, + 590, 601, 221, 222, 223, 224, 225, 623, 497, 443, + 618, 182, 183, 184, 185, 218, 219, 621, 622, 519, + 619, 220, 624, 629, 221, 222, 223, 224, 225, 182, + 183, 184, 185, 637, 644, 197, 62, 645, 584, 642, + 648, 641, 163, 297, 115, 658, 164, 269, 458, 591, + 530, 489, 531, 655, 649, 603, 422, 553, 595, 595, + 418, 504, 557, 541, 260, 653, 506, 475, 182, 183, + 184, 185, 539, 613, 219, 659, 617, 505, 507, 220, + 614, 611, 221, 222, 223, 224, 225, 182, 183, 184, + 185, 345, 559, 285, 393, 260, 260, 260, 197, 198, + 199, 487, 0, 0, 0, 517, 0, 18, 0, 0, + 0, 260, 260, 20, 0, 566, 0, 22, 0, 475, + 475, 24, 0, 646, 524, 643, 0, 390, 0, 652, + 0, 260, 0, 215, 216, 217, 218, 219, 0, 260, + 481, 0, 220, 595, 0, 221, 222, 223, 224, 225, + 0, 0, 0, 0, 491, 475, 130, 0, 132, 0, + 0, 135, 0, 142, 144, 598, 497, 1, 2, 3, + 4, 5, 6, 7, 0, 608, 153, 0, 475, 155, + 0, 0, 0, 161, 0, 0, -13, 88, 0, 0, + 175, 176, 177, 178, 179, 0, 18, 86, 475, 19, + 0, 0, 20, 0, 0, 21, 22, 23, 89, 0, + 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, + 0, 95, 96, 97, 98, 0, 99, 0, 0, 100, + 28, 29, 101, 102, 103, 30, 31, 104, 32, 33, + 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, + 43, 105, 114, 44, 0, 106, 45, 46, 47, 48, + 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 284, 0, 107, 0, 197, 198, 199, 0, 0, + 0, 54, -336, -336, -336, 224, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, - 0, 57, 0, 58, 59, 0, 18, 86, 463, 19, - 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, + 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, + -336, 216, 217, 218, 219, 60, 0, 0, 0, 220, + 0, 322, 221, 222, 223, 224, 225, 327, 0, 0, + 0, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 0, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -3, 88, 0, 355, + 0, 0, 0, 0, 0, 0, 18, 86, 0, 19, + 0, 0, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, 0, 0, 100, 28, 29, 101, 102, 103, 30, 31, 104, 32, 33, @@ -733,59 +726,71 @@ static const yytype_int16 yytable[] = 43, 105, 114, 44, 0, 106, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 0, 0, 0, 0, 0, 518, 0, 197, 198, 199, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 200, 0, 0, 0, 60, 0, 201, 202, 203, 443, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, - 220, 0, 88, 221, 222, 223, 224, 225, 0, 0, - 553, 18, 86, 545, 19, 0, 0, 20, 0, 0, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, + 0, 0, 55, 56, 0, 57, 0, 58, 59, 88, + 446, 0, 0, 0, 0, 60, 0, 0, 18, 86, + 466, 19, 0, 0, 20, 0, 0, 21, 22, 23, + 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, + 94, 0, 0, 95, 96, 97, 98, 0, 99, 0, + 0, 100, 28, 29, 101, 102, 103, 30, 31, 104, + 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, + 41, 42, 43, 105, 114, 44, 0, 106, 45, 46, + 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, + 521, 0, 197, 198, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, + 59, 0, 0, 0, 0, 0, 0, 60, 0, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 0, 0, 0, 0, 220, 0, 88, 221, + 222, 223, 224, 225, 0, 0, 556, 18, 86, 548, + 19, 0, 0, 20, 0, 0, 21, 22, 23, 89, + 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, + 0, 0, 95, 96, 97, 98, 0, 99, 0, 567, + 100, 28, 29, 101, 102, 103, 30, 31, 104, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 105, 114, 44, 0, 106, 45, 46, 47, + 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, + 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 55, 56, 0, 57, 0, 58, 59, + 0, 18, 86, 612, 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, - 0, 99, 0, 564, 100, 28, 29, 101, 102, 103, + 0, 99, 0, 0, 100, 28, 29, 101, 102, 103, 30, 31, 104, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 105, 114, 44, 0, 106, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, 107, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 88, 55, 56, 0, 57, - 0, 58, 59, 0, 18, 86, 609, 19, 0, 60, - 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, - 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, - 96, 97, 98, 0, 99, 0, 0, 100, 28, 29, - 101, 102, 103, 30, 31, 104, 32, 33, 34, 35, - 36, 37, 0, 38, 39, 40, 41, 42, 43, 105, - 114, 44, 0, 106, 45, 46, 47, 48, 49, 50, - 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, - 0, 107, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, - 56, 0, 57, 0, 58, 59, 0, 18, 86, 613, - 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, - 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, - 0, 0, 95, 96, 97, 98, 0, 99, 0, 0, - 100, 28, 29, 101, 102, 103, 30, 31, 104, 32, - 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, - 42, 43, 105, 114, 44, 0, 106, 45, 46, 47, - 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, - 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, + 57, 0, 58, 59, 0, 18, 86, 616, 19, 0, + 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, + 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, + 95, 96, 97, 98, 0, 99, 0, 0, 100, 28, + 29, 101, 102, 103, 30, 31, 104, 32, 33, 34, + 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, + 105, 114, 44, 0, 106, 45, 46, 47, 48, 49, + 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, + 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 55, 56, 0, 57, 0, 58, 59, 0, - 18, 86, 628, 19, 0, 60, 20, 0, 0, 21, - 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, - 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, - 99, 0, 0, 100, 28, 29, 101, 102, 103, 30, - 31, 104, 32, 33, 34, 35, 36, 37, 0, 38, - 39, 40, 41, 42, 43, 105, 114, 44, 0, 106, - 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, - 52, 53, 0, 0, 0, 0, 0, 107, 0, 0, + 88, 55, 56, 0, 57, 0, 58, 59, 0, 18, + 86, 631, 19, 0, 60, 20, 0, 0, 21, 22, + 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, + 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, + 0, 0, 100, 28, 29, 101, 102, 103, 30, 31, + 104, 32, 33, 34, 35, 36, 37, 0, 38, 39, + 40, 41, 42, 43, 105, 114, 44, 0, 106, 45, + 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, 57, 0, - 58, 59, 0, 18, 86, 632, 19, 0, 60, 20, + 58, 59, 0, 18, 86, 635, 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, 0, 0, 100, 28, 29, 101, @@ -793,308 +798,300 @@ static const yytype_int16 yytable[] = 37, 0, 38, 39, 40, 41, 42, 43, 105, 114, 44, 0, 106, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 107, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, - 0, 57, 0, 58, 59, 0, 18, 86, 0, 19, - 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, - 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, - 0, 95, 96, 97, 98, 0, 99, 0, 0, 100, - 28, 29, 101, 102, 103, 30, 31, 104, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 105, 114, 44, 0, 106, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 653, 0, 0, 107, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, + 56, 0, 57, 0, 58, 59, 0, 18, 86, 0, + 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, + 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, + 0, 0, 95, 96, 97, 98, 0, 99, 0, 0, + 100, 28, 29, 101, 102, 103, 30, 31, 104, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 105, 114, 44, 0, 106, 45, 46, 47, + 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, + 0, 656, 0, 0, 107, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 55, 56, 0, 57, 0, 58, 59, 0, 18, - 86, 0, 19, 0, 60, 20, 0, 0, 21, 22, - 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, - 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, - 0, 0, 100, 28, 29, 101, 102, 103, 30, 31, - 104, 32, 33, 34, 35, 36, 37, 0, 38, 39, - 40, 41, 42, 43, 105, 114, 44, 0, 106, 45, - 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, - 53, 0, 0, 0, 0, 0, 107, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 55, 56, 0, 57, 0, 58, 59, + 0, 18, 86, 0, 19, 0, 60, 20, 0, 0, + 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, + 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, + 0, 99, 0, 0, 100, 28, 29, 101, 102, 103, + 30, 31, 104, 32, 33, 34, 35, 36, 37, 0, + 38, 39, 40, 41, 42, 43, 105, 114, 44, 0, + 106, 45, 46, 47, 48, 49, 50, 0, 0, 0, + 51, 52, 53, 0, 0, 0, 0, 0, 107, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 55, 56, 0, 57, 0, 58, - 59, 0, 18, 86, 0, 19, 0, 60, 20, 0, - 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, - 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, - 98, 0, 99, 0, 0, 100, 28, 29, 101, 102, - 103, 30, 31, 104, 32, 33, 34, 35, 36, 37, - 0, 38, 39, 40, 41, 42, 43, 105, 0, 44, - 0, 106, 45, 46, 47, 48, 49, 50, 0, 0, - 0, 51, 52, 53, 0, 88, 0, 0, 0, 107, - 0, 0, 0, 0, 18, 0, 54, 19, 0, 0, - 20, 0, 0, 21, 22, 23, -19, 0, 24, 25, - 0, 0, 0, 26, 27, 0, 0, 55, 56, 0, - 57, 0, 58, 59, 0, 0, 0, 0, 28, 29, - 60, 0, 0, 30, 31, 0, 32, 33, 34, 35, - 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, - 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, - 0, 0, 0, 51, 52, 53, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 54, 19, - 0, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 55, - 56, 0, 57, 0, 58, 59, 0, 0, 0, 0, - 28, 29, 60, 0, 0, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 86, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, -19, 60, 30, 31, 0, 32, 162, - 34, 35, 36, 37, 124, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 86, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 0, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, + 57, 0, 58, 59, 0, 18, 86, 0, 19, 0, + 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, + 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, + 95, 96, 97, 98, 0, 99, 0, 0, 100, 28, + 29, 101, 102, 103, 30, 31, 104, 32, 33, 34, + 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, + 105, 0, 44, 0, 106, 45, 46, 47, 48, 49, + 50, 0, 0, 0, 51, 52, 53, 88, 0, 0, + 0, 0, 107, 0, 0, 0, 18, 0, 0, 19, + 54, 0, 20, 0, 0, 21, 22, 23, -19, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, 28, 29, 0, 0, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 180, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 289, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, -333, 227, 0, 228, - 54, 0, -333, 0, 0, -333, -333, -333, 0, 0, - -333, -333, 0, 0, 0, -333, -333, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - -333, -333, 0, 307, 60, -333, -333, 0, -333, -333, - -333, -333, -333, -333, 0, -333, -333, -333, -333, -333, - -333, 0, 0, -333, 0, 0, -333, -333, -333, -333, - -333, -333, 0, 0, 0, -333, -333, -333, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - -333, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, -333, -333, 0, -333, 0, -333, -333, 0, 0, - 28, 29, 0, 0, -333, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 325, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 367, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 419, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, - 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 452, 60, 30, 31, 0, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, + 49, 50, 0, 0, 0, 51, 52, 53, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 19, 54, 0, 20, 0, 0, 21, 22, 23, 0, + 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, + 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, + 0, 28, 29, 0, 0, 60, 30, 31, 0, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 0, 0, 44, 0, 0, 45, 46, 47, + 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 86, + 0, 19, 54, 0, 20, 0, 0, 21, 22, 23, + 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, + 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, + 0, 0, 28, 29, 0, -19, 60, 30, 31, 0, + 32, 162, 34, 35, 36, 37, 124, 38, 39, 40, + 41, 42, 43, 0, 0, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 86, 0, 19, 54, 0, 20, 0, 0, 21, 22, + 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, + 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, + 59, 0, 0, 28, 29, 0, 0, 60, 30, 31, + 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, + 40, 41, 42, 43, 0, 0, 44, 0, 0, 45, + 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 19, 54, 0, 20, 0, 0, 21, + 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, + 27, 0, 0, 0, 0, 55, 56, 0, 57, 0, + 58, 59, 0, 0, 28, 29, 0, 0, 60, 30, + 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, + 39, 40, 41, 42, 43, 0, 0, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, + 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 0, 0, 19, 54, 0, 20, 0, 0, + 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, + 26, 27, 0, 0, 0, 0, 55, 56, 0, 57, + 0, 58, 59, 0, 0, 28, 29, 0, 180, 60, + 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, + 38, 39, 40, 41, 42, 43, 0, 0, 44, 0, + 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, + 51, 52, 53, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 19, 54, 0, 20, 0, + 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, + 0, 26, 27, 0, 0, 0, 0, 55, 56, 0, + 57, 0, 58, 59, 0, 0, 28, 29, 0, 289, + 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, + 0, 38, 39, 40, 41, 42, 43, 0, 0, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, + 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -335, 227, 0, 228, 54, 0, -335, + 0, 0, -335, -335, -335, 0, 0, -335, -335, 0, + 0, 0, -335, -335, 0, 0, 0, 0, 55, 56, + 0, 57, 0, 58, 59, 0, 0, -335, -335, 0, + 307, 60, -335, -335, 0, -335, -335, -335, -335, -335, + -335, 0, -335, -335, -335, -335, -335, -335, 0, 0, + -335, 0, 0, -335, -335, -335, -335, -335, -335, 0, + 0, 0, -335, -335, -335, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 0, 0, 19, -335, 0, + 20, 0, 0, 21, 22, 23, 0, 0, 24, 25, + 0, 0, 0, 26, 27, 0, 0, 0, 0, -335, + -335, 0, -335, 0, -335, -335, 0, 0, 28, 29, + 0, 0, -335, 30, 31, 0, 32, 33, 34, 35, + 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, + 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, + 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 0, 0, 19, 54, + 0, 20, 0, 0, 21, 22, 23, 0, 0, 24, + 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, + 55, 56, 0, 57, 0, 58, 59, 0, 0, 28, + 29, 0, 325, 60, 30, 31, 0, 32, 33, 34, + 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, + 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, + 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 54, 0, 20, 0, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 0, 60, 30, 31, 0, 32, 33, + 28, 29, 0, 368, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 0, 0, 0, -332, 0, 0, -332, - 54, 0, -332, 0, 0, -332, -332, -332, 0, 0, - -332, -332, 0, 0, 0, -332, -332, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - -332, -332, 0, 0, 283, -332, -332, 0, -332, -332, - -332, -332, -332, -332, 0, -332, -332, -332, -332, -332, - -332, 0, 0, -332, 0, 0, -332, -332, -332, -332, - -332, -332, 0, 0, 0, -332, -332, -332, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -332, 0, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 0, 197, 198, 199, 0, 0, 0, 0, 0, - 0, -332, -332, 0, -332, 200, -332, -332, 0, 0, - 0, 201, 202, 203, -332, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 0, 0, 0, 0, 220, 196, 0, 221, 222, - 223, 224, 225, 0, 197, 198, 199, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 19, 54, 0, 20, 0, 0, 21, 22, 23, 0, + 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, + 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, + 0, 28, 29, 0, 420, 60, 30, 31, 0, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 0, 0, 44, 0, 0, 45, 46, 47, + 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, + 0, 19, 54, 0, 20, 0, 0, 21, 22, 23, + 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, + 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, + 0, 0, 28, 29, 0, 455, 60, 30, 31, 0, + 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, + 41, 42, 43, 0, 0, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 0, 0, 19, 54, 0, 20, 0, 0, 21, 22, + 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, + 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, + 59, 0, 0, 28, 29, 0, 0, 60, 30, 31, + 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, + 40, 41, 42, 43, 0, 0, 44, 0, 0, 45, + 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -334, 0, 0, -334, 54, 0, -334, 0, 0, -334, + -334, -334, 0, 0, -334, -334, 0, 0, 0, -334, + -334, 0, 0, 0, 0, 55, 56, 0, 57, 0, + 58, 59, 0, 0, -334, -334, 0, 0, 283, -334, + -334, 0, -334, -334, -334, -334, -334, -334, 0, -334, + -334, -334, -334, -334, -334, 0, 0, -334, 0, 0, + -334, -334, -334, -334, -334, -334, 0, 0, 0, -334, + -334, -334, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -334, 0, 0, 0, 0, + 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, + 197, 198, 199, 0, 0, 0, -334, -334, 0, -334, + 0, -334, -334, 0, 200, 0, 0, 0, 0, -334, + 201, 202, 203, 445, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 0, 0, 0, 0, 220, 196, 0, 221, 222, 223, + 224, 225, 0, 197, 198, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 202, 203, 0, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, 220, 196, 0, 221, 222, 223, 224, 225, 0, 197, 198, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 201, 202, 203, 0, 204, + -336, 0, 0, 0, 0, 0, 201, 202, 203, 0, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 0, 0, 0, 0, + 220, 196, 0, 221, 222, 223, 224, 225, 0, 197, + 198, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, + 202, 203, 0, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 0, + 0, 0, 0, 220, 196, 0, 221, 222, 223, 224, + 225, 0, 197, 198, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 198, 199, 203, 0, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 0, 0, 0, 0, 220, -336, 0, 221, + 222, 223, 224, 225, 0, 197, 198, 199, 217, 218, + 219, 0, 0, 0, 0, 220, 0, 0, 221, 222, + 223, 224, 225, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 0, 0, 0, 0, 220, - 196, 0, 221, 222, 223, 224, 225, 0, 197, 198, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 0, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 215, 216, 217, 218, 219, 197, 198, 199, 0, 220, + 0, 0, 221, 222, 223, 224, 225, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 197, 198, 199, + 0, 0, 0, 0, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 0, 197, 198, 199, 220, + 0, 0, 221, 222, 223, 224, 225, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 197, 198, 199, + 0, 220, 0, 0, 221, 222, 223, 224, 225, 213, + 214, 215, 216, 217, 218, 219, 197, 198, 199, 0, + 220, 0, 0, 221, 222, 223, 224, 225, 211, 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, 0, - 0, 220, -334, 0, 221, 222, 223, 224, 225, 0, - 197, 198, 199, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 197, - 198, 199, 0, 220, 0, 0, 221, 222, 223, 224, - 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 198, 199, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 0, 0, - 0, 0, 220, 0, 0, 221, 222, 223, 224, 225, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 197, 198, 199, 0, 220, 0, 0, 221, 222, - 223, 224, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 197, 198, 199, 0, 0, 0, 0, 0, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 0, 197, 198, 199, 220, 0, 0, 221, 222, 223, - 224, 225, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 197, 198, 199, 0, 220, 0, 0, 221, 222, - 223, 224, 225, 213, 214, 215, 216, 217, 218, 219, - 0, 0, 0, 0, 220, 0, 0, 221, 222, 223, - 224, 225, 0, 0, 0, 0, 216, 217, 218, 219, - 0, 0, 0, 0, 220, 0, 0, 221, 222, 223, - 224, 225 + 0, 220, 0, 0, 221, 222, 223, 224, 225, 0, + 0, 0, 216, 217, 218, 219, 0, 0, 0, 0, + 220, 0, 0, 221, 222, 223, 224, 225 }; static const yytype_int16 yycheck[] = { - 10, 17, 148, 27, 299, 147, 128, 11, 396, 19, - 11, 16, 13, 544, 18, 22, 20, 19, 22, 386, - 24, 25, 16, 100, 27, 29, 107, 173, 0, 396, - 34, 35, 566, 11, 13, 13, 30, 13, 12, 49, - 13, 22, 52, 49, 48, 49, 50, 51, 54, 18, - 52, 85, 11, 22, 53, 24, 25, 10, 11, 58, - 13, 128, 11, 16, 128, 34, 35, 20, 11, 93, - 16, 24, 25, 22, 20, 56, 31, 15, 24, 22, - 49, 108, 51, 90, 91, 92, 93, 42, 15, 10, - 93, 11, 9, 13, 128, 11, 23, 13, 19, 109, - 128, 54, 14, 82, 82, 11, 637, 14, 106, 82, - 16, 121, 136, 18, 11, 20, 650, 22, 485, 24, - 25, 11, 27, 128, 118, 14, 79, 128, 53, 34, - 35, 52, 14, 136, 128, 145, 146, 147, 148, 60, - 114, 11, 148, 13, 49, 102, 51, 53, 158, 159, - 154, 108, 58, 295, 53, 159, 158, 159, 11, 11, - 13, 167, 168, 173, 22, 128, 82, 173, 14, 86, - 537, 538, 118, 22, 255, 128, 128, 258, 90, 91, - 92, 93, 128, 90, 91, 92, 93, 11, 93, 13, - 159, 96, 32, 14, 128, 35, 36, 37, 38, 14, - 128, 90, 91, 92, 93, 14, 573, 39, 90, 91, - 92, 93, 82, 108, 109, 16, 137, 22, 234, 20, - 11, 245, 13, 24, 22, 235, 106, 107, 238, 596, - 151, 136, 90, 91, 92, 93, 157, 158, 159, 381, - 22, 11, 245, 13, 90, 91, 92, 93, 22, 616, - 90, 91, 92, 93, 159, 259, 14, 552, 85, 647, - 56, 182, 183, 184, 185, 82, 187, 188, 189, 90, - 91, 92, 93, 92, 93, 90, 91, 92, 93, 22, - 82, 90, 91, 92, 93, 295, 432, 127, 125, 126, - 571, 301, 90, 91, 92, 93, 302, 128, 22, 301, - 122, 123, 124, 125, 126, 226, 227, 228, 229, 230, - 231, 232, 233, 33, 34, 127, 90, 91, 92, 93, - 225, 602, 603, 604, 127, 242, 243, 244, 22, 246, - 247, 13, 249, 250, 53, 53, 53, 618, 619, 118, - 245, 82, 263, 264, 265, 266, 267, 90, 91, 92, - 93, 128, 16, 41, 358, 497, 20, 638, 58, 15, - 24, 56, 283, 56, 86, 646, 90, 91, 92, 93, - 127, 381, 32, 397, 12, 35, 36, 37, 38, 13, - 301, 90, 91, 92, 93, 401, 396, 18, 25, 25, - 311, 76, 77, 78, 397, 316, 3, 4, 5, 6, - 7, 8, 9, 549, 25, 25, 416, 417, 550, 25, - 56, 76, 77, 78, 264, 265, 426, 267, 127, 95, - 430, 128, 432, 76, 128, 53, 432, 112, 113, 114, - 90, 91, 92, 93, 119, 356, 357, 122, 123, 124, - 125, 126, 22, 364, 454, 110, 111, 112, 113, 114, - 95, 128, 454, 358, 119, 532, 533, 122, 123, 124, - 125, 126, 539, 11, 385, 386, 119, 12, 16, 122, - 123, 124, 125, 126, 12, 396, 76, 25, 399, 400, - 490, 398, 492, 388, 127, 402, 12, 497, 405, 12, - 12, 16, 397, 90, 91, 92, 93, 574, 575, 576, - 127, 578, 127, 22, 128, 53, 128, 424, 127, 127, - 58, 53, 127, 590, 114, 11, 11, 86, 439, 119, - 597, 598, 122, 123, 124, 125, 126, 12, 127, 22, - 127, 15, 127, 454, 128, 551, 127, 76, 77, 549, - 550, 127, 22, 549, 621, 128, 562, 464, 84, 466, - 127, 127, 10, 22, 128, 565, 566, 634, 16, 22, - 477, 571, 20, 127, 485, 42, 24, 127, 645, 474, - 586, 127, 30, 589, 113, 114, 17, 587, 655, 83, - 119, 127, 13, 122, 123, 124, 125, 126, 572, 510, - 127, 399, 602, 603, 604, 76, 77, 78, 90, 91, - 92, 93, 90, 91, 92, 93, 114, 647, 618, 619, - 285, 492, 529, 276, 418, 580, 537, 538, 417, 505, - 630, 136, 626, -1, 424, 397, 642, -1, 638, 110, - 111, 112, 113, 114, 245, 127, 646, 647, 119, 127, - 650, 122, 123, 124, 125, 126, 90, 91, 92, 93, - -1, 572, 573, 21, -1, 23, -1, -1, 26, -1, - 28, 29, 567, 580, 90, 91, 92, 93, -1, -1, - -1, -1, 577, 41, -1, 596, 44, -1, -1, -1, - 48, -1, -1, 0, 1, -1, -1, 55, 56, 57, - 58, 59, -1, 10, 11, 616, 13, -1, -1, 16, - -1, 127, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, - 37, 38, -1, 40, -1, -1, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, - -1, -1, 79, 80, 81, -1, -1, -1, 136, -1, - 87, 90, 91, 92, 93, -1, -1, 94, 90, 91, - 92, 93, 90, 91, 92, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, - -1, 118, -1, 120, 121, -1, -1, -1, 127, -1, - -1, 128, -1, -1, -1, 127, -1, -1, 186, 127, - -1, -1, -1, -1, 192, -1, -1, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 0, 1, -1, 224, -1, -1, -1, - -1, -1, -1, 10, 11, -1, 13, -1, -1, 16, - -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, - 37, 38, -1, 40, -1, -1, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, - 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, - -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, - 87, -1, -1, -1, -1, -1, -1, 94, -1, -1, + 10, 17, 148, 27, 147, 27, 397, 11, 11, 19, + 13, 16, 547, 299, 18, 16, 20, 100, 22, 19, + 24, 25, 107, 12, 569, 29, 11, 173, 13, 30, + 34, 35, 11, 11, 13, 13, 22, 13, 13, 49, + 387, 85, 52, 49, 48, 49, 50, 51, 54, 18, + 397, 11, 52, 22, 102, 24, 25, 0, 10, 11, + 108, 13, 22, 11, 16, 34, 35, 31, 20, 93, + 56, 93, 24, 25, 22, 11, 15, 13, 42, 16, + 49, 13, 51, 20, 23, 129, 16, 24, 53, 10, + 20, 11, 9, 58, 24, 109, 110, 82, 19, 109, + 107, 108, 54, 82, 82, 640, 82, 82, 653, 93, + 94, 121, 136, 18, 136, 20, 129, 22, 119, 24, + 25, 14, 27, 15, 129, 114, 129, 79, 129, 34, + 35, 52, 14, 129, 22, 145, 146, 147, 148, 60, + 107, 488, 148, 16, 49, 11, 51, 20, 158, 159, + 154, 24, 295, 264, 265, 159, 267, 129, 158, 159, + 109, 167, 168, 173, 126, 127, 11, 173, 14, 86, + 255, 16, 11, 258, 13, 129, 11, 129, 13, 11, + 25, 32, 119, 53, 35, 36, 37, 38, 93, 53, + 159, 96, 129, 540, 541, 11, 14, 13, 91, 92, + 93, 94, 14, 91, 92, 93, 94, 129, 53, 91, + 92, 93, 94, 58, 129, 14, 137, 129, 234, 129, + 14, 245, 11, 245, 13, 235, 33, 34, 238, 576, + 151, 136, 91, 92, 93, 94, 157, 158, 159, 382, + 91, 92, 93, 94, 14, 91, 92, 93, 94, 11, + 22, 39, 599, 22, 159, 259, 22, 14, 82, 650, + 56, 182, 183, 184, 185, 82, 187, 188, 189, 555, + 85, 129, 619, 91, 92, 93, 94, 128, 128, 91, + 92, 93, 94, 22, 128, 295, 88, 433, 13, 22, + 53, 301, 91, 92, 93, 94, 302, 91, 92, 93, + 94, 301, 53, 574, 53, 226, 227, 228, 229, 230, + 231, 232, 233, 22, 82, 119, 91, 92, 93, 94, + 225, 91, 92, 93, 94, 242, 243, 244, 22, 246, + 247, 129, 249, 250, 605, 606, 607, 41, 58, 15, + 245, 56, 263, 264, 265, 266, 267, 11, 56, 86, + 621, 622, 16, 128, 128, 359, 12, 500, 91, 92, + 93, 94, 283, 22, 91, 92, 93, 94, 13, 22, + 641, 25, 382, 25, 398, 25, 398, 25, 649, 25, + 301, 129, 91, 92, 93, 94, 402, 397, 18, 53, + 311, 56, 53, 96, 58, 316, 22, 91, 92, 93, + 94, 128, 12, 129, 96, 129, 552, 417, 418, 32, + 553, 128, 35, 36, 37, 38, 12, 427, 12, 12, + 12, 431, 128, 433, 129, 16, 128, 433, 128, 128, + 128, 53, 91, 92, 93, 94, 357, 358, 91, 92, + 93, 94, 129, 22, 365, 11, 11, 457, 86, 12, + 128, 22, 535, 536, 359, 76, 15, 457, 128, 542, + 91, 92, 93, 94, 22, 386, 387, 129, 91, 92, + 93, 94, 91, 92, 93, 94, 397, 76, 77, 400, + 401, 128, 399, 493, 389, 495, 403, 128, 128, 406, + 500, 22, 129, 398, 577, 578, 579, 128, 581, 120, + 84, 128, 123, 124, 125, 126, 127, 22, 425, 128, + 593, 91, 92, 93, 94, 114, 115, 600, 601, 440, + 129, 120, 128, 42, 123, 124, 125, 126, 127, 91, + 92, 93, 94, 128, 17, 76, 457, 83, 554, 128, + 128, 624, 552, 553, 13, 128, 552, 114, 128, 565, + 467, 400, 469, 650, 637, 575, 285, 495, 568, 569, + 276, 418, 508, 480, 574, 648, 128, 488, 91, 92, + 93, 94, 477, 589, 115, 658, 592, 419, 425, 120, + 590, 583, 123, 124, 125, 126, 127, 91, 92, 93, + 94, 211, 513, 136, 245, 605, 606, 607, 76, 77, + 78, 398, -1, -1, -1, 128, -1, 10, -1, -1, + -1, 621, 622, 16, -1, 532, -1, 20, -1, 540, + 541, 24, -1, 633, 128, 629, -1, 30, -1, 645, + -1, 641, -1, 111, 112, 113, 114, 115, -1, 649, + 650, -1, 120, 653, -1, 123, 124, 125, 126, 127, + -1, -1, -1, -1, 575, 576, 21, -1, 23, -1, + -1, 26, -1, 28, 29, 570, 583, 3, 4, 5, + 6, 7, 8, 9, -1, 580, 41, -1, 599, 44, + -1, -1, -1, 48, -1, -1, 0, 1, -1, -1, + 55, 56, 57, 58, 59, -1, 10, 11, 619, 13, + -1, -1, 16, -1, -1, 19, 20, 21, 22, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, + -1, 35, 36, 37, 38, -1, 40, -1, -1, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, + 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, + 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, + -1, 136, -1, 87, -1, 76, 77, 78, -1, -1, + -1, 95, 123, 124, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1, 115, 116, - -1, 118, -1, 120, 121, -1, 10, 11, 12, 13, - -1, 128, 16, -1, -1, 19, 20, 21, 22, -1, + -1, -1, 116, 117, -1, 119, -1, 121, 122, -1, + 111, 112, 113, 114, 115, 129, -1, -1, -1, 120, + -1, 186, 123, 124, 125, 126, 127, 192, -1, -1, + -1, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, -1, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 0, 1, -1, 224, + -1, -1, -1, -1, -1, -1, 10, 11, -1, 13, + -1, -1, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, @@ -1102,59 +1099,71 @@ static const yytype_int16 yycheck[] = 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, - 94, -1, -1, -1, -1, -1, -1, -1, -1, 68, - -1, -1, -1, -1, -1, 443, -1, 76, 77, 78, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 89, -1, -1, -1, 128, -1, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, -1, -1, -1, -1, - 119, -1, 1, 122, 123, 124, 125, 126, -1, -1, - 498, 10, 11, 12, 13, -1, -1, 16, -1, -1, + -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 329, -1, -1, -1, -1, -1, + -1, -1, 116, 117, -1, 119, -1, 121, 122, 1, + 345, -1, -1, -1, -1, 129, -1, -1, 10, 11, + 12, 13, -1, -1, 16, -1, -1, 19, 20, 21, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, 35, 36, 37, 38, -1, 40, -1, + -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, 66, 67, -1, 69, 70, 71, + 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, + -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, + 445, -1, 76, 77, 78, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 116, 117, -1, 119, -1, 121, + 122, -1, -1, -1, -1, -1, -1, 129, -1, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, -1, -1, -1, -1, 120, -1, 1, 123, + 124, 125, 126, 127, -1, -1, 501, 10, 11, 12, + 13, -1, -1, 16, -1, -1, 19, 20, 21, 22, + -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, -1, 35, 36, 37, 38, -1, 40, -1, 534, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, + 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, + -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 116, 117, -1, 119, -1, 121, 122, + -1, 10, 11, 12, 13, -1, 129, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, - -1, 40, -1, 531, 43, 44, 45, 46, 47, 48, + -1, 40, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, -1, - -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, 115, 116, -1, 118, - -1, 120, 121, -1, 10, 11, 12, 13, -1, 128, - 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, - 36, 37, 38, -1, 40, -1, -1, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, 69, 70, 71, 72, 73, 74, 75, - -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, - -1, 87, -1, -1, -1, -1, -1, -1, 94, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1, 115, - 116, -1, 118, -1, 120, 121, -1, 10, 11, 12, - 13, -1, 128, 16, -1, -1, 19, 20, 21, 22, - -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, - -1, -1, 35, 36, 37, 38, -1, 40, -1, -1, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, - 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, - -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, - -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, 116, 117, -1, + 119, -1, 121, 122, -1, 10, 11, 12, 13, -1, + 129, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, + 35, 36, 37, 38, -1, 40, -1, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, 69, 70, 71, 72, 73, 74, + 75, -1, -1, -1, 79, 80, 81, -1, -1, -1, + -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, + 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 115, 116, -1, 118, -1, 120, 121, -1, - 10, 11, 12, 13, -1, 128, 16, -1, -1, 19, - 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, - 40, -1, -1, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, 69, - 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, - 80, 81, -1, -1, -1, -1, -1, 87, -1, -1, - -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, + 1, 116, 117, -1, 119, -1, 121, 122, -1, 10, + 11, 12, 13, -1, 129, 16, -1, -1, 19, 20, + 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, + -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, + 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, 87, -1, -1, -1, + -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, 115, 116, -1, 118, -1, - 120, 121, -1, 10, 11, 12, 13, -1, 128, 16, + -1, -1, -1, -1, 1, 116, 117, -1, 119, -1, + 121, 122, -1, 10, 11, 12, 13, -1, 129, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, -1, -1, 43, 44, 45, 46, @@ -1162,316 +1171,319 @@ static const yytype_int16 yycheck[] = 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, - 87, -1, -1, -1, -1, -1, -1, 94, -1, -1, + 87, -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1, 115, 116, - -1, 118, -1, 120, 121, -1, 10, 11, -1, 13, - -1, 128, 16, -1, -1, 19, 20, 21, 22, -1, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, 35, 36, 37, 38, -1, 40, -1, -1, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - 84, -1, -1, 87, -1, -1, -1, -1, -1, -1, - 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 116, + 117, -1, 119, -1, 121, 122, -1, 10, 11, -1, + 13, -1, 129, 16, -1, -1, 19, 20, 21, 22, + -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, -1, 35, 36, 37, 38, -1, 40, -1, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, + 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, + -1, 84, -1, -1, 87, -1, -1, -1, -1, -1, + -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 115, 116, -1, 118, -1, 120, 121, -1, 10, - 11, -1, 13, -1, 128, 16, -1, -1, 19, 20, - 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, - -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, - 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, - 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, - 81, -1, -1, -1, -1, -1, 87, -1, -1, -1, - -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 116, 117, -1, 119, -1, 121, 122, + -1, 10, 11, -1, 13, -1, 129, 16, -1, -1, + 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, + -1, 40, -1, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, + 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, -1, + -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, 115, 116, -1, 118, -1, 120, - 121, -1, 10, 11, -1, 13, -1, 128, 16, -1, - -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, - 38, -1, 40, -1, -1, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, -1, 67, - -1, 69, 70, 71, 72, 73, 74, 75, -1, -1, - -1, 79, 80, 81, -1, 1, -1, -1, -1, 87, - -1, -1, -1, -1, 10, -1, 94, 13, -1, -1, - 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, - -1, -1, -1, 29, 30, -1, -1, 115, 116, -1, - 118, -1, 120, 121, -1, -1, -1, -1, 44, 45, - 128, -1, -1, 49, 50, -1, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, -1, -1, 70, 71, 72, 73, 74, 75, - -1, -1, -1, 79, 80, 81, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, 94, 13, - -1, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, 115, - 116, -1, 118, -1, 120, 121, -1, -1, -1, -1, - 44, 45, 128, -1, -1, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, 11, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, 11, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, -1, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, -1, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, 11, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, -1, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, - 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, 127, 128, 49, 50, -1, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, 1, 116, 117, -1, + 119, -1, 121, 122, -1, 10, 11, -1, 13, -1, + 129, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, + 35, 36, 37, 38, -1, 40, -1, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + 65, -1, 67, -1, 69, 70, 71, 72, 73, 74, + 75, -1, -1, -1, 79, 80, 81, 1, -1, -1, + -1, -1, 87, -1, -1, -1, 10, -1, -1, 13, + 95, -1, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, -1, 128, 49, 50, -1, 52, 53, + -1, 116, 117, -1, 119, -1, 121, 122, -1, -1, + 44, 45, -1, -1, 129, 49, 50, -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, - 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, + 74, 75, -1, -1, -1, 79, 80, 81, 1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, 95, -1, 16, -1, -1, 19, 20, 21, -1, + -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, + -1, -1, 116, 117, -1, 119, -1, 121, 122, -1, + -1, 44, 45, -1, -1, 129, 49, 50, -1, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, -1, -1, 67, -1, -1, 70, 71, 72, + 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 10, 11, + -1, 13, 95, -1, 16, -1, -1, 19, 20, 21, + -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, + -1, -1, -1, 116, 117, -1, 119, -1, 121, 122, + -1, -1, 44, 45, -1, 128, 129, 49, 50, -1, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, -1, -1, 67, -1, -1, 70, 71, + 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + 11, -1, 13, 95, -1, 16, -1, -1, 19, 20, + 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, + -1, -1, -1, -1, 116, 117, -1, 119, -1, 121, + 122, -1, -1, 44, 45, -1, -1, 129, 49, 50, + -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, -1, -1, 67, -1, -1, 70, + 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, -1, -1, 13, 95, -1, 16, -1, -1, 19, + 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, + 30, -1, -1, -1, -1, 116, 117, -1, 119, -1, + 121, 122, -1, -1, 44, 45, -1, -1, 129, 49, + 50, -1, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, -1, -1, 67, -1, -1, + 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, -1, -1, 13, 95, -1, 16, -1, -1, + 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, + 29, 30, -1, -1, -1, -1, 116, 117, -1, 119, + -1, 121, 122, -1, -1, 44, 45, -1, 128, 129, + 49, 50, -1, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, -1, -1, 67, -1, + -1, 70, 71, 72, 73, 74, 75, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 10, -1, -1, 13, 95, -1, 16, -1, + -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, + -1, 29, 30, -1, -1, -1, -1, 116, 117, -1, + 119, -1, 121, 122, -1, -1, 44, 45, -1, 128, + 129, 49, 50, -1, 52, 53, 54, 55, 56, 57, + -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, + -1, -1, 70, 71, 72, 73, 74, 75, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 10, 11, -1, 13, 95, -1, 16, + -1, -1, 19, 20, 21, -1, -1, 24, 25, -1, + -1, -1, 29, 30, -1, -1, -1, -1, 116, 117, + -1, 119, -1, 121, 122, -1, -1, 44, 45, -1, + 128, 129, 49, 50, -1, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, -1, -1, 70, 71, 72, 73, 74, 75, -1, + -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 10, -1, -1, 13, 95, -1, + 16, -1, -1, 19, 20, 21, -1, -1, 24, 25, + -1, -1, -1, 29, 30, -1, -1, -1, -1, 116, + 117, -1, 119, -1, 121, 122, -1, -1, 44, 45, + -1, -1, 129, 49, 50, -1, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, + -1, 67, -1, -1, 70, 71, 72, 73, 74, 75, + -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 10, -1, -1, 13, 95, + -1, 16, -1, -1, 19, 20, 21, -1, -1, 24, + 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, + 116, 117, -1, 119, -1, 121, 122, -1, -1, 44, + 45, -1, 128, 129, 49, 50, -1, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + -1, -1, 67, -1, -1, 70, 71, 72, 73, 74, + 75, -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, - 94, -1, 16, -1, -1, 19, 20, 21, -1, -1, + 95, -1, 16, -1, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, - -1, 115, 116, -1, 118, -1, 120, 121, -1, -1, - 44, 45, -1, -1, 128, 49, 50, -1, 52, 53, + -1, 116, 117, -1, 119, -1, 121, 122, -1, -1, + 44, 45, -1, 128, 129, 49, 50, -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, -1, -1, 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, 95, -1, 16, -1, -1, 19, 20, 21, -1, + -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, + -1, -1, 116, 117, -1, 119, -1, 121, 122, -1, + -1, 44, 45, -1, 128, 129, 49, 50, -1, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, -1, -1, 67, -1, -1, 70, 71, 72, + 73, 74, 75, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, + -1, 13, 95, -1, 16, -1, -1, 19, 20, 21, + -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, + -1, -1, -1, 116, 117, -1, 119, -1, 121, 122, + -1, -1, 44, 45, -1, 128, 129, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, -1, -1, 70, 71, + 72, 73, 74, 75, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + -1, -1, 13, 95, -1, 16, -1, -1, 19, 20, + 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, + -1, -1, -1, -1, 116, 117, -1, 119, -1, 121, + 122, -1, -1, 44, 45, -1, -1, 129, 49, 50, + -1, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, -1, -1, 67, -1, -1, 70, + 71, 72, 73, 74, 75, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, -1, -1, 13, 95, -1, 16, -1, -1, 19, + 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, + 30, -1, -1, -1, -1, 116, 117, -1, 119, -1, + 121, 122, -1, -1, 44, 45, -1, -1, 129, 49, + 50, -1, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, -1, -1, 67, -1, -1, + 70, 71, 72, 73, 74, 75, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, + -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, + 76, 77, 78, -1, -1, -1, 116, 117, -1, 119, + -1, 121, 122, -1, 90, -1, -1, -1, -1, 129, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + -1, -1, -1, -1, 120, 68, -1, 123, 124, 125, + 126, 127, -1, 76, 77, 78, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + -1, -1, -1, 96, 97, 98, -1, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, -1, -1, -1, -1, 120, 68, -1, + 123, 124, 125, 126, 127, -1, 76, 77, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 94, -1, -1, -1, 68, -1, -1, -1, -1, -1, - -1, -1, 76, 77, 78, -1, -1, -1, -1, -1, - -1, 115, 116, -1, 118, 89, 120, 121, -1, -1, - -1, 95, 96, 97, 128, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, -1, -1, -1, -1, 119, 68, -1, 122, 123, - 124, 125, 126, -1, 76, 77, 78, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 89, -1, -1, - -1, -1, -1, 95, 96, 97, -1, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, -1, -1, -1, -1, 119, 68, -1, - 122, 123, 124, 125, 126, -1, 76, 77, 78, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, 97, -1, 99, + 90, -1, -1, -1, -1, -1, 96, 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, -1, -1, -1, -1, 119, - 68, -1, 122, 123, 124, 125, 126, -1, 76, 77, - 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, - -1, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, -1, -1, -1, - -1, 119, 68, -1, 122, 123, 124, 125, 126, -1, - 76, 77, 78, -1, -1, -1, -1, -1, -1, -1, + 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, + 120, 68, -1, 123, 124, 125, 126, 127, -1, 76, + 77, 78, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 96, + 97, 98, -1, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, -1, + -1, -1, -1, 120, 68, -1, 123, 124, 125, 126, + 127, -1, 76, 77, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 76, - 77, 78, -1, 119, -1, -1, 122, 123, 124, 125, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 76, 77, 78, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, -1, -1, - -1, -1, 119, -1, -1, 122, 123, 124, 125, 126, + -1, 76, 77, 78, 98, -1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 76, 77, 78, -1, 119, -1, -1, 122, 123, - 124, 125, 126, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 76, 77, 78, -1, -1, -1, -1, -1, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - -1, 76, 77, 78, 119, -1, -1, 122, 123, 124, - 125, 126, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 76, 77, 78, -1, 119, -1, -1, 122, 123, - 124, 125, 126, 108, 109, 110, 111, 112, 113, 114, - -1, -1, -1, -1, 119, -1, -1, 122, 123, 124, - 125, 126, -1, -1, -1, -1, 111, 112, 113, 114, - -1, -1, -1, -1, 119, -1, -1, 122, 123, 124, - 125, 126 + 114, 115, -1, -1, -1, -1, 120, 68, -1, 123, + 124, 125, 126, 127, -1, 76, 77, 78, 113, 114, + 115, -1, -1, -1, -1, 120, -1, -1, 123, 124, + 125, 126, 127, -1, -1, -1, -1, -1, -1, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 76, 77, 78, -1, 120, + -1, -1, 123, 124, 125, 126, 127, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 76, 77, 78, + -1, -1, -1, -1, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, -1, 76, 77, 78, 120, + -1, -1, 123, 124, 125, 126, 127, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 76, 77, 78, + -1, 120, -1, -1, 123, 124, 125, 126, 127, 109, + 110, 111, 112, 113, 114, 115, 76, 77, 78, -1, + 120, -1, -1, 123, 124, 125, 126, 127, 107, 108, + 109, 110, 111, 112, 113, 114, 115, -1, -1, -1, + -1, 120, -1, -1, 123, 124, 125, 126, 127, -1, + -1, -1, 112, 113, 114, 115, -1, -1, -1, -1, + 120, -1, -1, 123, 124, 125, 126, 127 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 4, 5, 6, 7, 8, 9, 130, 131, - 132, 133, 134, 135, 136, 137, 0, 142, 10, 13, + 0, 3, 4, 5, 6, 7, 8, 9, 131, 132, + 133, 134, 135, 136, 137, 138, 0, 143, 10, 13, 16, 19, 20, 21, 24, 25, 29, 30, 44, 45, 49, 50, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 67, 70, 71, 72, 73, 74, - 75, 79, 80, 81, 94, 115, 116, 118, 120, 121, - 128, 140, 202, 203, 204, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 218, 225, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 11, 139, 1, 22, + 75, 79, 80, 81, 95, 116, 117, 119, 121, 122, + 129, 141, 203, 204, 205, 208, 209, 210, 211, 212, + 214, 215, 216, 217, 218, 220, 227, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 11, 140, 1, 22, 26, 27, 28, 31, 32, 35, 36, 37, 38, 40, - 43, 46, 47, 48, 51, 65, 69, 87, 138, 139, - 152, 166, 202, 222, 66, 150, 151, 152, 140, 148, - 195, 196, 148, 53, 58, 139, 234, 242, 225, 242, - 216, 242, 216, 242, 242, 216, 118, 128, 219, 234, - 235, 236, 216, 139, 216, 178, 178, 179, 242, 242, - 217, 13, 128, 216, 178, 216, 128, 128, 85, 128, - 139, 216, 53, 140, 203, 224, 234, 242, 139, 242, - 225, 53, 58, 181, 203, 216, 216, 216, 216, 216, - 127, 202, 90, 91, 92, 93, 15, 11, 13, 128, - 108, 109, 108, 106, 107, 106, 68, 76, 77, 78, - 89, 95, 96, 97, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 119, 122, 123, 124, 125, 126, 128, 11, 13, 11, - 13, 11, 13, 11, 142, 180, 53, 53, 220, 234, - 235, 236, 128, 128, 30, 118, 128, 232, 234, 128, - 128, 11, 143, 143, 177, 181, 22, 177, 181, 39, - 140, 168, 22, 32, 35, 36, 37, 38, 22, 151, - 152, 150, 16, 20, 24, 140, 186, 187, 189, 190, - 191, 192, 14, 128, 216, 219, 234, 235, 236, 127, - 202, 82, 184, 56, 140, 182, 82, 140, 183, 183, - 224, 128, 85, 202, 127, 139, 127, 127, 202, 225, - 225, 242, 203, 203, 22, 224, 13, 127, 202, 202, - 202, 202, 216, 202, 202, 127, 202, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 10, 11, 13, 16, 20, - 24, 25, 54, 79, 128, 206, 234, 127, 202, 202, - 202, 202, 202, 202, 202, 202, 148, 53, 140, 176, - 53, 53, 82, 140, 221, 142, 142, 118, 142, 30, - 230, 231, 233, 234, 235, 236, 142, 142, 128, 142, - 142, 144, 41, 156, 177, 155, 177, 139, 165, 202, - 165, 165, 173, 202, 165, 58, 185, 185, 15, 127, - 202, 184, 127, 56, 183, 56, 142, 200, 200, 225, - 203, 14, 205, 127, 86, 127, 202, 12, 202, 13, - 22, 14, 127, 98, 25, 202, 202, 25, 25, 25, - 25, 25, 127, 202, 128, 127, 22, 14, 22, 14, - 22, 14, 22, 12, 18, 141, 11, 22, 183, 56, - 95, 174, 202, 174, 128, 227, 234, 128, 140, 166, - 171, 174, 175, 202, 230, 142, 173, 172, 202, 148, - 142, 53, 153, 22, 142, 197, 198, 154, 95, 140, - 188, 188, 190, 127, 198, 128, 140, 193, 194, 127, - 23, 140, 226, 224, 127, 14, 202, 12, 216, 22, - 14, 127, 225, 12, 12, 12, 12, 142, 142, 11, - 22, 223, 127, 127, 228, 229, 234, 128, 142, 127, - 22, 159, 174, 127, 127, 12, 128, 140, 145, 53, - 182, 11, 183, 216, 195, 11, 202, 86, 14, 12, - 127, 22, 161, 142, 216, 143, 143, 15, 127, 174, - 174, 143, 157, 128, 127, 170, 170, 146, 160, 224, - 183, 148, 22, 199, 200, 127, 201, 84, 148, 162, - 33, 34, 140, 167, 167, 234, 128, 127, 127, 168, - 172, 174, 143, 143, 143, 234, 143, 22, 197, 12, - 148, 140, 149, 12, 148, 143, 128, 174, 143, 143, - 22, 127, 168, 168, 168, 147, 42, 169, 12, 22, - 56, 163, 12, 174, 127, 168, 168, 158, 143, 127, - 139, 17, 83, 140, 164, 127, 143, 170, 168, 148, - 143, 168, 175, 84, 167, 127, 143 + 43, 46, 47, 48, 51, 65, 69, 87, 139, 140, + 153, 167, 203, 224, 66, 151, 152, 153, 141, 149, + 196, 197, 149, 53, 58, 140, 236, 244, 227, 244, + 218, 244, 218, 244, 244, 218, 119, 129, 221, 236, + 237, 238, 218, 140, 218, 179, 179, 180, 244, 244, + 219, 13, 129, 218, 179, 218, 129, 129, 85, 129, + 140, 218, 53, 141, 204, 226, 236, 244, 140, 244, + 227, 53, 58, 182, 204, 218, 218, 218, 218, 218, + 128, 203, 91, 92, 93, 94, 15, 11, 13, 129, + 109, 110, 109, 107, 108, 107, 68, 76, 77, 78, + 90, 96, 97, 98, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 120, 123, 124, 125, 126, 127, 129, 11, 13, 11, + 13, 11, 13, 11, 143, 181, 53, 53, 222, 236, + 237, 238, 129, 129, 30, 119, 129, 234, 236, 129, + 129, 11, 144, 144, 178, 182, 22, 178, 182, 39, + 141, 169, 22, 32, 35, 36, 37, 38, 22, 152, + 153, 151, 16, 20, 24, 141, 187, 188, 190, 191, + 192, 193, 14, 129, 218, 221, 236, 237, 238, 128, + 203, 82, 185, 56, 141, 183, 82, 141, 184, 184, + 226, 129, 85, 203, 128, 140, 128, 128, 203, 227, + 227, 244, 204, 204, 22, 226, 13, 128, 203, 203, + 203, 203, 218, 203, 203, 128, 203, 218, 88, 213, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 213, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 10, 11, 13, 16, + 20, 24, 25, 54, 79, 129, 207, 236, 128, 203, + 203, 203, 203, 203, 203, 203, 203, 149, 53, 141, + 177, 53, 53, 82, 141, 223, 143, 143, 119, 143, + 30, 232, 233, 235, 236, 237, 238, 143, 143, 129, + 143, 143, 145, 41, 157, 178, 156, 178, 140, 166, + 203, 166, 166, 174, 203, 166, 58, 186, 186, 15, + 128, 203, 185, 128, 56, 184, 56, 143, 201, 201, + 227, 204, 14, 206, 128, 86, 128, 203, 12, 203, + 13, 22, 14, 128, 218, 99, 218, 25, 203, 203, + 25, 25, 25, 25, 25, 128, 203, 129, 128, 22, + 14, 22, 14, 22, 14, 22, 12, 18, 142, 11, + 22, 184, 56, 96, 175, 203, 175, 129, 229, 236, + 129, 141, 167, 172, 175, 176, 203, 232, 143, 174, + 173, 203, 149, 143, 53, 154, 22, 143, 198, 199, + 155, 96, 141, 189, 189, 191, 128, 199, 129, 141, + 194, 195, 128, 23, 141, 228, 226, 128, 14, 203, + 12, 218, 22, 14, 128, 227, 12, 12, 12, 12, + 143, 143, 11, 22, 225, 128, 128, 230, 231, 236, + 129, 143, 128, 22, 160, 175, 128, 128, 12, 129, + 141, 146, 53, 183, 11, 184, 218, 196, 11, 203, + 86, 14, 12, 128, 22, 162, 143, 218, 144, 144, + 15, 128, 175, 175, 144, 158, 129, 128, 171, 171, + 147, 161, 226, 184, 149, 22, 200, 201, 128, 202, + 84, 149, 163, 33, 34, 141, 168, 168, 236, 129, + 128, 128, 169, 173, 175, 144, 144, 144, 236, 144, + 22, 198, 12, 149, 141, 150, 12, 149, 144, 129, + 175, 144, 144, 22, 128, 169, 169, 169, 148, 42, + 170, 12, 22, 56, 164, 12, 175, 128, 169, 169, + 159, 144, 128, 140, 17, 83, 141, 165, 128, 144, + 171, 169, 149, 144, 169, 176, 84, 168, 128, 144 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_uint8 yyr1[] = { - 0, 129, 131, 130, 132, 130, 133, 130, 134, 130, - 135, 130, 136, 130, 137, 130, 138, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 145, 148, 148, - 149, 149, 150, 150, 151, 151, 152, 152, 153, 152, - 154, 152, 155, 152, 152, 152, 156, 152, 152, 152, - 152, 152, 157, 158, 152, 152, 152, 152, 159, 152, - 152, 152, 160, 152, 152, 161, 152, 162, 152, 152, - 152, 152, 152, 152, 163, 164, 164, 165, 166, 166, - 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, - 169, 169, 170, 171, 171, 172, 172, 173, 174, 175, - 176, 176, 177, 178, 179, 180, 181, 181, 182, 182, - 183, 183, 183, 184, 184, 185, 185, 186, 186, 187, - 188, 188, 188, 189, 190, 190, 191, 191, 191, 192, - 192, 193, 193, 194, 196, 195, 197, 197, 198, 199, - 199, 201, 200, 202, 202, 202, 202, 202, 203, 203, - 203, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 205, 204, 206, 206, 207, 207, 207, 207, 207, - 207, 207, 207, 207, 207, 207, 207, 207, 207, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 209, 209, 209, 209, 209, 210, 210, 211, 211, - 211, 211, 212, 212, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 214, 214, 214, 214, 214, 215, 215, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 217, 216, - 216, 216, 216, 218, 218, 218, 218, 219, 219, 219, - 219, 219, 220, 220, 220, 221, 221, 221, 222, 223, - 222, 224, 224, 225, 225, 226, 226, 227, 228, 228, - 228, 229, 230, 230, 230, 231, 231, 232, 232, 233, - 234, 235, 236, 237, 237, 238, 239, 239, 240, 240, - 241, 241, 242, 242, 242, 242 + 0, 130, 132, 131, 133, 131, 134, 131, 135, 131, + 136, 131, 137, 131, 138, 131, 139, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 146, 149, 149, + 150, 150, 151, 151, 152, 152, 153, 153, 154, 153, + 155, 153, 156, 153, 153, 153, 157, 153, 153, 153, + 153, 153, 158, 159, 153, 153, 153, 153, 160, 153, + 153, 153, 161, 153, 153, 162, 153, 163, 153, 153, + 153, 153, 153, 153, 164, 165, 165, 166, 167, 167, + 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, + 170, 170, 171, 172, 172, 173, 173, 174, 175, 176, + 177, 177, 178, 179, 180, 181, 182, 182, 183, 183, + 184, 184, 184, 185, 185, 186, 186, 187, 187, 188, + 189, 189, 189, 190, 191, 191, 192, 192, 192, 193, + 193, 194, 194, 195, 197, 196, 198, 198, 199, 200, + 200, 202, 201, 203, 203, 203, 203, 203, 204, 204, + 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 206, 205, 207, 207, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 210, 210, 210, 210, 210, 211, 211, 212, 212, + 212, 212, 213, 213, 214, 214, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, + 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 219, 218, 218, 218, 218, 220, 220, 220, 220, 221, + 221, 221, 221, 221, 222, 222, 222, 223, 223, 223, + 224, 225, 224, 226, 226, 227, 227, 228, 228, 229, + 230, 230, 230, 231, 232, 232, 232, 233, 233, 234, + 234, 235, 236, 237, 238, 239, 239, 240, 241, 241, + 242, 242, 243, 243, 244, 244, 244, 244 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1498,23 +1510,23 @@ static const yytype_int8 yyr2[] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 2, 3, 3, 3, 1, 3, - 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 4, 5, 4, 4, 2, 2, - 1, 1, 1, 1, 5, 2, 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, 3, 2, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 3, 0, - 6, 1, 1, 1, 1, 1, 2, 1, 2, 3, - 1, 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, 0, 1, 4, 4, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 4, 5, 4, 4, + 2, 2, 1, 1, 1, 1, 5, 2, 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, 3, + 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 3, 0, 6, 1, 1, 1, 1, 1, 2, 1, + 2, 3, 1, 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 { - toketype_ival, toketype_opval, toketype_pval + toketype_ival, toketype_opval, toketype_pval, toketype_svval } toketypes; /* type of each token/terminal */ @@ -1537,20 +1549,21 @@ static const toketypes yy_type_tab[] = toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_svval, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, - toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_ival, 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_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_opval, toketype_ival, + toketype_opval, toketype_ival, toketype_opval, toketype_ival, 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_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, @@ -1559,15 +1572,16 @@ static const toketypes yy_type_tab[] = toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, 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_pval, - toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_svval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_pval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval + toketype_opval, toketype_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 }; /* Generated from: - * cdef9ff44874bfb2f6175adcd920473f8c6601794f20f7977a13e1c2e2be5e26 perly.y - * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl + * 16cad63d58556f25bdc7bd9e2f74b72688d69b25b2c13f81b0d707deb4473909 perly.y + * 6353b7a4fdf3e67f2196c3ed55c684ba252625686c4f21c9ff7e67a312925e3b regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.y b/perly.y index 79622f1ca377..a94ece8528cd 100644 --- a/perly.y +++ b/perly.y @@ -41,6 +41,7 @@ void *pval; OP *opval; GV *gvval; + SV *svval; } %token GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ GRAMSUBSIGNATURE @@ -91,6 +92,7 @@ %token COLONATTR FORMLBRACK FORMRBRACK %token SUBLEXSTART SUBLEXEND %token PHASER +%token OPFLAGS %type grammar remember mremember %type startsub startanonsub startanonmethod startformsub @@ -112,6 +114,7 @@ %type fieldvar /* pval is PADNAME */ %type optfieldattrlist fielddecl %type termbinop termunop anonymous termdo +%type optopflags %type termrelop relopchain termeqop eqopchain %type sigslurpsigil %type sigvarname sigdefault sigscalarelem sigslurpelem @@ -1281,10 +1284,25 @@ termeqop: eqopchain %prec PREC_LOW { yyerror("syntax error"); YYERROR; } ; -eqopchain: term[lhs] CHEQOP term[rhs] - { $$ = cmpchain_start($CHEQOP, $lhs, $rhs); } - | eqopchain[lhs] CHEQOP term[rhs] - { $$ = cmpchain_extend($CHEQOP, $lhs, $rhs); } +optopflags: %empty + { $$ = NULL; } + | OPFLAGS + ; + +eqopchain: term[lhs] CHEQOP optopflags term[rhs] + { U32 opcode = $CHEQOP; + if($optopflags) { + SAVEFREESV($optopflags); + opcode = apply_opflags(opcode, SvPV_nolen($optopflags)); + } + $$ = cmpchain_start(opcode, $lhs, $rhs); } + | eqopchain[lhs] CHEQOP optopflags term[rhs] + { U32 opcode = $CHEQOP; + if($optopflags) { + SAVEFREESV($optopflags); + opcode = apply_opflags(opcode, SvPV_nolen($optopflags)); + } + $$ = cmpchain_extend(opcode, $lhs, $rhs); } ; /* Unary operators and terms */ diff --git a/pod/perldiag.pod b/pod/perldiag.pod index e3746d9f52be..7bd252443bad 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -7319,6 +7319,15 @@ whereabouts in the regular expression the escape was discovered. (F) You attempted to add a named attribute to a C definition, but perl does not recognise the name of the requested attribute. +=item Unrecognized flag '%c' for %s + +(F) You attempted to use an operator flag on an operator (by using the +C notation), but the particular operator does not recognise that +particular flag. + +If this is unexpected, it could be a stray colon confusing the parser into +thinking that the following bareword is a set of operator flags. + =item Unrecognised parameters for "%s" constructor: %s (F) You called new on a class but supplied a parameter name that diff --git a/proto.h b/proto.h index 3b125616efa0..eb45afd4db9d 100644 --- a/proto.h +++ b/proto.h @@ -210,6 +210,10 @@ Perl_apply_builtin_cv_attributes(pTHX_ CV *cv, OP *attrlist); #define PERL_ARGS_ASSERT_APPLY_BUILTIN_CV_ATTRIBUTES \ assert(cv); assert(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM) +PERL_CALLCONV U32 +Perl_apply_opflags(pTHX_ U32 optype, char *flagstr); +#define PERL_ARGS_ASSERT_APPLY_OPFLAGS + PERL_CALLCONV void Perl_atfork_lock(void); #define PERL_ARGS_ASSERT_ATFORK_LOCK diff --git a/t/op/equ.t b/t/op/equ.t index cdf46d4eb180..aa7687ccea4c 100644 --- a/t/op/equ.t +++ b/t/op/equ.t @@ -9,6 +9,8 @@ BEGIN { set_up_inc('../lib'); } +### PPC0030-style `equ` operator + # equ behaves like eq on defined strings ok("abc" equ "abc", 'equ on identical values'); ok("" equ "", 'equ on empty/empty'); @@ -33,4 +35,30 @@ ok(not("abc" equ "def"), 'equ on different values'); ok($1 equ "abc", 'equ performs GETMAGIC'); } +### PPC0031-style `eq:u` flag on operator + +# eq:u behaves like eq on defined strings +ok("abc" eq:u "abc", 'eq:u on identical values'); +ok("" eq:u "", 'eq:u on empty/empty'); +ok(not("abc" eq:u "def"), 'eq:u on different values'); + +# eq:u treats undef as distinct, equal to itself, with no warnings +{ + my $warnings = 0; + local $SIG{__WARN__} = sub { $warnings++; }; + + ok(undef eq:u undef, 'eq:u on undef/undef'); + ok(not(undef eq:u ""), 'eq:u on undef/empty'); + + is($warnings, 0, 'no warnings were produced by use of undef'); +} + +# performs GETMAGIC +{ + "abc" =~ m/(\d+)/; + # $1 should now be undef + "abc" =~ m/(\w+)/; + ok($1 eq:u "abc", 'eq:u performs GETMAGIC'); +} + done_testing(); diff --git a/toke.c b/toke.c index 5995c2c928b3..9637013f8dd7 100644 --- a/toke.c +++ b/toke.c @@ -256,7 +256,7 @@ static const char* const lex_state_names[] = { #define Aop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)ADDOP)) #define AopNOASSIGN(f) return (pl_yylval.ival=f, PL_bufptr=s, REPORT((int)ADDOP)) #define Mop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)MULOP)) -#define ChEop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)CHEQOP)) +#define ChEop(f) return (pl_yylval.ival=f, PL_expect=XOPFLAGSTERM, PL_bufptr=s, REPORT((int)CHEQOP)) #define NCEop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)NCEQOP)) #define ChRop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)CHRELOP)) #define NCRop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)NCRELOP)) @@ -5164,7 +5164,7 @@ S_tokenize_use(pTHX_ int is_use, char *s) { static const char* const exp_name[] = { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK", "ATTRTERM", "TERMBLOCK", "XBLOCKTERM", "POSTDEREF", - "SIGVAR", "TERMORDORDOR" + "SIGVAR", "TERMORDORDOR", "XOPFLAGSTERM" }; #endif @@ -6225,6 +6225,26 @@ yyl_colon(pTHX_ char *s) force_next(THING); } TOKEN(COLONATTR); + + case XOPFLAGSTERM: + { + s = skipspace(s); + + /* We don't know what the operator is to which these flags are + * being applied. We'll just accept any sequence of lower- or + * upper-case letters and let apply_opflags() complain if any are + * bad. + */ + char *flags = s; + while (isALPHA(*s)) + s++; + + SV *flagsbuf = newSV_type(SVt_PV); + sv_setpvn_fresh(flagsbuf, flags, s - flags); + + pl_yylval.svval = flagsbuf; + OPERATOR(OPFLAGS); + } } if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) { @@ -6302,6 +6322,7 @@ yyl_leftcurly(pTHX_ char *s, const U8 formbrack) switch (PL_expect) { case XTERM: case XTERMORDORDOR: + case XOPFLAGSTERM: PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR; PL_lex_allbrackets++; OPERATOR(HASHBRACK); @@ -9507,7 +9528,8 @@ yyl_try(pTHX_ char *s) /* avoid v123abc() or $h{v1}, allow C */ if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF || PL_expect == XSTATE - || PL_expect == XTERMORDORDOR)) { + || PL_expect == XTERMORDORDOR + || PL_expect == XOPFLAGSTERM)) { GV *const gv = gv_fetchpvn_flags(s, start - s, UTF ? SVf_UTF8 : 0, SVt_PVCV); if (!gv) { From f27b2506ab529531e06a24da1667c989867686b0 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Mon, 27 Jan 2025 16:53:33 +0000 Subject: [PATCH 4/6] Additionally implement a numerical version, `==:u` --- lib/B/Op_private.pm | 5 +++-- opcode.h | 8 ++++---- pp_hot.c | 9 +++++++++ regen/op_private | 4 ++-- t/op/equ.t | 18 ++++++++++++++++++ 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index 16e7d01be594..d7f101a56f20 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -123,6 +123,7 @@ our $VERSION = "5.041009"; $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv); $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv); $bits{$_}{2} = 'OPpENTERSUB_HASTARG' for qw(ceil entersub floor goto refaddr reftype rv2cv); +$bits{$_}{7} = 'OPpEQ_UNDEF' for qw(eq seq); $bits{$_}{6} = 'OPpFLIP_LINENUM' for qw(flip flop); $bits{$_}{1} = 'OPpFT_ACCESS' for qw(fteexec fteread ftewrite ftrexec ftrread ftrwrite); $bits{$_}{4} = 'OPpFT_AFTER_t' for qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero); @@ -550,7 +551,7 @@ $bits{scomplement}{0} = $bf[0]; @{$bits{semget}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{semop}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{send}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); -@{$bits{seq}}{7,1,0} = ('OPpEQ_UNDEF', $bf[1], $bf[1]); +@{$bits{seq}}{1,0} = ($bf[1], $bf[1]); @{$bits{setpgrp}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{setpriority}}{3,2,1,0} = ($bf[5], $bf[5], $bf[5], $bf[5]); @{$bits{sge}}{1,0} = ($bf[1], $bf[1]); @@ -890,7 +891,7 @@ our %ops_using = ( OPpENTERSUB_HASTARG => [qw(ceil entersub floor goto refaddr reftype rv2cv)], OPpENTERSUB_INARGS => [qw(entersub)], OPpENTERSUB_NOPAREN => [qw(rv2cv)], - OPpEQ_UNDEF => [qw(seq)], + OPpEQ_UNDEF => [qw(eq seq)], OPpEVAL_BYTES => [qw(entereval)], OPpEXISTS_SUB => [qw(exists)], OPpFLIP_LINENUM => [qw(flip flop)], diff --git a/opcode.h b/opcode.h index 0e51378f48f7..ac7d9641deb8 100644 --- a/opcode.h +++ b/opcode.h @@ -2650,7 +2650,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 13, /* i_le */ 13, /* ge */ 13, /* i_ge */ - 13, /* eq */ + 105, /* eq */ 13, /* i_eq */ 13, /* ne */ 13, /* i_ne */ @@ -3013,7 +3013,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x077e, 0x0554, 0x1b70, 0x542c, 0x4fc8, 0x4225, /* const */ 0x3cfc, 0x47f9, /* gvsv */ 0x19d5, /* gv */ - 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, sne, scmp, lslice, xor, isa */ + 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, sne, scmp, lslice, xor, isa */ 0x3cfc, 0x5378, 0x04f7, /* padsv */ 0x3cfc, 0x5378, 0x0003, /* padsv_store, lvavref */ 0x3cfc, 0x5378, 0x06d4, 0x3dec, 0x5149, /* padav */ @@ -3038,7 +3038,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x3cfc, 0x0338, 0x1e34, 0x57d0, 0x550c, 0x0003, /* multiconcat */ 0x57d0, 0x02af, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */ 0x57d0, 0x5b69, /* left_shift, right_shift, nbit_and, nbit_xor, nbit_or, ncomplement */ - 0x5a3c, 0x0067, /* seq */ + 0x5a3c, 0x0067, /* eq, seq */ 0x5b69, /* bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, complement */ 0x06d4, 0x57d0, 0x0003, /* length */ 0x4d30, 0x3dec, 0x024b, /* substr */ @@ -3179,7 +3179,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* I_LE */ (OPpARG2_MASK), /* GE */ (OPpARG2_MASK), /* I_GE */ (OPpARG2_MASK), - /* EQ */ (OPpARG2_MASK), + /* EQ */ (OPpARG2_MASK|OPpEQ_UNDEF), /* I_EQ */ (OPpARG2_MASK), /* NE */ (OPpARG2_MASK), /* I_NE */ (OPpARG2_MASK), diff --git a/pp_hot.c b/pp_hot.c index 2f17ad7df292..ba21a6cc5c66 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -1681,6 +1681,15 @@ PP(pp_eq) SV *right = PL_stack_sp[0]; SV *left = PL_stack_sp[-1]; + if(UNLIKELY(PL_op->op_private & OPpEQ_UNDEF)) { + bool lundef = !SvOK(left), rundef = !SvOK(right); + + if(lundef || rundef) { + rpp_replace_2_IMM_NN(boolSV(lundef && rundef)); + return NORMAL; + } + } + U32 flags_and = SvFLAGS(left) & SvFLAGS(right); U32 flags_or = SvFLAGS(left) | SvFLAGS(right); diff --git a/regen/op_private b/regen/op_private index 39797a65beea..086fbe783198 100644 --- a/regen/op_private +++ b/regen/op_private @@ -920,9 +920,9 @@ addbits('emptyavhv', # 4 OPpTARGET_MY ); -addbits('seq', +addbits($_, 7 => qw(OPpEQ_UNDEF UNDEF), -); +) for qw( eq seq ); addbits('argdefelem', 7 => qw(OPpARG_IF_UNDEF IF_UNDEF), diff --git a/t/op/equ.t b/t/op/equ.t index aa7687ccea4c..c5b61f750b6c 100644 --- a/t/op/equ.t +++ b/t/op/equ.t @@ -10,6 +10,8 @@ BEGIN { } ### PPC0030-style `equ` operator +# does not test the numerical version because there are still discussions +# about its spelling; `===` is considered problematic. # equ behaves like eq on defined strings ok("abc" equ "abc", 'equ on identical values'); @@ -42,6 +44,11 @@ ok("abc" eq:u "abc", 'eq:u on identical values'); ok("" eq:u "", 'eq:u on empty/empty'); ok(not("abc" eq:u "def"), 'eq:u on different values'); +# ==:u behaves like == on defined numbers +ok(123 ==:u 123, '==:u on identical values'); +ok(0 ==:u 0, '==:u on zero/zero'); +ok(not(123 ==:u 456), '==:u on different values'); + # eq:u treats undef as distinct, equal to itself, with no warnings { my $warnings = 0; @@ -53,6 +60,17 @@ ok(not("abc" eq:u "def"), 'eq:u on different values'); is($warnings, 0, 'no warnings were produced by use of undef'); } +# ==:u treats undef as distinct, equal to itself, with no warnings +{ + my $warnings = 0; + local $SIG{__WARN__} = sub { $warnings++; }; + + ok(undef ==:u undef, 'eq:u on undef/undef'); + ok(not(undef ==:u 0), 'eq:u on undef/zero'); + + is($warnings, 0, 'no warnings were produced by use of undef'); +} + # performs GETMAGIC { "abc" =~ m/(\d+)/; From 8c46e3e924fe0da5c29e2058e2e1c093dc7ffbe9 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Mon, 27 Jan 2025 17:01:06 +0000 Subject: [PATCH 5/6] Also implement the negated versions of the flagged operators; ne:u and !=:u --- lib/B/Op_private.pm | 4 ++-- op.c | 6 ++++-- opcode.h | 12 ++++++------ pp.c | 18 ++++++++++++++++++ regen/op_private | 2 +- t/op/equ.t | 10 ++++++++++ 6 files changed, 41 insertions(+), 11 deletions(-) diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index d7f101a56f20..51f7e8cdeb31 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -123,7 +123,7 @@ our $VERSION = "5.041009"; $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv); $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv); $bits{$_}{2} = 'OPpENTERSUB_HASTARG' for qw(ceil entersub floor goto refaddr reftype rv2cv); -$bits{$_}{7} = 'OPpEQ_UNDEF' for qw(eq seq); +$bits{$_}{7} = 'OPpEQ_UNDEF' for qw(eq ne seq sne); $bits{$_}{6} = 'OPpFLIP_LINENUM' for qw(flip flop); $bits{$_}{1} = 'OPpFT_ACCESS' for qw(fteexec fteread ftewrite ftrexec ftrread ftrwrite); $bits{$_}{4} = 'OPpFT_AFTER_t' for qw(ftatime ftbinary ftblk ftchr ftctime ftdir fteexec fteowned fteread ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned ftrread ftrwrite ftsgid ftsize ftsock ftsuid ftsvtx fttext fttty ftzero); @@ -891,7 +891,7 @@ our %ops_using = ( OPpENTERSUB_HASTARG => [qw(ceil entersub floor goto refaddr reftype rv2cv)], OPpENTERSUB_INARGS => [qw(entersub)], OPpENTERSUB_NOPAREN => [qw(rv2cv)], - OPpEQ_UNDEF => [qw(eq seq)], + OPpEQ_UNDEF => [qw(eq ne seq sne)], OPpEVAL_BYTES => [qw(entereval)], OPpEXISTS_SUB => [qw(exists)], OPpFLIP_LINENUM => [qw(flip flop)], diff --git a/op.c b/op.c index 1549303c5252..1e05a0050585 100644 --- a/op.c +++ b/op.c @@ -16200,8 +16200,10 @@ Perl_apply_opflags(pTHX_ U32 opcode, char *flagstr) for(char flag; (flag = *flagstr); flagstr++) { switch(opcode_base) { - case OP_SEQ: - case OP_EQ: + case OP_SEQ: /* eq */ + case OP_SNE: /* ne */ + case OP_EQ: /* == */ + case OP_NE: /* != */ switch(flag) { case 'u': priv |= OPpEQ_UNDEF; diff --git a/opcode.h b/opcode.h index ac7d9641deb8..3d824da9a47e 100644 --- a/opcode.h +++ b/opcode.h @@ -2652,7 +2652,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 13, /* i_ge */ 105, /* eq */ 13, /* i_eq */ - 13, /* ne */ + 105, /* ne */ 13, /* i_ne */ 13, /* ncmp */ 13, /* i_ncmp */ @@ -2661,7 +2661,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 13, /* sle */ 13, /* sge */ 105, /* seq */ - 13, /* sne */ + 105, /* sne */ 13, /* scmp */ 107, /* bit_and */ 107, /* bit_xor */ @@ -3013,7 +3013,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x077e, 0x0554, 0x1b70, 0x542c, 0x4fc8, 0x4225, /* const */ 0x3cfc, 0x47f9, /* gvsv */ 0x19d5, /* gv */ - 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, sne, scmp, lslice, xor, isa */ + 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, i_eq, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, scmp, lslice, xor, isa */ 0x3cfc, 0x5378, 0x04f7, /* padsv */ 0x3cfc, 0x5378, 0x0003, /* padsv_store, lvavref */ 0x3cfc, 0x5378, 0x06d4, 0x3dec, 0x5149, /* padav */ @@ -3038,7 +3038,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { 0x3cfc, 0x0338, 0x1e34, 0x57d0, 0x550c, 0x0003, /* multiconcat */ 0x57d0, 0x02af, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */ 0x57d0, 0x5b69, /* left_shift, right_shift, nbit_and, nbit_xor, nbit_or, ncomplement */ - 0x5a3c, 0x0067, /* eq, seq */ + 0x5a3c, 0x0067, /* eq, ne, seq, sne */ 0x5b69, /* bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, complement */ 0x06d4, 0x57d0, 0x0003, /* length */ 0x4d30, 0x3dec, 0x024b, /* substr */ @@ -3181,7 +3181,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* I_GE */ (OPpARG2_MASK), /* EQ */ (OPpARG2_MASK|OPpEQ_UNDEF), /* I_EQ */ (OPpARG2_MASK), - /* NE */ (OPpARG2_MASK), + /* NE */ (OPpARG2_MASK|OPpEQ_UNDEF), /* I_NE */ (OPpARG2_MASK), /* NCMP */ (OPpARG2_MASK), /* I_NCMP */ (OPpARG2_MASK), @@ -3190,7 +3190,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* SLE */ (OPpARG2_MASK), /* SGE */ (OPpARG2_MASK), /* SEQ */ (OPpARG2_MASK|OPpEQ_UNDEF), - /* SNE */ (OPpARG2_MASK), + /* SNE */ (OPpARG2_MASK|OPpEQ_UNDEF), /* SCMP */ (OPpARG2_MASK), /* BIT_AND */ (OPpUSEINT), /* BIT_XOR */ (OPpUSEINT), diff --git a/pp.c b/pp.c index 99e1857b9247..90a6796e96a0 100644 --- a/pp.c +++ b/pp.c @@ -2290,6 +2290,15 @@ PP(pp_ne) SV *right = PL_stack_sp[0]; SV *left = PL_stack_sp[-1]; + if(UNLIKELY(PL_op->op_private & OPpEQ_UNDEF)) { + bool lundef = !SvOK(left), rundef = !SvOK(right); + + if(lundef || rundef) { + rpp_replace_2_IMM_NN(boolSV(!(lundef && rundef))); + return NORMAL; + } + } + U32 flags_and = SvFLAGS(left) & SvFLAGS(right); U32 flags_or = SvFLAGS(left) | SvFLAGS(right); @@ -2473,6 +2482,15 @@ PP(pp_sne) SV *right = PL_stack_sp[0]; SV *left = PL_stack_sp[-1]; + if(UNLIKELY(PL_op->op_private & OPpEQ_UNDEF)) { + bool lundef = !SvOK(left), rundef = !SvOK(right); + + if(lundef || rundef) { + rpp_replace_2_IMM_NN(boolSV(!(lundef && rundef))); + return NORMAL; + } + } + rpp_replace_2_IMM_NN(boolSV(!sv_eq_flags(left, right, 0))); return NORMAL; } diff --git a/regen/op_private b/regen/op_private index 086fbe783198..ca145d3e9891 100644 --- a/regen/op_private +++ b/regen/op_private @@ -922,7 +922,7 @@ addbits('emptyavhv', addbits($_, 7 => qw(OPpEQ_UNDEF UNDEF), -) for qw( eq seq ); +) for qw( eq ne seq sne ); addbits('argdefelem', 7 => qw(OPpARG_IF_UNDEF IF_UNDEF), diff --git a/t/op/equ.t b/t/op/equ.t index c5b61f750b6c..eb7f1145d44c 100644 --- a/t/op/equ.t +++ b/t/op/equ.t @@ -60,6 +60,11 @@ ok(not(123 ==:u 456), '==:u on different values'); is($warnings, 0, 'no warnings were produced by use of undef'); } +foreach (["abc", "abc"], ["abc", "def"], ["", undef], [undef, undef]) { + my ($left, $right) = @$_; + is(not($left ne:u $right), ($left eq:u $right), 'ne:u is a synonym for not(eq:u)'); +} + # ==:u treats undef as distinct, equal to itself, with no warnings { my $warnings = 0; @@ -71,6 +76,11 @@ ok(not(123 ==:u 456), '==:u on different values'); is($warnings, 0, 'no warnings were produced by use of undef'); } +foreach ([123, 123], [123, 456], [0, undef], [undef, undef]) { + my ($left, $right) = @$_; + is(not($left !=:u $right), ($left ==:u $right), '!=:u is a synonym for not(==:u)'); +} + # performs GETMAGIC { "abc" =~ m/(\d+)/; From f2536d21c4bae71e1e1ff689e881d91f0707770a Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Thu, 30 Jan 2025 00:59:41 +0000 Subject: [PATCH 6/6] Support new token type in perly.c's clear_yystack() and debug dumper --- perly.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/perly.c b/perly.c index fb4abdfcc129..f29de5789fc2 100644 --- a/perly.c +++ b/perly.c @@ -166,6 +166,9 @@ yy_stack_print (pTHX_ const yy_parser *parser) case toketype_ival: PerlIO_printf(Perl_debug_log, " %8" IVdf, (IV)ps->val.ival); break; + case toketype_svval: + PerlIO_printf(Perl_debug_log, " 0x%" UVxf, PTR2UV(ps->val.svval)); + break; default: PerlIO_printf(Perl_debug_log, " %8" UVxf, (UV)ps->val.ival); } @@ -239,8 +242,8 @@ S_clear_yystack(pTHX_ const yy_parser *parser) while (ps > parser->stack) { LEAVE_SCOPE(ps->savestack_ix); - if (yy_type_tab[yystos[ps->state]] == toketype_opval - && ps->val.opval) + toketypes toketype = yy_type_tab[yystos[ps->state]]; + if (toketype == toketype_opval && ps->val.opval) { if (ps->compcv && (ps->compcv != PL_compcv)) { PL_compcv = ps->compcv; @@ -250,6 +253,10 @@ S_clear_yystack(pTHX_ const yy_parser *parser) YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); op_free(ps->val.opval); } + else if (toketype == toketype_svval && ps->val.svval) { + YYDPRINTF ((Perl_debug_log, "(freeing SV)\n")); + SvREFCNT_dec(ps->val.svval); + } SvREFCNT_dec(ps->compcv); ps--; }