diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1999-09-04 20:21:59 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-09-04 20:21:59 +0000 |
commit | 0bf7eb25e9e238046abce47d15e2fa3d10558a02 (patch) | |
tree | daf6dde98d1621b8ad3013e4b7b1f4b82fb8f438 | |
parent | 0295179fdf8aa1b8c029859896e7340a11a3de74 (diff) | |
parent | d3a6a6fe5a9e3ef67f27330d1df0f6940f52d6a2 (diff) | |
download | perl-0bf7eb25e9e238046abce47d15e2fa3d10558a02.tar.gz |
integrate cfgperl contents into mainline
p4raw-id: //depot/perl@4076
-rwxr-xr-x | Configure | 54 | ||||
-rw-r--r-- | MANIFEST | 68 | ||||
-rw-r--r-- | Makefile.SH | 13 | ||||
-rw-r--r-- | README.epoc | 109 | ||||
-rw-r--r-- | cygwin/Makefile.SHs | 1 | ||||
-rw-r--r-- | doop.c | 99 | ||||
-rw-r--r-- | dump.c | 5 | ||||
-rw-r--r-- | embed.h | 44 | ||||
-rwxr-xr-x | embed.pl | 14 | ||||
-rw-r--r-- | epoc/config.h | 28 | ||||
-rw-r--r-- | epoc/epoc.c | 83 | ||||
-rw-r--r-- | epoc/epocish.h | 14 | ||||
-rw-r--r-- | epoc/perl.mmp | 9 | ||||
-rw-r--r-- | epoc/perl.pkg | 146 | ||||
-rw-r--r-- | ext/ByteLoader/byterun.h | 7 | ||||
-rw-r--r-- | ext/SDBM_File/sdbm/sdbm.c | 2 | ||||
-rw-r--r-- | ext/Socket/Makefile.PL | 8 | ||||
-rw-r--r-- | global.sym | 5 | ||||
-rw-r--r-- | gv.c | 10 | ||||
-rw-r--r-- | hints/cygwin.sh | 1 | ||||
-rw-r--r-- | hints/machten.sh | 15 | ||||
-rw-r--r-- | lib/AutoSplit.pm | 14 | ||||
-rw-r--r-- | lib/ExtUtils/Install.pm | 2 | ||||
-rw-r--r-- | lib/SelfLoader.pm | 10 | ||||
-rw-r--r-- | lib/attributes.pm | 379 | ||||
-rw-r--r-- | lib/charnames.pm | 16 | ||||
-rw-r--r-- | lib/perl5db.pl | 4 | ||||
-rw-r--r-- | lib/unicode/Eq/Latin1 | 6 | ||||
-rw-r--r-- | lib/unicode/Eq/Unicode | 760 | ||||
-rwxr-xr-x | lib/unicode/mktables.PL | 14 | ||||
-rw-r--r-- | lib/utf8.pm | 5 | ||||
-rw-r--r-- | lib/warnings.pm (renamed from lib/warning.pm) | 38 | ||||
-rw-r--r-- | mg.c | 80 | ||||
-rw-r--r-- | objXSUB.h | 22 | ||||
-rw-r--r-- | op.c | 191 | ||||
-rw-r--r-- | op.h | 3 | ||||
-rw-r--r-- | perl.c | 1 | ||||
-rw-r--r-- | perl.h | 75 | ||||
-rw-r--r-- | perlapi.c | 37 | ||||
-rw-r--r-- | perlio.c | 8 | ||||
-rw-r--r-- | perly.c | 2821 | ||||
-rwxr-xr-x | perly.fixer | 23 | ||||
-rw-r--r-- | perly.h | 40 | ||||
-rw-r--r-- | perly.y | 98 | ||||
-rw-r--r-- | perly_c.diff | 475 | ||||
-rw-r--r-- | pod/perldelta.pod | 157 | ||||
-rw-r--r-- | pod/perldiag.pod | 102 | ||||
-rw-r--r-- | pod/perlfunc.pod | 29 | ||||
-rw-r--r-- | pod/perlhist.pod | 4 | ||||
-rw-r--r-- | pod/perllexwarn.pod | 59 | ||||
-rw-r--r-- | pod/perlmodlib.pod | 14 | ||||
-rw-r--r-- | pod/perlop.pod | 12 | ||||
-rw-r--r-- | pod/perlre.pod | 6 | ||||
-rw-r--r-- | pod/perlrun.pod | 2 | ||||
-rw-r--r-- | pod/perlsub.pod | 77 | ||||
-rw-r--r-- | pod/perltoc.pod | 4 | ||||
-rw-r--r-- | pod/perlvar.pod | 16 | ||||
-rw-r--r-- | pp.c | 120 | ||||
-rw-r--r-- | pp.h | 8 | ||||
-rw-r--r-- | pp_sys.c | 16 | ||||
-rw-r--r-- | proto.h | 13 | ||||
-rw-r--r-- | regcomp.c | 2 | ||||
-rw-r--r-- | regexp.h | 2 | ||||
-rw-r--r-- | sv.c | 3 | ||||
-rwxr-xr-x | t/io/fs.t | 2 | ||||
-rwxr-xr-x | t/io/tell.t | 2 | ||||
-rwxr-xr-x | t/lib/anydbm.t | 2 | ||||
-rw-r--r-- | t/lib/attrs.t | 125 | ||||
-rwxr-xr-x | t/lib/cgi-html.t | 14 | ||||
-rw-r--r-- | t/lib/charnames.t | 10 | ||||
-rwxr-xr-x | t/lib/dprof.t | 4 | ||||
-rw-r--r-- | t/lib/syslfs.t | 46 | ||||
-rw-r--r-- | t/op/64bit.t | 51 | ||||
-rw-r--r-- | t/op/attrs.t | 176 | ||||
-rwxr-xr-x | t/op/join.t | 16 | ||||
-rw-r--r-- | t/op/lfs.t | 46 | ||||
-rwxr-xr-x | t/op/misc.t | 3 | ||||
-rwxr-xr-x | t/op/sort.t | 10 | ||||
-rwxr-xr-x | t/op/stat.t | 2 | ||||
-rwxr-xr-x | t/op/tie.t | 16 | ||||
-rwxr-xr-x | t/op/time.t | 8 | ||||
-rw-r--r-- | t/pragma/warn/2use | 103 | ||||
-rw-r--r-- | t/pragma/warn/3both | 72 | ||||
-rw-r--r-- | t/pragma/warn/4lint | 16 | ||||
-rw-r--r-- | t/pragma/warn/5nolint | 16 | ||||
-rw-r--r-- | t/pragma/warn/6default | 22 | ||||
-rw-r--r-- | t/pragma/warn/7fatal | 242 | ||||
-rw-r--r-- | t/pragma/warn/8signal | 18 | ||||
-rw-r--r-- | t/pragma/warn/doio | 42 | ||||
-rw-r--r-- | t/pragma/warn/doop | 4 | ||||
-rw-r--r-- | t/pragma/warn/gv | 10 | ||||
-rw-r--r-- | t/pragma/warn/mg | 8 | ||||
-rw-r--r-- | t/pragma/warn/op | 144 | ||||
-rw-r--r-- | t/pragma/warn/perl | 14 | ||||
-rw-r--r-- | t/pragma/warn/perly | 4 | ||||
-rw-r--r-- | t/pragma/warn/pp | 34 | ||||
-rw-r--r-- | t/pragma/warn/pp_ctl | 44 | ||||
-rw-r--r-- | t/pragma/warn/pp_hot | 40 | ||||
-rw-r--r-- | t/pragma/warn/pp_sys | 48 | ||||
-rw-r--r-- | t/pragma/warn/regcomp | 12 | ||||
-rw-r--r-- | t/pragma/warn/regexec | 8 | ||||
-rw-r--r-- | t/pragma/warn/sv | 84 | ||||
-rw-r--r-- | t/pragma/warn/taint | 4 | ||||
-rw-r--r-- | t/pragma/warn/toke | 130 | ||||
-rw-r--r-- | t/pragma/warn/universal | 2 | ||||
-rw-r--r-- | t/pragma/warn/utf8 | 8 | ||||
-rw-r--r-- | t/pragma/warn/util | 12 | ||||
-rw-r--r--[-rwxr-xr-x] | t/pragma/warnings.t (renamed from t/pragma/warning.t) | 0 | ||||
-rw-r--r-- | toke.c | 318 | ||||
-rw-r--r-- | universal.c | 2 | ||||
-rw-r--r-- | vms/perly_c.vms | 2823 | ||||
-rw-r--r-- | vms/perly_h.vms | 39 | ||||
-rw-r--r-- | warnings.h (renamed from warning.h) | 8 | ||||
-rw-r--r-- | warnings.pl (renamed from warning.pl) | 54 | ||||
-rw-r--r-- | xsutils.c | 298 |
115 files changed, 7179 insertions, 4540 deletions
@@ -20,7 +20,7 @@ # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # -# Generated on Mon Aug 16 22:35:18 EET DST 1999 [metaconfig 3.0 PL70] +# Generated on Mon Aug 30 22:33:03 EET DST 1999 [metaconfig 3.0 PL70] # (with additional metaconfig patches by perlbug@perl.com) cat >/tmp/c1$$ <<EOF @@ -3543,7 +3543,7 @@ privlib="$ans" privlibexp="$ansexp" : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'` + installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"` else installprivlib="$privlibexp" fi @@ -3588,7 +3588,7 @@ else fi : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'` + installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"` else installarchlib="$archlibexp" fi @@ -4151,7 +4151,7 @@ none) libs=' ';; *) libs="$ans";; esac -: determine optimize, if desired, or use for debug flag also +: determine optimization, if desired, or use for debug flag also case "$optimize" in ' '|$undef) dflt='none';; '') dflt='-O';; @@ -4159,11 +4159,10 @@ case "$optimize" in esac $cat <<EOH -Some C compilers have problems with their optimizers. By default, $package -compiles with the -O flag to use the optimizer. Alternately, you might want -to use the symbolic debugger, which uses the -g flag (on traditional Unix -systems). Either flag can be specified here. To use neither flag, specify -the word "none". +By default, $package compiles with the -O flag to use the optimizer. +Alternately, you might want to use the symbolic debugger, which uses +the -g flag (on traditional Unix systems). Either flag can be +specified here. To use neither flag, specify the word "none". EOH rp="What optimizer/debugger flag should be used?" @@ -4177,7 +4176,7 @@ dflt='' : We will not override a previous value, but we might want to : augment a hint file case "$hint" in -none|recommended) +default|recommended) case "$gccversion" in 1*) dflt='-fpcc-struct-return' ;; esac @@ -4192,6 +4191,25 @@ none|recommended) fi ;; esac + case "$gccversion" in + 1*) ;; + 2.[0-8]*) ;; + *) echo " " + echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 + echo 'int main(void) { return 0; }' > gcctest.c + if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then + echo "Yes, it does." 2>&1 + case "$ccflags" in + *strict-aliasing*) + echo "Leaving current flags $ccflags alone." 2>&1 + ;; + *) dflt="$dflt -fno-strict-aliasing" ;; + esac + else + echo "Nope, it doesn't, but that's ok." 2>&1 + fi + ;; + esac ;; esac @@ -4233,7 +4251,7 @@ $define) esac case "$hint" in -none|recommended) dflt="$ccflags $dflt" ;; +default|recommended) dflt="$ccflags $dflt" ;; *) dflt="$ccflags";; esac @@ -4698,7 +4716,7 @@ case "$vendorprefix" in vendorlibexp="$ansexp" : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'` + installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"` else installvendorlib="$vendorlibexp" fi @@ -4761,7 +4779,7 @@ binexp="$ansexp" : Change installation prefix, if necessary. : XXX Bug? -- ignores Configure -Dinstallprefix setting. if $test X"$prefix" != X"$installprefix"; then - installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'` + installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"` else installbin="$binexp" fi @@ -5743,7 +5761,7 @@ esac : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'` + installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"` else installman1dir="$man1direxp" fi @@ -5886,7 +5904,7 @@ esac : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'` + installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"` else installman3dir="$man3direxp" fi @@ -6318,7 +6336,7 @@ scriptdir="$ans" scriptdirexp="$ansexp" : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'` + installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"` else installscript="$scriptdirexp" fi @@ -6383,7 +6401,7 @@ sitelib="$ans" sitelibexp="$ansexp" : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'` + installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"` else installsitelib="$sitelibexp" fi @@ -6413,7 +6431,7 @@ sitearch="$ans" sitearchexp="$ansexp" : Change installation prefix, if necessary. if $test X"$prefix" != X"$installprefix"; then - installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'` + installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"` else installsitearch="$sitearchexp" fi @@ -640,6 +640,7 @@ lib/User/grent.pm By-name interface to Perl's builtin getgr* lib/User/pwent.pm By-name interface to Perl's builtin getpw* lib/abbrev.pl An abbreviation table builder lib/assert.pl assertion and panic with stack trace +lib/attributes.pm For "sub foo : attrlist" lib/autouse.pm Load and call a function only when it's used lib/base.pm Establish IS-A relationship at compile time lib/bigfloat.pl An arbitrary precision floating point package @@ -874,7 +875,7 @@ lib/utf8.pm Pragma to control Unicode support lib/utf8_heavy.pl Support routines for utf8 pragma lib/validate.pl Perl library supporting wholesale file mode validation lib/vars.pm Declare pseudo-imported global variables -lib/warning.pm For "use warning" +lib/warnings.pm For "use warnings" makeaperl.SH perl script that produces a new perl binary makedef.pl Create symbol export lists for linking makedepend.SH Precursor to makedepend @@ -1117,6 +1118,7 @@ t/io/read.t See if read works t/io/tell.t See if file seeking works t/lib/abbrev.t See if Text::Abbrev works t/lib/anydbm.t See if AnyDBM_File works +t/lib/attrs.t See if attrs works with C<sub : attrs> t/lib/autoloader.t See if AutoLoader works t/lib/basename.t See if File::Basename works t/lib/bigfloat.t See if bigfloat.pl works @@ -1218,6 +1220,7 @@ t/op/append.t See if . works t/op/arith.t See if arithmetic works t/op/array.t See if array operations work t/op/assignwarn.t See if OP= operators warn correctly for undef targets +t/op/attrs.t See if attributes on declarations work t/op/auto.t See if autoincrement et all work t/op/avhv.t See if pseudo-hashes work t/op/bop.t See if bitops work @@ -1343,37 +1346,39 @@ t/pragma/strict-vars Tests of "use strict 'vars'" for strict.t t/pragma/strict.t See if strictures work t/pragma/subs.t See if subroutine pseudo-importation works t/pragma/utf8.t See if utf8 operations work -t/pragma/warn/1global Tests of global warnings for warning.t -t/pragma/warn/2use Tests for "use warning" for warning.t -t/pragma/warn/3both Tests for interaction of $^W and "use warning" +t/pragma/warn/1global Tests of global warnings for warnings.t +t/pragma/warn/2use Tests for "use warnings" for warnings.t +t/pragma/warn/3both Tests for interaction of $^W and "use warnings" t/pragma/warn/4lint Tests for -W switch t/pragma/warn/5nolint Tests for -X switch t/pragma/warn/6default Tests default warnings -t/pragma/warn/av Tests for av.c for warning.t -t/pragma/warn/doio Tests for doio.c for warning.t -t/pragma/warn/doop Tests for doop.c for warning.t -t/pragma/warn/gv Tests for gv.c for warning.t -t/pragma/warn/hv Tests for hv.c for warning.t -t/pragma/warn/malloc Tests for malloc.c for warning.t -t/pragma/warn/mg Tests for mg.c for warning.t -t/pragma/warn/op Tests for op.c for warning.t -t/pragma/warn/perl Tests for perl.c for warning.t -t/pragma/warn/perlio Tests for perlio.c for warning.t -t/pragma/warn/perly Tests for perly.y for warning.t -t/pragma/warn/pp Tests for pp.c for warning.t -t/pragma/warn/pp_ctl Tests for pp_ctl.c for warning.t -t/pragma/warn/pp_hot Tests for pp_hot.c for warning.t -t/pragma/warn/pp_sys Tests for pp_sys.c for warning.t -t/pragma/warn/regcomp Tests for regcomp.c for warning.t -t/pragma/warn/regexec Tests for regexec.c for warning.t -t/pragma/warn/run Tests for run.c for warning.t -t/pragma/warn/sv Tests for sv.c for warning.t -t/pragma/warn/taint Tests for taint.c for warning.t -t/pragma/warn/toke Tests for toke.c for warning.t -t/pragma/warn/universal Tests for universal.c for warning.t -t/pragma/warn/utf8 Tests for utf8.c for warning.t -t/pragma/warn/util Tests for util.c for warning.t -t/pragma/warning.t See if warning controls work +t/pragma/warn/7fatal Tests fatal warnings +t/pragma/warn/8signal Tests warnings + __WARN__ and __DIE__ +t/pragma/warn/av Tests for av.c for warnings.t +t/pragma/warn/doio Tests for doio.c for warnings.t +t/pragma/warn/doop Tests for doop.c for warnings.t +t/pragma/warn/gv Tests for gv.c for warnings.t +t/pragma/warn/hv Tests for hv.c for warnings.t +t/pragma/warn/malloc Tests for malloc.c for warnings.t +t/pragma/warn/mg Tests for mg.c for warnings.t +t/pragma/warn/op Tests for op.c for warnings.t +t/pragma/warn/perl Tests for perl.c for warnings.t +t/pragma/warn/perlio Tests for perlio.c for warnings.t +t/pragma/warn/perly Tests for perly.y for warnings.t +t/pragma/warn/pp Tests for pp.c for warnings.t +t/pragma/warn/pp_ctl Tests for pp_ctl.c for warnings.t +t/pragma/warn/pp_hot Tests for pp_hot.c for warnings.t +t/pragma/warn/pp_sys Tests for pp_sys.c for warnings.t +t/pragma/warn/regcomp Tests for regcomp.c for warnings.t +t/pragma/warn/regexec Tests for regexec.c for warnings.t +t/pragma/warn/run Tests for run.c for warnings.t +t/pragma/warn/sv Tests for sv.c for warnings.t +t/pragma/warn/taint Tests for taint.c for warnings.t +t/pragma/warn/toke Tests for toke.c for warnings.t +t/pragma/warn/universal Tests for universal.c for warnings.t +t/pragma/warn/utf8 Tests for utf8.c for warnings.t +t/pragma/warn/util Tests for util.c for warnings.t +t/pragma/warnings.t See if warning controls work taint.c Tainting code thrdvar.h Per-thread variables thread.h Threading header @@ -1441,8 +1446,8 @@ vos/perl.bind VOS bind control file vos/test_vos_dummies.c Test program for "vos_dummies.c" vos/vos_dummies.c Wrappers to soak up undefined functions vos/vosish.h VOS-specific header file -warning.h The warning numbers -warning.pl Program to write warning.h and lib/warning.pm +warnings.h The warning numbers +warnings.pl Program to write warnings.h and lib/warnings.pm win32/Makefile Win32 makefile for NMAKE (Visual C++ build) win32/bin/perlglob.pl Win32 globbing win32/bin/pl2bat.pl wrap perl scripts into batch files @@ -1494,3 +1499,4 @@ x2p/str.h Public declarations for the above x2p/util.c Utility routines x2p/util.h Public declarations for the above x2p/walk.c Parse tree walker +xsutils.c Additional bundled package methods not in UNIVERSAL:: diff --git a/Makefile.SH b/Makefile.SH index 6a84c1c15a..e7fb039f33 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -226,18 +226,19 @@ h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h h3 = opcode.h patchlevel.h perl.h perly.h pp.h proto.h regcomp.h h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h -h5 = utf8.h warning.h +h5 = utf8.h warnings.h h = $(h1) $(h2) $(h3) $(h4) $(h5) c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c -c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c globals.c perlio.c +c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c +c4 = globals.c perlio.c -c = $(c1) $(c2) $(c3) miniperlmain.c perlmain.c +c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) -obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) +obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) @@ -550,7 +551,7 @@ SYMH = perlvars.h intrpvar.h thrdvar.h # ext/B/Asmdata.pm: bytecode.pl # global.sym: embed.pl # regnodes.h: regcomp.pl -# warning.h lib/warning.pm: warning.pl +# warnings.h lib/warnings.pm: warnings.pl # The correct versions should be already supplied with the perl kit, # in case you don't have perl available. # To force them to run, type @@ -561,7 +562,7 @@ regen_headers: FORCE perl embed.pl perl bytecode.pl perl regcomp.pl - perl warning.pl + perl warnings.pl # Extensions: # Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will diff --git a/README.epoc b/README.epoc index b2aaf1859b..d078d8416d 100644 --- a/README.epoc +++ b/README.epoc @@ -4,50 +4,104 @@ Perl 5 README file for the EPOC operating system. Olaf Flebbe <o.flebbe@gmx.de> http://www.fortunecity.de/wolkenkratzer/trumpet/84/perl5.html -June 27, 1999 +Aug 25, 1999 Introduction ------------ -This is a port of Perl version 5, revision 005-57 to EPOC. +This is a port of Perl version 5.005_60 to EPOC. -There are many features left out, because of restrictions of the posix +There are many features left out, because of restrictions of the POSIX support in the SDK. -The following known problems do exist: -1) very little testing. +Installation/Usage +------------------ -2) no support for system, backquoting, pipes etc. One cannot exec a - different process. +You will need ~4MB free space in order to run perl. + +Install perl.sis on the EPOC machine (most likely a PSION Series +5). If you do not know how to do that, you are on your own. You may +have to use a CF Card in order to work with perl. The perl debugger +uses more then 1.5 MB additional RAM. The heap is limited to 2 MB. + +Perl itself and its standard library are using 1.7MB disk space. I +left out UTF support and modules which will not work with this +version. (For details look into epoc/createpkg.pl). + +Copy eshell.exe to the same location as perl. Start eshell.exe with a +double click. + +Now you can enter: perl -de 0 in order to run the perl debugger. If +you are leaving perl, you have to switch back manually to eshell.exe +(With Ctrl-System or the button in the upper right corner of the +System screen.) When perl is running, you will see a task with the +name STDOUT in the task list. + +You can redirect the output with the UNIX bourne shell syntax (this is +built into perl rather then eshell) For instance the following command +line will run the script test.pl with the output redirected to +stdout_file, the errors to stderr_file and input from stdin_file. + +perl test.pl >stdout_file <stdin_file 2>stderr_file + +Alternativly you can use 2>&1 in order to add the standard error output to +stdout. + +Pathnames to executables in eshell.exe have to be written with +backslashes, file arguments to perl with slashes. The default drive of +perl is the same as the drive perl.exe is located on, the default path +is the path perl.exe is / (???). + +i.e. command lines look a little bit funny: + +D:\perl.exe C:/test.pl >C:/output.txt -3) no signals, kill. Do not try to use them. +In order to use Getopt::Long you have to autosplit this module by hand: run -4) select is missing. +\perl.exe \autosplit.pl in order to create the necessary files. -5) binmode does not work. (No CR LF to LF translation for text files) +You may have a problem to create perl scripts. A cumbersome workaround +is to use the OPL Editor and exporting to text. -6) no Config.pm +Problems +-------- -7) no I/O redirection. +The following known problems exist: -8) it may not run from a drive other than C: (I have no CF Card to test) +1) no support for system, backquoting, pipes etc. One cannot exec a + different process. + +2) no signals, kill, alarm. Do not try to use them. This may be + impossible to implement on EPOC. + +3) select is missing. + +4) binmode does not exist. (No CR LF to LF translation for text files) + +5) Only a stub Config.pm + +6) EPOC does not handle the notion of current drive and current + directory very well (i.e. not at all, but it tries hard to emulate + one) -9) sockets may hardly of any use. +7) sockets may hardly of any use. -10) You need a shell in order to run perl.exe. +8) You need the shell eshell.exe in order to run perl.exe and supply + it with arguments. Compiling Perl 5 on the EPOC cross compiling envionment. -------------------------------------------------------- 0. You will need the C++ SDK from - http://developer.epocworld.com/. Install it on a separate drive. + http://developer.epocworld.com/. Install it on a separate + drive. -1. Unpack the sources in the epoc development drive: The sources - should be in a directory perl5.005/perl5.005_57 - -2. Move all files in the directory perl5.005_57/epoc to perl5.005_57. +1. Get the Perl sources from your nearest CPAN site. + Unpack the sources of perl5.005_60 in the epoc development drive. + +2. Copy all files in the directory perl5.005_60/epoc to perl5.005_60. 3. Check the perl.mmp file: It should have the correct locations for project und subproject (see step 1) @@ -59,22 +113,21 @@ Compiling Perl 5 on the EPOC cross compiling envionment. 5. Beam the perl5.005.sis to the Psion5, install and enjoy! -ToDo List +You can use epoc\createpkg.pl to generate a new perl.pkg file. + + +Wish List --------- -- Allocate an UID from symbian. +- Implement an OPX to get rid of eshell.exe. -- Implement system() and I/O redirection, in order to run the - tests. +- Implement system(), in order to run the tests. - Implement getprotcolbyname() and relatives. -- Implement perl as a OPX module. (What do you think?) - Support Status -------------- I'm offering this port "as is". You can ask me questions, but I can't guarantee I'll be able to answer them; I don't know much about Perl -itself; - +internals myself; diff --git a/cygwin/Makefile.SHs b/cygwin/Makefile.SHs index e6a604db87..4a3790768d 100644 --- a/cygwin/Makefile.SHs +++ b/cygwin/Makefile.SHs @@ -132,6 +132,7 @@ miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)s$(LIB_EXT) ;; *) $spitshell >>Makefile <<'!NO!SUBS!' +cwobj = $(obj) # perl library $(LIBPERL)$(LIB_EXT): $& perl$(OBJ_EXT) $(cwobj) @@ -737,6 +737,58 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size) ((UV) s[offset + 1] << 16) + ( s[offset + 2] << 8); } +#ifdef HAS_QUAD + else if (size == 64) { + dTHR; + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, + "Bit vector size > 32 non-portable"); + if (offset >= srclen) + retnum = 0; + else if (offset + 1 >= srclen) + retnum = + (UV) s[offset ] << 56; + else if (offset + 2 >= srclen) + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48); + else if (offset + 3 >= srclen) + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40); + else if (offset + 4 >= srclen) + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40) + + ((UV) s[offset + 3] << 32); + else if (offset + 5 >= srclen) + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40) + + ((UV) s[offset + 3] << 32) + + ( s[offset + 4] << 24); + else if (offset + 6 >= srclen) + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40) + + ((UV) s[offset + 3] << 32) + + ((UV) s[offset + 4] << 24) + + ((UV) s[offset + 5] << 16); + else + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40) + + ((UV) s[offset + 3] << 32) + + ((UV) s[offset + 4] << 24) + + ((UV) s[offset + 5] << 16) + + ( s[offset + 6] << 8); + } +#endif } } else if (size < 8) @@ -755,6 +807,23 @@ Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size) ((UV) s[offset + 1] << 16) + ( s[offset + 2] << 8) + s[offset + 3]; +#ifdef HAS_QUAD + else if (size == 64) { + dTHR; + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, + "Bit vector size > 32 non-portable"); + retnum = + ((UV) s[offset ] << 56) + + ((UV) s[offset + 1] << 48) + + ((UV) s[offset + 2] << 40) + + ((UV) s[offset + 3] << 32) + + ((UV) s[offset + 4] << 24) + + ((UV) s[offset + 5] << 16) + + ( s[offset + 6] << 8) + + s[offset + 7]; + } +#endif } return retnum; @@ -800,17 +869,33 @@ Perl_do_vecset(pTHX_ SV *sv) else { offset >>= 3; /* turn into byte offset */ if (size == 8) - s[offset] = lval & 255; + s[offset ] = lval & 0xff; else if (size == 16) { - s[offset] = (lval >> 8) & 255; - s[offset+1] = lval & 255; + s[offset ] = (lval >> 8) & 0xff; + s[offset+1] = lval & 0xff; } else if (size == 32) { - s[offset] = (lval >> 24) & 255; - s[offset+1] = (lval >> 16) & 255; - s[offset+2] = (lval >> 8) & 255; - s[offset+3] = lval & 255; + s[offset ] = (lval >> 24) & 0xff; + s[offset+1] = (lval >> 16) & 0xff; + s[offset+2] = (lval >> 8) & 0xff; + s[offset+3] = lval & 0xff; } +#ifdef HAS_QUAD + else if (size == 64) { + dTHR; + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, + "Bit vector size > 32 non-portable"); + s[offset ] = (lval >> 56) & 0xff; + s[offset+1] = (lval >> 48) & 0xff; + s[offset+2] = (lval >> 40) & 0xff; + s[offset+3] = (lval >> 32) & 0xff; + s[offset+4] = (lval >> 24) & 0xff; + s[offset+5] = (lval >> 16) & 0xff; + s[offset+6] = (lval >> 8) & 0xff; + s[offset+7] = lval & 0xff; + } +#endif } SvSETMAGIC(targ); } @@ -472,8 +472,11 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o) sv_catpv(tmpsv, ",AMPER"); if (o->op_private & OPpENTERSUB_DB) sv_catpv(tmpsv, ",DB"); + if (o->op_private & OPpENTERSUB_HASTARG) + sv_catpv(tmpsv, ",HASTARG"); } - switch (o->op_private & OPpDEREF) { + else + switch (o->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); break; @@ -749,6 +749,11 @@ #define tmps_grow Perl_tmps_grow #define sv_rvweaken Perl_sv_rvweaken #define magic_killbackrefs Perl_magic_killbackrefs +#define newANONATTRSUB Perl_newANONATTRSUB +#define newATTRSUB Perl_newATTRSUB +#define newMYSUB Perl_newMYSUB +#define my_attrs Perl_my_attrs +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -803,6 +808,9 @@ #define gv_ename S_gv_ename #define cv_clone2 S_cv_clone2 #define scalar_mod_type S_scalar_mod_type +#define my_kid S_my_kid +#define dup_attrlist S_dup_attrlist +#define apply_attrs S_apply_attrs # if defined(PL_OP_SLAB_ALLOC) #define Slab_Alloc S_Slab_Alloc # endif @@ -991,6 +999,9 @@ #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup S_isa_lookup #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define modify_SV_attributes S_modify_SV_attributes +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define mess_alloc S_mess_alloc # if defined(LEAKTEST) @@ -2065,6 +2076,11 @@ #define tmps_grow(a) Perl_tmps_grow(aTHX_ a) #define sv_rvweaken(a) Perl_sv_rvweaken(aTHX_ a) #define magic_killbackrefs(a,b) Perl_magic_killbackrefs(aTHX_ a,b) +#define newANONATTRSUB(a,b,c,d) Perl_newANONATTRSUB(aTHX_ a,b,c,d) +#define newATTRSUB(a,b,c,d,e) Perl_newATTRSUB(aTHX_ a,b,c,d,e) +#define newMYSUB(a,b,c,d,e) Perl_newMYSUB(aTHX_ a,b,c,d,e) +#define my_attrs(a,b) Perl_my_attrs(aTHX_ a,b) +#define boot_core_xsutils() Perl_boot_core_xsutils(aTHX) #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -2119,6 +2135,9 @@ #define gv_ename(a) S_gv_ename(aTHX_ a) #define cv_clone2(a,b) S_cv_clone2(aTHX_ a,b) #define scalar_mod_type(a,b) S_scalar_mod_type(aTHX_ a,b) +#define my_kid(a,b) S_my_kid(aTHX_ a,b) +#define dup_attrlist(a) S_dup_attrlist(aTHX_ a) +#define apply_attrs(a,b,c) S_apply_attrs(aTHX_ a,b,c) # if defined(PL_OP_SLAB_ALLOC) #define Slab_Alloc(a,b) S_Slab_Alloc(aTHX_ a,b) # endif @@ -2272,7 +2291,7 @@ #define scan_ident(a,b,c,d,e) S_scan_ident(aTHX_ a,b,c,d,e) #define scan_inputsymbol(a) S_scan_inputsymbol(aTHX_ a) #define scan_pat(a,b) S_scan_pat(aTHX_ a,b) -#define scan_str(a) S_scan_str(aTHX_ a) +#define scan_str(a,b,c) S_scan_str(aTHX_ a,b,c) #define scan_subst(a) S_scan_subst(aTHX_ a) #define scan_trans(a) S_scan_trans(aTHX_ a) #define scan_word(a,b,c,d,e) S_scan_word(aTHX_ a,b,c,d,e) @@ -2306,6 +2325,9 @@ #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define modify_SV_attributes(a,b,c,d) S_modify_SV_attributes(aTHX_ a,b,c,d) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define mess_alloc() S_mess_alloc(aTHX) # if defined(LEAKTEST) @@ -4072,6 +4094,16 @@ #define sv_rvweaken Perl_sv_rvweaken #define Perl_magic_killbackrefs CPerlObj::Perl_magic_killbackrefs #define magic_killbackrefs Perl_magic_killbackrefs +#define Perl_newANONATTRSUB CPerlObj::Perl_newANONATTRSUB +#define newANONATTRSUB Perl_newANONATTRSUB +#define Perl_newATTRSUB CPerlObj::Perl_newATTRSUB +#define newATTRSUB Perl_newATTRSUB +#define Perl_newMYSUB CPerlObj::Perl_newMYSUB +#define newMYSUB Perl_newMYSUB +#define Perl_my_attrs CPerlObj::Perl_my_attrs +#define my_attrs Perl_my_attrs +#define Perl_boot_core_xsutils CPerlObj::Perl_boot_core_xsutils +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -4167,6 +4199,12 @@ #define cv_clone2 S_cv_clone2 #define S_scalar_mod_type CPerlObj::S_scalar_mod_type #define scalar_mod_type S_scalar_mod_type +#define S_my_kid CPerlObj::S_my_kid +#define my_kid S_my_kid +#define S_dup_attrlist CPerlObj::S_dup_attrlist +#define dup_attrlist S_dup_attrlist +#define S_apply_attrs CPerlObj::S_apply_attrs +#define apply_attrs S_apply_attrs # if defined(PL_OP_SLAB_ALLOC) #define S_Slab_Alloc CPerlObj::S_Slab_Alloc #define Slab_Alloc S_Slab_Alloc @@ -4501,6 +4539,10 @@ #define S_isa_lookup CPerlObj::S_isa_lookup #define isa_lookup S_isa_lookup #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#define S_modify_SV_attributes CPerlObj::S_modify_SV_attributes +#define modify_SV_attributes S_modify_SV_attributes +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define S_mess_alloc CPerlObj::S_mess_alloc #define mess_alloc S_mess_alloc @@ -1753,6 +1753,11 @@ p |void |sv_force_normal|SV *sv p |void |tmps_grow |I32 n p |SV* |sv_rvweaken |SV *sv p |int |magic_killbackrefs|SV *sv|MAGIC *mg +p |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block +p |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |OP * |my_attrs |OP *o|OP *attrs +p |void |boot_core_xsutils #if defined(PERL_OBJECT) protected: @@ -1816,6 +1821,9 @@ s |bool |is_handle_constructor |OP *o|I32 argnum s |char* |gv_ename |GV *gv s |CV* |cv_clone2 |CV *proto|CV *outside s |bool |scalar_mod_type|OP *o|I32 type +s |OP * |my_kid |OP *o|OP *attrs +s |OP * |dup_attrlist |OP *o +s |void |apply_attrs |HV *stash|SV *target|OP *attrs # if defined(PL_OP_SLAB_ALLOC) s |void* |Slab_Alloc |int m|size_t sz # endif @@ -1986,7 +1994,7 @@ s |char* |scan_ident |char *s|char *send|char *dest \ |STRLEN destlen|I32 ck_uni s |char* |scan_inputsymbol|char *start s |char* |scan_pat |char *start|I32 type -s |char* |scan_str |char *start +s |char* |scan_str |char *start|int keep_quoted|int keep_delims s |char* |scan_subst |char *start s |char* |scan_trans |char *start s |char* |scan_word |char *s|char *dest|STRLEN destlen \ @@ -2024,6 +2032,10 @@ s |I32 |win32_textfilter |int idx|SV *sv|int maxlen s |SV*|isa_lookup |HV *stash|const char *name|int len|int level #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +s |int|modify_SV_attributes|SV *sv|SV **retlist|SV **attrlist|int numattrs +#endif + #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) s |SV* |mess_alloc # if defined(LEAKTEST) diff --git a/epoc/config.h b/epoc/config.h index e6cebb0b68..3f9808a282 100644 --- a/epoc/config.h +++ b/epoc/config.h @@ -1055,7 +1055,7 @@ * preprocessor can make decisions based on it. */ #define INTSIZE 4 /**/ -#define LONGSIZE 8 /**/ +#define LONGSIZE 4 /**/ #define SHORTSIZE 2 /**/ /* MULTIARCH: @@ -2074,8 +2074,8 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "/perl/lib/5.00557/epoc" /**/ -#define ARCHLIB_EXP "/perl/lib/5.00557/epoc" /**/ +#define ARCHLIB "/perl/lib/5.00560/epoc" /**/ +#define ARCHLIB_EXP "/perl/lib/5.00560/epoc" /**/ /* DLSYM_NEEDS_UNDERSCORE: * This symbol, if defined, indicates that we need to prepend an @@ -2365,8 +2365,8 @@ * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define PRIVLIB "/perl/lib/5.00557" /**/ -#define PRIVLIB_EXP "/perl/lib/5.00557" /**/ +#define PRIVLIB "/perl/lib/5.00560" /**/ +#define PRIVLIB_EXP "/perl/lib/5.00560" /**/ /* SELECT_MIN_BITS: * This symbol holds the minimum number of bits operated by select. @@ -2391,7 +2391,7 @@ * in programs that are not prepared to deal with ~ expansion at run-time. */ #define SITEARCH "/perl/lib/site_perl/5.00556/epoc" /**/ -#define SITEARCH_EXP "/perl/lib/site_perl/5.00557/epoc" /**/ +#define SITEARCH_EXP "/perl/lib/site_perl/5.00560/epoc" /**/ /* SITELIB: * This symbol contains the name of the private library for this package. @@ -2406,8 +2406,8 @@ * This symbol contains the ~name expanded version of SITELIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define SITELIB "/perl/lib/site_perl/5.00557" /**/ -#define SITELIB_EXP "/perl/lib/site_perl/5.00557" /**/ +#define SITELIB "/perl/lib/site_perl/5.00560" /**/ +#define SITELIB_EXP "/perl/lib/site_perl/5.00560" /**/ /* STARTPERL: * This variable contains the string to put in front of a perl @@ -2687,4 +2687,16 @@ */ #define Uid_t uid_t /* UID type */ +/* PERL_PRIfldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'f') for output. + */ +/* PERL_PRIgldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'g') for output. + */ +#define PERL_PRIfldbl "f" /**/ +#define PERL_PRIgldbl "g" /**/ + #endif + diff --git a/epoc/epoc.c b/epoc/epoc.c index a7c7e1090b..d0fae23f7e 100644 --- a/epoc/epoc.c +++ b/epoc/epoc.c @@ -1,35 +1,64 @@ -/* Epoc helper Routines */ +/* + * Copyright (c) 1999 Olaf Flebbe o.flebbe@gmx.de + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ #include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <sys/unistd.h> + +char *environ = NULL; +void +Perl_epoc_init(int *argcp, char ***argvp) { + int i; + int truecount=0; + char **lastcp = (*argvp); + char *ptr; + for (i=0; i< *argcp; i++) { + if ((*argvp)[i]) { + if (*((*argvp)[i]) == '<') { + if (strlen((*argvp)[i]) > 1) { + ptr =((*argvp)[i])+1; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "r", stdin); + } else if (*((*argvp)[i]) == '>') { + if (strlen((*argvp)[i]) > 1) { + ptr =((*argvp)[i])+1; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "w", stdout); + } else if ((*((*argvp)[i]) == '2') && (*(((*argvp)[i])+1) == '>')) { + if (strcmp( (*argvp)[i], "2>&1") == 0) { + dup2( fileno( stdout), fileno( stderr)); + } else { + if (strlen((*argvp)[i]) > 2) { + ptr =((*argvp)[i])+2; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "w", stderr); + } + } else { + *lastcp++ = (*argvp)[i]; + truecount++; + } + } + } + *argcp=truecount; + -int getgid() {return 0;} -int getegid() {return 0;} -int geteuid() {return 0;} -int getuid() {return 0;} -int setgid() {return -1;} -int setuid() {return -1;} - - -char *environ; - -int Perl_my_popen( int a, int b) { - return 0; -} -int Perl_my_pclose( int a) { - return 0; } -kill() {} -signal() {} - -void execv() {} -void execvp() {} - - -void do_spawn() {} -void do_aspawn() {} -void Perl_do_exec() {} - #ifdef __MARM__ /* Symbian forgot to include __fixunsdfi into the MARM euser.lib */ /* This is from libgcc2.c , gcc-2.7.2.3 */ diff --git a/epoc/epocish.h b/epoc/epocish.h index 010dc691a9..70d4cbd6c1 100644 --- a/epoc/epocish.h +++ b/epoc/epocish.h @@ -89,9 +89,6 @@ */ /* #define ALTERNATE_SHEBANG "#!" / **/ -#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) || defined(__NetBSD__) -# include <signal.h> -#endif #ifndef SIGABRT # define SIGABRT SIGILL @@ -116,15 +113,7 @@ /* these should be set in a hint file, not here */ #ifndef PERL_SYS_INIT -#ifdef PERL_SCO5 -# define PERL_SYS_INIT(c,v) fpsetmask(0); MALLOC_INIT -#else -# ifdef POSIX_BC -# define PERL_SYS_INIT(c,v) sigignore(SIGFPE); MALLOC_INIT -# else -# define PERL_SYS_INIT(c,v) MALLOC_INIT -# endif -#endif +# define PERL_SYS_INIT(c,v) Perl_epoc_init(c,v); MALLOC_INIT #endif #ifndef PERL_SYS_TERM @@ -134,3 +123,4 @@ #define BIT_BUCKET "NUL:" #define dXSUB_SYS + diff --git a/epoc/perl.mmp b/epoc/perl.mmp index 30c97fd23e..d6c63990e0 100644 --- a/epoc/perl.mmp +++ b/epoc/perl.mmp @@ -1,11 +1,11 @@ target perl.exe targettype exe -uid 0x010 0 -unicodeuid 0x010 0 +uid 0x100051d8 + project perl5.005 -subproject perl5.005_57 +subproject perl5.005_60 -SOURCE av.c byterun.c deb.c doio.c doop.c dump.c globals.c gv.c hv.c mg.c miniperlmain.c op.c perl.c perlio.c perly.c pp.c pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c sv.c taint.c toke.c universal.c utf8.c util.c epoc.c +SOURCE av.c deb.c doio.c doop.c dump.c globals.c gv.c hv.c mg.c miniperlmain.c op.c perl.c perlio.c perly.c pp.c pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c sv.c taint.c toke.c universal.c utf8.c util.c epoc.c epoc_stubs.c systeminclude \epoc32\include\libc \epoc32\include #if defined(MARM) @@ -15,5 +15,6 @@ LIBRARY ecrt0.obj #endif epocstacksize 49152 +epocheapsize 1024 2097152 LIBRARY estlib.lib euser.lib diff --git a/epoc/perl.pkg b/epoc/perl.pkg index c24945bf77..9456506554 100644 --- a/epoc/perl.pkg +++ b/epoc/perl.pkg @@ -1,7 +1,139 @@ -#{"perl5.005"},(0x010),57,5,0
-; Installation with an embedded .sis file
-"\epoc32\release\marm\rel\perl.exe"-"!:\perl.exe"
-"\perl5.005\perl5.005_57\lib\perl5db.pl"-"!:\perl\lib\5.00557\perl5db.pl"
-"\perl5.005\perl5.005_57\lib\Term\ReadLine.pm"-"!:\perl\lib\5.00557\Term\ReadLine.pm"
-; Component .sis files
-@"\epoc32\release\marm\rel\stdlib.sis",(0x010002c3)
+#{"perl5.005"},(0x100051d8),60,10,0 +"\epoc32\release\marm\rel\perl.exe"-"!:\perl.exe" +"\perl5.005\perl5.005_60\epoc\Config.pm"-"!:\perl\lib\5.00560\Config.pm" +"\perl5.005\perl5.005_60\lib\AnyDBM_File.pm"-"!:\perl\lib\5.00560\AnyDBM_File.pm" +"\perl5.005\perl5.005_60\lib\AutoLoader.pm"-"!:\perl\lib\5.00560\AutoLoader.pm" +"\perl5.005\perl5.005_60\lib\AutoSplit.pm"-"!:\perl\lib\5.00560\AutoSplit.pm" +"\perl5.005\perl5.005_60\lib\Benchmark.pm"-"!:\perl\lib\5.00560\Benchmark.pm" +"\perl5.005\perl5.005_60\lib\Carp.pm"-"!:\perl\lib\5.00560\Carp.pm" +"\perl5.005\perl5.005_60\lib\Carp\Heavy.pm"-"!:\perl\lib\5.00560\Carp\Heavy.pm" +"\perl5.005\perl5.005_60\lib\Class\Struct.pm"-"!:\perl\lib\5.00560\Class\Struct.pm" +"\perl5.005\perl5.005_60\lib\Cwd.pm"-"!:\perl\lib\5.00560\Cwd.pm" +"\perl5.005\perl5.005_60\lib\Devel\SelfStubber.pm"-"!:\perl\lib\5.00560\Devel\SelfStubber.pm" +"\perl5.005\perl5.005_60\lib\DirHandle.pm"-"!:\perl\lib\5.00560\DirHandle.pm" +"\perl5.005\perl5.005_60\lib\Dumpvalue.pm"-"!:\perl\lib\5.00560\Dumpvalue.pm" +"\perl5.005\perl5.005_60\lib\English.pm"-"!:\perl\lib\5.00560\English.pm" +"\perl5.005\perl5.005_60\lib\Env.pm"-"!:\perl\lib\5.00560\Env.pm" +"\perl5.005\perl5.005_60\lib\Exporter\Heavy.pm"-"!:\perl\lib\5.00560\Exporter\Heavy.pm" +"\perl5.005\perl5.005_60\lib\Exporter.pm"-"!:\perl\lib\5.00560\Exporter.pm" +"\perl5.005\perl5.005_60\lib\Fatal.pm"-"!:\perl\lib\5.00560\Fatal.pm" +"\perl5.005\perl5.005_60\lib\File\Basename.pm"-"!:\perl\lib\5.00560\File\Basename.pm" +"\perl5.005\perl5.005_60\lib\File\CheckTree.pm"-"!:\perl\lib\5.00560\File\CheckTree.pm" +"\perl5.005\perl5.005_60\lib\File\Compare.pm"-"!:\perl\lib\5.00560\File\Compare.pm" +"\perl5.005\perl5.005_60\lib\File\Copy.pm"-"!:\perl\lib\5.00560\File\Copy.pm" +"\perl5.005\perl5.005_60\lib\File\DosGlob.pm"-"!:\perl\lib\5.00560\File\DosGlob.pm" +"\perl5.005\perl5.005_60\lib\File\Find.pm"-"!:\perl\lib\5.00560\File\Find.pm" +"\perl5.005\perl5.005_60\lib\File\Path.pm"-"!:\perl\lib\5.00560\File\Path.pm" +"\perl5.005\perl5.005_60\lib\File\Spec.pm"-"!:\perl\lib\5.00560\File\Spec.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\Functions.pm"-"!:\perl\lib\5.00560\File\Spec\Functions.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\Mac.pm"-"!:\perl\lib\5.00560\File\Spec\Mac.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\OS2.pm"-"!:\perl\lib\5.00560\File\Spec\OS2.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\Unix.pm"-"!:\perl\lib\5.00560\File\Spec\Unix.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\VMS.pm"-"!:\perl\lib\5.00560\File\Spec\VMS.pm" +"\perl5.005\perl5.005_60\lib\File\Spec\Win32.pm"-"!:\perl\lib\5.00560\File\Spec\Win32.pm" +"\perl5.005\perl5.005_60\lib\File\stat.pm"-"!:\perl\lib\5.00560\File\stat.pm" +"\perl5.005\perl5.005_60\lib\FileCache.pm"-"!:\perl\lib\5.00560\FileCache.pm" +"\perl5.005\perl5.005_60\lib\FileHandle.pm"-"!:\perl\lib\5.00560\FileHandle.pm" +"\perl5.005\perl5.005_60\lib\FindBin.pm"-"!:\perl\lib\5.00560\FindBin.pm" +"\perl5.005\perl5.005_60\lib\Getopt\Long.pm"-"!:\perl\lib\5.00560\Getopt\Long.pm" +"\perl5.005\perl5.005_60\lib\Getopt\Std.pm"-"!:\perl\lib\5.00560\Getopt\Std.pm" +"\perl5.005\perl5.005_60\lib\I18N\Collate.pm"-"!:\perl\lib\5.00560\I18N\Collate.pm" +"\perl5.005\perl5.005_60\lib\Math\BigFloat.pm"-"!:\perl\lib\5.00560\Math\BigFloat.pm" +"\perl5.005\perl5.005_60\lib\Math\BigInt.pm"-"!:\perl\lib\5.00560\Math\BigInt.pm" +"\perl5.005\perl5.005_60\lib\Math\Complex.pm"-"!:\perl\lib\5.00560\Math\Complex.pm" +"\perl5.005\perl5.005_60\lib\Math\Trig.pm"-"!:\perl\lib\5.00560\Math\Trig.pm" +"\perl5.005\perl5.005_60\lib\Pod\Checker.pm"-"!:\perl\lib\5.00560\Pod\Checker.pm" +"\perl5.005\perl5.005_60\lib\Pod\Functions.pm"-"!:\perl\lib\5.00560\Pod\Functions.pm" +"\perl5.005\perl5.005_60\lib\Pod\Html.pm"-"!:\perl\lib\5.00560\Pod\Html.pm" +"\perl5.005\perl5.005_60\lib\Pod\InputObjects.pm"-"!:\perl\lib\5.00560\Pod\InputObjects.pm" +"\perl5.005\perl5.005_60\lib\Pod\Parser.pm"-"!:\perl\lib\5.00560\Pod\Parser.pm" +"\perl5.005\perl5.005_60\lib\Pod\PlainText.pm"-"!:\perl\lib\5.00560\Pod\PlainText.pm" +"\perl5.005\perl5.005_60\lib\Pod\Select.pm"-"!:\perl\lib\5.00560\Pod\Select.pm" +"\perl5.005\perl5.005_60\lib\Pod\Text.pm"-"!:\perl\lib\5.00560\Pod\Text.pm" +"\perl5.005\perl5.005_60\lib\Pod\Text\Color.pm"-"!:\perl\lib\5.00560\Pod\Text\Color.pm" +"\perl5.005\perl5.005_60\lib\Pod\Text\Termcap.pm"-"!:\perl\lib\5.00560\Pod\Text\Termcap.pm" +"\perl5.005\perl5.005_60\lib\Pod\Usage.pm"-"!:\perl\lib\5.00560\Pod\Usage.pm" +"\perl5.005\perl5.005_60\lib\Search\Dict.pm"-"!:\perl\lib\5.00560\Search\Dict.pm" +"\perl5.005\perl5.005_60\lib\SelectSaver.pm"-"!:\perl\lib\5.00560\SelectSaver.pm" +"\perl5.005\perl5.005_60\lib\SelfLoader.pm"-"!:\perl\lib\5.00560\SelfLoader.pm" +"\perl5.005\perl5.005_60\lib\Shell.pm"-"!:\perl\lib\5.00560\Shell.pm" +"\perl5.005\perl5.005_60\lib\Symbol.pm"-"!:\perl\lib\5.00560\Symbol.pm" +"\perl5.005\perl5.005_60\lib\Sys\Hostname.pm"-"!:\perl\lib\5.00560\Sys\Hostname.pm" +"\perl5.005\perl5.005_60\lib\Sys\Syslog.pm"-"!:\perl\lib\5.00560\Sys\Syslog.pm" +"\perl5.005\perl5.005_60\lib\Term\Cap.pm"-"!:\perl\lib\5.00560\Term\Cap.pm" +"\perl5.005\perl5.005_60\lib\Term\Complete.pm"-"!:\perl\lib\5.00560\Term\Complete.pm" +"\perl5.005\perl5.005_60\lib\Term\ReadLine.pm"-"!:\perl\lib\5.00560\Term\ReadLine.pm" +"\perl5.005\perl5.005_60\lib\Test.pm"-"!:\perl\lib\5.00560\Test.pm" +"\perl5.005\perl5.005_60\lib\Test\Harness.pm"-"!:\perl\lib\5.00560\Test\Harness.pm" +"\perl5.005\perl5.005_60\lib\Text\Abbrev.pm"-"!:\perl\lib\5.00560\Text\Abbrev.pm" +"\perl5.005\perl5.005_60\lib\Text\ParseWords.pm"-"!:\perl\lib\5.00560\Text\ParseWords.pm" +"\perl5.005\perl5.005_60\lib\Text\Soundex.pm"-"!:\perl\lib\5.00560\Text\Soundex.pm" +"\perl5.005\perl5.005_60\lib\Text\Tabs.pm"-"!:\perl\lib\5.00560\Text\Tabs.pm" +"\perl5.005\perl5.005_60\lib\Text\Wrap.pm"-"!:\perl\lib\5.00560\Text\Wrap.pm" +"\perl5.005\perl5.005_60\lib\Tie\Array.pm"-"!:\perl\lib\5.00560\Tie\Array.pm" +"\perl5.005\perl5.005_60\lib\Tie\Handle.pm"-"!:\perl\lib\5.00560\Tie\Handle.pm" +"\perl5.005\perl5.005_60\lib\Tie\Hash.pm"-"!:\perl\lib\5.00560\Tie\Hash.pm" +"\perl5.005\perl5.005_60\lib\Tie\RefHash.pm"-"!:\perl\lib\5.00560\Tie\RefHash.pm" +"\perl5.005\perl5.005_60\lib\Tie\Scalar.pm"-"!:\perl\lib\5.00560\Tie\Scalar.pm" +"\perl5.005\perl5.005_60\lib\Tie\SubstrHash.pm"-"!:\perl\lib\5.00560\Tie\SubstrHash.pm" +"\perl5.005\perl5.005_60\lib\Time\Local.pm"-"!:\perl\lib\5.00560\Time\Local.pm" +"\perl5.005\perl5.005_60\lib\Time\gmtime.pm"-"!:\perl\lib\5.00560\Time\gmtime.pm" +"\perl5.005\perl5.005_60\lib\Time\localtime.pm"-"!:\perl\lib\5.00560\Time\localtime.pm" +"\perl5.005\perl5.005_60\lib\Time\tm.pm"-"!:\perl\lib\5.00560\Time\tm.pm" +"\perl5.005\perl5.005_60\lib\UNIVERSAL.pm"-"!:\perl\lib\5.00560\UNIVERSAL.pm" +"\perl5.005\perl5.005_60\lib\abbrev.pl"-"!:\perl\lib\5.00560\abbrev.pl" +"\perl5.005\perl5.005_60\lib\assert.pl"-"!:\perl\lib\5.00560\assert.pl" +"\perl5.005\perl5.005_60\lib\autouse.pm"-"!:\perl\lib\5.00560\autouse.pm" +"\perl5.005\perl5.005_60\lib\base.pm"-"!:\perl\lib\5.00560\base.pm" +"\perl5.005\perl5.005_60\lib\bigfloat.pl"-"!:\perl\lib\5.00560\bigfloat.pl" +"\perl5.005\perl5.005_60\lib\bigint.pl"-"!:\perl\lib\5.00560\bigint.pl" +"\perl5.005\perl5.005_60\lib\bigrat.pl"-"!:\perl\lib\5.00560\bigrat.pl" +"\perl5.005\perl5.005_60\lib\blib.pm"-"!:\perl\lib\5.00560\blib.pm" +"\perl5.005\perl5.005_60\lib\cacheout.pl"-"!:\perl\lib\5.00560\cacheout.pl" +"\perl5.005\perl5.005_60\lib\caller.pm"-"!:\perl\lib\5.00560\caller.pm" +"\perl5.005\perl5.005_60\lib\chat2.pl"-"!:\perl\lib\5.00560\chat2.pl" +"\perl5.005\perl5.005_60\lib\complete.pl"-"!:\perl\lib\5.00560\complete.pl" +"\perl5.005\perl5.005_60\lib\constant.pm"-"!:\perl\lib\5.00560\constant.pm" +"\perl5.005\perl5.005_60\lib\ctime.pl"-"!:\perl\lib\5.00560\ctime.pl" +"\perl5.005\perl5.005_60\lib\diagnostics.pm"-"!:\perl\lib\5.00560\diagnostics.pm" +"\perl5.005\perl5.005_60\lib\dotsh.pl"-"!:\perl\lib\5.00560\dotsh.pl" +"\perl5.005\perl5.005_60\lib\dumpvar.pl"-"!:\perl\lib\5.00560\dumpvar.pl" +"\perl5.005\perl5.005_60\lib\exceptions.pl"-"!:\perl\lib\5.00560\exceptions.pl" +"\perl5.005\perl5.005_60\lib\fastcwd.pl"-"!:\perl\lib\5.00560\fastcwd.pl" +"\perl5.005\perl5.005_60\lib\fields.pm"-"!:\perl\lib\5.00560\fields.pm" +"\perl5.005\perl5.005_60\lib\filetest.pm"-"!:\perl\lib\5.00560\filetest.pm" +"\perl5.005\perl5.005_60\lib\find.pl"-"!:\perl\lib\5.00560\find.pl" +"\perl5.005\perl5.005_60\lib\finddepth.pl"-"!:\perl\lib\5.00560\finddepth.pl" +"\perl5.005\perl5.005_60\lib\flush.pl"-"!:\perl\lib\5.00560\flush.pl" +"\perl5.005\perl5.005_60\lib\ftp.pl"-"!:\perl\lib\5.00560\ftp.pl" +"\perl5.005\perl5.005_60\lib\getcwd.pl"-"!:\perl\lib\5.00560\getcwd.pl" +"\perl5.005\perl5.005_60\lib\getopt.pl"-"!:\perl\lib\5.00560\getopt.pl" +"\perl5.005\perl5.005_60\lib\getopts.pl"-"!:\perl\lib\5.00560\getopts.pl" +"\perl5.005\perl5.005_60\lib\hostname.pl"-"!:\perl\lib\5.00560\hostname.pl" +"\perl5.005\perl5.005_60\lib\importenv.pl"-"!:\perl\lib\5.00560\importenv.pl" +"\perl5.005\perl5.005_60\lib\integer.pm"-"!:\perl\lib\5.00560\integer.pm" +"\perl5.005\perl5.005_60\lib\less.pm"-"!:\perl\lib\5.00560\less.pm" +"\perl5.005\perl5.005_60\lib\lib.pm"-"!:\perl\lib\5.00560\lib.pm" +"\perl5.005\perl5.005_60\lib\locale.pm"-"!:\perl\lib\5.00560\locale.pm" +"\perl5.005\perl5.005_60\lib\look.pl"-"!:\perl\lib\5.00560\look.pl" +"\perl5.005\perl5.005_60\lib\newgetopt.pl"-"!:\perl\lib\5.00560\newgetopt.pl" +"\perl5.005\perl5.005_60\lib\open2.pl"-"!:\perl\lib\5.00560\open2.pl" +"\perl5.005\perl5.005_60\lib\open3.pl"-"!:\perl\lib\5.00560\open3.pl" +"\perl5.005\perl5.005_60\lib\overload.pm"-"!:\perl\lib\5.00560\overload.pm" +"\perl5.005\perl5.005_60\lib\perl5db.pl"-"!:\perl\lib\5.00560\perl5db.pl" +"\perl5.005\perl5.005_60\lib\pwd.pl"-"!:\perl\lib\5.00560\pwd.pl" +"\perl5.005\perl5.005_60\lib\shellwords.pl"-"!:\perl\lib\5.00560\shellwords.pl" +"\perl5.005\perl5.005_60\lib\sigtrap.pm"-"!:\perl\lib\5.00560\sigtrap.pm" +"\perl5.005\perl5.005_60\lib\stat.pl"-"!:\perl\lib\5.00560\stat.pl" +"\perl5.005\perl5.005_60\lib\strict.pm"-"!:\perl\lib\5.00560\strict.pm" +"\perl5.005\perl5.005_60\lib\subs.pm"-"!:\perl\lib\5.00560\subs.pm" +"\perl5.005\perl5.005_60\lib\syslog.pl"-"!:\perl\lib\5.00560\syslog.pl" +"\perl5.005\perl5.005_60\lib\tainted.pl"-"!:\perl\lib\5.00560\tainted.pl" +"\perl5.005\perl5.005_60\lib\termcap.pl"-"!:\perl\lib\5.00560\termcap.pl" +"\perl5.005\perl5.005_60\lib\timelocal.pl"-"!:\perl\lib\5.00560\timelocal.pl" +"\perl5.005\perl5.005_60\lib\utf8.pm"-"!:\perl\lib\5.00560\utf8.pm" +"\perl5.005\perl5.005_60\lib\utf8_heavy.pl"-"!:\perl\lib\5.00560\utf8_heavy.pl" +"\perl5.005\perl5.005_60\lib\validate.pl"-"!:\perl\lib\5.00560\validate.pl" +"\perl5.005\perl5.005_60\lib\vars.pm"-"!:\perl\lib\5.00560\vars.pm" +"\perl5.005\perl5.005_60\lib\warning.pm"-"!:\perl\lib\5.00560\warning.pm" +@"\epoc32\release\marm\rel\stdlib.sis",(0x010002c3) diff --git a/ext/ByteLoader/byterun.h b/ext/ByteLoader/byterun.h index 31a9033845..9634688b20 100644 --- a/ext/ByteLoader/byterun.h +++ b/ext/ByteLoader/byterun.h @@ -151,7 +151,12 @@ enum { OPt_COP /* 10 */ }; -EXT void byterun(pTHXo_ struct bytestream bs); +#if defined(CYGWIN) +extern +#else +EXT +#endif +void byterun(pTHXo_ struct bytestream bs); #define INIT_SPECIALSV_LIST STMT_START { \ PL_specialsv_list[0] = Nullsv; \ diff --git a/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c index c1e2e4a8a4..499871dfab 100644 --- a/ext/SDBM_File/sdbm/sdbm.c +++ b/ext/SDBM_File/sdbm/sdbm.c @@ -128,7 +128,7 @@ sdbm_prep(char *dirname, char *pagname, int flags, int mode) * open the files in sequence, and stat the dirfile. * If we fail anywhere, undo everything, return NULL. */ -#if defined(OS2) || defined(MSDOS) || defined(WIN32) +#if defined(OS2) || defined(MSDOS) || defined(WIN32) || defined(CYGWIN) flags |= O_BINARY; # endif if ((db->pagf = open(pagname, flags, mode)) > -1) { diff --git a/ext/Socket/Makefile.PL b/ext/Socket/Makefile.PL index 3819143ac0..339c45a0a1 100644 --- a/ext/Socket/Makefile.PL +++ b/ext/Socket/Makefile.PL @@ -1,7 +1,9 @@ use ExtUtils::MakeMaker; +use Config; WriteMakefile( - NAME => 'Socket', + NAME => 'Socket', VERSION_FROM => 'Socket.pm', - MAN3PODS => {}, # Pods will be built by installman. - XSPROTOARG => '-noprototypes', # XXX remove later? + ($Config{libs} =~ /(-lsocks\S*)/ ? (LIBS => [ "$1" ] ) : ()), + MAN3PODS => {}, # Pods will be built by installman. + XSPROTOARG => '-noprototypes', # XXX remove later? ); diff --git a/global.sym b/global.sym index 7379173182..5ee74d7477 100644 --- a/global.sym +++ b/global.sym @@ -666,3 +666,8 @@ Perl_sv_force_normal Perl_tmps_grow Perl_sv_rvweaken Perl_magic_killbackrefs +Perl_newANONATTRSUB +Perl_newATTRSUB +Perl_newMYSUB +Perl_my_attrs +Perl_boot_core_xsutils @@ -677,6 +677,10 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) } } break; + case 'V': + if (strEQ(name, "VERSION")) + GvMULTI_on(gv); + break; case '&': if (len > 1) @@ -757,7 +761,6 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) case '/': case '|': case '\001': - case '\002': case '\003': case '\004': case '\005': @@ -767,7 +770,6 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) case '\017': case '\020': case '\024': - case '\027': if (len > 1) break; goto magicalize; @@ -775,6 +777,10 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) if (len > 1) break; goto ro_magicalize; + case '\027': /* $^W & $^Warnings */ + if (len > 1 && strNE(name, "\027arnings")) + break; + goto magicalize; case '+': if (len > 1) diff --git a/hints/cygwin.sh b/hints/cygwin.sh index e6d466bfda..23d055faa6 100644 --- a/hints/cygwin.sh +++ b/hints/cygwin.sh @@ -25,6 +25,7 @@ lddlflags='-L/usr/local/lib' useshrplib='true' libperl='libperl.a' dlext='dll' +dynamic_ext=' ' man1dir=/usr/local/man/man1 man3dir=/usr/local/man/man3 diff --git a/hints/machten.sh b/hints/machten.sh index 767283792b..cc663a9efb 100644 --- a/hints/machten.sh +++ b/hints/machten.sh @@ -13,6 +13,9 @@ # Martijn Koster <m.koster@webcrawler.com> # Richard Yeh <rcyeh@cco.caltech.edu> # +# Disable shadow password file access: MT 4.1.1 has necessary library +# functions, but not header file (or documentation) +# -- Dominic Dunlop <domo@computer.org> 990804 # For now, explicitly disable dynamic loading -- MT 4.1.1 has it, # but these hints do not yet support it. # Define NOTEDEF_MACHTEN to undo gratuitous Tenon hack to signal.h. @@ -36,6 +39,13 @@ # # Comments, questions, and improvements welcome! # +# MachTen 4.1.1's support for shadow password file access is incomplete: +# disable its use completely. +d_endspent=${d_endspent:-undef} +d_getspent=${d_getspent:-undef} +d_getspnam=${d_getspnam:-undef} +d_setspent=${d_setspent:-undef} + # MachTen 4.1.1 does support dynamic loading, but perl doesn't # know how to use it yet. usedl=${usedl:-undef} @@ -191,6 +201,11 @@ Similarly, when you see select the default answer: vfork() works, and avoids expensive data copying. +You may also see "WHOA THERE!!!" messages concerning \$d_endspent, +\$d_getspent, \$d_getspnam and \$d_setspent. In all cases, select the +default answer: MachTen's support for shadow password file access is +incomplete, and should not be used. + At the end of Configure, you will see a harmless message Hmm...You had some extra variables I don't know about...I'll try to keep 'em. diff --git a/lib/AutoSplit.pm b/lib/AutoSplit.pm index 33c0b9a03d..feecd58bf1 100644 --- a/lib/AutoSplit.pm +++ b/lib/AutoSplit.pm @@ -11,7 +11,7 @@ use vars qw( $Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime ); -$VERSION = "1.0303"; +$VERSION = "1.0304"; @ISA = qw(Exporter); @EXPORT = qw(&autosplit &autosplit_lib_modules); @EXPORT_OK = qw($Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime); @@ -147,6 +147,13 @@ if (defined (&Dos::UseLFN)) { } my $Is_VMS = ($^O eq 'VMS'); +# allow checking for valid ': attrlist' attachments +my $nested; +$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) [\s,]* }x; +my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; + + sub autosplit{ my($file, $autodir, $keep, $ckal, $ckmt) = @_; @@ -289,7 +296,7 @@ sub autosplit_file { if (/^package\s+([\w:]+)\s*;/) { $this_package = $def_package = $1; } - if (/^sub\s+([\w:]+)(\s*\(.*?\))?/) { + if (/^sub\s+([\w:]+)(\s*(?:\(.*?\))?(?:$attr_list)?)/) { print OUT "# end of $last_package\::$subname\n1;\n" if $last_package; $subname = $1; @@ -459,3 +466,6 @@ sub test6 { return join ":", __FILE__,__LINE__; } package Yet::Another::AutoSplit; sub testtesttesttest4_1 ($) { "another test 4\n"; } sub testtesttesttest4_2 ($$) { "another duplicate test 4\n"; } +package Yet::More::Attributes; +sub test_a1 ($) : locked { 1; } +sub test_a2 : locked { 1; } diff --git a/lib/ExtUtils/Install.pm b/lib/ExtUtils/Install.pm index 74bd99b147..47bde0deb0 100644 --- a/lib/ExtUtils/Install.pm +++ b/lib/ExtUtils/Install.pm @@ -134,13 +134,13 @@ sub install { }, "."); chdir($cwd) or Carp::croak("Couldn't chdir to $cwd: $!"); } - umask $umask unless $Is_VMS; if ($pack{'write'}) { $dir = dirname($pack{'write'}); mkpath($dir,0,0755); print "Writing $pack{'write'}\n"; $packlist->write($pack{'write'}); } + umask $umask unless $Is_VMS; } sub directory_not_empty ($) { diff --git a/lib/SelfLoader.pm b/lib/SelfLoader.pm index c4e9175a79..4672ac49da 100644 --- a/lib/SelfLoader.pm +++ b/lib/SelfLoader.pm @@ -3,12 +3,18 @@ package SelfLoader; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(AUTOLOAD); -$VERSION = "1.08"; +$VERSION = "1.09"; sub Version {$VERSION} $DEBUG = 0; my %Cache; # private cache for all SelfLoader's client packages +# allow checking for valid ': attrlist' attachments +my $nested; +$nested = qr{ \( (?: (?> [^()]+ ) | (?p{ $nested }) )* \) }x; +my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) [\s,]* }x; +my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x; + sub croak { require Carp; goto &Carp::croak } AUTOLOAD { @@ -50,7 +56,7 @@ sub _load_stubs { local($/) = "\n"; while(defined($line = <$fh>) and $line !~ m/^__END__/) { - if ($line =~ m/^sub\s+([\w:]+)\s*(\([\\\$\@\%\&\*\;]*\))?/) { + if ($line =~ m/^sub\s+([\w:]+)\s*((?:\([\\\$\@\%\&\*\;]*\))?(?:$attr_list)?)/) { push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype)); $protoype = $2; @lines = ($line); diff --git a/lib/attributes.pm b/lib/attributes.pm new file mode 100644 index 0000000000..e49204fc76 --- /dev/null +++ b/lib/attributes.pm @@ -0,0 +1,379 @@ +package attributes; + +$VERSION = 0.01; + +#@EXPORT_OK = qw(get reftype); +#@EXPORT = (); + +use strict; + +sub croak { + require Carp; + goto &Carp::croak; +} + +sub carp { + require Carp; + goto &Carp::carp; +} + +## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{} +#sub reftype ($) ; +#sub _fetch_attrs ($) ; +#sub _guess_stash ($) ; +#sub _modify_attrs ; +#sub _warn_reserved () ; +# +# The extra trips through newATTRSUB in the interpreter wipe out any savings +# from avoiding the BEGIN block. Just do the bootstrap now. +BEGIN { bootstrap } + +sub import { + @_ > 2 && ref $_[2] or + croak 'Usage: use '.__PACKAGE__.' $home_stash, $ref, @attrlist'; + my (undef,$home_stash,$svref,@attrs) = @_; + + my $svtype = uc reftype($svref); + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES") + if defined $home_stash && $home_stash ne ''; + my @badattrs; + if ($pkgmeth) { + my @pkgattrs = _modify_attrs($svref, @attrs); + @badattrs = $pkgmeth->($home_stash, $svref, @attrs); + if (!@badattrs && @pkgattrs) { + return unless _warn_reserved; + @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs; + if (@pkgattrs) { + for my $attr (@pkgattrs) { + $attr =~ s/\(.+\z//s; + } + my $s = ((@pkgattrs == 1) ? '' : 's'); + carp "$svtype package attribute$s " . + "may clash with future reserved word$s: " . + join(' , ' , @pkgattrs); + } + } + } + else { + @badattrs = _modify_attrs($svref, @attrs); + } + if (@badattrs) { + croak "Invalid $svtype attribute" . + (( @badattrs == 1 ) ? '' : 's') . + ": " . + join(' , ', @badattrs); + } +} + +sub get ($) { + @_ == 1 && ref $_[0] or + croak 'Usage: '.__PACKAGE__.'::get $ref'; + my $svref = shift; + my $svtype = uc reftype $svref; + my $stash = _guess_stash $svref; + $stash = caller unless defined $stash; + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES") + if defined $stash && $stash ne ''; + return $pkgmeth ? + (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) : + (_fetch_attrs($svref)) + ; +} + +#sub export { +# require Exporter; +# goto &Exporter::import; +#} +# +#sub require_version { goto &UNIVERSAL::VERSION } + +1; +__END__ +#The POD goes here + +=head1 NAME + +attributes - get/set subroutine or variable attributes + +=head1 SYNOPSIS + + sub foo : method ; + my ($x,@y,%z) : Bent ; + my $s = sub : method { ... }; + + use attributes (); # optional, to get subroutine declarations + my @attrlist = attributes::get(\&foo); + +=head1 DESCRIPTION + +Subroutine declarations and definitions may optionally have attribute lists +associated with them. (Variable C<my> declarations also may, but see the +warning below.) Perl handles these declarations by passing some information +about the call site and the thing being declared along with the attribute +list to this module. In particular, first example above is equivalent to +the following: + + use attributes __PACKAGE__, \&foo, 'method'; + +The second example in the synopsis does something equivalent to this: + + use attributes __PACKAGE__, \$x, 'Bent'; + use attributes __PACKAGE__, \@y, 'Bent'; + use attributes __PACKAGE__, \%z, 'Bent'; + +Yes, that's three invocations. + +B<WARNING>: attribute declarations for variables are an I<experimental> +feature. The semantics of such declarations could change or be removed +in future versions. They are present for purposes of experimentation +with what the semantics ought to be. Do not rely on the current +implementation of this feature. + +There are only a few attributes currently handled by Perl itself (or +directly by this module, depending on how you look at it.) However, +package-specific attributes are allowed by an extension mechanism. +(See L<"Package-specific Attribute Handling"> below.) + +The setting of attributes happens at compile time. An attempt to set +an unrecognized attribute is a fatal error. (The error is trappable, but +it still stops the compilation within that C<eval>.) Setting an attribute +with a name that's all lowercase letters that's not a built-in attribute +(such as "foo") +will result in a warning with B<-w> or C<use warnings 'reserved'>. + +=head2 Built-in Attributes + +The following are the built-in attributes for subroutines: + +=over 4 + +=item locked + +Setting this attribute is only meaningful when the subroutine or +method is to be called by multiple threads. When set on a method +subroutine (i.e., one marked with the B<method> attribute below), +Perl ensures that any invocation of it implicitly locks its first +argument before execution. When set on a non-method subroutine, +Perl ensures that a lock is taken on the subroutine itself before +execution. The semantics of the lock are exactly those of one +explicitly taken with the C<lock> operator immediately after the +subroutine is entered. + +=item method + +Indicates that the referenced subroutine is a method. +This has a meaning when taken together with the B<locked> attribute, +as described there. It also means that a subroutine so marked +will not trigger the "Ambiguous call resolved as CORE::%s" warning. + +=back + +There are no built-in attributes for anything other than subroutines. + +=head2 Available Subroutines + +The following subroutines are available for general use once this module +has been loaded: + +=over 4 + +=item get + +This routine expects a single parameter--a reference to a +subroutine or variable. It returns a list of attributes, which may be +empty. If passed invalid arguments, it uses die() (via L<Carp::croak|Carp>) +to raise a fatal exception. If it can find an appropriate package name +for a class method lookup, it will include the results from a +C<FETCH_I<type>_ATTRIBUTES> call in its return list, as described in +L"Package-specific Attribute Handling"> below. +Otherwise, only L<built-in attributes|"Built-in Attributes"> will be returned. + +=item reftype + +This routine expects a single parameter--a reference to a subroutine or +variable. It returns the built-in type of the referenced variable, +ignoring any package into which it might have been blessed. +This can be useful for determining the I<type> value which forms part of +the method names described in L"Package-specific Attribute Handling"> below. + +=back + +Note that these routines are I<not> exported. This is primarily because +the C<use> mechanism which would normally import them is already in use +by Perl itself to implement the C<sub : attributes> syntax. + +=head2 Package-specific Attribute Handling + +B<WARNING>: the mechanisms described here are still experimental. Do not +rely on the current implementation. In particular, there is no provision +for applying package attributes to 'cloned' copies of subroutines used as +closures. (See L<perlref/"Making References"> for information on closures.) +Package-specific attribute handling may change incompatibly in a future +release. + +When an attribute list is present in a declaration, a check is made to see +whether an attribute 'modify' handler is present in the appropriate package +(or its @ISA inheritance tree). Similarly, when C<attributes::get> is +called on a valid reference, a check is made for an appropriate attribute +'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package" +determination works. + +The handler names are based on the underlying type of the variable being +declared or of the reference passed. Because these attributes are +associated with subroutine or variable declarations, this deliberately +ignores any possibility of being blessed into some package. Thus, a +subroutine declaration uses "CODE" as its I<type>, and even a blessed +hash reference uses "HASH" as its I<type>. + +The class methods invoked for modifying and fetching are these: + +=over 4 + +=item FETCH_I<type>_ATTRIBUTES + +This method receives a single argument, which is a reference to the +variable or subroutine for which package-defined attributes are desired. +The expected return value is a list of associated attributes. +This list may be empty. + +=item MODIFY_I<type>_ATTRIBUTES + +This method is called with two fixed arguments, followed by the list of +attributes from the relevant declaration. The two fixed arguments are +the relevant package name and a reference to the declared subroutine or +variable. The expected return value as a list of attributes which were +not recognized by this handler. Note that this allows for a derived class +to delegate a call to its base class, and then only examine the attributes +which the base class didn't already handle for it. + +The call to this method is currently made I<during> the processing of the +declaration. In particular, this means that a subroutine reference will +probably be for an undefined subroutine, even if this declaration is +actually part of the definition. + +=back + +Calling C<attributes::get()> from within the scope of a null package +declaration C<package ;> for an unblessed variable reference will +not provide any starting package name for the 'fetch' method lookup. +Thus, this circumstance will not result in a method call for package-defined +attributes. A named subroutine knows to which symbol table entry it belongs +(or originally belonged), and it will use the corresponding package. +An anonymous subroutine knows the package name into which it was compiled +(unless it was also compiled with a null package declaration), and so it +will use that package name. + +=head2 Syntax of Attribute Lists + +An attribute list is a sequence of attribute specifications, separated by +whitespace, commas, or both. Each attribute specification is a simple +name, optionally followed by a parenthesised parameter list. +If such a parameter list is present, it is scanned past as for the rules +for the C<q()> operator. (See L<perlop/"Quote and Quote-like Operators">.) +The parameter list is passed as it was found, however, and not as per C<q()>. + +Some examples of syntactically valid attribute lists: + + switch(10,foo(7,3)) , , expensive + Ugly('\(") , Bad + _5x5 + locked method + +Some examples of syntactically invalid attribute lists (with annotation): + + switch(10,foo() # ()-string not balanced + Ugly('(') # ()-string not balanced + 5x5 # "5x5" not a valid identifier + Y2::north # "Y2::north" not a simple identifier + foo + bar # "+" neither a comma nor whitespace + +=head1 EXAMPLES + +Here are some samples of syntactically valid declarations, with annotation +as to how they resolve internally into C<use attributes> invocations by +perl. These examples are primarily useful to see how the "appropriate +package" is found for the possible method lookups for package-defined +attributes. + +=over 4 + +=item 1. + +Code: + + package Canine; + package Dog; + my Canine $spot : Watchful ; + +Effect: + + use attributes Canine => \$spot, "Watchful"; + +=item 2. + +Code: + + package Felis; + my $cat : Nervous; + +Effect: + + use attributes Felis => \$cat, "Nervous"; + +=item 3. + +Code: + + package X; + sub foo : locked ; + +Effect: + + use attributes X => \&foo, "locked"; + +=item 4. + +Code: + + package X; + sub Y::x : locked { 1 } + +Effect: + + use attributes Y => \&Y::x, "locked"; + +=item 5. + +Code: + + package X; + sub foo { 1 } + + package Y; + BEGIN { *bar = \&X::foo; } + + package Z; + sub Y::bar : locked ; + +Effect: + + use attributes X => \&X::foo, "locked"; + +=back + +This last example is purely for purposes of completeness. You should not +be trying to mess with the attributes of something in a package that's +not your own. + +=head1 SEE ALSO + +L<perlsub/"Private Variables via my()"> and +L<perlsub/"Subroutine Attributes"> for details on the basic declarations; +L<attrs> for the obsolescent form of subroutine attribute specification +which this module replaces; +L<perlfunc/use> for details on the normal invocation mechanism. + +=cut + diff --git a/lib/charnames.pm b/lib/charnames.pm index e407ff7c8a..bd97983abc 100644 --- a/lib/charnames.pm +++ b/lib/charnames.pm @@ -60,28 +60,28 @@ __END__ =head1 NAME -charnames - define character names for C<\C{named}> string literal escape. +charnames - define character names for C<\N{named}> string literal escape. =head1 SYNOPSIS use charnames ':full'; - print "\C{GREEK SMALL LETTER SIGMA} is called sigma.\n"; + print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n"; use charnames ':short'; - print "\C{greek:Sigma} is an upper-case sigma.\n"; + print "\N{greek:Sigma} is an upper-case sigma.\n"; use charnames qw(cyrillic greek); - print "\C{sigma} is Greek sigma, and \C{be} is Cyrillic b.\n"; + print "\N{sigma} is Greek sigma, and \N{be} is Cyrillic b.\n"; =head1 DESCRIPTION Pragma C<use charnames> supports arguments C<:full>, C<:short> and script names. If C<:full> is present, for expansion of -C<\C{CHARNAME}}> string C<CHARNAME> is first looked in the list of +C<\N{CHARNAME}}> string C<CHARNAME> is first looked in the list of standard Unicode names of chars. If C<:short> is present, and C<CHARNAME> has the form C<SCRIPT:CNAME>, then C<CNAME> is looked up as a letter in script C<SCRIPT>. If pragma C<use charnames> is used -with script name arguments, then for C<\C{CHARNAME}}> the name +with script name arguments, then for C<\N{CHARNAME}}> the name C<CHARNAME> is looked up as a letter in the given scripts (in the specified order). @@ -98,7 +98,7 @@ ignored. =head1 CUSTOM TRANSLATORS -The mechanism of translation is C<\C{...}> escapes is general and not +The mechanism of translation is C<\N{...}> escapes is general and not hardwired into F<charnames.pm>. A module can install custom translations (inside the scope which C<use>s the module) by the following magic incantation: @@ -111,7 +111,7 @@ following magic incantation: Here translator() is a subroutine which takes C<CHARNAME> as an argument, and returns text to insert into the string instead of the -C<\C{CHARNAME}> escape. Since the text to insert should be different +C<\N{CHARNAME}> escape. Since the text to insert should be different in C<utf8> mode and out of it, the function should check the current state of C<utf8>-flag as in diff --git a/lib/perl5db.pl b/lib/perl5db.pl index 18d52dc88e..0eac573901 100644 --- a/lib/perl5db.pl +++ b/lib/perl5db.pl @@ -2,7 +2,7 @@ package DB; # Debugger for Perl 5.00x; perl5db.pl patch level: -$VERSION = 1.0402; +$VERSION = 1.0403; $header = "perl5db.pl version $VERSION"; # Enhanced by ilya@math.ohio-state.edu (Ilya Zakharevich) @@ -478,7 +478,7 @@ EOP if $single & 4; $start = $line; $incr = -1; # for backward motion. - @typeahead = @$pretype, @typeahead; + @typeahead = (@$pretype, @typeahead); CMD: while (($term || &setterm), ($term_pid == $$ or &resetterm), diff --git a/lib/unicode/Eq/Latin1 b/lib/unicode/Eq/Latin1 index b184e3c472..b85bb3b61b 100644 --- a/lib/unicode/Eq/Latin1 +++ b/lib/unicode/Eq/Latin1 @@ -3,14 +3,14 @@ 0045 00C8 00C9 00CA 00CB 0049 00CC 00CD 00CE 00CF 004E 00D1 -004F 00D2 00D3 00D4 00D5 00D6 00D8 +004F 00D2 00D3 00D4 00D5 00D6 0055 00D9 00DA 00DB 00DC 0059 00DD -0061 00E0 00E1 00E2 00E3 00E4 00E5 +0061 00AA 00E0 00E1 00E2 00E3 00E4 00E5 0063 00E7 0065 00E8 00E9 00EA 00EB 0069 00EC 00ED 00EE 00EF 006E 00F1 -006F 00F2 00F3 00F4 00F5 00F6 00F8 +006F 00BA 00F2 00F3 00F4 00F5 00F6 0075 00F9 00FA 00FB 00FC 0079 00FD 00FF diff --git a/lib/unicode/Eq/Unicode b/lib/unicode/Eq/Unicode index f3a9827912..a7d8feaa5b 100644 --- a/lib/unicode/Eq/Unicode +++ b/lib/unicode/Eq/Unicode @@ -1,181 +1,639 @@ -0041 00C0 00C1 00C2 00C3 00C4 00C5 0100 0102 0104 01CD 01DE 01E0 01FA 0200 0202 0226 1E00 1EA0 1EA2 1EA4 1EA6 1EA8 1EAA 1EAC 1EAE 1EB0 1EB2 1EB4 1EB6 -0042 0181 0182 1E02 1E04 1E06 -0043 00C7 0106 0108 010A 010C 0187 1E08 -0044 010E 0110 018A 018B 01C5 01F2 1E0A 1E0C 1E0E 1E10 1E12 -0045 00C8 00C9 00CA 00CB 0112 0114 0116 0118 011A 0204 0206 0228 1E14 1E16 1E18 1E1A 1E1C 1EB8 1EBA 1EBC 1EBE 1EC0 1EC2 1EC4 1EC6 -0046 0191 1E1E -0047 011C 011E 0120 0122 0193 01E4 01E6 01F4 1E20 -0048 0124 0126 021E 1E22 1E24 1E26 1E28 1E2A -0049 00CC 00CD 00CE 00CF 0128 012A 012C 012E 0130 0197 01CF 0208 020A 1E2C 1E2E 1EC8 1ECA -004A 0134 -004B 0136 0198 01E8 1E30 1E32 1E34 -004C 0139 013B 013D 013F 0141 01C8 1E36 1E38 1E3A 1E3C -004D 1E3E 1E40 1E42 -004E 00D1 0143 0145 0147 019D 01CB 01F8 1E44 1E46 1E48 1E4A -004F 00D2 00D3 00D4 00D5 00D6 00D8 014C 014E 0150 019F 01A0 01D1 01EA 01EC 01FE 020C 020E 022A 022C 022E 0230 1E4C 1E4E 1E50 1E52 1ECC 1ECE 1ED0 1ED2 1ED4 1ED6 1ED8 1EDA 1EDC 1EDE 1EE0 1EE2 -0050 01A4 1E54 1E56 -0052 0154 0156 0158 0210 0212 1E58 1E5A 1E5C 1E5E -0053 015A 015C 015E 0160 0218 1E60 1E62 1E64 1E66 1E68 -0054 0162 0164 0166 01AC 01AE 021A 1E6A 1E6C 1E6E 1E70 -0055 00D9 00DA 00DB 00DC 0168 016A 016C 016E 0170 0172 01AF 01D3 01D5 01D7 01D9 01DB 0214 0216 1E72 1E74 1E76 1E78 1E7A 1EE4 1EE6 1EE8 1EEA 1EEC 1EEE 1EF0 -0056 01B2 1E7C 1E7E -0057 0174 1E80 1E82 1E84 1E86 1E88 -0058 1E8A 1E8C -0059 00DD 0176 0178 01B3 0232 1E8E 1EF2 1EF4 1EF6 1EF8 -005A 0179 017B 017D 01B5 0224 1E90 1E92 1E94 -0061 00E0 00E1 00E2 00E3 00E4 00E5 0101 0103 0105 01CE 01DF 01E1 01FB 0201 0203 0227 1E01 1E9A 1EA1 1EA3 1EA5 1EA7 1EA9 1EAB 1EAD 1EAF 1EB1 1EB3 1EB5 1EB7 -0062 0180 0183 0253 1E03 1E05 1E07 -0063 00E7 0107 0109 010B 010D 0188 0255 1E09 -0064 010F 0111 018C 0256 0257 1E0B 1E0D 1E0F 1E11 1E13 -0065 00E8 00E9 00EA 00EB 0113 0115 0117 0119 011B 0205 0207 0229 1E15 1E17 1E19 1E1B 1E1D 1EB9 1EBB 1EBD 1EBF 1EC1 1EC3 1EC5 1EC7 -0066 0192 1E1F -0067 011D 011F 0121 0123 01E5 01E7 01F5 0260 1E21 -0068 0125 0127 021F 0266 1E23 1E25 1E27 1E29 1E2B 1E96 -0069 00EC 00ED 00EE 00EF 0129 012B 012D 012F 01D0 0209 020B 0268 1E2D 1E2F 1EC9 1ECB -006A 0135 01F0 029D -006B 0137 0199 01E9 1E31 1E33 1E35 -006C 013A 013C 013E 0140 0142 019A 026B 026C 026D 1E37 1E39 1E3B 1E3D -006D 0271 1E3F 1E41 1E43 -006E 00F1 0144 0146 0148 019E 01F9 0272 0273 1E45 1E47 1E49 1E4B -006F 00F2 00F3 00F4 00F5 00F6 00F8 014D 014F 0151 01A1 01D2 01EB 01ED 01FF 020D 020F 022B 022D 022F 0231 1E4D 1E4F 1E51 1E53 1ECD 1ECF 1ED1 1ED3 1ED5 1ED7 1ED9 1EDB 1EDD 1EDF 1EE1 1EE3 -0070 01A5 1E55 1E57 -0071 02A0 -0072 0155 0157 0159 0211 0213 027C 027D 027E 1E59 1E5B 1E5D 1E5F -0073 015B 015D 015F 0161 0219 0282 1E61 1E63 1E65 1E67 1E69 -0074 0163 0165 0167 01AB 01AD 021B 0288 1E6B 1E6D 1E6F 1E71 1E97 -0075 00F9 00FA 00FB 00FC 0169 016B 016D 016F 0171 0173 01B0 01D4 01D6 01D8 01DA 01DC 0215 0217 1E73 1E75 1E77 1E79 1E7B 1EE5 1EE7 1EE9 1EEB 1EED 1EEF 1EF1 -0076 028B 1E7D 1E7F -0077 0175 1E81 1E83 1E85 1E87 1E89 1E98 -0078 1E8B 1E8D -0079 00FD 00FF 0177 01B4 0233 1E8F 1E99 1EF3 1EF5 1EF7 1EF9 -007A 017A 017C 017E 01B6 0225 0290 0291 1E91 1E93 1E95 +0020 037A FC5E FC5F FC60 FC61 FC62 FC63 FE70 FE72 FE74 FE76 FE78 FE7A FE7C FE7E +0041 00C0 00C1 00C2 00C3 00C4 00C5 0100 0102 0104 01CD 0200 0202 0226 1E00 1EA0 1EA2 FF21 +0042 1E02 1E04 1E06 212C FF22 +0043 00C7 0106 0108 010A 010C 2102 212D FF23 +0044 010E 01C4 01C5 01F1 01F2 1E0A 1E0C 1E0E 1E10 1E12 FF24 +0045 00C8 00C9 00CA 00CB 0112 0114 0116 0118 011A 0204 0206 0228 1E18 1E1A 1EB8 1EBA 1EBC 2130 FF25 +0046 1E1E 2131 FF26 +0047 011C 011E 0120 0122 01E6 01F4 1E20 FF27 +0048 0124 021E 1E22 1E24 1E26 1E28 1E2A 210B 210C 210D FF28 +0049 00CC 00CD 00CE 00CF 0128 012A 012C 012E 0130 0132 01CF 0208 020A 1E2C 1EC8 1ECA 2110 2111 FF29 +004A 0134 FF2A +004B 0136 01E8 1E30 1E32 1E34 212A FF2B +004C 0139 013B 013D 013F 01C7 01C8 1E36 1E3A 1E3C 2112 FF2C +004D 1E3E 1E40 1E42 2133 FF2D +004E 00D1 0143 0145 0147 01CA 01CB 01F8 1E44 1E46 1E48 1E4A 2115 FF2E +004F 00D2 00D3 00D4 00D5 00D6 014C 014E 0150 01A0 01D1 01EA 020C 020E 022E 1ECC 1ECE FF2F +0050 1E54 1E56 2119 FF30 +0051 211A FF31 +0052 0154 0156 0158 0210 0212 1E58 1E5A 1E5E 211B 211C 211D FF32 +0053 015A 015C 015E 0160 0218 1E60 1E62 FF33 +0054 0162 0164 021A 1E6A 1E6C 1E6E 1E70 FF34 +0055 00D9 00DA 00DB 00DC 0168 016A 016C 016E 0170 0172 01AF 01D3 0214 0216 1E72 1E74 1E76 1EE4 1EE6 FF35 +0056 1E7C 1E7E FF36 +0057 0174 1E80 1E82 1E84 1E86 1E88 FF37 +0058 1E8A 1E8C FF38 +0059 00DD 0176 0178 0232 1E8E 1EF2 1EF4 1EF6 1EF8 FF39 +005A 0179 017B 017D 1E90 1E92 1E94 2124 2128 FF3A +0061 00AA 00E0 00E1 00E2 00E3 00E4 00E5 0101 0103 0105 01CE 0201 0203 0227 1E01 1E9A 1EA1 1EA3 FF41 +0062 1E03 1E05 1E07 FF42 +0063 00E7 0107 0109 010B 010D FF43 +0064 010F 01C6 01F3 1E0B 1E0D 1E0F 1E11 1E13 FF44 +0065 00E8 00E9 00EA 00EB 0113 0115 0117 0119 011B 0205 0207 0229 1E19 1E1B 1EB9 1EBB 1EBD 212F FF45 +0066 1E1F FB00 FB01 FB02 FB03 FB04 FF46 +0067 011D 011F 0121 0123 01E7 01F5 1E21 210A FF47 +0068 0125 021F 02B0 1E23 1E25 1E27 1E29 1E2B 1E96 210E FF48 +0069 00EC 00ED 00EE 00EF 0129 012B 012D 012F 0133 01D0 0209 020B 1E2D 1EC9 1ECB 2139 FF49 +006A 0135 01F0 02B2 FF4A +006B 0137 01E9 1E31 1E33 1E35 FF4B +006C 013A 013C 013E 0140 01C9 02E1 1E37 1E3B 1E3D 2113 FF4C +006D 1E3F 1E41 1E43 FF4D +006E 00F1 0144 0146 0148 01CC 01F9 1E45 1E47 1E49 1E4B 207F FF4E +006F 00BA 00F2 00F3 00F4 00F5 00F6 014D 014F 0151 01A1 01D2 01EB 020D 020F 022F 1ECD 1ECF 2134 FF4F +0070 1E55 1E57 FF50 +0071 FF51 +0072 0155 0157 0159 0211 0213 02B3 1E59 1E5B 1E5F FF52 +0073 015B 015D 015F 0161 017F 0219 02E2 1E61 1E63 FB06 FF53 +0074 0163 0165 021B 1E6B 1E6D 1E6F 1E71 1E97 FF54 +0075 00F9 00FA 00FB 00FC 0169 016B 016D 016F 0171 0173 01B0 01D4 0215 0217 1E73 1E75 1E77 1EE5 1EE7 FF55 +0076 1E7D 1E7F FF56 +0077 0175 02B7 1E81 1E83 1E85 1E87 1E89 1E98 FF57 +0078 02E3 1E8B 1E8D FF58 +0079 00FD 00FF 0177 0233 02B8 1E8F 1E99 1EF3 1EF5 1EF7 1EF9 FF59 +007A 017A 017C 017E 1E91 1E93 1E95 FF5A +00C2 1EA4 1EA6 1EA8 1EAA +00C4 01DE +00C5 01FA 212B 00C6 01E2 01FC +00C7 1E08 +00CA 1EBE 1EC0 1EC2 1EC4 +00CF 1E2E +00D4 1ED0 1ED2 1ED4 1ED6 +00D5 022C 1E4C 1E4E +00D6 022A +00D8 01FE +00DC 01D5 01D7 01D9 01DB +00E2 1EA5 1EA7 1EA9 1EAB +00E4 01DF +00E5 01FB 00E6 01E3 01FD -017F 1E9B +00E7 1E09 +00EA 1EBF 1EC1 1EC3 1EC5 +00EF 1E2F +00F4 1ED1 1ED3 1ED5 1ED7 +00F5 022D 1E4D 1E4F +00F6 022B +00F8 01FF +00FC 01D6 01D8 01DA 01DC +0102 1EAE 1EB0 1EB2 1EB4 +0103 1EAF 1EB1 1EB3 1EB5 +0112 1E14 1E16 +0113 1E15 1E17 +0127 210F +014C 1E50 1E52 +014D 1E51 1E53 +015A 1E64 +015B 1E65 +0160 1E66 +0161 1E67 +0168 1E78 +0169 1E79 +016A 1E7A +016B 1E7B +017F 1E9B FB05 +0190 2107 +01A0 1EDA 1EDC 1EDE 1EE0 1EE2 +01A1 1EDB 1EDD 1EDF 1EE1 1EE3 +01AF 1EE8 1EEA 1EEC 1EEE 1EF0 +01B0 1EE9 1EEB 1EED 1EEF 1EF1 01B7 01EE -01F1 01C4 -01F3 01C6 -0259 025A -025C 025D -0262 029B -026F 0270 -0279 027A 027B -0283 0286 -0292 01BA 01EF 0293 -0294 02A1 -0296 01BE -02A3 02A5 -02B0 02B1 -02B4 02B5 -0391 0386 1F08 1F09 1F0A 1F0B 1F0C 1F0D 1F0E 1F0F 1F88 1F89 1F8A 1F8B 1F8C 1F8D 1F8E 1F8F 1FB8 1FB9 1FBA 1FBB 1FBC -0395 0388 1F18 1F19 1F1A 1F1B 1F1C 1F1D 1FC8 1FC9 -0397 0389 1F28 1F29 1F2A 1F2B 1F2C 1F2D 1F2E 1F2F 1F98 1F99 1F9A 1F9B 1F9C 1F9D 1F9E 1F9F 1FCA 1FCB 1FCC -0399 038A 03AA 1F38 1F39 1F3A 1F3B 1F3C 1F3D 1F3E 1F3F 1FD8 1FD9 1FDA 1FDB -039F 038C 1F48 1F49 1F4A 1F4B 1F4C 1F4D 1FF8 1FF9 +01EA 01EC +01EB 01ED +0226 01E0 +0227 01E1 +0228 1E1C +0229 1E1D +022E 0230 +022F 0231 +0263 02E0 +0266 02B1 +0279 02B4 +027B 02B5 +0281 02B6 +0292 01EF +0295 02E4 +02BC 0149 +0386 1FBB +0388 1FC9 +0389 1FCB +038A 1FDB +038C 1FF9 +038E 1FEB +038F 1FFB +0390 1FD3 +0391 0386 1F08 1F09 1FB8 1FB9 1FBA 1FBC +0395 0388 1F18 1F19 1FC8 +0397 0389 1F28 1F29 1FCA 1FCC +0399 038A 03AA 1F38 1F39 1FD8 1FD9 1FDA +039F 038C 1F48 1F49 1FF8 03A1 1FEC -03A5 038E 03AB 1F59 1F5B 1F5D 1F5F 1FE8 1FE9 1FEA 1FEB -03A9 038F 1F68 1F69 1F6A 1F6B 1F6C 1F6D 1F6E 1F6F 1FA8 1FA9 1FAA 1FAB 1FAC 1FAD 1FAE 1FAF 1FFA 1FFB 1FFC -03B1 03AC 1F00 1F01 1F02 1F03 1F04 1F05 1F06 1F07 1F70 1F71 1F80 1F81 1F82 1F83 1F84 1F85 1F86 1F87 1FB0 1FB1 1FB2 1FB3 1FB4 1FB6 1FB7 -03B5 03AD 1F10 1F11 1F12 1F13 1F14 1F15 1F72 1F73 -03B7 03AE 1F20 1F21 1F22 1F23 1F24 1F25 1F26 1F27 1F74 1F75 1F90 1F91 1F92 1F93 1F94 1F95 1F96 1F97 1FC2 1FC3 1FC4 1FC6 1FC7 -03B9 0390 03AF 03CA 1F30 1F31 1F32 1F33 1F34 1F35 1F36 1F37 1F76 1F77 1FD0 1FD1 1FD2 1FD3 1FD6 1FD7 -03BF 03CC 1F40 1F41 1F42 1F43 1F44 1F45 1F78 1F79 -03C1 1FE4 1FE5 -03C5 03B0 03CB 03CD 1F50 1F51 1F52 1F53 1F54 1F55 1F56 1F57 1F7A 1F7B 1FE0 1FE1 1FE2 1FE3 1FE6 1FE7 -03C9 03CE 1F60 1F61 1F62 1F63 1F64 1F65 1F66 1F67 1F7C 1F7D 1FA0 1FA1 1FA2 1FA3 1FA4 1FA5 1FA6 1FA7 1FF2 1FF3 1FF4 1FF6 1FF7 +03A5 038E 03AB 03D2 1F59 1FE8 1FE9 1FEA +03A9 038F 1F68 1F69 1FFA 1FFC 2126 +03AC 1F71 1FB4 +03AD 1F73 +03AE 1F75 1FC4 +03AF 1F77 +03B0 1FE3 +03B1 03AC 1F00 1F01 1F70 1FB0 1FB1 1FB3 1FB6 +03B2 03D0 +03B5 03AD 1F10 1F11 1F72 +03B7 03AE 1F20 1F21 1F74 1FC3 1FC6 +03B8 03D1 +03B9 03AF 03CA 1F30 1F31 1F76 1FBE 1FD0 1FD1 1FD6 +03BA 03F0 +03BC 00B5 +03BF 03CC 1F40 1F41 1F78 +03C0 03D6 +03C1 03F1 1FE4 1FE5 +03C2 03F2 +03C5 03CB 03CD 1F50 1F51 1F7A 1FE0 1FE1 1FE6 +03C6 03D5 +03C9 03CE 1F60 1F61 1F7C 1FF3 1FF6 +03CA 0390 1FD2 1FD7 +03CB 03B0 1FE2 1FE7 +03CC 1F79 +03CD 1F7B +03CE 1F7D 1FF4 +03D2 03D3 03D4 +0406 0407 0410 04D0 04D2 -0413 0490 0492 0494 -0415 0400 04D6 -0416 0496 04C1 04DC -0417 0498 04DE -0418 040D 04E2 04E4 -041A 049A 049C 049E 04C3 -041D 04A2 04C7 +0413 0403 +0415 0400 0401 04D6 +0416 04C1 04DC +0417 04DE +0418 040D 0419 04E2 04E4 +041A 040C 041E 04E6 -041F 04A6 -0420 048E -0421 04AA -0422 04AC -0423 04EE 04F0 04F2 -0425 04B2 -0427 04B6 04B8 04F4 +0423 040E 04EE 04F0 04F2 +0427 04F4 042B 04F8 042D 04EC 0430 04D1 04D3 -0433 0491 0493 0495 -0435 0450 04D7 -0436 0497 04C2 04DD -0437 0499 04DF -0438 045D 04E3 04E5 -043A 049B 049D 049F 04C4 -043D 04A3 04C8 +0433 0453 +0435 0450 0451 04D7 +0436 04C2 04DD +0437 04DF +0438 0439 045D 04E3 04E5 +043A 045C 043E 04E7 -043F 04A7 -0440 048F -0441 04AB -0442 04AD -0443 04EF 04F1 04F3 -0445 04B3 -0447 04B7 04B9 04F5 +0443 045E 04EF 04F1 04F3 +0447 04F5 044B 04F9 044D 04ED -0460 047C -0461 047D +0456 0457 0474 0476 0475 0477 -04AE 04B0 -04AF 04B1 -04BC 04BE -04BD 04BF 04D8 04DA 04D9 04DB 04E8 04EA 04E9 04EB -05D0 FB2E FB2F FB30 -05D1 FB31 FB4C -05D2 FB32 -05D3 FB33 -05D4 FB34 +0565 0587 +0574 FB13 FB14 FB15 FB17 +057E FB16 +05D0 2135 FB21 FB2E FB2F FB30 FB4F +05D1 2136 FB31 FB4C +05D2 2137 FB32 +05D3 2138 FB22 FB33 +05D4 FB23 FB34 05D5 FB35 FB4B 05D6 FB36 05D8 FB38 05D9 FB1D FB39 05DA FB3A -05DB FB3B FB4D -05DC FB3C +05DB FB24 FB3B FB4D +05DC FB25 FB3C +05DD FB26 05DE FB3E 05E0 FB40 05E1 FB41 +05E2 FB20 05E3 FB43 05E4 FB44 FB4E 05E6 FB46 05E7 FB47 -05E8 FB48 -05E9 FB2A FB2B FB2C FB2D FB49 -05EA FB4A -0627 0622 0623 0625 0672 0673 FE81 FE82 FE83 FE84 FE87 FE88 -062A 067C 067D -062D 0681 0682 0685 -062F 0689 068A 068B 068F 0690 -0631 0692 0693 0694 0695 0696 0697 0699 -0633 069A 069B 069C -0634 06FA -0635 069D 069E -0636 06FB -0637 069F -0639 06A0 -063A 06FC -0641 06A2 06A3 06A5 -0642 06A7 06A8 -0643 06AB 06AC 06AE -0644 06B5 06B6 06B7 06B8 -0646 06B9 06BC 06BD -0647 06C0 FBA4 FBA5 -0648 0624 06C4 06CA 06CF FE85 FE86 -064A 0626 06CD 06CE 06D1 FE89 FE8A FE8B FE8C -0686 06BF -06AF 06B0 06B2 06B4 -06C1 06C2 -06C7 0677 FBDD -06D2 06D3 FBB0 FBB1 -09B0 09F0 09F1 +05E8 FB27 FB48 +05E9 FB2A FB2B FB49 +05EA FB28 FB4A +05F2 FB1F +0621 FE80 +0622 FE81 FE82 +0623 FE83 FE84 +0624 FE85 FE86 +0625 FE87 FE88 +0626 FBEA FBEB FBEC FBED FBEE FBEF FBF0 FBF1 FBF2 FBF3 FBF4 FBF5 FBF6 FBF7 FBF8 FBF9 FBFA FBFB FC00 FC01 FC02 FC03 FC04 FC64 FC65 FC66 FC67 FC68 FC69 FC97 FC98 FC99 FC9A FC9B FCDF FCE0 FE89 FE8A FE8B FE8C +0627 0622 0623 0625 0675 FD3C FD3D FDF2 FDF3 FE8D FE8E +0628 FC05 FC06 FC07 FC08 FC09 FC0A FC6A FC6B FC6C FC6D FC6E FC6F FC9C FC9D FC9E FC9F FCA0 FCE1 FCE2 FD9E FDC2 FE8F FE90 FE91 FE92 +0629 FE93 FE94 +062A FC0B FC0C FC0D FC0E FC0F FC10 FC70 FC71 FC72 FC73 FC74 FC75 FCA1 FCA2 FCA3 FCA4 FCA5 FCE3 FCE4 FD50 FD51 FD52 FD53 FD54 FD55 FD56 FD57 FD9F FDA0 FDA1 FDA2 FDA3 FDA4 FE95 FE96 FE97 FE98 +062B FC11 FC12 FC13 FC14 FC76 FC77 FC78 FC79 FC7A FC7B FCA6 FCE5 FCE6 FE99 FE9A FE9B FE9C +062C FC15 FC16 FCA7 FCA8 FD01 FD02 FD1D FD1E FD58 FD59 FDA5 FDA6 FDA7 FDBE FDFB FE9D FE9E FE9F FEA0 +062D FC17 FC18 FCA9 FCAA FCFF FD00 FD1B FD1C FD5A FD5B FDBF FEA1 FEA2 FEA3 FEA4 +062E FC19 FC1A FC1B FCAB FCAC FD03 FD04 FD1F FD20 FEA5 FEA6 FEA7 FEA8 +062F FEA9 FEAA +0630 FC5B FEAB FEAC +0631 FC5C FDF6 FEAD FEAE +0632 FEAF FEB0 +0633 FC1C FC1D FC1E FC1F FCAD FCAE FCAF FCB0 FCE7 FCE8 FCFB FCFC FD0E FD17 FD18 FD2A FD31 FD34 FD35 FD36 FD5C FD5D FD5E FD5F FD60 FD61 FD62 FD63 FDA8 FDC6 FEB1 FEB2 FEB3 FEB4 +0634 FCE9 FCEA FCFD FCFE FD09 FD0A FD0B FD0C FD0D FD19 FD1A FD25 FD26 FD27 FD28 FD29 FD2D FD2E FD2F FD30 FD32 FD37 FD38 FD39 FD67 FD68 FD69 FD6A FD6B FD6C FD6D FDAA FEB5 FEB6 FEB7 FEB8 +0635 FC20 FC21 FCB1 FCB2 FCB3 FD05 FD06 FD0F FD21 FD22 FD2B FD64 FD65 FD66 FDA9 FDC5 FDF0 FDF5 FDF9 FDFA FEB9 FEBA FEBB FEBC +0636 FC22 FC23 FC24 FC25 FCB4 FCB5 FCB6 FCB7 FD07 FD08 FD10 FD23 FD24 FD2C FD6E FD6F FD70 FDAB FEBD FEBE FEBF FEC0 +0637 FC26 FC27 FCB8 FCF5 FCF6 FD11 FD12 FD33 FD3A FD71 FD72 FD73 FD74 FEC1 FEC2 FEC3 FEC4 +0638 FC28 FCB9 FD3B FEC5 FEC6 FEC7 FEC8 +0639 FC29 FC2A FCBA FCBB FCF7 FCF8 FD13 FD14 FD75 FD76 FD77 FD78 FDB6 FDC4 FDF7 FEC9 FECA FECB FECC +063A FC2B FC2C FCBC FCBD FCF9 FCFA FD15 FD16 FD79 FD7A FD7B FECD FECE FECF FED0 +0640 FCF2 FCF3 FCF4 FE71 FE77 FE79 FE7B FE7D FE7F +0641 FC2D FC2E FC2F FC30 FC31 FC32 FC7C FC7D FCBE FCBF FCC0 FCC1 FD7C FD7D FDC1 FED1 FED2 FED3 FED4 +0642 FC33 FC34 FC35 FC36 FC7E FC7F FCC2 FCC3 FD7E FD7F FDB2 FDB4 FDF1 FED5 FED6 FED7 FED8 +0643 FC37 FC38 FC39 FC3A FC3B FC3C FC3D FC3E FC80 FC81 FC82 FC83 FC84 FCC4 FCC5 FCC6 FCC7 FCC8 FCEB FCEC FDB7 FDBB FDC3 FED9 FEDA FEDB FEDC +0644 FC3F FC40 FC41 FC42 FC43 FC44 FC85 FC86 FC87 FCC9 FCCA FCCB FCCC FCCD FCED FD80 FD81 FD82 FD83 FD84 FD85 FD86 FD87 FD88 FDAC FDAD FDB5 FDBA FDBC FEDD FEDE FEDF FEE0 FEF5 FEF6 FEF7 FEF8 FEF9 FEFA FEFB FEFC +0645 FC45 FC46 FC47 FC48 FC49 FC4A FC88 FC89 FCCE FCCF FCD0 FCD1 FD89 FD8A FD8B FD8C FD8D FD8E FD8F FD92 FDB1 FDB9 FDC0 FDF4 FEE1 FEE2 FEE3 FEE4 +0646 FC4B FC4C FC4D FC4E FC4F FC50 FC8A FC8B FC8C FC8D FC8E FC8F FCD2 FCD3 FCD4 FCD5 FCD6 FCEE FCEF FD95 FD96 FD97 FD98 FD99 FD9A FD9B FDB3 FDB8 FDBD FDC7 FEE5 FEE6 FEE7 FEE8 +0647 FC51 FC52 FC53 FC54 FCD7 FCD8 FCD9 FD93 FD94 FEE9 FEEA FEEB FEEC +0648 0624 0676 FDF8 FEED FEEE +0649 FBE8 FBE9 FC5D FC90 FEEF FEF0 +064A 0626 0678 FC55 FC56 FC57 FC58 FC59 FC5A FC91 FC92 FC93 FC94 FC95 FC96 FCDA FCDB FCDC FCDD FCDE FCF0 FCF1 FD9C FD9D FDAE FDAF FDB0 FEF1 FEF2 FEF3 FEF4 +0671 FB50 FB51 +0677 FBDD +0679 FB66 FB67 FB68 FB69 +067A FB5E FB5F FB60 FB61 +067B FB52 FB53 FB54 FB55 +067E FB56 FB57 FB58 FB59 +067F FB62 FB63 FB64 FB65 +0680 FB5A FB5B FB5C FB5D +0683 FB76 FB77 FB78 FB79 +0684 FB72 FB73 FB74 FB75 +0686 FB7A FB7B FB7C FB7D +0687 FB7E FB7F FB80 FB81 +0688 FB88 FB89 +068C FB84 FB85 +068D FB82 FB83 +068E FB86 FB87 +0691 FB8C FB8D +0698 FB8A FB8B +06A4 FB6A FB6B FB6C FB6D +06A6 FB6E FB6F FB70 FB71 +06A9 FB8E FB8F FB90 FB91 +06AD FBD3 FBD4 FBD5 FBD6 +06AF FB92 FB93 FB94 FB95 +06B1 FB9A FB9B FB9C FB9D +06B3 FB96 FB97 FB98 FB99 +06BA FB9E FB9F +06BB FBA0 FBA1 FBA2 FBA3 +06BE FBAA FBAB FBAC FBAD +06C0 FBA4 FBA5 +06C1 06C2 FBA6 FBA7 FBA8 FBA9 +06C5 FBE0 FBE1 +06C6 FBD9 FBDA +06C7 0677 FBD7 FBD8 +06C8 FBDB FBDC +06C9 FBE2 FBE3 +06CB FBDE FBDF +06CC FBFC FBFD FBFE FBFF +06D0 FBE4 FBE5 FBE6 FBE7 +06D2 06D3 FBAE FBAF +06D3 FBB0 FBB1 +06D5 06C0 +0915 0958 +0916 0959 +0917 095A +091C 095B +0921 095C +0922 095D +0928 0929 +092B 095E +092F 095F +0930 0931 +0933 0934 +09A1 09DC +09A2 09DD +09AF 09DF +0A16 0A59 +0A17 0A5A +0A1C 0A5B +0A2B 0A5E +0A32 0A33 +0A38 0A36 +0B21 0B5C +0B22 0B5D +0B92 0B94 +0E4D 0E33 +0EAB 0EDC 0EDD +0ECD 0EB3 +0F40 0F69 +0F42 0F43 +0F4C 0F4D +0F51 0F52 +0F56 0F57 +0F5B 0F5C +1025 1026 +1100 3131 +1101 3132 +1102 3134 +1103 3137 +1104 3138 +1105 3139 +1106 3141 +1107 3142 +1108 3143 +1109 3145 +110A 3146 +110B 3147 +110C 3148 +110D 3149 +110E 314A +110F 314B +1110 314C +1111 314D +1112 314E +1114 3165 +1115 3166 +111A 3140 +111C 316E +111D 3171 +111E 3172 +1120 3173 +1121 3144 +1122 3174 +1123 3175 +1127 3176 +1129 3177 +112B 3178 +112C 3179 +112D 317A +112E 317B +112F 317C +1132 317D +1136 317E +1140 317F +1147 3180 +114C 3181 +1157 3184 +1158 3185 +1159 3186 +1160 3164 +1161 314F +1162 3150 +1163 3151 +1164 3152 +1165 3153 +1166 3154 +1167 3155 +1168 3156 +1169 3157 +116A 3158 +116B 3159 +116C 315A +116D 315B +116E 315C +116F 315D +1170 315E +1171 315F +1172 3160 +1173 3161 +1174 3162 +1175 3163 +1184 3187 +1185 3188 +1188 3189 +1191 318A +1192 318B +1194 318C +119E 318D +11A1 318E +11AA 3133 +11AC 3135 +11AD 3136 +11B0 313A +11B1 313B +11B2 313C +11B3 313D +11B4 313E +11B5 313F +11C7 3167 +11C8 3168 +11CC 3169 +11CE 316A +11D3 316B +11D7 316C +11D9 316D +11DD 316F +11DF 3170 +11F1 3182 +11F2 3183 +1E36 1E38 +1E37 1E39 +1E5A 1E5C +1E5B 1E5D +1E62 1E68 +1E63 1E69 +1EA0 1EAC 1EB6 +1EA1 1EAD 1EB7 +1EB8 1EC6 +1EB9 1EC7 +1ECC 1ED8 +1ECD 1ED9 +1F00 1F02 1F04 1F06 1F80 +1F01 1F03 1F05 1F07 1F81 +1F02 1F82 +1F03 1F83 +1F04 1F84 +1F05 1F85 +1F06 1F86 +1F07 1F87 +1F08 1F0A 1F0C 1F0E 1F88 +1F09 1F0B 1F0D 1F0F 1F89 +1F0A 1F8A +1F0B 1F8B +1F0C 1F8C +1F0D 1F8D +1F0E 1F8E +1F0F 1F8F +1F10 1F12 1F14 +1F11 1F13 1F15 +1F18 1F1A 1F1C +1F19 1F1B 1F1D +1F20 1F22 1F24 1F26 1F90 +1F21 1F23 1F25 1F27 1F91 +1F22 1F92 +1F23 1F93 +1F24 1F94 +1F25 1F95 +1F26 1F96 +1F27 1F97 +1F28 1F2A 1F2C 1F2E 1F98 +1F29 1F2B 1F2D 1F2F 1F99 +1F2A 1F9A +1F2B 1F9B +1F2C 1F9C +1F2D 1F9D +1F2E 1F9E +1F2F 1F9F +1F30 1F32 1F34 1F36 +1F31 1F33 1F35 1F37 +1F38 1F3A 1F3C 1F3E +1F39 1F3B 1F3D 1F3F +1F40 1F42 1F44 +1F41 1F43 1F45 +1F48 1F4A 1F4C +1F49 1F4B 1F4D +1F50 1F52 1F54 1F56 +1F51 1F53 1F55 1F57 +1F59 1F5B 1F5D 1F5F +1F60 1F62 1F64 1F66 1FA0 +1F61 1F63 1F65 1F67 1FA1 +1F62 1FA2 +1F63 1FA3 +1F64 1FA4 +1F65 1FA5 +1F66 1FA6 +1F67 1FA7 +1F68 1F6A 1F6C 1F6E 1FA8 +1F69 1F6B 1F6D 1F6F 1FA9 +1F6A 1FAA +1F6B 1FAB +1F6C 1FAC +1F6D 1FAD +1F6E 1FAE +1F6F 1FAF +1F70 1FB2 +1F74 1FC2 +1F7C 1FF2 +1FB6 1FB7 +1FC6 1FC7 +1FF6 1FF7 +3046 3094 +304B 304C +304D 304E +304F 3050 +3051 3052 +3053 3054 +3055 3056 +3057 3058 +3059 305A +305B 305C +305D 305E +305F 3060 +3061 3062 +3064 3065 +3066 3067 +3068 3069 +306F 3070 3071 +3072 3073 3074 +3075 3076 3077 +3078 3079 307A +307B 307C 307D +3099 FF9E +309A FF9F +309D 309E +30A1 FF67 +30A2 FF71 +30A3 FF68 +30A4 FF72 +30A5 FF69 +30A6 30F4 FF73 +30A7 FF6A +30A8 FF74 +30A9 FF6B +30AA FF75 +30AB 30AC FF76 +30AD 30AE FF77 +30AF 30B0 FF78 +30B1 30B2 FF79 +30B3 30B4 FF7A +30B5 30B6 FF7B +30B7 30B8 FF7C +30B9 30BA FF7D +30BB 30BC FF7E +30BD 30BE FF7F +30BF 30C0 FF80 +30C1 30C2 FF81 +30C3 FF6F +30C4 30C5 FF82 +30C6 30C7 FF83 +30C8 30C9 FF84 +30CA FF85 +30CB FF86 +30CC FF87 +30CD FF88 +30CE FF89 +30CF 30D0 30D1 FF8A +30D2 30D3 30D4 FF8B +30D5 30D6 30D7 FF8C +30D8 30D9 30DA FF8D +30DB 30DC 30DD FF8E +30DE FF8F +30DF FF90 +30E0 FF91 +30E1 FF92 +30E2 FF93 +30E3 FF6C +30E4 FF94 +30E5 FF6D +30E6 FF95 +30E7 FF6E +30E8 FF96 +30E9 FF97 +30EA FF98 +30EB FF99 +30EC FF9A +30ED FF9B +30EF 30F7 FF9C +30F0 30F8 +30F1 30F9 +30F2 30FA FF66 +30F3 FF9D +30FC FF70 +30FD 30FE +3131 FFA1 +3132 FFA2 +3133 FFA3 +3134 FFA4 +3135 FFA5 +3136 FFA6 +3137 FFA7 +3138 FFA8 +3139 FFA9 +313A FFAA +313B FFAB +313C FFAC +313D FFAD +313E FFAE +313F FFAF +3140 FFB0 +3141 FFB1 +3142 FFB2 +3143 FFB3 +3144 FFB4 +3145 FFB5 +3146 FFB6 +3147 FFB7 +3148 FFB8 +3149 FFB9 +314A FFBA +314B FFBB +314C FFBC +314D FFBD +314E FFBE +314F FFC2 +3150 FFC3 +3151 FFC4 +3152 FFC5 +3153 FFC6 +3154 FFC7 +3155 FFCA +3156 FFCB +3157 FFCC +3158 FFCD +3159 FFCE +315A FFCF +315B FFD2 +315C FFD3 +315D FFD4 +315E FFD5 +315F FFD6 +3160 FFD7 +3161 FFDA +3162 FFDB +3163 FFDC +3164 FFA0 +FB49 FB2C FB2D diff --git a/lib/unicode/mktables.PL b/lib/unicode/mktables.PL index 8627701700..801dbffcf9 100755 --- a/lib/unicode/mktables.PL +++ b/lib/unicode/mktables.PL @@ -327,19 +327,21 @@ END open(UNICODEDATA, $UnicodeData) || die "$0: $UnicodeData: $!\n"; while (<UNICODEDATA>) { - ($code, $name) = split /;/; + ($code, $name, $category, $decomposition) = (split /;/)[0,1,2,5]; $code{$name} = $code; $name{$code} = $name; - next unless $name =~ /^(.+? LETTER .+?) WITH .+( \w+ FORM)?$/; + next unless $category =~ /^L/ && $decomposition ne ''; + $decomposition =~ s/^<\w+> //; + @decomposition = split(' ', $decomposition); - push @base, [ $code, $1 ]; - push @base, [ $code, $1.$2 ] if $2 ne ''; + push @base, [ $code, $decomposition[0] ]; } foreach my $b (@base) { - ($code, $base) = @$b; + ($code, $basecode) = @$b; + $base = $name{$basecode}; next unless exists $code{$base}; push @{$unicode{$code{$base}}}, $code; # print "$code: $name{$code} -> $base\n", @@ -369,4 +371,6 @@ if (open(EQ_LATIN1, ">Eq/Latin1")) { } else { die "$0: failed to open Eq/Latin1 for writing: $!\n"; } + +# eof diff --git a/lib/utf8.pm b/lib/utf8.pm index 8f650d9d00..5ddd4ba21a 100644 --- a/lib/utf8.pm +++ b/lib/utf8.pm @@ -71,8 +71,9 @@ attempt to canonicalize variable names for you.) =item * Regular expressions match characters instead of bytes. For instance, -"." matches a character instead of a byte. (However, the C<\O> pattern -is provided to force a match a single byte ("octet", hence C<\O>).) +"." matches a character instead of a byte. (However, the C<\C> pattern +is provided to force a match a single byte ("C<char>" in C, hence +C<\C>).) =item * diff --git a/lib/warning.pm b/lib/warnings.pm index 70ed91e56c..e15d364193 100644 --- a/lib/warning.pm +++ b/lib/warnings.pm @@ -1,21 +1,21 @@ -# This file was created by warning.pl +# This file was created by warnings.pl # Any changes made here will be lost. # -package warning; +package warnings; =head1 NAME -warning - Perl pragma to control optional warnings +warnings - Perl pragma to control optional warnings =head1 SYNOPSIS - use warning; - no warning; + use warnings; + no warnings; - use warning "all"; - no warning "all"; + use warnings "all"; + no warnings "all"; =head1 DESCRIPTION @@ -130,30 +130,12 @@ sub bits { sub import { shift; - $^B |= bits(@_ ? @_ : 'all') ; + ${^Warnings} |= bits(@_ ? @_ : 'all') ; } sub unimport { shift; - $^B &= ~ bits(@_ ? @_ : 'all') ; -} - - -sub make_fatal -{ - my $self = shift ; - my $bitmask = $self->bits(@_) ; - $SIG{__WARN__} = - sub - { - die @_ if $^B & $bitmask ; - warn @_ - } ; -} - -sub bitmask -{ - return $^B ; + ${^Warnings} &= ~ bits(@_ ? @_ : 'all') ; } sub enabled @@ -161,7 +143,7 @@ sub enabled my $string = shift ; return 1 - if $bits{$string} && $^B & $bits{$string} ; + if $bits{$string} && ${^Warnings} & $bits{$string} ; return 0 ; } @@ -93,7 +93,7 @@ Perl_mg_get(pTHX_ SV *sv) while ((mg = *mgp) != 0) { MGVTBL* vtbl = mg->mg_virtual; if (!(mg->mg_flags & MGf_GSKIP) && vtbl && (vtbl->svt_get != NULL)) { - CALL_FTPR(vtbl->svt_get)(aTHX_ sv, mg); + CALL_FPTR(vtbl->svt_get)(aTHX_ sv, mg); /* Ignore this magic if it's been deleted */ if ((mg == (mgp_valid ? *mgp : SvMAGIC(sv))) && (mg->mg_flags & MGf_GSKIP)) @@ -400,19 +400,6 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) case '\001': /* ^A */ sv_setsv(sv, PL_bodytarget); break; - case '\002': /* ^B */ - if (PL_curcop->cop_warnings == WARN_NONE || - PL_curcop->cop_warnings == WARN_STD) - { - sv_setpvn(sv, WARN_NONEstring, WARNsize) ; - } - else if (PL_curcop->cop_warnings == WARN_ALL) { - sv_setpvn(sv, WARN_ALLstring, WARNsize) ; - } - else { - sv_setsv(sv, PL_curcop->cop_warnings); - } - break; case '\003': /* ^C */ sv_setiv(sv, (IV)PL_minus_c); break; @@ -504,8 +491,22 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) sv_setiv(sv, (IV)PL_basetime); #endif break; - case '\027': /* ^W */ - sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE)); + case '\027': /* ^W & $^Warnings*/ + if (*(mg->mg_ptr+1) == '\0') + sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE)); + else if (strEQ(mg->mg_ptr, "\027arnings")) { + if (PL_compiling.cop_warnings == WARN_NONE || + PL_compiling.cop_warnings == WARN_STD) + { + sv_setpvn(sv, WARN_NONEstring, WARNsize) ; + } + else if (PL_compiling.cop_warnings == WARN_ALL) { + sv_setpvn(sv, WARN_ALLstring, WARNsize) ; + } + else { + sv_setsv(sv, PL_compiling.cop_warnings); + } + } break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '&': @@ -1559,25 +1560,6 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) case '\001': /* ^A */ sv_setsv(PL_bodytarget, sv); break; - case '\002': /* ^B */ - if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { - if (memEQ(SvPVX(sv), WARN_ALLstring, WARNsize)) { - PL_compiling.cop_warnings = WARN_ALL; - PL_dowarn |= G_WARN_ONCE ; - } - else if (memEQ(SvPVX(sv), WARN_NONEstring, WARNsize)) - PL_compiling.cop_warnings = WARN_NONE; - else { - if (specialWARN(PL_compiling.cop_warnings)) - PL_compiling.cop_warnings = newSVsv(sv) ; - else - sv_setsv(PL_compiling.cop_warnings, sv); - if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE)) - PL_dowarn |= G_WARN_ONCE ; - } - } - break; - case '\003': /* ^C */ PL_minus_c = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv); break; @@ -1634,12 +1616,32 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) PL_basetime = (Time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)); #endif break; - case '\027': /* ^W */ - if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { - i = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv); - PL_dowarn = (PL_dowarn & ~G_WARN_ON) + case '\027': /* ^W & $^Warnings */ + if (*(mg->mg_ptr+1) == '\0') { + if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { + i = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv); + PL_dowarn = (PL_dowarn & ~G_WARN_ON) | (i ? G_WARN_ON : G_WARN_OFF) ; + } } + else if (strEQ(mg->mg_ptr, "\027arnings")) { + if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { + if (memEQ(SvPVX(sv), WARN_ALLstring, WARNsize)) { + PL_compiling.cop_warnings = WARN_ALL; + PL_dowarn |= G_WARN_ONCE ; + } + else if (memEQ(SvPVX(sv), WARN_NONEstring, WARNsize)) + PL_compiling.cop_warnings = WARN_NONE; + else { + if (specialWARN(PL_compiling.cop_warnings)) + PL_compiling.cop_warnings = newSVsv(sv) ; + else + sv_setsv(PL_compiling.cop_warnings, sv); + if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE)) + PL_dowarn |= G_WARN_ONCE ; + } + } + } break; case '.': if (PL_localizing) { @@ -3509,6 +3509,26 @@ #define Perl_magic_killbackrefs pPerl->Perl_magic_killbackrefs #undef magic_killbackrefs #define magic_killbackrefs Perl_magic_killbackrefs +#undef Perl_newANONATTRSUB +#define Perl_newANONATTRSUB pPerl->Perl_newANONATTRSUB +#undef newANONATTRSUB +#define newANONATTRSUB Perl_newANONATTRSUB +#undef Perl_newATTRSUB +#define Perl_newATTRSUB pPerl->Perl_newATTRSUB +#undef newATTRSUB +#define newATTRSUB Perl_newATTRSUB +#undef Perl_newMYSUB +#define Perl_newMYSUB pPerl->Perl_newMYSUB +#undef newMYSUB +#define newMYSUB Perl_newMYSUB +#undef Perl_my_attrs +#define Perl_my_attrs pPerl->Perl_my_attrs +#undef my_attrs +#define my_attrs Perl_my_attrs +#undef Perl_boot_core_xsutils +#define Perl_boot_core_xsutils pPerl->Perl_boot_core_xsutils +#undef boot_core_xsutils +#define boot_core_xsutils Perl_boot_core_xsutils #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -3564,6 +3584,8 @@ #endif #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) # if defined(LEAKTEST) # endif @@ -1576,8 +1576,60 @@ Perl_ref(pTHX_ OP *o, I32 type) } -OP * -Perl_my(pTHX_ OP *o) +STATIC OP * +S_dup_attrlist(pTHX_ OP *o) +{ + OP *rop = Nullop; + + /* An attrlist is either a simple OP_CONST or an OP_LIST with kids, + * where the first kid is OP_PUSHMARK and the remaining ones + * are OP_CONST. We need to push the OP_CONST values. + */ + if (o->op_type == OP_CONST) + rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv)); + else { + assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS)); + for (o = cLISTOPo->op_first; o; o=o->op_sibling) { + if (o->op_type == OP_CONST) + rop = append_elem(OP_LIST, rop, + newSVOP(OP_CONST, o->op_flags, + SvREFCNT_inc(cSVOPo->op_sv))); + } + } + return rop; +} + +STATIC void +S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs) +{ + OP *modname; /* for 'use' */ + SV *stashsv; + + /* fake up C<use attributes $pkg,$rv,@attrs> */ + ENTER; /* need to protect against side-effects of 'use' */ + SAVEINT(PL_expect); + if (stash && HvNAME(stash)) + stashsv = newSVpv(HvNAME(stash), 0); + else + stashsv = &PL_sv_no; +#define ATTRSMODULE "attributes" + modname = newSVOP(OP_CONST, 0, + newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1)); + modname->op_private |= OPpCONST_BARE; + /* that flag is required to make 'use' work right */ + utilize(1, start_subparse(FALSE, 0), + Nullop, /* version */ + modname, + prepend_elem(OP_LIST, + newSVOP(OP_CONST, 0, stashsv), + prepend_elem(OP_LIST, + newSVOP(OP_CONST, 0, newRV(target)), + dup_attrlist(attrs)))); + LEAVE; +} + +STATIC OP * +S_my_kid(pTHX_ OP *o, OP *attrs) { OP *kid; I32 type; @@ -1588,7 +1640,7 @@ Perl_my(pTHX_ OP *o) type = o->op_type; if (type == OP_LIST) { for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) - my(kid); + my_kid(kid, attrs); } else if (type == OP_UNDEF) { return o; } else if (type != OP_PADSV && @@ -1599,12 +1651,44 @@ Perl_my(pTHX_ OP *o) yyerror(Perl_form(aTHX_ "Can't declare %s in my", PL_op_desc[o->op_type])); return o; } + else if (attrs && type != OP_PUSHMARK) { + HV *stash; + SV *padsv; + SV **namesvp; + + /* check for C<my Dog $spot> when deciding package */ + namesvp = av_fetch(PL_comppad_name, o->op_targ, FALSE); + if (namesvp && *namesvp && SvOBJECT(*namesvp) && HvNAME(SvSTASH(*namesvp))) + stash = SvSTASH(*namesvp); + else + stash = PL_curstash; + padsv = PAD_SV(o->op_targ); + apply_attrs(stash, padsv, attrs); + } o->op_flags |= OPf_MOD; o->op_private |= OPpLVAL_INTRO; return o; } OP * +Perl_my_attrs(pTHX_ OP *o, OP *attrs) +{ + if (o->op_flags & OPf_PARENS) + list(o); + PL_in_my = FALSE; + PL_in_my_stash = Nullhv; + if (attrs) + SAVEFREEOP(attrs); + return my_kid(o, attrs); +} + +OP * +Perl_my(pTHX_ OP *o) +{ + return my_kid(o, Nullop); +} + +OP * Perl_sawparens(pTHX_ OP *o) { if (o) @@ -2807,9 +2891,10 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg) } /* Fake up the BEGIN {}, which does its thing immediately. */ - newSUB(floor, + newATTRSUB(floor, newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)), Nullop, + Nullop, append_elem(OP_LINESEQ, append_elem(OP_LINESEQ, newSTATEOP(0, Nullch, rqop), @@ -3896,14 +3981,35 @@ Perl_op_const_sv(pTHX_ OP *o, CV *cv) return sv; } +void +Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + if (o) + SAVEFREEOP(o); + if (proto) + SAVEFREEOP(proto); + if (attrs) + SAVEFREEOP(attrs); + if (block) + SAVEFREEOP(block); + Perl_croak(aTHX_ "\"my sub\" not yet implemented"); +} + CV * Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) { + return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block); +} + +CV * +Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ dTHR; STRLEN n_a; char *name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch; GV *gv = gv_fetchpv(name ? name : "__ANON__", - GV_ADDMULTI | (block ? 0 : GV_NOINIT), SVt_PVCV); + GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT), + SVt_PVCV); char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch; register CV *cv=0; I32 ix; @@ -3912,8 +4018,10 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) SAVEFREEOP(o); if (proto) SAVEFREEOP(proto); + if (attrs) + SAVEFREEOP(attrs); - if (SvTYPE(gv) != SVt_PVGV) { /* Prototype now, and had + if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at maximum a prototype before. */ if (SvTYPE(gv) > SVt_NULL) { if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1) @@ -3941,7 +4049,7 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) { SV* const_sv; bool const_changed = TRUE; - if (!block) { + if (!block && !attrs) { /* just a "sub foo;" when &foo is already defined */ SAVEFREESV(PL_compcv); goto done; @@ -3949,6 +4057,8 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) /* ahem, death to those who redefine active sort subs */ if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv)) Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name); + if (!block) + goto withattrs; if(const_sv = cv_const_sv(cv)) const_changed = sv_cmp(const_sv, op_const_sv(block, Nullcv)); if ((const_sv && const_changed) || ckWARN(WARN_REDEFINE) @@ -3960,14 +4070,46 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) PL_curcop->cop_line = PL_copline; Perl_warner(aTHX_ WARN_REDEFINE, const_sv ? "Constant subroutine %s redefined" - : "Subroutine %s redefined", name); + : "Subroutine %s redefined", name); PL_curcop->cop_line = oldline; } SvREFCNT_dec(cv); cv = Nullcv; } } + withattrs: + if (attrs) { + HV *stash; + SV *rcv; + + /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs> + * before we clobber PL_compcv. + */ + if (cv && !block) { + rcv = (SV*)cv; + if (CvGV(cv) && GvSTASH(CvGV(cv)) && HvNAME(GvSTASH(CvGV(cv)))) + stash = GvSTASH(CvGV(cv)); + else if (CvSTASH(cv) && HvNAME(CvSTASH(cv))) + stash = CvSTASH(cv); + else + stash = PL_curstash; + } + else { + /* possibly about to re-define existing subr -- ignore old cv */ + rcv = (SV*)PL_compcv; + if (name && GvSTASH(gv) && HvNAME(GvSTASH(gv))) + stash = GvSTASH(gv); + else + stash = PL_curstash; + } + apply_attrs(stash, rcv, attrs); + } if (cv) { /* must reuse cv if autoloaded */ + if (!block) { + /* got here with just attrs -- work done, so bug out */ + SAVEFREESV(PL_compcv); + goto done; + } cv_undef(cv); CvFLAGS(cv) = CvFLAGS(PL_compcv); CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv); @@ -4155,10 +4297,11 @@ Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv) if(stash) PL_curstash = PL_curcop->cop_stash = stash; - newSUB( + newATTRSUB( start_subparse(FALSE, 0), newSVOP(OP_CONST, 0, newSVpv(name,0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + Nullop, newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); @@ -4311,8 +4454,15 @@ Perl_newANONHASH(pTHX_ OP *o) OP * Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block) { + return newANONATTRSUB(floor, proto, Nullop, block); +} + +OP * +Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block) +{ return newUNOP(OP_REFGEN, 0, - newSVOP(OP_ANONCODE, 0, (SV*)newSUB(floor, 0, proto, block))); + newSVOP(OP_ANONCODE, 0, + (SV*)newATTRSUB(floor, 0, proto, attrs, block))); } OP * @@ -5144,6 +5294,19 @@ Perl_ck_sassign(pTHX_ OP *o) { return o; } + if (kid->op_type == OP_JOIN) { + /* do_join has problems the arguments coincide with target. + In fact the second argument *can* safely coincide, + but ignore=pessimize this rare occasion. */ + OP *arg = kLISTOP->op_first->op_sibling; /* Skip PUSHMARK */ + + while (arg) { + if (arg->op_type == OP_PADSV + && arg->op_targ == kkid->op_targ) + return o; + arg = arg->op_sibling; + } + } kid->op_targ = kkid->op_targ; /* Now we do not need PADSV and SASSIGN. */ kid->op_sibling = o->op_sibling; /* NULL */ @@ -5403,9 +5566,10 @@ S_simplify_sort(pTHX_ OP *o) o->op_private |= OPpSORT_NUMERIC; if (k->op_type == OP_I_NCMP) o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER; - op_free(cLISTOPo->op_first->op_sibling); /* delete comparison block */ - cLISTOPo->op_first->op_sibling = cLISTOPo->op_last; - cLISTOPo->op_children = 1; + kid = cLISTOPo->op_first->op_sibling; + cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */ + op_free(kid); /* then delete it */ + cLISTOPo->op_children--; } OP * @@ -5474,6 +5638,7 @@ Perl_ck_subr(pTHX_ OP *o) I32 arg = 0; STRLEN n_a; + o->op_private |= OPpENTERSUB_HASTARG; for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ; if (cvop->op_type == OP_RV2CV) { SVOP* tmpop; @@ -117,13 +117,14 @@ typedef U32 PADOFFSET; /* Private for OP_REPEAT */ #define OPpREPEAT_DOLIST 64 /* List replication. */ -/* Private for OP_ENTERSUB, OP_RV2?V, OP_?ELEM */ +/* Private for OP_RV2?V, OP_?ELEM */ #define OPpDEREF (32|64) /* Want ref to something: */ #define OPpDEREF_AV 32 /* Want ref to AV. */ #define OPpDEREF_HV 64 /* Want ref to HV. */ #define OPpDEREF_SV (32|64) /* Want ref to SV. */ /* OP_ENTERSUB only */ #define OPpENTERSUB_DB 16 /* Debug subroutine. */ +#define OPpENTERSUB_HASTARG 32 /* Called from OP tree. */ /* OP_RV2CV only */ #define OPpENTERSUB_AMPER 8 /* Used & form to call. */ #define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */ @@ -926,6 +926,7 @@ print \" \\@INC:\\n @INC\\n\";"); CvPADLIST(PL_compcv) = comppadlist; boot_core_UNIVERSAL(); + boot_core_xsutils(); if (xsinit) (*xsinit)(aTHXo); /* in case linked C routines want magical variables */ @@ -470,6 +470,10 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); # include "embed.h" #endif +#if defined(NeXT) || defined(__NeXT) || defined (__MACHTEN__) +# undef PERL_POLLUTE_MALLOC +#endif + #define MEM_SIZE Size_t #if defined(STANDARD_C) && defined(I_STDDEF) @@ -891,21 +895,14 @@ Free_t Perl_mfree (Malloc_t where); #include <inttypes.h> #endif -/* XXX QUAD stuff is not currently supported on most systems. - Specifically, perl internals don't support long long. Among - the many problems is that some compilers support long long, - but the underlying library functions (such as sprintf) don't. - Some things do work (such as quad pack/unpack on convex); - also some systems use long long for the fpos_t typedef. That - seems to work too. - +/* The IV type is supposed to be long enough to hold any integral value or a pointer. --Andy Dougherty August 1996 */ -/* Much more 64-bit probing added. Now we should get Quad_t - in most systems: int64_t, long long, long, int, will do. +/* We should be able to get Quad_t in most systems: + all of int64_t, long long, long, int, will work. Beware of LP32 systems (ILP32, ILP32LL64). Such systems have been used to sizeof(long) == sizeof(foo*). This is a bad assumption @@ -917,9 +914,11 @@ Free_t Perl_mfree (Malloc_t where); Summary: a long long system needs to add -DUSE_LONG_LONG to $ccflags to get quads -- and if its pointers are still 32 bits, this will break binary compatibility. Casting an IV (a long long) to a pointer will - truncate half of the IV away. + truncate half of the IV away. Most systems can just use + Configure -Duse64bits to get the -DUSE_LONG_LONG added either by + their hints files, or directly by Configure if they are using gcc. - --jhi September 1998 */ + --jhi September 1999 */ #if INTSIZE == 4 && LONGSIZE == 4 && PTRSIZE == 4 # define PERL_ILP32 @@ -1003,6 +1002,9 @@ Free_t Perl_mfree (Malloc_t where); # define IV_MAX INT64_MAX # define IV_MIN INT64_MIN # define UV_MAX UINT64_MAX +# ifndef UINT64_MIN +# define UINT64_MIN 0 +# endif # define UV_MIN UINT64_MIN # else # define IV_MAX PERL_QUAD_MAX @@ -1010,7 +1012,7 @@ Free_t Perl_mfree (Malloc_t where); # define UV_MAX PERL_UQUAD_MAX # define UV_MIN PERL_UQUAD_MIN # endif -# define IVSIZF 8 +# define IVSIZE 8 # define UVSIZE 8 # define IV_IS_QUAD # define UV_IS_QUAD @@ -1021,6 +1023,9 @@ Free_t Perl_mfree (Malloc_t where); # define IV_MAX INT32_MAX # define IV_MIN INT32_MIN # define UV_MAX UINT32_MAX +# ifndef UINT32_MIN +# define UINT32_MIN 0 +# endif # define UV_MIN UINT32_MIN # else # define IV_MAX PERL_LONG_MAX @@ -1038,8 +1043,8 @@ Free_t Perl_mfree (Malloc_t where); # define UVSIZE LONGSIZE # define IVSIZE LONGSIZE #endif -#define IV_DIG (BIT_DIGITS(IVSIZE * 8) + 1) -#define UV_DIG (BIT_DIGITS(IVSIZE * 8) + 1) +#define IV_DIG (BIT_DIGITS(IVSIZE * 8)) +#define UV_DIG (BIT_DIGITS(IVSIZE * 8)) #ifdef USE_LONG_DOUBLE # if defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE) @@ -1070,6 +1075,12 @@ Free_t Perl_mfree (Malloc_t where); #define DBL_DIG 15 /* A guess that works lots of places */ #endif #endif +#ifdef I_FLOAT +#include <float.h> +#endif +#ifndef HAS_DBL_DIG +#define DBL_DIG 15 /* A guess that works lots of places */ +#endif #ifdef OVR_LDBL_DIG /* Use an overridden LDBL_DIG */ @@ -1390,10 +1401,16 @@ typedef union any ANY; #endif #if defined(USE_64_BIT_FILES) || defined(USE_LARGE_FILES) -# define USE_64_BIT_OFFSETS +# define USE_64_BIT_OFFSETS /* Explicit */ # define USE_64_BIT_STDIO #endif +#if LSEEKSIZE == 8 && !defined(USE_64_BIT_OFFSETS) +# define USE_64_BIT_OFFSETS /* Implicit */ +#endif + +/* Do we need FSEEKSIZE? */ + /* I couldn't find any -Ddefine or -flags in IRIX 6.5 that would * have done the necessary symbol renaming using cpp. --jhi */ #ifdef __sgi @@ -1685,6 +1702,22 @@ typedef pthread_key_t perl_key; # endif #endif +#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX) +# ifdef USE_THREADS +# define PERL_GET_THX THR +# else +# ifdef MULTIPLICITY +# define PERL_GET_THX PERL_GET_INTERP +# else +# ifdef PERL_OBJECT +# define PERL_GET_THX ((CPerlObj*)PERL_GET_INTERP) +# else +# define PERL_GET_THX ((void*)0) +# endif +# endif +# endif +#endif + /* Some unistd.h's give a prototype for pause() even though HAS_PAUSE ends up undefined. This causes the #define below to be rejected by the compmiler. Sigh. @@ -1757,7 +1790,7 @@ typedef I32 (*filter_t) (pTHXo_ int, SV *, int); #include "hv.h" #include "mg.h" #include "scope.h" -#include "warning.h" +#include "warnings.h" #include "utf8.h" /* Current curly descriptor */ @@ -1875,10 +1908,10 @@ typedef I32 CHECKPOINT; #define IV_FITS_IN_NV /* Doubt. */ #if defined(USE_LONG_DOUBLE) && \ - defined(LDBL_MANT_DIG) && IVSIZE*8 >= LDBL_MANT_DIG + defined(LDBL_MANT_DIG) && IV_DIG >= LDBL_MANT_DIG # undef IV_FITS_IN_NV #else -# if defined(DBL_MANT_DIG) && IVSIZE*8 >= DBL_MANT_DIG +# if defined(DBL_MANT_DIG) && IV_DIG >= DBL_MANT_DIG # undef IV_FITS_IN_NV # else # if IV_DIG >= NV_DIG @@ -2423,6 +2456,8 @@ typedef enum { XREF, XSTATE, XBLOCK, + XATTRBLOCK, + XATTRTERM, XTERMBLOCK } expectation; @@ -2558,7 +2593,7 @@ struct perl_vars { EXT struct perl_vars PL_Vars; EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars); #else /* PERL_CORE */ -#if !defined(__GNUC__) || !(defined(WIN32) || defined(CYGWIN)) +#if !defined(__GNUC__) || !defined(WIN32) EXT #endif /* WIN32 */ struct perl_vars *PL_VarsPtr; @@ -4779,6 +4779,41 @@ Perl_magic_killbackrefs(pTHXo_ SV *sv, MAGIC *mg) { return ((CPerlObj*)pPerl)->Perl_magic_killbackrefs(sv, mg); } + +#undef Perl_newANONATTRSUB +OP* +Perl_newANONATTRSUB(pTHXo_ I32 floor, OP *proto, OP *attrs, OP *block) +{ + return ((CPerlObj*)pPerl)->Perl_newANONATTRSUB(floor, proto, attrs, block); +} + +#undef Perl_newATTRSUB +CV* +Perl_newATTRSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + return ((CPerlObj*)pPerl)->Perl_newATTRSUB(floor, o, proto, attrs, block); +} + +#undef Perl_newMYSUB +void +Perl_newMYSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) +{ + ((CPerlObj*)pPerl)->Perl_newMYSUB(floor, o, proto, attrs, block); +} + +#undef Perl_my_attrs +OP * +Perl_my_attrs(pTHXo_ OP *o, OP *attrs) +{ + return ((CPerlObj*)pPerl)->Perl_my_attrs(o, attrs); +} + +#undef Perl_boot_core_xsutils +void +Perl_boot_core_xsutils(pTHXo) +{ + ((CPerlObj*)pPerl)->Perl_boot_core_xsutils(); +} #if defined(PERL_OBJECT) #endif #if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT) @@ -4834,6 +4869,8 @@ Perl_magic_killbackrefs(pTHXo_ SV *sv, MAGIC *mg) #endif #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) # if defined(LEAKTEST) # endif @@ -385,14 +385,22 @@ PerlIO_vprintf(PerlIO *f, const char *fmt, va_list ap) Off_t PerlIO_tell(PerlIO *f) { +#if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64) + return ftello(f); +#else return ftell(f); +#endif } #undef PerlIO_seek int PerlIO_seek(PerlIO *f, Off_t offset, int whence) { +#if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64) + return fseeko(f,offset,whence); +#else return fseek(f,offset,whence); +#endif } #undef PerlIO_rewind @@ -7,6 +7,10 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define PERL_IN_PERLY_C #include "perl.h" +#define dep() deprecate("\"do\" to call subroutines") + +/* stuff included here to make perly_c.diff apply better */ + #define yydebug PL_yydebug #define yynerrs PL_yynerrs #define yyerrflag PL_yyerrflag @@ -14,1117 +18,1116 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define yyval PL_yyval #define yylval PL_yylval -#define dep() deprecate("\"do\" to call subroutines") +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; static void yydestruct(pTHXo_ void *ptr); -#line 27 "perly.y" +#line 49 "perly.y" +#if 0 /* get this from perly.h instead */ +#line 52 "perly.y" +typedef union { + I32 ival; + char *pval; + OP *opval; + GV *gvval; +} YYSTYPE; +#line 60 "perly.y" +#endif /* 0 */ + +#ifdef USE_PURE_BISON +#define YYLEX_PARAM (&yychar) +#endif + +#line 51 "perly.c" #define YYERRCODE 256 -static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, - 13, 13, 13, 13, 27, 27, 28, 28, 29, 30, - 31, 32, 33, 45, 45, 1, 1, 1, 1, 3, - 39, 39, 47, 4, 5, 6, 40, 41, 41, 42, - 42, 48, 48, 50, 49, 16, 16, 16, 26, 26, - 26, 37, 37, 37, 37, 37, 37, 37, 37, 51, - 37, 38, 38, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, +static short yylhs[] = { -1, + 50, 0, 8, 6, 9, 7, 10, 10, 10, 11, + 11, 11, 11, 24, 24, 24, 24, 24, 24, 24, + 14, 14, 14, 13, 13, 42, 42, 12, 12, 12, + 12, 12, 12, 12, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 49, 49, 1, 1, 1, 1, 1, + 2, 38, 38, 46, 51, 3, 4, 5, 39, 40, + 40, 44, 44, 44, 45, 45, 41, 41, 52, 52, + 54, 53, 15, 15, 15, 25, 25, 25, 36, 36, + 36, 36, 36, 36, 36, 36, 55, 36, 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 34, 34, 35, 35, 35, 2, 2, 44, - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, + 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 47, 47, 48, 48, 48, 48, 48, 33, 33, 34, + 34, 34, 43, 23, 18, 19, 20, 21, 22, 35, + 35, 35, 35, }; -static short yylen[] = { 2, +static short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, - 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, - 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, - 1, 3, 5, 6, 3, 3, 5, 2, 4, 0, - 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, - 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 3, 2, 4, 3, 4, 1, 1, 1, 1, 1, - 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, - 2, 2, 4, 5, 4, 5, 1, 2, 2, 1, - 2, 2, 2, 1, 3, 1, 3, 4, 4, 6, - 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, + 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, + 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, + 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, + 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 3, 2, 3, 2, + 4, 3, 5, 1, 1, 1, 1, 1, 1, 6, + 5, 4, 5, 1, 1, 3, 4, 3, 2, 2, + 4, 5, 4, 5, 1, 2, 2, 1, 2, 2, + 2, 1, 3, 1, 3, 4, 4, 6, 1, 1, + 3, 2, 3, 2, 1, 1, 1, 0, 1, 0, + 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, }; -static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, - 64, 14, 4, 161, 0, 0, 136, 0, 156, 0, - 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 128, 130, 0, 0, 0, 0, 162, - 51, 0, 57, 0, 62, 0, 7, 177, 180, 179, - 178, 0, 0, 0, 0, 0, 0, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 78, 0, 175, 0, 142, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 172, 173, 174, 176, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, +static short yydefred[] = { 1, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 4, 169, 0, 0, 144, + 0, 164, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 50, 59, - 0, 0, 0, 76, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 4, 155, 157, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 140, 0, 0, 121, - 27, 0, 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 61, 60, 53, 0, 3, 0, 0, 159, 0, - 125, 0, 42, 0, 43, 0, 0, 0, 0, 170, - 0, 0, 36, 41, 0, 0, 0, 158, 167, 79, - 0, 143, 0, 145, 0, 123, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 93, 87, 0, 85, 0, - 134, 0, 139, 0, 77, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 144, 146, 133, 0, - 0, 0, 92, 86, 0, 90, 88, 135, 84, 65, - 160, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 89, 74, 7, 28, 29, 0, 0, 24, 25, - 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, - 5, 0, 30, 0, 0, 33, 0, 23, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 136, 138, 0, 0, 0, + 0, 170, 125, 52, 0, 59, 0, 69, 0, 0, + 7, 190, 193, 192, 191, 0, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, + 0, 0, 159, 0, 0, 0, 0, 85, 0, 188, + 0, 150, 0, 0, 0, 0, 0, 0, 0, 175, + 177, 176, 0, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 185, 186, 187, 189, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 51, 61, 0, + 0, 0, 0, 83, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 4, 163, 165, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 148, 174, 0, 0, + 171, 0, 0, 129, 27, 0, 0, 19, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, + 0, 90, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 167, 0, 0, 0, 42, 0, 43, 0, + 0, 0, 0, 183, 0, 0, 36, 41, 0, 0, + 0, 166, 182, 86, 0, 151, 0, 153, 0, 131, + 173, 65, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 100, 94, 0, 92, 0, 142, 0, 147, 63, + 68, 67, 55, 0, 54, 84, 0, 88, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 152, 154, + 141, 0, 0, 0, 99, 93, 0, 97, 95, 143, + 91, 72, 168, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 140, 96, 81, 7, 28, 29, 0, 0, + 24, 25, 0, 32, 0, 0, 0, 22, 0, 0, + 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; -static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, - 74, 75, 76, 77, 273, 79, 274, 263, 265, 268, - 276, 264, 266, 114, 200, 92, 80, 239, 82, 84, - 181, 254, 143, 271, 13, 2, 14, 15, 16, 86, - 260, +static short yydgoto[] = { 1, + 10, 11, 20, 100, 19, 91, 366, 94, 355, 3, + 12, 13, 70, 371, 281, 72, 73, 74, 75, 76, + 77, 78, 79, 287, 81, 288, 277, 279, 282, 290, + 278, 280, 118, 210, 96, 82, 253, 85, 87, 190, + 323, 152, 285, 267, 221, 14, 83, 133, 15, 2, + 16, 17, 18, 89, 274, }; -static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, - 0, 0, 0, 0, -24, -24, 0, -5, 0, 2126, - 0, 0, 6, 28, 44, 57, -32, 2126, 68, 69, - 72, 999, 943, -24, 1062, 1327, -198, 0, 0, -24, - 2126, 2126, 2126, 2126, 2126, 2126, 1233, 1383, 0, 2126, - 2126, -24, -24, -24, -24, 2126, -217, 0, 342, 827, - -20, -80, -70, 0, 0, -60, 73, 61, 75, 0, - 0, -1, 0, -137, 0, -130, 0, 0, 0, 0, - 0, 2126, 88, 2126, -189, -1, -137, 0, 0, 0, - 0, 0, 0, 89, 827, 99, 1444, 943, 0, -189, - 0, -80, 75, 0, 2126, 0, 90, 0, -189, -16, - 27, -58, 2126, 0, 75, 218, 218, 218, -169, -169, - 63, -22, 0, -63, 218, 218, 0, 0, 0, 0, - -189, -1, 0, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 0, 0, 74, 2126, 1535, 2126, - 2126, 2126, 2126, 2126, 2126, 1725, 0, 2126, 0, 0, - -44, -91, 256, 0, 2126, 428, 0, -1, 2126, 2126, - 2126, 2126, 131, 1800, 0, 0, 0, -12, 36, 130, - 2126, 75, 1861, 1936, 0, 48, 0, 2126, 87, 0, - 0, -272, -272, 0, -272, -272, -272, -119, 0, 1565, - -189, 1088, 375, 160, 827, 715, 389, 771, 684, 1026, - 1242, 218, 218, 2126, 0, 2006, 2126, 0, 143, -56, - 0, 1, 51, -49, 56, 43, 58, 45, 0, 7, - 827, 0, 0, 0, 2126, 0, 141, 2126, 0, 2126, - 0, -272, 0, 144, 0, 145, -272, 151, 158, 0, - 162, 342, 0, 0, 166, 150, 2126, 0, 0, 0, - 9, 0, 16, 0, 19, 0, 60, 2126, 2126, 47, - 0, 21, 94, 2126, 78, 0, 0, 91, 0, 95, - 0, 101, 0, 153, 0, 268, 0, 92, 92, 92, - 92, 2126, 92, 2126, 188, 0, 0, 0, 0, 96, - 1152, 109, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 0, -217, -217, -204, -204, 198, -217, 185, 92, - 0, 0, 0, 0, 0, 0, 92, 211, 0, 0, - 92, 0, 1800, -217, 319, 0, 2126, -217, 216, 0, - 0, 228, 0, 92, 92, 0, -204, 0, +static short yysindex[] = { 0, + 0, 0, -199, 0, 0, 0, -53, 0, 0, 0, + 0, 0, 0, 0, 646, 0, 0, 0, -217, -207, + 44, 0, 0, -207, 0, 0, 0, -32, -32, 0, + 66, 0, 2177, 0, 0, 69, 83, 93, 110, -35, + 2177, 119, 121, 136, 1013, 973, -32, 1077, 1344, -146, + 2177, 68, -32, 2177, 2177, 2177, 2177, 2177, 2177, 1384, + 1424, 0, 2177, 2177, -32, -32, -32, -32, -152, 0, + 470, 845, -13, -65, -63, 0, 0, 55, 137, 122, + 138, 0, 0, 0, 60, 0, -70, 0, -66, -70, + 0, 0, 0, 0, 0, 2177, 146, 2177, 1085, 60, + -70, 0, 0, 0, 0, 0, 0, 152, 845, 153, + 1464, 973, 0, 1085, 0, -65, 138, 0, 2177, 0, + 160, 0, 1085, 2, 76, -52, 2177, 1085, 1524, 0, + 0, 0, -96, 0, 138, -181, -181, -181, -112, -112, + 123, -38, 0, -74, -181, -181, 0, 0, 0, 0, + 60, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 0, 0, -16, 2177, 1731, 2177, 2177, + 2177, 2177, 2177, 2177, 1791, 0, 2177, 0, 0, -88, + -34, -88, 339, 0, 2177, 287, 0, -88, 2177, 2177, + 2177, 2177, 173, 1850, 0, 0, 0, -33, 46, 180, + 2177, 138, 1910, 2025, 0, 97, 0, 0, -31, -29, + 0, 2177, 133, 0, 0, -237, -237, 0, -237, -237, + -237, -69, 0, 1614, 1085, 684, 167, 107, 845, 3800, + 1125, 405, 1164, 778, -228, -181, -181, 2177, 0, 2117, + 2177, 0, 197, -48, 0, -9, -72, -45, -7, -42, + 56, -36, 0, -4, 845, -10, -47, 2177, -47, 0, + 216, 2177, 0, 2177, 60, -237, 0, 219, 0, 230, + -237, 233, 237, 0, 242, 470, 0, 0, 246, 225, + 2177, 0, 0, 0, 13, 0, 18, 0, 29, 0, + 0, 0, 61, 2177, 2177, 54, 0, 32, 63, 2177, + 165, 0, 0, 174, 0, 178, 0, 191, 0, 0, + 0, 0, 0, 261, 0, 0, 350, 0, 0, 182, + 182, 182, 182, 2177, 182, 2177, 281, 0, 0, 0, + 0, 102, 1237, 202, 0, 0, 294, 0, 0, 0, + 0, 0, 0, 0, -152, -152, -130, -130, 297, -152, + 290, 182, 0, 0, 0, 0, 0, 0, 182, 318, + 0, 0, 182, 0, 1850, -152, 407, 0, 2177, -152, + 324, 0, 0, 326, 0, 182, 182, 0, -130, 0, }; -static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, +static short yyrindex[] = { 0, + 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 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, 0, 0, 0, 23, 2214, 0, - 0, 2264, 2308, 0, 0, 0, 0, 0, 0, 0, + 36, 451, 0, 0, 2208, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, -18, 1030, - 2383, 2433, 2561, 0, 0, 2636, 2686, 0, 918, 0, - 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, - 0, 2308, 0, 0, 3879, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 1356, 0, 0, 232, 0, 3936, - 502, 561, 3047, 0, 0, 0, 2730, 0, 3987, 2433, - 0, 0, 2308, 0, 3096, 3236, 3300, 3436, 1656, 3186, - 2780, 0, 0, 0, 3487, 3550, 0, 0, 0, 0, - 4025, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + -12, 939, 2325, 2385, 2463, 0, 0, 2510, 2561, 0, + 1220, 0, 0, 0, 0, 0, -44, 0, 0, -44, + 0, 0, 0, 0, 0, 2271, 0, 0, 3846, 0, + -105, 0, 0, 0, 0, 0, 0, 0, 2612, 0, + 0, 327, 0, 3883, 522, 583, 3032, 0, 0, 0, + 2621, 0, 3893, 2385, 0, 0, 2271, 3930, 0, 0, + 0, 0, 2667, 0, 3092, 3374, 3418, 3458, 3219, 3331, + 2746, 0, 0, 0, 3496, 3567, 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, 0, 0, 0, 0, 0, 0, 2828, 0, 0, - 0, 0, 887, 0, 232, 0, 0, 0, 242, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 249, 0, - 0, 3142, 0, 0, 0, 0, 0, 0, 2889, 0, - 0, -4, 10, 0, 11, 17, 24, 363, 0, -27, - 664, 3890, 3686, 3737, 1507, 0, 4291, 4188, 4155, 4035, - 3842, 3586, 3623, 0, 0, 0, 0, 0, 2983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1640, 0, 0, 0, 233, 0, 0, 0, 0, 2308, - 0, 37, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2797, 0, 0, -23, + 0, -23, 913, 0, 327, 0, 0, 247, 336, 0, + 0, 0, 0, 333, 0, 0, 0, 0, 352, 0, + 0, 3138, 0, 0, 0, 0, 0, 0, 0, 2857, + 0, 0, 2903, 0, 0, -8, -2, 0, 7, 33, + 42, 2255, 0, -28, 3968, 1822, 3732, 3769, 3023, 0, + 4119, 4082, 4021, 4005, 1044, 3610, 3694, 0, 0, 0, + 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3657, -21, 0, 345, 0, 0, + 0, 0, 0, 2271, 0, 71, 0, 0, 0, 0, + 364, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 105, 168, 168, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 105, 887, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, + 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 115, 175, 175, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 374, 115, 913, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, }; -static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, - 0, 0, 0, 0, 340, -38, 0, 0, 215, -138, - 14, 97, 190, -85, -179, 583, 0, 0, 0, 0, - 286, 0, -140, 0, 0, 0, 0, 0, 0, 0, - 0, +static short yygindex[] = { 0, + 0, 0, 164, 383, 0, 14, 0, 37, 655, -89, + 0, 0, 0, -336, -15, 3415, 0, 2211, 368, 369, + 0, 0, 0, 410, 916, 0, 0, 273, -163, 62, + 94, 249, -71, -186, 634, 0, 0, 0, 428, -46, + 184, 118, 0, -149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4610 -static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, - 174, 107, 15, 204, 107, 149, 150, 83, 278, 210, - 104, 104, 122, 58, 94, 104, 18, 207, 107, 107, - 15, 296, 171, 132, 134, 98, 368, 303, 85, 316, - 39, 16, 173, 113, 18, 275, 317, 17, 123, 318, - 142, 323, 175, 147, 20, 104, 147, 99, 39, 16, - 170, 347, 348, 107, 172, 17, 202, 38, 23, 279, - 147, 147, 20, 100, 113, 147, 189, 190, 191, 192, - 193, 194, 40, 198, 199, 38, 101, 58, 23, 154, - 155, 300, 168, 302, 26, 322, 171, 106, 107, 62, - 15, 108, 176, 236, 325, 147, 162, 163, 178, 177, - 164, 23, 180, 165, 166, 167, 182, 185, 195, 203, - 212, 213, 215, 216, 217, 218, 219, 26, 315, 196, - 26, 26, 26, 297, 26, 167, 26, 26, 299, 26, - 301, 205, 319, 208, 240, 242, 243, 244, 245, 246, - 247, 248, 250, 26, 237, 255, 62, 21, 26, 304, - 280, 199, 286, 337, 307, 262, 213, 288, 213, 150, - 272, 305, 294, 277, 308, 309, 324, 281, 341, 283, - 285, 310, 345, 346, 287, 26, 234, 352, 311, 19, - 21, 312, 326, 21, 21, 21, 313, 21, 314, 21, - 21, 330, 21, 360, 332, 327, 113, 363, 362, 328, - 290, 113, 292, 293, 2, 329, 21, 26, 340, 26, - 26, 21, 88, 342, 149, 150, 343, 89, 351, 149, - 150, 149, 150, 353, 104, 104, 104, 104, 149, 150, - 357, 104, 107, 107, 107, 107, 364, 44, 21, 107, - 44, 44, 44, 102, 44, 355, 44, 44, 365, 44, - 104, 104, 165, 104, 320, 149, 150, 52, 107, 107, - 199, 107, 37, 44, 35, 149, 150, 58, 44, 166, - 21, 163, 21, 21, 147, 147, 147, 147, 149, 150, - 262, 147, 40, 147, 149, 150, 149, 150, 331, 147, - 147, 147, 147, 149, 150, 44, 149, 150, 149, 150, - 147, 147, 37, 147, 147, 147, 147, 147, 147, 147, - 157, 235, 147, 149, 150, 147, 147, 147, 35, 69, - 149, 150, 149, 150, 149, 150, 21, 44, 149, 150, - 44, 97, 78, 149, 150, 149, 150, 149, 150, 214, - 26, 26, 26, 26, 26, 26, 359, 26, 26, 26, +#define YYTABLESIZE 4423 +static short yytable[] = { 71, + 65, 193, 223, 65, 107, 22, 216, 292, 271, 301, + 311, 321, 111, 314, 60, 111, 316, 60, 224, 65, + 313, 372, 318, 250, 194, 181, 178, 183, 15, 111, + 111, 312, 18, 126, 111, 62, 319, 64, 39, 84, + 289, 214, 269, 192, 142, 144, 15, 16, 275, 86, + 18, 69, 390, 338, 198, 217, 39, 180, 339, 182, + 163, 164, 158, 159, 111, 16, 4, 5, 6, 340, + 7, 8, 345, 17, 251, 26, 155, 179, 60, 155, + 172, 113, 20, 173, 122, 315, 174, 175, 176, 293, + 26, 17, 181, 155, 155, 208, 209, 9, 155, 62, + 20, 64, 88, 65, 67, 98, 248, 129, 102, 177, + 127, 38, 344, 219, 26, 199, 200, 201, 202, 203, + 204, 188, 103, 347, 180, 151, 40, 337, 155, 38, + 173, 66, 104, 174, 175, 176, 197, 226, 227, 229, + 230, 231, 232, 233, 15, 369, 370, 26, 317, 105, + 26, 26, 26, 341, 26, 346, 26, 26, 110, 26, + 111, 254, 256, 257, 258, 259, 260, 261, 262, 264, + 359, 23, 24, 26, 21, 112, 185, 184, 26, 209, + 186, 187, 26, 276, 227, 195, 227, 225, 286, 189, + 191, 205, 60, 206, 363, 295, 324, 297, 299, 213, + 215, 220, 328, 21, 176, 26, 303, 21, 65, 266, + 21, 21, 21, 222, 21, 384, 21, 21, 291, 21, + 294, 300, 268, 304, 92, 158, 159, 158, 159, 93, + 302, 159, 306, 21, 308, 309, 310, 26, 21, 26, + 26, 249, 2, 111, 111, 111, 111, 158, 159, 320, + 111, 158, 159, 60, 158, 159, 326, 158, 159, 330, + 106, 158, 159, 158, 159, 21, 158, 159, 158, 159, + 331, 111, 111, 332, 111, 44, 377, 333, 44, 44, + 44, 334, 44, 336, 44, 44, 335, 44, 342, 348, + 158, 159, 158, 159, 209, 158, 159, 21, 349, 21, + 21, 44, 350, 322, 354, 322, 44, 155, 155, 155, + 155, 329, 158, 159, 155, 351, 155, 158, 159, 352, + 276, 362, 155, 155, 155, 155, 364, 273, 158, 159, + 272, 158, 159, 44, 365, 155, 155, 373, 155, 155, + 155, 155, 155, 155, 155, 158, 159, 155, 375, 166, + 155, 155, 155, 158, 159, 158, 159, 379, 53, 71, + 158, 159, 158, 159, 386, 44, 387, 180, 44, 62, + 26, 26, 26, 26, 26, 26, 37, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 256, 269, 188, 26, 26, 0, 26, 26, 26, 26, - 26, 149, 150, 149, 150, 26, 26, 26, 26, 26, - 26, 0, 0, 67, 26, 0, 67, 4, 5, 6, - 339, 7, 8, 26, 0, 26, 26, 0, 0, 0, - 0, 67, 0, 21, 21, 21, 21, 21, 21, 0, + 353, 35, 181, 26, 26, 163, 26, 26, 26, 26, + 26, 158, 159, 178, 40, 26, 26, 26, 26, 26, + 26, 26, 166, 37, 35, 172, 26, 101, 173, 131, + 132, 174, 175, 176, 80, 26, 228, 26, 26, 361, + 21, 21, 21, 21, 21, 21, 381, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 361, 0, 0, 21, 21, 154, 21, - 21, 21, 21, 21, 0, 67, 0, 0, 21, 21, - 21, 21, 21, 21, 0, 0, 163, 21, 259, 164, - 0, 258, 165, 166, 167, 0, 21, 0, 21, 21, - 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, - 157, 0, 0, 44, 0, 0, 44, 44, 44, 44, - 0, 0, 0, 44, 44, 0, 44, 44, 44, 44, - 44, 0, 0, 0, 0, 44, 44, 44, 44, 44, - 44, 4, 5, 6, 44, 7, 8, 164, 0, 0, - 165, 166, 167, 44, 177, 44, 44, 177, 177, 177, - 0, 177, 161, 177, 177, 161, 177, 0, 151, 0, - 0, 0, 0, 0, 152, 153, 154, 155, 0, 161, - 161, 0, 0, 0, 161, 177, 0, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 4, 5, 6, 0, 7, 8, - 0, 0, 177, 178, 161, 0, 178, 178, 178, 0, - 178, 126, 178, 178, 126, 178, 0, 0, 93, 0, - 0, 0, 0, 144, 145, 146, 147, 0, 126, 126, - 148, 0, 0, 126, 178, 115, 116, 177, 0, 0, - 0, 0, 124, 0, 67, 67, 67, 67, 0, 149, - 150, 67, 0, 0, 137, 138, 139, 140, 0, 0, - 0, 0, 0, 126, 52, 0, 0, 62, 64, 50, - 67, 57, 0, 65, 61, 0, 60, 0, 334, 335, - 336, 0, 338, 0, 0, 152, 153, 154, 155, 0, - 59, 163, 0, 0, 164, 63, 178, 165, 166, 167, - 201, 159, 160, 161, 162, 163, 0, 0, 164, 354, - 0, 165, 166, 167, 100, 0, 356, 100, 151, 0, - 358, 0, 58, 0, 152, 153, 154, 155, 0, 0, - 0, 100, 100, 366, 367, 0, 100, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 23, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 177, 177, - 177, 177, 177, 0, 177, 177, 177, 0, 0, 0, - 177, 0, 289, 161, 161, 161, 161, 157, 0, 0, - 161, 177, 161, 177, 177, 177, 177, 177, 161, 161, - 161, 161, 177, 177, 177, 177, 177, 177, 0, 161, - 161, 177, 161, 161, 161, 161, 161, 161, 161, 0, - 177, 161, 177, 177, 161, 161, 161, 178, 178, 178, - 178, 178, 0, 178, 178, 178, 0, 0, 0, 178, - 0, 0, 126, 126, 126, 126, 0, 0, 0, 126, - 178, 126, 178, 178, 178, 178, 178, 126, 126, 126, - 126, 178, 178, 178, 178, 178, 178, 0, 126, 126, - 178, 126, 126, 126, 126, 126, 126, 126, 0, 178, - 126, 178, 178, 126, 126, 126, 0, 22, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 0, 0, 157, - 32, 0, 0, 33, 34, 35, 36, 0, 0, 0, - 37, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 0, 44, - 0, 51, 44, 44, 44, 67, 44, 0, 44, 44, - 54, 44, 55, 56, 0, 100, 100, 100, 100, 0, - 0, 0, 100, 0, 100, 44, 0, 0, 0, 0, - 44, 100, 0, 0, 109, 0, 0, 118, 68, 0, - 0, 100, 100, 0, 100, 100, 100, 100, 100, 0, - 152, 153, 154, 155, 0, 52, 68, 44, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 161, 162, - 163, 0, 0, 164, 179, 151, 165, 166, 167, 0, - 0, 152, 153, 154, 155, 0, 63, 0, 187, 44, - 68, 0, 44, 0, 0, 156, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 52, 0, 58, 62, 64, 50, 0, 57, 0, - 65, 61, 0, 60, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 211, 0, 0, 152, 153, 154, - 155, 0, 63, 0, 0, 23, 0, 0, 53, 0, - 71, 0, 0, 71, 160, 161, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 0, 71, 71, 58, - 0, 0, 0, 253, 52, 0, 0, 62, 64, 50, - 261, 57, 0, 65, 61, 0, 60, 151, 0, 0, - 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, - 0, 23, 71, 0, 53, 63, 0, 156, 158, 159, - 160, 161, 162, 163, 0, 0, 164, 0, 0, 165, - 166, 167, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 58, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 0, 0, 44, 44, 44, - 44, 44, 44, 0, 23, 0, 44, 53, 0, 68, - 68, 68, 68, 0, 0, 44, 68, 44, 44, 111, - 25, 26, 27, 28, 89, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 157, 68, 68, 0, 0, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 0, 52, 0, 32, 62, 64, - 50, 0, 57, 131, 65, 61, 0, 60, 38, 0, - 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 63, 0, 51, 0, - 0, 71, 71, 71, 71, 0, 0, 54, 71, 55, - 56, 0, 152, 153, 154, 155, 0, 0, 117, 25, - 26, 27, 28, 58, 29, 30, 31, 71, 71, 0, - 32, 162, 163, 0, 0, 164, 0, 0, 165, 166, - 167, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 53, 52, - 0, 51, 62, 64, 50, 0, 57, 0, 65, 61, - 54, 60, 55, 56, 152, 0, 154, 155, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 63, 91, 91, 162, 163, 0, 148, 164, 0, 148, - 165, 166, 167, 104, 0, 0, 0, 0, 0, 112, - 91, 120, 0, 148, 148, 52, 91, 58, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 91, 91, - 91, 91, 151, 0, 0, 0, 0, 0, 152, 153, - 154, 155, 0, 0, 0, 0, 63, 0, 148, 0, - 0, 0, 53, 158, 159, 160, 161, 162, 163, 0, - 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 58, 112, 133, 52, 0, 0, 62, - 64, 50, 0, 57, 197, 65, 61, 0, 60, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 63, 53, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 154, 155, 51, 238, 58, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 0, 95, 163, 0, - 95, 164, 0, 0, 165, 166, 167, 0, 0, 270, - 0, 0, 0, 0, 95, 95, 0, 52, 0, 53, - 62, 64, 50, 0, 57, 241, 65, 61, 0, 60, - 0, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 63, 95, - 0, 0, 0, 0, 0, 0, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 58, 51, 148, 148, 148, - 148, 0, 0, 0, 148, 54, 0, 55, 56, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 148, 148, 0, 0, 0, 0, 0, - 53, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 70, 0, 51, 70, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 116, 70, 70, 116, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, - 0, 0, 32, 116, 116, 0, 0, 0, 116, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, - 0, 0, 70, 0, 44, 45, 46, 47, 48, 49, - 0, 0, 0, 51, 0, 0, 0, 0, 116, 0, - 0, 0, 54, 0, 55, 56, 0, 52, 0, 0, - 62, 64, 50, 0, 57, 249, 65, 61, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 0, 0, 0, 95, 0, 0, 63, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 0, 0, 32, 95, 95, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 58, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 52, 0, 51, 62, 64, 50, 0, 57, - 0, 65, 61, 54, 60, 55, 56, 0, 0, 0, - 53, 152, 153, 154, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 52, 0, 0, 62, 64, 50, 0, - 57, 282, 65, 61, 0, 60, 0, 0, 0, 0, - 0, 70, 70, 70, 70, 0, 0, 0, 70, 0, - 0, 0, 0, 0, 63, 53, 0, 116, 116, 116, - 116, 0, 0, 0, 116, 0, 116, 70, 70, 0, - 0, 0, 116, 116, 116, 116, 0, 0, 0, 0, - 0, 58, 0, 116, 116, 0, 116, 116, 116, 116, - 116, 116, 116, 0, 0, 116, 0, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 284, 65, 61, 0, - 60, 24, 25, 26, 27, 28, 53, 29, 30, 31, - 0, 0, 0, 32, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 51, 0, 58, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 291, 65, 61, 0, - 60, 0, 0, 0, 0, 22, 24, 25, 26, 27, - 28, 53, 29, 30, 31, 0, 0, 0, 32, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 58, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 52, 0, - 51, 62, 64, 50, 0, 57, 0, 65, 61, 54, - 60, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 58, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 53, 0, 0, 154, 0, 0, 154, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 154, 154, 0, 32, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 150, 51, 154, 150, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 150, 150, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 163, 0, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 163, 163, 0, 0, 0, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 163, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 131, 0, 51, 131, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 131, 131, 0, 0, 0, 131, 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, 0, 0, 126, 0, 131, 126, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 154, 154, 154, 0, - 126, 126, 154, 0, 154, 126, 0, 0, 0, 0, - 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, - 0, 154, 154, 0, 154, 154, 154, 154, 154, 154, - 154, 0, 0, 154, 0, 126, 154, 154, 154, 0, - 0, 0, 0, 0, 0, 150, 150, 150, 150, 0, - 0, 0, 150, 0, 150, 0, 0, 0, 0, 0, - 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, - 0, 150, 150, 0, 150, 150, 150, 150, 150, 150, - 150, 0, 0, 150, 0, 0, 150, 150, 150, 163, - 163, 163, 163, 0, 0, 0, 163, 0, 163, 0, - 0, 0, 0, 0, 163, 163, 163, 163, 0, 0, - 0, 129, 0, 0, 129, 163, 163, 0, 163, 163, - 163, 163, 163, 163, 163, 0, 0, 163, 129, 129, - 163, 163, 163, 129, 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, 0, - 0, 0, 0, 129, 131, 131, 131, 131, 0, 0, - 0, 131, 0, 131, 0, 0, 0, 0, 0, 131, - 131, 131, 131, 0, 0, 0, 127, 0, 0, 127, - 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, - 0, 0, 131, 127, 127, 131, 131, 131, 127, 0, - 0, 0, 0, 0, 126, 126, 126, 126, 0, 0, - 0, 126, 0, 126, 0, 0, 0, 0, 0, 126, - 126, 126, 126, 0, 0, 0, 137, 0, 127, 137, - 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, - 0, 0, 126, 137, 137, 126, 126, 126, 137, 0, + 283, 90, 325, 21, 21, 0, 21, 21, 21, 21, + 21, 0, 0, 270, 0, 21, 21, 21, 21, 21, + 21, 21, 367, 368, 0, 172, 21, 374, 173, 0, + 0, 174, 175, 176, 0, 21, 0, 21, 21, 0, + 0, 162, 0, 382, 162, 0, 0, 385, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 162, 162, + 0, 44, 0, 162, 44, 44, 44, 44, 0, 0, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 0, + 0, 383, 0, 44, 44, 44, 44, 44, 44, 0, + 0, 0, 0, 162, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 190, 44, 44, 190, 190, 190, + 0, 190, 169, 190, 190, 169, 190, 160, 0, 0, + 0, 0, 0, 161, 162, 163, 164, 0, 0, 169, + 169, 0, 0, 0, 169, 190, 0, 0, 0, 165, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 0, + 0, 174, 175, 176, 4, 5, 6, 0, 7, 8, + 0, 0, 190, 0, 169, 191, 0, 0, 191, 191, + 191, 0, 191, 134, 191, 191, 134, 191, 0, 0, + 160, 0, 0, 0, 0, 9, 161, 162, 163, 164, + 134, 134, 0, 0, 0, 134, 191, 190, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 97, 0, 174, 175, 176, 0, 0, 0, + 0, 0, 4, 5, 6, 134, 7, 8, 55, 119, + 120, 65, 67, 53, 0, 60, 134, 68, 64, 0, + 63, 161, 162, 163, 164, 0, 0, 0, 147, 148, + 149, 150, 0, 9, 62, 0, 0, 0, 191, 66, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 162, 162, 162, 162, 0, 0, 0, 162, + 0, 162, 0, 0, 0, 0, 61, 162, 162, 162, + 162, 153, 154, 155, 156, 211, 0, 0, 157, 0, + 162, 162, 0, 162, 162, 162, 162, 162, 162, 162, + 0, 0, 162, 0, 0, 162, 162, 162, 26, 158, + 159, 56, 0, 0, 0, 0, 0, 0, 190, 190, + 190, 190, 190, 0, 190, 190, 190, 0, 0, 0, + 190, 0, 0, 169, 169, 169, 169, 0, 0, 0, + 169, 190, 169, 190, 190, 190, 190, 190, 169, 169, + 169, 169, 190, 190, 190, 190, 190, 190, 0, 0, + 0, 169, 169, 190, 169, 169, 169, 169, 169, 169, + 169, 0, 190, 169, 190, 190, 169, 169, 169, 191, + 191, 191, 191, 191, 0, 191, 191, 191, 0, 0, + 0, 191, 0, 0, 134, 134, 134, 134, 0, 0, + 0, 134, 191, 134, 191, 191, 191, 191, 191, 134, + 134, 134, 134, 191, 191, 191, 191, 191, 191, 0, + 0, 0, 134, 134, 191, 134, 134, 134, 134, 134, + 134, 134, 0, 191, 134, 191, 191, 134, 134, 134, + 0, 25, 27, 28, 29, 30, 31, 166, 32, 33, + 34, 0, 0, 0, 35, 0, 0, 36, 37, 38, + 39, 0, 0, 0, 40, 41, 0, 42, 43, 44, + 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, + 51, 52, 0, 0, 0, 44, 0, 54, 44, 44, + 44, 0, 44, 0, 44, 44, 57, 44, 58, 59, + 0, 117, 0, 0, 0, 0, 0, 0, 0, 135, + 161, 44, 163, 164, 0, 0, 44, 0, 0, 78, + 0, 0, 78, 0, 0, 356, 357, 358, 0, 360, + 0, 171, 172, 0, 0, 173, 78, 78, 174, 175, + 176, 0, 0, 44, 0, 55, 0, 0, 65, 67, + 53, 117, 60, 0, 68, 64, 376, 63, 0, 0, + 0, 0, 0, 378, 0, 0, 0, 380, 0, 0, + 0, 78, 0, 0, 212, 44, 66, 0, 44, 0, + 388, 389, 117, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 0, 68, 64, 0, 63, 0, 0, + 0, 0, 0, 61, 161, 162, 163, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 106, 171, 172, 106, 0, 173, + 0, 0, 174, 175, 176, 26, 0, 0, 56, 0, + 0, 106, 106, 61, 0, 0, 106, 0, 0, 55, + 0, 0, 65, 67, 53, 0, 60, 0, 68, 64, + 0, 63, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 161, 162, 163, 164, 26, 106, 0, 56, 0, + 66, 0, 0, 0, 0, 0, 0, 165, 167, 168, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 61, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 0, 0, + 0, 44, 0, 117, 44, 44, 44, 44, 0, 117, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 26, + 0, 0, 56, 44, 44, 44, 44, 44, 44, 0, + 78, 78, 78, 78, 44, 0, 0, 78, 0, 0, + 0, 0, 0, 44, 0, 44, 44, 0, 0, 115, + 28, 29, 30, 31, 93, 32, 33, 34, 78, 78, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 75, 0, 0, 47, 48, 49, 50, 51, 52, 27, + 28, 29, 30, 31, 54, 32, 33, 34, 75, 0, + 0, 35, 0, 57, 0, 58, 59, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 166, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 0, 75, 0, 54, 106, 106, 106, 106, 0, + 0, 0, 106, 57, 106, 58, 59, 0, 0, 0, + 106, 106, 0, 121, 28, 29, 30, 31, 0, 32, + 33, 34, 0, 106, 106, 35, 106, 106, 106, 106, + 106, 106, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 163, 164, 0, 55, 0, 54, 65, + 67, 53, 0, 60, 0, 68, 64, 57, 63, 58, + 59, 0, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 125, 0, 0, 0, 0, 66, 0, 0, + 0, 161, 162, 163, 164, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 141, 68, 64, 0, 63, 168, + 169, 170, 171, 172, 61, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 66, 0, 0, + 161, 162, 163, 164, 0, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 56, + 170, 171, 172, 0, 61, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 75, 75, 75, 75, 0, 55, 0, 75, 65, + 67, 53, 0, 60, 207, 68, 64, 0, 63, 56, + 0, 0, 0, 0, 61, 0, 143, 160, 0, 75, + 75, 0, 0, 161, 162, 163, 164, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 56, + 0, 174, 175, 176, 61, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 218, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 161, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 161, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 56, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 255, 68, 64, 57, 63, 58, 59, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 263, 68, 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 161, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 129, 129, 129, 0, 120, 120, 129, - 0, 129, 120, 0, 0, 0, 0, 129, 129, 129, - 129, 0, 0, 0, 0, 0, 0, 0, 129, 129, - 0, 129, 129, 129, 129, 129, 129, 129, 69, 0, - 129, 69, 120, 129, 129, 129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 0, 0, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, - 127, 0, 0, 0, 127, 0, 127, 0, 0, 0, - 69, 0, 127, 127, 127, 127, 0, 0, 0, 119, - 0, 0, 119, 127, 127, 0, 127, 127, 127, 127, - 127, 127, 127, 0, 0, 127, 119, 119, 127, 127, - 127, 119, 0, 0, 0, 0, 0, 137, 137, 137, - 137, 0, 0, 0, 137, 0, 137, 0, 0, 0, - 0, 0, 137, 137, 137, 137, 0, 0, 0, 0, - 0, 119, 0, 137, 137, 0, 137, 137, 137, 137, - 137, 137, 137, 0, 0, 137, 0, 0, 137, 137, - 137, 161, 161, 161, 161, 0, 0, 0, 161, 0, - 161, 0, 0, 0, 0, 0, 161, 161, 161, 161, - 0, 0, 0, 75, 0, 0, 75, 161, 161, 0, - 161, 161, 161, 161, 161, 161, 161, 0, 0, 161, - 75, 75, 161, 161, 161, 75, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 0, 0, 120, 0, - 120, 0, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 0, 0, 0, 75, 0, 120, 120, 0, - 120, 120, 120, 120, 120, 120, 120, 164, 0, 120, - 0, 0, 120, 120, 120, 0, 0, 0, 0, 69, - 69, 69, 69, 0, 164, 164, 69, 0, 69, 164, - 0, 0, 0, 0, 69, 69, 69, 69, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 69, 69, - 69, 69, 69, 69, 69, 0, 149, 69, 0, 164, - 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 149, 0, 0, 0, 149, 0, - 119, 119, 119, 119, 0, 0, 0, 119, 0, 119, - 0, 0, 0, 0, 0, 119, 119, 119, 119, 0, - 0, 0, 72, 0, 0, 0, 119, 119, 149, 119, - 119, 119, 119, 119, 119, 119, 0, 0, 119, 72, - 72, 119, 119, 119, 72, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 108, 0, 0, 108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 61, 55, 0, 108, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 0, 0, 0, + 161, 162, 163, 164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 108, 0, 56, 167, 168, 169, + 170, 171, 172, 0, 0, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 296, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 0, 0, 117, - 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 117, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, - 0, 75, 0, 75, 0, 0, 0, 0, 0, 75, - 75, 75, 75, 0, 0, 0, 111, 0, 117, 111, - 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, - 0, 0, 75, 111, 111, 75, 75, 75, 111, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, - 164, 164, 0, 0, 0, 164, 0, 164, 111, 0, - 0, 0, 0, 164, 164, 164, 164, 0, 0, 0, - 112, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 164, 164, 0, 0, 164, 112, 112, 164, - 164, 164, 112, 0, 0, 0, 0, 149, 149, 149, - 149, 0, 0, 0, 149, 0, 149, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, - 0, 0, 112, 149, 149, 0, 149, 149, 149, 149, - 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, - 149, 0, 0, 72, 72, 72, 72, 0, 0, 0, - 72, 0, 72, 0, 0, 0, 0, 0, 72, 72, - 72, 72, 0, 0, 0, 0, 0, 0, 0, 72, - 72, 0, 72, 72, 72, 72, 72, 72, 72, 0, - 0, 72, 0, 0, 72, 72, 72, 117, 117, 117, - 117, 0, 0, 0, 117, 0, 117, 0, 0, 0, - 0, 0, 117, 117, 117, 117, 113, 0, 0, 113, - 0, 0, 0, 117, 117, 0, 117, 117, 117, 117, - 117, 117, 117, 113, 113, 117, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 0, 0, 0, 111, 0, 111, 0, 0, 0, - 0, 0, 111, 111, 111, 111, 0, 109, 113, 0, - 109, 0, 0, 111, 111, 0, 111, 111, 111, 111, - 111, 111, 111, 0, 109, 109, 0, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 112, 112, 112, 0, 0, 0, 112, 109, - 112, 0, 0, 0, 0, 0, 112, 112, 112, 112, - 110, 0, 0, 110, 0, 0, 0, 112, 112, 0, - 112, 112, 112, 112, 112, 112, 112, 110, 110, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 108, 108, 0, 0, 0, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 96, 96, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 113, 113, - 113, 0, 0, 0, 113, 96, 113, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 97, 0, 0, 97, - 0, 0, 0, 113, 113, 0, 113, 113, 113, 113, - 113, 113, 113, 97, 97, 0, 0, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 0, 0, 0, 109, 0, 109, 0, 0, - 0, 0, 0, 109, 109, 109, 109, 98, 97, 0, - 98, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 109, 109, 98, 98, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 110, 98, - 110, 0, 0, 0, 0, 0, 110, 110, 110, 110, - 0, 0, 0, 0, 0, 0, 0, 110, 110, 0, - 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, - 108, 0, 0, 0, 108, 0, 108, 0, 0, 0, - 0, 0, 108, 108, 108, 108, 0, 0, 0, 0, - 0, 0, 99, 108, 108, 99, 108, 108, 108, 108, - 108, 108, 108, 0, 96, 96, 96, 96, 0, 99, - 99, 96, 0, 96, 99, 0, 0, 0, 0, 96, - 96, 96, 96, 0, 0, 0, 0, 0, 0, 153, - 96, 96, 153, 96, 96, 96, 96, 96, 96, 96, - 101, 0, 0, 101, 99, 0, 153, 153, 0, 0, - 0, 153, 0, 0, 0, 0, 0, 101, 101, 0, - 0, 0, 101, 0, 0, 0, 0, 97, 97, 97, - 97, 0, 0, 0, 97, 0, 97, 0, 0, 0, - 0, 153, 97, 97, 97, 97, 152, 0, 0, 152, - 0, 0, 101, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 0, 152, 152, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 98, - 98, 98, 0, 0, 0, 98, 0, 98, 0, 0, - 0, 0, 0, 98, 98, 0, 98, 141, 152, 0, - 141, 0, 0, 0, 98, 98, 0, 98, 98, 98, - 98, 98, 98, 0, 141, 141, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 118, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 102, 0, 0, 102, 141, - 0, 0, 118, 118, 0, 0, 0, 118, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 99, 99, 99, 118, 0, 0, - 99, 0, 99, 0, 0, 0, 0, 102, 99, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 99, 0, 99, 99, 99, 99, 99, 99, 0, 0, - 153, 153, 153, 153, 0, 0, 0, 153, 0, 153, - 0, 101, 101, 101, 101, 153, 153, 0, 101, 0, - 101, 0, 0, 0, 0, 0, 153, 153, 0, 153, - 153, 153, 153, 153, 0, 0, 0, 101, 101, 0, - 101, 101, 101, 101, 101, 103, 0, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, - 152, 0, 103, 103, 152, 0, 152, 103, 0, 0, - 0, 0, 152, 152, 0, 0, 0, 0, 105, 0, - 0, 105, 0, 152, 152, 0, 152, 152, 152, 152, - 152, 0, 0, 0, 0, 105, 105, 103, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 141, 141, - 141, 141, 0, 0, 0, 141, 0, 141, 0, 0, - 0, 0, 0, 141, 141, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 141, 141, 0, 141, 141, 141, - 141, 141, 0, 0, 0, 0, 118, 118, 118, 118, - 0, 0, 0, 118, 0, 118, 102, 102, 102, 102, - 0, 118, 118, 102, 0, 102, 0, 0, 0, 0, - 0, 0, 118, 118, 0, 118, 118, 118, 118, 118, - 0, 106, 102, 102, 106, 102, 102, 102, 102, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 95, 0, 0, 106, 0, 0, 0, 0, 105, 0, - 0, 0, 110, 0, 0, 119, 0, 0, 0, 0, - 0, 0, 126, 127, 128, 129, 130, 0, 0, 0, - 135, 136, 0, 106, 0, 0, 141, 0, 0, 0, + 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 54, 0, 0, 56, 0, 0, 0, 0, + 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 55, 0, 35, + 65, 67, 53, 0, 60, 298, 68, 64, 0, 63, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 66, 0, + 0, 0, 54, 108, 108, 108, 108, 0, 0, 0, + 108, 57, 108, 58, 59, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 61, 0, 0, 35, 0, + 0, 108, 108, 0, 108, 108, 108, 108, 108, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 55, + 56, 54, 65, 67, 53, 0, 60, 307, 68, 64, + 57, 63, 58, 59, 0, 0, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 61, 0, 55, + 0, 54, 65, 67, 53, 0, 60, 0, 68, 64, + 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, + 66, 0, 56, 0, 0, 0, 0, 0, 158, 0, + 108, 158, 0, 0, 0, 0, 116, 95, 124, 0, + 0, 0, 130, 95, 0, 158, 158, 61, 0, 0, + 158, 0, 0, 0, 0, 95, 95, 95, 95, 0, + 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 0, 0, 0, 35, 0, 74, 0, 0, 74, 0, + 158, 0, 56, 0, 41, 0, 42, 43, 44, 45, + 46, 178, 0, 74, 178, 47, 48, 49, 50, 51, + 52, 0, 116, 0, 0, 0, 54, 0, 178, 178, + 0, 0, 0, 178, 0, 57, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 0, 139, 0, 0, 139, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 139, 139, 0, 35, 252, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 284, 0, 0, 0, 139, 54, 0, + 0, 0, 0, 0, 0, 134, 0, 57, 134, 58, + 59, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 134, 134, 0, 35, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 0, 0, 134, 54, 158, + 158, 158, 158, 0, 0, 0, 158, 57, 158, 58, + 59, 0, 0, 0, 158, 158, 158, 158, 0, 0, + 0, 0, 0, 137, 0, 0, 137, 158, 158, 0, + 158, 158, 158, 158, 158, 158, 158, 0, 0, 158, + 137, 137, 158, 158, 158, 137, 74, 74, 74, 74, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 178, + 135, 178, 0, 135, 74, 137, 0, 178, 178, 178, + 178, 0, 0, 0, 0, 0, 0, 135, 135, 0, + 178, 178, 135, 178, 178, 178, 178, 178, 178, 178, + 0, 0, 178, 0, 0, 178, 178, 178, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 0, 145, 135, 139, 145, 139, 0, 0, 0, 0, + 0, 139, 139, 139, 139, 0, 0, 0, 145, 145, + 0, 0, 0, 145, 139, 139, 0, 139, 139, 139, + 139, 139, 139, 139, 0, 0, 139, 0, 0, 139, + 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 145, 0, 156, 134, 134, 134, 134, + 0, 169, 0, 134, 169, 134, 0, 0, 0, 156, + 156, 134, 134, 134, 134, 0, 0, 0, 169, 169, + 0, 0, 0, 169, 134, 134, 0, 134, 134, 134, + 134, 134, 134, 134, 0, 0, 134, 0, 0, 134, + 134, 134, 0, 0, 156, 0, 0, 172, 0, 0, + 172, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 172, 0, 0, 0, 172, + 0, 0, 0, 0, 137, 137, 137, 137, 0, 0, + 0, 137, 0, 137, 0, 0, 0, 0, 0, 137, + 137, 137, 137, 0, 0, 0, 0, 0, 0, 172, + 0, 0, 137, 137, 0, 137, 137, 137, 137, 137, + 137, 137, 0, 0, 137, 0, 0, 137, 137, 137, + 0, 135, 135, 135, 135, 0, 128, 0, 135, 128, + 135, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 0, 0, 0, 128, 128, 0, 0, 0, 128, 135, + 135, 0, 135, 135, 135, 135, 135, 135, 135, 0, + 0, 135, 0, 0, 135, 135, 135, 0, 0, 0, + 0, 0, 145, 145, 145, 145, 0, 76, 128, 145, + 76, 145, 0, 0, 0, 0, 0, 145, 145, 145, + 145, 0, 0, 0, 76, 76, 0, 0, 0, 76, + 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, + 0, 0, 145, 0, 0, 145, 145, 145, 0, 0, + 0, 0, 0, 156, 156, 156, 156, 0, 0, 76, + 156, 0, 169, 169, 169, 169, 0, 66, 0, 169, + 66, 169, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 156, 156, 0, 66, 66, 0, 0, 0, 66, + 169, 169, 0, 169, 169, 169, 169, 169, 169, 169, + 0, 0, 169, 0, 0, 169, 169, 169, 172, 172, + 172, 172, 0, 127, 0, 172, 127, 172, 0, 66, + 0, 0, 0, 172, 172, 172, 172, 0, 0, 0, + 127, 127, 0, 0, 0, 127, 172, 172, 0, 172, + 172, 172, 172, 172, 172, 172, 0, 0, 172, 0, + 0, 172, 172, 172, 0, 0, 0, 0, 0, 82, + 0, 0, 82, 0, 0, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, + 0, 82, 114, 0, 0, 114, 0, 128, 128, 128, + 128, 0, 0, 0, 128, 0, 128, 0, 0, 114, + 114, 0, 128, 128, 128, 128, 0, 0, 0, 0, + 0, 82, 0, 0, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 0, 0, 128, 0, 0, + 128, 128, 128, 102, 114, 0, 102, 0, 76, 76, + 76, 76, 179, 0, 0, 76, 0, 76, 0, 0, + 102, 102, 0, 76, 76, 76, 76, 0, 0, 179, + 179, 0, 0, 0, 179, 0, 76, 76, 0, 76, + 76, 76, 76, 76, 76, 76, 0, 0, 76, 0, + 0, 76, 76, 76, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 0, 0, 0, 66, 66, + 66, 66, 157, 0, 0, 66, 0, 66, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 0, 157, + 157, 0, 0, 0, 157, 0, 66, 66, 0, 66, + 66, 66, 66, 66, 66, 66, 0, 0, 66, 0, + 0, 66, 66, 66, 127, 127, 127, 127, 79, 0, + 0, 127, 0, 127, 157, 0, 0, 0, 0, 127, + 127, 127, 127, 0, 0, 79, 79, 0, 0, 0, + 79, 0, 127, 127, 0, 127, 127, 127, 127, 127, + 127, 127, 0, 0, 127, 0, 0, 127, 127, 127, + 82, 82, 82, 82, 0, 0, 0, 82, 0, 82, + 79, 0, 0, 0, 0, 82, 82, 82, 82, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 82, 82, + 114, 82, 82, 82, 82, 82, 82, 82, 0, 123, + 82, 0, 123, 82, 82, 82, 0, 0, 0, 0, + 0, 114, 114, 0, 114, 0, 123, 123, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 0, 0, + 0, 102, 0, 179, 179, 179, 179, 0, 0, 0, + 179, 123, 179, 0, 0, 0, 0, 0, 179, 179, + 179, 179, 102, 102, 0, 0, 0, 0, 0, 0, + 0, 179, 179, 0, 179, 179, 179, 179, 179, 179, + 179, 0, 0, 179, 0, 0, 179, 179, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, - 0, 0, 0, 103, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 0, 0, + 157, 124, 157, 0, 124, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 0, 0, 0, 124, 124, + 0, 157, 157, 124, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 79, + 79, 79, 79, 0, 118, 0, 79, 118, 79, 0, + 0, 0, 0, 124, 79, 79, 79, 79, 0, 0, + 0, 118, 118, 0, 0, 0, 118, 79, 79, 0, + 79, 79, 79, 79, 79, 79, 79, 99, 0, 79, + 0, 0, 79, 79, 79, 109, 0, 0, 119, 114, + 0, 119, 123, 0, 0, 128, 118, 0, 0, 136, + 137, 138, 139, 140, 0, 119, 119, 145, 146, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 123, 123, 123, 0, 0, 0, 123, 120, 123, + 0, 120, 0, 0, 0, 123, 123, 123, 123, 0, + 119, 0, 196, 0, 0, 120, 120, 0, 123, 123, + 120, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 123, 0, 0, 0, 0, 0, 116, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 0, 103, 103, 103, 103, 105, - 105, 105, 105, 0, 0, 0, 105, 0, 105, 0, - 0, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 105, 105, 0, 105, 105, - 105, 0, 0, 0, 0, 0, 0, 0, 251, 0, + 120, 0, 0, 116, 116, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 0, 124, 124, 124, 124, 124, 124, 124, + 0, 0, 124, 0, 0, 118, 118, 118, 118, 0, + 115, 0, 118, 115, 118, 0, 0, 0, 0, 117, + 118, 118, 118, 118, 0, 0, 0, 115, 115, 0, + 0, 0, 115, 118, 118, 0, 118, 118, 118, 118, + 118, 118, 118, 0, 0, 0, 327, 0, 0, 119, + 119, 119, 119, 0, 0, 0, 119, 77, 119, 0, + 77, 0, 115, 0, 119, 119, 119, 119, 0, 0, + 0, 0, 0, 0, 77, 77, 0, 119, 119, 343, + 119, 119, 119, 119, 119, 119, 119, 0, 0, 120, + 120, 120, 120, 0, 103, 0, 120, 103, 120, 0, + 0, 0, 0, 0, 120, 120, 120, 120, 0, 77, + 0, 103, 103, 0, 0, 0, 103, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 116, 116, 116, + 116, 0, 104, 0, 116, 104, 116, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 103, 0, 0, 104, + 104, 0, 0, 0, 104, 116, 116, 0, 116, 116, + 116, 116, 116, 116, 116, 0, 0, 0, 0, 105, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 105, 105, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 0, 0, + 0, 0, 0, 117, 117, 117, 117, 305, 0, 0, + 0, 105, 166, 0, 0, 0, 117, 117, 0, 117, + 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 0, 161, 0, 115, 161, + 115, 0, 0, 0, 0, 0, 115, 115, 115, 115, + 0, 0, 0, 161, 161, 0, 0, 0, 161, 115, + 115, 0, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 0, 0, 160, 0, 0, 160, 0, 77, 77, + 77, 77, 0, 149, 0, 77, 149, 0, 161, 0, + 160, 160, 0, 0, 0, 160, 0, 0, 0, 0, + 149, 149, 0, 0, 0, 149, 77, 77, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, + 126, 0, 103, 126, 103, 160, 0, 0, 0, 0, + 103, 103, 103, 103, 0, 149, 0, 126, 126, 0, + 0, 0, 126, 103, 103, 0, 103, 103, 103, 103, + 103, 103, 103, 104, 104, 104, 104, 0, 107, 0, + 104, 107, 104, 0, 0, 0, 0, 0, 104, 104, + 104, 104, 126, 0, 0, 107, 107, 0, 0, 0, + 107, 104, 104, 0, 104, 104, 104, 104, 104, 104, + 105, 105, 105, 105, 0, 109, 0, 105, 109, 105, + 0, 0, 0, 0, 0, 105, 105, 0, 105, 0, + 107, 110, 109, 109, 110, 0, 0, 109, 105, 105, + 0, 105, 105, 105, 105, 105, 105, 0, 110, 110, + 160, 0, 0, 110, 0, 0, 161, 162, 163, 164, + 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 0, 110, 174, 175, 176, 161, 161, 161, + 161, 0, 112, 0, 161, 112, 161, 0, 0, 0, + 0, 0, 161, 161, 0, 0, 0, 0, 0, 112, + 112, 0, 0, 0, 112, 161, 161, 0, 161, 161, + 161, 161, 161, 0, 160, 160, 160, 160, 0, 113, + 0, 160, 113, 160, 149, 149, 149, 149, 0, 160, + 160, 149, 0, 149, 112, 0, 113, 113, 0, 149, + 149, 113, 160, 160, 0, 160, 160, 160, 160, 160, + 0, 0, 149, 149, 0, 149, 149, 149, 149, 149, + 0, 126, 126, 126, 126, 0, 0, 0, 126, 0, + 126, 113, 0, 0, 0, 0, 126, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 126, 0, 126, 126, 126, 126, 126, 0, 0, 107, + 107, 107, 107, 0, 0, 0, 107, 0, 107, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 107, 0, + 107, 107, 107, 107, 107, 0, 109, 109, 109, 109, + 0, 0, 0, 109, 0, 109, 0, 0, 0, 0, + 0, 0, 110, 110, 110, 110, 0, 0, 0, 110, + 0, 110, 0, 0, 109, 109, 0, 109, 109, 109, + 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 0, 110, 110, 110, 110, 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, 0, 112, 112, 112, 112, 0, 0, 0, + 112, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112, 112, 0, 112, 112, 112, 0, 0, 0, + 113, 113, 113, 113, 0, 0, 0, 113, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 106, 106, 106, 0, 0, 0, 106, - 0, 106, 0, 0, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, + 0, 113, 113, }; -static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, - 91, 41, 41, 40, 44, 298, 299, 257, 41, 93, - 58, 59, 46, 59, 40, 63, 41, 123, 58, 59, - 59, 41, 123, 57, 58, 40, 367, 41, 59, 41, - 41, 41, 123, 92, 59, 194, 41, 41, 257, 41, - 278, 41, 123, 41, 41, 93, 44, 40, 59, 59, - 91, 276, 277, 93, 91, 59, 115, 41, 123, 44, - 58, 59, 59, 40, 123, 63, 98, 99, 100, 101, - 102, 103, 41, 107, 108, 59, 40, 123, 123, 289, - 290, 59, 123, 59, 0, 59, 123, 40, 40, 36, - 59, 40, 40, 40, 294, 93, 306, 307, 44, 59, - 310, 123, 260, 313, 314, 315, 257, 40, 40, 40, - 144, 145, 146, 147, 148, 149, 150, 33, 277, 41, - 36, 37, 38, 93, 40, 315, 42, 43, 93, 45, - 93, 125, 93, 91, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 59, 91, 257, 36, 0, 64, 255, - 41, 185, 125, 312, 260, 189, 190, 91, 192, 299, - 194, 41, 40, 195, 41, 41, 93, 201, 93, 203, - 204, 41, 333, 334, 208, 91, 123, 338, 41, 257, - 33, 40, 125, 36, 37, 38, 41, 40, 59, 42, - 43, 59, 45, 354, 123, 125, 255, 358, 357, 125, - 234, 260, 236, 237, 0, 125, 59, 123, 41, 125, - 126, 64, 257, 125, 298, 299, 41, 262, 41, 298, - 299, 298, 299, 59, 272, 273, 274, 275, 298, 299, - 40, 279, 272, 273, 274, 275, 41, 33, 91, 279, - 36, 37, 38, 296, 40, 344, 42, 43, 41, 45, - 298, 299, 41, 301, 288, 298, 299, 123, 298, 299, - 294, 301, 41, 59, 59, 298, 299, 123, 64, 41, - 123, 59, 125, 126, 272, 273, 274, 275, 298, 299, - 314, 279, 41, 281, 298, 299, 298, 299, 41, 287, - 288, 289, 290, 298, 299, 91, 298, 299, 298, 299, - 298, 299, 59, 301, 302, 303, 304, 305, 306, 307, - 63, 258, 310, 298, 299, 313, 314, 315, 41, 353, - 298, 299, 298, 299, 298, 299, 8, 123, 298, 299, - 126, 32, 13, 298, 299, 298, 299, 298, 299, 145, - 256, 257, 258, 259, 260, 261, 353, 263, 264, 265, +static short yycheck[] = { 15, + 36, 91, 41, 36, 40, 59, 59, 41, 195, 41, + 59, 59, 41, 59, 59, 44, 59, 123, 93, 36, + 93, 358, 59, 40, 96, 91, 40, 91, 41, 58, + 59, 41, 41, 49, 63, 59, 41, 59, 41, 257, + 204, 40, 192, 90, 60, 61, 59, 41, 198, 257, + 59, 15, 389, 41, 101, 127, 59, 123, 41, 123, + 289, 290, 300, 301, 93, 59, 266, 267, 268, 41, + 270, 271, 41, 41, 91, 123, 41, 91, 123, 44, + 309, 45, 41, 312, 48, 93, 315, 316, 317, 44, + 123, 59, 91, 58, 59, 111, 112, 297, 63, 123, + 59, 123, 59, 36, 37, 40, 123, 40, 40, 123, + 257, 41, 59, 129, 0, 102, 103, 104, 105, 106, + 107, 85, 40, 310, 123, 278, 41, 291, 93, 59, + 312, 64, 40, 315, 316, 317, 100, 153, 154, 155, + 156, 157, 158, 159, 59, 276, 277, 33, 93, 40, + 36, 37, 38, 93, 40, 93, 42, 43, 40, 45, + 40, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 334, 8, 9, 59, 0, 40, 40, 123, 64, 195, + 59, 44, 123, 199, 200, 40, 202, 151, 204, 260, + 257, 40, 298, 41, 93, 211, 268, 213, 214, 40, + 125, 298, 274, 257, 317, 91, 222, 33, 36, 298, + 36, 37, 38, 91, 40, 379, 42, 43, 205, 45, + 41, 125, 257, 91, 257, 300, 301, 300, 301, 262, + 260, 301, 248, 59, 250, 251, 40, 123, 64, 125, + 126, 258, 0, 272, 273, 274, 275, 300, 301, 260, + 279, 300, 301, 298, 300, 301, 41, 300, 301, 41, + 296, 300, 301, 300, 301, 91, 300, 301, 300, 301, + 41, 300, 301, 41, 303, 33, 366, 41, 36, 37, + 38, 40, 40, 59, 42, 43, 41, 45, 304, 125, + 300, 301, 300, 301, 310, 300, 301, 123, 125, 125, + 126, 59, 125, 267, 123, 269, 64, 272, 273, 274, + 275, 275, 300, 301, 279, 125, 281, 300, 301, 59, + 336, 41, 287, 288, 289, 290, 125, 41, 300, 301, + 44, 300, 301, 91, 41, 300, 301, 41, 303, 304, + 305, 306, 307, 308, 309, 300, 301, 312, 59, 63, + 315, 316, 317, 300, 301, 300, 301, 40, 123, 375, + 300, 301, 300, 301, 41, 123, 41, 41, 126, 123, + 256, 257, 258, 259, 260, 261, 41, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 41, 59, 41, 279, 280, 289, 282, 283, 284, 285, + 286, 300, 301, 59, 41, 291, 292, 293, 294, 295, + 296, 297, 63, 59, 41, 309, 302, 35, 312, 52, + 52, 315, 316, 317, 15, 311, 154, 313, 314, 336, + 256, 257, 258, 259, 260, 261, 375, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 125, 192, 97, 279, 280, -1, 282, 283, 284, 285, - 286, 298, 299, 298, 299, 291, 292, 293, 294, 295, - 296, -1, -1, 41, 300, -1, 44, 266, 267, 268, - 314, 270, 271, 309, -1, 311, 312, -1, -1, -1, - -1, 59, -1, 256, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 125, -1, -1, 279, 280, 289, 282, - 283, 284, 285, 286, -1, 93, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, 307, 300, 41, 310, - -1, 44, 313, 314, 315, -1, 309, -1, 311, 312, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 63, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 266, 267, 268, 300, 270, 271, 310, -1, -1, - 313, 314, 315, 309, 33, 311, 312, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, 58, - 59, -1, -1, -1, 63, 64, -1, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 266, 267, 268, -1, 270, 271, - -1, -1, 91, 33, 93, -1, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, -1, -1, 26, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - 279, -1, -1, 63, 64, 43, 44, 126, -1, -1, - -1, -1, 50, -1, 272, 273, 274, 275, -1, 298, - 299, 279, -1, -1, 62, 63, 64, 65, -1, -1, - -1, -1, -1, 93, 33, -1, -1, 36, 37, 38, - 298, 40, -1, 42, 43, -1, 45, -1, 309, 310, - 311, -1, 313, -1, -1, 287, 288, 289, 290, -1, - 59, 307, -1, -1, 310, 64, 126, 313, 314, 315, - 108, 303, 304, 305, 306, 307, -1, -1, 310, 340, - -1, 313, 314, 315, 41, -1, 347, 44, 281, -1, - 351, -1, 91, -1, 287, 288, 289, 290, -1, -1, - -1, 58, 59, 364, 365, -1, 63, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 123, -1, -1, 126, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, 257, 258, + 202, 24, 269, 279, 280, -1, 282, 283, 284, 285, + 286, -1, -1, 125, -1, 291, 292, 293, 294, 295, + 296, 297, 355, 356, -1, 309, 302, 360, 312, -1, + -1, 315, 316, 317, -1, 311, -1, 313, 314, -1, + -1, 41, -1, 376, 44, -1, -1, 380, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 58, 59, + -1, 269, -1, 63, 272, 273, 274, 275, -1, -1, + -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, + -1, 125, -1, 291, 292, 293, 294, 295, 296, -1, + -1, -1, -1, 93, 302, -1, -1, -1, -1, -1, + -1, -1, -1, 311, 33, 313, 314, 36, 37, 38, + -1, 40, 41, 42, 43, 44, 45, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, 64, -1, -1, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 266, 267, 268, -1, 270, 271, + -1, -1, 91, -1, 93, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, -1, + 281, -1, -1, -1, -1, 297, 287, 288, 289, 290, + 58, 59, -1, -1, -1, 63, 64, 126, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, 29, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 266, 267, 268, 93, 270, 271, 33, 46, + 47, 36, 37, 38, -1, 40, 53, 42, 43, -1, + 45, 287, 288, 289, 290, -1, -1, -1, 65, 66, + 67, 68, -1, 297, 59, -1, -1, -1, 126, 64, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, 91, 287, 288, 289, + 290, 272, 273, 274, 275, 112, -1, -1, 279, -1, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 123, 300, + 301, 126, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, - 269, -1, 58, 272, 273, 274, 275, 63, -1, -1, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, -1, - 309, 310, 311, 312, 313, 314, 315, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, -1, 309, - 310, 311, 312, 313, 314, 315, -1, 256, 257, 258, - 259, 260, 261, -1, 263, 264, 265, -1, -1, 63, 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, -1, 33, - -1, 300, 36, 37, 38, 13, 40, -1, 42, 43, - 309, 45, 311, 312, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, 59, -1, -1, -1, -1, - 64, 288, -1, -1, 42, -1, -1, 45, 41, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, -1, - 287, 288, 289, 290, -1, 33, 59, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 305, 306, - 307, -1, -1, 310, 82, 281, 313, 314, 315, -1, - -1, 287, 288, 289, 290, -1, 64, -1, 96, 123, - 93, -1, 126, -1, -1, 301, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, - -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 142, -1, -1, 287, 288, 289, - 290, -1, 64, -1, -1, 123, -1, -1, 126, -1, - 41, -1, -1, 44, 304, 305, 306, 307, -1, -1, - 310, -1, -1, 313, 314, 315, -1, 58, 59, 91, - -1, -1, -1, 181, 33, -1, -1, 36, 37, 38, - 188, 40, -1, 42, 43, -1, 45, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, 123, 93, -1, 126, 64, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, -1, -1, 313, - 314, 315, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 91, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, 123, -1, 300, 126, -1, 272, - 273, 274, 275, -1, -1, 309, 279, 311, 312, 257, - 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 269, -1, -1, 63, 298, 299, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, 257, 258, 259, 260, 261, - -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, - 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, - 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, 64, -1, 300, -1, - -1, 272, 273, 274, 275, -1, -1, 309, 279, 311, - 312, -1, 287, 288, 289, 290, -1, -1, 257, 258, - 259, 260, 261, 91, 263, 264, 265, 298, 299, -1, - 269, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, 126, 33, - -1, 300, 36, 37, 38, -1, 40, -1, 42, 43, - 309, 45, 311, 312, 287, -1, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, - 64, 25, 26, 306, 307, -1, 41, 310, -1, 44, - 313, 314, 315, 37, -1, -1, -1, -1, -1, 43, - 44, 45, -1, 58, 59, 33, 50, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 62, 63, - 64, 65, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, 64, -1, 93, -1, - -1, -1, 126, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, -1, -1, -1, - -1, -1, -1, 91, 108, 93, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, 257, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + -1, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, -1, 311, 312, 313, 314, 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, -1, -1, -1, -1, 64, 126, -1, + -1, 269, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, -1, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + -1, 256, 257, 258, 259, 260, 261, 63, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, + 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, + 295, 296, -1, -1, -1, 33, -1, 302, 36, 37, + 38, -1, 40, -1, 42, 43, 311, 45, 313, 314, + -1, 46, -1, -1, -1, -1, -1, -1, -1, 54, + 287, 59, 289, 290, -1, -1, 64, -1, -1, 41, + -1, -1, 44, -1, -1, 331, 332, 333, -1, 335, + -1, 308, 309, -1, -1, 312, 58, 59, 315, 316, + 317, -1, -1, 91, -1, 33, -1, -1, 36, 37, + 38, 96, 40, -1, 42, 43, 362, 45, -1, -1, + -1, -1, -1, 369, -1, -1, -1, 373, -1, -1, + -1, 93, -1, -1, 119, 123, 64, -1, 126, -1, + 386, 387, 127, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, -1, -1, + -1, -1, -1, 91, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, + -1, -1, -1, -1, 41, 308, 309, 44, -1, 312, + -1, -1, 315, 316, 317, 123, -1, -1, 126, -1, + -1, 58, 59, 91, -1, -1, 63, -1, -1, 33, + -1, -1, 36, 37, 38, -1, 40, -1, 42, 43, + -1, 45, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, 123, 93, -1, 126, -1, + 64, -1, -1, -1, -1, -1, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 91, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, 268, 272, 273, 274, 275, -1, 274, + -1, 279, 280, -1, 282, 283, 284, 285, 286, 123, + -1, -1, 126, 291, 292, 293, 294, 295, 296, -1, + 272, 273, 274, 275, 302, -1, -1, 279, -1, -1, + -1, -1, -1, 311, -1, 313, 314, -1, -1, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 300, 301, + -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + 41, -1, -1, 291, 292, 293, 294, 295, 296, 257, + 258, 259, 260, 261, 302, 263, 264, 265, 59, -1, + -1, 269, -1, 311, -1, 313, 314, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 63, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 289, 290, 300, 167, 91, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, -1, 41, 307, -1, - 44, 310, -1, -1, 313, 314, 315, -1, -1, 193, - -1, -1, -1, -1, 58, 59, -1, 33, -1, 126, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 64, 93, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + -1, -1, 93, -1, 302, 272, 273, 274, 275, -1, + -1, -1, 279, 311, 281, 313, 314, -1, -1, -1, + 287, 288, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, -1, 300, 301, 269, 303, 304, 305, 306, + 307, 308, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 91, 300, 272, 273, 274, - 275, -1, -1, -1, 279, 309, -1, 311, 312, 257, - 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, 298, 299, -1, -1, -1, -1, -1, - 126, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 41, -1, 300, 44, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, 41, 58, 59, 44, - 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, -1, 93, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 300, -1, -1, -1, -1, 93, -1, - -1, -1, 309, -1, 311, 312, -1, 33, -1, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, 64, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 298, 299, -1, -1, -1, -1, - -1, -1, -1, -1, 280, 91, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 33, -1, 300, 36, 37, 38, -1, 40, - -1, 42, 43, 309, 45, 311, 312, -1, -1, -1, - 126, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, -1, -1, 64, -1, -1, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, + 294, 295, 296, 289, 290, -1, 33, -1, 302, 36, + 37, 38, -1, 40, -1, 42, 43, 311, 45, 313, + 314, -1, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 59, -1, -1, -1, -1, 64, -1, -1, + -1, 287, 288, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 305, + 306, 307, 308, 309, 91, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 64, -1, -1, + 287, 288, 289, 290, -1, -1, 33, -1, -1, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, 126, + 307, 308, 309, -1, 91, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, 272, 273, 274, 275, -1, 33, -1, 279, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 126, + -1, -1, -1, -1, 91, -1, 93, 281, -1, 300, + 301, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - -1, -1, -1, -1, 64, 126, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, 298, 299, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 91, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, 257, 258, 259, 260, 261, 126, 263, 264, 265, - -1, -1, -1, 269, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, -1, 300, -1, 91, -1, -1, -1, - -1, -1, -1, 309, -1, 311, 312, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, -1, -1, -1, -1, 256, 257, 258, 259, 260, - 261, 126, 263, 264, 265, -1, -1, -1, 269, 64, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 91, -1, -1, 300, - -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, - 311, 312, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 33, -1, - 300, 36, 37, 38, -1, 40, -1, 42, 43, 309, - 45, 311, 312, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 280, 91, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, -1, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 126, -1, -1, 41, -1, -1, 44, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 58, 59, -1, 269, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, 41, 300, 93, 44, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 304, 305, 306, 307, 308, 309, -1, -1, 312, 126, + -1, 315, 316, 317, 91, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - 93, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 41, -1, 300, 44, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, 126, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, 93, 313, 314, 315, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 91, 33, -1, 63, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, -1, 313, 314, 315, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, 41, -1, -1, 44, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, 58, 59, - 313, 314, 315, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, 93, -1, 126, 304, 305, 306, + 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 91, -1, 33, -1, -1, 36, 37, 38, -1, 40, + 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 302, -1, -1, 126, -1, -1, -1, -1, + -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, 64, -1, + -1, -1, 302, 272, 273, 274, 275, -1, -1, -1, + 279, 311, 281, 313, 314, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, 91, -1, -1, 269, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, + 126, 302, 36, 37, 38, -1, 40, 41, 42, 43, + 311, 45, 313, 314, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 64, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, 91, -1, 33, + -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, + 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, 29, + 64, -1, 126, -1, -1, -1, -1, -1, 41, -1, + 40, 44, -1, -1, -1, -1, 46, 47, 48, -1, + -1, -1, 52, 53, -1, 58, 59, 91, -1, -1, + 63, -1, -1, -1, -1, 65, 66, 67, 68, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 41, -1, -1, 44, -1, + 93, -1, 126, -1, 280, -1, 282, 283, 284, 285, + 286, 41, -1, 59, 44, 291, 292, 293, 294, 295, + 296, -1, 112, -1, -1, -1, 302, -1, 58, 59, + -1, -1, -1, 63, -1, 311, -1, 313, 314, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, -1, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, + -1, -1, -1, 93, -1, 41, -1, -1, 44, -1, + -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, 176, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, 203, -1, -1, -1, 93, 302, -1, + -1, -1, -1, -1, -1, 41, -1, 311, 44, 313, + 314, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, -1, -1, 93, 302, 272, + 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, + 314, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, + 58, 59, 315, 316, 317, 63, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + 41, 281, -1, 44, 300, 93, -1, 287, 288, 289, + 290, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 300, 301, 63, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 41, 93, -1, 44, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, 58, + 59, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 41, -1, - 310, 44, 93, 313, 314, 315, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - 93, -1, 287, 288, 289, 290, -1, -1, -1, 41, - -1, -1, 44, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, 58, 59, 313, 314, - 315, 63, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 93, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 288, 289, 290, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 41, -1, -1, 44, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, -1, -1, 310, - 58, 59, 313, 314, 315, 63, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, 93, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 41, -1, 310, - -1, -1, 313, 314, 315, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, 41, 310, -1, 93, - 313, 314, 315, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, 93, + 279, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 300, 301, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 93, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, 63, 41, -1, -1, 44, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, 58, + 59, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, 93, -1, -1, -1, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, + 315, 316, 317, 41, 93, -1, 44, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + 58, 59, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 272, 273, 274, 275, 41, -1, + -1, 279, -1, 281, 93, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, 58, 59, -1, -1, -1, + 63, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 41, -1, -1, -1, 298, 299, 93, 301, - 302, 303, 304, 305, 306, 307, -1, -1, 310, 58, - 59, 313, 314, 315, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 300, 301, + 279, 303, 304, 305, 306, 307, 308, 309, -1, 41, + 312, -1, 44, 315, 316, 317, -1, -1, -1, -1, + -1, 300, 301, -1, 303, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 41, -1, -1, 44, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, 58, 59, 313, - 314, 315, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, 310, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, 41, 93, -1, - 44, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 279, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 300, 301, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - 41, -1, -1, 44, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 41, 281, -1, 44, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 300, 301, 63, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 33, -1, 312, + -1, -1, 315, 316, 317, 41, -1, -1, 41, 45, + -1, 44, 48, -1, -1, 51, 93, -1, -1, 55, + 56, 57, 58, 59, -1, 58, 59, 63, 64, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 41, 281, + -1, 44, -1, -1, -1, 287, 288, 289, 290, -1, + 93, -1, 98, -1, -1, 58, 59, -1, 300, 301, + 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, + 312, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, 93, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + -1, 187, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, -1, -1, -1, 272, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 41, 281, -1, + 44, -1, 93, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 300, 301, 305, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, -1, 93, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, + -1, -1, -1, 287, 288, 289, 290, 58, -1, -1, + -1, 93, 63, -1, -1, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 41, 298, 299, 44, 301, 302, 303, 304, - 305, 306, 307, -1, 272, 273, 274, 275, -1, 58, - 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 41, - 298, 299, 44, 301, 302, 303, 304, 305, 306, 307, - 41, -1, -1, 44, 93, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, 93, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, -1, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, 93, -1, -1, - 279, -1, 281, -1, -1, -1, -1, 93, 287, 288, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, -1, -1, - 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, 272, 273, 274, 275, 287, 288, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 298, 299, -1, 301, - 302, 303, 304, 305, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, - -1, -1, 287, 288, -1, -1, -1, -1, 41, -1, - -1, 44, -1, 298, 299, -1, 301, 302, 303, 304, - 305, -1, -1, -1, -1, 58, 59, 93, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, -1, -1, -1, -1, - 93, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, 287, 288, 279, -1, 281, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 305, - -1, 41, 298, 299, 44, 301, 302, 303, 304, 305, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 30, -1, -1, 63, -1, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, -1, -1, -1, - 60, 61, -1, 93, -1, -1, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 272, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, 41, -1, -1, 44, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, -1, 93, -1, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, 93, -1, -1, -1, -1, + 287, 288, 289, 290, -1, 93, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, -1, -1, + 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, -1, 290, -1, + 93, 41, 58, 59, 44, -1, -1, 63, 300, 301, + -1, 303, 304, 305, 306, 307, 308, -1, 58, 59, + 281, -1, -1, 63, -1, -1, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, 93, 315, 316, 317, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, -1, -1, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, 272, 273, 274, 275, -1, 287, + 288, 279, -1, 281, 93, -1, 58, 59, -1, 287, + 288, 63, 300, 301, -1, 303, 304, 305, 306, 307, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 93, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, -1, 303, 304, 305, 306, 307, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 298, 299, -1, 301, 302, - 303, -1, -1, -1, -1, -1, -1, -1, 178, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, + 303, 304, 305, 306, 307, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, 300, 301, -1, 303, 304, 305, + 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, -1, 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, -1, -1, -1, -1, -1, -1, 258, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, + -1, -1, -1, -1, -1, -1, -1, -1, 300, 301, + -1, 303, 304, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 315 +#define YYMAXTOKEN 317 #if YYDEBUG static char *yyname[] = { "end-of-file",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,0,0,0,0,0,0,0, @@ -1139,9 +1142,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR","ANDAND","BITOROP", -"BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC", -"POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", +"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1192,18 +1195,25 @@ static char *yyrule[] = { "label : LABEL", "decl : format", "decl : subrout", +"decl : mysubrout", "decl : package", "decl : use", "format : FORMAT startformsub formname block", "formname : WORD", "formname :", -"subrout : SUB startsub subname proto subbody", +"mysubrout : MYSUB startsub subname proto subattrlist subbody", +"subrout : SUB startsub subname proto subattrlist subbody", "startsub :", "startanonsub :", "startformsub :", "subname : WORD", "proto :", "proto : THING", +"subattrlist :", +"subattrlist : COLONATTR THING", +"subattrlist : COLONATTR", +"myattrlist : COLONATTR THING", +"myattrlist : COLONATTR", "subbody : block", "subbody : ';'", "package : PACKAGE WORD ';'", @@ -1262,14 +1272,15 @@ static char *yyrule[] = { "term : term POSTDEC", "term : PREINC term", "term : PREDEC term", -"term : local term", +"term : myattrterm", +"term : LOCAL term", "term : '(' expr ')'", "term : '(' ')'", "term : '[' expr ']'", "term : '[' ']'", "term : HASHBRACK expr ';' '}'", "term : HASHBRACK ';' '}'", -"term : ANONSUB startanonsub proto block", +"term : ANONSUB startanonsub proto subattrlist block", "term : scalar", "term : star", "term : hsh", @@ -1307,13 +1318,18 @@ static char *yyrule[] = { "term : PMFUNC '(' term ',' term ')'", "term : WORD", "term : listop", +"myattrterm : MY myterm myattrlist", +"myattrterm : MY myterm", +"myterm : '(' expr ')'", +"myterm : '(' ')'", +"myterm : scalar", +"myterm : hsh", +"myterm : ary", "listexpr :", "listexpr : argexpr", "listexprcom :", "listexprcom : expr", "listexprcom : expr ','", -"local : LOCAL", -"local : MY", "my_scalar : scalar", "amper : '&' indirob", "scalar : '$' indirob", @@ -1341,26 +1357,22 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 666 "perly.y" +#line 726 "perly.y" /* PROGRAM */ -#line 1427 "perly.c" + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + +#line 1371 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab - -struct ysv { - short* yyss; - YYSTYPE* yyvs; - int oldyydebug; - int oldyynerrs; - int oldyyerrflag; - int oldyychar; - YYSTYPE oldyyval; - YYSTYPE oldyylval; -}; - int -Perl_yyparse(pTHX) +yyparse() { register int yym, yyn, yystate; register short *yyssp; @@ -1371,9 +1383,6 @@ Perl_yyparse(pTHX) int retval = 0; #if YYDEBUG register char *yys; -#ifndef __cplusplus - extern char *getenv(); -#endif #endif struct ysv *ysave; @@ -1385,7 +1394,7 @@ Perl_yyparse(pTHX) ysave->oldyychar = yychar; ysave->oldyyval = yyval; ysave->oldyylval = yylval; - + #if YYDEBUG if (yys = getenv("YYDEBUG")) { @@ -1424,7 +1433,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - printf("yydebug: state %d, reading %d (%s)\n", yystate, + PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1446,10 +1455,8 @@ yyloop: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1490,8 +1497,8 @@ yyinrecovery: #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery shifting to state %d\n", - *yyssp, yytable[yyn]); + "yydebug: state %d, error recovery shifting to state %d\n", + *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -1502,10 +1509,8 @@ yyinrecovery: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, - yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, - yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1519,9 +1524,8 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, - "yydebug: error recovery discarding state %d\n", - *yyssp); + PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; @@ -1538,9 +1542,8 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); + PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); } #endif yychar = (-1); @@ -1557,7 +1560,7 @@ yyreduce: switch (yyn) { case 1: -#line 101 "perly.y" +#line 125 "perly.y" { #if defined(YYDEBUG) && defined(DEBUGGING) yydebug = (PL_debug & 1); @@ -1566,50 +1569,50 @@ case 1: } break; case 2: -#line 108 "perly.y" +#line 132 "perly.y" { newPROG(yyvsp[0].opval); } break; case 3: -#line 112 "perly.y" +#line 136 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 4: -#line 118 "perly.y" +#line 142 "perly.y" { yyval.ival = block_start(TRUE); } break; case 5: -#line 122 "perly.y" +#line 146 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 6: -#line 128 "perly.y" +#line 152 "perly.y" { yyval.ival = block_start(FALSE); } break; case 7: -#line 132 "perly.y" +#line 156 "perly.y" { yyval.opval = Nullop; } break; case 8: -#line 134 "perly.y" +#line 158 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 9: -#line 136 "perly.y" +#line 160 "perly.y" { yyval.opval = append_list(OP_LINESEQ, (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval); PL_pad_reset_pending = TRUE; if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; } break; case 10: -#line 143 "perly.y" +#line 167 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); } break; case 12: -#line 146 "perly.y" +#line 170 "perly.y" { if (yyvsp[-1].pval != Nullch) { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0)); } @@ -1620,75 +1623,75 @@ case 12: PL_expect = XSTATE; } break; case 13: -#line 155 "perly.y" +#line 179 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval); PL_expect = XSTATE; } break; case 14: -#line 160 "perly.y" +#line 184 "perly.y" { yyval.opval = Nullop; } break; case 15: -#line 162 "perly.y" +#line 186 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 16: -#line 164 "perly.y" +#line 188 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 17: -#line 166 "perly.y" +#line 190 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 18: -#line 168 "perly.y" +#line 192 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); } break; case 19: -#line 170 "perly.y" +#line 194 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 172 "perly.y" +#line 196 "perly.y" { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 177 "perly.y" +#line 201 "perly.y" { yyval.opval = Nullop; } break; case 22: -#line 179 "perly.y" +#line 203 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 23: -#line 181 "perly.y" +#line 205 "perly.y" { PL_copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); PL_hints |= HINT_BLOCK_SCOPE; } break; case 24: -#line 187 "perly.y" +#line 211 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 25: -#line 191 "perly.y" +#line 215 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 26: -#line 197 "perly.y" +#line 221 "perly.y" { yyval.opval = Nullop; } break; case 27: -#line 199 "perly.y" +#line 223 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 28: -#line 203 "perly.y" +#line 227 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1696,7 +1699,7 @@ case 28: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 29: -#line 209 "perly.y" +#line 233 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1704,23 +1707,23 @@ case 29: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 30: -#line 215 "perly.y" +#line 239 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 31: -#line 218 "perly.y" +#line 242 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 32: -#line 222 "perly.y" +#line 246 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 33: -#line 226 "perly.y" +#line 250 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1730,427 +1733,459 @@ case 33: yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; case 34: -#line 234 "perly.y" +#line 258 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 35: -#line 240 "perly.y" +#line 264 "perly.y" { yyval.opval = Nullop; } break; case 37: -#line 245 "perly.y" +#line 269 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; case 39: -#line 250 "perly.y" +#line 274 "perly.y" { yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 254 "perly.y" +#line 278 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 258 "perly.y" +#line 282 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 262 "perly.y" +#line 286 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 266 "perly.y" +#line 290 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 44: -#line 270 "perly.y" +#line 294 "perly.y" { yyval.pval = Nullch; } break; case 46: -#line 275 "perly.y" +#line 299 "perly.y" { yyval.ival = 0; } break; case 47: -#line 277 "perly.y" +#line 301 "perly.y" { yyval.ival = 0; } break; case 48: -#line 279 "perly.y" +#line 303 "perly.y" { yyval.ival = 0; } break; case 49: -#line 281 "perly.y" +#line 305 "perly.y" { yyval.ival = 0; } break; case 50: -#line 285 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 307 "perly.y" +{ yyval.ival = 0; } break; case 51: -#line 288 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 311 "perly.y" +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 52: -#line 289 "perly.y" -{ yyval.opval = Nullop; } +#line 314 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 53: -#line 293 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 315 "perly.y" +{ yyval.opval = Nullop; } break; case 54: -#line 297 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 319 "perly.y" +{ newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 55: -#line 301 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 323 "perly.y" +{ newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 56: -#line 305 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 327 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 57: -#line 308 "perly.y" +#line 331 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +break; +case 58: +#line 335 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 59: +#line 338 "perly.y" { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvSPECIAL_on(PL_compcv); yyval.opval = yyvsp[0].opval; } break; -case 58: -#line 316 "perly.y" +case 60: +#line 346 "perly.y" { yyval.opval = Nullop; } break; -case 60: -#line 320 "perly.y" +case 62: +#line 351 "perly.y" +{ yyval.opval = Nullop; } +break; +case 63: +#line 353 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 64: +#line 355 "perly.y" +{ yyval.opval = Nullop; } +break; +case 65: +#line 359 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 61: -#line 321 "perly.y" +case 66: +#line 361 "perly.y" +{ yyval.opval = Nullop; } +break; +case 67: +#line 364 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 68: +#line 365 "perly.y" { yyval.opval = Nullop; PL_expect = XSTATE; } break; -case 62: -#line 325 "perly.y" +case 69: +#line 369 "perly.y" { package(yyvsp[-1].opval); } break; -case 63: -#line 327 "perly.y" +case 70: +#line 371 "perly.y" { package(Nullop); } break; -case 64: -#line 331 "perly.y" +case 71: +#line 375 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; -case 65: -#line 333 "perly.y" +case 72: +#line 377 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 66: -#line 337 "perly.y" +case 73: +#line 381 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 67: -#line 339 "perly.y" +case 74: +#line 383 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 69: -#line 344 "perly.y" +case 76: +#line 388 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 70: -#line 346 "perly.y" +case 77: +#line 390 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 72: -#line 351 "perly.y" +case 79: +#line 395 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 73: -#line 354 "perly.y" +case 80: +#line 398 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 74: -#line 357 "perly.y" +case 81: +#line 401 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 75: -#line 362 "perly.y" +case 82: +#line 406 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 76: -#line 366 "perly.y" +case 83: +#line 410 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 77: -#line 371 "perly.y" +case 84: +#line 415 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 78: -#line 376 "perly.y" +case 85: +#line 420 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 378 "perly.y" +case 86: +#line 422 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 80: -#line 380 "perly.y" -{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } +case 87: +#line 424 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } break; -case 81: -#line 382 "perly.y" +case 88: +#line 426 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 84: -#line 392 "perly.y" +case 91: +#line 436 "perly.y" { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; -case 85: -#line 394 "perly.y" +case 92: +#line 438 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; -case 86: -#line 396 "perly.y" +case 93: +#line 440 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 87: -#line 400 "perly.y" +case 94: +#line 444 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 88: -#line 404 "perly.y" +case 95: +#line 448 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 89: -#line 407 "perly.y" +case 96: +#line 451 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 90: -#line 412 "perly.y" +case 97: +#line 456 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 91: -#line 417 "perly.y" +case 98: +#line 461 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 92: -#line 420 "perly.y" +case 99: +#line 464 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 93: -#line 425 "perly.y" +case 100: +#line 469 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 94: -#line 429 "perly.y" +case 101: +#line 473 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 95: -#line 435 "perly.y" +case 102: +#line 479 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 96: -#line 437 "perly.y" +case 103: +#line 481 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 97: -#line 439 "perly.y" +case 104: +#line 483 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 98: -#line 443 "perly.y" +case 105: +#line 487 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 99: -#line 445 "perly.y" +case 106: +#line 489 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 100: -#line 447 "perly.y" +case 107: +#line 491 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 101: -#line 449 "perly.y" +case 108: +#line 493 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 102: -#line 451 "perly.y" +case 109: +#line 495 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 103: -#line 453 "perly.y" +case 110: +#line 497 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 104: -#line 455 "perly.y" +case 111: +#line 499 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; -case 105: -#line 457 "perly.y" +case 112: +#line 501 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 106: -#line 459 "perly.y" +case 113: +#line 503 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 107: -#line 461 "perly.y" +case 114: +#line 505 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 108: -#line 463 "perly.y" +case 115: +#line 507 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 109: -#line 466 "perly.y" +case 116: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; -case 110: -#line 468 "perly.y" +case 117: +#line 512 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 111: -#line 470 "perly.y" +case 118: +#line 514 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 112: -#line 472 "perly.y" +case 119: +#line 516 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; -case 113: -#line 474 "perly.y" +case 120: +#line 518 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; -case 114: -#line 476 "perly.y" +case 121: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 115: -#line 479 "perly.y" +case 122: +#line 523 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 116: -#line 482 "perly.y" +case 123: +#line 526 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 117: -#line 485 "perly.y" +case 124: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 118: -#line 488 "perly.y" +case 125: +#line 532 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 126: +#line 534 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; -case 119: -#line 490 "perly.y" +case 127: +#line 536 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; -case 120: -#line 492 "perly.y" +case 128: +#line 538 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; -case 121: -#line 494 "perly.y" +case 129: +#line 540 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; -case 122: -#line 496 "perly.y" +case 130: +#line 542 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; -case 123: -#line 498 "perly.y" +case 131: +#line 544 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; -case 124: -#line 500 "perly.y" +case 132: +#line 546 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; -case 125: -#line 502 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +case 133: +#line 548 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; -case 126: -#line 504 "perly.y" +case 134: +#line 550 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 127: -#line 506 "perly.y" +case 135: +#line 552 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 128: -#line 508 "perly.y" +case 136: +#line 554 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 129: -#line 510 "perly.y" +case 137: +#line 556 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 130: -#line 512 "perly.y" +case 138: +#line 558 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; -case 131: -#line 514 "perly.y" +case 139: +#line 560 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 132: -#line 516 "perly.y" +case 140: +#line 562 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 133: -#line 518 "perly.y" +case 141: +#line 564 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 134: -#line 520 "perly.y" +case 142: +#line 566 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 135: -#line 526 "perly.y" +case 143: +#line 572 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2158,38 +2193,38 @@ case 135: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 136: -#line 533 "perly.y" +case 144: +#line 579 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 137: -#line 535 "perly.y" +case 145: +#line 581 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 138: -#line 537 "perly.y" +case 146: +#line 583 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 139: -#line 539 "perly.y" +case 147: +#line 585 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 140: -#line 542 "perly.y" +case 148: +#line 588 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 141: -#line 545 "perly.y" +case 149: +#line 591 "perly.y" { yyval.opval = dofile(yyvsp[0].opval); } break; -case 142: -#line 547 "perly.y" +case 150: +#line 593 "perly.y" { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } break; -case 143: -#line 549 "perly.y" +case 151: +#line 595 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2198,8 +2233,8 @@ case 143: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 144: -#line 557 "perly.y" +case 152: +#line 603 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2209,151 +2244,171 @@ case 144: scalar(yyvsp[-3].opval) )))); dep();} break; -case 145: -#line 566 "perly.y" +case 153: +#line 612 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 146: -#line 570 "perly.y" +case 154: +#line 616 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 147: -#line 575 "perly.y" +case 155: +#line 621 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 148: -#line 578 "perly.y" +case 156: +#line 624 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 149: -#line 580 "perly.y" +case 157: +#line 626 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 150: -#line 582 "perly.y" +case 158: +#line 628 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 151: -#line 584 "perly.y" +case 159: +#line 630 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 152: -#line 586 "perly.y" +case 160: +#line 632 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 153: -#line 588 "perly.y" +case 161: +#line 634 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 154: -#line 591 "perly.y" +case 162: +#line 637 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 155: -#line 593 "perly.y" +case 163: +#line 639 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, 0); } break; -case 156: -#line 595 "perly.y" +case 164: +#line 641 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[0].opval)); } break; -case 157: -#line 598 "perly.y" +case 165: +#line 644 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; -case 158: -#line 600 "perly.y" +case 166: +#line 646 "perly.y" { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 159: -#line 602 "perly.y" +case 167: +#line 648 "perly.y" { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 160: -#line 604 "perly.y" +case 168: +#line 650 "perly.y" { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; -case 163: -#line 610 "perly.y" -{ yyval.opval = Nullop; } +case 171: +#line 656 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; -case 164: -#line 612 "perly.y" +case 172: +#line 658 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +break; +case 173: +#line 662 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } +break; +case 174: +#line 664 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } +break; +case 175: +#line 666 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 165: -#line 616 "perly.y" +case 176: +#line 668 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 177: +#line 670 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 178: +#line 674 "perly.y" { yyval.opval = Nullop; } break; -case 166: -#line 618 "perly.y" +case 179: +#line 676 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 167: -#line 620 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 180: +#line 680 "perly.y" +{ yyval.opval = Nullop; } break; -case 168: -#line 623 "perly.y" -{ yyval.ival = 0; } +case 181: +#line 682 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; -case 169: -#line 624 "perly.y" -{ yyval.ival = 1; } +case 182: +#line 684 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; -case 170: -#line 628 "perly.y" +case 183: +#line 688 "perly.y" { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; -case 171: -#line 632 "perly.y" +case 184: +#line 692 "perly.y" { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 172: -#line 636 "perly.y" +case 185: +#line 696 "perly.y" { yyval.opval = newSVREF(yyvsp[0].opval); } break; -case 173: -#line 640 "perly.y" +case 186: +#line 700 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 174: -#line 644 "perly.y" +case 187: +#line 704 "perly.y" { yyval.opval = newHVREF(yyvsp[0].opval); } break; -case 175: -#line 648 "perly.y" +case 188: +#line 708 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 176: -#line 652 "perly.y" +case 189: +#line 712 "perly.y" { yyval.opval = newGVREF(0,yyvsp[0].opval); } break; -case 177: -#line 656 "perly.y" +case 190: +#line 716 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 178: -#line 658 "perly.y" +case 191: +#line 718 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 179: -#line 660 "perly.y" +case 192: +#line 720 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 180: -#line 663 "perly.y" +case 193: +#line 723 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2365 "perly.c" +#line 2412 "perly.c" } yyssp -= yym; yystate = *yyssp; @@ -2364,8 +2419,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state 0 to state %d\n", - YYFINAL); + "yydebug: after reduction, shifting from state 0 to state %d\n", + YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; @@ -2395,8 +2450,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state %d to state %d\n", - *yyssp, yystate); + "yydebug: after reduction, shifting from state %d to state %d\n", + *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -2407,10 +2462,8 @@ break; int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; diff --git a/perly.fixer b/perly.fixer index afe1a383cf..daa558e84e 100755 --- a/perly.fixer +++ b/perly.fixer @@ -21,15 +21,34 @@ tmp=/tmp/f$$ if grep 'yaccpar 1.8 (Berkeley)' $input >/dev/null 2>&1; then cp $input $output + # Don't expect the diff to do everything -- do some by hand if test -f perly_c.diff; then patch -F3 $output <perly_c.diff + sed -e '/^[ ]*printf("yydebug:/s/printf(/PerlIO_printf(Perl_debug_log, /' \ + -e '/^#line /s/"y[.]tab[.]c"/"perly.c"/' \ + -e '/\[\] *= *[{]/s/^/static /' \ + -e '/^static static/s/^static //' \ + -e '/^#define.WORD/,/^#define.ARROW/d' \ + -e '/^int.yydebug/,/^#define.yystacksize/d' \ + < $output > $tmp && mv -f $tmp $output || exit 1 rm -rf $input + echo "If you need to debug perly.c, you need to fix up the #line" + echo "directives yourself." fi exit elif grep 'yaccpar 1.9 (Berkeley)' $input >/dev/null 2>&1; then if test -f perly.c.dif9; then patch -F3 $output <perly.c.dif9 + sed -e '/^[ ]*printf("yydebug:/s/printf(/PerlIO_printf(Perl_debug_log, /' \ + -e '/^#line /s/"y[.]tab[.]c"/"perly.c"/' \ + -e '/\[\] *= *[{]/s/^/static /' \ + -e '/^static static/s/^static //' \ + -e '/^#define.WORD/,/^#define.ARROW/d' \ + -e '/^int.yydebug/,/^#define.yystacksize/d' \ + < $output > $tmp && mv -f $tmp $output || exit 1 rm -rf $input + echo "If you need to debug perly.c, you need to fix up the #line" + echo "directives yourself." exit 0 else echo "Diffs from byacc-1.9 are not available." @@ -90,7 +109,7 @@ case "$plan" in # Also added are out of memory checks (makes porting the generated # code easier) For most systems, it can't hurt. -- TD "bsd43") - echo "Attempting to path perly.c to allow dynamic yacc stack allocation" + echo "Attempting to patch perly.c to allow dynamic yacc stack allocation" echo "Assuming bsd4.3 yaccpar" cat >$tmp <<'END' /YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\ @@ -145,7 +164,7 @@ END ####################################################### "isc") # Interactive Systems 2.2 version - echo "Attempting to path perly.c to allow dynamic yacc stack allocation" + echo "Attempting to patch perly.c to allow dynamic yacc stack allocation" echo "Assuming Interactive SysVr3 2.2 yaccpar" # Easier to simply put whole script here than to modify the # bsd script with sed. @@ -39,25 +39,27 @@ #define NOAMP 294 #define LOCAL 295 #define MY 296 -#define PREC_LOW 297 -#define OROP 298 -#define ANDOP 299 -#define NOTOP 300 -#define ASSIGNOP 301 -#define OROR 302 -#define ANDAND 303 -#define BITOROP 304 -#define BITANDOP 305 -#define SHIFTOP 306 -#define MATCHOP 307 -#define UMINUS 308 -#define REFGEN 309 -#define POWOP 310 -#define PREINC 311 -#define PREDEC 312 -#define POSTINC 313 -#define POSTDEC 314 -#define ARROW 315 +#define MYSUB 297 +#define COLONATTR 298 +#define PREC_LOW 299 +#define OROP 300 +#define ANDOP 301 +#define NOTOP 302 +#define ASSIGNOP 303 +#define OROR 304 +#define ANDAND 305 +#define BITOROP 306 +#define BITANDOP 307 +#define SHIFTOP 308 +#define MATCHOP 309 +#define UMINUS 310 +#define REFGEN 311 +#define POWOP 312 +#define PREINC 313 +#define PREDEC 314 +#define POSTINC 315 +#define POSTDEC 316 +#define ARROW 317 #endif /* PERL_CORE */ typedef union { @@ -19,13 +19,34 @@ #define dep() deprecate("\"do\" to call subroutines") +/* stuff included here to make perly_c.diff apply better */ + +#define yydebug PL_yydebug +#define yynerrs PL_yynerrs +#define yyerrflag PL_yyerrflag +#define yychar PL_yychar +#define yyval PL_yyval +#define yylval PL_yylval + +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; + +static void yydestruct(pTHXo_ void *ptr); + %} %start prog %{ -/* I sense a Big Blue pattern here... */ -#if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) +#if 0 /* get this from perly.h instead */ %} %union { @@ -36,11 +57,12 @@ } %{ -#endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ +#endif /* 0 */ #ifdef USE_PURE_BISON #define YYLEX_PARAM (&yychar) #endif + %} %token <ival> '{' @@ -54,15 +76,17 @@ %token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP %token <ival> RELOP EQOP MULOP ADDOP %token <ival> DOLSHARP DO HASHBRACK NOAMP -%token LOCAL MY +%token <ival> LOCAL MY MYSUB +%token COLONATTR -%type <ival> prog decl local format startsub startanonsub startformsub +%type <ival> prog decl format startsub startanonsub startformsub %type <ival> remember mremember '&' %type <opval> block mblock lineseq line loop cond else %type <opval> expr term subscripted scalar ary hsh arylen star amper sideff %type <opval> argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr %type <opval> listexpr listexprcom indirob listop method %type <opval> formname subname proto subbody cont my_scalar +%type <opval> subattrlist myattrlist mysubrout myattrterm myterm %type <pval> label %nonassoc PREC_LOW @@ -275,6 +299,8 @@ decl : format { $$ = 0; } | subrout { $$ = 0; } + | mysubrout + { $$ = 0; } | package { $$ = 0; } | use @@ -289,8 +315,12 @@ formname: WORD { $$ = $1; } | /* NULL */ { $$ = Nullop; } ; -subrout : SUB startsub subname proto subbody - { newSUB($2, $3, $4, $5); } +mysubrout: MYSUB startsub subname proto subattrlist subbody + { newMYSUB($2, $3, $4, $5, $6); } + ; + +subrout : SUB startsub subname proto subattrlist subbody + { newATTRSUB($2, $3, $4, $5, $6); } ; startsub: /* NULL */ /* start a regular subroutine scope */ @@ -317,6 +347,20 @@ proto : /* NULL */ | THING ; +subattrlist: /* NULL */ + { $$ = Nullop; } + | COLONATTR THING + { $$ = $2; } + | COLONATTR + { $$ = Nullop; } + ; + +myattrlist: COLONATTR THING + { $$ = $2; } + | COLONATTR + { $$ = Nullop; } + ; + subbody : block { $$ = $1; } | ';' { $$ = Nullop; PL_expect = XSTATE; } ; @@ -377,7 +421,7 @@ listop : LSTOP indirob argexpr | FUNC '(' listexprcom ')' { $$ = convert($1, 0, $3); } | LSTOPSUB startanonsub block - { $3 = newANONSUB($2, 0, $3); } + { $3 = newANONATTRSUB($2, 0, Nullop, $3); } listexpr %prec LSTOP { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, @@ -484,7 +528,9 @@ term : term ASSIGNOP term | PREDEC term { $$ = newUNOP(OP_PREDEC, 0, mod(scalar($2), OP_PREDEC)); } - | local term %prec UNIOP + | myattrterm %prec UNIOP + { $$ = $1; } + | LOCAL term %prec UNIOP { $$ = localize($2,$1); } | '(' expr ')' { $$ = sawparens($2); } @@ -498,8 +544,8 @@ term : term ASSIGNOP term { $$ = newANONHASH($2); } | HASHBRACK ';' '}' %prec '(' { $$ = newANONHASH(Nullop); } - | ANONSUB startanonsub proto block %prec '(' - { $$ = newANONSUB($2, $3, $4); } + | ANONSUB startanonsub proto subattrlist block %prec '(' + { $$ = newANONATTRSUB($2, $3, $4, $5); } | scalar %prec '(' { $$ = $1; } | star %prec '(' @@ -606,6 +652,24 @@ term : term ASSIGNOP term | listop ; +myattrterm: MY myterm myattrlist + { $$ = my_attrs($2,$3); } + | MY myterm + { $$ = localize($2,$1); } + ; + +myterm : '(' expr ')' + { $$ = sawparens($2); } + | '(' ')' + { $$ = sawparens(newNULLLIST()); } + | scalar %prec '(' + { $$ = $1; } + | hsh %prec '(' + { $$ = $1; } + | ary %prec '(' + { $$ = $1; } + ; + listexpr: /* NULL */ %prec PREC_LOW { $$ = Nullop; } | argexpr %prec PREC_LOW @@ -620,10 +684,6 @@ listexprcom: /* NULL */ { $$ = $1; } ; -local : LOCAL { $$ = 0; } - | MY { $$ = 1; } - ; - my_scalar: scalar { PL_in_my = 0; $$ = my($1); } ; @@ -664,3 +724,11 @@ indirob : WORD ; %% /* PROGRAM */ + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + diff --git a/perly_c.diff b/perly_c.diff index 463df80076..7ade2f3b01 100644 --- a/perly_c.diff +++ b/perly_c.diff @@ -1,294 +1,19 @@ -*** perly.c.orig Mon Jul 26 03:27:57 1999 ---- perly.c Mon Jul 26 02:47:03 1999 +*** y.tab.c.orig Thu Aug 26 22:31:26 1999 +--- y.tab.c Thu Aug 26 22:32:22 1999 *************** -*** 8,91 **** - #include "perl.h" - - #define dep() deprecate("\"do\" to call subroutines") - -! #line 27 "perly.y" -! /* I sense a Big Blue pattern here... */ -! #if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) -! #line 31 "perly.y" -! typedef union { -! I32 ival; -! char *pval; -! OP *opval; -! GV *gvval; -! } YYSTYPE; -! #line 39 "perly.y" -! #endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ - -! #ifdef USE_PURE_BISON -! #define YYLEX_PARAM (&yychar) -! #endif -! #line 29 "y.tab.c" -! #define WORD 257 -! #define METHOD 258 -! #define FUNCMETH 259 -! #define THING 260 -! #define PMFUNC 261 -! #define PRIVATEREF 262 -! #define FUNC0SUB 263 -! #define UNIOPSUB 264 -! #define LSTOPSUB 265 -! #define LABEL 266 -! #define FORMAT 267 -! #define SUB 268 -! #define ANONSUB 269 -! #define PACKAGE 270 -! #define USE 271 -! #define WHILE 272 -! #define UNTIL 273 -! #define IF 274 -! #define UNLESS 275 -! #define ELSE 276 -! #define ELSIF 277 -! #define CONTINUE 278 -! #define FOR 279 -! #define LOOPEX 280 -! #define DOTDOT 281 -! #define FUNC0 282 -! #define FUNC1 283 -! #define FUNC 284 -! #define UNIOP 285 -! #define LSTOP 286 -! #define RELOP 287 -! #define EQOP 288 -! #define MULOP 289 -! #define ADDOP 290 -! #define DOLSHARP 291 -! #define DO 292 -! #define HASHBRACK 293 -! #define NOAMP 294 -! #define LOCAL 295 -! #define MY 296 -! #define PREC_LOW 297 -! #define OROP 298 -! #define ANDOP 299 -! #define NOTOP 300 -! #define ASSIGNOP 301 -! #define OROR 302 -! #define ANDAND 303 -! #define BITOROP 304 -! #define BITANDOP 305 -! #define SHIFTOP 306 -! #define MATCHOP 307 -! #define UMINUS 308 -! #define REFGEN 309 -! #define POWOP 310 -! #define PREINC 311 -! #define PREDEC 312 -! #define POSTINC 313 -! #define POSTDEC 314 -! #define ARROW 315 - #define YYERRCODE 256 -! short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, ---- 8,25 ---- - #include "perl.h" - -+ #define yydebug PL_yydebug -+ #define yynerrs PL_yynerrs -+ #define yyerrflag PL_yyerrflag -+ #define yychar PL_yychar -+ #define yyval PL_yyval -+ #define yylval PL_yylval -+ - #define dep() deprecate("\"do\" to call subroutines") - -! static void yydestruct(pTHXo_ void *ptr); - -! #line 27 "perly.y" - #define YYERRCODE 256 -! static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, -*************** -*** 107,111 **** - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, - }; -! short yylen[] = { 2, - 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, ---- 41,45 ---- - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, - }; -! static short yylen[] = { 2, - 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, -*************** -*** 127,131 **** - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - }; -! short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, ---- 61,65 ---- - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - }; -! static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, -*************** -*** 166,170 **** - 5, 0, 30, 0, 0, 33, 0, 23, - }; -! short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, ---- 100,104 ---- - 5, 0, 30, 0, 0, 33, 0, 23, - }; -! static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, -*************** -*** 174,178 **** - 260, - }; -! short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, ---- 108,112 ---- - 260, - }; -! static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, -*************** -*** 213,217 **** - 0, 228, 0, 92, 92, 0, -204, 0, - }; -! short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, ---- 147,151 ---- - 0, 228, 0, 92, 92, 0, -204, 0, - }; -! static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, -*************** -*** 252,256 **** - 0, 0, 0, 0, 0, 0, 168, 0, - }; -! short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, ---- 186,190 ---- - 0, 0, 0, 0, 0, 0, 168, 0, - }; -! static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, -*************** -*** 261,265 **** - }; - #define YYTABLESIZE 4610 -! short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, ---- 195,199 ---- - }; - #define YYTABLESIZE 4610 -! static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, -*************** -*** 724,728 **** - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - }; -! short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, ---- 658,662 ---- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - }; -! static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, -*************** -*** 1193,1197 **** - #define YYMAXTOKEN 315 - #if YYDEBUG -! char *yyname[] = { - "end-of-file",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,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, ---- 1127,1131 ---- - #define YYMAXTOKEN 315 - #if YYDEBUG -! static char *yyname[] = { - "end-of-file",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,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, -*************** -*** 1210,1214 **** - "POSTINC","POSTDEC","ARROW", - }; -! char *yyrule[] = { - "$accept : prog", - "$$1 :", ---- 1144,1148 ---- - "POSTINC","POSTDEC","ARROW", - }; -! static char *yyrule[] = { - "$accept : prog", - "$$1 :", -*************** -*** 1408,1436 **** - #endif - #endif -- int yydebug; -- int yynerrs; -- int yyerrflag; -- int yychar; -- short *yyssp; -- YYSTYPE *yyvsp; -- YYSTYPE yyval; -- YYSTYPE yylval; -- short yyss[YYSTACKSIZE]; -- YYSTYPE yyvs[YYSTACKSIZE]; -- #define yystacksize YYSTACKSIZE - #line 666 "perly.y" - /* PROGRAM */ -! #line 1424 "y.tab.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab - int -! yyparse() +*** 1447,1456 **** + yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; - extern char *getenv(); +! extern char *getenv(); if (yys = getenv("YYDEBUG")) { ---- 1342,1391 ---- - #endif - #endif - #line 666 "perly.y" - /* PROGRAM */ -! #line 1427 "perly.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab -+ -+ struct ysv { -+ short* yyss; -+ YYSTYPE* yyvs; -+ int oldyydebug; -+ int oldyynerrs; -+ int oldyyerrflag; -+ int oldyychar; -+ YYSTYPE oldyyval; -+ YYSTYPE oldyylval; -+ }; -+ - int -! Perl_yyparse(pTHX) + yyn = *yys; +--- 1447,1473 ---- + yyparse() { register int yym, yyn, yystate; + register short *yyssp; @@ -299,11 +24,8 @@ + int retval = 0; #if YYDEBUG register char *yys; -+ #ifndef __cplusplus - extern char *getenv(); -+ #endif -+ #endif -+ +! #endif + + struct ysv *ysave; + New(73, ysave, 1, struct ysv); + SAVEDESTRUCTOR(yydestruct, ysave); @@ -313,13 +35,15 @@ + ysave->oldyychar = yychar; + ysave->oldyyval = yyval; + ysave->oldyylval = yylval; - ++ + #if YYDEBUG if (yys = getenv("YYDEBUG")) { + yyn = *yys; *************** -*** 1445,1448 **** ---- 1400,1413 ---- +*** 1463,1468 **** +--- 1480,1495 ---- + yyerrflag = 0; yychar = (-1); + /* @@ -334,23 +58,17 @@ + yyssp = yyss; yyvsp = yyvs; + *yyssp = yystate = 0; *************** -*** 1470,1479 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); +*** 1493,1499 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1435,1458 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); + *++yyvsp = yylval; +--- 1520,1538 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -361,34 +79,25 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = -! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = -! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; *************** -*** 1511,1520 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, error recovery shifting\ -! to state %d\n", *yyssp, yytable[yyn]); +*** 1534,1540 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1490,1514 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: state %d, error recovery shifting to state %d\n", -! *yyssp, yytable[yyn]); + *++yyvsp = yylval; +--- 1573,1591 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -399,121 +108,33 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, -! yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, -! yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; *************** -*** 1526,1531 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: error recovery discarding state %d\n", -! *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; ---- 1520,1526 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: error recovery discarding state %d\n", -! *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; -*************** -*** 1544,1549 **** - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, error recovery discards token %d (%s)\n", -! yystate, yychar, yys); - } - #endif ---- 1539,1545 ---- - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, -! "yydebug: state %d, error recovery discards token %d (%s)\n", -! yystate, yychar, yys); - } - #endif -*************** -*** 1554,1558 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif ---- 1550,1554 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif -*************** -*** 2358,2362 **** - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2361 "y.tab.c" - } - yyssp -= yym; ---- 2354,2358 ---- - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2365 "perly.c" - } - yyssp -= yym; -*************** -*** 2368,2373 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state 0 to\ -! state %d\n", YYFINAL); - #endif - yystate = YYFINAL; ---- 2364,2370 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: after reduction, shifting from state 0 to state %d\n", -! YYFINAL); - #endif - yystate = YYFINAL; -*************** -*** 2383,2387 **** - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } ---- 2380,2384 ---- - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } -*************** -*** 2398,2407 **** - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state %d \ -! to state %d\n", *yyssp, yystate); +*** 2473,2487 **** #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate; ---- 2395,2419 ---- - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, -! "yydebug: after reduction, shifting from state %d to state %d\n", -! *yyssp, yystate); + *++yyvsp = yyval; + goto yyloop; + yyoverflow: +! yyerror("yacc stack overflow"); + yyabort: +! return (1); + yyaccept: +! return (0); + } +--- 2524,2570 ---- #endif if (yyssp >= yyss + yystacksize - 1) { @@ -524,27 +145,15 @@ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; -! ysave->yyvs = yyvs = -! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); -! ysave->yyss = yyss = -! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); +! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); +! ysave->yyss = Renew(yyss, yystacksize, short); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate; -*************** -*** 2409,2416 **** - goto yyloop; - yyoverflow: -! yyerror("yacc stack overflow"); - yyabort: -! return (1); - yyaccept: -! return (0); - } ---- 2421,2448 ---- + *++yyvsp = yyval; goto yyloop; yyoverflow: ! yyerror("Out of memory for yacc stack"); diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 005299ddee..a228530b07 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -127,7 +127,7 @@ scope. See L<utf8> for more information. =head2 Lexically scoped warning categories You can now control the granularity of warnings emitted by perl at a finer -level using the C<use warning> pragma. See L<warning> and L<perllexwarn> +level using the C<use warnings> pragma. See L<warnings> and L<perllexwarn> for details. =head2 Binary numbers supported @@ -150,30 +150,37 @@ use "quads" (64-integers) as follows: =over 4 -=item constants in the code +=item literal numeric constants in the code =item arguments to oct() and hex() =item arguments to print(), printf() and sprintf() -=item pack() and unpack() "q" format +=item pack() and unpack() "q" and "Q" formats -=item in basic arithmetics +=item in basic arithmetics: +, -, *, /, % +=item in bit arithmetics: &, |, ^, ~, <<, >>, vec() + =back Note that unless you have the case (a) you will have to configure and compile Perl using the -Duse64bits Configure flag. -Unfortunately, bit operations (&, <<, ...) and vec() do not work, -they are limited to 32 bits. - Last but not least: note that due to Perl's habit of always using -floating point numbers the quads are still not true integers. When -quads overflow their limits (18446744073709551615 unsigned, --9223372036854775808...9223372036854775807 signed), they are silently -promoted to floating point numbers, after which they will -start losing precision (their lower digits). +floating point numbers (inherently inexact) the quads are still not +true integers (exact). When the quads overflow their limits +(0...18_446_744_073_709_551_615 unsigned, -9_223_372_036_854_775_808... +9_223_372_036_854_775_807 signed), they are silently promoted to +floating point numbers, after which they will start losing precision +(their lower digits). What this means, among other things, is that +adding/subtracting small numbers doesn't change the large number, +and that == may return equalness for numbers that are not equal. +One particular cause of grief is using the ~ operator which when +used on small numbers produces large numbers. These large numbers +stay (internally) integers for only as long as bit arithmetics are +used, but for example + will turn the results into floating point +numbers. =head2 Large file support @@ -181,9 +188,10 @@ If you have filesystems that support "large files" (files larger than 2 gigabytes), you may now also be able to create and access them from Perl. Note that in addition to requiring a proper file system to do this you -may also need to adjust your per-process (or even your per-system) -maximum filesize limits before running Perl scripts that try to handle -large files, especially if you intend to write such files. +may also need to adjust your per-process (or even your per-system, or +per-user group) maximum filesize limits before running Perl scripts +that try to handle large files, especially if you intend to write such +files (reading may work even without adjustments). Adjusting your file system/system limits is outside the scope of Perl. For process limits, you may try to increase the limits using your @@ -192,7 +200,7 @@ extension (not included with the standard Perl distribution) may also be of use. (Large file support is also related to 64-bit support, for obvious reasons) - + =head2 Better syntax checks on parenthesized unary operators Expressions such as: @@ -268,9 +276,25 @@ As before, lexical variables may not have names beginning with control characters. As before, variables whose names begin with a control character are always forced to be in package `main'. All such variables are reserved for future extensions, except those that begin with -C<^_>, which may be used by user programs and is guaranteed not to +C<^_>, which may be used by user programs and are guaranteed not to acquire special meaning in any future version of Perl. +=head2 C<use attrs> implicit in subroutine attributes + +Formerly, if you wanted to mark a subroutine as being a method call or +as requiring an automatic lock() when it is entered, you had to declare +that with a C<use attrs> pragma in the body of the subroutine. +That can now be accomplished with a declaration syntax, like this: + + sub mymethod : locked, method ; + ... + sub mymethod : locked, method { + ... + } + +F<AutoSplit.pm> and F<SelfLoader.pm> have been updated to keep the attributes +with the stubs they provide. See L<attributes>. + =head1 Significant bug fixes =head2 E<lt>HANDLEE<gt> on empty files @@ -363,26 +387,34 @@ EPOC is is now supported (on Psion 5). =over 4 -=item op/io_const +=item lib/attrs + +Compatibility tests for C<sub : attrs> vs the older C<use attrs>. + +=item lib/io_const IO constants (SEEK_*, _IO*). -=item op/io_dir +=item lib/io_dir Directory-related IO methods (new, read, close, rewind, tied delete). -=item op/io_multihomed +=item lib/io_multihomed INET sockets with multi-homed hosts. -=item op/io_poll +=item lib/io_poll IO poll(). -=item op/io_unix +=item lib/io_unix UNIX sockets. +=item op/attrs + +Regression tests for C<my ($x,@y,%z) : attrs> and <sub : attrs>. + =item op/filetest File test operators. @@ -399,6 +431,12 @@ Verify operations that access pad objects (lexicals and temporaries). =over 4 +=item attributes + +While used internally by Perl as a pragma, this module also +provides a way to fetch subroutine and variable attributes. +See L<attributes>. + =item ByteLoader The ByteLoader is a dedication extension to generate and run @@ -539,13 +577,17 @@ See L<perldbmfilter> for further information. =head2 Pragmata +C<use attrs> is now obsolescent, and is only provided for +backward-compatibility. It's been replaced by the C<sub : attributes> +syntax. See L<perlsub/"Subroutine Attributes"> and L<attributes>. + C<use utf8> to enable UTF-8 and Unicode support. C<use caller 'encoding'> allows modules to inherit pragmatic attributes from the caller's context. C<encoding> is currently the only supported attribute. -Lexical warnings pragma, C<use warning;>, to control optional warnings. +Lexical warnings pragma, C<use warnings;>, to control optional warnings. C<use filetest> to control the behaviour of filetests (C<-r> C<-w> ...). Currently only one subpragma implemented, "use filetest 'access';", @@ -578,6 +620,18 @@ A tutorial on managing class data for object modules. =head1 New Diagnostics +=item "my sub" not yet implemented + +(F) Lexically scoped subroutines are not yet implemented. Don't try that +yet. + +=item %s package attribute may clash with future reserved word: %s + +(W) A lowercase attribute name was used that had a package-specific handler. +That name might have a meaning to Perl itself some day, even though it +doesn't yet. Perhaps you should use a mixed-case attribute name, instead. +See L<attributes>. + =item /%s/: Unrecognized escape \\%c passed through (W) You used a backslash-character combination which is not recognized @@ -592,16 +646,52 @@ intended it to be a read-write filehandle, you needed to open it with you intended only to read from the file, use "E<lt>". See L<perlfunc/open>. +=item Invalid %s attribute: %s + +The indicated attribute for a subroutine or variable was not recognized +by Perl or by a user-supplied handler. See L<attributes>. + +=item Invalid %s attributes: %s + +The indicated attributes for a subroutine or variable were not recognized +by Perl or by a user-supplied handler. See L<attributes>. + +=item Invalid separator character %s in attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of an attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. See L<attributes>. + =item Missing command in piped open (W) You used the C<open(FH, "| command")> or C<open(FH, "command |")> construction, but the command was missing or blank. +=item Missing name in "my sub" + +(F) The reserved syntax for lexically scoped subroutines requires that they +have a name with which they can be found. + =item Unrecognized escape \\%c passed through (W) You used a backslash-character combination which is not recognized by Perl. +=item Unterminated attribute parameter in attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing an +attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. See L<attributes>. + +=item Unterminated attribute list + +(F) The lexer found something other than a simple identifier at the start +of an attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. See L<attributes>. + =item defined(@array) is deprecated (D) defined() is not usually useful on arrays because it checks for an @@ -614,6 +704,27 @@ just use C<if (@array) { # not empty }> for example. undefined I<scalar> value. If you want to see if the hash is empty, just use C<if (%hash) { # not empty }> for example. +=item Invalid separator character %s in subroutine attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of a subroutine attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. + +=item Unterminated attribute parameter in subroutine attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing a +subroutine attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. + +=item Unterminated subroutine attribute list + +(F) The lexer found something other than a simple identifier at the start +of a subroutine attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. + =head1 Obsolete Diagnostics Todo. diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 3964a1c59b..60a901ea03 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -21,15 +21,21 @@ will be called on each warning instead of printing it. See L<perlvar>. Trappable errors may be trapped using the eval operator. See L<perlfunc/eval>. In almost all cases, warnings may be selectively -disabled or promoted to fatal errors using the C<warning> pragma. -See L<warning>. +disabled or promoted to fatal errors using the C<warnings> pragma. +See L<warnings>. Some of these messages are generic. Spots that vary are denoted with a %s, just as in a printf format. Note that some messages start with a %s! -The symbols C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. +Since the messages are listed in alphabetical order, the symbols +C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. =over 4 +=item "my sub" not yet implemented + +(F) Lexically scoped subroutines are not yet implemented. Don't try that +yet. + =item "my" variable %s can't be in a package (F) Lexically scoped variables aren't in a package, so it doesn't make sense @@ -174,6 +180,13 @@ regular expression engine didn't specifically check for that. See L<perlre>. (S) The symbol in question was declared but somehow went out of scope before it could possibly have been used. +=item %s package attribute may clash with future reserved word: %s + +(W) A lowercase attribute name was used that had a package-specific handler. +That name might have a meaning to Perl itself some day, even though it +doesn't yet. Perhaps you should use a mixed-case attribute name, instead. +See L<attributes>. + =item %s syntax OK (F) The final summary message when a C<perl -c> succeeds. @@ -297,7 +310,8 @@ imported with the C<use subs> pragma). To silently interpret it as the Perl operator, use the C<CORE::> prefix on the operator (e.g. C<CORE::log($x)>) or by declaring the subroutine -to be an object method (see L<attrs>). +to be an object method (see L<perlsub/"Subroutine Attributes"> +or L<attributes>). =item Args must match #! line @@ -491,6 +505,10 @@ L<perlport> for more on portability concerns. (W) You tried to do a bind on a closed socket. Did you forget to check the return value of your socket() call? See L<perlfunc/bind>. +=item Bit vector size > 32 non-portable + +(W) Using bit vector sizes larger than 32 is non-portable. + =item Bizarre copy of %s in %s (P) Perl detected an attempt to copy an internal value that is not copiable. @@ -655,9 +673,11 @@ They must have ordinary identifiers as names. from a deleted (but still opened) file. You have to say C<-i.bak>, or some such. -=item Can't do inplace edit: %s E<gt> 14 characters +=item Can't do inplace edit: %s would not be unique -(S) There isn't enough room in the filename to make a backup name for the file. +(S) Your filesystem does not support filenames longer than 14 +characters and Perl was unable to create a unique filename during +inplace editing with the B<-i> switch. The file was ignored. =item Can't do inplace edit: %s is not a regular file @@ -904,10 +924,16 @@ pointers into them. You tried to redefine one such sort subroutine when it was currently active, which is not allowed. If you really want to do this, you should write C<sort { &func } @x> instead of C<sort func @x>. +=item Can't remove %s: %s, skipping file + +(S) You requested an inplace edit without creating a backup file. Perl +was unable to remove the original file to replace it with the modified +file. The file was left unmodified. + =item Can't rename %s to %s: %s, skipping file -(S) The rename done by the B<-i> switch failed for some reason, probably because -you don't have write permission to the directory. +(S) The rename done by the B<-i> switch failed for some reason, +probably because you don't have write permission to the directory. =item Can't reopen input pipe (name: %s) in binary mode @@ -1370,11 +1396,10 @@ the name. =item Format %s redefined -(W) You redefined a format, perhaps accidentally. To suppress this warning, -say +(W) You redefined a format. To suppress this warning, say { - no warning; + no warnings; eval "format NAME =..."; } @@ -1526,8 +1551,8 @@ before the illegal character. =item Illegal number of bits in vec (F) The number of bits in vec() (the third argument) must be a power of -two from 1 to 32. - +two from 1 to 32 (or 64, if your platform supports that). + =item Illegal switch in PERL5OPT: %s (X) The PERL5OPT environment variable may only be used to set the @@ -1611,6 +1636,16 @@ rebuild Perl. (P) Something went badly awry in the regular expression parser. +=item Invalid %s attribute: %s + +The indicated attribute for a subroutine or variable was not recognized +by Perl or by a user-supplied handler. See L<attributes>. + +=item Invalid %s attributes: %s + +The indicated attributes for a subroutine or variable were not recognized +by Perl or by a user-supplied handler. See L<attributes>. + =item invalid [] range in regexp (F) The range specified in a character class had a minimum character @@ -1622,6 +1657,13 @@ a literal character. See L<perlre>. (W) Perl does not understand the given format conversion. See L<perlfunc/sprintf>. +=item Invalid separator character %s in attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of an attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. See L<attributes>. + =item Invalid type in pack: '%s' (F) The given character is not a valid pack type. See L<perlfunc/pack>. @@ -1692,9 +1734,9 @@ ended earlier on the current line. mentioned with the $ in Perl, unlike in the shells, where it can vary from one line to the next. -=item Missing %sbrace%s on \C{} +=item Missing %sbrace%s on \N{} -(F) Wrong syntax of character name literal C<\C{charname}> within +(F) Wrong syntax of character name literal C<\N{charname}> within double-quotish context. =item Missing comma after first argument to %s function @@ -1753,6 +1795,11 @@ be created for some peculiar reason. (W) Multidimensional arrays aren't written like C<$foo[1,2,3]>. They're written like C<$foo[1][2][3]>, as in C. +=item Missing name in "my sub" + +(F) The reserved syntax for lexically scoped subroutines requires that they +have a name with which they can be found. + =item Name "%s::%s" used only once: possible typo (W) Typographical errors often show up as unique variable names. @@ -2014,6 +2061,8 @@ try using scientific notation (e.g. "1e6" instead of "1_000_000"). and therefore non-portable between systems. See L<perlport> for more on portability concerns. +See also L<perlport> for writing portable code. + =item Odd number of elements in hash assignment (S) You specified an odd number of elements to initialize a hash, which @@ -2612,10 +2661,6 @@ See L<perlfunc/sort>. (F) A sort comparison subroutine may not return a list value with more or less than one element. See L<perlfunc/sort>. -=item split /^/ better written as split /^/m - -(W) Implicit translation of /^/ to mean /^/m in split is deprecated. - =item Split loop (P) The split was looping infinitely. (Obviously, a split shouldn't iterate @@ -2651,11 +2696,10 @@ may break this. =item Subroutine %s redefined -(W) You redefined a subroutine, perhaps accidentally. To suppress this -warning, say +(W) You redefined a subroutine. To suppress this warning, say { - no warning; + no warnings; eval "sub name { ... }"; } @@ -3044,6 +3088,20 @@ a term, so it's looking for the corresponding right angle bracket, and not finding it. Chances are you left some needed parentheses out earlier in the line, and you really meant a "less than". +=item Unterminated attribute parameter in attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing an +attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. See L<attributes>. + +=item Unterminated attribute list + +(F) The lexer found something other than a simple identifier at the start +of an attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. See L<attributes>. + =item Use of $# is deprecated (D) This was an ill-advised attempt to emulate a poorly defined B<awk> feature. diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 0e4b7c7cc3..d420059d4c 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -2366,6 +2366,8 @@ there is an error. See also C<IPC::SysV> and C<IPC::SysV::Msg> documentation. =item my EXPR +=item my EXPR : ATTRIBUTES + A C<my> declares the listed variables to be local (lexically) to the enclosing block, file, or C<eval>. If more than one value is listed, the list must be placed in parentheses. See @@ -4338,10 +4340,10 @@ out the names of those files that contain a match: =item sub NAME BLOCK This is subroutine definition, not a real function I<per se>. With just a -NAME (and possibly prototypes), it's just a forward declaration. Without -a NAME, it's an anonymous function declaration, and does actually return a -value: the CODE ref of the closure you just created. See L<perlsub> and -L<perlref> for details. +NAME (and possibly prototypes or attributes), it's just a forward declaration. +Without a NAME, it's an anonymous function declaration, and does actually +return a value: the CODE ref of the closure you just created. See L<perlsub> +and L<perlref> for details. =item substr EXPR,OFFSET,LENGTH,REPLACEMENT @@ -4932,10 +4934,10 @@ are also implemented this way. Currently implemented pragmas are: use integer; use diagnostics; - use sigtrap qw(SEGV BUS); - use strict qw(subs vars refs); - use subs qw(afunc blurfl); - use warning qw(all); + use sigtrap qw(SEGV BUS); + use strict qw(subs vars refs); + use subs qw(afunc blurfl); + use warnings qw(all); Some of these pseudo-modules import semantics into the current block scope (like C<strict> or C<integer>, unlike ordinary modules, @@ -4947,7 +4949,7 @@ by C<use>, i.e., it calls C<unimport Module LIST> instead of C<import>. no integer; no strict 'refs'; - no warning; + no warnings; If no C<unimport> method can be found the call fails with a fatal error. @@ -4990,15 +4992,18 @@ See also C<keys>, C<each>, and C<sort>. Treats the string in EXPR as a vector of unsigned integers, and returns the value of the bit field specified by OFFSET. BITS specifies the number of bits that are reserved for each entry in the -bit vector. This must be a power of two from 1 to 32. +bit vector. This must be a power of two from 1 to 32 (or 64, if your +platform supports that). + C<vec> may also be assigned to, in which case parentheses are needed to give the expression the correct precedence as in vec($image, $max_x * $x + $y, 8) = 3; Vectors created with C<vec> can also be manipulated with the logical -operators C<|>, C<&>, and C<^>, which will assume a bit vector operation is -desired when both operands are strings. See L<perlop/"Bitwise String Operators">. +operators C<|>, C<&>, and C<^>, which will assume a bit vector +operation is desired when both operands are strings. +See L<perlop/"Bitwise String Operators">. The following code will build up an ASCII string saying C<'PerlPerlPerl'>. The comments show the string after each step. Note that this code works diff --git a/pod/perlhist.pod b/pod/perlhist.pod index 4d109be7da..6a171d36f4 100644 --- a/pod/perlhist.pod +++ b/pod/perlhist.pod @@ -153,7 +153,7 @@ the strings?). 5.000b3g 1994-Oct-04 Andy 5.000b3h 1994-Oct-07 - Larry 5.000 1994-Oct-18 + Larry 5.000 1994-Oct-17 Andy 5.000a 1994-Dec-19 5.000b 1995-Jan-18 @@ -327,6 +327,8 @@ the strings?). 5.005_58 1999-Jul-27 5.005_59 1999-Aug-02 5.005_60 1999-Aug-02 + 5.005_61 1999-Aug-20 + 5.005_62 1999-Sep-** 5.6 beta 1999-***-** =head2 SELECTED RELEASE SIZES diff --git a/pod/perllexwarn.pod b/pod/perllexwarn.pod index b946654425..8dbae0ddbc 100644 --- a/pod/perllexwarn.pod +++ b/pod/perllexwarn.pod @@ -4,7 +4,7 @@ perllexwarn - Perl Lexical Warnings =head1 DESCRIPTION -The C<use warning> pragma is a replacement for both the command line +The C<use warnings> pragma is a replacement for both the command line flag B<-w> and the equivalent Perl variable, C<$^W>. The pragma works just like the existing "strict" pragma. @@ -19,21 +19,21 @@ doesn't attempt to control the warnings will work unchanged. All warnings are enabled in a block by either of these: - use warning ; - use warning 'all' ; + use warnings ; + use warnings 'all' ; Similarly all warnings are disabled in a block by either of these: - no warning ; - no warning 'all' ; + no warnings ; + no warnings 'all' ; For example, consider the code below: - use warning ; + use warnings ; my $a ; my $b ; { - no warning ; + no warnings ; $b = 2 if $a EQ 3 ; } $b = 1 if $a NE 3 ; @@ -65,7 +65,7 @@ example, in the code below, an C<"integer overflow"> warning will only be reported for the C<$a> variable. my $a = "2:" + 3; - no warning ; + no warnings ; my $b = "2:" + 3; Note that neither the B<-w> flag or the C<$^W> can be used to @@ -143,7 +143,7 @@ details of how this flag interacts with lexical warnings. If the B<-W> flag is used on the command line, it will enable all warnings throughout the program regardless of whether warnings were disabled -locally using C<no warning> or C<$^W =0>. This includes all files that get +locally using C<no warnings> or C<$^W =0>. This includes all files that get included via C<use>, C<require> or C<do>. Think of it as the Perl equivalent of the "lint" command. @@ -197,7 +197,7 @@ or B<-X> command line flags. =back The combined effect of 3 & 4 is that it will will allow code which uses -the lexical warning pragma to control the warning behavior of $^W-type +the lexical warnings pragma to control the warning behavior of $^W-type code (using a C<local $^W=0>) if it really wants to, but not vice-versa. =head1 EXPERIMENTAL FEATURES @@ -273,30 +273,37 @@ hierarchy is: | +--- misc - -Just like the "strict" pragma any of these categories can be -combined - use warning qw(void redefine) ; - no warning qw(io syntax untie) ; +Just like the "strict" pragma any of these categories can be combined + + use warnings qw(void redefine) ; + no warnings qw(io syntax untie) ; + +Also like the "strict" pragma, if there is more than one instance of the +warnings pragma in a given scope the cumulative effect is additive. + + use warnings qw(void) ; # only "void" warnings enabled + ... + use warnings qw(io) ; # only "void" & "io" warnings enabled + ... + no warnings qw(void) ; # only "io" warnings enabled + =head2 Fatal Warnings -This feature is B<very> experimental. - The presence of the word "FATAL" in the category list will escalate any -warnings from the category specified that are detected in the lexical -scope into fatal errors. In the code below, there are 3 places where -a deprecated warning will be detected, the middle one will produce a -fatal error. - - - use warning ; +warnings from the category/categories specified that are detected in +the lexical scope into fatal errors. In the code below, there are 3 +places where a deprecated warning will be detected, the middle one will +produce a fatal error. + + + use warnings ; $a = 1 if $a EQ $b ; { - use warning qw(FATAL deprecated) ; + use warnings FATAL => qw(deprecated) ; $a = 1 if $a EQ $b ; } @@ -319,7 +326,7 @@ The experimental features need bottomed out. =head1 SEE ALSO -L<warning>. +L<warnings>. =head1 AUTHOR diff --git a/pod/perlmodlib.pod b/pod/perlmodlib.pod index 79892344df..bfc5223819 100644 --- a/pod/perlmodlib.pod +++ b/pod/perlmodlib.pod @@ -30,7 +30,7 @@ by saying: no integer; no strict 'refs'; - no warning; + no warnings; which lasts until the end of that BLOCK. @@ -46,9 +46,13 @@ The following pragmas are defined (and have their own documentation). =over 12 +=item attributes + +set/get the attributes of a subroutine or variable + =item attrs -set/get attributes of a subroutine +set/get attributes of a subroutine (obsolescent) =item autouse @@ -126,7 +130,7 @@ turn on UTF-8 and Unicode support predeclare global variable names -=item warning +=item warnings control optional warnings @@ -134,10 +138,6 @@ control optional warnings control VMS-specific language features -=item warning - -control optional warnings - =back =head2 Standard Modules diff --git a/pod/perlop.pod b/pod/perlop.pod index bd4ca1df7d..6c2cb3393a 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -220,11 +220,15 @@ Binary "." concatenates two strings. Binary "<<" returns the value of its left argument shifted left by the number of bits specified by the right argument. Arguments should be -integers. (See also L<Integer Arithmetic>.) +integers. (See also L<Integer Arithmetic>.) Shifting more than the +width of an integer in bits (usually 32 or 64) produces undefined +(platform dependent) results. Binary ">>" returns the value of its left argument shifted right by the number of bits specified by the right argument. Arguments should -be integers. (See also L<Integer Arithmetic>.) +be integers. (See also L<Integer Arithmetic>.) Shifting more than +the width of an integer in bits (usually 32 or 64) produces undefined +(platform dependent) results. =head2 Named Unary Operators @@ -673,7 +677,7 @@ a transliteration, the first eleven of these sequences may be used. \x1b hex char (ESC) \x{263a} wide hex char (SMILEY) \c[ control char (ESC) - \C{name} named char + \N{name} named char \l lowercase next char \u uppercase next char @@ -684,7 +688,7 @@ a transliteration, the first eleven of these sequences may be used. If C<use locale> is in effect, the case map used by C<\l>, C<\L>, C<\u> and C<\U> is taken from the current locale. See L<perllocale>. For -documentation of C<\C{name}>, see L<charnames>. +documentation of C<\N{name}>, see L<charnames>. All systems use the virtual C<"\n"> to represent a line terminator, called a "newline". There is no such thing as an unvarying, physical diff --git a/pod/perlre.pod b/pod/perlre.pod index a1a118f371..76f345de35 100644 --- a/pod/perlre.pod +++ b/pod/perlre.pod @@ -149,7 +149,7 @@ also work: \x1B hex char \x{263a} wide hex char (Unicode SMILEY) \c[ control char - \C{name} named char + \N{name} named char \l lowercase next char (think vi) \u uppercase next char (think vi) \L lowercase till \E (think vi) @@ -159,7 +159,7 @@ also work: If C<use locale> is in effect, the case map used by C<\l>, C<\L>, C<\u> and C<\U> is taken from the current locale. See L<perllocale>. For -documentation of C<\C{name}>, see L<charnames>. +documentation of C<\N{name}>, see L<charnames>. You cannot include a literal C<$> or C<@> within a C<\Q> sequence. An unescaped C<$> or C<@> interpolates the corresponding variable, @@ -178,7 +178,7 @@ In addition, Perl defines the following: \PP Match non-P \X Match eXtended Unicode "combining character sequence", equivalent to C<(?:\PM\pM*)> - \O Match a single C char (octet) even under utf8. + \C Match a single C char (octet) even under utf8. A C<\w> matches a single alphanumeric character, not a whole word. Use C<\w+> to match a string of Perl-identifier characters (which isn't diff --git a/pod/perlrun.pod b/pod/perlrun.pod index 8a511ae930..0c3fcad921 100644 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@ -692,7 +692,7 @@ can disable or promote into fatal errors specific warnings using C<__WARN__> hooks, as described in L<perlvar> and L<perlfunc/warn>. See also L<perldiag> and L<perltrap>. A new, fine-grained warning facility is also available if you want to manipulate entire classes -of warnings; see L<warning> (or better yet, its source code) about +of warnings; see L<warnings> (or better yet, its source code) about that. =item B<-W> diff --git a/pod/perlsub.pod b/pod/perlsub.pod index 2bd1cfd1ee..47f507f28d 100644 --- a/pod/perlsub.pod +++ b/pod/perlsub.pod @@ -6,16 +6,22 @@ perlsub - Perl subroutines To declare subroutines: - sub NAME; # A "forward" declaration. - sub NAME(PROTO); # ditto, but with prototypes + sub NAME; # A "forward" declaration. + sub NAME(PROTO); # ditto, but with prototypes + sub NAME : ATTRS; # with attributes + sub NAME(PROTO) : ATTRS; # with attributes and prototypes - sub NAME BLOCK # A declaration and a definition. - sub NAME(PROTO) BLOCK # ditto, but with prototypes + sub NAME BLOCK # A declaration and a definition. + sub NAME(PROTO) BLOCK # ditto, but with prototypes + sub NAME : ATTRS BLOCK # with attributes + sub NAME(PROTO) : ATTRS BLOCK # with prototypes and attributes To define an anonymous subroutine at runtime: - $subref = sub BLOCK; # no proto - $subref = sub (PROTO) BLOCK; # with proto + $subref = sub BLOCK; # no proto + $subref = sub (PROTO) BLOCK; # with proto + $subref = sub : ATTRS BLOCK; # with attributes + $subref = sub (PROTO) : ATTRS BLOCK; # with proto and attributes To import subroutines: @@ -112,7 +118,7 @@ Example: ... } -Asisng to a list of private variables to name your arguments: +Assigning to a list of private variables to name your arguments: sub maybeset { my($key, $value) = @_; @@ -196,7 +202,7 @@ disables any prototype checking on arguments you do provide. This is partly for historical reasons, and partly for having a convenient way to cheat if you know what you're doing. See L<Prototypes> below. -Function whose names are in all upper case are reserved to the Perl +Functions whose names are in all upper case are reserved to the Perl core, as are modules whose names are in all lower case. A function in all capitals is a loosely-held convention meaning it will be called indirectly by the run-time system itself, usually @@ -213,6 +219,11 @@ Synopsis: my (@wid, %get); # declare list of variables local my $foo = "flurp"; # declare $foo lexical, and init it my @oof = @bar; # declare @oof lexical, and init it + my $x : Foo = $y; # similar, with an attribute applied + +B<WARNING>: The use of attribute lists on C<my> declarations is +experimental. This feature should not be relied upon. It may +change or disappear in future releases of Perl. See L<attributes>. The C<my> operator declares the listed variables to be lexically confined to the enclosing block, conditional (C<if/unless/elsif/else>), @@ -220,7 +231,7 @@ loop (C<for/foreach/while/until/continue>), subroutine, C<eval>, or C<do/require/use>'d file. If more than one value is listed, the list must be placed in parentheses. All listed elements must be legal lvalues. Only alphanumeric identifiers may be lexically -scoped--magical built-in like C<$/> must currently be C<local>ize +scoped--magical built-ins like C<$/> must currently be C<local>ize with C<local> instead. Unlike dynamic variables created by the C<local> operator, lexical @@ -669,8 +680,8 @@ to it. Look out for implicit assignments in C<while> conditionals. =item 2. You need to create a local file or directory handle or a local function. -A function that needs a filehandle of its own must use C<local()> uses -C<local()> on complete typeglob. This can be used to create new symbol +A function that needs a filehandle of its own must use +C<local()> on a complete typeglob. This can be used to create new symbol table entries: sub ioqueue { @@ -798,7 +809,7 @@ It turns out that you can actually do this also: Here we're using the typeglobs to do symbol table aliasing. It's a tad subtle, though, and also won't work if you're using C<my> -variables, because only globals (even in disguised as C<local>s) +variables, because only globals (even in disguise as C<local>s) are in the symbol table. If you're passing around filehandles, you could usually just use the bare @@ -1043,7 +1054,7 @@ built-in name with the special package qualifier C<CORE::>. For example, saying C<CORE::open()> always refers to the built-in C<open()>, even if the current package has imported some other subroutine called C<&open()> from elsewhere. Even though it looks like a regular -function calls, it isn't: you can't take a reference to it, such as +function call, it isn't: you can't take a reference to it, such as the incorrect C<\&CORE::open> might appear to produce. Library modules should not in general export built-in names like C<open> @@ -1167,6 +1178,46 @@ described in L<AutoLoader> and in L<AutoSplit>, the standard SelfLoader modules in L<SelfLoader>, and the document on adding C functions to Perl code in L<perlxs>. +=head2 Subroutine Attributes + +A subroutine declaration or definition may have a list of attributes +associated with it. If such an attribute list is present, it is +broken up at space or comma boundaries and treated as though a +C<use attributes> had been seen. See L<attributes> for details +about what attributes are currently supported. +Unlike the limitation with the obsolescent C<use attrs>, the +C<sub : ATTRLIST> syntax works to associate the attributes with +a pre-declaration, and not just with a subroutine definition. + +The attributes must be valid as simple identifier names (without any +punctuation other than the '_' character). They may have a parameter +list appended, which is only checked for whether its parentheses ('(',')') +nest properly. + +Examples of valid syntax (even though the attributes are unknown): + + sub fnord (&\%) : switch(10,foo(7,3)) , , expensive ; + sub plugh () : Ugly('\(") , Bad ; + sub xyzzy : _5x5 { ... } + +Examples of invalid syntax: + + sub fnord : switch(10,foo() ; # ()-string not balanced + sub snoid : Ugly('(') ; # ()-string not balanced + sub xyzzy : 5x5 ; # "5x5" not a valid identifier + sub plugh : Y2::north ; # "Y2::north" not a simple identifier + sub snurt : foo + bar ; # "+" not a comma or space + +The attribute list is passed as a list of constant strings to the code +which associates them with the subroutine. In particular, the second example +of valid syntax above currently looks like this in terms of how it's +parsed and invoked: + + use attributes __PACKAGE__, \&plugh, q[Ugly('\(")], 'Bad'; + +For further details on attribute lists and their manipulation, +see L<attributes>. + =head1 SEE ALSO See L<perlref/"Function Templates"> for more about references and closures. diff --git a/pod/perltoc.pod b/pod/perltoc.pod index df44b38ffe..5842f18250 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -1599,7 +1599,7 @@ You want to temporarily change just one element of an array or hash attrs, autouse, base, blib, constant, diagnostics, fields, filetest, integer, less, lib, locale, ops, overload, re, sigtrap, strict, subs, utf8, -vars, vmsish, warning +vars, vmsish, warnings =item Standard Modules @@ -3488,7 +3488,7 @@ C<strict refs>, C<strict vars>, C<strict subs> =item DESCRIPTION -=head2 warning - Perl pragma to control optional warnings +=head2 warnings - Perl pragma to control optional warnings =item SYNOPSIS diff --git a/pod/perlvar.pod b/pod/perlvar.pod index 3a38f553c6..d38bc4937d 100644 --- a/pod/perlvar.pod +++ b/pod/perlvar.pod @@ -686,13 +686,6 @@ of perl in the right bracket?) Example: See also the documentation of C<use VERSION> and C<require VERSION> for a convenient way to fail if the running Perl interpreter is too old. -=item $^B - -The current set of warning checks enabled by C<use warning>. -See the documentation of C<warning> for more details. - -Used by lexical warnings to store the - =item $COMPILING =item $^C @@ -821,7 +814,12 @@ and B<-C> filetests are based on this value. The current value of the warning switch, initially true if B<-w> was used, false otherwise, but directly modifiable. (Mnemonic: -related to the B<-w> switch.) See also L<warning>. +related to the B<-w> switch.) See also L<warnings>. + +=item ${^Warnings} + +The current set of warning checks enabled by the C<use warnings> pragma. +See the documentation of C<warnings> for more details. =item $EXECUTABLE_NAME @@ -970,7 +968,7 @@ Carp was available. The third line will be executed only if Carp was not available. See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and -L<warning> for additional information. +L<warnings> for additional information. =back @@ -28,37 +28,6 @@ static double UV_MAX_cxux = ((double)UV_MAX); #endif /* - * Types used in bitwise operations. - * - * Normally we'd just use IV and UV. However, some hardware and - * software combinations (e.g. Alpha and current OSF/1) don't have a - * floating-point type to use for NV that has adequate bits to fully - * hold an IV/UV. (In other words, sizeof(long) == sizeof(double).) - * - * It just so happens that "int" is the right size almost everywhere. - */ -typedef int IBW; -typedef unsigned UBW; - -/* - * Mask used after bitwise operations. - * - * There is at least one realm (Cray word machines) that doesn't - * have an integral type (except char) small enough to be represented - * in a double without loss; that is, it has no 32-bit type. - */ -#if LONGSIZE > 4 && defined(_CRAY) && !defined(_CRAYMPP) -# define BW_BITS 32 -# define BW_MASK ((1 << BW_BITS) - 1) -# define BW_SIGN (1 << (BW_BITS - 1)) -# define BWi(i) (((i) & BW_SIGN) ? ((i) | ~BW_MASK) : ((i) & BW_MASK)) -# define BWu(u) ((u) & BW_MASK) -#else -# define BWi(i) (i) -# define BWu(u) (u) -#endif - -/* * Offset for integer pack/unpack. * * On architectures where I16 and I32 aren't really 16 and 32 bits, @@ -1131,17 +1100,11 @@ PP(pp_left_shift) { djSP; dATARGET; tryAMAGICbin(lshift,opASSIGN); { - IBW shift = POPi; - if (PL_op->op_private & HINT_INTEGER) { - IBW i = TOPi; - i = BWi(i) << shift; - SETi(BWi(i)); - } - else { - UBW u = TOPu; - u <<= shift; - SETu(BWu(u)); - } + IV shift = POPi; + if (PL_op->op_private & HINT_INTEGER) + SETi(TOPi << shift); + else + SETu(TOPu << shift); RETURN; } } @@ -1150,17 +1113,11 @@ PP(pp_right_shift) { djSP; dATARGET; tryAMAGICbin(rshift,opASSIGN); { - IBW shift = POPi; - if (PL_op->op_private & HINT_INTEGER) { - IBW i = TOPi; - i = BWi(i) >> shift; - SETi(BWi(i)); - } - else { - UBW u = TOPu; - u >>= shift; - SETu(BWu(u)); - } + IV shift = POPi; + if (PL_op->op_private & HINT_INTEGER) + SETi(TOPi >> shift); + else + SETu(TOPu >> shift); RETURN; } } @@ -1328,14 +1285,10 @@ PP(pp_bit_and) { dPOPTOPssrl; if (SvNIOKp(left) || SvNIOKp(right)) { - if (PL_op->op_private & HINT_INTEGER) { - IBW value = SvIV(left) & SvIV(right); - SETi(BWi(value)); - } - else { - UBW value = SvUV(left) & SvUV(right); - SETu(BWu(value)); - } + if (PL_op->op_private & HINT_INTEGER) + SETi( SvIV(left) & SvIV(right) ); + else + SETu( SvUV(left) & SvUV(right) ); } else { do_vop(PL_op->op_type, TARG, left, right); @@ -1351,14 +1304,10 @@ PP(pp_bit_xor) { dPOPTOPssrl; if (SvNIOKp(left) || SvNIOKp(right)) { - if (PL_op->op_private & HINT_INTEGER) { - IBW value = (USE_LEFT(left) ? SvIV(left) : 0) ^ SvIV(right); - SETi(BWi(value)); - } - else { - UBW value = (USE_LEFT(left) ? SvUV(left) : 0) ^ SvUV(right); - SETu(BWu(value)); - } + if (PL_op->op_private & HINT_INTEGER) + SETi( (USE_LEFT(left) ? SvIV(left) : 0) ^ SvIV(right) ); + else + SETu( (USE_LEFT(left) ? SvUV(left) : 0) ^ SvUV(right) ); } else { do_vop(PL_op->op_type, TARG, left, right); @@ -1374,14 +1323,10 @@ PP(pp_bit_or) { dPOPTOPssrl; if (SvNIOKp(left) || SvNIOKp(right)) { - if (PL_op->op_private & HINT_INTEGER) { - IBW value = (USE_LEFT(left) ? SvIV(left) : 0) | SvIV(right); - SETi(BWi(value)); - } - else { - UBW value = (USE_LEFT(left) ? SvUV(left) : 0) | SvUV(right); - SETu(BWu(value)); - } + if (PL_op->op_private & HINT_INTEGER) + SETi( (USE_LEFT(left) ? SvIV(left) : 0) | SvIV(right) ); + else + SETu( (USE_LEFT(left) ? SvUV(left) : 0) | SvUV(right) ); } else { do_vop(PL_op->op_type, TARG, left, right); @@ -1440,14 +1385,10 @@ PP(pp_complement) { dTOPss; if (SvNIOKp(sv)) { - if (PL_op->op_private & HINT_INTEGER) { - IBW value = ~SvIV(sv); - SETi(BWi(value)); - } - else { - UBW value = ~SvUV(sv); - SETu(BWu(value)); - } + if (PL_op->op_private & HINT_INTEGER) + SETi( ~SvIV(sv) ); + else + SETu( ~SvUV(sv) ); } else { register char *tmps; @@ -4977,14 +4918,7 @@ PP(pp_split) ++s; } } - else if (rx->prelen == 1 && *rx->precomp == '^') { - if (!(pm->op_pmflags & PMf_MULTILINE) - && !(pm->op_pmregexp->reganch & ROPT_WARNED)) { - if (ckWARN(WARN_DEPRECATED)) - Perl_warner(aTHX_ WARN_DEPRECATED, - "split /^/ better written as split /^/m"); - pm->op_pmregexp->reganch |= ROPT_WARNED; - } + else if (strEQ("^", rx->precomp)) { while (--limit) { /*SUPPRESS 530*/ for (m = s; m < strend && *m != '\n'; m++) ; @@ -49,6 +49,8 @@ #define dTARG SV *targ +#define dXS_TARGET SV * targ = (PL_op->op_private & OPpENTERSUB_HASTARG ? PAD_SV(PL_op->op_targ) : sv_newmortal()) + #define NORMAL PL_op->op_next #define DIE return Perl_die @@ -67,7 +69,7 @@ #define POPul ((unsigned long)SvIVx(POPs)) #ifdef HAS_QUAD #define POPq ((Quad_t)SvIVx(POPs)) -#define POPuq ((Uquad_t)SvIVx(POPs)) +#define POPuq ((Uquad_t)SvUVx(POPs)) #endif #define TOPs (*sp) @@ -77,10 +79,10 @@ #define TOPi ((IV)SvIV(TOPs)) #define TOPu ((UV)SvUV(TOPs)) #define TOPl ((long)SvIV(TOPs)) -#define TOPul ((unsigned long)SvIV(TOPs)) +#define TOPul ((unsigned long)SvUV(TOPs)) #ifdef HAS_QUAD #define TOPq ((Quad_t)SvIV(TOPs)) -#define TOPuq ((Uquad_t)SvIV(TOPs)) +#define TOPuq ((Uquad_t)SvUV(TOPs)) #endif /* Go to some pains in the rare event that we must extend the stack. */ @@ -3940,13 +3940,13 @@ PP(pp_gmtime) if (!tmbuf) RETPUSHUNDEF; tsv = Perl_newSVpvf(aTHX_ "%s %s %2d %02d:%02d:%02d %d", - dayname[tmbuf->tm_wday], - monname[tmbuf->tm_mon], - tmbuf->tm_mday, - tmbuf->tm_hour, - tmbuf->tm_min, - tmbuf->tm_sec, - tmbuf->tm_year + 1900); + dayname[tmbuf->tm_wday], + monname[tmbuf->tm_mon], + (IV)tmbuf->tm_mday, + (IV)tmbuf->tm_hour, + (IV)tmbuf->tm_min, + (IV)tmbuf->tm_sec, + (IV)tmbuf->tm_year + 1900); PUSHs(sv_2mortal(tsv)); } else if (tmbuf) { @@ -4740,7 +4740,7 @@ PP(pp_gpwent) PP(pp_spwent) { djSP; -#if defined(HAS_PASSWD) && defined(HAS_SETPWENT) && !defined(CYGWIN) +#if defined(HAS_PASSWD) && defined(HAS_SETPWENT) setpwent(); # ifdef HAS_SETSPENT setspent(); @@ -729,6 +729,11 @@ VIRTUAL void Perl_sv_force_normal(pTHX_ SV *sv); VIRTUAL void Perl_tmps_grow(pTHX_ I32 n); VIRTUAL SV* Perl_sv_rvweaken(pTHX_ SV *sv); VIRTUAL int Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg); +VIRTUAL OP* Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block); +VIRTUAL CV* Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); +VIRTUAL void Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); +VIRTUAL OP * Perl_my_attrs(pTHX_ OP *o, OP *attrs); +VIRTUAL void Perl_boot_core_xsutils(pTHX); #if defined(PERL_OBJECT) protected: #endif @@ -784,6 +789,9 @@ STATIC bool S_is_handle_constructor(pTHX_ OP *o, I32 argnum); STATIC char* S_gv_ename(pTHX_ GV *gv); STATIC CV* S_cv_clone2(pTHX_ CV *proto, CV *outside); STATIC bool S_scalar_mod_type(pTHX_ OP *o, I32 type); +STATIC OP * S_my_kid(pTHX_ OP *o, OP *attrs); +STATIC OP * S_dup_attrlist(pTHX_ OP *o); +STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs); # if defined(PL_OP_SLAB_ALLOC) STATIC void* S_Slab_Alloc(pTHX_ int m, size_t sz); # endif @@ -938,7 +946,7 @@ STATIC char* S_scan_heredoc(pTHX_ char *s); STATIC char* S_scan_ident(pTHX_ char *s, char *send, char *dest, STRLEN destlen, I32 ck_uni); STATIC char* S_scan_inputsymbol(pTHX_ char *start); STATIC char* S_scan_pat(pTHX_ char *start, I32 type); -STATIC char* S_scan_str(pTHX_ char *start); +STATIC char* S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims); STATIC char* S_scan_subst(pTHX_ char *start); STATIC char* S_scan_trans(pTHX_ char *start); STATIC char* S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp); @@ -972,6 +980,9 @@ STATIC I32 S_win32_textfilter(pTHX_ int idx, SV *sv, int maxlen); #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) STATIC SV* S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level); #endif +#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT) +STATIC int S_modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs); +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) STATIC SV* S_mess_alloc(pTHX); # if defined(LEAKTEST) @@ -1780,7 +1780,7 @@ tryagain: PL_seen_zerolen++; /* Do not optimize RE away */ nextchar(); break; - case 'O': + case 'C': ret = reg_node(SANY); *flagp |= HASWIDTH|SIMPLE; nextchar(); @@ -69,8 +69,6 @@ typedef struct regexp { #define RE_INTUIT_ONECHAR 0x4000000 #define RE_INTUIT_TAIL 0x8000000 -#define ROPT_WARNED 0x10000000 - #define RE_USE_INTUIT (RE_USE_INTUIT_NOML|RE_USE_INTUIT_ML) #define REINT_AUTORITATIVE (REINT_AUTORITATIVE_NOML|REINT_AUTORITATIVE_ML) #define REINT_ONCE (REINT_ONCE_NOML|REINT_ONCE_ML) @@ -1796,6 +1796,9 @@ Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp) } if (SvNOKp(sv)) { /* See note in sv_2uv() */ /* XXXX 64-bit? IV may have better precision... */ + /* I tried changing this for to be 64-bit-aware and + * the t/op/numconvert.t became very, very, angry. + * --jhi Sep 1999 */ if (SvTYPE(sv) < SVt_PVNV) sv_upgrade(sv, SVt_PVNV); SvGROW(sv, 28); @@ -10,7 +10,7 @@ BEGIN { use Config; $Is_Dosish = ($^O eq 'MSWin32' or $^O eq 'dos' or - $^O eq 'os2' or $^O eq 'mint' or $^O =~ /cygwin/); + $^O eq 'os2' or $^O eq 'mint'); print "1..28\n"; diff --git a/t/io/tell.t b/t/io/tell.t index 8df0228c31..31287e1d19 100755 --- a/t/io/tell.t +++ b/t/io/tell.t @@ -7,7 +7,7 @@ print "1..21\n"; $TST = 'tst'; $Is_Dosish = ($^O eq 'MSWin32' or $^O eq 'dos' or - $^O eq 'os2' or $^O eq 'mint' or $^O =~ /cygwin/); + $^O eq 'os2' or $^O eq 'mint'); open($TST, '../Configure') || (die "Can't open ../Configure"); binmode $TST if $Is_Dosish; diff --git a/t/lib/anydbm.t b/t/lib/anydbm.t index ed83a56222..9efe5e9f3e 100755 --- a/t/lib/anydbm.t +++ b/t/lib/anydbm.t @@ -13,7 +13,7 @@ use Fcntl; print "1..12\n"; $Is_Dosish = ($^O eq 'amigaos' || $^O eq 'MSWin32' or $^O eq 'dos' or - $^O eq 'os2' or $^O eq 'mint' or $^O =~ /cygwin/); + $^O eq 'os2' or $^O eq 'mint'); unlink <Op_dbmx*>; diff --git a/t/lib/attrs.t b/t/lib/attrs.t new file mode 100644 index 0000000000..d8afbf635a --- /dev/null +++ b/t/lib/attrs.t @@ -0,0 +1,125 @@ +#!./perl + +# Regression tests for attrs.pm and the C<sub x : attrs> syntax. + +BEGIN { + chdir 't' if -d 't'; + unshift @INC, '../lib'; + eval 'require attrs; 1' or do { + print "1..0\n"; + exit 0; + } +} + +sub NTESTS () ; + +my $test, $ntests; +BEGIN {$ntests=0} +$test=0; +my $failed = 0; + +print "1..".NTESTS."\n"; + +eval 'sub t1 ($) { use attrs "locked"; $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t2 { use attrs "locked"; $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t3 ($) : locked ;'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub t4 : locked ;'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon1; +eval '$anon1 = sub ($) { use attrs qw(locked method); $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon2; +eval '$anon2 = sub { use attrs qw(locked method); $_[0]++ }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my $anon3; +eval '$anon3 = sub { use attrs "method"; $_[0]->[1] }'; +(print "not "), $failed=1 if $@; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +my @attrs = attrs::get($anon3 ? $anon3 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +@attrs = sort +attrs::get($anon2 ? $anon2 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "locked method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +@attrs = sort +attrs::get($anon1 ? $anon1 : \&ns); +(print "not "), $failed=1 unless "@attrs" eq "locked method"; +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e1 ($) : plugh ;'; +unless ($@ && $@ =~ m/^Invalid CODE attribute: ["']?plugh["']? at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e2 ($) : plugh(0,0) xyzzy ;'; +unless ($@ && $@ =~ m/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e3 ($) : plugh(0,0 xyzzy ;'; +unless ($@ && $@ =~ m/Unterminated attribute parameter in attribute list at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + +eval 'sub e4 ($) : plugh + xyzzy ;'; +unless ($@ && $@ =~ m/Invalid separator character '[+]' in attribute list at/) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# $x\n"; + print "not "; + $failed = 1; +} +print "ok ",++$test,"\n"; +BEGIN {++$ntests} + + +# Other tests should be added above this line + +sub NTESTS () { $ntests } + +exit $failed; diff --git a/t/lib/cgi-html.t b/t/lib/cgi-html.t index d4c9c1b7a7..e878b21e50 100755 --- a/t/lib/cgi-html.t +++ b/t/lib/cgi-html.t @@ -17,6 +17,8 @@ print "ok 1\n"; ######################### End of black magic. +my $Is_EBCDIC = $Config{'ebcdic'} eq 'define'; + # util sub test { local($^W) = 0; @@ -37,10 +39,17 @@ test(7,h1({-align=>'CENTER'},['fred','agnes']) eq local($") = '-'; test(8,h1('fred','agnes','maura') eq '<H1>fred-agnes-maura</H1>',"open/close tag \$\" interpolation"); } +if (!$Is_EBCDIC) { test(9,header() eq "Content-Type: text/html\015\012\015\012","header()"); test(10,header(-type=>'image/gif') eq "Content-Type: image/gif\015\012\015\012","header()"); test(11,header(-type=>'image/gif',-status=>'500 Sucks') eq "Status: 500 Sucks\015\012Content-Type: image/gif\015\012\015\012","header()"); test(12,header(-nph=>1) eq "HTTP/1.0 200 OK\015\012Content-Type: text/html\015\012\015\012","header()"); +} else { +test(9,header() eq "Content-Type: text/html\r\n\r\n","header()"); +test(10,header(-type=>'image/gif') eq "Content-Type: image/gif\r\n\r\n","header()"); +test(11,header(-type=>'image/gif',-status=>'500 Sucks') eq "Status: 500 Sucks\r\nContent-Type: image/gif\r\n\r\n","header()"); +test(12,header(-nph=>1) eq "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n","header()"); +} test(13,start_html() ."\n" eq <<END,"start_html()"); <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <HTML><HEAD><TITLE>Untitled Document</TITLE> @@ -61,8 +70,13 @@ END ; test(16,($cookie=cookie(-name=>'fred',-value=>['chocolate','chip'],-path=>'/')) eq 'fred=chocolate&chip; domain=localhost; path=/',"cookie()"); +if (!$Is_EBCDIC) { test(17,header(-Cookie=>$cookie) =~ m!^Set-Cookie: fred=chocolate&chip\; domain=localhost; path=/\015\012Date:.*\015\012Content-Type: text/html\015\012\015\012!s, "header(-cookie)"); +} else { +test(17,header(-Cookie=>$cookie) =~ m!^Set-Cookie: fred=chocolate&chip\; domain=localhost; path=/\r\nDate:.*\r\nContent-Type: text/html\r\n\r\n!s, + "header(-cookie)"); +} test(18,start_h3 eq '<H3>'); test(19,end_h3 eq '</H3>'); test(20,start_table({-border=>undef}) eq '<TABLE BORDER>'); diff --git a/t/lib/charnames.t b/t/lib/charnames.t index 860cc03c75..8d5c8db384 100644 --- a/t/lib/charnames.t +++ b/t/lib/charnames.t @@ -12,13 +12,13 @@ print "1..5\n"; use charnames ':full'; -print "not " unless "Here\C{EXCLAMATION MARK}?" eq 'Here!?'; +print "not " unless "Here\N{EXCLAMATION MARK}?" eq 'Here!?'; print "ok 1\n"; print "# \$res=$res \$\@='$@'\nnot " if $res = eval <<'EOE' use charnames ":full"; -"Here: \C{CYRILLIC SMALL LETTER BE}!"; +"Here: \N{CYRILLIC SMALL LETTER BE}!"; 1 EOE or $@ !~ /above 0xFF/; @@ -28,7 +28,7 @@ print "ok 2\n"; print "# \$res=$res \$\@='$@'\nnot " if $res = eval <<'EOE' use charnames 'cyrillic'; -"Here: \C{Be}!"; +"Here: \N{Be}!"; 1 EOE or $@ !~ /CYRILLIC CAPITAL LETTER BE.*above 0xFF/; @@ -42,12 +42,12 @@ $encoded_bet = "\327\221"; use charnames ':full'; use utf8; - print "not " unless "\C{CYRILLIC SMALL LETTER BE}" eq $encoded_be; + print "not " unless "\N{CYRILLIC SMALL LETTER BE}" eq $encoded_be; print "ok 4\n"; use charnames qw(cyrillic greek :short); - print "not " unless "\C{be},\C{alpha},\C{hebrew:bet}" + print "not " unless "\N{be},\N{alpha},\N{hebrew:bet}" eq "$encoded_be,$encoded_alpha,$encoded_bet"; print "ok 5\n"; } diff --git a/t/lib/dprof.t b/t/lib/dprof.t index 9374151353..4d6f7823c3 100755 --- a/t/lib/dprof.t +++ b/t/lib/dprof.t @@ -5,6 +5,10 @@ BEGIN { unshift @INC, '../lib'; } +END { + unlink 'tmon.out', 'err'; +} + use Benchmark qw( timediff timestr ); use Getopt::Std 'getopts'; use Config '%Config'; diff --git a/t/lib/syslfs.t b/t/lib/syslfs.t index c9d7120101..4d38a8e779 100644 --- a/t/lib/syslfs.t +++ b/t/lib/syslfs.t @@ -102,7 +102,7 @@ sub fail () { $fail++; } -print "1..8\n"; +print "1..17\n"; my $fail = 0; @@ -112,38 +112,60 @@ print "ok 1\n"; fail unless -s "big" == 5_000_000_003; # exercizes pp_ftsize print "ok 2\n"; +fail unless -e "big"; +print "ok 3\n"; + +fail unless -f "big"; +print "ok 4\n"; + sysopen(BIG, "big", O_RDONLY) or do { warn "sysopen failed: $!\n"; bye }; -sysseek(BIG, 4_500_000_000, SEEK_SET); +fail unless sysseek(BIG, 4_500_000_000, SEEK_SET) == 4_500_000_000; +print "ok 5\n"; fail unless sysseek(BIG, 0, SEEK_CUR) == 4_500_000_000; -print "ok 3\n"; +print "ok 6\n"; -sysseek(BIG, 1, SEEK_CUR); +fail unless sysseek(BIG, 1, SEEK_CUR) == 4_500_000_001; +print "ok 7\n"; fail unless sysseek(BIG, 0, SEEK_CUR) == 4_500_000_001; -print "ok 4\n"; +print "ok 8\n"; -sysseek(BIG, -1, SEEK_CUR); +fail unless sysseek(BIG, -1, SEEK_CUR) == 4_500_000_000; +print "ok 9\n"; fail unless sysseek(BIG, 0, SEEK_CUR) == 4_500_000_000; -print "ok 5\n"; +print "ok 10\n"; -sysseek(BIG, -3, SEEK_END); +fail unless sysseek(BIG, -3, SEEK_END) == 5_000_000_000; +print "ok 11\n"; fail unless sysseek(BIG, 0, SEEK_CUR) == 5_000_000_000; -print "ok 6\n"; +print "ok 12\n"; my $big; fail unless sysread(BIG, $big, 3) == 3; -print "ok 7\n"; +print "ok 13\n"; fail unless $big eq "big"; -print "ok 8\n"; +print "ok 14\n"; + +# 705_032_704 = (I32)5_000_000_000 +fail unless seek(BIG, 705_032_704, $SEEK_SET); +print "ok 15\n"; + +my $zero; + +fail unless read(BIG, $zero, 3) == 3; +print "ok 16\n"; + +fail unless $zero eq "\0\0\0"; +print "ok 17\n"; explain if $fail; -bye(); +bye(); # does the necessary cleanup # eof diff --git a/t/op/64bit.t b/t/op/64bit.t index 4da3a9e2e8..fce8e7a56c 100644 --- a/t/op/64bit.t +++ b/t/op/64bit.t @@ -10,20 +10,22 @@ BEGIN { # This could use a lot of more tests. # -# Nota bene: bit operations (&, |, ^, ~, <<, >>, vec) are not 64-bit clean. +# Nota bene: bit operations (&, |, ^, ~, <<, >>) are not 64-bit clean. # See the beginning of pp.c and the explanation next to IBW/UBW. -# so that using > 0xfffffff constants and 32+ bit -# shifts and vector sizes doesn't cause noise -no warning 'overflow'; +# So that using > 0xfffffff constants and +# 32+ bit vector sizes and shift doesn't cause noise. +no warnings qw(overflow portable); -print "1..36\n"; +print "1..48\n"; my $q = 12345678901; my $r = 23456789012; my $f = 0xffffffff; my $x; my $y; +my $z; + $x = unpack "q", pack "q", $q; print "not " unless $x == $q && $x > $f; @@ -190,3 +192,42 @@ print "not " unless $a == -9223372036854775809; print "ok 36\n"; +$x = ''; +print "not " unless (vec($x, 1, 64) = $q) == $q; +print "ok 37\n"; + +print "not " unless vec($x, 1, 64) == $q && vec($x, 1, 64) > $f; +print "ok 38\n"; + +print "not " unless vec($x, 0, 64) == 0 && vec($x, 2, 64) == 0; +print "ok 39\n"; + + +print "not " unless ($q & $r) == 1442844692; +print "ok 40\n"; + +print "not " unless ($q | $r) == 34359623221; +print "ok 41\n"; + +print "not " unless ($q ^ $r) == 32916778529; +print "ok 42\n"; + +print "not " unless ~$q == 18446744061363872714; +print "ok 43\n"; + +print "not " unless ($q << 1) == 24691357802; +print "ok 44\n"; + +print "not " unless (($q << 1) >> 1) == $q; +print "ok 45\n"; + +print "not " unless (1 << 32) == 2**32; # Risky because of the **? +print "ok 46\n"; + +print "not " unless ((1 << 40) >> 32) == 256; +print "ok 47\n"; + +print "not " unless (1 << 63) == ~0 ^ (~0 >> 1); +print "ok 48\n"; + +# eof diff --git a/t/op/attrs.t b/t/op/attrs.t new file mode 100644 index 0000000000..e89c2cb816 --- /dev/null +++ b/t/op/attrs.t @@ -0,0 +1,176 @@ +#!./perl -w + +# Regression tests for attributes.pm and the C< : attrs> syntax. + +BEGIN { + chdir 't' if -d 't'; + unshift @INC, '../lib'; +} + +sub NTESTS () ; + +my ($test, $ntests); +BEGIN {$ntests=0} +$test=0; +my $failed = 0; + +print "1..".NTESTS."\n"; + +$SIG{__WARN__} = sub { die @_ }; + +sub mytest { + if (!$@ ne !$_[0] || $_[0] && $@ !~ $_[0]) { + if ($@) { + my $x = $@; + $x =~ s/\n.*\z//s; + print "# Got: $x\n" + } + else { + print "# Got unexpected success\n"; + } + if ($_[0]) { + print "# Expected: $_[0]\n"; + } + else { + print "# Expected success\n"; + } + $failed = 1; + print "not "; + } + elsif (@_ == 3 && $_[1] ne $_[2]) { + print "# Got: $_[1]\n"; + print "# Expected: $_[2]\n"; + $failed = 1; + print "not "; + } + print "ok ",++$test,"\n"; +} + +eval 'sub t1 ($) : locked { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +eval 'sub t2 : locked { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +eval 'sub t3 ($) : locked ;'; +mytest; +BEGIN {++$ntests} + +eval 'sub t4 : locked ;'; +mytest; +BEGIN {++$ntests} + +my $anon1; +eval '$anon1 = sub ($) : locked,,method { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +my $anon2; +eval '$anon2 = sub : locked , method { $_[0]++ }'; +mytest; +BEGIN {++$ntests} + +my $anon3; +eval '$anon3 = sub : method { $_[0]->[1] }'; +mytest; +BEGIN {++$ntests} + +eval 'sub e1 ($) : plugh ;'; +mytest qr/^Invalid CODE attributes?: ["']?plugh["']? at/; +BEGIN {++$ntests} + +eval 'sub e2 ($) : plugh(0,0) xyzzy ;'; +mytest qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /; +BEGIN {++$ntests} + +eval 'sub e3 ($) : plugh(0,0 xyzzy ;'; +mytest qr/Unterminated attribute parameter in attribute list at/; +BEGIN {++$ntests} + +eval 'sub e4 ($) : plugh + xyzzy ;'; +mytest qr/Invalid separator character '[+]' in attribute list at/; +BEGIN {++$ntests} + +eval 'my main $x : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my $x : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my $x ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x) : ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : = 0;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : ;'; +mytest; +BEGIN {++$ntests} + +eval 'my ($x,$y) : plugh;'; +mytest qr/^Invalid SCALAR attribute: ["']?plugh["']? at/; +BEGIN {++$ntests} + +sub A::MODIFY_SCALAR_ATTRIBUTES { return } +eval 'my A $x : plugh;'; +mytest qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/; +BEGIN {++$ntests} + +eval 'my A $x : plugh plover;'; +mytest qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /; +BEGIN {++$ntests} + +sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" } +sub X::foo { 1 } +*Y::bar = \&X::foo; +*Y::bar = \&X::foo; # second time for -w +eval 'package Z; sub Y::bar : locked'; +mytest qr/^X at /; +BEGIN {++$ntests} + +my @attrs = eval 'attributes::get \&Y::bar'; +mytest '', "@attrs", "locked"; +BEGIN {++$ntests} + +@attrs = eval 'attributes::get $anon1'; +mytest '', "@attrs", "locked method"; +BEGIN {++$ntests} + +sub Z::DESTROY { } +sub Z::FETCH_CODE_ATTRIBUTES { return 'Z' } +my $thunk = eval 'bless +sub : method locked { 1 }, "Z"'; +mytest '', ref($thunk), "Z"; +BEGIN {++$ntests} + +@attrs = eval 'attributes::get $thunk'; +mytest '', "@attrs", "locked method Z"; +BEGIN {++$ntests} + + +# Other tests should be added above this line + +sub NTESTS () { $ntests } + +exit $failed; diff --git a/t/op/join.t b/t/op/join.t index eec4611e62..def5a9e9fa 100755 --- a/t/op/join.t +++ b/t/op/join.t @@ -1,8 +1,6 @@ #!./perl -# $RCSfile: join.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:01 $ - -print "1..3\n"; +print "1..6\n"; @x = (1, 2, 3); if (join(':',@x) eq '1:2:3') {print "ok 1\n";} else {print "not ok 1\n";} @@ -10,3 +8,15 @@ if (join(':',@x) eq '1:2:3') {print "ok 1\n";} else {print "not ok 1\n";} if (join('',1,2,3) eq '123') {print "ok 2\n";} else {print "not ok 2\n";} if (join(':',split(/ /,"1 2 3")) eq '1:2:3') {print "ok 3\n";} else {print "not ok 3\n";} + +my $f = 'a'; +$f = join ',', 'b', $f, 'e'; +if ($f eq 'b,a,e') {print "ok 4\n";} else {print "# '$f'\nnot ok 4\n";} + +$f = 'a'; +$f = join ',', $f, 'b', 'e'; +if ($f eq 'a,b,e') {print "ok 5\n";} else {print "not ok 5\n";} + +$f = 'a'; +$f = join $f, 'b', 'e', 'k'; +if ($f eq 'baeak') {print "ok 6\n";} else {print "# '$f'\nnot ok 6\n";} diff --git a/t/op/lfs.t b/t/op/lfs.t index 46d410da0a..ae6aac6079 100644 --- a/t/op/lfs.t +++ b/t/op/lfs.t @@ -107,7 +107,7 @@ sub fail () { $fail++; } -print "1..8\n"; +print "1..17\n"; my $fail = 0; @@ -117,39 +117,61 @@ print "ok 1\n"; fail unless -s "big" == 5_000_000_003; # exercizes pp_ftsize print "ok 2\n"; +fail unless -e "big"; +print "ok 3\n"; + +fail unless -f "big"; +print "ok 4\n"; + open(BIG, "big") or do { warn "open failed: $!\n"; bye }; binmode BIG; -seek(BIG, 4_500_000_000, $SEEK_SET); +fail unless seek(BIG, 4_500_000_000, $SEEK_SET); +print "ok 5\n"; fail unless tell(BIG) == 4_500_000_000; -print "ok 3\n"; +print "ok 6\n"; -seek(BIG, 1, $SEEK_CUR); +fail unless seek(BIG, 1, $SEEK_CUR); +print "ok 7\n"; fail unless tell(BIG) == 4_500_000_001; -print "ok 4\n"; +print "ok 8\n"; -seek(BIG, -1, $SEEK_CUR); +fail unless seek(BIG, -1, $SEEK_CUR); +print "ok 9\n"; fail unless tell(BIG) == 4_500_000_000; -print "ok 5\n"; +print "ok 10\n"; -seek(BIG, -3, $SEEK_END); +fail unless seek(BIG, -3, $SEEK_END); +print "ok 11\n"; fail unless tell(BIG) == 5_000_000_000; -print "ok 6\n"; +print "ok 12\n"; my $big; fail unless read(BIG, $big, 3) == 3; -print "ok 7\n"; +print "ok 13\n"; fail unless $big eq "big"; -print "ok 8\n"; +print "ok 14\n"; + +# 705_032_704 = (I32)5_000_000_000 +fail unless seek(BIG, 705_032_704, $SEEK_SET); +print "ok 15\n"; + +my $zero; + +fail unless read(BIG, $zero, 3) == 3; +print "ok 16\n"; + +fail unless $zero eq "\0\0\0"; +print "ok 17\n"; explain if $fail; -bye(); +bye(); # does the necessary cleanup # eof diff --git a/t/op/misc.t b/t/op/misc.t index 926c7f38d0..3c385cd4d3 100755 --- a/t/op/misc.t +++ b/t/op/misc.t @@ -59,11 +59,12 @@ $a = ":="; split /($a)/o, "a:=b:=c"; print "@_" EXPECT a := b := c ######## +use integer; $cusp = ~0 ^ (~0 >> 1); $, = " "; print +($cusp - 1) % 8, $cusp % 8, -$cusp % 8, ($cusp + 1) % 8, "!\n"; EXPECT -7 0 0 1 ! +-1 0 0 1 ! ######## $foo=undef; $foo->go; EXPECT diff --git a/t/op/sort.t b/t/op/sort.t index 27c77a4fc4..f7bba3d263 100755 --- a/t/op/sort.t +++ b/t/op/sort.t @@ -4,7 +4,7 @@ BEGIN { chdir 't' if -d 't'; unshift @INC, '../lib'; } -print "1..37\n"; +print "1..38\n"; # XXX known to leak scalars $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; @@ -191,9 +191,15 @@ print "# x = '$x'; expected = '$expected'\n"; print ($x eq $expected ? "ok 36\n" : "not ok 36\n"); print "# x = '$x'; expected = '$expected'\n"; } + +# test that an optimized-away comparison block doesn't take any other +# arguments away with it +$x = join('', sort { $a <=> $b } 3, 1, 2); +print $x eq "123" ? "ok 37\n" : "not ok 37\n"; + # test sorting in non-main package package Foo; @a = ( 5, 19, 1996, 255, 90 ); @b = sort { $b <=> $a } @a; -print ("@b" eq '1996 255 90 19 5' ? "ok 37\n" : "not ok 37\n"); +print ("@b" eq '1996 255 90 19 5' ? "ok 38\n" : "not ok 38\n"); print "# x = '@b'\n"; diff --git a/t/op/stat.t b/t/op/stat.t index 60c70f2bb7..0af55bbaab 100755 --- a/t/op/stat.t +++ b/t/op/stat.t @@ -13,7 +13,7 @@ print "1..58\n"; $Is_MSWin32 = $^O eq 'MSWin32'; $Is_Dos = $^O eq 'dos'; -$Is_Dosish = $Is_Dos || $^O eq 'os2' || $Is_MSWin32 || $^O =~ /cygwin/; +$Is_Dosish = $Is_Dos || $^O eq 'os2' || $Is_MSWin32; chop($cwd = ($Is_MSWin32 ? `cd` : `pwd`)); $DEV = `ls -l /dev` unless $Is_Dosish; diff --git a/t/op/tie.t b/t/op/tie.t index 49f07d4d2d..105b1d6f18 100755 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -77,7 +77,7 @@ EXPECT ######## # strict behaviour, without any extra references -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; tie %h, Tie::StdHash; @@ -86,7 +86,7 @@ EXPECT ######## # strict behaviour, with 1 extra references generating an error -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; $a = tie %h, Tie::StdHash; @@ -96,7 +96,7 @@ untie attempted while 1 inner references still exist ######## # strict behaviour, with 1 extra references via tied generating an error -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; tie %h, Tie::StdHash; @@ -107,7 +107,7 @@ untie attempted while 1 inner references still exist ######## # strict behaviour, with 1 extra references which are destroyed -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; $a = tie %h, Tie::StdHash; @@ -117,7 +117,7 @@ EXPECT ######## # strict behaviour, with extra 1 references via tied which are destroyed -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; tie %h, Tie::StdHash; @@ -128,7 +128,7 @@ EXPECT ######## # strict error behaviour, with 2 extra references -use warning 'untie'; +use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; $a = tie %h, Tie::StdHash; @@ -139,13 +139,13 @@ untie attempted while 2 inner references still exist ######## # strict behaviour, check scope of strictness. -no warning 'untie'; +no warnings 'untie'; #local $^W = 0 ; use Tie::Hash ; $A = tie %H, Tie::StdHash; $C = $B = tied %H ; { - use warning 'untie'; + use warnings 'untie'; #local $^W = 1 ; use Tie::Hash ; tie %h, Tie::StdHash; diff --git a/t/op/time.t b/t/op/time.t index 1bec442fe2..658f9f35b9 100755 --- a/t/op/time.t +++ b/t/op/time.t @@ -2,7 +2,7 @@ # $RCSfile: time.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:32 $ -if ($does_gmtime = gmtime(time)) { print "1..5\n" } +if ($does_gmtime = gmtime(time)) { print "1..6\n" } else { print "1..3\n" } ($beguser,$begsys) = times; @@ -45,3 +45,9 @@ if (index(" :0:1:-1:364:365:-364:-365:",':' . ($localyday - $yday) . ':') > 0) {print "ok 5\n";} else {print "not ok 5\n";} + +# This could be stricter. +if (gmtime() =~ /^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Nov|Dec) ([ \d]\d) (\d\d):(\d\d):(\d\d) (\d\d\d\d)$/) + {print "ok 6\n";} +else + {print "not ok 6\n";} diff --git a/t/pragma/warn/2use b/t/pragma/warn/2use index 764a843192..4ec4da0a77 100644 --- a/t/pragma/warn/2use +++ b/t/pragma/warn/2use @@ -1,4 +1,4 @@ -Check lexical warning functionality +Check lexical warnings functionality TODO check that the warning hierarchy works. @@ -6,16 +6,16 @@ TODO __END__ # check illegal category is caught -use warning 'blah' ; +use warnings 'blah' ; EXPECT unknown warning category 'blah' at - line 3 BEGIN failed--compilation aborted at - line 3. ######## # Check compile time scope of pragma -use warning 'deprecated' ; +use warnings 'deprecated' ; { - no warning ; + no warnings ; 1 if $a EQ $b ; } 1 if $a EQ $b ; @@ -24,9 +24,9 @@ Use of EQ is deprecated at - line 8. ######## # Check compile time scope of pragma -no warning; +no warnings; { - use warning 'deprecated' ; + use warnings 'deprecated' ; 1 if $a EQ $b ; } 1 if $a EQ $b ; @@ -35,9 +35,9 @@ Use of EQ is deprecated at - line 6. ######## # Check runtime scope of pragma -use warning 'uninitialized' ; +use warnings 'uninitialized' ; { - no warning ; + no warnings ; my $b ; chop $b ; } my $b ; chop $b ; @@ -46,9 +46,9 @@ Use of uninitialized value at - line 8. ######## # Check runtime scope of pragma -no warning ; +no warnings ; { - use warning 'uninitialized' ; + use warnings 'uninitialized' ; my $b ; chop $b ; } my $b ; chop $b ; @@ -57,9 +57,9 @@ Use of uninitialized value at - line 6. ######## # Check runtime scope of pragma -no warning ; +no warnings ; { - use warning 'uninitialized' ; + use warnings 'uninitialized' ; $a = sub { my $b ; chop $b ; } } &$a ; @@ -67,7 +67,7 @@ EXPECT Use of uninitialized value at - line 6. ######## -use warning 'deprecated' ; +use warnings 'deprecated' ; 1 if $a EQ $b ; EXPECT Use of EQ is deprecated at - line 3. @@ -77,14 +77,14 @@ Use of EQ is deprecated at - line 3. 1 if $a EQ $b ; 1; --FILE-- -use warning 'deprecated' ; +use warnings 'deprecated' ; require "./abc"; EXPECT ######## --FILE-- abc -use warning 'deprecated' ; +use warnings 'deprecated' ; 1; --FILE-- require "./abc"; @@ -94,11 +94,11 @@ EXPECT ######## --FILE-- abc -use warning 'deprecated' ; +use warnings 'deprecated' ; 1 if $a EQ $b ; 1; --FILE-- -use warning 'uninitialized' ; +use warnings 'uninitialized' ; require "./abc"; my $a ; chop $a ; EXPECT @@ -107,11 +107,11 @@ Use of uninitialized value at - line 3. ######## --FILE-- abc.pm -use warning 'deprecated' ; +use warnings 'deprecated' ; 1 if $a EQ $b ; 1; --FILE-- -use warning 'uninitialized' ; +use warnings 'uninitialized' ; use abc; my $a ; chop $a ; EXPECT @@ -120,7 +120,7 @@ Use of uninitialized value at - line 3. ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval { my $b ; chop $b ; }; print STDERR $@ ; @@ -130,9 +130,9 @@ EXPECT ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval { - use warning 'uninitialized' ; + use warnings 'uninitialized' ; my $b ; chop $b ; }; print STDERR $@ ; my $b ; chop $b ; @@ -141,7 +141,7 @@ Use of uninitialized value at - line 6. ######## # Check scope of pragma with eval -use warning 'uninitialized' ; +use warnings 'uninitialized' ; eval { my $b ; chop $b ; }; print STDERR $@ ; @@ -152,9 +152,9 @@ Use of uninitialized value at - line 7. ######## # Check scope of pragma with eval -use warning 'uninitialized' ; +use warnings 'uninitialized' ; eval { - no warning ; + no warnings ; my $b ; chop $b ; }; print STDERR $@ ; my $b ; chop $b ; @@ -163,7 +163,7 @@ Use of uninitialized value at - line 8. ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval { 1 if $a EQ $b ; }; print STDERR $@ ; @@ -173,9 +173,9 @@ EXPECT ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval { - use warning 'deprecated' ; + use warnings 'deprecated' ; 1 if $a EQ $b ; }; print STDERR $@ ; 1 if $a EQ $b ; @@ -184,7 +184,7 @@ Use of EQ is deprecated at - line 6. ######## # Check scope of pragma with eval -use warning 'deprecated' ; +use warnings 'deprecated' ; eval { 1 if $a EQ $b ; }; print STDERR $@ ; @@ -195,9 +195,9 @@ Use of EQ is deprecated at - line 7. ######## # Check scope of pragma with eval -use warning 'deprecated' ; +use warnings 'deprecated' ; eval { - no warning ; + no warnings ; 1 if $a EQ $b ; }; print STDERR $@ ; 1 if $a EQ $b ; @@ -206,7 +206,7 @@ Use of EQ is deprecated at - line 8. ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval ' my $b ; chop $b ; '; print STDERR $@ ; @@ -216,9 +216,9 @@ EXPECT ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval q[ - use warning 'uninitialized' ; + use warnings 'uninitialized' ; my $b ; chop $b ; ]; print STDERR $@; my $b ; chop $b ; @@ -227,7 +227,7 @@ Use of uninitialized value at (eval 1) line 3. ######## # Check scope of pragma with eval -use warning 'uninitialized' ; +use warnings 'uninitialized' ; eval ' my $b ; chop $b ; '; print STDERR $@ ; @@ -238,9 +238,9 @@ Use of uninitialized value at - line 7. ######## # Check scope of pragma with eval -use warning 'uninitialized' ; +use warnings 'uninitialized' ; eval ' - no warning ; + no warnings ; my $b ; chop $b ; '; print STDERR $@ ; my $b ; chop $b ; @@ -249,7 +249,7 @@ Use of uninitialized value at - line 8. ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval ' 1 if $a EQ $b ; '; print STDERR $@ ; @@ -259,9 +259,9 @@ EXPECT ######## # Check scope of pragma with eval -no warning ; +no warnings ; eval q[ - use warning 'deprecated' ; + use warnings 'deprecated' ; 1 if $a EQ $b ; ]; print STDERR $@; 1 if $a EQ $b ; @@ -270,7 +270,7 @@ Use of EQ is deprecated at (eval 1) line 3. ######## # Check scope of pragma with eval -use warning 'deprecated' ; +use warnings 'deprecated' ; eval ' 1 if $a EQ $b ; '; print STDERR $@; @@ -281,11 +281,28 @@ Use of EQ is deprecated at (eval 1) line 2. ######## # Check scope of pragma with eval -use warning 'deprecated' ; +use warnings 'deprecated' ; eval ' - no warning ; + no warnings ; 1 if $a EQ $b ; '; print STDERR $@; 1 if $a EQ $b ; EXPECT Use of EQ is deprecated at - line 8. +######## + +# Check the additive nature of the pragma +1 if $a EQ $b ; +my $a ; chop $a ; +use warnings 'deprecated' ; +1 if $a EQ $b ; +my $b ; chop $b ; +use warnings 'uninitialized' ; +my $c ; chop $c ; +no warnings 'deprecated' ; +1 if $a EQ $b ; +EXPECT +Use of EQ is deprecated at - line 6. +Use of uninitialized value at - line 9. +Use of uninitialized value at - line 11. +Use of uninitialized value at - line 11. diff --git a/t/pragma/warn/3both b/t/pragma/warn/3both index 1d7deb8636..592724ad73 100644 --- a/t/pragma/warn/3both +++ b/t/pragma/warn/3both @@ -2,9 +2,9 @@ Check interaction of $^W and lexical __END__ -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - use warning ; + use warnings ; my $b ; chop $b ; } @@ -16,9 +16,9 @@ EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - use warning ; + use warnings ; my $b ; chop $b ; } @@ -30,9 +30,9 @@ EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - no warning ; + no warnings ; my $b ; chop $b ; } @@ -44,9 +44,9 @@ EXPECT ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - no warning ; + no warnings ; my $b ; chop $b ; } @@ -58,8 +58,8 @@ EXPECT ######## -# Check interaction of $^W and use warning -use warning ; +# Check interaction of $^W and use warnings +use warnings ; $^W = 1 ; my $b ; chop $b ; @@ -67,26 +67,26 @@ EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings $^W = 1 ; -use warning ; +use warnings ; my $b ; chop $b ; EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings $^W = 1 ; -no warning ; +no warnings ; my $b ; chop $b ; EXPECT ######## -# Check interaction of $^W and use warning -no warning ; +# Check interaction of $^W and use warnings +no warnings ; $^W = 1 ; my $b ; chop $b ; @@ -94,25 +94,25 @@ EXPECT ######## -w -# Check interaction of $^W and use warning -no warning ; +# Check interaction of $^W and use warnings +no warnings ; my $b ; chop $b ; EXPECT ######## -w -# Check interaction of $^W and use warning -use warning ; +# Check interaction of $^W and use warnings +use warnings ; my $b ; chop $b ; EXPECT Use of uninitialized value at - line 5. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - use warning ; + use warnings ; my $b ; chop $b ; } @@ -122,9 +122,9 @@ EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings sub fred { - no warning ; + no warnings ; my $b ; chop $b ; } @@ -135,8 +135,8 @@ EXPECT ######## -# Check interaction of $^W and use warning -use warning ; +# Check interaction of $^W and use warnings +use warnings ; BEGIN { $^W = 1 } my $b ; chop $b ; @@ -144,26 +144,26 @@ EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings BEGIN { $^W = 1 } -use warning ; +use warnings ; my $b ; chop $b ; EXPECT Use of uninitialized value at - line 6. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings BEGIN { $^W = 1 } -no warning ; +no warnings ; my $b ; chop $b ; EXPECT ######## -# Check interaction of $^W and use warning -no warning ; +# Check interaction of $^W and use warnings +no warnings ; BEGIN { $^W = 1 } my $b ; chop $b ; @@ -171,10 +171,10 @@ EXPECT ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings BEGIN { $^W = 1 } { - no warning ; + no warnings ; my $b ; chop $b ; } @@ -184,10 +184,10 @@ EXPECT Use of uninitialized value at - line 10. ######## -# Check interaction of $^W and use warning +# Check interaction of $^W and use warnings BEGIN { $^W = 0 } { - use warning ; + use warnings ; my $b ; chop $b ; } diff --git a/t/pragma/warn/4lint b/t/pragma/warn/4lint index 87cd7dc967..6a08409bb2 100644 --- a/t/pragma/warn/4lint +++ b/t/pragma/warn/4lint @@ -28,8 +28,8 @@ EXPECT print on closed filehandle main::STDIN at - line 5. ######## -W -# lint: check "no warning" is zapped -no warning ; +# lint: check "no warnings" is zapped +no warnings ; $a = $b = 1 ; $a = 1 if $a EQ $b ; close STDIN ; print STDIN "abc" ; @@ -38,9 +38,9 @@ Use of EQ is deprecated at - line 5. print on closed filehandle main::STDIN at - line 6. ######## -W -# lint: check "no warning" is zapped +# lint: check "no warnings" is zapped { - no warning ; + no warnings ; close STDIN ; print STDIN "abc" ; } EXPECT @@ -57,12 +57,12 @@ print on closed filehandle main::STDIN at - line 5. ######## -W --FILE-- abc.pm -no warning 'deprecated' ; +no warnings 'deprecated' ; my ($a, $b) = (0,0); 1 if $a EQ $b ; 1; --FILE-- -no warning 'uninitialized' ; +no warnings 'uninitialized' ; use abc; my $a ; chop $a ; EXPECT @@ -71,12 +71,12 @@ Use of uninitialized value at - line 3. ######## -W --FILE-- abc -no warning 'deprecated' ; +no warnings 'deprecated' ; my ($a, $b) = (0,0); 1 if $a EQ $b ; 1; --FILE-- -no warning 'uninitialized' ; +no warnings 'uninitialized' ; require "./abc"; my $a ; chop $a ; EXPECT diff --git a/t/pragma/warn/5nolint b/t/pragma/warn/5nolint index 979423e87e..994190a855 100644 --- a/t/pragma/warn/5nolint +++ b/t/pragma/warn/5nolint @@ -24,17 +24,17 @@ EXPECT EXPECT ######## -X -# nolint: check "no warning" is zapped -use warning ; +# nolint: check "no warnings" is zapped +use warnings ; $a = $b = 1 ; $a = 1 if $a EQ $b ; close STDIN ; print STDIN "abc" ; EXPECT ######## -X -# nolint: check "no warning" is zapped +# nolint: check "no warnings" is zapped { - use warning ; + use warnings ; close STDIN ; print STDIN "abc" ; } EXPECT @@ -49,24 +49,24 @@ EXPECT ######## -X --FILE-- abc.pm -use warning 'deprecated' ; +use warnings 'deprecated' ; my ($a, $b) = (0,0); 1 if $a EQ $b ; 1; --FILE-- -use warning 'uninitialized' ; +use warnings 'uninitialized' ; use abc; my $a ; chop $a ; EXPECT ######## -X --FILE-- abc -use warning 'deprecated' ; +use warnings 'deprecated' ; my ($a, $b) = (0,0); 1 if $a EQ $b ; 1; --FILE-- -use warning 'uninitialized' ; +use warnings 'uninitialized' ; require "./abc"; my $a ; chop $a ; EXPECT diff --git a/t/pragma/warn/6default b/t/pragma/warn/6default index 5be41124ca..dd3d1825f4 100644 --- a/t/pragma/warn/6default +++ b/t/pragma/warn/6default @@ -1,19 +1,19 @@ Check default warnings __END__ -# default warning should be displayed if you don't add anything +# default warnings should be displayed if you don't add anything # optional shouldn't my $a = oct "7777777777777777777777777777777777779" ; EXPECT Integer overflow in octal number at - line 3. ######## -# no warning should be displayed -no warning ; +# no warnings should be displayed +no warnings ; my $a = oct "7777777777777777777777777777777777778" ; EXPECT ######## -# all warning should be displayed -use warning ; +# all warnings should be displayed +use warnings ; my $a = oct "7777777777777777777777777777777777778" ; EXPECT Integer overflow in octal number at - line 3. @@ -21,10 +21,10 @@ Illegal octal digit '8' ignored at - line 3. Octal number > 037777777777 non-portable at - line 3. ######## # check scope -use warning ; +use warnings ; my $a = oct "7777777777777777777777777777777777778" ; { - no warning ; + no warnings ; my $a = oct "7777777777777777777777777777777777778" ; } my $c = oct "7777777777777777777777777777777777778" ; @@ -36,16 +36,16 @@ Integer overflow in octal number at - line 8. Illegal octal digit '8' ignored at - line 8. Octal number > 037777777777 non-portable at - line 8. ######## -# all warning should be displayed -use warning ; +# all warnings should be displayed +use warnings ; my $a = oct "0xfffffffffffffffffg" ; EXPECT Integer overflow in hexadecimal number at - line 3. Illegal hexadecimal digit 'g' ignored at - line 3. Hexadecimal number > 0xffffffff non-portable at - line 3. ######## -# all warning should be displayed -use warning ; +# all warnings should be displayed +use warnings ; my $a = oct "0b111111111111111111111111111111111111111111111111111111111111111112"; EXPECT Integer overflow in binary number at - line 3. diff --git a/t/pragma/warn/7fatal b/t/pragma/warn/7fatal new file mode 100644 index 0000000000..fe94511f3e --- /dev/null +++ b/t/pragma/warn/7fatal @@ -0,0 +1,242 @@ +Check FATAL functionality + +__END__ + +# Check compile time warning +use warnings FATAL => 'deprecated' ; +{ + no warnings ; + 1 if $a EQ $b ; +} +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 8. +######## + +# Check runtime scope of pragma +use warnings FATAL => 'uninitialized' ; +{ + no warnings ; + my $b ; chop $b ; +} +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +Use of uninitialized value at - line 8. +######## + +# Check runtime scope of pragma +no warnings ; +{ + use warnings FATAL => 'uninitialized' ; + $a = sub { my $b ; chop $b ; } +} +&$a ; +print STDERR "The End.\n" ; +EXPECT +Use of uninitialized value at - line 6. +######## + +--FILE-- abc +1 if $a EQ $b ; +1; +--FILE-- +use warnings FATAL => 'deprecated' ; +require "./abc"; +EXPECT + +######## + +--FILE-- abc +use warnings FATAL => 'deprecated' ; +1; +--FILE-- +require "./abc"; +1 if $a EQ $b ; +EXPECT + +######## + +--FILE-- abc +use warnings 'deprecated' ; +1 if $a EQ $b ; +1; +--FILE-- +use warnings FATAL => 'uninitialized' ; +require "./abc"; +my $a ; chop $a ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at ./abc line 2. +Use of uninitialized value at - line 3. +######## + +--FILE-- abc.pm +use warnings 'deprecated' ; +1 if $a EQ $b ; +1; +--FILE-- +use warnings FATAL => 'uninitialized' ; +use abc; +my $a ; chop $a ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at abc.pm line 2. +Use of uninitialized value at - line 3. +######## + +# Check scope of pragma with eval +no warnings ; +eval { + use warnings FATAL => 'uninitialized' ; + my $b ; chop $b ; +}; print STDERR "-- $@" ; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +-- Use of uninitialized value at - line 6. +The End. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'uninitialized' ; +eval { + my $b ; chop $b ; +}; print STDERR "-- $@" ; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +-- Use of uninitialized value at - line 5. +Use of uninitialized value at - line 7. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'uninitialized' ; +eval { + no warnings ; + my $b ; chop $b ; +}; print STDERR $@ ; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +Use of uninitialized value at - line 8. +######## + +# Check scope of pragma with eval +no warnings ; +eval { + use warnings FATAL => 'deprecated' ; + 1 if $a EQ $b ; +}; print STDERR "-- $@" ; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 6. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'deprecated' ; +eval { + 1 if $a EQ $b ; +}; print STDERR "-- $@" ; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 5. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'deprecated' ; +eval { + no warnings ; + 1 if $a EQ $b ; +}; print STDERR $@ ; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 8. +######## + +# Check scope of pragma with eval +no warnings ; +eval { + use warnings FATAL => 'deprecated' ; +}; print STDERR $@ ; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +The End. +######## + +# Check scope of pragma with eval +no warnings ; +eval q[ + use warnings FATAL => 'uninitialized' ; + my $b ; chop $b ; +]; print STDERR "-- $@"; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +-- Use of uninitialized value at (eval 1) line 3. +The End. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'uninitialized' ; +eval ' + my $b ; chop $b ; +'; print STDERR "-- $@" ; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +-- Use of uninitialized value at (eval 1) line 2. +Use of uninitialized value at - line 7. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'uninitialized' ; +eval ' + no warnings ; + my $b ; chop $b ; +'; print STDERR $@ ; +my $b ; chop $b ; +print STDERR "The End.\n" ; +EXPECT +Use of uninitialized value at - line 8. +######## + +# Check scope of pragma with eval +no warnings ; +eval q[ + use warnings FATAL => 'deprecated' ; + 1 if $a EQ $b ; +]; print STDERR "-- $@"; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +-- Use of EQ is deprecated at (eval 1) line 3. +The End. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'deprecated' ; +eval ' + 1 if $a EQ $b ; +'; print STDERR "-- $@"; +print STDERR "The End.\n" ; +EXPECT +-- Use of EQ is deprecated at (eval 1) line 2. +The End. +######## + +# Check scope of pragma with eval +use warnings FATAL => 'deprecated' ; +eval ' + no warnings ; + 1 if $a EQ $b ; +'; print STDERR "-- $@"; +1 if $a EQ $b ; +print STDERR "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 8. diff --git a/t/pragma/warn/8signal b/t/pragma/warn/8signal new file mode 100644 index 0000000000..0be2d13cc0 --- /dev/null +++ b/t/pragma/warn/8signal @@ -0,0 +1,18 @@ +Check interaction of __WARN__, __DIE__ & lexical Warnings + +TODO + +__END__ +# 8signal +BEGIN { $SIG{__WARN__} = sub { print "WARN -- @_" } } +BEGIN { $SIG{__DIE__} = sub { print "DIE -- @_" } } +1 if 1 EQ 2 ; +use warnings qw(deprecated) ; +1 if 1 EQ 2 ; +use warnings FATAL => qw(deprecated) ; +1 if 1 EQ 2 ; +print "The End.\n" ; +EXPECT +Use of EQ is deprecated at - line 8. +WARN -- Use of EQ is deprecated at - line 6. +DIE -- Use of EQ is deprecated at - line 8. diff --git a/t/pragma/warn/doio b/t/pragma/warn/doio index 5bcca8d78c..e6de782686 100644 --- a/t/pragma/warn/doio +++ b/t/pragma/warn/doio @@ -55,47 +55,47 @@ __END__ # doio.c -use warning 'io' ; +use warnings 'io' ; open(F, '|'.($^O eq 'VMS' ? 'mcr ':'')."$^X -e 1|"); close(F); -no warning 'io' ; +no warnings 'io' ; open(G, '|'.($^O eq 'VMS' ? 'mcr ':'')."$^X -e 1|"); close(G); EXPECT Can't do bidirectional pipe at - line 3. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; open(F, "| "); -no warning 'io' ; +no warnings 'io' ; open(G, "| "); EXPECT Missing command in piped open at - line 3. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; open(F, " |"); -no warning 'io' ; +no warnings 'io' ; open(G, " |"); EXPECT Missing command in piped open at - line 3. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; open(F, "<true\ncd"); -no warning 'io' ; +no warnings 'io' ; open(G, "<true\ncd"); EXPECT Unsuccessful open on filename containing newline at - line 3. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; close STDIN ; tell(STDIN); $a = seek(STDIN,1,1); $a = sysseek(STDIN,1,1); -x STDIN ; -no warning 'io' ; +no warnings 'io' ; close STDIN ; tell(STDIN); $a = seek(STDIN,1,1); @@ -108,24 +108,24 @@ sysseek() on unopened file at - line 6. Stat on unopened file <STDIN> at - line 7. ######## # doio.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; print $a ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; print $b ; EXPECT Use of uninitialized value at - line 3. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; EXPECT ######## # doio.c -use warning 'io' ; +use warnings 'io' ; stat "ab\ncd"; lstat "ab\ncd"; -no warning 'io' ; +no warnings 'io' ; stat "ab\ncd"; lstat "ab\ncd"; EXPECT @@ -133,18 +133,18 @@ Unsuccessful stat on filename containing newline at - line 3. Unsuccessful stat on filename containing newline at - line 4. ######## # doio.c -use warning 'io' ; +use warnings 'io' ; exec "lskdjfalksdjfdjfkls","" ; -no warning 'io' ; +no warnings 'io' ; exec "lskdjfalksdjfdjfkls","" ; EXPECT OPTION regex Can't exec "lskdjfalksdjfdjfkls": .+ ######## # doio.c -use warning 'io' ; +use warnings 'io' ; exec "lskdjfalksdjfdjfkls", "abc" ; -no warning 'io' ; +no warnings 'io' ; exec "lskdjfalksdjfdjfkls", "abc" ; EXPECT OPTION regex @@ -161,13 +161,13 @@ mkdir $filename, 0777 my $x = <> ; } { - no warning 'inplace' ; + no warnings 'inplace' ; local (@ARGV) = ($filename) ; local ($^I) = "" ; my $x = <> ; } { - use warning 'inplace' ; + use warnings 'inplace' ; local (@ARGV) = ($filename) ; local ($^I) = "" ; my $x = <> ; diff --git a/t/pragma/warn/doop b/t/pragma/warn/doop index 458a3b2803..961d157502 100644 --- a/t/pragma/warn/doop +++ b/t/pragma/warn/doop @@ -12,11 +12,11 @@ EXPECT Malformed UTF-8 character at - line 4. ######## # doop.c -use warning 'utf8' ; +use warnings 'utf8' ; use utf8 ; $_ = "\x80 \xff" ; chop ; -no warning 'utf8' ; +no warnings 'utf8' ; $_ = "\x80 \xff" ; chop ; EXPECT diff --git a/t/pragma/warn/gv b/t/pragma/warn/gv index e33f8ca04f..5ed4eca018 100644 --- a/t/pragma/warn/gv +++ b/t/pragma/warn/gv @@ -22,14 +22,14 @@ __END__ # gv.c -use warning 'misc' ; +use warnings 'misc' ; @ISA = qw(Fred); joe() EXPECT Can't locate package Fred for @main::ISA at - line 3. Undefined subroutine &main::joe called at - line 3. ######## # gv.c -no warning 'misc' ; +no warnings 'misc' ; @ISA = qw(Fred); joe() EXPECT Undefined subroutine &main::joe called at - line 3. @@ -37,16 +37,16 @@ Undefined subroutine &main::joe called at - line 3. # gv.c sub Other::AUTOLOAD { 1 } sub Other::fred {} @ISA = qw(Other) ; -use warning 'deprecated' ; +use warnings 'deprecated' ; fred() ; EXPECT Use of inherited AUTOLOAD for non-method main::fred() is deprecated at - line 5. ######## # gv.c -use warning 'deprecated' ; +use warnings 'deprecated' ; $a = ${"#"}; $a = ${"*"}; -no warning 'deprecated' ; +no warnings 'deprecated' ; $a = ${"#"}; $a = ${"*"}; EXPECT diff --git a/t/pragma/warn/mg b/t/pragma/warn/mg index 7f40ded7f8..a8f9dbc338 100644 --- a/t/pragma/warn/mg +++ b/t/pragma/warn/mg @@ -12,19 +12,19 @@ __END__ # mg.c -use warning 'signal' ; +use warnings 'signal' ; $SIG{FRED} = sub {}; EXPECT No such signal: SIGFRED at - line 3. ######## # mg.c -no warning 'signal' ; +no warnings 'signal' ; $SIG{FRED} = sub {}; EXPECT ######## # mg.c -use warning 'signal' ; +use warnings 'signal' ; if ($^O eq 'MSWin32' || $^O eq 'VMS') { print "SKIPPED\n# $^O, can't kill() to raise()\n"; exit; } @@ -34,7 +34,7 @@ EXPECT SIGINT handler "fred" not defined. ######## # mg.c -no warning 'signal' ; +no warnings 'signal' ; if ($^O eq 'MSWin32' || $^O eq 'VMS') { print "SKIPPED\n# win32, can't kill() to raise()\n"; exit; } diff --git a/t/pragma/warn/op b/t/pragma/warn/op index b5d2e71ebe..f6e5e14cad 100644 --- a/t/pragma/warn/op +++ b/t/pragma/warn/op @@ -59,7 +59,7 @@ local $a, $b = (1,2); Probable precedence problem on logical or at -e line 1. - use warning 'syntax'; my $x = print(ABC || 1); + use warnings 'syntax'; my $x = print(ABC || 1); Value of %s may be \"0\"; use \"defined\" $x = 1 if $x = <FH> ; @@ -112,16 +112,16 @@ __END__ # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my $x ; my $x ; -no warning 'unsafe' ; +no warnings 'unsafe' ; my $x ; EXPECT "my" variable $x masks earlier declaration in same scope at - line 4. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; sub x { my $x; sub y { @@ -132,7 +132,7 @@ EXPECT Variable "$x" will not stay shared at - line 7. ######## # op.c -no warning 'unsafe' ; +no warnings 'unsafe' ; sub x { my $x; sub y { @@ -143,7 +143,7 @@ EXPECT ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; sub x { my $x; sub y { @@ -154,7 +154,7 @@ EXPECT Variable "$x" may be unavailable at - line 6. ######## # op.c -no warning 'unsafe' ; +no warnings 'unsafe' ; sub x { my $x; sub y { @@ -165,31 +165,31 @@ EXPECT ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; 1 if $a = 1 ; -no warning 'syntax' ; +no warnings 'syntax' ; 1 if $a = 1 ; EXPECT Found = in conditional, should be == at - line 3. ######## # op.c -use warning 'deprecated' ; +use warnings 'deprecated' ; split ; -no warning 'deprecated' ; +no warnings 'deprecated' ; split ; EXPECT Use of implicit split to @_ is deprecated at - line 3. ######## # op.c -use warning 'deprecated' ; +use warnings 'deprecated' ; $a = split ; -no warning 'deprecated' ; +no warnings 'deprecated' ; $a = split ; EXPECT Use of implicit split to @_ is deprecated at - line 3. ######## # op.c -use warning 'void' ; close STDIN ; +use warnings 'void' ; close STDIN ; 1 x 3 ; # OP_REPEAT # OP_GVSV wantarray ; # OP_WANTARRAY @@ -281,7 +281,7 @@ Useless use of getpwnam in void context at - line 52. Useless use of getpwuid in void context at - line 53. ######## # op.c -no warning 'void' ; close STDIN ; +no warnings 'void' ; close STDIN ; 1 x 3 ; # OP_REPEAT # OP_GVSV wantarray ; # OP_WANTARRAY @@ -336,15 +336,15 @@ eval { getpwuid 1 }; # OP_GPWUID EXPECT ######## # op.c -use warning 'void' ; +use warnings 'void' ; for (@{[0]}) { "$_" } # check warning isn't duplicated -no warning 'void' ; +no warnings 'void' ; for (@{[0]}) { "$_" } # check warning isn't duplicated EXPECT Useless use of string in void context at - line 3. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_telldir}) { @@ -356,13 +356,13 @@ EOM } } telldir 1 ; # OP_TELLDIR -no warning 'void' ; +no warnings 'void' ; telldir 1 ; # OP_TELLDIR EXPECT Useless use of telldir in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_getppid}) { @@ -374,13 +374,13 @@ EOM } } getppid ; # OP_GETPPID -no warning 'void' ; +no warnings 'void' ; getppid ; # OP_GETPPID EXPECT Useless use of getppid in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_getpgrp}) { @@ -392,13 +392,13 @@ EOM } } getpgrp ; # OP_GETPGRP -no warning 'void' ; +no warnings 'void' ; getpgrp ; # OP_GETPGRP EXPECT Useless use of getpgrp in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_times}) { @@ -410,13 +410,13 @@ EOM } } times ; # OP_TMS -no warning 'void' ; +no warnings 'void' ; times ; # OP_TMS EXPECT Useless use of times in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22 @@ -428,13 +428,13 @@ EOM } } getpriority 1,2; # OP_GETPRIORITY -no warning 'void' ; +no warnings 'void' ; getpriority 1,2; # OP_GETPRIORITY EXPECT Useless use of getpriority in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_getlogin}) { @@ -446,13 +446,13 @@ EOM } } getlogin ; # OP_GETLOGIN -no warning 'void' ; +no warnings 'void' ; getlogin ; # OP_GETLOGIN EXPECT Useless use of getlogin in void context at - line 13. ######## # op.c -use warning 'void' ; +use warnings 'void' ; use Config ; BEGIN { if ( ! $Config{d_socket}) { print <<EOM ; @@ -489,7 +489,7 @@ getservbyname 1,2; # OP_GSBYNAME getservbyport 1,2; # OP_GSBYPORT getservent ; # OP_GSERVENT -no warning 'void' ; +no warnings 'void' ; getsockname STDIN ; # OP_GETSOCKNAME getpeername STDIN ; # OP_GETPEERNAME gethostbyname 1 ; # OP_GHBYNAME @@ -525,12 +525,12 @@ Useless use of getservbyport in void context at - line 36. Useless use of getservent in void context at - line 37. ######## # op.c -use warning 'void' ; +use warnings 'void' ; *a ; # OP_RV2GV $a ; # OP_RV2SV @a ; # OP_RV2AV %a ; # OP_RV2HV -no warning 'void' ; +no warnings 'void' ; *a ; # OP_RV2GV $a ; # OP_RV2SV @a ; # OP_RV2AV @@ -542,10 +542,10 @@ Useless use of a variable in void context at - line 5. Useless use of a variable in void context at - line 6. ######## # op.c -use warning 'void' ; +use warnings 'void' ; "abc"; # OP_CONST 7 ; # OP_CONST -no warning 'void' ; +no warnings 'void' ; "abc"; # OP_CONST 7 ; # OP_CONST EXPECT @@ -554,7 +554,7 @@ Useless use of a constant in void context at - line 4. ######## # op.c $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; # known scalar leak -use warning 'unsafe' ; +use warnings 'unsafe' ; my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; @a =~ /abc/ ; @a =~ s/a/b/ ; @@ -569,7 +569,7 @@ my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; %$c =~ s/a/b/ ; %$c =~ tr/a/b/ ; { -no warning 'unsafe' ; +no warnings 'unsafe' ; my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; @a =~ /abc/ ; @a =~ s/a/b/ ; @@ -601,25 +601,25 @@ Applying character translation to %hash will act on scalar(%hash) at - line 16. BEGIN not safe after errors--compilation aborted at - line 18. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; my $a, $b = (1,2); -no warning 'syntax' ; +no warnings 'syntax' ; my $c, $d = (1,2); EXPECT Parentheses missing around "my" list at - line 3. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; local $a, $b = (1,2); -no warning 'syntax' ; +no warnings 'syntax' ; local $c, $d = (1,2); EXPECT Parentheses missing around "local" list at - line 3. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; print (ABC || 1) ; -no warning 'syntax' ; +no warnings 'syntax' ; print (ABC || 1) ; EXPECT Probable precedence problem on logical or at - line 3. @@ -628,107 +628,107 @@ Probable precedence problem on logical or at - line 3. --FILE-- # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; open FH, "<abc" ; $x = 1 if $x = <FH> ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 if $x = <FH> ; EXPECT Value of <HANDLE> construct can be "0"; test with defined() at - line 4. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; opendir FH, "." ; $x = 1 if $x = readdir FH ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 if $x = readdir FH ; closedir FH ; EXPECT Value of readdir() operator can be "0"; test with defined() at - line 4. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $x = 1 if $x = <*> ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 if $x = <*> ; EXPECT Value of glob construct can be "0"; test with defined() at - line 3. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; %a = (1,2,3,4) ; $x = 1 if $x = each %a ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 if $x = each %a ; EXPECT Value of each() operator can be "0"; test with defined() at - line 4. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $x = 1 while $x = <*> and 0 ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 while $x = <*> and 0 ; EXPECT Value of glob construct can be "0"; test with defined() at - line 3. ######## # op.c -use warning 'unsafe' ; +use warnings 'unsafe' ; opendir FH, "." ; $x = 1 while $x = readdir FH and 0 ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $x = 1 while $x = readdir FH and 0 ; closedir FH ; EXPECT Value of readdir() operator can be "0"; test with defined() at - line 4. ######## # op.c -use warning 'redefine' ; +use warnings 'redefine' ; sub fred {} sub fred {} -no warning 'redefine' ; +no warnings 'redefine' ; sub fred {} EXPECT Subroutine fred redefined at - line 4. ######## # op.c -use warning 'redefine' ; +use warnings 'redefine' ; sub fred () { 1 } sub fred () { 1 } -no warning 'redefine' ; +no warnings 'redefine' ; sub fred () { 1 } EXPECT Constant subroutine fred redefined at - line 4. ######## # op.c -use warning 'redefine' ; +use warnings 'redefine' ; format FRED = . format FRED = . -no warning 'redefine' ; +no warnings 'redefine' ; format FRED = . EXPECT Format FRED redefined at - line 5. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; push FRED; -no warning 'syntax' ; +no warnings 'syntax' ; push FRED; EXPECT Array @FRED missing the @ in argument 1 of push() at - line 3. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; @a = keys FRED ; -no warning 'syntax' ; +no warnings 'syntax' ; @a = keys FRED ; EXPECT Hash %FRED missing the % in argument 1 of keys() at - line 3. ######## # op.c -use warning 'syntax' ; +use warnings 'syntax' ; exec "$^X -e 1" ; my $a EXPECT @@ -736,28 +736,28 @@ Statement unlikely to be reached at - line 4. (Maybe you meant system() when you said exec()?) ######## # op.c -use warning 'deprecated' ; +use warnings 'deprecated' ; my @a; defined(@a); EXPECT defined(@array) is deprecated at - line 3. (Maybe you should just omit the defined()?) ######## # op.c -use warning 'deprecated' ; +use warnings 'deprecated' ; defined(@a = (1,2,3)); EXPECT defined(@array) is deprecated at - line 3. (Maybe you should just omit the defined()?) ######## # op.c -use warning 'deprecated' ; +use warnings 'deprecated' ; my %h; defined(%h); EXPECT defined(%hash) is deprecated at - line 3. (Maybe you should just omit the defined()?) ######## # op.c -no warning 'syntax' ; +no warnings 'syntax' ; exec "$^X -e 1" ; my $a EXPECT @@ -774,10 +774,10 @@ $^W = 0 ; sub fred() ; sub fred($) {} { - no warning 'unsafe' ; + no warnings 'unsafe' ; sub Fred() ; sub Fred($) {} - use warning 'unsafe' ; + use warnings 'unsafe' ; sub freD() ; sub freD($) {} } diff --git a/t/pragma/warn/perl b/t/pragma/warn/perl index 25f125e03d..45807499d6 100644 --- a/t/pragma/warn/perl +++ b/t/pragma/warn/perl @@ -16,9 +16,9 @@ __END__ # perl.c -no warning 'once' ; +no warnings 'once' ; $x = 3 ; -use warning 'once' ; +use warnings 'once' ; $z = 3 ; EXPECT Name "main::z" used only once: possible typo at - line 5. @@ -26,7 +26,7 @@ Name "main::z" used only once: possible typo at - line 5. -w # perl.c $x = 3 ; -no warning 'once' ; +no warnings 'once' ; $z = 3 EXPECT Name "main::x" used only once: possible typo at - line 3. @@ -34,16 +34,16 @@ Name "main::x" used only once: possible typo at - line 3. # perl.c BEGIN { $^W =1 ; } $x = 3 ; -no warning 'once' ; +no warnings 'once' ; $z = 3 EXPECT Name "main::x" used only once: possible typo at - line 3. ######## -W # perl.c -no warning 'once' ; +no warnings 'once' ; $x = 3 ; -use warning 'once' ; +use warnings 'once' ; $z = 3 ; EXPECT Name "main::x" used only once: possible typo at - line 4. @@ -51,7 +51,7 @@ Name "main::z" used only once: possible typo at - line 6. ######## -X # perl.c -use warning 'once' ; +use warnings 'once' ; $x = 3 ; EXPECT diff --git a/t/pragma/warn/perly b/t/pragma/warn/perly index bddc39c716..afc5dccc72 100644 --- a/t/pragma/warn/perly +++ b/t/pragma/warn/perly @@ -11,14 +11,14 @@ __END__ # perly.y -use warning 'deprecated' ; +use warnings 'deprecated' ; sub fred {} do fred() ; do fred(1) ; $a = "fred" ; do $a() ; do $a(1) ; -no warning 'deprecated' ; +no warnings 'deprecated' ; do fred() ; do fred(1) ; $a = "fred" ; diff --git a/t/pragma/warn/pp b/t/pragma/warn/pp index 9baf9c14b0..48b5ec86b5 100644 --- a/t/pragma/warn/pp +++ b/t/pragma/warn/pp @@ -34,44 +34,44 @@ __END__ # pp.c -use warning 'substr' ; +use warnings 'substr' ; $a = "ab" ; $a = substr($a, 4,5); -no warning 'substr' ; +no warnings 'substr' ; $a = "ab" ; $a = substr($a, 4,5); EXPECT substr outside of string at - line 4. ######## # pp.c -use warning 'substr' ; +use warnings 'substr' ; $a = "ab" ; $b = \$a ; substr($b, 1,1) = "ab" ; -no warning 'substr' ; +no warnings 'substr' ; substr($b, 1,1) = "ab" ; EXPECT Attempt to use reference as lvalue in substr at - line 5. ######## # pp.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; # TODO EXPECT ######## # pp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my $a = { 1,2,3}; -no warning 'unsafe' ; +no warnings 'unsafe' ; my $b = { 1,2,3}; EXPECT Odd number of elements in hash assignment at - line 3. ######## # pp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my @a = unpack ("A,A", "22") ; my $a = pack ("A,A", 1,2) ; -no warning 'unsafe' ; +no warnings 'unsafe' ; my @b = unpack ("A,A", "22") ; my $b = pack ("A,A", 1,2) ; EXPECT @@ -79,27 +79,27 @@ Invalid type in unpack: ',' at - line 3. Invalid type in pack: ',' at - line 4. ######## # pp.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $a = undef ; my $b = $$a; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my $c = $$a; EXPECT Use of uninitialized value at - line 4. ######## # pp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; sub foo { my $a = "a"; return $a . $a++ . $a++ } my $a = pack("p", &foo) ; -no warning 'unsafe' ; +no warnings 'unsafe' ; my $b = pack("p", &foo) ; EXPECT Attempt to pack pointer to temporary value at - line 4. ######## # pp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; bless \[], "" ; -no warning 'unsafe' ; +no warnings 'unsafe' ; bless \[], "" ; EXPECT Explicit blessing to '' (assuming package main) at - line 3. @@ -112,11 +112,11 @@ EXPECT Malformed UTF-8 character at - line 4. ######## # pp.c -use warning 'utf8' ; +use warnings 'utf8' ; use utf8 ; $_ = "\x80 \xff" ; reverse ; -no warning 'utf8' ; +no warnings 'utf8' ; $_ = "\x80 \xff" ; reverse ; EXPECT diff --git a/t/pragma/warn/pp_ctl b/t/pragma/warn/pp_ctl index 4d6d8ca2af..5e0dd2766c 100644 --- a/t/pragma/warn/pp_ctl +++ b/t/pragma/warn/pp_ctl @@ -60,7 +60,7 @@ __END__ # pp_ctl.c -use warning 'syntax' ; +use warnings 'syntax' ; format STDOUT = @<<< @<<< 1 @@ -71,7 +71,7 @@ Not enough format arguments at - line 5. 1 ######## # pp_ctl.c -no warning 'syntax' ; +no warnings 'syntax' ; format = @<<< @<<< 1 @@ -81,14 +81,14 @@ EXPECT 1 ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $_ = "abc" ; while ($i ++ == 0) { s/ab/last/e ; } -no warning 'unsafe' ; +no warnings 'unsafe' ; while ($i ++ == 0) { s/ab/last/e ; @@ -97,10 +97,10 @@ EXPECT Exiting substitution via last at - line 7. ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; sub fred { last } { fred() } -no warning 'unsafe' ; +no warnings 'unsafe' ; sub joe { last } { joe() } EXPECT @@ -108,35 +108,35 @@ Exiting subroutine via last at - line 3. ######## # pp_ctl.c { - eval "use warning 'unsafe' ; last;" + eval "use warnings 'unsafe' ; last;" } print STDERR $@ ; { - eval "no warning 'unsafe' ;last;" + eval "no warnings 'unsafe' ;last;" } print STDERR $@ ; EXPECT Exiting eval via last at (eval 1) line 1. ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; @a = (1,2) ; @b = sort { last } @a ; -no warning 'unsafe' ; +no warnings 'unsafe' ; @b = sort { last } @a ; EXPECT Exiting pseudo-block via last at - line 4. Can't "last" outside a block at - line 4. ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $_ = "abc" ; fred: while ($i ++ == 0) { s/ab/last fred/e ; } -no warning 'unsafe' ; +no warnings 'unsafe' ; while ($i ++ == 0) { s/ab/last fred/e ; @@ -145,10 +145,10 @@ EXPECT Exiting substitution via last at - line 7. ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; sub fred { last joe } joe: { fred() } -no warning 'unsafe' ; +no warnings 'unsafe' ; sub Fred { last Joe } Joe: { Fred() } EXPECT @@ -156,26 +156,26 @@ Exiting subroutine via last at - line 3. ######## # pp_ctl.c joe: -{ eval "use warning 'unsafe' ; last joe;" } +{ eval "use warnings 'unsafe' ; last joe;" } print STDERR $@ ; Joe: -{ eval "no warning 'unsafe' ; last Joe;" } +{ eval "no warnings 'unsafe' ; last Joe;" } print STDERR $@ ; EXPECT Exiting eval via last at (eval 1) line 1. ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; @a = (1,2) ; fred: @b = sort { last fred } @a ; -no warning 'unsafe' ; +no warnings 'unsafe' ; Fred: @b = sort { last Fred } @a ; EXPECT Exiting pseudo-block via last at - line 4. Label not found for "last fred" at - line 4. ######## # pp_ctl.c -use warning 'recursion' ; +use warnings 'recursion' ; BEGIN { warn "PREFIX\n" ;} sub fred { @@ -187,7 +187,7 @@ EXPECT Deep recursion on subroutine "main::fred" at - line 6. ######## # pp_ctl.c -no warning 'recursion' ; +no warnings 'recursion' ; BEGIN { warn "PREFIX\n" ;} sub fred { @@ -199,7 +199,7 @@ EXPECT Can't find label ######## # pp_ctl.c -use warning 'unsafe' ; +use warnings 'unsafe' ; package Foo; DESTROY { die "@{$_[0]} foo bar" } { bless ['A'], 'Foo' for 1..10 } @@ -209,7 +209,7 @@ EXPECT (in cleanup) B foo bar at - line 4. ######## # pp_ctl.c -no warning 'unsafe' ; +no warnings 'unsafe' ; package Foo; DESTROY { die "@{$_[0]} foo bar" } { bless ['A'], 'Foo' for 1..10 } diff --git a/t/pragma/warn/pp_hot b/t/pragma/warn/pp_hot index 208bf26b15..2a52dfb2df 100644 --- a/t/pragma/warn/pp_hot +++ b/t/pragma/warn/pp_hot @@ -35,16 +35,16 @@ __END__ # pp_hot.c -use warning 'unopened' ; +use warnings 'unopened' ; $f = $a = "abc" ; print $f $a; -no warning 'unopened' ; +no warnings 'unopened' ; print $f $a; EXPECT Filehandle main::abc never opened at - line 4. ######## # pp_hot.c -use warning 'io' ; +use warnings 'io' ; print STDIN "anc"; print <STDOUT>; print <STDERR>; @@ -52,7 +52,7 @@ open(FOO, ">&STDOUT") and print <FOO>; print getc(STDERR); print getc(FOO); read(FOO,$_,1); -no warning 'io' ; +no warnings 'io' ; print STDIN "anc"; #################################################################### # N O T E # @@ -70,58 +70,58 @@ Filehandle main::FOO opened only for output at - line 8. Filehandle main::FOO opened only for output at - line 9. ######## # pp_hot.c -use warning 'closed' ; +use warnings 'closed' ; close STDIN ; print STDIN "anc"; -no warning 'closed' ; +no warnings 'closed' ; print STDIN "anc"; EXPECT print on closed filehandle main::STDIN at - line 4. ######## # pp_hot.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $a = undef ; my @b = @$a; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my @c = @$a; EXPECT Use of uninitialized value at - line 4. ######## # pp_hot.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $a = undef ; my %b = %$a; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my %c = %$a; EXPECT Use of uninitialized value at - line 4. ######## # pp_hot.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my %X ; %X = (1,2,3) ; -no warning 'unsafe' ; +no warnings 'unsafe' ; my %Y ; %Y = (1,2,3) ; EXPECT Odd number of elements in hash assignment at - line 3. ######## # pp_hot.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my %X ; %X = [1 .. 3] ; -no warning 'unsafe' ; +no warnings 'unsafe' ; my %Y ; %Y = [1 .. 3] ; EXPECT Reference found where even-sized list expected at - line 3. ######## # pp_hot.c -use warning 'closed' ; +use warnings 'closed' ; close STDIN ; $a = <STDIN> ; -no warning 'closed' ; +no warnings 'closed' ; $a = <STDIN> ; EXPECT Read on closed filehandle main::STDIN at - line 3. ######## # pp_hot.c -use warning 'recursion' ; +use warnings 'recursion' ; sub fred { fred() if $a++ < 200 @@ -136,7 +136,7 @@ EXPECT ok ######## # pp_hot.c -no warning 'recursion' ; +no warnings 'recursion' ; sub fred { fred() if $a++ < 200 @@ -151,7 +151,7 @@ EXPECT ######## # pp_hot.c -use warning 'recursion' ; +use warnings 'recursion' ; $b = sub { &$b if $a++ < 200 @@ -162,7 +162,7 @@ EXPECT Deep recursion on anonymous subroutine at - line 5. ######## # pp_hot.c -no warning 'recursion' ; +no warnings 'recursion' ; $b = sub { &$b if $a++ < 200 diff --git a/t/pragma/warn/pp_sys b/t/pragma/warn/pp_sys index bf64a940e1..d0caf96f34 100644 --- a/t/pragma/warn/pp_sys +++ b/t/pragma/warn/pp_sys @@ -78,39 +78,39 @@ __END__ # pp_sys.c -use warning 'untie' ; +use warnings 'untie' ; sub TIESCALAR { bless [] } ; $b = tie $a, 'main'; untie $a ; -no warning 'untie' ; +no warnings 'untie' ; $c = tie $d, 'main'; untie $d ; EXPECT untie attempted while 1 inner references still exist at - line 5. ######## # pp_sys.c -use warning 'io' ; +use warnings 'io' ; format STDIN = . write STDIN; -no warning 'io' ; +no warnings 'io' ; write STDIN; EXPECT Filehandle main::STDIN opened only for input at - line 5. ######## # pp_sys.c -use warning 'closed' ; +use warnings 'closed' ; format STDIN = . close STDIN; write STDIN; -no warning 'closed' ; +no warnings 'closed' ; write STDIN; EXPECT Write on closed filehandle main::STDIN at - line 6. ######## # pp_sys.c -use warning 'io' ; +use warnings 'io' ; format STDOUT_TOP = abc . @@ -122,48 +122,48 @@ $= = 1 ; $- =1 ; open STDOUT, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ; write ; -no warning 'io' ; +no warnings 'io' ; write ; EXPECT page overflow at - line 13. ######## # pp_sys.c -use warning 'unopened' ; +use warnings 'unopened' ; $a = "abc"; printf $a "fred"; -no warning 'unopened' ; +no warnings 'unopened' ; printf $a "fred"; EXPECT Filehandle main::abc never opened at - line 4. ######## # pp_sys.c -use warning 'closed' ; +use warnings 'closed' ; close STDIN ; printf STDIN "fred"; -no warning 'closed' ; +no warnings 'closed' ; printf STDIN "fred"; EXPECT printf on closed filehandle main::STDIN at - line 4. ######## # pp_sys.c -use warning 'io' ; +use warnings 'io' ; printf STDIN "fred"; -no warning 'io' ; +no warnings 'io' ; printf STDIN "fred"; EXPECT Filehandle main::STDIN opened only for input at - line 3. ######## # pp_sys.c -use warning 'closed' ; +use warnings 'closed' ; close STDIN; syswrite STDIN, "fred", 1; -no warning 'closed' ; +no warnings 'closed' ; syswrite STDIN, "fred", 1; EXPECT Syswrite on closed filehandle at - line 4. ######## # pp_sys.c -use warning 'io' ; +use warnings 'io' ; use Config; BEGIN { if ( $^O ne 'VMS' and ! $Config{d_socket}) { @@ -193,7 +193,7 @@ setsockopt STDIN, 1,2,3; getsockopt STDIN, 1,2; getsockname STDIN; getpeername STDIN; -no warning 'io' ; +no warnings 'io' ; send STDIN, "fred", 1; bind STDIN, "fred" ; connect STDIN, "fred" ; @@ -217,26 +217,26 @@ get{sock, peer}name() on closed fd at - line 30. get{sock, peer}name() on closed fd at - line 31. ######## # pp_sys.c -use warning 'newline' ; +use warnings 'newline' ; stat "abc\ndef"; -no warning 'newline' ; +no warnings 'newline' ; stat "abc\ndef"; EXPECT Unsuccessful stat on filename containing newline at - line 3. ######## # pp_sys.c -use warning 'unopened' ; +use warnings 'unopened' ; close STDIN ; -T STDIN ; -no warning 'unopened' ; +no warnings 'unopened' ; -T STDIN ; EXPECT Test on unopened file <STDIN> at - line 4. ######## # pp_sys.c -use warning 'newline' ; +use warnings 'newline' ; -T "abc\ndef" ; -no warning 'newline' ; +no warnings 'newline' ; -T "abc\ndef" ; EXPECT Unsuccessful open on filename containing newline at - line 3. diff --git a/t/pragma/warn/regcomp b/t/pragma/warn/regcomp index 6545778a38..6aa9fa629e 100644 --- a/t/pragma/warn/regcomp +++ b/t/pragma/warn/regcomp @@ -13,25 +13,25 @@ __END__ # regcomp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; my $a = "ABC123" ; $a =~ /(?=a)*/ ; -no warning 'unsafe' ; +no warnings 'unsafe' ; $a =~ /(?=a)*/ ; EXPECT (?=a)* matches null string many times at - line 4. ######## # regcomp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $_ = "" ; /(?=a)?/; -no warning 'unsafe' ; +no warnings 'unsafe' ; /(?=a)?/; EXPECT Strange *+?{} on zero-length expression at - line 4. ######## # regcomp.c -use warning 'unsafe' ; +use warnings 'unsafe' ; $_ = "" ; /[:alpha:]/; /[.bar.]/; @@ -40,7 +40,7 @@ $_ = "" ; /[[.foo.]]/; /[[=bar=]]/; /[:zog:]/; -no warning 'unsafe' ; +no warnings 'unsafe' ; /[:alpha:]/; /[.foo.]/; /[=bar=]/; diff --git a/t/pragma/warn/regexec b/t/pragma/warn/regexec index ce4eac7083..b9ba790832 100644 --- a/t/pragma/warn/regexec +++ b/t/pragma/warn/regexec @@ -16,7 +16,7 @@ __END__ # regexec.c print("SKIPPED\n# most systems run into stacksize limits\n"),exit; -use warning 'unsafe' ; +use warnings 'unsafe' ; $SIG{__WARN__} = sub{local ($m) = shift; $m =~ s/\(\d+\)/(*MASKED*)/; print STDERR $m}; @@ -42,7 +42,7 @@ Complex regular subexpression recursion limit (*MASKED*) exceeded at - line 9. ######## # regexec.c print("SKIPPED\n# most systems run into stacksize limits\n"),exit; -no warning 'unsafe' ; +no warnings 'unsafe' ; $SIG{__WARN__} = sub{local ($m) = shift; $m =~ s/\(\d+\)/(*MASKED*)/; print STDERR $m}; @@ -68,7 +68,7 @@ EXPECT ######## # regexec.c print("SKIPPED\n# most systems run into stacksize limits\n"),exit; -use warning 'unsafe' ; +use warnings 'unsafe' ; $SIG{__WARN__} = sub{local ($m) = shift; $m =~ s/\(\d+\)/(*MASKED*)/; print STDERR $m}; @@ -94,7 +94,7 @@ Complex regular subexpression recursion limit (*MASKED*) exceeded at - line 9. ######## # regexec.c print("SKIPPED\n# most systems run into stacksize limits\n"),exit; -no warning 'unsafe' ; +no warnings 'unsafe' ; $SIG{__WARN__} = sub{local ($m) = shift; $m =~ s/\(\d+\)/(*MASKED*)/; print STDERR $m}; diff --git a/t/pragma/warn/sv b/t/pragma/warn/sv index b6c91c9fe9..a90e9d351d 100644 --- a/t/pragma/warn/sv +++ b/t/pragma/warn/sv @@ -49,9 +49,9 @@ __END__ # sv.c use integer ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $x = 1 + $a[0] ; # a -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $x = 1 + $b[0] ; # a EXPECT Use of uninitialized value at - line 4. @@ -64,18 +64,18 @@ sub STORE { return 1 } package main ; tie $A, 'fred' ; use integer ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $A *= 2 ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $A *= 2 ; EXPECT Use of uninitialized value at - line 10. ######## # sv.c use integer ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $x *= 2 ; #b -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my $y *= 2 ; #b EXPECT Use of uninitialized value at - line 4. @@ -87,37 +87,37 @@ sub FETCH { return undef } sub STORE { return 1 } package main ; tie $A, 'fred' ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $B = 0 ; $B |= $A ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $B = 0 ; $B |= $A ; EXPECT Use of uninitialized value at - line 10. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $Y = 1 ; my $x = 1 | $a[$Y] ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my $Y = 1 ; $x = 1 | $b[$Y] ; EXPECT Use of uninitialized value at - line 4. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; my $x *= 1 ; # d -no warning 'uninitialized' ; +no warnings 'uninitialized' ; my $y *= 1 ; # d EXPECT Use of uninitialized value at - line 3. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $x = 1 + $a[0] ; # e -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $x = 1 + $b[0] ; # e EXPECT Use of uninitialized value at - line 3. @@ -129,33 +129,33 @@ sub FETCH { return undef } sub STORE { return 1 } package main ; tie $A, 'fred' ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $A *= 2 ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $A *= 2 ; EXPECT Use of uninitialized value at - line 9. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $x = $y + 1 ; # f -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $x = $z + 1 ; # f EXPECT Use of uninitialized value at - line 3. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $x = chop undef ; # g -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $x = chop undef ; # g EXPECT Modification of a read-only value attempted at - line 3. ######## # sv.c -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $x = chop $y ; # h -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $x = chop $z ; # h EXPECT Use of uninitialized value at - line 3. @@ -167,73 +167,73 @@ sub FETCH { return undef } sub STORE { return 1 } package main ; tie $A, 'fred' ; -use warning 'uninitialized' ; +use warnings 'uninitialized' ; $B = "" ; $B .= $A ; -no warning 'uninitialized' ; +no warnings 'uninitialized' ; $C = "" ; $C .= $A ; EXPECT Use of uninitialized value at - line 10. ######## # sv.c -use warning 'numeric' ; +use warnings 'numeric' ; sub TIESCALAR{bless[]} ; sub FETCH {"def"} ; tie $a,"main" ; my $b = 1 + $a; -no warning 'numeric' ; +no warnings 'numeric' ; my $c = 1 + $a; EXPECT Argument "def" isn't numeric in add at - line 6. ######## # sv.c -use warning 'numeric' ; +use warnings 'numeric' ; my $x = 1 + "def" ; -no warning 'numeric' ; +no warnings 'numeric' ; my $z = 1 + "def" ; EXPECT Argument "def" isn't numeric in add at - line 3. ######## # sv.c -use warning 'numeric' ; +use warnings 'numeric' ; my $a = "def" ; my $x = 1 + $a ; -no warning 'numeric' ; +no warnings 'numeric' ; my $y = 1 + $a ; EXPECT Argument "def" isn't numeric in add at - line 4. ######## # sv.c -use warning 'numeric' ; use integer ; +use warnings 'numeric' ; use integer ; my $a = "def" ; my $x = 1 + $a ; -no warning 'numeric' ; +no warnings 'numeric' ; my $z = 1 + $a ; EXPECT Argument "def" isn't numeric in i_add at - line 4. ######## # sv.c -use warning 'numeric' ; +use warnings 'numeric' ; my $x = 1 & "def" ; -no warning 'numeric' ; +no warnings 'numeric' ; my $z = 1 & "def" ; EXPECT Argument "def" isn't numeric in bit_and at - line 3. ######## # sv.c -use warning 'redefine' ; +use warnings 'redefine' ; sub fred {} sub joe {} *fred = \&joe ; -no warning 'redefine' ; +no warnings 'redefine' ; sub jim {} *jim = \&joe ; EXPECT Subroutine fred redefined at - line 5. ######## # sv.c -use warning 'printf' ; +use warnings 'printf' ; open F, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ; printf F "%z\n" ; my $a = sprintf "%z" ; @@ -241,7 +241,7 @@ printf F "%" ; $a = sprintf "%" ; printf F "%\x02" ; $a = sprintf "%\x02" ; -no warning 'printf' ; +no warnings 'printf' ; printf F "%z\n" ; $a = sprintf "%z" ; printf F "%" ; @@ -257,9 +257,9 @@ Invalid conversion in printf: end of string at - line 6. Invalid conversion in printf: "%\002" at - line 8. ######## # sv.c -use warning 'unsafe' ; +use warnings 'unsafe' ; *a = undef ; -no warning 'unsafe' ; +no warnings 'unsafe' ; *b = undef ; EXPECT Undefined value assigned to typeglob at - line 3. @@ -268,9 +268,9 @@ Undefined value assigned to typeglob at - line 3. use utf8 ; $^W =0 ; { - use warning 'utf8' ; + use warnings 'utf8' ; my $a = rindex "a\xff bc ", "bc" ; - no warning 'utf8' ; + no warnings 'utf8' ; $a = rindex "a\xff bc ", "bc" ; } my $a = rindex "a\xff bc ", "bc" ; diff --git a/t/pragma/warn/taint b/t/pragma/warn/taint index 17ab0423c6..fd6deed60f 100644 --- a/t/pragma/warn/taint +++ b/t/pragma/warn/taint @@ -37,10 +37,10 @@ def open(FH, "<abc") ; $a = <FH> ; close FH ; -use warning 'taint' ; +use warnings 'taint' ; chdir $a ; print "xxx\n" ; -no warning 'taint' ; +no warnings 'taint' ; chdir $a ; print "yyy\n" ; EXPECT diff --git a/t/pragma/warn/toke b/t/pragma/warn/toke index 72c1e2fddc..661d3d40b2 100644 --- a/t/pragma/warn/toke +++ b/t/pragma/warn/toke @@ -14,7 +14,7 @@ toke.c AOK (called 3 times via depcom) \1 better written as $1 - use warning 'syntax' ; + use warnings 'syntax' ; s/(abc)/\1/; warn(warn_nosemi) @@ -114,14 +114,14 @@ toke.c AOK __END__ # toke.c -use warning 'deprecated' ; +use warnings 'deprecated' ; 1 if $a EQ $b ; 1 if $a NE $b ; 1 if $a GT $b ; 1 if $a LT $b ; 1 if $a GE $b ; 1 if $a LE $b ; -no warning 'deprecated' ; +no warnings 'deprecated' ; 1 if $a EQ $b ; 1 if $a NE $b ; 1 if $a GT $b ; @@ -137,12 +137,12 @@ Use of GE is deprecated at - line 7. Use of LE is deprecated at - line 8. ######## # toke.c -use warning 'deprecated' ; +use warnings 'deprecated' ; format STDOUT = @<<< @||| @>>> @>>> $a $b "abc" 'def' . -no warning 'deprecated' ; +no warnings 'deprecated' ; format STDOUT = @<<< @||| @>>> @>>> $a $b "abc" 'def' @@ -153,28 +153,28 @@ Use of comma-less variable list is deprecated at - line 5. Use of comma-less variable list is deprecated at - line 5. ######## # toke.c -use warning 'deprecated' ; +use warnings 'deprecated' ; $a = <<; -no warning 'deprecated' ; +no warnings 'deprecated' ; $a = <<; EXPECT Use of bare << to mean <<"" is deprecated at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; s/(abc)/\1/; -no warning 'syntax' ; +no warnings 'syntax' ; s/(abc)/\1/; EXPECT \1 better written as $1 at - line 3. ######## # toke.c -use warning 'semicolon' ; +use warnings 'semicolon' ; $a = 1 &time ; -no warning 'semicolon' ; +no warnings 'semicolon' ; $a = 1 &time ; EXPECT @@ -185,7 +185,7 @@ BEGIN { # Scalars leaked: due to syntax errors $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; } -use warning 'syntax' ; +use warnings 'syntax' ; my $a =+ 2 ; $a =- 2 ; $a =* 2 ; @@ -216,7 +216,7 @@ BEGIN { # Scalars leaked: due to syntax errors $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; } -no warning 'syntax' ; +no warnings 'syntax' ; my $a =+ 2 ; $a =- 2 ; $a =* 2 ; @@ -234,26 +234,26 @@ syntax error at - line 14, near "=|" Unterminated <> operator at - line 15. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; my $a = $a[1,2] ; -no warning 'syntax' ; +no warnings 'syntax' ; my $a = $a[1,2] ; EXPECT Multidimensional syntax $a[1,2] not supported at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; sub fred {} ; $SIG{TERM} = fred; -no warning 'syntax' ; +no warnings 'syntax' ; $SIG{TERM} = fred; EXPECT You need to quote "fred" at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; @a[3] = 2; @a{3} = 2; -no warning 'syntax' ; +no warnings 'syntax' ; @a[3] = 2; @a{3} = 2; EXPECT @@ -261,133 +261,133 @@ Scalar value @a[3] better written as $a[3] at - line 3. Scalar value @a{3} better written as $a{3} at - line 4. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; $_ = "ab" ; s/(ab)/\1/e; -no warning 'syntax' ; +no warnings 'syntax' ; $_ = "ab" ; s/(ab)/\1/e; EXPECT Can't use \1 to mean $1 in expression at - line 4. ######## # toke.c -use warning 'reserved' ; +use warnings 'reserved' ; $a = abc; -no warning 'reserved' ; +no warnings 'reserved' ; $a = abc; EXPECT Unquoted string "abc" may clash with future reserved word at - line 3. ######## # toke.c -use warning 'octal' ; +use warnings 'octal' ; chmod 3; -no warning 'octal' ; +no warnings 'octal' ; chmod 3; EXPECT -chmod: mode argument is missing initial 0 at - line 3, at end of line +chmod: mode argument is missing initial 0 at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; @a = qw(a, b, c) ; -no warning 'syntax' ; +no warnings 'syntax' ; @a = qw(a, b, c) ; EXPECT Possible attempt to separate words with commas at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; @a = qw(a b #) ; -no warning 'syntax' ; +no warnings 'syntax' ; @a = qw(a b #) ; EXPECT Possible attempt to put comments in qw() list at - line 3. ######## # toke.c -use warning 'octal' ; +use warnings 'octal' ; umask 3; -no warning 'octal' ; +no warnings 'octal' ; umask 3; EXPECT -umask: argument is missing initial 0 at - line 3, at end of line +umask: argument is missing initial 0 at - line 3. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; print ("") EXPECT print (...) interpreted as function at - line 3. ######## # toke.c -no warning 'syntax' ; +no warnings 'syntax' ; print ("") EXPECT ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; printf ("") EXPECT printf (...) interpreted as function at - line 3. ######## # toke.c -no warning 'syntax' ; +no warnings 'syntax' ; printf ("") EXPECT ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; sort ("") EXPECT sort (...) interpreted as function at - line 3. ######## # toke.c -no warning 'syntax' ; +no warnings 'syntax' ; sort ("") EXPECT ######## # toke.c -use warning 'ambiguous' ; +use warnings 'ambiguous' ; $a = ${time[2]}; -no warning 'ambiguous' ; +no warnings 'ambiguous' ; $a = ${time[2]}; EXPECT Ambiguous use of ${time[...]} resolved to $time[...] at - line 3. ######## # toke.c -use warning 'ambiguous' ; +use warnings 'ambiguous' ; $a = ${time{2}}; EXPECT Ambiguous use of ${time{...}} resolved to $time{...} at - line 3. ######## # toke.c -no warning 'ambiguous' ; +no warnings 'ambiguous' ; $a = ${time{2}}; EXPECT ######## # toke.c -use warning 'ambiguous' ; +use warnings 'ambiguous' ; $a = ${time} ; -no warning 'ambiguous' ; +no warnings 'ambiguous' ; $a = ${time} ; EXPECT Ambiguous use of ${time} resolved to $time at - line 3. ######## # toke.c -use warning 'ambiguous' ; +use warnings 'ambiguous' ; sub fred {} $a = ${fred} ; -no warning 'ambiguous' ; +no warnings 'ambiguous' ; $a = ${fred} ; EXPECT Ambiguous use of ${fred} resolved to $fred at - line 4. ######## # toke.c -use warning 'syntax' ; +use warnings 'syntax' ; $a = 1_2; $a = 1_2345_6; -no warning 'syntax' ; +no warnings 'syntax' ; $a = 1_2; $a = 1_2345_6; EXPECT @@ -396,26 +396,26 @@ Misplaced _ in number at - line 4. Misplaced _ in number at - line 4. ######## # toke.c -use warning 'unsafe' ; +use warnings 'unsafe' ; #line 25 "bar" $a = FRED:: ; -no warning 'unsafe' ; +no warnings 'unsafe' ; #line 25 "bar" $a = FRED:: ; EXPECT Bareword "FRED::" refers to nonexistent package at bar line 25. ######## # toke.c -use warning 'ambiguous' ; +use warnings 'ambiguous' ; sub time {} my $a = time() ; -no warning 'ambiguous' ; +no warnings 'ambiguous' ; my $b = time() ; EXPECT Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4. ######## # toke.c -use warning 'utf8' ; +use warnings 'utf8' ; eval <<'EOE'; { #line 30 "foo" @@ -426,7 +426,7 @@ EXPECT Use of \x{} without utf8 declaration at foo line 30. ######## # toke.c -no warning 'utf8' ; +no warnings 'utf8' ; eval <<'EOE'; { #line 30 "foo" @@ -437,10 +437,10 @@ EXPECT ######## # toke.c -use warning 'utf8' ; +use warnings 'utf8' ; use utf8 ; $_ = " \xffe " ; -no warning 'utf8' ; +no warnings 'utf8' ; $_ = " \xffe " ; EXPECT \xff will produce malformed UTF-8 character; use \x{ff} for that at - line 4. @@ -454,9 +454,9 @@ Warning: Use of "rand" without parens is ambiguous at - line 2. $^W = 0 ; my $a = rand + 4 ; { - no warning 'ambiguous' ; + no warnings 'ambiguous' ; $a = rand + 4 ; - use warning 'ambiguous' ; + use warnings 'ambiguous' ; $a = rand + 4 ; } $a = rand + 4 ; @@ -476,9 +476,9 @@ $^W = 0 ; sub fred {} ; -fred ; { - no warning 'ambiguous' ; + no warnings 'ambiguous' ; -fred ; - use warning 'ambiguous' ; + use warnings 'ambiguous' ; -fred ; } -fred ; @@ -496,9 +496,9 @@ Precedence problem: open FOO should be open(FOO) at - line 2. $^W = 0 ; open FOO || time; { - no warning 'ambiguous' ; + no warnings 'ambiguous' ; open FOO || time; - use warning 'ambiguous' ; + use warnings 'ambiguous' ; open FOO || time; } open FOO || time; @@ -511,9 +511,9 @@ Precedence problem: open FOO should be open(FOO) at - line 10. $^W = 0 ; *foo *foo ; { - no warning 'ambiguous' ; + no warnings 'ambiguous' ; *foo *foo ; - use warning 'ambiguous' ; + use warnings 'ambiguous' ; *foo *foo ; } *foo *foo ; diff --git a/t/pragma/warn/universal b/t/pragma/warn/universal index 37e77195ca..f4f863701c 100644 --- a/t/pragma/warn/universal +++ b/t/pragma/warn/universal @@ -5,7 +5,7 @@ __END__ # universal.c -use warning 'misc' ; +use warnings 'misc' ; EXPECT diff --git a/t/pragma/warn/utf8 b/t/pragma/warn/utf8 index 380d53bbcc..30f552a231 100644 --- a/t/pragma/warn/utf8 +++ b/t/pragma/warn/utf8 @@ -25,9 +25,9 @@ Malformed UTF-8 character at - line 3. use utf8 ; my $a = ord "\x80" ; { - use warning 'utf8' ; + use warnings 'utf8' ; my $a = ord "\x80" ; - no warning 'utf8' ; + no warnings 'utf8' ; my $a = ord "\x80" ; } EXPECT @@ -45,9 +45,9 @@ Malformed UTF-8 character at - line 3. use utf8 ; my $a = ord "\xf080" ; { - use warning 'utf8' ; + use warnings 'utf8' ; my $a = ord "\xf080" ; - no warning 'utf8' ; + no warnings 'utf8' ; my $a = ord "\xf080" ; } EXPECT diff --git a/t/pragma/warn/util b/t/pragma/warn/util index eebd9207e4..e9093c4814 100644 --- a/t/pragma/warn/util +++ b/t/pragma/warn/util @@ -11,25 +11,25 @@ __END__ # util.c -use warning 'digit' ; +use warnings 'digit' ; my $a = oct "029" ; -no warning 'digit' ; +no warnings 'digit' ; my $a = oct "029" ; EXPECT Illegal octal digit '9' ignored at - line 3. ######## # util.c -use warning 'digit' ; +use warnings 'digit' ; *a = hex "0xv9" ; -no warning 'digit' ; +no warnings 'digit' ; *a = hex "0xv9" ; EXPECT Illegal hexadecimal digit 'v' ignored at - line 3. ######## # util.c -use warning 'digit' ; +use warnings 'digit' ; *a = oct "0b9" ; -no warning 'digit' ; +no warnings 'digit' ; *a = oct "0b9" ; EXPECT Illegal binary digit '9' ignored at - line 3. diff --git a/t/pragma/warning.t b/t/pragma/warnings.t index 73e4c8d1a8..73e4c8d1a8 100755..100644 --- a/t/pragma/warning.t +++ b/t/pragma/warnings.t @@ -374,6 +374,7 @@ Perl_lex_start(pTHX_ SV *line) SAVEDESTRUCTOR(restore_rsfp, PL_rsfp); SAVESPTR(PL_lex_stuff); SAVEI32(PL_lex_defer); + SAVEI32(PL_sublex_info.sub_inwhat); SAVESPTR(PL_lex_repl); SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */ SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect); @@ -395,6 +396,7 @@ Perl_lex_start(pTHX_ SV *line) PL_lex_repl = Nullsv; PL_lex_inpat = 0; PL_lex_inwhat = 0; + PL_sublex_info.sub_inwhat = 0; PL_linestr = line; if (SvREADONLY(PL_linestr)) PL_linestr = sv_2mortal(newSVsv(PL_linestr)); @@ -492,6 +494,8 @@ S_skipspace(pTHX_ register char *s) } for (;;) { STRLEN prevlen; + SSize_t oldprevlen, oldoldprevlen; + SSize_t oldloplen, oldunilen; while (s < PL_bufend && isSPACE(*s)) { if (*s++ == '\n' && PL_in_eval && !PL_rsfp) incline(s); @@ -514,7 +518,8 @@ S_skipspace(pTHX_ register char *s) * of the buffer, we're not reading from a source filter, and * we're in normal lexing mode */ - if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL) + if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat || + PL_lex_state == LEX_FORMLINE) return s; /* try to recharge the buffer */ @@ -555,9 +560,22 @@ S_skipspace(pTHX_ register char *s) } /* not at end of file, so we only read another line */ + /* make corresponding updates to old pointers, for yyerror() */ + oldprevlen = PL_oldbufptr - PL_bufend; + oldoldprevlen = PL_oldoldbufptr - PL_bufend; + if (PL_last_uni) + oldunilen = PL_last_uni - PL_bufend; + if (PL_last_lop) + oldloplen = PL_last_lop - PL_bufend; PL_linestart = PL_bufptr = s + prevlen; PL_bufend = s + SvCUR(PL_linestr); s = PL_bufptr; + PL_oldbufptr = s + oldprevlen; + PL_oldoldbufptr = s + oldoldprevlen; + if (PL_last_uni) + PL_last_uni = s + oldunilen; + if (PL_last_lop) + PL_last_lop = s + oldloplen; incline(s); /* debugger active and we're not compiling the debugger code, @@ -699,7 +717,7 @@ S_force_next(pTHX_ I32 type) * it calls S_force_word to stick the next word into the PL_next lookahead. * * Arguments: - * char *start : start of the buffer + * char *start : buffer position (must be within PL_linestr) * int token : PL_next will be this type of bare word (e.g., METHOD,WORD) * int check_keyword : if true, Perl checks to make sure the word isn't * a keyword (do this if the word is a label, e.g. goto FOO) @@ -1037,6 +1055,7 @@ S_sublex_done(pTHX) PL_bufend = SvPVX(PL_linestr); PL_bufend += SvCUR(PL_linestr); PL_expect = XOPERATOR; + PL_sublex_info.sub_inwhat = 0; return ')'; } } @@ -1132,7 +1151,7 @@ S_scan_const(pTHX_ char *start) : UTF; char *leaveit = /* set of acceptably-backslashed characters */ PL_lex_inpat - ? "\\.^$@AGZdDwWsSbBpPXO+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#" + ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#" : ""; while (s < send || dorange) { @@ -1353,8 +1372,8 @@ S_scan_const(pTHX_ char *start) } continue; - /* \C{latin small letter a} is a named character */ - case 'C': + /* \N{latin small letter a} is a named character */ + case 'N': ++s; if (*s == '{') { char* e = strchr(s, '}'); @@ -1366,13 +1385,13 @@ S_scan_const(pTHX_ char *start) char *why = Nullch; if (!e) { - yyerror("Missing right brace on \\C{}"); + yyerror("Missing right brace on \\N{}"); e = s - 1; goto cont_scan; } res = newSVpvn(s + 1, e - s - 1); res = new_constant( Nullch, 0, "charnames", - res, Nullsv, "\\C{...}" ); + res, Nullsv, "\\N{...}" ); str = SvPV(res,len); if (len > e - s + 4) { char *odest = SvPVX(sv); @@ -1387,7 +1406,7 @@ S_scan_const(pTHX_ char *start) s = e + 1; } else - yyerror("Missing braces on \\C{}"); + yyerror("Missing braces on \\N{}"); continue; /* \c is a control character */ @@ -1885,7 +1904,9 @@ S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append) #ifdef DEBUGGING static char* exp_name[] = - { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" }; + { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK", + "ATTRTERM", "TERMBLOCK" + }; #endif /* @@ -2033,7 +2054,7 @@ Perl_yylex(pTHX) break; #endif - /* when we're already built the next token, just pull it out the queue */ + /* when we've already built the next token, just pull it out of the queue */ case LEX_KNOWNEXT: PL_nexttoke--; yylval = PL_nextval[PL_nexttoke]; @@ -2659,6 +2680,84 @@ Perl_yylex(pTHX) goto just_a_word; } s++; + switch (PL_expect) { + OP *attrs; + case XOPERATOR: + if (!PL_in_my || PL_lex_state != LEX_NORMAL) + break; + PL_bufptr = s; /* update in case we back off */ + goto grabattrs; + case XATTRBLOCK: + PL_expect = XBLOCK; + goto grabattrs; + case XATTRTERM: + PL_expect = XTERMBLOCK; + grabattrs: + s = skipspace(s); + attrs = Nullop; + while (isIDFIRST_lazy(s)) { + d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len); + if (*d == '(') { + d = scan_str(d,TRUE,TRUE); + if (!d) { + if (PL_lex_stuff) { + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + } + /* MUST advance bufptr here to avoid bogus + "at end of line" context messages from yyerror(). + */ + PL_bufptr = s + len; + yyerror("Unterminated attribute parameter in attribute list"); + if (attrs) + op_free(attrs); + return 0; /* EOF indicator */ + } + } + if (PL_lex_stuff) { + SV *sv = newSVpvn(s, len); + sv_catsv(sv, PL_lex_stuff); + attrs = append_elem(OP_LIST, attrs, + newSVOP(OP_CONST, 0, sv)); + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + } + else { + attrs = append_elem(OP_LIST, attrs, + newSVOP(OP_CONST, 0, + newSVpvn(s, len))); + } + s = skipspace(d); + while (*s == ',') + s = skipspace(s+1); + } + tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}' for vi */ + if (*s != ';' && *s != tmp) { + char q = ((*s == '\'') ? '"' : '\''); + /* If here for an expression, and parsed no attrs, back off. */ + if (tmp == '=' && !attrs) { + s = PL_bufptr; + break; + } + /* MUST advance bufptr here to avoid bogus "at end of line" + context messages from yyerror(). + */ + PL_bufptr = s; + if (!*s) + yyerror("Unterminated attribute list"); + else + yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list", + q, *s, q)); + if (attrs) + op_free(attrs); + OPERATOR(':'); + } + if (attrs) { + PL_nextval[PL_nexttoke].opval = attrs; + force_next(THING); + } + TOKEN(COLONATTR); + } OPERATOR(':'); case '(': s++; @@ -2736,10 +2835,12 @@ Perl_yylex(pTHX) } } /* FALL THROUGH */ + case XATTRBLOCK: case XBLOCK: PL_lex_brackstack[PL_lex_brackets++] = XSTATE; PL_expect = XSTATE; break; + case XATTRTERM: case XTERMBLOCK: PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR; PL_expect = XSTATE; @@ -3210,7 +3311,7 @@ Perl_yylex(pTHX) TERM(THING); case '\'': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) { if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) { PL_expect = XTERM; @@ -3226,7 +3327,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case '"': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) { if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) { PL_expect = XTERM; @@ -3248,7 +3349,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case '`': - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (PL_expect == XOPERATOR) no_op("Backticks",s); if (!s) @@ -3728,7 +3829,8 @@ Perl_yylex(pTHX) if (ckWARN(WARN_OCTAL)) { for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ; if (*d != '0' && isDIGIT(*d)) - yywarn("chmod: mode argument is missing initial 0"); + Perl_warner(aTHX_ WARN_OCTAL, + "chmod: mode argument is missing initial 0"); } LOP(OP_CHMOD,XTERM); @@ -3992,6 +4094,7 @@ Perl_yylex(pTHX) UNI(OP_LCFIRST); case KEY_local: + yylval.ival = 0; OPERATOR(LOCAL); case KEY_length: @@ -4048,6 +4151,8 @@ Perl_yylex(pTHX) s = skipspace(s); if (isIDFIRST_lazy(s)) { s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len); + if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3)) + goto really_sub; PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE); if (!PL_in_my_stash) { char tmpbuf[1024]; @@ -4056,6 +4161,7 @@ Perl_yylex(pTHX) yyerror(tmpbuf); } } + yylval.ival = 1; OPERATOR(MY); case KEY_next: @@ -4133,7 +4239,7 @@ Perl_yylex(pTHX) LOP(OP_PIPE_OP,XTERM); case KEY_q: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_CONST; @@ -4143,7 +4249,7 @@ Perl_yylex(pTHX) UNI(OP_QUOTEMETA); case KEY_qw: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); force_next(')'); @@ -4188,7 +4294,7 @@ Perl_yylex(pTHX) TOKEN('('); case KEY_qq: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_STRINGIFY; @@ -4201,7 +4307,7 @@ Perl_yylex(pTHX) TERM(sublex_start()); case KEY_qx: - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) missingterm((char*)0); yylval.ival = OP_BACKTICK; @@ -4396,73 +4502,97 @@ Perl_yylex(pTHX) case KEY_format: case KEY_sub: really_sub: - s = skipspace(s); - - if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') { + { char tmpbuf[sizeof PL_tokenbuf]; - PL_expect = XBLOCK; - d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len); - if (strchr(tmpbuf, ':')) - sv_setpv(PL_subname, tmpbuf); + SSize_t tboffset; + expectation attrful; + bool have_name, have_proto; + int key = tmp; + + s = skipspace(s); + + if (isIDFIRST_lazy(s) || *s == '\'' || + (*s == ':' && s[1] == ':')) + { + PL_expect = XBLOCK; + attrful = XATTRBLOCK; + /* remember buffer pos'n for later force_word */ + tboffset = s - PL_oldbufptr; + d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len); + if (strchr(tmpbuf, ':')) + sv_setpv(PL_subname, tmpbuf); + else { + sv_setsv(PL_subname,PL_curstname); + sv_catpvn(PL_subname,"::",2); + sv_catpvn(PL_subname,tmpbuf,len); + } + s = skipspace(d); + have_name = TRUE; + } else { - sv_setsv(PL_subname,PL_curstname); - sv_catpvn(PL_subname,"::",2); - sv_catpvn(PL_subname,tmpbuf,len); + if (key == KEY_my) + Perl_croak(aTHX_ "Missing name in \"my sub\""); + PL_expect = XTERMBLOCK; + attrful = XATTRTERM; + sv_setpv(PL_subname,"?"); + have_name = FALSE; } - s = force_word(s,WORD,FALSE,TRUE,TRUE); - s = skipspace(s); - } - else { - PL_expect = XTERMBLOCK; - sv_setpv(PL_subname,"?"); - } - if (tmp == KEY_format) { - s = skipspace(s); - if (*s == '=') - PL_lex_formbrack = PL_lex_brackets + 1; - OPERATOR(FORMAT); - } + if (key == KEY_format) { + if (*s == '=') + PL_lex_formbrack = PL_lex_brackets + 1; + if (have_name) + (void) force_word(PL_oldbufptr + tboffset, WORD, + FALSE, TRUE, TRUE); + OPERATOR(FORMAT); + } + + /* Look for a prototype */ + if (*s == '(') { + char *p; + + s = scan_str(s,FALSE,FALSE); + if (!s) { + if (PL_lex_stuff) + SvREFCNT_dec(PL_lex_stuff); + PL_lex_stuff = Nullsv; + Perl_croak(aTHX_ "Prototype not terminated"); + } + /* strip spaces */ + d = SvPVX(PL_lex_stuff); + tmp = 0; + for (p = d; *p; ++p) { + if (!isSPACE(*p)) + d[tmp++] = *p; + } + d[tmp] = '\0'; + SvCUR(PL_lex_stuff) = tmp; + have_proto = TRUE; - /* Look for a prototype */ - if (*s == '(') { - char *p; + s = skipspace(s); + } + else + have_proto = FALSE; + + if (*s == ':' && s[1] != ':') + PL_expect = attrful; - s = scan_str(s); - if (!s) { - if (PL_lex_stuff) - SvREFCNT_dec(PL_lex_stuff); + if (have_proto) { + PL_nextval[PL_nexttoke].opval = + (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff); PL_lex_stuff = Nullsv; - Perl_croak(aTHX_ "Prototype not terminated"); - } - /* strip spaces */ - d = SvPVX(PL_lex_stuff); - tmp = 0; - for (p = d; *p; ++p) { - if (!isSPACE(*p)) - d[tmp++] = *p; + force_next(THING); } - d[tmp] = '\0'; - SvCUR(PL_lex_stuff) = tmp; - - PL_nexttoke++; - PL_nextval[1] = PL_nextval[0]; - PL_nexttype[1] = PL_nexttype[0]; - PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff); - PL_nexttype[0] = THING; - if (PL_nexttoke == 1) { - PL_lex_defer = PL_lex_state; - PL_lex_expect = PL_expect; - PL_lex_state = LEX_KNOWNEXT; + if (!have_name) { + sv_setpv(PL_subname,"__ANON__"); + TOKEN(ANONSUB); } - PL_lex_stuff = Nullsv; - } - - if (*SvPV(PL_subname,n_a) == '?') { - sv_setpv(PL_subname,"__ANON__"); - TOKEN(ANONSUB); + (void) force_word(PL_oldbufptr + tboffset, WORD, + FALSE, TRUE, TRUE); + if (key == KEY_my) + TOKEN(MYSUB); + TOKEN(SUB); } - PREBLOCK(SUB); case KEY_system: set_csh(); @@ -4543,8 +4673,9 @@ Perl_yylex(pTHX) case KEY_umask: if (ckWARN(WARN_OCTAL)) { for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ; - if (*d != '0' && isDIGIT(*d)) - yywarn("umask: argument is missing initial 0"); + if (*d != '0' && isDIGIT(*d)) + Perl_warner(aTHX_ WARN_OCTAL, + "umask: argument is missing initial 0"); } UNI(OP_UMASK); @@ -5605,7 +5736,7 @@ S_scan_pat(pTHX_ char *start, I32 type) PMOP *pm; char *s; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5641,7 +5772,7 @@ S_scan_subst(pTHX_ char *start) yylval.ival = OP_NULL; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) @@ -5654,7 +5785,7 @@ S_scan_subst(pTHX_ char *start) s--; first_start = PL_multi_start; - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5715,7 +5846,7 @@ S_scan_trans(pTHX_ char *start) yylval.ival = OP_NULL; - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -5725,7 +5856,7 @@ S_scan_trans(pTHX_ char *start) if (s[-1] == PL_multi_open) s--; - s = scan_str(s); + s = scan_str(s,FALSE,FALSE); if (!s) { if (PL_lex_stuff) SvREFCNT_dec(PL_lex_stuff); @@ -6040,7 +6171,7 @@ S_scan_inputsymbol(pTHX_ char *start) if (d - PL_tokenbuf != len) { yylval.ival = OP_GLOB; set_csh(); - s = scan_str(start); + s = scan_str(start,FALSE,FALSE); if (!s) Perl_croak(aTHX_ "Glob not terminated"); return s; @@ -6093,6 +6224,8 @@ S_scan_inputsymbol(pTHX_ char *start) /* scan_str takes: start position in buffer + keep_quoted preserve \ on the embedded delimiter(s) + keep_delims preserve the delimiters around the string returns: position to continue reading from buffer side-effects: multi_start, multi_close, lex_repl or lex_stuff, and updates the read buffer. @@ -6110,6 +6243,7 @@ S_scan_inputsymbol(pTHX_ char *start) tr/// string transliterate tr/this/that/ y/// string transliterate y/this/that/ ($*@) sub prototypes sub foo ($) + (stuff) sub attr parameters sub foo : attr(stuff) <> readline or globs <FOO>, <>, <$fh>, or <*.c> In most of these cases (all but <>, patterns and transliterate) @@ -6132,7 +6266,7 @@ S_scan_inputsymbol(pTHX_ char *start) */ STATIC char * -S_scan_str(pTHX_ char *start) +S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims) { dTHR; SV *sv; /* scalar value: string */ @@ -6168,13 +6302,15 @@ S_scan_str(pTHX_ char *start) (void)SvPOK_only(sv); /* validate pointer */ /* move past delimiter and try to read a complete string */ + if (keep_delims) + sv_catpvn(sv, s, 1); s++; for (;;) { /* extend sv if need be */ SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1); /* set 'to' to the next character in the sv's string */ to = SvPVX(sv)+SvCUR(sv); - + /* if open delimiter is the close delimiter read unbridle */ if (PL_multi_open == PL_multi_close) { for (; s < PL_bufend; s++,to++) { @@ -6183,7 +6319,7 @@ S_scan_str(pTHX_ char *start) PL_curcop->cop_line++; /* handle quoted delimiters */ if (*s == '\\' && s+1 < PL_bufend && term != '\\') { - if (s[1] == term) + if (!keep_quoted && s[1] == term) s++; /* any other quotes are simply copied straight through */ else @@ -6209,7 +6345,8 @@ S_scan_str(pTHX_ char *start) PL_curcop->cop_line++; /* backslashes can escape the open or closing characters */ if (*s == '\\' && s+1 < PL_bufend) { - if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)) + if (!keep_quoted && + ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))) s++; else *to++ = *s++; @@ -6276,6 +6413,8 @@ S_scan_str(pTHX_ char *start) /* at this point, we have successfully read the delimited string */ + if (keep_delims) + sv_catpvn(sv, s, 1); PL_multi_end = PL_curcop->cop_line; s++; @@ -6378,7 +6517,7 @@ Perl_scan_num(pTHX_ char *start) s += 2; } /* check for a decimal in disguise */ - else if (s[1] == '.') + else if (strchr(".Ee", s[1])) goto decimal; /* so it must be octal */ else @@ -6409,9 +6548,6 @@ Perl_scan_num(pTHX_ char *start) case '8': case '9': if (shift == 3) yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s)); - else - if (shift == 1) - yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s)); /* FALL THROUGH */ /* octal digits */ diff --git a/universal.c b/universal.c index 032a536e55..f7d794218f 100644 --- a/universal.c +++ b/universal.c @@ -197,7 +197,7 @@ XS(XS_UNIVERSAL_VERSION) gvp = pkg ? (GV**)hv_fetch(pkg,"VERSION",7,FALSE) : Null(GV**); - if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (sv = GvSV(gv))) { + if (gvp && isGV(gv = *gvp) && SvOK(sv = GvSV(gv))) { SV *nsv = sv_newmortal(); sv_setsv(nsv, sv); sv = nsv; diff --git a/vms/perly_c.vms b/vms/perly_c.vms index fc79a269b0..ad94f1e3ee 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -8,6 +8,10 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define PERL_IN_PERLY_C #include "perl.h" +#define dep() deprecate("\"do\" to call subroutines") + +/* stuff included here to make perly_c.diff apply better */ + #define yydebug PL_yydebug #define yynerrs PL_yynerrs #define yyerrflag PL_yyerrflag @@ -15,1117 +19,1116 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #define yyval PL_yyval #define yylval PL_yylval -#define dep() deprecate("\"do\" to call subroutines") +struct ysv { + short* yyss; + YYSTYPE* yyvs; + int oldyydebug; + int oldyynerrs; + int oldyyerrflag; + int oldyychar; + YYSTYPE oldyyval; + YYSTYPE oldyylval; +}; static void yydestruct(pTHXo_ void *ptr); -#line 27 "perly.y" +#line 49 "perly.y" +#if 0 /* get this from perly.h instead */ +#line 52 "perly.y" +typedef union { + I32 ival; + char *pval; + OP *opval; + GV *gvval; +} YYSTYPE; +#line 60 "perly.y" +#endif /* 0 */ + +#ifdef USE_PURE_BISON +#define YYLEX_PARAM (&yychar) +#endif + +#line 52 "perly.c" #define YYERRCODE 256 -static short yylhs[] = { -1, - 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, - 13, 13, 13, 13, 27, 27, 28, 28, 29, 30, - 31, 32, 33, 45, 45, 1, 1, 1, 1, 3, - 39, 39, 47, 4, 5, 6, 40, 41, 41, 42, - 42, 48, 48, 50, 49, 16, 16, 16, 26, 26, - 26, 37, 37, 37, 37, 37, 37, 37, 37, 51, - 37, 38, 38, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, +static short yylhs[] = { -1, + 50, 0, 8, 6, 9, 7, 10, 10, 10, 11, + 11, 11, 11, 24, 24, 24, 24, 24, 24, 24, + 14, 14, 14, 13, 13, 42, 42, 12, 12, 12, + 12, 12, 12, 12, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 49, 49, 1, 1, 1, 1, 1, + 2, 38, 38, 46, 51, 3, 4, 5, 39, 40, + 40, 44, 44, 44, 45, 45, 41, 41, 52, 52, + 54, 53, 15, 15, 15, 25, 25, 25, 36, 36, + 36, 36, 36, 36, 36, 36, 55, 36, 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 34, 34, 35, 35, 35, 2, 2, 44, - 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, + 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 47, 47, 48, 48, 48, 48, 48, 33, 33, 34, + 34, 34, 43, 23, 18, 19, 20, 21, 22, 35, + 35, 35, 35, }; -static short yylen[] = { 2, +static short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, - 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, - 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, - 1, 3, 5, 6, 3, 3, 5, 2, 4, 0, - 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, - 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 3, 2, 4, 3, 4, 1, 1, 1, 1, 1, - 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, - 2, 2, 4, 5, 4, 5, 1, 2, 2, 1, - 2, 2, 2, 1, 3, 1, 3, 4, 4, 6, - 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, + 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, + 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, + 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, + 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 3, 2, 3, 2, + 4, 3, 5, 1, 1, 1, 1, 1, 1, 6, + 5, 4, 5, 1, 1, 3, 4, 3, 2, 2, + 4, 5, 4, 5, 1, 2, 2, 1, 2, 2, + 2, 1, 3, 1, 3, 4, 4, 6, 1, 1, + 3, 2, 3, 2, 1, 1, 1, 0, 1, 0, + 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, }; -static short yydefred[] = { 1, - 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, - 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, - 64, 14, 4, 161, 0, 0, 136, 0, 156, 0, - 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 168, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 128, 130, 0, 0, 0, 0, 162, - 51, 0, 57, 0, 62, 0, 7, 177, 180, 179, - 178, 0, 0, 0, 0, 0, 0, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 78, 0, 175, 0, 142, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 172, 173, 174, 176, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, +static short yydefred[] = { 1, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 4, 169, 0, 0, 144, + 0, 164, 0, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 50, 59, - 0, 0, 0, 76, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 4, 155, 157, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 140, 0, 0, 121, - 27, 0, 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 61, 60, 53, 0, 3, 0, 0, 159, 0, - 125, 0, 42, 0, 43, 0, 0, 0, 0, 170, - 0, 0, 36, 41, 0, 0, 0, 158, 167, 79, - 0, 143, 0, 145, 0, 123, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 93, 87, 0, 85, 0, - 134, 0, 139, 0, 77, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 144, 146, 133, 0, - 0, 0, 92, 86, 0, 90, 88, 135, 84, 65, - 160, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 89, 74, 7, 28, 29, 0, 0, 24, 25, - 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, - 5, 0, 30, 0, 0, 33, 0, 23, + 0, 12, 0, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 136, 138, 0, 0, 0, + 0, 170, 125, 52, 0, 59, 0, 69, 0, 0, + 7, 190, 193, 192, 191, 0, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, + 0, 0, 159, 0, 0, 0, 0, 85, 0, 188, + 0, 150, 0, 0, 0, 0, 0, 0, 0, 175, + 177, 176, 0, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 185, 186, 187, 189, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 51, 61, 0, + 0, 0, 0, 83, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 4, 163, 165, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 148, 174, 0, 0, + 171, 0, 0, 129, 27, 0, 0, 19, 0, 0, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, + 0, 90, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 146, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 167, 0, 0, 0, 42, 0, 43, 0, + 0, 0, 0, 183, 0, 0, 36, 41, 0, 0, + 0, 166, 182, 86, 0, 151, 0, 153, 0, 131, + 173, 65, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 100, 94, 0, 92, 0, 142, 0, 147, 63, + 68, 67, 55, 0, 54, 84, 0, 88, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 152, 154, + 141, 0, 0, 0, 99, 93, 0, 97, 95, 143, + 91, 72, 168, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 140, 96, 81, 7, 28, 29, 0, 0, + 24, 25, 0, 32, 0, 0, 0, 22, 0, 0, + 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; -static short yydgoto[] = { 1, - 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, - 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, - 74, 75, 76, 77, 273, 79, 274, 263, 265, 268, - 276, 264, 266, 114, 200, 92, 80, 239, 82, 84, - 181, 254, 143, 271, 13, 2, 14, 15, 16, 86, - 260, +static short yydgoto[] = { 1, + 10, 11, 20, 100, 19, 91, 366, 94, 355, 3, + 12, 13, 70, 371, 281, 72, 73, 74, 75, 76, + 77, 78, 79, 287, 81, 288, 277, 279, 282, 290, + 278, 280, 118, 210, 96, 82, 253, 85, 87, 190, + 323, 152, 285, 267, 221, 14, 83, 133, 15, 2, + 16, 17, 18, 89, 274, }; -static short yysindex[] = { 0, - 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, - 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, - 0, 0, 0, 0, -24, -24, 0, -5, 0, 2126, - 0, 0, 6, 28, 44, 57, -32, 2126, 68, 69, - 72, 999, 943, -24, 1062, 1327, -198, 0, 0, -24, - 2126, 2126, 2126, 2126, 2126, 2126, 1233, 1383, 0, 2126, - 2126, -24, -24, -24, -24, 2126, -217, 0, 342, 827, - -20, -80, -70, 0, 0, -60, 73, 61, 75, 0, - 0, -1, 0, -137, 0, -130, 0, 0, 0, 0, - 0, 2126, 88, 2126, -189, -1, -137, 0, 0, 0, - 0, 0, 0, 89, 827, 99, 1444, 943, 0, -189, - 0, -80, 75, 0, 2126, 0, 90, 0, -189, -16, - 27, -58, 2126, 0, 75, 218, 218, 218, -169, -169, - 63, -22, 0, -63, 218, 218, 0, 0, 0, 0, - -189, -1, 0, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, - 2126, 2126, 2126, 2126, 0, 0, 74, 2126, 1535, 2126, - 2126, 2126, 2126, 2126, 2126, 1725, 0, 2126, 0, 0, - -44, -91, 256, 0, 2126, 428, 0, -1, 2126, 2126, - 2126, 2126, 131, 1800, 0, 0, 0, -12, 36, 130, - 2126, 75, 1861, 1936, 0, 48, 0, 2126, 87, 0, - 0, -272, -272, 0, -272, -272, -272, -119, 0, 1565, - -189, 1088, 375, 160, 827, 715, 389, 771, 684, 1026, - 1242, 218, 218, 2126, 0, 2006, 2126, 0, 143, -56, - 0, 1, 51, -49, 56, 43, 58, 45, 0, 7, - 827, 0, 0, 0, 2126, 0, 141, 2126, 0, 2126, - 0, -272, 0, 144, 0, 145, -272, 151, 158, 0, - 162, 342, 0, 0, 166, 150, 2126, 0, 0, 0, - 9, 0, 16, 0, 19, 0, 60, 2126, 2126, 47, - 0, 21, 94, 2126, 78, 0, 0, 91, 0, 95, - 0, 101, 0, 153, 0, 268, 0, 92, 92, 92, - 92, 2126, 92, 2126, 188, 0, 0, 0, 0, 96, - 1152, 109, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 0, -217, -217, -204, -204, 198, -217, 185, 92, - 0, 0, 0, 0, 0, 0, 92, 211, 0, 0, - 92, 0, 1800, -217, 319, 0, 2126, -217, 216, 0, - 0, 228, 0, 92, 92, 0, -204, 0, +static short yysindex[] = { 0, + 0, 0, -199, 0, 0, 0, -53, 0, 0, 0, + 0, 0, 0, 0, 646, 0, 0, 0, -217, -207, + 44, 0, 0, -207, 0, 0, 0, -32, -32, 0, + 66, 0, 2177, 0, 0, 69, 83, 93, 110, -35, + 2177, 119, 121, 136, 1013, 973, -32, 1077, 1344, -146, + 2177, 68, -32, 2177, 2177, 2177, 2177, 2177, 2177, 1384, + 1424, 0, 2177, 2177, -32, -32, -32, -32, -152, 0, + 470, 845, -13, -65, -63, 0, 0, 55, 137, 122, + 138, 0, 0, 0, 60, 0, -70, 0, -66, -70, + 0, 0, 0, 0, 0, 2177, 146, 2177, 1085, 60, + -70, 0, 0, 0, 0, 0, 0, 152, 845, 153, + 1464, 973, 0, 1085, 0, -65, 138, 0, 2177, 0, + 160, 0, 1085, 2, 76, -52, 2177, 1085, 1524, 0, + 0, 0, -96, 0, 138, -181, -181, -181, -112, -112, + 123, -38, 0, -74, -181, -181, 0, 0, 0, 0, + 60, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 0, 0, -16, 2177, 1731, 2177, 2177, + 2177, 2177, 2177, 2177, 1791, 0, 2177, 0, 0, -88, + -34, -88, 339, 0, 2177, 287, 0, -88, 2177, 2177, + 2177, 2177, 173, 1850, 0, 0, 0, -33, 46, 180, + 2177, 138, 1910, 2025, 0, 97, 0, 0, -31, -29, + 0, 2177, 133, 0, 0, -237, -237, 0, -237, -237, + -237, -69, 0, 1614, 1085, 684, 167, 107, 845, 3800, + 1125, 405, 1164, 778, -228, -181, -181, 2177, 0, 2117, + 2177, 0, 197, -48, 0, -9, -72, -45, -7, -42, + 56, -36, 0, -4, 845, -10, -47, 2177, -47, 0, + 216, 2177, 0, 2177, 60, -237, 0, 219, 0, 230, + -237, 233, 237, 0, 242, 470, 0, 0, 246, 225, + 2177, 0, 0, 0, 13, 0, 18, 0, 29, 0, + 0, 0, 61, 2177, 2177, 54, 0, 32, 63, 2177, + 165, 0, 0, 174, 0, 178, 0, 191, 0, 0, + 0, 0, 0, 261, 0, 0, 350, 0, 0, 182, + 182, 182, 182, 2177, 182, 2177, 281, 0, 0, 0, + 0, 102, 1237, 202, 0, 0, 294, 0, 0, 0, + 0, 0, 0, 0, -152, -152, -130, -130, 297, -152, + 290, 182, 0, 0, 0, 0, 0, 0, 182, 318, + 0, 0, 182, 0, 1850, -152, 407, 0, 2177, -152, + 324, 0, 0, 326, 0, 182, 182, 0, -130, 0, }; -static short yyrindex[] = { 0, - 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, +static short yyrindex[] = { 0, + 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 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, 0, 0, 0, 23, 2214, 0, - 0, 2264, 2308, 0, 0, 0, 0, 0, 0, 0, + 36, 451, 0, 0, 2208, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, -18, 1030, - 2383, 2433, 2561, 0, 0, 2636, 2686, 0, 918, 0, - 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, - 0, 2308, 0, 0, 3879, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 1356, 0, 0, 232, 0, 3936, - 502, 561, 3047, 0, 0, 0, 2730, 0, 3987, 2433, - 0, 0, 2308, 0, 3096, 3236, 3300, 3436, 1656, 3186, - 2780, 0, 0, 0, 3487, 3550, 0, 0, 0, 0, - 4025, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + -12, 939, 2325, 2385, 2463, 0, 0, 2510, 2561, 0, + 1220, 0, 0, 0, 0, 0, -44, 0, 0, -44, + 0, 0, 0, 0, 0, 2271, 0, 0, 3846, 0, + -105, 0, 0, 0, 0, 0, 0, 0, 2612, 0, + 0, 327, 0, 3883, 522, 583, 3032, 0, 0, 0, + 2621, 0, 3893, 2385, 0, 0, 2271, 3930, 0, 0, + 0, 0, 2667, 0, 3092, 3374, 3418, 3458, 3219, 3331, + 2746, 0, 0, 0, 3496, 3567, 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, 0, 0, 0, 0, 0, 0, 2828, 0, 0, - 0, 0, 887, 0, 232, 0, 0, 0, 242, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 249, 0, - 0, 3142, 0, 0, 0, 0, 0, 0, 2889, 0, - 0, -4, 10, 0, 11, 17, 24, 363, 0, -27, - 664, 3890, 3686, 3737, 1507, 0, 4291, 4188, 4155, 4035, - 3842, 3586, 3623, 0, 0, 0, 0, 0, 2983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1640, 0, 0, 0, 233, 0, 0, 0, 0, 2308, - 0, 37, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2797, 0, 0, -23, + 0, -23, 913, 0, 327, 0, 0, 247, 336, 0, + 0, 0, 0, 333, 0, 0, 0, 0, 352, 0, + 0, 3138, 0, 0, 0, 0, 0, 0, 0, 2857, + 0, 0, 2903, 0, 0, -8, -2, 0, 7, 33, + 42, 2255, 0, -28, 3968, 1822, 3732, 3769, 3023, 0, + 4119, 4082, 4021, 4005, 1044, 3610, 3694, 0, 0, 0, + 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3657, -21, 0, 345, 0, 0, + 0, 0, 0, 2271, 0, 71, 0, 0, 0, 0, + 364, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 105, 168, 168, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 105, 887, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, + 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 115, 175, 175, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 374, 115, 913, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, }; -static short yygindex[] = { 0, - 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, - -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, - 0, 0, 0, 0, 340, -38, 0, 0, 215, -138, - 14, 97, 190, -85, -179, 583, 0, 0, 0, 0, - 286, 0, -140, 0, 0, 0, 0, 0, 0, 0, - 0, +static short yygindex[] = { 0, + 0, 0, 164, 383, 0, 14, 0, 37, 655, -89, + 0, 0, 0, -336, -15, 3415, 0, 2211, 368, 369, + 0, 0, 0, 410, 916, 0, 0, 273, -163, 62, + 94, 249, -71, -186, 634, 0, 0, 0, 428, -46, + 184, 118, 0, -149, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4610 -static short yytable[] = { 69, - 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, - 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, - 174, 107, 15, 204, 107, 149, 150, 83, 278, 210, - 104, 104, 122, 58, 94, 104, 18, 207, 107, 107, - 15, 296, 171, 132, 134, 98, 368, 303, 85, 316, - 39, 16, 173, 113, 18, 275, 317, 17, 123, 318, - 142, 323, 175, 147, 20, 104, 147, 99, 39, 16, - 170, 347, 348, 107, 172, 17, 202, 38, 23, 279, - 147, 147, 20, 100, 113, 147, 189, 190, 191, 192, - 193, 194, 40, 198, 199, 38, 101, 58, 23, 154, - 155, 300, 168, 302, 26, 322, 171, 106, 107, 62, - 15, 108, 176, 236, 325, 147, 162, 163, 178, 177, - 164, 23, 180, 165, 166, 167, 182, 185, 195, 203, - 212, 213, 215, 216, 217, 218, 219, 26, 315, 196, - 26, 26, 26, 297, 26, 167, 26, 26, 299, 26, - 301, 205, 319, 208, 240, 242, 243, 244, 245, 246, - 247, 248, 250, 26, 237, 255, 62, 21, 26, 304, - 280, 199, 286, 337, 307, 262, 213, 288, 213, 150, - 272, 305, 294, 277, 308, 309, 324, 281, 341, 283, - 285, 310, 345, 346, 287, 26, 234, 352, 311, 19, - 21, 312, 326, 21, 21, 21, 313, 21, 314, 21, - 21, 330, 21, 360, 332, 327, 113, 363, 362, 328, - 290, 113, 292, 293, 2, 329, 21, 26, 340, 26, - 26, 21, 88, 342, 149, 150, 343, 89, 351, 149, - 150, 149, 150, 353, 104, 104, 104, 104, 149, 150, - 357, 104, 107, 107, 107, 107, 364, 44, 21, 107, - 44, 44, 44, 102, 44, 355, 44, 44, 365, 44, - 104, 104, 165, 104, 320, 149, 150, 52, 107, 107, - 199, 107, 37, 44, 35, 149, 150, 58, 44, 166, - 21, 163, 21, 21, 147, 147, 147, 147, 149, 150, - 262, 147, 40, 147, 149, 150, 149, 150, 331, 147, - 147, 147, 147, 149, 150, 44, 149, 150, 149, 150, - 147, 147, 37, 147, 147, 147, 147, 147, 147, 147, - 157, 235, 147, 149, 150, 147, 147, 147, 35, 69, - 149, 150, 149, 150, 149, 150, 21, 44, 149, 150, - 44, 97, 78, 149, 150, 149, 150, 149, 150, 214, - 26, 26, 26, 26, 26, 26, 359, 26, 26, 26, +#define YYTABLESIZE 4423 +static short yytable[] = { 71, + 65, 193, 223, 65, 107, 22, 216, 292, 271, 301, + 311, 321, 111, 314, 60, 111, 316, 60, 224, 65, + 313, 372, 318, 250, 194, 181, 178, 183, 15, 111, + 111, 312, 18, 126, 111, 62, 319, 64, 39, 84, + 289, 214, 269, 192, 142, 144, 15, 16, 275, 86, + 18, 69, 390, 338, 198, 217, 39, 180, 339, 182, + 163, 164, 158, 159, 111, 16, 4, 5, 6, 340, + 7, 8, 345, 17, 251, 26, 155, 179, 60, 155, + 172, 113, 20, 173, 122, 315, 174, 175, 176, 293, + 26, 17, 181, 155, 155, 208, 209, 9, 155, 62, + 20, 64, 88, 65, 67, 98, 248, 129, 102, 177, + 127, 38, 344, 219, 26, 199, 200, 201, 202, 203, + 204, 188, 103, 347, 180, 151, 40, 337, 155, 38, + 173, 66, 104, 174, 175, 176, 197, 226, 227, 229, + 230, 231, 232, 233, 15, 369, 370, 26, 317, 105, + 26, 26, 26, 341, 26, 346, 26, 26, 110, 26, + 111, 254, 256, 257, 258, 259, 260, 261, 262, 264, + 359, 23, 24, 26, 21, 112, 185, 184, 26, 209, + 186, 187, 26, 276, 227, 195, 227, 225, 286, 189, + 191, 205, 60, 206, 363, 295, 324, 297, 299, 213, + 215, 220, 328, 21, 176, 26, 303, 21, 65, 266, + 21, 21, 21, 222, 21, 384, 21, 21, 291, 21, + 294, 300, 268, 304, 92, 158, 159, 158, 159, 93, + 302, 159, 306, 21, 308, 309, 310, 26, 21, 26, + 26, 249, 2, 111, 111, 111, 111, 158, 159, 320, + 111, 158, 159, 60, 158, 159, 326, 158, 159, 330, + 106, 158, 159, 158, 159, 21, 158, 159, 158, 159, + 331, 111, 111, 332, 111, 44, 377, 333, 44, 44, + 44, 334, 44, 336, 44, 44, 335, 44, 342, 348, + 158, 159, 158, 159, 209, 158, 159, 21, 349, 21, + 21, 44, 350, 322, 354, 322, 44, 155, 155, 155, + 155, 329, 158, 159, 155, 351, 155, 158, 159, 352, + 276, 362, 155, 155, 155, 155, 364, 273, 158, 159, + 272, 158, 159, 44, 365, 155, 155, 373, 155, 155, + 155, 155, 155, 155, 155, 158, 159, 155, 375, 166, + 155, 155, 155, 158, 159, 158, 159, 379, 53, 71, + 158, 159, 158, 159, 386, 44, 387, 180, 44, 62, + 26, 26, 26, 26, 26, 26, 37, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 256, 269, 188, 26, 26, 0, 26, 26, 26, 26, - 26, 149, 150, 149, 150, 26, 26, 26, 26, 26, - 26, 0, 0, 67, 26, 0, 67, 4, 5, 6, - 339, 7, 8, 26, 0, 26, 26, 0, 0, 0, - 0, 67, 0, 21, 21, 21, 21, 21, 21, 0, + 353, 35, 181, 26, 26, 163, 26, 26, 26, 26, + 26, 158, 159, 178, 40, 26, 26, 26, 26, 26, + 26, 26, 166, 37, 35, 172, 26, 101, 173, 131, + 132, 174, 175, 176, 80, 26, 228, 26, 26, 361, + 21, 21, 21, 21, 21, 21, 381, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 361, 0, 0, 21, 21, 154, 21, - 21, 21, 21, 21, 0, 67, 0, 0, 21, 21, - 21, 21, 21, 21, 0, 0, 163, 21, 259, 164, - 0, 258, 165, 166, 167, 0, 21, 0, 21, 21, - 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, - 157, 0, 0, 44, 0, 0, 44, 44, 44, 44, - 0, 0, 0, 44, 44, 0, 44, 44, 44, 44, - 44, 0, 0, 0, 0, 44, 44, 44, 44, 44, - 44, 4, 5, 6, 44, 7, 8, 164, 0, 0, - 165, 166, 167, 44, 177, 44, 44, 177, 177, 177, - 0, 177, 161, 177, 177, 161, 177, 0, 151, 0, - 0, 0, 0, 0, 152, 153, 154, 155, 0, 161, - 161, 0, 0, 0, 161, 177, 0, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 4, 5, 6, 0, 7, 8, - 0, 0, 177, 178, 161, 0, 178, 178, 178, 0, - 178, 126, 178, 178, 126, 178, 0, 0, 93, 0, - 0, 0, 0, 144, 145, 146, 147, 0, 126, 126, - 148, 0, 0, 126, 178, 115, 116, 177, 0, 0, - 0, 0, 124, 0, 67, 67, 67, 67, 0, 149, - 150, 67, 0, 0, 137, 138, 139, 140, 0, 0, - 0, 0, 0, 126, 52, 0, 0, 62, 64, 50, - 67, 57, 0, 65, 61, 0, 60, 0, 334, 335, - 336, 0, 338, 0, 0, 152, 153, 154, 155, 0, - 59, 163, 0, 0, 164, 63, 178, 165, 166, 167, - 201, 159, 160, 161, 162, 163, 0, 0, 164, 354, - 0, 165, 166, 167, 100, 0, 356, 100, 151, 0, - 358, 0, 58, 0, 152, 153, 154, 155, 0, 0, - 0, 100, 100, 366, 367, 0, 100, 0, 156, 158, - 159, 160, 161, 162, 163, 0, 0, 164, 0, 0, - 165, 166, 167, 0, 23, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 177, 177, - 177, 177, 177, 0, 177, 177, 177, 0, 0, 0, - 177, 0, 289, 161, 161, 161, 161, 157, 0, 0, - 161, 177, 161, 177, 177, 177, 177, 177, 161, 161, - 161, 161, 177, 177, 177, 177, 177, 177, 0, 161, - 161, 177, 161, 161, 161, 161, 161, 161, 161, 0, - 177, 161, 177, 177, 161, 161, 161, 178, 178, 178, - 178, 178, 0, 178, 178, 178, 0, 0, 0, 178, - 0, 0, 126, 126, 126, 126, 0, 0, 0, 126, - 178, 126, 178, 178, 178, 178, 178, 126, 126, 126, - 126, 178, 178, 178, 178, 178, 178, 0, 126, 126, - 178, 126, 126, 126, 126, 126, 126, 126, 0, 178, - 126, 178, 178, 126, 126, 126, 0, 22, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 0, 0, 157, - 32, 0, 0, 33, 34, 35, 36, 0, 0, 0, - 37, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 0, 44, - 0, 51, 44, 44, 44, 67, 44, 0, 44, 44, - 54, 44, 55, 56, 0, 100, 100, 100, 100, 0, - 0, 0, 100, 0, 100, 44, 0, 0, 0, 0, - 44, 100, 0, 0, 109, 0, 0, 118, 68, 0, - 0, 100, 100, 0, 100, 100, 100, 100, 100, 0, - 152, 153, 154, 155, 0, 52, 68, 44, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 161, 162, - 163, 0, 0, 164, 179, 151, 165, 166, 167, 0, - 0, 152, 153, 154, 155, 0, 63, 0, 187, 44, - 68, 0, 44, 0, 0, 156, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 52, 0, 58, 62, 64, 50, 0, 57, 0, - 65, 61, 0, 60, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 211, 0, 0, 152, 153, 154, - 155, 0, 63, 0, 0, 23, 0, 0, 53, 0, - 71, 0, 0, 71, 160, 161, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 0, 71, 71, 58, - 0, 0, 0, 253, 52, 0, 0, 62, 64, 50, - 261, 57, 0, 65, 61, 0, 60, 151, 0, 0, - 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, - 0, 23, 71, 0, 53, 63, 0, 156, 158, 159, - 160, 161, 162, 163, 0, 0, 164, 0, 0, 165, - 166, 167, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 58, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 0, 0, 44, 44, 44, - 44, 44, 44, 0, 23, 0, 44, 53, 0, 68, - 68, 68, 68, 0, 0, 44, 68, 44, 44, 111, - 25, 26, 27, 28, 89, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 157, 68, 68, 0, 0, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 0, 52, 0, 32, 62, 64, - 50, 0, 57, 131, 65, 61, 0, 60, 38, 0, - 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 63, 0, 51, 0, - 0, 71, 71, 71, 71, 0, 0, 54, 71, 55, - 56, 0, 152, 153, 154, 155, 0, 0, 117, 25, - 26, 27, 28, 58, 29, 30, 31, 71, 71, 0, - 32, 162, 163, 0, 0, 164, 0, 0, 165, 166, - 167, 38, 0, 39, 40, 41, 42, 43, 0, 0, - 0, 0, 44, 45, 46, 47, 48, 49, 53, 52, - 0, 51, 62, 64, 50, 0, 57, 0, 65, 61, - 54, 60, 55, 56, 152, 0, 154, 155, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 63, 91, 91, 162, 163, 0, 148, 164, 0, 148, - 165, 166, 167, 104, 0, 0, 0, 0, 0, 112, - 91, 120, 0, 148, 148, 52, 91, 58, 62, 64, - 50, 0, 57, 0, 65, 61, 0, 60, 91, 91, - 91, 91, 151, 0, 0, 0, 0, 0, 152, 153, - 154, 155, 0, 0, 0, 0, 63, 0, 148, 0, - 0, 0, 53, 158, 159, 160, 161, 162, 163, 0, - 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 58, 112, 133, 52, 0, 0, 62, - 64, 50, 0, 57, 197, 65, 61, 0, 60, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 63, 53, 0, - 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 154, 155, 51, 238, 58, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 0, 95, 163, 0, - 95, 164, 0, 0, 165, 166, 167, 0, 0, 270, - 0, 0, 0, 0, 95, 95, 0, 52, 0, 53, - 62, 64, 50, 0, 57, 241, 65, 61, 0, 60, - 0, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 63, 95, - 0, 0, 0, 0, 0, 0, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 58, 51, 148, 148, 148, - 148, 0, 0, 0, 148, 54, 0, 55, 56, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 0, 0, - 0, 32, 0, 148, 148, 0, 0, 0, 0, 0, - 53, 0, 38, 0, 39, 40, 41, 42, 43, 0, - 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, - 70, 0, 51, 70, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 56, 0, 116, 70, 70, 116, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, - 0, 0, 32, 116, 116, 0, 0, 0, 116, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, - 0, 0, 70, 0, 44, 45, 46, 47, 48, 49, - 0, 0, 0, 51, 0, 0, 0, 0, 116, 0, - 0, 0, 54, 0, 55, 56, 0, 52, 0, 0, - 62, 64, 50, 0, 57, 249, 65, 61, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 0, 0, 0, 95, 0, 0, 63, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 0, 0, 32, 95, 95, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 58, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 52, 0, 51, 62, 64, 50, 0, 57, - 0, 65, 61, 54, 60, 55, 56, 0, 0, 0, - 53, 152, 153, 154, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 158, 159, 160, 161, - 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 52, 0, 0, 62, 64, 50, 0, - 57, 282, 65, 61, 0, 60, 0, 0, 0, 0, - 0, 70, 70, 70, 70, 0, 0, 0, 70, 0, - 0, 0, 0, 0, 63, 53, 0, 116, 116, 116, - 116, 0, 0, 0, 116, 0, 116, 70, 70, 0, - 0, 0, 116, 116, 116, 116, 0, 0, 0, 0, - 0, 58, 0, 116, 116, 0, 116, 116, 116, 116, - 116, 116, 116, 0, 0, 116, 0, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 284, 65, 61, 0, - 60, 24, 25, 26, 27, 28, 53, 29, 30, 31, - 0, 0, 0, 32, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 51, 0, 58, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 52, 0, - 0, 62, 64, 50, 0, 57, 291, 65, 61, 0, - 60, 0, 0, 0, 0, 22, 24, 25, 26, 27, - 28, 53, 29, 30, 31, 0, 0, 0, 32, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 58, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 52, 0, - 51, 62, 64, 50, 0, 57, 0, 65, 61, 54, - 60, 55, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 58, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 53, 0, 0, 154, 0, 0, 154, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 154, 154, 0, 32, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 0, 150, 51, 154, 150, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 150, 150, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 163, 0, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 163, 163, 0, 0, 0, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 163, 0, 0, 0, 0, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 131, 0, 51, 131, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 131, 131, 0, 0, 0, 131, 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, 0, 0, 126, 0, 131, 126, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 154, 154, 154, 0, - 126, 126, 154, 0, 154, 126, 0, 0, 0, 0, - 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, - 0, 154, 154, 0, 154, 154, 154, 154, 154, 154, - 154, 0, 0, 154, 0, 126, 154, 154, 154, 0, - 0, 0, 0, 0, 0, 150, 150, 150, 150, 0, - 0, 0, 150, 0, 150, 0, 0, 0, 0, 0, - 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, - 0, 150, 150, 0, 150, 150, 150, 150, 150, 150, - 150, 0, 0, 150, 0, 0, 150, 150, 150, 163, - 163, 163, 163, 0, 0, 0, 163, 0, 163, 0, - 0, 0, 0, 0, 163, 163, 163, 163, 0, 0, - 0, 129, 0, 0, 129, 163, 163, 0, 163, 163, - 163, 163, 163, 163, 163, 0, 0, 163, 129, 129, - 163, 163, 163, 129, 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, 0, - 0, 0, 0, 129, 131, 131, 131, 131, 0, 0, - 0, 131, 0, 131, 0, 0, 0, 0, 0, 131, - 131, 131, 131, 0, 0, 0, 127, 0, 0, 127, - 131, 131, 0, 131, 131, 131, 131, 131, 131, 131, - 0, 0, 131, 127, 127, 131, 131, 131, 127, 0, - 0, 0, 0, 0, 126, 126, 126, 126, 0, 0, - 0, 126, 0, 126, 0, 0, 0, 0, 0, 126, - 126, 126, 126, 0, 0, 0, 137, 0, 127, 137, - 126, 126, 0, 126, 126, 126, 126, 126, 126, 126, - 0, 0, 126, 137, 137, 126, 126, 126, 137, 0, + 283, 90, 325, 21, 21, 0, 21, 21, 21, 21, + 21, 0, 0, 270, 0, 21, 21, 21, 21, 21, + 21, 21, 367, 368, 0, 172, 21, 374, 173, 0, + 0, 174, 175, 176, 0, 21, 0, 21, 21, 0, + 0, 162, 0, 382, 162, 0, 0, 385, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 162, 162, + 0, 44, 0, 162, 44, 44, 44, 44, 0, 0, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 0, + 0, 383, 0, 44, 44, 44, 44, 44, 44, 0, + 0, 0, 0, 162, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 190, 44, 44, 190, 190, 190, + 0, 190, 169, 190, 190, 169, 190, 160, 0, 0, + 0, 0, 0, 161, 162, 163, 164, 0, 0, 169, + 169, 0, 0, 0, 169, 190, 0, 0, 0, 165, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 0, + 0, 174, 175, 176, 4, 5, 6, 0, 7, 8, + 0, 0, 190, 0, 169, 191, 0, 0, 191, 191, + 191, 0, 191, 134, 191, 191, 134, 191, 0, 0, + 160, 0, 0, 0, 0, 9, 161, 162, 163, 164, + 134, 134, 0, 0, 0, 134, 191, 190, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 97, 0, 174, 175, 176, 0, 0, 0, + 0, 0, 4, 5, 6, 134, 7, 8, 55, 119, + 120, 65, 67, 53, 0, 60, 134, 68, 64, 0, + 63, 161, 162, 163, 164, 0, 0, 0, 147, 148, + 149, 150, 0, 9, 62, 0, 0, 0, 191, 66, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 162, 162, 162, 162, 0, 0, 0, 162, + 0, 162, 0, 0, 0, 0, 61, 162, 162, 162, + 162, 153, 154, 155, 156, 211, 0, 0, 157, 0, + 162, 162, 0, 162, 162, 162, 162, 162, 162, 162, + 0, 0, 162, 0, 0, 162, 162, 162, 26, 158, + 159, 56, 0, 0, 0, 0, 0, 0, 190, 190, + 190, 190, 190, 0, 190, 190, 190, 0, 0, 0, + 190, 0, 0, 169, 169, 169, 169, 0, 0, 0, + 169, 190, 169, 190, 190, 190, 190, 190, 169, 169, + 169, 169, 190, 190, 190, 190, 190, 190, 0, 0, + 0, 169, 169, 190, 169, 169, 169, 169, 169, 169, + 169, 0, 190, 169, 190, 190, 169, 169, 169, 191, + 191, 191, 191, 191, 0, 191, 191, 191, 0, 0, + 0, 191, 0, 0, 134, 134, 134, 134, 0, 0, + 0, 134, 191, 134, 191, 191, 191, 191, 191, 134, + 134, 134, 134, 191, 191, 191, 191, 191, 191, 0, + 0, 0, 134, 134, 191, 134, 134, 134, 134, 134, + 134, 134, 0, 191, 134, 191, 191, 134, 134, 134, + 0, 25, 27, 28, 29, 30, 31, 166, 32, 33, + 34, 0, 0, 0, 35, 0, 0, 36, 37, 38, + 39, 0, 0, 0, 40, 41, 0, 42, 43, 44, + 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, + 51, 52, 0, 0, 0, 44, 0, 54, 44, 44, + 44, 0, 44, 0, 44, 44, 57, 44, 58, 59, + 0, 117, 0, 0, 0, 0, 0, 0, 0, 135, + 161, 44, 163, 164, 0, 0, 44, 0, 0, 78, + 0, 0, 78, 0, 0, 356, 357, 358, 0, 360, + 0, 171, 172, 0, 0, 173, 78, 78, 174, 175, + 176, 0, 0, 44, 0, 55, 0, 0, 65, 67, + 53, 117, 60, 0, 68, 64, 376, 63, 0, 0, + 0, 0, 0, 378, 0, 0, 0, 380, 0, 0, + 0, 78, 0, 0, 212, 44, 66, 0, 44, 0, + 388, 389, 117, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 0, 68, 64, 0, 63, 0, 0, + 0, 0, 0, 61, 161, 162, 163, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 106, 171, 172, 106, 0, 173, + 0, 0, 174, 175, 176, 26, 0, 0, 56, 0, + 0, 106, 106, 61, 0, 0, 106, 0, 0, 55, + 0, 0, 65, 67, 53, 0, 60, 0, 68, 64, + 0, 63, 0, 0, 0, 160, 0, 0, 0, 0, + 0, 161, 162, 163, 164, 26, 106, 0, 56, 0, + 66, 0, 0, 0, 0, 0, 0, 165, 167, 168, + 169, 170, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 61, 44, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 0, 0, + 0, 44, 0, 117, 44, 44, 44, 44, 0, 117, + 0, 44, 44, 0, 44, 44, 44, 44, 44, 26, + 0, 0, 56, 44, 44, 44, 44, 44, 44, 0, + 78, 78, 78, 78, 44, 0, 0, 78, 0, 0, + 0, 0, 0, 44, 0, 44, 44, 0, 0, 115, + 28, 29, 30, 31, 93, 32, 33, 34, 78, 78, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 75, 0, 0, 47, 48, 49, 50, 51, 52, 27, + 28, 29, 30, 31, 54, 32, 33, 34, 75, 0, + 0, 35, 0, 57, 0, 58, 59, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 166, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 0, 75, 0, 54, 106, 106, 106, 106, 0, + 0, 0, 106, 57, 106, 58, 59, 0, 0, 0, + 106, 106, 0, 121, 28, 29, 30, 31, 0, 32, + 33, 34, 0, 106, 106, 35, 106, 106, 106, 106, + 106, 106, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 163, 164, 0, 55, 0, 54, 65, + 67, 53, 0, 60, 0, 68, 64, 57, 63, 58, + 59, 0, 171, 172, 0, 0, 173, 0, 0, 174, + 175, 176, 125, 0, 0, 0, 0, 66, 0, 0, + 0, 161, 162, 163, 164, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 141, 68, 64, 0, 63, 168, + 169, 170, 171, 172, 61, 0, 173, 0, 0, 174, + 175, 176, 0, 0, 0, 0, 0, 66, 0, 0, + 161, 162, 163, 164, 0, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 56, + 170, 171, 172, 0, 61, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 75, 75, 75, 75, 0, 55, 0, 75, 65, + 67, 53, 0, 60, 207, 68, 64, 0, 63, 56, + 0, 0, 0, 0, 61, 0, 143, 160, 0, 75, + 75, 0, 0, 161, 162, 163, 164, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 169, 170, 171, 172, 0, 0, 173, 56, + 0, 174, 175, 176, 61, 0, 55, 0, 0, 65, + 67, 53, 0, 60, 218, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 161, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 161, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 56, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 27, 28, 29, 30, 31, 54, 32, 33, 34, 0, + 0, 0, 35, 0, 57, 0, 58, 59, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 255, 68, 64, 57, 63, 58, 59, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, + 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, + 60, 263, 68, 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 161, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 129, 129, 129, 0, 120, 120, 129, - 0, 129, 120, 0, 0, 0, 0, 129, 129, 129, - 129, 0, 0, 0, 0, 0, 0, 0, 129, 129, - 0, 129, 129, 129, 129, 129, 129, 129, 69, 0, - 129, 69, 120, 129, 129, 129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 0, 0, - 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, - 127, 0, 0, 0, 127, 0, 127, 0, 0, 0, - 69, 0, 127, 127, 127, 127, 0, 0, 0, 119, - 0, 0, 119, 127, 127, 0, 127, 127, 127, 127, - 127, 127, 127, 0, 0, 127, 119, 119, 127, 127, - 127, 119, 0, 0, 0, 0, 0, 137, 137, 137, - 137, 0, 0, 0, 137, 0, 137, 0, 0, 0, - 0, 0, 137, 137, 137, 137, 0, 0, 0, 0, - 0, 119, 0, 137, 137, 0, 137, 137, 137, 137, - 137, 137, 137, 0, 0, 137, 0, 0, 137, 137, - 137, 161, 161, 161, 161, 0, 0, 0, 161, 0, - 161, 0, 0, 0, 0, 0, 161, 161, 161, 161, - 0, 0, 0, 75, 0, 0, 75, 161, 161, 0, - 161, 161, 161, 161, 161, 161, 161, 0, 0, 161, - 75, 75, 161, 161, 161, 75, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 0, 0, 120, 0, - 120, 0, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 0, 0, 0, 75, 0, 120, 120, 0, - 120, 120, 120, 120, 120, 120, 120, 164, 0, 120, - 0, 0, 120, 120, 120, 0, 0, 0, 0, 69, - 69, 69, 69, 0, 164, 164, 69, 0, 69, 164, - 0, 0, 0, 0, 69, 69, 69, 69, 0, 0, - 0, 0, 0, 0, 0, 69, 69, 0, 69, 69, - 69, 69, 69, 69, 69, 0, 149, 69, 0, 164, - 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 149, 0, 0, 0, 149, 0, - 119, 119, 119, 119, 0, 0, 0, 119, 0, 119, - 0, 0, 0, 0, 0, 119, 119, 119, 119, 0, - 0, 0, 72, 0, 0, 0, 119, 119, 149, 119, - 119, 119, 119, 119, 119, 119, 0, 0, 119, 72, - 72, 119, 119, 119, 72, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 108, 0, 0, 108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 61, 55, 0, 108, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 0, 0, 0, + 161, 162, 163, 164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 108, 0, 56, 167, 168, 169, + 170, 171, 172, 0, 0, 173, 0, 0, 174, 175, + 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 296, 68, 64, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 0, 0, 117, - 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 117, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, - 0, 75, 0, 75, 0, 0, 0, 0, 0, 75, - 75, 75, 75, 0, 0, 0, 111, 0, 117, 111, - 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, - 0, 0, 75, 111, 111, 75, 75, 75, 111, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, - 164, 164, 0, 0, 0, 164, 0, 164, 111, 0, - 0, 0, 0, 164, 164, 164, 164, 0, 0, 0, - 112, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 164, 164, 0, 0, 164, 112, 112, 164, - 164, 164, 112, 0, 0, 0, 0, 149, 149, 149, - 149, 0, 0, 0, 149, 0, 149, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, - 0, 0, 112, 149, 149, 0, 149, 149, 149, 149, - 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, - 149, 0, 0, 72, 72, 72, 72, 0, 0, 0, - 72, 0, 72, 0, 0, 0, 0, 0, 72, 72, - 72, 72, 0, 0, 0, 0, 0, 0, 0, 72, - 72, 0, 72, 72, 72, 72, 72, 72, 72, 0, - 0, 72, 0, 0, 72, 72, 72, 117, 117, 117, - 117, 0, 0, 0, 117, 0, 117, 0, 0, 0, - 0, 0, 117, 117, 117, 117, 113, 0, 0, 113, - 0, 0, 0, 117, 117, 0, 117, 117, 117, 117, - 117, 117, 117, 113, 113, 117, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 0, 0, 0, 111, 0, 111, 0, 0, 0, - 0, 0, 111, 111, 111, 111, 0, 109, 113, 0, - 109, 0, 0, 111, 111, 0, 111, 111, 111, 111, - 111, 111, 111, 0, 109, 109, 0, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 112, 112, 112, 0, 0, 0, 112, 109, - 112, 0, 0, 0, 0, 0, 112, 112, 112, 112, - 110, 0, 0, 110, 0, 0, 0, 112, 112, 0, - 112, 112, 112, 112, 112, 112, 112, 110, 110, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 108, 108, 0, 0, 0, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 96, 96, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 113, 113, - 113, 0, 0, 0, 113, 96, 113, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 97, 0, 0, 97, - 0, 0, 0, 113, 113, 0, 113, 113, 113, 113, - 113, 113, 113, 97, 97, 0, 0, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 0, 0, 0, 109, 0, 109, 0, 0, - 0, 0, 0, 109, 109, 109, 109, 98, 97, 0, - 98, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 109, 109, 98, 98, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 110, 98, - 110, 0, 0, 0, 0, 0, 110, 110, 110, 110, - 0, 0, 0, 0, 0, 0, 0, 110, 110, 0, - 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, - 108, 0, 0, 0, 108, 0, 108, 0, 0, 0, - 0, 0, 108, 108, 108, 108, 0, 0, 0, 0, - 0, 0, 99, 108, 108, 99, 108, 108, 108, 108, - 108, 108, 108, 0, 96, 96, 96, 96, 0, 99, - 99, 96, 0, 96, 99, 0, 0, 0, 0, 96, - 96, 96, 96, 0, 0, 0, 0, 0, 0, 153, - 96, 96, 153, 96, 96, 96, 96, 96, 96, 96, - 101, 0, 0, 101, 99, 0, 153, 153, 0, 0, - 0, 153, 0, 0, 0, 0, 0, 101, 101, 0, - 0, 0, 101, 0, 0, 0, 0, 97, 97, 97, - 97, 0, 0, 0, 97, 0, 97, 0, 0, 0, - 0, 153, 97, 97, 97, 97, 152, 0, 0, 152, - 0, 0, 101, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 0, 152, 152, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 98, - 98, 98, 0, 0, 0, 98, 0, 98, 0, 0, - 0, 0, 0, 98, 98, 0, 98, 141, 152, 0, - 141, 0, 0, 0, 98, 98, 0, 98, 98, 98, - 98, 98, 98, 0, 141, 141, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 118, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 102, 0, 0, 102, 141, - 0, 0, 118, 118, 0, 0, 0, 118, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 99, 99, 99, 118, 0, 0, - 99, 0, 99, 0, 0, 0, 0, 102, 99, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 99, 0, 99, 99, 99, 99, 99, 99, 0, 0, - 153, 153, 153, 153, 0, 0, 0, 153, 0, 153, - 0, 101, 101, 101, 101, 153, 153, 0, 101, 0, - 101, 0, 0, 0, 0, 0, 153, 153, 0, 153, - 153, 153, 153, 153, 0, 0, 0, 101, 101, 0, - 101, 101, 101, 101, 101, 103, 0, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, - 152, 0, 103, 103, 152, 0, 152, 103, 0, 0, - 0, 0, 152, 152, 0, 0, 0, 0, 105, 0, - 0, 105, 0, 152, 152, 0, 152, 152, 152, 152, - 152, 0, 0, 0, 0, 105, 105, 103, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 141, 141, - 141, 141, 0, 0, 0, 141, 0, 141, 0, 0, - 0, 0, 0, 141, 141, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 141, 141, 0, 141, 141, 141, - 141, 141, 0, 0, 0, 0, 118, 118, 118, 118, - 0, 0, 0, 118, 0, 118, 102, 102, 102, 102, - 0, 118, 118, 102, 0, 102, 0, 0, 0, 0, - 0, 0, 118, 118, 0, 118, 118, 118, 118, 118, - 0, 106, 102, 102, 106, 102, 102, 102, 102, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 95, 0, 0, 106, 0, 0, 0, 0, 105, 0, - 0, 0, 110, 0, 0, 119, 0, 0, 0, 0, - 0, 0, 126, 127, 128, 129, 130, 0, 0, 0, - 135, 136, 0, 106, 0, 0, 141, 0, 0, 0, + 0, 0, 0, 66, 0, 56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 54, 0, 0, 56, 0, 0, 0, 0, + 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, + 30, 31, 0, 32, 33, 34, 0, 55, 0, 35, + 65, 67, 53, 0, 60, 298, 68, 64, 0, 63, + 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, + 0, 47, 48, 49, 50, 51, 52, 0, 66, 0, + 0, 0, 54, 108, 108, 108, 108, 0, 0, 0, + 108, 57, 108, 58, 59, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 61, 0, 0, 35, 0, + 0, 108, 108, 0, 108, 108, 108, 108, 108, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 55, + 56, 54, 65, 67, 53, 0, 60, 307, 68, 64, + 57, 63, 58, 59, 0, 0, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 66, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 61, 0, 55, + 0, 54, 65, 67, 53, 0, 60, 0, 68, 64, + 57, 63, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, + 66, 0, 56, 0, 0, 0, 0, 0, 158, 0, + 108, 158, 0, 0, 0, 0, 116, 95, 124, 0, + 0, 0, 130, 95, 0, 158, 158, 61, 0, 0, + 158, 0, 0, 0, 0, 95, 95, 95, 95, 0, + 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 0, 0, 0, 35, 0, 74, 0, 0, 74, 0, + 158, 0, 56, 0, 41, 0, 42, 43, 44, 45, + 46, 178, 0, 74, 178, 47, 48, 49, 50, 51, + 52, 0, 116, 0, 0, 0, 54, 0, 178, 178, + 0, 0, 0, 178, 0, 57, 0, 58, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 0, 139, 0, 0, 139, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 139, 139, 0, 35, 252, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 284, 0, 0, 0, 139, 54, 0, + 0, 0, 0, 0, 0, 134, 0, 57, 134, 58, + 59, 0, 0, 27, 28, 29, 30, 31, 0, 32, + 33, 34, 134, 134, 0, 35, 0, 134, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 0, 0, 134, 54, 158, + 158, 158, 158, 0, 0, 0, 158, 57, 158, 58, + 59, 0, 0, 0, 158, 158, 158, 158, 0, 0, + 0, 0, 0, 137, 0, 0, 137, 158, 158, 0, + 158, 158, 158, 158, 158, 158, 158, 0, 0, 158, + 137, 137, 158, 158, 158, 137, 74, 74, 74, 74, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 178, + 135, 178, 0, 135, 74, 137, 0, 178, 178, 178, + 178, 0, 0, 0, 0, 0, 0, 135, 135, 0, + 178, 178, 135, 178, 178, 178, 178, 178, 178, 178, + 0, 0, 178, 0, 0, 178, 178, 178, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 0, 145, 135, 139, 145, 139, 0, 0, 0, 0, + 0, 139, 139, 139, 139, 0, 0, 0, 145, 145, + 0, 0, 0, 145, 139, 139, 0, 139, 139, 139, + 139, 139, 139, 139, 0, 0, 139, 0, 0, 139, + 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 145, 0, 156, 134, 134, 134, 134, + 0, 169, 0, 134, 169, 134, 0, 0, 0, 156, + 156, 134, 134, 134, 134, 0, 0, 0, 169, 169, + 0, 0, 0, 169, 134, 134, 0, 134, 134, 134, + 134, 134, 134, 134, 0, 0, 134, 0, 0, 134, + 134, 134, 0, 0, 156, 0, 0, 172, 0, 0, + 172, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 172, 172, 0, 0, 0, 172, + 0, 0, 0, 0, 137, 137, 137, 137, 0, 0, + 0, 137, 0, 137, 0, 0, 0, 0, 0, 137, + 137, 137, 137, 0, 0, 0, 0, 0, 0, 172, + 0, 0, 137, 137, 0, 137, 137, 137, 137, 137, + 137, 137, 0, 0, 137, 0, 0, 137, 137, 137, + 0, 135, 135, 135, 135, 0, 128, 0, 135, 128, + 135, 0, 0, 0, 0, 0, 135, 135, 135, 135, + 0, 0, 0, 128, 128, 0, 0, 0, 128, 135, + 135, 0, 135, 135, 135, 135, 135, 135, 135, 0, + 0, 135, 0, 0, 135, 135, 135, 0, 0, 0, + 0, 0, 145, 145, 145, 145, 0, 76, 128, 145, + 76, 145, 0, 0, 0, 0, 0, 145, 145, 145, + 145, 0, 0, 0, 76, 76, 0, 0, 0, 76, + 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, + 0, 0, 145, 0, 0, 145, 145, 145, 0, 0, + 0, 0, 0, 156, 156, 156, 156, 0, 0, 76, + 156, 0, 169, 169, 169, 169, 0, 66, 0, 169, + 66, 169, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 156, 156, 0, 66, 66, 0, 0, 0, 66, + 169, 169, 0, 169, 169, 169, 169, 169, 169, 169, + 0, 0, 169, 0, 0, 169, 169, 169, 172, 172, + 172, 172, 0, 127, 0, 172, 127, 172, 0, 66, + 0, 0, 0, 172, 172, 172, 172, 0, 0, 0, + 127, 127, 0, 0, 0, 127, 172, 172, 0, 172, + 172, 172, 172, 172, 172, 172, 0, 0, 172, 0, + 0, 172, 172, 172, 0, 0, 0, 0, 0, 82, + 0, 0, 82, 0, 0, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 0, 0, + 0, 82, 114, 0, 0, 114, 0, 128, 128, 128, + 128, 0, 0, 0, 128, 0, 128, 0, 0, 114, + 114, 0, 128, 128, 128, 128, 0, 0, 0, 0, + 0, 82, 0, 0, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 0, 0, 128, 0, 0, + 128, 128, 128, 102, 114, 0, 102, 0, 76, 76, + 76, 76, 179, 0, 0, 76, 0, 76, 0, 0, + 102, 102, 0, 76, 76, 76, 76, 0, 0, 179, + 179, 0, 0, 0, 179, 0, 76, 76, 0, 76, + 76, 76, 76, 76, 76, 76, 0, 0, 76, 0, + 0, 76, 76, 76, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 0, 0, 0, 66, 66, + 66, 66, 157, 0, 0, 66, 0, 66, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 0, 157, + 157, 0, 0, 0, 157, 0, 66, 66, 0, 66, + 66, 66, 66, 66, 66, 66, 0, 0, 66, 0, + 0, 66, 66, 66, 127, 127, 127, 127, 79, 0, + 0, 127, 0, 127, 157, 0, 0, 0, 0, 127, + 127, 127, 127, 0, 0, 79, 79, 0, 0, 0, + 79, 0, 127, 127, 0, 127, 127, 127, 127, 127, + 127, 127, 0, 0, 127, 0, 0, 127, 127, 127, + 82, 82, 82, 82, 0, 0, 0, 82, 0, 82, + 79, 0, 0, 0, 0, 82, 82, 82, 82, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 82, 82, + 114, 82, 82, 82, 82, 82, 82, 82, 0, 123, + 82, 0, 123, 82, 82, 82, 0, 0, 0, 0, + 0, 114, 114, 0, 114, 0, 123, 123, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 0, 0, + 0, 102, 0, 179, 179, 179, 179, 0, 0, 0, + 179, 123, 179, 0, 0, 0, 0, 0, 179, 179, + 179, 179, 102, 102, 0, 0, 0, 0, 0, 0, + 0, 179, 179, 0, 179, 179, 179, 179, 179, 179, + 179, 0, 0, 179, 0, 0, 179, 179, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 103, 103, 103, - 0, 0, 0, 103, 0, 103, 0, 0, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 0, 0, + 157, 124, 157, 0, 124, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 0, 0, 0, 124, 124, + 0, 157, 157, 124, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 79, + 79, 79, 79, 0, 118, 0, 79, 118, 79, 0, + 0, 0, 0, 124, 79, 79, 79, 79, 0, 0, + 0, 118, 118, 0, 0, 0, 118, 79, 79, 0, + 79, 79, 79, 79, 79, 79, 79, 99, 0, 79, + 0, 0, 79, 79, 79, 109, 0, 0, 119, 114, + 0, 119, 123, 0, 0, 128, 118, 0, 0, 136, + 137, 138, 139, 140, 0, 119, 119, 145, 146, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 123, 123, 123, 0, 0, 0, 123, 120, 123, + 0, 120, 0, 0, 0, 123, 123, 123, 123, 0, + 119, 0, 196, 0, 0, 120, 120, 0, 123, 123, + 120, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 123, 0, 0, 0, 0, 0, 116, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 0, 103, 103, 103, 103, 105, - 105, 105, 105, 0, 0, 0, 105, 0, 105, 0, - 0, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 105, 105, 0, 105, 105, - 105, 0, 0, 0, 0, 0, 0, 0, 251, 0, + 120, 0, 0, 116, 116, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 0, 124, 124, 124, 124, 124, 124, 124, + 0, 0, 124, 0, 0, 118, 118, 118, 118, 0, + 115, 0, 118, 115, 118, 0, 0, 0, 0, 117, + 118, 118, 118, 118, 0, 0, 0, 115, 115, 0, + 0, 0, 115, 118, 118, 0, 118, 118, 118, 118, + 118, 118, 118, 0, 0, 0, 327, 0, 0, 119, + 119, 119, 119, 0, 0, 0, 119, 77, 119, 0, + 77, 0, 115, 0, 119, 119, 119, 119, 0, 0, + 0, 0, 0, 0, 77, 77, 0, 119, 119, 343, + 119, 119, 119, 119, 119, 119, 119, 0, 0, 120, + 120, 120, 120, 0, 103, 0, 120, 103, 120, 0, + 0, 0, 0, 0, 120, 120, 120, 120, 0, 77, + 0, 103, 103, 0, 0, 0, 103, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 116, 116, 116, + 116, 0, 104, 0, 116, 104, 116, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 103, 0, 0, 104, + 104, 0, 0, 0, 104, 116, 116, 0, 116, 116, + 116, 116, 116, 116, 116, 0, 0, 0, 0, 105, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 0, 105, 105, 0, 0, + 0, 105, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 0, 0, + 0, 0, 0, 117, 117, 117, 117, 305, 0, 0, + 0, 105, 166, 0, 0, 0, 117, 117, 0, 117, + 117, 117, 117, 117, 117, 117, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 0, 161, 0, 115, 161, + 115, 0, 0, 0, 0, 0, 115, 115, 115, 115, + 0, 0, 0, 161, 161, 0, 0, 0, 161, 115, + 115, 0, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 0, 0, 160, 0, 0, 160, 0, 77, 77, + 77, 77, 0, 149, 0, 77, 149, 0, 161, 0, + 160, 160, 0, 0, 0, 160, 0, 0, 0, 0, + 149, 149, 0, 0, 0, 149, 77, 77, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 103, 103, 0, + 126, 0, 103, 126, 103, 160, 0, 0, 0, 0, + 103, 103, 103, 103, 0, 149, 0, 126, 126, 0, + 0, 0, 126, 103, 103, 0, 103, 103, 103, 103, + 103, 103, 103, 104, 104, 104, 104, 0, 107, 0, + 104, 107, 104, 0, 0, 0, 0, 0, 104, 104, + 104, 104, 126, 0, 0, 107, 107, 0, 0, 0, + 107, 104, 104, 0, 104, 104, 104, 104, 104, 104, + 105, 105, 105, 105, 0, 109, 0, 105, 109, 105, + 0, 0, 0, 0, 0, 105, 105, 0, 105, 0, + 107, 110, 109, 109, 110, 0, 0, 109, 105, 105, + 0, 105, 105, 105, 105, 105, 105, 0, 110, 110, + 160, 0, 0, 110, 0, 0, 161, 162, 163, 164, + 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, + 0, 0, 165, 167, 168, 169, 170, 171, 172, 0, + 0, 173, 0, 110, 174, 175, 176, 161, 161, 161, + 161, 0, 112, 0, 161, 112, 161, 0, 0, 0, + 0, 0, 161, 161, 0, 0, 0, 0, 0, 112, + 112, 0, 0, 0, 112, 161, 161, 0, 161, 161, + 161, 161, 161, 0, 160, 160, 160, 160, 0, 113, + 0, 160, 113, 160, 149, 149, 149, 149, 0, 160, + 160, 149, 0, 149, 112, 0, 113, 113, 0, 149, + 149, 113, 160, 160, 0, 160, 160, 160, 160, 160, + 0, 0, 149, 149, 0, 149, 149, 149, 149, 149, + 0, 126, 126, 126, 126, 0, 0, 0, 126, 0, + 126, 113, 0, 0, 0, 0, 126, 126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 126, 0, 126, 126, 126, 126, 126, 0, 0, 107, + 107, 107, 107, 0, 0, 0, 107, 0, 107, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 107, 0, + 107, 107, 107, 107, 107, 0, 109, 109, 109, 109, + 0, 0, 0, 109, 0, 109, 0, 0, 0, 0, + 0, 0, 110, 110, 110, 110, 0, 0, 0, 110, + 0, 110, 0, 0, 109, 109, 0, 109, 109, 109, + 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 0, 110, 110, 110, 110, 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, 0, 112, 112, 112, 112, 0, 0, 0, + 112, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112, 112, 0, 112, 112, 112, 0, 0, 0, + 113, 113, 113, 113, 0, 0, 0, 113, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 106, 106, 106, 0, 0, 0, 106, - 0, 106, 0, 0, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, - 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, + 0, 113, 113, }; -static short yycheck[] = { 13, - 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, - 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, - 91, 41, 41, 40, 44, 298, 299, 257, 41, 93, - 58, 59, 46, 59, 40, 63, 41, 123, 58, 59, - 59, 41, 123, 57, 58, 40, 367, 41, 59, 41, - 41, 41, 123, 92, 59, 194, 41, 41, 257, 41, - 278, 41, 123, 41, 41, 93, 44, 40, 59, 59, - 91, 276, 277, 93, 91, 59, 115, 41, 123, 44, - 58, 59, 59, 40, 123, 63, 98, 99, 100, 101, - 102, 103, 41, 107, 108, 59, 40, 123, 123, 289, - 290, 59, 123, 59, 0, 59, 123, 40, 40, 36, - 59, 40, 40, 40, 294, 93, 306, 307, 44, 59, - 310, 123, 260, 313, 314, 315, 257, 40, 40, 40, - 144, 145, 146, 147, 148, 149, 150, 33, 277, 41, - 36, 37, 38, 93, 40, 315, 42, 43, 93, 45, - 93, 125, 93, 91, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 59, 91, 257, 36, 0, 64, 255, - 41, 185, 125, 312, 260, 189, 190, 91, 192, 299, - 194, 41, 40, 195, 41, 41, 93, 201, 93, 203, - 204, 41, 333, 334, 208, 91, 123, 338, 41, 257, - 33, 40, 125, 36, 37, 38, 41, 40, 59, 42, - 43, 59, 45, 354, 123, 125, 255, 358, 357, 125, - 234, 260, 236, 237, 0, 125, 59, 123, 41, 125, - 126, 64, 257, 125, 298, 299, 41, 262, 41, 298, - 299, 298, 299, 59, 272, 273, 274, 275, 298, 299, - 40, 279, 272, 273, 274, 275, 41, 33, 91, 279, - 36, 37, 38, 296, 40, 344, 42, 43, 41, 45, - 298, 299, 41, 301, 288, 298, 299, 123, 298, 299, - 294, 301, 41, 59, 59, 298, 299, 123, 64, 41, - 123, 59, 125, 126, 272, 273, 274, 275, 298, 299, - 314, 279, 41, 281, 298, 299, 298, 299, 41, 287, - 288, 289, 290, 298, 299, 91, 298, 299, 298, 299, - 298, 299, 59, 301, 302, 303, 304, 305, 306, 307, - 63, 258, 310, 298, 299, 313, 314, 315, 41, 353, - 298, 299, 298, 299, 298, 299, 8, 123, 298, 299, - 126, 32, 13, 298, 299, 298, 299, 298, 299, 145, - 256, 257, 258, 259, 260, 261, 353, 263, 264, 265, +static short yycheck[] = { 15, + 36, 91, 41, 36, 40, 59, 59, 41, 195, 41, + 59, 59, 41, 59, 59, 44, 59, 123, 93, 36, + 93, 358, 59, 40, 96, 91, 40, 91, 41, 58, + 59, 41, 41, 49, 63, 59, 41, 59, 41, 257, + 204, 40, 192, 90, 60, 61, 59, 41, 198, 257, + 59, 15, 389, 41, 101, 127, 59, 123, 41, 123, + 289, 290, 300, 301, 93, 59, 266, 267, 268, 41, + 270, 271, 41, 41, 91, 123, 41, 91, 123, 44, + 309, 45, 41, 312, 48, 93, 315, 316, 317, 44, + 123, 59, 91, 58, 59, 111, 112, 297, 63, 123, + 59, 123, 59, 36, 37, 40, 123, 40, 40, 123, + 257, 41, 59, 129, 0, 102, 103, 104, 105, 106, + 107, 85, 40, 310, 123, 278, 41, 291, 93, 59, + 312, 64, 40, 315, 316, 317, 100, 153, 154, 155, + 156, 157, 158, 159, 59, 276, 277, 33, 93, 40, + 36, 37, 38, 93, 40, 93, 42, 43, 40, 45, + 40, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 334, 8, 9, 59, 0, 40, 40, 123, 64, 195, + 59, 44, 123, 199, 200, 40, 202, 151, 204, 260, + 257, 40, 298, 41, 93, 211, 268, 213, 214, 40, + 125, 298, 274, 257, 317, 91, 222, 33, 36, 298, + 36, 37, 38, 91, 40, 379, 42, 43, 205, 45, + 41, 125, 257, 91, 257, 300, 301, 300, 301, 262, + 260, 301, 248, 59, 250, 251, 40, 123, 64, 125, + 126, 258, 0, 272, 273, 274, 275, 300, 301, 260, + 279, 300, 301, 298, 300, 301, 41, 300, 301, 41, + 296, 300, 301, 300, 301, 91, 300, 301, 300, 301, + 41, 300, 301, 41, 303, 33, 366, 41, 36, 37, + 38, 40, 40, 59, 42, 43, 41, 45, 304, 125, + 300, 301, 300, 301, 310, 300, 301, 123, 125, 125, + 126, 59, 125, 267, 123, 269, 64, 272, 273, 274, + 275, 275, 300, 301, 279, 125, 281, 300, 301, 59, + 336, 41, 287, 288, 289, 290, 125, 41, 300, 301, + 44, 300, 301, 91, 41, 300, 301, 41, 303, 304, + 305, 306, 307, 308, 309, 300, 301, 312, 59, 63, + 315, 316, 317, 300, 301, 300, 301, 40, 123, 375, + 300, 301, 300, 301, 41, 123, 41, 41, 126, 123, + 256, 257, 258, 259, 260, 261, 41, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 41, 59, 41, 279, 280, 289, 282, 283, 284, 285, + 286, 300, 301, 59, 41, 291, 292, 293, 294, 295, + 296, 297, 63, 59, 41, 309, 302, 35, 312, 52, + 52, 315, 316, 317, 15, 311, 154, 313, 314, 336, + 256, 257, 258, 259, 260, 261, 375, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 125, 192, 97, 279, 280, -1, 282, 283, 284, 285, - 286, 298, 299, 298, 299, 291, 292, 293, 294, 295, - 296, -1, -1, 41, 300, -1, 44, 266, 267, 268, - 314, 270, 271, 309, -1, 311, 312, -1, -1, -1, - -1, 59, -1, 256, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 125, -1, -1, 279, 280, 289, 282, - 283, 284, 285, 286, -1, 93, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, 307, 300, 41, 310, - -1, 44, 313, 314, 315, -1, 309, -1, 311, 312, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 63, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 266, 267, 268, 300, 270, 271, 310, -1, -1, - 313, 314, 315, 309, 33, 311, 312, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, 58, - 59, -1, -1, -1, 63, 64, -1, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 266, 267, 268, -1, 270, 271, - -1, -1, 91, 33, 93, -1, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, -1, -1, 26, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - 279, -1, -1, 63, 64, 43, 44, 126, -1, -1, - -1, -1, 50, -1, 272, 273, 274, 275, -1, 298, - 299, 279, -1, -1, 62, 63, 64, 65, -1, -1, - -1, -1, -1, 93, 33, -1, -1, 36, 37, 38, - 298, 40, -1, 42, 43, -1, 45, -1, 309, 310, - 311, -1, 313, -1, -1, 287, 288, 289, 290, -1, - 59, 307, -1, -1, 310, 64, 126, 313, 314, 315, - 108, 303, 304, 305, 306, 307, -1, -1, 310, 340, - -1, 313, 314, 315, 41, -1, 347, 44, 281, -1, - 351, -1, 91, -1, 287, 288, 289, 290, -1, -1, - -1, 58, 59, 364, 365, -1, 63, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, -1, -1, - 313, 314, 315, -1, 123, -1, -1, 126, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, 257, 258, + 202, 24, 269, 279, 280, -1, 282, 283, 284, 285, + 286, -1, -1, 125, -1, 291, 292, 293, 294, 295, + 296, 297, 355, 356, -1, 309, 302, 360, 312, -1, + -1, 315, 316, 317, -1, 311, -1, 313, 314, -1, + -1, 41, -1, 376, 44, -1, -1, 380, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 58, 59, + -1, 269, -1, 63, 272, 273, 274, 275, -1, -1, + -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, + -1, 125, -1, 291, 292, 293, 294, 295, 296, -1, + -1, -1, -1, 93, 302, -1, -1, -1, -1, -1, + -1, -1, -1, 311, 33, 313, 314, 36, 37, 38, + -1, 40, 41, 42, 43, 44, 45, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, 64, -1, -1, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 266, 267, 268, -1, 270, 271, + -1, -1, 91, -1, 93, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, -1, + 281, -1, -1, -1, -1, 297, 287, 288, 289, 290, + 58, 59, -1, -1, -1, 63, 64, 126, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, 29, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 266, 267, 268, 93, 270, 271, 33, 46, + 47, 36, 37, 38, -1, 40, 53, 42, 43, -1, + 45, 287, 288, 289, 290, -1, -1, -1, 65, 66, + 67, 68, -1, 297, 59, -1, -1, -1, 126, 64, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, 91, 287, 288, 289, + 290, 272, 273, 274, 275, 112, -1, -1, 279, -1, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 123, 300, + 301, 126, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, - 269, -1, 58, 272, 273, 274, 275, 63, -1, -1, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, -1, - 309, 310, 311, 312, 313, 314, 315, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, -1, 309, - 310, 311, 312, 313, 314, 315, -1, 256, 257, 258, - 259, 260, 261, -1, 263, 264, 265, -1, -1, 63, 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, -1, 33, - -1, 300, 36, 37, 38, 13, 40, -1, 42, 43, - 309, 45, 311, 312, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, 59, -1, -1, -1, -1, - 64, 288, -1, -1, 42, -1, -1, 45, 41, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, -1, - 287, 288, 289, 290, -1, 33, 59, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 305, 306, - 307, -1, -1, 310, 82, 281, 313, 314, 315, -1, - -1, 287, 288, 289, 290, -1, 64, -1, 96, 123, - 93, -1, 126, -1, -1, 301, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, - -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 142, -1, -1, 287, 288, 289, - 290, -1, 64, -1, -1, 123, -1, -1, 126, -1, - 41, -1, -1, 44, 304, 305, 306, 307, -1, -1, - 310, -1, -1, 313, 314, 315, -1, 58, 59, 91, - -1, -1, -1, 181, 33, -1, -1, 36, 37, 38, - 188, 40, -1, 42, 43, -1, 45, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, 123, 93, -1, 126, 64, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, -1, -1, 313, - 314, 315, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 91, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, 123, -1, 300, 126, -1, 272, - 273, 274, 275, -1, -1, 309, 279, 311, 312, 257, - 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, - -1, 269, -1, -1, 63, 298, 299, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, 257, 258, 259, 260, 261, - -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, - 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, - 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, 64, -1, 300, -1, - -1, 272, 273, 274, 275, -1, -1, 309, 279, 311, - 312, -1, 287, 288, 289, 290, -1, -1, 257, 258, - 259, 260, 261, 91, 263, 264, 265, 298, 299, -1, - 269, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, 126, 33, - -1, 300, 36, 37, 38, -1, 40, -1, 42, 43, - 309, 45, 311, 312, 287, -1, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, - 64, 25, 26, 306, 307, -1, 41, 310, -1, 44, - 313, 314, 315, 37, -1, -1, -1, -1, -1, 43, - 44, 45, -1, 58, 59, 33, 50, 91, 36, 37, - 38, -1, 40, -1, 42, 43, -1, 45, 62, 63, - 64, 65, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, 64, -1, 93, -1, - -1, -1, 126, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, -1, -1, -1, - -1, -1, -1, 91, 108, 93, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, 257, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, + -1, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, -1, 311, 312, 313, 314, 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, -1, -1, -1, -1, 64, 126, -1, + -1, 269, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + -1, -1, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, -1, 311, 312, 313, 314, 315, 316, 317, + -1, 256, 257, 258, 259, 260, 261, 63, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, + 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, + 295, 296, -1, -1, -1, 33, -1, 302, 36, 37, + 38, -1, 40, -1, 42, 43, 311, 45, 313, 314, + -1, 46, -1, -1, -1, -1, -1, -1, -1, 54, + 287, 59, 289, 290, -1, -1, 64, -1, -1, 41, + -1, -1, 44, -1, -1, 331, 332, 333, -1, 335, + -1, 308, 309, -1, -1, 312, 58, 59, 315, 316, + 317, -1, -1, 91, -1, 33, -1, -1, 36, 37, + 38, 96, 40, -1, 42, 43, 362, 45, -1, -1, + -1, -1, -1, 369, -1, -1, -1, 373, -1, -1, + -1, 93, -1, -1, 119, 123, 64, -1, 126, -1, + 386, 387, 127, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, -1, -1, + -1, -1, -1, 91, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, + -1, -1, -1, -1, 41, 308, 309, 44, -1, 312, + -1, -1, 315, 316, 317, 123, -1, -1, 126, -1, + -1, 58, 59, 91, -1, -1, 63, -1, -1, 33, + -1, -1, 36, 37, 38, -1, 40, -1, 42, 43, + -1, 45, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, 123, 93, -1, 126, -1, + 64, -1, -1, -1, -1, -1, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 91, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, 268, 272, 273, 274, 275, -1, 274, + -1, 279, 280, -1, 282, 283, 284, 285, 286, 123, + -1, -1, 126, 291, 292, 293, 294, 295, 296, -1, + 272, 273, 274, 275, 302, -1, -1, 279, -1, -1, + -1, -1, -1, 311, -1, 313, 314, -1, -1, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 300, 301, + -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + 41, -1, -1, 291, 292, 293, 294, 295, 296, 257, + 258, 259, 260, 261, 302, 263, 264, 265, 59, -1, + -1, 269, -1, 311, -1, 313, 314, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 63, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 289, 290, 300, 167, 91, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, -1, 41, 307, -1, - 44, 310, -1, -1, 313, 314, 315, -1, -1, 193, - -1, -1, -1, -1, 58, 59, -1, 33, -1, 126, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 64, 93, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + -1, -1, 93, -1, 302, 272, 273, 274, 275, -1, + -1, -1, 279, 311, 281, 313, 314, -1, -1, -1, + 287, 288, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, -1, 300, 301, 269, 303, 304, 305, 306, + 307, 308, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 91, 300, 272, 273, 274, - 275, -1, -1, -1, 279, 309, -1, 311, 312, 257, - 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, - -1, 269, -1, 298, 299, -1, -1, -1, -1, -1, - 126, -1, 280, -1, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 41, -1, 300, 44, -1, -1, -1, -1, -1, -1, - -1, 309, -1, 311, 312, -1, 41, 58, 59, 44, - 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, -1, 93, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 300, -1, -1, -1, -1, 93, -1, - -1, -1, 309, -1, 311, 312, -1, 33, -1, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, 64, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 298, 299, -1, -1, -1, -1, - -1, -1, -1, -1, 280, 91, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 33, -1, 300, 36, 37, 38, -1, 40, - -1, 42, 43, 309, 45, 311, 312, -1, -1, -1, - 126, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, -1, -1, 64, -1, -1, 302, 303, 304, 305, - 306, 307, -1, -1, 310, -1, -1, 313, 314, 315, + 294, 295, 296, 289, 290, -1, 33, -1, 302, 36, + 37, 38, -1, 40, -1, 42, 43, 311, 45, 313, + 314, -1, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, 59, -1, -1, -1, -1, 64, -1, -1, + -1, 287, 288, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 305, + 306, 307, 308, 309, 91, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, 64, -1, -1, + 287, 288, 289, 290, -1, -1, 33, -1, -1, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, 126, + 307, 308, 309, -1, 91, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, 272, 273, 274, 275, -1, 33, -1, 279, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 126, + -1, -1, -1, -1, 91, -1, 93, 281, -1, 300, + 301, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - -1, -1, -1, -1, 64, 126, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, 298, 299, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 91, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, 257, 258, 259, 260, 261, 126, 263, 264, 265, - -1, -1, -1, 269, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, -1, 300, -1, 91, -1, -1, -1, - -1, -1, -1, 309, -1, 311, 312, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, -1, -1, -1, -1, 256, 257, 258, 259, 260, - 261, 126, 263, 264, 265, -1, -1, -1, 269, 64, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 91, -1, -1, 300, - -1, -1, -1, -1, -1, -1, -1, -1, 309, -1, - 311, 312, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 33, -1, - 300, 36, 37, 38, -1, 40, -1, 42, 43, 309, - 45, 311, 312, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 280, 91, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, -1, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 126, -1, -1, 41, -1, -1, 44, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 58, 59, -1, 269, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, -1, 41, 300, 93, 44, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 304, 305, 306, 307, 308, 309, -1, -1, 312, 126, + -1, 315, 316, 317, 91, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, - 93, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 41, -1, 300, 44, -1, -1, -1, - -1, -1, -1, -1, 309, -1, 311, 312, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, 126, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 257, 258, 259, 260, 261, 302, 263, 264, 265, -1, + -1, -1, 269, -1, 311, -1, 313, 314, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, + 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, 93, 313, 314, 315, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 91, 33, -1, 63, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, - -1, 298, 299, -1, 301, 302, 303, 304, 305, 306, - 307, -1, -1, 310, -1, -1, 313, 314, 315, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, 41, -1, -1, 44, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, -1, 310, 58, 59, - 313, 314, 315, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, 93, -1, 126, 304, 305, 306, + 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, + 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 91, -1, 33, -1, -1, 36, 37, 38, -1, 40, + 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 64, -1, 126, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 302, -1, -1, 126, -1, -1, -1, -1, + -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, 64, -1, + -1, -1, 302, 272, 273, 274, 275, -1, -1, -1, + 279, 311, 281, 313, 314, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, 91, -1, -1, 269, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, + 126, 302, 36, 37, 38, -1, 40, 41, 42, 43, + 311, 45, 313, 314, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 64, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, 91, -1, 33, + -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, + 311, 45, 313, 314, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, 29, + 64, -1, 126, -1, -1, -1, -1, -1, 41, -1, + 40, 44, -1, -1, -1, -1, 46, 47, 48, -1, + -1, -1, 52, 53, -1, 58, 59, 91, -1, -1, + 63, -1, -1, -1, -1, 65, 66, 67, 68, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 41, -1, -1, 44, -1, + 93, -1, 126, -1, 280, -1, 282, 283, 284, 285, + 286, 41, -1, 59, 44, 291, 292, 293, 294, 295, + 296, -1, 112, -1, -1, -1, 302, -1, 58, 59, + -1, -1, -1, 63, -1, 311, -1, 313, 314, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, -1, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, + -1, -1, -1, 93, -1, 41, -1, -1, 44, -1, + -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, 176, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, 203, -1, -1, -1, 93, 302, -1, + -1, -1, -1, -1, -1, 41, -1, 311, 44, 313, + 314, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, -1, -1, 93, 302, 272, + 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, + 314, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, + 58, 59, 315, 316, 317, 63, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + 41, 281, -1, 44, 300, 93, -1, 287, 288, 289, + 290, -1, -1, -1, -1, -1, -1, 58, 59, -1, + 300, 301, 63, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 41, 93, -1, 44, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, 58, + 59, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, + 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, + 316, 317, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, 303, 304, 305, 306, 307, 41, -1, - 310, 44, 93, 313, 314, 315, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - 93, -1, 287, 288, 289, 290, -1, -1, -1, 41, - -1, -1, 44, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, 58, 59, 313, 314, - 315, 63, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, 93, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 288, 289, 290, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 41, -1, -1, 44, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, -1, -1, 310, - 58, 59, 313, 314, 315, 63, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, 93, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 41, -1, 310, - -1, -1, 313, 314, 315, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, 298, 299, -1, 301, 302, - 303, 304, 305, 306, 307, -1, 41, 310, -1, 93, - 313, 314, 315, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, 93, + 279, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 300, 301, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 93, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, 63, 41, -1, -1, 44, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, 58, + 59, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, 93, -1, -1, -1, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, + 315, 316, 317, 41, 93, -1, 44, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + 58, 59, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, 272, 273, + 274, 275, 41, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, 58, + 59, -1, -1, -1, 63, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, + -1, 315, 316, 317, 272, 273, 274, 275, 41, -1, + -1, 279, -1, 281, 93, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, 58, 59, -1, -1, -1, + 63, -1, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 41, -1, -1, -1, 298, 299, 93, 301, - 302, 303, 304, 305, 306, 307, -1, -1, 310, 58, - 59, 313, 314, 315, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 300, 301, + 279, 303, 304, 305, 306, 307, 308, 309, -1, 41, + 312, -1, 44, 315, 316, 317, -1, -1, -1, -1, + -1, 300, 301, -1, 303, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 41, -1, 93, 44, - 298, 299, -1, 301, 302, 303, 304, 305, 306, 307, - -1, -1, 310, 58, 59, 313, 314, 315, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 41, -1, -1, 44, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, -1, -1, 310, 58, 59, 313, - 314, 315, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, -1, 310, -1, -1, 313, 314, - 315, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, 307, -1, - -1, 310, -1, -1, 313, 314, 315, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, 310, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, 41, 93, -1, - 44, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 279, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 300, 301, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - 41, -1, -1, 44, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 41, 281, -1, 44, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, 58, 59, + -1, 300, 301, 63, 303, 304, 305, 306, 307, 308, + 309, -1, -1, 312, -1, -1, 315, 316, 317, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 33, -1, 312, + -1, -1, 315, 316, 317, 41, -1, -1, 41, 45, + -1, 44, 48, -1, -1, 51, 93, -1, -1, 55, + 56, 57, 58, 59, -1, 58, 59, 63, 64, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 41, 281, + -1, 44, -1, -1, -1, 287, 288, 289, 290, -1, + 93, -1, 98, -1, -1, 58, 59, -1, 300, 301, + 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, + 312, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 58, 59, -1, -1, -1, 63, -1, + 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, -1, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, 93, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, -1, 298, 299, -1, 301, 302, 303, 304, - 305, 306, 307, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + -1, 187, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, + -1, -1, 312, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, -1, -1, -1, 272, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 41, 281, -1, + 44, -1, 93, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 58, 59, -1, 300, 301, 305, + 303, 304, 305, 306, 307, 308, 309, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, -1, 93, + -1, 58, 59, -1, -1, -1, 63, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, 308, 309, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, 307, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, + -1, -1, -1, 287, 288, 289, 290, 58, -1, -1, + -1, 93, 63, -1, -1, -1, 300, 301, -1, 303, + 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 306, 307, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 41, 298, 299, 44, 301, 302, 303, 304, - 305, 306, 307, -1, 272, 273, 274, 275, -1, 58, - 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 41, - 298, 299, 44, 301, 302, 303, 304, 305, 306, 307, - 41, -1, -1, 44, 93, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, - -1, 93, 287, 288, 289, 290, 41, -1, -1, 44, - -1, -1, 93, 298, 299, -1, 301, 302, 303, 304, - 305, 306, -1, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, 290, 41, 93, -1, - 44, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, 306, -1, 58, 59, -1, -1, -1, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, 93, -1, -1, - 279, -1, 281, -1, -1, -1, -1, 93, 287, 288, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, - 299, -1, 301, 302, 303, 304, 305, 306, -1, -1, - 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, - -1, 272, 273, 274, 275, 287, 288, -1, 279, -1, - 281, -1, -1, -1, -1, -1, 298, 299, -1, 301, - 302, 303, 304, 305, -1, -1, -1, 298, 299, -1, - 301, 302, 303, 304, 305, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, - -1, -1, 287, 288, -1, -1, -1, -1, 41, -1, - -1, 44, -1, 298, 299, -1, 301, 302, 303, 304, - 305, -1, -1, -1, -1, 58, 59, 93, -1, -1, - 63, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, - -1, -1, -1, 287, 288, -1, -1, -1, -1, -1, - 93, -1, -1, -1, 298, 299, -1, 301, 302, 303, - 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, 287, 288, 279, -1, 281, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 305, - -1, 41, 298, 299, 44, 301, 302, 303, 304, 305, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 30, -1, -1, 63, -1, -1, -1, -1, 38, -1, - -1, -1, 42, -1, -1, 45, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, -1, -1, -1, - 60, 61, -1, 93, -1, -1, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 298, 299, -1, 301, 302, 303, 304, 272, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, -1, -1, 41, -1, -1, 44, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, -1, 93, -1, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, -1, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, 93, -1, -1, -1, -1, + 287, 288, 289, 290, -1, 93, -1, 58, 59, -1, + -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, -1, -1, + 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, -1, 290, -1, + 93, 41, 58, 59, 44, -1, -1, 63, 300, 301, + -1, 303, 304, 305, 306, 307, 308, -1, 58, 59, + 281, -1, -1, 63, -1, -1, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 303, 304, 305, 306, 307, 308, 309, -1, + -1, 312, -1, 93, 315, 316, 317, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, -1, -1, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, -1, 303, 304, + 305, 306, 307, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, 272, 273, 274, 275, -1, 287, + 288, 279, -1, 281, 93, -1, 58, 59, -1, 287, + 288, 63, 300, 301, -1, 303, 304, 305, 306, 307, + -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 93, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, -1, 303, 304, 305, 306, 307, -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 298, 299, -1, 301, 302, - 303, -1, -1, -1, -1, -1, -1, -1, 178, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, + 303, 304, 305, 306, 307, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, 300, 301, -1, 303, 304, 305, + 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, -1, 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, -1, 303, 304, 305, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, -1, -1, -1, -1, -1, -1, 258, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, 299, - -1, 301, 302, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, + -1, -1, -1, -1, -1, -1, -1, -1, 300, 301, + -1, 303, 304, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 315 +#define YYMAXTOKEN 317 #if YYDEBUG static char *yyname[] = { "end-of-file",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,0,0,0,0,0,0,0, @@ -1140,9 +1143,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR","ANDAND","BITOROP", -"BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC", -"POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", +"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1193,18 +1196,25 @@ static char *yyrule[] = { "label : LABEL", "decl : format", "decl : subrout", +"decl : mysubrout", "decl : package", "decl : use", "format : FORMAT startformsub formname block", "formname : WORD", "formname :", -"subrout : SUB startsub subname proto subbody", +"mysubrout : MYSUB startsub subname proto subattrlist subbody", +"subrout : SUB startsub subname proto subattrlist subbody", "startsub :", "startanonsub :", "startformsub :", "subname : WORD", "proto :", "proto : THING", +"subattrlist :", +"subattrlist : COLONATTR THING", +"subattrlist : COLONATTR", +"myattrlist : COLONATTR THING", +"myattrlist : COLONATTR", "subbody : block", "subbody : ';'", "package : PACKAGE WORD ';'", @@ -1263,14 +1273,15 @@ static char *yyrule[] = { "term : term POSTDEC", "term : PREINC term", "term : PREDEC term", -"term : local term", +"term : myattrterm", +"term : LOCAL term", "term : '(' expr ')'", "term : '(' ')'", "term : '[' expr ']'", "term : '[' ']'", "term : HASHBRACK expr ';' '}'", "term : HASHBRACK ';' '}'", -"term : ANONSUB startanonsub proto block", +"term : ANONSUB startanonsub proto subattrlist block", "term : scalar", "term : star", "term : hsh", @@ -1308,13 +1319,18 @@ static char *yyrule[] = { "term : PMFUNC '(' term ',' term ')'", "term : WORD", "term : listop", +"myattrterm : MY myterm myattrlist", +"myattrterm : MY myterm", +"myterm : '(' expr ')'", +"myterm : '(' ')'", +"myterm : scalar", +"myterm : hsh", +"myterm : ary", "listexpr :", "listexpr : argexpr", "listexprcom :", "listexprcom : expr", "listexprcom : expr ','", -"local : LOCAL", -"local : MY", "my_scalar : scalar", "amper : '&' indirob", "scalar : '$' indirob", @@ -1342,26 +1358,22 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 666 "perly.y" +#line 726 "perly.y" /* PROGRAM */ -#line 1427 "perly.c" + +/* more stuff added to make perly_c.diff easier to apply */ + +#ifdef yyparse +#undef yyparse +#endif +#define yyparse() Perl_yyparse(pTHX) + +#line 1372 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab - -struct ysv { - short* yyss; - YYSTYPE* yyvs; - int oldyydebug; - int oldyynerrs; - int oldyyerrflag; - int oldyychar; - YYSTYPE oldyyval; - YYSTYPE oldyylval; -}; - int -Perl_yyparse(pTHX) +yyparse() { register int yym, yyn, yystate; register short *yyssp; @@ -1372,11 +1384,6 @@ Perl_yyparse(pTHX) int retval = 0; #if YYDEBUG register char *yys; -#ifndef __cplusplus -# ifndef getenv - extern char *getenv(); -# endif -#endif #endif struct ysv *ysave; @@ -1388,7 +1395,7 @@ Perl_yyparse(pTHX) ysave->oldyychar = yychar; ysave->oldyyval = yyval; ysave->oldyylval = yylval; - + #if YYDEBUG if (yys = getenv("YYDEBUG")) { @@ -1428,7 +1435,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - printf("yydebug: state %d, reading %d (%s)\n", yystate, + PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1450,10 +1457,8 @@ yyloop: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1494,8 +1499,8 @@ yyinrecovery: #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery shifting to state %d\n", - *yyssp, yytable[yyn]); + "yydebug: state %d, error recovery shifting to state %d\n", + *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -1506,10 +1511,8 @@ yyinrecovery: int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, - yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, - yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; @@ -1523,9 +1526,8 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, - "yydebug: error recovery discarding state %d\n", - *yyssp); + PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; @@ -1542,9 +1544,8 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, - "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); + PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); } #endif yychar = (-1); @@ -1561,7 +1562,7 @@ yyreduce: switch (yyn) { case 1: -#line 101 "perly.y" +#line 125 "perly.y" { #if defined(YYDEBUG) && defined(DEBUGGING) yydebug = (PL_debug & 1); @@ -1570,50 +1571,50 @@ case 1: } break; case 2: -#line 108 "perly.y" +#line 132 "perly.y" { newPROG(yyvsp[0].opval); } break; case 3: -#line 112 "perly.y" +#line 136 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 4: -#line 118 "perly.y" +#line 142 "perly.y" { yyval.ival = block_start(TRUE); } break; case 5: -#line 122 "perly.y" +#line 146 "perly.y" { if (PL_copline > (line_t)yyvsp[-3].ival) PL_copline = yyvsp[-3].ival; yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); } break; case 6: -#line 128 "perly.y" +#line 152 "perly.y" { yyval.ival = block_start(FALSE); } break; case 7: -#line 132 "perly.y" +#line 156 "perly.y" { yyval.opval = Nullop; } break; case 8: -#line 134 "perly.y" +#line 158 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 9: -#line 136 "perly.y" +#line 160 "perly.y" { yyval.opval = append_list(OP_LINESEQ, (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval); PL_pad_reset_pending = TRUE; if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; } break; case 10: -#line 143 "perly.y" +#line 167 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); } break; case 12: -#line 146 "perly.y" +#line 170 "perly.y" { if (yyvsp[-1].pval != Nullch) { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0)); } @@ -1624,75 +1625,75 @@ case 12: PL_expect = XSTATE; } break; case 13: -#line 155 "perly.y" +#line 179 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval); PL_expect = XSTATE; } break; case 14: -#line 160 "perly.y" +#line 184 "perly.y" { yyval.opval = Nullop; } break; case 15: -#line 162 "perly.y" +#line 186 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 16: -#line 164 "perly.y" +#line 188 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 17: -#line 166 "perly.y" +#line 190 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 18: -#line 168 "perly.y" +#line 192 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); } break; case 19: -#line 170 "perly.y" +#line 194 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 172 "perly.y" +#line 196 "perly.y" { yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 177 "perly.y" +#line 201 "perly.y" { yyval.opval = Nullop; } break; case 22: -#line 179 "perly.y" +#line 203 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 23: -#line 181 "perly.y" +#line 205 "perly.y" { PL_copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); PL_hints |= HINT_BLOCK_SCOPE; } break; case 24: -#line 187 "perly.y" +#line 211 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 25: -#line 191 "perly.y" +#line 215 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; case 26: -#line 197 "perly.y" +#line 221 "perly.y" { yyval.opval = Nullop; } break; case 27: -#line 199 "perly.y" +#line 223 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 28: -#line 203 "perly.y" +#line 227 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1700,7 +1701,7 @@ case 28: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 29: -#line 209 "perly.y" +#line 233 "perly.y" { PL_copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, @@ -1708,23 +1709,23 @@ case 29: yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; case 30: -#line 215 "perly.y" +#line 239 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 31: -#line 218 "perly.y" +#line 242 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 32: -#line 222 "perly.y" +#line 246 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 33: -#line 226 "perly.y" +#line 250 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1734,427 +1735,459 @@ case 33: yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; case 34: -#line 234 "perly.y" +#line 258 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 35: -#line 240 "perly.y" +#line 264 "perly.y" { yyval.opval = Nullop; } break; case 37: -#line 245 "perly.y" +#line 269 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; case 39: -#line 250 "perly.y" +#line 274 "perly.y" { yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 254 "perly.y" +#line 278 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 258 "perly.y" +#line 282 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 262 "perly.y" +#line 286 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 266 "perly.y" +#line 290 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 44: -#line 270 "perly.y" +#line 294 "perly.y" { yyval.pval = Nullch; } break; case 46: -#line 275 "perly.y" +#line 299 "perly.y" { yyval.ival = 0; } break; case 47: -#line 277 "perly.y" +#line 301 "perly.y" { yyval.ival = 0; } break; case 48: -#line 279 "perly.y" +#line 303 "perly.y" { yyval.ival = 0; } break; case 49: -#line 281 "perly.y" +#line 305 "perly.y" { yyval.ival = 0; } break; case 50: -#line 285 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 307 "perly.y" +{ yyval.ival = 0; } break; case 51: -#line 288 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 311 "perly.y" +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 52: -#line 289 "perly.y" -{ yyval.opval = Nullop; } +#line 314 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 53: -#line 293 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 315 "perly.y" +{ yyval.opval = Nullop; } break; case 54: -#line 297 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 319 "perly.y" +{ newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 55: -#line 301 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 323 "perly.y" +{ newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 56: -#line 305 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 327 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 57: -#line 308 "perly.y" +#line 331 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +break; +case 58: +#line 335 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 59: +#line 338 "perly.y" { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvSPECIAL_on(PL_compcv); yyval.opval = yyvsp[0].opval; } break; -case 58: -#line 316 "perly.y" +case 60: +#line 346 "perly.y" { yyval.opval = Nullop; } break; -case 60: -#line 320 "perly.y" +case 62: +#line 351 "perly.y" +{ yyval.opval = Nullop; } +break; +case 63: +#line 353 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 64: +#line 355 "perly.y" +{ yyval.opval = Nullop; } +break; +case 65: +#line 359 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 61: -#line 321 "perly.y" +case 66: +#line 361 "perly.y" +{ yyval.opval = Nullop; } +break; +case 67: +#line 364 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 68: +#line 365 "perly.y" { yyval.opval = Nullop; PL_expect = XSTATE; } break; -case 62: -#line 325 "perly.y" +case 69: +#line 369 "perly.y" { package(yyvsp[-1].opval); } break; -case 63: -#line 327 "perly.y" +case 70: +#line 371 "perly.y" { package(Nullop); } break; -case 64: -#line 331 "perly.y" +case 71: +#line 375 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; -case 65: -#line 333 "perly.y" +case 72: +#line 377 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 66: -#line 337 "perly.y" +case 73: +#line 381 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 67: -#line 339 "perly.y" +case 74: +#line 383 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 69: -#line 344 "perly.y" +case 76: +#line 388 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 70: -#line 346 "perly.y" +case 77: +#line 390 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 72: -#line 351 "perly.y" +case 79: +#line 395 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 73: -#line 354 "perly.y" +case 80: +#line 398 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 74: -#line 357 "perly.y" +case 81: +#line 401 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 75: -#line 362 "perly.y" +case 82: +#line 406 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 76: -#line 366 "perly.y" +case 83: +#line 410 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 77: -#line 371 "perly.y" +case 84: +#line 415 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 78: -#line 376 "perly.y" +case 85: +#line 420 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 378 "perly.y" +case 86: +#line 422 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 80: -#line 380 "perly.y" -{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } +case 87: +#line 424 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } break; -case 81: -#line 382 "perly.y" +case 88: +#line 426 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 84: -#line 392 "perly.y" +case 91: +#line 436 "perly.y" { yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; -case 85: -#line 394 "perly.y" +case 92: +#line 438 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; -case 86: -#line 396 "perly.y" +case 93: +#line 440 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 87: -#line 400 "perly.y" +case 94: +#line 444 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 88: -#line 404 "perly.y" +case 95: +#line 448 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 89: -#line 407 "perly.y" +case 96: +#line 451 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 90: -#line 412 "perly.y" +case 97: +#line 456 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 91: -#line 417 "perly.y" +case 98: +#line 461 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 92: -#line 420 "perly.y" +case 99: +#line 464 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 93: -#line 425 "perly.y" +case 100: +#line 469 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 94: -#line 429 "perly.y" +case 101: +#line 473 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 95: -#line 435 "perly.y" +case 102: +#line 479 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 96: -#line 437 "perly.y" +case 103: +#line 481 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 97: -#line 439 "perly.y" +case 104: +#line 483 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 98: -#line 443 "perly.y" +case 105: +#line 487 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 99: -#line 445 "perly.y" +case 106: +#line 489 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 100: -#line 447 "perly.y" +case 107: +#line 491 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 101: -#line 449 "perly.y" +case 108: +#line 493 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 102: -#line 451 "perly.y" +case 109: +#line 495 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 103: -#line 453 "perly.y" +case 110: +#line 497 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 104: -#line 455 "perly.y" +case 111: +#line 499 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; -case 105: -#line 457 "perly.y" +case 112: +#line 501 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 106: -#line 459 "perly.y" +case 113: +#line 503 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 107: -#line 461 "perly.y" +case 114: +#line 505 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 108: -#line 463 "perly.y" +case 115: +#line 507 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 109: -#line 466 "perly.y" +case 116: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; -case 110: -#line 468 "perly.y" +case 117: +#line 512 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 111: -#line 470 "perly.y" +case 118: +#line 514 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 112: -#line 472 "perly.y" +case 119: +#line 516 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; -case 113: -#line 474 "perly.y" +case 120: +#line 518 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; -case 114: -#line 476 "perly.y" +case 121: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 115: -#line 479 "perly.y" +case 122: +#line 523 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 116: -#line 482 "perly.y" +case 123: +#line 526 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 117: -#line 485 "perly.y" +case 124: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 118: -#line 488 "perly.y" +case 125: +#line 532 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 126: +#line 534 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; -case 119: -#line 490 "perly.y" +case 127: +#line 536 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; -case 120: -#line 492 "perly.y" +case 128: +#line 538 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; -case 121: -#line 494 "perly.y" +case 129: +#line 540 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; -case 122: -#line 496 "perly.y" +case 130: +#line 542 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; -case 123: -#line 498 "perly.y" +case 131: +#line 544 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; -case 124: -#line 500 "perly.y" +case 132: +#line 546 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; -case 125: -#line 502 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +case 133: +#line 548 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; -case 126: -#line 504 "perly.y" +case 134: +#line 550 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 127: -#line 506 "perly.y" +case 135: +#line 552 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 128: -#line 508 "perly.y" +case 136: +#line 554 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 129: -#line 510 "perly.y" +case 137: +#line 556 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 130: -#line 512 "perly.y" +case 138: +#line 558 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; -case 131: -#line 514 "perly.y" +case 139: +#line 560 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 132: -#line 516 "perly.y" +case 140: +#line 562 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 133: -#line 518 "perly.y" +case 141: +#line 564 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 134: -#line 520 "perly.y" +case 142: +#line 566 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 135: -#line 526 "perly.y" +case 143: +#line 572 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2162,38 +2195,38 @@ case 135: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 136: -#line 533 "perly.y" +case 144: +#line 579 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 137: -#line 535 "perly.y" +case 145: +#line 581 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 138: -#line 537 "perly.y" +case 146: +#line 583 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 139: -#line 539 "perly.y" +case 147: +#line 585 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 140: -#line 542 "perly.y" +case 148: +#line 588 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 141: -#line 545 "perly.y" +case 149: +#line 591 "perly.y" { yyval.opval = dofile(yyvsp[0].opval); } break; -case 142: -#line 547 "perly.y" +case 150: +#line 593 "perly.y" { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } break; -case 143: -#line 549 "perly.y" +case 151: +#line 595 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2202,8 +2235,8 @@ case 143: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 144: -#line 557 "perly.y" +case 152: +#line 603 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2213,151 +2246,171 @@ case 144: scalar(yyvsp[-3].opval) )))); dep();} break; -case 145: -#line 566 "perly.y" +case 153: +#line 612 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 146: -#line 570 "perly.y" +case 154: +#line 616 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 147: -#line 575 "perly.y" +case 155: +#line 621 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 148: -#line 578 "perly.y" +case 156: +#line 624 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 149: -#line 580 "perly.y" +case 157: +#line 626 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 150: -#line 582 "perly.y" +case 158: +#line 628 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 151: -#line 584 "perly.y" +case 159: +#line 630 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 152: -#line 586 "perly.y" +case 160: +#line 632 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 153: -#line 588 "perly.y" +case 161: +#line 634 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 154: -#line 591 "perly.y" +case 162: +#line 637 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; -case 155: -#line 593 "perly.y" +case 163: +#line 639 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, 0); } break; -case 156: -#line 595 "perly.y" +case 164: +#line 641 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[0].opval)); } break; -case 157: -#line 598 "perly.y" +case 165: +#line 644 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; -case 158: -#line 600 "perly.y" +case 166: +#line 646 "perly.y" { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 159: -#line 602 "perly.y" +case 167: +#line 648 "perly.y" { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 160: -#line 604 "perly.y" +case 168: +#line 650 "perly.y" { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; -case 163: -#line 610 "perly.y" -{ yyval.opval = Nullop; } +case 171: +#line 656 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; -case 164: -#line 612 "perly.y" +case 172: +#line 658 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +break; +case 173: +#line 662 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } +break; +case 174: +#line 664 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } +break; +case 175: +#line 666 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 165: -#line 616 "perly.y" +case 176: +#line 668 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 177: +#line 670 "perly.y" +{ yyval.opval = yyvsp[0].opval; } +break; +case 178: +#line 674 "perly.y" { yyval.opval = Nullop; } break; -case 166: -#line 618 "perly.y" +case 179: +#line 676 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 167: -#line 620 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 180: +#line 680 "perly.y" +{ yyval.opval = Nullop; } break; -case 168: -#line 623 "perly.y" -{ yyval.ival = 0; } +case 181: +#line 682 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; -case 169: -#line 624 "perly.y" -{ yyval.ival = 1; } +case 182: +#line 684 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; -case 170: -#line 628 "perly.y" +case 183: +#line 688 "perly.y" { PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; -case 171: -#line 632 "perly.y" +case 184: +#line 692 "perly.y" { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; -case 172: -#line 636 "perly.y" +case 185: +#line 696 "perly.y" { yyval.opval = newSVREF(yyvsp[0].opval); } break; -case 173: -#line 640 "perly.y" +case 186: +#line 700 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 174: -#line 644 "perly.y" +case 187: +#line 704 "perly.y" { yyval.opval = newHVREF(yyvsp[0].opval); } break; -case 175: -#line 648 "perly.y" +case 188: +#line 708 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; -case 176: -#line 652 "perly.y" +case 189: +#line 712 "perly.y" { yyval.opval = newGVREF(0,yyvsp[0].opval); } break; -case 177: -#line 656 "perly.y" +case 190: +#line 716 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 178: -#line 658 "perly.y" +case 191: +#line 718 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; -case 179: -#line 660 "perly.y" +case 192: +#line 720 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 180: -#line 663 "perly.y" +case 193: +#line 723 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2365 "perly.c" +#line 2414 "perly.c" } yyssp -= yym; yystate = *yyssp; @@ -2368,8 +2421,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state 0 to state %d\n", - YYFINAL); + "yydebug: after reduction, shifting from state 0 to state %d\n", + YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; @@ -2399,8 +2452,8 @@ break; #if YYDEBUG if (yydebug) PerlIO_printf(Perl_debug_log, - "yydebug: after reduction, shifting from state %d to state %d\n", - *yyssp, yystate); + "yydebug: after reduction, shifting from state %d to state %d\n", + *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { @@ -2411,10 +2464,8 @@ break; int yyps_index = (yyssp - yyss); int yypv_index = (yyvsp - yyvs); yystacksize += YYSTACKSIZE; - ysave->yyvs = yyvs = - (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); - ysave->yyss = yyss = - (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); + ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); if (!yyvs || !yyss) goto yyoverflow; yyssp = yyss + yyps_index; diff --git a/vms/perly_h.vms b/vms/perly_h.vms index c750217d8f..ff89cfffbf 100644 --- a/vms/perly_h.vms +++ b/vms/perly_h.vms @@ -40,24 +40,27 @@ #define NOAMP 294 #define LOCAL 295 #define MY 296 -#define OROP 297 -#define ANDOP 298 -#define NOTOP 299 -#define ASSIGNOP 300 -#define OROR 301 -#define ANDAND 302 -#define BITOROP 303 -#define BITANDOP 304 -#define SHIFTOP 305 -#define MATCHOP 306 -#define UMINUS 307 -#define REFGEN 308 -#define POWOP 309 -#define PREINC 310 -#define PREDEC 311 -#define POSTINC 312 -#define POSTDEC 313 -#define ARROW 314 +#define MYSUB 297 +#define COLONATTR 298 +#define PREC_LOW 299 +#define OROP 300 +#define ANDOP 301 +#define NOTOP 302 +#define ASSIGNOP 303 +#define OROR 304 +#define ANDAND 305 +#define BITOROP 306 +#define BITANDOP 307 +#define SHIFTOP 308 +#define MATCHOP 309 +#define UMINUS 310 +#define REFGEN 311 +#define POWOP 312 +#define PREINC 313 +#define PREDEC 314 +#define POSTINC 315 +#define POSTDEC 316 +#define ARROW 317 #endif /* PERL_CORE */ typedef union { diff --git a/warning.h b/warnings.h index 7395a96abe..a5d50bf859 100644 --- a/warning.h +++ b/warnings.h @@ -1,5 +1,5 @@ /* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - This file is built by warning.pl + This file is built by warnings.pl Any changes made here will be lost! */ @@ -17,8 +17,8 @@ #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) #define WARN_STD Nullsv -#define WARN_ALL (&PL_sv_yes) /* use warning 'all' */ -#define WARN_NONE (&PL_sv_no) /* no warning 'all' */ +#define WARN_ALL (&PL_sv_yes) /* use warnings 'all' */ +#define WARN_NONE (&PL_sv_no) /* no warnings 'all' */ #define specialWARN(x) ((x) == WARN_STD || (x) == WARN_ALL || \ (x) == WARN_NONE) @@ -102,5 +102,5 @@ #define WARN_ALLstring "\125\125\125\125\125\125\125\125\125" #define WARN_NONEstring "\0\0\0\0\0\0\0\0\0" -/* end of file warning.h */ +/* end of file warnings.h */ diff --git a/warning.pl b/warnings.pl index 593b5d7e7c..9ff4197612 100644 --- a/warning.pl +++ b/warnings.pl @@ -125,14 +125,14 @@ sub mkHex ########################################################################### -#unlink "warning.h"; -#unlink "lib/warning.pm"; -open(WARN, ">warning.h") || die "Can't create warning.h: $!\n"; -open(PM, ">lib/warning.pm") || die "Can't create lib/warning.pm: $!\n"; +#unlink "warnings.h"; +#unlink "lib/warnings.pm"; +open(WARN, ">warnings.h") || die "Can't create warnings.h: $!\n"; +open(PM, ">lib/warnings.pm") || die "Can't create lib/warnings.pm: $!\n"; print WARN <<'EOM' ; /* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - This file is built by warning.pl + This file is built by warnings.pl Any changes made here will be lost! */ @@ -150,8 +150,8 @@ print WARN <<'EOM' ; #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) #define WARN_STD Nullsv -#define WARN_ALL (&PL_sv_yes) /* use warning 'all' */ -#define WARN_NONE (&PL_sv_no) /* no warning 'all' */ +#define WARN_ALL (&PL_sv_yes) /* use warnings 'all' */ +#define WARN_NONE (&PL_sv_no) /* no warnings 'all' */ #define specialWARN(x) ((x) == WARN_STD || (x) == WARN_ALL || \ (x) == WARN_NONE) @@ -216,7 +216,7 @@ print WARN tab(5, '#define WARN_NONEstring'), '"', ('\0' x $warn_size) , "\"\n" print WARN <<'EOM'; -/* end of file warning.h */ +/* end of file warnings.h */ EOM @@ -263,23 +263,23 @@ close PM ; __END__ -# This file was created by warning.pl +# This file was created by warnings.pl # Any changes made here will be lost. # -package warning; +package warnings; =head1 NAME -warning - Perl pragma to control optional warnings +warnings - Perl pragma to control optional warnings =head1 SYNOPSIS - use warning; - no warning; + use warnings; + no warnings; - use warning "all"; - no warning "all"; + use warnings "all"; + no warnings "all"; =head1 DESCRIPTION @@ -315,30 +315,12 @@ sub bits { sub import { shift; - $^B |= bits(@_ ? @_ : 'all') ; + ${^Warnings} |= bits(@_ ? @_ : 'all') ; } sub unimport { shift; - $^B &= ~ bits(@_ ? @_ : 'all') ; -} - - -sub make_fatal -{ - my $self = shift ; - my $bitmask = $self->bits(@_) ; - $SIG{__WARN__} = - sub - { - die @_ if $^B & $bitmask ; - warn @_ - } ; -} - -sub bitmask -{ - return $^B ; + ${^Warnings} &= ~ bits(@_ ? @_ : 'all') ; } sub enabled @@ -346,7 +328,7 @@ sub enabled my $string = shift ; return 1 - if $bits{$string} && $^B & $bits{$string} ; + if $bits{$string} && ${^Warnings} & $bits{$string} ; return 0 ; } diff --git a/xsutils.c b/xsutils.c new file mode 100644 index 0000000000..14f9d0f185 --- /dev/null +++ b/xsutils.c @@ -0,0 +1,298 @@ +#include "EXTERN.h" +#define PERL_IN_XSUTILS_C +#include "perl.h" + +/* + * Contributed by Spider Boardman (spider.boardman@orb.nashua.nh.us). + */ + +STATIC int +S_modify_SV_attributes(pTHX_ SV *sv, SV **retlist, SV **attrlist, int numattrs) +{ + SV *attr; + char *name; + STRLEN len; + bool negated; + int nret; + + for (nret = 0 ; numattrs && (attr = *attrlist++); numattrs--) { + name = SvPV(attr, len); + if (negated = (*name == '-')) { + name++; + len--; + } + switch (SvTYPE(sv)) { + case SVt_PVCV: + switch ((int)len) { + case 6: + switch (*name) { + case 'l': +#ifdef CVf_LVALUE + if (strEQ(name, "lvalue")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_LVALUE; + else + CvFLAGS((CV*)sv) |= CVf_LVALUE; + continue; + } +#endif /* defined CVf_LVALUE */ + if (strEQ(name, "locked")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_LOCKED; + else + CvFLAGS((CV*)sv) |= CVf_LOCKED; + continue; + } + break; + case 'm': + if (strEQ(name, "method")) { + if (negated) + CvFLAGS((CV*)sv) &= ~CVf_METHOD; + else + CvFLAGS((CV*)sv) |= CVf_METHOD; + continue; + } + break; + } + break; + } + break; + default: + /* nothing, yet */ + break; + } + /* anything recognized had a 'continue' above */ + *retlist++ = attr; + nret++; + } + + return nret; +} + + +/* package attributes; */ +void XS_attributes__warn_reserved(pTHXo_ CV *cv); +void XS_attributes_reftype(pTHXo_ CV *cv); +void XS_attributes__modify_attrs(pTHXo_ CV *cv); +void XS_attributes__guess_stash(pTHXo_ CV *cv); +void XS_attributes__fetch_attrs(pTHXo_ CV *cv); +void XS_attributes_bootstrap(pTHXo_ CV *cv); + + +/* + * Note that only ${pkg}::bootstrap definitions should go here. + * This helps keep down the start-up time, which is especially + * relevant for users who don't invoke any features which are + * (partially) implemented here. + * + * The various bootstrap definitions can take care of doing + * package-specific newXS() calls. Since the layout of the + * bundled lib/*.pm files is in a version-specific directory, + * version checks in these bootstrap calls are optional. + */ + +void +Perl_boot_core_xsutils(pTHX) +{ + char *file = __FILE__; + + newXS("attributes::bootstrap", XS_attributes_bootstrap, file); +} + +#ifdef PERL_OBJECT +#define NO_XSLOCKS +#endif /* PERL_OBJECT */ + +#include "XSUB.h" + +/* package attributes; */ + +XS(XS_attributes_bootstrap) +{ + dXSARGS; + char *file = __FILE__; + + newXSproto("attributes::_warn_reserved", XS_attributes__warn_reserved, file, ""); + newXS("attributes::_modify_attrs", XS_attributes__modify_attrs, file); + newXSproto("attributes::_guess_stash", XS_attributes__guess_stash, file, "$"); + newXSproto("attributes::_fetch_attrs", XS_attributes__fetch_attrs, file, "$"); + newXSproto("attributes::reftype", XS_attributes_reftype, file, "$"); + + XSRETURN(0); +} + +XS(XS_attributes__modify_attrs) +{ + dXSARGS; + SV *rv, *sv; + + if (items < 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_modify_attrs $reference, @attributes"); + } + + rv = ST(0); + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + if (items > 1) + XSRETURN(modify_SV_attributes(sv, &ST(0), &ST(1), items-1)); + + XSRETURN(0); +} + +XS(XS_attributes__fetch_attrs) +{ + dXSARGS; + SV *rv, *sv; + cv_flags_t cvflags; + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_fetch_attrs $reference"); + } + + rv = ST(0); + SP -= items; + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + + switch (SvTYPE(sv)) { + case SVt_PVCV: + cvflags = CvFLAGS((CV*)sv); + if (cvflags & CVf_LOCKED) + XPUSHs(sv_2mortal(newSVpvn("locked", 6))); +#ifdef CVf_LVALUE + if (cvflags & CVf_LVALUE) + XPUSHs(sv_2mortal(newSVpvn("lvalue", 6))); +#endif + if (cvflags & CVf_METHOD) + XPUSHs(sv_2mortal(newSVpvn("method", 6))); + break; + default: + break; + } + + PUTBACK; +} + +XS(XS_attributes__guess_stash) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::_guess_stash $reference"); + } + + rv = ST(0); + ST(0) = TARG; + if (!(SvOK(rv) && SvROK(rv))) + goto usage; + sv = SvRV(rv); + + if (SvOBJECT(sv)) + sv_setpv(TARG, HvNAME(SvSTASH(sv))); +#if 0 /* this was probably a bad idea */ + else if (SvPADMY(sv)) + sv_setsv(TARG, &PL_sv_no); /* unblessed lexical */ +#endif + else { + HV *stash = Nullhv; + switch (SvTYPE(sv)) { + case SVt_PVCV: + if (CvGV(sv) && isGV(CvGV(sv)) && GvSTASH(CvGV(sv)) && + HvNAME(GvSTASH(CvGV(sv)))) + stash = GvSTASH(CvGV(sv)); + else if (/* !CvANON(sv) && */ CvSTASH(sv) && HvNAME(CvSTASH(sv))) + stash = CvSTASH(sv); + break; + case SVt_PVMG: + if (!(SvFAKE(sv) && SvTIED_mg(sv, '*'))) + break; + /*FALLTHROUGH*/ + case SVt_PVGV: + if (GvGP(sv) && GvESTASH((GV*)sv) && HvNAME(GvESTASH((GV*)sv))) + stash = GvESTASH((GV*)sv); + break; + default: + break; + } + if (stash) + sv_setpv(TARG, HvNAME(stash)); + } + +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + XSRETURN(1); +} + +XS(XS_attributes_reftype) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 1) { +usage: + Perl_croak(aTHX_ + "Usage: attributes::reftype $reference"); + } + + rv = ST(0); + ST(0) = TARG; + if (!SvOK(rv)) { + ST(0) = &PL_sv_no; + XSRETURN(1); + } + if (!SvROK(rv)) + goto usage; + sv = SvRV(rv); + sv_setpv(TARG, sv_reftype(sv, 0)); +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + + XSRETURN(1); +} + +XS(XS_attributes__warn_reserved) +{ + dXSARGS; + SV *rv, *sv; +#ifdef dXSTARGET + dXSTARGET; +#else + SV * TARG = sv_newmortal(); +#endif + + if (items != 0) { + Perl_croak(aTHX_ + "Usage: attributes::_warn_reserved ()"); + } + + EXTEND(SP,1); + ST(0) = TARG; + sv_setiv(TARG, ckWARN(WARN_RESERVED) != 0); +#ifdef dXSTARGET + SvSETMAGIC(TARG); +#endif + + XSRETURN(1); +} + |