This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[inseparable changes from patch from perl5.003_20 to perl5.003_21]
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>
Wed, 15 Jan 1997 19:24:00 +0000 (07:24 +1200)
committerChip Salzenberg <chip@atlantic.net>
Wed, 15 Jan 1997 19:24:00 +0000 (07:24 +1200)
 BUILD PROCESS

Subject: Make MachTen hints file warn about db-recno failures
Date: Wed, 8 Jan 1997 12:07:18 +0100
From: Dominic Dunlop <domo@slipper.ip.lu>
Files: hints/machten.sh
Msg-ID: <v03010d00aef92fba6aca@[194.51.248.78]>

    (applied based on p5p patch as commit a4c70ab8da3ec1d87c83e5c617f4550814ec1724)

Subject: 5.003_20, FreeBSD 3.0 and minor patch
Date: Wed, 8 Jan 1997 14:37:47 +0100
From: Ollivier Robert <roberto@eurocontrol.fr>
Files: Configure
Msg-ID: <Mutt.19970108143747.roberto@caerdonn.eurocontrol.fr>

    (applied based on p5p patch as commit 50e0d465254be88fb90ac23584812a529741b4b1)

 CORE LANGUAGE CHANGES

Subject: Fix overloading via inherited autoloaded functions
Date: Mon, 13 Jan 1997 05:22:47 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: gv.c lib/overload.pm pod/perldiag.pod t/pragma/overload.t
Msg-ID: <199701131022.FAA22830@monk.mps.ohio-state.edu>

    (applied based on p5p patch as commit a9bc755754f0db5e848e65dfd2e63a96af50ffd4)

Subject: Method call fixes: Don't cache in alias, don't skip undef
From: Chip Salzenberg <chip@atlantic.net>
Files: global.sym gv.c gv.h hv.c op.c pod/perlguts.pod pod/perltoc.pod pp.c pp_ctl.c pp_hot.c proto.h scope.c sv.c t/op/method.t

Subject: Formats can be closures
From: Chip Salzenberg <chip@atlantic.net>
Files: cv.h op.c perly.c perly.c.diff perly.y pp_sys.c sv.h

Subject: Quote 'foo' in C<$x{-foo}>
From: Chip Salzenberg <chip@atlantic.net>
Files: toke.c

Subject: Forbid C< x->{y} > and C< x->[0] > under C<strict refs>
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c pod/perldiag.pod t/pragma/strict-refs

Subject: Allow <=> to return undef when operands are not ordered
From: Chip Salzenberg <chip@perl.com>
Files: MANIFEST pp.c t/op/cmp.t

 CORE PORTABILITY

Subject: Re: Perl 5.003_20: OS/2 patches
Date: Fri, 10 Jan 1997 06:02:16 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: hints/os2.sh os2/Changes os2/os2.c os2/os2ish.h pp_sys.c
Msg-ID: <199701101102.GAA19051@monk.mps.ohio-state.edu>

    (applied based on p5p patch as commit 9a3e71f668bd84b1cf53dd3ea10f588d59ecfebb)

Subject: VMS patches for _20
Date: Tue, 14 Jan 1997 17:34:43 -0500 (EST)
From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
Files: configpm dosish.h os2/os2ish.h plan9/plan9ish.h proto.h t/pragma/strict.t t/pragma/subs.t t/pragma/warning.t toke.c unixish.h vms/Makefile vms/config.vms vms/descrip.mms vms/genconfig.pl vms/perly_c.vms vms/test.com vms/vmsish.h x2p/a2p.h x2p/str.c

    private-msgid: <01IE7MGK7ULQ003K5M@hmivax.humgen.upenn.edu>

Subject: Irix 6.3 & 6.4 and perl5.003_20
Date: Mon, 13 Jan 1997 17:42:50 -0500 (EST)
From: John Stoffel <jfs@fluent.com>
Files: MANIFEST hints/irix_6_3.sh hints/irix_6_4.sh
Msg-ID: <199701132242.RAA14601@jfs.Fluent.COM>

    (applied based on p5p patch as commit 8a1e91d771b51ae31eed1ac5944c63934213fb07)

Subject: Patch: MachTen hints, Configure
Date: Tue, 14 Jan 1997 13:43:13 +0100
From: Dominic Dunlop <domo@slipper.ip.lu>
Files: Configure hints/machten.sh

    private-msgid: <v03010d00af0123a93670@[194.51.248.75]>

Subject: Rename aux.sh to aux_3.sh for MS-LOSS
From: Chip Salzenberg <chip@atlantic.net>
Files: MANIFEST hints/aux_3.sh

 DOCUMENTATION

Subject: Full documentation generation patch
Date: Wed, 15 Jan 97 11:16:28 +0100
From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
Files: MANIFEST pod/roffitall pod/rofftoc
Msg-ID: <15309.853323388@lyon.grenoble.hp.com>

    (applied based on p5p patch as commit a3270a1d7469cab9221ab0050a0e6695bd0047d8)

Subject: Document use of pos() and /\G/
Date: Mon, 13 Jan 1997 15:13:12 -0500
From: Gurusamy Sarathy <gsar@engin.umich.edu>
Files: pod/perlfunc.pod pod/perlnews.pod pod/perlop.pod pod/perlre.pod pod/perltoc.pod pod/perltrap.pod
Msg-ID: <199701132013.PAA26606@aatma.engin.umich.edu>

    (applied based on p5p patch as commit b2a07c1c241ec86f010fc0ea3bfa54c8ec28be90)

Subject: Document new closure warnings
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c pod/perldiag.pod

Subject: Misc. doc patches missing in _20
Date: Tue, 07 Jan 1997 22:55:33 -0500
From: Roderick Schertler <roderick@gate.net>
Files: pod/perlsub.pod pod/perltoc.pod pod/perlvar.pod
Msg-ID: <102.852695733@eeyore.ibcinc.com>

    (applied based on p5p patch as commit b88f04ff2985d0899964b90ae56789d88f6b353e)

 LIBRARY AND EXTENSIONS

Subject: Localize info about filesystems being case-forgiving
From: Chip Salzenberg <chip@atlantic.net>
Files: lib/File/Basename.pm pod/checkpods.PL pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL utils/splain.PL x2p/find2perl.PL x2p/s2p.PL

Subject: Eliminate warning from C<use overload>
From: Chip Salzenberg <chip@atlantic.net>
Files: lib/overload.pm

 OTHER CORE CHANGES

Subject: Fix C< eval { my $x; eval '$x' } >
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c t/op/misc.t

Subject: Don't warn if eval '' uses outer func's lexicals
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c

Subject: Avoid memory wastage in wait(); make pidstatus global
From: Chip Salzenberg <chip@atlantic.net>
Files: global.sym interp.sym perl.c perl.h pp_sys.c

Subject: Forbid ++ and -- on readonly values
Date: Fri, 10 Jan 1997 19:47:16 -0800 (PST)
From: "John Q. Linux" <jql@accessone.com>
Files: pp.c pp_hot.c
Msg-ID: <Pine.LNX.3.95.970110193330.11249D-100000@jql.accessone.com>

    (applied based on p5p patch as commit 74c80e585086695d5428ab316ca82fd6931aeabd)

Subject: Keep array from dying during foreach(@array)
From: Chip Salzenberg <chip@atlantic.net>
Files: cop.h pp_ctl.c

Subject: Fix C< $a="simple"; split /($a)/o >
From: Chip Salzenberg <chip@atlantic.net>
Files: pp.c t/op/misc.t

Subject: Fix for anon-lists with tied entries coredump
Date: Fri, 10 Jan 1997 02:45:11 -0500
From: Gurusamy Sarathy <gsar@engin.umich.edu>
Files: pp.c
Msg-ID: <199701100745.CAA13057@aatma.engin.umich.edu>

    (applied based on p5p patch as commit d976ac8220f8890bb7663152c4870f60e8e018c8)

Subject: Don't set SVf_PADBUSY on immortal SVs
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c

Subject: Patch for Object subroutines
Date: Tue, 7 Jan 1997 20:56:02 -0500 (EST)
From: Ilya Zakharevich <ilya@math.ohio-state.edu>
Files: cop.h
Msg-ID: <199701080156.UAA15366@monk.mps.ohio-state.edu>

    (applied based on p5p patch as commit 174150afa5efdafc0e94a18211d3c9aa06b15cd9)

Subject: Use an SVt_PVLV to hold stacked OP pointers when debugging
From: Chip Salzenberg <chip@atlantic.net>
Files: pp.c pp_hot.c

Subject: Undo change that freed large pad vars
From: Chip Salzenberg <chip@atlantic.net>
Files: scope.c

 TESTS

Subject: UNIVERSAL tests
From: Roderick Schertler <roderick@gate.net>
Files: MANIFEST t/op/universal.t

Subject: Test deletion of array during foreach
From: Jarkko Hietaniemi <jhi@alpha.hut.fi>
Files: t/op/misc.t

 UTILITIES

Subject: Don't search for pod if path is already valid
Date: Wed, 08 Jan 1997 15:25:19 -0800
From: Wayne Scott <wscott@ichips.intel.com>
Files: utils/perldoc.PL
Msg-ID: <199701082325.PAA04521@pdxlx008.intel.com>

    (applied based on p5p patch as commit 88f0eda82bb679b4e6445ccb17e18d0781c6a5da)

Subject: Yet another perldoc option
Date: Thu, 3 Oct 1996 00:00:35 +0200
From: Gisle Aas <aas@aas.no>
Files: utils/perldoc.PL
Msg-ID: <199610022200.AAA15334@furubotn.sn.no>

    (applied based on p5p patch as commit a2333f3625faa17fb193cfa25c3d598cb59f105f)

Subject: Re: perldoc, temp files, async pagers
Date: 07 Jan 1997 22:54:14 -0500
From: Roderick Schertler <roderick@gate.net>
Files: utils/perldoc.PL
Msg-ID: <pzwwtoom8p.fsf@eeyore.ibcinc.com>

    (applied based on p5p patch as commit 7c36043de26da560a0f7eb04f36d232762c0092c)

88 files changed:
Changes
Configure
MANIFEST
Makefile.SH
configpm
cop.h
cv.h
dosish.h
embed.h
global.sym
gv.c
gv.h
hints/aux_3.sh [new file with mode: 0644]
hints/irix_6_3.sh [new file with mode: 0644]
hints/irix_6_4.sh [new file with mode: 0644]
hints/machten.sh
hints/os2.sh
hv.c
interp.sym
lib/File/Basename.pm
lib/overload.pm
op.c
os2/Changes
os2/os2.c
os2/os2ish.h
patchlevel.h
perl.c
perl.h
perly.c
perly.c.diff
perly.y
plan9/plan9ish.h
pod/checkpods.PL
pod/perldiag.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perlnews.pod
pod/perlop.pod
pod/perlre.pod
pod/perlsub.pod
pod/perltoc.pod
pod/perltrap.pod
pod/perlvar.pod
pod/pod2html.PL
pod/pod2latex.PL
pod/pod2man.PL
pod/pod2text.PL
pod/roffitall
pod/rofftoc
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
scope.c
sv.c
sv.h
t/comp/proto.t
t/io/fs.t
t/op/cmp.t
t/op/method.t
t/op/misc.t
t/op/universal.t
t/pragma/overload.t
t/pragma/strict-refs
t/pragma/strict.t
t/pragma/subs.t
t/pragma/warning.t
toke.c
unixish.h
utils/c2ph.PL
utils/h2ph.PL
utils/h2xs.PL
utils/perlbug.PL
utils/perldoc.PL
utils/pl2pm.PL
utils/splain.PL
vms/Makefile
vms/config.vms
vms/descrip.mms
vms/genconfig.pl
vms/perly_c.vms
vms/test.com
vms/vmsish.h
x2p/a2p.h
x2p/find2perl.PL
x2p/s2p.PL
x2p/str.c

diff --git a/Changes b/Changes
index d75ec7e..8449c36 100644 (file)
--- a/Changes
+++ b/Changes
@@ -9,6 +9,304 @@ releases.)
 
 
 ----------------
+Version 5.003_21
+----------------
+
+This release includes several important bug fixes, and a couple of
+minor but valuable language tweaks.  Please read on for a list of the
+significant changes:
+
+ CORE LANGUAGE CHANGES
+
+  Title:  "Fix overloading via inherited autoloaded functions"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199701131022.FAA22830@monk.mps.ohio-state.edu>
+   Date:  Mon, 13 Jan 1997 05:22:47 -0500 (EST)
+  Files:  gv.c lib/overload.pm pod/perldiag.pod t/pragma/overload.t
+
+  Title:  "Method call fixes: Don't cache in alias, don't skip undef"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  global.sym gv.c gv.h hv.c op.c pod/perlguts.pod
+          pod/perltoc.pod pp.c pp_ctl.c pp_hot.c proto.h scope.c sv.c
+          t/op/method.t
+
+  Title:  "Formats can be closures"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  cv.h op.c perly.c perly.c.diff perly.y pp_sys.c sv.h
+
+  Title:  "Quote 'foo' in C<$x{-foo}>"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  toke.c
+
+  Title:  "Forbid C< x->{y} > and C< x->[0] > under C<strict refs>"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c pod/perldiag.pod t/pragma/strict-refs
+
+  Title:  "Allow <=> to return undef when operands are not ordered"
+   From:  Chip Salzenberg and Andreas Koenig
+  Files:  MANIFEST pp.c t/op/cmp.t
+
+  Title:  "Fail regex that starts with '{'"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  regcomp.c
+
+ CORE PORTABILITY
+
+  Title:  "Re: Perl 5.003_20: OS/2 patches"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199701101102.GAA19051@monk.mps.ohio-state.edu>
+   Date:  Fri, 10 Jan 1997 06:02:16 -0500 (EST)
+  Files:  hints/os2.sh os2/Changes os2/os2.c os2/os2ish.h pp_sys.c
+
+  Title:  "VMS patches for _20"
+   From:  Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
+ Msg-ID:  <01IE7MGK7ULQ003K5M@hmivax.humgen.upenn.edu>
+   Date:  Tue, 14 Jan 1997 17:34:43 -0500 (EST)
+  Files:  configpm dosish.h os2/os2ish.h plan9/plan9ish.h proto.h
+          t/pragma/strict.t t/pragma/subs.t t/pragma/warning.t toke.c
+          unixish.h vms/Makefile vms/config.vms vms/descrip.mms
+          vms/genconfig.pl vms/perly_c.vms vms/test.com vms/vmsish.h
+          x2p/a2p.h x2p/str.c
+
+  Title:  "Irix 6.3 & 6.4 and perl5.003_20"
+   From:  John Stoffel <jfs@fluent.com>
+ Msg-ID:  <199701132242.RAA14601@jfs.Fluent.COM>
+   Date:  Mon, 13 Jan 1997 17:42:50 -0500 (EST)
+  Files:  MANIFEST hints/irix_6_3.sh hints/irix_6_4.sh
+
+  Title:  "Patch: MachTen hints, Configure"
+   From:  Dominic Dunlop <domo@slipper.ip.lu>
+ Msg-ID:  <v03010d00af0123a93670@[194.51.248.75]>
+   Date:  Tue, 14 Jan 1997 13:43:13 +0100
+  Files:  Configure hints/machten.sh
+
+  Title:  "Rename aux.sh to aux_3.sh for MS-LOSS"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  MANIFEST hints/aux_3.sh
+
+ OTHER CORE CHANGES
+
+  Title:  "Fix C< eval { my $x; eval '$x' } >"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c t/op/misc.t
+
+  Title:  "Don't warn if eval '' uses outer func's lexicals"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c
+
+  Title:  "Avoid memory wastage in wait(); make pidstatus global"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  global.sym interp.sym perl.c perl.h pp_sys.c
+
+  Title:  "Forbid ++ and -- on readonly values"
+   From:  "John Q. Linux" <jql@accessone.com>
+ Msg-ID:  <Pine.LNX.3.95.970110193330.11249D-100000@jql.accessone.com>
+   Date:  Fri, 10 Jan 1997 19:47:16 -0800 (PST)
+  Files:  pp.c pp_hot.c
+
+  Title:  "Keep array from dying during foreach(@array)"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  cop.h pp_ctl.c
+
+  Title:  "Fix C< $a="simple"; split /($a)/o >"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp.c t/op/misc.t
+
+  Title:  "Fix infinite loop for undef function in @SIG{__WARN__,__DIE__}"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  util.c
+
+  Title:  "Fix for anon-lists with tied entries coredump"
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199701100745.CAA13057@aatma.engin.umich.edu>
+   Date:  Fri, 10 Jan 1997 02:45:11 -0500
+  Files:  pp.c
+
+  Title:  "Don't set SVf_PADBUSY on immortal SVs"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c
+
+  Title:  "Patch for Object subroutines"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199701080156.UAA15366@monk.mps.ohio-state.edu>
+   Date:  Tue, 7 Jan 1997 20:56:02 -0500 (EST)
+  Files:  cop.h
+
+  Title:  "Use an SVt_PVLV to hold stacked OP pointers when debugging"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp.c pp_hot.c
+
+  Title:  "Undo change that freed large pad vars"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  scope.c
+
+ BUILD PROCESS
+
+  Title:  "Make MachTen hints file warn about db-recno failures"
+   From:  Dominic Dunlop <domo@slipper.ip.lu>
+ Msg-ID:  <v03010d00aef92fba6aca@[194.51.248.78]>
+   Date:  Wed, 8 Jan 1997 12:07:18 +0100
+  Files:  hints/machten.sh
+
+  Title:  "5.003_20, FreeBSD 3.0 and minor patch"
+   From:  roberto@eurocontrol.fr (Ollivier Robert)
+ Msg-ID:  <Mutt.19970108143747.roberto@caerdonn.eurocontrol.fr>
+   Date:  Wed, 8 Jan 1997 14:37:47 +0100
+  Files:  Configure
+
+  Title:  "Make installperl quieter; only shared libraries need 0555"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  installperl
+
+ TESTS
+
+  Title:  "Advice on TEST failure"
+   From:  Dominic Dunlop <domo@slipper.ip.lu>
+ Msg-ID:  <v03010d01aefbaefcf3bc@[194.51.248.78]>
+   Date:  Fri, 10 Jan 1997 10:19:07 +0100
+  Files:  t/TEST
+
+  Title:  "UNIVERSAL tests"
+   From:  Roderick Schertler <roderick@gate.net>
+  Files:  MANIFEST t/op/universal.t
+
+  Title:  "Test deletion of array during foreach"
+   From:  Jarkko Hietaniemi <jhi@alpha.hut.fi>
+  Files:  t/op/misc.t
+
+  Title:  "patch for db-recno.t"
+   From:  pmarquess@bfsec.bt.co.uk (Paul Marquess)
+ Msg-ID:  <9701121509.AA11147@claudius.bfsec.bt.co.uk>
+   Date:  Sun, 12 Jan 1997 15:09:33 +0000 (GMT)
+  Files:  t/lib/db-recno.t
+
+ LIBRARY AND EXTENSIONS
+
+  Title:  "Localize info about filesystems being case-forgiving"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  lib/File/Basename.pm pod/checkpods.PL pod/pod2html.PL
+          pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL
+          utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL
+          utils/perldoc.PL utils/pl2pm.PL utils/splain.PL
+          x2p/find2perl.PL x2p/s2p.PL
+
+  Title:  "Fix for fd leak in IO::File::new_tmpfile"
+   From:  Graham Barr and Chip Salzenberg
+  Files:  ext/IO/IO.xs ext/IO/lib/IO/Handle.pm
+
+  Title:  "Refresh Getopt::Long to 2.6"
+   From:  Johan Vromans <jvromans@squirrel.nl>
+  Files:  lib/Getopt/Long.pm
+
+  Title:  "Refresh DB_File to 1.10"
+   From:  pmarquess@bfsec.bt.co.uk (Paul Marquess)
+ Msg-ID:  <9701141247.AA21242@claudius.bfsec.bt.co.uk>
+   Date:  Tue, 14 Jan 97 12:47:40 GMT
+  Files:  ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
+
+  Title:  "Re: FileCache::cacheout clobbers $_"
+   From:  Roderick Schertler <roderick@gate.net>
+ Msg-ID:  <pz3ewb3189.fsf@eeyore.ibcinc.com>
+   Date:  08 Jan 1997 23:45:58 -0500
+  Files:  lib/FileCache.pm lib/cacheout.pl
+
+  Title:  "PATCH: AutoSplit"
+   From:  Graham Barr <bodg@tiuk.ti.com>
+ Msg-ID:  <9603111010.AA29935@tiuk.ti.com>
+   Date:  11 Mar 1996 06:01:58 -0500
+  Files:  lib/AutoSplit.pm
+
+  Title:  "Re: Uninitialized value in Carp.pm ? "
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199701141815.NAA07960@aatma.engin.umich.edu>
+   Date:  Tue, 14 Jan 1997 13:15:25 -0500
+  Files:  lib/Carp.pm
+
+  Title:  "Avoid "uninitialized" warnings from POSIX::constant()"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  ext/POSIX/POSIX.pm
+
+  Title:  "Eliminate warning from C<use overload>"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  lib/overload.pm
+
+  Title:  "low priority patches"
+   From:  pmarquess@bfsec.bt.co.uk (Paul Marquess)
+ Msg-ID:  <9701081655.AA27349@claudius.bfsec.bt.co.uk>
+   Date:  Wed, 8 Jan 97 16:55:02 GMT
+  Files:  lib/Cwd.pm t/comp/redef.t t/lib/db-btree.t
+
+ UTILITIES
+
+  Title:  "Re: xsubpp and Tk ==> segfault"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199701080825.DAA15813@monk.mps.ohio-state.edu>
+   Date:  Wed, 8 Jan 1997 03:25:47 -0500 (EST)
+  Files:  lib/ExtUtils/xsubpp
+
+  Title:  "Re: MakeMaker and 'make uninstall'"
+   From:  Andreas Koenig <k@anna.in-berlin.de>
+ Msg-ID:  <199701101243.NAA26400@anna.in-berlin.de>
+   Date:  Fri, 10 Jan 1997 13:43:39 +0100
+  Files:  lib/ExtUtils/MM_Unix.pm
+
+  Title:  "Don't search for pod if path is already valid"
+   From:  Wayne Scott <wscott@ichips.intel.com>
+ Msg-ID:  <199701082325.PAA04521@pdxlx008.intel.com>
+   Date:  Wed, 08 Jan 1997 15:25:19 -0800
+  Files:  utils/perldoc.PL
+
+  Title:  "Yet another perldoc option"
+   From:  Gisle Aas <aas@aas.no>
+ Msg-ID:  <199610022200.AAA15334@furubotn.sn.no>
+   Date:  Thu, 3 Oct 1996 00:00:35 +0200
+  Files:  utils/perldoc.PL
+
+  Title:  "Re: perldoc, temp files, async pagers"
+   From:  Roderick Schertler <roderick@gate.net>
+ Msg-ID:  <pzwwtoom8p.fsf@eeyore.ibcinc.com>
+   Date:  07 Jan 1997 22:54:14 -0500
+  Files:  utils/perldoc.PL
+
+ DOCUMENTATION
+
+  Title:  "Full documentation generation patch"
+   From:  Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
+ Msg-ID:  <15309.853323388@lyon.grenoble.hp.com>
+   Date:  Wed, 15 Jan 97 11:16:28 +0100
+  Files:  MANIFEST pod/roffitall pod/rofftoc
+
+  Title:  "Re: documentation correction (i.e. patch) for perlsyn.pod"
+   From:  "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
+ Msg-ID:  <E0vilLh-0000M6-00@ursa.cus.cam.ac.uk>
+   Date:  Fri, 10 Jan 1997 18:06:37 +0000
+  Files:  pod/perlsyn.pod
+
+  Title:  "Document use of pos() and /\G/"
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199701132013.PAA26606@aatma.engin.umich.edu>
+   Date:  Mon, 13 Jan 1997 15:13:12 -0500
+  Files:  pod/perlfunc.pod pod/perlnews.pod pod/perlop.pod
+          pod/perlre.pod pod/perltoc.pod pod/perltrap.pod
+
+  Title:  "Fix example #4 in perlXStut"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199701050739.CAA11112@monk.mps.ohio-state.edu>
+   Date:  Sun, 5 Jan 1997 02:39:45 -0500 (EST)
+  Files:  pod/perlxstut.pod
+
+  Title:  "Document new closure warnings"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c pod/perldiag.pod
+
+  Title:  "Misc. doc patches missing in _20"
+   From:  Roderick Schertler <roderick@gate.net>
+ Msg-ID:  <102.852695733@eeyore.ibcinc.com>
+   Date:  Tue, 07 Jan 1997 22:55:33 -0500
+  Files:  pod/perlsub.pod pod/perltoc.pod pod/perlvar.pod
+
+
+----------------
 Version 5.003_20
 ----------------
 
index 9211439..f9af03c 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -4105,6 +4105,10 @@ elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
+elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
+       eval $xscan;\
+       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+               eval $xrun
 else
        nm -p $* 2>/dev/null >libc.tmp
        $grep fprintf libc.tmp > libc.ptf
@@ -4691,7 +4695,7 @@ if "$useshrplib"; then
                xxx="-R $shrpdir"
                ;;
        freebsd)
-               xxx="-Wl,-R,$shrpdir"
+               xxx="-Wl,-R$shrpdir"
                ;;
        linux|irix*)
                xxx="-Wl,-rpath,$shrpdir"
index ac32354..6b202da 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -203,7 +203,7 @@ hints/aix.sh                Hints for named architecture
 hints/altos486.sh      Hints for named architecture
 hints/amigaos.sh       Hints for named architecture
 hints/apollo.sh                Hints for named architecture
-hints/aux.sh           Hints for named architecture
+hints/aux_3.sh         Hints for named architecture
 hints/broken-db.msg    Warning message for systems with broken DB library
 hints/bsdos.sh         Hints for named architecture
 hints/convexos.sh      Hints for named architecture
@@ -224,6 +224,8 @@ hints/irix_4.sh             Hints for named architecture
 hints/irix_5.sh                Hints for named architecture
 hints/irix_6.sh                Hints for named architecture
 hints/irix_6_2.sh      Hints for named architecture
+hints/irix_6_3.sh      Hints for named architecture
+hints/irix_6_4.sh      Hints for named architecture
 hints/isc.sh           Hints for named architecture
 hints/isc_2.sh         Hints for named architecture
 hints/linux.sh         Hints for named architecture
@@ -526,6 +528,7 @@ pod/pod2latex.PL    Precursor for translator to turn pod into LaTeX
 pod/pod2man.PL         Precursor for translator to turn pod into manpage
 pod/pod2text.PL                Precursor for translator to turn pod into text
 pod/roffitall          troff the whole man page set
+pod/rofftoc            Generate a table of contents in troff format
 pod/splitman           Splits perlfunc into multiple man pages
 pod/splitpod           Splits perlfunc into multiple pod pages
 pp.c                   Push/Pop code
@@ -636,6 +639,7 @@ t/op/assignwarn.t   See if OP= operators warn correctly for undef targets
 t/op/auto.t            See if autoincrement et all work
 t/op/bop.t             See if bitops work
 t/op/chop.t            See if chop works
+t/op/cmp.t             See if the various string and numeric compare work
 t/op/cond.t            See if conditional expressions work
 t/op/delete.t          See if delete works
 t/op/do.t              See if subroutines work
@@ -687,6 +691,7 @@ t/op/sysio.t                See if sysread and syswrite work
 t/op/tie.t             See if tie/untie functions work
 t/op/time.t            See if time functions work
 t/op/undef.t           See if undef works
+t/op/universal.t       See if UNIVERSAL class works
 t/op/unshift.t         See if unshift works
 t/op/vec.t             See if vectors work
 t/op/write.t           See if write works
index 0cce725..025dd22 100755 (executable)
@@ -478,7 +478,7 @@ minitest: miniperl
        @echo "You may see some irrelevant test failures if you have been unable"
        @echo "to build lib/Config.pm."
        - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
-               && ./perl TEST base/*.t comp/*.t cmd/*.t pragma/*.t io/*.t op/*.t </dev/tty
+               && ./perl TEST base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t </dev/tty
 
 clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
index 3cef56d..1fef6fe 100755 (executable)
--- a/configpm
+++ b/configpm
@@ -39,19 +39,23 @@ ENDOFBEG
 @non_v=();
 @v_fast=();
 @v_others=();
+$in_v = 0;
 
 while (<>) {
     next if m:^#!/bin/sh:;
     # Catch CONFIG=true and PATCHLEVEL=n line from Configure.
     s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/;
-    unless (m/^(\w+)='(.*)'\s*$/){
+    unless ($in_v or m/^(\w+)='(.*\n)/){
        push(@non_v, "#$_"); # not a name='value' line
        next;
     }
-    $name = $1;
+    if ($in_v) { $val .= $_;             }
+    else       { ($name,$val) = ($1,$2); }
+    $in_v = $val !~ /'\n/;
+    next if $in_v;
     if ($extensions{$name}) { s,/,::,g }
-    if (!$fast{$name}){ push(@v_others, $_); next; }
-    push(@v_fast,$_);
+    if (!$fast{$name}){ push(@v_others, "$name='$val"); next; }
+    push(@v_fast,"$name='$val");
 }
 
 foreach(@non_v){ print CONFIG $_ }
@@ -99,7 +103,7 @@ sub FETCH {
     if ($start == -1) { $start = length($marker) } 
         else { $start += length($marker) + 1 }
     $value = substr($config_sh, $start, 
-        index($config_sh, q('), $start) - $start);
+        index($config_sh, qq('\n), $start) - $start);
  
     $value = undef if $value eq 'undef'; # So we can say "if $Config{'foo'}".
     $_[0]->{$_[1]} = $value; # cache it
@@ -116,7 +120,7 @@ sub FIRSTKEY {
 }
 
 sub NEXTKEY {
-    my $pos = index($config_sh, "\n", $prevpos) + 1;
+    my $pos = index($config_sh, qq('\n), $prevpos) + 2;
     my $len = index($config_sh, "=", $pos) - $pos;
     $prevpos = $pos;
     $len > 0 ? substr($config_sh, $pos, $len) : undef;
diff --git a/cop.h b/cop.h
index 9728962..14cd43e 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -46,14 +46,19 @@ struct block_sub {
        cx->blk_sub.dfoutgv = defoutgv;                                 \
        (void)SvREFCNT_inc(cx->blk_sub.dfoutgv)
 
+/* We muck with cxstack_ix since _dec may call a DESTROY, overwriting cx. */
+
 #define POPSUB(cx)                                                     \
        if (cx->blk_sub.hasargs) {   /* put back old @_ */              \
            SvREFCNT_dec(GvAV(defgv));                                  \
            GvAV(defgv) = cx->blk_sub.savearray;                        \
        }                                                               \
        if (cx->blk_sub.cv) {                                           \
-           if (!(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))      \
+           if (!(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth)) {    \
+               cxstack_ix++;                                           \
                SvREFCNT_dec((SV*)cx->blk_sub.cv);                      \
+               cxstack_ix--;                                           \
+           }                                                           \
        }
 
 #define POPFORMAT(cx)                                                  \
@@ -101,9 +106,11 @@ struct block_loop {
        cx->blk_loop.redo_op = cLOOP->op_redoop;                        \
        cx->blk_loop.next_op = cLOOP->op_nextop;                        \
        cx->blk_loop.last_op = cLOOP->op_lastop;                        \
-       cx->blk_loop.iterlval = Nullsv;                                 \
        if (cx->blk_loop.itervar = (ivar))                              \
-           cx->blk_loop.itersave = SvREFCNT_inc(*cx->blk_loop.itervar);
+           cx->blk_loop.itersave = SvREFCNT_inc(*cx->blk_loop.itervar);\
+       cx->blk_loop.iterlval = Nullsv;                                 \
+       cx->blk_loop.iterary = Nullav;                                  \
+       cx->blk_loop.iterix = -1;
 
 #define POPLOOP(cx)                                                    \
        newsp           = stack_base + cx->blk_loop.resetsp;            \
@@ -111,7 +118,9 @@ struct block_loop {
        if (cx->blk_loop.itervar) {                                     \
            SvREFCNT_dec(*cx->blk_loop.itervar);                        \
            *cx->blk_loop.itervar = cx->blk_loop.itersave;              \
-       }
+       }                                                               \
+       if (cx->blk_loop.iterary && cx->blk_loop.iterary != curstack)   \
+           SvREFCNT_dec(cx->blk_loop.iterary);
 
 /* context common to subroutines, evals and loops */
 struct block {
diff --git a/cv.h b/cv.h
index 57e8142..b29793f 100644 (file)
--- a/cv.h
+++ b/cv.h
@@ -7,6 +7,8 @@
  *
  */
 
+/* This structure much match the beginning of XPVFM */
+
 struct xpvcv {
     char *     xpv_pv;         /* pointer to malloced string */
     STRLEN     xpv_cur;        /* length of xp_pv as a C string */
@@ -50,6 +52,7 @@ struct xpvcv {
 #define CVf_UNIQUE     0x10    /* can't be cloned */
 #define CVf_NODEBUG    0x20    /* no DB::sub indirection for this CV
                                   (esp. useful for special XSUBs) */
+#define CVf_FORMAT     0x40    /* is a format, not a sub */
 
 #define CvCLONE(cv)            (CvFLAGS(cv) & CVf_CLONE)
 #define CvCLONE_on(cv)         (CvFLAGS(cv) |= CVf_CLONE)
@@ -71,6 +74,10 @@ struct xpvcv {
 #define CvUNIQUE_on(cv)                (CvFLAGS(cv) |= CVf_UNIQUE)
 #define CvUNIQUE_off(cv)       (CvFLAGS(cv) &= ~CVf_UNIQUE)
 
+#define CvFORMAT(cv)           (CvFLAGS(cv) & CVf_FORMAT)
+#define CvFORMAT_on(cv)                (CvFLAGS(cv) |= CVf_FORMAT)
+#define CvFORMAT_off(cv)       (CvFLAGS(cv) &= ~CVf_FORMAT)
+
 #define CvNODEBUG(cv)          (CvFLAGS(cv) & CVf_NODEBUG)
 #define CvNODEBUG_on(cv)       (CvFLAGS(cv) |= CVf_NODEBUG)
 #define CvNODEBUG_off(cv)      (CvFLAGS(cv) &= ~CVf_NODEBUG)
index ff7e245..58296a4 100644 (file)
--- a/dosish.h
+++ b/dosish.h
@@ -55,6 +55,18 @@ void Perl_DJGPP_init();
  */
 #undef ACME_MESS       /**/
 
+/* ALTERNATE_SHEBANG:
+ *     This symbol, if defined, contains a "magic" string which may be used
+ *     as the first line of a Perl program designed to be executed directly
+ *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
+ *     begins with a character other then #, then Perl will only treat
+ *     it as a command line if if finds the string "perl" in the first
+ *     word; otherwise it's treated as the first line of code in the script.
+ *     (IOW, Perl won't hand off to another interpreter via an alternate
+ *     shebang sequence that might be legal Perl code.)
+ */
+/* #define ALTERNATE_SHEBANG "#!" / **/
+
 /*
  * fwrite1() should be a routine with the same calling sequence as fwrite(),
  * but which outputs all of the bytes requested as a single stream (unlike
diff --git a/embed.h b/embed.h
index 2399d0a..b4bce4b 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define gv_AVadd               Perl_gv_AVadd
 #define gv_HVadd               Perl_gv_HVadd
 #define gv_IOadd               Perl_gv_IOadd
+#define gv_autoload            Perl_gv_autoload
 #define gv_check               Perl_gv_check
 #define gv_efullname           Perl_gv_efullname
 #define gv_efullname3          Perl_gv_efullname3
 #define patleave               Perl_patleave
 #define peep                   Perl_peep
 #define pidgone                        Perl_pidgone
+#define pidstatus              Perl_pidstatus
 #define pmflag                 Perl_pmflag
 #define pmruntime              Perl_pmruntime
 #define pmtrans                        Perl_pmtrans
 #define start_subparse         Perl_start_subparse
 #define statbuf                        Perl_statbuf
 #define string_amg             Perl_string_amg
+#define sub_crush_depth                Perl_sub_crush_depth
 #define sub_generation         Perl_sub_generation
-#define sublex_done            Perl_sublex_done
-#define sublex_start           Perl_sublex_start
 #define subline                        Perl_subline
 #define subname                        Perl_subname
 #define subtr_amg              Perl_subtr_amg
 #define patchlevel             (curinterp->Ipatchlevel)
 #define perl_destruct_level    (curinterp->Iperl_destruct_level)
 #define perldb                 (curinterp->Iperldb)
-#define pidstatus              (curinterp->Ipidstatus)
 #define preambleav             (curinterp->Ipreambleav)
 #define preambled              (curinterp->Ipreambled)
 #define preprocess             (curinterp->Ipreprocess)
 #define Ipatchlevel            patchlevel
 #define Iperl_destruct_level   perl_destruct_level
 #define Iperldb                        perldb
-#define Ipidstatus             pidstatus
 #define Ipreambleav            preambleav
 #define Ipreambled             preambled
 #define Ipreprocess            preprocess
 #define patchlevel             Perl_patchlevel
 #define perl_destruct_level    Perl_perl_destruct_level
 #define perldb                 Perl_perldb
-#define pidstatus              Perl_pidstatus
 #define preambleav             Perl_preambleav
 #define preambled              Perl_preambled
 #define preprocess             Perl_preprocess
index e130524..6ffac19 100644 (file)
@@ -158,6 +158,7 @@ pad_reset_pending
 padix
 padix_floor
 patleave
+pidstatus
 pow_amg
 pow_ass_amg
 ppaddr
@@ -434,6 +435,7 @@ gp_ref
 gv_AVadd
 gv_HVadd
 gv_IOadd
+gv_autoload
 gv_check
 gv_efullname
 gv_efullname3
@@ -1051,8 +1053,7 @@ sighandler
 skipspace
 stack_grow
 start_subparse
-sublex_done
-sublex_start
+sub_crush_depth
 sv_2bool
 sv_2cv
 sv_2io
diff --git a/gv.c b/gv.c
index 5ffa11b..89533ff 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -88,9 +88,8 @@ int multi;
     sv_upgrade((SV*)gv, SVt_PVGV);
     if (SvLEN(gv))
        Safefree(SvPVX(gv));
-    Newz(602,gp, 1, GP);
+    Newz(602, gp, 1, GP);
     GvGP(gv) = gp_ref(gp);
-    GvREFCNT(gv) = 1;
     GvSV(gv) = NEWSV(72,0);
     GvLINE(gv) = curcop->cop_line;
     GvFILEGV(gv) = curcop->cop_filegv;
@@ -137,30 +136,28 @@ I32 level;
 
     if (!stash)
        return 0;
-    if (level > 100)
+    if ((level > 100) || (level < -100))
        croak("Recursive inheritance detected");
 
-    gvp = (GV**)hv_fetch(stash, name, len, TRUE);
-
     DEBUG_o( deb("Looking for method %s in package %s\n",name,HvNAME(stash)) );
-    topgv = *gvp;
-    if (SvTYPE(topgv) != SVt_PVGV)
-       gv_init(topgv, stash, name, len, TRUE);
-
-    if (cv = GvCV(topgv)) {
-       if (CvXSUB(cv) || CvROOT(cv) || CvGV(cv)) { /* Not deleted, possibly autoloaded. */
-           if (GvCVGEN(topgv) >= sub_generation)
-               return topgv;   /* valid cached inheritance */
-           if (!GvCVGEN(topgv)) {      /* not an inheritance cache */
+
+    gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
+    if (!gvp)
+       topgv = Nullgv;
+    else {
+       topgv = *gvp;
+       if (SvTYPE(topgv) != SVt_PVGV)
+           gv_init(topgv, stash, name, len, TRUE);
+       if (cv = GvCV(topgv)) {
+           /* If genuine method or valid cache entry, use it */
+           if (!GvCVGEN(topgv) || GvCVGEN(topgv) >= sub_generation)
                return topgv;
-           }
+           /* Stale cached entry: junk it */
+           SvREFCNT_dec(cv);
+           GvCV(topgv) = cv = Nullcv;
+           GvCVGEN(topgv) = 0;
        }
-       /* stale cached entry, just junk it */
-       SvREFCNT_dec(cv);
-       GvCV(topgv) = cv = 0;
-       GvCVGEN(topgv) = 0;
     }
-    /* Now cv = 0, and there is no cv in topgv. */
 
     gvp = (GV**)hv_fetch(stash,"ISA",3,FALSE);
     if (gvp && (gv = *gvp) != (GV*)&sv_undef && (av = GvAV(gv))) {
@@ -175,22 +172,25 @@ I32 level;
                        SvPVX(sv), HvNAME(stash));
                continue;
            }
-           gv = gv_fetchmeth(basestash, name, len, level + 1);
-           if (gv) {
-               GvCV(topgv) = GvCV(gv);                 /* cache the CV */
-               GvCVGEN(topgv) = sub_generation;        /* valid for now */
-               SvREFCNT_inc(GvCV(gv));
-               return gv;
-           }
+           gv = gv_fetchmeth(basestash, name, len,
+                             (level >= 0) ? level + 1 : level - 1);
+           if (gv)
+               goto gotcha;
        }
     }
 
-    if (!level) {
+    if (level == 0 || level == -1) {
        if (lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE)) {
-           if (gv = gv_fetchmeth(lastchance, name, len, level + 1)) {
-               GvCV(topgv) = GvCV(gv);                 /* cache the CV */
-               GvCVGEN(topgv) = sub_generation;        /* valid for now */
-               SvREFCNT_inc(GvCV(gv));
+           if (gv = gv_fetchmeth(lastchance, name, len,
+                                 (level >= 0) ? level + 1 : level - 1)) {
+         gotcha:
+               /* Use topgv for cache only if it has no synonyms */
+               if (topgv && GvREFCNT(topgv) == 1) {
+                   if (cv = GvCV(topgv))
+                       SvREFCNT_dec(cv);
+                   GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
+                   GvCVGEN(topgv) = sub_generation;
+               }
                return gv;
            }
        }
@@ -271,22 +271,50 @@ char* name;
     }
 
     if (!gv) {
-       CV* cv;
-
        if (strEQ(name,"import"))
            gv = (GV*)&sv_yes;
-       else if (strNE(name, "AUTOLOAD")) {
-           if (gv = gv_fetchmeth(stash, "AUTOLOAD", 8, 0)) {
-               /* One more chance... */
-               SV *tmpstr = sv_2mortal(newSVpv(HvNAME(stash),0));
-               sv_catpvn(tmpstr,"::", 2);
-               sv_catpvn(tmpstr, name, nend - name);
-               cv = GvCV(gv);
-               sv_setsv(GvSV(CvGV(cv)), tmpstr);
-               SvTAINTED_off(GvSV(CvGV(cv)));
-           }
-       }
+       else
+           gv = gv_autoload(stash, name, nend - name);
     }
+
+    return gv;
+}
+
+GV*
+gv_autoload(stash, name, len)
+HV* stash;
+char* name;
+STRLEN len;
+{
+    static char autoload[] = "AUTOLOAD";
+    static STRLEN autolen = 8;
+    GV* gv;
+    CV* cv;
+    HV* varstash;
+    GV* vargv;
+    SV* varsv;
+
+    if (len == autolen && strnEQ(name, autoload, autolen))
+       return Nullgv;
+    if (!(gv = gv_fetchmeth(stash, autoload, autolen, 0)))
+       return Nullgv;
+    cv = GvCV(gv);
+
+    /*
+     * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
+     * The subroutine's original name may not be "AUTOLOAD", so we don't
+     * use that, but for lack of anything better we will use the sub's
+     * original package to look up $AUTOLOAD.
+     */
+    varstash = GvSTASH(CvGV(cv));
+    vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
+    if (!isGV(vargv))
+       gv_init(vargv, varstash, autoload, autolen, FALSE);
+    varsv = GvSV(vargv);
+    sv_setpv(varsv, HvNAME(stash));
+    sv_catpvn(varsv, "::", 2);
+    sv_catpvn(varsv, name, len);
+    SvTAINTED_off(varsv);
     return gv;
 }
 
@@ -796,8 +824,19 @@ gp_ref(gp)
 GP* gp;
 {
     gp->gp_refcnt++;
+    if (gp->gp_cv) {
+       if (gp->gp_cvgen) {
+           /* multi-named GPs cannot be used for method cache */
+           SvREFCNT_dec(gp->gp_cv);
+           gp->gp_cv = Nullcv;
+           gp->gp_cvgen = 0;
+       }
+       else {
+           /* Adding a new name to a subroutine invalidates method cache */
+           sub_generation++;
+       }
+    }
     return gp;
-
 }
 
 void
@@ -813,6 +852,10 @@ GV* gv;
         warn("Attempt to free unreferenced glob pointers");
         return;
     }
+    if (gp->gp_cv) {
+       /* Deleting the name of a subroutine invalidates method cache */
+       sub_generation++;
+    }
     if (--gp->gp_refcnt > 0) {
        if (gp->gp_egv == gv)
            gp->gp_egv = 0;
@@ -968,8 +1011,42 @@ HV* stash;
       
        *buf = '(';                     /* A cooky: "(". */
        strcpy(buf + 1, cp);
-       gv = gv_fetchmeth(stash, buf, strlen(buf), 0); /* fills the stash! */
-        if(gv && (cv = GvCV(gv))) filled = 1;
+       DEBUG_o( deb("Checking overloading of `%s' in package `%.256s'\n",
+                    cp, HvNAME(stash)) );
+       gv = gv_fetchmeth(stash, buf, strlen(buf), -1); /* no filling stash! */
+        if(gv && (cv = GvCV(gv))) {
+           char *name = buf;
+           if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
+               && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
+               /* GvSV contains the name of the method. */
+               GV *ngv;
+               
+               DEBUG_o( deb("Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n", 
+                            SvPV(GvSV(gv), na), cp, HvNAME(stash)) );
+               if (SvPOK(GvSV(gv)) 
+                   && (ngv = gv_fetchmethod(stash, SvPVX(GvSV(gv))))) {
+                   name = SvPVX(GvSV(gv));
+                   cv = GvCV(gv = ngv);
+               } else {
+                   /* Can be an import stub (created by `can'). */
+                   if (GvCVGEN(gv)) {
+                       croak("Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'", 
+                             (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
+                             cp, HvNAME(stash));
+                   } else
+                       croak("Cannot resolve method `%.256s' overloading `%s' in package `%.256s'", 
+                             (SvPOK(GvSV(gv)) ?  SvPVX(GvSV(gv)) : "???" ),
+                             cp, HvNAME(stash));
+               }
+               /* If the sub is only a stub then we may have a gv to AUTOLOAD */
+               gv = (GV*)*hv_fetch(GvSTASH(gv), name, strlen(name), TRUE);
+               cv = GvCV(gv);
+           }
+           DEBUG_o( deb("Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
+                        cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
+                        GvNAME(CvGV(cv))) );
+           filled = 1;
+       }
 #endif 
        amt.table[i]=(CV*)SvREFCNT_inc(cv);
     }
@@ -1255,7 +1332,7 @@ int flags;
       case dec_amg:
        SvSetSV(left,res); return left;
       case not_amg:
-ans=!SvOK(res); break;
+       ans=!SvOK(res); break;
       }
       return ans? &sv_yes: &sv_no;
     } else if (method==copy_amg) {
diff --git a/gv.h b/gv.h
index c713f4e..2def7c4 100644 (file)
--- a/gv.h
+++ b/gv.h
@@ -42,7 +42,9 @@ struct gp {
 
 #define GvFORM(gv)     (GvGP(gv)->gp_form)
 #define GvAV(gv)       (GvGP(gv)->gp_av)
-#define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))
+
+/* This macro is deprecated.  Do not use! */
+#define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))       /* DO NOT USE */
 
 #ifdef MICROPORT       /* Microport 2.4 hack */
 AV *GvAVn();
diff --git a/hints/aux_3.sh b/hints/aux_3.sh
new file mode 100644 (file)
index 0000000..aa3150a
--- /dev/null
@@ -0,0 +1,22 @@
+# hints/aux_3.sh
+#
+# Improved by Jake Hamby <jehamby@lightside.com> to support both Apple CC
+# and GNU CC.  Tested on A/UX 3.1.1 with GCC 2.6.3.
+# Now notifies of problem with version of dbm shipped with A/UX
+# Last modified 
+# Sun Jan  5 11:16:41 WET 1997
+
+case "$cc" in
+*gcc*) optimize='-O2'
+       ccflags="$ccflags -D_POSIX_SOURCE"
+       echo "Setting hints for GNU CC."
+       ;;
+*)     optimize='-O'
+       ccflags="$ccflags -B/usr/lib/big/ -DPARAM_NEEDS_TYPES -D_POSIX_SOURCE"
+       POSIX_cflags='ccflags="$ccflags -ZP -Du_long=U32"'
+       echo "Setting hints for Apple's CC.  If you plan to use"
+       echo "GNU CC, please rerun this Configure script as:"
+       echo "./Configure -Dcc=gcc"
+       ;;
+esac
+test -r ./broken-db.msg && . ./broken-db.msg
diff --git a/hints/irix_6_3.sh b/hints/irix_6_3.sh
new file mode 100644 (file)
index 0000000..11bd82a
--- /dev/null
@@ -0,0 +1,16 @@
+# hints/irix_6_3.sh
+#
+# Created by John Stoffel (jfs@fluent.com), 01/13/1997
+# Based on the Irix 6.2 hints file, but simplified.
+
+# Configure can't parse 'nm' output on Irix 6.3
+usenm='n'
+
+# This keeps optimizer warnings quiet.
+ccflags="$ccflags -Olimit 3000"
+
+# Gets rid of some extra libs that don't seem to be really needed.
+# See the Irix 6.2 hints file for some justifications.
+set `echo X "$libswanted "|sed -e 's/ sun / /' -e 's/ crypt / /' -e 's/ bsd / /' -e 's/ PW / /' -e 's/ dl / /' -e 's/ socket / /' -e 's/ nsl / /'`
+shift
+libswanted="$*"
diff --git a/hints/irix_6_4.sh b/hints/irix_6_4.sh
new file mode 100644 (file)
index 0000000..b5a9945
--- /dev/null
@@ -0,0 +1,16 @@
+# hints/irix_6_4.sh
+#
+# Created by John Stoffel (jfs@fluent.com), 01/13/1997
+# Based on the Irix 6.2 hints file, but simplified.
+
+# Configure can't parse 'nm' output on Irix 6.4
+usenm='n'
+
+# This keeps optimizer warnings quiet.
+ccflags="$ccflags -Olimit 3000"
+
+# Gets rid of some extra libs that don't seem to be really needed.
+# See the Irix 6.2 hints file for some justifications.
+set `echo X "$libswanted "|sed -e 's/ sun / /' -e 's/ crypt / /' -e 's/ bsd / /' -e 's/ PW / /' -e 's/ dl / /' -e 's/ socket / /' -e 's/ nsl / /'`
+shift
+libswanted="$*"
index f6f75d6..55feadc 100644 (file)
@@ -1,5 +1,5 @@
 # machten.sh
-# This is for MachTen 4.0.2.  It might work on other versions too.
+# This is for MachTen 4.0.3.  It might work on other versions too.
 #
 # MachTen users might need a fixed tr from ftp.tenon.com.  This should
 # be described in the MachTen release notes.
@@ -13,6 +13,9 @@
 #      Martijn Koster <m.koster@webcrawler.com>
 #      Richard Yeh <rcyeh@cco.caltech.edu>
 #
+# Reinstate sigsetjmp iff version is 4.0.3 or greater; use nm
+# (assumes Configure change); prune libswanted -- Dominic Dunlop 970113
+# Warn about test failure due to old Berkeley db -- Dominic Dunlop 970105
 # Do not use perl's malloc; SysV IPC OK -- Neil Cutcliffe, Tenon 961030
 # File::Find's use of link count disabled by Dominic Dunlop 960528
 # Perl's use of sigsetjmp etc. disabled by Dominic Dunlop 960521
 # know how to use it yet.
 #
 #  Updated by Dominic Dunlop <domo@tcp.ip.lu>
-#  Wed Nov 13 11:47:09 WET 1996
-
+#  Tue Jan 14 10:17:18 WET 1997
 
 # Power MachTen is a real memory system and its standard malloc
 # has been optimized for this. Using this malloc instead of Perl's
 # malloc may result in significant memory savings.
 usemymalloc='false'
 
-# Configure doesn't know how to parse the nm output.
-usenm=undef
+# Make symbol table listings les voluminous
+nmopts=-gp
 
 # Install in /usr/local by default
 prefix='/usr/local'
@@ -42,9 +44,19 @@ prefix='/usr/local'
 # determine this automatically.
 alignbytes=8
 
-# There appears to be a problem with perl's use of sigsetjmp and
+# 4.0.2 and earlier had a problem with perl's use of sigsetjmp and
 # friends.  Use setjmp and friends instead.
-d_sigsetjmp='undef' 
+expr "$osvers" \< "4.0.3" > /dev/null && d_sigsetjmp='undef'
+
+# Get rid of some extra libs which it takes Configure a tediously
+# long time never to find on MachTen
+set `echo X "$libswanted "|sed -e 's/ net / /' -e 's/ socket / /' \
+    -e 's/ inet / /' -e 's/ nsl / /' -e 's/ nm / /' -e 's/ malloc / /' \
+    -e 's/ ld / /' -e 's/ sun / /' -e 's/ posix / /' \
+    -e 's/ cposix / /' -e 's/ crypt / /' \
+    -e 's/ ucb / /' -e 's/ bsd / /' -e 's/ BSD / /' -e 's/ PW / /'`
+shift
+libswanted="$*"
 
 # MachTen always reports ony two links to directories, even if they
 # contain subdirectories.  Consequently, we use this variable to stop
@@ -66,7 +78,8 @@ 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.
        Propagating recommended variable dont_use_nlink
-
-Read the File::Find documentation for more information.
+        Propagating recommended variable nmopts
+Read the File::Find documentation for more information about dont_use_nlink
 
 EOM
+test -r ./broken-db.msg && . ./broken-db.msg
index 59087e3..9bce2a5 100644 (file)
@@ -129,7 +129,9 @@ fi
 
 # [Maybe we should just remove c from $libswanted ?]
 
-libs='-lsocket -lm'
+# Test would pick up wrong rand, so we hardwire the value for random()
+libs='-lsocket -lm -lbsd'
+randbits=31
 archobjs="os2$obj_ext dl_os2$obj_ext"
 
 # Run files without extension with sh:
diff --git a/hv.c b/hv.c
index e73266b..71009c9 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -423,7 +423,7 @@ I32 flags;
        if (entry == xhv->xhv_eiter)
            HvLAZYDEL_on(hv);
        else
-           he_free(entry, HvSHAREKEYS(hv));
+           he_free(hv, entry);
        --xhv->xhv_keys;
        return sv;
     }
@@ -485,7 +485,7 @@ U32 hash;
        if (entry == xhv->xhv_eiter)
            HvLAZYDEL_on(hv);
        else
-           he_free(entry, HvSHAREKEYS(hv));
+           he_free(hv, entry);
        --xhv->xhv_keys;
        return sv;
     }
@@ -746,19 +746,20 @@ newHV()
 }
 
 void
-he_free(hent, shared)
+he_free(hv, hent)
+HV *hv;
 register HE *hent;
-I32 shared;
 {
     if (!hent)
        return;
-    if (SvTYPE(HeVAL(hent)) == SVt_PVGV && GvCVu(HeVAL(hent)))
-       sub_generation++;               /* May be deletion of method? */
+    if (isGV(HeVAL(hent)) && GvCVu(HeVAL(hent)) && HvNAME(hv))
+       sub_generation++;       /* may be deletion of method from stash */
     SvREFCNT_dec(HeVAL(hent));
     if (HeKLEN(hent) == HEf_SVKEY) {
        SvREFCNT_dec(HeKEY_sv(hent));
         Safefree(HeKEY_hek(hent));
-    } else if (shared)
+    }
+    else if (HvSHAREKEYS(hv))
        unshare_hek(HeKEY_hek(hent));
     else
        Safefree(HeKEY_hek(hent));
@@ -766,17 +767,20 @@ I32 shared;
 }
 
 void
-he_delayfree(hent, shared)
+he_delayfree(hv, hent)
+HV *hv;
 register HE *hent;
-I32 shared;
 {
     if (!hent)
        return;
+    if (isGV(HeVAL(hent)) && GvCVu(HeVAL(hent)) && HvNAME(hv))
+       sub_generation++;       /* may be deletion of method from stash */
     sv_2mortal(HeVAL(hent));   /* free between statements */
     if (HeKLEN(hent) == HEf_SVKEY) {
        sv_2mortal(HeKEY_sv(hent));
        Safefree(HeKEY_hek(hent));
-    } else if (shared)
+    }
+    else if (HvSHAREKEYS(hv))
        unshare_hek(HeKEY_hek(hent));
     else
        Safefree(HeKEY_hek(hent));
@@ -810,7 +814,6 @@ HV *hv;
     register HE *ohent = Null(HE*);
     I32 riter;
     I32 max;
-    I32 shared;
 
     if (!hv)
        return;
@@ -821,12 +824,11 @@ HV *hv;
     max = HvMAX(hv);
     array = HvARRAY(hv);
     hent = array[0];
-    shared = HvSHAREKEYS(hv);
     for (;;) {
        if (hent) {
            ohent = hent;
            hent = HeNEXT(hent);
-           he_free(ohent, shared);
+           he_free(hv, ohent);
        }
        if (!hent) {
            if (++riter > max)
@@ -871,7 +873,7 @@ HV *hv;
 #endif
     if (entry && HvLAZYDEL(hv)) {      /* was deleted earlier? */
        HvLAZYDEL_off(hv);
-       he_free(entry, HvSHAREKEYS(hv));
+       he_free(hv, entry);
     }
     xhv->xhv_riter = -1;
     xhv->xhv_eiter = Null(HE*);
@@ -938,7 +940,7 @@ HV *hv;
 
     if (oldentry && HvLAZYDEL(hv)) {           /* was deleted earlier? */
        HvLAZYDEL_off(hv);
-       he_free(oldentry, HvSHAREKEYS(hv));
+       he_free(hv, oldentry);
     }
 
     xhv->xhv_eiter = entry;
index 55b5338..ea4241a 100644 (file)
@@ -106,7 +106,6 @@ parsehook
 patchlevel
 perldb
 perl_destruct_level
-pidstatus
 preambled
 preambleav
 preprocess
index af52c34..b904a52 100644 (file)
@@ -91,8 +91,9 @@ would yield
 =item C<basename>
 
 The basename() routine returns the first element of the list produced
-by calling fileparse() with the same arguments.  It is provided for
-compatibility with the UNIX shell command basename(1).
+by calling fileparse() with the same arguments, except that it always
+quotes metacharacters in the given suffixes.  It is provided for
+programmer compatibility with the UNIX shell command basename(1).
 
 =item C<dirname>
 
@@ -115,20 +116,23 @@ require Exporter;
 @ISA = qw(Exporter);
 @EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
 #use strict;
-#use vars qw($VERSION $Fileparse_fstype);
+#use vars qw($VERSION $Fileparse_fstype $Fileparse_fgcase);
 $VERSION = "2.4";
 
 
 #   fileparse_set_fstype() - specify OS-based rules used in future
 #                            calls to routines in this package
 #
-#   Currently recognized values: VMS, MSDOS, MacOS
+#   Currently recognized values: VMS, MSDOS, MacOS, os2, AmigaOS
 #       Any other name uses Unix-style rules
 
 sub fileparse_set_fstype {
-  my($old) = $Fileparse_fstype;
-  $Fileparse_fstype = $_[0] if $_[0];
-  $old;
+  my @old = ($Fileparse_fstype, $Fileparse_fgcase);
+  if (@_) {
+    $Fileparse_fstype = $_[0];
+    $Fileparse_fgcase = ($_[0] =~ /^(?:MacOS|VMS|os2|AmigaOS)/i);
+  }
+  wantarray ? @old : $old[0];
 }
 
 #   fileparse() - parse file specification
@@ -138,7 +142,7 @@ sub fileparse_set_fstype {
 
 sub fileparse {
   my($fullname,@suffices) = @_;
-  my($fstype) = $Fileparse_fstype;
+  my($fstype,$fgcase) = ($Fileparse_fstype, $Fileparse_fgcase);
   my($dirpath,$tail,$suffix,$basename);
 
   if ($fstype =~ /^VMS/i) {
@@ -165,15 +169,14 @@ sub fileparse {
   if (@suffices) {
     $tail = '';
     foreach $suffix (@suffices) {
-      if ($basename =~ /([\x00-\xff]*?)($suffix)$/) {
-        $tail = $2 . $tail;
-        $basename = $1;
+      my $pat = ($fgcase ? '(?i)' : '') . "($suffix)\$";
+      if ($basename =~ s/$pat//) {
+        $tail = $1 . $tail;
       }
     }
   }
 
   wantarray ? ($basename,$dirpath,$tail) : $basename;
-
 }
 
 
@@ -225,6 +228,6 @@ sub dirname {
     $dirname;
 }
 
-$Fileparse_fstype = $^O;
+fileparse_set_fstype $^O;
 
 1;
index ec874ec..0495459 100644 (file)
@@ -14,7 +14,8 @@ sub OVERLOAD {
     } else {
       $sub = $arg{$_};
       if (not ref $sub and $sub !~ /::/) {
-       $sub = "${'package'}::$sub";
+       $ {$package . "::(" . $_} = $sub;
+       $sub = \&nil;
       }
       #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n";
       *{$package . "::(" . $_} = \&{ $sub };
@@ -49,16 +50,28 @@ sub Overloaded {
   $package->can('()');
 }
 
+sub ov_method {
+  my $globref = shift;
+  return undef unless $globref;
+  my $sub = \&{*$globref};
+  return $sub if $sub ne \&nil;
+  return shift->can($ {*$globref});
+}
+
 sub OverloadedStringify {
   my $package = shift;
   $package = ref $package if ref $package;
-  $package->can('(""')
+  #$package->can('(""')
+  ov_method mycan($package, '(""'), $package;
 }
 
 sub Method {
   my $package = shift;
   $package = ref $package if ref $package;
-  $package->can('(' . shift)
+  #my $meth = $package->can('(' . shift);
+  ov_method mycan($package, '(' . shift), $package;
+  #return $meth if $meth ne \&nil;
+  #return $ {*{$meth}};
 }
 
 sub AddrRef {
@@ -76,6 +89,17 @@ sub StrVal {
     "$_[0]";
 }
 
+sub mycan {                            # Real can would leave stubs.
+  my ($package, $meth) = @_;
+  return \*{$package . "::$meth"} if defined &{$package . "::$meth"};
+  my $p;
+  foreach $p (@{$package . "::ISA"}) {
+    my $out = mycan($p, $meth);
+    return $out if $out;
+  }
+  return undef;
+}
+
 1;
 
 __END__
diff --git a/op.c b/op.c
index 3e3df86..3468310 100644 (file)
--- a/op.c
+++ b/op.c
@@ -212,7 +212,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
                    SvNVX(sv) = (double)curcop->cop_seq;
                    SvIVX(sv) = 999999999;      /* A ref, intro immediately */
                    SvFLAGS(sv) |= SVf_FAKE;
-                   if (CvANON(compcv)) {
+                   if (CvANON(compcv) || CvFORMAT(compcv)) {
                        /* "It's closures all the way down." */
                        CvCLONE_on(compcv);
                        if (cv != startcv) {
@@ -224,16 +224,17 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
                                    CvCLONE_on(bcv);
                                else {
                                    if (dowarn)
-                                       warn("Value of %s may be unavailable",
+                                       warn(
+                                         "Variable \"%s\" may be unavailable",
                                             name);
                                    break;
                                }
                            }
                        }
                    }
-                   else {
+                   else if (!CvUNIQUE(compcv)) {
                        if (dowarn && !CvUNIQUE(cv))
-                           warn("Value of %s will not stay shared", name);
+                           warn("Variable \"%s\" will not stay shared", name);
                    }
                }
                av_store(comppad, newoff, SvREFCNT_inc(oldsv));
@@ -258,10 +259,14 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
            }
            break;
        case CXt_EVAL:
-           if (cx->blk_eval.old_op_type != OP_ENTEREVAL &&
-               cx->blk_eval.old_op_type != OP_ENTERTRY)
-               return 0;       /* require must have its own scope */
-           saweval = i;
+           switch (cx->blk_eval.old_op_type) {
+           case OP_ENTEREVAL:
+               saweval = i;
+               break;
+           case OP_REQUIRE:
+               /* require must have its own scope */
+               return 0;
+           }
            break;
        case CXt_SUB:
            if (!saweval)
@@ -2376,7 +2381,7 @@ OP *op;
         cop->cop_line = copline;
         copline = NOLINE;
     }
-    cop->cop_filegv = GvREFCNT_inc(curcop->cop_filegv);
+    cop->cop_filegv = (GV*)SvREFCNT_inc(curcop->cop_filegv);
     cop->cop_stash = curstash;
 
     if (perldb && curstash != debstash) {
@@ -2810,6 +2815,7 @@ CV *cv;
        CvROOT(cv) = Nullop;
        LEAVE;
     }
+    CvFLAGS(cv) = 0;
     SvREFCNT_dec(CvGV(cv));
     CvGV(cv) = Nullgv;
     SvREFCNT_dec(CvOUTSIDE(cv));
@@ -2847,13 +2853,13 @@ CV* cv;
                  (CvANON(cv) ? "ANON"
                   : (cv == main_cv) ? "MAIN"
                   : CvUNIQUE(outside) ? "UNIQUE"
-                  : CvGV(cv) ? GvNAME(CvGV(cv)) : "?mystery?"),
+                  : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
                  outside,
                  (!outside ? "null"
                   : CvANON(outside) ? "ANON"
                   : (outside == main_cv) ? "MAIN"
                   : CvUNIQUE(outside) ? "UNIQUE"
-                  : CvGV(outside) ? GvNAME(CvGV(outside)) : "?mystery?"));
+                  : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
 
     for (ix = 1; ix <= AvFILL(pad); ix++) {
        if (SvPOK(pname[ix]))
@@ -2894,7 +2900,7 @@ CV* outside;
        CvANON_on(cv);
 
     CvFILEGV(cv)       = CvFILEGV(proto);
-    CvGV(cv)           = GvREFCNT_inc(CvGV(proto));
+    CvGV(cv)           = (GV*)SvREFCNT_inc(CvGV(proto));
     CvSTASH(cv)                = CvSTASH(proto);
     CvROOT(cv)         = CvROOT(proto);
     CvSTART(cv)                = CvSTART(proto);
@@ -3018,17 +3024,15 @@ OP *op;
 OP *proto;
 OP *block;
 {
+    char *name = op ? SvPVx(cSVOP->op_sv, na) : Nullch;
+    GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
     register CV *cv;
-    char *name = op ? SvPVx(cSVOP->op_sv, na) : "__ANON__";
-    GV* gv = gv_fetchpv(name, GV_ADDMULTI, SVt_PVCV);
-    AV* av;
+    AV *av;
     I32 ix;
 
-    if (op) {
+    if (op)
        SAVEFREEOP(op);
-       sub_generation++;
-    }
-    if (cv = GvCV(gv)) {
+    if (cv = (name ? GvCV(gv) : Nullcv)) {
        if (GvCVGEN(gv)) {
            /* just a cached method */
            SvREFCNT_dec(cv);
@@ -3045,9 +3049,8 @@ OP *block;
                        SvPOK(cv) ? SvPV((SV*)cv,na) : "none",
                        p ? p : "none");
            }
-           if ((const_sv || dowarn) && strNE(name, "BEGIN")) {
+           if (const_sv || dowarn) {
                line_t oldline = curcop->cop_line;
-
                curcop->cop_line = copline;
                warn(const_sv ? "Constant subroutine %s redefined"
                              : "Subroutine %s redefined",name);
@@ -3059,7 +3062,7 @@ OP *block;
     }
     if (cv) {                          /* must reuse cv if autoloaded */
        cv_undef(cv);
-       CvFLAGS(cv) = (CvFLAGS(cv)&~CVf_CLONE) | (CvFLAGS(compcv)&CVf_CLONE);
+       CvFLAGS(cv) = CvFLAGS(compcv);
        CvOUTSIDE(cv) = CvOUTSIDE(compcv);
        CvOUTSIDE(compcv) = 0;
        CvPADLIST(cv) = CvPADLIST(compcv);
@@ -3070,11 +3073,14 @@ OP *block;
     }
     else {
        cv = compcv;
+       if (name) {
+           GvCV(gv) = cv;
+           GvCVGEN(gv) = 0;
+           sub_generation++;
+       }
     }
-    GvCV(gv) = cv;
-    GvCVGEN(gv) = 0;
+    CvGV(cv) = (GV*)SvREFCNT_inc(gv);
     CvFILEGV(cv) = curcop->cop_filegv;
-    CvGV(cv) = GvREFCNT_inc(gv);
     CvSTASH(cv) = curstash;
 
     if (proto) {
@@ -3088,7 +3094,6 @@ OP *block;
        block = Nullop;
     }
     if (!block) {
-       CvROOT(cv) = 0;
        copline = NOLINE;
        LEAVE_SCOPE(floor);
        return cv;
@@ -3100,7 +3105,7 @@ OP *block;
     AvFLAGS(av) = AVf_REIFY;
 
     for (ix = AvFILL(comppad); ix > 0; ix--) {
-       if (!SvPADMY(curpad[ix]))
+       if (!SvPADMY(curpad[ix]) && !SvIMMORTAL(curpad[ix]))
            SvPADTMP_on(curpad[ix]);
     }
 
@@ -3112,9 +3117,39 @@ OP *block;
     CvROOT(cv)->op_next = 0;
     peep(CvSTART(cv));
 
-    if (op) {
-       char *s = strrchr(name,':');
-       if (s)
+    if (name) {
+       char *s;
+
+       if (perldb && curstash != debstash) {
+           SV *sv;
+           SV *tmpstr = sv_newmortal();
+           static GV *db_postponed;
+           CV *cv;
+           HV *hv;
+
+           sprintf(buf, "%s:%ld",
+                   SvPVX(GvSV(curcop->cop_filegv)), (long)subline);
+           sv = newSVpv(buf,0);
+           sv_catpv(sv,"-");
+           sprintf(buf,"%ld",(long)curcop->cop_line);
+           sv_catpv(sv,buf);
+           gv_efullname3(tmpstr, gv, Nullch);
+           hv_store(GvHV(DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
+           if (!db_postponed) {
+               db_postponed = gv_fetchpv("DB::postponed", TRUE, SVt_PVHV);
+           }
+           hv = GvHVn(db_postponed);
+           if (HvFILL(hv) >= 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
+               && (cv = GvCV(db_postponed))) {
+               dSP;
+               PUSHMARK(sp);
+               XPUSHs(tmpstr);
+               PUTBACK;
+               perl_call_sv((SV*)cv, G_DISCARD);
+           }
+       }
+
+       if ((s = strrchr(name,':')))
            s++;
        else
            s = name;
@@ -3145,37 +3180,6 @@ OP *block;
        }
     }
 
-    if (perldb && curstash != debstash) {
-       SV *sv;
-       SV *tmpstr = sv_newmortal();
-       static GV *db_postponed;
-       CV *cv;
-       HV *hv;
-
-       sprintf(buf,"%s:%ld",SvPVX(GvSV(curcop->cop_filegv)), (long)subline);
-       sv = newSVpv(buf,0);
-       sv_catpv(sv,"-");
-       sprintf(buf,"%ld",(long)curcop->cop_line);
-       sv_catpv(sv,buf);
-       gv_efullname3(tmpstr, gv, Nullch);
-       hv_store(GvHV(DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
-       if (!db_postponed) {
-           db_postponed = gv_fetchpv("DB::postponed", TRUE, SVt_PVHV);
-       }
-       hv = GvHVn(db_postponed);
-       if (HvFILL(hv) >= 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
-           && (cv = GvCV(db_postponed))) {
-           dSP;
-           PUSHMARK(sp);
-           XPUSHs(tmpstr);
-           PUTBACK;
-           perl_call_sv((SV*)cv, G_DISCARD);
-       }
-    }
-
-    if (!op)
-       GvCV(gv) = 0;   /* Will remember in SVOP instead. */
-
     copline = NOLINE;
     LEAVE_SCOPE(floor);
     return cv;
@@ -3202,18 +3206,19 @@ char *name;
 void (*subaddr) _((CV*));
 char *filename;
 {
+    GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
     register CV *cv;
-    GV *gv = gv_fetchpv((name ? name : "__ANON__"), GV_ADDMULTI, SVt_PVCV);
-
-    if (name)
-       sub_generation++;
-    if (cv = GvCV(gv)) {
-       if (GvCVGEN(gv))
-           cv = 0;                     /* just a cached method */
-       else if (CvROOT(cv) || CvXSUB(cv)) {    /* already defined? */
+
+    if (cv = (name ? GvCV(gv) : Nullcv)) {
+       if (GvCVGEN(gv)) {
+           /* just a cached method */
+           SvREFCNT_dec(cv);
+           cv = 0;
+       }
+       else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
+           /* already defined (or promised) */
            if (dowarn) {
                line_t oldline = curcop->cop_line;
-
                curcop->cop_line = copline;
                warn("Subroutine %s redefined",name);
                curcop->cop_line = oldline;
@@ -3222,19 +3227,22 @@ char *filename;
            cv = 0;
        }
     }
-    if (cv) {                          /* must reuse cv if autoloaded */
-       assert(SvREFCNT(CvGV(cv)) > 1);
-       SvREFCNT_dec(CvGV(cv));
-    }
+
+    if (cv)                            /* must reuse cv if autoloaded */
+       cv_undef(cv);
     else {
        cv = (CV*)NEWSV(1105,0);
        sv_upgrade((SV *)cv, SVt_PVCV);
+       if (name) {
+           GvCV(gv) = cv;
+           GvCVGEN(gv) = 0;
+           sub_generation++;
+       }
     }
-    GvCV(gv) = cv;
-    CvGV(cv) = GvREFCNT_inc(gv);
-    GvCVGEN(gv) = 0;
+    CvGV(cv) = (GV*)SvREFCNT_inc(gv);
     CvFILEGV(cv) = gv_fetchfile(filename);
     CvXSUB(cv) = subaddr;
+
     if (name) {
        char *s = strrchr(name,':');
        if (s)
@@ -3244,19 +3252,20 @@ char *filename;
        if (strEQ(s, "BEGIN")) {
            if (!beginav)
                beginav = newAV();
-           av_push(beginav, SvREFCNT_inc(gv));
+           av_push(beginav, (SV *)cv);
+           GvCV(gv) = 0;
        }
        else if (strEQ(s, "END")) {
            if (!endav)
                endav = newAV();
            av_unshift(endav, 1);
-           av_store(endav, 0, SvREFCNT_inc(gv));
+           av_store(endav, 0, (SV *)cv);
+           GvCV(gv) = 0;
        }
     }
-    else {
-       GvCV(gv) = 0;   /* Will remember elsewhere instead. */
+    else
        CvANON_on(cv);
-    }
+
     return cv;
 }
 
@@ -3289,11 +3298,11 @@ OP *block;
     }
     cv = compcv;
     GvFORM(gv) = cv;
-    CvGV(cv) = GvREFCNT_inc(gv);
+    CvGV(cv) = (GV*)SvREFCNT_inc(gv);
     CvFILEGV(cv) = curcop->cop_filegv;
 
     for (ix = AvFILL(comppad); ix > 0; ix--) {
-       if (!SvPADMY(curpad[ix]))
+       if (!SvPADMY(curpad[ix]) && !SvIMMORTAL(curpad[ix]))
            SvPADTMP_on(curpad[ix]);
     }
 
@@ -3635,9 +3644,31 @@ register OP *op;
 
     op->op_private |= (hints & HINT_STRICT_REFS);
     if (kid->op_type == OP_CONST) {
-       int iscv = (op->op_type==OP_RV2CV)*2;
-       GV *gv = 0;
+       char *name;
+       int iscv;
+       GV *gv;
+
+       name = SvPV(kid->op_sv, na);
+       if ((hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
+           char *badthing = Nullch;
+           switch (op->op_type) {
+           case OP_RV2SV:
+               badthing = "a SCALAR";
+               break;
+           case OP_RV2AV:
+               badthing = "an ARRAY";
+               break;
+           case OP_RV2HV:
+               badthing = "a HASH";
+               break;
+           }
+           if (badthing)
+               croak(
+         "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
+                     name, badthing);
+       }
        kid->op_type = OP_GV;
+       iscv = (op->op_type == OP_RV2CV) * 2;
        for (gv = 0; !gv; iscv++) {
            /*
             * This is a little tricky.  We only want to add the symbol if we
@@ -3647,7 +3678,7 @@ register OP *op;
             * or we get possible typo warnings.  OPpCONST_ENTERED says
             * whether the lexer already added THIS instance of this symbol.
             */
-           gv = gv_fetchpv(SvPVx(kid->op_sv, na),
+           gv = gv_fetchpv(name,
                iscv | !(kid->op_private & OPpCONST_ENTERED),
                iscv
                    ? SVt_PVCV
index 83af2d8..9027832 100644 (file)
@@ -122,3 +122,8 @@ after 5.003_08:
 after 5.003_11:
        Functions emx_{malloc,realloc,calloc,free} are exported from DLL.
        get_sysinfo() bugs corrected (flags were not used and wrongly defined).
+
+after 5.003_20:
+       _isterm is substituted instead of isatty, s?random instead of srand.
+       `register' disabled if -DDEBUGGING and not AOUT build: stupid SD386.
+       3-argument select() was stomping over memory.
index c9d1e55..701bb52 100644 (file)
--- a/os2/os2.c
+++ b/os2/os2.c
@@ -158,22 +158,6 @@ getpriority(int which /* ignored */, int pid)
 /* spawn */
 typedef void (*Sigfunc) _((int));
 
-static
-Sigfunc rsignal(signo,handler)
-int signo;
-Sigfunc handler;
-{
-    struct sigaction act,oact;
-    
-    act.sa_handler = handler;
-    sigemptyset(&act.sa_mask);
-    act.sa_flags = 0;
-    if (sigaction(signo, &act, &oact) < 0)
-       return(SIG_ERR);
-    else
-       return(oact.sa_handler);
-}
-
 static int
 result(int flag, int pid)
 {
index b2e1f66..ade4199 100644 (file)
  */
 #undef ACME_MESS       /**/
 
+/* ALTERNATE_SHEBANG:
+ *     This symbol, if defined, contains a "magic" string which may be used
+ *     as the first line of a Perl program designed to be executed directly
+ *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
+ *     begins with a character other then #, then Perl will only treat
+ *     it as a command line if if finds the string "perl" in the first
+ *     word; otherwise it's treated as the first line of code in the script.
+ *     (IOW, Perl won't hand off to another interpreter via an alternate
+ *     shebang sequence that might be legal Perl code.)
+ */
+/* #define ALTERNATE_SHEBANG "#!" / **/
+
 #ifndef SIGABRT
 #    define SIGABRT SIGILL
 #endif
@@ -99,6 +111,8 @@ char *my_tmpnam (char *);
 #define tmpfile        my_tmpfile
 #define tmpnam my_tmpnam
 #define isatty _isterm
+#define rand   random
+#define srand  srandom
 
 /*
  * fwrite1() should be a routine with the same calling sequence as fwrite(),
@@ -155,6 +169,11 @@ void *emx_realloc (void *, size_t);
 
 #endif
 
+/* With SD386 it is impossible to debug register variables. */
+#if !defined(PERL_IS_AOUT) && defined(DEBUGGING) && !defined(register)
+#  define register
+#endif
+
 /* Our private OS/2 specific data. */
 
 typedef struct OS2_Perl_data {
index ae441d5..529bcbd 100644 (file)
@@ -1,5 +1,5 @@
 #define PATCHLEVEL 3
-#define SUBVERSION 20
+#define SUBVERSION 21
 
 /*
        local_patches -- list of locally applied less-than-subversion patches.
diff --git a/perl.c b/perl.c
index 36e4795..8cb8169 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -116,6 +116,8 @@ register PerlInterpreter *sv_interp;
        nrs = newSVpv("\n", 1);
        rs = SvREFCNT_inc(nrs);
 
+       pidstatus = newHV();
+
 #ifdef MSDOS
        /*
         * There is no way we can refer to them from Perl so close them to save
@@ -154,7 +156,6 @@ register PerlInterpreter *sv_interp;
     PerlIO_init();      /* Hook to IO system */
 
     fdpid = newAV();   /* for remembering popen pids by fd */
-    pidstatus = newHV();/* for remembering status of dead pids */
 
     init_stacks();
     ENTER;
@@ -319,10 +320,6 @@ register PerlInterpreter *sv_interp;
     beginav = Nullav;
     endav = Nullav;
 
-    /* pid-to-status mappings for waitpid */
-    SvREFCNT_dec(pidstatus);
-    pidstatus = Nullhv;
-
     /* temp stack during pp_sort() */
     SvREFCNT_dec(sortstack);
     sortstack = Nullav;
@@ -402,8 +399,10 @@ register PerlInterpreter *sv_interp;
        warn("Scalars leaked: %d\n", sv_count);
 
     sv_free_arenas();
-    
-    linestr = NULL;            /* No SVs have survived, need to clean out */
+
+    /* No SVs have survived, need to clean out */
+    linestr = NULL;
+    pidstatus = Nullhv;
     if (origfilename)
        Safefree(origfilename);
     nuke_stacks();
@@ -1444,7 +1443,7 @@ char *s;
        printf("\nThis is perl, version %s",patchlevel);
 #endif
 
-       printf("\n\nCopyright 1987-1996, Larry Wall\n");
+       printf("\n\nCopyright 1987-1997, Larry Wall\n");
        printf("\n\t+ suidperl security patch");
 #ifdef MSDOS
        printf("\n\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
diff --git a/perl.h b/perl.h
index d816785..6e8d00b 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1242,6 +1242,7 @@ EXT U32           evalseq;        /* eval sequence number */
 EXT U32                sub_generation; /* inc to force methods to be looked up again */
 EXT char **    origenviron;
 EXT U32                origalen;
+EXT HV *       pidstatus;      /* pid-to-status mappings for waitpid */
 EXT U32 *      profiledata;
 EXT int                maxo INIT(MAXO);/* Number of ops */
 EXT char *     osname;         /* operating system */
@@ -1740,7 +1741,6 @@ IEXT int  Iforkprocess;   /* so do_open |- can return proc# */
 
 /* subprocess state */
 IEXT AV *      Ifdpid;         /* keep fd-to-pid mappings for my_popen */
-IEXT HV *      Ipidstatus;     /* keep pid-to-status mappings for waitpid */
 
 /* internal state */
 IEXT VOL int   Iin_eval;       /* trap "fatal" errors? */
diff --git a/perly.c b/perly.c
index 3386047..f8a1668 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -15,131 +15,131 @@ dep()
 #line 16 "perly.c"
 #define YYERRCODE 256
 short yylhs[] = {                                        -1,
-   43,    0,    8,    6,    9,    7,   10,   10,   10,   11,
-   11,   11,   11,   23,   23,   23,   23,   23,   23,   14,
-   14,   14,   13,   13,   40,   40,   12,   12,   12,   12,
-   12,   12,   12,   25,   25,   26,   26,   27,   28,   29,
-   30,   31,   42,   42,    1,    1,    1,    1,    3,    3,
-   44,    4,    5,   37,   38,   38,   39,   39,   45,   45,
-   47,   46,   15,   15,   15,   24,   24,   24,   35,   35,
-   35,   35,   35,   35,   35,   48,   35,   36,   36,   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,   16,   16,
-   16,   16,   16,   32,   32,   33,   33,   33,    2,    2,
-   41,   22,   17,   18,   19,   20,   21,   34,   34,   34,
-   34,
+   45,    0,    9,    7,   10,    8,   11,   11,   11,   12,
+   12,   12,   12,   24,   24,   24,   24,   24,   24,   15,
+   15,   15,   14,   14,   42,   42,   13,   13,   13,   13,
+   13,   13,   13,   26,   26,   27,   27,   28,   29,   30,
+   31,   32,   44,   44,    1,    1,    1,    1,    3,   38,
+   38,   46,    4,    5,    6,   39,   40,   40,   41,   41,
+   47,   47,   49,   48,   16,   16,   16,   25,   25,   25,
+   36,   36,   36,   36,   36,   36,   36,   50,   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,   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,   17,
+   17,   17,   17,   17,   17,   33,   33,   34,   34,   34,
+    2,    2,   43,   23,   18,   19,   20,   21,   22,   35,
+   35,   35,   35,
 };
 short yylen[] = {                                         2,
     0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    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,    3,
-    5,    0,    0,    1,    0,    1,    1,    1,    3,    2,
-    0,    7,    3,    3,    1,    2,    3,    1,    3,    5,
-    6,    3,    5,    2,    4,    0,    5,    1,    1,    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,    5,    1,    4,    5,    4,    1,    1,    1,    5,
-    6,    5,    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,    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,    5,    2,    4,    0,    5,    1,
+    1,    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,    5,    1,    4,    5,    4,    1,    1,
+    1,    5,    6,    5,    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,
 };
 short yydefred[] = {                                      1,
-    0,    7,    0,   44,   52,   52,    0,   52,    8,   45,
-    9,   11,    0,   46,   47,   48,    0,    0,    0,   60,
-   61,   14,    4,  152,    0,    0,  127,    0,  147,    0,
-   53,   53,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  159,  160,    0,
+    0,    7,    0,   44,   55,   53,    0,   53,    8,   45,
+    9,   11,    0,   46,   47,   48,    0,    0,    0,   62,
+   63,   14,    4,  154,    0,    0,  129,    0,  149,    0,
+   54,   54,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  161,  162,    0,
     0,    0,    0,    0,    0,    0,    0,   12,    0,    0,
     0,    0,    0,    0,    0,    0,    0,   10,    0,    0,
-    0,    0,  117,  119,    0,    0,    0,    0,  153,    0,
-   50,   54,    0,   59,    0,    7,  168,  171,  170,  169,
+    0,    0,  119,  121,    0,    0,    0,    0,  155,   50,
+    0,   56,    0,   61,    0,    7,  170,  173,  172,  171,
     0,    0,    0,    0,    0,    0,    4,    4,    4,    4,
-    4,    4,    0,    0,    0,    0,    0,  142,    0,    0,
-    0,    0,   74,    0,  166,    0,  133,    0,    0,    0,
-    0,    0,  162,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  107,    0,  163,  164,  165,  167,    0,
+    4,    4,    0,    0,    0,    0,    0,  144,    0,    0,
+    0,    0,   76,    0,  168,    0,  135,    0,    0,    0,
+    0,    0,  164,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  109,    0,  165,  166,  167,  169,    0,
     0,   33,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   99,  100,    0,    0,    0,    0,    0,
-    0,    0,    0,   13,    0,   49,   56,    0,    0,    0,
-   72,    0,    0,   76,    0,    0,    0,    0,    0,    0,
-    0,    4,  146,  148,    0,    0,    0,    0,    0,    0,
-    0,  109,    0,  131,    0,    0,  106,   26,    0,    0,
-   19,    0,    0,    0,   63,    0,    0,    0,    0,    0,
+    0,    0,    0,  101,  102,    0,    0,    0,    0,    0,
+    0,    0,    0,   13,    0,   49,   58,    0,    0,    0,
+   74,    0,    0,   78,    0,    0,    0,    0,    0,    0,
+    0,    4,  148,  150,    0,    0,    0,    0,    0,    0,
+    0,  111,    0,  133,    0,    0,  108,   26,    0,    0,
+   19,    0,    0,    0,   65,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   78,    0,   79,    0,    0,    0,    0,    0,    0,
-    0,  129,    0,    0,   58,   57,   51,    0,    3,    0,
-  150,    0,    0,  110,    0,   41,    0,   42,    0,    0,
-    0,    0,  161,    0,    0,   35,   40,    0,    0,    0,
-  149,  158,   75,    0,  134,    0,  136,    0,  108,    0,
-    0,    0,    0,    0,    0,    0,  116,    0,  114,    0,
-  125,    0,  130,    0,   73,    0,   77,    0,    0,    0,
-    0,    0,    0,    0,    0,   70,  135,  137,  124,    0,
-  122,    0,    0,  115,    0,  120,  126,  112,   62,  151,
-    6,    0,    0,    0,    0,    0,    0,    0,    0,  123,
-  121,   71,    7,   27,   28,    0,    0,   23,   24,    0,
+    0,   80,    0,   81,    0,    0,    0,    0,    0,    0,
+    0,  131,    0,    0,   60,   59,   52,    0,    3,    0,
+  152,    0,    0,  112,    0,   41,    0,   42,    0,    0,
+    0,    0,  163,    0,    0,   35,   40,    0,    0,    0,
+  151,  160,   77,    0,  136,    0,  138,    0,  110,    0,
+    0,    0,    0,    0,    0,    0,  118,    0,  116,    0,
+  127,    0,  132,    0,   75,    0,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,   72,  137,  139,  126,    0,
+  124,    0,    0,  117,    0,  122,  128,  114,   64,  153,
+    6,    0,    0,    0,    0,    0,    0,    0,    0,  125,
+  123,   73,    7,   27,   28,    0,    0,   23,   24,    0,
    31,    0,    0,    0,   21,    0,    0,    0,   30,    5,
     0,   29,    0,    0,   32,    0,   22,
 };
 short yydgoto[] = {                                       1,
-    9,   66,   10,   17,   95,   86,  333,   89,  322,    3,
-   11,   12,   68,  338,  260,   70,   71,   72,   73,   74,
-   75,   76,  266,   78,  267,  256,  258,  261,  269,  257,
-  259,  113,  197,   91,   79,  235,   83,  178,  247,  142,
-  264,   13,    2,   14,   15,   16,   85,  253,
+    9,   66,   10,   18,   95,   17,   86,  333,   89,  322,
+    3,   11,   12,   68,  338,  260,   70,   71,   72,   73,
+   74,   75,   76,  266,   78,  267,  256,  258,  261,  269,
+  257,  259,  113,  197,   91,   79,  235,   81,   83,  178,
+  247,  142,  264,   13,    2,   14,   15,   16,   85,  253,
 };
 short yysindex[] = {                                      0,
     0,    0, -126,    0,    0,    0,  -58,    0,    0,    0,
-    0,    0,  827,    0,    0,    0, -111, -235,  -21,    0,
-    0,    0,    0,    0,  -33,  -33,    0,    7,    0, 1816,
-    0,    0,   15,   30,   61,   62,  -29, 1816,   67,   70,
-   73, 1002,  939,  -33, 1236, 1292, -227,    0,    0,  -33,
+    0,    0,  827,    0,    0,    0, -242, -235,  -21,    0,
+    0,    0,    0,    0,  -33,  -33,    0,   11,    0, 1816,
+    0,    0,   13,   15,   30,   45,  -29, 1816,   67,   68,
+   70, 1002,  939,  -33, 1236, 1292, -227,    0,    0,  -33,
  1816, 1816, 1816, 1816, 1816, 1816, 1173,    0, 1816, 1816,
  1348,  -33,  -33,  -33,  -33, 1816, -220,    0, -169, 3558,
-  -78,  -59,    0,    0,  -38,   78,   52,   76,    0,   14,
-    0,    0, -137,    0, -118,    0,    0,    0,    0,    0,
- 1816,  107, 1816, 1847,   14, -137,    0,    0,    0,    0,
-    0,    0,  108, 3558,  109, 1407,  939,    0, 1847,    0,
-  -78,   76,    0, 1816,    0,  112,    0, 1847,  -23,   36,
-  -51, 1816,    0,   76,  -82,  -82,  -82,  -54,  -54,   72,
+  -78,  -59,    0,    0,  -62,   73,   42,   65,    0,    0,
+   -5,    0, -149,    0, -134,    0,    0,    0,    0,    0,
+ 1816,   97, 1816, 1847,   -5, -149,    0,    0,    0,    0,
+    0,    0,   99, 3558,  105, 1407,  939,    0, 1847,    0,
+  -78,   65,    0, 1816,    0,  107,    0, 1847,  -23,   36,
+  -51, 1816,    0,   65,  -82,  -82,  -82,  -54,  -54,   57,
   -27,  -82,  -82,    0,  -87,    0,    0,    0,    0, 1847,
-   14,    0, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
+   -5,    0, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
  1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
  1816, 1816, 1816,    0,    0,  -32, 1816, 1816, 1816, 1816,
- 1816, 1816, 1582,    0, 1816,    0,    0,  -36, -108,  667,
-    0, 1816,  209,    0,   14, 1816, 1816, 1816, 1816,  129,
- 1641,    0,    0,    0,  -16,    6,  126, 1816,   76, 1697,
- 1753,    0,   43,    0, 1816,   81,    0,    0, -199, -199,
-    0, -199, -199, -123,    0,   18, 3516, 1847, 1089,  382,
+ 1816, 1816, 1582,    0, 1816,    0,    0,  -36, -108,  665,
+    0, 1816,  209,    0,   -5, 1816, 1816, 1816, 1816,  114,
+ 1641,    0,    0,    0,  -16,    6,  111, 1816,   65, 1697,
+ 1753,    0,   38,    0, 1816,   74,    0,    0, -251, -251,
+    0, -251, -251, -131,    0,   18, 3516, 1847, 1089,  382,
    92, 3558, 3594, 3689,  369, 1060,  482,  285,  -82,  -82,
- 1816,    0, 1816,    0,  137,   33,   23,   58,   25,   69,
-   27,    0,  -14, 3558,    0,    0,    0, 1816,    0,  139,
-    0, 1816, 1816,    0, -199,    0,  141,    0,  143, -199,
-  156,  159,    0,  154, -169,    0,    0,  160,  144, 1816,
+ 1816,    0, 1816,    0,  128,   33,   23,   58,   25,   69,
+   27,    0,  -14, 3558,    0,    0,    0, 1816,    0,  131,
+    0, 1816, 1816,    0, -251,    0,  134,    0,  136, -251,
+  139,  141,    0,  144, -169,    0,    0,  156,  135, 1816,
     0,    0,    0,  -12,    0,  -10,    0,    1,    0,   71,
- 1816,   82, 1816,   29,   86, 1816,    0,   83,    0,   84,
-    0,   89,    0,  147,    0,  339,    0,   90,   90,   90,
-   90, 1816,   90, 1816,  175,    0,    0,    0,    0,   88,
-    0, 3653,   94,    0,  180,    0,    0,    0,    0,    0,
-    0, -220, -220, -168, -168,  196, -220,  184,   90,    0,
-    0,    0,    0,    0,    0,   90,  205,    0,    0,   90,
-    0, 1641, -220,  688,    0, 1816, -220,  211,    0,    0,
-  213,    0,   90,   90,    0, -168,    0,
+ 1816,   75, 1816,   29,   86, 1816,    0,   76,    0,   78,
+    0,   81,    0,  148,    0,  339,    0,   85,   85,   85,
+   85, 1816,   85, 1816,  168,    0,    0,    0,    0,   88,
+    0, 3653,   89,    0,  172,    0,    0,    0,    0,    0,
+    0, -220, -220, -178, -178,  175, -220,  160,   85,    0,
+    0,    0,    0,    0,    0,   85,  203,    0,    0,   85,
+    0, 1641, -220,  688,    0, 1816, -220,  180,    0,    0,
+  196,    0,   85,   85,    0, -178,    0,
 };
 short yyrindex[] = {                                      0,
     0,    0,  269,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  122,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0, 2076, 1906,    0,
     0, 2716, 2784,    0,    0,    0,    0,    0,    0,    0,
@@ -147,8 +147,8 @@ short yyrindex[] = {                                      0,
     0,    0,    0,    0,    0,    0,   79,    0,   -7,  181,
  2827, 2871,    0,    0, 2142, 1965,    0,   21,    0,    0,
     0,    0,  -31,    0,    0,    0,    0,    0,    0,    0,
- 2201,    0,    0, 3299,    0,  152,    0,    0,    0,    0,
-    0,    0,    0,  197,    0,    0,  236,    0, 3343,  444,
+ 2201,    0,    0, 3299,    0,  129,    0,    0,    0,    0,
+    0,    0,    0,  197,    0,    0,  213,    0, 3343,  444,
   545, 2312,    0,    0,    0, 2028,    0, 3386, 2827,    0,
     0, 2201,    0, 2437, 2914, 2952, 2990,  606,  723, 2480,
     0, 3063, 3107,    0,    0,    0,    0,    0,    0, 3424,
@@ -156,146 +156,146 @@ short yyrindex[] = {                                      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, 2548,    0,    0,    0,    0,  883,
-    0,  236,    0,    0,    0,  239,    0,    0,    0,    0,
-  230,    0,    0,    0,    0,  251,    0,    0, 2591,    0,
-    0,    0,    0,    0,    0, 2635,    0,    0,   -2,    2,
-    0,    8,   22,  525,    0,    0, 3579, 1448, 1504, 3226,
+    0,  213,    0,    0,    0,  234,    0,    0,    0,    0,
+  218,    0,    0,    0,    0,  239,    0,    0, 2591,    0,
+    0,    0,    0,    0,    0, 2635,    0,    0,   -2,    8,
+    0,   22,   24,  525,    0,    0, 3579, 1448, 1504, 3226,
   -39,  338,    0, 2490, 3535, 3498, 3462, 3262, 3150, 3188,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, 1870,    0,    0,    0,  238,    0,    0,
-    0,    0, 2201,    0,   24,    0,    0,    0,    0,  260,
-    0,    0,    0,    0,   37,    0,    0,    0,    0,    0,
+    0,    0,    0, 1870,    0,    0,    0,  230,    0,    0,
+    0,    0, 2201,    0,   37,    0,    0,    0,    0,  251,
+    0,    0,    0,    0,   61,    0,    0,    0,    0,    0,
     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,  213,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  249,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  238,    0,    0,    0,    0,    0,    0,
     0,  718,    0,    0,    0,    0,    0,    0,    0,    0,
     0,   79,   79,  153,  153,    0,   79,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  272,   79,  883,    0,    0,   79,    0,    0,    0,
+    0,  260,   79,  883,    0,    0,   79,    0,    0,    0,
     0,    0,    0,    0,    0,  153,    0,
 };
 short yygindex[] = {                                      0,
-    0,    0,    0,   45,  278,  -26,    0,  919, 1004,  -76,
-    0,    0,    0, -310,  -13, 3871, 3724,    0,    0,    0,
-    0,    0,  304,  -25,    0,    0,  190, -175,   -1,   53,
-  188,  384, -161, 1007,    0,    0,    0,  292,    0, -287,
-    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  300,  278,    0,  -26,    0,  892, 1004,
+  -76,    0,    0,    0, -313,  -13, 3871, 3724,    0,    0,
+    0,    0,    0,  304,  -25,    0,    0,  169, -175,   -8,
+   53,  152,  384, -161,  901,    0,    0,    0,    0,  281,
+    0, -287,    0,    0,    0,    0,    0,    0,    0,    0,
 };
 #define YYTABLESIZE 4154
 short yytable[] = {                                      69,
-   20,   83,   62,   62,   83,  207,   62,  203,  167,  180,
-  102,   23,  169,  206,  339,  268,  201,  112,   83,   83,
-  250,   82,  245,   83,  271,  124,  293,   55,  306,  122,
+   20,   85,   62,   62,   85,  207,   62,  203,  167,  180,
+  102,  339,  169,  206,   80,  268,  201,  112,   85,   85,
+  250,   82,  245,   85,  271,  124,  293,   57,  306,  122,
   307,  171,  121,   15,  334,  335,  167,   84,   18,  341,
-  149,  308,   38,  131,  168,  357,   93,  135,   16,  272,
-   18,   15,   21,   83,   97,  349,   18,  141,  233,  352,
-   38,   65,   17,  170,   37,  112,   16,  169,  149,   98,
-  186,  187,  188,  189,  190,  191,  282,   39,   25,   65,
-   17,  288,   37,  290,  172,  292,   23,  313,  199,   23,
-  231,   55,  195,  196,  305,   15,  112,  147,  148,  168,
-   99,  100,  143,  144,  145,  146,  105,  336,  337,  106,
-  174,   25,  107,   65,   25,   25,   25,  173,   25,  175,
-   25,   25,  177,   25,  315,  287,  326,  147,  148,  209,
-  210,  212,  213,  214,  215,  216,   23,   25,  179,    4,
-    5,    6,   25,    7,    8,   80,  182,  192,  248,  193,
-  289,  200,   20,  236,  237,  238,  239,  240,  241,  243,
-  202,  291,  205,  309,   62,  270,  273,  279,  196,   25,
-  351,  281,  255,  210,  148,  210,  286,  265,  314,  295,
-  330,  298,  167,  299,  274,   20,  276,  278,   20,   20,
-   20,  280,   20,  302,   20,   20,  300,   20,   19,  301,
-  303,   25,  304,   25,   25,  319,  311,  316,  317,  147,
-  148,   20,  321,  318,  149,  329,   20,  284,  331,  285,
-  332,   68,  112,   87,   68,  232,  163,  112,   88,  164,
-  165,  166,   83,   83,   83,   83,  340,  139,   68,   68,
-  139,   83,  342,   20,  346,  147,  148,   83,   83,  251,
-   83,  353,  252,  354,  139,  139,  344,   83,   83,  166,
-   83,   83,   83,   83,   83,   83,  101,  310,    2,  147,
-  148,  156,  196,   68,   55,   20,  156,   20,   20,   36,
-  147,  148,  147,  148,  147,  148,  147,  148,   34,  139,
-  255,  157,   65,   65,   65,   65,  154,  147,  148,  167,
-   39,   43,  147,  148,   43,   43,   43,   36,   43,   96,
-   43,   43,   34,   43,  147,  148,   77,   65,   65,  147,
+  149,  308,  357,  131,  168,  147,  148,  135,   38,  272,
+   93,   15,   97,   85,   98,  349,   18,  141,  233,  352,
+  172,   67,   16,  170,   17,  112,   38,  169,  149,   99,
+  186,  187,  188,  189,  190,  191,  282,   37,   25,   67,
+   16,  288,   17,  290,  100,  292,   23,  313,  199,   23,
+  231,   57,  195,  196,  305,   37,  112,  336,  337,  168,
+  174,   39,  143,  144,  145,  146,  105,  106,  175,  107,
+  177,   25,  173,   67,   25,   25,   25,   23,   25,   15,
+   25,   25,  179,   25,  315,  287,  326,  147,  148,  209,
+  210,  212,  213,  214,  215,  216,  182,   25,  192,    4,
+    5,    6,   25,    7,    8,  193,  200,  205,  248,   62,
+  289,  273,   20,  236,  237,  238,  239,  240,  241,  243,
+  202,  291,  279,  309,  281,  270,  148,  286,  196,   25,
+  351,  295,  255,  210,  298,  210,  299,  265,  314,  300,
+  330,  301,  167,  302,  274,   20,  276,  278,   20,   20,
+   20,  280,   20,  304,   20,   20,  303,   20,   19,  311,
+  316,   25,  317,   25,   25,  318,  319,  321,  329,  147,
+  148,   20,  332,  331,  149,  340,   20,  284,  342,  285,
+  353,   70,  112,   87,   70,  232,  163,  112,   88,  164,
+  165,  166,   85,   85,   85,   85,  354,  141,   70,   70,
+  141,   85,  346,   20,   51,  147,  148,   85,   85,  251,
+   85,   57,  252,  158,  141,  141,  344,   85,   85,  166,
+   85,   85,   85,   85,   85,   85,  101,  310,    2,  147,
+  148,  156,  196,   70,   36,   20,   34,   20,   20,  159,
+  147,  148,  147,  148,  147,  148,  147,  148,  156,  141,
+  255,   39,   67,   67,   67,   67,   36,  147,  148,  167,
+   34,   43,  147,  148,   43,   43,   43,   21,   43,   96,
+   43,   43,  211,   43,  147,  148,   77,   67,   67,  147,
   148,  147,  148,  147,  148,  147,  148,   43,   69,  147,
-  148,  149,   43,  211,   25,   25,   25,   25,   25,   25,
-  348,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+  148,  149,   43,  348,   25,   25,   25,   25,   25,   25,
+  262,   25,   25,   25,   25,   25,   25,   25,   25,   25,
    25,   25,   25,   25,  147,  148,  328,   25,   25,   43,
    25,   25,   25,   25,   25,  147,  148,  147,  148,   25,
-   25,   25,   25,   25,   25,  167,  262,   25,   80,  320,
-  153,   80,  147,  148,  147,  148,   25,  185,   25,   25,
-    0,   43,    0,    0,   43,   80,   80,  162,    0,    0,
+   25,   25,   25,   25,   25,  167,  185,   25,   82,  320,
+  153,   82,  147,  148,  147,  148,   25,    0,   25,   25,
+    0,   43,    0,    0,   43,   82,   82,  162,    0,    0,
   163,  156,    0,  164,  165,  166,    0,  149,   20,   20,
    20,   20,   20,   20,    0,   20,   20,   20,   20,   20,
    20,   20,   20,   20,   20,   20,   20,   20,    0,  167,
-   80,   20,   20,    0,   20,   20,   20,   20,   20,    0,
+   82,   20,   20,    0,   20,   20,   20,   20,   20,    0,
     0,    0,    0,   20,   20,   20,   20,   20,   20,    0,
-    0,   20,   68,   68,   68,   68,    0,    0,    0,  167,
-   20,  149,   20,   20,    0,    0,    0,    0,  139,  139,
-  139,  139,  167,    0,  181,    0,  168,   68,   68,  168,
-  168,  168,    0,  168,  152,  168,  168,  152,  168,  150,
-    0,  149,    0,  139,  139,  151,  152,  153,  154,    0,
-    0,  152,  152,    0,  149,  204,  152,  168,  155,  157,
+    0,   20,   70,   70,   70,   70,    0,    0,    0,  167,
+   20,  149,   20,   20,    0,    0,    0,    0,  141,  141,
+  141,  141,  167,    0,  181,    0,  170,   70,   70,  170,
+  170,  170,    0,  170,  154,  170,  170,  154,  170,  150,
+    0,  149,    0,  141,  141,  151,  152,  153,  154,    0,
+    0,  154,  154,    0,  149,  204,  154,  170,  155,  157,
   158,  159,  160,  161,  162,    0,    0,  163,    0,    0,
   164,  165,  166,    0,   43,   43,   43,   43,   43,   43,
-    0,   43,   43,   43,  152,    0,  152,   43,    0,    0,
+    0,   43,   43,   43,  154,    0,  154,   43,    0,    0,
    43,   43,   43,   43,    0,    0,    0,   43,   43,    0,
    43,   43,   43,   43,   43,    0,    0,    0,    0,   43,
-   43,   43,   43,   43,   43,   64,  152,   43,   64,  168,
-    0,    0,  167,  153,  154,    0,   43,  169,   43,   43,
-  169,  169,  169,   64,  169,  111,  169,  169,  111,  169,
+   43,   43,   43,   43,   43,   66,  154,   43,   66,  170,
+    0,    0,  167,  153,  154,    0,   43,  171,   43,   43,
+  171,  171,  171,   66,  171,  113,  171,  171,  113,  171,
   162,    0,    0,  163,    0,    0,  164,  165,  166,    0,
-    0,    0,  111,  111,  149,    0,    0,  111,  169,   80,
-   80,   80,   80,    0,    0,    0,    0,   64,    0,  150,
+    0,    0,  113,  113,  149,    0,    0,  113,  171,   82,
+   82,   82,   82,    0,    0,    0,    0,   66,    0,  150,
     0,    0,    0,    0,    0,  151,  152,  153,  154,    0,
-    0,  294,    0,    0,   80,   80,  297,  111,  155,  157,
-  158,  159,  160,  161,  162,    0,  101,  163,    0,  101,
+    0,  294,    0,    0,   82,   82,  297,  113,  155,  157,
+  158,  159,  160,  161,  162,    0,  103,  163,    0,  103,
   164,  165,  166,    0,    0,  151,  152,  153,  154,    0,
-    0,    0,    0,  101,  101,    0,    0,    0,  101,    0,
-  169,  159,  160,  161,  162,    0,    0,  163,    0,    0,
+    0,    0,    0,  103,  103,    0,    0,    0,  103,    0,
+  171,  159,  160,  161,  162,    0,    0,  163,    0,    0,
   164,  165,  166,    0,    0,    0,    0,  162,    0,    0,
-  163,    0,    0,  164,  165,  166,    0,    0,  101,    0,
-  168,  168,  168,  168,  168,    0,  168,  168,  168,    0,
-    0,    0,  168,    0,    0,  152,  152,  152,  152,    0,
-    0,    0,    0,  168,  152,  168,  168,  168,  168,  168,
-  152,  152,  152,  152,  168,  168,  168,  168,  168,  168,
-  152,  152,  168,  152,  152,  152,  152,  152,  152,  152,
-    0,  168,  152,  168,  168,  152,  152,  152,   92,    0,
-    0,   92,    0,  102,    0,    0,  102,    0,  151,  152,
-  153,  154,    0,    0,    0,   92,   92,    0,    0,    0,
-  102,  102,    0,    0,    0,  102,  161,  162,    0,    0,
-  163,  249,    0,  164,  165,  166,   64,   64,   64,   64,
-    0,  169,  169,  169,  169,  169,    0,  169,  169,  169,
-   92,    0,  350,  169,    0,  102,  111,  111,  111,  111,
-    0,   64,    0,    0,  169,  111,  169,  169,  169,  169,
-  169,  111,  111,  111,  111,  169,  169,  169,  169,  169,
-  169,  111,  111,  169,  111,  111,  111,  111,  111,  111,
-  111,    0,  169,  111,  169,  169,  111,  111,  111,   52,
+  163,    0,    0,  164,  165,  166,    0,    0,  103,    0,
+  170,  170,  170,  170,  170,    0,  170,  170,  170,    0,
+    0,    0,  170,    0,    0,  154,  154,  154,  154,    0,
+    0,    0,    0,  170,  154,  170,  170,  170,  170,  170,
+  154,  154,  154,  154,  170,  170,  170,  170,  170,  170,
+  154,  154,  170,  154,  154,  154,  154,  154,  154,  154,
+    0,  170,  154,  170,  170,  154,  154,  154,   94,    0,
+    0,   94,    0,  104,    0,    0,  104,    0,  151,  152,
+  153,  154,    0,    0,    0,   94,   94,    0,    0,    0,
+  104,  104,    0,    0,    0,  104,  161,  162,    0,  249,
+  163,    0,    0,  164,  165,  166,   66,   66,   66,   66,
+    0,  171,  171,  171,  171,  171,    0,  171,  171,  171,
+   94,    0,  350,  171,    0,  104,  113,  113,  113,  113,
+    0,   66,    0,    0,  171,  113,  171,  171,  171,  171,
+  171,  113,  113,  113,  113,  171,  171,  171,  171,  171,
+  171,  113,  113,  171,  113,  113,  113,  113,  113,  113,
+  113,    0,  171,  113,  171,  171,  113,  113,  113,   52,
     0,    0,   62,   64,   50,    0,   57,    0,   65,   60,
-    0,   59,    0,    0,    0,    0,    0,  101,  101,  101,
-  101,    0,    0,    0,    0,   58,  101,    0,    0,    0,
-   63,    0,  101,  101,  101,  101,    0,    0,    0,    0,
-    0,    0,  101,  101,    0,  101,  101,  101,  101,  101,
-  101,  101,    0,    0,  101,   43,    0,   61,   43,   43,
-   43,    0,   43,    0,   43,   43,    0,   43,    0,    0,
-    0,   67,    4,    5,    6,   81,    7,    8,    0,    0,
-    0,   43,    0,    0,    0,    0,   43,    0,    0,   23,
-    0,    0,   53,    4,    5,    6,    0,    7,    8,    0,
-  108,    0,    0,  117,    0,    0,    0,    0,    0,    0,
-    0,   52,    0,   43,   62,   64,   50,    0,   57,    0,
-   65,   60,    0,   59,    0,    0,    0,    0,    0,   92,
-   92,   92,   92,    0,  102,  102,  102,  102,  176,    0,
-    0,    0,   63,  102,    0,   43,    0,    0,   43,  102,
-  102,  102,  102,  184,   92,   92,    0,   92,    0,  102,
-  102,    0,  102,  102,  102,  102,  102,  102,  102,   61,
-    0,  102,   92,    0,   52,    0,    0,   62,   64,   50,
-    0,   57,    0,   65,   60,    0,   59,    0,    0,  114,
-  115,    0,    0,    0,    0,    0,  123,    0,    0,  208,
-    0,   23,    0,    0,   53,   63,    0,    0,  136,  137,
-  138,  139,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   59,    0,    0,    0,    0,    0,  103,  103,  103,
+  103,    0,    0,    0,    0,   58,  103,    0,    0,    0,
+   63,    0,  103,  103,  103,  103,    0,    0,    0,    0,
+    0,    0,  103,  103,   67,  103,  103,  103,  103,  103,
+  103,  103,    0,    0,  103,   43,    0,   61,   43,   43,
+   43,    0,   43,    0,   43,   43,   92,   43,    0,    0,
+    4,    5,    6,  108,    7,    8,  117,    0,    0,    0,
+    0,   43,    0,  114,  115,    0,   43,    0,    0,   23,
+  123,    0,   53,    4,    5,    6,    0,    7,    8,    0,
+    0,    0,  136,  137,  138,  139,    0,    0,    0,    0,
+    0,   52,  176,   43,   62,   64,   50,    0,   57,    0,
+   65,   60,    0,   59,    0,    0,  184,    0,    0,   94,
+   94,   94,   94,    0,  104,  104,  104,  104,    0,    0,
+    0,    0,   63,  104,    0,   43,    0,  198,   43,  104,
+  104,  104,  104,    0,   94,   94,    0,   94,    0,  104,
+  104,    0,  104,  104,  104,  104,  104,  104,  104,   61,
+    0,  104,  208,    0,   52,    0,    0,   62,   64,   50,
+    0,   57,    0,   65,   60,    0,   59,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   23,    0,    0,   53,   63,    0,    0,    0,  246,
+    0,    0,    0,    0,    0,    0,  254,    0,    0,    0,
     0,    0,   22,   24,   25,   26,   27,   28,    0,   29,
-   30,   31,   61,    0,    0,   32,  246,    0,   33,   34,
-   35,   36,    0,  254,    0,   37,   38,    0,   39,   40,
-   41,   42,   43,  198,    0,    0,    0,   44,   45,   46,
+   30,   31,   61,    0,    0,   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,   23,   51,    0,   53,    0,    0,
     0,    0,    0,    0,   54,    0,   55,   56,   43,   43,
    43,   43,   43,   43,    0,   43,   43,   43,    0,    0,
@@ -332,18 +332,18 @@ short yytable[] = {                                      69,
     0,   59,   38,    0,   39,   40,   41,   42,   43,    0,
     0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
    63,   51,    0,   53,    0,    0,    0,    0,    0,    0,
-   54,    0,   55,   56,    0,    0,    0,    0,   85,    0,
-    0,   85,  116,   25,   26,   27,   28,   61,   29,   30,
-   31,    0,    0,    0,   32,   85,   85,    0,    0,    0,
-   85,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+   54,    0,   55,   56,    0,    0,    0,    0,   87,    0,
+    0,   87,  116,   25,   26,   27,   28,   61,   29,   30,
+   31,    0,    0,    0,   32,   87,   87,    0,    0,    0,
+   87,    0,    0,    0,    0,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
    48,   49,   53,    0,   51,    0,    0,    0,    0,    0,
-   85,    0,    0,   54,   86,   55,   56,   86,   24,   25,
+   87,    0,    0,   54,   88,   55,   56,   88,   24,   25,
    26,   27,   28,    0,   29,   30,   31,    0,    0,    0,
-   32,   86,   86,    0,    0,    0,   86,    0,    0,    0,
+   32,   88,   88,    0,    0,    0,   88,    0,    0,    0,
     0,   38,    0,   39,   40,   41,   42,   43,    0,    0,
     0,    0,   44,   45,   46,   47,   48,   49,    0,    0,
-   51,    0,    0,    0,    0,    0,   86,    0,    0,   54,
+   51,    0,    0,    0,    0,    0,   88,    0,    0,   54,
     0,   55,   56,    0,   24,   25,   26,   27,   28,    0,
    29,   30,   31,    0,   52,    0,   32,   62,   64,   50,
     0,   57,  242,   65,   60,    0,   59,   38,    0,   39,
@@ -355,16 +355,16 @@ short yytable[] = {                                      69,
    57,    0,   65,   60,    0,   59,   38,    0,   39,   40,
    41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
    47,   48,   49,    0,   63,   51,    0,   53,    0,    0,
-    0,    0,    0,    0,   54,    0,   55,   56,    0,   85,
-   85,   85,   85,    0,    0,    0,    0,    0,   85,   52,
-    0,   61,   62,   64,   50,   85,   57,  275,   65,   60,
-    0,   59,    0,    0,   85,   85,    0,   85,   85,   85,
-   85,   85,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   54,    0,   55,   56,    0,   87,
+   87,   87,   87,    0,    0,    0,    0,    0,   87,   52,
+    0,   61,   62,   64,   50,   87,   57,  275,   65,   60,
+    0,   59,    0,    0,   87,   87,    0,   87,   87,   87,
+   87,   87,    0,    0,    0,    0,    0,    0,    0,    0,
    63,    0,    0,    0,    0,    0,   53,    0,    0,    0,
-    0,    0,    0,    0,    0,   86,   86,   86,   86,    0,
-    0,    0,    0,    0,   86,   52,    0,   61,   62,   64,
+    0,    0,    0,    0,    0,   88,   88,   88,   88,    0,
+    0,    0,    0,    0,   88,   52,    0,   61,   62,   64,
    50,    0,   57,  277,   65,   60,    0,   59,    0,    0,
-   86,   86,    0,   86,   86,   86,   86,   86,    0,    0,
+   88,   88,    0,   88,   88,   88,   88,   88,    0,    0,
     0,    0,    0,    0,    0,    0,   63,    0,    0,    0,
     0,    0,   53,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,   24,   25,
@@ -375,203 +375,203 @@ short yytable[] = {                                      69,
    51,    0,    0,    0,    0,    0,    0,    0,    0,   54,
     0,   55,   56,    0,    0,    0,   22,   24,   25,   26,
    27,   28,    0,   29,   30,   31,   61,    0,    0,   32,
-   67,    0,    0,   67,    0,    0,    0,    0,    0,    0,
-   38,    0,   39,   40,   41,   42,   43,   67,   67,    0,
+   69,    0,    0,   69,    0,    0,    0,    0,    0,    0,
+   38,    0,   39,   40,   41,   42,   43,   69,   69,    0,
     0,   44,   45,   46,   47,   48,   49,  167,    0,   51,
-    0,   53,    0,    0,    0,    0,  145,    0,   54,  145,
+    0,   53,    0,    0,    0,    0,  147,    0,   54,  147,
    55,   56,    0,   24,   25,   26,   27,   28,    0,   29,
-   30,   31,   67,  145,  145,   32,    0,    0,  145,  149,
+   30,   31,   69,  147,  147,   32,    0,    0,  147,  149,
     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,   51,  145,    0,  145,    0,
-    0,    0,    0,    0,   54,  128,   55,   56,  128,   24,
+   47,   48,   49,    0,    0,   51,  147,    0,  147,    0,
+    0,    0,    0,    0,   54,  130,   55,   56,  130,   24,
    25,   26,   27,   28,    0,   29,   30,   31,    0,    0,
-    0,   32,  128,  128,    0,    0,    0,  128,  145,    0,
+    0,   32,  130,  130,    0,    0,    0,  130,  147,    0,
     0,    0,   38,    0,   39,   40,   41,   42,   43,    0,
     0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
-    0,   51,    0,    0,    0,  128,    0,  128,    0,    0,
-   54,    0,   55,   56,    0,    0,    0,    0,  152,    0,
-    0,  152,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,  152,  152,  128,    0,    0,
-  152,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+    0,   51,    0,    0,    0,  130,    0,  130,    0,    0,
+   54,    0,   55,   56,    0,    0,    0,    0,  154,    0,
+    0,  154,   24,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,  154,  154,  130,    0,    0,
+  154,    0,    0,    0,    0,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,  138,    0,  152,  138,
-  152,    0,    0,   54,    0,   55,   56,    0,    0,    0,
-    0,    0,    0,  138,  138,  153,  154,    0,  138,    0,
-    0,   67,   67,   67,   67,    0,    0,    0,    0,    0,
-  152,  161,  162,    0,    0,  163,    0,    0,  164,  165,
-  166,    0,    0,    0,    0,    0,   67,   67,  138,    0,
-    0,    0,    0,    0,    0,    0,    0,  145,  145,  145,
-  145,    0,  113,    0,    0,  113,  145,    0,    0,    0,
-    0,    0,  145,  145,  145,  145,    0,    0,  138,  113,
-  113,    0,  145,  145,  113,  145,  145,  145,  145,  145,
-  145,  145,    0,    0,  145,    0,    0,  145,  145,  145,
+   48,   49,    0,    0,   51,    0,  140,    0,  154,  140,
+  154,    0,    0,   54,    0,   55,   56,    0,    0,    0,
+    0,    0,    0,  140,  140,  153,  154,    0,  140,    0,
+    0,   69,   69,   69,   69,    0,    0,    0,    0,    0,
+  154,  161,  162,    0,    0,  163,    0,    0,  164,  165,
+  166,    0,    0,    0,    0,    0,   69,   69,  140,    0,
+    0,    0,    0,    0,    0,    0,    0,  147,  147,  147,
+  147,    0,  115,    0,    0,  115,  147,    0,    0,    0,
+    0,    0,  147,  147,  147,  147,    0,    0,  140,  115,
+  115,    0,  147,  147,  115,  147,  147,  147,  147,  147,
+  147,  147,    0,    0,  147,    0,    0,  147,  147,  147,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  113,    0,  113,    0,  128,  128,  128,  128,
-    0,  154,    0,    0,  154,  128,    0,    0,    0,    0,
-    0,  128,  128,  128,  128,    0,    0,    0,  154,  154,
-    0,  128,  128,  154,  128,  128,  128,  128,  128,  128,
-  128,    0,    0,  128,    0,    0,  128,  128,  128,    0,
+    0,    0,  115,    0,  115,    0,  130,  130,  130,  130,
+    0,  156,    0,    0,  156,  130,    0,    0,    0,    0,
+    0,  130,  130,  130,  130,    0,    0,    0,  156,  156,
+    0,  130,  130,  156,  130,  130,  130,  130,  130,  130,
+  130,    0,    0,  130,    0,    0,  130,  130,  130,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  154,    0,    0,    0,    0,    0,  152,
-  152,  152,  152,    0,    0,    0,    0,    0,  152,    0,
-    0,    0,    0,    0,  152,  152,  152,  152,    0,    0,
-    0,    0,    0,  154,  152,  152,    0,  152,  152,  152,
-  152,  152,  152,  152,    0,    0,  152,    0,    0,  152,
-  152,  152,    0,    0,    0,    0,    0,  138,  138,  138,
-  138,    0,  155,    0,    0,    0,  138,    0,    0,    0,
-    0,    0,  138,  138,  138,  138,    0,    0,    0,  155,
-  155,    0,  138,  138,  155,  138,  138,  138,  138,  138,
-  138,  138,    0,    0,  138,    0,    0,  138,  138,  138,
+    0,    0,    0,  156,    0,    0,    0,    0,    0,  154,
+  154,  154,  154,    0,    0,    0,    0,    0,  154,    0,
+    0,    0,    0,    0,  154,  154,  154,  154,    0,    0,
+    0,    0,    0,  156,  154,  154,    0,  154,  154,  154,
+  154,  154,  154,  154,    0,    0,  154,    0,    0,  154,
+  154,  154,    0,    0,    0,    0,    0,  140,  140,  140,
+  140,    0,  157,    0,    0,    0,  140,    0,    0,    0,
+    0,    0,  140,  140,  140,  140,    0,    0,    0,  157,
+  157,    0,  140,  140,  157,  140,  140,  140,  140,  140,
+  140,  140,    0,    0,  140,    0,    0,  140,  140,  140,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  155,    0,  155,    0,    0,    0,    0,    0,
-    0,    0,    0,  113,  113,  113,  113,    0,    0,    0,
-    0,    0,  113,    0,    0,    0,    0,    0,  113,  113,
-  113,  113,    0,    0,  155,    0,    0,    0,  113,  113,
-    0,  113,  113,  113,  113,  113,  113,  113,    0,    0,
-  113,    0,    0,  113,  113,  113,    0,    0,    0,    0,
+    0,    0,  157,    0,  157,    0,    0,    0,    0,    0,
+    0,    0,    0,  115,  115,  115,  115,    0,    0,    0,
+    0,    0,  115,    0,    0,    0,    0,    0,  115,  115,
+  115,  115,    0,    0,  157,    0,    0,    0,  115,  115,
+    0,  115,  115,  115,  115,  115,  115,  115,    0,    0,
+  115,    0,    0,  115,  115,  115,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  154,  154,  154,  154,    0,  140,    0,    0,
-    0,  154,    0,    0,    0,    0,    0,  154,  154,  154,
-  154,    0,    0,    0,  140,  140,    0,  154,  154,  140,
-  154,  154,  154,  154,  154,  154,  154,    0,    0,  154,
-    0,    0,  154,  154,  154,    0,    0,    0,    0,    0,
-  105,    0,    0,  105,    0,    0,    0,  140,    0,  140,
-   91,    0,    0,   91,    0,    0,    0,  105,  105,    0,
-    0,    0,  105,    0,    0,    0,    0,   91,   91,    0,
-    0,    0,   91,    0,    0,    0,    0,    0,    0,  140,
+    0,    0,  156,  156,  156,  156,    0,  142,    0,    0,
+    0,  156,    0,    0,    0,    0,    0,  156,  156,  156,
+  156,    0,    0,    0,  142,  142,    0,  156,  156,  142,
+  156,  156,  156,  156,  156,  156,  156,    0,    0,  156,
+    0,    0,  156,  156,  156,    0,    0,    0,    0,    0,
+  107,    0,    0,  107,    0,    0,    0,  142,    0,  142,
+   93,    0,    0,   93,    0,    0,    0,  107,  107,    0,
+    0,    0,  107,    0,    0,    0,    0,   93,   93,    0,
+    0,    0,   93,    0,    0,    0,    0,    0,    0,  142,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  105,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   91,  155,  155,  155,  155,    0,   66,    0,
-    0,   66,  155,    0,    0,    0,    0,    0,  155,  155,
-  155,  155,  105,    0,    0,   66,   66,    0,  155,  155,
-   66,  155,  155,  155,  155,  155,  155,  155,    0,    0,
-  155,    0,    0,  155,  155,  155,    0,    0,    0,    0,
-    0,   69,    0,    0,    0,    0,    0,    0,    0,    0,
-   66,    0,    0,    0,    0,    0,    0,    0,   69,   69,
-    0,    0,    0,   69,    0,    0,    0,    0,    0,    0,
+    0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   93,  157,  157,  157,  157,    0,   68,    0,
+    0,   68,  157,    0,    0,    0,    0,    0,  157,  157,
+  157,  157,  107,    0,    0,   68,   68,    0,  157,  157,
+   68,  157,  157,  157,  157,  157,  157,  157,    0,    0,
+  157,    0,    0,  157,  157,  157,    0,    0,    0,    0,
+    0,   71,    0,    0,    0,    0,    0,    0,    0,    0,
+   68,    0,    0,    0,    0,    0,    0,    0,   71,   71,
+    0,    0,    0,   71,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   66,    0,    0,    0,    0,  104,    0,    0,  104,    0,
-    0,   69,    0,   69,    0,    0,    0,    0,    0,    0,
-    0,    0,  104,  104,    0,    0,    0,  104,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  140,  140,
-  140,  140,    0,   69,    0,    0,    0,  140,    0,    0,
-    0,    0,    0,  140,  140,  140,  140,  104,    0,    0,
-    0,    0,    0,  140,  140,    0,  140,  140,  140,  140,
-  140,  140,  140,    0,    0,  140,    0,    0,  140,  140,
-  140,  105,  105,  105,  105,    0,  141,  104,    0,  141,
-  105,   91,   91,   91,   91,    0,  105,  105,  105,  105,
-   91,    0,    0,  141,  141,    0,  105,  105,  141,  105,
-  105,  105,  105,  105,  105,  105,   91,   91,  105,   91,
-   91,  105,  105,  105,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,  141,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   66,
-   66,   66,   66,    0,  154,    0,    0,  154,   66,    0,
-    0,    0,    0,    0,   66,   66,   66,   66,    0,    0,
-    0,  154,  154,    0,   66,   66,  154,   66,   66,   66,
-   66,   66,   66,   66,    0,    0,   66,    0,    0,   66,
-   66,   66,   69,   69,   69,   69,    0,  111,    0,    0,
-  111,   69,    0,    0,    0,    0,  154,   69,   69,   69,
-   69,    0,    0,    0,  111,  111,    0,   69,   69,  111,
-   69,   69,   69,   69,   69,   69,   69,    0,    0,   69,
-    0,    0,   69,   69,   69,    0,  104,  104,  104,  104,
-    0,  118,    0,    0,  118,  104,    0,    0,    0,  111,
-    0,  104,  104,  104,  104,    0,    0,    0,  118,  118,
-    0,  104,  104,  118,  104,  104,  104,  104,  104,  104,
-  104,    0,    0,  104,    0,    0,  104,  104,  104,    0,
-    0,    0,    0,    0,   96,    0,    0,   96,    0,    0,
-    0,    0,    0,  118,    0,    0,    0,    0,    0,    0,
-    0,   96,   96,    0,    0,    0,   96,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  141,  141,  141,
-  141,    0,   97,    0,    0,   97,  141,    0,    0,    0,
-    0,    0,  141,  141,  141,  141,   96,    0,    0,   97,
-   97,    0,  141,  141,   97,  141,  141,  141,  141,  141,
-  141,  141,    0,    0,  141,    0,    0,  141,  141,  141,
-   98,    0,    0,   98,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   97,    0,    0,   98,   98,    0,
-    0,    0,   98,    0,    0,  154,  154,  154,  154,    0,
-    0,    0,    0,    0,  154,    0,    0,    0,    0,    0,
-  154,  154,  154,  154,    0,    0,    0,    0,    0,    0,
-  154,  154,   98,  154,  154,  154,  154,  154,  154,  154,
-    0,    0,  154,    0,    0,  154,  154,  154,  111,  111,
-  111,  111,    0,   94,    0,    0,   94,  111,    0,    0,
-    0,    0,    0,  111,  111,  111,  111,    0,    0,    0,
-   94,   94,    0,  111,  111,   94,  111,  111,  111,  111,
-  111,  111,  111,    0,    0,  111,    0,    0,  111,  111,
-  111,    0,  118,  118,  118,  118,    0,   95,    0,    0,
-   95,  118,    0,    0,    0,   94,    0,  118,  118,  118,
-  118,    0,    0,    0,   95,   95,    0,  118,  118,   95,
-  118,  118,  118,  118,  118,  118,  118,    0,    0,  118,
-    0,    0,  118,  118,  118,   96,   96,   96,   96,    0,
-   93,    0,    0,   93,   96,    0,    0,    0,    0,   95,
-   96,   96,   96,   96,    0,    0,    0,   93,   93,    0,
-   96,   96,   93,   96,   96,   96,   96,   96,   96,   96,
-    0,    0,    0,   97,   97,   97,   97,    0,   81,    0,
-    0,   81,   97,    0,    0,    0,    0,    0,   97,   97,
-   97,   97,   93,    0,    0,   81,   81,    0,   97,   97,
-   81,   97,   97,   97,   97,   97,   97,   97,    0,    0,
-    0,   98,   98,   98,   98,    0,   82,    0,    0,   82,
-   98,    0,    0,    0,    0,    0,   98,   98,   98,   98,
-   81,    0,    0,   82,   82,    0,   98,   98,   82,   98,
-   98,   98,   98,   98,   98,   98,    0,    0,    0,    0,
-    0,    0,   84,    0,    0,   84,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   82,   84,
-   84,    0,    0,    0,   84,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   94,   94,   94,   94,    0,  144,
-    0,    0,  144,   94,    0,    0,    0,    0,    0,   94,
-   94,   94,   94,    0,   84,    0,  144,  144,    0,   94,
-   94,  144,   94,   94,   94,   94,   94,   94,   94,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   95,   95,
-   95,   95,    0,  143,    0,    0,  143,   95,    0,    0,
-    0,  144,    0,   95,   95,   95,   95,    0,    0,    0,
-  143,  143,    0,   95,   95,  143,   95,   95,   95,   95,
-   95,   95,   95,    0,    0,    0,    0,    0,    0,    0,
-    0,   93,   93,   93,   93,    0,  132,    0,    0,  132,
-   93,    0,    0,    0,    0,  143,   93,   93,   93,   93,
-    0,    0,    0,  132,  132,    0,   93,   93,  132,   93,
-   93,   93,   93,   93,   93,   93,    0,    0,    0,   81,
-   81,   81,   81,    0,  103,    0,    0,  103,   81,    0,
-    0,    0,    0,    0,   81,   81,   81,   81,  132,    0,
-    0,  103,  103,    0,   81,   81,  103,   81,   81,   81,
-   81,   81,   81,   81,    0,    0,    0,   82,   82,   82,
-   82,    0,   87,    0,    0,   87,   82,    0,    0,    0,
-    0,    0,   82,   82,   82,   82,  103,    0,    0,   87,
-   87,    0,   82,   82,   87,   82,   82,   82,   82,   82,
-   82,    0,    0,   84,   84,   84,   84,    0,   88,    0,
-    0,   88,   84,    0,    0,    0,    0,    0,   84,   84,
-    0,    0,    0,    0,   87,   88,   88,    0,   84,   84,
-   88,   84,   84,   84,   84,   84,   84,    0,    0,    0,
-  144,  144,  144,  144,    0,   90,    0,    0,   90,  144,
-    0,    0,    0,    0,    0,  144,  144,    0,    0,    0,
-   88,    0,   90,   90,    0,  144,  144,   90,  144,  144,
-  144,  144,  144,    0,    0,    0,  167,    0,    0,    0,
-    0,    0,    0,    0,  143,  143,  143,  143,    0,   89,
-  156,    0,   89,  143,    0,    0,    0,   90,    0,  143,
-  143,    0,    0,    0,    0,    0,   89,   89,  149,  143,
-  143,   89,  143,  143,  143,  143,  143,    0,  167,    0,
-    0,  283,    0,    0,    0,    0,  156,  132,  132,  132,
-  132,    0,    0,    0,    0,    0,  132,    0,    0,    0,
-    0,   89,  132,  132,    0,    0,    0,    0,    0,    0,
-  149,    0,  132,  132,  167,  132,  132,  132,  132,  132,
-    0,    0,    0,    0,    0,  103,  103,  103,  103,    0,
-    0,    0,    0,    0,  103,    0,    0,    0,    0,    0,
-  103,  103,    0,    0,    0,  156,  149,    0,    0,    0,
-  103,  103,    0,  103,  103,  103,  103,  103,    0,    0,
-    0,    0,    0,   87,   87,   87,   87,    0,    0,    0,
-    0,    0,   87,  167,    0,    0,    0,    0,   90,   90,
-    0,    0,    0,    0,    0,    0,    0,    0,   87,   87,
-  103,   87,   87,   87,   87,   87,  111,   90,  119,   88,
-   88,   88,   88,   90,    0,  149,    0,    0,   88,  167,
+   68,    0,    0,    0,    0,  106,    0,    0,  106,    0,
+    0,   71,    0,   71,    0,    0,    0,    0,    0,    0,
+    0,    0,  106,  106,    0,    0,    0,  106,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  142,  142,
+  142,  142,    0,   71,    0,    0,    0,  142,    0,    0,
+    0,    0,    0,  142,  142,  142,  142,  106,    0,    0,
+    0,    0,    0,  142,  142,    0,  142,  142,  142,  142,
+  142,  142,  142,    0,    0,  142,    0,    0,  142,  142,
+  142,  107,  107,  107,  107,    0,  143,  106,    0,  143,
+  107,   93,   93,   93,   93,    0,  107,  107,  107,  107,
+   93,    0,    0,  143,  143,    0,  107,  107,  143,  107,
+  107,  107,  107,  107,  107,  107,   93,   93,  107,   93,
+   93,  107,  107,  107,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  143,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   68,
+   68,   68,   68,    0,  156,    0,    0,  156,   68,    0,
+    0,    0,    0,    0,   68,   68,   68,   68,    0,    0,
+    0,  156,  156,    0,   68,   68,  156,   68,   68,   68,
+   68,   68,   68,   68,    0,    0,   68,    0,    0,   68,
+   68,   68,   71,   71,   71,   71,    0,  113,    0,    0,
+  113,   71,    0,    0,    0,    0,  156,   71,   71,   71,
+   71,    0,    0,    0,  113,  113,    0,   71,   71,  113,
+   71,   71,   71,   71,   71,   71,   71,    0,    0,   71,
+    0,    0,   71,   71,   71,    0,  106,  106,  106,  106,
+    0,  120,    0,    0,  120,  106,    0,    0,    0,  113,
+    0,  106,  106,  106,  106,    0,    0,    0,  120,  120,
+    0,  106,  106,  120,  106,  106,  106,  106,  106,  106,
+  106,    0,    0,  106,    0,    0,  106,  106,  106,    0,
+    0,    0,    0,    0,   98,    0,    0,   98,    0,    0,
+    0,    0,    0,  120,    0,    0,    0,    0,    0,    0,
+    0,   98,   98,    0,    0,    0,   98,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  143,  143,  143,
+  143,    0,   99,    0,    0,   99,  143,    0,    0,    0,
+    0,    0,  143,  143,  143,  143,   98,    0,    0,   99,
+   99,    0,  143,  143,   99,  143,  143,  143,  143,  143,
+  143,  143,    0,    0,  143,    0,    0,  143,  143,  143,
+  100,    0,    0,  100,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   99,    0,    0,  100,  100,    0,
+    0,    0,  100,    0,    0,  156,  156,  156,  156,    0,
+    0,    0,    0,    0,  156,    0,    0,    0,    0,    0,
+  156,  156,  156,  156,    0,    0,    0,    0,    0,    0,
+  156,  156,  100,  156,  156,  156,  156,  156,  156,  156,
+    0,    0,  156,    0,    0,  156,  156,  156,  113,  113,
+  113,  113,    0,   96,    0,    0,   96,  113,    0,    0,
+    0,    0,    0,  113,  113,  113,  113,    0,    0,    0,
+   96,   96,    0,  113,  113,   96,  113,  113,  113,  113,
+  113,  113,  113,    0,    0,  113,    0,    0,  113,  113,
+  113,    0,  120,  120,  120,  120,    0,   97,    0,    0,
+   97,  120,    0,    0,    0,   96,    0,  120,  120,  120,
+  120,    0,    0,    0,   97,   97,    0,  120,  120,   97,
+  120,  120,  120,  120,  120,  120,  120,    0,    0,  120,
+    0,    0,  120,  120,  120,   98,   98,   98,   98,    0,
+   95,    0,    0,   95,   98,    0,    0,    0,    0,   97,
+   98,   98,   98,   98,    0,    0,    0,   95,   95,    0,
+   98,   98,   95,   98,   98,   98,   98,   98,   98,   98,
+    0,    0,    0,   99,   99,   99,   99,    0,   83,    0,
+    0,   83,   99,    0,    0,    0,    0,    0,   99,   99,
+   99,   99,   95,    0,    0,   83,   83,    0,   99,   99,
+   83,   99,   99,   99,   99,   99,   99,   99,    0,    0,
+    0,  100,  100,  100,  100,    0,   84,    0,    0,   84,
+  100,    0,    0,    0,    0,    0,  100,  100,  100,  100,
+   83,    0,    0,   84,   84,    0,  100,  100,   84,  100,
+  100,  100,  100,  100,  100,  100,    0,    0,    0,    0,
+    0,    0,   86,    0,    0,   86,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   84,   86,
+   86,    0,    0,    0,   86,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   96,   96,   96,   96,    0,  146,
+    0,    0,  146,   96,    0,    0,    0,    0,    0,   96,
+   96,   96,   96,    0,   86,    0,  146,  146,    0,   96,
+   96,  146,   96,   96,   96,   96,   96,   96,   96,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   97,   97,
+   97,   97,    0,  145,    0,    0,  145,   97,    0,    0,
+    0,  146,    0,   97,   97,   97,   97,    0,    0,    0,
+  145,  145,    0,   97,   97,  145,   97,   97,   97,   97,
+   97,   97,   97,    0,    0,    0,    0,    0,    0,    0,
+    0,   95,   95,   95,   95,    0,  134,    0,    0,  134,
+   95,    0,    0,    0,    0,  145,   95,   95,   95,   95,
+    0,    0,    0,  134,  134,    0,   95,   95,  134,   95,
+   95,   95,   95,   95,   95,   95,    0,    0,    0,   83,
+   83,   83,   83,    0,  105,    0,    0,  105,   83,    0,
+    0,    0,    0,    0,   83,   83,   83,   83,  134,    0,
+    0,  105,  105,    0,   83,   83,  105,   83,   83,   83,
+   83,   83,   83,   83,    0,    0,    0,   84,   84,   84,
+   84,    0,   89,    0,    0,   89,   84,    0,    0,    0,
+    0,    0,   84,   84,   84,   84,  105,    0,    0,   89,
+   89,    0,   84,   84,   89,   84,   84,   84,   84,   84,
+   84,    0,    0,   86,   86,   86,   86,    0,   90,    0,
+    0,   90,   86,    0,    0,    0,    0,    0,   86,   86,
+    0,    0,    0,    0,   89,   90,   90,    0,   86,   86,
+   90,   86,   86,   86,   86,   86,   86,    0,    0,    0,
+  146,  146,  146,  146,    0,   92,    0,    0,   92,  146,
+    0,    0,    0,    0,    0,  146,  146,    0,    0,    0,
+   90,    0,   92,   92,    0,  146,  146,   92,  146,  146,
+  146,  146,  146,    0,    0,    0,  167,    0,    0,    0,
+    0,    0,    0,    0,  145,  145,  145,  145,    0,   91,
+  156,    0,   91,  145,    0,    0,    0,   92,    0,  145,
+  145,    0,    0,    0,    0,    0,   91,   91,  149,  145,
+  145,   91,  145,  145,  145,  145,  145,    0,  167,    0,
+    0,  283,    0,    0,    0,    0,  156,  134,  134,  134,
+  134,    0,    0,    0,    0,    0,  134,    0,    0,    0,
+    0,   91,  134,  134,    0,    0,    0,    0,    0,    0,
+  149,    0,  134,  134,  167,  134,  134,  134,  134,  134,
+    0,    0,    0,    0,    0,  105,  105,  105,  105,    0,
+    0,    0,    0,    0,  105,    0,    0,    0,    0,    0,
+  105,  105,    0,    0,    0,  156,  149,    0,    0,    0,
+  105,  105,    0,  105,  105,  105,  105,  105,    0,    0,
+    0,    0,    0,   89,   89,   89,   89,    0,    0,    0,
+    0,    0,   89,  167,    0,    0,    0,    0,   90,   90,
+    0,    0,    0,    0,    0,    0,    0,    0,   89,   89,
+  103,   89,   89,   89,   89,   89,  111,   90,  119,   90,
+   90,   90,   90,   90,    0,  149,    0,    0,   90,  167,
     0,    0,    0,    0,    0,   90,   90,   90,   90,    0,
-    0,    0,    0,    0,   88,   88,    0,   88,   88,   88,
-   88,    0,  151,  152,  153,  154,   90,   90,   90,   90,
-    0,  149,    0,    0,    0,   90,  157,  158,  159,  160,
+    0,    0,    0,    0,   90,   90,    0,   90,   90,   90,
+   90,    0,  151,  152,  153,  154,   92,   92,   92,   92,
+    0,  149,    0,    0,    0,   92,  157,  158,  159,  160,
   161,  162,    0,    0,  163,    0,    0,  164,  165,  166,
-  111,   90,   90,    0,   90,   90,   90,    0,  150,    0,
+  111,   92,   92,    0,   92,   92,   92,    0,  150,    0,
     0,    0,    0,    0,  151,  152,  153,  154,    0,    0,
-   89,   89,   89,   89,    0,    0,    0,  155,  157,  158,
+   91,   91,   91,   91,    0,    0,    0,  155,  157,  158,
   159,  160,  161,  162,    0,    0,  163,    0,    0,  164,
-  165,  166,    0,    0,  150,   89,   89,    0,   89,    0,
+  165,  166,    0,    0,  150,   91,   91,    0,   91,    0,
   151,  152,  153,  154,    0,    0,    0,    0,    0,  234,
     0,    0,    0,  155,  157,  158,  159,  160,  161,  162,
    94,    0,  163,    0,    0,  164,  165,  166,  104,    0,
@@ -603,44 +603,44 @@ short yytable[] = {                                      69,
 };
 short yycheck[] = {                                      13,
    59,   41,   36,   36,   44,   93,   36,   59,   91,   86,
-   40,  123,   91,   41,  325,  191,   40,   43,   58,   59,
+   40,  325,   91,   41,  257,  191,   40,   43,   58,   59,
   182,  257,   59,   63,   41,   51,   41,   59,   41,  257,
    41,   91,   46,   41,  322,  323,   91,   59,   41,  327,
-  123,   41,   41,   57,  123,  356,   40,   61,   41,   44,
-    6,   59,    8,   93,   40,  343,   59,  278,   91,  347,
-   59,   41,   41,  123,   41,   91,   59,   91,  123,   40,
+  123,   41,  356,   57,  123,  297,  298,   61,   41,   44,
+   40,   59,   40,   93,   40,  343,   59,  278,   91,  347,
+  123,   41,   41,  123,   41,   91,   59,   91,  123,   40,
    97,   98,   99,  100,  101,  102,   59,   41,    0,   59,
-   59,   59,   59,   59,  123,   59,  123,   59,  114,  123,
-  123,  123,  106,  107,  270,   59,  122,  297,  298,  123,
-   40,   40,  272,  273,  274,  275,   40,  276,  277,   40,
-   59,   33,   40,   93,   36,   37,   38,   40,   40,   44,
-   42,   43,  260,   45,  286,   93,  302,  297,  298,  143,
-  144,  145,  146,  147,  148,  149,  123,   59,  257,  266,
-  267,  268,   64,  270,  271,  257,   40,   40,  257,   41,
-   93,   40,    0,  167,  168,  169,  170,  171,  172,  173,
-  125,   93,   91,   93,   36,  192,   41,  125,  182,   91,
-  346,   91,  186,  187,  298,  189,   40,  191,   93,   41,
-   93,   41,   91,   41,  198,   33,  200,  201,   36,   37,
-   38,  205,   40,   40,   42,   43,   41,   45,  257,   41,
-   41,  123,   59,  125,  126,   59,  125,  125,  125,  297,
-  298,   59,  123,  125,  123,   41,   64,  231,  125,  233,
+   59,   59,   59,   59,   40,   59,  123,   59,  114,  123,
+  123,  123,  106,  107,  270,   59,  122,  276,  277,  123,
+   59,   41,  272,  273,  274,  275,   40,   40,   44,   40,
+  260,   33,   40,   93,   36,   37,   38,  123,   40,   59,
+   42,   43,  257,   45,  286,   93,  302,  297,  298,  143,
+  144,  145,  146,  147,  148,  149,   40,   59,   40,  266,
+  267,  268,   64,  270,  271,   41,   40,   91,  257,   36,
+   93,   41,    0,  167,  168,  169,  170,  171,  172,  173,
+  125,   93,  125,   93,   91,  192,  298,   40,  182,   91,
+  346,   41,  186,  187,   41,  189,   41,  191,   93,   41,
+   93,   41,   91,   40,  198,   33,  200,  201,   36,   37,
+   38,  205,   40,   59,   42,   43,   41,   45,  257,  125,
+  125,  123,  125,  125,  126,  125,   59,  123,   41,  297,
+  298,   59,   41,  125,  123,   41,   64,  231,   59,  233,
    41,   41,  248,  257,   44,  258,  309,  253,  262,  312,
   313,  314,  272,  273,  274,  275,   41,   41,   58,   59,
-   44,  281,   59,   91,   40,  297,  298,  287,  288,   41,
-  290,   41,   44,   41,   58,   59,  333,  297,  298,  314,
+   44,  281,   40,   91,  123,  297,  298,  287,  288,   41,
+  290,  123,   44,   41,   58,   59,  333,  297,  298,  314,
   300,  301,  302,  303,  304,  305,  296,  281,    0,  297,
-  298,   63,  286,   93,  123,  123,   41,  125,  126,   41,
+  298,   63,  286,   93,   41,  123,   59,  125,  126,   41,
   297,  298,  297,  298,  297,  298,  297,  298,   59,   93,
   304,   41,  272,  273,  274,  275,   59,  297,  298,   91,
-   41,   33,  297,  298,   36,   37,   38,   59,   40,   32,
-   42,   43,   41,   45,  297,  298,   13,  297,  298,  297,
+   41,   33,  297,  298,   36,   37,   38,    8,   40,   32,
+   42,   43,  144,   45,  297,  298,   13,  297,  298,  297,
   298,  297,  298,  297,  298,  297,  298,   59,  342,  297,
-  298,  123,   64,  144,  256,  257,  258,  259,  260,  261,
-  342,  263,  264,  265,  266,  267,  268,  269,  270,  271,
+  298,  123,   64,  342,  256,  257,  258,  259,  260,  261,
+  189,  263,  264,  265,  266,  267,  268,  269,  270,  271,
   272,  273,  274,  275,  297,  298,  304,  279,  280,   91,
   282,  283,  284,  285,  286,  297,  298,  297,  298,  291,
-  292,  293,  294,  295,  296,   91,  189,  299,   41,   41,
-  289,   44,  297,  298,  297,  298,  308,   96,  310,  311,
+  292,  293,  294,  295,  296,   91,   96,  299,   41,   41,
+  289,   44,  297,  298,  297,  298,  308,   -1,  310,  311,
    -1,  123,   -1,   -1,  126,   58,   59,  306,   -1,   -1,
   309,   63,   -1,  312,  313,  314,   -1,  123,  256,  257,
   258,  259,  260,  261,   -1,  263,  264,  265,  266,  267,
@@ -680,8 +680,8 @@ short yycheck[] = {                                      13,
    -1,  308,  309,  310,  311,  312,  313,  314,   41,   -1,
    -1,   44,   -1,   41,   -1,   -1,   44,   -1,  287,  288,
   289,  290,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
-   58,   59,   -1,   -1,   -1,   63,  305,  306,   -1,   -1,
-  309,  125,   -1,  312,  313,  314,  272,  273,  274,  275,
+   58,   59,   -1,   -1,   -1,   63,  305,  306,   -1,  125,
+  309,   -1,   -1,  312,  313,  314,  272,  273,  274,  275,
    -1,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
    93,   -1,  125,  269,   -1,   93,  272,  273,  274,  275,
    -1,  297,   -1,   -1,  280,  281,  282,  283,  284,  285,
@@ -692,28 +692,28 @@ short yycheck[] = {                                      13,
    -1,   45,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
   275,   -1,   -1,   -1,   -1,   59,  281,   -1,   -1,   -1,
    64,   -1,  287,  288,  289,  290,   -1,   -1,   -1,   -1,
-   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
+   -1,   -1,  297,  298,   13,  300,  301,  302,  303,  304,
   305,  306,   -1,   -1,  309,   33,   -1,   91,   36,   37,
-   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,
-   -1,   13,  266,  267,  268,   17,  270,  271,   -1,   -1,
-   -1,   59,   -1,   -1,   -1,   -1,   64,   -1,   -1,  123,
-   -1,   -1,  126,  266,  267,  268,   -1,  270,  271,   -1,
-   42,   -1,   -1,   45,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   33,   -1,   91,   36,   37,   38,   -1,   40,   -1,
-   42,   43,   -1,   45,   -1,   -1,   -1,   -1,   -1,  272,
-  273,  274,  275,   -1,  272,  273,  274,  275,   80,   -1,
-   -1,   -1,   64,  281,   -1,  123,   -1,   -1,  126,  287,
-  288,  289,  290,   95,  297,  298,   -1,  300,   -1,  297,
+   38,   -1,   40,   -1,   42,   43,   26,   45,   -1,   -1,
+  266,  267,  268,   42,  270,  271,   45,   -1,   -1,   -1,
+   -1,   59,   -1,   43,   44,   -1,   64,   -1,   -1,  123,
+   50,   -1,  126,  266,  267,  268,   -1,  270,  271,   -1,
+   -1,   -1,   62,   63,   64,   65,   -1,   -1,   -1,   -1,
+   -1,   33,   81,   91,   36,   37,   38,   -1,   40,   -1,
+   42,   43,   -1,   45,   -1,   -1,   95,   -1,   -1,  272,
+  273,  274,  275,   -1,  272,  273,  274,  275,   -1,   -1,
+   -1,   -1,   64,  281,   -1,  123,   -1,  107,  126,  287,
+  288,  289,  290,   -1,  297,  298,   -1,  300,   -1,  297,
   298,   -1,  300,  301,  302,  303,  304,  305,  306,   91,
-   -1,  309,   26,   -1,   33,   -1,   -1,   36,   37,   38,
-   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   43,
-   44,   -1,   -1,   -1,   -1,   -1,   50,   -1,   -1,  141,
-   -1,  123,   -1,   -1,  126,   64,   -1,   -1,   62,   63,
-   64,   65,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  309,  141,   -1,   33,   -1,   -1,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  123,   -1,   -1,  126,   64,   -1,   -1,   -1,  178,
+   -1,   -1,   -1,   -1,   -1,   -1,  185,   -1,   -1,   -1,
    -1,   -1,  256,  257,  258,  259,  260,  261,   -1,  263,
-  264,  265,   91,   -1,   -1,  269,  178,   -1,  272,  273,
-  274,  275,   -1,  185,   -1,  279,  280,   -1,  282,  283,
-  284,  285,  286,  107,   -1,   -1,   -1,  291,  292,  293,
+  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,  299,   -1,  126,   -1,   -1,
    -1,   -1,   -1,   -1,  308,   -1,  310,  311,  256,  257,
   258,  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,
@@ -1092,11 +1092,13 @@ char *yyrule[] = {
 "decl : subrout",
 "decl : package",
 "decl : use",
-"format : FORMAT startsub WORD block",
-"format : FORMAT startsub block",
+"format : FORMAT startformsub formname block",
+"formname : WORD",
+"formname :",
 "subrout : SUB startsub subname proto subbody",
 "startsub :",
 "startanonsub :",
+"startformsub :",
 "subname : WORD",
 "proto :",
 "proto : THING",
@@ -1237,9 +1239,9 @@ int yyerrflag;
 int yychar;
 YYSTYPE yyval;
 YYSTYPE yylval;
-#line 619 "perly.y"
+#line 626 "perly.y"
  /* PROGRAM */
-#line 1313 "perly.c"
+#line 1315 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1691,329 +1693,338 @@ case 49:
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 50:
-#line 270 "perly.y"
-{ newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
+#line 271 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 51:
-#line 274 "perly.y"
-{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 272 "perly.y"
+{ yyval.opval = Nullop; }
 break;
 case 52:
-#line 278 "perly.y"
-{ yyval.ival = start_subparse(); }
+#line 276 "perly.y"
+{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 53:
-#line 282 "perly.y"
+#line 280 "perly.y"
+{ yyval.ival = start_subparse(); }
+break;
+case 54:
+#line 284 "perly.y"
 { yyval.ival = start_subparse();
                          CvANON_on(compcv); }
 break;
-case 54:
-#line 286 "perly.y"
+case 55:
+#line 289 "perly.y"
+{ yyval.ival = start_subparse();
+                         CvFORMAT_on(compcv); }
+break;
+case 56:
+#line 293 "perly.y"
 { char *name = SvPVx(((SVOP*)yyvsp[0].opval)->op_sv, na);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END"))
                              CvUNIQUE_on(compcv);
                          yyval.opval = yyvsp[0].opval; }
 break;
-case 55:
-#line 293 "perly.y"
+case 57:
+#line 300 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 57:
-#line 297 "perly.y"
+case 59:
+#line 304 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 58:
-#line 298 "perly.y"
+case 60:
+#line 305 "perly.y"
 { yyval.opval = Nullop; expect = XSTATE; }
 break;
-case 59:
-#line 302 "perly.y"
+case 61:
+#line 309 "perly.y"
 { package(yyvsp[-1].opval); }
 break;
-case 60:
-#line 304 "perly.y"
+case 62:
+#line 311 "perly.y"
 { package(Nullop); }
 break;
-case 61:
-#line 308 "perly.y"
+case 63:
+#line 315 "perly.y"
 { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ }
 break;
-case 62:
-#line 310 "perly.y"
+case 64:
+#line 317 "perly.y"
 { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
-case 63:
-#line 314 "perly.y"
+case 65:
+#line 321 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 64:
-#line 316 "perly.y"
+case 66:
+#line 323 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 66:
-#line 321 "perly.y"
+case 68:
+#line 328 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 67:
-#line 323 "perly.y"
+case 69:
+#line 330 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 69:
-#line 328 "perly.y"
+case 71:
+#line 335 "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 70:
-#line 331 "perly.y"
+case 72:
+#line 338 "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 71:
-#line 334 "perly.y"
+case 73:
+#line 341 "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 72:
-#line 339 "perly.y"
+case 74:
+#line 346 "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 73:
-#line 344 "perly.y"
+case 75:
+#line 351 "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 74:
-#line 349 "perly.y"
+case 76:
+#line 356 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 75:
-#line 351 "perly.y"
+case 77:
+#line 358 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 76:
-#line 353 "perly.y"
+case 78:
+#line 360 "perly.y"
 { yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 77:
-#line 355 "perly.y"
+case 79:
+#line 362 "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 80:
-#line 365 "perly.y"
+case 82:
+#line 372 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
-case 81:
-#line 367 "perly.y"
+case 83:
+#line 374 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 82:
-#line 369 "perly.y"
+case 84:
+#line 376 "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 83:
-#line 373 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 84:
-#line 375 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
 case 85:
-#line 377 "perly.y"
+#line 380 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 86:
-#line 379 "perly.y"
+#line 382 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 87:
-#line 381 "perly.y"
+#line 384 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 88:
-#line 383 "perly.y"
+#line 386 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 89:
-#line 385 "perly.y"
-{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
+#line 388 "perly.y"
+{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 90:
-#line 387 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 390 "perly.y"
+{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
 case 91:
-#line 389 "perly.y"
-{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 392 "perly.y"
+{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
 case 92:
-#line 391 "perly.y"
-{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 394 "perly.y"
+{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 93:
-#line 393 "perly.y"
-{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 396 "perly.y"
+{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 94:
-#line 396 "perly.y"
-{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
+#line 398 "perly.y"
+{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 95:
-#line 398 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+#line 400 "perly.y"
+{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
 case 96:
-#line 400 "perly.y"
-{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
+#line 403 "perly.y"
+{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
 case 97:
-#line 402 "perly.y"
-{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
+#line 405 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 98:
-#line 404 "perly.y"
-{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
+#line 407 "perly.y"
+{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
 case 99:
-#line 406 "perly.y"
+#line 409 "perly.y"
+{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
+break;
+case 100:
+#line 411 "perly.y"
+{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
+break;
+case 101:
+#line 413 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
-case 100:
-#line 409 "perly.y"
+case 102:
+#line 416 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
-case 101:
-#line 412 "perly.y"
+case 103:
+#line 419 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
-case 102:
-#line 415 "perly.y"
+case 104:
+#line 422 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
-case 103:
-#line 418 "perly.y"
+case 105:
+#line 425 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
-case 104:
-#line 420 "perly.y"
+case 106:
+#line 427 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
-case 105:
-#line 422 "perly.y"
+case 107:
+#line 429 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
-case 106:
-#line 424 "perly.y"
+case 108:
+#line 431 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
-case 107:
-#line 426 "perly.y"
+case 109:
+#line 433 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
-case 108:
-#line 428 "perly.y"
+case 110:
+#line 435 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
-case 109:
-#line 430 "perly.y"
+case 111:
+#line 437 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
-case 110:
-#line 432 "perly.y"
+case 112:
+#line 439 "perly.y"
 { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 111:
-#line 434 "perly.y"
+case 113:
+#line 441 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 112:
-#line 436 "perly.y"
+case 114:
+#line 443 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); }
 break;
-case 113:
-#line 438 "perly.y"
+case 115:
+#line 445 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 114:
-#line 440 "perly.y"
+case 116:
+#line 447 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
-case 115:
-#line 442 "perly.y"
+case 117:
+#line 449 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 116:
-#line 446 "perly.y"
+case 118:
+#line 453 "perly.y"
 { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 117:
-#line 450 "perly.y"
+case 119:
+#line 457 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 118:
-#line 452 "perly.y"
+case 120:
+#line 459 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 119:
-#line 454 "perly.y"
+case 121:
+#line 461 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
-case 120:
-#line 456 "perly.y"
+case 122:
+#line 463 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 121:
-#line 459 "perly.y"
+case 123:
+#line 466 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 122:
-#line 464 "perly.y"
+case 124:
+#line 471 "perly.y"
 { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 123:
-#line 469 "perly.y"
+case 125:
+#line 476 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
-case 124:
-#line 471 "perly.y"
+case 126:
+#line 478 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
-case 125:
-#line 473 "perly.y"
+case 127:
+#line 480 "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 126:
-#line 479 "perly.y"
+case 128:
+#line 486 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -2021,38 +2032,38 @@ case 126:
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
                            expect = XOPERATOR; }
 break;
-case 127:
-#line 486 "perly.y"
+case 129:
+#line 493 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 128:
-#line 488 "perly.y"
+case 130:
+#line 495 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
-case 129:
-#line 490 "perly.y"
+case 131:
+#line 497 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
-case 130:
-#line 492 "perly.y"
+case 132:
+#line 499 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
-case 131:
-#line 495 "perly.y"
+case 133:
+#line 502 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 132:
-#line 498 "perly.y"
+case 134:
+#line 505 "perly.y"
 { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 133:
-#line 500 "perly.y"
+case 135:
+#line 507 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
-case 134:
-#line 502 "perly.y"
+case 136:
+#line 509 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2061,8 +2072,8 @@ case 134:
                                    scalar(yyvsp[-2].opval)
                                )),Nullop)); dep();}
 break;
-case 135:
-#line 510 "perly.y"
+case 137:
+#line 517 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2072,151 +2083,151 @@ case 135:
                                    scalar(yyvsp[-3].opval)
                                )))); dep();}
 break;
-case 136:
-#line 519 "perly.y"
+case 138:
+#line 526 "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 137:
-#line 523 "perly.y"
+case 139:
+#line 530 "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 138:
-#line 528 "perly.y"
+case 140:
+#line 535 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            hints |= HINT_BLOCK_SCOPE; }
 break;
-case 139:
-#line 531 "perly.y"
+case 141:
+#line 538 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 140:
-#line 533 "perly.y"
+case 142:
+#line 540 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 141:
-#line 535 "perly.y"
+case 143:
+#line 542 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 142:
-#line 537 "perly.y"
+case 144:
+#line 544 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 143:
-#line 539 "perly.y"
+case 145:
+#line 546 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 144:
-#line 541 "perly.y"
+case 146:
+#line 548 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 145:
-#line 544 "perly.y"
+case 147:
+#line 551 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 146:
-#line 546 "perly.y"
+case 148:
+#line 553 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
-case 147:
-#line 548 "perly.y"
+case 149:
+#line 555 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar(yyvsp[0].opval)); }
 break;
-case 148:
-#line 551 "perly.y"
+case 150:
+#line 558 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
-case 149:
-#line 553 "perly.y"
+case 151:
+#line 560 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 150:
-#line 555 "perly.y"
+case 152:
+#line 562 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
-case 151:
-#line 557 "perly.y"
+case 153:
+#line 564 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
-case 154:
-#line 563 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 155:
-#line 565 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
 case 156:
-#line 569 "perly.y"
+#line 570 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 157:
-#line 571 "perly.y"
+#line 572 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 158:
-#line 573 "perly.y"
-{ yyval.opval = yyvsp[-1].opval; }
+#line 576 "perly.y"
+{ yyval.opval = Nullop; }
 break;
 case 159:
-#line 576 "perly.y"
-{ yyval.ival = 0; }
+#line 578 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 160:
-#line 577 "perly.y"
-{ yyval.ival = 1; }
+#line 580 "perly.y"
+{ yyval.opval = yyvsp[-1].opval; }
 break;
 case 161:
-#line 581 "perly.y"
-{ in_my = 0; yyval.opval = my(yyvsp[0].opval); }
+#line 583 "perly.y"
+{ yyval.ival = 0; }
 break;
 case 162:
-#line 585 "perly.y"
-{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
+#line 584 "perly.y"
+{ yyval.ival = 1; }
 break;
 case 163:
-#line 589 "perly.y"
-{ yyval.opval = newSVREF(yyvsp[0].opval); }
+#line 588 "perly.y"
+{ in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
 case 164:
-#line 593 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
+#line 592 "perly.y"
+{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
 case 165:
-#line 597 "perly.y"
-{ yyval.opval = newHVREF(yyvsp[0].opval); }
+#line 596 "perly.y"
+{ yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
 case 166:
-#line 601 "perly.y"
+#line 600 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 167:
-#line 605 "perly.y"
-{ yyval.opval = newGVREF(0,yyvsp[0].opval); }
+#line 604 "perly.y"
+{ yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
 case 168:
-#line 609 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
+#line 608 "perly.y"
+{ yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
 case 169:
-#line 611 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval);  }
+#line 612 "perly.y"
+{ yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
 case 170:
-#line 613 "perly.y"
-{ yyval.opval = scope(yyvsp[0].opval); }
+#line 616 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval); }
 break;
 case 171:
-#line 616 "perly.y"
+#line 618 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval);  }
+break;
+case 172:
+#line 620 "perly.y"
+{ yyval.opval = scope(yyvsp[0].opval); }
+break;
+case 173:
+#line 623 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2206 "perly.c"
+#line 2217 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
index dea42d1..4bae11a 100644 (file)
@@ -78,7 +78,7 @@ Index: perly.c
   #define YYERRCODE 256
   short yylhs[] = {                                        -1,
 ***************
-*** 1301,1311 ****
+*** 1303,1313 ****
   int yyerrflag;
   int yychar;
 - short *yyssp;
@@ -88,12 +88,12 @@ Index: perly.c
 - short yyss[YYSTACKSIZE];
 - YYSTYPE yyvs[YYSTACKSIZE];
 - #define yystacksize YYSTACKSIZE
-  #line 619 "perly.y"
+  #line 626 "perly.y"
    /* PROGRAM */
---- 1236,1241 ----
+--- 1238,1243 ----
 ***************
-*** 1314,1325 ****
---- 1244,1300 ----
+*** 1316,1327 ****
+--- 1246,1302 ----
   #define YYACCEPT goto yyaccept
   #define YYERROR goto yyerrlab
 + 
@@ -152,8 +152,8 @@ Index: perly.c
       if (yys = getenv("YYDEBUG"))
       {
 ***************
-*** 1334,1337 ****
---- 1309,1320 ----
+*** 1336,1339 ****
+--- 1311,1322 ----
       yychar = (-1);
   
 +     /*
@@ -167,20 +167,20 @@ Index: perly.c
       yyssp = yyss;
       yyvsp = yyvs;
 ***************
-*** 1349,1353 ****
+*** 1351,1355 ****
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             printf("yydebug: state %d, reading %d (%s)\n", yystate,
                       yychar, yys);
           }
---- 1332,1336 ----
+--- 1334,1338 ----
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate,
                       yychar, yys);
           }
 ***************
-*** 1359,1368 ****
+*** 1361,1370 ****
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: state %d, shifting to state %d\n",
@@ -191,7 +191,7 @@ Index: perly.c
 !             goto yyoverflow;
           }
           *++yyssp = yystate = yytable[yyn];
---- 1342,1365 ----
+--- 1344,1367 ----
   #if YYDEBUG
           if (yydebug)
 !             fprintf(stderr, "yydebug: state %d, shifting to state %d\n",
@@ -217,7 +217,7 @@ Index: perly.c
           }
           *++yyssp = yystate = yytable[yyn];
 ***************
-*** 1400,1409 ****
+*** 1402,1411 ****
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: state %d, error recovery shifting\
@@ -228,7 +228,7 @@ Index: perly.c
 !                     goto yyoverflow;
                   }
                   *++yyssp = yystate = yytable[yyn];
---- 1397,1421 ----
+--- 1399,1423 ----
   #if YYDEBUG
                   if (yydebug)
 !                     fprintf(stderr,
@@ -255,14 +255,14 @@ Index: perly.c
                   }
                   *++yyssp = yystate = yytable[yyn];
 ***************
-*** 1415,1420 ****
+*** 1417,1422 ****
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: error recovery discarding state %d\n",
 !                             *yyssp);
   #endif
                   if (yyssp <= yyss) goto yyabort;
---- 1427,1433 ----
+--- 1429,1435 ----
   #if YYDEBUG
                   if (yydebug)
 !                     fprintf(stderr,
@@ -271,14 +271,14 @@ Index: perly.c
   #endif
                   if (yyssp <= yyss) goto yyabort;
 ***************
-*** 1433,1438 ****
+*** 1435,1440 ****
               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
---- 1446,1452 ----
+--- 1448,1454 ----
               if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
               if (!yys) yys = "illegal-symbol";
 !             fprintf(stderr,
@@ -287,27 +287,27 @@ Index: perly.c
           }
   #endif
 ***************
-*** 1443,1447 ****
+*** 1445,1449 ****
   #if YYDEBUG
       if (yydebug)
 !         printf("yydebug: state %d, reducing by rule %d (%s)\n",
                   yystate, yyn, yyrule[yyn]);
   #endif
---- 1457,1461 ----
+--- 1459,1463 ----
   #if YYDEBUG
       if (yydebug)
 !         fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n",
                   yystate, yyn, yyrule[yyn]);
   #endif
 ***************
-*** 2213,2218 ****
+*** 2224,2229 ****
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: after reduction, shifting from state 0 to\
 !  state %d\n", YYFINAL);
   #endif
           yystate = YYFINAL;
---- 2227,2233 ----
+--- 2238,2244 ----
   #if YYDEBUG
           if (yydebug)
 !             fprintf(stderr,
@@ -316,20 +316,20 @@ Index: perly.c
   #endif
           yystate = YYFINAL;
 ***************
-*** 2228,2232 ****
+*** 2239,2243 ****
                   if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                   if (!yys) yys = "illegal-symbol";
 !                 printf("yydebug: state %d, reading %d (%s)\n",
                           YYFINAL, yychar, yys);
               }
---- 2243,2247 ----
+--- 2254,2258 ----
                   if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                   if (!yys) yys = "illegal-symbol";
 !                 fprintf(stderr, "yydebug: state %d, reading %d (%s)\n",
                           YYFINAL, yychar, yys);
               }
 ***************
-*** 2243,2252 ****
+*** 2254,2263 ****
   #if YYDEBUG
       if (yydebug)
 !         printf("yydebug: after reduction, shifting from state %d \
@@ -340,7 +340,7 @@ Index: perly.c
 !         goto yyoverflow;
       }
       *++yyssp = yystate;
---- 2258,2282 ----
+--- 2269,2293 ----
   #if YYDEBUG
       if (yydebug)
 !         fprintf(stderr,
@@ -367,7 +367,7 @@ Index: perly.c
       }
       *++yyssp = yystate;
 ***************
-*** 2254,2261 ****
+*** 2265,2272 ****
       goto yyloop;
   yyoverflow:
 !     yyerror("yacc stack overflow");
@@ -376,7 +376,7 @@ Index: perly.c
   yyaccept:
 !     return (0);
   }
---- 2284,2291 ----
+--- 2295,2302 ----
       goto yyloop;
   yyoverflow:
 !     yyerror("Out of memory for yacc stack");
diff --git a/perly.y b/perly.y
index 75d9a3a..7da1be3 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -46,13 +46,13 @@ dep()
 %token <ival> DOLSHARP DO HASHBRACK NOAMP
 %token LOCAL MY
 
-%type <ival> prog decl local format startsub startanonsub
+%type <ival> prog decl local format startsub startanonsub startformsub
 %type <ival> remember mremember '&'
 %type <opval> block mblock lineseq line loop cond else
 %type <opval> expr term scalar ary hsh arylen star amper sideff
 %type <opval> argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr
-%type <opval> listexpr listexprcom indirob
-%type <opval> listop method subname proto subbody cont my_scalar
+%type <opval> listexpr listexprcom indirob listop method
+%type <opval> formname subname proto subbody cont my_scalar
 %type <pval> label
 
 %left <ival> OROP
@@ -264,10 +264,12 @@ decl      :       format
                        { $$ = 0; }
        ;
 
-format :       FORMAT startsub WORD block
+format :       FORMAT startformsub formname block
                        { newFORM($2, $3, $4); }
-       |       FORMAT startsub block
-                       { newFORM($2, Nullop, $3); }
+       ;
+
+formname:      WORD            { $$ = $1; }
+       |       /* NULL */      { $$ = Nullop; }
        ;
 
 subrout        :       SUB startsub subname proto subbody
@@ -283,6 +285,11 @@ startanonsub:      /* NULL */      /* start an anonymous subroutine scope */
                          CvANON_on(compcv); }
        ;
 
+startformsub:  /* NULL */      /* start a format subroutine scope */
+                       { $$ = start_subparse();
+                         CvFORMAT_on(compcv); }
+       ;
+
 subname        :       WORD    { char *name = SvPVx(((SVOP*)$1)->op_sv, na);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END"))
                              CvUNIQUE_on(compcv);
index 6613c36..c225d28 100644 (file)
  */
 #define ACME_MESS      /**/
 
+/* ALTERNATE_SHEBANG:
+ *     This symbol, if defined, contains a "magic" string which may be used
+ *     as the first line of a Perl program designed to be executed directly
+ *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
+ *     begins with a character other then #, then Perl will only treat
+ *     it as a command line if if finds the string "perl" in the first
+ *     word; otherwise it's treated as the first line of code in the script.
+ *     (IOW, Perl won't hand off to another interpreter via an alternate
+ *     shebang sequence that might be legal Perl code.)
+ */
+/* #define ALTERNATE_SHEBANG "#!" / **/
+
 #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
 # include <signal.h>
 #endif
index 5265a19..c4721a6 100644 (file)
@@ -12,11 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($Config{'osname'} eq 'VMS' or
-           $Config{'osname'} eq 'OS2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index fb0a2d7..d08d2dc 100644 (file)
@@ -754,6 +754,11 @@ to a matched substring is valid only as part of a regular expression pattern.
 Trying to do this in ordinary Perl code produces a value that prints
 out looking like SCALAR(0xdecaf).  Use the $1 form instead.
 
+=item Can't use bareword ("%s") as %s ref while \"strict refs\" in use
+
+(F) Only hard references are allowed by "strict refs".  Symbolic references
+are disallowed.  See L<perlref>.
+
 =item Can't use string ("%s") as %s ref while "strict refs" in use
 
 (F) Only hard references are allowed by "strict refs".  Symbolic references
@@ -1487,6 +1492,17 @@ will extend the buffer and zero pad the new area.
 (F) An attempt was made to use an entry in an overloading table that
 somehow no longer points to a valid method.  See L<overload>.
 
+=item Stub found while resolving method `%s' overloading `%s' in package `%s'
+
+(P) Overloading resolution over @ISA tree may be broken by importing stubs.
+Stubs should never be implicitely created, but explicit calls to C<can>
+may break this.
+
+=item Cannot resolve method `%s' overloading `%s' in package `s'
+
+(P) Internal error trying to resolve overloading specified by a method
+name (as opposed to a subroutine reference).
+
 =item Operator or semicolon missing before %s
 
 (S) You used a variable or subroutine call where the parser was
@@ -2385,6 +2401,50 @@ something else of the same name (usually a subroutine) is exported
 by that module.  It usually means you put the wrong funny character
 on the front of your variable.
 
+=item Variable "%s" may be unavailable
+
+(W) An inner (nested) I<anonymous> subroutine is inside a I<named>
+subroutine, and outside that is another subroutine; and the anonymous
+(innermost) subroutine is referencing a lexical variable defined in
+the outermost subroutine.  For example:
+
+   sub outermost { my $a; sub middle { sub { $a } } }
+
+If the anonymous subroutine is called or referenced (directly or
+indirectly) from the outermost subroutine, it will share the variable
+as you would expect.  But if the anonymous subroutine is called or
+referenced when the outermost subroutine is not active, it will see
+the value of the shared variable as it was before and during the
+*first* call to the outermost subroutine, which is probably not what
+you want.
+
+In these circumstances, it is usually best to make the middle
+subroutine anonymous, using the C<sub {}> syntax.  Perl has specific
+support for shared variables in nested anonymous subroutines; a named
+subroutine in between interferes with this feature.
+
+=item Variable "%s" will not stay shared
+
+(W) An inner (nested) I<named> subroutine is referencing a lexical
+variable defined in an outer subroutine.
+
+When the inner subroutine is called, it will probably see the value of
+the outer subroutine's variable as it was before and during the
+*first* call to the outer subroutine; in this case, after the first
+call to the outer subroutine is complete, the inner and outer
+subroutines will no longer share a common value for the variable.  In
+other words, the variable will no longer be shared.
+
+Furthermore, if the outer subroutine is anonymous and references a
+lexical variable outside itself, then the outer and inner subroutines
+will I<never> share the given variable.
+
+This problem can usually be solved by making the inner subroutine
+anonymous, using the C<sub {}> syntax.  When inner anonymous subs that
+reference variables in outer subroutines are called or referenced,
+they are automatically re-bound to the current values of such
+variables.
+
 =item Variable syntax.
 
 (A) You've accidentally run your script through B<csh> instead
index c1cd67d..65bba93 100644 (file)
@@ -2132,7 +2132,9 @@ like shift().
 
 Returns the offset of where the last C<m//g> search left off for the variable
 is in question ($_ is used when the variable is not specified). May be
-modified to change that offset.
+modified to change that offset.  Such modification will also influence
+the C<\G> zero-width assertion in regular expressions.  See L<perlre> and
+L<perlop>.
 
 =item print FILEHANDLE LIST
 
index a3ae465..55014fb 100644 (file)
@@ -677,6 +677,7 @@ The current kinds of Magic Virtual Tables are:
     i        vtbl_isaelem        @ISA array element
     L        0 (but sets RMAGICAL)     Perl Module/Debugger???
     l        vtbl_dbline         Debugger?
+    o        vtbl_collxfrm       Locale transformation
     P        vtbl_pack           Tied Array or Hash
     p        vtbl_packelem       Tied Array or Hash element
     q        vtbl_packelem       Tied Scalar or Handle
@@ -1232,13 +1233,20 @@ Returns a pointer to the stash for a specified package.  See C<gv_stashpv>.
 
        HV*     gv_stashsv _((SV* sv, I32 create));
 
-=item GvSV
+=item he_free
 
-Return the SV from the GV.
+Releases a hash entry, such as while iterating though the hash.  See
+C<hv_iternext>.
 
-=item he_free
+       void    he_free _((HV* hv, HE* hent));
+
+=item he_delayfree
+
+Releases a hash entry, such as while iterating though the hash, but
+delays actual freeing of key and value until the end of the current
+statement (or thereabouts) with C<sv_2mortal>.  See C<hv_iternext>.
 
-Releases a hash entry from an iterator.  See C<hv_iternext>.
+       void    he_delayfree _((HV* hv, HE* hent));
 
 =item hv_clear
 
@@ -2589,4 +2597,4 @@ API Listing by Dean Roehrich <roehrich@cray.com>.
 
 =head1 DATE
 
-Version 28: 1996/12/27
+Version 28.1: 1997/1/13
index e6d1225..3cd71de 100644 (file)
@@ -23,7 +23,8 @@ file in the distribution for details.
 There is a new Configure question that asks if you want to maintain
 binary compatibility with Perl 5.003.  If you choose binary
 compatibility, you do not have to recompile your extensions, but you
-might have symbol conflicts if you embed Perl in another application.
+might have symbol conflicts if you embed Perl in another application,
+just as in the 5.003 release.
 
 =head2 New Opcode Module and Revised Safe Module
 
@@ -186,6 +187,16 @@ function whose prototype you want to retrieve.
 Functions documented in the Camel to default to $_ now in
 fact do, and all those that do are so documented in L<perlfunc>.
 
+=head2 C<m//g> does not trigger a pos() reset on failure
+
+The C<m//g> match iteration construct used to reset the iteration
+when it failed to match (so that the next C<m//g> match would start at
+the beginning of the string).  You now have to explicitly do a
+C<pos $str = 0;> to reset the "last match" position, or modify the
+string in some way.  This change makes it practical to chain C<m//g>
+matches together in conjunction with ordinary matches using the C<\G>
+zero-width assertion.  See L<perlop> and L<perlre>.
+
 =back
 
 =head2 New Built-in Methods
@@ -652,4 +663,4 @@ Constructed by Tom Christiansen, grabbing material with permission
 from innumerable contributors, with kibitzing by more than a few Perl
 porters.
 
-Last update: Tue Dec 24 16:45:14 EST 1996
+Last update: Tue Jan 14 14:03:02 EST 1997
index a8f34c0..dd3aeab 100644 (file)
@@ -695,7 +695,10 @@ In a scalar context, C<m//g> iterates through the string, returning TRUE
 each time it matches, and FALSE when it eventually runs out of
 matches.  (In other words, it remembers where it left off last time and
 restarts the search at that point.  You can actually find the current
-match position of a string using the pos() function--see L<perlfunc>.)
+match position of a string or set it using the pos() function--see
+L<perlfunc/pos>.)  Note that you can use this feature to stack C<m//g>
+matches or intermix C<m//g> matches with C<m/\G.../>.
+
 If you modify the string in any way, the match position is reset to the
 beginning.  Examples:
 
@@ -711,6 +714,30 @@ beginning.  Examples:
     }
     print "$sentences\n";
 
+    # using m//g with \G
+    $_ = "ppooqppq";
+    while ($i++ < 2) {
+        print "1: '";
+        print $1 while /(o)/g; print "', pos=", pos, "\n";
+        print "2: '";
+        print $1 if /\G(q)/;   print "', pos=", pos, "\n";
+        print "3: '";
+        print $1 while /(p)/g; print "', pos=", pos, "\n";
+    }
+
+The last example should print:
+
+    1: 'oo', pos=4
+    2: 'q', pos=4
+    3: 'pp', pos=7
+    1: '', pos=7
+    2: 'q', pos=7
+    3: '', pos=7
+
+Note how C<m//g> matches change the value reported by C<pos()>, but the
+non-global match doesn't.
+
+
 =item q/STRING/
 
 =item C<'STRING'>
index 12f9f51..a4c0a7d 100644 (file)
@@ -174,7 +174,10 @@ represents backspace rather than a word boundary.)  The C<\A> and C<\Z> are
 just like "^" and "$" except that they won't match multiple times when the
 C</m> modifier is used, while "^" and "$" will match at every internal line
 boundary.  To match the actual end of the string, not ignoring newline,
-you can use C<\Z(?!\n)>.
+you can use C<\Z(?!\n)>.  The C<\G> assertion can be used to mix global
+matches (using C<m//g>) and non-global ones, as described in L<perlop>.
+The actual location where C<\G> will match can also be influenced
+by using C<pos()> as an lvalue.  See L<perlfunc/pos>.
 
 When the bracketing construct C<( ... )> is used, \E<lt>digitE<gt> matches the
 digit'th substring.  Outside of the pattern, always use "$" instead of "\"
index bd3eb18..c83f2da 100644 (file)
@@ -754,6 +754,34 @@ starts scribbling on your @_ parameter list.
 This is all very powerful, of course, and should be used only in moderation
 to make the world a better place.  
 
+=head2 Constant Functions
+
+Functions with a prototype of C<()> are potential candidates for
+inlining.  If the result after optimization and constant folding is a
+constant then it will be used in place of new-style calls to the
+function.  Old-style calls (that is, calls made using C<&>) are not
+affected.
+
+All of the following functions would be inlined.
+
+    sub PI ()          { 3.14159 }
+    sub ST_DEV ()      { 0 }
+    sub ST_INO ()      { 1 }
+
+    sub FLAG_FOO ()    { 1 << 8 }
+    sub FLAG_BAR ()    { 1 << 9 }
+    sub FLAG_MASK ()   { FLAG_FOO | FLAG_BAR }
+    
+    sub OPT_BAZ ()     { 1 }
+    sub BAZ_VAL () {
+       if (OPT_BAZ) {
+           return 23;
+       }
+       else {
+           return 42;
+       }
+    }
+
 If you redefine a subroutine which was eligible for inlining you'll get
 a mandatory warning.  (You can use this warning to tell whether or not a
 particular subroutine is considered constant.)  The warning is
index cbc1785..b8353fc 100644 (file)
@@ -68,6 +68,8 @@ delete on slices, flock, keys as an lvalue, my() in Control Structures,
 unpack() and pack(), use VERSION, use Module VERSION LIST,
 prototype(FUNCTION), $_ as Default
 
+=item C<m//g> does not trigger a pos() reset on failure
+
 =item New Built-in Methods
 
 isa(CLASS), can(METHOD), VERSION( [NEED] ), class(), is_instance()
@@ -426,6 +428,8 @@ $ARGV, @ARGV, @INC, %INC, $ENV{expr}, $SIG{expr}
 
 =item Prototypes
 
+=item Constant Functions
+
 =item Overriding Builtin Functions
 
 =item Autoloading
@@ -1107,7 +1111,8 @@ Precedence
 =item General Regular Expression Traps using s///, etc.
 
 Regular Expression, Regular Expression, Regular Expression, Regular
-Expression, Regular Expression, Regular Expression, Regular Expression
+Expression, Regular Expression, Regular Expression, Regular Expression,
+Regular Expression
 
 =item Subroutine, Signal, Sorting Traps
 
@@ -1417,24 +1422,24 @@ av_shift, av_store, av_undef, av_unshift, CLASS, Copy, croak, CvSTASH,
 DBsingle, DBsub, DBtrace, dMARK, dORIGMARK, dowarn, dSP, dXSARGS, dXSI32,
 dXSI32, ENTER, EXTEND, FREETMPS, G_ARRAY, G_DISCARD, G_EVAL, GIMME,
 G_NOARGS, G_SCALAR, gv_fetchmeth, gv_fetchmethod, gv_stashpv, gv_stashsv,
-GvSV, he_free, hv_clear, hv_delete, hv_exists, hv_fetch, hv_iterinit,
-hv_iterkey, hv_iternext, hv_iternextsv, hv_iterval, hv_magic, HvNAME,
-hv_store, hv_undef, isALNUM, isALPHA, isDIGIT, isLOWER, isSPACE, isUPPER,
-items, ix, LEAVE, MARK, mg_clear, mg_copy, mg_find, mg_free, mg_get,
-mg_len, mg_magical, mg_set, Move, na, New, Newc, Newz, newAV, newHV,
-newRV_inc, newRV_noinc, newSV, newSViv, newSVnv, newSVpv, newSVrv, newSVsv,
-newXS, newXSproto, Nullav, Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK,
-perl_alloc, perl_call_argv, perl_call_method, perl_call_pv, perl_call_sv,
-perl_construct, perl_destruct, perl_eval_sv, perl_free, perl_get_av,
-perl_get_cv, perl_get_hv, perl_get_sv, perl_parse, perl_require_pv,
-perl_run, POPi, POPl, POPp, POPn, POPs, PUSHMARK, PUSHi, PUSHn, PUSHp,
-PUSHs, PUTBACK, Renew, Renewc, RETVAL, safefree, safemalloc, saferealloc,
-savepv, savepvn, SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE, strGT, strLE,
-strLT, strNE, strnEQ, strnNE, sv_2mortal, sv_bless, sv_catpv, sv_catpvn,
-sv_catsv, sv_cmp, sv_cmp, SvCUR, SvCUR_set, sv_dec, sv_dec, SvEND, sv_eq,
-SvGROW, sv_grow, sv_inc, SvIOK, SvIOK_off, SvIOK_on, SvIOK_only,
-SvIOK_only, SvIOKp, sv_isa, SvIV, sv_isobject, SvIVX, SvLEN, sv_len,
-sv_len, sv_magic, sv_mortalcopy, SvOK, sv_newmortal, sv_no, SvNIOK,
+he_free, he_delayfree, hv_clear, hv_delete, hv_exists, hv_fetch,
+hv_iterinit, hv_iterkey, hv_iternext, hv_iternextsv, hv_iterval, hv_magic,
+HvNAME, hv_store, hv_undef, isALNUM, isALPHA, isDIGIT, isLOWER, isSPACE,
+isUPPER, items, ix, LEAVE, MARK, mg_clear, mg_copy, mg_find, mg_free,
+mg_get, mg_len, mg_magical, mg_set, Move, na, New, Newc, Newz, newAV,
+newHV, newRV_inc, newRV_noinc, newSV, newSViv, newSVnv, newSVpv, newSVrv,
+newSVsv, newXS, newXSproto, Nullav, Nullch, Nullcv, Nullhv, Nullsv,
+ORIGMARK, perl_alloc, perl_call_argv, perl_call_method, perl_call_pv,
+perl_call_sv, perl_construct, perl_destruct, perl_eval_sv, perl_free,
+perl_get_av, perl_get_cv, perl_get_hv, perl_get_sv, perl_parse,
+perl_require_pv, perl_run, POPi, POPl, POPp, POPn, POPs, PUSHMARK, PUSHi,
+PUSHn, PUSHp, PUSHs, PUTBACK, Renew, Renewc, RETVAL, safefree, safemalloc,
+saferealloc, savepv, savepvn, SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE,
+strGT, strLE, strLT, strNE, strnEQ, strnNE, sv_2mortal, sv_bless, sv_catpv,
+sv_catpvn, sv_catsv, sv_cmp, sv_cmp, SvCUR, SvCUR_set, sv_dec, sv_dec,
+SvEND, sv_eq, SvGROW, sv_grow, sv_inc, SvIOK, SvIOK_off, SvIOK_on,
+SvIOK_only, SvIOK_only, SvIOKp, sv_isa, SvIV, sv_isobject, SvIVX, SvLEN,
+sv_len, sv_len, sv_magic, sv_mortalcopy, SvOK, sv_newmortal, sv_no, SvNIOK,
 SvNIOK_off, SvNIOKp, SvNOK, SvNOK_off, SvNOK_on, SvNOK_only, SvNOK_only,
 SvNOKp, SvNV, SvNVX, SvPOK, SvPOK_off, SvPOK_on, SvPOK_only, SvPOK_only,
 SvPOKp, SvPV, SvPVX, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK,
index b8247a4..4b56dd2 100644 (file)
@@ -1108,6 +1108,26 @@ repeatedly, like C</x/> or C<m!x!>.
     # perl5 prints: perl5
 
 
+=item * Regular Expression
+
+Under perl4 and upto version 5.003, a failed C<m//g> match used to
+reset the internal iterator, so that subsequent C<m//g> match attempts
+began from the beginning of the string.  In perl version 5.004 and later,
+failed C<m//g> matches do not reset the iterator position (which can be
+found using the C<pos()> function--see L<perlfunc/pos>).
+
+    $test = "foop";
+    for (1..3) {
+        print $1 while ($test =~ /(o)/g);
+        # pos $test = 0;     # to get old behavior
+    }
+    # perl4     prints: oooooo
+    # perl5.004 prints: oo
+
+You may always reset the iterator yourself as shown in the commented line
+to get the old behavior.
+
 =back
 
 =head2 Subroutine, Signal, Sorting Traps
index a049e9d..de9bd22 100644 (file)
@@ -698,6 +698,22 @@ sometimes it's a string representing the function, and sometimes it's
 going to call the subroutine call right then and there!  Best to be sure
 and quote it or take a reference to it.  *Plumber works too.  See L<perlsub>.
 
+If your system has the sigaction() function then signal handlers are
+installed using it.  This means you get reliable signal handling.  If
+your system has the SA_RESTART flag it is used when signals handlers are
+installed.  This means that system calls for which it is supported
+continue rather than returning when a signal arrives.  If you want your
+system calls to be interrupted by signal delivery then do something like
+this:
+
+    use POSIX ':signal_h';
+
+    my $alarm = 0;
+    sigaction SIGALRM, new POSIX::SigAction sub { $alarm = 1 }
+       or die "Error setting SIGALRM handler: $!\n";
+
+See L<POSIX>.
+
 Certain internal hooks can be also set using the %SIG hash.  The
 routine indicated by C<$SIG{__WARN__}> is called when a warning message is
 about to be printed.  The warning message is passed as the first
index b97c00c..816fb6b 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 4f79c12..9702614 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 6821d84..5d1e193 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'amigaos');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 033a0d8..586da04 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 3df9386..6bf47af 100755 (executable)
 #!/bin/sh
-#psroff -t -man -rC1 -rD1 -rF1 > /tmp/PerlDoc.ps 2>/tmp/PerlTOC.raw \
-nroff -man -rC1 -rD1 -rF1 > /tmp/PerlDoc.txt 2>/tmp/PerlTOC.nr.raw \
-    /usr/local/man/man1/perl.1 \
-    /usr/local/man/man1/perlnews.1     \
-    /usr/local/man/man1/perldata.1     \
-    /usr/local/man/man1/perlsyn.1      \
-    /usr/local/man/man1/perlop.1       \
-    /usr/local/man/man1/perlre.1       \
-    /usr/local/man/man1/perlrun.1      \
-    /usr/local/man/man1/perllocale.1   \
-    /usr/local/man/man1/perlfunc.1     \
-    /usr/local/man/man1/perlvar.1      \
-    /usr/local/man/man1/perlsub.1      \
-    /usr/local/man/man1/perlmod.1      \
-    /usr/local/man/man1/perlref.1      \
-    /usr/local/man/man1/perldsc.1      \
-    /usr/local/man/man1/perllol.1      \
-    /usr/local/man/man1/perlobj.1      \
-    /usr/local/man/man1/perltie.1      \
-    /usr/local/man/man1/perlbot.1      \
-    /usr/local/man/man1/perldebug.1    \
-    /usr/local/man/man1/perldiag.1     \
-    /usr/local/man/man1/perlform.1     \
-    /usr/local/man/man1/perlipc.1      \
-    /usr/local/man/man1/perlsec.1      \
-    /usr/local/man/man1/perltrap.1     \
-    /usr/local/man/man1/perlstyle.1    \
-    /usr/local/man/man1/perlxs.1       \
-    /usr/local/man/man1/perlxstut.1    \
-    /usr/local/man/man1/perlguts.1     \
-    /usr/local/man/man1/perlcall.1     \
-    /usr/local/man/man1/perlembed.1    \
-    /usr/local/man/man1/perlpod.1      \
-    /usr/local/man/man1/perlbook.1     \
+#
+# Usage: roffitall [-nroff|-psroff|-groff]
+#
+# Authors: Tom Christiansen, Raphael Manfredi
+
+me=roffitall
+tmp=.
+
+#manroot=/usr/local
+#libroot=/usr/local
+
+manroot=$HOME/usr
+libroot=$HOME/usr/lib/perl5
+
+case "$1" in
+-nroff) cmd="nroff -man"; ext='txt';;
+-psroff) cmd="psroff -t"; ext='ps';;
+-groff) cmd="groff -man"; ext='ps';;
+*)
+       echo "Usage: roffitall [-nroff|-psroff|-groff]" >&2
+       exit 1
+       ;;
+esac
+
+toroff=`
+       echo            \
+    $manroot/man/man1/perl.1   \
+    $manroot/man/man1/perlnews.1       \
+    $manroot/man/man1/perldata.1       \
+    $manroot/man/man1/perlsyn.1        \
+    $manroot/man/man1/perlop.1 \
+    $manroot/man/man1/perlre.1 \
+    $manroot/man/man1/perlrun.1        \
+    $manroot/man/man1/perllocale.1     \
+    $manroot/man/man1/perlfunc.1       \
+    $manroot/man/man1/perlvar.1        \
+    $manroot/man/man1/perlsub.1        \
+    $manroot/man/man1/perlmod.1        \
+    $manroot/man/man1/perlref.1        \
+    $manroot/man/man1/perldsc.1        \
+    $manroot/man/man1/perllol.1        \
+    $manroot/man/man1/perlobj.1        \
+    $manroot/man/man1/perltie.1        \
+    $manroot/man/man1/perlbot.1        \
+    $manroot/man/man1/perldebug.1      \
+    $manroot/man/man1/perldiag.1       \
+    $manroot/man/man1/perlform.1       \
+    $manroot/man/man1/perlipc.1        \
+    $manroot/man/man1/perlsec.1        \
+    $manroot/man/man1/perltrap.1       \
+    $manroot/man/man1/perlstyle.1      \
+    $manroot/man/man1/perlapio.1       \
+    $manroot/man/man1/perlxs.1 \
+    $manroot/man/man1/perlxstut.1      \
+    $manroot/man/man1/perlguts.1       \
+    $manroot/man/man1/perlcall.1       \
+    $manroot/man/man1/perlembed.1      \
+    $manroot/man/man1/perlpod.1        \
+    $manroot/man/man1/perlbook.1       \
        \
-    /usr/local/man/man3/diagnostics.3  \
-    /usr/local/man/man3/integer.3      \
-    /usr/local/man/man3/less.3 \
-    /usr/local/man/man3/lib.3  \
-    /usr/local/man/man3/overload.3     \
-    /usr/local/man/man3/sigtrap.3      \
-    /usr/local/man/man3/strict.3       \
-    /usr/local/man/man3/subs.3 \
+    $libroot/man/man3/blib.3   \
+    $libroot/man/man3/diagnostics.3    \
+    $libroot/man/man3/integer.3        \
+    $libroot/man/man3/less.3   \
+    $libroot/man/man3/lib.3    \
+    $libroot/man/man3/localle.3        \
+    $libroot/man/man3/overload.3       \
+    $libroot/man/man3/sigtrap.3        \
+    $libroot/man/man3/strict.3 \
+    $libroot/man/man3/subs.3   \
+    $libroot/man/man3/vars.3   \
        \
-    /usr/local/man/man3/AnyDBM_File.3  \
-    /usr/local/man/man3/AutoLoader.3   \
-    /usr/local/man/man3/AutoSplit.3    \
-    /usr/local/man/man3/Benchmark.3    \
-    /usr/local/man/man3/Carp.3 \
-    /usr/local/man/man3/Config.3       \
-    /usr/local/man/man3/Cwd.3  \
-    /usr/local/man/man3/DB_File.3      \
-    /usr/local/man/man3/Devel::SelfStubber.3   \
-    /usr/local/man/man3/DynaLoader.3   \
-    /usr/local/man/man3/English.3      \
-    /usr/local/man/man3/Env.3  \
-    /usr/local/man/man3/Exporter.3     \
-    /usr/local/man/man3/ExtUtils::Liblist.3    \
-    /usr/local/man/man3/ExtUtils::MakeMaker.3  \
-    /usr/local/man/man3/ExtUtils::Manifest.3   \
-    /usr/local/man/man3/ExtUtils::Mkbootstrap.3        \
-    /usr/local/man/man3/Fcntl.3        \
-    /usr/local/man/man3/File::Basename.3       \
-    /usr/local/man/man3/File::CheckTree.3      \
-    /usr/local/man/man3/File::Find.3   \
-    /usr/local/man/man3/FileHandle.3   \
-    /usr/local/man/man3/File::Path.3   \
-    /usr/local/man/man3/Getopt::Long.3 \
-    /usr/local/man/man3/Getopt::Std.3  \
-    /usr/local/man/man3/I18N::Collate.3        \
-    /usr/local/man/man3/IPC::Open2.3   \
-    /usr/local/man/man3/IPC::Open3.3   \
-    /usr/local/man/man3/Net::Ping.3    \
-    /usr/local/man/man3/POSIX.3        \
-    /usr/local/man/man3/Safe.3 \
-    /usr/local/man/man3/SelfLoader.3   \
-    /usr/local/man/man3/Socket.3       \
-    /usr/local/man/man3/Sys::Hostname.3        \
-    /usr/local/man/man3/Term::Cap.3    \
-    /usr/local/man/man3/Term::Complete.3       \
-    /usr/local/man/man3/Test::Harness.3        \
-    /usr/local/man/man3/Text::Abbrev.3 \
-    /usr/local/man/man3/Text::Soundex.3        \
-    /usr/local/man/man3/TieHash.3      \
-    /usr/local/man/man3/Time::Local.3  
+    $libroot/man/man3/AnyDBM_File.3    \
+    $libroot/man/man3/AutoLoader.3     \
+    $libroot/man/man3/AutoSplit.3      \
+    $libroot/man/man3/Benchmark.3      \
+    $libroot/man/man3/Carp.3   \
+    $libroot/man/man3/Config.3 \
+    $libroot/man/man3/Cwd.3    \
+    $libroot/man/man3/DB_File.3        \
+    $libroot/man/man3/Devel::SelfStubber.3     \
+    $libroot/man/man3/DynaLoader.3     \
+    $libroot/man/man3/English.3        \
+    $libroot/man/man3/Env.3    \
+    $libroot/man/man3/Exporter.3       \
+    $libroot/man/man3/ExtUtils::Embed.3        \
+    $libroot/man/man3/ExtUtils::Install.3      \
+    $libroot/man/man3/ExtUtils::Liblist.3      \
+    $libroot/man/man3/ExtUtils::MakeMaker.3    \
+    $libroot/man/man3/ExtUtils::Manifest.3     \
+    $libroot/man/man3/ExtUtils::Mkbootstrap.3  \
+    $libroot/man/man3/ExtUtils::Mksymlists.3   \
+    $libroot/man/man3/Fatal.3  \
+    $libroot/man/man3/Fcntl.3  \
+    $libroot/man/man3/File::Basename.3 \
+    $libroot/man/man3/File::CheckTree.3        \
+    $libroot/man/man3/File::Copy.3     \
+    $libroot/man/man3/File::Compare.3  \
+    $libroot/man/man3/File::Find.3     \
+    $libroot/man/man3/File::Path.3     \
+    $libroot/man/man3/File::stat.3     \
+    $libroot/man/man3/FileCache.3      \
+    $libroot/man/man3/FileHandle.3     \
+    $libroot/man/man3/FindBin.3        \
+    $libroot/man/man3/Getopt::Long.3   \
+    $libroot/man/man3/Getopt::Std.3    \
+    $libroot/man/man3/I18N::Collate.3  \
+    $libroot/man/man3/IO.3 \
+    $libroot/man/man3/IO::File.3 \
+    $libroot/man/man3/IO::Handle.3 \
+    $libroot/man/man3/IO::Pipe.3 \
+    $libroot/man/man3/IO::Seekable.3 \
+    $libroot/man/man3/IO::Select.3 \
+    $libroot/man/man3/IO::Socket.3 \
+    $libroot/man/man3/IPC::Open2.3     \
+    $libroot/man/man3/IPC::Open3.3     \
+    $libroot/man/man3/Math::BigFloat.3 \
+    $libroot/man/man3/Math::BigInt.3   \
+    $libroot/man/man3/Math::Complex.3  \
+    $libroot/man/man3/Net::Ping.3      \
+    $libroot/man/man3/Net::hostent.3   \
+    $libroot/man/man3/Net::netent.3    \
+    $libroot/man/man3/Net::protoent.3  \
+    $libroot/man/man3/Net::servent.3   \
+    $libroot/man/man3/Opcode.3 \
+    $libroot/man/man3/POSIX.3  \
+    $libroot/man/man3/Pod::Text.3      \
+    $libroot/man/man3/Safe.3   \
+    $libroot/man/man3/Search::Dict.3   \
+    $libroot/man/man3/SelectSaver.3    \
+    $libroot/man/man3/SelfLoader.3     \
+    $libroot/man/man3/Shell.3  \
+    $libroot/man/man3/Socket.3 \
+    $libroot/man/man3/Symbol.3 \
+    $libroot/man/man3/Sys::Hostname.3  \
+    $libroot/man/man3/Sys::Syslog.3    \
+    $libroot/man/man3/Term::Cap.3      \
+    $libroot/man/man3/Term::Complete.3 \
+    $libroot/man/man3/Test::Harness.3  \
+    $libroot/man/man3/Text::Abbrev.3   \
+    $libroot/man/man3/Text::ParseWords.3       \
+    $libroot/man/man3/Text::Soundex.3  \
+    $libroot/man/man3/Text::Tabs.3     \
+    $libroot/man/man3/Tie::Hash.3      \
+    $libroot/man/man3/Tie::RefHash.3   \
+    $libroot/man/man3/Tie::Scalar.3    \
+    $libroot/man/man3/Tie::SubstrHash.3        \
+    $libroot/man/man3/Time::Local.3            \
+    $libroot/man/man3/Time::gmtime.3   \
+    $libroot/man/man3/Time::localtime.3        \
+    $libroot/man/man3/Time::tm.3               \
+    $libroot/man/man3/UNIVERSAL.3              \
+    $libroot/man/man3/User::grent.3            \
+    $libroot/man/man3/User::pwent.3 | \
+perl -ne 'map { -r && print "$_ " } split'`
+
+#psroff -t -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.ps 2>$tmp/PerlTOC.raw
+#nroff -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.txt 2>$tmp/PerlTOC.nr.raw
+
+run="$cmd -rC1 -rD1 -rF1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
+echo "$me: running $run"
+eval $run $toroff
+echo "$me: parsing TOC"
+./rofftoc $tmp/PerlTOC.$ext.raw > $tmp/PerlTOC.tmp.man
+run="$cmd $tmp/PerlTOC.tmp.man >$tmp/PerlTOC.$ext"
+echo "$me: running $run"
+eval $run
+rm -f $tmp/PerlTOC.tmp.man $tmp/PerlTOC.$ext.raw
+echo "$me: leaving you with $tmp/PerlDoc.$ext and $tmp/PerlTOC.$ext"
+
index e69de29..a2d0e7b 100755 (executable)
@@ -0,0 +1,66 @@
+# feed this into perl
+       eval 'exec perl -S $0 ${1+"$@"}'
+               if $running_under_some_shell;
+
+# Usage: rofftoc PerlTOC.xxx.raw
+#
+# Post-processes roffitall output. Called from roffitall to produce
+# a formatted table of contents.
+#
+# Author: Tom Christiansen
+
+print <<'EOF';
+.de NP
+'.sp 0.8i
+.tl ''- % -''
+'bp
+'sp 0.5i
+.tl ''\fB\s+2Perl Table of Contents\s0\fR''
+'sp 0.3i
+..
+.wh -1i NP
+.af % i
+.sp 0.5i
+.tl ''\fB\s+5Perl Table of Contents\s0\fR''
+.sp 0.5i
+.nf
+.na
+EOF
+while (<>) {
+    #chomp;
+    s/Index://;
+    ($type, $page, $desc) = split ' ', $_, 3;
+    $desc =~ s/^"(.*)"$/$1/;
+    if      ($type eq 'Title') {
+       ($name = $desc) =~ s/ .*//;
+       next;
+    } elsif ($type eq 'Name') {
+       #print STDERR  $page, "\t", $desc;
+       print ".ne 5\n";
+       print ".in 0\n";
+       print ".sp\n";
+       print ".ft B\n";
+       print "$desc\n";
+       print ".ft P\n";
+       print ".in 5n\n";
+    } elsif ($type eq 'Header') {
+       print ".br\n", $page, "\t", $desc;
+    } elsif ($type eq 'Subsection') {
+       print ".br\n", $page, "\t\t", $desc;
+    } elsif ($type eq 'Item') {
+       next if $desc =~ /\\bu/;
+       next unless $name =~ /POSIX|func/i;
+       print ".br\n", $page, "\t\t\t", $desc;
+    }
+} 
+__END__
+Index:Title    1       "PERL 1"
+Index:Name     1       "perl - Practical Extraction and Report Language"
+Index:Header   1       "NAME"
+Index:Header   1       "SYNOPSIS"
+Index:Header   2       "DESCRIPTION"
+Index:Item     2       "\(bu Many usability enhancements"
+Index:Item     2       "\(bu Simplified grammar"
+Index:Item     2       "\(bu Lexical scoping"
+Index:Item     2       "\(bu Arbitrarily nested data structures"
+Index:Item     2       "\(bu Modularity and reusability"
diff --git a/pp.c b/pp.c
index 7a24843..f5c2225 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -544,13 +544,11 @@ PP(pp_undef)
        break;
     case SVt_PVCV:
        cv_undef((CV*)sv);
-       sub_generation++;
        break;
     case SVt_PVGV:
-        if (SvFAKE(sv)) {
-            sv_setsv(sv, &sv_undef);
-            break;
-        }
+       if (SvFAKE(sv))
+           sv_setsv(sv, &sv_undef);
+       break;
     default:
        if (SvPOK(sv) && SvLEN(sv)) {
            (void)SvOOK_off(sv);
@@ -568,6 +566,8 @@ PP(pp_undef)
 PP(pp_predec)
 {
     dSP;
+    if (SvREADONLY(TOPs))
+       croak(no_modify);
     if (SvIOK(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
        SvIVX(TOPs) != IV_MIN)
     {
@@ -583,6 +583,8 @@ PP(pp_predec)
 PP(pp_postinc)
 {
     dSP; dTARGET;
+    if (SvREADONLY(TOPs))
+       croak(no_modify);
     sv_setsv(TARG, TOPs);
     if (SvIOK(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
        SvIVX(TOPs) != IV_MAX)
@@ -602,6 +604,8 @@ PP(pp_postinc)
 PP(pp_postdec)
 {
     dSP; dTARGET;
+    if(SvREADONLY(TOPs))
+       croak(no_modify);
     sv_setsv(TARG, TOPs);
     if (SvIOK(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
        SvIVX(TOPs) != IV_MIN)
@@ -851,12 +855,16 @@ PP(pp_ncmp)
       dPOPTOPnnrl;
       I32 value;
 
-      if (left > right)
-       value = 1;
-      else if (left < right)
+      if (left < right)
        value = -1;
-      else
+      else if (left == right)
        value = 0;
+      else if (left > right)
+       value = 1;
+      else {
+       SETs(&sv_undef);
+       RETURN;
+      }
       SETi(value);
       RETURN;
     }
@@ -2110,10 +2118,11 @@ PP(pp_lslice)
 
 PP(pp_anonlist)
 {
-    dSP; dMARK;
+    dSP; dMARK; dORIGMARK;
     I32 items = SP - MARK;
-    SP = MARK;
-    XPUSHs((SV*)sv_2mortal((SV*)av_make(items, MARK+1)));
+    SV *av = sv_2mortal((SV*)av_make(items, MARK+1));
+    SP = ORIGMARK;             /* av_make() might realloc stack_sp */
+    XPUSHs(av);
     RETURN;
 }
 
@@ -3696,7 +3705,8 @@ PP(pp_split)
     STRLEN len;
     register char *s = SvPV(sv, len);
     char *strend = s + len;
-    register PMOP *pm = (PMOP*)POPs;
+    register PMOP *pm;
+    register REGEXP *rx;
     register SV *dstr;
     register char *m;
     I32 iters = 0;
@@ -3707,12 +3717,17 @@ PP(pp_split)
     I32 realarray = 0;
     I32 base;
     AV *oldstack = curstack;
-    register REGEXP *rx = pm->op_pmregexp;
     I32 gimme = GIMME;
     I32 oldsave = savestack_ix;
 
+#ifdef DEBUGGING
+    Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
+#else
+    pm = (PMOP*)POPs;
+#endif
     if (!pm || !s)
        DIE("panic: do_split");
+    rx = pm->op_pmregexp;
 
     TAINT_IF((pm->op_pmflags & PMf_LOCALE) &&
             (pm->op_pmflags & (PMf_WHITE | PMf_SKIPWHITE)));
@@ -3792,7 +3807,7 @@ PP(pp_split)
            s = m;
        }
     }
-    else if (pm->op_pmshort) {
+    else if (pm->op_pmshort && !rx->nparens) {
        i = SvCUR(pm->op_pmshort);
        if (i == 1) {
            i = *SvPVX(pm->op_pmshort);
index 94b4052..0d9a8cb 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1254,11 +1254,8 @@ PP(pp_enteriter)
 
     PUSHBLOCK(cx, CXt_LOOP, SP);
     PUSHLOOP(cx, svp, MARK);
-    if (op->op_flags & OPf_STACKED) {
-       AV* av = (AV*)POPs;
-       cx->blk_loop.iterary = av;
-       cx->blk_loop.iterix = -1;
-    }
+    if (op->op_flags & OPf_STACKED)
+       cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
     else {
        cx->blk_loop.iterary = curstack;
        AvFILL(curstack) = sp - stack_base;
@@ -1632,8 +1629,7 @@ PP(pp_goto)
                    (void)SvREFCNT_inc(cv);
                else {  /* save temporaries on recursion? */
                    if (CvDEPTH(cv) == 100 && dowarn)
-                       warn("Deep recursion on subroutine \"%s\"",
-                           GvENAME(CvGV(cv)));
+                       sub_crush_depth(cv);
                    if (CvDEPTH(cv) > AvFILL(padlist)) {
                        AV *newpad = newAV();
                        SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
@@ -1709,12 +1705,13 @@ PP(pp_goto)
                    }
                }
                if (perldb && curstash != debstash) {
-                   /* &xsub is not copying @_ */
+                   /*
+                    * We do not care about using sv to call CV;
+                    * it's for informational purposes only.
+                    */
                    SV *sv = GvSV(DBsub);
                    save_item(sv);
                    gv_efullname3(sv, CvGV(cv), Nullch);
-                   /* We do not care about using sv to call CV,
-                    * just for info. */
                }
                RETURNOP(CvSTART(cv));
            }
index 40432e0..cbc2b95 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -242,6 +242,8 @@ PP(pp_eq)
 PP(pp_preinc)
 {
     dSP;
+    if (SvREADONLY(TOPs))
+       croak(no_modify);
     if (SvIOK(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
        SvIVX(TOPs) != IV_MAX)
     {
@@ -297,7 +299,19 @@ PP(pp_join)
 PP(pp_pushre)
 {
     dSP;
+#ifdef DEBUGGING
+    /*
+     * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
+     * will be enough to hold an OP*.
+     */
+    SV* sv = sv_newmortal();
+    sv_upgrade(sv, SVt_PVLV);
+    LvTYPE(sv) = '/';
+    Copy(&op, &LvTARGOFF(sv), 1, OP*);
+    XPUSHs(sv);
+#else
     XPUSHs((SV*)op);
+#endif
     RETURN;
 }
 
@@ -1727,26 +1741,26 @@ PP(pp_entersub)
        DIE("Not a CODE reference");
 
     if (!CvROOT(cv) && !CvXSUB(cv)) {
-       if (gv = CvGV(cv)) {
-           SV *tmpstr;
-           GV *ngv;
-           if (cv != GvCV(gv)) {       /* autoloaded stub? */
-               cv = GvCV(gv);
-               goto retry;
-           }
-           tmpstr = sv_newmortal();
-           gv_efullname3(tmpstr, gv, Nullch);
-           ngv = gv_fetchmethod(GvESTASH(gv), "AUTOLOAD");
-           if (ngv && ngv != gv && (cv = GvCV(ngv))) { /* One more chance... */
-               gv = ngv;
-               sv_setsv(GvSV(CvGV(cv)), tmpstr);       /* Set CV's $AUTOLOAD */
-               SvTAINTED_off(GvSV(CvGV(cv)));
-               goto retry;
-           }
-           else
-               DIE("Undefined subroutine &%s called",SvPVX(tmpstr));
+       GV* autogv;
+       SV* subname;
+
+       /* anonymous or undef'd function leaves us no recourse */
+       if (CvANON(cv) || !(gv = CvGV(cv)))
+           DIE("Undefined subroutine called");
+       /* autoloaded stub? */
+       if (cv != GvCV(gv)) {
+           cv = GvCV(gv);
+           goto retry;
        }
-       DIE("Undefined subroutine called");
+       /* should call AUTOLOAD now? */
+       if ((autogv = gv_autoload(GvESTASH(gv), GvNAME(gv), GvNAMELEN(gv)))) {
+           cv = GvCV(autogv);
+           goto retry;
+       }
+       /* sorry */
+       subname = sv_newmortal();
+       gv_efullname3(subname, gv, Nullch);
+       DIE("Undefined subroutine &%s called", SvPVX(subname));
     }
 
     gimme = GIMME;
@@ -1844,8 +1858,8 @@ PP(pp_entersub)
            (void)SvREFCNT_inc(cv);
        else {  /* save temporaries on recursion? */
            if (CvDEPTH(cv) == 100 && dowarn 
-               && !(perldb && cv == GvCV(DBsub)))
-               warn("Deep recursion on subroutine \"%s\"",GvENAME(CvGV(cv)));
+                 && !(perldb && cv == GvCV(DBsub)))
+               sub_crush_depth(cv);
            if (CvDEPTH(cv) > AvFILL(padlist)) {
                AV *av;
                AV *newpad = newAV();
@@ -1925,6 +1939,19 @@ PP(pp_entersub)
     }
 }
 
+void
+sub_crush_depth(cv)
+CV* cv;
+{
+    if (CvANON(cv))
+       warn("Deep recursion on anonymous subroutine");
+    else {
+       SV* tmpstr = sv_newmortal();
+       gv_efullname3(tmpstr, CvGV(cv), Nullch);
+       warn("Deep recursion on subroutine \"%s\"", SvPVX(tmpstr));
+    }
+}
+
 PP(pp_aelem)
 {
     dSP;
index f24c8ab..11e11a5 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -675,7 +675,7 @@ PP(pp_sselect)
     }
 
 #if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
-#ifdef __linux__
+#if defined(__linux__) || defined(OS2)
     growsize = sizeof(fd_set);
 #else
     growsize = maxlen;         /* little endians can use vecs directly */
@@ -889,7 +889,6 @@ PP(pp_enterwrite)
        fgv = gv;
 
     cv = GvFORM(fgv);
-
     if (!cv) {
        if (fgv) {
            SV *tmpsv = sv_newmortal();
@@ -898,8 +897,10 @@ PP(pp_enterwrite)
        }
        DIE("Not a format reference");
     }
-    IoFLAGS(io) &= ~IOf_DIDTOP;
+    if (CvCLONE(cv))
+       cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
 
+    IoFLAGS(io) &= ~IOf_DIDTOP;
     return doform(cv,gv,op->op_next);
 }
 
@@ -975,6 +976,8 @@ PP(pp_leavewrite)
            gv_efullname3(tmpsv, fgv, Nullch);
            DIE("Undefined top format \"%s\" called",SvPVX(tmpsv));
        }
+       if (CvCLONE(cv))
+           cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
        return doform(cv,gv,op);
     }
 
@@ -2847,12 +2850,12 @@ nope:
 
 PP(pp_fork)
 {
+#ifdef HAS_FORK
     dSP; dTARGET;
     int childpid;
     GV *tmpgv;
 
     EXTEND(SP, 1);
-#ifdef HAS_FORK
     childpid = fork();
     if (childpid < 0)
        RETSETUNDEF;
@@ -2871,19 +2874,14 @@ PP(pp_fork)
 
 PP(pp_wait)
 {
+#if !defined(DOSISH) || defined(OS2)
     dSP; dTARGET;
     int childpid;
     int argflags;
-    I32 value;
 
-    EXTEND(SP, 1);
-#ifdef HAS_WAIT
-    childpid = wait(&argflags);
-    if (childpid > 0)
-       pidgone(childpid, argflags);
-    value = (I32)childpid;
-    statusvalue = FIXSTATUS(argflags);
-    PUSHi(value);
+    childpid = wait4pid(-1, &argflags, 0);
+    statusvalue = (childpid > 0) ? FIXSTATUS(argflags) : -1;
+    XPUSHi(childpid);
     RETURN;
 #else
     DIE(no_func, "Unsupported function wait");
@@ -2892,19 +2890,17 @@ PP(pp_wait)
 
 PP(pp_waitpid)
 {
+#if !defined(DOSISH) || defined(OS2)
     dSP; dTARGET;
     int childpid;
     int optype;
     int argflags;
-    I32 value;
 
-#ifdef HAS_WAIT
     optype = POPi;
     childpid = TOPi;
     childpid = wait4pid(childpid, &argflags, optype);
-    value = (I32)childpid;
-    statusvalue = FIXSTATUS(argflags);
-    SETi(value);
+    statusvalue = (childpid > 0) ? FIXSTATUS(argflags) : -1;
+    SETi(childpid);
     RETURN;
 #else
     DIE(no_func, "Unsupported function wait");
diff --git a/proto.h b/proto.h
index c762d38..86aaf73 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -8,7 +8,7 @@
 #endif
 #ifdef OVERLOAD
 SV*    amagic_call _((SV* left,SV* right,int method,int dir));
-bool Gv_AMupdate _((HV* stash));
+bool   Gv_AMupdate _((HV* stash));
 #endif /* OVERLOAD */
 OP*    append_elem _((I32 optype, OP* head, OP* tail));
 OP*    append_list _((I32 optype, LISTOP* first, LISTOP* last));
@@ -125,6 +125,7 @@ GP* gp_ref _((GP* gp));
 GV*    gv_AVadd _((GV* gv));
 GV*    gv_HVadd _((GV* gv));
 GV*    gv_IOadd _((GV* gv));
+GV*    gv_autoload _((HV* stash, char* name, STRLEN len));
 void   gv_check _((HV* stash));
 void   gv_efullname _((SV* sv, GV* gv));
 void   gv_efullname3 _((SV* sv, GV* gv, char* prefix));
@@ -138,8 +139,8 @@ void        gv_init _((GV *gv, HV *stash, char *name, STRLEN len, int multi));
 HV*    gv_stashpv _((char* name, I32 create));
 HV*    gv_stashpvn _((char* name, U32 namelen, I32 create));
 HV*    gv_stashsv _((SV* sv, I32 create));
-void   he_delayfree _((HE* hent, I32 shared));
-void   he_free _((HE* hent, I32 shared));
+void   he_delayfree _((HV* hv, HE* hent));
+void   he_free _((HV* hv, HE* hent));
 void   hoistmust _((PMOP* pm));
 void   hv_clear _((HV* tb));
 SV*    hv_delete _((HV* tb, char* key, U32 klen, I32 flags));
@@ -199,7 +200,9 @@ int magic_setamagic _((SV* sv, MAGIC* mg));
 int    magic_setarylen _((SV* sv, MAGIC* mg));
 int    magic_setbm     _((SV* sv, MAGIC* mg));
 int    magic_setdbline _((SV* sv, MAGIC* mg));
+#ifdef USE_LOCALE_COLLATE
 int    magic_setcollxfrm _((SV* sv, MAGIC* mg));
+#endif
 int    magic_setenv    _((SV* sv, MAGIC* mg));
 int    magic_setfm     _((SV* sv, MAGIC* mg));
 int    magic_setisa    _((SV* sv, MAGIC* mg));
@@ -418,6 +421,7 @@ HEK*        share_hek _((char* sv, I32 len, U32 hash));
 Signal_t sighandler _((int sig));
 SV**   stack_grow _((SV** sp, SV**p, int n));
 int    start_subparse _((void));
+void   sub_crush_depth _((CV* cv));
 bool   sv_2bool _((SV* sv));
 CV*    sv_2cv _((SV* sv, HV** st, GV** gvp, I32 lref));
 IO*    sv_2io _((SV* sv));
diff --git a/scope.c b/scope.c
index 3ca31aa..33a5048 100644 (file)
--- a/scope.c
+++ b/scope.c
 #include "EXTERN.h"
 #include "perl.h"
 
-/*
- * This value determines how small an SV is "small enough" to keep
- * in a lexical variable in anticipation of the next invocation.
- */
-#define PADVAL_SMALL_ENOUGH 240
-
 SV**
 stack_grow(sp, p, n)
 SV** sp;
@@ -179,14 +173,13 @@ I32 empty;
     if (empty) {
        register GP *gp;
        Newz(602, gp, 1, GP);
-       GvGP(gv) = gp;
-       GvREFCNT(gv) = 1;
+       GvGP(gv) = gp_ref(gp);
        GvSV(gv) = NEWSV(72,0);
        GvLINE(gv) = curcop->cop_line;
        GvEGV(gv) = gv;
     }
     else {
-       GvGP(gv)->gp_refcnt++;
+       gp_ref(GvGP(gv));
        GvINTRO_on(gv);
     }
 }
@@ -556,16 +549,10 @@ I32 base;
                case SVt_NULL:
                    break;
                case SVt_PVAV:
-                   if (AvMAX(sv) < (PADVAL_SMALL_ENOUGH / sizeof(SV*)))
-                       av_clear((AV*)sv);
-                   else
-                       av_undef((AV*)sv);
+                   av_clear((AV*)sv);
                    break;
                case SVt_PVHV:
-                   if (HvMAX(sv) < (PADVAL_SMALL_ENOUGH / sizeof(SV*)))
-                       hv_clear((HV*)sv);
-                   else
-                       hv_undef((HV*)sv);
+                   hv_clear((HV*)sv);
                    break;
                case SVt_PVCV:
                    croak("panic: leave_scope pad code");
@@ -577,12 +564,6 @@ I32 base;
                default:
                    (void)SvOK_off(sv);
                    (void)SvOOK_off(sv);
-                   if (SvPVX(sv) && SvLEN(sv) > PADVAL_SMALL_ENOUGH) {
-                       Safefree(SvPVX(sv));
-                       SvPVX(sv) = Nullch;
-                       SvLEN(sv) = 0;
-                       SvCUR(sv) = 0;
-                   }
                    break;
                }
            }
diff --git a/sv.c b/sv.c
index d8704b8..32ca7da 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -1911,8 +1911,7 @@ register SV *sstr;
                    GvGP(dstr)->gp_refcnt--;
                    GvINTRO_off(dstr);  /* one-shot flag */
                    Newz(602,gp, 1, GP);
-                   GvGP(dstr) = gp;
-                   GvREFCNT(dstr) = 1;
+                   GvGP(dstr) = gp_ref(gp);
                    GvSV(dstr) = NEWSV(72,0);
                    GvLINE(dstr) = curcop->cop_line;
                    GvEGV(dstr) = (GV*)dstr;
@@ -3523,16 +3522,14 @@ HV *stash;
                (void)SvOK_off(sv);
                if (SvTYPE(sv) >= SVt_PV) {
                    SvCUR_set(sv, 0);
-                   SvTAINT(sv);
                    if (SvPVX(sv) != Nullch)
                        *SvPVX(sv) = '\0';
+                   SvTAINT(sv);
                }
                if (GvAV(gv)) {
                    av_clear(GvAV(gv));
                }
-               if (GvHV(gv)) {
-                   if (HvNAME(GvHV(gv)))
-                       continue;
+               if (GvHV(gv) && !HvNAME(GvHV(gv))) {
                    hv_clear(GvHV(gv));
 #ifndef VMS  /* VMS has no environ array */
                    if (gv == envgv)
diff --git a/sv.h b/sv.h
index 0186536..0322965 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -218,6 +218,8 @@ struct xpvbm {
     U8         xbm_rare;       /* rarest character in string */
 };
 
+/* This structure much match XPVCV */
+
 struct xpvfm {
     char *     xpv_pv;         /* pointer to malloced string */
     STRLEN     xpv_cur;        /* length of xpv_pv as a C string */
@@ -237,6 +239,8 @@ struct xpvfm {
     long       xcv_depth;              /* >= 2 indicates recursive call */
     AV *       xcv_padlist;
     CV *       xcv_outside;
+    U8         xcv_flags;
+
     I32                xfm_lines;
 };
 
index 0d3de96..197ea78 100755 (executable)
@@ -7,6 +7,12 @@
 #
 # It is impossible to test every prototype that can be specified, but
 # we should test as many as we can.
+#
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+}
 
 use strict;
 
index 87a3d2f..dc29fda 100755 (executable)
--- a/t/io/fs.t
+++ b/t/io/fs.t
@@ -73,12 +73,14 @@ if ($ino == 0) {print "ok 20\n";} else {print "not ok 20\n";}
 unlink 'c';
 
 chdir $wd || die "Can't cd back to $wd";
+rmdir 'tmp';
 
 unlink 'c';
 if (`ls -l perl 2>/dev/null` =~ /^l.*->/) {  # we have symbolic links
     if (symlink("TEST","c")) {print "ok 21\n";} else {print "not ok 21\n";}
     $foo = `grep perl c`;
     if ($foo) {print "ok 22\n";} else {print "not ok 22\n";}
+    unlink 'c';
 }
 else {
     print "ok 21\nok 22\n";
index e69de29..aba7c2e 100755 (executable)
@@ -0,0 +1,35 @@
+#!./perl
+
+@FOO = ('s', 'N/A', 'a', 'NaN', -1, undef, 0, 1);
+
+$expect = ($#FOO+2) * ($#FOO+1);
+print "1..$expect\n";
+
+my $ok = 0;
+for my $i (0..$#FOO) {
+    for my $j ($i..$#FOO) {
+       $ok++;
+       my $cmp = $FOO[$i] <=> $FOO[$j];
+       if (!defined($cmp) ||
+           $cmp == -1 && $FOO[$i] < $FOO[$j] ||
+           $cmp == 0  && $FOO[$i] == $FOO[$j] ||
+           $cmp == 1  && $FOO[$i] > $FOO[$j])
+       {
+           print "ok $ok\n";
+       }
+       else {
+           print "not ok $ok ($FOO[$i] <=> $FOO[$j])\n";
+       }
+       $ok++;
+       $cmp = $FOO[$i] cmp $FOO[$j];
+       if ($cmp == -1 && $FOO[$i] lt $FOO[$j] ||
+           $cmp == 0  && $FOO[$i] eq $FOO[$j] ||
+           $cmp == 1  && $FOO[$i] gt $FOO[$j])
+       {
+           print "ok $ok\n";
+       }
+       else {
+           print "not ok $ok ($FOO[$i] cmp $FOO[$j])\n";
+       }
+    }
+}
index 7c19ecd..bdbc8a9 100755 (executable)
@@ -4,7 +4,7 @@
 # test method calls and autoloading.
 #
 
-print "1..18\n";
+print "1..20\n";
 
 @A::ISA = 'B';
 @B::ISA = 'C';
@@ -24,11 +24,15 @@ test( A->d, "C::d");                # Update hash table;
 *B::d = \&D::d;                        # Import now.
 test (A->d, "D::d");           # Update hash table;
 
-eval 'sub B::d {"B::d1"}';     # Import now.
-test (A->d, "B::d1");          # Update hash table;
+{
+    local *B::d;
+    eval 'sub B::d {"B::d1"}'; # Import now.
+    test (A->d, "B::d1");      # Update hash table;
+    undef &B::d;
+    test ((eval { A->d }, ($@ =~ /Undefined subroutine/)), 1);
+}
 
-undef &B::d;                   # Should work without any help too
-test (A->d, "C::d");
+test (A->d, "D::d");           # Back to previous state
 
 eval 'sub B::d {"B::d2"}';     # Import now.
 test (A->d, "B::d2");          # Update hash table;
@@ -54,6 +58,10 @@ test (A->d, "B::d4");                # Update hash table;
 delete $B::{d};                        # Should work without any help too
 test (A->d, "C::d");
 
+*A::x = *A::d;                 # See if cache incorrectly follows synonyms
+A->d;
+test (eval { A->x } || "nope", "nope");
+
 eval <<'EOF';
 sub C::e;
 sub Y::f;
@@ -91,9 +99,9 @@ test(Y->f(), "B: In Y::f, 3");        # Which sticks
 
 *B::AUTOLOAD = sub {
   my $c = ++$counter;
-  my $method = $main::__ANON__
-  *$main::__ANON__ = sub { "new B: In $method, $c" };
-  goto &$main::__ANON__;
+  my $method = $AUTOLOAD
+  *$AUTOLOAD = sub { "new B: In $method, $c" };
+  goto &$AUTOLOAD;
 };
 
 test(A->eee(), "new B: In A::eee, 4"); # We get a correct $autoload
index 6d591c0..4f47f0f 100755 (executable)
@@ -39,6 +39,10 @@ for (@prgs){
 __END__
 ()=()
 ########
+$a = ":="; split /($a)/o, "a:=b:=c"; print "@_"
+EXPECT
+a := b := c
+########
 $cusp = ~0 ^ (~0 >> 1);
 $, = " ";
 print +($cusp - 1) % 8, $cusp % 8, -$cusp % 8, ($cusp + 1) % 8, "!\n";
@@ -255,3 +259,13 @@ print p::func()->groovy(), "\n"
 EXPECT
 really groovy
 ########
+($k, $s)  = qw(x 0);
+@{$h{$k}} = qw(1 2 4);
+for (@{$h{$k}}) { $s += $_; delete $h{$k} if ($_ == 2) }
+print "bogus\n" unless $s == 7;
+########
+my $a = 'outer';
+eval q[ my $a = 'inner'; eval q[ print "$a " ] ];
+eval { my $x = 'peace'; eval q[ print "$x\n" ] }
+EXPECT
+inner peace
index e69de29..3e075cf 100755 (executable)
@@ -0,0 +1,38 @@
+#!./perl
+#
+# check UNIVERSAL
+#
+
+print "1..4\n";
+
+# explicit bless
+
+$a = {};
+bless $a, "Bob";
+if ($a->class eq "Bob") {print "ok 1\n";} else {print "not ok 1\n";}
+
+# bless through a package
+
+package Fred;
+
+$b = {};
+bless $b;
+if ($b->class eq "Fred") {print "ok 2\n";} else {print "not ok 2\n";}
+
+package main;
+
+# same as test 1 and 2, but with other object syntax
+
+# explicit bless
+
+$a = {};
+bless $a, "Bob";
+if (class $a eq "Bob") {print "ok 3\n";} else {print "not ok 3\n";}
+
+# bless through a package
+
+package Fred;
+
+$b = {};
+bless $b;
+if (class $b eq "Fred") {print "ok 4\n";} else {print "not ok 4\n";}
index 9c897c3..42d0457 100755 (executable)
@@ -291,7 +291,7 @@ test($@ =~ /no method found/);      # 96
   sub { *{"Oscalar::$AUTOLOAD"} = sub {"_!_" . shift() . "_!_"} ;
        goto &{"Oscalar::$AUTOLOAD"}};
 
-eval "package Oscalar; use overload '~' => 'comple'";
+eval "package Oscalar; sub comple; use overload '~' => 'comple'";
 
 $na = eval { ~$a };            # Hash was not updated
 test($@ =~ /no method found/); # 97
@@ -299,6 +299,7 @@ test($@ =~ /no method found/);      # 97
 bless \$x, Oscalar;
 
 $na = eval { ~$a };            # Hash updated
+warn "`$na', $@" if $@;
 test !$@;                      # 98
 test($na eq '_!_xx_!_');       # 99
 
@@ -315,7 +316,7 @@ print $@;
 test !$@;                      # 101
 test($na eq '_!_xx_!_');       # 102
 
-eval "package Oscalar; use overload '>>' => 'rshft'";
+eval "package Oscalar; sub rshft; use overload '>>' => 'rshft'";
 
 $na = eval { $aI >> 1 };       # Hash was not updated
 test($@ =~ /no method found/); # 103
@@ -330,6 +331,7 @@ print $@;
 test !$@;                      # 104
 test($na eq '_!_xx_!_');       # 105
 
+# warn overload::Method($a, '0+'), "\n";
 test (overload::Method($a, '0+') eq \&Oscalar::numify); # 106
 test (overload::Method($aI,'0+') eq \&Oscalar::numify); # 107
 test (overload::Overloaded($aI)); # 108
@@ -341,5 +343,21 @@ test (! defined overload::Method($a, '<')); # 111
 test (overload::StrVal($aI) =~ /^OscalarI=SCALAR\(0x[\da-fA-F]+\)$/); # 112
 test (overload::StrVal(\$aI) eq "@{[\$aI]}"); # 113
 
+# Check overloading by methods (specified deep in the ISA tree).
+{
+  package OscalarII;
+  @ISA = 'OscalarI';
+  sub Oscalar::lshft {"_<<_" . shift() . "_<<_"}
+  eval "package OscalarI; use overload '<<' => 'lshft', '|' => 'lshft'";
+}
+
+$aaII = "087";
+$aII = \$aaII;
+bless $aII, 'OscalarII';
+bless \$fake, 'OscalarI';              # update the hash
+test(($aI | 3) eq '_<<_xx_<<_');       # 114
+# warn $aII << 3;
+test(($aII << 3) eq '_<<_087_<<_');    # 115
+
 # Last test is:
-sub last {113}
+sub last {115}
index 6d36ff8..7bf1556 100644 (file)
@@ -11,6 +11,8 @@ $c = @{"def"} ;
 $c = %{"def"} ;
 $c = *{"def"} ;
 $c = \&{"def"} ;
+$c = def->[0];
+$c = def->{xyz};
 EXPECT
 
 ########
@@ -72,6 +74,20 @@ EXPECT
 Can't use an undefined value as a symbol reference at - line 5.
 ########
 
+# strict refs - error
+use strict 'refs' ;
+my $a = fred->[0] ;
+EXPECT
+Can't use bareword ("fred") as an ARRAY ref while "strict refs" in use at - line 4.
+########
+
+# strict refs - error
+use strict 'refs' ;
+my $a = fred->{barney} ;
+EXPECT
+Can't use bareword ("fred") as a HASH ref while "strict refs" in use at - line 4.
+########
+
 # strict refs - no error
 use strict ;
 no strict 'refs' ;
index bf90266..0ff849e 100755 (executable)
@@ -8,10 +8,11 @@ BEGIN {
 
 $| = 1;
 
+my $Is_VMS = $^O eq 'VMS';
 my $tmpfile = "tmp0000";
 my $i = 0 ;
 1 while -f ++$tmpfile;
-END { unlink $tmpfile if $tmpfile; }
+END { if ($tmpfile) { 1 while unlink $tmpfile; } }
 
 my @prgs = () ;
 
@@ -58,12 +59,17 @@ for (@prgs){
        shift @files ;
        $prog = shift @files ;
     }
-    open TEST, "| sh -c './perl $switch' >$tmpfile 2>&1";
-    print TEST $prog, "\n";
+    open TEST, ">$tmpfile";
+    print TEST $prog,"\n";
     close TEST;
+    my $results = $Is_VMS ?
+                  `MCR $^X $switch $tmpfile` :
+                  `sh -c './perl $switch $tmpfile' 2>&1`;
     my $status = $?;
-    my $results = `cat $tmpfile`;
     $results =~ s/\n+$//;
+    # allow expected output to be written as if $prog is on STDIN
+    $results =~ s/tmp\d+/-/g;
+    $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS;  # clip off DCL status msg
     $expected =~ s/\n+$//;
     my $prefix = ($results =~ s/^PREFIX\n//) ;
     if ( $results =~ s/^SKIPPED\n//) {
index cf936d2..3318006 100755 (executable)
@@ -11,10 +11,11 @@ undef $/;
 my @prgs = split "\n########\n", <DATA>;
 print "1..", scalar @prgs, "\n";
 
+my $Is_VMS = $^O eq 'VMS';
 my $tmpfile = "tmp0000";
 my $i = 0 ;
 1 while -f ++$tmpfile;
-END { unlink $tmpfile if $tmpfile; }
+END {  if ($tmpfile) { 1 while unlink $tmpfile} }
 
 for (@prgs){
     my $switch = "";
@@ -40,12 +41,17 @@ for (@prgs){
        shift @files ;
        $prog = shift @files ;
     }
-    open TEST, "| sh -c './perl $switch' >$tmpfile 2>&1";
-    print TEST $prog, "\n";
+    open TEST, ">$tmpfile";
+    print TEST $prog,"\n";
     close TEST;
+    my $results = $Is_VMS ?
+                  `MCR $^X $switch $tmpfile` :
+                  `sh -c './perl $switch $tmpfile' 2>&1`;
     my $status = $?;
-    my $results = `cat $tmpfile`;
     $results =~ s/\n+$//;
+    # allow expected output to be written as if $prog is on STDIN
+    $results =~ s/tmp\d+/-/g;
+    $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS;  # clip off DCL status msg
     $expected =~ s/\n+$//;
     my $prefix = ($results =~ s/^PREFIX\n//) ;
     if ( $results =~ s/^SKIPPED\n//) {
index c197f35..3cb5c73 100755 (executable)
@@ -8,10 +8,11 @@ BEGIN {
 
 $| = 1;
 
+my $Is_VMS = $^O eq 'VMS';
 my $tmpfile = "tmp0000";
 my $i = 0 ;
 1 while -f ++$tmpfile;
-END { unlink $tmpfile if $tmpfile; }
+END {  if ($tmpfile) { 1 while unlink $tmpfile} }
 
 my @prgs = () ;
 
@@ -39,6 +40,7 @@ for (@prgs){
     my @temps = () ;
     if (s/^\s*-\w+//){
         $switch = $&;
+        $switch =~ s/(-\S*[A-Z]\S*)/"-$1"/ if $Is_VMS; # protect uc switches
     }
     my($prog,$expected) = split(/\nEXPECT\n/, $_);
     if ( $prog =~ /--FILE--/) {
@@ -58,12 +60,17 @@ for (@prgs){
        shift @files ;
        $prog = shift @files ;
     }
-    open TEST, "| sh -c './perl $switch' >$tmpfile 2>&1";
-    print TEST $prog, "\n";
+    open TEST, ">$tmpfile";
+    print TEST $prog,"\n";
     close TEST;
+    my $results = $Is_VMS ?
+                  `MCR $^X $switch $tmpfile` :
+                  `sh -c './perl $switch $tmpfile' 2>&1`;
     my $status = $?;
-    my $results = `cat $tmpfile`;
     $results =~ s/\n+$//;
+    # allow expected output to be written as if $prog is on STDIN
+    $results =~ s/tmp\d+/-/g;
+    $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS;  # clip off DCL status msg
     $expected =~ s/\n+$//;
     my $prefix = ($results =~ s/^PREFIX\n//) ;
     if ( $results =~ s/^SKIPPED\n//) {
diff --git a/toke.c b/toke.c
index 39a7f57..ad978a8 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1566,7 +1566,19 @@ yylex()
                s++;
            if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
                s++;
-           if (!in_eval && *s == '#' && s[1] == '!') {
+           d = Nullch;
+           if (!in_eval) {
+               if (*s == '#' && *(s+1) == '!')
+                   d = s + 2;
+#ifdef ALTERNATE_SHEBANG
+               else {
+                   static char as[] = ALTERNATE_SHEBANG;
+                   if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
+                       d = s + (sizeof(as) - 1);
+               }
+#endif /* ALTERNATE_SHEBANG */
+           }
+           if (d) {
                /*
                 * HP-UX (at least) sets argv[0] to the script name,
                 * which makes $^X incorrect.  And Digital UNIX and Linux,
@@ -1577,7 +1589,6 @@ yylex()
                char *ipath;
                char *ibase;
 
-               d = s + 2;
                while (*d == ' ' || *d == '\t')
                    d++;
                ipath = d;
@@ -1604,7 +1615,29 @@ yylex()
                d = instr(s,"perl -");
                if (!d)
                    d = instr(s,"perl");
+#ifdef ALTERNATE_SHEBANG
+               /*
+                * If the ALTERNATE_SHEBANG on this system starts with a
+                * character that can be part of a Perl expression, then if
+                * we see it but not "perl", we're probably looking at the
+                * start of Perl code, not a request to hand off to some
+                * other interpreter.  Similarly, if "perl" is there, but
+                * not in the first 'word' of the line, we assume the line
+                * contains the start of the Perl program.
+                * This isn't foolproof, but it's generally a good guess.
+                */
+               if (d && *s != '#') {
+                   char *c = s;
+                   while (*c && !strchr("; \t\r\n\f\v#", *c))
+                       c++;
+                   if (c < d)
+                       d = Nullch;     /* "perl" not in first word; ignore */
+                   else
+                       *s = '#';       /* Don't try to parse shebang line */
+               }
+#endif
                if (!d &&
+                   *s == '#' &&
                    !minus_c &&
                    !instr(s,"indir") &&
                    instr(origargv[0],"perl"))
@@ -1891,17 +1924,29 @@ yylex()
        case XOPERATOR:
            while (s < bufend && (*s == ' ' || *s == '\t'))
                s++;
-           if (s < bufend && isIDFIRST(*s)) {
-               d = scan_word(s, tokenbuf, FALSE, &len);
+           d = s;
+           tokenbuf[0] = '\0';
+           if (d < bufend && *d == '-') {
+               tokenbuf[0] = '-';
+               d++;
+               while (d < bufend && (*d == ' ' || *d == '\t'))
+                   d++;
+           }
+           if (d < bufend && isIDFIRST(*d)) {
+               d = scan_word(d, tokenbuf + 1, FALSE, &len);
                while (d < bufend && (*d == ' ' || *d == '\t'))
                    d++;
                if (*d == '}') {
+                   char minus = (tokenbuf[0] == '-');
                    if (dowarn &&
-                     (keyword(tokenbuf, len) ||
-                      perl_get_cv(tokenbuf, FALSE) ))
+                       (keyword(tokenbuf + 1, len) ||
+                        (minus && len == 1 && isALPHA(tokenbuf[1])) ||
+                        perl_get_cv(tokenbuf + 1, FALSE) ))
                        warn("Ambiguous use of {%s} resolved to {\"%s\"}",
-                           tokenbuf, tokenbuf);
-                   s = force_word(s,WORD,FALSE,TRUE,FALSE);
+                            tokenbuf + !minus, tokenbuf + !minus);
+                   s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
+                   if (minus)
+                       force_next('-');
                }
            }
            /* FALL THROUGH */
index 4474563..e8ff11a 100644 (file)
--- a/unixish.h
+++ b/unixish.h
  */
 /* #define VMS         / **/
 
+/* ALTERNATE_SHEBANG:
+ *     This symbol, if defined, contains a "magic" string which may be used
+ *     as the first line of a Perl program designed to be executed directly
+ *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
+ *     begins with a character other then #, then Perl will only treat
+ *     it as a command line if if finds the string "perl" in the first
+ *     word; otherwise it's treated as the first line of code in the script.
+ *     (IOW, Perl won't hand off to another interpreter via an alternate
+ *     shebang sequence that might be legal Perl code.)
+ */
+/* #define ALTERNATE_SHEBANG "#!" / **/
+
 #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
 # include <signal.h>
 #endif
index 5f4523a..9f80bc0 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 1b2ce31..bfd606d 100644 (file)
@@ -13,10 +13,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 73df801..466fdab 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 7f894d8..ceda89d 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index e0f8a43..28bb464 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
@@ -47,7 +45,7 @@ print OUT <<'!NO!SUBS!';
 
 if(@ARGV<1) {
        die <<EOF;
-Usage: $0 [-h] [-v] [-t] [-u] [-m] PageName|ModuleName|ProgramName
+Usage: $0 [-h] [-v] [-t] [-u] [-m] [-l] PageName|ModuleName|ProgramName
 
 We suggest you use "perldoc perldoc" to get aquainted 
 with the system.
@@ -68,6 +66,7 @@ perldoc [-h] [-v] [-u] PageName|ModuleName|ProgramName...
     -t   Display pod using pod2text instead of pod2man and nroff.
     -u  Display unformatted pod text
     -m   Display modules file in its entirety
+    -l   Display the modules file name
     -v  Verbosely describe what's going on.
 PageName|ModuleName...
          is the name of a piece of documentation that you want to look at. You 
@@ -87,11 +86,11 @@ use Text::ParseWords;
 
 unshift(@ARGV,shellwords($ENV{"PERLDOC"}));
 
-getopts("mhtuv") || usage;
+getopts("mhtluv") || usage;
 
 usage if $opt_h || $opt_h; # avoid -w warning
 
-usage("only one of -t, -u, or -m") if $opt_t + $opt_u + $opt_m > 1;
+usage("only one of -t, -u, -m or -l") if $opt_t + $opt_u + $opt_m + $opt_l > 1;
 
 if ($opt_t) { require Pod::Text; import Pod::Text; }
 
@@ -150,6 +149,7 @@ sub containspod {
        my($recurse,$s,@dirs) = @_;
        $s =~ s!::!/!g;
        $s = VMS::Filespec::unixify($s) if $Is_VMS;
+       return $s if -f $s && containspod($s);
        printf STDERR "looking for $s in @dirs\n" if $opt_v;
        my $ret;
        my $i;
@@ -218,19 +218,22 @@ if(!@found) {
        exit ($Is_VMS ? 98962 : 1);
 }
 
+if ($opt_l) {
+    print join("\n", @found), "\n";
+    exit;
+}
+
 if( ! -t STDOUT ) { $opt_f = 1 }
 
 unless($Is_VMS) {
        $tmp = "/tmp/perldoc1.$$";
        push @pagers, qw( more less pg view cat );
        unshift @pagers, $ENV{PAGER}  if $ENV{PAGER};
-       $goodresult = 0;
 } else {
        $tmp = 'Sys$Scratch:perldoc.tmp1_'.$$;
        push @pagers, qw( most more less type/page );
-       unshift @pagers, $ENV{PERLDOC_PAGER} if $ENV{PERLDOC_PAGER};
-       $goodresult = 1;
 }
+unshift @pagers, $ENV{PERLDOC_PAGER} if $ENV{PERLDOC_PAGER};
 
 if ($opt_m) {
     foreach $pager (@pagers) {
@@ -297,7 +300,7 @@ perldoc - Look up Perl documentation in pod format.
 
 =head1 SYNOPSIS
 
-B<perldoc> [B<-h>] [B<-v>] [B<-t>] [B<-u>] PageName|ModuleName|ProgramName
+B<perldoc> [B<-h>] [B<-v>] [B<-t>] [B<-u>] [B<-m>] [B<-l>] PageName|ModuleName|ProgramName
 
 =head1 DESCRIPTION
 
@@ -338,6 +341,10 @@ This may be useful if the docs don't explain a function in the detail
 you need, and you'd like to inspect the code directly; perldoc will find
 the file for you and simply hand it off for display.
 
+=item B<-l> file name only
+
+Display the file name of the module found.
+
 =item B<PageName|ModuleName|ProgramName>
 
 The item you want to look up.  Nested modules (such as C<File::Basename>)
@@ -364,10 +371,6 @@ Kenneth Albanowski <kjahds@kjahds.com>
 
 Minor updates by Andy Dougherty <doughera@lafcol.lafayette.edu>
 
-=head1 SEE ALSO
-
-=head1 DIAGNOSTICS
-
 =cut
 
 #
index 8d47481..7c187ad 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 53954db..ef7c457 100644 (file)
@@ -13,10 +13,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 # Open input file before creating output file.
 $IN = '../lib/diagnostics.pm';
index aa69afb..bf6a428 100644 (file)
 #### Start of system configuration section. ####
 
 
-#> .ifdef AXE
 # File type to use for object files
-#> O = .abj
 # File type to use for object libraries
-#> OLB = .alb
 # File type to use for executable images
-#> E = .axe
-#> .else
 # File type to use for object files
 O = .obj
 # File type to use for object libraries
 OLB = .olb
 # File type to use for executable images
 E = .exe
-#> .endif
 
-#> .ifdef __AXP__
-#> DECC = 1
-#> ARCH = VMS_AXP
-#> OBJVAL = $(O)
-#> .else
 ARCH = VMS_VAX
 OBJVAL = $@
-#> .endif
 
 # Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00313#
+PERL_VERSION = 5_00321#
 
 
 ARCHDIR =  [.lib.$(ARCH).$(PERL_VERSION)]
@@ -52,51 +40,19 @@ ARCHCORE = [.lib.$(ARCH).$(PERL_VERSION).CORE]
 ARCHAUTO = [.lib.$(ARCH).$(PERL_VERSION).auto]
 
 
-#> .ifdef DECC_PIPES_BROKEN
-#> PIPES_BROKEN = 1
-#> .endif
 
 
-#> .ifdef GNUC
-#> .first:
-#>     @ $$@[.vms]fndvers.com "" "" "[.vms]Makefile"
-#>     @ If f$$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS]
-#> CC = gcc
 # -fno-builtin avoids bug in gcc up to version 2.6.2 which can destroy
 # data when memcpy() is called on large (>64 kB) blocks of memory
 # (fixed in gcc 2.6.3)
-#> XTRACCFLAGS = /Obj=$@/NoCase_Hack/Optimize=2/CC1="""""-fno-builtin"""""
-#> DBGSPECFLAGS =
-#> XTRADEF = ,GNUC_ATTRIBUTE_CHECK
-#> XTRAOBJS =
-#> LIBS1 = GNU_CC:[000000]GCCLIB.OLB/Library
-#> LIBS2 = sys$$Share:VAXCRTL/Shareable
-#> POSIX =
-#> .else
 XTRAOBJS = 
 LIBS1 = $(XTRAOBJS)
 DBGSPECFLAGS = /Show=(Source,Include,Expansion)
-#> .ifdef decc
 # Some versions of DECCRTL on AXP have a bug in chdir() which causes the change
 # to persist after the image exits, even when this was not requested, iff
 # SYSNAM is enabled.  This is fixed in CSC Patch # AXPACRT04_061, but turning
 # off SYSNAM for the MM[SK] subprocess doesn't hurt anything, so we do it
 # just in case.
-#> .first:
-#>     @ Set Process/Privilege=(NoSYSNAM)
-#>     @ $$@[.vms]fndvers.com "" "" "[.vms]Makefile"
-#>     @ If f$$TrnLnm("Sys").eqs."" .and. f$$TrnLnm("DECC$System_Include").nes."" Then Define/NoLog SYS DECC$System_Include
-#> .ifdef __AXP__
-#>     @ If f$$TrnLnm("Sys").eqs."" .and. f$$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS sys$$Library
-#> .else
-#>     @ If f$$TrnLnm("Sys").eqs."" .and. f$$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS DECC$Library_Include
-#> .endif
-#> 
-#> LIBS2 = 
-#> XTRACCFLAGS = /Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=$(OBJVAL)
-#> XTRADEF =
-#> POSIX = POSIX
-#> .else # VAXC
 .first:
        @ $$@[.vms]fndvers.com "" "" "[.vms]Makefile"
        @ If f$$TrnLnm("Sys").eqs."" .and. f$$TrnLnm("VAXC$Include").eqs."" Then Define/NoLog SYS sys$$Library
@@ -106,33 +62,15 @@ XTRACCFLAGS = /Include=[]/Object=$(O)
 XTRADEF =
 LIBS2 = sys$$Share:VAXCRTL/Shareable
 POSIX =
-#> .endif
-#> .endif
 
 
-#> .ifdef __DEBUG__
-#> DBGCCFLAGS = /List/Debug/NoOpt$(DBGSPECFLAGS)
-#> DBGLINKFLAGS = /Trace/Debug/Map/Full/Cross
-#> DBG = DBG
-#> .else
 DBGCCFLAGS = /NoList
 DBGLINKFLAGS = /NoMap
 DBG = 
-#> .endif
 
-#> .ifdef SOCKET
-#> SOCKDEF = ,VMS_DO_SOCKETS
-#> SOCKLIB = SocketShr/Share
 # N.B. the targets for $(SOCKC) and $(SOCKH) assume that the permanent
 # copies live in [.vms], and the `clean' target will delete copies of
 # these files in the current default directory.
-#> SOCKC = sockadapt.c
-#> SOCKH = sockadapt.h
-#> SOCKCLIS = ,$(SOCKC)
-#> SOCKHLIS = ,$(SOCKH)
-#> SOCKOBJ = ,sockadapt$(O)
-#> SOCKPM = [.lib]Socket.pm
-#> .else
 SOCKDEF =
 SOCKLIB =
 SOCKC =
@@ -141,7 +79,6 @@ SOCKCLIS =
 SOCKHLIS =
 SOCKOBJ =
 SOCKPM =
-#> .endif
 
 # C preprocessor manifest "DEBUGGING" ==> perl -D, not the VMS debugger
 CFLAGS = /Define=(DEBUGGING$(SOCKDEF)$(XTRADEF))$(XTRACCFLAGS)$(DBGCCFLAGS)
@@ -168,13 +105,8 @@ MYEXT = DynaLoader
 # there are any object files specified
 # These must be built separately, or you must add rules below to build them
 myextobj = [.ext.dynaloader]dl_vms$(O),
-#> .ifdef SOCKET
-#> EXT = $(MYEXT) Socket
-#> extobj = $(myextobj) [.ext.socket]socket$(O), 
-#> .else
 EXT = $(MYEXT)
 extobj = $(myextobj)
-#> .endif
 
 
 #### End of system configuration section. ####
@@ -207,19 +139,13 @@ ac6 = $(ARCHCORE)pp.h $(ARCHCORE)proto.h $(ARCHCORE)regcomp.h $(ARCHCORE)perlio.
 ac7 = $(ARCHCORE)regexp.h $(ARCHCORE)scope.h $(ARCHCORE)sv.h $(ARCHCORE)util.h
 ac8 = $(ARCHCORE)vmsish.h $(ARCHCORE)$(DBG)libperl$(OLB) $(ARCHCORE)perlshr_attr.opt
 ac9 = $(ARCHCORE)$(DBG)perlshr_bld.opt
-#> .ifdef SOCKET
-#> acs = $(ARCHCORE)$(SOCKH)
-#> .else
 acs =
-#> .endif
 
 CRTL = []crtl.opt
 CRTLOPTS =,$(CRTL)/Options
 
 .suffixes:
 
-#> .ifdef LINK_ONLY
-#> .else
 .suffixes: $(O) .c .xs
 
 .xs.c :
@@ -232,7 +158,6 @@ CRTLOPTS =,$(CRTL)/Options
 .xs$(O) :
        $(XSUBPP) $< >$(MMS$SOURCE_NAME).c
        $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c
-#> .endif
 
 
 all : base extras libmods utils podxform archcorefiles preplibrary perlpods
@@ -284,11 +209,7 @@ perl : $(DBG)perl$(E)
        @ Continue
 $(DBG)perl$(E) : perlmain$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
        @ $$@[.vms]genopt "PerlShr.Opt/Write" "|" "''f$$Environment("Default")'$(DBG)PerlShr$(E)/Share"
-#> .ifdef gnuc
-#>     Link $(LINKFLAGS)/Exe=$@ perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option, crtl.opt/Option
-#> .else
        Link $(LINKFLAGS)/Exe=$@ perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option
-#> .endif
 
 $(DBG)perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts
        Link /NoTrace$(LINKFLAGS)/Share=$@ $(extobj) []$(DBG)perlshr_bld.opt/Option, perlshr_attr.opt/Option
@@ -298,18 +219,8 @@ $(DBG)perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts
 #  perlshr_gbl*.mar, perlshr_gbl*$(O) - VAX only
 # The song and dance with gen_shrfls.opt accomodates DCL's 255 character
 # line length limit.
-#> .ifdef PIPES_BROKEN
 # This is a backup target used only with older versions of the DECCRTL which
 # can't deal with pipes properly.  See ReadMe.VMS for details.
-#> $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
-#>     $(CC) $(CFLAGS)/NoObject/NoList/PreProcess=perl.i perl.h
-#>     @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "~~NOCC~~perl.i~~$(CC)$(CFLAGS)" >gen_shrfls.opt
-#>     @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
-#>     $(MINIPERL) [.vms]gen_shrfls.pl -f gen_shrfls.opt
-#>     @ Delete/NoLog/NoConfirm perl.i;, gen_shrfls.opt;
-#>     @ If f$$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
-#>     @ Copy _NLA0: $(DBG)perlshr_xtras.ts
-#> .else
 $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
        @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "$(CC)$(CFLAGS)" >gen_shrfls.opt
        @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
@@ -317,7 +228,6 @@ $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(
        @ Delete/NoLog/NoConfirm gen_shrfls.opt;
        @ If f$$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
        @ Copy _NLA0: $(DBG)perlshr_xtras.ts
-#> .endif
 
 $(ARCHDIR)config.pm : [.lib]config.pm
        Create/Directory $(ARCHDIR)
@@ -657,30 +567,6 @@ printconfig :
        @ $$@[.vms]make_command $(MMS) $(MMSQUALIFIERS) $(MMSTARGETS)
        @ $$@[.vms]myconfig "$(CC)" "$(CFLAGS)" "$(LINKFLAGS)" "$(LIBS1)" "$(LIBS2)" "$(SOCKLIB)" "$(EXT)" "$(DBG)"
 
-#> .ifdef SOCKET
-#> 
-#> .ifdef LINK_ONLY
-#> .else
-#> $(SOCKOBJ) : $(SOCKC) $(SOCKH)
-#> 
-#> [.ext.Socket]Socket$(O) : [.ext.Socket]Socket.c
-#>     $(CC) $(CFLAGS) /Object=$@ [.ext.Socket]Socket.c
-#> 
-#> [.ext.Socket]Socket.c : [.ext.Socket]Socket.xs $(MINIPERL_EXE)
-#>     $(XSUBPP) [.ext.Socket]Socket.xs >$@
-#> .endif # !LINK_ONLY
-#> 
-#> vmsish.h : $(SOCKH)
-#> 
-#> $(SOCKC) : [.vms]$(SOCKC)
-#>     Copy/Log/NoConfirm [.vms]$(SOCKC) []$(SOCKC)
-#> 
-#> $(SOCKH) : [.vms]$(SOCKH)
-#>     Copy/Log/NoConfirm [.vms]$(SOCKH) []$(SOCKH)
-#> 
-#> [.lib]Socket.pm : [.ext.Socket]Socket.pm
-#>     Copy/Log/NoConfirm [.ext.Socket]Socket.pm $@
-#> .endif
 
 # The following three header files are generated automatically
 #      keywords.h :    keywords.pl
@@ -712,11 +598,8 @@ perly.h : [.vms]perly_h.vms
 #      rename y.tab.h perly.h
 #      $(INSTPERL) [.vms]vms_yfix.pl perly.c perly.h [.vms]perly_c.vms [.vms]perly_h.vms
 
-#> .ifdef LINK_ONLY
-#> .else
 perly$(O) : perly.c, perly.h, $(h)
        $(CC) $(CFLAGS) perly.c
-#> .endif
 
 test : all
        - @[.VMS]Test.Com "$(E)"
@@ -810,11 +693,6 @@ $(ARCHCORE)util.h : util.h
 $(ARCHCORE)vmsish.h : vmsish.h
        @ If f$$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log vmsish.h $@
-#> .ifdef SOCKET
-#> $(ARCHCORE)$(SOCKH) : $(SOCKH)
-#>     @ If f$$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
-#>     Copy/Log $(SOCKH) $@
-#> .endif
 $(ARCHCORE)$(DBG)libperl$(OLB) : $(DBG)libperl$(OLB) $(DBG)perlshr_xtras.ts
        @ If f$$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(DBG)libperl$(OLB) $@
@@ -828,8 +706,6 @@ $(ARCHAUTO)time.stamp :
        @ If f$$Search("$(ARCHDIR)auto.dir").eqs."" Then Create/Directory $(ARCHAUTO)
        @ If f$$Search("$@").eqs."" Then Copy/NoConfirm _NLA0: $(MMS$TARGET)
 
-#> .ifdef LINK_ONLY
-#> .else
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
 av$(O) : EXTERN.h
 av$(O) : av.c
@@ -1502,7 +1378,6 @@ globals$(O) : scope.h
 globals$(O) : sv.h
 globals$(O) : vmsish.h
 globals$(O) : util.h
-#> .endif # !LINK_ONLY
 
 config.h : [.vms]config.vms
        Copy/Log/NoConfirm [.vms]config.vms []config.h
@@ -1566,11 +1441,6 @@ clean : tidy
        Set Default [.ext.Opcode]
        - $(MMS) clean
        Set Default [--]
-#> .ifdef DECC
-#>     Set Default [.ext.POSIX]
-#>     - $(MMS) clean
-#>     Set Default [--]
-#> .endif
        - If f$$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt
        - If f$$Search("*$(O);*") .nes."" Then Delete/NoConfirm/Log *$(O);*
        - If f$$Search("Config.H").nes."" Then Delete/NoConfirm/Log Config.H;*
@@ -1604,11 +1474,6 @@ realclean : clean
        Set Default [.ext.Opcode]
        - $(MMS) realclean
        Set Default [--]
-#> .ifdef DECC
-#>     Set Default [.ext.POSIX]
-#>     - $(MMS) realclean
-#>     Set Default [--]
-#> .endif
        - If f$$Search("*$(OLB)").nes."" Then Delete/NoConfirm/Log *$(OLB);*
        - If f$$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*
        - $(MINIPERL) -e "use File::Path; rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);"
index 48aa6a5..a7460e5 100644 (file)
@@ -76,7 +76,7 @@
  * when Perl is built.  Please do not change it by hand; make
  * any changes to FndVers.Com instead.
  */
-#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00314"  /**/
+#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00321"  /**/
 #define ARCHLIB ARCHLIB_EXP    /*config-skip*/
 
 /* BINCOMPAT3:
index 451ca3d..32200a3 100644 (file)
@@ -65,7 +65,7 @@ OBJVAL = $(MMS$TARGET_NAME)$(O)
 .endif
 
 # Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00314#
+PERL_VERSION = 5_00321#
 
 
 ARCHDIR =  [.lib.$(ARCH).$(PERL_VERSION)]
index da295f7..97679d5 100644 (file)
@@ -102,6 +102,10 @@ installprivlib='$installprivlib'
 installarchlib='$installarchlib'
 installsitelib='$installsitelib'
 installsitearch='$installsitearch'
+startperl='\$ perl 'f\$env("procedure")' - ! q#
+  'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
+$ exit !#
+'
 EndOfIntro
 
 foreach (@ARGV) {
index dfc096c..947d773 100644 (file)
@@ -16,937 +16,912 @@ dep()
 #line 16 "perly.c"
 #define YYERRCODE 256
 dEXT short yylhs[] = {                                        -1,
-   40,    0,    7,    5,    8,    6,    9,    9,    9,   10,
-   10,   10,   10,   22,   22,   22,   22,   22,   22,   13,
-   13,   13,   12,   12,   37,   37,   11,   11,   11,   11,
-   11,   11,   11,   24,   24,   25,   25,   26,   27,   28,
-   29,   30,   39,   39,    1,    1,    1,    1,    3,    3,
-   41,   41,   36,   36,    4,   42,   42,   43,   14,   14,
-   14,   23,   23,   23,   34,   34,   34,   34,   34,   34,
-   34,   34,   35,   35,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-   15,   15,   15,   15,   15,   15,   15,   15,   31,   31,
-   32,   32,   32,    2,    2,   38,   21,   16,   17,   18,
-   19,   20,   33,   33,   33,   33,
+   45,    0,    9,    7,   10,    8,   11,   11,   11,   12,
+   12,   12,   12,   24,   24,   24,   24,   24,   24,   15,
+   15,   15,   14,   14,   42,   42,   13,   13,   13,   13,
+   13,   13,   13,   26,   26,   27,   27,   28,   29,   30,
+   31,   32,   44,   44,    1,    1,    1,    1,    3,   38,
+   38,   46,    4,    5,    6,   39,   40,   40,   41,   41,
+   47,   47,   49,   48,   16,   16,   16,   25,   25,   25,
+   36,   36,   36,   36,   36,   36,   36,   50,   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,   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,   17,
+   17,   17,   17,   17,   17,   33,   33,   34,   34,   34,
+    2,    2,   43,   23,   18,   19,   20,   21,   22,   35,
+   35,   35,   35,
 };
 dEXT short yylen[] = {                                         2,
     0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
     1,    2,    3,    1,    1,    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,    3,
-    5,    5,    0,    1,    0,    3,    2,    6,    3,    3,
-    1,    2,    3,    1,    3,    5,    6,    3,    5,    2,
-    4,    4,    1,    1,    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,    5,    1,    4,    5,
-    4,    1,    1,    1,    5,    6,    5,    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,    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,    5,    2,    4,    0,    5,    1,
+    1,    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,    5,    1,    4,    5,    4,    1,    1,
+    1,    5,    6,    5,    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,
 };
 dEXT short yydefred[] = {                                      1,
-    0,    7,    0,   44,   55,   55,    0,   55,    8,   45,
-    9,   11,    0,   46,   47,   48,    0,    0,    0,   57,
-    0,   14,    4,  147,    0,    0,  122,    0,  142,    0,
-   55,   55,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  154,  155,    0,
+    0,    7,    0,   44,   55,   53,    0,   53,    8,   45,
+    9,   11,    0,   46,   47,   48,    0,    0,    0,   62,
+   63,   14,    4,  154,    0,    0,  129,    0,  149,    0,
+   54,   54,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  161,  162,    0,
     0,    0,    0,    0,    0,    0,    0,   12,    0,    0,
     0,    0,    0,    0,    0,    0,    0,   10,    0,    0,
-    0,    0,  112,  114,    0,    0,    0,    0,  148,    0,
-   50,    0,   56,    0,    7,  163,  166,  165,  164,    0,
-    0,    0,    0,    0,    0,    4,    4,    4,    4,    4,
-    4,    0,    0,    0,    0,    0,  137,    0,    0,    0,
-    0,   70,    0,  161,    0,  128,    0,    0,    0,    0,
-    0,  157,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  102,    0,  158,  159,  160,  162,    0,    0,
-   33,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  119,  121,    0,    0,    0,    0,  155,   50,
+    0,   56,    0,   61,    0,    7,  170,  173,  172,  171,
+    0,    0,    0,    0,    0,    0,    4,    4,    4,    4,
+    4,    4,    0,    0,    0,    0,    0,  144,    0,    0,
+    0,    0,   76,    0,  168,    0,  135,    0,    0,    0,
+    0,    0,  164,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  109,    0,  165,  166,  167,  169,    0,
+    0,   33,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   94,   95,    0,    0,    0,    0,    0,    0,
-    0,    0,   13,    0,   49,   54,    0,    0,    0,   68,
+    0,    0,    0,  101,  102,    0,    0,    0,    0,    0,
+    0,    0,    0,   13,    0,   49,   58,    0,    0,    0,
+   74,    0,    0,   78,    0,    0,    0,    0,    0,    0,
+    0,    4,  148,  150,    0,    0,    0,    0,    0,    0,
+    0,  111,    0,  133,    0,    0,  108,   26,    0,    0,
+   19,    0,    0,    0,   65,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    4,  141,  143,    0,    0,    0,    0,    0,    0,    0,
-  104,    0,  126,    0,    0,  101,   26,    0,    0,   19,
-    0,    0,    0,   59,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   73,    0,   74,    0,    0,    0,    0,    0,    0,    0,
-  124,    0,    0,   52,   51,    0,    3,    0,  145,    0,
-   72,  105,    0,   41,    0,   42,    0,    0,    0,    0,
-  156,    0,    0,   35,   40,    0,    0,    0,  144,  153,
-   71,    0,  129,    0,  131,    0,  103,    0,    0,    0,
-    0,    0,    0,    0,  111,    0,  109,    0,  120,    0,
-  125,   58,   69,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   66,  130,  132,  119,    0,  117,    0,    0,
-  110,    0,  115,  121,  107,  146,    6,    0,    0,    0,
-    0,    0,    0,    0,    0,  118,  116,   67,    7,   27,
-   28,    0,    0,   23,   24,    0,   31,    0,    0,    0,
-   21,    0,    0,    0,   30,    5,    0,   29,    0,    0,
-   32,    0,   22,
+    0,   80,    0,   81,    0,    0,    0,    0,    0,    0,
+    0,  131,    0,    0,   60,   59,   52,    0,    3,    0,
+  152,    0,    0,  112,    0,   41,    0,   42,    0,    0,
+    0,    0,  163,    0,    0,   35,   40,    0,    0,    0,
+  151,  160,   77,    0,  136,    0,  138,    0,  110,    0,
+    0,    0,    0,    0,    0,    0,  118,    0,  116,    0,
+  127,    0,  132,    0,   75,    0,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,   72,  137,  139,  126,    0,
+  124,    0,    0,  117,    0,  122,  128,  114,   64,  153,
+    6,    0,    0,    0,    0,    0,    0,    0,    0,  125,
+  123,   73,    7,   27,   28,    0,    0,   23,   24,    0,
+   31,    0,    0,    0,   21,    0,    0,    0,   30,    5,
+    0,   29,    0,    0,   32,    0,   22,
 };
 dEXT short yydgoto[] = {                                       1,
-    9,   66,   10,   17,   85,  329,   88,  318,    3,   11,
-   12,   68,  334,  258,   70,   71,   72,   73,   74,   75,
-   76,  264,   78,  265,  254,  256,  259,  267,  255,  257,
-  112,  196,   90,   79,  234,  177,  141,  262,   13,    2,
-   14,   15,   16,
+    9,   66,   10,   18,   95,   17,   86,  333,   89,  322,
+    3,   11,   12,   68,  338,  260,   70,   71,   72,   73,
+   74,   75,   76,  266,   78,  267,  256,  258,  261,  269,
+  257,  259,  113,  197,   91,   79,  235,   81,   83,  178,
+  247,  142,  264,   13,    2,   14,   15,   16,   85,  253,
 };
 dEXT short yysindex[] = {                                      0,
-    0,    0,  236,    0,    0,    0,  -45,    0,    0,    0,
-    0,    0,  557,    0,    0,    0, -106, -232,  -20,    0,
-216,    0,    0,    0,   -8,   -8,    0,    9,    0, 1840,
-    0,    0,   11,   15,   19,   22,  -33, 1840,   38,   47,
-   51,  933,  877,   -8,  996, 1260, -212,    0,    0,   -8,
- 1840, 1840, 1840, 1840, 1840, 1840, 1316,    0, 1840, 1840,
- 1372,   -8,   -8,   -8,   -8, 1840, -193,    0,  273, 3713,
-  -67,  -55,    0,    0,  -26,   72,   57,   59,    0,    3,
-    0, -137,    0, -130,    0,    0,    0,    0,    0, 1840,
  96, 1840, 1871,    3, -137,    0,    0,    0,    0,    0,
-    0,   97, 3713,   99, 1431,  877,    0, 1871,    0,  -67,
-   59,    0, 1840,    0,  106,    0, 1871,  -25,   27,   52,
1840,    0,   59,   98,   98,   98,  -85,  -85,   74,  -40,
-   98,   98,    0,  -88,    0,    0,    0,    0, 1871,    3,
-    0, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840,
- 1840, 1840,    0,    0,  -34, 1840, 1840, 1840, 1840, 1840,
- 1840, 1606,    0, 1840,    0,    0,  -51, 1840,  242,    0,
1840, 1089, 1840,    3, 1840, 1840, 1840, 1840,  130, 1665,
   0,    0,    0,  -30,   44,  126, 1840,   59, 1721, 1777,
   0,   53,    0, 1840,   79,    0,    0, -244, -244,    0,
-244, -244, -127,    0,   54, 1027, 1871,  756,  360,  869,
3713, 3679, 3540, 3764, 1195,  340, 1054,   98,   98, 1840,
   0, 1840,    0,  134,  -83,   58,  -75,   60,  -71,   62,
-    0,  -18, 3713,    0,    0,  117,    0,  138,    0, 1840,
-    0,    0, -244,    0,  139,    0,  140, -244,  141,  142,
-    0,  145,  273,    0,    0,  149,  136, 1840,    0,    0,
-    0,  -15,    0,   40,    0,   42,    0,  -59, 1840,   68,
- 1840,   85,   46, 1840,    0,   75,    0,   77,    0,   80,
-    0,    0,    0, 1143,   84,   84,   84,   84, 1840,   84,
1840,  167,    0,    0,    0,    0,   95,    0,  263,   86,
-    0,  172,    0,    0,    0,    0,    0, -193, -193, -177,
-177,  175, -193,  159,   84,    0,    0,    0,    0,    0,
-    0,   84,  194,    0,    0,   84,    0, 1665, -193,  256,
-    0, 1840, -193,  191,    0,    0,  196,    0,   84,   84,
-    0, -177,    0,
+    0,    0, -126,    0,    0,    0,  -58,    0,    0,    0,
+    0,    0,  827,    0,    0,    0, -242, -235,  -21,    0,
   0,    0,    0,    0,  -33,  -33,    0,   11,    0, 1816,
+    0,    0,   13,   15,   30,   45,  -29, 1816,   67,   68,
+   70, 1002,  939,  -33, 1236, 1292, -227,    0,    0,  -33,
+ 1816, 1816, 1816, 1816, 1816, 1816, 1173,    0, 1816, 1816,
+ 1348,  -33,  -33,  -33,  -33, 1816, -220,    0, -169, 3558,
+  -78,  -59,    0,    0,  -62,   73,   42,   65,    0,    0,
+   -5,    0, -149,    0, -134,    0,    0,    0,    0,    0,
1816,   97, 1816, 1847,   -5, -149,    0,    0,    0,    0,
+    0,    0,   99, 3558,  105, 1407,  939,    0, 1847,    0,
+  -78,   65,    0, 1816,    0,  107,    0, 1847,  -23,   36,
 -51, 1816,    0,   65,  -82,  -82,  -82,  -54,  -54,   57,
+  -27,  -82,  -82,    0,  -87,    0,    0,    0,    0, 1847,
+   -5,    0, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
+ 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816,
+ 1816, 1816, 1816,    0,    0,  -32, 1816, 1816, 1816, 1816,
+ 1816, 1816, 1582,    0, 1816,    0,    0,  -36, -108,  665,
   0, 1816,  209,    0,   -5, 1816, 1816, 1816, 1816,  114,
1641,    0,    0,    0,  -16,    6,  111, 1816,   65, 1697,
1753,    0,   38,    0, 1816,   74,    0,    0, -251, -251,
   0, -251, -251, -131,    0,   18, 3516, 1847, 1089,  382,
  92, 3558, 3594, 3689,  369, 1060,  482,  285,  -82,  -82,
1816,    0, 1816,    0,  128,   33,   23,   58,   25,   69,
+   27,    0,  -14, 3558,    0,    0,    0, 1816,    0,  131,
+    0, 1816, 1816,    0, -251,    0,  134,    0,  136, -251,
+  139,  141,    0,  144, -169,    0,    0,  156,  135, 1816,
+    0,    0,    0,  -12,    0,  -10,    0,    1,    0,   71,
+ 1816,   75, 1816,   29,   86, 1816,    0,   76,    0,   78,
+    0,   81,    0,  148,    0,  339,    0,   85,   85,   85,
  85, 1816,   85, 1816,  168,    0,    0,    0,    0,   88,
+    0, 3653,   89,    0,  172,    0,    0,    0,    0,    0,
   0, -220, -220, -178, -178,  175, -220,  160,   85,    0,
+    0,    0,    0,    0,    0,   85,  203,    0,    0,   85,
+    0, 1641, -220,  688,    0, 1816, -220,  180,    0,    0,
+  196,    0,   85,   85,    0, -178,    0,
 };
 dEXT short yyrindex[] = {                                      0,
-    0,    0,  161,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  269,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,  122,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 2076, 1906,    0,
+    0, 2716, 2784,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0, 2100, 1930,    0,
-    0, 2740, 2808,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   79,    0,   -7,  181,
+ 2827, 2871,    0,    0, 2142, 1965,    0,   21,    0,    0,
+    0,    0,  -31,    0,    0,    0,    0,    0,    0,    0,
+ 2201,    0,    0, 3299,    0,  129,    0,    0,    0,    0,
+    0,    0,    0,  197,    0,    0,  213,    0, 3343,  444,
+  545, 2312,    0,    0,    0, 2028,    0, 3386, 2827,    0,
+    0, 2201,    0, 2437, 2914, 2952, 2990,  606,  723, 2480,
+    0, 3063, 3107,    0,    0,    0,    0,    0,    0, 3424,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   37,    0,   -9, 3616,
- 2851, 2895,    0,    0, 2166, 1989,    0,   17,    0,    0,
-    0,  -39,    0,    0,    0,    0,    0,    0,    0, 2225,
-    0,    0, 3367,    0,  112,    0,    0,    0,    0,    0,
-    0,    0, 3635,    0,    0,  215,    0, 3410,  437,  498,
- 2336,    0,    0,    0, 2052,    0, 3448, 2851,    0,    0,
- 2225,    0, 2461, 2938, 2976, 3014,  -28,  600, 2504,    0,
- 3087, 3131,    0,    0,    0,    0,    0,    0, 3486,    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, 2548,    0,    0,    0,    0,  883,
+    0,  213,    0,    0,    0,  234,    0,    0,    0,    0,
+  218,    0,    0,    0,    0,  239,    0,    0, 2591,    0,
+    0,    0,    0,    0,    0, 2635,    0,    0,   -2,    8,
+    0,   22,   24,  525,    0,    0, 3579, 1448, 1504, 3226,
+  -39,  338,    0, 2490, 3535, 3498, 3462, 3262, 3150, 3188,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0, 2572,    0,    0,    0,  205,  821,    0,
-  215,    0, 2225,    0,  245,    0,    0,    0,    0,  240,
-    0,    0,    0,    0,  272,    0,    0, 2615,    0,    0,
-    0,    0,    0,    0, 2659,    0,    0,    5,   45,    0,
-   49,   61,  -32,    0,    0,  192, 1472, 1528, 3250, 3286,
- 3645,    0, 2514, 3603, 3559, 3522, 3323, 3174, 3212,    0,
+    0,    0,    0, 1870,    0,    0,    0,  230,    0,    0,
+    0,    0, 2201,    0,   37,    0,    0,    0,    0,  251,
+    0,    0,    0,    0,   61,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0, 3675,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   65,    0,    0,    0,    0,  277,    0,    0,
-    0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  213,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  215,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  238,    0,    0,    0,    0,    0,    0,
+    0,  718,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,   79,   79,  153,  153,    0,   79,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-  265,    0,    0,    0,    0,    0,    0,    0, 1894,    0,
-    0,    0,    0,    0,    0,    0,    0,   37,   37,  105,
-  105,    0,   37,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  286,   37,  821,
-    0,    0,   37,    0,    0,    0,    0,    0,    0,    0,
-    0,  105,    0,
+    0,  260,   79,  883,    0,    0,   79,    0,    0,    0,
+    0,    0,    0,    0,    0,  153,    0,
 };
 dEXT short yygindex[] = {                                      0,
-    0,    0,    0,   63,  418,    0,  914,  335,  -81,    0,
-    0,    0, -292,  -13, 3885, 2516,    0,    0,    0,    0,
-    0,  321,  530,    0,    0,  203, -150,   -3,   93,  165,
-  -69, -162,  575,    0,    0,  300, -276,    0,    0,    0,
-    0,    0,    0,
+    0,    0,    0,  300,  278,    0,  -26,    0,  892, 1004,
+  -76,    0,    0,    0, -313,  -13, 3871, 3724,    0,    0,
+    0,    0,    0,  304,  -25,    0,    0,  169, -175,   -8,
+   53,  152,  384, -161,  901,    0,    0,    0,    0,  281,
+    0, -287,    0,    0,    0,    0,    0,    0,    0,    0,
 };
-#define YYTABLESIZE 4166
+#define YYTABLESIZE 4154
 dEXT short yytable[] = {                                      69,
-  205,   62,   62,  179,  206,  166,  101,  244,   60,  285,
-  269,   60,   96,   20,  200,   96,   23,  287,  248,   53,
-  180,  289,  291,  168,   82,  303,   60,   62,  335,   96,
-   96,   15,  120,  306,   96,  170,   25,  148,   83,  266,
-   84,  330,  331,  130,  121,   18,  337,  134,   92,   15,
-   96,  203,  146,  147,   97,  167,  232,   61,   98,  353,
-   60,   99,  345,   18,   96,  168,  348,  169,   18,   25,
-   21,   23,   25,   25,   25,   61,   25,  104,   25,   25,
-  304,   25,  305,   53,  140,   38,  105,  270,  230,   16,
-  106,  194,  195,   94,   95,   25,  171,  167,  332,  333,
-   25,   17,  174,   38,   20,   37,   39,   16,  246,   61,
-  202,  172,  280,  251,   23,  173,  286,  302,  288,   17,
-  290,  312,  176,   37,   15,   23,  178,   25,  208,  209,
-  211,  212,  213,  214,  215,  181,  191,   20,  311,  192,
-   20,   20,   20,  310,   20,  199,   20,   20,  322,   20,
-   80,  201,  235,  236,  237,  238,  239,  240,  242,   25,
-    2,   25,   25,   20,  204,   62,  271,  195,   20,  279,
-  147,  253,  209,  284,  209,  292,  263,  277,  293,  295,
-  296,  297,  298,  272,  299,  274,  276,  326,  166,  300,
-  278,  347,  308,   43,  301,   20,   43,   43,   43,  313,
-   43,  314,   43,   43,  315,   43,  317,  325,  146,  147,
-  327,   19,  328,  146,  147,  336,  282,  338,  283,   43,
-  148,  146,  147,  231,   43,  146,  147,   20,  165,   20,
-   20,  349,   84,  342,   53,   84,  350,  146,  147,   60,
-   60,   60,   60,   96,   96,   96,   96,  340,   86,   84,
-   84,   43,   96,   87,   84,  151,  146,  147,   96,   96,
-   96,   96,  100,  149,   60,  307,  146,  147,   96,   96,
-  195,   96,   96,   96,   96,   96,   96,   96,  146,  147,
-   96,  146,  147,   43,   84,   36,   43,  253,   61,   61,
-   61,   61,   25,   25,   25,   25,   25,   25,   34,   25,
-   25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
-   25,   25,  152,   61,   61,   25,   25,   39,   25,   25,
-   25,   25,   25,   36,   69,  155,   34,   25,   25,   25,
-   25,   25,   25,   77,  344,   25,  146,  147,  146,  147,
-  146,  147,  146,  147,   25,  210,   25,   25,  146,  147,
-  146,  147,  260,  166,  146,  147,  146,  147,  146,  147,
-   20,   20,   20,   20,   20,   20,  247,   20,   20,   20,
-   20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-  346,  146,  147,   20,   20,  148,   20,   20,   20,   20,
-   20,  146,  147,  324,  184,   20,   20,   20,   20,   20,
-   20,    0,    0,   20,    0,    0,  162,    0,    0,  163,
-  164,  165,   20,    0,   20,   20,   43,   43,   43,   43,
-   43,   43,    0,   43,   43,   43,    0,    0,    0,   43,
-  166,    0,   43,   43,   43,   43,    0,    0,    0,   43,
-   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
-  166,   43,   43,   43,   43,   43,   43,    0,    0,   43,
-    0,    0,  148,   84,   84,   84,   84,    0,   43,  163,
-   43,   43,  163,  163,  163,    0,  163,  147,  163,  163,
-  147,  163,  148,    0,    0,    0,    0,    0,   84,   84,
-    0,   84,    0,    0,  147,  147,    0,    0,    0,  147,
-  163,    4,    5,    6,    0,    7,    8,    4,    5,    6,
-    0,    7,    8,  185,  186,  187,  188,  189,  190,    0,
-    0,    4,    5,    6,    0,    7,    8,  147,    0,  147,
-  164,    0,    0,  164,  164,  164,    0,  164,  106,  164,
-  164,  106,  164,  149,  142,  143,  144,  145,    0,  150,
-  151,  152,  153,    0,    0,  106,  106,    0,    0,  147,
-  106,  164,  163,  156,  157,  158,  159,  160,  161,  146,
-  147,  162,  111,    0,  163,  164,  165,    0,    0,    0,
-  123,    0,    0,    0,    0,    0,    0,    0,    0,   52,
-  106,    0,   62,   64,   50,    0,   57,    0,   65,   60,
-   91,   59,    0,    0,    0,    0,    0,    0,  268,    0,
-    0,    0,    0,    0,    0,   58,    0,  113,  114,  111,
-   63,    0,    0,  164,  122,    0,  150,  151,  152,  153,
-  319,  320,  321,    0,  323,    0,  135,  136,  137,  138,
-   97,    0,  198,   97,  160,  161,    0,   61,  162,    0,
-  111,  163,  164,  165,    0,    0,    0,   97,   97,  339,
-    0,    0,   97,    0,    0,  161,  341,    0,  162,    0,
-  343,  163,  164,  165,    0,    0,    0,    0,    0,   23,
-  197,    0,   53,  351,  352,    0,    0,    0,    0,    0,
-    0,    0,   97,  163,  163,  163,  163,  163,    0,  163,
-  163,  163,    0,    0,    0,  163,    0,  111,  147,  147,
-  147,  147,  111,    0,    0,    0,  163,  147,  163,  163,
-  163,  163,  163,  147,  147,  147,  147,  163,  163,  163,
-  163,  163,  163,  147,  147,  163,  147,  147,  147,  147,
-  147,  147,  147,    0,  163,  147,  163,  163,  147,  147,
-  147,    0,    0,    0,  164,  164,  164,  164,  164,    0,
-  164,  164,  164,    0,    0,    0,  164,    0,    0,  106,
-  106,  106,  106,    0,    0,    0,    0,  164,  106,  164,
-  164,  164,  164,  164,  106,  106,  106,  106,  164,  164,
-  164,  164,  164,  164,  106,  106,  164,  106,  106,  106,
-  106,  106,  106,  106,    0,  164,  106,  164,  164,  106,
-  106,  106,   22,   24,   25,   26,   27,   28,    0,   29,
-   30,   31,    0,    0,    0,   32,    0,    0,   33,   34,
-   35,   36,    0,    0,    0,   37,   38,    0,   39,   40,
-   41,   42,   43,    0,    0,    0,  166,   44,   45,   46,
-   47,   48,   49,   43,    0,   51,   43,   43,   43,    0,
-   43,    0,   43,   43,   54,   43,   55,   56,    0,    0,
-    0,   97,   97,   97,   97,    0,    0,    0,  148,   43,
-   97,    0,    0,    0,   43,    0,   97,   97,   97,   97,
-    0,    0,    0,    0,    0,    0,   97,   97,    0,   97,
-   97,   97,   97,   97,   97,   97,    0,    0,   97,   52,
-    0,   43,   62,   64,   50,    0,   57,    0,   65,   60,
-    0,   59,    0,    0,    0,    0,   67,    0,    0,    0,
-   81,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-   63,    0,    0,   43,    0,    0,   43,    0,    0,    0,
-    0,    0,    0,    0,    0,  107,    0,    0,  116,  166,
-    0,    0,    0,    0,    0,   52,    0,   61,   62,   64,
-   50,    0,   57,    0,   65,   60,    0,   59,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  148,    0,  175,    0,    0,   63,    0,    0,   23,
-    0,    0,   53,    0,    0,    0,    0,  183,    0,    0,
+   20,   85,   62,   62,   85,  207,   62,  203,  167,  180,
+  102,  339,  169,  206,   80,  268,  201,  112,   85,   85,
+  250,   82,  245,   85,  271,  124,  293,   57,  306,  122,
+  307,  171,  121,   15,  334,  335,  167,   84,   18,  341,
+  149,  308,  357,  131,  168,  147,  148,  135,   38,  272,
+   93,   15,   97,   85,   98,  349,   18,  141,  233,  352,
+  172,   67,   16,  170,   17,  112,   38,  169,  149,   99,
+  186,  187,  188,  189,  190,  191,  282,   37,   25,   67,
+   16,  288,   17,  290,  100,  292,   23,  313,  199,   23,
+  231,   57,  195,  196,  305,   37,  112,  336,  337,  168,
+  174,   39,  143,  144,  145,  146,  105,  106,  175,  107,
+  177,   25,  173,   67,   25,   25,   25,   23,   25,   15,
+   25,   25,  179,   25,  315,  287,  326,  147,  148,  209,
+  210,  212,  213,  214,  215,  216,  182,   25,  192,    4,
+    5,    6,   25,    7,    8,  193,  200,  205,  248,   62,
+  289,  273,   20,  236,  237,  238,  239,  240,  241,  243,
+  202,  291,  279,  309,  281,  270,  148,  286,  196,   25,
+  351,  295,  255,  210,  298,  210,  299,  265,  314,  300,
+  330,  301,  167,  302,  274,   20,  276,  278,   20,   20,
+   20,  280,   20,  304,   20,   20,  303,   20,   19,  311,
+  316,   25,  317,   25,   25,  318,  319,  321,  329,  147,
+  148,   20,  332,  331,  149,  340,   20,  284,  342,  285,
+  353,   70,  112,   87,   70,  232,  163,  112,   88,  164,
+  165,  166,   85,   85,   85,   85,  354,  141,   70,   70,
+  141,   85,  346,   20,   51,  147,  148,   85,   85,  251,
+   85,   57,  252,  158,  141,  141,  344,   85,   85,  166,
+   85,   85,   85,   85,   85,   85,  101,  310,    2,  147,
+  148,  156,  196,   70,   36,   20,   34,   20,   20,  159,
+  147,  148,  147,  148,  147,  148,  147,  148,  156,  141,
+  255,   39,   67,   67,   67,   67,   36,  147,  148,  167,
+   34,   43,  147,  148,   43,   43,   43,   21,   43,   96,
+   43,   43,  211,   43,  147,  148,   77,   67,   67,  147,
+  148,  147,  148,  147,  148,  147,  148,   43,   69,  147,
+  148,  149,   43,  348,   25,   25,   25,   25,   25,   25,
+  262,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+   25,   25,   25,   25,  147,  148,  328,   25,   25,   43,
+   25,   25,   25,   25,   25,  147,  148,  147,  148,   25,
+   25,   25,   25,   25,   25,  167,  185,   25,   82,  320,
+  153,   82,  147,  148,  147,  148,   25,    0,   25,   25,
+    0,   43,    0,    0,   43,   82,   82,  162,    0,    0,
+  163,  156,    0,  164,  165,  166,    0,  149,   20,   20,
+   20,   20,   20,   20,    0,   20,   20,   20,   20,   20,
+   20,   20,   20,   20,   20,   20,   20,   20,    0,  167,
+   82,   20,   20,    0,   20,   20,   20,   20,   20,    0,
+    0,    0,    0,   20,   20,   20,   20,   20,   20,    0,
+    0,   20,   70,   70,   70,   70,    0,    0,    0,  167,
+   20,  149,   20,   20,    0,    0,    0,    0,  141,  141,
+  141,  141,  167,    0,  181,    0,  170,   70,   70,  170,
+  170,  170,    0,  170,  154,  170,  170,  154,  170,  150,
+    0,  149,    0,  141,  141,  151,  152,  153,  154,    0,
+    0,  154,  154,    0,  149,  204,  154,  170,  155,  157,
+  158,  159,  160,  161,  162,    0,    0,  163,    0,    0,
+  164,  165,  166,    0,   43,   43,   43,   43,   43,   43,
+    0,   43,   43,   43,  154,    0,  154,   43,    0,    0,
+   43,   43,   43,   43,    0,    0,    0,   43,   43,    0,
+   43,   43,   43,   43,   43,    0,    0,    0,    0,   43,
+   43,   43,   43,   43,   43,   66,  154,   43,   66,  170,
+    0,    0,  167,  153,  154,    0,   43,  171,   43,   43,
+  171,  171,  171,   66,  171,  113,  171,  171,  113,  171,
+  162,    0,    0,  163,    0,    0,  164,  165,  166,    0,
+    0,    0,  113,  113,  149,    0,    0,  113,  171,   82,
+   82,   82,   82,    0,    0,    0,    0,   66,    0,  150,
+    0,    0,    0,    0,    0,  151,  152,  153,  154,    0,
+    0,  294,    0,    0,   82,   82,  297,  113,  155,  157,
+  158,  159,  160,  161,  162,    0,  103,  163,    0,  103,
+  164,  165,  166,    0,    0,  151,  152,  153,  154,    0,
+    0,    0,    0,  103,  103,    0,    0,    0,  103,    0,
+  171,  159,  160,  161,  162,    0,    0,  163,    0,    0,
+  164,  165,  166,    0,    0,    0,    0,  162,    0,    0,
+  163,    0,    0,  164,  165,  166,    0,    0,  103,    0,
+  170,  170,  170,  170,  170,    0,  170,  170,  170,    0,
+    0,    0,  170,    0,    0,  154,  154,  154,  154,    0,
+    0,    0,    0,  170,  154,  170,  170,  170,  170,  170,
+  154,  154,  154,  154,  170,  170,  170,  170,  170,  170,
+  154,  154,  170,  154,  154,  154,  154,  154,  154,  154,
+    0,  170,  154,  170,  170,  154,  154,  154,   94,    0,
+    0,   94,    0,  104,    0,    0,  104,    0,  151,  152,
+  153,  154,    0,    0,    0,   94,   94,    0,    0,    0,
+  104,  104,    0,    0,    0,  104,  161,  162,    0,  249,
+  163,    0,    0,  164,  165,  166,   66,   66,   66,   66,
+    0,  171,  171,  171,  171,  171,    0,  171,  171,  171,
+   94,    0,  350,  171,    0,  104,  113,  113,  113,  113,
+    0,   66,    0,    0,  171,  113,  171,  171,  171,  171,
+  171,  113,  113,  113,  113,  171,  171,  171,  171,  171,
+  171,  113,  113,  171,  113,  113,  113,  113,  113,  113,
+  113,    0,  171,  113,  171,  171,  113,  113,  113,   52,
+    0,    0,   62,   64,   50,    0,   57,    0,   65,   60,
+    0,   59,    0,    0,    0,    0,    0,  103,  103,  103,
+  103,    0,    0,    0,    0,   58,  103,    0,    0,    0,
+   63,    0,  103,  103,  103,  103,    0,    0,    0,    0,
+    0,    0,  103,  103,   67,  103,  103,  103,  103,  103,
+  103,  103,    0,    0,  103,   43,    0,   61,   43,   43,
+   43,    0,   43,    0,   43,   43,   92,   43,    0,    0,
+    4,    5,    6,  108,    7,    8,  117,    0,    0,    0,
+    0,   43,    0,  114,  115,    0,   43,    0,    0,   23,
+  123,    0,   53,    4,    5,    6,    0,    7,    8,    0,
+    0,    0,  136,  137,  138,  139,    0,    0,    0,    0,
+    0,   52,  176,   43,   62,   64,   50,    0,   57,    0,
+   65,   60,    0,   59,    0,    0,  184,    0,    0,   94,
+   94,   94,   94,    0,  104,  104,  104,  104,    0,    0,
+    0,    0,   63,  104,    0,   43,    0,  198,   43,  104,
+  104,  104,  104,    0,   94,   94,    0,   94,    0,  104,
+  104,    0,  104,  104,  104,  104,  104,  104,  104,   61,
+    0,  104,  208,    0,   52,    0,    0,   62,   64,   50,
+    0,   57,    0,   65,   60,    0,   59,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   61,    0,    0,    0,    0,   52,    0,
-    0,   62,   64,   50,    0,   57,    0,   65,   60,    0,
-   59,    0,  150,    0,  152,  153,    0,    0,    0,    0,
-    0,    0,    0,  207,    0,   23,    0,    0,   53,   63,
-  160,  161,    0,    0,  162,    0,    0,  163,  164,  165,
-    0,    0,    0,    0,    0,    0,   43,   43,   43,   43,
-   43,   43,    0,   43,   43,   43,   61,    0,    0,   43,
-  245,    0,   43,   43,   43,   43,    0,  252,    0,   43,
-   43,    0,   43,   43,   43,   43,   43,    0,    0,    0,
-    0,   43,   43,   43,   43,   43,   43,  166,   23,   43,
-    0,   53,    0,    0,    0,    0,    0,    0,   43,  249,
-   43,   43,  250,  109,   25,   26,   27,   28,   87,   29,
-   30,   31,    0,    0,  166,   32,    0,    0,    0,  148,
-    0,  155,    0,    0,    0,    0,   38,  152,   39,   40,
+    0,   23,    0,    0,   53,   63,    0,    0,    0,  246,
+    0,    0,    0,    0,    0,    0,  254,    0,    0,    0,
+    0,    0,   22,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,   61,    0,    0,   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,  161,   51,  148,  162,    0,  166,
-  163,  164,  165,  316,   54,    0,   55,   56,    0,   24,
-   25,   26,   27,   28,    0,   29,   30,   31,    0,    0,
-    0,   32,    0,    0,    0,  155,    0,    0,    0,    0,
-    0,  148,   38,    0,   39,   40,   41,   42,   43,    0,
+   47,   48,   49,    0,   23,   51,    0,   53,    0,    0,
+    0,    0,    0,    0,   54,    0,   55,   56,   43,   43,
+   43,   43,   43,   43,    0,   43,   43,   43,    0,    0,
+  167,   43,    0,    0,   43,   43,   43,   43,    0,    0,
+    0,   43,   43,    0,   43,   43,   43,   43,   43,    0,
+    0,    0,    0,   43,   43,   43,   43,   43,   43,  167,
+    0,   43,  149,    0,    0,    0,    0,    0,    0,    0,
+   43,    0,   43,   43,    0,  110,   25,   26,   27,   28,
+   88,   29,   30,   31,    0,   52,    0,   32,   62,   64,
+   50,  149,   57,  130,   65,   60,    0,   59,   38,    0,
+   39,   40,   41,   42,   43,    0,    0,    0,    0,   44,
+   45,   46,   47,   48,   49,    0,   63,   51,    0,    0,
+    0,    0,    0,    0,    0,    0,   54,    0,   55,   56,
+    0,    0,    0,    0,    0,    0,    0,    0,   24,   25,
+   26,   27,   28,   61,   29,   30,   31,    0,   52,    0,
+   32,   62,   64,   50,    0,   57,    0,   65,   60,    0,
+   59,   38,    0,   39,   40,   41,   42,   43,    0,    0,
+    0,    0,   44,   45,   46,   47,   48,   49,   53,   63,
+   51,    0,  323,  324,  325,    0,  327,    0,    0,   54,
+    0,   55,   56,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   52,    0,   61,   62,   64,   50,
+    0,   57,  343,   65,   60,    0,   59,    0,    0,  345,
+    0,    0,    0,  347,    0,    0,  151,  152,  153,  154,
+  120,    0,    0,    0,    0,   63,  355,  356,   23,    0,
+    0,   53,    0,  160,  161,  162,    0,    0,  163,    0,
+    0,  164,  165,  166,    0,  151,    0,  153,  154,    0,
+   52,    0,   61,   62,   64,   50,    0,   57,    0,   65,
+   60,    0,   59,  161,  162,    0,    0,  163,    0,    0,
+  164,  165,  166,    0,    0,    0,    0,    0,    0,    0,
+    0,   63,    0,    0,    0,    0,    0,   53,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   24,
+   25,   26,   27,   28,    0,   29,   30,   31,   61,   52,
+  134,   32,   62,   64,   50,    0,   57,  194,   65,   60,
+    0,   59,   38,    0,   39,   40,   41,   42,   43,    0,
     0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
-    0,   51,    0,  166,    0,    0,    0,    0,    0,    0,
-   54,    0,   55,   56,    0,    0,    0,    0,    0,    0,
-    0,    0,  115,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,  148,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,   38,    0,   39,   40,   41,
-   42,   43,    0,    0,    0,  166,   44,   45,   46,   47,
-   48,   49,   52,    0,   51,   62,   64,   50,    0,   57,
-    0,   65,   60,   54,   59,   55,   56,    0,    0,    0,
-    0,    0,    0,  150,  151,  152,  153,  148,  119,    0,
-    0,    0,    0,   63,    0,    0,    0,  156,  157,  158,
-  159,  160,  161,    0,    0,  162,    0,    0,  163,  164,
-  165,    0,  152,  153,    0,    0,    0,    0,   52,    0,
-   61,   62,   64,   50,    0,   57,  129,   65,   60,  161,
-   59,    0,  162,    0,    0,  163,  164,  165,    0,  149,
-    0,    0,    0,    0,    0,  150,  151,  152,  153,   63,
-    0,    0,    0,    0,    0,   53,    0,    0,  154,  156,
-  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
-  163,  164,  165,    0,   52,    0,   61,   62,   64,   50,
-    0,   57,    0,   65,   60,    0,   59,    0,    0,    0,
-    0,    0,    0,  149,    0,    0,    0,    0,    0,  150,
-  151,  152,  153,    0,    0,   63,    0,    0,    0,    0,
-    0,   53,  154,  156,  157,  158,  159,  160,  161,    0,
-    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
-    0,    0,   61,   52,  133,    0,   62,   64,   50,    0,
-   57,  193,   65,   60,    0,   59,    0,    0,    0,    0,
-    0,  150,  151,  152,  153,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   63,    0,    0,   53,  159,  160,
-  161,    0,    0,  162,    0,    0,  163,  164,  165,    0,
-    0,    0,   80,    0,    0,   80,   24,   25,   26,   27,
-   28,   61,   29,   30,   31,    0,    0,    0,   32,   80,
-   80,    0,    0,    0,   80,    0,    0,    0,    0,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,   53,    0,   51,    0,
-    0,    0,    0,    0,   80,    0,    0,   54,   81,   55,
-   56,   81,   24,   25,   26,   27,   28,    0,   29,   30,
-   31,    0,    0,    0,   32,   81,   81,    0,    0,    0,
-   81,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+   63,   51,    0,   53,    0,    0,    0,    0,    0,    0,
+   54,    0,   55,   56,    0,    0,    0,    0,   87,    0,
+    0,   87,  116,   25,   26,   27,   28,   61,   29,   30,
+   31,    0,    0,    0,   32,   87,   87,    0,    0,    0,
+   87,    0,    0,    0,    0,   38,    0,   39,   40,   41,
    42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,    0,    0,   51,    0,    0,    0,    0,    0,
-   81,    0,    0,   54,    0,   55,   56,    0,   24,   25,
-   26,   27,   28,    0,   29,   30,   31,    0,   52,    0,
-   32,   62,   64,   50,    0,   57,  241,   65,   60,    0,
+   48,   49,   53,    0,   51,    0,    0,    0,    0,    0,
+   87,    0,    0,   54,   88,   55,   56,   88,   24,   25,
+   26,   27,   28,    0,   29,   30,   31,    0,    0,    0,
+   32,   88,   88,    0,    0,    0,   88,    0,    0,    0,
+    0,   38,    0,   39,   40,   41,   42,   43,    0,    0,
+    0,    0,   44,   45,   46,   47,   48,   49,    0,    0,
+   51,    0,    0,    0,    0,    0,   88,    0,    0,   54,
+    0,   55,   56,    0,   24,   25,   26,   27,   28,    0,
+   29,   30,   31,    0,   52,    0,   32,   62,   64,   50,
+    0,   57,  242,   65,   60,    0,   59,   38,    0,   39,
+   40,   41,   42,   43,    0,    0,    0,    0,   44,   45,
+   46,   47,   48,   49,    0,   63,   51,    0,    0,    0,
+    0,    0,    0,    0,    0,   54,    0,   55,   56,    0,
+    0,    0,    0,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,   61,   52,    0,   32,   62,   64,   50,    0,
+   57,    0,   65,   60,    0,   59,   38,    0,   39,   40,
+   41,   42,   43,    0,    0,    0,    0,   44,   45,   46,
+   47,   48,   49,    0,   63,   51,    0,   53,    0,    0,
+    0,    0,    0,    0,   54,    0,   55,   56,    0,   87,
+   87,   87,   87,    0,    0,    0,    0,    0,   87,   52,
+    0,   61,   62,   64,   50,   87,   57,  275,   65,   60,
+    0,   59,    0,    0,   87,   87,    0,   87,   87,   87,
+   87,   87,    0,    0,    0,    0,    0,    0,    0,    0,
+   63,    0,    0,    0,    0,    0,   53,    0,    0,    0,
+    0,    0,    0,    0,    0,   88,   88,   88,   88,    0,
+    0,    0,    0,    0,   88,   52,    0,   61,   62,   64,
+   50,    0,   57,  277,   65,   60,    0,   59,    0,    0,
+   88,   88,    0,   88,   88,   88,   88,   88,    0,    0,
+    0,    0,    0,    0,    0,    0,   63,    0,    0,    0,
+    0,    0,   53,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   24,   25,
+   26,   27,   28,   61,   29,   30,   31,    0,   52,    0,
+   32,   62,   64,   50,    0,   57,    0,   65,   60,    0,
    59,   38,    0,   39,   40,   41,   42,   43,    0,    0,
-    0,    0,   44,   45,   46,   47,   48,   49,    0,   63,
+    0,    0,   44,   45,   46,   47,   48,   49,   53,   63,
    51,    0,    0,    0,    0,    0,    0,    0,    0,   54,
-    0,   55,   56,    0,    0,    0,    0,   24,   25,   26,
-   27,   28,    0,   29,   30,   31,   61,   52,    0,   32,
-   62,   64,   50,    0,   57,    0,   65,   60,    0,   59,
-   38,    0,   39,   40,   41,   42,   43,    0,    0,    0,
-    0,   44,   45,   46,   47,   48,   49,    0,   63,   51,
-    0,   53,    0,    0,    0,    0,    0,    0,   54,    0,
-   55,   56,    0,   80,   80,   80,   80,    0,    0,    0,
-    0,    0,   80,   52,    0,   61,   62,   64,   50,   80,
-   57,  273,   65,   60,    0,   59,    0,    0,   80,   80,
-    0,   80,   80,   80,   80,   80,    0,    0,    0,    0,
-    0,    0,    0,    0,   63,    0,    0,    0,    0,    0,
-   53,    0,    0,    0,    0,    0,    0,    0,    0,   81,
-   81,   81,   81,    0,    0,    0,    0,    0,   81,   52,
-    0,   61,   62,   64,   50,    0,   57,  275,   65,   60,
-    0,   59,    0,    0,   81,   81,    0,   81,   81,   81,
-   81,   81,    0,    0,    0,    0,    0,    0,    0,    0,
-   63,    0,    0,    0,    0,    0,   53,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   24,   25,   26,   27,   28,   61,   29,   30,
-   31,    0,   52,    0,   32,   62,   64,   50,    0,   57,
-    0,   65,   60,    0,   59,   38,    0,   39,   40,   41,
-   42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
-   48,   49,   53,   63,   51,    0,    0,    0,    0,    0,
-    0,    0,    0,   54,    0,   55,   56,    0,    0,    0,
-   22,   24,   25,   26,   27,   28,    0,   29,   30,   31,
-   61,    0,    0,   32,   87,    0,    0,   87,    0,    0,
-    0,    0,    0,    0,   38,    0,   39,   40,   41,   42,
-   43,   87,   87,    0,    0,   44,   45,   46,   47,   48,
-   49,  166,    0,   51,    0,   53,    0,    0,    0,    0,
-  140,    0,   54,  140,   55,   56,    0,   24,   25,   26,
-   27,   28,    0,   29,   30,   31,   87,  140,  140,   32,
-    0,    0,  140,  148,    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,   51,
-  140,    0,  140,    0,    0,    0,    0,    0,   54,  123,
-   55,   56,  123,   24,   25,   26,   27,   28,    0,   29,
-   30,   31,    0,    0,    0,   32,  123,  123,    0,    0,
-    0,  123,  140,    0,    0,    0,   38,    0,   39,   40,
+    0,   55,   56,    0,    0,    0,   22,   24,   25,   26,
+   27,   28,    0,   29,   30,   31,   61,    0,    0,   32,
+   69,    0,    0,   69,    0,    0,    0,    0,    0,    0,
+   38,    0,   39,   40,   41,   42,   43,   69,   69,    0,
+    0,   44,   45,   46,   47,   48,   49,  167,    0,   51,
+    0,   53,    0,    0,    0,    0,  147,    0,   54,  147,
+   55,   56,    0,   24,   25,   26,   27,   28,    0,   29,
+   30,   31,   69,  147,  147,   32,    0,    0,  147,  149,
+    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,   51,    0,    0,    0,  123,
-    0,  123,    0,    0,   54,    0,   55,   56,    0,    0,
-    0,    0,  147,    0,    0,  147,   24,   25,   26,   27,
-   28,    0,   29,   30,   31,    0,    0,    0,   32,  147,
-  147,  123,    0,    0,  147,    0,    0,    0,    0,   38,
-    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
-   44,   45,   46,   47,   48,   49,    0,    0,   51,    0,
-  133,    0,  147,  133,  147,    0,    0,   54,    0,   55,
-   56,    0,    0,    0,    0,    0,    0,  133,  133,  152,
-  153,    0,  133,    0,    0,   87,   87,   87,   87,    0,
-    0,    0,    0,    0,  147,  160,  161,    0,    0,  162,
-    0,    0,  163,  164,  165,    0,    0,    0,    0,    0,
-   87,   87,  133,   87,    0,    0,    0,    0,    0,    0,
-    0,  140,  140,  140,  140,    0,  108,    0,    0,  108,
-  140,    0,    0,    0,    0,    0,  140,  140,  140,  140,
-    0,    0,  133,  108,  108,    0,  140,  140,  108,  140,
-  140,  140,  140,  140,  140,  140,    0,    0,  140,    0,
-    0,  140,  140,  140,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  108,    0,  108,    0,
-  123,  123,  123,  123,    0,  149,    0,    0,  149,  123,
-    0,    0,    0,    0,    0,  123,  123,  123,  123,    0,
-    0,    0,  149,  149,    0,  123,  123,  149,  123,  123,
-  123,  123,  123,  123,  123,    0,    0,  123,    0,    0,
-  123,  123,  123,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,  149,    0,    0,
-    0,    0,    0,  147,  147,  147,  147,    0,    0,    0,
-    0,    0,  147,    0,    0,    0,    0,    0,  147,  147,
-  147,  147,    0,    0,    0,    0,    0,  149,  147,  147,
-    0,  147,  147,  147,  147,  147,  147,  147,    0,    0,
-  147,    0,    0,  147,  147,  147,    0,    0,    0,    0,
-    0,  133,  133,  133,  133,    0,  150,    0,    0,    0,
-  133,    0,    0,    0,    0,    0,  133,  133,  133,  133,
-    0,    0,    0,  150,  150,    0,  133,  133,  150,  133,
-  133,  133,  133,  133,  133,  133,    0,    0,  133,    0,
-    0,  133,  133,  133,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  150,    0,  150,    0,
-    0,    0,    0,    0,    0,    0,    0,  108,  108,  108,
-  108,    0,    0,    0,    0,    0,  108,    0,    0,    0,
-    0,    0,  108,  108,  108,  108,    0,    0,  150,    0,
-    0,    0,  108,  108,    0,  108,  108,  108,  108,  108,
-  108,  108,    0,    0,  108,    0,    0,  108,  108,  108,
+   47,   48,   49,    0,    0,   51,  147,    0,  147,    0,
+    0,    0,    0,    0,   54,  130,   55,   56,  130,   24,
+   25,   26,   27,   28,    0,   29,   30,   31,    0,    0,
+    0,   32,  130,  130,    0,    0,    0,  130,  147,    0,
+    0,    0,   38,    0,   39,   40,   41,   42,   43,    0,
+    0,    0,    0,   44,   45,   46,   47,   48,   49,    0,
+    0,   51,    0,    0,    0,  130,    0,  130,    0,    0,
+   54,    0,   55,   56,    0,    0,    0,    0,  154,    0,
+    0,  154,   24,   25,   26,   27,   28,    0,   29,   30,
+   31,    0,    0,    0,   32,  154,  154,  130,    0,    0,
+  154,    0,    0,    0,    0,   38,    0,   39,   40,   41,
+   42,   43,    0,    0,    0,    0,   44,   45,   46,   47,
+   48,   49,    0,    0,   51,    0,  140,    0,  154,  140,
+  154,    0,    0,   54,    0,   55,   56,    0,    0,    0,
+    0,    0,    0,  140,  140,  153,  154,    0,  140,    0,
+    0,   69,   69,   69,   69,    0,    0,    0,    0,    0,
+  154,  161,  162,    0,    0,  163,    0,    0,  164,  165,
+  166,    0,    0,    0,    0,    0,   69,   69,  140,    0,
+    0,    0,    0,    0,    0,    0,    0,  147,  147,  147,
+  147,    0,  115,    0,    0,  115,  147,    0,    0,    0,
+    0,    0,  147,  147,  147,  147,    0,    0,  140,  115,
+  115,    0,  147,  147,  115,  147,  147,  147,  147,  147,
+  147,  147,    0,    0,  147,    0,    0,  147,  147,  147,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  115,    0,  115,    0,  130,  130,  130,  130,
+    0,  156,    0,    0,  156,  130,    0,    0,    0,    0,
+    0,  130,  130,  130,  130,    0,    0,    0,  156,  156,
+    0,  130,  130,  156,  130,  130,  130,  130,  130,  130,
+  130,    0,    0,  130,    0,    0,  130,  130,  130,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  156,    0,    0,    0,    0,    0,  154,
+  154,  154,  154,    0,    0,    0,    0,    0,  154,    0,
+    0,    0,    0,    0,  154,  154,  154,  154,    0,    0,
+    0,    0,    0,  156,  154,  154,    0,  154,  154,  154,
+  154,  154,  154,  154,    0,    0,  154,    0,    0,  154,
+  154,  154,    0,    0,    0,    0,    0,  140,  140,  140,
+  140,    0,  157,    0,    0,    0,  140,    0,    0,    0,
+    0,    0,  140,  140,  140,  140,    0,    0,    0,  157,
+  157,    0,  140,  140,  157,  140,  140,  140,  140,  140,
+  140,  140,    0,    0,  140,    0,    0,  140,  140,  140,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  149,  149,  149,  149,
-    0,  135,    0,    0,    0,  149,    0,    0,    0,    0,
-    0,  149,  149,  149,  149,    0,    0,    0,  135,  135,
-    0,  149,  149,  135,  149,  149,  149,  149,  149,  149,
-  149,    0,    0,  149,    0,    0,  149,  149,  149,    0,
-   89,   89,    0,    0,  100,    0,    0,  100,    0,    0,
-    0,  135,  102,  135,   86,    0,    0,   86,  110,   89,
-  118,  100,  100,    0,    0,   89,  100,    0,    0,    0,
-    0,   86,   86,    0,    0,    0,   86,   89,   89,   89,
-   89,    0,    0,  135,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,  100,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,   86,  150,  150,  150,
-  150,    0,   62,    0,    0,   62,  150,    0,    0,    0,
-    0,  110,  150,  150,  150,  150,  100,    0,    0,   62,
-   62,    0,  150,  150,   62,  150,  150,  150,  150,  150,
-  150,  150,    0,    0,  150,    0,    0,  150,  150,  150,
-    0,    0,    0,    0,    0,   65,    0,    0,    0,    0,
-    0,    0,    0,    0,   62,    0,    0,    0,    0,    0,
-    0,    0,   65,   65,    0,    0,    0,   65,    0,    0,
-  233,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   62,    0,    0,    0,    0,   99,
-    0,    0,   99,    0,  261,   65,    0,   65,    0,    0,
-    0,    0,    0,    0,    0,    0,   99,   99,    0,    0,
-    0,   99,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  135,  135,  135,  135,    0,   65,    0,    0,
-    0,  135,    0,    0,    0,    0,    0,  135,  135,  135,
-  135,   99,    0,    0,    0,    0,    0,  135,  135,    0,
-  135,  135,  135,  135,  135,  135,  135,    0,    0,  135,
-    0,    0,  135,  135,  135,  100,  100,  100,  100,    0,
-  136,   99,    0,  136,  100,   86,   86,   86,   86,    0,
-  100,  100,  100,  100,   86,    0,    0,  136,  136,    0,
-  100,  100,  136,  100,  100,  100,  100,  100,  100,  100,
-   86,   86,  100,   86,   86,  100,  100,  100,    0,    0,
+    0,    0,  157,    0,  157,    0,    0,    0,    0,    0,
+    0,    0,    0,  115,  115,  115,  115,    0,    0,    0,
+    0,    0,  115,    0,    0,    0,    0,    0,  115,  115,
+  115,  115,    0,    0,  157,    0,    0,    0,  115,  115,
+    0,  115,  115,  115,  115,  115,  115,  115,    0,    0,
+  115,    0,    0,  115,  115,  115,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  136,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   62,   62,   62,   62,    0,  149,    0,
-    0,  149,   62,    0,    0,    0,    0,    0,   62,   62,
-   62,   62,    0,    0,    0,  149,  149,    0,   62,   62,
-  149,   62,   62,   62,   62,   62,   62,   62,    0,    0,
-   62,    0,    0,   62,   62,   62,   65,   65,   65,   65,
-    0,  106,    0,    0,  106,   65,    0,    0,    0,    0,
-  149,   65,   65,   65,   65,    0,    0,    0,  106,  106,
-    0,   65,   65,  106,   65,   65,   65,   65,   65,   65,
-   65,    0,    0,   65,    0,    0,   65,   65,   65,    0,
-   99,   99,   99,   99,    0,  113,    0,    0,  113,   99,
-    0,    0,    0,  106,    0,   99,   99,   99,   99,    0,
-    0,    0,  113,  113,    0,   99,   99,  113,   99,   99,
-   99,   99,   99,   99,   99,    0,    0,   99,    0,    0,
-   99,   99,   99,    0,    0,    0,    0,    0,   91,    0,
-    0,   91,    0,    0,    0,    0,    0,  113,    0,    0,
-    0,    0,    0,    0,    0,   91,   91,    0,    0,    0,
-   91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,  136,  136,  136,  136,    0,   92,    0,    0,   92,
-  136,    0,    0,    0,    0,    0,  136,  136,  136,  136,
-   91,    0,    0,   92,   92,    0,  136,  136,   92,  136,
-  136,  136,  136,  136,  136,  136,    0,    0,  136,    0,
-    0,  136,  136,  136,   93,    0,    0,   93,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   92,    0,
-    0,   93,   93,    0,    0,    0,   93,    0,    0,  149,
-  149,  149,  149,    0,    0,    0,    0,    0,  149,    0,
-    0,    0,    0,    0,  149,  149,  149,  149,    0,    0,
-    0,    0,    0,    0,  149,  149,   93,  149,  149,  149,
-  149,  149,  149,  149,    0,    0,  149,    0,    0,  149,
-  149,  149,  106,  106,  106,  106,    0,   89,    0,    0,
-   89,  106,    0,    0,    0,    0,    0,  106,  106,  106,
-  106,    0,    0,    0,   89,   89,    0,  106,  106,   89,
-  106,  106,  106,  106,  106,  106,  106,    0,    0,  106,
-    0,    0,  106,  106,  106,    0,  113,  113,  113,  113,
-    0,   90,    0,    0,   90,  113,    0,    0,    0,   89,
-    0,  113,  113,  113,  113,    0,    0,    0,   90,   90,
-    0,  113,  113,   90,  113,  113,  113,  113,  113,  113,
-  113,    0,    0,  113,    0,    0,  113,  113,  113,   91,
-   91,   91,   91,    0,   88,    0,    0,   88,   91,    0,
-    0,    0,    0,   90,   91,   91,   91,   91,    0,    0,
-    0,   88,   88,    0,   91,   91,   88,   91,   91,   91,
-   91,   91,   91,   91,    0,    0,    0,   92,   92,   92,
-   92,    0,   76,    0,    0,   76,   92,    0,    0,    0,
-    0,    0,   92,   92,   92,   92,   88,    0,    0,   76,
-   76,    0,   92,   92,   76,   92,   92,   92,   92,   92,
-   92,   92,    0,    0,    0,   93,   93,   93,   93,    0,
-   77,    0,    0,   77,   93,    0,    0,    0,    0,    0,
-   93,   93,   93,   93,   76,    0,    0,   77,   77,    0,
-   93,   93,   77,   93,   93,   93,   93,   93,   93,   93,
-    0,    0,    0,    0,    0,    0,   78,    0,    0,   78,
+    0,    0,  156,  156,  156,  156,    0,  142,    0,    0,
+    0,  156,    0,    0,    0,    0,    0,  156,  156,  156,
+  156,    0,    0,    0,  142,  142,    0,  156,  156,  142,
+  156,  156,  156,  156,  156,  156,  156,    0,    0,  156,
+    0,    0,  156,  156,  156,    0,    0,    0,    0,    0,
+  107,    0,    0,  107,    0,    0,    0,  142,    0,  142,
+   93,    0,    0,   93,    0,    0,    0,  107,  107,    0,
+    0,    0,  107,    0,    0,    0,    0,   93,   93,    0,
+    0,    0,   93,    0,    0,    0,    0,    0,    0,  142,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   77,   78,   78,    0,    0,    0,   78,    0,
+    0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,   93,  157,  157,  157,  157,    0,   68,    0,
+    0,   68,  157,    0,    0,    0,    0,    0,  157,  157,
+  157,  157,  107,    0,    0,   68,   68,    0,  157,  157,
+   68,  157,  157,  157,  157,  157,  157,  157,    0,    0,
+  157,    0,    0,  157,  157,  157,    0,    0,    0,    0,
+    0,   71,    0,    0,    0,    0,    0,    0,    0,    0,
+   68,    0,    0,    0,    0,    0,    0,    0,   71,   71,
+    0,    0,    0,   71,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+   68,    0,    0,    0,    0,  106,    0,    0,  106,    0,
+    0,   71,    0,   71,    0,    0,    0,    0,    0,    0,
+    0,    0,  106,  106,    0,    0,    0,  106,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  142,  142,
+  142,  142,    0,   71,    0,    0,    0,  142,    0,    0,
+    0,    0,    0,  142,  142,  142,  142,  106,    0,    0,
+    0,    0,    0,  142,  142,    0,  142,  142,  142,  142,
+  142,  142,  142,    0,    0,  142,    0,    0,  142,  142,
+  142,  107,  107,  107,  107,    0,  143,  106,    0,  143,
+  107,   93,   93,   93,   93,    0,  107,  107,  107,  107,
+   93,    0,    0,  143,  143,    0,  107,  107,  143,  107,
+  107,  107,  107,  107,  107,  107,   93,   93,  107,   93,
+   93,  107,  107,  107,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,  143,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   68,
+   68,   68,   68,    0,  156,    0,    0,  156,   68,    0,
+    0,    0,    0,    0,   68,   68,   68,   68,    0,    0,
+    0,  156,  156,    0,   68,   68,  156,   68,   68,   68,
+   68,   68,   68,   68,    0,    0,   68,    0,    0,   68,
+   68,   68,   71,   71,   71,   71,    0,  113,    0,    0,
+  113,   71,    0,    0,    0,    0,  156,   71,   71,   71,
+   71,    0,    0,    0,  113,  113,    0,   71,   71,  113,
+   71,   71,   71,   71,   71,   71,   71,    0,    0,   71,
+    0,    0,   71,   71,   71,    0,  106,  106,  106,  106,
+    0,  120,    0,    0,  120,  106,    0,    0,    0,  113,
+    0,  106,  106,  106,  106,    0,    0,    0,  120,  120,
+    0,  106,  106,  120,  106,  106,  106,  106,  106,  106,
+  106,    0,    0,  106,    0,    0,  106,  106,  106,    0,
+    0,    0,    0,    0,   98,    0,    0,   98,    0,    0,
+    0,    0,    0,  120,    0,    0,    0,    0,    0,    0,
+    0,   98,   98,    0,    0,    0,   98,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  143,  143,  143,
+  143,    0,   99,    0,    0,   99,  143,    0,    0,    0,
+    0,    0,  143,  143,  143,  143,   98,    0,    0,   99,
+   99,    0,  143,  143,   99,  143,  143,  143,  143,  143,
+  143,  143,    0,    0,  143,    0,    0,  143,  143,  143,
+  100,    0,    0,  100,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   99,    0,    0,  100,  100,    0,
+    0,    0,  100,    0,    0,  156,  156,  156,  156,    0,
+    0,    0,    0,    0,  156,    0,    0,    0,    0,    0,
+  156,  156,  156,  156,    0,    0,    0,    0,    0,    0,
+  156,  156,  100,  156,  156,  156,  156,  156,  156,  156,
+    0,    0,  156,    0,    0,  156,  156,  156,  113,  113,
+  113,  113,    0,   96,    0,    0,   96,  113,    0,    0,
+    0,    0,    0,  113,  113,  113,  113,    0,    0,    0,
+   96,   96,    0,  113,  113,   96,  113,  113,  113,  113,
+  113,  113,  113,    0,    0,  113,    0,    0,  113,  113,
+  113,    0,  120,  120,  120,  120,    0,   97,    0,    0,
+   97,  120,    0,    0,    0,   96,    0,  120,  120,  120,
+  120,    0,    0,    0,   97,   97,    0,  120,  120,   97,
+  120,  120,  120,  120,  120,  120,  120,    0,    0,  120,
+    0,    0,  120,  120,  120,   98,   98,   98,   98,    0,
+   95,    0,    0,   95,   98,    0,    0,    0,    0,   97,
+   98,   98,   98,   98,    0,    0,    0,   95,   95,    0,
+   98,   98,   95,   98,   98,   98,   98,   98,   98,   98,
+    0,    0,    0,   99,   99,   99,   99,    0,   83,    0,
+    0,   83,   99,    0,    0,    0,    0,    0,   99,   99,
+   99,   99,   95,    0,    0,   83,   83,    0,   99,   99,
+   83,   99,   99,   99,   99,   99,   99,   99,    0,    0,
+    0,  100,  100,  100,  100,    0,   84,    0,    0,   84,
+  100,    0,    0,    0,    0,    0,  100,  100,  100,  100,
+   83,    0,    0,   84,   84,    0,  100,  100,   84,  100,
+  100,  100,  100,  100,  100,  100,    0,    0,    0,    0,
+    0,    0,   86,    0,    0,   86,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   84,   86,
+   86,    0,    0,    0,   86,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,   96,   96,   96,   96,    0,  146,
+    0,    0,  146,   96,    0,    0,    0,    0,    0,   96,
+   96,   96,   96,    0,   86,    0,  146,  146,    0,   96,
+   96,  146,   96,   96,   96,   96,   96,   96,   96,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,   97,   97,
+   97,   97,    0,  145,    0,    0,  145,   97,    0,    0,
+    0,  146,    0,   97,   97,   97,   97,    0,    0,    0,
+  145,  145,    0,   97,   97,  145,   97,   97,   97,   97,
+   97,   97,   97,    0,    0,    0,    0,    0,    0,    0,
+    0,   95,   95,   95,   95,    0,  134,    0,    0,  134,
+   95,    0,    0,    0,    0,  145,   95,   95,   95,   95,
+    0,    0,    0,  134,  134,    0,   95,   95,  134,   95,
+   95,   95,   95,   95,   95,   95,    0,    0,    0,   83,
+   83,   83,   83,    0,  105,    0,    0,  105,   83,    0,
+    0,    0,    0,    0,   83,   83,   83,   83,  134,    0,
+    0,  105,  105,    0,   83,   83,  105,   83,   83,   83,
+   83,   83,   83,   83,    0,    0,    0,   84,   84,   84,
+   84,    0,   89,    0,    0,   89,   84,    0,    0,    0,
+    0,    0,   84,   84,   84,   84,  105,    0,    0,   89,
+   89,    0,   84,   84,   89,   84,   84,   84,   84,   84,
+   84,    0,    0,   86,   86,   86,   86,    0,   90,    0,
+    0,   90,   86,    0,    0,    0,    0,    0,   86,   86,
+    0,    0,    0,    0,   89,   90,   90,    0,   86,   86,
+   90,   86,   86,   86,   86,   86,   86,    0,    0,    0,
+  146,  146,  146,  146,    0,   92,    0,    0,   92,  146,
+    0,    0,    0,    0,    0,  146,  146,    0,    0,    0,
+   90,    0,   92,   92,    0,  146,  146,   92,  146,  146,
+  146,  146,  146,    0,    0,    0,  167,    0,    0,    0,
+    0,    0,    0,    0,  145,  145,  145,  145,    0,   91,
+  156,    0,   91,  145,    0,    0,    0,   92,    0,  145,
+  145,    0,    0,    0,    0,    0,   91,   91,  149,  145,
+  145,   91,  145,  145,  145,  145,  145,    0,  167,    0,
+    0,  283,    0,    0,    0,    0,  156,  134,  134,  134,
+  134,    0,    0,    0,    0,    0,  134,    0,    0,    0,
+    0,   91,  134,  134,    0,    0,    0,    0,    0,    0,
+  149,    0,  134,  134,  167,  134,  134,  134,  134,  134,
+    0,    0,    0,    0,    0,  105,  105,  105,  105,    0,
+    0,    0,    0,    0,  105,    0,    0,    0,    0,    0,
+  105,  105,    0,    0,    0,  156,  149,    0,    0,    0,
+  105,  105,    0,  105,  105,  105,  105,  105,    0,    0,
+    0,    0,    0,   89,   89,   89,   89,    0,    0,    0,
+    0,    0,   89,  167,    0,    0,    0,    0,   90,   90,
     0,    0,    0,    0,    0,    0,    0,    0,   89,   89,
-   89,   89,    0,   79,    0,    0,   79,   89,    0,    0,
-    0,    0,    0,   89,   89,   89,   89,    0,   78,    0,
-   79,   79,    0,   89,   89,   79,   89,   89,   89,   89,
-   89,   89,   89,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,   90,   90,   90,   90,    0,  139,    0,    0,
-  139,   90,    0,    0,    0,   79,    0,   90,   90,   90,
-   90,    0,    0,    0,  139,  139,    0,   90,   90,  139,
-   90,   90,   90,   90,   90,   90,   90,    0,    0,    0,
-    0,    0,    0,    0,    0,   88,   88,   88,   88,    0,
-  138,    0,    0,  138,   88,    0,    0,    0,    0,  139,
-   88,   88,   88,   88,    0,    0,    0,  138,  138,    0,
-   88,   88,  138,   88,   88,   88,   88,   88,   88,   88,
-    0,    0,    0,   76,   76,   76,   76,    0,  127,    0,
-    0,  127,   76,    0,    0,    0,    0,    0,   76,   76,
-   76,   76,  138,    0,    0,  127,  127,    0,   76,   76,
-  127,   76,   76,   76,   76,   76,   76,   76,    0,    0,
-    0,   77,   77,   77,   77,    0,   98,    0,    0,   98,
-   77,    0,    0,    0,    0,    0,   77,   77,   77,   77,
-  127,    0,    0,   98,   98,    0,   77,   77,   98,   77,
-   77,   77,   77,   77,   77,    0,    0,   78,   78,   78,
-   78,    0,   82,    0,    0,   82,   78,    0,    0,    0,
-    0,    0,   78,   78,    0,   78,    0,    0,   98,   82,
-   82,    0,   78,   78,   82,   78,   78,   78,   78,   78,
-   78,    0,    0,    0,   79,   79,   79,   79,    0,   83,
-    0,    0,   83,   79,    0,    0,    0,    0,    0,   79,
-   79,    0,    0,    0,   82,    0,   83,   83,    0,   79,
-   79,   83,   79,   79,   79,   79,   79,   79,    0,    0,
-  166,    0,    0,    0,    0,    0,    0,    0,  139,  139,
-  139,  139,    0,   85,    0,    0,   85,  139,    0,    0,
-    0,   83,    0,  139,  139,    0,   64,    0,    0,   64,
-   85,   85,  148,  139,  139,   85,  139,  139,  139,  139,
-  139,    0,    0,   64,   64,  134,    0,    0,  134,    0,
-    0,  138,  138,  138,  138,   75,    0,    0,   75,    0,
-  138,    0,  134,  134,    0,   85,  138,  138,    0,    0,
-    0,    0,   75,   75,    0,    0,  138,  138,   64,  138,
-  138,  138,  138,  138,    0,   63,    0,    0,   63,  127,
-  127,  127,  127,    0,    0,    0,    0,  134,  127,    0,
-    0,    0,   63,   63,  127,  127,  281,   75,    0,    0,
-    0,  155,    0,    0,  127,  127,    0,  127,  127,  127,
-  127,  127,    0,    0,    0,    0,    0,   98,   98,   98,
-   98,    0,    0,    0,    0,    0,   98,   63,    0,  166,
-    0,    0,   98,   98,    0,  155,    0,    0,    0,    0,
-    0,    0,   98,   98,    0,   98,   98,   98,   98,   98,
-    0,    0,    0,   82,   82,   82,   82,    0,    0,    0,
-    0,  148,   82,  166,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,   82,   82,
-    0,   82,   82,   82,   82,   82,  150,  151,  152,  153,
-   83,   83,   83,   83,    0,  148,    0,    0,    0,   83,
-    0,  157,  158,  159,  160,  161,    0,    0,  162,    0,
-    0,  163,  164,  165,  166,   83,   83,    0,   83,   83,
-   83,   83,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   85,   85,   85,   85,    0,    0,
-    0,    0,    0,   85,    0,    0,  148,   64,   64,   64,
-   64,    0,    0,    0,    0,    0,    0,    0,    0,   85,
-   85,    0,   85,   85,   85,    0,  134,  134,  134,  134,
-    0,    0,   64,   64,   93,    0,   75,   75,   75,   75,
-    0,    0,  103,    0,    0,    0,  108,    0,    0,  117,
-    0,  134,  134,    0,    0,    0,  124,  125,  126,  127,
-  128,   75,   75,  131,  132,    0,   63,   63,   63,   63,
-  139,    0,    0,    0,    0,    0,    0,    0,    0,  149,
-    0,    0,    0,    0,    0,  150,  151,  152,  153,    0,
-    0,   63,   63,    0,    0,    0,  182,    0,  154,  156,
-  157,  158,  159,  160,  161,    0,    0,  162,    0,    0,
-  163,  164,  165,  149,    0,    0,    0,    0,    0,  150,
-  151,  152,  153,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  154,  156,  157,  158,  159,  160,  161,    0,
-    0,  162,    0,    0,  163,  164,  165,    0,    0,    0,
-    0,    0,    0,  216,  217,  218,  219,  220,  221,  222,
-  223,  224,  225,  226,  227,  228,  229,    0,    0,    0,
-  150,  151,  152,  153,    0,    0,    0,    0,  243,    0,
-    0,    0,    0,    0,    0,    0,  158,  159,  160,  161,
-    0,    0,  162,    0,    0,  163,  164,  165,    0,    0,
+  103,   89,   89,   89,   89,   89,  111,   90,  119,   90,
+   90,   90,   90,   90,    0,  149,    0,    0,   90,  167,
+    0,    0,    0,    0,    0,   90,   90,   90,   90,    0,
+    0,    0,    0,    0,   90,   90,    0,   90,   90,   90,
+   90,    0,  151,  152,  153,  154,   92,   92,   92,   92,
+    0,  149,    0,    0,    0,   92,  157,  158,  159,  160,
+  161,  162,    0,    0,  163,    0,    0,  164,  165,  166,
+  111,   92,   92,    0,   92,   92,   92,    0,  150,    0,
+    0,    0,    0,    0,  151,  152,  153,  154,    0,    0,
+   91,   91,   91,   91,    0,    0,    0,  155,  157,  158,
+  159,  160,  161,  162,    0,    0,  163,    0,    0,  164,
+  165,  166,    0,    0,  150,   91,   91,    0,   91,    0,
+  151,  152,  153,  154,    0,    0,    0,    0,    0,  234,
+    0,    0,    0,  155,  157,  158,  159,  160,  161,  162,
+   94,    0,  163,    0,    0,  164,  165,  166,  104,    0,
+    0,    0,  109,  263,    0,  118,    0,    0,    0,    0,
+    0,    0,  125,  126,  127,  128,  129,    0,    0,  132,
+  133,    0,    0,  150,    0,    0,  140,    0,    0,  151,
+  152,  153,  154,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  157,  158,  159,  160,  161,  162,    0,
+    0,  163,    0,  183,  164,  165,  166,    0,    0,    0,
+    0,    0,    0,    0,    0,  151,  152,  153,  154,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  158,  159,  160,  161,  162,    0,    0,  163,    0,    0,
+  164,  165,  166,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+  217,  218,  219,  220,  221,  222,  223,  224,  225,  226,
+  227,  228,  229,  230,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  244,    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,    0,    0,
-    0,    0,    0,    0,  294,    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,  309,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  296,    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,  312,
 };
 dEXT short yycheck[] = {                                      13,
-   41,   36,   36,   85,   93,   91,   40,   59,   41,   93,
-   41,   44,   41,   59,   40,   44,  123,   93,  181,   59,
-   90,   93,   41,   91,  257,   41,   59,   36,  321,   58,
-   59,   41,   46,   93,   63,   91,    0,  123,   59,  190,
-  257,  318,  319,   57,  257,   41,  323,   61,   40,   59,
-   40,  121,  297,  298,   40,  123,   91,   41,   40,  352,
-   93,   40,  339,   59,   93,   91,  343,  123,    6,   33,
-    8,  123,   36,   37,   38,   59,   40,   40,   42,   43,
-   41,   45,   41,  123,  278,   41,   40,   44,  123,   41,
-   40,  105,  106,   31,   32,   59,  123,  123,  276,  277,
-   64,   41,   44,   59,    0,   41,   41,   59,  178,   93,
-   59,   40,   59,  183,  123,   59,   59,  268,   59,   59,
-   59,  284,  260,   59,   59,  123,  257,   91,  142,  143,
-  144,  145,  146,  147,  148,   40,   40,   33,   93,   41,
-   36,   37,   38,   59,   40,   40,   42,   43,  299,   45,
-  257,  125,  166,  167,  168,  169,  170,  171,  172,  123,
-    0,  125,  126,   59,   91,   36,   41,  181,   64,   91,
-  298,  185,  186,   40,  188,   59,  190,  125,   41,   41,
-   41,   41,   41,  197,   40,  199,  200,   93,   91,   41,
-  204,  342,  125,   33,   59,   91,   36,   37,   38,  125,
-   40,  125,   42,   43,  125,   45,  123,   41,  297,  298,
-  125,  257,   41,  297,  298,   41,  230,   59,  232,   59,
-  123,  297,  298,  258,   64,  297,  298,  123,  314,  125,
-  126,   41,   41,   40,  123,   44,   41,  297,  298,  272,
-  273,  274,  275,  272,  273,  274,  275,  329,  257,   58,
-   59,   91,  281,  262,   63,   41,  297,  298,  287,  288,
-  289,  290,  296,   59,  297,  279,  297,  298,  297,  298,
-  284,  300,  301,  302,  303,  304,  305,  306,  297,  298,
-  309,  297,  298,  123,   93,   41,  126,  301,  272,  273,
-  274,  275,  256,  257,  258,  259,  260,  261,   59,  263,
-  264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
-  274,  275,   41,  297,  298,  279,  280,   41,  282,  283,
-  284,  285,  286,   59,  338,   63,   41,  291,  292,  293,
-  294,  295,  296,   13,  338,  299,  297,  298,  297,  298,
-  297,  298,  297,  298,  308,  143,  310,  311,  297,  298,
-  297,  298,  188,   91,  297,  298,  297,  298,  297,  298,
-  256,  257,  258,  259,  260,  261,  125,  263,  264,  265,
-  266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
-  125,  297,  298,  279,  280,  123,  282,  283,  284,  285,
-  286,  297,  298,  301,   95,  291,  292,  293,  294,  295,
-  296,   -1,   -1,  299,   -1,   -1,  309,   -1,   -1,  312,
-  313,  314,  308,   -1,  310,  311,  256,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,
-   91,   -1,  272,  273,  274,  275,   -1,   -1,   -1,  279,
-  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
-   91,  291,  292,  293,  294,  295,  296,   -1,   -1,  299,
-   -1,   -1,  123,  272,  273,  274,  275,   -1,  308,   33,
-  310,  311,   36,   37,   38,   -1,   40,   41,   42,   43,
-   44,   45,  123,   -1,   -1,   -1,   -1,   -1,  297,  298,
-   -1,  300,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,
-   64,  266,  267,  268,   -1,  270,  271,  266,  267,  268,
-   -1,  270,  271,   96,   97,   98,   99,  100,  101,   -1,
-   -1,  266,  267,  268,   -1,  270,  271,   91,   -1,   93,
-   33,   -1,   -1,   36,   37,   38,   -1,   40,   41,   42,
-   43,   44,   45,  281,  272,  273,  274,  275,   -1,  287,
-  288,  289,  290,   -1,   -1,   58,   59,   -1,   -1,  123,
-   63,   64,  126,  301,  302,  303,  304,  305,  306,  297,
-  298,  309,   43,   -1,  312,  313,  314,   -1,   -1,   -1,
-   51,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   33,
-   93,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
-   26,   45,   -1,   -1,   -1,   -1,   -1,   -1,  191,   -1,
-   -1,   -1,   -1,   -1,   -1,   59,   -1,   43,   44,   90,
-   64,   -1,   -1,  126,   50,   -1,  287,  288,  289,  290,
-  296,  297,  298,   -1,  300,   -1,   62,   63,   64,   65,
-   41,   -1,  113,   44,  305,  306,   -1,   91,  309,   -1,
-  121,  312,  313,  314,   -1,   -1,   -1,   58,   59,  325,
-   -1,   -1,   63,   -1,   -1,  306,  332,   -1,  309,   -1,
-  336,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,  123,
-  106,   -1,  126,  349,  350,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   93,  257,  258,  259,  260,  261,   -1,  263,
-  264,  265,   -1,   -1,   -1,  269,   -1,  178,  272,  273,
-  274,  275,  183,   -1,   -1,   -1,  280,  281,  282,  283,
-  284,  285,  286,  287,  288,  289,  290,  291,  292,  293,
-  294,  295,  296,  297,  298,  299,  300,  301,  302,  303,
-  304,  305,  306,   -1,  308,  309,  310,  311,  312,  313,
-  314,   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,
-  263,  264,  265,   -1,   -1,   -1,  269,   -1,   -1,  272,
-  273,  274,  275,   -1,   -1,   -1,   -1,  280,  281,  282,
-  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
-  293,  294,  295,  296,  297,  298,  299,  300,  301,  302,
-  303,  304,  305,  306,   -1,  308,  309,  310,  311,  312,
-  313,  314,  256,  257,  258,  259,  260,  261,   -1,  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,   91,  291,  292,  293,
-  294,  295,  296,   33,   -1,  299,   36,   37,   38,   -1,
-   40,   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   -1,   -1,  123,   59,
-  281,   -1,   -1,   -1,   64,   -1,  287,  288,  289,  290,
-   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   33,
-   -1,   91,   36,   37,   38,   -1,   40,   -1,   42,   43,
-   -1,   45,   -1,   -1,   -1,   -1,   13,   -1,   -1,   -1,
-   17,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   64,   -1,   -1,  123,   -1,   -1,  126,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   42,   -1,   -1,   45,   91,
-   -1,   -1,   -1,   -1,   -1,   33,   -1,   91,   36,   37,
-   38,   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  123,   -1,   80,   -1,   -1,   64,   -1,   -1,  123,
-   -1,   -1,  126,   -1,   -1,   -1,   -1,   94,   -1,   -1,
+   59,   41,   36,   36,   44,   93,   36,   59,   91,   86,
+   40,  325,   91,   41,  257,  191,   40,   43,   58,   59,
+  182,  257,   59,   63,   41,   51,   41,   59,   41,  257,
+   41,   91,   46,   41,  322,  323,   91,   59,   41,  327,
+  123,   41,  356,   57,  123,  297,  298,   61,   41,   44,
+   40,   59,   40,   93,   40,  343,   59,  278,   91,  347,
+  123,   41,   41,  123,   41,   91,   59,   91,  123,   40,
+   97,   98,   99,  100,  101,  102,   59,   41,    0,   59,
+   59,   59,   59,   59,   40,   59,  123,   59,  114,  123,
+  123,  123,  106,  107,  270,   59,  122,  276,  277,  123,
+   59,   41,  272,  273,  274,  275,   40,   40,   44,   40,
+  260,   33,   40,   93,   36,   37,   38,  123,   40,   59,
+   42,   43,  257,   45,  286,   93,  302,  297,  298,  143,
+  144,  145,  146,  147,  148,  149,   40,   59,   40,  266,
+  267,  268,   64,  270,  271,   41,   40,   91,  257,   36,
+   93,   41,    0,  167,  168,  169,  170,  171,  172,  173,
+  125,   93,  125,   93,   91,  192,  298,   40,  182,   91,
+  346,   41,  186,  187,   41,  189,   41,  191,   93,   41,
+   93,   41,   91,   40,  198,   33,  200,  201,   36,   37,
+   38,  205,   40,   59,   42,   43,   41,   45,  257,  125,
+  125,  123,  125,  125,  126,  125,   59,  123,   41,  297,
+  298,   59,   41,  125,  123,   41,   64,  231,   59,  233,
+   41,   41,  248,  257,   44,  258,  309,  253,  262,  312,
+  313,  314,  272,  273,  274,  275,   41,   41,   58,   59,
+   44,  281,   40,   91,  123,  297,  298,  287,  288,   41,
+  290,  123,   44,   41,   58,   59,  333,  297,  298,  314,
+  300,  301,  302,  303,  304,  305,  296,  281,    0,  297,
+  298,   63,  286,   93,   41,  123,   59,  125,  126,   41,
+  297,  298,  297,  298,  297,  298,  297,  298,   59,   93,
+  304,   41,  272,  273,  274,  275,   59,  297,  298,   91,
+   41,   33,  297,  298,   36,   37,   38,    8,   40,   32,
+   42,   43,  144,   45,  297,  298,   13,  297,  298,  297,
+  298,  297,  298,  297,  298,  297,  298,   59,  342,  297,
+  298,  123,   64,  342,  256,  257,  258,  259,  260,  261,
+  189,  263,  264,  265,  266,  267,  268,  269,  270,  271,
+  272,  273,  274,  275,  297,  298,  304,  279,  280,   91,
+  282,  283,  284,  285,  286,  297,  298,  297,  298,  291,
+  292,  293,  294,  295,  296,   91,   96,  299,   41,   41,
+  289,   44,  297,  298,  297,  298,  308,   -1,  310,  311,
+   -1,  123,   -1,   -1,  126,   58,   59,  306,   -1,   -1,
+  309,   63,   -1,  312,  313,  314,   -1,  123,  256,  257,
+  258,  259,  260,  261,   -1,  263,  264,  265,  266,  267,
+  268,  269,  270,  271,  272,  273,  274,  275,   -1,   91,
+   93,  279,  280,   -1,  282,  283,  284,  285,  286,   -1,
+   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,
+   -1,  299,  272,  273,  274,  275,   -1,   -1,   -1,   91,
+  308,  123,  310,  311,   -1,   -1,   -1,   -1,  272,  273,
+  274,  275,   91,   -1,   91,   -1,   33,  297,  298,   36,
+   37,   38,   -1,   40,   41,   42,   43,   44,   45,  281,
+   -1,  123,   -1,  297,  298,  287,  288,  289,  290,   -1,
+   -1,   58,   59,   -1,  123,  122,   63,   64,  300,  301,
+  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,  256,  257,  258,  259,  260,  261,
+   -1,  263,  264,  265,   91,   -1,   93,  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,   41,  123,  299,   44,  126,
+   -1,   -1,   91,  289,  290,   -1,  308,   33,  310,  311,
+   36,   37,   38,   59,   40,   41,   42,   43,   44,   45,
+  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
+   -1,   -1,   58,   59,  123,   -1,   -1,   63,   64,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   93,   -1,  281,
+   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
+   -1,  248,   -1,   -1,  297,  298,  253,   93,  300,  301,
+  302,  303,  304,  305,  306,   -1,   41,  309,   -1,   44,
+  312,  313,  314,   -1,   -1,  287,  288,  289,  290,   -1,
+   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,
+  126,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   -1,   -1,   -1,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,   -1,   -1,   93,   -1,
+  257,  258,  259,  260,  261,   -1,  263,  264,  265,   -1,
+   -1,   -1,  269,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,  280,  281,  282,  283,  284,  285,  286,
+  287,  288,  289,  290,  291,  292,  293,  294,  295,  296,
+  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
+   -1,  308,  309,  310,  311,  312,  313,  314,   41,   -1,
+   -1,   44,   -1,   41,   -1,   -1,   44,   -1,  287,  288,
+  289,  290,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
+   58,   59,   -1,   -1,   -1,   63,  305,  306,   -1,  125,
+  309,   -1,   -1,  312,  313,  314,  272,  273,  274,  275,
+   -1,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
+   93,   -1,  125,  269,   -1,   93,  272,  273,  274,  275,
+   -1,  297,   -1,   -1,  280,  281,  282,  283,  284,  285,
+  286,  287,  288,  289,  290,  291,  292,  293,  294,  295,
+  296,  297,  298,  299,  300,  301,  302,  303,  304,  305,
+  306,   -1,  308,  309,  310,  311,  312,  313,  314,   33,
+   -1,   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,
+   -1,   45,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   59,  281,   -1,   -1,   -1,
+   64,   -1,  287,  288,  289,  290,   -1,   -1,   -1,   -1,
+   -1,   -1,  297,  298,   13,  300,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   33,   -1,   91,   36,   37,
+   38,   -1,   40,   -1,   42,   43,   26,   45,   -1,   -1,
+  266,  267,  268,   42,  270,  271,   45,   -1,   -1,   -1,
+   -1,   59,   -1,   43,   44,   -1,   64,   -1,   -1,  123,
+   50,   -1,  126,  266,  267,  268,   -1,  270,  271,   -1,
+   -1,   -1,   62,   63,   64,   65,   -1,   -1,   -1,   -1,
+   -1,   33,   81,   91,   36,   37,   38,   -1,   40,   -1,
+   42,   43,   -1,   45,   -1,   -1,   95,   -1,   -1,  272,
+  273,  274,  275,   -1,  272,  273,  274,  275,   -1,   -1,
+   -1,   -1,   64,  281,   -1,  123,   -1,  107,  126,  287,
+  288,  289,  290,   -1,  297,  298,   -1,  300,   -1,  297,
+  298,   -1,  300,  301,  302,  303,  304,  305,  306,   91,
+   -1,  309,  141,   -1,   33,   -1,   -1,   36,   37,   38,
+   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   33,   -1,
-   -1,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
-   45,   -1,  287,   -1,  289,  290,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  140,   -1,  123,   -1,   -1,  126,   64,
-  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
-   -1,   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,
-  177,   -1,  272,  273,  274,  275,   -1,  184,   -1,  279,
-  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
-   -1,  291,  292,  293,  294,  295,  296,   91,  123,  299,
-   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   41,
-  310,  311,   44,  257,  258,  259,  260,  261,  262,  263,
-  264,  265,   -1,   -1,   91,  269,   -1,   -1,   -1,  123,
-   -1,   63,   -1,   -1,   -1,   -1,  280,  289,  282,  283,
+   -1,  123,   -1,   -1,  126,   64,   -1,   -1,   -1,  178,
+   -1,   -1,   -1,   -1,   -1,   -1,  185,   -1,   -1,   -1,
+   -1,   -1,  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,  306,  299,  123,  309,   -1,   91,
-  312,  313,  314,   41,  308,   -1,  310,  311,   -1,  257,
+  294,  295,  296,   -1,  123,  299,   -1,  126,   -1,   -1,
+   -1,   -1,   -1,   -1,  308,   -1,  310,  311,  256,  257,
   258,  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,
-   -1,  269,   -1,   -1,   -1,   63,   -1,   -1,   -1,   -1,
-   -1,  123,  280,   -1,  282,  283,  284,  285,  286,   -1,
+   91,  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,   91,
+   -1,  299,  123,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  308,   -1,  310,  311,   -1,  257,  258,  259,  260,  261,
+  262,  263,  264,  265,   -1,   33,   -1,  269,   36,   37,
+   38,  123,   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,  299,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,  310,  311,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,
+  259,  260,  261,   91,  263,  264,  265,   -1,   33,   -1,
+  269,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
+   45,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
+   -1,   -1,  291,  292,  293,  294,  295,  296,  126,   64,
+  299,   -1,  299,  300,  301,   -1,  303,   -1,   -1,  308,
+   -1,  310,  311,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   33,   -1,   91,   36,   37,   38,
+   -1,   40,  329,   42,   43,   -1,   45,   -1,   -1,  336,
+   -1,   -1,   -1,  340,   -1,   -1,  287,  288,  289,  290,
+   59,   -1,   -1,   -1,   -1,   64,  353,  354,  123,   -1,
+   -1,  126,   -1,  304,  305,  306,   -1,   -1,  309,   -1,
+   -1,  312,  313,  314,   -1,  287,   -1,  289,  290,   -1,
+   33,   -1,   91,   36,   37,   38,   -1,   40,   -1,   42,
+   43,   -1,   45,  305,  306,   -1,   -1,  309,   -1,   -1,
+  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   64,   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,
+  258,  259,  260,  261,   -1,  263,  264,  265,   91,   33,
+   93,  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,
-   -1,  299,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
-  308,   -1,  310,  311,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,  264,
-  265,   -1,   -1,   -1,  269,  123,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
-  285,  286,   -1,   -1,   -1,   91,  291,  292,  293,  294,
-  295,  296,   33,   -1,  299,   36,   37,   38,   -1,   40,
-   -1,   42,   43,  308,   45,  310,  311,   -1,   -1,   -1,
-   -1,   -1,   -1,  287,  288,  289,  290,  123,   59,   -1,
-   -1,   -1,   -1,   64,   -1,   -1,   -1,  301,  302,  303,
-  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
-  314,   -1,  289,  290,   -1,   -1,   -1,   -1,   33,   -1,
-   91,   36,   37,   38,   -1,   40,   41,   42,   43,  306,
-   45,   -1,  309,   -1,   -1,  312,  313,  314,   -1,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   64,
-   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   33,   -1,   91,   36,   37,   38,
-   -1,   40,   -1,   42,   43,   -1,   45,   -1,   -1,   -1,
-   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   -1,   -1,   64,   -1,   -1,   -1,   -1,
-   -1,  126,  300,  301,  302,  303,  304,  305,  306,   -1,
-   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
-   -1,   -1,   91,   33,   93,   -1,   36,   37,   38,   -1,
-   40,   41,   42,   43,   -1,   45,   -1,   -1,   -1,   -1,
-   -1,  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   64,   -1,   -1,  126,  304,  305,
-  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
-  261,   91,  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,   -1,   -1,
-  291,  292,  293,  294,  295,  296,  126,   -1,  299,   -1,
-   -1,   -1,   -1,   -1,   93,   -1,   -1,  308,   41,  310,
-  311,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
+   64,  299,   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,
+  308,   -1,  310,  311,   -1,   -1,   -1,   -1,   41,   -1,
+   -1,   44,  257,  258,  259,  260,  261,   91,  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,   -1,   -1,  291,  292,  293,  294,
-  295,  296,   -1,   -1,  299,   -1,   -1,   -1,   -1,   -1,
-   93,   -1,   -1,  308,   -1,  310,  311,   -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,
-  299,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,
-   -1,  310,  311,   -1,   -1,   -1,   -1,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   91,   33,   -1,  269,
-   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,   45,
-  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,
-   -1,  291,  292,  293,  294,  295,  296,   -1,   64,  299,
-   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,  308,   -1,
-  310,  311,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
-   -1,   -1,  281,   33,   -1,   91,   36,   37,   38,  288,
-   40,   41,   42,   43,   -1,   45,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   64,   -1,   -1,   -1,   -1,   -1,
-  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,
+  295,  296,  126,   -1,  299,   -1,   -1,   -1,   -1,   -1,
+   93,   -1,   -1,  308,   41,  310,  311,   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,
+   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,   -1,
+  299,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,  308,
+   -1,  310,  311,   -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,  299,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  308,   -1,  310,  311,   -1,
+   -1,   -1,   -1,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   91,   33,   -1,  269,   36,   37,   38,   -1,
+   40,   -1,   42,   43,   -1,   45,  280,   -1,  282,  283,
+  284,  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,
+  294,  295,  296,   -1,   64,  299,   -1,  126,   -1,   -1,
+   -1,   -1,   -1,   -1,  308,   -1,  310,  311,   -1,  272,
   273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   33,
-   -1,   91,   36,   37,   38,   -1,   40,   41,   42,   43,
+   -1,   91,   36,   37,   38,  288,   40,   41,   42,   43,
    -1,   45,   -1,   -1,  297,  298,   -1,  300,  301,  302,
   303,  304,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    64,   -1,   -1,   -1,   -1,   -1,  126,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  257,  258,  259,  260,  261,   91,  263,  264,
-  265,   -1,   33,   -1,  269,   36,   37,   38,   -1,   40,
-   -1,   42,   43,   -1,   45,  280,   -1,  282,  283,  284,
-  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
-  295,  296,  126,   64,  299,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
-  256,  257,  258,  259,  260,  261,   -1,  263,  264,  265,
-   91,   -1,   -1,  269,   41,   -1,   -1,   44,   -1,   -1,
-   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,  285,
-  286,   58,   59,   -1,   -1,  291,  292,  293,  294,  295,
-  296,   91,   -1,  299,   -1,  126,   -1,   -1,   -1,   -1,
-   41,   -1,  308,   44,  310,  311,   -1,  257,  258,  259,
-  260,  261,   -1,  263,  264,  265,   93,   58,   59,  269,
-   -1,   -1,   63,  123,   -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,  299,
-   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,  308,   41,
-  310,  311,   44,  257,  258,  259,  260,  261,   -1,  263,
-  264,  265,   -1,   -1,   -1,  269,   58,   59,   -1,   -1,
-   -1,   63,  123,   -1,   -1,   -1,  280,   -1,  282,  283,
+   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,   -1,  281,   33,   -1,   91,   36,   37,
+   38,   -1,   40,   41,   42,   43,   -1,   45,   -1,   -1,
+  297,  298,   -1,  300,  301,  302,  303,  304,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   64,   -1,   -1,   -1,
+   -1,   -1,  126,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  257,  258,
+  259,  260,  261,   91,  263,  264,  265,   -1,   33,   -1,
+  269,   36,   37,   38,   -1,   40,   -1,   42,   43,   -1,
+   45,  280,   -1,  282,  283,  284,  285,  286,   -1,   -1,
+   -1,   -1,  291,  292,  293,  294,  295,  296,  126,   64,
+  299,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  308,
+   -1,  310,  311,   -1,   -1,   -1,  256,  257,  258,  259,
+  260,  261,   -1,  263,  264,  265,   91,   -1,   -1,  269,
+   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,
+  280,   -1,  282,  283,  284,  285,  286,   58,   59,   -1,
+   -1,  291,  292,  293,  294,  295,  296,   91,   -1,  299,
+   -1,  126,   -1,   -1,   -1,   -1,   41,   -1,  308,   44,
+  310,  311,   -1,  257,  258,  259,  260,  261,   -1,  263,
+  264,  265,   93,   58,   59,  269,   -1,   -1,   63,  123,
+   -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,  299,   -1,   -1,   -1,   91,
-   -1,   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,
-   -1,   -1,   41,   -1,   -1,   44,  257,  258,  259,  260,
-  261,   -1,  263,  264,  265,   -1,   -1,   -1,  269,   58,
-   59,  123,   -1,   -1,   63,   -1,   -1,   -1,   -1,  280,
-   -1,  282,  283,  284,  285,  286,   -1,   -1,   -1,   -1,
-  291,  292,  293,  294,  295,  296,   -1,   -1,  299,   -1,
-   41,   -1,   91,   44,   93,   -1,   -1,  308,   -1,  310,
-  311,   -1,   -1,   -1,   -1,   -1,   -1,   58,   59,  289,
-  290,   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,
-   -1,   -1,   -1,   -1,  123,  305,  306,   -1,   -1,  309,
-   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,
-  297,  298,   93,  300,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
-  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   -1,   -1,  123,   58,   59,   -1,  297,  298,   63,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
-   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
-   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
-   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
-  289,  290,   -1,   -1,   -1,   -1,   -1,  123,  297,  298,
-   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
-  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   -1,
-  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   93,   -1,
+  294,  295,  296,   -1,   -1,  299,   91,   -1,   93,   -1,
+   -1,   -1,   -1,   -1,  308,   41,  310,  311,   44,  257,
+  258,  259,  260,  261,   -1,  263,  264,  265,   -1,   -1,
+   -1,  269,   58,   59,   -1,   -1,   -1,   63,  123,   -1,
+   -1,   -1,  280,   -1,  282,  283,  284,  285,  286,   -1,
+   -1,   -1,   -1,  291,  292,  293,  294,  295,  296,   -1,
+   -1,  299,   -1,   -1,   -1,   91,   -1,   93,   -1,   -1,
+  308,   -1,  310,  311,   -1,   -1,   -1,   -1,   41,   -1,
+   -1,   44,  257,  258,  259,  260,  261,   -1,  263,  264,
+  265,   -1,   -1,   -1,  269,   58,   59,  123,   -1,   -1,
+   63,   -1,   -1,   -1,   -1,  280,   -1,  282,  283,  284,
+  285,  286,   -1,   -1,   -1,   -1,  291,  292,  293,  294,
+  295,  296,   -1,   -1,  299,   -1,   41,   -1,   91,   44,
+   93,   -1,   -1,  308,   -1,  310,  311,   -1,   -1,   -1,
+   -1,   -1,   -1,   58,   59,  289,  290,   -1,   63,   -1,
+   -1,  272,  273,  274,  275,   -1,   -1,   -1,   -1,   -1,
+  123,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
+  314,   -1,   -1,   -1,   -1,   -1,  297,  298,   93,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
-   -1,   -1,  287,  288,  289,  290,   -1,   -1,  123,   -1,
-   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   -1,   -1,  123,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
   305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,
-   -1,   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,
+   -1,   -1,   91,   -1,   93,   -1,  272,  273,  274,  275,
+   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
    -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
    -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
   306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-   25,   26,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
-   -1,   91,   37,   93,   41,   -1,   -1,   44,   43,   44,
-   45,   58,   59,   -1,   -1,   50,   63,   -1,   -1,   -1,
-   -1,   58,   59,   -1,   -1,   -1,   63,   62,   63,   64,
-   65,   -1,   -1,  123,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   93,  272,  273,  274,
-  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
-   -1,  106,  287,  288,  289,  290,  123,   -1,   -1,   58,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,  272,
+  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
+   -1,   -1,   -1,  123,  297,  298,   -1,  300,  301,  302,
+  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   -1,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,
    59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
   305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
-   -1,   -1,   -1,   -1,   -1,   41,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,
-  165,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  123,   -1,   -1,   -1,   -1,   41,
-   -1,   -1,   44,   -1,  189,   91,   -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,  272,  273,  274,  275,   -1,  123,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   91,   -1,   93,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
+   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  290,   -1,   -1,  123,   -1,   -1,   -1,  297,  298,
+   -1,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
    -1,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
-  290,   93,   -1,   -1,   -1,   -1,   -1,  297,  298,   -1,
+  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
   300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
-   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
-   41,  123,   -1,   44,  281,  272,  273,  274,  275,   -1,
-  287,  288,  289,  290,  281,   -1,   -1,   58,   59,   -1,
-  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-  297,  298,  309,  300,  301,  312,  313,  314,   -1,   -1,
+   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,
+   41,   -1,   -1,   44,   -1,   -1,   -1,   91,   -1,   93,
+   41,   -1,   -1,   44,   -1,   -1,   -1,   58,   59,   -1,
+   -1,   -1,   63,   -1,   -1,   -1,   -1,   58,   59,   -1,
+   -1,   -1,   63,   -1,   -1,   -1,   -1,   -1,   -1,  123,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   -1,   93,  272,  273,  274,  275,   -1,   41,   -1,
    -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
-  289,  290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,
+  289,  290,  123,   -1,   -1,   58,   59,   -1,  297,  298,
    63,  300,  301,  302,  303,  304,  305,  306,   -1,   -1,
-  309,   -1,   -1,  312,  313,  314,  272,  273,  274,  275,
-   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,
-   93,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
-   -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
-  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
-  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
-   -1,   -1,   -1,   93,   -1,  287,  288,  289,  290,   -1,
-   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
-  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   41,   -1,
-   -1,   44,   -1,   -1,   -1,   -1,   -1,   93,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   58,   59,   -1,   -1,   -1,
-   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
-  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
-   93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
-  301,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   41,   -1,   -1,   44,   -1,   -1,
+  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,   -1,
+   -1,   41,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   93,   -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,
+  123,   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,
+   -1,   91,   -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,  272,  273,
+  274,  275,   -1,  123,   -1,   -1,   -1,  281,   -1,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,
+   -1,   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,
+  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
+  314,  272,  273,  274,  275,   -1,   41,  123,   -1,   44,
+  281,  272,  273,  274,  275,   -1,  287,  288,  289,  290,
+  281,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,  297,  298,  309,  300,
+  301,  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   93,   -1,
-   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,  272,
-  273,  274,  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,
+  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
    -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
-   -1,   -1,   -1,   -1,  297,  298,   93,  300,  301,  302,
+   -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
   303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
   313,  314,  272,  273,  274,  275,   -1,   41,   -1,   -1,
-   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,
+   44,  281,   -1,   -1,   -1,   -1,   93,  287,  288,  289,
   290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
   300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
    -1,   -1,  312,  313,  314,   -1,  272,  273,  274,  275,
    -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   93,
    -1,  287,  288,  289,  290,   -1,   -1,   -1,   58,   59,
    -1,  297,  298,   63,  300,  301,  302,  303,  304,  305,
-  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,
-  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
-   -1,   -1,   -1,   93,  287,  288,  289,  290,   -1,   -1,
-   -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
-  303,  304,  305,  306,   -1,   -1,   -1,  272,  273,  274,
+  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,
+   -1,   -1,   -1,   -1,   41,   -1,   -1,   44,   -1,   -1,
+   -1,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   58,   59,   -1,   -1,   -1,   63,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
   275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
    -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,   58,
    59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
-  305,  306,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
-   41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,
-  287,  288,  289,  290,   93,   -1,   -1,   58,   59,   -1,
-  297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
-   -1,   -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,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+   41,   -1,   -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   93,   -1,   -1,   58,   59,   -1,
+   -1,   -1,   63,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
+  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,
+  297,  298,   93,  300,  301,  302,  303,  304,  305,  306,
+   -1,   -1,  309,   -1,   -1,  312,  313,  314,  272,  273,
   274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
-   -1,   -1,   -1,  287,  288,  289,  290,   -1,   93,   -1,
+   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,   -1,
    58,   59,   -1,  297,  298,   63,  300,  301,  302,  303,
-  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
+  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,
+  314,   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,
    44,  281,   -1,   -1,   -1,   93,   -1,  287,  288,  289,
   290,   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,
-  300,  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+  300,  301,  302,  303,  304,  305,  306,   -1,   -1,  309,
+   -1,   -1,  312,  313,  314,  272,  273,  274,  275,   -1,
    41,   -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   93,
   287,  288,  289,  290,   -1,   -1,   -1,   58,   59,   -1,
   297,  298,   63,  300,  301,  302,  303,  304,  305,  306,
@@ -957,68 +932,93 @@ dEXT short yycheck[] = {                                      13,
    -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
   281,   -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,
    93,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
-  301,  302,  303,  304,  305,   -1,   -1,  272,  273,  274,
-  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
-   -1,   -1,  287,  288,   -1,  290,   -1,   -1,   93,   58,
-   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
-  305,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,
+  301,  302,  303,  304,  305,  306,   -1,   -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,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,
    -1,   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,   -1,   -1,   -1,   93,   -1,   58,   59,   -1,  297,
-  298,   63,  300,  301,  302,  303,  304,  305,   -1,   -1,
-   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
+  288,  289,  290,   -1,   93,   -1,   58,   59,   -1,  297,
+  298,   63,  300,  301,  302,  303,  304,  305,  306,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  272,  273,
   274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,
-   -1,   93,   -1,  287,  288,   -1,   41,   -1,   -1,   44,
-   58,   59,  123,  297,  298,   63,  300,  301,  302,  303,
-  304,   -1,   -1,   58,   59,   41,   -1,   -1,   44,   -1,
-   -1,  272,  273,  274,  275,   41,   -1,   -1,   44,   -1,
-  281,   -1,   58,   59,   -1,   93,  287,  288,   -1,   -1,
-   -1,   -1,   58,   59,   -1,   -1,  297,  298,   93,  300,
-  301,  302,  303,  304,   -1,   41,   -1,   -1,   44,  272,
-  273,  274,  275,   -1,   -1,   -1,   -1,   93,  281,   -1,
-   -1,   -1,   58,   59,  287,  288,   58,   93,   -1,   -1,
-   -1,   63,   -1,   -1,  297,  298,   -1,  300,  301,  302,
-  303,  304,   -1,   -1,   -1,   -1,   -1,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,   -1,  281,   93,   -1,   91,
-   -1,   -1,  287,  288,   -1,   63,   -1,   -1,   -1,   -1,
-   -1,   -1,  297,  298,   -1,  300,  301,  302,  303,  304,
+   -1,   93,   -1,  287,  288,  289,  290,   -1,   -1,   -1,
+   58,   59,   -1,  297,  298,   63,  300,  301,  302,  303,
+  304,  305,  306,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,
+  281,   -1,   -1,   -1,   -1,   93,  287,  288,  289,  290,
+   -1,   -1,   -1,   58,   59,   -1,  297,  298,   63,  300,
+  301,  302,  303,  304,  305,  306,   -1,   -1,   -1,  272,
+  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,  290,   93,   -1,
+   -1,   58,   59,   -1,  297,  298,   63,  300,  301,  302,
+  303,  304,  305,  306,   -1,   -1,   -1,  272,  273,  274,
+  275,   -1,   41,   -1,   -1,   44,  281,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,  290,   93,   -1,   -1,   58,
+   59,   -1,  297,  298,   63,  300,  301,  302,  303,  304,
+  305,   -1,   -1,  272,  273,  274,  275,   -1,   41,   -1,
+   -1,   44,  281,   -1,   -1,   -1,   -1,   -1,  287,  288,
+   -1,   -1,   -1,   -1,   93,   58,   59,   -1,  297,  298,
+   63,  300,  301,  302,  303,  304,  305,   -1,   -1,   -1,
+  272,  273,  274,  275,   -1,   41,   -1,   -1,   44,  281,
+   -1,   -1,   -1,   -1,   -1,  287,  288,   -1,   -1,   -1,
+   93,   -1,   58,   59,   -1,  297,  298,   63,  300,  301,
+  302,  303,  304,   -1,   -1,   -1,   91,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   41,
+   63,   -1,   44,  281,   -1,   -1,   -1,   93,   -1,  287,
+  288,   -1,   -1,   -1,   -1,   -1,   58,   59,  123,  297,
+  298,   63,  300,  301,  302,  303,  304,   -1,   91,   -1,
+   -1,   58,   -1,   -1,   -1,   -1,   63,  272,  273,  274,
+  275,   -1,   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,
+   -1,   93,  287,  288,   -1,   -1,   -1,   -1,   -1,   -1,
+  123,   -1,  297,  298,   91,  300,  301,  302,  303,  304,
+   -1,   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,
+   -1,   -1,   -1,   -1,  281,   -1,   -1,   -1,   -1,   -1,
+  287,  288,   -1,   -1,   -1,   63,  123,   -1,   -1,   -1,
+  297,  298,   -1,  300,  301,  302,  303,  304,   -1,   -1,
    -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,   -1,
-   -1,  123,  281,   91,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  281,   91,   -1,   -1,   -1,   -1,   25,   26,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,  298,
-   -1,  300,  301,  302,  303,  304,  287,  288,  289,  290,
-  272,  273,  274,  275,   -1,  123,   -1,   -1,   -1,  281,
-   -1,  302,  303,  304,  305,  306,   -1,   -1,  309,   -1,
-   -1,  312,  313,  314,   91,  297,  298,   -1,  300,  301,
-  302,  303,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  272,  273,  274,  275,   -1,   -1,
-   -1,   -1,   -1,  281,   -1,   -1,  123,  272,  273,  274,
-  275,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  297,
-  298,   -1,  300,  301,  302,   -1,  272,  273,  274,  275,
-   -1,   -1,  297,  298,   30,   -1,  272,  273,  274,  275,
-   -1,   -1,   38,   -1,   -1,   -1,   42,   -1,   -1,   45,
-   -1,  297,  298,   -1,   -1,   -1,   52,   53,   54,   55,
-   56,  297,  298,   59,   60,   -1,  272,  273,  274,  275,
-   66,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  281,
+   37,  300,  301,  302,  303,  304,   43,   44,   45,  272,
+  273,  274,  275,   50,   -1,  123,   -1,   -1,  281,   91,
+   -1,   -1,   -1,   -1,   -1,   62,   63,   64,   65,   -1,
+   -1,   -1,   -1,   -1,  297,  298,   -1,  300,  301,  302,
+  303,   -1,  287,  288,  289,  290,  272,  273,  274,  275,
+   -1,  123,   -1,   -1,   -1,  281,  301,  302,  303,  304,
+  305,  306,   -1,   -1,  309,   -1,   -1,  312,  313,  314,
+  107,  297,  298,   -1,  300,  301,  302,   -1,  281,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,   -1,
+  272,  273,  274,  275,   -1,   -1,   -1,  300,  301,  302,
+  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,  312,
+  313,  314,   -1,   -1,  281,  297,  298,   -1,  300,   -1,
+  287,  288,  289,  290,   -1,   -1,   -1,   -1,   -1,  166,
+   -1,   -1,   -1,  300,  301,  302,  303,  304,  305,  306,
+   30,   -1,  309,   -1,   -1,  312,  313,  314,   38,   -1,
+   -1,   -1,   42,  190,   -1,   45,   -1,   -1,   -1,   -1,
+   -1,   -1,   52,   53,   54,   55,   56,   -1,   -1,   59,
+   60,   -1,   -1,  281,   -1,   -1,   66,   -1,   -1,  287,
+  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  301,  302,  303,  304,  305,  306,   -1,
+   -1,  309,   -1,   93,  312,  313,  314,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,  287,  288,  289,  290,   -1,
-   -1,  297,  298,   -1,   -1,   -1,   92,   -1,  300,  301,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   302,  303,  304,  305,  306,   -1,   -1,  309,   -1,   -1,
-  312,  313,  314,  281,   -1,   -1,   -1,   -1,   -1,  287,
-  288,  289,  290,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,  300,  301,  302,  303,  304,  305,  306,   -1,
-   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,   -1,
-   -1,   -1,   -1,  149,  150,  151,  152,  153,  154,  155,
-  156,  157,  158,  159,  160,  161,  162,   -1,   -1,   -1,
-  287,  288,  289,  290,   -1,   -1,   -1,   -1,  174,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,  303,  304,  305,  306,
-   -1,   -1,  309,   -1,   -1,  312,  313,  314,   -1,   -1,
+  312,  313,  314,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+  150,  151,  152,  153,  154,  155,  156,  157,  158,  159,
+  160,  161,  162,  163,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  175,   -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,   -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,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,  250,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  252,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,  281,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,  283,
 };
 #define YYFINAL 1
 #ifndef YYDEBUG
@@ -1093,16 +1093,22 @@ dEXT char * yyrule[] = {
 "decl : subrout",
 "decl : package",
 "decl : use",
-"format : FORMAT startsub WORD block",
-"format : FORMAT startsub block",
-"subrout : SUB startsub WORD proto block",
-"subrout : SUB startsub WORD proto ';'",
+"format : FORMAT startformsub formname block",
+"formname : WORD",
+"formname :",
+"subrout : SUB startsub subname proto subbody",
+"startsub :",
+"startanonsub :",
+"startformsub :",
+"subname : WORD",
 "proto :",
 "proto : THING",
-"startsub :",
+"subbody : block",
+"subbody : ';'",
 "package : PACKAGE WORD ';'",
 "package : PACKAGE ';'",
-"use : USE startsub WORD WORD listexpr ';'",
+"$$2 :",
+"use : USE startsub $$2 WORD WORD listexpr ';'",
 "expr : expr ANDOP expr",
 "expr : expr OROP expr",
 "expr : argexpr",
@@ -1116,7 +1122,8 @@ dEXT char * yyrule[] = {
 "listop : FUNCMETH indirob '(' listexprcom ')'",
 "listop : LSTOP listexpr",
 "listop : FUNC '(' listexprcom ')'",
-"listop : LSTOPSUB startsub block listexpr",
+"$$3 :",
+"listop : LSTOPSUB startanonsub block $$3 listexpr",
 "method : METHOD",
 "method : scalar",
 "term : term ASSIGNOP term",
@@ -1149,7 +1156,7 @@ dEXT char * yyrule[] = {
 "term : '[' ']'",
 "term : HASHBRACK expr ';' '}'",
 "term : HASHBRACK ';' '}'",
-"term : ANONSUB startsub proto block",
+"term : ANONSUB startanonsub proto block",
 "term : scalar",
 "term : star '{' expr ';' '}'",
 "term : star",
@@ -1233,9 +1240,9 @@ dEXT int yyerrflag;
 dEXT int yychar;
 dEXT YYSTYPE yyval;
 dEXT YYSTYPE yylval;
-#line 602 "perly.y"
+#line 626 "perly.y"
  /* PROGRAM */
-#line 1308 "perly.c"
+#line 1315 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1460,7 +1467,7 @@ yyreduce:
     switch (yyn)
     {
 case 1:
-#line 85 "perly.y"
+#line 86 "perly.y"
 {
 #if defined(YYDEBUG) && defined(DEBUGGING)
                    yydebug = (debug & 1);
@@ -1469,50 +1476,50 @@ case 1:
                }
 break;
 case 2:
-#line 92 "perly.y"
+#line 93 "perly.y"
 { newPROG(yyvsp[0].opval); }
 break;
 case 3:
-#line 96 "perly.y"
+#line 97 "perly.y"
 { if (copline > (line_t)yyvsp[-3].ival)
                              copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 4:
-#line 102 "perly.y"
+#line 103 "perly.y"
 { yyval.ival = block_start(TRUE); }
 break;
 case 5:
-#line 106 "perly.y"
+#line 107 "perly.y"
 { if (copline > (line_t)yyvsp[-3].ival)
                              copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 6:
-#line 112 "perly.y"
+#line 113 "perly.y"
 { yyval.ival = block_start(FALSE); }
 break;
 case 7:
-#line 116 "perly.y"
+#line 117 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 8:
-#line 118 "perly.y"
+#line 119 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
 case 9:
-#line 120 "perly.y"
+#line 121 "perly.y"
 {   yyval.opval = append_list(OP_LINESEQ,
                                (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
                            pad_reset_pending = TRUE;
                            if (yyvsp[-1].opval && yyvsp[0].opval) hints |= HINT_BLOCK_SCOPE; }
 break;
 case 10:
-#line 127 "perly.y"
+#line 128 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); }
 break;
 case 12:
-#line 130 "perly.y"
+#line 131 "perly.y"
 { if (yyvsp[-1].pval != Nullch) {
                              yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0));
                            }
@@ -1523,71 +1530,71 @@ case 12:
                            expect = XSTATE; }
 break;
 case 13:
-#line 139 "perly.y"
+#line 140 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
                          expect = XSTATE; }
 break;
 case 14:
-#line 144 "perly.y"
+#line 145 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 15:
-#line 146 "perly.y"
+#line 147 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
 case 16:
-#line 148 "perly.y"
+#line 149 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 17:
-#line 150 "perly.y"
+#line 151 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); }
 break;
 case 18:
-#line 152 "perly.y"
+#line 153 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); }
 break;
 case 19:
-#line 154 "perly.y"
+#line 155 "perly.y"
 { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);}
 break;
 case 20:
-#line 158 "perly.y"
+#line 159 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 21:
-#line 160 "perly.y"
+#line 161 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 22:
-#line 162 "perly.y"
+#line 163 "perly.y"
 { copline = yyvsp[-5].ival;
                            yyval.opval = newSTATEOP(0, Nullch,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval));
                            hints |= HINT_BLOCK_SCOPE; }
 break;
 case 23:
-#line 169 "perly.y"
+#line 170 "perly.y"
 { 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 24:
-#line 173 "perly.y"
+#line 174 "perly.y"
 { 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 179 "perly.y"
+#line 180 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 26:
-#line 181 "perly.y"
+#line 182 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
 case 27:
-#line 185 "perly.y"
+#line 186 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1595,7 +1602,7 @@ case 27:
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 28:
-#line 191 "perly.y"
+#line 192 "perly.y"
 { copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
@@ -1603,23 +1610,23 @@ case 28:
                                                yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
 break;
 case 29:
-#line 197 "perly.y"
+#line 198 "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 30:
-#line 200 "perly.y"
+#line 201 "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 31:
-#line 204 "perly.y"
+#line 205 "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 32:
-#line 208 "perly.y"
+#line 209 "perly.y"
 { copline = yyvsp[-9].ival;
                            yyval.opval = block_end(yyvsp[-7].ival,
                                   append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval),
@@ -1629,364 +1636,396 @@ case 32:
                                                  yyvsp[0].opval, scalar(yyvsp[-2].opval))))); }
 break;
 case 33:
-#line 216 "perly.y"
+#line 217 "perly.y"
 { yyval.opval = newSTATEOP(0,
                                yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop,
                                        Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
 break;
 case 34:
-#line 222 "perly.y"
+#line 223 "perly.y"
 { yyval.opval = Nullop; }
 break;
 case 36:
-#line 227 "perly.y"
+#line 228 "perly.y"
 { (void)scan_num("1"); yyval.opval = yylval.opval; }
 break;
 case 38:
-#line 232 "perly.y"
+#line 233 "perly.y"
 { yyval.opval = invert(scalar(yyvsp[0].opval)); }
 break;
 case 39:
-#line 236 "perly.y"
+#line 237 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 40:
-#line 240 "perly.y"
+#line 241 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 41:
-#line 244 "perly.y"
+#line 245 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 42:
-#line 248 "perly.y"
+#line 249 "perly.y"
 { yyval.opval = yyvsp[0].opval; intro_my(); }
 break;
 case 43:
-#line 252 "perly.y"
+#line 253 "perly.y"
 { yyval.pval = Nullch; }
 break;
 case 45:
-#line 257 "perly.y"
+#line 258 "perly.y"
 { yyval.ival = 0; }
 break;
 case 46:
-#line 259 "perly.y"
+#line 260 "perly.y"
 { yyval.ival = 0; }
 break;
 case 47:
-#line 261 "perly.y"
+#line 262 "perly.y"
 { yyval.ival = 0; }
 break;
 case 48:
-#line 263 "perly.y"
+#line 264 "perly.y"
 { yyval.ival = 0; }
 break;
 case 49:
-#line 267 "perly.y"
+#line 268 "perly.y"
 { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 50:
-#line 269 "perly.y"
-{ newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); }
+#line 271 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
 break;
 case 51:
-#line 273 "perly.y"
-{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 272 "perly.y"
+{ yyval.opval = Nullop; }
 break;
 case 52:
-#line 275 "perly.y"
-{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, Nullop); expect = XSTATE; }
+#line 276 "perly.y"
+{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
 case 53:
-#line 279 "perly.y"
-{ yyval.opval = Nullop; }
+#line 280 "perly.y"
+{ yyval.ival = start_subparse(); }
 break;
-case 55:
+case 54:
 #line 284 "perly.y"
-{ yyval.ival = start_subparse(); }
+{ yyval.ival = start_subparse();
+                         CvANON_on(compcv); }
+break;
+case 55:
+#line 289 "perly.y"
+{ yyval.ival = start_subparse();
+                         CvFORMAT_on(compcv); }
 break;
 case 56:
-#line 288 "perly.y"
-{ package(yyvsp[-1].opval); }
+#line 293 "perly.y"
+{ char *name = SvPVx(((SVOP*)yyvsp[0].opval)->op_sv, na);
+                         if (strEQ(name, "BEGIN") || strEQ(name, "END"))
+                             CvUNIQUE_on(compcv);
+                         yyval.opval = yyvsp[0].opval; }
 break;
 case 57:
-#line 290 "perly.y"
+#line 300 "perly.y"
+{ yyval.opval = Nullop; }
+break;
+case 59:
+#line 304 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
+break;
+case 60:
+#line 305 "perly.y"
+{ yyval.opval = Nullop; expect = XSTATE; }
+break;
+case 61:
+#line 309 "perly.y"
+{ package(yyvsp[-1].opval); }
+break;
+case 62:
+#line 311 "perly.y"
 { package(Nullop); }
 break;
-case 58:
-#line 294 "perly.y"
-{ utilize(yyvsp[-5].ival, yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
+case 63:
+#line 315 "perly.y"
+{ CvUNIQUE_on(compcv); /* It's a BEGIN {} */ }
+break;
+case 64:
+#line 317 "perly.y"
+{ utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
 break;
-case 59:
-#line 298 "perly.y"
+case 65:
+#line 321 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 60:
-#line 300 "perly.y"
+case 66:
+#line 323 "perly.y"
 { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 62:
-#line 305 "perly.y"
+case 68:
+#line 328 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 63:
-#line 307 "perly.y"
+case 69:
+#line 330 "perly.y"
 { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 65:
-#line 312 "perly.y"
+case 71:
+#line 335 "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 66:
-#line 315 "perly.y"
+case 72:
+#line 338 "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 67:
-#line 318 "perly.y"
+case 73:
+#line 341 "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 68:
-#line 323 "perly.y"
+case 74:
+#line 346 "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 69:
-#line 328 "perly.y"
+case 75:
+#line 351 "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 70:
-#line 333 "perly.y"
+case 76:
+#line 356 "perly.y"
 { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 71:
-#line 335 "perly.y"
+case 77:
+#line 358 "perly.y"
 { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 72:
-#line 337 "perly.y"
+case 78:
+#line 360 "perly.y"
+{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); }
+break;
+case 79:
+#line 362 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
-                           append_elem(OP_LIST,
-                             prepend_elem(OP_LIST, newANONSUB(yyvsp[-2].ival, 0, yyvsp[-1].opval), yyvsp[0].opval),
-                             yyvsp[-3].opval)); }
+                                append_elem(OP_LIST,
+                                  prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); }
 break;
-case 75:
-#line 348 "perly.y"
+case 82:
+#line 372 "perly.y"
 { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
 break;
-case 76:
-#line 350 "perly.y"
+case 83:
+#line 374 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 77:
-#line 352 "perly.y"
+case 84:
+#line 376 "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 78:
-#line 356 "perly.y"
+case 85:
+#line 380 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 79:
-#line 358 "perly.y"
+case 86:
+#line 382 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 80:
-#line 360 "perly.y"
+case 87:
+#line 384 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 81:
-#line 362 "perly.y"
+case 88:
+#line 386 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 82:
-#line 364 "perly.y"
+case 89:
+#line 388 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 83:
-#line 366 "perly.y"
+case 90:
+#line 390 "perly.y"
 { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
 break;
-case 84:
-#line 368 "perly.y"
+case 91:
+#line 392 "perly.y"
 { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
 break;
-case 85:
-#line 370 "perly.y"
+case 92:
+#line 394 "perly.y"
 { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 86:
-#line 372 "perly.y"
+case 93:
+#line 396 "perly.y"
 { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 87:
-#line 374 "perly.y"
+case 94:
+#line 398 "perly.y"
 { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 88:
-#line 376 "perly.y"
+case 95:
+#line 400 "perly.y"
 { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
 break;
-case 89:
-#line 379 "perly.y"
+case 96:
+#line 403 "perly.y"
 { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 90:
-#line 381 "perly.y"
+case 97:
+#line 405 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 91:
-#line 383 "perly.y"
+case 98:
+#line 407 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 92:
-#line 385 "perly.y"
+case 99:
+#line 409 "perly.y"
 { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
 break;
-case 93:
-#line 387 "perly.y"
+case 100:
+#line 411 "perly.y"
 { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
 break;
-case 94:
-#line 389 "perly.y"
+case 101:
+#line 413 "perly.y"
 { yyval.opval = newUNOP(OP_POSTINC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
 break;
-case 95:
-#line 392 "perly.y"
+case 102:
+#line 416 "perly.y"
 { yyval.opval = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
 break;
-case 96:
-#line 395 "perly.y"
+case 103:
+#line 419 "perly.y"
 { yyval.opval = newUNOP(OP_PREINC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREINC)); }
 break;
-case 97:
-#line 398 "perly.y"
+case 104:
+#line 422 "perly.y"
 { yyval.opval = newUNOP(OP_PREDEC, 0,
                                        mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
 break;
-case 98:
-#line 401 "perly.y"
+case 105:
+#line 425 "perly.y"
 { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
 break;
-case 99:
-#line 403 "perly.y"
+case 106:
+#line 427 "perly.y"
 { yyval.opval = sawparens(yyvsp[-1].opval); }
 break;
-case 100:
-#line 405 "perly.y"
+case 107:
+#line 429 "perly.y"
 { yyval.opval = sawparens(newNULLLIST()); }
 break;
-case 101:
-#line 407 "perly.y"
+case 108:
+#line 431 "perly.y"
 { yyval.opval = newANONLIST(yyvsp[-1].opval); }
 break;
-case 102:
-#line 409 "perly.y"
+case 109:
+#line 433 "perly.y"
 { yyval.opval = newANONLIST(Nullop); }
 break;
-case 103:
-#line 411 "perly.y"
+case 110:
+#line 435 "perly.y"
 { yyval.opval = newANONHASH(yyvsp[-2].opval); }
 break;
-case 104:
-#line 413 "perly.y"
+case 111:
+#line 437 "perly.y"
 { yyval.opval = newANONHASH(Nullop); }
 break;
-case 105:
-#line 415 "perly.y"
+case 112:
+#line 439 "perly.y"
 { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
 break;
-case 106:
-#line 417 "perly.y"
+case 113:
+#line 441 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 107:
-#line 419 "perly.y"
+case 114:
+#line 443 "perly.y"
 { yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); }
 break;
-case 108:
-#line 421 "perly.y"
+case 115:
+#line 445 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 109:
-#line 423 "perly.y"
+case 116:
+#line 447 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
 break;
-case 110:
-#line 425 "perly.y"
+case 117:
+#line 449 "perly.y"
 { yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 111:
-#line 429 "perly.y"
+case 118:
+#line 453 "perly.y"
 { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
                                        scalar(yyvsp[-1].opval));}
 break;
-case 112:
-#line 433 "perly.y"
+case 119:
+#line 457 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 113:
-#line 435 "perly.y"
+case 120:
+#line 459 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 114:
-#line 437 "perly.y"
+case 121:
+#line 461 "perly.y"
 { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
 break;
-case 115:
-#line 439 "perly.y"
+case 122:
+#line 463 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 116:
-#line 442 "perly.y"
+case 123:
+#line 466 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 117:
-#line 447 "perly.y"
+case 124:
+#line 471 "perly.y"
 { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
                            expect = XOPERATOR; }
 break;
-case 118:
-#line 452 "perly.y"
+case 125:
+#line 476 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
 break;
-case 119:
-#line 454 "perly.y"
+case 126:
+#line 478 "perly.y"
 { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
 break;
-case 120:
-#line 456 "perly.y"
+case 127:
+#line 480 "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 121:
-#line 462 "perly.y"
+case 128:
+#line 486 "perly.y"
 { yyval.opval = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1994,38 +2033,38 @@ case 121:
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
                            expect = XOPERATOR; }
 break;
-case 122:
-#line 469 "perly.y"
+case 129:
+#line 493 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 123:
-#line 471 "perly.y"
+case 130:
+#line 495 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
 break;
-case 124:
-#line 473 "perly.y"
+case 131:
+#line 497 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
 break;
-case 125:
-#line 475 "perly.y"
+case 132:
+#line 499 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
 break;
-case 126:
-#line 478 "perly.y"
+case 133:
+#line 502 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 127:
-#line 481 "perly.y"
+case 134:
+#line 505 "perly.y"
 { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
 break;
-case 128:
-#line 483 "perly.y"
+case 135:
+#line 507 "perly.y"
 { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
 break;
-case 129:
-#line 485 "perly.y"
+case 136:
+#line 509 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -2034,8 +2073,8 @@ case 129:
                                    scalar(yyvsp[-2].opval)
                                )),Nullop)); dep();}
 break;
-case 130:
-#line 493 "perly.y"
+case 137:
+#line 517 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -2045,151 +2084,151 @@ case 130:
                                    scalar(yyvsp[-3].opval)
                                )))); dep();}
 break;
-case 131:
-#line 502 "perly.y"
+case 138:
+#line 526 "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 132:
-#line 506 "perly.y"
+case 139:
+#line 530 "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 133:
-#line 511 "perly.y"
+case 140:
+#line 535 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
                            hints |= HINT_BLOCK_SCOPE; }
 break;
-case 134:
-#line 514 "perly.y"
+case 141:
+#line 538 "perly.y"
 { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 135:
-#line 516 "perly.y"
+case 142:
+#line 540 "perly.y"
 { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
 break;
-case 136:
-#line 518 "perly.y"
+case 143:
+#line 542 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 137:
-#line 520 "perly.y"
+case 144:
+#line 544 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 138:
-#line 522 "perly.y"
+case 145:
+#line 546 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
 break;
-case 139:
-#line 524 "perly.y"
+case 146:
+#line 548 "perly.y"
 { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
 break;
-case 140:
-#line 527 "perly.y"
+case 147:
+#line 551 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, 0); }
 break;
-case 141:
-#line 529 "perly.y"
+case 148:
+#line 553 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, 0); }
 break;
-case 142:
-#line 531 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, 0,
+case 149:
+#line 555 "perly.y"
+{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar(yyvsp[0].opval)); }
 break;
-case 143:
-#line 534 "perly.y"
+case 150:
+#line 558 "perly.y"
 { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
 break;
-case 144:
-#line 536 "perly.y"
+case 151:
+#line 560 "perly.y"
 { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
 break;
-case 145:
-#line 538 "perly.y"
+case 152:
+#line 562 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
 break;
-case 146:
-#line 540 "perly.y"
+case 153:
+#line 564 "perly.y"
 { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
 break;
-case 149:
-#line 546 "perly.y"
+case 156:
+#line 570 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 150:
-#line 548 "perly.y"
+case 157:
+#line 572 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 151:
-#line 552 "perly.y"
+case 158:
+#line 576 "perly.y"
 { yyval.opval = Nullop; }
 break;
-case 152:
-#line 554 "perly.y"
+case 159:
+#line 578 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-case 153:
-#line 556 "perly.y"
+case 160:
+#line 580 "perly.y"
 { yyval.opval = yyvsp[-1].opval; }
 break;
-case 154:
-#line 559 "perly.y"
+case 161:
+#line 583 "perly.y"
 { yyval.ival = 0; }
 break;
-case 155:
-#line 560 "perly.y"
+case 162:
+#line 584 "perly.y"
 { yyval.ival = 1; }
 break;
-case 156:
-#line 564 "perly.y"
+case 163:
+#line 588 "perly.y"
 { in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
-case 157:
-#line 568 "perly.y"
+case 164:
+#line 592 "perly.y"
 { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
 break;
-case 158:
-#line 572 "perly.y"
+case 165:
+#line 596 "perly.y"
 { yyval.opval = newSVREF(yyvsp[0].opval); }
 break;
-case 159:
-#line 576 "perly.y"
+case 166:
+#line 600 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 160:
-#line 580 "perly.y"
+case 167:
+#line 604 "perly.y"
 { yyval.opval = newHVREF(yyvsp[0].opval); }
 break;
-case 161:
-#line 584 "perly.y"
+case 168:
+#line 608 "perly.y"
 { yyval.opval = newAVREF(yyvsp[0].opval); }
 break;
-case 162:
-#line 588 "perly.y"
+case 169:
+#line 612 "perly.y"
 { yyval.opval = newGVREF(0,yyvsp[0].opval); }
 break;
-case 163:
-#line 592 "perly.y"
+case 170:
+#line 616 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval); }
 break;
-case 164:
-#line 594 "perly.y"
+case 171:
+#line 618 "perly.y"
 { yyval.opval = scalar(yyvsp[0].opval);  }
 break;
-case 165:
-#line 596 "perly.y"
+case 172:
+#line 620 "perly.y"
 { yyval.opval = scope(yyvsp[0].opval); }
 break;
-case 166:
-#line 599 "perly.y"
+case 173:
+#line 623 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2178 "perly.c"
+#line 2217 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
index 6f521d2..72354d2 100644 (file)
@@ -74,7 +74,7 @@ $
 $!  And do it
 $   testdir = "Directory/NoHead/NoTrail/Column=1"
 $   Define/User Perlshr Sys$Disk:[-]PerlShr'exe'
-$   MCR Sys$Disk:[]Perl. - "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
+$   MCR Sys$Disk:[]Perl. "-I[-.lib]" - "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
 $   Deck/Dollar=$$END-OF-TEST$$
 # $RCSfile: TEST,v $$Revision: 4.1 $$Date: 92/08/07 18:27:00 $
 # Modified for VMS 30-Sep-1994  Charles Bailey  bailey@genetics.upenn.edu
@@ -90,7 +90,7 @@ use Config;
 @compexcl=('cpp.t','script.t');
 @ioexcl=('argv.t','dup.t','fs.t','inplace.t','pipe.t');
 @libexcl=('anydbm.t','db-btree.t','db-hash.t','db-recno.t',
-          'gdbm.t','io_dup.t', 'io_pipe.t', 'io_sock.t',
+          'gdbm.t','io_dup.t', 'io_pipe.t', 'io_sel.t', 'io_sock.t',
           'ndbm.t','odbm.t','open2.t','open3.t','posix.t',
           'sdbm.t','soundex.t');
 
@@ -147,7 +147,7 @@ while ($test = shift) {
        if (/#!..perl(.*)/) {
            $switch = $1;
            # Add "" to protect uppercase switches on command line
-           $switch =~ s/-([A-Z]\S*)/"-$1"/g;
+           $switch =~ s/-(\S*[A-Z]\S*)/"-$1"/g;
        } else {
            $switch = '';
        }
index b2814ad..7fec438 100644 (file)
  */
 #undef ACME_MESS       /**/
 
+/* ALTERNATE_SHEBANG:
+ *     This symbol, if defined, contains a "magic" string which may be used
+ *     as the first line of a Perl program designed to be executed directly
+ *     by name, instead of the standard Unix #!.  If ALTERNATE_SHEBANG
+ *     begins with a character other then #, then Perl will only treat
+ *     it as a command line if if finds the string "perl" in the first
+ *     word; otherwise it's treated as the first line of code in the script.
+ *     (IOW, Perl won't hand off to another interpreter via an alternate
+ *     shebang sequence that might be legal Perl code.)
+ */
+#define ALTERNATE_SHEBANG "$"
+
 /* Macros to set errno using the VAX thread-safe calls, if present */
 #if (defined(__DECC) || defined(__DECCXX)) && !defined(__ALPHA)
 #  define set_errno(v)      (cma$tis_errno_set_value(v))
@@ -413,6 +425,25 @@ typedef unsigned myino_t;
  *    <data type><TAB>name<WHITESPACE>_((<prototype args>));
  */
 
+#ifdef NO_PERL_TYPEDEFS
+  /* We don't have Perl typedefs available (e.g. when building a2p), so
+     we fake them here.  N.B.  There is *no* guarantee that the faked
+     prototypes will actually match the real routines.  If you want to
+     call Perl routines, include perl.h to get the real typedefs.  */
+#  ifndef bool
+#    define bool int
+#    define __MY_BOOL_TYPE_FAKE
+#  endif
+#  ifndef I32
+#    define I32  int
+#    define __MY_I32_TYPE_FAKE
+#  endif
+#  ifndef SV
+#    define SV   void   /* Since we only see SV * in prototypes */
+#    define __MY_SV_TYPE_FAKE
+#  endif
+#endif
+
 void   prime_env_iter _((void));
 void   getredirection _((int *, char ***));
 void   init_os_extras _(());
@@ -468,6 +499,21 @@ int        rmscopy _((char *, char *, int));
 typedef char __VMS_SEPYTOTORP__;
 /* prototype section end marker; `typedef' passes through cpp */
 
+#ifdef NO_PERL_TYPEDEFS  /* We'll try not to scramble later files */
+#  ifdef __MY_BOOL_TYPE_FAKE
+#    undef bool
+#    undef __MY_BOOL_TYPE_FAKE
+#  endif
+#  ifdef __MY_I32_TYPE_FAKE
+#    undef I32
+#    undef __MY_I32_TYPE_FAKE
+#  endif
+#  ifdef __MY_SV_TYPE_FAKE
+#    undef SV
+#    undef __MY_SV_TYPE_FAKE
+#  endif
+#endif
+
 #ifndef VMS_DO_SOCKETS
 /* This relies on tricks in perl.h to pick up that these manifest constants
  * are undefined and set up conversion routines.  It will then redefine
index a6dfd1d..ffd731e 100644 (file)
--- a/x2p/a2p.h
+++ b/x2p/a2p.h
 # endif
 #else
 # if defined(VMS)
-#   include "../vmsish.h"
+#   define NO_PERL_TYPEDEFS
+#   include "[-]vmsish.h"
 # endif
 #endif
 
index c024faf..2ffc338 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index e5c5bd6..7564d51 100644 (file)
@@ -12,10 +12,8 @@ use File::Basename qw(&basename &dirname);
 
 # This forces PL files to create target in same directory as PL file.
 # This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
-       if ($^O eq 'VMS' or $^O eq 'os2');  # "case-forgiving"
+chdir dirname($0);
+$file = basename($0, '.PL');
 
 open OUT,">$file" or die "Can't create $file: $!";
 
index 953a811..45b40f7 100644 (file)
--- a/x2p/str.c
+++ b/x2p/str.c
@@ -297,6 +297,16 @@ register FILE *fp;
     int i;
     int bpx;
 
+#if defined(VMS)
+    /* An ungetc()d char is handled separately from the regular
+     * buffer, so we getc() it back out and stuff it in the buffer.
+     */
+    i = getc(fp);
+    if (i == EOF) return Nullch;
+    *(--((*fp)->_ptr)) = (unsigned char) i;
+    (*fp)->_cnt++;
+#endif
+
     cnt = FILE_cnt(fp);                        /* get count into register */
     str->str_nok = 0;                  /* invalidate number */
     str->str_pok = 1;                  /* validate pointer */
@@ -317,7 +327,7 @@ register FILE *fp;
        
        FILE_cnt(fp) = cnt;             /* deregisterize cnt and ptr */
        FILE_ptr(fp) = ptr;
-       i = FILE_filbuf(fp);            /* get more characters */
+       i = getc(fp);           /* get more characters */
        cnt = FILE_cnt(fp);
        ptr = FILE_ptr(fp);             /* reregisterize cnt and ptr */