From: Nick Ing-Simmons Date: Sun, 11 Aug 2002 10:22:36 +0000 (+0000) Subject: Integrate mainline. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ed423f7afb5038546a92d00ca689992f3e08bc61;p=p5sagit%2Fp5-mst-13.2.git Integrate mainline. p4raw-id: //depot/perlio@17708 --- diff --git a/AUTHORS b/AUTHORS index 1f02eda..b0d2e8d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -128,7 +128,7 @@ Clinton A. Pierce Colin Kuskie Colin McMillen Colin Meyer -Colin Watson +Colin Watson Conrad Augustin Conrad E. Kimball Coral @@ -415,7 +415,7 @@ Kevin White Kim Frutiger Kingpin Kirrily Robert -Kragen Sitaker +Kragen Sitaker Krishna Sethuraman Kurt D. Starsinic Kyriakos Georgiou @@ -709,7 +709,7 @@ Vishal Bhatia Vlad Harchev Vladimir Alexiev W. Phillip Moore -Walt Mankowski +Walt Mankowski Walter Briscoe Warren Hyde Warren Jones diff --git a/Changes b/Changes index 5fea8b3..bc5a5e9 100644 --- a/Changes +++ b/Changes @@ -27,3 +27,431 @@ example from http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ -------------- Version v5.9.X Development release working toward v5.10 -------------- +____________________________________________________________________________ +[ 17702] By: hv on 2002/08/08 15:08:57 + Log: Subject: Re: README.aix + From: "H.Merijn Brand" + Date: Tue, 30 Jul 2002 13:30:29 +0200 + Message-id: <20020730130812.48B9.H.M.BRAND@hccnet.nl> + Branch: perl + ! README.aix +____________________________________________________________________________ +[ 17701] By: hv on 2002/08/08 15:06:01 + Log: Subject: [PATCH] Re: pp_sys.c compile failed.. + From: Andy Dougherty + Date: Tue, 6 Aug 2002 10:42:07 -0400 (EDT) (15:42 BST) + Message-id: + Branch: perl + ! hints/aix.sh +____________________________________________________________________________ +[ 17700] By: hv on 2002/08/08 15:02:57 + Log: Subject: [DOC PATCH] perlipc.pod + From: Arjen Laarhoven + Date: Tue, 6 Aug 2002 14:16:01 +0200 + Message-id: <20020806121601.GK40785@aragorn.noc.nl.demon.net> + Branch: perl + ! pod/perlipc.pod +____________________________________________________________________________ +[ 17699] By: hv on 2002/08/08 14:56:56 + Log: Subject: [PATCH] Re: [perl #15898] coredump with variable our + From: Rafael Garcia-Suarez + Date: Fri, 2 Aug 2002 23:44:21 +0200 + Message-id: <20020802234421.11c62fe6.rgarciasuarez@free.fr> + Branch: perl + ! op.c t/op/attrs.t +____________________________________________________________________________ +[ 17698] By: hv on 2002/08/08 14:52:45 + Log: Subject: [perl #16000] Configure -Dstatic_ext=foo builds foo as both static and dynamic + From: Yitzchak Scott-Thoennes (via RT) + Date: 6 Aug 2002 04:28:15 -0000 (Tue 05:28 BST) + Message-id: + Branch: perl + ! Configure +____________________________________________________________________________ +[ 17697] By: hv on 2002/08/08 14:49:00 + Log: Subject: Doc patch for Class::Struct under 5.8.0 + From: Damian Conway + Date: Tue, 30 Jul 2002 23:03:14 +1000 + Message-id: <3D471FCF.1C7C6E6B@conway.org> + Branch: perl + ! lib/Class/Struct.pm +____________________________________________________________________________ +[ 17696] By: hv on 2002/08/08 14:44:21 + Log: Subject: Re: [perl #15523] Memory Leak in split with trailing empty elements + From: Slaven Rezic + Date: 31 Jul 2002 09:50:06 +0200 + Message-id: <87ado85ob5.fsf@vran.herceg.de> + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 17695] By: hv on 2002/08/08 14:40:41 + Log: Subject: [PATCH] Re: [perl #15479] perl 5.8.0 segfault + From: Rafael Garcia-Suarez + Date: Fri, 2 Aug 2002 00:13:10 +0200 + Message-id: <20020802001310.7e1dc694.rgarciasuarez@free.fr> + Branch: perl + + t/op/stash.t + ! MANIFEST perl.h +____________________________________________________________________________ +[ 17694] By: hv on 2002/08/08 14:31:55 + Log: Subject: Re: [RE-PATCH] Not OK: perl v5.8.0 on PA-RISC2.0 11.00 + From: "H.Merijn Brand" + Date: Wed, 31 Jul 2002 16:04:02 +0200 + Message-id: <20020731155005.4915.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 17693] By: hv on 2002/08/08 14:25:16 + Log: Subject: [PATCH: lib/ExtUtils/MM_Unix.pm] Be less strict about what's POD. + From: Abigail + Date: Thu, 25 Jul 2002 08:52:52 -0700 (16:52 BST) + Message-id: <20020725085252.A2703@ucan.foad.org> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 17692] By: hv on 2002/08/08 14:20:05 + Log: Subject: [PATCH] README.jp and README.cn + From: Autrijus Tang + Date: Thu, 25 Jul 2002 07:05:11 +0800 + Message-id: <20020724230511.GA1327@not.autrijus.org> + Branch: perl + ! README.cn README.jp +____________________________________________________________________________ +[ 17691] By: hv on 2002/08/08 14:01:50 + Log: Subject: [perl #15398] Usage::pod2usage looks for perldoc in $Config{bin} and not in $Config{scriptdir} + From: Henrik Tougaard (via RT) + Date: 23 Jul 2002 13:45:49 -0000 (Tue 14:45 BST) + Message-id: + Branch: perl + ! lib/Pod/Usage.pm +____________________________________________________________________________ +[ 17690] By: rgs on 2002/08/07 19:56:42 + Log: Doc fix : the symbol for COPs wasn't documented. + Branch: perl + ! opcode.pl +____________________________________________________________________________ +[ 17689] By: rgs on 2002/08/06 20:45:30 + Log: Subject: Re: no warnings 'io'; + From: Nicholas Clark + Date: Sat, 27 Jul 2002 21:49:55 +0100 + Message-ID: <20020727204954.GB5117@Bagpuss.unfortu.net> + + Plus a little bit of regression tests. + Branch: perl + ! t/lib/warnings/pp_hot util.c +____________________________________________________________________________ +[ 17688] By: rgs on 2002/08/06 20:04:19 + Log: Subject: [PATCH] XS build fix for VMS + From: "Craig A. Berry" + Date: Sun, 4 Aug 2002 12:13:06 -0500 + Message-ID: + Branch: perl + ! vms/descrip_mms.template +____________________________________________________________________________ +[ 17687] By: rgs on 2002/08/06 19:50:12 + Log: PerlIO::scalar wasn't able to read from non-string + scalar ; now stringifies its argument. + Branch: perl + ! ext/PerlIO/scalar/scalar.xs ext/PerlIO/t/scalar.t +____________________________________________________________________________ +[ 17686] By: rgs on 2002/08/06 19:10:51 + Log: More regression tests for $^H and %^H. + Add a TODO test for eval "" preserving %^H. + Branch: perl + ! t/comp/hints.t +____________________________________________________________________________ +[ 17685] By: hv on 2002/08/05 22:42:09 + Log: Subject: Re: mention of "use sort" botched in perlfunc? + PATCH + From: "John P. Linderman" + Date: Sun, 21 Jul 2002 12:13:32 -0400 (17:13 BST) + Message-id: <200207211613.MAA69505@raptor.research.att.com> + Branch: perl + ! lib/sort.pm lib/sort.t +____________________________________________________________________________ +[ 17684] By: hv on 2002/08/05 22:35:22 + Log: Integrate from perlio: change #17653 fixes bug RT15283 + Branch: perl + !> ext/PerlIO/via/via.xs +____________________________________________________________________________ +[ 17683] By: hv on 2002/08/05 22:26:45 + Log: Integrate from maint-5.6/macperl via macperl + Changes 17660, 17661, 17662, 17663, 17664 + Branch: perl + !> perl.c +____________________________________________________________________________ +[ 17682] By: hv on 2002/08/05 15:04:54 + Log: Subject: Defined-or patch (cleaned up) + From: "Brent Dax" + Date: Fri, 26 Jul 2002 05:41:52 -0700 (13:41 BST) + Message-id: <000001c234a1$d1ca72c0$6501a8c0@deepblue> + Branch: perl + + t/op/dor.t + ! MANIFEST embed.h ext/B/B/Deparse.pm ext/Opcode/Opcode.pm + ! keywords.h keywords.pl op.c opcode.h opcode.pl opnames.h + ! perly.c perly.h perly.y perly_c.diff pod/perlop.pod pp.sym + ! pp_ctl.c pp_hot.c pp_proto.h toke.c vms/perly_c.vms + ! vms/perly_h.vms +____________________________________________________________________________ +[ 17681] By: hv on 2002/08/05 14:41:23 + Log: typo + Branch: perl + ! keywords.h keywords.pl +____________________________________________________________________________ +[ 17680] By: hv on 2002/08/05 14:33:39 + Log: warn that keywords.h is generated + Branch: perl + ! keywords.h keywords.pl +____________________________________________________________________________ +[ 17679] By: hv on 2002/08/04 23:40:22 + Log: again: #17678 caused test failures in pod2html, + in which $1 could leak from previous regexp + Branch: perl + ! mg.c +____________________________________________________________________________ +[ 17678] By: hv on 2002/08/04 15:34:19 + Log: Subject: Re: [ID 20020704.001] my $foo = $1 won't taint $foo (with use re 'taint') + From: hv@crypt.org + Date: Sun, 04 Aug 2002 17:40:30 +0100 + Message-id: <200208041640.g74GeUU25061@crypt.compulink.co.uk> + Branch: perl + ! mg.c t/op/taint.t +____________________________________________________________________________ +[ 17677] By: hv on 2002/08/04 15:25:25 + Log: Main branch no longer needs op/taint.t version check. + Branch: perl + ! t/op/taint.t +____________________________________________________________________________ +[ 17676] By: hv on 2002/08/04 15:14:09 + Log: Subject: Re: [PATCH] Re: taint news + From: Rick Delaney + Date: 04 Aug 2002 00:28:58 EDT + Message-ID: + Ref: 20020208.005 + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 17675] By: hv on 2002/08/04 01:48:36 + Log: Fix email address for Kragen Sitaker . + Branch: perl + ! AUTHORS +____________________________________________________________________________ +[ 17674] By: hv on 2002/08/04 01:30:11 + Log: Subject: [PATCH] AUTHORS + From: Colin Watson + Date: Thu, 25 Jul 2002 15:54:37 +0100 + Message-id: <20020725145437.GC4921@zeus.com> + Branch: perl + ! AUTHORS +____________________________________________________________________________ +[ 17673] By: hv on 2002/08/04 01:27:36 + Log: Subject: [PATCH] AUTHORS + From: Walt Mankowski + Date: Sat, 20 Jul 2002 22:56:12 -0400 (Sun 03:56 BST) + Message-id: <20020721025612.GB15958@pobox.com> + Branch: perl + ! AUTHORS +____________________________________________________________________________ +[ 17672] By: hv on 2002/08/04 01:25:14 + Log: Subject: Re: mention of "use sort" botched in perlfunc? + From: Michael G Schwern + Date: Sat, 20 Jul 2002 13:49:58 -0400 (18:49 BST) + Message-id: <20020720174958.GL362@ool-18b93024.dyn.optonline.net> + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 17671] By: hv on 2002/08/04 01:11:32 + Log: Change version from 5.8.0 to 5.9.0. + Branch: perl + ! Configure NetWare/Makefile NetWare/config_H.wc + ! Porting/config.sh Porting/config_H README.win32 config_h.SH + ! cygwin/perlld.in epoc/config.sh epoc/createpkg.pl + ! hints/dgux.sh installperl lib/ExtUtils/MM_NW5.pm makedef.pl + ! patchlevel.h win32/Makefile win32/makefile.mk + ! wince/Makefile.ce +____________________________________________________________________________ +[ 17670] By: pudge on 2002/07/30 03:19:03 + Log: Silent warnings in MM_MacOS + Branch: maint-5.8/macperl + ! lib/ExtUtils/MM_MacOS.pm +____________________________________________________________________________ +[ 17669] By: pudge on 2002/07/30 03:18:47 + Log: Silent warnings in MM_MacOS + Branch: macperl + ! lib/ExtUtils/MM_MacOS.pm +____________________________________________________________________________ +[ 17668] By: pudge on 2002/07/30 03:16:52 + Log: Help fixes from Thomas Wegner + Branch: macperl + ! macos/macperl/BuildHelpIndex macos/macperl/MacPerl.podhelp + Branch: maint-5.6/macperl + ! macos/macperl/BuildHelpIndex macos/macperl/MacPerl.podhelp + Branch: maint-5.8/macperl + ! macos/macperl/BuildHelpIndex macos/macperl/MacPerl.podhelp +____________________________________________________________________________ +[ 17667] By: pudge on 2002/07/29 20:42:43 + Log: Integrate perl + Branch: macperl + +> Changes5.8 pod/perl58delta.pod + !> (integrate 36 files) +____________________________________________________________________________ +[ 17666] By: pudge on 2002/07/29 20:04:54 + Log: Integrate from maint-5.6/macperl + + Changes 17660, 17661, 17662, 17663, 17664 + Branch: macperl + ! macos/ext/Mac/Dialogs/Dialogs.pm macos/lib/Mac/AETE/App.pm + ! macos/lib/Mac/AETE/Format/Glue.pm macos/lib/Mac/OSA/Simple.pm + ! macos/macperl/Droplets/gluemac.plx perl.c +____________________________________________________________________________ +[ 17665] By: pudge on 2002/07/29 19:39:58 + Log: Integrate from maint-5.6/macperl + + Changes 17660, 17661, 17662, 17663, 17664 + Branch: maint-5.8/macperl + ! macos/ext/Mac/Dialogs/Dialogs.pm macos/lib/Mac/AETE/App.pm + ! macos/lib/Mac/AETE/Format/Glue.pm macos/lib/Mac/OSA/Simple.pm + ! macos/macperl/Droplets/gluemac.plx perl.c +____________________________________________________________________________ +[ 17664] By: pudge on 2002/07/29 19:20:51 + Log: Neglected to include old bugfix from main branch + Branch: maint-5.6/macperl + ! perl.c +____________________________________________________________________________ +[ 17663] By: pudge on 2002/07/29 18:25:57 + Log: Count line numbers properly in MacPerl app + Branch: maint-5.6/macperl + ! perl.c +____________________________________________________________________________ +[ 17662] By: pudge on 2002/07/29 18:21:16 + Log: Make Mac::Glue work to glue Mac OS X apps under Classic + Branch: maint-5.6/macperl + ! macos/lib/Mac/AETE/App.pm macos/lib/Mac/AETE/Format/Glue.pm +____________________________________________________________________________ +[ 17661] By: pudge on 2002/07/29 18:20:46 + Log: gluemac failed with some paths + Branch: maint-5.6/macperl + ! macos/macperl/Droplets/gluemac.plx +____________________________________________________________________________ +[ 17660] By: pudge on 2002/07/29 18:20:12 + Log: Fix long-standing bug with popup menus not working in dialogs + Branch: maint-5.6/macperl + ! macos/ext/Mac/Dialogs/Dialogs.pm +____________________________________________________________________________ +[ 17659] By: pudge on 2002/07/29 18:19:00 + Log: Update test script + Branch: maint-5.6/macperl + ! macos/MacPerlTests.cmd +____________________________________________________________________________ +[ 17658] By: pudge on 2002/07/29 18:18:35 + Log: Portability fixes for blib + (already in 5.8/5.9) + Branch: maint-5.6/macperl + ! lib/blib.pm +____________________________________________________________________________ +[ 17657] By: pudge on 2002/07/29 18:17:54 + Log: Minor test fixes + Branch: maint-5.6/macperl + ! t/lib/filespec.t t/op/magic.t +____________________________________________________________________________ +[ 17656] By: ams on 2002/07/28 06:12:33 + Log: Subject: [PATCH] Typo in regcomp.c + From: Chris Ball + Date: 26 Jul 2002 17:49:35 +0100 + Message-Id: <868z3yzb6o.fsf@void.printf.net> + (With additional tweak to s_reginclasslen.) + Branch: perl + ! regcomp.c +____________________________________________________________________________ +[ 17655] By: jhi on 2002/07/25 20:37:16 + Log: Upgrade to Unicode::Collate 0.20. + Branch: perl + ! lib/Unicode/Collate.pm lib/Unicode/Collate/Changes + ! lib/Unicode/Collate/README lib/Unicode/Collate/t/test.t +____________________________________________________________________________ +[ 17654] By: jhi on 2002/07/23 16:33:52 + Log: Commas, schcommas. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 17653] By: nick on 2002/07/23 07:56:25 + Log: Fix #15283 - binmode() was not passing mode + to PUSHED method called from PerlIO::via. + Branch: perlio + ! ext/PerlIO/via/via.xs +____________________________________________________________________________ +[ 17652] By: nick on 2002/07/23 07:55:03 + Log: Integrate mainline to just past perl5.8.0 + Branch: perlio + +> Changes5.8 + !> Changes MANIFEST +____________________________________________________________________________ +[ 17651] By: pudge on 2002/07/23 03:24:35 + Log: Integrate maint-5.6/perl + Branch: maint-5.6/macperl + +> t/win32/longpath.t + !> (integrate 35 files) +____________________________________________________________________________ +[ 17650] By: gsar on 2002/07/22 15:27:48 + Log: create macperl-5.8 branch + Branch: maint-5.8/macperl + +> (branch 3480 files) +____________________________________________________________________________ +[ 17649] By: jhi on 2002/07/21 08:44:34 + Log: Because of #17429. + Branch: maint-5.8/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 17648] By: chip on 2002/07/19 22:51:19 + Log: Update Changes. (Including incorrect change #.) + Branch: maint-5.005/perl + ! Changes +____________________________________________________________________________ +[ 17647] By: chip on 2002/07/19 22:47:57 + Log: ensure that hashes never attempt to malloc with a negative size + From: Hugo + Subject: Re: [ID 20000421.002] Math::BigInt out of memory? + Branch: maint-5.005/perl + ! hv.c +____________________________________________________________________________ +[ 17646] By: chip on 2002/07/19 20:15:23 + Log: Update Changes in preparation for 5.005_04. + Branch: maint-5.005/perl + ! Changes +____________________________________________________________________________ +[ 17645] By: gsar on 2002/07/19 19:29:57 + Log: create maint-5.8 branch from perl/...@17638 + Branch: maint-5.8/perl + +> (branch 2829 files) +____________________________________________________________________________ +[ 17644] By: jhi on 2002/07/19 18:55:18 + Log: Copy perldelta as perl58delta, purge the perldelta. + Branch: perl + + pod/perl58delta.pod + ! MANIFEST pod/perldelta.pod +____________________________________________________________________________ +[ 17642] By: jhi on 2002/07/19 16:37:39 + Log: Update Changes; mainly to get the DEVELNNNNN stamp back in business. + Branch: perl + ! Changes patchlevel.h +____________________________________________________________________________ +[ 17641] By: jhi on 2002/07/19 16:31:08 + Log: Integrate perlio (no changes, but that's fine). + Branch: perl + !> embed.fnc perl.h +____________________________________________________________________________ +[ 17640] By: nick on 2002/07/19 07:09:37 + Log: Integrate mainline@17638, apply couple + of whitespace edits so matches perl5.8.0 exactly. + Branch: perlio + ! embed.fnc perl.h + !> AUTHORS Changes Configure INSTALL NetWare/Makefile + !> NetWare/t/NWScripts.pl Porting/config.sh Porting/config_H + !> lib/File/stat.pm patchlevel.h pod/perldelta.pod + !> pod/perlfunc.pod pod/perlhist.pod pod/perlthrtut.pod + !> pod/perltoc.pod pod/perlvar.pod util.c +____________________________________________________________________________ +[ 17639] By: jhi on 2002/07/19 00:47:18 + Log: It's all yours, Hugo. + Branch: perl + + Changes5.8 + ! Changes MANIFEST diff --git a/Configure b/Configure index 814f9e6..03b4c7d 100755 --- a/Configure +++ b/Configure @@ -20,7 +20,7 @@ # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # -# Generated on Fri Jul 19 01:54:37 EET DST 2002 [metaconfig 3.0 PL70] +# Generated on Thu Aug 1 18:53:48 CEST 2002 [metaconfig 3.0 PL70] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <&4 $cat >const.c <<'EOCP' typedef struct spug { int drokk; } spug; -int main() +main() { const char *foo; const spug y; @@ -13381,7 +13381,7 @@ $rm -f try.c try echo " " echo 'Checking to see if your C compiler knows about "volatile"...' >&4 $cat >try.c <<'EOCP' -int main() +main() { typedef struct _goo_struct goo_struct; goo_struct * volatile goo = ((goo_struct *)0); @@ -15596,7 +15596,7 @@ eval $inlibc echo " " echo "Checking to see if your C compiler can copy structs..." >&4 $cat >try.c <<'EOCP' -int main() +main() { struct blurfl { int dyick; @@ -19424,7 +19424,19 @@ Note that DynaLoader is always built and need not be mentioned here. EOM case "$dynamic_ext" in - '') dflt="$avail_ext" ;; + '') + : Exclude those listed in static_ext + dflt='' + for xxx in $avail_ext; do + case " $static_ext " in + *" $xxx "*) ;; + *) dflt="$dflt $xxx" ;; + esac + done + set X $dflt + shift + dflt="$*" + ;; *) dflt="$dynamic_ext" # Perhaps we are reusing an old out-of-date config.sh. case "$hint" in diff --git a/MANIFEST b/MANIFEST index d072177..8fea24d 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2127,6 +2127,7 @@ pod/perl56delta.pod Changes from 5.005 to 5.6 pod/perl570delta.pod Changes from 5.6 to 5.7.0 pod/perl571delta.pod Changes from 5.7.0 to 5.7.1 pod/perl572delta.pod Changes from 5.7.1 to 5.7.2 +pod/perl58delta.pod Changes from 5.6 to 5.8.0 pod/perlapi.pod Perl API documentation (autogenerated) pod/perlapio.pod PerlIO IO API info pod/perlbook.pod Perl book information @@ -2482,6 +2483,7 @@ t/op/delete.t See if delete works t/op/die.t See if die works t/op/die_exit.t See if die and exit status interaction works t/op/do.t See if subroutines work +t/op/dor.t See if defined-or (//) works t/op/each.t See if hash iterators work t/op/eval.t See if eval operator works t/op/exec.t See if exec and system work @@ -2552,6 +2554,7 @@ t/op/splice.t See if splice works t/op/split.t See if split works t/op/sprintf.t See if sprintf works t/op/srand.t See if srand works +t/op/stash.t See if %:: stashes work t/op/stat.t See if stat works t/op/study.t See if study works t/op/subst.t See if substitution works diff --git a/NetWare/Makefile b/NetWare/Makefile index 94b399f..9121f4f 100644 --- a/NetWare/Makefile +++ b/NetWare/Makefile @@ -86,7 +86,7 @@ NLM_VERSION = 3,20,0 # Here comes the CW tools - TO BE FILLED TO BUILD WITH CW - -MODULE_DESC = "Perl 5.8.0 for NetWare" +MODULE_DESC = "Perl 5.9.0 for NetWare" CCTYPE = CodeWarrior C_COMPILER = mwccnlm -c CPP_COMPILER = mwccnlm @@ -467,7 +467,7 @@ INST_NW_TOP2 = $(INST_NW_DRV)\perl # versioned installation can be obtained by setting INST_TOP above to a # path that includes an arbitrary version string. # -INST_VER = \5.8.0 +INST_VER = \5.9.0 # # Comment this out if you DON'T want your perl installation to have diff --git a/NetWare/config_H.wc b/NetWare/config_H.wc index be5a841..383a4c2 100644 --- a/NetWare/config_H.wc +++ b/NetWare/config_H.wc @@ -1027,7 +1027,7 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "c:\\perl\\5.8.0\\lib\\NetWare-x86-multi-thread" /**/ +#define ARCHLIB "c:\\perl\\5.9.0\\lib\\NetWare-x86-multi-thread" /**/ /*#define ARCHLIB_EXP "" /**/ /* ARCHNAME: @@ -1058,8 +1058,8 @@ * This symbol is the filename expanded version of the BIN symbol, for * programs that do not want to deal with that at run-time. */ -#define BIN "c:\\perl\\5.8.0\\bin\\NetWare-x86-multi-thread" /**/ -#define BIN_EXP "c:\\perl\\5.8.0\\bin\\NetWare-x86-multi-thread" /**/ +#define BIN "c:\\perl\\5.9.0\\bin\\NetWare-x86-multi-thread" /**/ +#define BIN_EXP "c:\\perl\\5.9.0\\bin\\NetWare-x86-multi-thread" /**/ /* BYTEORDER: * This symbol holds the hexadecimal constant defined in byteorder, @@ -2997,7 +2997,7 @@ * This symbol contains the ~name expanded version of SITEARCH, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define SITEARCH "c:\\perl\\site\\5.8.0\\lib\\NetWare-x86-multi-thread" /**/ +#define SITEARCH "c:\\perl\\site\\5.9.0\\lib\\NetWare-x86-multi-thread" /**/ /*#define SITEARCH_EXP "" /**/ /* SITELIB: @@ -3020,8 +3020,8 @@ * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ -#define SITELIB "c:\\perl\\site\\5.8.0\\lib" /**/ -#define SITELIB_EXP (nw_get_sitelib("5.8.0")) /**/ +#define SITELIB "c:\\perl\\site\\5.9.0\\lib" /**/ +#define SITELIB_EXP (nw_get_sitelib("5.9.0")) /**/ #define SITELIB_STEM "" /**/ /* Size_t_size: @@ -3258,7 +3258,7 @@ /* PERL_XS_APIVERSION: * This variable contains the version of the oldest perl binary * compatible with the present perl. perl.c:incpush() and - * lib/lib.pm will automatically search in c:\\perl\\site\\5.8.0\\lib\\NetWare-x86-multi-thread for older + * lib/lib.pm will automatically search in c:\\perl\\site\\5.9.0\\lib\\NetWare-x86-multi-thread for older * directories across major versions back to xs_apiversion. * This is only useful if you have a perl library directory tree * structured like the default one. @@ -3277,7 +3277,7 @@ * compatible with the present perl. (That is, pure perl modules * written for pm_apiversion will still work for the current * version). perl.c:incpush() and lib/lib.pm will automatically - * search in c:\\perl\\site\\5.8.0\\lib for older directories across major versions + * search in c:\\perl\\site\\5.9.0\\lib for older directories across major versions * back to pm_apiversion. This is only useful if you have a perl * library directory tree structured like the default one. The * versioned site_perl library was introduced in 5.005, so that's @@ -3287,7 +3287,7 @@ * (presumably) be similar. * See the INSTALL file for how this works. */ -#define PERL_XS_APIVERSION "5.8.0" +#define PERL_XS_APIVERSION "5.9.0" #define PERL_PM_APIVERSION "5.005" /* SETUID_SCRIPTS_ARE_SECURE_NOW: diff --git a/README.aix b/README.aix index 1370cdc..ef8dfd1 100644 --- a/README.aix +++ b/README.aix @@ -170,6 +170,10 @@ fill in its choices Follow the messages ... and you're done. +If you like a more web-like approach, a good start point can be +http://www14.software.ibm.com/webapp/download/downloadaz.jsp and click +"C for AIX", and follow the instructions. + =head2 Using GNU's gcc for building perl Using gcc-3.0 (tested with 3.0.4) now works out of the box, as do diff --git a/README.cn b/README.cn index 8f03927..f223cdf 100644 --- a/README.cn +++ b/README.cn @@ -4,8 +4,8 @@ specially designed to be readable as is. The following documentation is written in EUC-CN encoding. -?ç¹?ÄãÓÃÒ»°ãµÄÎÄ×ֱ༭Æ÷ÔÄÀÀÕâ·ÝÎļþ, ÇëºöÂÔÎÄÖÐÆæÌصÄ×¢¼Ç×Ö·û. -Õâ·ÝÎļþÊÇÒÔ POD (¼òÃ÷Îļþ¸ñʽ) д³É; ÕâÖÖ¸ñʽÊÇΪÁËÄÜ?ÃÈËÖ±½Ó¶ÁÈ?, +Èç¹ûÄãÓÃÒ»°ãµÄÎÄ×ֱ༭Æ÷ÔÄÀÀÕâ·ÝÎļþ, ÇëºöÂÔÎÄÖÐÆæÌصÄ×¢¼Ç×Ö·û. +Õâ·ÝÎļþÊÇÒÔ POD (¼òÃ÷Îļþ¸ñʽ) д³É; ÕâÖÖ¸ñʽÊÇΪÁËÄÜÈÃÈËÖ±½ÓÔĶÁ, ¶øÌرðÉè¼ÆµÄ. ¹ØÓڴ˸ñʽµÄ½øÒ»²½ÐÅÏ¢, Çë²Î¿¼ perlpod ÏßÉÏÎļþ. =head1 NAME @@ -17,15 +17,15 @@ perlcn - »¶Ó­À´µ½ Perl µÄÌìµØ! ´Ó 5.8.0 °æ¿ªÊ¼, Perl ¾ß±¸ÁËÍêÉÆµÄ Unicode (ͳһÂë) Ö§Ô®, -Ò²Á¬´øÖ§Ô®ÁËÐí¶àÀ­¶¡ÓïϵÒÔÍâµÄ±àÂ뷽ʽ; CJK (ÖÐ?Õº?) ±ãÊÇÆäÖеÄÒ»²¿·Ý. +Ò²Á¬´øÖ§Ô®ÁËÐí¶àÀ­¶¡ÓïϵÒÔÍâµÄ±àÂ뷽ʽ; CJK (ÖÐÈÕº«) ±ãÊÇÆäÖеÄÒ»²¿·Ý. Unicode Êǹú¼ÊÐԵıê×¼, ÊÔͼº­¸ÇÊÀ½çÉÏËùÓеÄ×Ö·û: Î÷·½ÊÀ½ç, ¶«·½ÊÀ½ç, ÒÔ¼°Á½Õß¼äµÄÒ»ÇÐ (Ï£À°ÎÄ, ÐðÀûÑÇÎÄ, ÑÇÀ­²®ÎÄ, Ï£²®À´ÎÄ, Ó¡¶ÈÎÄ, -Ó¡µØ°²ÎÄ, µÈµÈ). ËüÒ²?ÝÄÉÁ˶àÖÖ×÷ҵϵͳÓëƽÌ? (?? PC ¼°Âó½ðËþ). +Ó¡µØ°²ÎÄ, µÈµÈ). ËüÒ²ÈÝÄÉÁ˶àÖÖ×÷ҵϵͳÓëƽ̨ (Èç PC ¼°Âó½ðËþ). Perl ±¾ÉíÒÔ Unicode ½øÐвÙ×÷. Õâ±íʾ Perl ÄÚ²¿µÄ×Ö·û´®Êý¾Ý¿ÉÓà Unicode -±íʾ; Perl µÄº¯Ê½ÓëËã·û (Àý?çÕ?¹æ±íʾʽ±È¶Ô) Ò²ÄÜ¶Ô Unicode ½øÐвÙ×÷. -ÔÚÊä?ë¼°Êä³öÊ?, ΪÁË´¦ÀíÒÔ Unicode ֮ǰµÄ±àÂ뷽ʽ´æ·ÅµÄÊý¾Ý, Perl -ÌṩÁË Encode Õâ¸öÄ£¿é, ¿ÉÒÔ?ÃÄãÇáÒ׵ضÁÈ¡¼°Ð´Èë¾ÉÓеıàÂëÊ?¾Ý. +±íʾ; Perl µÄº¯Ê½ÓëËã·û (ÀýÈçÕý¹æ±íʾʽ±È¶Ô) Ò²ÄÜ¶Ô Unicode ½øÐвÙ×÷. +ÔÚÊäÈë¼°Êä³öʱ, ΪÁË´¦ÀíÒÔ Unicode ֮ǰµÄ±àÂ뷽ʽ´æ·ÅµÄÊý¾Ý, Perl +ÌṩÁË Encode Õâ¸öÄ£¿é, ¿ÉÒÔÈÃÄãÇáÒ׵ضÁÈ¡¼°Ð´Èë¾ÉÓеıàÂëÊý¾Ý. Encode ÑÓÉìÄ£¿éÖ§Ô®ÏÂÁмòÌåÖÐÎĵıàÂ뷽ʽ ('gb2312' ±íʾ 'euc-cn'): @@ -36,19 +36,19 @@ Encode cp936 ×ÖÂëÒ³ 936, Ò²¿ÉÒÔÓà 'GBK' (À©³ä¹ú±êÂë) Ö¸Ã÷ hz 7 ±ÈÌØÒݳöʽ GB2312 ±àÂë -¾ÙÀýÀ´Ëµ, ½« EUC-CN ±àÂëµÄÎĵµ×ª³É Unicode, ìóÐè¼ü?ëÏÂÁÐÖ¸Á?: +¾ÙÀýÀ´Ëµ, ½« EUC-CN ±àÂëµÄµµ°¸×ª³É Unicode, ìóÐè¼üÈëÏÂÁÐÖ¸Áî: perl -Mencoding=euc-cn,STDOUT,utf8 -pe1 < file.euc-cn > file.utf8 -Perl Ò²ÄÚ¸½ÁË "piconv", Ò»Ö§Íê?«Ò? Perl д³ÉµÄ×Ö·ûת»»¹¤¾ß³ÌÐò, Ó÷¨?çÏ?: +Perl Ò²ÄÚ¸½ÁË "piconv", Ò»Ö§ÍêÈ«ÒÔ Perl д³ÉµÄ×Ö·ûת»»¹¤¾ß³ÌÐò, Ó÷¨ÈçÏÂ: piconv -f euc-cn -t utf8 < file.euc-cn > file.utf8 piconv -f utf8 -t euc-cn < file.utf8 > file.euc-cn -ÁíÍâ, ÀûÓà encoding Ä£¿é, Äã¿ÉÒÔÇáÒ×д³öÒÔ×Ö·ûΪµ¥Î»µÄ³ÌÐòÂë, ?çÏÂËùÊ?: +ÁíÍâ, ÀûÓà encoding Ä£¿é, Äã¿ÉÒÔÇáÒ×д³öÒÔ×Ö·ûΪµ¥Î»µÄ³ÌÐòÂë, ÈçÏÂËùʾ: #!/usr/bin/env perl - # Æô¶¯ euc-cn ×Ö´®½âÎö; ±ê×¼Êä³ö?ë¼°±ê×¼´íÎó¶¼ÉèÎ? euc-cn ±àÂë + # Æô¶¯ euc-cn ×Ö´®½âÎö; ±ê×¼Êä³öÈë¼°±ê×¼´íÎó¶¼ÉèΪ euc-cn ±àÂë use encoding 'euc-cn', STDIN => 'euc-cn', STDOUT => 'euc-cn'; print length("ÂæÍÕ"); # 2 (Ë«ÒýºÅ±íʾ×Ö·û) print length('ÂæÍÕ'); # 4 (µ¥ÒýºÅ±íʾ×Ö½Ú) @@ -61,7 +61,7 @@ Perl Ò² =head2 ¶îÍâµÄÖÐÎıàÂë -?ç¹?ÐèÒª¸ü¶àµÄÖÐÎıàÂë, ¿ÉÒÔ´Ó CPAN (L) ÏÂÔØ +Èç¹ûÐèÒª¸ü¶àµÄÖÐÎıàÂë, ¿ÉÒÔ´Ó CPAN (L) ÏÂÔØ Encode::HanExtra Ä£¿é. ËüÄ¿Ç°ÌṩÏÂÁбàÂ뷽ʽ: gb18030 À©³ä¹ýµÄ¹ú±êÂë, °üº¬·±ÌåÖÐÎÄ @@ -71,7 +71,7 @@ Encode::HanExtra Ä£ big5-simp Big5 ·±ÌåÖÐÎÄÓë Unicode ¼òÌåÖÐÎÄ»¥×ª gbk-trad GBK ¼òÌåÖÐÎÄÓë Unicode ·±ÌåÖÐÎÄ»¥×ª -?ôÏëÔ? GBK Óë Big5 Ö®¼ä»¥×ª, Çë²Î¿¼¸ÃÄ£¿éÄÚ¸½µÄ b2g.pl Óë g2b.pl Á½Ö§³ÌÐò, +ÈôÏëÔÚ GBK Óë Big5 Ö®¼ä»¥×ª, Çë²Î¿¼¸ÃÄ£¿éÄÚ¸½µÄ b2g.pl Óë g2b.pl Á½Ö§³ÌÐò, »òÔÚ³ÌÐòÄÚʹÓÃÏÂÁÐд·¨: use Encode::HanConvert; @@ -80,7 +80,7 @@ Encode::HanExtra Ä£ =head2 ½øÒ»²½µÄÐÅÏ¢ -Çë²Î¿¼ Perl ÄÚ¸½µÄ´óÁ¿ËµÃ÷Îļþ (²»ÐÒ?«ÊÇÓÃÓ?ÎÄдµÄ), À´Ñ§Ï°¸ü¶à¹ØÓÚ +Çë²Î¿¼ Perl ÄÚ¸½µÄ´óÁ¿ËµÃ÷Îļþ (²»ÐÒÈ«ÊÇÓÃÓ¢ÎÄдµÄ), À´Ñ§Ï°¸ü¶à¹ØÓÚ Perl µÄ֪ʶ, ÒÔ¼° Unicode µÄʹÓ÷½Ê½. ²»¹ý, ÍⲿµÄ×ÊÔ´Ï൱·á¸»: =head2 Ìṩ Perl ×ÊÔ´µÄÍøÖ· diff --git a/README.jp b/README.jp index 8fd4dcf..8f58535 100644 --- a/README.jp +++ b/README.jp @@ -78,7 +78,7 @@ Perl5.8 # jcode.pl require "jcode.pl"; while(<>){ - jcode::convert(*_, 'euc', 'sjis); + jcode::convert(*_, 'euc', 'sjis'); print; } # Jcode.pm @@ -93,7 +93,7 @@ Perl5.8 print; } # Perl 5.8 - encoding ¤òÍøÍѤ·¤Æ - use encoding 'euc-jp', STDIN=>'shiftjis' + use encoding 'euc-jp', STDIN => 'shiftjis'; while(<>){ print; } diff --git a/README.win32 b/README.win32 index e9c56a0..fe87339 100644 --- a/README.win32 +++ b/README.win32 @@ -240,7 +240,7 @@ Be sure to read the instructions near the top of the makefiles carefully. Type "dmake" (or "nmake" if you are using that make). This should build everything. Specifically, it will create perl.exe, -perl58.dll at the perl toplevel, and various other extension dll's +perl59.dll at the perl toplevel, and various other extension dll's under the lib\auto directory. If the build fails for any reason, make sure you have done the previous steps correctly. diff --git a/config_h.SH b/config_h.SH index 8ccf989..4ff4b5d 100644 --- a/config_h.SH +++ b/config_h.SH @@ -967,19 +967,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$i_syssecrt I_SYS_SECURITY /**/ -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "$osname" /**/ -#define OSVERS "$osvers" /**/ - /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a * double, or a long double when applicable. Usual values are 2, @@ -991,53 +978,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #define MEM_ALIGNBYTES $alignbytes #endif -/* ARCHLIB: - * This variable, if defined, holds the name of the directory in - * which the user wants to put architecture-dependent public - * library files for $package. It is most often a local directory - * such as /usr/local/lib. Programs using this variable must be - * prepared to deal with filename expansion. If ARCHLIB is the - * same as PRIVLIB, it is not defined, since presumably the - * program already searches PRIVLIB. - */ -/* ARCHLIB_EXP: - * This symbol contains the ~name expanded version of ARCHLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#$d_archlib ARCHLIB "$archlib" /**/ -#$d_archlib ARCHLIB_EXP "$archlibexp" /**/ - -/* ARCHNAME: - * This symbol holds a string representing the architecture name. - * It may be used to construct an architecture-dependant pathname - * where library files may be held under a private library, for - * instance. - */ -#define ARCHNAME "$archname" /**/ - -/* HAS_ATOLF: - * This symbol, if defined, indicates that the atolf routine is - * available to convert strings into long doubles. - */ -#$d_atolf HAS_ATOLF /**/ - -/* HAS_ATOLL: - * This symbol, if defined, indicates that the atoll routine is - * available to convert strings into long longs. - */ -#$d_atoll HAS_ATOLL /**/ - -/* BIN: - * This symbol holds the path of the bin directory where the package will - * be installed. Program must be prepared to deal with ~name substitution. - */ -/* BIN_EXP: - * This symbol is the filename expanded version of the BIN symbol, for - * programs that do not want to deal with that at run-time. - */ -#define BIN "$bin" /**/ -#define BIN_EXP "$binexp" /**/ - /* BYTEORDER: * This symbol holds the hexadecimal constant defined in byteorder, * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc... @@ -1081,86 +1021,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #define BYTEORDER 0x$byteorder /* large digits for MSB */ #endif /* NeXT */ -/* CAT2: - * This macro catenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if $cpp_stuff == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" - /* If you can get stringification with catify, tell me how! */ -#endif -#if $cpp_stuff == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -/* the additional level of indirection enables these macros to be - * used as arguments to other macros. See K&R 2nd ed., page 231. */ -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if $cpp_stuff != 1 && $cpp_stuff != 42 -# include "Bletch: How does this C preprocessor catenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "$cppstdin" -#define CPPMINUS "$cppminus" -#define CPPRUN "$cpprun" -#define CPPLAST "$cpplast" - -/* HAS__FWALK: - * This symbol, if defined, indicates that the _fwalk system call is - * available to apply a function to all the file handles. - */ -#$d__fwalk HAS__FWALK /**/ - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -#$d_access HAS_ACCESS /**/ - -/* HAS_ASCTIME_R: - * This symbol, if defined, indicates that the asctime_r routine - * is available to asctime re-entrantly. - */ -/* ASCTIME_R_PROTO: - * This symbol encodes the prototype of asctime_r. - * It is zero if d_asctime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r - * is defined. - */ -#$d_asctime_r HAS_ASCTIME_R /**/ -#define ASCTIME_R_PROTO $asctime_r_proto /**/ - /* CASTI32: * This symbol is defined if the C compiler can cast negative * or large floating point numbers to 32-bit ints. @@ -1182,679 +1042,1499 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_castneg CASTNEGFLOAT /**/ #define CASTFLAGS $castflags /**/ -/* HAS_CLASS: - * This symbol, if defined, indicates that the class routine is - * available to classify doubles. Available for example in AIX. - * The returned values are defined in and are: - * - * FP_PLUS_NORM Positive normalized, nonzero - * FP_MINUS_NORM Negative normalized, nonzero - * FP_PLUS_DENORM Positive denormalized, nonzero - * FP_MINUS_DENORM Negative denormalized, nonzero - * FP_PLUS_ZERO +0.0 - * FP_MINUS_ZERO -0.0 - * FP_PLUS_INF +INF - * FP_MINUS_INF -INF - * FP_NANS Signaling Not a Number (NaNS) - * FP_NANQ Quiet Not a Number (NaNQ) - */ -#$d_class HAS_CLASS /**/ - /* VOID_CLOSEDIR: * This symbol, if defined, indicates that the closedir() routine * does not return a value. */ #$d_void_closedir VOID_CLOSEDIR /**/ -/* HAS_STRUCT_CMSGHDR: - * This symbol, if defined, indicates that the struct cmsghdr - * is supported. +/* HAS_FD_SET: + * This symbol, when defined, indicates presence of the fd_set typedef + * in */ -#$d_cmsghdr_s HAS_STRUCT_CMSGHDR /**/ +#$d_fd_set HAS_FD_SET /**/ -/* HAS_CRYPT_R: - * This symbol, if defined, indicates that the crypt_r routine - * is available to crypt re-entrantly. - */ -/* CRYPT_R_PROTO: - * This symbol encodes the prototype of crypt_r. - * It is zero if d_crypt_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r - * is defined. +/* Gconvert: + * This preprocessor macro is defined to convert a floating point + * number to a string without a trailing decimal point. This + * emulates the behavior of sprintf("%g"), but is sometimes much more + * efficient. If gconvert() is not available, but gcvt() drops the + * trailing decimal point, then gcvt() is used. If all else fails, + * a macro using sprintf("%g") is used. Arguments for the Gconvert + * macro are: value, number of digits, whether trailing zeros should + * be retained, and the output buffer. + * The usual values are: + * d_Gconvert='gconvert((x),(n),(t),(b))' + * d_Gconvert='gcvt((x),(n),(b))' + * d_Gconvert='sprintf((b),"%.*g",(n),(x))' + * The last two assume trailing zeros should not be kept. */ -#$d_crypt_r HAS_CRYPT_R /**/ -#define CRYPT_R_PROTO $crypt_r_proto /**/ +#define Gconvert(x,n,t,b) $d_Gconvert -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. +/* HAS_GETPAGESIZE: + * This symbol, if defined, indicates that the getpagesize system call + * is available to get system page size, which is the granularity of + * many memory management calls. */ -#$d_csh HAS_CSH /**/ -#ifdef HAS_CSH -#define CSH "$full_csh" /**/ -#endif +#$d_getpagsz HAS_GETPAGESIZE /**/ -/* HAS_CTIME_R: - * This symbol, if defined, indicates that the ctime_r routine - * is available to ctime re-entrantly. +/* HAS_GNULIBC: + * This symbol, if defined, indicates to the C program that + * the GNU C library is being used. A better check is to use + * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. */ -/* CTIME_R_PROTO: - * This symbol encodes the prototype of ctime_r. - * It is zero if d_ctime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r - * is defined. +#$d_gnulibc HAS_GNULIBC /**/ +#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) +# define _GNU_SOURCE +#endif +/* HAS_ISASCII: + * This manifest constant lets the C program know that isascii + * is available. */ -#$d_ctime_r HAS_CTIME_R /**/ -#define CTIME_R_PROTO $ctime_r_proto /**/ +#$d_isascii HAS_ISASCII /**/ -/* DLSYM_NEEDS_UNDERSCORE: - * This symbol, if defined, indicates that we need to prepend an - * underscore to the symbol name before calling dlsym(). This only - * makes sense if you *have* dlsym, which we will presume is the - * case if you're using dl_dlopen.xs. +/* HAS_LCHOWN: + * This symbol, if defined, indicates that the lchown routine is + * available to operate on a symbolic link (instead of following the + * link). */ -#$d_dlsymun DLSYM_NEEDS_UNDERSCORE /**/ +#$d_lchown HAS_LCHOWN /**/ -/* HAS_DRAND48_R: - * This symbol, if defined, indicates that the drand48_r routine - * is available to drand48 re-entrantly. - */ -/* DRAND48_R_PROTO: - * This symbol encodes the prototype of drand48_r. - * It is zero if d_drand48_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r - * is defined. +/* HAS_OPEN3: + * This manifest constant lets the C program know that the three + * argument form of open(2) is available. */ -#$d_drand48_r HAS_DRAND48_R /**/ -#define DRAND48_R_PROTO $drand48_r_proto /**/ +#$d_open3 HAS_OPEN3 /**/ -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); +/* HAS_SAFE_BCOPY: + * This symbol, if defined, indicates that the bcopy routine is available + * to copy potentially overlapping memory blocks. Normally, you should + * probably use memmove() or memcpy(). If neither is defined, roll your + * own version. + */ +#$d_safebcpy HAS_SAFE_BCOPY /**/ + +/* HAS_SAFE_MEMCPY: + * This symbol, if defined, indicates that the memcpy routine is available + * to copy potentially overlapping memory blocks. If you need to + * copy overlapping memory blocks, you should check HAS_MEMMOVE and + * use memmove() instead, if available. + */ +#$d_safemcpy HAS_SAFE_MEMCPY /**/ + +/* HAS_SANE_MEMCMP: + * This symbol, if defined, indicates that the memcmp routine is available + * and can be used to compare relative magnitudes of chars with their high + * bits set. If it is not defined, roll your own version. + */ +#$d_sanemcmp HAS_SANE_MEMCMP /**/ + +/* HAS_SIGACTION: + * This symbol, if defined, indicates that Vr4's sigaction() routine + * is available. + */ +#$d_sigaction HAS_SIGACTION /**/ + +/* HAS_SIGSETJMP: + * This variable indicates to the C program that the sigsetjmp() + * routine is available to save the calling process's registers + * and stack environment for later use by siglongjmp(), and + * to optionally save the process's signal mask. See + * Sigjmp_buf, Sigsetjmp, and Siglongjmp. + */ +/* Sigjmp_buf: + * This is the buffer type to be used with Sigsetjmp and Siglongjmp. + */ +/* Sigsetjmp: + * This macro is used in the same way as sigsetjmp(), but will invoke + * traditional setjmp() if sigsetjmp isn't available. + * See HAS_SIGSETJMP. + */ +/* Siglongjmp: + * This macro is used in the same way as siglongjmp(), but will invoke + * traditional longjmp() if siglongjmp isn't available. + * See HAS_SIGSETJMP. + */ +#$d_sigsetjmp HAS_SIGSETJMP /**/ +#ifdef HAS_SIGSETJMP +#define Sigjmp_buf sigjmp_buf +#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) +#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) +#else +#define Sigjmp_buf jmp_buf +#define Sigsetjmp(buf,save_mask) setjmp((buf)) +#define Siglongjmp(buf,retval) longjmp((buf),(retval)) +#endif + +/* USE_STDIO_PTR: + * This symbol is defined if the _ptr and _cnt fields (or similar) + * of the stdio FILE structure can be used to access the stdio buffer + * for a file handle. If this is defined, then the FILE_ptr(fp) + * and FILE_cnt(fp) macros will also be defined and should be used + * to access these fields. + */ +/* FILE_ptr: + * This macro is used to access the _ptr field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_PTR is defined. + */ +/* STDIO_PTR_LVALUE: + * This symbol is defined if the FILE_ptr macro can be used as an + * lvalue. + */ +/* FILE_cnt: + * This macro is used to access the _cnt field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_PTR is defined. + */ +/* STDIO_CNT_LVALUE: + * This symbol is defined if the FILE_cnt macro can be used as an + * lvalue. + */ +/* STDIO_PTR_LVAL_SETS_CNT: + * This symbol is defined if using the FILE_ptr macro as an lvalue + * to increase the pointer by n has the side effect of decreasing the + * value of File_cnt(fp) by n. + */ +/* STDIO_PTR_LVAL_NOCHANGE_CNT: + * This symbol is defined if using the FILE_ptr macro as an lvalue + * to increase the pointer by n leaves File_cnt(fp) unchanged. + */ +#$d_stdstdio USE_STDIO_PTR /**/ +#ifdef USE_STDIO_PTR +#define FILE_ptr(fp) $stdio_ptr +#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/ +#define FILE_cnt(fp) $stdio_cnt +#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/ +#$d_stdio_ptr_lval_sets_cnt STDIO_PTR_LVAL_SETS_CNT /**/ +#$d_stdio_ptr_lval_nochange_cnt STDIO_PTR_LVAL_NOCHANGE_CNT /**/ +#endif + +/* USE_STDIO_BASE: + * This symbol is defined if the _base field (or similar) of the + * stdio FILE structure can be used to access the stdio buffer for + * a file handle. If this is defined, then the FILE_base(fp) macro + * will also be defined and should be used to access this field. + * Also, the FILE_bufsiz(fp) macro will be defined and should be used + * to determine the number of bytes in the buffer. USE_STDIO_BASE + * will never be defined unless USE_STDIO_PTR is. + */ +/* FILE_base: + * This macro is used to access the _base field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_BASE is defined. + */ +/* FILE_bufsiz: + * This macro is used to determine the number of bytes in the I/O + * buffer pointed to by _base field (or equivalent) of the FILE + * structure pointed to its argument. This macro will always be defined + * if USE_STDIO_BASE is defined. + */ +#$d_stdiobase USE_STDIO_BASE /**/ +#ifdef USE_STDIO_BASE +#define FILE_base(fp) $stdio_base +#define FILE_bufsiz(fp) $stdio_bufsiz +#endif + +/* HAS_VPRINTF: + * This symbol, if defined, indicates that the vprintf routine is available + * to printf with a pointer to an argument list. If unavailable, you + * may need to write your own, probably in terms of _doprnt(). + */ +/* USE_CHAR_VSPRINTF: + * This symbol is defined if this system has vsprintf() returning type + * (char*). The trend seems to be to declare it as "int vsprintf()". It + * is up to the package author to declare vsprintf correctly based on the + * symbol. + */ +#$d_vprintf HAS_VPRINTF /**/ +#$d_charvspr USE_CHAR_VSPRINTF /**/ + +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE $doublesize /**/ + +/* I_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME_KERNEL: + * This symbol, if defined, indicates to the C program that it should + * include with KERNEL defined. + */ +/* HAS_TM_TM_ZONE: + * This symbol, if defined, indicates to the C program that + * the struct tm has a tm_zone field. + */ +#$i_time I_TIME /**/ +#$i_systime I_SYS_TIME /**/ +#$i_systimek I_SYS_TIME_KERNEL /**/ +#$d_tm_tm_zone HAS_TM_TM_ZONE /**/ + +/* VAL_O_NONBLOCK: + * This symbol is to be used during open() or fcntl(F_SETFL) to turn on + * non-blocking I/O for the file descriptor. Note that there is no way + * back, i.e. you cannot turn it blocking again this way. If you wish to + * alternatively switch between blocking and non-blocking, use the + * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. + */ +/* VAL_EAGAIN: + * This symbol holds the errno error code set by read() when no data was + * present on the non-blocking file descriptor. + */ +/* RD_NODATA: + * This symbol holds the return code from read() when no data is present + * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is + * not defined, then you can't distinguish between no data and EOF by + * issuing a read(). You'll have to find another way to tell for sure! + */ +/* EOF_NONBLOCK: + * This symbol, if defined, indicates to the C program that a read() on + * a non-blocking file descriptor will return 0 on EOF, and not the value + * held in RD_NODATA (-1 usually, in that case!). + */ +#define VAL_O_NONBLOCK $o_nonblock +#define VAL_EAGAIN $eagain +#define RD_NODATA $rd_nodata +#$d_eofnblk EOF_NONBLOCK + +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE $ptrsize /**/ + +/* Drand01: + * This macro is to be used to generate uniformly distributed + * random numbers over the range [0., 1.[. You may have to supply + * an 'extern double drand48();' in your program since SunOS 4.1.3 + * doesn't provide you with anything relevant in its headers. + * See HAS_DRAND48_PROTO. + */ +/* Rand_seed_t: + * This symbol defines the type of the argument of the + * random seed function. + */ +/* seedDrand01: + * This symbol defines the macro to be used in seeding the + * random number generator (see Drand01). + */ +/* RANDBITS: + * This symbol indicates how many bits are produced by the + * function used to generate normalized random numbers. + * Values include 15, 16, 31, and 48. + */ +#define Drand01() $drand01 /**/ +#define Rand_seed_t $randseedtype /**/ +#define seedDrand01(x) $seedfunc((Rand_seed_t)x) /**/ +#define RANDBITS $randbits /**/ + +/* SSize_t: + * This symbol holds the type used by functions that return + * a count of bytes or an error condition. It must be a signed type. + * It is usually ssize_t, but may be long or int, etc. + * It may be necessary to include or + * to get any typedef'ed information. + * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). + */ +#define SSize_t $ssizetype /* signed count of bytes */ + +/* EBCDIC: + * This symbol, if defined, indicates that this system uses + * EBCDIC encoding. + */ +#$ebcdic EBCDIC /**/ + +/* ARCHLIB: + * This variable, if defined, holds the name of the directory in + * which the user wants to put architecture-dependent public + * library files for $package. It is most often a local directory + * such as /usr/local/lib. Programs using this variable must be + * prepared to deal with filename expansion. If ARCHLIB is the + * same as PRIVLIB, it is not defined, since presumably the + * program already searches PRIVLIB. + */ +/* ARCHLIB_EXP: + * This symbol contains the ~name expanded version of ARCHLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#$d_archlib ARCHLIB "$archlib" /**/ +#$d_archlib ARCHLIB_EXP "$archlibexp" /**/ + +/* BIN: + * This symbol holds the path of the bin directory where the package will + * be installed. Program must be prepared to deal with ~name substitution. + */ +/* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ +#define BIN "$bin" /**/ +#define BIN_EXP "$binexp" /**/ + +/* PERL_INC_VERSION_LIST: + * This variable specifies the list of subdirectories in over + * which perl.c:incpush() and lib/lib.pm will automatically + * search when adding directories to @INC, in a format suitable + * for a C initialization string. See the inc_version_list entry + * in Porting/Glossary for more details. + */ +#define PERL_INC_VERSION_LIST $inc_version_list_init /**/ + +/* INSTALL_USR_BIN_PERL: + * This symbol, if defined, indicates that Perl is to be installed + * also as /usr/bin/perl. + */ +#$installusrbinperl INSTALL_USR_BIN_PERL /**/ + +/* PERL_OTHERLIBDIRS: + * This variable contains a colon-separated set of paths for the perl + * binary to search for additional library files or modules. + * These directories will be tacked to the end of @INC. + * Perl will automatically search below each path for version- + * and architecture-specific directories. See PERL_INC_VERSION_LIST + * for more details. + */ +#$d_perl_otherlibdirs PERL_OTHERLIBDIRS "$otherlibdirs" /**/ + +/* PRIVLIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + */ +/* PRIVLIB_EXP: + * This symbol contains the ~name expanded version of PRIVLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#define PRIVLIB "$privlib" /**/ +#define PRIVLIB_EXP "$privlibexp" /**/ + +/* SITEARCH: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + * The standard distribution will put nothing in this directory. + * After perl has been installed, users may install their own local + * architecture-dependent modules in this directory with + * MakeMaker Makefile.PL + * or equivalent. See INSTALL for details. + */ +/* SITEARCH_EXP: + * This symbol contains the ~name expanded version of SITEARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#define SITEARCH "$sitearch" /**/ +#define SITEARCH_EXP "$sitearchexp" /**/ + +/* SITELIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + * The standard distribution will put nothing in this directory. + * After perl has been installed, users may install their own local + * architecture-independent modules in this directory with + * MakeMaker Makefile.PL + * or equivalent. See INSTALL for details. + */ +/* SITELIB_EXP: + * This symbol contains the ~name expanded version of SITELIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/* SITELIB_STEM: + * This define is SITELIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ +#define SITELIB "$sitelib" /**/ +#define SITELIB_EXP "$sitelibexp" /**/ +#define SITELIB_STEM "$sitelib_stem" /**/ + +/* PERL_VENDORARCH: + * If defined, this symbol contains the name of a private library. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. + * It may have a ~ on the front. + * The standard distribution will put nothing in this directory. + * Vendors who distribute perl may wish to place their own + * architecture-dependent modules and extensions in this directory with + * MakeMaker Makefile.PL INSTALLDIRS=vendor + * or equivalent. See INSTALL for details. + */ +/* PERL_VENDORARCH_EXP: + * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#$d_vendorarch PERL_VENDORARCH "$vendorarch" /**/ +#$d_vendorarch PERL_VENDORARCH_EXP "$vendorarchexp" /**/ + +/* PERL_VENDORLIB_EXP: + * This symbol contains the ~name expanded version of VENDORLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/* PERL_VENDORLIB_STEM: + * This define is PERL_VENDORLIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ +#$d_vendorlib PERL_VENDORLIB_EXP "$vendorlibexp" /**/ +#$d_vendorlib PERL_VENDORLIB_STEM "$vendorlib_stem" /**/ + +/* OSNAME: + * This symbol contains the name of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ +/* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ +#define OSNAME "$osname" /**/ +#define OSVERS "$osvers" /**/ + +/* CAT2: + * This macro catenates 2 tokens together. + */ +/* STRINGIFY: + * This macro surrounds its token with double quotes. + */ +#if $cpp_stuff == 1 +#define CAT2(a,b) a/**/b +#define STRINGIFY(a) "a" + /* If you can get stringification with catify, tell me how! */ +#endif +#if $cpp_stuff == 42 +#define PeRl_CaTiFy(a, b) a ## b +#define PeRl_StGiFy(a) #a +/* the additional level of indirection enables these macros to be + * used as arguments to other macros. See K&R 2nd ed., page 231. */ +#define CAT2(a,b) PeRl_CaTiFy(a,b) +#define StGiFy(a) PeRl_StGiFy(a) +#define STRINGIFY(a) PeRl_StGiFy(a) +#endif +#if $cpp_stuff != 1 && $cpp_stuff != 42 +# include "Bletch: How does this C preprocessor catenate tokens?" +#endif + +/* CPPSTDIN: + * This symbol contains the first part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. Typical value of "cc -E" or "/lib/cpp", but it can also + * call a wrapper. See CPPRUN. + */ +/* CPPMINUS: + * This symbol contains the second part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. This symbol will have the value "-" if CPPSTDIN needs a minus + * to specify standard input, otherwise the value is "". + */ +/* CPPRUN: + * This symbol contains the string which will invoke a C preprocessor on + * the standard input and produce to standard output. It needs to end + * with CPPLAST, after all other preprocessor flags have been specified. + * The main difference with CPPSTDIN is that this program will never be a + * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is + * available directly to the user. Note that it may well be different from + * the preprocessor used to compile the C program. + */ +/* CPPLAST: + * This symbol is intended to be used along with CPPRUN in the same manner + * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". + */ +#define CPPSTDIN "$cppstdin" +#define CPPMINUS "$cppminus" +#define CPPRUN "$cpprun" +#define CPPLAST "$cpplast" + +/* HAS_ACCESS: + * This manifest constant lets the C program know that the access() + * system call is available to check for accessibility using real UID/GID. + * (always present on UNIX.) + */ +#$d_access HAS_ACCESS /**/ + +/* HAS_CRYPT: + * This symbol, if defined, indicates that the crypt routine is available + * to encrypt passwords and the like. + */ +#$d_crypt HAS_CRYPT /**/ + +/* HAS_CSH: + * This symbol, if defined, indicates that the C-shell exists. + */ +/* CSH: + * This symbol, if defined, contains the full pathname of csh. + */ +#$d_csh HAS_CSH /**/ +#ifdef HAS_CSH +#define CSH "$full_csh" /**/ +#endif + +/* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ +/* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ +#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ +#$d_dosuid DOSUID /**/ + +/* HAS_ENDGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the group database. + */ +#$d_endgrent HAS_ENDGRENT /**/ + +/* HAS_ENDHOSTENT: + * This symbol, if defined, indicates that the endhostent() routine is + * available to close whatever was being used for host queries. + */ +#$d_endhent HAS_ENDHOSTENT /**/ + +/* HAS_ENDNETENT: + * This symbol, if defined, indicates that the endnetent() routine is + * available to close whatever was being used for network queries. + */ +#$d_endnent HAS_ENDNETENT /**/ + +/* HAS_ENDPROTOENT: + * This symbol, if defined, indicates that the endprotoent() routine is + * available to close whatever was being used for protocol queries. + */ +#$d_endpent HAS_ENDPROTOENT /**/ + +/* HAS_ENDPWENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the passwd database. + */ +#$d_endpwent HAS_ENDPWENT /**/ + +/* HAS_ENDSERVENT: + * This symbol, if defined, indicates that the endservent() routine is + * available to close whatever was being used for service queries. + */ +#$d_endsent HAS_ENDSERVENT /**/ + +/* FLEXFILENAMES: + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. + */ +#$d_flexfnam FLEXFILENAMES /**/ + +/* HAS_GETGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for sequential access of the group database. + */ +#$d_getgrent HAS_GETGRENT /**/ + +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#$d_gethbyaddr HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#$d_gethbyname HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +#$d_gethent HAS_GETHOSTENT /**/ + +/* HAS_GETHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * gethostname() routine to derive the host name. See also HAS_UNAME + * and PHOSTNAME. + */ +/* HAS_UNAME: + * This symbol, if defined, indicates that the C program may use the + * uname() routine to derive the host name. See also HAS_GETHOSTNAME + * and PHOSTNAME. + */ +/* PHOSTNAME: + * This symbol, if defined, indicates the command to feed to the + * popen() routine to derive the host name. See also HAS_GETHOSTNAME + * and HAS_UNAME. Note that the command uses a fully qualified path, + * so that it is safe even if used by a process with super-user + * privileges. + */ +/* HAS_PHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * contents of PHOSTNAME as a command to feed to the popen() routine + * to derive the host name. + */ +#$d_gethname HAS_GETHOSTNAME /**/ +#$d_uname HAS_UNAME /**/ +#$d_phostname HAS_PHOSTNAME /**/ +#ifdef HAS_PHOSTNAME +#define PHOSTNAME "$aphostname" /* How to get the host name */ +#endif + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +#$d_getnbyaddr HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +#$d_getnbyname HAS_GETNETBYNAME /**/ + +/* HAS_GETNETENT: + * This symbol, if defined, indicates that the getnetent() routine is + * available to look up network names in some data base or another. */ -#$d_drand48proto HAS_DRAND48_PROTO /**/ +#$d_getnent HAS_GETNETENT /**/ -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. +/* HAS_GETPROTOENT: + * This symbol, if defined, indicates that the getprotoent() routine is + * available to look up protocols in some data base or another. */ -#$d_endgrent HAS_ENDGRENT /**/ +#$d_getpent HAS_GETPROTOENT /**/ -/* HAS_ENDGRENT_R: - * This symbol, if defined, indicates that the endgrent_r routine - * is available to endgrent re-entrantly. +/* HAS_GETPGRP: + * This symbol, if defined, indicates that the getpgrp routine is + * available to get the current process group. */ -/* ENDGRENT_R_PROTO: - * This symbol encodes the prototype of endgrent_r. - * It is zero if d_endgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r - * is defined. +/* USE_BSD_GETPGRP: + * This symbol, if defined, indicates that getpgrp needs one + * arguments whereas USG one needs none. + */ +#$d_getpgrp HAS_GETPGRP /**/ +#$d_bsdgetpgrp USE_BSD_GETPGRP /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#$d_getpbyname HAS_GETPROTOBYNAME /**/ +#$d_getpbynumber HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETPWENT: + * This symbol, if defined, indicates that the getpwent routine is + * available for sequential access of the passwd database. + * If this is not available, the older getpw() function may be available. + */ +#$d_getpwent HAS_GETPWENT /**/ + +/* HAS_GETSERVENT: + * This symbol, if defined, indicates that the getservent() routine is + * available to look up network services in some data base or another. + */ +#$d_getsent HAS_GETSERVENT /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#$d_getsbyname HAS_GETSERVBYNAME /**/ +#$d_getsbyport HAS_GETSERVBYPORT /**/ + +/* HAS_HTONL: + * This symbol, if defined, indicates that the htonl() routine (and + * friends htons() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_HTONS: + * This symbol, if defined, indicates that the htons() routine (and + * friends htonl() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHL: + * This symbol, if defined, indicates that the ntohl() routine (and + * friends htonl() htons() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHS: + * This symbol, if defined, indicates that the ntohs() routine (and + * friends htonl() htons() ntohl()) are available to do network + * order byte swapping. + */ +#$d_htonl HAS_HTONL /**/ +#$d_htonl HAS_HTONS /**/ +#$d_htonl HAS_NTOHL /**/ +#$d_htonl HAS_NTOHS /**/ + +/* HAS_LONG_DOUBLE: + * This symbol will be defined if the C compiler supports long + * doubles. + */ +/* LONG_DOUBLESIZE: + * This symbol contains the size of a long double, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long doubles. + */ +#$d_longdbl HAS_LONG_DOUBLE /**/ +#ifdef HAS_LONG_DOUBLE +#define LONG_DOUBLESIZE $longdblsize /**/ +#endif + +/* HAS_LONG_LONG: + * This symbol will be defined if the C compiler supports long long. + */ +/* LONGLONGSIZE: + * This symbol contains the size of a long long, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long long. + */ +#$d_longlong HAS_LONG_LONG /**/ +#ifdef HAS_LONG_LONG +#define LONGLONGSIZE $longlongsize /**/ +#endif + +/* HAS_MEMCHR: + * This symbol, if defined, indicates that the memchr routine is available + * to locate characters within a C string. + */ +#$d_memchr HAS_MEMCHR /**/ + +/* HAS_MKSTEMP: + * This symbol, if defined, indicates that the mkstemp routine is + * available to exclusively create and open a uniquely named + * temporary file. + */ +#$d_mkstemp HAS_MKSTEMP /**/ + +/* HAS_MMAP: + * This symbol, if defined, indicates that the mmap system call is + * available to map a file into memory. + */ +/* Mmap_t: + * This symbol holds the return type of the mmap() system call + * (and simultaneously the type of the first argument). + * Usually set to 'void *' or 'cadd_t'. + */ +#$d_mmap HAS_MMAP /**/ +#define Mmap_t $mmaptype /**/ + +/* HAS_MSG: + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported (IPC mechanism based on message queues). + */ +#$d_msg HAS_MSG /**/ + +/* HAS_SEM: + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ +#$d_sem HAS_SEM /**/ + +/* HAS_SETGRENT: + * This symbol, if defined, indicates that the setgrent routine is + * available for initializing sequential access of the group database. + */ +#$d_setgrent HAS_SETGRENT /**/ + +/* HAS_SETGROUPS: + * This symbol, if defined, indicates that the setgroups() routine is + * available to set the list of process groups. If unavailable, multiple + * groups are probably not supported. + */ +#$d_setgrps HAS_SETGROUPS /**/ + +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +#$d_sethent HAS_SETHOSTENT /**/ + +/* HAS_SETNETENT: + * This symbol, if defined, indicates that the setnetent() routine is + * available. + */ +#$d_setnent HAS_SETNETENT /**/ + +/* HAS_SETPROTOENT: + * This symbol, if defined, indicates that the setprotoent() routine is + * available. + */ +#$d_setpent HAS_SETPROTOENT /**/ + +/* HAS_SETPGRP: + * This symbol, if defined, indicates that the setpgrp routine is + * available to set the current process group. + */ +/* USE_BSD_SETPGRP: + * This symbol, if defined, indicates that setpgrp needs two + * arguments whereas USG one needs none. See also HAS_SETPGID + * for a POSIX interface. + */ +#$d_setpgrp HAS_SETPGRP /**/ +#$d_bsdsetpgrp USE_BSD_SETPGRP /**/ + +/* HAS_SETPWENT: + * This symbol, if defined, indicates that the setpwent routine is + * available for initializing sequential access of the passwd database. + */ +#$d_setpwent HAS_SETPWENT /**/ + +/* HAS_SETSERVENT: + * This symbol, if defined, indicates that the setservent() routine is + * available. + */ +#$d_setsent HAS_SETSERVENT /**/ + +/* HAS_SETVBUF: + * This symbol, if defined, indicates that the setvbuf routine is + * available to change buffering on an open stdio stream. + * to a line-buffered mode. + */ +#$d_setvbuf HAS_SETVBUF /**/ + +/* HAS_SHM: + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ +#$d_shm HAS_SHM /**/ + +/* Shmat_t: + * This symbol holds the return type of the shmat() system call. + * Usually set to 'void *' or 'char *'. + */ +/* HAS_SHMAT_PROTOTYPE: + * This symbol, if defined, indicates that the sys/shm.h includes + * a prototype for shmat(). Otherwise, it is up to the program to + * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, + * but not always right so it should be emitted by the program only + * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. + */ +#define Shmat_t $shmattype /**/ +#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/ + +/* HAS_SOCKET: + * This symbol, if defined, indicates that the BSD socket interface is + * supported. + */ +/* HAS_SOCKETPAIR: + * This symbol, if defined, indicates that the BSD socketpair() call is + * supported. + */ +/* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. */ -#$d_endgrent_r HAS_ENDGRENT_R /**/ -#define ENDGRENT_R_PROTO $endgrent_r_proto /**/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. +/* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. */ -#$d_endhent HAS_ENDHOSTENT /**/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. +/* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. */ -#$d_endnent HAS_ENDNETENT /**/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. +/* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. */ -#$d_endpent HAS_ENDPROTOENT /**/ +#$d_socket HAS_SOCKET /**/ +#$d_sockpair HAS_SOCKETPAIR /**/ +#$d_msg_ctrunc HAS_MSG_CTRUNC /**/ +#$d_msg_dontroute HAS_MSG_DONTROUTE /**/ +#$d_msg_oob HAS_MSG_OOB /**/ +#$d_msg_peek HAS_MSG_PEEK /**/ +#$d_msg_proxy HAS_MSG_PROXY /**/ +#$d_scm_rights HAS_SCM_RIGHTS /**/ -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. +/* USE_STAT_BLOCKS: + * This symbol is defined if this system has a stat structure declaring + * st_blksize and st_blocks. */ -#$d_endpwent HAS_ENDPWENT /**/ +#ifndef USE_STAT_BLOCKS +#$d_statblks USE_STAT_BLOCKS /**/ +#endif -/* HAS_ENDPWENT_R: - * This symbol, if defined, indicates that the endpwent_r routine - * is available to endpwent re-entrantly. +/* HAS_STRERROR: + * This symbol, if defined, indicates that the strerror routine is + * available to translate error numbers to strings. See the writeup + * of Strerror() in this file before you try to define your own. */ -/* ENDPWENT_R_PROTO: - * This symbol encodes the prototype of endpwent_r. - * It is zero if d_endpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r - * is defined. +/* HAS_SYS_ERRLIST: + * This symbol, if defined, indicates that the sys_errlist array is + * available to translate error numbers to strings. The extern int + * sys_nerr gives the size of that table. */ -#$d_endpwent_r HAS_ENDPWENT_R /**/ -#define ENDPWENT_R_PROTO $endpwent_r_proto /**/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. +/* Strerror: + * This preprocessor symbol is defined as a macro if strerror() is + * not available to translate error numbers to strings but sys_errlist[] + * array is there. */ -#$d_endsent HAS_ENDSERVENT /**/ +#$d_strerror HAS_STRERROR /**/ +#$d_syserrlst HAS_SYS_ERRLIST /**/ +#define Strerror(e) $d_strerrm -/* HAS_FCHDIR: - * This symbol, if defined, indicates that the fchdir routine is - * available to change directory using a file descriptor. +/* HAS_STRTOUL: + * This symbol, if defined, indicates that the strtoul routine is + * available to provide conversion of strings to unsigned long. */ -#$d_fchdir HAS_FCHDIR /**/ +#$d_strtoul HAS_STRTOUL /**/ -/* FCNTL_CAN_LOCK: - * This symbol, if defined, indicates that fcntl() can be used - * for file locking. Normally on Unix systems this is defined. - * It may be undefined on VMS. +/* HAS_UNION_SEMUN: + * This symbol, if defined, indicates that the union semun is + * defined by including . If not, the user code + * probably needs to define it as: + * union semun { + * int val; + * struct semid_ds *buf; + * unsigned short *array; + * } */ -#$d_fcntl_can_lock FCNTL_CAN_LOCK /**/ - -/* HAS_FD_SET: - * This symbol, when defined, indicates presence of the fd_set typedef - * in +/* USE_SEMCTL_SEMUN: + * This symbol, if defined, indicates that union semun is + * used for semctl IPC_STAT. */ -#$d_fd_set HAS_FD_SET /**/ - -/* HAS_FINITE: - * This symbol, if defined, indicates that the finite routine is - * available to check whether a double is finite (non-infinity non-NaN). +/* USE_SEMCTL_SEMID_DS: + * This symbol, if defined, indicates that struct semid_ds * is + * used for semctl IPC_STAT. */ -#$d_finite HAS_FINITE /**/ +#$d_union_semun HAS_UNION_SEMUN /**/ +#$d_semctl_semun USE_SEMCTL_SEMUN /**/ +#$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/ -/* HAS_FINITEL: - * This symbol, if defined, indicates that the finitel routine is - * available to check whether a long double is finite - * (non-infinity non-NaN). +/* HAS_VFORK: + * This symbol, if defined, indicates that vfork() exists. */ -#$d_finitel HAS_FINITEL /**/ +#$d_vfork HAS_VFORK /**/ -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. +/* Signal_t: + * This symbol's value is either "void" or "int", corresponding to the + * appropriate return type of a signal handler. Thus, you can declare + * a signal handler using "Signal_t (*handler)()", and define the + * handler using "Signal_t handler(sig)". */ -#$d_flexfnam FLEXFILENAMES /**/ +#define Signal_t $signal_t /* Signal handler's return type */ -/* HAS_FP_CLASS: - * This symbol, if defined, indicates that the fp_class routine is - * available to classify doubles. Available for example in Digital UNIX. - * The returned values are defined in and are: - * - * FP_SNAN Signaling NaN (Not-a-Number) - * FP_QNAN Quiet NaN (Not-a-Number) - * FP_POS_INF +infinity - * FP_NEG_INF -infinity - * FP_POS_NORM Positive normalized - * FP_NEG_NORM Negative normalized - * FP_POS_DENORM Positive denormalized - * FP_NEG_DENORM Negative denormalized - * FP_POS_ZERO +0.0 (positive zero) - * FP_NEG_ZERO -0.0 (negative zero) +/* Groups_t: + * This symbol holds the type used for the second argument to + * getgroups() and setgroups(). Usually, this is the same as + * gidtype (gid_t) , but sometimes it isn't. + * It can be int, ushort, gid_t, etc... + * It may be necessary to include to get any + * typedef'ed information. This is only required if you have + * getgroups() or setgroups().. */ -#$d_fp_class HAS_FP_CLASS /**/ +#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) +#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */ +#endif -/* HAS_FPCLASS: - * This symbol, if defined, indicates that the fpclass routine is - * available to classify doubles. Available for example in Solaris/SVR4. - * The returned values are defined in and are: - * - * FP_SNAN signaling NaN - * FP_QNAN quiet NaN - * FP_NINF negative infinity - * FP_PINF positive infinity - * FP_NDENORM negative denormalized non-zero - * FP_PDENORM positive denormalized non-zero - * FP_NZERO negative zero - * FP_PZERO positive zero - * FP_NNORM negative normalized non-zero - * FP_PNORM positive normalized non-zero +/* I_GRP: + * This symbol, if defined, indicates to the C program that it should + * include . */ -#$d_fpclass HAS_FPCLASS /**/ - -/* HAS_FPCLASSIFY: - * This symbol, if defined, indicates that the fpclassify routine is - * available to classify doubles. Available for example in HP-UX. - * The returned values are defined in and are - * - * FP_NORMAL Normalized - * FP_ZERO Zero - * FP_INFINITE Infinity - * FP_SUBNORMAL Denormalized - * FP_NAN NaN - * +/* GRPASSWD: + * This symbol, if defined, indicates to the C program that struct group + * in contains gr_passwd. */ -#$d_fpclassify HAS_FPCLASSIFY /**/ +#$i_grp I_GRP /**/ +#$d_grpasswd GRPASSWD /**/ -/* HAS_FPOS64_T: - * This symbol will be defined if the C compiler supports fpos64_t. +/* I_NDBM: + * This symbol, if defined, indicates that exists and should + * be included. */ -#$d_fpos64_t HAS_FPOS64_T /**/ +#$i_ndbm I_NDBM /**/ -/* HAS_FREXPL: - * This symbol, if defined, indicates that the frexpl routine is - * available to break a long double floating-point number into - * a normalized fraction and an integral power of 2. +/* I_NETDB: + * This symbol, if defined, indicates that exists and + * should be included. */ -#$d_frexpl HAS_FREXPL /**/ +#$i_netdb I_NETDB /**/ -/* HAS_STRUCT_FS_DATA: - * This symbol, if defined, indicates that the struct fs_data - * to do statfs() is supported. +/* I_PWD: + * This symbol, if defined, indicates to the C program that it should + * include . */ -#$d_fs_data_s HAS_STRUCT_FS_DATA /**/ - -/* HAS_FSEEKO: - * This symbol, if defined, indicates that the fseeko routine is - * available to fseek beyond 32 bits (useful for ILP32 hosts). +/* PWQUOTA: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_quota. */ -#$d_fseeko HAS_FSEEKO /**/ - -/* HAS_FSTATFS: - * This symbol, if defined, indicates that the fstatfs routine is - * available to stat filesystems by file descriptors. +/* PWAGE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_age. */ -#$d_fstatfs HAS_FSTATFS /**/ - -/* HAS_FSYNC: - * This symbol, if defined, indicates that the fsync routine is - * available to write a file's modified data and attributes to - * permanent storage. +/* PWCHANGE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_change. */ -#$d_fsync HAS_FSYNC /**/ - -/* HAS_FTELLO: - * This symbol, if defined, indicates that the ftello routine is - * available to ftell beyond 32 bits (useful for ILP32 hosts). +/* PWCLASS: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_class. */ -#$d_ftello HAS_FTELLO /**/ - -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This - * emulates the behavior of sprintf("%g"), but is sometimes much more - * efficient. If gconvert() is not available, but gcvt() drops the - * trailing decimal point, then gcvt() is used. If all else fails, - * a macro using sprintf("%g") is used. Arguments for the Gconvert - * macro are: value, number of digits, whether trailing zeros should - * be retained, and the output buffer. - * The usual values are: - * d_Gconvert='gconvert((x),(n),(t),(b))' - * d_Gconvert='gcvt((x),(n),(b))' - * d_Gconvert='sprintf((b),"%.*g",(n),(x))' - * The last two assume trailing zeros should not be kept. +/* PWEXPIRE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_expire. */ -#define Gconvert(x,n,t,b) $d_Gconvert - -/* HAS_GETCWD: - * This symbol, if defined, indicates that the getcwd routine is - * available to get the current working directory. +/* PWCOMMENT: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_comment. */ -#$d_getcwd HAS_GETCWD /**/ - -/* HAS_GETESPWNAM: - * This symbol, if defined, indicates that the getespwnam system call is - * available to retrieve enchanced (shadow) password entries by name. +/* PWGECOS: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_gecos. */ -#$d_getespwnam HAS_GETESPWNAM /**/ - -/* HAS_GETFSSTAT: - * This symbol, if defined, indicates that the getfsstat routine is - * available to stat filesystems in bulk. +/* PWPASSWD: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_passwd. */ -#$d_getfsstat HAS_GETFSSTAT /**/ +#$i_pwd I_PWD /**/ +#$d_pwquota PWQUOTA /**/ +#$d_pwage PWAGE /**/ +#$d_pwchange PWCHANGE /**/ +#$d_pwclass PWCLASS /**/ +#$d_pwexpire PWEXPIRE /**/ +#$d_pwcomment PWCOMMENT /**/ +#$d_pwgecos PWGECOS /**/ +#$d_pwpasswd PWPASSWD /**/ -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. +/* I_SYSUIO: + * This symbol, if defined, indicates that exists and + * should be included. */ -#$d_getgrent HAS_GETGRENT /**/ +#$i_sysuio I_SYSUIO /**/ -/* HAS_GETGRENT_R: - * This symbol, if defined, indicates that the getgrent_r routine - * is available to getgrent re-entrantly. +/* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. */ -/* GETGRENT_R_PROTO: - * This symbol encodes the prototype of getgrent_r. - * It is zero if d_getgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r - * is defined. +/* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . */ -#$d_getgrent_r HAS_GETGRENT_R /**/ -#define GETGRENT_R_PROTO $getgrent_r_proto /**/ +#$i_stdarg I_STDARG /**/ +#$i_varargs I_VARARGS /**/ -/* HAS_GETGRGID_R: - * This symbol, if defined, indicates that the getgrgid_r routine - * is available to getgrgid re-entrantly. +/* Free_t: + * This variable contains the return type of free(). It is usually + * void, but occasionally int. */ -/* GETGRGID_R_PROTO: - * This symbol encodes the prototype of getgrgid_r. - * It is zero if d_getgrgid_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r - * is defined. +/* Malloc_t: + * This symbol is the type of pointer returned by malloc and realloc. */ -#$d_getgrgid_r HAS_GETGRGID_R /**/ -#define GETGRGID_R_PROTO $getgrgid_r_proto /**/ +#define Malloc_t $malloctype /**/ +#define Free_t $freetype /**/ -/* HAS_GETGRNAM_R: - * This symbol, if defined, indicates that the getgrnam_r routine - * is available to getgrnam re-entrantly. - */ -/* GETGRNAM_R_PROTO: - * This symbol encodes the prototype of getgrnam_r. - * It is zero if d_getgrnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r - * is defined. +/* MYMALLOC: + * This symbol, if defined, indicates that we're using our own malloc. */ -#$d_getgrnam_r HAS_GETGRNAM_R /**/ -#define GETGRNAM_R_PROTO $getgrnam_r_proto /**/ +#$d_mymalloc MYMALLOC /**/ -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. +/* CAN_PROTOTYPE: + * If defined, this macro indicates that the C compiler can handle + * function prototypes. */ -#$d_gethbyaddr HAS_GETHOSTBYADDR /**/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. +/* _: + * This macro is used to declare function parameters for folks who want + * to make declarations with prototypes using a different style than + * the above macros. Use double parentheses. For example: + * + * int main _((int argc, char *argv[])); */ -#$d_gethbyname HAS_GETHOSTBYNAME /**/ +#$prototype CAN_PROTOTYPE /**/ +#ifdef CAN_PROTOTYPE +#define _(args) args +#else +#define _(args) () +#endif -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. +/* SH_PATH: + * This symbol contains the full pathname to the shell used on this + * on this system to execute Bourne shell scripts. Usually, this will be + * /bin/sh, though it's possible that some systems will have /bin/ksh, + * /bin/pdksh, /bin/ash, /bin/bash, or even something such as + * D:/bin/sh.exe. */ -#$d_gethent HAS_GETHOSTENT /**/ +#define SH_PATH "$sh" /**/ -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. +/* SIG_NAME: + * This symbol contains a list of signal names in order of + * signal number. This is intended + * to be used as a static array initialization, like this: + * char *sig_name[] = { SIG_NAME }; + * The signals in the list are separated with commas, and each signal + * is surrounded by double quotes. There is no leading SIG in the signal + * name, i.e. SIGQUIT is known as "QUIT". + * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn, + * etc., where nn is the actual signal number (e.g. NUM37). + * The signal number for sig_name[i] is stored in sig_num[i]. + * The last element is 0 to terminate the list with a NULL. This + * corresponds to the 0 at the end of the sig_num list. */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. +/* SIG_NUM: + * This symbol contains a list of signal numbers, in the same order as the + * SIG_NAME list. It is suitable for static array initialization, as in: + * int sig_num[] = { SIG_NUM }; + * The signals in the list are separated with commas, and the indices + * within that list and the SIG_NAME list match, so it's easy to compute + * the signal name from a number or vice versa at the price of a small + * dynamic linear lookup. + * Duplicates are allowed, but are moved to the end of the list. + * The signal number corresponding to sig_name[i] is sig_number[i]. + * if (i < NSIG) then sig_number[i] == i. + * The last element is 0, corresponding to the 0 at the end of + * the sig_name list. */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. +/* SIG_SIZE: + * This variable contains the number of elements of the sig_name + * and sig_num arrays, excluding the final NULL entry. */ -#$d_gethname HAS_GETHOSTNAME /**/ -#$d_uname HAS_UNAME /**/ -#$d_phostname HAS_PHOSTNAME /**/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "$aphostname" /* How to get the host name */ -#endif +#define SIG_NAME $sig_name_init /**/ +#define SIG_NUM $sig_num_init /**/ +#define SIG_SIZE $sig_size /**/ -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. +/* STDCHAR: + * This symbol is defined to be the type of char used in stdio.h. + * It has the values "unsigned char" or "char". */ -#$d_gethostprotos HAS_GETHOST_PROTOS /**/ +#define STDCHAR $stdchar /**/ -/* HAS_GETITIMER: - * This symbol, if defined, indicates that the getitimer routine is - * available to return interval timers. +/* VOIDFLAGS: + * This symbol indicates how much support of the void type is given by this + * compiler. What various bits mean: + * + * 1 = supports declaration of void + * 2 = supports arrays of pointers to functions returning void + * 4 = supports comparisons between pointers to void functions and + * addresses of void functions + * 8 = suports declaration of generic void pointers + * + * The package designer should define VOIDUSED to indicate the requirements + * of the package. This can be done either by #defining VOIDUSED before + * including config.h, or by defining defvoidused in Myinit.U. If the + * latter approach is taken, only those flags will be tested. If the + * level of void support necessary is not present, defines void to int. */ -#$d_getitimer HAS_GETITIMER /**/ +#ifndef VOIDUSED +#define VOIDUSED $defvoidused +#endif +#define VOIDFLAGS $voidflags +#if (VOIDFLAGS & VOIDUSED) != VOIDUSED +#define void int /* is void to be avoided? */ +#define M_VOID /* Xenix strikes again */ +#endif -/* HAS_GETLOGIN_R: - * This symbol, if defined, indicates that the getlogin_r routine - * is available to getlogin re-entrantly. +/* USE_CROSS_COMPILE: + * This symbol, if defined, indicates that Perl is being cross-compiled. */ -/* GETLOGIN_R_PROTO: - * This symbol encodes the prototype of getlogin_r. - * It is zero if d_getlogin_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r - * is defined. +/* PERL_TARGETARCH: + * This symbol, if defined, indicates the target architecture + * Perl has been cross-compiled to. Undefined if not a cross-compile. */ -#$d_getlogin_r HAS_GETLOGIN_R /**/ -#define GETLOGIN_R_PROTO $getlogin_r_proto /**/ +#ifndef USE_CROSS_COMPILE +#$usecrosscompile USE_CROSS_COMPILE /**/ +#define PERL_TARGETARCH "$targetarch" /**/ +#endif -/* HAS_GETMNT: - * This symbol, if defined, indicates that the getmnt routine is - * available to get filesystem mount info by filename. +/* HAS_ATOLF: + * This symbol, if defined, indicates that the atolf routine is + * available to convert strings into long doubles. */ -#$d_getmnt HAS_GETMNT /**/ +#$d_atolf HAS_ATOLF /**/ -/* HAS_GETMNTENT: - * This symbol, if defined, indicates that the getmntent routine is - * available to iterate through mounted file systems to get their info. +/* HAS_ATOLL: + * This symbol, if defined, indicates that the atoll routine is + * available to convert strings into long longs. */ -#$d_getmntent HAS_GETMNTENT /**/ +#$d_atoll HAS_ATOLL /**/ -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. +/* HAS__FWALK: + * This symbol, if defined, indicates that the _fwalk system call is + * available to apply a function to all the file handles. */ -#$d_getnbyaddr HAS_GETNETBYADDR /**/ +#$d__fwalk HAS__FWALK /**/ -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. +/* HAS_CLASS: + * This symbol, if defined, indicates that the class routine is + * available to classify doubles. Available for example in AIX. + * The returned values are defined in and are: + * + * FP_PLUS_NORM Positive normalized, nonzero + * FP_MINUS_NORM Negative normalized, nonzero + * FP_PLUS_DENORM Positive denormalized, nonzero + * FP_MINUS_DENORM Negative denormalized, nonzero + * FP_PLUS_ZERO +0.0 + * FP_MINUS_ZERO -0.0 + * FP_PLUS_INF +INF + * FP_MINUS_INF -INF + * FP_NANS Signaling Not a Number (NaNS) + * FP_NANQ Quiet Not a Number (NaNQ) */ -#$d_getnbyname HAS_GETNETBYNAME /**/ +#$d_class HAS_CLASS /**/ -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. +/* HAS_STRUCT_CMSGHDR: + * This symbol, if defined, indicates that the struct cmsghdr + * is supported. */ -#$d_getnent HAS_GETNETENT /**/ +#$d_cmsghdr_s HAS_STRUCT_CMSGHDR /**/ -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. +/* HAS_DBMINIT_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the dbminit() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int dbminit(char *); */ -#$d_getnetprotos HAS_GETNET_PROTOS /**/ +#$d_dbminitproto HAS_DBMINIT_PROTO /**/ -/* HAS_GETPAGESIZE: - * This symbol, if defined, indicates that the getpagesize system call - * is available to get system page size, which is the granularity of - * many memory management calls. +/* HAS_DIRFD: + * This manifest constant lets the C program know that dirfd + * is available. */ -#$d_getpagsz HAS_GETPAGESIZE /**/ +#$d_dirfd HAS_DIRFD /**/ -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. +/* DLSYM_NEEDS_UNDERSCORE: + * This symbol, if defined, indicates that we need to prepend an + * underscore to the symbol name before calling dlsym(). This only + * makes sense if you *have* dlsym, which we will presume is the + * case if you're using dl_dlopen.xs. */ -#$d_getpent HAS_GETPROTOENT /**/ +#$d_dlsymun DLSYM_NEEDS_UNDERSCORE /**/ -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. +/* HAS_FCHDIR: + * This symbol, if defined, indicates that the fchdir routine is + * available to change directory using a file descriptor. */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. +#$d_fchdir HAS_FCHDIR /**/ + +/* FCNTL_CAN_LOCK: + * This symbol, if defined, indicates that fcntl() can be used + * for file locking. Normally on Unix systems this is defined. + * It may be undefined on VMS. */ -#$d_getpgrp HAS_GETPGRP /**/ -#$d_bsdgetpgrp USE_BSD_GETPGRP /**/ +#$d_fcntl_can_lock FCNTL_CAN_LOCK /**/ -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. +/* HAS_FINITE: + * This symbol, if defined, indicates that the finite routine is + * available to check whether a double is finite (non-infinity non-NaN). */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. +#$d_finite HAS_FINITE /**/ + +/* HAS_FINITEL: + * This symbol, if defined, indicates that the finitel routine is + * available to check whether a long double is finite + * (non-infinity non-NaN). */ -#$d_getpbyname HAS_GETPROTOBYNAME /**/ -#$d_getpbynumber HAS_GETPROTOBYNUMBER /**/ +#$d_finitel HAS_FINITEL /**/ -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. +/* HAS_FLOCK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the flock() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int flock(int, int); */ -#$d_getprotoprotos HAS_GETPROTO_PROTOS /**/ +#$d_flockproto HAS_FLOCK_PROTO /**/ -/* HAS_GETPRPWNAM: - * This symbol, if defined, indicates that the getprpwnam system call is - * available to retrieve protected (shadow) password entries by name. +/* HAS_FP_CLASS: + * This symbol, if defined, indicates that the fp_class routine is + * available to classify doubles. Available for example in Digital UNIX. + * The returned values are defined in and are: + * + * FP_SNAN Signaling NaN (Not-a-Number) + * FP_QNAN Quiet NaN (Not-a-Number) + * FP_POS_INF +infinity + * FP_NEG_INF -infinity + * FP_POS_NORM Positive normalized + * FP_NEG_NORM Negative normalized + * FP_POS_DENORM Positive denormalized + * FP_NEG_DENORM Negative denormalized + * FP_POS_ZERO +0.0 (positive zero) + * FP_NEG_ZERO -0.0 (negative zero) */ -#$d_getprpwnam HAS_GETPRPWNAM /**/ +#$d_fp_class HAS_FP_CLASS /**/ -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. +/* HAS_FPCLASS: + * This symbol, if defined, indicates that the fpclass routine is + * available to classify doubles. Available for example in Solaris/SVR4. + * The returned values are defined in and are: + * + * FP_SNAN signaling NaN + * FP_QNAN quiet NaN + * FP_NINF negative infinity + * FP_PINF positive infinity + * FP_NDENORM negative denormalized non-zero + * FP_PDENORM positive denormalized non-zero + * FP_NZERO negative zero + * FP_PZERO positive zero + * FP_NNORM negative normalized non-zero + * FP_PNORM positive normalized non-zero */ -#$d_getpwent HAS_GETPWENT /**/ +#$d_fpclass HAS_FPCLASS /**/ -/* HAS_GETPWENT_R: - * This symbol, if defined, indicates that the getpwent_r routine - * is available to getpwent re-entrantly. +/* HAS_FPCLASSIFY: + * This symbol, if defined, indicates that the fpclassify routine is + * available to classify doubles. Available for example in HP-UX. + * The returned values are defined in and are + * + * FP_NORMAL Normalized + * FP_ZERO Zero + * FP_INFINITE Infinity + * FP_SUBNORMAL Denormalized + * FP_NAN NaN + * */ -/* GETPWENT_R_PROTO: - * This symbol encodes the prototype of getpwent_r. - * It is zero if d_getpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r - * is defined. +#$d_fpclassify HAS_FPCLASSIFY /**/ + +/* HAS_FPCLASSL: + * This symbol, if defined, indicates that the fpclassl routine is + * available to classify long doubles. Available for example in IRIX. + * The returned values are defined in and are: + * + * FP_SNAN signaling NaN + * FP_QNAN quiet NaN + * FP_NINF negative infinity + * FP_PINF positive infinity + * FP_NDENORM negative denormalized non-zero + * FP_PDENORM positive denormalized non-zero + * FP_NZERO negative zero + * FP_PZERO positive zero + * FP_NNORM negative normalized non-zero + * FP_PNORM positive normalized non-zero */ -#$d_getpwent_r HAS_GETPWENT_R /**/ -#define GETPWENT_R_PROTO $getpwent_r_proto /**/ +#$d_fpclassl HAS_FPCLASSL /**/ -/* HAS_GETPWNAM_R: - * This symbol, if defined, indicates that the getpwnam_r routine - * is available to getpwnam re-entrantly. +/* HAS_FPOS64_T: + * This symbol will be defined if the C compiler supports fpos64_t. */ -/* GETPWNAM_R_PROTO: - * This symbol encodes the prototype of getpwnam_r. - * It is zero if d_getpwnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r - * is defined. +#$d_fpos64_t HAS_FPOS64_T /**/ + +/* HAS_FREXPL: + * This symbol, if defined, indicates that the frexpl routine is + * available to break a long double floating-point number into + * a normalized fraction and an integral power of 2. */ -#$d_getpwnam_r HAS_GETPWNAM_R /**/ -#define GETPWNAM_R_PROTO $getpwnam_r_proto /**/ +#$d_frexpl HAS_FREXPL /**/ -/* HAS_GETPWUID_R: - * This symbol, if defined, indicates that the getpwuid_r routine - * is available to getpwuid re-entrantly. +/* HAS_STRUCT_FS_DATA: + * This symbol, if defined, indicates that the struct fs_data + * to do statfs() is supported. */ -/* GETPWUID_R_PROTO: - * This symbol encodes the prototype of getpwuid_r. - * It is zero if d_getpwuid_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r - * is defined. +#$d_fs_data_s HAS_STRUCT_FS_DATA /**/ + +/* HAS_FSEEKO: + * This symbol, if defined, indicates that the fseeko routine is + * available to fseek beyond 32 bits (useful for ILP32 hosts). */ -#$d_getpwuid_r HAS_GETPWUID_R /**/ -#define GETPWUID_R_PROTO $getpwuid_r_proto /**/ +#$d_fseeko HAS_FSEEKO /**/ + +/* HAS_FSTATFS: + * This symbol, if defined, indicates that the fstatfs routine is + * available to stat filesystems by file descriptors. + */ +#$d_fstatfs HAS_FSTATFS /**/ -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. +/* HAS_FSYNC: + * This symbol, if defined, indicates that the fsync routine is + * available to write a file's modified data and attributes to + * permanent storage. */ -#$d_getsent HAS_GETSERVENT /**/ +#$d_fsync HAS_FSYNC /**/ -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. +/* HAS_FTELLO: + * This symbol, if defined, indicates that the ftello routine is + * available to ftell beyond 32 bits (useful for ILP32 hosts). */ -#$d_getservprotos HAS_GETSERV_PROTOS /**/ +#$d_ftello HAS_FTELLO /**/ -/* HAS_GETSPNAM: - * This symbol, if defined, indicates that the getspnam system call is - * available to retrieve SysV shadow password entries by name. +/* HAS_GETCWD: + * This symbol, if defined, indicates that the getcwd routine is + * available to get the current working directory. */ -#$d_getspnam HAS_GETSPNAM /**/ +#$d_getcwd HAS_GETCWD /**/ -/* HAS_GETSPNAM_R: - * This symbol, if defined, indicates that the getspnam_r routine - * is available to getspnam re-entrantly. +/* HAS_GETESPWNAM: + * This symbol, if defined, indicates that the getespwnam system call is + * available to retrieve enchanced (shadow) password entries by name. */ -/* GETSPNAM_R_PROTO: - * This symbol encodes the prototype of getspnam_r. - * It is zero if d_getspnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r - * is defined. +#$d_getespwnam HAS_GETESPWNAM /**/ + +/* HAS_GETFSSTAT: + * This symbol, if defined, indicates that the getfsstat routine is + * available to stat filesystems in bulk. */ -#$d_getspnam_r HAS_GETSPNAM_R /**/ -#define GETSPNAM_R_PROTO $getspnam_r_proto /**/ +#$d_getfsstat HAS_GETFSSTAT /**/ -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. +/* HAS_GETITIMER: + * This symbol, if defined, indicates that the getitimer routine is + * available to return interval timers. */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. +#$d_getitimer HAS_GETITIMER /**/ + +/* HAS_GETMNT: + * This symbol, if defined, indicates that the getmnt routine is + * available to get filesystem mount info by filename. */ -#$d_getsbyname HAS_GETSERVBYNAME /**/ -#$d_getsbyport HAS_GETSERVBYPORT /**/ +#$d_getmnt HAS_GETMNT /**/ -/* HAS_GMTIME_R: - * This symbol, if defined, indicates that the gmtime_r routine - * is available to gmtime re-entrantly. +/* HAS_GETMNTENT: + * This symbol, if defined, indicates that the getmntent routine is + * available to iterate through mounted file systems to get their info. */ -/* GMTIME_R_PROTO: - * This symbol encodes the prototype of gmtime_r. - * It is zero if d_gmtime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r - * is defined. +#$d_getmntent HAS_GETMNTENT /**/ + +/* HAS_GETPRPWNAM: + * This symbol, if defined, indicates that the getprpwnam system call is + * available to retrieve protected (shadow) password entries by name. */ -#$d_gmtime_r HAS_GMTIME_R /**/ -#define GMTIME_R_PROTO $gmtime_r_proto /**/ +#$d_getprpwnam HAS_GETPRPWNAM /**/ -/* HAS_GNULIBC: - * This symbol, if defined, indicates to the C program that - * the GNU C library is being used. A better check is to use - * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. +/* HAS_GETSPNAM: + * This symbol, if defined, indicates that the getspnam system call is + * available to retrieve SysV shadow password entries by name. */ -#$d_gnulibc HAS_GNULIBC /**/ -#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) -# define _GNU_SOURCE -#endif +#$d_getspnam HAS_GETSPNAM /**/ + /* HAS_HASMNTOPT: * This symbol, if defined, indicates that the hasmntopt routine is * available to query the mount options of file systems. */ #$d_hasmntopt HAS_HASMNTOPT /**/ -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -#$d_htonl HAS_HTONL /**/ -#$d_htonl HAS_HTONS /**/ -#$d_htonl HAS_NTOHL /**/ -#$d_htonl HAS_NTOHS /**/ - /* HAS_INT64_T: * This symbol will defined if the C compiler supports int64_t. * Usually the needs to be included, but sometimes @@ -1862,12 +2542,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_int64_t HAS_INT64_T /**/ -/* HAS_ISASCII: - * This manifest constant lets the C program know that isascii - * is available. - */ -#$d_isascii HAS_ISASCII /**/ - /* HAS_ISFINITE: * This symbol, if defined, indicates that the isfinite routine is * available to check whether a double is finite (non-infinity non-NaN). @@ -1892,13 +2566,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_isnanl HAS_ISNANL /**/ -/* HAS_LCHOWN: - * This symbol, if defined, indicates that the lchown routine is - * available to operate on a symbolic link (instead of following the - * link). - */ -#$d_lchown HAS_LCHOWN /**/ - /* HAS_LDBL_DIG: * This symbol, if defined, indicates that this system's * or defines the symbol LDBL_DIG, which is the number @@ -1907,79 +2574,18 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_ldbl_dig HAS_LDBL_DIG /* */ -/* HAS_LOCALTIME_R: - * This symbol, if defined, indicates that the localtime_r routine - * is available to localtime re-entrantly. - */ -/* LOCALTIME_R_PROTO: - * This symbol encodes the prototype of localtime_r. - * It is zero if d_localtime_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r - * is defined. - */ -#$d_localtime_r HAS_LOCALTIME_R /**/ -#define LOCALTIME_R_PROTO $localtime_r_proto /**/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -#$d_longdbl HAS_LONG_DOUBLE /**/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE $longdblsize /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -#$d_longlong HAS_LONG_LONG /**/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE $longlongsize /**/ -#endif - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -#$d_lseekproto HAS_LSEEK_PROTO /**/ - /* HAS_MADVISE: * This symbol, if defined, indicates that the madvise system call is * available to map a file into memory. */ #$d_madvise HAS_MADVISE /**/ -/* HAS_MEMCHR: - * This symbol, if defined, indicates that the memchr routine is available - * to locate characters within a C string. - */ -#$d_memchr HAS_MEMCHR /**/ - /* HAS_MKDTEMP: * This symbol, if defined, indicates that the mkdtemp routine is * available to exclusively create a uniquely named temporary directory. */ #$d_mkdtemp HAS_MKDTEMP /**/ -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -#$d_mkstemp HAS_MKSTEMP /**/ - /* HAS_MKSTEMPS: * This symbol, if defined, indicates that the mkstemps routine is * available to excluslvely create and open a uniquely named @@ -1987,18 +2593,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_mkstemps HAS_MKSTEMPS /**/ -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'cadd_t'. - */ -#$d_mmap HAS_MMAP /**/ -#define Mmap_t $mmaptype /**/ - /* HAS_MODFL: * This symbol, if defined, indicates that the modfl routine is * available to split a long double x into a fractional part f and @@ -2020,83 +2614,37 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_mprotect HAS_MPROTECT /**/ -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -#$d_msg HAS_MSG /**/ - /* HAS_STRUCT_MSGHDR: * This symbol, if defined, indicates that the struct msghdr * is supported. - */ -#$d_msghdr_s HAS_STRUCT_MSGHDR /**/ - -/* HAS_OFF64_T: - * This symbol will be defined if the C compiler supports off64_t. - */ -#$d_off64_t HAS_OFF64_T /**/ - -/* HAS_OPEN3: - * This manifest constant lets the C program know that the three - * argument form of open(2) is available. - */ -#$d_open3 HAS_OPEN3 /**/ - -/* OLD_PTHREAD_CREATE_JOINABLE: - * This symbol, if defined, indicates how to create pthread - * in joinable (aka undetached) state. NOTE: not defined - * if pthread.h already has defined PTHREAD_CREATE_JOINABLE - * (the new version of the constant). - * If defined, known values are PTHREAD_CREATE_UNDETACHED - * and __UNDETACHED. - */ -#$d_old_pthread_create_joinable OLD_PTHREAD_CREATE_JOINABLE $old_pthread_create_joinable /**/ - -/* HAS_PTHREAD_YIELD: - * This symbol, if defined, indicates that the pthread_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/* SCHED_YIELD: - * This symbol defines the way to yield the execution of - * the current thread. Known ways are sched_yield, - * pthread_yield, and pthread_yield with NULL. - */ -/* HAS_SCHED_YIELD: - * This symbol, if defined, indicates that the sched_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -#$d_pthread_yield HAS_PTHREAD_YIELD /**/ -#define SCHED_YIELD $sched_yield /**/ -#$d_sched_yield HAS_SCHED_YIELD /**/ + */ +#$d_msghdr_s HAS_STRUCT_MSGHDR /**/ -/* HAS_RANDOM_R: - * This symbol, if defined, indicates that the random_r routine - * is available to random re-entrantly. +/* HAS_NL_LANGINFO: + * This symbol, if defined, indicates that the nl_langinfo routine is + * available to return local data. You will also need + * and therefore I_LANGINFO. */ -/* RANDOM_R_PROTO: - * This symbol encodes the prototype of random_r. - * It is zero if d_random_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r - * is defined. +#$d_nl_langinfo HAS_NL_LANGINFO /**/ + +/* HAS_OFF64_T: + * This symbol will be defined if the C compiler supports off64_t. */ -#$d_random_r HAS_RANDOM_R /**/ -#define RANDOM_R_PROTO $random_r_proto /**/ +#$d_off64_t HAS_OFF64_T /**/ -/* HAS_READDIR_R: - * This symbol, if defined, indicates that the readdir_r routine - * is available to readdir re-entrantly. +/* HAS_PROCSELFEXE: + * This symbol is defined if PROCSELFEXE_PATH is a symlink + * to the absolute pathname of the executing program. */ -/* READDIR_R_PROTO: - * This symbol encodes the prototype of readdir_r. - * It is zero if d_readdir_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r - * is defined. +/* PROCSELFEXE_PATH: + * If HAS_PROCSELFEXE is defined this symbol is the filename + * of the symbolic link pointing to the absolute pathname of + * the executing program. */ -#$d_readdir_r HAS_READDIR_R /**/ -#define READDIR_R_PROTO $readdir_r_proto /**/ +#$d_procselfexe HAS_PROCSELFEXE /**/ +#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH) +#define PROCSELFEXE_PATH $procselfexe /**/ +#endif /* HAS_READV: * This symbol, if defined, indicates that the readv routine is @@ -2111,29 +2659,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_recvmsg HAS_RECVMSG /**/ -/* HAS_SAFE_BCOPY: - * This symbol, if defined, indicates that the bcopy routine is available - * to copy potentially overlapping memory blocks. Normally, you should - * probably use memmove() or memcpy(). If neither is defined, roll your - * own version. - */ -#$d_safebcpy HAS_SAFE_BCOPY /**/ - -/* HAS_SAFE_MEMCPY: - * This symbol, if defined, indicates that the memcpy routine is available - * to copy potentially overlapping memory blocks. If you need to - * copy overlapping memory blocks, you should check HAS_MEMMOVE and - * use memmove() instead, if available. - */ -#$d_safemcpy HAS_SAFE_MEMCPY /**/ - -/* HAS_SANE_MEMCMP: - * This symbol, if defined, indicates that the memcmp routine is available - * and can be used to compare relative magnitudes of chars with their high - * bits set. If it is not defined, roll your own version. - */ -#$d_sanemcmp HAS_SANE_MEMCMP /**/ - /* HAS_SBRK_PROTO: * This symbol, if defined, indicates that the system provides * a prototype for the sbrk() function. Otherwise, it is up @@ -2143,213 +2668,50 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_sbrkproto HAS_SBRK_PROTO /**/ -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -#$d_sem HAS_SEM /**/ - /* HAS_SENDMSG: * This symbol, if defined, indicates that the sendmsg routine is * available to send structured socket messages. */ #$d_sendmsg HAS_SENDMSG /**/ -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -#$d_setgrent HAS_SETGRENT /**/ - -/* HAS_SETGRENT_R: - * This symbol, if defined, indicates that the setgrent_r routine - * is available to setgrent re-entrantly. - */ -/* SETGRENT_R_PROTO: - * This symbol encodes the prototype of setgrent_r. - * It is zero if d_setgrent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r - * is defined. - */ -#$d_setgrent_r HAS_SETGRENT_R /**/ -#define SETGRENT_R_PROTO $setgrent_r_proto /**/ - -/* HAS_SETGROUPS: - * This symbol, if defined, indicates that the setgroups() routine is - * available to set the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -#$d_setgrps HAS_SETGROUPS /**/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -#$d_sethent HAS_SETHOSTENT /**/ - /* HAS_SETITIMER: * This symbol, if defined, indicates that the setitimer routine is * available to set interval timers. */ #$d_setitimer HAS_SETITIMER /**/ -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -#$d_setnent HAS_SETNETENT /**/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -#$d_setpent HAS_SETPROTOENT /**/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -#$d_setpgrp HAS_SETPGRP /**/ -#$d_bsdsetpgrp USE_BSD_SETPGRP /**/ - /* HAS_SETPROCTITLE: * This symbol, if defined, indicates that the setproctitle routine is * available to set process title. */ #$d_setproctitle HAS_SETPROCTITLE /**/ -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -#$d_setpwent HAS_SETPWENT /**/ - -/* HAS_SETPWENT_R: - * This symbol, if defined, indicates that the setpwent_r routine - * is available to setpwent re-entrantly. - */ -/* SETPWENT_R_PROTO: - * This symbol encodes the prototype of setpwent_r. - * It is zero if d_setpwent_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r - * is defined. - */ -#$d_setpwent_r HAS_SETPWENT_R /**/ -#define SETPWENT_R_PROTO $setpwent_r_proto /**/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -#$d_setsent HAS_SETSERVENT /**/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -#$d_setvbuf HAS_SETVBUF /**/ - /* USE_SFIO: * This symbol, if defined, indicates that sfio should * be used. */ #$d_sfio USE_SFIO /**/ -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -#$d_shm HAS_SHM /**/ - -/* HAS_SIGACTION: - * This symbol, if defined, indicates that Vr4's sigaction() routine - * is available. +/* HAS_SIGPROCMASK: + * This symbol, if defined, indicates that the sigprocmask + * system call is available to examine or change the signal mask + * of the calling process. */ -#$d_sigaction HAS_SIGACTION /**/ +#$d_sigprocmask HAS_SIGPROCMASK /**/ -/* HAS_SIGSETJMP: - * This variable indicates to the C program that the sigsetjmp() - * routine is available to save the calling process's registers - * and stack environment for later use by siglongjmp(), and - * to optionally save the process's signal mask. See - * Sigjmp_buf, Sigsetjmp, and Siglongjmp. - */ -/* Sigjmp_buf: - * This is the buffer type to be used with Sigsetjmp and Siglongjmp. - */ -/* Sigsetjmp: - * This macro is used in the same way as sigsetjmp(), but will invoke - * traditional setjmp() if sigsetjmp isn't available. - * See HAS_SIGSETJMP. - */ -/* Siglongjmp: - * This macro is used in the same way as siglongjmp(), but will invoke - * traditional longjmp() if siglongjmp isn't available. - * See HAS_SIGSETJMP. +/* HAS_SOCKATMARK: + * This symbol, if defined, indicates that the sockatmark routine is + * available to test whether a socket is at the out-of-band mark. */ -#$d_sigsetjmp HAS_SIGSETJMP /**/ -#ifdef HAS_SIGSETJMP -#define Sigjmp_buf sigjmp_buf -#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) -#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) -#else -#define Sigjmp_buf jmp_buf -#define Sigsetjmp(buf,save_mask) setjmp((buf)) -#define Siglongjmp(buf,retval) longjmp((buf),(retval)) -#endif +#$d_sockatmark HAS_SOCKATMARK /**/ -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -/* HAS_MSG_CTRUNC: - * This symbol, if defined, indicates that the MSG_CTRUNC is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_DONTROUTE: - * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_OOB: - * This symbol, if defined, indicates that the MSG_OOB is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PEEK: - * This symbol, if defined, indicates that the MSG_PEEK is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PROXY: - * This symbol, if defined, indicates that the MSG_PROXY is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SCM_RIGHTS: - * This symbol, if defined, indicates that the SCM_RIGHTS is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -#$d_socket HAS_SOCKET /**/ -#$d_sockpair HAS_SOCKETPAIR /**/ -#$d_msg_ctrunc HAS_MSG_CTRUNC /**/ -#$d_msg_dontroute HAS_MSG_DONTROUTE /**/ -#$d_msg_oob HAS_MSG_OOB /**/ -#$d_msg_peek HAS_MSG_PEEK /**/ -#$d_msg_proxy HAS_MSG_PROXY /**/ -#$d_scm_rights HAS_SCM_RIGHTS /**/ +/* HAS_SOCKATMARK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the sockatmark() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int sockatmark(int); + */ +#$d_sockatmarkproto HAS_SOCKATMARK_PROTO /**/ /* HAS_SOCKS5_INIT: * This symbol, if defined, indicates that the socks5_init routine is @@ -2363,39 +2725,21 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_sqrtl HAS_SQRTL /**/ -/* HAS_SRAND48_R: - * This symbol, if defined, indicates that the srand48_r routine - * is available to srand48 re-entrantly. - */ -/* SRAND48_R_PROTO: - * This symbol encodes the prototype of srand48_r. - * It is zero if d_srand48_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r - * is defined. - */ -#$d_srand48_r HAS_SRAND48_R /**/ -#define SRAND48_R_PROTO $srand48_r_proto /**/ - -/* HAS_SRANDOM_R: - * This symbol, if defined, indicates that the srandom_r routine - * is available to srandom re-entrantly. - */ -/* SRANDOM_R_PROTO: - * This symbol encodes the prototype of srandom_r. - * It is zero if d_srandom_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r - * is defined. +/* HAS_SETRESGID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresgid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); */ -#$d_srandom_r HAS_SRANDOM_R /**/ -#define SRANDOM_R_PROTO $srandom_r_proto /**/ +#$d_sresgproto HAS_SETRESGID_PROTO /**/ -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. +/* HAS_SETRESUID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresuid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); */ -#ifndef USE_STAT_BLOCKS -#$d_statblks USE_STAT_BLOCKS /**/ -#endif +#$d_sresuproto HAS_SETRESUID_PROTO /**/ /* HAS_STRUCT_STATFS_F_FLAGS: * This symbol, if defined, indicates that the struct statfs @@ -2420,107 +2764,11 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_fstatvfs HAS_FSTATVFS /**/ -/* USE_STDIO_PTR: - * This symbol is defined if the _ptr and _cnt fields (or similar) - * of the stdio FILE structure can be used to access the stdio buffer - * for a file handle. If this is defined, then the FILE_ptr(fp) - * and FILE_cnt(fp) macros will also be defined and should be used - * to access these fields. - */ -/* FILE_ptr: - * This macro is used to access the _ptr field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_PTR_LVALUE: - * This symbol is defined if the FILE_ptr macro can be used as an - * lvalue. - */ -/* FILE_cnt: - * This macro is used to access the _cnt field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_CNT_LVALUE: - * This symbol is defined if the FILE_cnt macro can be used as an - * lvalue. - */ -/* STDIO_PTR_LVAL_SETS_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n has the side effect of decreasing the - * value of File_cnt(fp) by n. - */ -/* STDIO_PTR_LVAL_NOCHANGE_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n leaves File_cnt(fp) unchanged. - */ -#$d_stdstdio USE_STDIO_PTR /**/ -#ifdef USE_STDIO_PTR -#define FILE_ptr(fp) $stdio_ptr -#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/ -#define FILE_cnt(fp) $stdio_cnt -#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/ -#$d_stdio_ptr_lval_sets_cnt STDIO_PTR_LVAL_SETS_CNT /**/ -#$d_stdio_ptr_lval_nochange_cnt STDIO_PTR_LVAL_NOCHANGE_CNT /**/ -#endif - -/* USE_STDIO_BASE: - * This symbol is defined if the _base field (or similar) of the - * stdio FILE structure can be used to access the stdio buffer for - * a file handle. If this is defined, then the FILE_base(fp) macro - * will also be defined and should be used to access this field. - * Also, the FILE_bufsiz(fp) macro will be defined and should be used - * to determine the number of bytes in the buffer. USE_STDIO_BASE - * will never be defined unless USE_STDIO_PTR is. - */ -/* FILE_base: - * This macro is used to access the _base field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_BASE is defined. - */ -/* FILE_bufsiz: - * This macro is used to determine the number of bytes in the I/O - * buffer pointed to by _base field (or equivalent) of the FILE - * structure pointed to its argument. This macro will always be defined - * if USE_STDIO_BASE is defined. - */ -#$d_stdiobase USE_STDIO_BASE /**/ -#ifdef USE_STDIO_BASE -#define FILE_base(fp) $stdio_base -#define FILE_bufsiz(fp) $stdio_bufsiz -#endif - -/* HAS_STRERROR: - * This symbol, if defined, indicates that the strerror routine is - * available to translate error numbers to strings. See the writeup - * of Strerror() in this file before you try to define your own. - */ -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -/* Strerror: - * This preprocessor symbol is defined as a macro if strerror() is - * not available to translate error numbers to strings but sys_errlist[] - * array is there. - */ -#$d_strerror HAS_STRERROR /**/ -#$d_syserrlst HAS_SYS_ERRLIST /**/ -#define Strerror(e) $d_strerrm - -/* HAS_STRERROR_R: - * This symbol, if defined, indicates that the strerror_r routine - * is available to strerror re-entrantly. - */ -/* STRERROR_R_PROTO: - * This symbol encodes the prototype of strerror_r. - * It is zero if d_strerror_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r - * is defined. +/* HAS_STRFTIME: + * This symbol, if defined, indicates that the strftime routine is + * available to do time formatting. */ -#$d_strerror_r HAS_STRERROR_R /**/ -#define STRERROR_R_PROTO $strerror_r_proto /**/ +#$d_strftime HAS_STRFTIME /**/ /* HAS_STRTOLD: * This symbol, if defined, indicates that the strtold routine is @@ -2540,12 +2788,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_strtoq HAS_STRTOQ /**/ -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#$d_strtoul HAS_STRTOUL /**/ - /* HAS_STRTOULL: * This symbol, if defined, indicates that the strtoull routine is * available to convert strings to unsigned long longs. @@ -2558,6 +2800,15 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_strtouq HAS_STRTOUQ /**/ +/* HAS_SYSCALL_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the syscall() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int syscall(int, ...); + * extern int syscall(long, ...); + */ +#$d_syscallproto HAS_SYSCALL_PROTO /**/ + /* HAS_TELLDIR_PROTO: * This symbol, if defined, indicates that the system provides * a prototype for the telldir() function. Otherwise, it is up @@ -2566,36 +2817,13 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_telldirproto HAS_TELLDIR_PROTO /**/ -/* HAS_TIME: - * This symbol, if defined, indicates that the time() routine exists. - */ -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case should be - * included). - */ -#$d_time HAS_TIME /**/ -#define Time_t $timetype /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include . - */ -#$d_times HAS_TIMES /**/ - -/* HAS_TMPNAM_R: - * This symbol, if defined, indicates that the tmpnam_r routine - * is available to tmpnam re-entrantly. - */ -/* TMPNAM_R_PROTO: - * This symbol encodes the prototype of tmpnam_r. - * It is zero if d_tmpnam_r is undef, and one of the - * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r - * is defined. +/* U32_ALIGNMENT_REQUIRED: + * This symbol, if defined, indicates that you must access + * character data through U32-aligned pointers. */ -#$d_tmpnam_r HAS_TMPNAM_R /**/ -#define TMPNAM_R_PROTO $tmpnam_r_proto /**/ +#ifndef U32_ALIGNMENT_REQUIRED +#$d_u32align U32_ALIGNMENT_REQUIRED /**/ +#endif /* HAS_UALARM: * This symbol, if defined, indicates that the ualarm routine is @@ -2603,28 +2831,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_ualarm HAS_UALARM /**/ -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including . If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -#$d_union_semun HAS_UNION_SEMUN /**/ -#$d_semctl_semun USE_SEMCTL_SEMUN /**/ -#$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/ - /* HAS_UNORDERED: * This symbol, if defined, indicates that the unordered routine is * available to check whether two doubles are unordered @@ -2632,38 +2838,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_unordered HAS_UNORDERED /**/ -/* HAS_USTAT: - * This symbol, if defined, indicates that the ustat system call is - * available to query file system statistics by dev_t. - */ -#$d_ustat HAS_USTAT /**/ - -/* HAS_VFORK: - * This symbol, if defined, indicates that vfork() exists. - */ -#$d_vfork HAS_VFORK /**/ - -/* Signal_t: - * This symbol's value is either "void" or "int", corresponding to the - * appropriate return type of a signal handler. Thus, you can declare - * a signal handler using "Signal_t (*handler)()", and define the - * handler using "Signal_t handler(sig)". - */ -#define Signal_t $signal_t /* Signal handler's return type */ - -/* HAS_VPRINTF: - * This symbol, if defined, indicates that the vprintf routine is available - * to printf with a pointer to an argument list. If unavailable, you - * may need to write your own, probably in terms of _doprnt(). - */ -/* USE_CHAR_VSPRINTF: - * This symbol is defined if this system has vsprintf() returning type - * (char*). The trend seems to be to declare it as "int vsprintf()". It - * is up to the package author to declare vsprintf correctly based on the - * symbol. +/* HAS_USLEEP_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the usleep() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int usleep(useconds_t); */ -#$d_vprintf HAS_VPRINTF /**/ -#$d_charvspr USE_CHAR_VSPRINTF /**/ +#$d_usleepproto HAS_USLEEP_PROTO /**/ + +/* HAS_USTAT: + * This symbol, if defined, indicates that the ustat system call is + * available to query file system statistics by dev_t. + */ +#$d_ustat HAS_USTAT /**/ /* HAS_WRITEV: * This symbol, if defined, indicates that the writev routine is @@ -2677,18 +2864,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$usedl USE_DYNAMIC_LOADING /**/ -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. - */ -#define DOUBLESIZE $doublesize /**/ - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -#$ebcdic EBCDIC /**/ - /* FFLUSH_NULL: * This symbol, if defined, tells that fflush(NULL) does flush * all pending stdio output. @@ -2703,50 +2878,11 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$fflushNULL FFLUSH_NULL /**/ #$fflushall FFLUSH_ALL /**/ -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Fpos_t $fpostype /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f $gidformat /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign $gidsign /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size $gidsize /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include to get - * any typedef'ed information. - */ -#define Gid_t $gidtype /* Type for getgid(), etc... */ - -/* Groups_t: - * This symbol holds the type used for the second argument to - * getgroups() and setgroups(). Usually, this is the same as - * gidtype (gid_t) , but sometimes it isn't. - * It can be int, ushort, gid_t, etc... - * It may be necessary to include to get any - * typedef'ed information. This is only required if you have - * getgroups() or setgroups().. +/* I_CRYPT: + * This symbol, if defined, indicates that exists and + * should be included. */ -#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) -#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */ -#endif +#$i_crypt I_CRYPT /**/ /* DB_Prefix_t: * This symbol contains the type of the prefix structure element @@ -2778,23 +2914,18 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #define DB_VERSION_MINOR_CFG $db_version_minor /**/ #define DB_VERSION_PATCH_CFG $db_version_patch /**/ +/* I_FP: + * This symbol, if defined, indicates that exists and + * should be included. + */ +#$i_fp I_FP /**/ + /* I_FP_CLASS: * This symbol, if defined, indicates that exists and * should be included. */ #$i_fp_class I_FP_CLASS /**/ -/* I_GRP: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* GRPASSWD: - * This symbol, if defined, indicates to the C program that struct group - * in contains gr_passwd. - */ -#$i_grp I_GRP /**/ -#$d_grpasswd GRPASSWD /**/ - /* I_IEEEFP: * This symbol, if defined, indicates that exists and * should be included. @@ -2807,30 +2938,24 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$i_inttypes I_INTTYPES /**/ +/* I_LANGINFO: + * This symbol, if defined, indicates that exists and + * should be included. + */ +#$i_langinfo I_LANGINFO /**/ + /* I_LIBUTIL: * This symbol, if defined, indicates that exists and * should be included. */ #$i_libutil I_LIBUTIL /**/ -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#$i_machcthr I_MACH_CTHREADS /**/ - /* I_MNTENT: * This symbol, if defined, indicates that exists and * should be included. */ #$i_mntent I_MNTENT /**/ -/* I_NETDB: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#$i_netdb I_NETDB /**/ - /* I_NETINET_TCP: * This symbol, if defined, indicates to the C program that it should * include . @@ -2849,58 +2974,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$i_prot I_PROT /**/ -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#$i_pthread I_PTHREAD /**/ - -/* I_PWD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* PWQUOTA: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_quota. - */ -/* PWAGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_age. - */ -/* PWCHANGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_change. - */ -/* PWCLASS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_class. - */ -/* PWEXPIRE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_expire. - */ -/* PWCOMMENT: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_comment. - */ -/* PWGECOS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_gecos. - */ -/* PWPASSWD: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_passwd. - */ -#$i_pwd I_PWD /**/ -#$d_pwquota PWQUOTA /**/ -#$d_pwage PWAGE /**/ -#$d_pwchange PWCHANGE /**/ -#$d_pwclass PWCLASS /**/ -#$d_pwexpire PWEXPIRE /**/ -#$d_pwcomment PWCOMMENT /**/ -#$d_pwgecos PWGECOS /**/ -#$d_pwpasswd PWPASSWD /**/ - /* I_SHADOW: * This symbol, if defined, indicates that exists and * should be included. @@ -2948,151 +3021,44 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$i_sysstatvfs I_SYS_STATVFS /**/ -/* I_SYSUIO: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#$i_sysuio I_SYSUIO /**/ - /* I_SYSUTSNAME: * This symbol, if defined, indicates that exists and * should be included. */ -#$i_sysutsname I_SYSUTSNAME /**/ - -/* I_SYS_VFS: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#$i_sysvfs I_SYS_VFS /**/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include with KERNEL defined. - */ -/* HAS_TM_TM_ZONE: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_zone field. - */ -#$i_time I_TIME /**/ -#$i_systime I_SYS_TIME /**/ -#$i_systimek I_SYS_TIME_KERNEL /**/ -#$d_tm_tm_zone HAS_TM_TM_ZONE /**/ - -/* I_USTAT: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#$i_ustat I_USTAT /**/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -#define PERL_INC_VERSION_LIST $inc_version_list_init /**/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -#$installusrbinperl INSTALL_USR_BIN_PERL /**/ - -/* PERL_PRIfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for output. - */ -/* PERL_PRIgldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'g') for output. - */ -/* PERL_PRIeldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'e') for output. - */ -/* PERL_SCNfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for input. - */ -#$d_PRIfldbl PERL_PRIfldbl $sPRIfldbl /**/ -#$d_PRIgldbl PERL_PRIgldbl $sPRIgldbl /**/ -#$d_PRIeldbl PERL_PRIeldbl $sPRIeldbl /**/ -#$d_SCNfldbl PERL_SCNfldbl $sSCNfldbl /**/ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t $lseektype /* type */ -#define LSEEKSIZE $lseeksize /* size */ -#define Off_t_size $lseeksize /* size */ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. - */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. - */ -#define Malloc_t $malloctype /**/ -#define Free_t $freetype /**/ +#$i_sysutsname I_SYSUTSNAME /**/ -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. +/* I_SYS_VFS: + * This symbol, if defined, indicates that exists and + * should be included. */ -#$d_mymalloc MYMALLOC /**/ +#$i_sysvfs I_SYS_VFS /**/ -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include - * to get any typedef'ed information. +/* I_USTAT: + * This symbol, if defined, indicates that exists and + * should be included. */ -#define Mode_t $modetype /* file mode parameter for system calls */ +#$i_ustat I_USTAT /**/ -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. +/* PERL_PRIfldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'f') for output. */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. +/* PERL_PRIgldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'g') for output. */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! +/* PERL_PRIeldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'e') for output. */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). +/* PERL_SCNfldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'f') for input. */ -#define VAL_O_NONBLOCK $o_nonblock -#define VAL_EAGAIN $eagain -#define RD_NODATA $rd_nodata -#$d_eofnblk EOF_NONBLOCK +#$d_PRIfldbl PERL_PRIfldbl $sPRIfldbl /**/ +#$d_PRIgldbl PERL_PRIgldbl $sPRIgldbl /**/ +#$d_PRIeldbl PERL_PRIeldbl $sPRIeldbl /**/ +#$d_SCNfldbl PERL_SCNfldbl $sSCNfldbl /**/ /* NEED_VA_COPY: * This symbol, if defined, indicates that the system stores @@ -3105,37 +3071,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$need_va_copy NEED_VA_COPY /**/ -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t $netdb_host_type /**/ -#define Netdb_hlen_t $netdb_hlen_type /**/ -#define Netdb_name_t $netdb_name_type /**/ -#define Netdb_net_t $netdb_net_type /**/ - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -#$d_perl_otherlibdirs PERL_OTHERLIBDIRS "$otherlibdirs" /**/ - /* IVTYPE: * This symbol defines the C type used for Perl's IV. */ @@ -3280,59 +3215,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #define NVff $nvfformat /**/ #define NVgf $nvgformat /**/ -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Pid_t $pidtype /* PID type */ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "$privlib" /**/ -#define PRIVLIB_EXP "$privlibexp" /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE $ptrsize /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() $drand01 /**/ -#define Rand_seed_t $randseedtype /**/ -#define seedDrand01(x) $seedfunc((Rand_seed_t)x) /**/ -#define RANDBITS $randbits /**/ - /* SELECT_MIN_BITS: * This symbol holds the minimum number of bits operated by select. * That is, if you do select(n, ...), how many bits at least will be @@ -3340,122 +3222,7 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * is either n or 32*ceil(n/32), especially many little-endians do * the latter. This is only useful if you have select(), naturally. */ -#define SELECT_MIN_BITS $selectminbits /**/ - -/* Select_fd_set_t: - * This symbol holds the type used for the 2nd, 3rd, and 4th - * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you - * have select(), of course. - */ -#define Select_fd_set_t $selecttype /**/ - -/* SIG_NAME: - * This symbol contains a list of signal names in order of - * signal number. This is intended - * to be used as a static array initialization, like this: - * char *sig_name[] = { SIG_NAME }; - * The signals in the list are separated with commas, and each signal - * is surrounded by double quotes. There is no leading SIG in the signal - * name, i.e. SIGQUIT is known as "QUIT". - * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn, - * etc., where nn is the actual signal number (e.g. NUM37). - * The signal number for sig_name[i] is stored in sig_num[i]. - * The last element is 0 to terminate the list with a NULL. This - * corresponds to the 0 at the end of the sig_num list. - */ -/* SIG_NUM: - * This symbol contains a list of signal numbers, in the same order as the - * SIG_NAME list. It is suitable for static array initialization, as in: - * int sig_num[] = { SIG_NUM }; - * The signals in the list are separated with commas, and the indices - * within that list and the SIG_NAME list match, so it's easy to compute - * the signal name from a number or vice versa at the price of a small - * dynamic linear lookup. - * Duplicates are allowed, but are moved to the end of the list. - * The signal number corresponding to sig_name[i] is sig_number[i]. - * if (i < NSIG) then sig_number[i] == i. - * The last element is 0, corresponding to the 0 at the end of - * the sig_name list. - */ -/* SIG_SIZE: - * This variable contains the number of elements of the sig_name - * and sig_num arrays, excluding the final NULL entry. - */ -#define SIG_NAME $sig_name_init /**/ -#define SIG_NUM $sig_num_init /**/ -#define SIG_SIZE $sig_size /**/ - -/* SITEARCH: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-dependent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITEARCH_EXP: - * This symbol contains the ~name expanded version of SITEARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define SITEARCH "$sitearch" /**/ -#define SITEARCH_EXP "$sitearchexp" /**/ - -/* SITELIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-independent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITELIB_EXP: - * This symbol contains the ~name expanded version of SITELIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* SITELIB_STEM: - * This define is SITELIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -#define SITELIB "$sitelib" /**/ -#define SITELIB_EXP "$sitelibexp" /**/ -#define SITELIB_STEM "$sitelib_stem" /**/ - -/* Size_t_size: - * This symbol holds the size of a Size_t in bytes. - */ -#define Size_t_size $sizesize /* */ - -/* Size_t: - * This symbol holds the type used to declare length parameters - * for string functions. It is usually size_t, but may be - * unsigned long, int, etc. It may be necessary to include - * to get any typedef'ed information. - */ -#define Size_t $sizetype /* length paramater for string functions */ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t $socksizetype /**/ - -/* SSize_t: - * This symbol holds the type used by functions that return - * a count of bytes or an error condition. It must be a signed type. - * It is usually ssize_t, but may be long or int, etc. - * It may be necessary to include or - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t $ssizetype /* signed count of bytes */ +#define SELECT_MIN_BITS $selectminbits /**/ /* STARTPERL: * This variable contains the string to put in front of a perl @@ -3464,12 +3231,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #define STARTPERL "$startperl" /**/ -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". - */ -#define STDCHAR $stdchar /**/ - /* HAS_STDIO_STREAM_ARRAY: * This symbol, if defined, tells that there is an array * holding the stdio streams. @@ -3481,29 +3242,6 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY /**/ #define STDIO_STREAM_ARRAY $stdio_stream_array -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f $uidformat /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign $uidsign /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size $uidsize /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Uid_t $uidtype /* UID type */ - /* USE_64_BIT_INT: * This symbol, if defined, indicates that 64-bit integers should * be used when available. If not defined, the native integers @@ -3535,407 +3273,201 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * should be used when available. */ #ifndef USE_LARGE_FILES -#$uselargefiles USE_LARGE_FILES /**/ -#endif - -/* USE_LONG_DOUBLE: - * This symbol, if defined, indicates that long doubles should - * be used when available. - */ -#ifndef USE_LONG_DOUBLE -#$uselongdouble USE_LONG_DOUBLE /**/ -#endif - -/* USE_MORE_BITS: - * This symbol, if defined, indicates that 64-bit interfaces and - * long doubles should be used when available. - */ -#ifndef USE_MORE_BITS -#$usemorebits USE_MORE_BITS /**/ -#endif - -/* MULTIPLICITY: - * This symbol, if defined, indicates that Perl should - * be built to use multiplicity. - */ -#ifndef MULTIPLICITY -#$usemultiplicity MULTIPLICITY /**/ -#endif - -/* USE_PERLIO: - * This symbol, if defined, indicates that the PerlIO abstraction should - * be used throughout. If not defined, stdio should be - * used in a fully backward compatible manner. - */ -#ifndef USE_PERLIO -#$useperlio USE_PERLIO /**/ -#endif - -/* USE_SOCKS: - * This symbol, if defined, indicates that Perl should - * be built to use socks. - */ -#ifndef USE_SOCKS -#$usesocks USE_SOCKS /**/ -#endif - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -#$use5005threads USE_5005THREADS /**/ -#$useithreads USE_ITHREADS /**/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif -#$d_oldpthreads OLD_PTHREADS_API /**/ -#$usereentrant USE_REENTRANT_API /**/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#$d_vendorarch PERL_VENDORARCH "$vendorarch" /**/ -#$d_vendorarch PERL_VENDORARCH_EXP "$vendorarchexp" /**/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -#$d_vendorlib PERL_VENDORLIB_EXP "$vendorlibexp" /**/ -#$d_vendorlib PERL_VENDORLIB_STEM "$vendorlib_stem" /**/ - -/* VOIDFLAGS: - * This symbol indicates how much support of the void type is given by this - * compiler. What various bits mean: - * - * 1 = supports declaration of void - * 2 = supports arrays of pointers to functions returning void - * 4 = supports comparisons between pointers to void functions and - * addresses of void functions - * 8 = suports declaration of generic void pointers - * - * The package designer should define VOIDUSED to indicate the requirements - * of the package. This can be done either by #defining VOIDUSED before - * including config.h, or by defining defvoidused in Myinit.U. If the - * latter approach is taken, only those flags will be tested. If the - * level of void support necessary is not present, defines void to int. - */ -#ifndef VOIDUSED -#define VOIDUSED $defvoidused -#endif -#define VOIDFLAGS $voidflags -#if (VOIDFLAGS & VOIDUSED) != VOIDUSED -#define void int /* is void to be avoided? */ -#define M_VOID /* Xenix strikes again */ -#endif - -/* PERL_XS_APIVERSION: - * This variable contains the version of the oldest perl binary - * compatible with the present perl. perl.c:incpush() and - * lib/lib.pm will automatically search in $sitearch for older - * directories across major versions back to xs_apiversion. - * This is only useful if you have a perl library directory tree - * structured like the default one. - * See INSTALL for how this works. - * The versioned site_perl directory was introduced in 5.005, - * so that is the lowest possible value. - * Since this can depend on compile time options - * it is set by Configure. Other non-default sources - * of potential incompatibility, such as multiplicity, threads, - * debugging, 64bits, sfio, etc., are not checked for currently, - * though in principle we could go snooping around in old - * Config.pm files. - */ -/* PERL_PM_APIVERSION: - * This variable contains the version of the oldest perl - * compatible with the present perl. (That is, pure perl modules - * written for pm_apiversion will still work for the current - * version). perl.c:incpush() and lib/lib.pm will automatically - * search in $sitelib for older directories across major versions - * back to pm_apiversion. This is only useful if you have a perl - * library directory tree structured like the default one. The - * versioned site_perl library was introduced in 5.005, so that's - * the default setting for this variable. It's hard to imagine - * it changing before Perl6. It is included here for symmetry - * with xs_apiveprsion -- the searching algorithms will - * (presumably) be similar. - * See the INSTALL file for how this works. - */ -#define PERL_XS_APIVERSION "$xs_apiversion" -#define PERL_PM_APIVERSION "$pm_apiversion" - -/* HAS_CRYPT: - * This symbol, if defined, indicates that the crypt routine is available - * to encrypt passwords and the like. - */ -#$d_crypt HAS_CRYPT /**/ - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ -#$d_dosuid DOSUID /**/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t $shmattype /**/ -#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/ - -/* I_NDBM: - * This symbol, if defined, indicates that exists and should - * be included. - */ -#$i_ndbm I_NDBM /**/ - -/* I_STDARG: - * This symbol, if defined, indicates that exists and should - * be included. - */ -/* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#$i_stdarg I_STDARG /**/ -#$i_varargs I_VARARGS /**/ - -/* CAN_PROTOTYPE: - * If defined, this macro indicates that the C compiler can handle - * function prototypes. - */ -/* _: - * This macro is used to declare function parameters for folks who want - * to make declarations with prototypes using a different style than - * the above macros. Use double parentheses. For example: - * - * int main _((int argc, char *argv[])); +#$uselargefiles USE_LARGE_FILES /**/ +#endif + +/* USE_LONG_DOUBLE: + * This symbol, if defined, indicates that long doubles should + * be used when available. */ -#$prototype CAN_PROTOTYPE /**/ -#ifdef CAN_PROTOTYPE -#define _(args) args -#else -#define _(args) () +#ifndef USE_LONG_DOUBLE +#$uselongdouble USE_LONG_DOUBLE /**/ #endif -/* SH_PATH: - * This symbol contains the full pathname to the shell used on this - * on this system to execute Bourne shell scripts. Usually, this will be - * /bin/sh, though it's possible that some systems will have /bin/ksh, - * /bin/pdksh, /bin/ash, /bin/bash, or even something such as - * D:/bin/sh.exe. +/* USE_MORE_BITS: + * This symbol, if defined, indicates that 64-bit interfaces and + * long doubles should be used when available. */ -#define SH_PATH "$sh" /**/ +#ifndef USE_MORE_BITS +#$usemorebits USE_MORE_BITS /**/ +#endif -/* USE_CROSS_COMPILE: - * This symbol, if defined, indicates that Perl is being cross-compiled. +/* MULTIPLICITY: + * This symbol, if defined, indicates that Perl should + * be built to use multiplicity. */ -/* PERL_TARGETARCH: - * This symbol, if defined, indicates the target architecture - * Perl has been cross-compiled to. Undefined if not a cross-compile. +#ifndef MULTIPLICITY +#$usemultiplicity MULTIPLICITY /**/ +#endif + +/* USE_PERLIO: + * This symbol, if defined, indicates that the PerlIO abstraction should + * be used throughout. If not defined, stdio should be + * used in a fully backward compatible manner. */ -#ifndef USE_CROSS_COMPILE -#$usecrosscompile USE_CROSS_COMPILE /**/ -#define PERL_TARGETARCH "$targetarch" /**/ +#ifndef USE_PERLIO +#$useperlio USE_PERLIO /**/ #endif -/* HAS_DBMINIT_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the dbminit() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int dbminit(char *); +/* USE_SOCKS: + * This symbol, if defined, indicates that Perl should + * be built to use socks. */ -#$d_dbminitproto HAS_DBMINIT_PROTO /**/ +#ifndef USE_SOCKS +#$usesocks USE_SOCKS /**/ +#endif -/* HAS_DIRFD: - * This manifest constant lets the C program know that dirfd - * is available. +/* PERL_XS_APIVERSION: + * This variable contains the version of the oldest perl binary + * compatible with the present perl. perl.c:incpush() and + * lib/lib.pm will automatically search in $sitearch for older + * directories across major versions back to xs_apiversion. + * This is only useful if you have a perl library directory tree + * structured like the default one. + * See INSTALL for how this works. + * The versioned site_perl directory was introduced in 5.005, + * so that is the lowest possible value. + * Since this can depend on compile time options + * it is set by Configure. Other non-default sources + * of potential incompatibility, such as multiplicity, threads, + * debugging, 64bits, sfio, etc., are not checked for currently, + * though in principle we could go snooping around in old + * Config.pm files. */ -#$d_dirfd HAS_DIRFD /**/ +/* PERL_PM_APIVERSION: + * This variable contains the version of the oldest perl + * compatible with the present perl. (That is, pure perl modules + * written for pm_apiversion will still work for the current + * version). perl.c:incpush() and lib/lib.pm will automatically + * search in $sitelib for older directories across major versions + * back to pm_apiversion. This is only useful if you have a perl + * library directory tree structured like the default one. The + * versioned site_perl library was introduced in 5.005, so that's + * the default setting for this variable. It's hard to imagine + * it changing before Perl6. It is included here for symmetry + * with xs_apiveprsion -- the searching algorithms will + * (presumably) be similar. + * See the INSTALL file for how this works. + */ +#define PERL_XS_APIVERSION "$xs_apiversion" +#define PERL_PM_APIVERSION "$pm_apiversion" -/* HAS_FLOCK_PROTO: +/* HAS_DRAND48_PROTO: * This symbol, if defined, indicates that the system provides - * a prototype for the flock() function. Otherwise, it is up + * a prototype for the drand48() function. Otherwise, it is up * to the program to supply one. A good guess is - * extern int flock(int, int); - */ -#$d_flockproto HAS_FLOCK_PROTO /**/ - -/* HAS_FPCLASSL: - * This symbol, if defined, indicates that the fpclassl routine is - * available to classify long doubles. Available for example in IRIX. - * The returned values are defined in and are: - * - * FP_SNAN signaling NaN - * FP_QNAN quiet NaN - * FP_NINF negative infinity - * FP_PINF positive infinity - * FP_NDENORM negative denormalized non-zero - * FP_PDENORM positive denormalized non-zero - * FP_NZERO negative zero - * FP_PZERO positive zero - * FP_NNORM negative normalized non-zero - * FP_PNORM positive normalized non-zero + * extern double drand48(void); */ -#$d_fpclassl HAS_FPCLASSL /**/ +#$d_drand48proto HAS_DRAND48_PROTO /**/ -/* HAS_NL_LANGINFO: - * This symbol, if defined, indicates that the nl_langinfo routine is - * available to return local data. You will also need - * and therefore I_LANGINFO. +/* HAS_GETHOST_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for gethostent(), gethostbyname(), and + * gethostbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. */ -#$d_nl_langinfo HAS_NL_LANGINFO /**/ +#$d_gethostprotos HAS_GETHOST_PROTOS /**/ -/* HAS_PROCSELFEXE: - * This symbol is defined if PROCSELFEXE_PATH is a symlink - * to the absolute pathname of the executing program. - */ -/* PROCSELFEXE_PATH: - * If HAS_PROCSELFEXE is defined this symbol is the filename - * of the symbolic link pointing to the absolute pathname of - * the executing program. +/* HAS_GETNET_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getnetent(), getnetbyname(), and + * getnetbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. */ -#$d_procselfexe HAS_PROCSELFEXE /**/ -#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH) -#define PROCSELFEXE_PATH $procselfexe /**/ -#endif +#$d_getnetprotos HAS_GETNET_PROTOS /**/ -/* HAS_SIGPROCMASK: - * This symbol, if defined, indicates that the sigprocmask - * system call is available to examine or change the signal mask - * of the calling process. +/* HAS_GETPROTO_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getprotoent(), getprotobyname(), and + * getprotobyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. */ -#$d_sigprocmask HAS_SIGPROCMASK /**/ +#$d_getprotoprotos HAS_GETPROTO_PROTOS /**/ -/* HAS_SOCKATMARK: - * This symbol, if defined, indicates that the sockatmark routine is - * available to test whether a socket is at the out-of-band mark. +/* HAS_GETSERV_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getservent(), getservbyname(), and + * getservbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. */ -#$d_sockatmark HAS_SOCKATMARK /**/ +#$d_getservprotos HAS_GETSERV_PROTOS /**/ -/* HAS_SOCKATMARK_PROTO: +/* HAS_LSEEK_PROTO: * This symbol, if defined, indicates that the system provides - * a prototype for the sockatmark() function. Otherwise, it is up + * a prototype for the lseek() function. Otherwise, it is up * to the program to supply one. A good guess is - * extern int sockatmark(int); + * extern off_t lseek(int, off_t, int); */ -#$d_sockatmarkproto HAS_SOCKATMARK_PROTO /**/ +#$d_lseekproto HAS_LSEEK_PROTO /**/ -/* HAS_SETRESGID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresgid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); +/* Netdb_host_t: + * This symbol holds the type used for the 1st argument + * to gethostbyaddr(). */ -#$d_sresgproto HAS_SETRESGID_PROTO /**/ - -/* HAS_SETRESUID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresuid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); +/* Netdb_hlen_t: + * This symbol holds the type used for the 2nd argument + * to gethostbyaddr(). */ -#$d_sresuproto HAS_SETRESUID_PROTO /**/ - -/* HAS_STRFTIME: - * This symbol, if defined, indicates that the strftime routine is - * available to do time formatting. +/* Netdb_name_t: + * This symbol holds the type used for the argument to + * gethostbyname(). */ -#$d_strftime HAS_STRFTIME /**/ +/* Netdb_net_t: + * This symbol holds the type used for the 1st argument to + * getnetbyaddr(). + */ +#define Netdb_host_t $netdb_host_type /**/ +#define Netdb_hlen_t $netdb_hlen_type /**/ +#define Netdb_name_t $netdb_name_type /**/ +#define Netdb_net_t $netdb_net_type /**/ -/* HAS_SYSCALL_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the syscall() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int syscall(int, ...); - * extern int syscall(long, ...); +/* Select_fd_set_t: + * This symbol holds the type used for the 2nd, 3rd, and 4th + * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET + * is defined, and 'int *' otherwise. This is only useful if you + * have select(), of course. */ -#$d_syscallproto HAS_SYSCALL_PROTO /**/ +#define Select_fd_set_t $selecttype /**/ -/* U32_ALIGNMENT_REQUIRED: - * This symbol, if defined, indicates that you must access - * character data through U32-aligned pointers. +/* Sock_size_t: + * This symbol holds the type used for the size argument of + * various socket calls (just the base type, not the pointer-to). */ -#ifndef U32_ALIGNMENT_REQUIRED -#$d_u32align U32_ALIGNMENT_REQUIRED /**/ -#endif +#define Sock_size_t $socksizetype /**/ -/* HAS_USLEEP_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the usleep() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int usleep(useconds_t); +/* ARCHNAME: + * This symbol holds a string representing the architecture name. + * It may be used to construct an architecture-dependant pathname + * where library files may be held under a private library, for + * instance. */ -#$d_usleepproto HAS_USLEEP_PROTO /**/ +#define ARCHNAME "$archname" /**/ -/* I_CRYPT: - * This symbol, if defined, indicates that exists and - * should be included. +/* HAS_ASCTIME_R: + * This symbol, if defined, indicates that the asctime_r routine + * is available to asctime re-entrantly. */ -#$i_crypt I_CRYPT /**/ - -/* I_FP: - * This symbol, if defined, indicates that exists and - * should be included. +/* ASCTIME_R_PROTO: + * This symbol encodes the prototype of asctime_r. + * It is zero if d_asctime_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r + * is defined. */ -#$i_fp I_FP /**/ +#$d_asctime_r HAS_ASCTIME_R /**/ +#define ASCTIME_R_PROTO $asctime_r_proto /**/ -/* I_LANGINFO: - * This symbol, if defined, indicates that exists and - * should be included. +/* HAS_CRYPT_R: + * This symbol, if defined, indicates that the crypt_r routine + * is available to crypt re-entrantly. */ -#$i_langinfo I_LANGINFO /**/ +/* CRYPT_R_PROTO: + * This symbol encodes the prototype of crypt_r. + * It is zero if d_crypt_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r + * is defined. + */ +#$d_crypt_r HAS_CRYPT_R /**/ +#define CRYPT_R_PROTO $crypt_r_proto /**/ /* HAS_CTERMID_R: * This symbol, if defined, indicates that the ctermid_r routine @@ -3950,6 +3482,45 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_ctermid_r HAS_CTERMID_R /**/ #define CTERMID_R_PROTO $ctermid_r_proto /**/ +/* HAS_CTIME_R: + * This symbol, if defined, indicates that the ctime_r routine + * is available to ctime re-entrantly. + */ +/* CTIME_R_PROTO: + * This symbol encodes the prototype of ctime_r. + * It is zero if d_ctime_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r + * is defined. + */ +#$d_ctime_r HAS_CTIME_R /**/ +#define CTIME_R_PROTO $ctime_r_proto /**/ + +/* HAS_DRAND48_R: + * This symbol, if defined, indicates that the drand48_r routine + * is available to drand48 re-entrantly. + */ +/* DRAND48_R_PROTO: + * This symbol encodes the prototype of drand48_r. + * It is zero if d_drand48_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r + * is defined. + */ +#$d_drand48_r HAS_DRAND48_R /**/ +#define DRAND48_R_PROTO $drand48_r_proto /**/ + +/* HAS_ENDGRENT_R: + * This symbol, if defined, indicates that the endgrent_r routine + * is available to endgrent re-entrantly. + */ +/* ENDGRENT_R_PROTO: + * This symbol encodes the prototype of endgrent_r. + * It is zero if d_endgrent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r + * is defined. + */ +#$d_endgrent_r HAS_ENDGRENT_R /**/ +#define ENDGRENT_R_PROTO $endgrent_r_proto /**/ + /* HAS_ENDHOSTENT_R: * This symbol, if defined, indicates that the endhostent_r routine * is available to endhostent re-entrantly. @@ -3989,6 +3560,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_endprotoent_r HAS_ENDPROTOENT_R /**/ #define ENDPROTOENT_R_PROTO $endprotoent_r_proto /**/ +/* HAS_ENDPWENT_R: + * This symbol, if defined, indicates that the endpwent_r routine + * is available to endpwent re-entrantly. + */ +/* ENDPWENT_R_PROTO: + * This symbol encodes the prototype of endpwent_r. + * It is zero if d_endpwent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r + * is defined. + */ +#$d_endpwent_r HAS_ENDPWENT_R /**/ +#define ENDPWENT_R_PROTO $endpwent_r_proto /**/ + /* HAS_ENDSERVENT_R: * This symbol, if defined, indicates that the endservent_r routine * is available to endservent re-entrantly. @@ -4002,6 +3586,45 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_endservent_r HAS_ENDSERVENT_R /**/ #define ENDSERVENT_R_PROTO $endservent_r_proto /**/ +/* HAS_GETGRENT_R: + * This symbol, if defined, indicates that the getgrent_r routine + * is available to getgrent re-entrantly. + */ +/* GETGRENT_R_PROTO: + * This symbol encodes the prototype of getgrent_r. + * It is zero if d_getgrent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r + * is defined. + */ +#$d_getgrent_r HAS_GETGRENT_R /**/ +#define GETGRENT_R_PROTO $getgrent_r_proto /**/ + +/* HAS_GETGRGID_R: + * This symbol, if defined, indicates that the getgrgid_r routine + * is available to getgrgid re-entrantly. + */ +/* GETGRGID_R_PROTO: + * This symbol encodes the prototype of getgrgid_r. + * It is zero if d_getgrgid_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r + * is defined. + */ +#$d_getgrgid_r HAS_GETGRGID_R /**/ +#define GETGRGID_R_PROTO $getgrgid_r_proto /**/ + +/* HAS_GETGRNAM_R: + * This symbol, if defined, indicates that the getgrnam_r routine + * is available to getgrnam re-entrantly. + */ +/* GETGRNAM_R_PROTO: + * This symbol encodes the prototype of getgrnam_r. + * It is zero if d_getgrnam_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r + * is defined. + */ +#$d_getgrnam_r HAS_GETGRNAM_R /**/ +#define GETGRNAM_R_PROTO $getgrnam_r_proto /**/ + /* HAS_GETHOSTBYADDR_R: * This symbol, if defined, indicates that the gethostbyaddr_r routine * is available to gethostbyaddr re-entrantly. @@ -4041,6 +3664,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_gethostent_r HAS_GETHOSTENT_R /**/ #define GETHOSTENT_R_PROTO $gethostent_r_proto /**/ +/* HAS_GETLOGIN_R: + * This symbol, if defined, indicates that the getlogin_r routine + * is available to getlogin re-entrantly. + */ +/* GETLOGIN_R_PROTO: + * This symbol encodes the prototype of getlogin_r. + * It is zero if d_getlogin_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r + * is defined. + */ +#$d_getlogin_r HAS_GETLOGIN_R /**/ +#define GETLOGIN_R_PROTO $getlogin_r_proto /**/ + /* HAS_GETNETBYADDR_R: * This symbol, if defined, indicates that the getnetbyaddr_r routine * is available to getnetbyaddr re-entrantly. @@ -4119,6 +3755,45 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_getprotoent_r HAS_GETPROTOENT_R /**/ #define GETPROTOENT_R_PROTO $getprotoent_r_proto /**/ +/* HAS_GETPWENT_R: + * This symbol, if defined, indicates that the getpwent_r routine + * is available to getpwent re-entrantly. + */ +/* GETPWENT_R_PROTO: + * This symbol encodes the prototype of getpwent_r. + * It is zero if d_getpwent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r + * is defined. + */ +#$d_getpwent_r HAS_GETPWENT_R /**/ +#define GETPWENT_R_PROTO $getpwent_r_proto /**/ + +/* HAS_GETPWNAM_R: + * This symbol, if defined, indicates that the getpwnam_r routine + * is available to getpwnam re-entrantly. + */ +/* GETPWNAM_R_PROTO: + * This symbol encodes the prototype of getpwnam_r. + * It is zero if d_getpwnam_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r + * is defined. + */ +#$d_getpwnam_r HAS_GETPWNAM_R /**/ +#define GETPWNAM_R_PROTO $getpwnam_r_proto /**/ + +/* HAS_GETPWUID_R: + * This symbol, if defined, indicates that the getpwuid_r routine + * is available to getpwuid re-entrantly. + */ +/* GETPWUID_R_PROTO: + * This symbol encodes the prototype of getpwuid_r. + * It is zero if d_getpwuid_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r + * is defined. + */ +#$d_getpwuid_r HAS_GETPWUID_R /**/ +#define GETPWUID_R_PROTO $getpwuid_r_proto /**/ + /* HAS_GETSERVBYNAME_R: * This symbol, if defined, indicates that the getservbyname_r routine * is available to getservbyname re-entrantly. @@ -4155,14 +3830,95 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r * is defined. */ -#$d_getservent_r HAS_GETSERVENT_R /**/ -#define GETSERVENT_R_PROTO $getservent_r_proto /**/ - -/* HAS_PTHREAD_ATFORK: - * This symbol, if defined, indicates that the pthread_atfork routine - * is available setup fork handlers. - */ -#$d_pthread_atfork HAS_PTHREAD_ATFORK /**/ +#$d_getservent_r HAS_GETSERVENT_R /**/ +#define GETSERVENT_R_PROTO $getservent_r_proto /**/ + +/* HAS_GETSPNAM_R: + * This symbol, if defined, indicates that the getspnam_r routine + * is available to getspnam re-entrantly. + */ +/* GETSPNAM_R_PROTO: + * This symbol encodes the prototype of getspnam_r. + * It is zero if d_getspnam_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r + * is defined. + */ +#$d_getspnam_r HAS_GETSPNAM_R /**/ +#define GETSPNAM_R_PROTO $getspnam_r_proto /**/ + +/* HAS_GMTIME_R: + * This symbol, if defined, indicates that the gmtime_r routine + * is available to gmtime re-entrantly. + */ +/* GMTIME_R_PROTO: + * This symbol encodes the prototype of gmtime_r. + * It is zero if d_gmtime_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r + * is defined. + */ +#$d_gmtime_r HAS_GMTIME_R /**/ +#define GMTIME_R_PROTO $gmtime_r_proto /**/ + +/* HAS_LOCALTIME_R: + * This symbol, if defined, indicates that the localtime_r routine + * is available to localtime re-entrantly. + */ +/* LOCALTIME_R_PROTO: + * This symbol encodes the prototype of localtime_r. + * It is zero if d_localtime_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r + * is defined. + */ +#$d_localtime_r HAS_LOCALTIME_R /**/ +#define LOCALTIME_R_PROTO $localtime_r_proto /**/ + +/* OLD_PTHREAD_CREATE_JOINABLE: + * This symbol, if defined, indicates how to create pthread + * in joinable (aka undetached) state. NOTE: not defined + * if pthread.h already has defined PTHREAD_CREATE_JOINABLE + * (the new version of the constant). + * If defined, known values are PTHREAD_CREATE_UNDETACHED + * and __UNDETACHED. + */ +#$d_old_pthread_create_joinable OLD_PTHREAD_CREATE_JOINABLE $old_pthread_create_joinable /**/ + +/* HAS_PTHREAD_ATFORK: + * This symbol, if defined, indicates that the pthread_atfork routine + * is available setup fork handlers. + */ +#$d_pthread_atfork HAS_PTHREAD_ATFORK /**/ + +/* HAS_PTHREAD_YIELD: + * This symbol, if defined, indicates that the pthread_yield + * routine is available to yield the execution of the current + * thread. sched_yield is preferable to pthread_yield. + */ +/* SCHED_YIELD: + * This symbol defines the way to yield the execution of + * the current thread. Known ways are sched_yield, + * pthread_yield, and pthread_yield with NULL. + */ +/* HAS_SCHED_YIELD: + * This symbol, if defined, indicates that the sched_yield + * routine is available to yield the execution of the current + * thread. sched_yield is preferable to pthread_yield. + */ +#$d_pthread_yield HAS_PTHREAD_YIELD /**/ +#define SCHED_YIELD $sched_yield /**/ +#$d_sched_yield HAS_SCHED_YIELD /**/ + +/* HAS_RANDOM_R: + * This symbol, if defined, indicates that the random_r routine + * is available to random re-entrantly. + */ +/* RANDOM_R_PROTO: + * This symbol encodes the prototype of random_r. + * It is zero if d_random_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r + * is defined. + */ +#$d_random_r HAS_RANDOM_R /**/ +#define RANDOM_R_PROTO $random_r_proto /**/ /* HAS_READDIR64_R: * This symbol, if defined, indicates that the readdir64_r routine @@ -4177,6 +3933,32 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_readdir64_r HAS_READDIR64_R /**/ #define READDIR64_R_PROTO $readdir64_r_proto /**/ +/* HAS_READDIR_R: + * This symbol, if defined, indicates that the readdir_r routine + * is available to readdir re-entrantly. + */ +/* READDIR_R_PROTO: + * This symbol encodes the prototype of readdir_r. + * It is zero if d_readdir_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r + * is defined. + */ +#$d_readdir_r HAS_READDIR_R /**/ +#define READDIR_R_PROTO $readdir_r_proto /**/ + +/* HAS_SETGRENT_R: + * This symbol, if defined, indicates that the setgrent_r routine + * is available to setgrent re-entrantly. + */ +/* SETGRENT_R_PROTO: + * This symbol encodes the prototype of setgrent_r. + * It is zero if d_setgrent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r + * is defined. + */ +#$d_setgrent_r HAS_SETGRENT_R /**/ +#define SETGRENT_R_PROTO $setgrent_r_proto /**/ + /* HAS_SETHOSTENT_R: * This symbol, if defined, indicates that the sethostent_r routine * is available to sethostent re-entrantly. @@ -4229,6 +4011,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_setprotoent_r HAS_SETPROTOENT_R /**/ #define SETPROTOENT_R_PROTO $setprotoent_r_proto /**/ +/* HAS_SETPWENT_R: + * This symbol, if defined, indicates that the setpwent_r routine + * is available to setpwent re-entrantly. + */ +/* SETPWENT_R_PROTO: + * This symbol encodes the prototype of setpwent_r. + * It is zero if d_setpwent_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r + * is defined. + */ +#$d_setpwent_r HAS_SETPWENT_R /**/ +#define SETPWENT_R_PROTO $setpwent_r_proto /**/ + /* HAS_SETSERVENT_R: * This symbol, if defined, indicates that the setservent_r routine * is available to setservent re-entrantly. @@ -4242,6 +4037,58 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_setservent_r HAS_SETSERVENT_R /**/ #define SETSERVENT_R_PROTO $setservent_r_proto /**/ +/* HAS_SRAND48_R: + * This symbol, if defined, indicates that the srand48_r routine + * is available to srand48 re-entrantly. + */ +/* SRAND48_R_PROTO: + * This symbol encodes the prototype of srand48_r. + * It is zero if d_srand48_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r + * is defined. + */ +#$d_srand48_r HAS_SRAND48_R /**/ +#define SRAND48_R_PROTO $srand48_r_proto /**/ + +/* HAS_SRANDOM_R: + * This symbol, if defined, indicates that the srandom_r routine + * is available to srandom re-entrantly. + */ +/* SRANDOM_R_PROTO: + * This symbol encodes the prototype of srandom_r. + * It is zero if d_srandom_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r + * is defined. + */ +#$d_srandom_r HAS_SRANDOM_R /**/ +#define SRANDOM_R_PROTO $srandom_r_proto /**/ + +/* HAS_STRERROR_R: + * This symbol, if defined, indicates that the strerror_r routine + * is available to strerror re-entrantly. + */ +/* STRERROR_R_PROTO: + * This symbol encodes the prototype of strerror_r. + * It is zero if d_strerror_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r + * is defined. + */ +#$d_strerror_r HAS_STRERROR_R /**/ +#define STRERROR_R_PROTO $strerror_r_proto /**/ + +/* HAS_TMPNAM_R: + * This symbol, if defined, indicates that the tmpnam_r routine + * is available to tmpnam re-entrantly. + */ +/* TMPNAM_R_PROTO: + * This symbol encodes the prototype of tmpnam_r. + * It is zero if d_tmpnam_r is undef, and one of the + * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r + * is defined. + */ +#$d_tmpnam_r HAS_TMPNAM_R /**/ +#define TMPNAM_R_PROTO $tmpnam_r_proto /**/ + /* HAS_TTYNAME_R: * This symbol, if defined, indicates that the ttyname_r routine * is available to ttyname re-entrantly. @@ -4255,5 +4102,158 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_ttyname_r HAS_TTYNAME_R /**/ #define TTYNAME_R_PROTO $ttyname_r_proto /**/ +/* I_MACH_CTHREADS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +#$i_machcthr I_MACH_CTHREADS /**/ + +/* I_PTHREAD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +#$i_pthread I_PTHREAD /**/ + +/* USE_ITHREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the interpreter-based threading implementation. + */ +/* USE_5005THREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the 5.005-based threading implementation. + */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ +/* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ +#$use5005threads USE_5005THREADS /**/ +#$useithreads USE_ITHREADS /**/ +#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) +#define USE_THREADS /* until src is revised*/ +#endif +#$d_oldpthreads OLD_PTHREADS_API /**/ +#$usereentrant USE_REENTRANT_API /**/ + +/* HAS_TIME: + * This symbol, if defined, indicates that the time() routine exists. + */ +/* Time_t: + * This symbol holds the type returned by time(). It can be long, + * or time_t on BSD sites (in which case should be + * included). + */ +#$d_time HAS_TIME /**/ +#define Time_t $timetype /* Time type */ + +/* HAS_TIMES: + * This symbol, if defined, indicates that the times() routine exists. + * Note that this became obsolete on some systems (SUNOS), which now + * use getrusage(). It may be necessary to include . + */ +#$d_times HAS_TIMES /**/ + +/* Fpos_t: + * This symbol holds the type used to declare file positions in libc. + * It can be fpos_t, long, uint, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Fpos_t $fpostype /* File position type */ + +/* Gid_t_f: + * This symbol defines the format string used for printing a Gid_t. + */ +#define Gid_t_f $gidformat /**/ + +/* Gid_t_sign: + * This symbol holds the signedess of a Gid_t. + * 1 for unsigned, -1 for signed. + */ +#define Gid_t_sign $gidsign /* GID sign */ + +/* Gid_t_size: + * This symbol holds the size of a Gid_t in bytes. + */ +#define Gid_t_size $gidsize /* GID size */ + +/* Gid_t: + * This symbol holds the return type of getgid() and the type of + * argument to setrgid() and related functions. Typically, + * it is the type of group ids in the kernel. It can be int, ushort, + * gid_t, etc... It may be necessary to include to get + * any typedef'ed information. + */ +#define Gid_t $gidtype /* Type for getgid(), etc... */ + +/* Off_t: + * This symbol holds the type used to declare offsets in the kernel. + * It can be int, long, off_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +/* LSEEKSIZE: + * This symbol holds the number of bytes used by the Off_t. + */ +/* Off_t_size: + * This symbol holds the number of bytes used by the Off_t. + */ +#define Off_t $lseektype /* type */ +#define LSEEKSIZE $lseeksize /* size */ +#define Off_t_size $lseeksize /* size */ + +/* Mode_t: + * This symbol holds the type used to declare file modes + * for systems calls. It is usually mode_t, but may be + * int or unsigned short. It may be necessary to include + * to get any typedef'ed information. + */ +#define Mode_t $modetype /* file mode parameter for system calls */ + +/* Pid_t: + * This symbol holds the type used to declare process ids in the kernel. + * It can be int, uint, pid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Pid_t $pidtype /* PID type */ + +/* Size_t_size: + * This symbol holds the size of a Size_t in bytes. + */ +#define Size_t_size $sizesize /* */ + +/* Size_t: + * This symbol holds the type used to declare length parameters + * for string functions. It is usually size_t, but may be + * unsigned long, int, etc. It may be necessary to include + * to get any typedef'ed information. + */ +#define Size_t $sizetype /* length paramater for string functions */ + +/* Uid_t_f: + * This symbol defines the format string used for printing a Uid_t. + */ +#define Uid_t_f $uidformat /**/ + +/* Uid_t_sign: + * This symbol holds the signedess of a Uid_t. + * 1 for unsigned, -1 for signed. + */ +#define Uid_t_sign $uidsign /* UID sign */ + +/* Uid_t_size: + * This symbol holds the size of a Uid_t in bytes. + */ +#define Uid_t_size $uidsize /* UID size */ + +/* Uid_t: + * This symbol holds the type used to declare user ids in the kernel. + * It can be int, ushort, uid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Uid_t $uidtype /* UID type */ + #endif !GROK!THIS! diff --git a/cygwin/perlld.in b/cygwin/perlld.in index 4281be6..b33d0e2 100644 --- a/cygwin/perlld.in +++ b/cygwin/perlld.in @@ -46,7 +46,7 @@ if ($args !~ /\-o (\S+)/) { $path =~ s,[/\\](\.[/\\])*,/,g; } if ($dllname =~ /\./) { $libname =$`; } else { $libname =$dllname; }; - my $v_e_r_s = '5_8_0'; + my $v_e_r_s = '5_9_0'; if ( $dllname =~ /.*perl.*/) { $dllname ="cygperl$v_e_r_s.dll"; } else { diff --git a/embed.h b/embed.h index 747224f..03b64f5 100644 --- a/embed.h +++ b/embed.h @@ -1306,6 +1306,8 @@ #define pp_die Perl_pp_die #define pp_divide Perl_pp_divide #define pp_dofile Perl_pp_dofile +#define pp_dor Perl_pp_dor +#define pp_dorassign Perl_pp_dorassign #define pp_dump Perl_pp_dump #define pp_each Perl_pp_each #define pp_egrent Perl_pp_egrent @@ -2864,6 +2866,8 @@ #define pp_die() Perl_pp_die(aTHX) #define pp_divide() Perl_pp_divide(aTHX) #define pp_dofile() Perl_pp_dofile(aTHX) +#define pp_dor() Perl_pp_dor(aTHX) +#define pp_dorassign() Perl_pp_dorassign(aTHX) #define pp_dump() Perl_pp_dump(aTHX) #define pp_each() Perl_pp_each(aTHX) #define pp_egrent() Perl_pp_egrent(aTHX) diff --git a/epoc/config.sh b/epoc/config.sh index 78b22ac..7779669 100644 --- a/epoc/config.sh +++ b/epoc/config.sh @@ -33,8 +33,8 @@ apirevision='' apisubversion='' apiversion='' ar='arm-epoc-pe-ar' -archlib='/usr/lib/perl/5.8.0/epoc' -archlibexp='/usr/lib/perl/5.8.0/epoc' +archlib='/usr/lib/perl/5.9.0/epoc' +archlibexp='/usr/lib/perl/5.9.0/epoc' archname64='' archname='epoc' archobjs='epoc.o epocish.o epoc_stubs.o' @@ -713,8 +713,8 @@ pmake='' pr='' prefix='' prefixexp='' -privlib='/usr/lib/perl/5.8.0' -privlibexp='/usr/lib/perl/5.8.0' +privlib='/usr/lib/perl/5.9.0' +privlibexp='/usr/lib/perl/5.9.0' procselfexe='' prototype='define' ptrsize='4' @@ -769,11 +769,11 @@ sig_num='0' sig_num_init='0, 0' sig_size='1' signal_t='void' -sitearch='/usr/lib/perl/site_perl/5.8.0/epoc' -sitearchexp='/usr/lib/perl/site_perl/5.8.0/epoc' -sitelib='/usr/lib/perl/site_perl/5.8.0/' +sitearch='/usr/lib/perl/site_perl/5.9.0/epoc' +sitearchexp='/usr/lib/perl/site_perl/5.9.0/epoc' +sitelib='/usr/lib/perl/site_perl/5.9.0/' sitelib_stem='/usr/lib/perl/site_perl' -sitelibexp='/usr/lib/perl/site_perl/5.8.0/' +sitelibexp='/usr/lib/perl/site_perl/5.9.0/' siteprefix='' siteprefixexp='' sizesize='4' @@ -850,7 +850,7 @@ vendorlib_stem='' vendorlibexp='' vendorprefix='' vendorprefixexp='' -version='5.8.0' +version='5.9.0' versiononly='undef' vi='' voidflags='15' @@ -982,7 +982,7 @@ vendorlib_stem='' vendorlibexp='' vendorprefix='' vendorprefixexp='' -version='5.8.0' +version='5.9.0' vi='' voidflags='15' xlibpth='' diff --git a/epoc/createpkg.pl b/epoc/createpkg.pl index 1190923..9dddd3a 100644 --- a/epoc/createpkg.pl +++ b/epoc/createpkg.pl @@ -3,7 +3,7 @@ use File::Find; use Cwd; -$VERSION="5.8.0"; +$VERSION="5.9.0"; $EPOC_VERSION=1; diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm index 924f436..c985896 100644 --- a/ext/B/B/Deparse.pm +++ b/ext/B/B/Deparse.pm @@ -1951,6 +1951,7 @@ sub logop { sub pp_and { logop(@_, "and", 3, "&&", 11, "if") } sub pp_or { logop(@_, "or", 2, "||", 10, "unless") } +sub pp_dor { logop(@_, "err", 2, "//", 10, "") } # xor is syntactically a logop, but it's really a binop (contrary to # old versions of opcode.pl). Syntax is what matters here. @@ -1967,7 +1968,8 @@ sub logassignop { } sub pp_andassign { logassignop(@_, "&&=") } -sub pp_orassign { logassignop(@_, "||=") } +sub pp_orassign { logassignop(@_, "||=") } +sub pp_dorassign { logassignop(@_, "//=") } sub listop { my $self = shift; diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm index 1524f67..6c4e8e5 100644 --- a/ext/Opcode/Opcode.pm +++ b/ext/Opcode/Opcode.pm @@ -331,7 +331,7 @@ invert_opset function. list lslice splice push pop shift unshift reverse - cond_expr flip flop andassign orassign and or xor + cond_expr flip flop andassign orassign dorassign and or dor xor warn die lineseq nextstate scope enter leave setstate diff --git a/ext/PerlIO/scalar/scalar.xs b/ext/PerlIO/scalar/scalar.xs index c027bd1..7bcee57 100644 --- a/ext/PerlIO/scalar/scalar.xs +++ b/ext/PerlIO/scalar/scalar.xs @@ -25,6 +25,8 @@ PerlIOScalar_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, if (arg) { if (SvROK(arg)) { s->var = SvREFCNT_inc(SvRV(arg)); + if (!SvPOK(s->var)) + (void)SvPV_nolen(s->var); } else { s->var = diff --git a/ext/PerlIO/t/scalar.t b/ext/PerlIO/t/scalar.t index fd1b852..4e6615e 100644 --- a/ext/PerlIO/t/scalar.t +++ b/ext/PerlIO/t/scalar.t @@ -10,7 +10,7 @@ BEGIN { } $| = 1; -print "1..22\n"; +print "1..23\n"; my $fh; my $var = "ok 2\n"; @@ -115,3 +115,8 @@ while (<$dup>) { close($fh); close($dup); +# Check reading from non-string scalars + +open $fh, '<', \42; +print <$fh> eq "42" ? "ok 23\n" : "not ok 23\n"; +close $fh; diff --git a/hints/aix.sh b/hints/aix.sh index 09ca0a4..4ccbc68 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -51,7 +51,8 @@ esac # Intuiting the existence of system calls under AIX is difficult, # at best; the safest technique is to find them empirically. -# AIX 4.3.* and above default to using nm for symbol extraction +# AIX 4.3.* and above default to letting Configure test if nm +# extraction will work. case "$osvers" in 3.*|4.1.*|4.2.*) case "$usenm" in @@ -62,9 +63,6 @@ case "$osvers" in esac ;; *) - case "$usenm" in - '') usenm='true' - esac case "$usenativedlopen" in '') usenativedlopen='true' esac diff --git a/hints/dgux.sh b/hints/dgux.sh index 350a9da..53a39c8 100644 --- a/hints/dgux.sh +++ b/hints/dgux.sh @@ -54,14 +54,14 @@ libpth="/usr/lib" ##################################### prefix=/usr/local -perlpath="$prefix/bin/perl58" -startperl="#! $prefix/bin/perl58" -privlib="$prefix/lib/perl58" +perlpath="$prefix/bin/perl59" +startperl="#! $prefix/bin/perl59" +privlib="$prefix/lib/perl59" man1dir="$prefix/man/man1" man3dir="$prefix/man/man3" -sitearch="$prefix/lib/perl58/$archname" -sitelib="$prefix/lib/perl58" +sitearch="$prefix/lib/perl59/$archname" +sitelib="$prefix/lib/perl59" #Do not overwrite by default /usr/bin/perl of DG/UX installusrbinperl="$undef" @@ -140,7 +140,7 @@ unset sde_path default_sde sde # ##################################### -libperl="libperl58.so" +libperl="libperl59.so" # Many functions (eg, gethostent(), killpg(), getpriority(), setruid() # dbm_*(), and plenty more) are defined in -ldgc. Usually you don't @@ -207,8 +207,8 @@ $define|true|[yY]*) # DG/UX library! libswanted="dbm posix resolv socket nsl dl m rte" archname="ix86-dgux-thread" - sitearch="$prefix/lib/perl58/$archname" - sitelib="$prefix/lib/perl58" + sitearch="$prefix/lib/perl59/$archname" + sitelib="$prefix/lib/perl59" case "$cc" in *gcc*) #### Use GCC -2.95.2/3 rev (DG/UX) and -pthread diff --git a/hints/hpux.sh b/hints/hpux.sh index 7170516..905e1c0 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -410,6 +410,58 @@ case "$ccisgcc" in # ;; # esac +# Once we have the compiler flags defined, Configure will +# execute the following call-back script. See hints/README.hints +# for details. +cat > UU/cc.cbu <<'EOCBU' +# This script UU/cc.cbu will get 'called-back' by Configure after it +# has prompted the user for the C compiler to use. + +# Compile and run the a test case to see if a certain gcc bug is +# present. If so, lower the optimization level when compiling +# pp_pack.c. This works around a bug in unpack. + +if test -z "$ccisgcc" -a -z "$gccversion"; then + : no tests needed for HPc +else + echo " " + echo "Testing for a certain gcc bug is fixed in your compiler..." + + # Try compiling the test case. + if $cc -o t001 -O $ccflags $ldflags ../hints/t001.c; then + gccbug=`$run ./t001` + case "$gccbug" in + *fails*) + cat >&4 <> config.sh ;; + *) echo "You specified pp_pack_cflags yourself, so we'll go with your value." >&4 ;; + esac + ;; + *) echo "Your compiler is ok." >&4 + ;; + esac + else + echo " " + echo "*** WHOA THERE!!! ***" >&4 + echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4 + case "$knowitall" in + '') echo " You'd better start hunting for one and let me know about it." >&4 + exit 1 + ;; + esac + fi + + rm -f t001$_o t001$_exe + fi +EOCBU + cat >UU/uselargefiles.cbu <<'EOCBU' # This script UU/uselargefiles.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use large files. diff --git a/installperl b/installperl index 9e06145..8ccd959 100755 --- a/installperl +++ b/installperl @@ -258,7 +258,7 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { chmod(0755, "$installbin/ld2"); }; } else { - $perldll = 'perl58.' . $dlext; + $perldll = 'perl59.' . $dlext; } if ($dlsrc ne "dl_none.xs") { diff --git a/keywords.h b/keywords.h index 744330f..2fbe748 100644 --- a/keywords.h +++ b/keywords.h @@ -6,6 +6,9 @@ * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * + * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + * This file is built by keywords.pl from its data. Any changes made here + * will be lost! */ #define KEY_NULL 0 #define KEY___FILE__ 1 @@ -61,195 +64,196 @@ #define KEY_endservent 51 #define KEY_eof 52 #define KEY_eq 53 -#define KEY_eval 54 -#define KEY_exec 55 -#define KEY_exists 56 -#define KEY_exit 57 -#define KEY_exp 58 -#define KEY_fcntl 59 -#define KEY_fileno 60 -#define KEY_flock 61 -#define KEY_for 62 -#define KEY_foreach 63 -#define KEY_fork 64 -#define KEY_format 65 -#define KEY_formline 66 -#define KEY_ge 67 -#define KEY_getc 68 -#define KEY_getgrent 69 -#define KEY_getgrgid 70 -#define KEY_getgrnam 71 -#define KEY_gethostbyaddr 72 -#define KEY_gethostbyname 73 -#define KEY_gethostent 74 -#define KEY_getlogin 75 -#define KEY_getnetbyaddr 76 -#define KEY_getnetbyname 77 -#define KEY_getnetent 78 -#define KEY_getpeername 79 -#define KEY_getpgrp 80 -#define KEY_getppid 81 -#define KEY_getpriority 82 -#define KEY_getprotobyname 83 -#define KEY_getprotobynumber 84 -#define KEY_getprotoent 85 -#define KEY_getpwent 86 -#define KEY_getpwnam 87 -#define KEY_getpwuid 88 -#define KEY_getservbyname 89 -#define KEY_getservbyport 90 -#define KEY_getservent 91 -#define KEY_getsockname 92 -#define KEY_getsockopt 93 -#define KEY_glob 94 -#define KEY_gmtime 95 -#define KEY_goto 96 -#define KEY_grep 97 -#define KEY_gt 98 -#define KEY_hex 99 -#define KEY_if 100 -#define KEY_index 101 -#define KEY_int 102 -#define KEY_ioctl 103 -#define KEY_join 104 -#define KEY_keys 105 -#define KEY_kill 106 -#define KEY_last 107 -#define KEY_lc 108 -#define KEY_lcfirst 109 -#define KEY_le 110 -#define KEY_length 111 -#define KEY_link 112 -#define KEY_listen 113 -#define KEY_local 114 -#define KEY_localtime 115 -#define KEY_lock 116 -#define KEY_log 117 -#define KEY_lstat 118 -#define KEY_lt 119 -#define KEY_m 120 -#define KEY_map 121 -#define KEY_mkdir 122 -#define KEY_msgctl 123 -#define KEY_msgget 124 -#define KEY_msgrcv 125 -#define KEY_msgsnd 126 -#define KEY_my 127 -#define KEY_ne 128 -#define KEY_next 129 -#define KEY_no 130 -#define KEY_not 131 -#define KEY_oct 132 -#define KEY_open 133 -#define KEY_opendir 134 -#define KEY_or 135 -#define KEY_ord 136 -#define KEY_our 137 -#define KEY_pack 138 -#define KEY_package 139 -#define KEY_pipe 140 -#define KEY_pop 141 -#define KEY_pos 142 -#define KEY_print 143 -#define KEY_printf 144 -#define KEY_prototype 145 -#define KEY_push 146 -#define KEY_q 147 -#define KEY_qq 148 -#define KEY_qr 149 -#define KEY_quotemeta 150 -#define KEY_qw 151 -#define KEY_qx 152 -#define KEY_rand 153 -#define KEY_read 154 -#define KEY_readdir 155 -#define KEY_readline 156 -#define KEY_readlink 157 -#define KEY_readpipe 158 -#define KEY_recv 159 -#define KEY_redo 160 -#define KEY_ref 161 -#define KEY_rename 162 -#define KEY_require 163 -#define KEY_reset 164 -#define KEY_return 165 -#define KEY_reverse 166 -#define KEY_rewinddir 167 -#define KEY_rindex 168 -#define KEY_rmdir 169 -#define KEY_s 170 -#define KEY_scalar 171 -#define KEY_seek 172 -#define KEY_seekdir 173 -#define KEY_select 174 -#define KEY_semctl 175 -#define KEY_semget 176 -#define KEY_semop 177 -#define KEY_send 178 -#define KEY_setgrent 179 -#define KEY_sethostent 180 -#define KEY_setnetent 181 -#define KEY_setpgrp 182 -#define KEY_setpriority 183 -#define KEY_setprotoent 184 -#define KEY_setpwent 185 -#define KEY_setservent 186 -#define KEY_setsockopt 187 -#define KEY_shift 188 -#define KEY_shmctl 189 -#define KEY_shmget 190 -#define KEY_shmread 191 -#define KEY_shmwrite 192 -#define KEY_shutdown 193 -#define KEY_sin 194 -#define KEY_sleep 195 -#define KEY_socket 196 -#define KEY_socketpair 197 -#define KEY_sort 198 -#define KEY_splice 199 -#define KEY_split 200 -#define KEY_sprintf 201 -#define KEY_sqrt 202 -#define KEY_srand 203 -#define KEY_stat 204 -#define KEY_study 205 -#define KEY_sub 206 -#define KEY_substr 207 -#define KEY_symlink 208 -#define KEY_syscall 209 -#define KEY_sysopen 210 -#define KEY_sysread 211 -#define KEY_sysseek 212 -#define KEY_system 213 -#define KEY_syswrite 214 -#define KEY_tell 215 -#define KEY_telldir 216 -#define KEY_tie 217 -#define KEY_tied 218 -#define KEY_time 219 -#define KEY_times 220 -#define KEY_tr 221 -#define KEY_truncate 222 -#define KEY_uc 223 -#define KEY_ucfirst 224 -#define KEY_umask 225 -#define KEY_undef 226 -#define KEY_unless 227 -#define KEY_unlink 228 -#define KEY_unpack 229 -#define KEY_unshift 230 -#define KEY_untie 231 -#define KEY_until 232 -#define KEY_use 233 -#define KEY_utime 234 -#define KEY_values 235 -#define KEY_vec 236 -#define KEY_wait 237 -#define KEY_waitpid 238 -#define KEY_wantarray 239 -#define KEY_warn 240 -#define KEY_while 241 -#define KEY_write 242 -#define KEY_x 243 -#define KEY_xor 244 -#define KEY_y 245 +#define KEY_err 54 +#define KEY_eval 55 +#define KEY_exec 56 +#define KEY_exists 57 +#define KEY_exit 58 +#define KEY_exp 59 +#define KEY_fcntl 60 +#define KEY_fileno 61 +#define KEY_flock 62 +#define KEY_for 63 +#define KEY_foreach 64 +#define KEY_fork 65 +#define KEY_format 66 +#define KEY_formline 67 +#define KEY_ge 68 +#define KEY_getc 69 +#define KEY_getgrent 70 +#define KEY_getgrgid 71 +#define KEY_getgrnam 72 +#define KEY_gethostbyaddr 73 +#define KEY_gethostbyname 74 +#define KEY_gethostent 75 +#define KEY_getlogin 76 +#define KEY_getnetbyaddr 77 +#define KEY_getnetbyname 78 +#define KEY_getnetent 79 +#define KEY_getpeername 80 +#define KEY_getpgrp 81 +#define KEY_getppid 82 +#define KEY_getpriority 83 +#define KEY_getprotobyname 84 +#define KEY_getprotobynumber 85 +#define KEY_getprotoent 86 +#define KEY_getpwent 87 +#define KEY_getpwnam 88 +#define KEY_getpwuid 89 +#define KEY_getservbyname 90 +#define KEY_getservbyport 91 +#define KEY_getservent 92 +#define KEY_getsockname 93 +#define KEY_getsockopt 94 +#define KEY_glob 95 +#define KEY_gmtime 96 +#define KEY_goto 97 +#define KEY_grep 98 +#define KEY_gt 99 +#define KEY_hex 100 +#define KEY_if 101 +#define KEY_index 102 +#define KEY_int 103 +#define KEY_ioctl 104 +#define KEY_join 105 +#define KEY_keys 106 +#define KEY_kill 107 +#define KEY_last 108 +#define KEY_lc 109 +#define KEY_lcfirst 110 +#define KEY_le 111 +#define KEY_length 112 +#define KEY_link 113 +#define KEY_listen 114 +#define KEY_local 115 +#define KEY_localtime 116 +#define KEY_lock 117 +#define KEY_log 118 +#define KEY_lstat 119 +#define KEY_lt 120 +#define KEY_m 121 +#define KEY_map 122 +#define KEY_mkdir 123 +#define KEY_msgctl 124 +#define KEY_msgget 125 +#define KEY_msgrcv 126 +#define KEY_msgsnd 127 +#define KEY_my 128 +#define KEY_ne 129 +#define KEY_next 130 +#define KEY_no 131 +#define KEY_not 132 +#define KEY_oct 133 +#define KEY_open 134 +#define KEY_opendir 135 +#define KEY_or 136 +#define KEY_ord 137 +#define KEY_our 138 +#define KEY_pack 139 +#define KEY_package 140 +#define KEY_pipe 141 +#define KEY_pop 142 +#define KEY_pos 143 +#define KEY_print 144 +#define KEY_printf 145 +#define KEY_prototype 146 +#define KEY_push 147 +#define KEY_q 148 +#define KEY_qq 149 +#define KEY_qr 150 +#define KEY_quotemeta 151 +#define KEY_qw 152 +#define KEY_qx 153 +#define KEY_rand 154 +#define KEY_read 155 +#define KEY_readdir 156 +#define KEY_readline 157 +#define KEY_readlink 158 +#define KEY_readpipe 159 +#define KEY_recv 160 +#define KEY_redo 161 +#define KEY_ref 162 +#define KEY_rename 163 +#define KEY_require 164 +#define KEY_reset 165 +#define KEY_return 166 +#define KEY_reverse 167 +#define KEY_rewinddir 168 +#define KEY_rindex 169 +#define KEY_rmdir 170 +#define KEY_s 171 +#define KEY_scalar 172 +#define KEY_seek 173 +#define KEY_seekdir 174 +#define KEY_select 175 +#define KEY_semctl 176 +#define KEY_semget 177 +#define KEY_semop 178 +#define KEY_send 179 +#define KEY_setgrent 180 +#define KEY_sethostent 181 +#define KEY_setnetent 182 +#define KEY_setpgrp 183 +#define KEY_setpriority 184 +#define KEY_setprotoent 185 +#define KEY_setpwent 186 +#define KEY_setservent 187 +#define KEY_setsockopt 188 +#define KEY_shift 189 +#define KEY_shmctl 190 +#define KEY_shmget 191 +#define KEY_shmread 192 +#define KEY_shmwrite 193 +#define KEY_shutdown 194 +#define KEY_sin 195 +#define KEY_sleep 196 +#define KEY_socket 197 +#define KEY_socketpair 198 +#define KEY_sort 199 +#define KEY_splice 200 +#define KEY_split 201 +#define KEY_sprintf 202 +#define KEY_sqrt 203 +#define KEY_srand 204 +#define KEY_stat 205 +#define KEY_study 206 +#define KEY_sub 207 +#define KEY_substr 208 +#define KEY_symlink 209 +#define KEY_syscall 210 +#define KEY_sysopen 211 +#define KEY_sysread 212 +#define KEY_sysseek 213 +#define KEY_system 214 +#define KEY_syswrite 215 +#define KEY_tell 216 +#define KEY_telldir 217 +#define KEY_tie 218 +#define KEY_tied 219 +#define KEY_time 220 +#define KEY_times 221 +#define KEY_tr 222 +#define KEY_truncate 223 +#define KEY_uc 224 +#define KEY_ucfirst 225 +#define KEY_umask 226 +#define KEY_undef 227 +#define KEY_unless 228 +#define KEY_unlink 229 +#define KEY_unpack 230 +#define KEY_unshift 231 +#define KEY_untie 232 +#define KEY_until 233 +#define KEY_use 234 +#define KEY_utime 235 +#define KEY_values 236 +#define KEY_vec 237 +#define KEY_wait 238 +#define KEY_waitpid 239 +#define KEY_wantarray 240 +#define KEY_warn 241 +#define KEY_while 242 +#define KEY_write 243 +#define KEY_x 244 +#define KEY_xor 245 +#define KEY_y 246 diff --git a/keywords.pl b/keywords.pl index 00c067c..d5903fa 100755 --- a/keywords.pl +++ b/keywords.pl @@ -13,6 +13,9 @@ print < represents a time (seconds and -microseconds), and C has two elements, each of which is of -type C. +structs are nested. Here, C represents a time (seconds and +microseconds), and C has two elements, each of which is of +type C. use Class::Struct; - struct( rusage => { - ru_utime => timeval, # seconds - ru_stime => timeval, # microseconds + struct( Rusage => { + ru_utime => 'Timeval', # seconds + ru_stime => 'Timeval', # microseconds }); - struct( timeval => [ + struct( Timeval => [ tv_secs => '$', tv_usecs => '$', ]); # create an object: - my $t = new rusage; + my $t = Rusage->new(ru_utime=>Timeval->new(), ru_stime=>Timeval->new()); - # $t->ru_utime and $t->ru_stime are objects of type timeval. + # $t->ru_utime and $t->ru_stime are objects of type Timeval. # set $t->ru_utime to 100.0 sec and $t->ru_stime to 5.0 sec. $t->ru_utime->tv_secs(100); $t->ru_utime->tv_usecs(0); diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm index bb76013..c5bb19e 100644 --- a/lib/ExtUtils/MM_Unix.pm +++ b/lib/ExtUtils/MM_Unix.pm @@ -1426,7 +1426,7 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc) my($ispod)=0; if (open(FH,"<$name")) { while () { - if (/^=head1\s+\w+/) { + if (/^=\w/) { $ispod=1; last; } @@ -1455,7 +1455,7 @@ sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc) my($ispod)=0; if (open(FH,"<$name")) { while () { - if (/^=head1\s+\w+/) { + if (/^=\w/) { $ispod=1; last; } diff --git a/lib/Pod/Usage.pm b/lib/Pod/Usage.pm index 771cff4..9898a97 100644 --- a/lib/Pod/Usage.pm +++ b/lib/Pod/Usage.pm @@ -506,7 +506,7 @@ sub pod2usage { and $opts{"-output"} == \*STDOUT ) { ## spit out the entire PODs. Might as well invoke perldoc - my $progpath = File::Spec->catfile($Config{bin}, "perldoc"); + my $progpath = File::Spec->catfile($Config{scriptdir}, "perldoc"); system($progpath, $opts{"-input"}); } else { diff --git a/lib/Unicode/Collate.pm b/lib/Unicode/Collate.pm index 51c290e..fa0ef22 100644 --- a/lib/Unicode/Collate.pm +++ b/lib/Unicode/Collate.pm @@ -14,7 +14,7 @@ use File::Spec; require Exporter; -our $VERSION = '0.12'; +our $VERSION = '0.20'; our $PACKAGE = __PACKAGE__; our @ISA = qw(Exporter); @@ -36,7 +36,6 @@ unless ($@) { else { # XXX, Perl 5.6.1 my($f, $fh); foreach my $d (@INC) { - use File::Spec; $f = File::Spec->catfile($d, "unicode", "Unicode.301"); if (open($fh, $f)) { $UNICODE_VERSION = '3.0.1'; @@ -48,53 +47,100 @@ else { # XXX, Perl 5.6.1 our $getCombinClass; # coderef for combining class from Unicode::Normalize -use constant Min2 => 0x20; # minimum weight at level 2 -use constant Min3 => 0x02; # minimum weight at level 3 -use constant UNDEFINED => 0xFF80; # special value for undefined CE's +use constant Min2 => 0x20; # minimum weight at level 2 +use constant Min3 => 0x02; # minimum weight at level 3 -our $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ]; - -sub UCA_Version { "8.0" } +# format for pack +use constant VCE_FORMAT => 'Cn4'; # for variable + CE with 4 levels -sub Base_Unicode_Version { $UNICODE_VERSION || 'unknown' } +# values of variable +use constant NON_VAR => 0; # Non-Variable character +use constant VAR => 1; # Variable character -## -## constructor -## -sub new -{ - my $class = shift; - my $self = bless { @_ }, $class; +our $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ]; - # alternate lowercased - $self->{alternate} = - ! exists $self->{alternate} ? 'shifted' : lc($self->{alternate}); +sub UCA_Version { "9" } - croak "$PACKAGE unknown alternate tag name: $self->{alternate}" - unless $self->{alternate} eq 'blanked' - || $self->{alternate} eq 'non-ignorable' - || $self->{alternate} eq 'shifted' - || $self->{alternate} eq 'shift-trimmed'; +sub Base_Unicode_Version { $UNICODE_VERSION || 'unknown' } - # collation level - $self->{level} ||= 4; +my (%AlternateOK); +@AlternateOK{ qw/ + blanked non-ignorable shifted shift-trimmed + / } = (); + +our @ChangeOK = qw/ + alternate backwards level normalization rearrange + katakana_before_hiragana upper_before_lower + overrideHangul overrideCJK preprocess UCA_Version + /; + +our @ChangeNG = qw/ + entry entries table ignored combining maxlength + ignoreChar ignoreName undefChar undefName + versionTable alternateTable backwardsTable forwardsTable rearrangeTable + derivCode normCode rearrangeHash isShift L3ignorable + /; + +my (%ChangeOK, %ChangeNG); +@ChangeOK{ @ChangeOK } = (); +@ChangeNG{ @ChangeNG } = (); + +sub change { + my $self = shift; + my %hash = @_; + my %old; + foreach my $k (keys %hash) { + if (exists $ChangeOK{$k}) { + $old{$k} = $self->{$k}; + $self->{$k} = $hash{$k}; + } + elsif (exists $ChangeNG{$k}) { + croak "change of $k via change() is not allowed!"; + } + # else => ignored + } + $self->checkCollator; + return wantarray ? %old : $self; +} +sub checkCollator { + my $self = shift; croak "Illegal level lower than 1 (passed $self->{level})." if $self->{level} < 1; croak "A level higher than 4 (passed $self->{level}) is not supported." if 4 < $self->{level}; - # overrideHangul and -CJK - # If true: CODEREF used; '': default; undef: derived elements - $self->{overrideHangul} = '' - if ! exists $self->{overrideHangul}; - $self->{overrideCJK} = '' - if ! exists $self->{overrideCJK}; + $self->{derivCode} = + $self->{UCA_Version} == -1 ? \&broken_derivCE : + $self->{UCA_Version} == 8 ? \&derivCE_8 : + $self->{UCA_Version} == 9 ? \&derivCE_9 : + croak "Illegal UCA version (passed $self->{UCA_Version})."; - # normalization form - $self->{normalization} = 'D' - if ! exists $self->{normalization}; - $self->{UNF} = undef; + $self->{alternate} = lc($self->{alternate}); + croak "$PACKAGE unknown alternate tag name: $self->{alternate}" + unless exists $AlternateOK{ $self->{alternate} }; + + $self->{isShift} = $self->{alternate} eq 'shifted' || + $self->{alternate} eq 'shift-trimmed'; + + $self->{backwards} = [] + if ! defined $self->{backwards}; + $self->{backwards} = [ $self->{backwards} ] + if ! ref $self->{backwards}; + + $self->{rearrange} = [] + if ! defined $self->{rearrange}; + croak "$PACKAGE: A list for rearrangement must be store in an ARRAYREF" + if ! ref $self->{rearrange}; + + # keys of $self->{rearrangeHash} are $self->{rearrange}. + $self->{rearrangeHash} = undef; + + if (@{ $self->{rearrange} }) { + @{ $self->{rearrangeHash} }{ @{ $self->{rearrange} } } = (); + } + + $self->{normCode} = undef; if (defined $self->{normalization}) { eval { require Unicode::Normalize }; @@ -105,7 +151,7 @@ sub new $getCombinClass = \&Unicode::Normalize::getCombinClass if ! $getCombinClass; - $self->{UNF} = + $self->{normCode} = $self->{normalization} =~ /^(?:NF)?C$/ ? \&NFC : $self->{normalization} =~ /^(?:NF)?D$/ ? \&NFD : $self->{normalization} =~ /^(?:NF)?KC$/ ? \&NFKC : @@ -113,37 +159,39 @@ sub new croak "$PACKAGE unknown normalization form name: " . $self->{normalization}; } + return; +} + +sub new +{ + my $class = shift; + my $self = bless { @_ }, $class; - # Open a table file. # If undef is passed explicitly, no file is read. - $self->{table} = $KeyFile - if ! exists $self->{table}; - $self->read_table - if defined $self->{table}; + $self->{table} = $KeyFile if ! exists $self->{table}; + $self->read_table if defined $self->{table}; if ($self->{entry}) { $self->parseEntry($_) foreach split /\n/, $self->{entry}; } - # backwards - $self->{backwards} ||= [ ]; - $self->{backwards} = [ $self->{backwards} ] - if ! ref $self->{backwards}; + $self->{level} ||= 4; + $self->{UCA_Version} ||= UCA_Version(); - # rearrange - $self->{rearrange} = $DefaultRearrange + $self->{overrideHangul} = '' + if ! exists $self->{overrideHangul}; + $self->{overrideCJK} = '' + if ! exists $self->{overrideCJK}; + $self->{normalization} = 'D' + if ! exists $self->{normalization}; + $self->{alternate} = $self->{alternateTable} || 'shifted' + if ! exists $self->{alternate}; + $self->{rearrange} = $self->{rearrangeTable} || $DefaultRearrange if ! exists $self->{rearrange}; - $self->{rearrange} = [] - if ! defined $self->{rearrange}; - croak "$PACKAGE: A list for rearrangement must be store in an ARRAYREF" - if ! ref $self->{rearrange}; + $self->{backwards} = $self->{backwardsTable} + if ! exists $self->{backwards}; - # keys of $self->{rearrangeHash} are $self->{rearrange}. - $self->{rearrangeHash} = undef; - - if (@{ $self->{rearrange} }) { - @{ $self->{rearrangeHash} }{ @{ $self->{rearrange} } } = (); - } + $self->checkCollator; return $self; } @@ -159,17 +207,20 @@ sub read_table { while (<$fk>) { next if /^\s*#/; if (/^\s*\@/) { - if (/^\@version\s*(\S*)/) { - $self->{version} ||= $1; + if (/^\s*\@version\s*(\S*)/) { + $self->{versionTable} ||= $1; + } + elsif (/^\s*\@alternate\s+(\S*)/) { + $self->{alternateTable} ||= $1; } - elsif (/^\@alternate\s+(.*)/) { - $self->{alternate} ||= $1; + elsif (/^\s*\@backwards\s+(\S*)/) { + push @{ $self->{backwardsTable} }, $1; } - elsif (/^\@backwards\s+(.*)/) { - push @{ $self->{backwards} }, $1; + elsif (/^\s*\@forwards\s+(\S*)/) { # parhaps no use + push @{ $self->{forwardsTable} }, $1; } - elsif (/^\@rearrange\s+(.*)/) { - push @{ $self->{rearrange} }, _getHexArray($1); + elsif (/^\s*\@rearrange\s+(.*)/) { # (\S*) is NG + push @{ $self->{rearrangeTable} }, _getHexArray($1); } next; } @@ -201,6 +252,8 @@ sub parseEntry if ! $k; my @e = _getHexArray($e); + return if !@e; + $ele = pack('U*', @e); return if defined $self->{undefChar} && $ele =~ /$self->{undefChar}/; @@ -212,27 +265,33 @@ sub parseEntry } else { my $combining = 1; # primary = 0, secondary != 0; + my $level3ingore; foreach my $arr ($k =~ /\[([^\[\]]+)\]/g) { # SPACEs allowed my $var = $arr =~ /\*/; # exactly /^\*/ but be lenient. - push @key, $self->altCE($var, _getHexArray($arr)); - $combining = 0 unless $key[-1][0] == 0 && $key[-1][1] != 0; + my @arr = _getHexArray($arr); + push @key, pack(VCE_FORMAT, $var, @arr); + $combining = 0 unless $arr[0] == 0 && $arr[1] != 0; + $level3ingore = 1 if $arr[0] == 0 && $arr[1] == 0 && $arr[2] == 0; } $self->{entries}{$ele} = \@key; - $self->{combining}{$ele} = 1 if $combining; + + $self->{combining}{$ele} = 1 + if $combining; + + $self->{L3ignorable}{$e[0]} = 1 + if @e == 1 && $level3ingore; } $self->{maxlength}{ord $ele} = scalar @e if @e > 1; } - ## ## arrayref CE = altCE(bool variable?, list[num] weights) ## sub altCE { my $self = shift; - my $var = shift; - my @c = @_; + my($var, @c) = unpack(VCE_FORMAT, shift); $self->{alternate} eq 'blanked' ? $var ? [0,0,0,$c[3]] : \@c : @@ -245,15 +304,18 @@ sub altCE croak "$PACKAGE unknown alternate name: $self->{alternate}"; } -## -## string hex_sortkey = splitCE(string arg) -## sub viewSortKey { my $self = shift; + my $ver = $self->{UCA_Version}; + my $key = $self->getSortKey(@_); my $view = join " ", map sprintf("%04X", $_), unpack 'n*', $key; - $view =~ s/ ?0000 ?/|/g; + if ($ver <= 8) { + $view =~ s/ ?0000 ?/|/g; + } else { + $view =~ s/\b0000\b/|/g; + } return "[$view]"; } @@ -265,10 +327,12 @@ sub splitCE { my $self = shift; my $code = $self->{preprocess}; - my $norm = $self->{UNF}; + my $norm = $self->{normCode}; my $ent = $self->{entries}; my $max = $self->{maxlength}; my $reH = $self->{rearrangeHash}; + my $L3i = $self->{L3ignorable}; + my $ver9 = $self->{UCA_Version} > 8; my $str = ref $code ? &$code(shift) : shift; $str = &$norm($str) if ref $norm; @@ -286,6 +350,10 @@ sub splitCE } } + if ($ver9) { + @src = grep ! $L3i->{$_}, @src; + } + for (my $i = 0; $i < @src; $i++) { my $ch; my $u = $src[$i]; @@ -293,7 +361,10 @@ sub splitCE # non-characters next unless defined $u; next if $u < 0 || 0x10FFFF < $u # out of range - || (0xD800 <= $u && $u <= 0xDFFF); # unpaired surrogates + || (0xD800 <= $u && $u <= 0xDFFF) # unpaired surrogates + || (0xFDD0 <= $u && $u <= 0xFDEF) # non-character + ; + my $four = $u & 0xFFFF; next if $four == 0xFFFE || $four == 0xFFFF; @@ -335,33 +406,38 @@ sub getWt my $ign = $self->{ignored}; my $cjk = $self->{overrideCJK}; my $hang = $self->{overrideHangul}; + my $der = $self->{derivCode}; return if !defined $ch || $ign->{$ch}; # ignored - return @{ $ent->{$ch} } if $ent->{$ch}; + return map($self->altCE($_), @{ $ent->{$ch} }) + if $ent->{$ch}; + my $u = unpack('U', $ch); if (0xAC00 <= $u && $u <= 0xD7A3) { # is_Hangul - return $hang - ? &$hang($u) - : defined $hang - ? map({ - my $v = $_; - my $ar = $ent->{pack('U', $v)}; - $ar ? @$ar : map($self->altCE(0,@$_), _derivCE($v)); - } _decompHangul($u)) - : map($self->altCE(0,@$_), _derivCE($u)); + return map $self->altCE($_), + $hang + ? map(pack(VCE_FORMAT, NON_VAR, @$_), &$hang($u)) + : defined $hang + ? map({ + my $v = $_; + my $vCE = $ent->{pack('U', $v)}; + $vCE ? @$vCE : $der->($v); + } _decompHangul($u)) + : $der->($u); } elsif (0x3400 <= $u && $u <= 0x4DB5 || 0x4E00 <= $u && $u <= 0x9FA5 || - 0x20000 <= $u && $u <= 0x2A6D6) { # is_CJK - return $cjk - ? &$cjk($u) - : defined $cjk && $u <= 0xFFFF - ? $self->altCE(0, ($u, 0x20, 0x02, $u)) - : map($self->altCE(0,@$_), _derivCE($u)); + 0x20000 <= $u && $u <= 0x2A6D6) { # CJK Ideograph + return map $self->altCE($_), + $cjk + ? map(pack(VCE_FORMAT, NON_VAR, @$_), &$cjk($u)) + : defined $cjk && $self->{UCA_Version} <= 8 && $u < 0x10000 + ? pack(VCE_FORMAT, NON_VAR, $u, 0x20, 0x02, $u) + : $der->($u); } else { - return map($self->altCE(0,@$_), _derivCE($u)); + return map $self->altCE($_), $der->($u); } } @@ -398,8 +474,8 @@ sub index while ($i + 1 < @$str && (! defined $str->[$i+1] || $comb->{ $str->[$i+1] }) ) { $i++; - $go_ahead += length $str->[$i]; next if ! defined $str->[$i]; + $go_ahead += length $str->[$i]; push @tmp, grep _ignorableAtLevel($_,$lev), $self->getWt($str->[$i]); } @@ -457,9 +533,27 @@ sub getSortKey my $self = shift; my $lev = $self->{level}; my $rCE = $self->splitCE(shift); # get an arrayref + my $ver9 = $self->{UCA_Version} > 8; + my $sht = $self->{isShift}; # weight arrays - my @buf = grep defined(), map $self->getWt($_), @$rCE; + my (@buf, $last_is_variable); + + foreach my $ce (@$rCE) { + my @t = $self->getWt($ce); + if ($sht && $ver9) { + if (@t == 1 && $t[0][0] == 0) { + if ($t[0][1] == 0 && $t[0][2] == 0) { + $last_is_variable = 1; + } else { + next if $last_is_variable; + } + } else { + $last_is_variable = 0; + } + } + push @buf, @t; + } # make sort key my @ret = ([],[],[],[]); @@ -514,16 +608,38 @@ sub sort { map [ $obj->getSortKey($_), $_ ], @_; } -## -## list[arrayrefs] CE = _derivCE(int codepoint) -## -sub _derivCE { + +sub derivCE_9 { + my $u = shift; + my $base = + (0x4E00 <= $u && $u <= 0x9FA5) # CJK + ? 0xFB40 : + (0x3400 <= $u && $u <= 0x4DB5 || 0x20000 <= $u && $u <= 0x2A6D6) + ? 0xFB80 : 0xFBC0; + + my $aaaa = $base + ($u >> 15); + my $bbbb = ($u & 0x7FFF) | 0x8000; + return + pack(VCE_FORMAT, NON_VAR, $aaaa, Min2, Min3, $u), + pack(VCE_FORMAT, NON_VAR, $bbbb, 0, 0, $u); +} + +sub derivCE_8 { + my $code = shift; + my $aaaa = 0xFF80 + ($code >> 15); + my $bbbb = ($code & 0x7FFF) | 0x8000; + return + pack(VCE_FORMAT, NON_VAR, $aaaa, 2, 1, $code), + pack(VCE_FORMAT, NON_VAR, $bbbb, 0, 0, $code); +} + +sub broken_derivCE { # NG my $code = shift; - my $a = UNDEFINED + ($code >> 15); # ok - my $b = ($code & 0x7FFF) | 0x8000; # ok -# my $a = 0xFFC2 + ($code >> 15); # ng -# my $b = $code & 0x7FFF | 0x1000; # ng - $b ? ([$a,2,1,$code],[$b,0,0,$code]) : [$a,2,1,$code]; + my $aaaa = 0xFFC2 + ($code >> 15); + my $bbbb = $code & 0x7FFF | 0x1000; + return + pack(VCE_FORMAT, NON_VAR, $aaaa, 2, 1, $code), + pack(VCE_FORMAT, NON_VAR, $bbbb, 0, 0, $code); } ## @@ -575,6 +691,7 @@ Unicode::Collate - Unicode Collation Algorithm The C method returns a collator object. $Collator = Unicode::Collate->new( + UCA_Version => $UCA_Version, alternate => $alternate, backwards => $levelNumber, # or \@levelNumbers entry => $element, @@ -597,6 +714,17 @@ The C method returns a collator object. =over 4 +=item UCA_Version + +If the version number of the older UCA is given, +the older behavior of that version is emulated on collating. +If omitted, the return value of C is used. + +The supported version: 8 or 9. + +B + =item alternate -- see 3.2.2 Alternate Weighting, UTR #10. @@ -772,6 +900,9 @@ If you want to disallow any rearrangement, pass C or C<[]> (a reference to an empty list) as the value for this key. +B + =item table -- see 3.2 Default Unicode Collation Element Table, UTR #10. @@ -887,17 +1018,15 @@ and get the result of the comparison of the strings using UCA. =item C<$sortKeyForm = $Collator-EviewSortKey($string)> -Returns a string formalized to display a sort key. -Weights are enclosed with C<'['> and C<']'> -and level boundaries are denoted by C<'|'>. - use Unicode::Collate; my $c = Unicode::Collate->new(); print $c->viewSortKey("Perl"),"\n"; - # output: - # [09B3 08B1 09CB 094F|0020 0020 0020 0020|0008 0002 0002 0002|FFFF FFFF FFFF FFFF] - # Level 1 Level 2 Level 3 Level 4 + # output: + # [0B67 0A65 0B7F 0B03 | 0020 0020 0020 0020 | 0008 0002 0002 0002 | FFFF FFFF FFFF FFFF] + # Level 1 Level 2 Level 3 Level 4 + + (If C is 8, the output is slightly different.) =item C<$position = $Collator-Eindex($string, $substring)> @@ -943,6 +1072,34 @@ is primary equal to C<"m>E<252>C. =over 4 +=item C<%old_tailoring = $Collator-Echange(%new_tailoring)> + +Change the value of specified keys and returns the changed part. + + $Collator = Unicode::Collate->new(level => 4); + + $Collator->eq("perl", "PERL"); # false + + %old = $Collator->change(level => 2); # returns (level => 4). + + $Collator->eq("perl", "PERL"); # true + + $Collator->change(%old); # returns (level => 2). + + $Collator->eq("perl", "PERL"); # false + +Not all C<(key,value)>s are allowed to be changed. +See also C<@Unicode::Collate::ChangeOK> and C<@Unicode::Collate::ChangeNG>. + +In the scalar context, returns the modified collator +(but it is B a clone from the original). + + $Collator->change(level => 2)->eq("perl", "PERL"); # true + + $Collator->eq("perl", "PERL"); # true; now max level is 2nd. + + $Collator->change(level => 4)->eq("perl", "PERL"); # false + =item UCA_Version Returns the version number of Unicode Technical Standard 10 @@ -981,6 +1138,19 @@ assign C undef> explicitly. -- see 6.5 Avoiding Normalization, UTR #10. +=head2 Conformance Test + +The Conformance Test for the UCA is provided +in L +and L + +For F, +a collator via Cnew( )> should be used; +for F, a collator via +Cnew(alternate =E "non-ignorable", level =E 3)>. + +B + =head2 BUGS C is an experimental method and @@ -1006,19 +1176,24 @@ SADAHIRO Tomoyuki, ESADAHIRO@cpan.orgE =over 4 -=item http://www.unicode.org/unicode/reports/tr10/ +=item http://www.unicode.org/reports/tr10/ Unicode Collation Algorithm - UTR #10 -=item http://www.unicode.org/unicode/reports/tr10/allkeys.txt +=item http://www.unicode.org/reports/tr10/allkeys.txt The Default Unicode Collation Element Table -=item http://www.unicode.org/unicode/reports/tr15/ +=item http://www.unicode.org/reports/tr10/CollationTest.html +http://www.unicode.org/reports/tr10/CollationTest.zip + +The latest versions of the conformance test for the UCA + +=item http://www.unicode.org/reports/tr15/ Unicode Normalization Forms - UAX #15 -=item http://www.unicode.org/unicode/reports/tr18 +=item http://www.unicode.org/reports/tr18 Unicode Regular Expression Guidelines - UTR #18 diff --git a/lib/Unicode/Collate/Changes b/lib/Unicode/Collate/Changes index 997117c..66676b2 100644 --- a/lib/Unicode/Collate/Changes +++ b/lib/Unicode/Collate/Changes @@ -1,5 +1,13 @@ Revision history for Perl extension Unicode::Collate. +0.20 Fri Jul 26 02:15:25 2002 + - now UCA Version 9. + - U+FDD0..U+FDEF are new non-characters. + - fix: whitespace characters before @backwards etc. in a table file. + - now values for 'alternate', 'backwards', etc., + which are explicitly specified via new(), + are preferred to those specified in a table file. + 0.12 Sun May 05 09:43:10 2002 - add new methods, ->UCA_Version and ->Base_Unicode_Version. - test fix: removed the needless requirement of Unicode::Normalize. diff --git a/lib/Unicode/Collate/README b/lib/Unicode/Collate/README index 4d4f12c..2867b47 100644 --- a/lib/Unicode/Collate/README +++ b/lib/Unicode/Collate/README @@ -1,4 +1,4 @@ -Unicode/Collate version 0.12 +Unicode/Collate version 0.20 =============================== Unicode::Collate - Unicode Collation Algorithm @@ -30,7 +30,7 @@ SYNOPSIS INSTALLATION -Perl 5.006 or later +Perl 5.6.1 or better To install this module type the following: @@ -41,7 +41,7 @@ To install this module type the following: DEPENDENCIES - It's better if you have Unicode::Normalize (v 0.10 or later) + The conformant collation requires Unicode::Normalize (v 0.10 or later) although Unicode::Collate can be used without Unicode::Normalize. COPYRIGHT AND LICENCE diff --git a/lib/Unicode/Collate/t/test.t b/lib/Unicode/Collate/t/test.t index f5a7012..03aed85 100644 --- a/lib/Unicode/Collate/t/test.t +++ b/lib/Unicode/Collate/t/test.t @@ -1,7 +1,3 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -######################### BEGIN { if (ord("A") == 193) { @@ -10,14 +6,22 @@ BEGIN { } } +BEGIN { + if ($ENV{PERL_CORE}) { + chdir('t') if -d 't'; + @INC = qw(../lib); + } +} + use Test; -BEGIN { plan tests => 160 }; +BEGIN { plan tests => 183}; use Unicode::Collate; -ok(1); # If we made it this far, we're ok. ######################### -my $UCA_Version = "8.0"; +ok(1); # If we made it this far, we're ok. + +my $UCA_Version = "9"; ok(Unicode::Collate::UCA_Version, $UCA_Version); ok(Unicode::Collate->UCA_Version, $UCA_Version); @@ -41,14 +45,30 @@ ok( ), ); +ok($Collator->cmp("", ""), 0); +ok($Collator->eq("", "")); +ok($Collator->cmp("", "perl"), -1); + +############## + my $A_acute = pack('U', 0x00C1); +my $a_acute = pack('U', 0x00E1); my $acute = pack('U', 0x0301); ok($Collator->cmp("A$acute", $A_acute), -1); -ok($Collator->cmp("", ""), 0); -ok(! $Collator->ne("", "") ); -ok( $Collator->eq("", "") ); -ok($Collator->cmp("", "perl"), -1); +ok($Collator->cmp($a_acute, $A_acute), -1); + +my %old_level = $Collator->change(level => 1); +ok($Collator->eq("A$acute", $A_acute)); +ok($Collator->eq("A", $A_acute)); + +ok($Collator->change(level => 2)->eq($a_acute, $A_acute)); +ok($Collator->lt("A", $A_acute)); + +ok($Collator->change(%old_level)->lt("A", $A_acute)); +ok($Collator->lt("A", $A_acute)); +ok($Collator->lt("A", $a_acute)); +ok($Collator->lt($a_acute, $A_acute)); ############## @@ -76,6 +96,16 @@ ENTRIES ok($NFD->lt("\x{430}\x{3099}B", "\x{430}\x{308}\x{3099}A")); ok($NFD->eq("\x{0430}\x{3099}\x{309A}\x{0308}", "\x{0430}\x{309A}\x{3099}\x{0308}") ); + + my %old_norm = $NFD->change(normalization => undef); + ok($NFD->lt("A$acute", $A_acute)); + ok($NFD->cmp("A$acute", $A_acute), $Collator->cmp("A$acute", $A_acute)); + + $NFD->change(%old_norm); + ok($NFD->eq("A$acute", $A_acute)); + ok($NFD->change(normalization => undef)->lt("A$acute", $A_acute)); + ok($NFD->change(level => 1)->eq("A$acute", $A_acute)); + } else { ok(1); @@ -83,6 +113,11 @@ else { ok(1); ok(1); ok(1); + ok(1); + ok(1); + ok(1); + ok(1); + ok(1); } ############## @@ -120,9 +155,9 @@ ok($trad->eq($katakana, $hiragana)); ############## -my $old_level = $Collator->{level}; +$Collator->change(level => 2); -$Collator->{level} = 2; +ok($Collator->{level}, 2); ok( $Collator->cmp("ABC","abc"), 0); ok( $Collator->eq("ABC","abc") ); @@ -139,9 +174,9 @@ ok( $Collator->lt("a\x{AC00}b", "a\x{AE00}b") ); ok( $Collator->gt("a\x{D7A3}b", "a\x{C544}b") ); ok( $Collator->lt("a\x{C544}b", "a\x{30A2}b") ); # hangul < hiragana -$Collator->{level} = $old_level; +$Collator->change(%old_level, katakana_before_hiragana => 1); -$Collator->{katakana_before_hiragana} = 1; +ok($Collator->{level}, 4); ok( $Collator->cmp("abc", "ABC"), -1); ok( $Collator->ne("abc", "ABC") ); @@ -152,7 +187,7 @@ ok( $Collator->ne($hiragana, $katakana) ); ok( $Collator->gt($hiragana, $katakana) ); ok( $Collator->ge($hiragana, $katakana) ); -$Collator->{upper_before_lower} = 1; +$Collator->change(upper_before_lower => 1); ok( $Collator->cmp("abc", "ABC"), 1); ok( $Collator->ge("abc", "ABC"), 1); @@ -161,12 +196,12 @@ ok( $Collator->cmp($hiragana, $katakana), 1); ok( $Collator->ge($hiragana, $katakana), 1); ok( $Collator->gt($hiragana, $katakana), 1); -$Collator->{katakana_before_hiragana} = 0; +$Collator->change(katakana_before_hiragana => 0); ok( $Collator->cmp("abc", "ABC"), 1); ok( $Collator->cmp($hiragana, $katakana), -1); -$Collator->{upper_before_lower} = 0; +$Collator->change(upper_before_lower => 0); ok( $Collator->cmp("abc", "ABC"), -1); ok( $Collator->le("abc", "ABC") ); @@ -219,7 +254,7 @@ ok($Collator->lt("lake","like")); ############## -$Collator->{level} = 2; +$Collator->change(level => 2); my $str; @@ -235,7 +270,7 @@ if (my($pos,$len) = $Collator->index($str, $sub)) { ok($str, $ret); -$Collator->{level} = $old_level; +$Collator->change(%old_level); $str = $orig; if (my($pos,$len) = $Collator->index($str, $sub)) { @@ -248,7 +283,7 @@ ok($str, $orig); my $match; -$Collator->{level} = 1; +$Collator->change(level => 1); $str = "Pe\x{300}rl"; $sub = "pe"; @@ -266,11 +301,11 @@ if (my($pos, $len) = $Collator->index($str, $sub)) { } ok($match, "P\x{300}e\x{300}\x{301}\x{303}"); -$Collator->{level} = $old_level; +$Collator->change(%old_level); ############## -$trad->{level} = 1; +%old_level = $trad->change(level => 1); $str = "Ich mu\x{00DF} studieren."; $sub = "m\x{00FC}ss"; @@ -280,7 +315,7 @@ if (my($pos, $len) = $trad->index($str, $sub)) { } ok($match, "mu\x{00DF}"); -$trad->{level} = $old_level; +$trad->change(%old_level); $str = "Ich mu\x{00DF} studieren."; $sub = "m\x{00FC}ss"; @@ -370,21 +405,41 @@ ok($few_entries->eq("\x{AC00}", "\x{1100}\x{1161}")); ############## -my $all_undef = Unicode::Collate->new( +my $all_undef_8 = Unicode::Collate->new( table => undef, normalization => undef, overrideCJK => undef, overrideHangul => undef, + UCA_Version => 8, ); # All in the Unicode code point order. # No hangul decomposition. -ok($all_undef->lt("\x{3042}", "\x{4E00}")); -ok($all_undef->lt("\x{4DFF}", "\x{4E00}")); -ok($all_undef->lt("\x{4E00}", "\x{AC00}")); -ok($all_undef->gt("\x{AC00}", "\x{1100}\x{1161}")); -ok($all_undef->gt("\x{AC00}", "\x{ABFF}")); +ok($all_undef_8->lt("\x{3402}", "\x{4E00}")); +ok($all_undef_8->lt("\x{4DFF}", "\x{4E00}")); +ok($all_undef_8->lt("\x{4E00}", "\x{AC00}")); +ok($all_undef_8->gt("\x{AC00}", "\x{1100}\x{1161}")); +ok($all_undef_8->gt("\x{AC00}", "\x{ABFF}")); + +############## + +my $all_undef_9 = Unicode::Collate->new( + table => undef, + normalization => undef, + overrideCJK => undef, + overrideHangul => undef, + UCA_Version => 9, +); + +# CJK Ideo. < CJK ext A/B < Others. +# No hangul decomposition. + +ok($all_undef_9->lt("\x{4E00}", "\x{3402}")); +ok($all_undef_9->lt("\x{3402}", "\x{20000}")); +ok($all_undef_9->lt("\x{20000}", "\x{AC00}")); +ok($all_undef_9->gt("\x{AC00}", "\x{1100}\x{1161}")); +ok($all_undef_9->gt("\x{AC00}", "\x{ABFF}")); ############## @@ -426,59 +481,41 @@ ok($ignoreHangul->lt("Pe\x{AE00}rl", "Perl")); # 'r' is unassigned. ############## -my $blanked = Unicode::Collate->new( - table => 'keys.txt', - normalization => undef, - alternate => 'Blanked', -); +my %origAlter = $Collator->change(alternate => 'Blanked'); -ok($blanked->lt("death", "de luge")); -ok($blanked->lt("de luge", "de-luge")); -ok($blanked->lt("de-luge", "deluge")); -ok($blanked->lt("deluge", "de\x{2010}luge")); -ok($blanked->lt("deluge", "de Luge")); +ok($Collator->lt("death", "de luge")); +ok($Collator->lt("de luge", "de-luge")); +ok($Collator->lt("de-luge", "deluge")); +ok($Collator->lt("deluge", "de\x{2010}luge")); +ok($Collator->lt("deluge", "de Luge")); -############## - -my $nonIgn = Unicode::Collate->new( - table => 'keys.txt', - normalization => undef, - alternate => 'Non-ignorable', -); +$Collator->change(alternate => 'Non-ignorable'); -ok($nonIgn->lt("de luge", "de Luge")); -ok($nonIgn->lt("de Luge", "de-luge")); -ok($nonIgn->lt("de-Luge", "de\x{2010}luge")); -ok($nonIgn->lt("de-luge", "death")); -ok($nonIgn->lt("death", "deluge")); +ok($Collator->lt("de luge", "de Luge")); +ok($Collator->lt("de Luge", "de-luge")); +ok($Collator->lt("de-Luge", "de\x{2010}luge")); +ok($Collator->lt("de-luge", "death")); +ok($Collator->lt("death", "deluge")); -############## +$Collator->change(alternate => 'Shifted'); -my $shifted = Unicode::Collate->new( - table => 'keys.txt', - normalization => undef, - alternate => 'Shifted', -); +ok($Collator->lt("death", "de luge")); +ok($Collator->lt("de luge", "de-luge")); +ok($Collator->lt("de-luge", "deluge")); +ok($Collator->lt("deluge", "de Luge")); +ok($Collator->lt("de Luge", "deLuge")); -ok($shifted->lt("death", "de luge")); -ok($shifted->lt("de luge", "de-luge")); -ok($shifted->lt("de-luge", "deluge")); -ok($shifted->lt("deluge", "de Luge")); -ok($shifted->lt("de Luge", "deLuge")); +$Collator->change(alternate => 'Shift-Trimmed'); -############## +ok($Collator->lt("death", "deluge")); +ok($Collator->lt("deluge", "de luge")); +ok($Collator->lt("de luge", "de-luge")); +ok($Collator->lt("de-luge", "deLuge")); +ok($Collator->lt("deLuge", "de Luge")); -my $shTrim = Unicode::Collate->new( - table => 'keys.txt', - normalization => undef, - alternate => 'Shift-Trimmed', -); +$Collator->change(%origAlter); -ok($shTrim->lt("death", "deluge")); -ok($shTrim->lt("deluge", "de luge")); -ok($shTrim->lt("de luge", "de-luge")); -ok($shTrim->lt("de-luge", "deLuge")); -ok($shTrim->lt("deLuge", "de Luge")); +ok($Collator->{alternate}, 'shifted'); ############## @@ -504,19 +541,29 @@ ok($overCJK->lt("a\x{4E03}", "A\x{4E00}")); ############## -# rearranged : 0x0E40..0x0E44, 0x0EC0..0x0EC4 +# rearrange : 0x0E40..0x0E44, 0x0EC0..0x0EC4 (default) + +my %old_rearrange = $Collator->change(rearrange => undef); + +ok($Collator->gt("\x{0E41}A", "\x{0E40}B")); +ok($Collator->gt("A\x{0E41}A", "A\x{0E40}B")); + +$Collator->change(rearrange => [ 0x61 ]); # 'a' -ok($Collator->lt("A", "B")); +ok($Collator->gt("ab", "AB")); # as 'ba' > 'AB' + +$Collator->change(%old_rearrange); + +ok($Collator->lt("ab", "AB")); ok($Collator->lt("\x{0E40}", "\x{0E41}")); ok($Collator->lt("\x{0E40}A", "\x{0E41}B")); ok($Collator->lt("\x{0E41}A", "\x{0E40}B")); ok($Collator->lt("A\x{0E41}A", "A\x{0E40}B")); -ok($all_undef->lt("A", "B")); -ok($all_undef->lt("\x{0E40}", "\x{0E41}")); -ok($all_undef->lt("\x{0E40}A", "\x{0E41}B")); -ok($all_undef->lt("\x{0E41}A", "\x{0E40}B")); -ok($all_undef->lt("A\x{0E41}A", "A\x{0E40}B")); +ok($all_undef_8->lt("\x{0E40}", "\x{0E41}")); +ok($all_undef_8->lt("\x{0E40}A", "\x{0E41}B")); +ok($all_undef_8->lt("\x{0E41}A", "\x{0E40}B")); +ok($all_undef_8->lt("A\x{0E41}A", "A\x{0E40}B")); ############## @@ -534,8 +581,6 @@ ok($no_rearrange->gt("A\x{0E41}A", "A\x{0E40}B")); ############## -# equivalent to $no_rearrange - my $undef_rearrange = Unicode::Collate->new( table => undef, normalization => undef, diff --git a/lib/sort.pm b/lib/sort.pm index 3db4777..e785003 100644 --- a/lib/sort.pm +++ b/lib/sort.pm @@ -1,6 +1,6 @@ package sort; -our $VERSION = '1.01'; +our $VERSION = '1.02'; # Currently the hints for pp_sort are stored in the global variable # $sort::hints. An improvement would be to store them in $^H{SORT} and have @@ -33,6 +33,30 @@ sub import { $hints |= $sort::mergesort_bit; } elsif ($_ eq 'stable') { $hints |= $sort::stable_bit; + } elsif ($_ eq 'defaults') { + $hints = 0; + } else { + require Carp; + Carp::croak("sort: unknown subpragma '$_'"); + } + } +} + +sub unimport { + shift; + if (@_ == 0) { + require Carp; + Carp::croak("sort pragma requires arguments"); + } + local $_; + no warnings 'uninitialized'; # bitops would warn + while ($_ = shift(@_)) { + if (/^_q(?:uick)?sort$/) { + $hints &= ~$sort::sort_bits; + } elsif ($_ eq '_mergesort') { + $hints &= ~$sort::sort_bits; + } elsif ($_ eq 'stable') { + $hints &= ~$sort::stable_bit; } else { require Carp; Carp::croak("sort: unknown subpragma '$_'"); @@ -63,6 +87,8 @@ sort - perl pragma to control sort() behaviour use sort 'stable'; # guarantee stability use sort '_quicksort'; # use a quicksort algorithm use sort '_mergesort'; # use a mergesort algorithm + use sort 'defaults'; # revert to default behavior + no sort 'stable'; # stability not important use sort '_qsort'; # alias for quicksort @@ -70,11 +96,11 @@ sort - perl pragma to control sort() behaviour =head1 DESCRIPTION -With the sort pragma you can control the behaviour of the builtin -sort() function. +With the C pragma you can control the behaviour of the builtin +C function. In Perl versions 5.6 and earlier the quicksort algorithm was used to -implement sort(), but in Perl 5.8 a mergesort algorithm was also made +implement C, but in Perl 5.8 a mergesort algorithm was also made available, mainly to guarantee worst case O(N log N) behaviour: the worst case of quicksort is O(N**2). In Perl 5.8 and later, quicksort defends against quadratic behaviour by shuffling large @@ -98,16 +124,78 @@ The best algorithm depends on many things. On average, mergesort does fewer comparisons than quicksort, so it may be better when complicated comparison routines are used. Mergesort also takes advantage of pre-existing order, so it would be favored for using -sort to merge several sorted arrays. On the other hand, quicksort -is often faster for small arrays, and on platforms with small memory -caches that are much faster than main memory. You can force the +C to merge several sorted arrays. On the other hand, quicksort +is often faster for small arrays, and on arrays of a few distinct +values, repeated many times. You can force the choice of algorithm with this pragma, but this feels heavy-handed, so the subpragmas beginning with a C<_> may not persist beyond Perl 5.8. +The default algorithm is mergesort, which will be stable even if +you do not explicitly demand it. +But the stability of the default sort is a side-effect that could +change in later versions. If stability is important, be sure to +say so with a + + use sort 'stable'; + +The C pragma doesn't +I what follows, it just leaves the choice open. Thus, after + + no sort qw(_mergesort stable); + +a mergesort, which happens to be stable, will be employed anyway. +Note that + + no sort "_quicksort"; + no sort "_mergesort"; + +have exactly the same effect, leaving the choice of sort algorithm open. =head1 CAVEATS -This pragma is not lexically scoped : its effect is global to the program -it appears in. This may change in future versions. +This pragma is not lexically scoped: its effect is global to the program +it appears in. That means the following will probably not do what you +expect, because I pragmas take effect at compile time, before +I C happens. + + { use sort "_quicksort"; + print sort::current . "\n"; + @a = sort @b; + } + { use sort "stable"; + print sort::current . "\n"; + @c = sort @d; + } + # prints: + # quicksort stable + # quicksort stable + +You can achieve the effect you probably wanted by using C +to defer the pragmas until run time. Use the quoted argument +form of C, I the BLOCK form, as in + + eval { use sort "_quicksort" }; # WRONG + +or the effect will still be at compile time. +Reset to default options before selecting other subpragmas +(in case somebody carelessly left them on) and after sorting, +as a courtesy to others. + + { eval 'use sort qw(defaults _quicksort)'; # force quicksort + eval 'no sort "stable"'; # stability not wanted + print sort::current . "\n"; + @a = sort @b; + eval 'use sort "defaults"'; # clean up, for others + } + { eval 'use sort qw(defaults stable)'; # force stability + print sort::current . "\n"; + @c = sort @d; + eval 'use sort "defaults"'; # clean up, for others + } + # prints: + # quicksort + # stable + +Scoping for this pragma may change in future versions. =cut diff --git a/lib/sort.t b/lib/sort.t index 9903765..8828083 100644 --- a/lib/sort.t +++ b/lib/sort.t @@ -28,7 +28,8 @@ use warnings; use Test::More tests => @TestSizes * 2 # sort() tests * 4 # number of pragmas to test + 1 # extra test for qsort instability - + 3; # tests for sort::current + + 3 # tests for sort::current + + 3; # tests for "defaults" and "no sort" # Generate array of specified size for testing sort. # @@ -160,3 +161,23 @@ eval q{ main(0); }; die $@ if $@; + +# Tests added to check "defaults" subpragma, and "no sort" + +eval q{ + no sort qw(_qsort); + is(sort::current(), 'stable', 'sort::current after no _qsort'); +}; +die $@ if $@; + +eval q{ + use sort qw(defaults _qsort); + is(sort::current(), 'quicksort', 'sort::current after defaults _qsort'); +}; +die $@ if $@; + +eval q{ + use sort qw(defaults stable); + is(sort::current(), 'stable', 'sort::current after defaults stable'); +}; +die $@ if $@; diff --git a/makedef.pl b/makedef.pl index 8986296..657cef5 100644 --- a/makedef.pl +++ b/makedef.pl @@ -118,7 +118,7 @@ my $sym_ord = 0; if ($PLATFORM =~ /^win(?:32|ce)$/) { warn join(' ',keys %define)."\n"; - ($dll = ($define{PERL_DLL} || "perl58")) =~ s/\.dll$//i; + ($dll = ($define{PERL_DLL} || "perl59")) =~ s/\.dll$//i; print "LIBRARY $dll\n"; print "DESCRIPTION 'Perl interpreter'\n"; print "EXPORTS\n"; @@ -170,7 +170,7 @@ elsif ($PLATFORM eq 'aix') { } elsif ($PLATFORM eq 'netware') { if ($FILETYPE eq 'def') { - print "LIBRARY perl58\n"; + print "LIBRARY perl59\n"; print "DESCRIPTION 'Perl interpreter for NetWare'\n"; print "EXPORTS\n"; } diff --git a/mg.c b/mg.c index 63de612..1c7d239 100644 --- a/mg.c +++ b/mg.c @@ -693,18 +693,25 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) getrx: if (i >= 0) { - bool was_tainted = FALSE; - if (PL_tainting) { - was_tainted = PL_tainted; - PL_tainted = FALSE; - } sv_setpvn(sv, s, i); - if (PL_reg_match_utf8 && is_utf8_string((U8*)s, i)) + if (PL_reg_match_utf8 && is_utf8_string((U8*)s, i)) SvUTF8_on(sv); else SvUTF8_off(sv); - if (PL_tainting) - PL_tainted = (was_tainted || RX_MATCH_TAINTED(rx)); + if (PL_tainting) { + if (RX_MATCH_TAINTED(rx)) { + MAGIC* mg = SvMAGIC(sv); + MAGIC* mgt; + PL_tainted = 1; + SvMAGIC(sv) = mg->mg_moremagic; + SvTAINT(sv); + if ((mgt = SvMAGIC(sv))) { + mg->mg_moremagic = mgt; + SvMAGIC(sv) = mg; + } + } else + SvTAINTED_off(sv); + } break; } } diff --git a/op.c b/op.c index 5a60a1c..82fe5b9 100644 --- a/op.c +++ b/op.c @@ -1243,6 +1243,7 @@ Perl_scalarvoid(pTHX_ OP *o) case OP_OR: case OP_AND: + case OP_DOR: case OP_COND_EXPR: for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling) scalarvoid(kid); @@ -1626,6 +1627,7 @@ Perl_mod(pTHX_ OP *o, I32 type) case OP_SASSIGN: case OP_ANDASSIGN: case OP_ORASSIGN: + case OP_DORASSIGN: case OP_AELEMFAST: PL_modcount++; break; @@ -2088,19 +2090,19 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp) } else if (type == OP_RV2SV || /* "our" declaration */ type == OP_RV2AV || type == OP_RV2HV) { /* XXX does this let anything illegal in? */ - if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */ - yyerror(Perl_form(aTHX_ "Can't declare %s in my", OP_DESC(o))); - } - if (attrs) { - GV *gv = cGVOPx_gv(cUNOPo->op_first); - PL_in_my = FALSE; - PL_in_my_stash = Nullhv; - apply_attrs(GvSTASH(gv), - (type == OP_RV2SV ? GvSV(gv) : - type == OP_RV2AV ? (SV*)GvAV(gv) : - type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv), - attrs, FALSE); - } + if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */ + yyerror(Perl_form(aTHX_ "Can't declare %s in %s", + OP_DESC(o), PL_in_my == KEY_our ? "our" : "my")); + } else if (attrs) { + GV *gv = cGVOPx_gv(cUNOPo->op_first); + PL_in_my = FALSE; + PL_in_my_stash = Nullhv; + apply_attrs(GvSTASH(gv), + (type == OP_RV2SV ? GvSV(gv) : + type == OP_RV2AV ? (SV*)GvAV(gv) : + type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv), + attrs, FALSE); + } o->op_private |= OPpOUR_INTRO; return o; } @@ -3617,7 +3619,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) OP *o; if (optype) { - if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN) { + if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) { return newLOGOP(optype, 0, mod(scalar(left), optype), newUNOP(OP_SASSIGN, 0, scalar(right))); @@ -3940,7 +3942,7 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp) if (!other) return first; - if (type == OP_ANDASSIGN || type == OP_ORASSIGN) + if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN) other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */ NewOp(1101, logop, 1, LOGOP); @@ -7145,8 +7147,10 @@ Perl_peep(pTHX_ register OP *o) case OP_GREPWHILE: case OP_AND: case OP_OR: + case OP_DOR: case OP_ANDASSIGN: case OP_ORASSIGN: + case OP_DORASSIGN: case OP_COND_EXPR: case OP_RANGE: o->op_seq = PL_op_seqmax++; diff --git a/opcode.h b/opcode.h index 8556e1e..ff3c48f 100644 --- a/opcode.h +++ b/opcode.h @@ -380,6 +380,8 @@ EXT char *PL_op_name[] = { "threadsv", "setstate", "method_named", + "dor", + "dorassign", "custom", }; #endif @@ -739,6 +741,8 @@ EXT char *PL_op_desc[] = { "per-thread value", "set statement info", "method with known name", + "defined or (//)", + "defined or assignment (//=)", "unknown custom operator", }; #endif @@ -1103,6 +1107,8 @@ EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX) = { MEMBER_TO_FPTR(Perl_pp_threadsv), MEMBER_TO_FPTR(Perl_pp_setstate), MEMBER_TO_FPTR(Perl_pp_method_named), + MEMBER_TO_FPTR(Perl_pp_dor), + MEMBER_TO_FPTR(Perl_pp_dorassign), }; #endif @@ -1461,6 +1467,8 @@ EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = { MEMBER_TO_FPTR(Perl_ck_null), /* threadsv */ MEMBER_TO_FPTR(Perl_ck_null), /* setstate */ MEMBER_TO_FPTR(Perl_ck_null), /* method_named */ + MEMBER_TO_FPTR(Perl_ck_null), /* dor */ + MEMBER_TO_FPTR(Perl_ck_null), /* dorassign */ MEMBER_TO_FPTR(Perl_ck_null), /* custom */ }; #endif @@ -1820,6 +1828,8 @@ EXT U32 PL_opargs[] = { 0x00000044, /* threadsv */ 0x00001404, /* setstate */ 0x00000c40, /* method_named */ + 0x00000600, /* dor */ + 0x00000604, /* dorassign */ 0x00000000, /* custom */ }; #endif diff --git a/opcode.pl b/opcode.pl index 6df2f8b..03e7dc7 100755 --- a/opcode.pl +++ b/opcode.pl @@ -420,7 +420,7 @@ __END__ # logop - | listop - @ pmop - / # padop/svop - $ padop - # (unused) loop - { # baseop/unop - % loopexop - } filestatop - - -# pvop/svop - " +# pvop/svop - " cop - ; # Other options are: # needs stack mark - m @@ -924,6 +924,9 @@ threadsv per-thread value ck_null ds0 setstate set statement info ck_null s; method_named method with known name ck_null d$ +dor defined or (//) ck_null | +dorassign defined or assignment (//=) ck_null s| + # Add new ops before this, the custom operator. custom unknown custom operator ck_null 0 diff --git a/opnames.h b/opnames.h index 437c85d..2e654e1 100644 --- a/opnames.h +++ b/opnames.h @@ -364,11 +364,13 @@ typedef enum opcode { OP_THREADSV, /* 348 */ OP_SETSTATE, /* 349 */ OP_METHOD_NAMED,/* 350 */ - OP_CUSTOM, /* 351 */ + OP_DOR, /* 351 */ + OP_DORASSIGN, /* 352 */ + OP_CUSTOM, /* 353 */ OP_max } opcode; -#define MAXO 352 +#define MAXO 354 #define OP_phoney_INPUT_ONLY -1 #define OP_phoney_OUTPUT_ONLY -2 diff --git a/patchlevel.h b/patchlevel.h index 164ee0d..6281b09 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -13,7 +13,7 @@ * exactly on the third column */ #define PERL_REVISION 5 /* age */ -#define PERL_VERSION 8 /* epoch */ +#define PERL_VERSION 9 /* epoch */ #define PERL_SUBVERSION 0 /* generation */ /* The following numbers describe the earliest compatible version of @@ -79,7 +79,8 @@ #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT) static char *local_patches[] = { NULL - ,NULL + ,"DEVEL17702" + ,NULL }; /* Initial space prevents this variable from being inserted in config.sh */ diff --git a/perl.c b/perl.c index f7131d0..3647708 100644 --- a/perl.c +++ b/perl.c @@ -1158,7 +1158,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) #ifdef MACOS_TRADITIONAL /* ignore -e for Dev:Pseudo argument */ if (argv[1] && !strcmp(argv[1], "Dev:Pseudo")) - break; + break; #endif if (PL_euid != PL_uid || PL_egid != PL_gid) Perl_croak(aTHX_ "No -e allowed in setuid scripts"); @@ -3274,6 +3274,9 @@ STATIC void S_find_beginning(pTHX) { register char *s, *s2; +#ifdef MACOS_TRADITIONAL + int maclines = 0; +#endif /* skip forward in input to the real script? */ @@ -3285,16 +3288,16 @@ S_find_beginning(pTHX) if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) { if (!gMacPerl_AlwaysExtract) Perl_croak(aTHX_ "No Perl script found in input\n"); - + if (PL_doextract) /* require explicit override ? */ if (!OverrideExtract(PL_origfilename)) Perl_croak(aTHX_ "User aborted script\n"); else PL_doextract = FALSE; - + /* Pater peccavi, file does not have #! */ PerlIO_rewind(PL_rsfp); - + break; } #else @@ -3317,7 +3320,18 @@ S_find_beginning(pTHX) ; } #ifdef MACOS_TRADITIONAL + /* We are always searching for the #!perl line in MacPerl, + * so if we find it, still keep the line count correct + * by counting lines we already skipped over + */ + for (; maclines > 0 ; maclines--) + PerlIO_ungetc(PL_rsfp, '\n'); + break; + + /* gMacPerl_AlwaysExtract is false in MPW tool */ + } else if (gMacPerl_AlwaysExtract) { + ++maclines; #endif } } diff --git a/perl.h b/perl.h index 9c4a4b9..944dcc7 100644 --- a/perl.h +++ b/perl.h @@ -2396,6 +2396,7 @@ Gid_t getegid (void); #ifndef Perl_error_log # define Perl_error_log (PL_stderrgv \ + && isGV(PL_stderrgv) \ && GvIOp(PL_stderrgv) \ && IoOFP(GvIOp(PL_stderrgv)) \ ? IoOFP(GvIOp(PL_stderrgv)) \ diff --git a/perly.c b/perly.c index cba0e74..10de7ce 100644 --- a/perly.c +++ b/perly.c @@ -60,19 +60,19 @@ static short yylhs[] = { -1, 31, 32, 33, 54, 54, 1, 1, 1, 1, 1, 2, 39, 39, 47, 55, 3, 4, 5, 40, 41, 41, 45, 45, 45, 46, 46, 42, 42, 56, 56, - 58, 57, 16, 16, 16, 26, 26, 26, 37, 37, - 37, 37, 37, 37, 37, 37, 59, 37, 38, 38, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, - 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, - 53, 53, 53, 17, 17, 17, 17, 17, 17, 17, + 58, 57, 16, 16, 16, 16, 26, 26, 26, 37, + 37, 37, 37, 37, 37, 37, 37, 59, 37, 38, + 38, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, + 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, + 53, 53, 53, 53, 53, 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, 48, 48, 49, 49, 49, 49, - 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, - 21, 22, 23, 36, 36, 36, 36, + 17, 17, 17, 17, 17, 17, 48, 48, 49, 49, + 49, 49, 49, 34, 34, 35, 35, 35, 44, 24, + 19, 20, 21, 22, 23, 36, 36, 36, 36, }; static short yylen[] = { 2, 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, @@ -82,1086 +82,1184 @@ static short yylen[] = { 2, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, - 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, - 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, - 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 4, 3, 5, 2, 2, 4, - 5, 4, 5, 1, 1, 1, 1, 5, 2, 1, - 2, 3, 2, 1, 1, 1, 1, 1, 1, 6, - 5, 4, 5, 1, 1, 3, 4, 3, 1, 2, - 2, 1, 2, 2, 2, 1, 3, 1, 3, 4, - 4, 6, 1, 1, 3, 2, 3, 2, 1, 1, - 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, + 0, 7, 3, 3, 3, 1, 2, 3, 1, 3, + 5, 6, 3, 3, 5, 2, 4, 0, 5, 1, + 1, 5, 4, 5, 4, 5, 6, 5, 4, 5, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 4, 3, 5, 2, + 2, 4, 5, 4, 5, 1, 1, 1, 1, 5, + 2, 1, 2, 3, 2, 1, 1, 1, 1, 1, + 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, + 1, 2, 2, 1, 2, 2, 2, 1, 3, 1, + 3, 4, 4, 6, 1, 1, 3, 2, 3, 2, + 1, 1, 1, 0, 1, 0, 1, 2, 1, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, }; static short yydefred[] = { 4, 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, - 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, - 0, 168, 0, 57, 57, 0, 0, 0, 0, 0, + 0, 70, 71, 0, 14, 3, 175, 0, 0, 156, + 0, 170, 0, 57, 57, 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, 12, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 146, 148, 0, 0, 0, - 0, 174, 140, 134, 135, 136, 137, 52, 0, 59, - 0, 69, 0, 0, 7, 194, 197, 196, 195, 0, + 0, 0, 0, 0, 0, 148, 150, 0, 0, 0, + 0, 176, 142, 136, 137, 138, 139, 52, 0, 59, + 0, 69, 0, 0, 7, 196, 199, 198, 197, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, - 3, 0, 0, 0, 0, 0, 163, 0, 0, 0, - 0, 85, 0, 192, 0, 129, 0, 0, 0, 0, - 0, 0, 0, 179, 181, 180, 0, 188, 0, 0, - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 189, 190, 191, 193, 0, 34, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 165, 0, 0, 0, + 0, 86, 0, 194, 0, 131, 0, 0, 0, 0, + 0, 0, 0, 181, 183, 182, 0, 190, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 191, 192, 193, 195, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 119, 120, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 51, 61, 0, 0, 0, 0, 83, 0, 0, - 87, 0, 0, 0, 0, 0, 0, 0, 3, 167, - 169, 0, 0, 0, 0, 0, 0, 0, 126, 0, - 158, 178, 0, 0, 175, 0, 0, 123, 27, 0, - 0, 19, 0, 0, 0, 0, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 51, 61, 0, 0, 0, 0, 84, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 3, 169, 171, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 160, 180, 0, 0, 177, 0, 0, 125, + 27, 0, 0, 19, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 0, 90, 0, 0, 101, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 171, 0, 0, 0, - 42, 0, 43, 0, 0, 0, 0, 187, 0, 0, - 36, 41, 0, 0, 0, 170, 186, 86, 0, 130, - 0, 132, 0, 125, 177, 65, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 100, 94, 0, 92, 0, - 152, 0, 157, 63, 68, 67, 55, 0, 54, 84, - 0, 88, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 131, 133, 151, 0, 0, 0, 99, 93, - 0, 97, 95, 153, 91, 72, 172, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 150, 96, 81, 7, - 28, 29, 0, 0, 24, 25, 0, 32, 0, 0, - 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, - 0, 33, 0, 23, + 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, + 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, + 158, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 173, 0, 0, 0, 42, 0, 43, 0, 0, 0, + 0, 189, 0, 0, 36, 41, 0, 0, 0, 172, + 188, 87, 0, 132, 0, 134, 0, 127, 179, 65, + 0, 0, 0, 0, 99, 0, 0, 0, 0, 101, + 95, 0, 93, 0, 154, 0, 159, 63, 68, 67, + 55, 0, 54, 85, 0, 89, 129, 0, 0, 0, + 0, 0, 0, 0, 0, 81, 133, 135, 153, 0, + 0, 0, 100, 94, 0, 98, 96, 155, 92, 72, + 174, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 152, 97, 82, 7, 28, 29, 0, 0, 24, 25, + 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, + 5, 0, 30, 0, 0, 33, 0, 23, }; static short yydgoto[] = { 1, - 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, - 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, - 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, - 294, 282, 284, 122, 214, 100, 82, 257, 89, 91, - 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, - 85, 86, 87, 15, 16, 17, 18, 93, 278, + 10, 11, 20, 104, 19, 2, 95, 374, 98, 363, + 3, 12, 13, 70, 379, 289, 72, 73, 74, 75, + 76, 77, 78, 79, 295, 81, 296, 285, 287, 290, + 298, 286, 288, 122, 216, 100, 82, 261, 89, 91, + 196, 331, 156, 293, 275, 227, 14, 83, 137, 84, + 85, 86, 87, 15, 16, 17, 18, 93, 282, }; static short yysindex[] = { 0, - 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, - 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, - -24, 0, 2181, 0, 0, 11, 16, 32, 46, -34, - 2181, 49, 72, 76, 1017, 977, -31, 1081, 1348, -134, - 2181, 85, -31, 2181, 2181, 2181, 2181, 2181, 2181, 1388, - 1428, 0, 2181, 2181, -31, -31, -31, -31, -150, 0, - 337, 849, -13, -58, -48, 0, 0, 8, 97, 92, - 116, 0, 0, 0, 0, 0, 0, 0, 52, 0, - -97, 0, -75, -97, 0, 0, 0, 0, 0, 2181, - 146, 2181, 395, 52, -97, 0, 0, 0, 0, 0, - 0, 150, 849, 153, 1468, 977, 0, 395, 0, -58, - 116, 0, 2181, 0, 157, 0, 395, -8, 83, -52, - 2181, 395, 1528, 0, 0, 0, -89, 0, 116, 107, - 107, 107, -104, -104, 123, -37, 0, -73, 107, 107, - 0, 0, 0, 0, 52, 0, 2181, 2181, 2181, 2181, - 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, - 2181, 2181, 2181, 2181, 2181, 2181, 2181, 0, 0, -12, - 2181, 1735, 2181, 2181, 2181, 2181, 2181, 2181, 1795, 0, - 2181, 0, 0, -64, -32, -64, 411, 0, 2181, 291, - 0, -64, 2181, 2181, 2181, 2181, 187, 1854, 0, 0, - 0, -29, 58, 189, 2181, 116, 1914, 2029, 0, 111, - 0, 0, -26, -19, 0, 2181, 165, 0, 0, -241, - -241, 0, -241, -241, -241, -40, 0, 1618, 395, 1306, - 185, 168, 849, 1235, 1129, 1169, 1268, 782, 235, 107, - 107, 2181, 0, 2121, 2181, 0, 218, -46, 0, -3, - -68, 61, 106, 65, 108, 68, 0, 17, 849, 26, - -30, 2181, -30, 0, 236, 2181, 0, 2181, 52, -241, - 0, 250, 0, 255, -241, 259, 260, 0, 248, 337, - 0, 0, 262, 261, 2181, 0, 0, 0, 22, 0, - 33, 0, 36, 0, 0, 0, 125, 2181, 2181, 71, - 0, 50, 127, 2181, 182, 0, 0, 184, 0, 199, - 0, 201, 0, 0, 0, 0, 0, 272, 0, 0, - 354, 0, 0, 216, 216, 216, 216, 2181, 216, 2181, - 301, 0, 0, 0, 0, 167, 2418, 228, 0, 0, - 319, 0, 0, 0, 0, 0, 0, 0, -150, -150, - -123, -123, 322, -150, 308, 216, 0, 0, 0, 0, - 0, 0, 216, 334, 0, 0, 216, 0, 1854, -150, - 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, - 216, 0, -123, 0, + 0, 0, -183, 0, 0, 0, -57, 0, 0, 0, + 0, 0, 0, 0, 820, 0, 0, 0, -222, -208, + 7, 0, 0, -208, 0, 0, 0, -31, -31, 0, + 32, 0, 2214, 0, 0, 33, 49, 56, 59, -30, + 2214, 63, 65, 66, 1005, 941, -31, 1150, 1269, -149, + 2214, -7, -31, 2214, 2214, 2214, 2214, 2214, 2214, 1329, + 1414, 0, 2214, 2214, -31, -31, -31, -31, -168, 0, + -121, 704, -16, -63, -59, 0, 0, -8, 80, 64, + 81, 0, 0, 0, 0, 0, 0, 0, -1, 0, + -134, 0, -125, -134, 0, 0, 0, 0, 0, 2214, + 95, 2214, 744, -1, -134, 0, 0, 0, 0, 0, + 0, 117, 704, 97, 1455, 941, 0, 744, 0, -63, + 81, 0, 2214, 0, 123, 0, 744, -14, 36, -52, + 2214, 744, 1563, 0, 0, 0, -132, 0, 81, -111, + -111, -111, -155, -155, 76, -37, 0, -66, -111, -111, + 0, 0, 0, 0, -1, 0, 2214, 2214, 2214, 2214, + 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, + 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 0, + 0, -21, 2214, 1724, 2214, 2214, 2214, 2214, 2214, 2214, + 1797, 0, 2214, 0, 0, -120, -74, -120, 343, 0, + 2214, 27, 0, -120, 2214, 2214, 2214, 2214, 153, 1860, + 0, 0, 0, -25, 4, 156, 2214, 81, 1933, 2005, + 0, 73, 0, 0, 18, -51, 0, 2214, 110, 0, + 0, 228, 228, 0, 228, 228, 228, -92, -92, 0, + 1351, 744, 961, 375, 271, 704, 585, 1068, 1068, 646, + 1485, 394, 611, -111, -111, 2214, 0, 2141, 2214, 0, + 172, 101, 0, 21, -62, 133, -43, 137, 128, 140, + 0, 24, 704, -38, -45, 2214, -45, 0, 177, 2214, + 0, 2214, -1, 228, 0, 178, 0, 204, 228, 206, + 211, 0, 175, -121, 0, 0, 220, 169, 2214, 0, + 0, 0, 78, 0, 98, 0, 121, 0, 0, 0, + 186, 2214, 2214, 174, 0, 124, 191, 2214, 142, 0, + 0, 147, 0, 148, 0, 168, 0, 0, 0, 0, + 0, 235, 0, 0, 233, 0, 0, 179, 179, 179, + 179, 2214, 179, 2214, 260, 0, 0, 0, 0, 216, + 1035, 182, 0, 0, 270, 0, 0, 0, 0, 0, + 0, 0, -168, -168, -256, -256, 286, -168, 269, 179, + 0, 0, 0, 0, 0, 0, 179, 290, 0, 0, + 179, 0, 1860, -168, 352, 0, 2214, -168, 298, 0, + 0, 299, 0, 179, 179, 0, -256, 0, }; static short yyrindex[] = { 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -19, 2283, 0, 0, 2402, 2567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 455, 0, 0, 2367, 2469, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, + -18, 1608, 2621, 2674, 2722, 0, 0, 2770, 2857, 0, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -56, 0, 0, -56, 0, 0, 0, 0, 0, 2567, + 0, 0, 4275, 0, -114, 0, 0, 0, 0, 0, + 0, 0, 1887, 0, 0, 302, 0, 4340, 468, 533, + 3225, 0, 0, 0, 3006, 0, 4395, 2674, 0, 0, + 2567, 4405, 0, 0, 0, 0, 3056, 0, 3460, 3696, + 3747, 3802, 3583, 3631, 3128, 0, 0, 0, 3867, 3915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, - 3, 943, 2515, 2603, 2653, 0, 0, 2708, 2754, 0, - -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -33, 0, 0, -33, 0, 0, 0, 0, 0, 2469, - 0, 0, 3919, 0, -102, 0, 0, 0, 0, 0, - 0, 0, 3216, 0, 0, 359, 0, 3955, 526, 587, - 2276, 0, 0, 0, 2801, 0, 3999, 2603, 0, 0, - 2469, 4043, 0, 0, 0, 0, 2858, 0, 3225, 3461, - 3527, 3588, 3352, 3399, 2908, 0, 0, 0, 3635, 3680, 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, 3176, 0, 0, -42, 0, -42, 881, 0, + 302, 0, 0, 230, 326, 0, 0, 0, 0, 310, + 0, 0, 0, 0, 340, 0, 0, 3511, 0, 0, + 0, 0, 0, 0, 0, 3292, 0, 0, 3347, 0, + 0, 17, 20, 0, 39, 45, 52, 1480, 1643, 0, + 2275, 4446, 4494, 4121, 4169, 2422, 0, 4698, 4746, 4631, + 4592, 4544, 4220, 4001, 4056, 0, 0, 0, 0, 0, + 3412, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2475, -41, 0, 330, 0, 0, 0, 0, + 0, 2567, 0, 53, 0, 0, 0, 0, 354, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2990, 0, 0, -28, 0, -28, 917, 0, 359, 0, - 0, 295, 379, 0, 0, 0, 0, 370, 0, 0, - 0, 0, 390, 0, 0, 3291, 0, 0, 0, 0, - 0, 0, 0, 3056, 0, 0, 3113, 0, 0, 14, - 35, 0, 55, 91, 117, 1991, 0, 4235, 4090, 1826, - 3807, 3871, 3283, 0, -22, 4191, 4155, 4145, 1048, 3719, - 3763, 0, 0, 0, 0, 0, 3163, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4267, -10, - 0, 375, 0, 0, 0, 0, 0, 2469, 0, 136, - 0, 0, 0, 0, 400, 0, 0, 0, 0, 139, + 0, 0, 0, 0, 0, 0, 0, 302, 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, 359, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, + 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 91, 187, 187, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, - 0, 0, 0, 0, 0, 0, 4080, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 119, 119, - 179, 179, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 415, 119, - 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, + 0, 0, 370, 91, 881, 0, 0, 91, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 0, }; static short yygindex[] = { 0, - 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, - -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, - 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, - 103, 147, 280, -91, -185, 1, 0, 0, 0, 464, - -44, 222, 338, 0, -179, 0, 0, 0, 0, 0, + 0, 0, 29, 378, 0, 0, -55, 0, 676, 567, + -94, 0, 0, 0, -355, -15, 2480, 0, 650, 364, + 380, 0, 0, 0, 412, 755, 0, 0, 291, -202, + 82, 120, 277, -88, -188, 534, 0, 0, 0, 465, + -58, 217, -247, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4568 +#define YYTABLESIZE 5052 static short yytable[] = { 71, - 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, - 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, - 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, - 62, 218, 185, 130, 75, 113, 113, 316, 376, 221, - 113, 90, 187, 15, 146, 148, 123, 124, 64, 196, - 106, 69, 75, 138, 18, 107, 121, 323, 162, 163, - 202, 15, 342, 92, 184, 151, 152, 153, 154, 394, - 113, 108, 18, 343, 186, 39, 344, 183, 255, 216, - 159, 117, 185, 159, 126, 109, 75, 121, 114, 60, - 349, 26, 26, 39, 62, 16, 341, 159, 159, 212, - 213, 297, 159, 203, 204, 205, 206, 207, 208, 181, - 252, 115, 64, 16, 184, 116, 215, 223, 26, 318, - 65, 67, 131, 320, 133, 192, 322, 155, 351, 348, - 188, 17, 159, 4, 5, 6, 189, 7, 8, 363, - 201, 230, 231, 233, 234, 235, 236, 237, 66, 17, - 190, 26, 373, 374, 26, 26, 26, 20, 26, 191, - 26, 26, 193, 26, 9, 258, 260, 261, 262, 263, - 264, 265, 266, 268, 26, 20, 38, 26, 21, 40, - 328, 195, 26, 213, 388, 199, 332, 280, 231, 209, - 231, 229, 290, 210, 38, 60, 217, 15, 319, 299, - 321, 301, 303, 23, 24, 21, 295, 219, 224, 26, - 307, 21, 180, 226, 21, 21, 21, 345, 21, 350, - 21, 21, 65, 21, 272, 96, 162, 163, 121, 298, - 97, 162, 163, 270, 121, 304, 310, 21, 312, 313, - 306, 26, 21, 26, 26, 253, 1, 162, 163, 113, - 113, 113, 113, 162, 163, 308, 113, 314, 113, 367, - 163, 110, 162, 163, 60, 75, 75, 75, 75, 21, - 162, 163, 75, 162, 163, 381, 330, 113, 113, 44, - 113, 113, 44, 44, 44, 324, 44, 338, 44, 44, - 334, 44, 346, 75, 75, 335, 162, 163, 213, 336, - 337, 21, 339, 21, 21, 44, 352, 326, 353, 326, - 44, 159, 159, 159, 159, 333, 162, 163, 159, 340, - 159, 162, 163, 354, 280, 355, 159, 159, 159, 159, - 356, 277, 162, 163, 276, 162, 163, 44, 358, 159, - 159, 366, 159, 159, 159, 159, 159, 159, 159, 162, - 163, 159, 368, 170, 159, 159, 159, 162, 163, 369, - 162, 163, 377, 71, 162, 163, 379, 162, 163, 44, - 162, 163, 44, 383, 26, 26, 26, 26, 26, 26, - 390, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 357, 391, 53, 26, 26, 184, - 26, 26, 26, 26, 26, 162, 163, 162, 163, 26, - 26, 26, 26, 26, 26, 26, 170, 62, 177, 37, - 26, 178, 179, 180, 162, 163, 162, 163, 35, 26, - 185, 26, 26, 182, 21, 21, 21, 21, 21, 21, - 40, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 37, 35, 167, 21, 21, 105, - 21, 21, 21, 21, 21, 135, 162, 163, 136, 21, - 21, 21, 21, 21, 21, 21, 176, 80, 232, 177, - 21, 385, 178, 179, 180, 287, 365, 94, 0, 21, - 0, 21, 21, 176, 329, 166, 177, 0, 166, 178, - 179, 180, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 166, 166, 0, 44, 0, 166, 44, 44, - 44, 44, 0, 167, 168, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 274, 0, 44, 44, 44, - 44, 44, 44, 176, 0, 0, 177, 166, 44, 178, - 179, 180, 0, 0, 0, 0, 0, 44, 194, 44, - 44, 194, 194, 194, 0, 194, 173, 194, 194, 173, - 194, 164, 0, 387, 0, 0, 0, 165, 166, 167, - 168, 0, 0, 173, 173, 0, 0, 0, 173, 194, - 0, 0, 0, 169, 171, 172, 173, 174, 175, 176, - 0, 0, 177, 0, 0, 178, 179, 180, 157, 158, - 159, 160, 0, 0, 0, 161, 194, 0, 173, 195, - 0, 0, 195, 195, 195, 0, 195, 144, 195, 195, - 144, 195, 0, 0, 164, 0, 162, 163, 0, 0, - 165, 166, 167, 168, 144, 144, 0, 0, 0, 144, - 195, 194, 0, 0, 0, 0, 169, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 0, 0, 178, 179, - 180, 0, 0, 0, 0, 0, 4, 5, 6, 144, - 7, 8, 55, 167, 168, 65, 67, 53, 0, 60, - 0, 68, 64, 0, 63, 0, 371, 372, 0, 0, - 0, 378, 175, 176, 0, 0, 177, 9, 62, 178, - 179, 180, 195, 66, 4, 5, 6, 386, 7, 8, - 0, 389, 0, 0, 0, 0, 166, 166, 166, 166, - 0, 0, 0, 166, 0, 166, 0, 0, 0, 0, - 61, 166, 166, 166, 166, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 166, 166, 0, 166, 166, 166, - 166, 166, 166, 166, 0, 0, 166, 0, 0, 166, - 166, 166, 26, 0, 0, 56, 0, 0, 0, 0, - 0, 0, 194, 194, 194, 194, 194, 0, 194, 194, - 194, 0, 0, 0, 194, 0, 0, 173, 173, 173, - 173, 0, 0, 0, 173, 194, 173, 194, 194, 194, - 194, 194, 173, 173, 173, 173, 194, 194, 194, 194, - 194, 194, 0, 0, 0, 173, 173, 194, 173, 173, - 173, 173, 173, 173, 173, 0, 194, 173, 194, 194, - 173, 173, 173, 195, 195, 195, 195, 195, 0, 195, - 195, 195, 0, 0, 0, 195, 0, 0, 144, 144, - 144, 144, 0, 0, 0, 144, 195, 144, 195, 195, - 195, 195, 195, 144, 144, 144, 144, 195, 195, 195, - 195, 195, 195, 0, 0, 0, 144, 144, 195, 144, - 144, 144, 144, 144, 144, 144, 0, 195, 144, 195, - 195, 144, 144, 144, 0, 25, 27, 28, 29, 30, - 31, 170, 32, 33, 34, 0, 0, 0, 35, 0, - 0, 36, 37, 38, 39, 0, 0, 0, 40, 41, + 199, 22, 60, 229, 65, 65, 222, 297, 60, 111, + 380, 200, 279, 329, 65, 300, 62, 64, 258, 377, + 378, 161, 15, 184, 161, 220, 230, 187, 65, 67, + 321, 189, 133, 130, 88, 198, 23, 24, 161, 161, + 15, 398, 223, 161, 146, 148, 204, 301, 90, 323, + 205, 206, 207, 208, 209, 210, 66, 18, 309, 186, + 39, 320, 277, 188, 327, 92, 60, 281, 283, 259, + 280, 102, 106, 161, 185, 18, 187, 26, 39, 16, + 62, 64, 4, 5, 6, 17, 7, 8, 107, 171, + 26, 26, 20, 38, 40, 108, 345, 16, 109, 214, + 215, 256, 114, 17, 115, 116, 183, 131, 186, 155, + 20, 38, 15, 9, 190, 375, 376, 225, 346, 191, + 382, 26, 192, 26, 193, 195, 26, 26, 26, 355, + 26, 197, 26, 26, 201, 26, 390, 212, 347, 367, + 393, 232, 233, 235, 236, 237, 238, 239, 240, 26, + 157, 158, 159, 160, 26, 299, 211, 161, 76, 319, + 221, 348, 219, 182, 353, 226, 228, 262, 264, 265, + 266, 267, 268, 269, 270, 272, 76, 274, 162, 163, + 164, 26, 276, 60, 392, 215, 21, 332, 65, 284, + 233, 322, 233, 336, 294, 324, 302, 308, 326, 21, + 312, 303, 179, 305, 307, 180, 181, 182, 310, 164, + 76, 318, 311, 26, 342, 26, 26, 334, 338, 21, + 325, 328, 21, 21, 21, 96, 21, 344, 21, 21, + 97, 21, 352, 162, 163, 164, 257, 162, 163, 164, + 314, 60, 316, 317, 339, 21, 340, 162, 163, 164, + 21, 341, 161, 161, 161, 161, 162, 163, 164, 161, + 343, 161, 162, 163, 164, 110, 356, 161, 161, 161, + 161, 357, 358, 361, 162, 163, 164, 21, 349, 385, + 161, 161, 161, 354, 161, 161, 161, 161, 161, 161, + 161, 161, 359, 360, 161, 171, 350, 161, 161, 161, + 370, 362, 215, 162, 163, 164, 372, 165, 371, 21, + 373, 21, 21, 166, 167, 168, 169, 162, 163, 164, + 162, 163, 164, 162, 163, 164, 381, 383, 284, 387, + 170, 172, 173, 174, 175, 176, 177, 178, 394, 395, + 179, 53, 186, 180, 181, 182, 26, 26, 26, 26, + 26, 26, 62, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 37, 71, 35, 26, + 26, 1, 26, 26, 26, 26, 26, 162, 163, 164, + 187, 26, 26, 26, 26, 26, 26, 26, 184, 76, + 76, 76, 76, 26, 40, 37, 76, 162, 163, 164, + 162, 163, 164, 26, 44, 26, 26, 44, 44, 44, + 35, 44, 105, 44, 44, 135, 44, 76, 76, 76, + 162, 163, 164, 162, 163, 164, 80, 162, 163, 164, + 44, 136, 162, 163, 164, 44, 162, 163, 164, 162, + 163, 164, 21, 21, 21, 21, 21, 21, 234, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 44, 369, 389, 21, 21, 278, 21, 21, + 21, 21, 21, 162, 163, 164, 391, 21, 21, 21, + 21, 21, 21, 21, 291, 162, 163, 164, 94, 21, + 162, 163, 164, 333, 44, 0, 0, 44, 0, 21, + 196, 21, 21, 196, 196, 196, 0, 196, 175, 196, + 196, 175, 196, 165, 0, 162, 163, 164, 0, 166, + 167, 168, 169, 0, 0, 175, 175, 162, 163, 164, + 175, 196, 0, 0, 0, 0, 170, 172, 173, 174, + 175, 176, 177, 178, 0, 0, 179, 0, 0, 180, + 181, 182, 0, 0, 0, 0, 0, 0, 196, 168, + 175, 0, 101, 0, 0, 197, 0, 0, 197, 197, + 197, 0, 197, 146, 197, 197, 146, 197, 0, 123, + 124, 178, 0, 0, 179, 0, 138, 180, 181, 182, + 146, 146, 0, 196, 0, 146, 197, 0, 151, 152, + 153, 154, 0, 0, 0, 0, 0, 0, 4, 5, + 6, 0, 7, 8, 0, 0, 0, 4, 5, 6, + 0, 7, 8, 0, 0, 146, 0, 44, 44, 44, + 44, 44, 44, 0, 44, 44, 44, 0, 0, 9, + 44, 0, 313, 44, 44, 44, 44, 171, 9, 217, + 44, 44, 0, 44, 44, 44, 44, 44, 197, 0, + 0, 0, 44, 44, 44, 44, 44, 44, 0, 0, + 0, 0, 0, 0, 44, 0, 0, 99, 99, 0, + 166, 167, 168, 169, 44, 178, 44, 44, 179, 112, + 69, 180, 181, 182, 0, 120, 99, 128, 0, 0, + 0, 134, 99, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 0, 99, 99, 99, 99, 0, 0, + 117, 0, 0, 126, 196, 196, 196, 196, 196, 0, + 196, 196, 196, 0, 0, 0, 196, 0, 0, 175, + 175, 175, 175, 0, 0, 0, 175, 196, 175, 196, + 196, 196, 196, 196, 175, 175, 175, 175, 196, 196, + 196, 196, 196, 196, 194, 120, 171, 175, 175, 175, + 196, 175, 175, 175, 175, 175, 175, 175, 175, 203, + 196, 175, 196, 196, 175, 175, 175, 0, 0, 197, + 197, 197, 197, 197, 0, 197, 197, 197, 0, 0, + 121, 197, 0, 0, 146, 146, 146, 146, 139, 0, + 0, 146, 197, 146, 197, 197, 197, 197, 197, 146, + 146, 146, 146, 197, 197, 197, 197, 197, 197, 0, + 231, 260, 146, 146, 146, 197, 146, 146, 146, 146, + 146, 146, 146, 146, 0, 197, 146, 197, 197, 146, + 146, 146, 55, 0, 121, 65, 67, 53, 292, 60, + 0, 68, 64, 0, 63, 165, 0, 0, 0, 0, + 0, 166, 167, 168, 169, 0, 0, 218, 62, 0, + 0, 0, 0, 66, 0, 121, 0, 0, 170, 172, + 173, 174, 175, 176, 177, 178, 0, 0, 179, 168, + 169, 180, 181, 182, 0, 364, 365, 366, 0, 368, + 61, 0, 0, 44, 0, 0, 44, 44, 44, 0, + 44, 178, 44, 44, 179, 44, 0, 180, 181, 182, + 0, 0, 166, 167, 168, 169, 384, 0, 0, 44, + 0, 0, 26, 386, 44, 56, 0, 388, 0, 0, + 330, 0, 330, 175, 176, 177, 178, 0, 337, 179, + 396, 397, 180, 181, 182, 0, 0, 0, 0, 0, + 0, 44, 0, 55, 0, 0, 65, 67, 53, 0, + 60, 0, 68, 64, 165, 63, 0, 0, 0, 0, + 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 66, 0, 44, 170, 172, 173, + 174, 175, 176, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, + 121, 61, 168, 169, 0, 0, 121, 55, 0, 0, + 65, 67, 53, 0, 60, 0, 68, 64, 0, 63, + 0, 0, 0, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 26, 0, 0, 56, 0, 66, 0, + 0, 0, 0, 0, 0, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 0, 36, 37, 38, 39, 61, 0, 171, 40, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, - 47, 48, 49, 50, 51, 52, 0, 0, 0, 44, - 0, 54, 44, 44, 44, 0, 44, 0, 44, 44, - 57, 44, 58, 59, 0, 0, 0, 0, 360, 361, - 362, 0, 364, 0, 0, 44, 0, 0, 0, 0, - 44, 0, 0, 78, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 78, 78, 0, 0, 0, 0, 382, 44, 0, 55, - 384, 0, 65, 67, 53, 0, 60, 0, 68, 64, - 0, 63, 0, 392, 393, 0, 99, 99, 0, 0, - 0, 0, 0, 0, 0, 78, 0, 0, 112, 44, - 66, 0, 44, 0, 120, 99, 128, 0, 0, 55, - 134, 99, 65, 67, 53, 0, 60, 0, 68, 64, - 0, 63, 0, 99, 99, 99, 99, 61, 165, 166, - 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 0, 106, 175, - 176, 106, 0, 177, 0, 0, 178, 179, 180, 26, - 0, 0, 56, 0, 0, 106, 106, 61, 0, 0, - 106, 0, 0, 55, 120, 0, 65, 67, 53, 0, - 60, 0, 68, 64, 0, 63, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 165, 166, 167, 168, 26, - 106, 0, 56, 0, 66, 0, 0, 0, 0, 0, - 0, 169, 171, 172, 173, 174, 175, 176, 0, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 61, 44, 44, 44, 44, 44, 44, 256, 44, - 44, 44, 0, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 26, 0, 288, 56, 44, 44, 44, - 44, 44, 44, 0, 78, 78, 78, 78, 44, 0, - 0, 78, 0, 0, 0, 0, 0, 44, 0, 44, - 44, 0, 0, 119, 28, 29, 30, 31, 97, 32, - 33, 34, 78, 78, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, - 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, - 50, 51, 52, 27, 28, 29, 30, 31, 54, 32, - 33, 34, 0, 0, 0, 35, 0, 57, 0, 58, - 59, 0, 309, 0, 0, 0, 41, 170, 42, 43, - 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, - 50, 51, 52, 0, 0, 0, 0, 0, 54, 106, - 106, 106, 106, 0, 0, 0, 106, 57, 106, 58, - 59, 0, 0, 0, 106, 106, 0, 125, 28, 29, - 30, 31, 0, 32, 33, 34, 0, 106, 106, 35, - 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 26, 0, 0, + 56, 0, 57, 0, 58, 59, 44, 44, 44, 44, + 44, 44, 0, 44, 44, 44, 0, 0, 0, 44, + 0, 0, 44, 44, 44, 44, 0, 0, 0, 44, + 44, 0, 44, 44, 44, 44, 44, 0, 0, 0, + 0, 44, 44, 44, 44, 44, 44, 0, 0, 0, + 0, 0, 55, 44, 0, 65, 67, 53, 0, 60, + 0, 68, 64, 44, 63, 44, 44, 119, 28, 29, + 30, 31, 97, 32, 33, 34, 0, 0, 0, 35, + 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, - 55, 0, 54, 65, 67, 53, 0, 60, 0, 68, - 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, - 0, 66, 0, 0, 0, 165, 166, 167, 168, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 145, 68, - 64, 0, 63, 172, 173, 174, 175, 176, 61, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 165, 166, 167, 168, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 0, 68, - 64, 0, 63, 56, 173, 174, 175, 176, 61, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 211, 68, - 64, 0, 63, 56, 0, 164, 0, 0, 61, 0, - 147, 165, 166, 167, 168, 0, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 169, 171, 172, - 173, 174, 175, 176, 0, 0, 177, 0, 0, 178, - 179, 180, 0, 56, 165, 166, 167, 168, 61, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 222, 68, - 64, 0, 63, 0, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 0, 66, 165, 56, 167, 168, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 28, 29, 30, 31, 0, - 32, 33, 34, 175, 176, 0, 35, 177, 61, 0, - 178, 179, 180, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 56, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 0, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 0, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 0, 0, 0, 55, 0, 54, - 65, 67, 53, 0, 60, 259, 68, 64, 57, 63, - 58, 59, 0, 0, 27, 28, 29, 30, 31, 0, - 32, 33, 34, 0, 0, 0, 35, 0, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 0, 61, 0, 55, 0, 54, - 65, 67, 53, 0, 60, 267, 68, 64, 57, 63, - 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 56, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 108, 108, 61, 55, 0, 108, 65, - 67, 53, 0, 60, 0, 68, 64, 0, 63, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 108, 0, - 56, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 61, 0, 55, 0, 0, 65, - 67, 53, 0, 60, 300, 68, 64, 0, 63, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, - 0, 0, 0, 35, 61, 0, 0, 0, 0, 0, + 61, 0, 140, 54, 0, 140, 0, 166, 0, 168, + 169, 0, 0, 57, 0, 58, 59, 0, 0, 140, + 140, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 177, 178, 26, 35, 179, 56, 0, 180, 181, 182, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, - 52, 74, 0, 0, 74, 0, 54, 0, 0, 56, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 74, - 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, - 0, 55, 0, 35, 65, 67, 53, 0, 60, 302, - 68, 64, 0, 63, 41, 0, 42, 43, 44, 45, - 46, 0, 0, 74, 0, 47, 48, 49, 50, 51, - 52, 0, 66, 0, 0, 0, 54, 108, 108, 108, - 108, 0, 0, 0, 108, 57, 108, 58, 59, 25, - 27, 28, 29, 30, 31, 0, 32, 33, 34, 61, - 0, 0, 35, 0, 0, 108, 108, 0, 108, 108, - 108, 108, 108, 41, 0, 42, 43, 44, 45, 46, - 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, - 0, 0, 0, 55, 56, 54, 65, 67, 53, 0, - 60, 311, 68, 64, 57, 63, 58, 59, 0, 0, + 46, 0, 0, 0, 140, 47, 48, 49, 50, 51, + 52, 55, 0, 0, 65, 67, 53, 54, 60, 0, + 68, 64, 0, 63, 0, 165, 0, 57, 0, 58, + 59, 166, 167, 168, 169, 0, 0, 129, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 0, 0, 172, + 173, 174, 175, 176, 177, 178, 0, 0, 179, 0, + 0, 180, 181, 182, 166, 167, 168, 169, 0, 61, + 0, 55, 0, 0, 65, 67, 53, 0, 60, 145, + 68, 64, 0, 63, 174, 175, 176, 177, 178, 0, + 0, 179, 0, 0, 180, 181, 182, 0, 0, 0, + 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 55, 0, 0, 65, + 67, 53, 54, 60, 56, 68, 64, 0, 63, 0, + 0, 0, 57, 0, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 140, 140, 140, 140, 66, 0, 0, + 140, 0, 0, 0, 0, 0, 0, 55, 0, 0, + 65, 67, 53, 0, 60, 213, 68, 64, 0, 63, + 0, 140, 140, 140, 61, 140, 147, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, + 74, 0, 0, 74, 0, 27, 28, 29, 30, 31, + 0, 32, 33, 34, 0, 0, 0, 35, 74, 56, + 0, 0, 0, 0, 0, 61, 0, 0, 41, 0, + 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, + 0, 54, 74, 0, 0, 0, 0, 0, 0, 0, + 56, 57, 0, 58, 59, 27, 28, 29, 30, 31, + 0, 32, 33, 34, 0, 55, 0, 35, 65, 67, + 53, 0, 60, 224, 68, 64, 0, 63, 41, 0, + 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 51, 52, 0, 66, 0, 0, 0, + 0, 54, 0, 0, 0, 0, 0, 166, 167, 168, + 169, 57, 0, 58, 59, 0, 0, 0, 79, 0, + 0, 79, 0, 61, 0, 172, 173, 174, 175, 176, + 177, 178, 0, 0, 179, 79, 79, 180, 181, 182, 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, - 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 35, 75, 0, 0, 75, 0, 56, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 79, 75, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 27, 28, 29, 30, 31, 54, 32, 33, 34, + 0, 0, 0, 35, 0, 0, 57, 0, 58, 59, + 0, 0, 0, 0, 41, 75, 42, 43, 44, 45, + 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, + 52, 74, 74, 74, 74, 0, 55, 54, 74, 65, + 67, 53, 0, 60, 263, 68, 64, 57, 63, 58, + 59, 166, 167, 168, 169, 0, 0, 0, 0, 74, + 74, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 176, 177, 178, 0, 0, 179, 0, + 0, 180, 181, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 0, 27, + 28, 29, 30, 31, 0, 32, 33, 34, 0, 55, + 0, 35, 65, 67, 53, 0, 60, 271, 68, 64, + 0, 63, 41, 0, 42, 43, 44, 45, 46, 56, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 66, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 58, 59, 79, + 79, 79, 79, 0, 0, 0, 79, 61, 0, 0, + 0, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 79, 79, 79, + 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, + 0, 75, 56, 66, 0, 0, 0, 162, 0, 0, + 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 75, 75, 162, 162, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 304, 68, 64, 0, 63, 0, 162, + 27, 28, 29, 30, 31, 56, 32, 33, 34, 0, + 0, 0, 35, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, - 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, - 60, 0, 68, 64, 57, 63, 58, 59, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 0, 61, 0, 0, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 57, 55, 58, 59, + 65, 67, 53, 0, 60, 306, 68, 64, 0, 63, + 0, 0, 0, 27, 28, 29, 30, 31, 56, 32, + 33, 34, 0, 0, 0, 35, 0, 0, 66, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 61, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, + 0, 58, 59, 0, 0, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 56, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 162, 162, + 162, 162, 54, 0, 0, 162, 0, 0, 0, 0, + 0, 0, 57, 55, 58, 59, 65, 67, 53, 0, + 60, 315, 68, 64, 0, 63, 162, 162, 162, 27, + 28, 29, 30, 31, 0, 32, 33, 34, 0, 0, + 0, 35, 0, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 61, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 55, 58, 59, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 0, + 0, 27, 28, 29, 30, 31, 56, 32, 33, 34, + 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, + 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, + 52, 0, 0, 0, 61, 0, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 112, 0, 57, 112, 58, + 59, 0, 0, 168, 0, 0, 168, 0, 0, 0, + 0, 0, 112, 112, 0, 0, 0, 112, 0, 56, + 168, 168, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 74, 74, 74, 0, 0, 0, 74, - 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, - 74, 32, 33, 34, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 41, 0, - 42, 43, 44, 45, 46, 0, 183, 0, 0, 47, - 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, - 54, 0, 0, 183, 183, 0, 0, 0, 183, 57, - 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 42, 43, 44, 45, 46, 162, 0, 0, - 162, 47, 48, 49, 50, 51, 52, 0, 0, 0, - 0, 0, 54, 0, 162, 162, 0, 0, 0, 162, - 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, - 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, - 0, 47, 48, 49, 50, 51, 52, 103, 0, 0, - 170, 0, 54, 0, 0, 113, 0, 0, 0, 118, - 0, 57, 127, 58, 59, 132, 0, 0, 0, 140, - 141, 142, 143, 144, 0, 0, 0, 149, 150, 182, - 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 182, 0, 0, - 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 183, 183, 183, - 183, 0, 0, 0, 183, 149, 183, 0, 149, 0, - 0, 182, 183, 183, 183, 183, 0, 0, 0, 0, - 0, 0, 149, 149, 0, 183, 183, 149, 183, 183, - 183, 183, 183, 183, 183, 0, 0, 183, 0, 0, - 183, 183, 183, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 149, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 162, 162, - 162, 162, 0, 144, 0, 162, 144, 162, 0, 0, - 0, 0, 0, 162, 162, 162, 162, 0, 0, 0, - 144, 144, 0, 0, 0, 144, 162, 162, 0, 162, - 162, 162, 162, 162, 162, 162, 0, 0, 162, 0, - 0, 162, 162, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 147, 0, 144, 147, 0, 164, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 0, 0, - 147, 147, 0, 0, 0, 147, 0, 0, 0, 0, - 331, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 182, 182, 182, 182, 0, 147, 0, 182, 145, 182, - 0, 145, 0, 347, 0, 182, 182, 182, 182, 0, - 0, 0, 0, 0, 0, 145, 145, 0, 182, 182, - 145, 182, 182, 182, 182, 182, 182, 182, 0, 0, - 182, 0, 0, 182, 182, 182, 149, 149, 149, 149, - 0, 0, 0, 149, 155, 149, 0, 155, 0, 0, - 145, 149, 149, 149, 149, 0, 0, 0, 0, 0, - 0, 155, 155, 0, 149, 149, 155, 149, 149, 149, - 149, 149, 149, 149, 0, 0, 149, 0, 0, 149, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 164, 54, 0, 164, 0, 0, 0, 0, + 0, 0, 0, 57, 0, 58, 59, 0, 0, 164, + 164, 0, 103, 0, 164, 103, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 103, + 103, 0, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 164, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 103, 0, 103, 78, 54, 0, 78, 0, + 113, 0, 0, 0, 118, 0, 57, 127, 58, 59, + 132, 0, 78, 78, 140, 141, 142, 143, 144, 0, + 0, 0, 149, 150, 0, 0, 112, 112, 112, 112, + 0, 0, 0, 112, 168, 168, 168, 168, 0, 0, + 0, 168, 0, 168, 0, 0, 0, 78, 0, 168, + 168, 168, 168, 0, 112, 112, 112, 0, 112, 0, + 0, 202, 168, 168, 168, 0, 168, 168, 168, 168, + 168, 168, 168, 168, 0, 0, 168, 0, 0, 168, + 168, 168, 0, 0, 0, 0, 0, 184, 0, 0, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 184, 184, 0, 0, 0, 184, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 184, + 0, 151, 0, 0, 151, 0, 0, 0, 0, 0, + 0, 0, 273, 164, 164, 164, 164, 0, 151, 151, + 164, 0, 164, 151, 0, 0, 0, 0, 164, 164, + 164, 164, 0, 103, 103, 103, 103, 0, 0, 0, + 103, 164, 164, 164, 0, 164, 164, 164, 164, 164, + 164, 164, 164, 151, 146, 164, 0, 146, 164, 164, + 164, 103, 103, 103, 0, 0, 0, 0, 0, 0, + 0, 146, 146, 0, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, + 0, 0, 0, 78, 0, 0, 0, 0, 0, 335, + 0, 0, 149, 0, 0, 149, 146, 0, 0, 0, + 0, 0, 0, 0, 78, 78, 78, 0, 0, 149, + 149, 0, 0, 0, 149, 0, 0, 0, 0, 0, + 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 147, 149, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 147, 147, 0, + 0, 0, 147, 0, 0, 0, 0, 0, 184, 184, + 184, 184, 0, 0, 0, 184, 0, 184, 0, 0, + 0, 0, 0, 184, 184, 184, 184, 0, 0, 0, + 0, 0, 147, 0, 0, 0, 184, 184, 184, 0, + 184, 184, 184, 184, 184, 184, 184, 184, 0, 0, + 184, 0, 0, 184, 184, 184, 0, 0, 0, 0, + 0, 0, 151, 151, 151, 151, 0, 157, 0, 151, + 157, 151, 0, 0, 0, 0, 0, 151, 151, 151, + 151, 0, 0, 0, 157, 157, 0, 0, 0, 157, + 151, 151, 151, 0, 151, 151, 151, 151, 151, 151, + 151, 151, 0, 0, 151, 0, 0, 151, 151, 151, + 0, 0, 0, 0, 0, 146, 146, 146, 146, 157, + 0, 0, 146, 0, 146, 0, 0, 0, 0, 0, + 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 146, 146, 146, 0, 146, 146, 146, + 146, 146, 146, 146, 146, 0, 0, 146, 0, 0, + 146, 146, 146, 149, 149, 149, 149, 0, 0, 0, + 149, 0, 149, 0, 0, 0, 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173, 0, 0, 173, 0, 155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 144, 144, 144, 144, 0, 0, - 0, 144, 0, 144, 0, 0, 0, 0, 0, 144, - 144, 144, 144, 173, 0, 0, 0, 0, 176, 0, - 0, 176, 144, 144, 0, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 144, 176, 176, 144, 144, 144, - 176, 0, 0, 0, 147, 147, 147, 147, 0, 0, - 0, 147, 0, 147, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 143, 0, - 176, 143, 147, 147, 0, 147, 147, 147, 147, 147, - 147, 147, 0, 0, 147, 143, 143, 147, 147, 147, - 143, 0, 0, 0, 0, 0, 0, 0, 0, 145, - 145, 145, 145, 0, 0, 0, 145, 0, 145, 0, + 0, 149, 149, 149, 0, 149, 149, 149, 149, 149, + 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, + 149, 147, 147, 147, 147, 0, 175, 0, 147, 175, + 147, 0, 0, 0, 0, 0, 147, 147, 147, 147, + 0, 0, 0, 175, 175, 0, 0, 0, 175, 147, + 147, 147, 0, 147, 147, 147, 147, 147, 147, 147, + 147, 0, 0, 147, 0, 0, 147, 147, 147, 0, + 0, 0, 0, 0, 0, 0, 178, 0, 175, 178, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 178, 0, 0, 0, 178, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 157, 0, 157, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 178, 0, + 0, 0, 0, 0, 0, 0, 157, 157, 157, 0, + 157, 157, 157, 157, 157, 157, 157, 157, 145, 0, + 157, 145, 0, 157, 157, 157, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 145, 0, 0, 0, + 145, 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, 77, 0, 0, 77, + 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 77, 77, 0, 0, 0, 77, 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, 185, 0, 0, 77, 0, + 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, + 175, 0, 185, 185, 175, 0, 175, 185, 0, 0, + 0, 0, 175, 175, 175, 175, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 175, 175, 175, 0, 175, + 175, 175, 175, 175, 175, 175, 175, 185, 0, 175, + 0, 0, 175, 175, 175, 0, 0, 178, 178, 178, + 178, 0, 66, 0, 178, 66, 178, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 66, + 66, 0, 0, 0, 66, 178, 178, 178, 0, 178, + 178, 178, 178, 178, 178, 178, 178, 0, 0, 178, + 0, 0, 178, 178, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 144, 0, 0, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, + 145, 145, 145, 0, 144, 144, 145, 0, 145, 144, 0, 0, 0, 0, 145, 145, 145, 145, 0, 0, - 143, 0, 0, 0, 0, 0, 0, 145, 145, 0, - 145, 145, 145, 145, 145, 145, 145, 0, 0, 145, - 0, 0, 145, 145, 145, 155, 155, 155, 155, 0, - 76, 0, 155, 76, 155, 0, 0, 0, 0, 0, - 155, 155, 155, 155, 0, 0, 0, 76, 76, 0, - 0, 0, 76, 155, 155, 0, 155, 155, 155, 155, - 155, 155, 155, 0, 0, 155, 0, 0, 155, 155, - 155, 0, 173, 173, 173, 173, 0, 0, 0, 173, - 0, 173, 76, 0, 0, 0, 0, 173, 173, 173, - 173, 0, 0, 0, 0, 0, 66, 0, 0, 66, - 173, 173, 0, 173, 173, 173, 173, 173, 173, 173, - 0, 0, 173, 66, 66, 173, 173, 173, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, - 176, 176, 176, 0, 0, 0, 176, 0, 176, 0, - 0, 0, 0, 0, 176, 176, 176, 176, 66, 0, - 0, 0, 0, 142, 0, 0, 142, 176, 176, 0, - 176, 176, 176, 176, 176, 176, 176, 0, 0, 176, - 142, 142, 176, 176, 176, 142, 0, 0, 0, 143, - 143, 143, 143, 0, 0, 0, 143, 0, 143, 0, - 0, 0, 0, 0, 143, 143, 143, 143, 0, 0, - 0, 0, 0, 82, 0, 142, 82, 143, 143, 0, - 143, 143, 143, 143, 143, 143, 143, 0, 0, 143, - 82, 82, 143, 143, 143, 82, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, + 0, 145, 145, 145, 145, 145, 145, 145, 145, 144, + 0, 145, 0, 0, 145, 145, 145, 77, 77, 77, + 77, 0, 83, 0, 77, 83, 77, 0, 0, 0, + 0, 0, 77, 77, 77, 77, 0, 0, 0, 83, + 83, 0, 0, 0, 83, 77, 77, 77, 0, 77, + 77, 77, 77, 77, 77, 77, 77, 0, 0, 77, + 0, 0, 77, 77, 77, 0, 185, 185, 185, 185, + 163, 0, 0, 185, 83, 185, 0, 0, 0, 0, + 0, 185, 185, 185, 185, 0, 0, 163, 163, 0, + 0, 0, 163, 0, 185, 185, 185, 0, 185, 185, + 185, 185, 185, 185, 185, 185, 0, 0, 185, 0, + 0, 185, 185, 185, 0, 0, 0, 0, 0, 0, + 0, 80, 163, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 80, 80, + 66, 0, 66, 80, 0, 0, 0, 0, 66, 66, + 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 66, 66, 66, 0, 66, 66, 66, 66, 66, + 66, 66, 66, 80, 0, 66, 0, 0, 66, 66, + 66, 0, 0, 0, 0, 0, 0, 0, 144, 144, + 144, 144, 0, 123, 0, 144, 123, 144, 0, 0, + 0, 0, 0, 144, 144, 144, 144, 0, 0, 0, + 123, 123, 0, 0, 0, 123, 144, 144, 144, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, + 144, 0, 0, 144, 144, 144, 0, 0, 0, 0, + 0, 124, 0, 0, 124, 123, 0, 0, 0, 0, + 0, 0, 0, 83, 83, 83, 83, 0, 124, 124, + 83, 0, 83, 124, 0, 0, 0, 0, 83, 83, + 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 83, 83, 0, 83, 83, 83, 83, 83, + 83, 83, 83, 124, 0, 83, 0, 0, 83, 83, + 83, 163, 163, 163, 163, 0, 119, 0, 163, 119, + 163, 0, 0, 0, 0, 0, 163, 163, 163, 163, + 0, 0, 0, 119, 119, 0, 0, 0, 119, 163, + 163, 163, 0, 163, 163, 163, 163, 163, 163, 163, + 163, 0, 0, 163, 0, 0, 163, 163, 163, 0, + 0, 0, 80, 80, 80, 80, 0, 120, 119, 80, + 120, 80, 0, 0, 0, 0, 0, 80, 80, 80, + 80, 0, 0, 0, 120, 120, 0, 0, 0, 120, + 80, 80, 80, 0, 80, 80, 80, 80, 80, 80, + 80, 80, 0, 0, 80, 0, 0, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, + 0, 0, 141, 0, 0, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 123, 123, 123, 0, 141, + 141, 123, 0, 123, 141, 0, 0, 0, 0, 123, + 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 123, 123, 0, 123, 123, 123, 123, + 123, 123, 123, 123, 141, 0, 123, 0, 0, 0, + 0, 0, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 124, 0, 124, 124, 124, 124, 124, 124, + 124, 124, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 0, 118, 117, + 0, 0, 0, 0, 0, 0, 0, 119, 119, 119, + 119, 0, 118, 118, 119, 0, 119, 118, 0, 0, + 0, 0, 119, 119, 119, 119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 119, 119, 119, 0, 119, + 119, 119, 119, 119, 119, 119, 119, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, + 120, 120, 0, 0, 0, 120, 0, 120, 0, 0, + 0, 0, 0, 120, 120, 120, 120, 0, 0, 0, + 0, 116, 0, 0, 116, 0, 120, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 120, 116, 116, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 141, 141, 141, 0, 0, 0, + 141, 0, 141, 0, 0, 0, 0, 0, 141, 141, + 141, 141, 0, 116, 0, 0, 104, 0, 0, 104, + 0, 141, 141, 141, 0, 141, 141, 141, 141, 141, + 141, 141, 141, 104, 104, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 104, 0, + 0, 0, 0, 117, 117, 117, 117, 0, 0, 0, + 0, 105, 0, 0, 105, 0, 117, 117, 117, 0, + 117, 117, 117, 117, 117, 117, 117, 117, 105, 105, + 0, 0, 0, 105, 0, 0, 118, 118, 118, 118, + 0, 0, 0, 118, 0, 118, 0, 0, 0, 0, + 0, 118, 118, 118, 118, 0, 0, 0, 0, 106, + 0, 0, 106, 105, 118, 118, 118, 0, 118, 118, + 118, 118, 118, 118, 118, 118, 106, 106, 0, 0, + 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, 160, 0, 0, 160, - 0, 76, 76, 76, 76, 161, 0, 0, 76, 0, - 76, 0, 0, 160, 160, 0, 76, 76, 76, 76, - 0, 0, 161, 161, 0, 0, 0, 161, 0, 76, - 76, 0, 76, 76, 76, 76, 76, 76, 76, 0, - 0, 76, 0, 0, 76, 76, 76, 0, 160, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 0, 0, 0, 102, 0, 0, 102, 66, 66, 66, - 66, 79, 0, 0, 66, 0, 66, 0, 0, 0, - 102, 102, 66, 66, 66, 66, 0, 0, 79, 79, - 0, 0, 0, 79, 0, 66, 66, 0, 66, 66, - 66, 66, 66, 66, 66, 0, 0, 66, 0, 0, - 66, 66, 66, 0, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 79, 142, 142, 142, 142, 0, 0, - 0, 142, 121, 142, 0, 121, 0, 0, 0, 142, - 142, 142, 142, 0, 0, 0, 0, 0, 0, 121, - 121, 0, 142, 142, 121, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 142, 0, 0, 142, 142, 142, - 0, 0, 0, 0, 82, 82, 82, 82, 0, 122, - 0, 82, 122, 82, 121, 0, 0, 0, 0, 82, - 82, 82, 82, 0, 0, 0, 122, 122, 0, 0, - 0, 122, 82, 82, 0, 82, 82, 82, 82, 82, - 82, 82, 0, 0, 82, 0, 0, 82, 82, 82, - 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, - 160, 122, 0, 0, 160, 0, 161, 161, 161, 161, - 0, 117, 0, 161, 117, 161, 0, 0, 0, 0, - 0, 161, 161, 161, 161, 160, 160, 0, 117, 117, - 0, 0, 0, 117, 161, 161, 0, 161, 161, 161, - 161, 161, 161, 161, 0, 0, 161, 0, 0, 161, - 161, 161, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 102, 102, 102, 102, 0, 0, - 0, 102, 79, 79, 79, 79, 0, 118, 0, 79, - 118, 79, 0, 0, 0, 0, 0, 79, 79, 79, - 79, 0, 102, 102, 118, 118, 0, 0, 0, 118, - 79, 79, 0, 79, 79, 79, 79, 79, 79, 79, - 0, 0, 79, 0, 0, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 121, 121, 121, 121, 0, 139, 0, - 121, 139, 121, 0, 0, 0, 0, 0, 121, 121, - 121, 121, 0, 0, 0, 139, 139, 0, 0, 0, - 139, 121, 121, 0, 121, 121, 121, 121, 121, 121, - 121, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 122, 122, 122, 122, 0, 115, 0, 122, 115, 122, - 139, 0, 0, 0, 0, 122, 122, 122, 122, 0, - 0, 0, 115, 115, 0, 0, 0, 115, 122, 122, - 0, 122, 122, 122, 122, 122, 122, 122, 0, 0, - 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 116, 0, 0, 116, 0, 0, 0, 115, 0, 0, - 0, 0, 117, 117, 117, 117, 0, 116, 116, 117, - 0, 117, 116, 0, 0, 0, 0, 117, 117, 117, - 117, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 117, 117, 114, 117, 117, 117, 117, 117, 117, 117, - 0, 0, 116, 0, 0, 0, 114, 114, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, - 118, 118, 0, 103, 0, 118, 103, 118, 0, 0, - 0, 114, 0, 118, 118, 118, 118, 0, 0, 0, - 103, 103, 0, 0, 0, 103, 118, 118, 0, 118, - 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 104, 0, 0, 0, 0, 103, 0, 0, 0, 139, - 139, 139, 139, 0, 104, 104, 139, 0, 139, 104, - 0, 0, 0, 0, 139, 139, 139, 139, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 139, 0, - 139, 139, 139, 139, 139, 139, 139, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, - 0, 105, 0, 115, 105, 115, 0, 0, 0, 0, - 0, 115, 115, 115, 115, 0, 0, 0, 105, 105, - 0, 0, 0, 105, 115, 115, 0, 115, 115, 115, - 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 116, 116, 116, 0, 0, 0, 116, 165, - 116, 0, 165, 105, 0, 0, 116, 116, 116, 116, - 0, 0, 0, 0, 0, 0, 165, 165, 0, 116, - 116, 165, 116, 116, 116, 116, 116, 116, 116, 0, - 114, 114, 114, 114, 0, 164, 0, 114, 164, 114, - 0, 0, 0, 0, 0, 114, 114, 114, 114, 0, - 0, 165, 164, 164, 0, 0, 0, 164, 114, 114, - 0, 114, 114, 114, 114, 114, 114, 114, 0, 0, - 0, 0, 0, 0, 103, 103, 103, 103, 0, 128, - 0, 103, 128, 103, 0, 0, 0, 164, 0, 103, - 103, 103, 103, 0, 0, 0, 128, 128, 0, 0, - 0, 128, 103, 103, 0, 103, 103, 103, 103, 103, - 103, 103, 0, 0, 0, 0, 0, 0, 104, 104, - 104, 104, 0, 141, 0, 104, 141, 104, 0, 0, - 0, 128, 0, 104, 104, 104, 104, 0, 0, 0, - 141, 141, 0, 0, 0, 141, 104, 104, 0, 104, - 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, - 138, 0, 0, 138, 0, 0, 0, 0, 0, 0, - 107, 0, 0, 107, 0, 141, 0, 138, 138, 0, - 0, 0, 105, 105, 105, 105, 0, 107, 107, 105, - 0, 105, 107, 0, 0, 0, 0, 105, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 106, 0, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 0, 107, 107, 116, + 0, 116, 107, 0, 0, 0, 0, 116, 116, 116, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 116, 116, 0, 116, 116, 116, 116, 116, 116, + 116, 116, 107, 0, 0, 167, 0, 0, 167, 0, + 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, + 104, 0, 167, 167, 104, 0, 104, 167, 0, 0, + 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 104, 104, 0, 104, + 104, 104, 104, 104, 104, 104, 104, 167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 166, 0, 0, 166, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 0, 166, 166, 105, + 0, 105, 166, 0, 0, 0, 0, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 105, 138, 105, 105, 105, 105, 105, 105, 0, - 0, 0, 107, 0, 0, 109, 0, 0, 109, 0, - 165, 165, 165, 165, 0, 110, 0, 165, 110, 165, - 0, 0, 109, 109, 0, 165, 165, 109, 0, 0, - 0, 0, 110, 110, 0, 0, 0, 110, 165, 165, - 0, 165, 165, 165, 165, 165, 164, 164, 164, 164, - 0, 112, 0, 164, 112, 164, 0, 109, 0, 0, - 0, 164, 164, 0, 0, 0, 0, 110, 112, 112, - 0, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 0, 111, 0, 128, 111, 128, - 0, 0, 0, 112, 0, 128, 128, 0, 0, 0, - 0, 0, 111, 111, 0, 0, 0, 111, 128, 128, - 0, 128, 128, 128, 128, 128, 0, 77, 0, 0, - 77, 0, 0, 0, 141, 141, 141, 141, 0, 0, - 0, 141, 0, 141, 77, 77, 0, 111, 0, 141, - 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 141, 141, 0, 141, 141, 141, 141, 141, - 0, 138, 138, 138, 138, 0, 0, 0, 138, 77, - 0, 107, 107, 107, 107, 0, 0, 0, 107, 0, - 107, 0, 0, 0, 0, 0, 0, 107, 0, 138, - 138, 0, 138, 0, 0, 0, 0, 0, 0, 107, - 107, 0, 107, 107, 107, 107, 107, 0, 0, 0, + 105, 105, 105, 0, 105, 105, 105, 105, 105, 105, + 105, 0, 166, 0, 0, 130, 0, 0, 130, 0, + 106, 106, 106, 106, 0, 143, 0, 106, 143, 106, + 0, 0, 130, 130, 0, 106, 106, 130, 106, 0, + 0, 0, 143, 143, 0, 0, 0, 143, 106, 106, + 106, 0, 106, 106, 106, 106, 106, 106, 106, 0, + 0, 0, 0, 0, 0, 0, 108, 130, 0, 108, + 0, 107, 107, 107, 107, 0, 0, 143, 107, 0, + 107, 0, 0, 108, 108, 0, 107, 107, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, + 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 109, 0, 0, 109, 108, 0, + 0, 0, 0, 0, 0, 0, 167, 167, 167, 167, + 0, 109, 109, 167, 0, 167, 109, 0, 0, 0, + 0, 167, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 167, 167, 0, 167, 167, + 167, 167, 167, 167, 110, 0, 109, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 109, 109, 109, - 0, 0, 0, 109, 0, 109, 110, 110, 110, 110, - 0, 0, 0, 110, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 0, 0, 110, 110, 0, 110, 110, 110, - 110, 0, 112, 112, 112, 112, 0, 0, 0, 112, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 110, 0, 0, 0, 110, 0, 0, 0, + 0, 166, 166, 166, 166, 0, 0, 0, 166, 0, + 166, 0, 0, 0, 0, 0, 166, 166, 0, 0, + 0, 0, 111, 0, 0, 111, 110, 0, 0, 166, + 166, 166, 0, 166, 166, 166, 166, 166, 166, 111, + 111, 0, 0, 0, 111, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, + 0, 113, 0, 130, 113, 130, 143, 143, 143, 143, + 0, 130, 130, 143, 111, 143, 0, 0, 113, 113, + 0, 143, 143, 113, 130, 130, 130, 0, 130, 130, + 130, 130, 130, 130, 143, 143, 143, 0, 143, 143, + 143, 143, 143, 143, 0, 0, 0, 108, 108, 108, + 108, 0, 0, 113, 108, 0, 108, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 114, 0, + 0, 114, 0, 0, 0, 108, 108, 108, 0, 108, + 108, 108, 108, 108, 108, 114, 114, 0, 0, 0, + 114, 0, 0, 0, 0, 109, 109, 109, 109, 0, + 0, 0, 109, 0, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 115, 0, 0, 115, + 114, 0, 0, 109, 109, 109, 0, 109, 109, 109, + 109, 109, 109, 115, 115, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 0, 110, 110, 110, 110, 0, + 0, 0, 110, 0, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 110, 110, 110, 0, 110, 110, 110, + 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 111, 111, 111, 111, 0, 0, 0, + 111, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 111, 111, 111, 111, - 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, + 0, 111, 111, 111, 0, 111, 111, 111, 111, 111, + 0, 0, 113, 113, 113, 113, 0, 0, 0, 113, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 111, 111, 0, 111, 77, 77, - 77, 77, 0, 0, 0, 77, 0, 0, 0, 0, + 113, 113, 113, 0, 113, 113, 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, + 114, 114, 114, 0, 0, 0, 114, 0, 114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, + 0, 114, 114, 114, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 115, 115, 115, + 115, 0, 0, 0, 115, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 115, 115, 115, 0, 115, + 115, 115, }; static short yycheck[] = { 15, - 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, - 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, - 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, - 59, 40, 91, 49, 41, 58, 59, 41, 362, 131, - 63, 257, 91, 41, 60, 61, 46, 47, 59, 94, - 40, 15, 59, 53, 41, 40, 100, 41, 300, 301, - 105, 59, 41, 59, 123, 65, 66, 67, 68, 393, - 93, 40, 59, 41, 123, 41, 41, 91, 91, 123, - 41, 45, 91, 44, 48, 40, 93, 131, 40, 123, - 41, 123, 123, 59, 123, 41, 295, 58, 59, 115, - 116, 44, 63, 106, 107, 108, 109, 110, 111, 123, - 123, 40, 123, 59, 123, 40, 116, 133, 0, 59, - 36, 37, 257, 59, 40, 89, 59, 278, 314, 59, - 123, 41, 93, 266, 267, 268, 40, 270, 271, 338, - 104, 157, 158, 159, 160, 161, 162, 163, 64, 59, - 59, 33, 276, 277, 36, 37, 38, 41, 40, 44, - 42, 43, 260, 45, 297, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 123, 59, 41, 59, 0, 41, - 272, 257, 64, 199, 383, 40, 278, 203, 204, 40, - 206, 155, 208, 41, 59, 298, 40, 59, 93, 215, - 93, 217, 218, 8, 9, 257, 209, 125, 298, 91, - 226, 33, 317, 91, 36, 37, 38, 93, 40, 93, - 42, 43, 36, 45, 257, 257, 300, 301, 272, 41, - 262, 300, 301, 298, 278, 125, 252, 59, 254, 255, - 260, 123, 64, 125, 126, 258, 0, 300, 301, 272, - 273, 274, 275, 300, 301, 91, 279, 40, 281, 93, - 301, 296, 300, 301, 298, 272, 273, 274, 275, 91, - 300, 301, 279, 300, 301, 370, 41, 300, 301, 33, - 303, 304, 36, 37, 38, 260, 40, 40, 42, 43, - 41, 45, 308, 300, 301, 41, 300, 301, 314, 41, - 41, 123, 41, 125, 126, 59, 125, 271, 125, 273, - 64, 272, 273, 274, 275, 279, 300, 301, 279, 59, - 281, 300, 301, 125, 340, 125, 287, 288, 289, 290, - 59, 41, 300, 301, 44, 300, 301, 91, 123, 300, - 301, 41, 303, 304, 305, 306, 307, 308, 309, 300, - 301, 312, 125, 63, 315, 316, 317, 300, 301, 41, - 300, 301, 41, 379, 300, 301, 59, 300, 301, 123, - 300, 301, 126, 40, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 41, 41, 123, 279, 280, 41, - 282, 283, 284, 285, 286, 300, 301, 300, 301, 291, - 292, 293, 294, 295, 296, 297, 63, 123, 312, 41, - 302, 315, 316, 317, 300, 301, 300, 301, 59, 311, - 41, 313, 314, 59, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 59, 41, 289, 279, 280, 35, - 282, 283, 284, 285, 286, 52, 300, 301, 52, 291, - 292, 293, 294, 295, 296, 297, 309, 15, 158, 312, - 302, 379, 315, 316, 317, 206, 340, 24, -1, 311, - -1, 313, 314, 309, 273, 41, 312, -1, 44, 315, - 316, 317, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 58, 59, -1, 269, -1, 63, 272, 273, - 274, 275, -1, 289, 290, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, 125, -1, 291, 292, 293, - 294, 295, 296, 309, -1, -1, 312, 93, 302, 315, - 316, 317, -1, -1, -1, -1, -1, 311, 33, 313, - 314, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 45, 281, -1, 125, -1, -1, -1, 287, 288, 289, - 290, -1, -1, 58, 59, -1, -1, -1, 63, 64, - -1, -1, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, - 274, 275, -1, -1, -1, 279, 91, -1, 93, 33, - -1, -1, 36, 37, 38, -1, 40, 41, 42, 43, - 44, 45, -1, -1, 281, -1, 300, 301, -1, -1, - 287, 288, 289, 290, 58, 59, -1, -1, -1, 63, - 64, 126, -1, -1, -1, -1, 303, 304, 305, 306, - 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, - 317, -1, -1, -1, -1, -1, 266, 267, 268, 93, - 270, 271, 33, 289, 290, 36, 37, 38, -1, 40, - -1, 42, 43, -1, 45, -1, 359, 360, -1, -1, - -1, 364, 308, 309, -1, -1, 312, 297, 59, 315, - 316, 317, 126, 64, 266, 267, 268, 380, 270, 271, - -1, 384, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - 91, 287, 288, 289, 290, 297, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, 123, -1, -1, 126, -1, -1, -1, -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, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 311, 312, 313, 314, - 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, -1, -1, -1, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, -1, 311, 312, 313, - 314, 315, 316, 317, -1, 256, 257, 258, 259, 260, - 261, 63, 263, 264, 265, -1, -1, -1, 269, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 280, + 95, 59, 59, 41, 36, 36, 59, 210, 123, 40, + 366, 100, 201, 59, 36, 41, 59, 59, 40, 276, + 277, 41, 41, 40, 44, 40, 93, 91, 36, 37, + 93, 91, 40, 49, 257, 94, 8, 9, 58, 59, + 59, 397, 131, 63, 60, 61, 105, 44, 257, 93, + 106, 107, 108, 109, 110, 111, 64, 41, 41, 123, + 41, 41, 198, 123, 41, 59, 123, 41, 204, 91, + 44, 40, 40, 93, 91, 59, 91, 123, 59, 41, + 123, 123, 266, 267, 268, 41, 270, 271, 40, 63, + 0, 123, 41, 41, 41, 40, 299, 59, 40, 115, + 116, 123, 40, 59, 40, 40, 123, 257, 123, 278, + 59, 59, 59, 297, 123, 363, 364, 133, 41, 40, + 368, 123, 59, 33, 44, 260, 36, 37, 38, 318, + 40, 257, 42, 43, 40, 45, 384, 41, 41, 342, + 388, 157, 158, 159, 160, 161, 162, 163, 164, 59, + 272, 273, 274, 275, 64, 211, 40, 279, 41, 59, + 125, 41, 40, 319, 41, 298, 91, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 59, 298, 300, 301, + 302, 91, 257, 298, 387, 201, 0, 276, 36, 205, + 206, 59, 208, 282, 210, 59, 41, 125, 59, 257, + 91, 217, 314, 219, 220, 317, 318, 319, 260, 302, + 93, 40, 228, 123, 40, 125, 126, 41, 41, 33, + 93, 260, 36, 37, 38, 257, 40, 59, 42, 43, + 262, 45, 59, 300, 301, 302, 258, 300, 301, 302, + 256, 298, 258, 259, 41, 59, 41, 300, 301, 302, + 64, 41, 272, 273, 274, 275, 300, 301, 302, 279, + 41, 281, 300, 301, 302, 296, 125, 287, 288, 289, + 290, 125, 125, 41, 300, 301, 302, 91, 93, 374, + 300, 301, 302, 93, 304, 305, 306, 307, 308, 309, + 310, 311, 125, 59, 314, 63, 312, 317, 318, 319, + 41, 123, 318, 300, 301, 302, 125, 281, 93, 123, + 41, 125, 126, 287, 288, 289, 290, 300, 301, 302, + 300, 301, 302, 300, 301, 302, 41, 59, 344, 40, + 304, 305, 306, 307, 308, 309, 310, 311, 41, 41, + 314, 123, 41, 317, 318, 319, 256, 257, 258, 259, + 260, 261, 123, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 41, 383, 59, 279, + 280, 0, 282, 283, 284, 285, 286, 300, 301, 302, + 41, 291, 292, 293, 294, 295, 296, 297, 59, 272, + 273, 274, 275, 303, 41, 59, 279, 300, 301, 302, + 300, 301, 302, 313, 33, 315, 316, 36, 37, 38, + 41, 40, 35, 42, 43, 52, 45, 300, 301, 302, + 300, 301, 302, 300, 301, 302, 15, 300, 301, 302, + 59, 52, 300, 301, 302, 64, 300, 301, 302, 300, + 301, 302, 256, 257, 258, 259, 260, 261, 158, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 91, 344, 383, 279, 280, 125, 282, 283, + 284, 285, 286, 300, 301, 302, 125, 291, 292, 293, + 294, 295, 296, 297, 208, 300, 301, 302, 24, 303, + 300, 301, 302, 277, 123, -1, -1, 126, -1, 313, + 33, 315, 316, 36, 37, 38, -1, 40, 41, 42, + 43, 44, 45, 281, -1, 300, 301, 302, -1, 287, + 288, 289, 290, -1, -1, 58, 59, 300, 301, 302, + 63, 64, -1, -1, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, -1, -1, 314, -1, -1, 317, + 318, 319, -1, -1, -1, -1, -1, -1, 91, 289, + 93, -1, 29, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, 46, + 47, 311, -1, -1, 314, -1, 53, 317, 318, 319, + 58, 59, -1, 126, -1, 63, 64, -1, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, 266, 267, + 268, -1, 270, 271, -1, -1, -1, 266, 267, 268, + -1, 270, 271, -1, -1, 93, -1, 256, 257, 258, + 259, 260, 261, -1, 263, 264, 265, -1, -1, 297, + 269, -1, 58, 272, 273, 274, 275, 63, 297, 116, + 279, 280, -1, 282, 283, 284, 285, 286, 126, -1, + -1, -1, 291, 292, 293, 294, 295, 296, -1, -1, + -1, -1, -1, -1, 303, -1, -1, 28, 29, -1, + 287, 288, 289, 290, 313, 311, 315, 316, 314, 40, + 15, 317, 318, 319, -1, 46, 47, 48, -1, -1, + -1, 52, 53, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, -1, 65, 66, 67, 68, -1, -1, + 45, -1, -1, 48, 257, 258, 259, 260, 261, -1, + 263, 264, 265, -1, -1, -1, 269, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 89, 116, 63, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 104, + 313, 314, 315, 316, 317, 318, 319, -1, -1, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + 46, 269, -1, -1, 272, 273, 274, 275, 54, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + 155, 182, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, + 318, 319, 33, -1, 100, 36, 37, 38, 209, 40, + -1, 42, 43, -1, 45, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 123, 59, -1, + -1, -1, -1, 64, -1, 131, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, 289, + 290, 317, 318, 319, -1, 339, 340, 341, -1, 343, + 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, + 40, 311, 42, 43, 314, 45, -1, 317, 318, 319, + -1, -1, 287, 288, 289, 290, 370, -1, -1, 59, + -1, -1, 123, 377, 64, 126, -1, 381, -1, -1, + 275, -1, 277, 308, 309, 310, 311, -1, 283, 314, + 394, 395, 317, 318, 319, -1, -1, -1, -1, -1, + -1, 91, -1, 33, -1, -1, 36, 37, 38, -1, + 40, -1, 42, 43, 281, 45, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 123, 64, -1, 126, 304, 305, 306, + 307, 308, 309, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, -1, -1, -1, -1, -1, -1, -1, + 276, 91, 289, 290, -1, -1, 282, 33, -1, -1, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, -1, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, 123, -1, -1, 126, -1, 64, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + -1, 272, 273, 274, 275, 91, -1, 63, 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, - -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, - 311, 45, 313, 314, -1, -1, -1, -1, 335, 336, - 337, -1, 339, -1, -1, 59, -1, -1, -1, -1, - 64, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, - 58, 59, -1, -1, -1, -1, 373, 91, -1, 33, - 377, -1, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, 390, 391, -1, 28, 29, -1, -1, - -1, -1, -1, -1, -1, 93, -1, -1, 40, 123, - 64, -1, 126, -1, 46, 47, 48, -1, -1, 33, - 52, 53, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, 65, 66, 67, 68, 91, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, - 64, -1, -1, -1, -1, -1, -1, -1, 41, 308, - 309, 44, -1, 312, -1, -1, 315, 316, 317, 123, - -1, -1, 126, -1, -1, 58, 59, 91, -1, -1, - 63, -1, -1, 33, 116, -1, 36, 37, 38, -1, - 40, -1, 42, 43, -1, 45, -1, -1, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, 123, - 93, -1, 126, -1, 64, -1, -1, -1, -1, -1, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 91, 256, 257, 258, 259, 260, 261, 180, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, 123, -1, 207, 126, 291, 292, 293, - 294, 295, 296, -1, 272, 273, 274, 275, 302, -1, - -1, 279, -1, -1, -1, -1, -1, 311, -1, 313, - 314, -1, -1, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 300, 301, -1, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, 257, 258, 259, 260, 261, 302, 263, - 264, 265, -1, -1, -1, 269, -1, 311, -1, 313, - 314, -1, 58, -1, -1, -1, 280, 63, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, -1, -1, -1, 302, 272, - 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, - 314, -1, -1, -1, 287, 288, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, 300, 301, 269, - 303, 304, 305, 306, 307, 308, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, -1, + -1, -1, 303, -1, -1, -1, -1, 123, -1, -1, + 126, -1, 313, -1, 315, 316, 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, -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, - 33, -1, 302, 36, 37, 38, -1, 40, -1, 42, - 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, 64, -1, -1, -1, 287, 288, 289, 290, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, 305, 306, 307, 308, 309, 91, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 64, -1, -1, -1, 287, 288, 289, 290, -1, - 33, -1, -1, 36, 37, 38, -1, 40, -1, 42, - 43, -1, 45, 126, 306, 307, 308, 309, 91, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, 126, -1, 281, -1, -1, 91, -1, - 93, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 64, -1, -1, -1, -1, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, 126, 287, 288, 289, 290, 91, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, -1, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - -1, 64, 287, 126, 289, 290, -1, -1, -1, -1, - -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 308, 309, -1, 269, 312, 91, -1, - 315, 316, 317, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, 126, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, -1, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, -1, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, -1, 33, -1, 302, - 36, 37, 38, -1, 40, 41, 42, 43, 311, 45, - 313, 314, -1, -1, 257, 258, 259, 260, 261, -1, - 263, 264, 265, -1, -1, -1, 269, -1, 64, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, -1, 91, -1, 33, -1, 302, - 36, 37, 38, -1, 40, 41, 42, 43, 311, 45, - 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - 126, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, 91, 33, -1, 63, 36, - 37, 38, -1, 40, -1, 42, 43, -1, 45, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 64, 93, -1, - 126, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 91, -1, -1, -1, -1, -1, + -1, -1, 33, 303, -1, 36, 37, 38, -1, 40, + -1, 42, 43, 313, 45, 315, 316, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, -1, 269, + -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + 91, -1, 41, 303, -1, 44, -1, 287, -1, 289, + 290, -1, -1, 313, -1, 315, 316, -1, -1, 58, + 59, 257, 258, 259, 260, 261, -1, 263, 264, 265, + 310, 311, 123, 269, 314, 126, -1, 317, 318, 319, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 41, -1, -1, 44, -1, 302, -1, -1, 126, - -1, -1, -1, -1, -1, 311, -1, 313, 314, 59, - -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, 93, -1, 291, 292, 293, 294, 295, - 296, -1, 64, -1, -1, -1, 302, 272, 273, 274, - 275, -1, -1, -1, 279, 311, 281, 313, 314, 256, - 257, 258, 259, 260, 261, -1, 263, 264, 265, 91, - -1, -1, 269, -1, -1, 300, 301, -1, 303, 304, - 305, 306, 307, 280, -1, 282, 283, 284, 285, 286, - -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 33, 126, 302, 36, 37, 38, -1, - 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 286, -1, -1, -1, 93, 291, 292, 293, 294, 295, + 296, 33, -1, -1, 36, 37, 38, 303, 40, -1, + 42, 43, -1, 45, -1, 281, -1, 313, -1, 315, + 316, 287, 288, 289, 290, -1, -1, 59, -1, -1, + -1, -1, 64, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, 287, 288, 289, 290, -1, 91, + -1, 33, -1, -1, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, 307, 308, 309, 310, 311, -1, + -1, 314, -1, -1, 317, 318, 319, -1, -1, -1, + -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, 91, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, 33, -1, -1, 36, + 37, 38, 303, 40, 126, 42, 43, -1, 45, -1, + -1, -1, 313, -1, 315, 316, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, 64, -1, -1, + 279, -1, -1, -1, -1, -1, -1, 33, -1, -1, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, 300, 301, 302, 91, 304, 93, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, + 41, -1, -1, 44, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, -1, -1, 269, 59, 126, + -1, -1, -1, -1, -1, 91, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, -1, -1, -1, + -1, 303, 93, -1, -1, -1, -1, -1, -1, -1, + 126, 313, -1, 315, 316, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, + 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 64, -1, -1, -1, + -1, 303, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 313, -1, 315, 316, -1, -1, -1, 41, -1, + -1, 44, -1, 91, -1, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, 58, 59, 317, 318, 319, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, 269, 41, -1, -1, 44, -1, 126, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + 93, 59, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 257, 258, 259, 260, 261, 303, 263, 264, 265, + -1, -1, -1, 269, -1, -1, 313, -1, 315, 316, + -1, -1, -1, -1, 280, 93, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, 272, 273, 274, 275, -1, 33, 303, 279, 36, + 37, 38, -1, 40, 41, 42, 43, 313, 45, 315, + 316, 287, 288, 289, 290, -1, -1, -1, -1, 300, + 301, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 91, -1, -1, -1, -1, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, 33, + -1, 269, 36, 37, 38, -1, 40, 41, 42, 43, + -1, 45, 280, -1, 282, 283, 284, 285, 286, 126, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 64, -1, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 313, -1, 315, 316, 272, + 273, 274, 275, -1, -1, -1, 279, 91, -1, -1, + -1, -1, 33, -1, -1, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, 300, 301, 302, + -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 126, 64, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, 58, 59, -1, -1, -1, -1, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, -1, 45, -1, 93, + 257, 258, 259, 260, 261, 126, 263, 264, 265, -1, + -1, -1, 269, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, - 40, -1, 42, 43, 311, 45, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 303, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 313, 33, 315, 316, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, -1, -1, 257, 258, 259, 260, 261, 126, 263, + 264, 265, -1, -1, -1, 269, -1, -1, 64, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, 91, -1, -1, -1, 303, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, + -1, 315, 316, -1, -1, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 126, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, 272, 273, + 274, 275, 303, -1, -1, 279, -1, -1, -1, -1, + -1, -1, 313, 33, 315, 316, 36, 37, 38, -1, + 40, 41, 42, 43, -1, 45, 300, 301, 302, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, -1, 64, -1, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + -1, 91, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 313, 33, 315, 316, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, -1, + -1, 257, 258, 259, 260, 261, 126, 263, 264, 265, + -1, -1, -1, 269, -1, -1, -1, 64, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, -1, -1, -1, 91, -1, -1, 303, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 313, 44, 315, + 316, -1, -1, 41, -1, -1, 44, -1, -1, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, 126, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, - 300, 263, 264, 265, -1, -1, -1, 269, -1, -1, - -1, -1, -1, -1, -1, -1, 126, -1, 280, -1, - 282, 283, 284, 285, 286, -1, 41, -1, -1, 291, - 292, 293, 294, 295, 296, -1, -1, -1, -1, -1, - 302, -1, -1, 58, 59, -1, -1, -1, 63, 311, - -1, 313, 314, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, 41, -1, -1, - 44, 291, 292, 293, 294, 295, 296, -1, -1, -1, - -1, -1, 302, -1, 58, 59, -1, -1, -1, 63, - -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, 33, -1, -1, - 63, -1, 302, -1, -1, 41, -1, -1, -1, 45, - -1, 311, 48, 313, 314, 51, -1, -1, -1, 55, - 56, 57, 58, 59, -1, -1, -1, 63, 64, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 102, 272, 273, 274, - 275, -1, -1, -1, 279, 41, 281, -1, 44, -1, - -1, 93, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 58, 59, -1, 300, 301, 63, 303, 304, - 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, - 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 191, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 41, 303, -1, 44, -1, -1, -1, -1, + -1, -1, -1, 313, -1, 315, 316, -1, -1, 58, + 59, -1, 41, -1, 63, 44, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, 58, + 59, -1, 269, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 280, 93, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, 33, -1, 93, 41, 303, -1, 44, -1, + 41, -1, -1, -1, 45, -1, 313, 48, 315, 316, + 51, -1, 58, 59, 55, 56, 57, 58, 59, -1, + -1, -1, 63, 64, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, -1, -1, -1, 93, -1, 287, + 288, 289, 290, -1, 300, 301, 302, -1, 304, -1, + -1, 102, 300, 301, 302, -1, 304, 305, 306, 307, + 308, 309, 310, 311, -1, -1, 314, -1, -1, 317, + 318, 319, -1, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 93, + -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, 193, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, 41, 314, -1, 44, 317, 318, + 319, 300, 301, 302, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, 280, + -1, -1, 41, -1, -1, 44, 93, -1, -1, -1, + -1, -1, -1, -1, 300, 301, 302, -1, -1, 58, + 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, + -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 41, -1, -1, 44, 93, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, - -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, - 276, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 93, -1, 279, 41, 281, - -1, 44, -1, 309, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, 58, 59, -1, 300, 301, - 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, - -1, -1, -1, 279, 41, 281, -1, 44, -1, -1, - 93, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 58, 59, -1, 300, 301, 63, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, 93, -1, -1, -1, -1, 41, -1, - -1, 44, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, 58, 59, 315, 316, 317, - 63, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, 41, -1, - 93, 44, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, 58, 59, 315, 316, 317, - 63, -1, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - 93, -1, -1, -1, -1, -1, -1, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, - 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, - -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, - 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, - 317, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, 93, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, 41, -1, -1, 44, - 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, 58, 59, 315, 316, 317, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, 93, -1, - -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - 58, 59, 315, 316, 317, 63, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, 41, -1, 93, 44, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - 58, 59, 315, 316, 317, 63, -1, -1, -1, -1, + -1, -1, 93, -1, -1, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, -1, -1, + 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, 317, 318, 319, + -1, -1, -1, -1, -1, 272, 273, 274, 275, 93, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, -1, -1, 314, -1, -1, 317, 318, + 319, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, + -1, -1, -1, -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, 93, -1, + -1, -1, -1, -1, -1, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 41, -1, + 314, 44, -1, 317, 318, 319, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 93, 41, -1, -1, 44, - -1, 272, 273, 274, 275, 41, -1, -1, 279, -1, - 281, -1, -1, 58, 59, -1, 287, 288, 289, 290, - -1, -1, 58, 59, -1, -1, -1, 63, -1, 300, - 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, - -1, 312, -1, -1, 315, 316, 317, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - -1, -1, -1, 41, -1, -1, 44, 272, 273, 274, - 275, 41, -1, -1, 279, -1, 281, -1, -1, -1, - 58, 59, 287, 288, 289, 290, -1, -1, 58, 59, - -1, -1, -1, 63, -1, 300, 301, -1, 303, 304, - 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, - 315, 316, 317, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, 41, 281, -1, 44, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 58, - 59, -1, 300, 301, 63, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, - -1, -1, -1, -1, 272, 273, 274, 275, -1, 41, - -1, 279, 44, 281, 93, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, -1, - -1, 63, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, 93, -1, -1, 279, -1, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, - -1, 287, 288, 289, 290, 300, 301, -1, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, 272, 273, 274, 275, -1, 41, -1, 279, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, 314, + -1, -1, 317, 318, 319, -1, -1, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, -1, -1, 314, + -1, -1, 317, 318, 319, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, + -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, 302, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 93, + -1, 314, -1, -1, 317, 318, 319, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, -1, -1, 314, + -1, -1, 317, 318, 319, -1, 272, 273, 274, 275, + 41, -1, -1, 279, 93, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 58, 59, -1, + -1, -1, 63, -1, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, + -1, 41, 93, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, -1, 314, -1, -1, 317, 318, + 319, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, -1, -1, + 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, + -1, 41, -1, -1, 44, 93, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, -1, 314, -1, -1, 317, 318, + 319, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, - 290, -1, 300, 301, 58, 59, -1, -1, -1, 63, - 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, - 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, 58, 59, -1, -1, -1, - 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, - 309, -1, -1, 312, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, 93, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, 58, + 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, 302, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 93, -1, 314, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + -1, 41, -1, -1, 44, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 58, 59, + -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, -1, 93, -1, -1, 41, -1, -1, 44, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + -1, 41, -1, -1, 44, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 58, 59, + -1, -1, -1, 63, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, -1, 41, + -1, -1, 44, 93, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 41, 93, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, -1, 41, - 300, 301, 44, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 93, -1, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, - -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, - 44, -1, -1, -1, -1, 93, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 93, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, - -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 41, - 281, -1, 44, 93, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, 58, 59, -1, 300, - 301, 63, 303, 304, 305, 306, 307, 308, 309, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, 93, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - -1, -1, -1, -1, 272, 273, 274, 275, -1, 41, - -1, 279, 44, 281, -1, -1, -1, 93, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, -1, - -1, 63, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, - -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, -1, -1, -1, -1, -1, + 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 93, -1, -1, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, 93, -1, 58, 59, -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, -1, + -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 300, 301, 93, 303, 304, 305, 306, 307, 308, -1, - -1, -1, 93, -1, -1, 41, -1, -1, 44, -1, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, -1, 93, -1, -1, 41, -1, -1, 44, -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, 58, 59, -1, 287, 288, 63, -1, -1, + -1, -1, 58, 59, -1, 287, 288, 63, 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, 93, -1, -1, - -1, 287, 288, -1, -1, -1, -1, 93, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, -1, 93, -1, 287, 288, -1, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, -1, 41, -1, -1, - 44, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, 58, 59, -1, 93, -1, 287, - 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, -1, 288, -1, 300, - 301, -1, 303, -1, -1, -1, -1, -1, -1, 300, - 301, -1, 303, 304, 305, 306, 307, -1, -1, -1, + 302, -1, 304, 305, 306, 307, 308, 309, 310, -1, + -1, -1, -1, -1, -1, -1, 41, 93, -1, 44, + -1, 272, 273, 274, 275, -1, -1, 93, 279, -1, + 281, -1, -1, 58, 59, -1, 287, 288, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + -1, -1, -1, -1, 41, -1, -1, 44, 93, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 58, 59, 279, -1, 281, 63, -1, -1, -1, + -1, 287, 288, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, 41, -1, -1, 44, 93, -1, -1, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 58, + 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 304, 305, - 306, 307, -1, -1, 300, 301, -1, 303, 304, 305, - 306, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 41, -1, 279, 44, 281, 272, 273, 274, 275, + -1, 287, 288, 279, 93, 281, -1, -1, 58, 59, + -1, 287, 288, 63, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, -1, -1, -1, 272, 273, 274, + 275, -1, -1, 93, 279, -1, 281, -1, -1, -1, + -1, -1, -1, 288, -1, -1, -1, -1, 41, -1, + -1, 44, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 93, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 300, 301, -1, 303, 304, 305, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + 300, 301, 302, -1, 304, 305, 306, 307, -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, 272, + 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, 302, + -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 300, 301, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 317 +#define YYMAXTOKEN 319 #if YYDEBUG static char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1176,9 +1274,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", -"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", -"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","DOROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"DORDOR","ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN", +"POWOP","PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1256,6 +1354,7 @@ static char *yyrule[] = { "use : USE startsub $$1 WORD WORD listexpr ';'", "expr : expr ANDOP expr", "expr : expr OROP expr", +"expr : expr DOROP expr", "expr : argexpr", "argexpr : argexpr ','", "argexpr : argexpr ',' term", @@ -1295,6 +1394,7 @@ static char *yyrule[] = { "termbinop : term DOTDOT term", "termbinop : term ANDAND term", "termbinop : term OROR term", +"termbinop : term DORDOR term", "termbinop : term MATCHOP term", "termunop : '-' term", "termunop : '+' term", @@ -1395,7 +1495,7 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 793 "perly.y" +#line 797 "perly.y" /* PROGRAM */ /* more stuff added to make perly_c.diff easier to apply */ @@ -1405,7 +1505,7 @@ static char *yyrule[] = { #endif #define yyparse() Perl_yyparse(pTHX) -#line 1409 "perly.c" +#line 1509 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -1933,148 +2033,148 @@ case 74: #line 421 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 76: -#line 427 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 75: +#line 423 "perly.y" +{ yyval.opval = newLOGOP(OP_DOR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 77: #line 429 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } +break; +case 78: +#line 431 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 79: -#line 435 "perly.y" +case 80: +#line 437 "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 80: -#line 438 "perly.y" +case 81: +#line 440 "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 81: -#line 441 "perly.y" +case 82: +#line 443 "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 82: -#line 446 "perly.y" +case 83: +#line 448 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 83: -#line 450 "perly.y" +case 84: +#line 452 "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 84: -#line 455 "perly.y" +case 85: +#line 457 "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 85: -#line 460 "perly.y" -{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } -break; case 86: #line 462 "perly.y" -{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 87: #line 464 "perly.y" -{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } +{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 88: #line 466 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } +break; +case 89: +#line 468 "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 91: -#line 480 "perly.y" -{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } -break; case 92: #line 482 "perly.y" -{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; case 93: #line 484 "perly.y" +{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +break; +case 94: +#line 486 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 94: -#line 488 "perly.y" +case 95: +#line 490 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 95: -#line 492 "perly.y" +case 96: +#line 494 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 96: -#line 495 "perly.y" +case 97: +#line 497 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 97: -#line 500 "perly.y" +case 98: +#line 502 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 98: -#line 505 "perly.y" +case 99: +#line 507 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 99: -#line 508 "perly.y" +case 100: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 100: -#line 513 "perly.y" +case 101: +#line 515 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 101: -#line 517 "perly.y" +case 102: +#line 519 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 102: -#line 523 "perly.y" -{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } -break; case 103: #line 525 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } +{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; case 104: #line 527 "perly.y" +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } +break; +case 105: +#line 529 "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 105: -#line 531 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } -break; case 106: #line 533 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } @@ -2097,86 +2197,94 @@ case 110: break; case 111: #line 543 "perly.y" -{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 112: #line 545 "perly.y" -{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; case 113: #line 547 "perly.y" -{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 114: #line 549 "perly.y" -{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 115: -#line 554 "perly.y" -{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } +#line 551 "perly.y" +{ yyval.opval = newLOGOP(OP_DOR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 116: -#line 556 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 553 "perly.y" +{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; case 117: #line 558 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; case 118: #line 560 "perly.y" -{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +{ yyval.opval = yyvsp[0].opval; } break; case 119: #line 562 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +break; +case 120: +#line 564 "perly.y" +{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +break; +case 121: +#line 566 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 120: -#line 565 "perly.y" +case 122: +#line 569 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 121: -#line 568 "perly.y" +case 123: +#line 572 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 122: -#line 571 "perly.y" +case 124: +#line 575 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 123: -#line 578 "perly.y" -{ yyval.opval = newANONLIST(yyvsp[-1].opval); } -break; -case 124: -#line 580 "perly.y" -{ yyval.opval = newANONLIST(Nullop); } -break; case 125: #line 582 "perly.y" -{ yyval.opval = newANONHASH(yyvsp[-2].opval); } +{ yyval.opval = newANONLIST(yyvsp[-1].opval); } break; case 126: #line 584 "perly.y" -{ yyval.opval = newANONHASH(Nullop); } +{ yyval.opval = newANONLIST(Nullop); } break; case 127: #line 586 "perly.y" -{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +{ yyval.opval = newANONHASH(yyvsp[-2].opval); } break; case 128: -#line 592 "perly.y" -{ yyval.opval = dofile(yyvsp[0].opval); } +#line 588 "perly.y" +{ yyval.opval = newANONHASH(Nullop); } break; case 129: -#line 594 "perly.y" -{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +#line 590 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 130: #line 596 "perly.y" +{ yyval.opval = dofile(yyvsp[0].opval); } +break; +case 131: +#line 598 "perly.y" +{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +break; +case 132: +#line 600 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2185,8 +2293,8 @@ case 130: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 131: -#line 604 "perly.y" +case 133: +#line 608 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2196,50 +2304,42 @@ case 131: scalar(yyvsp[-3].opval) )))); dep();} break; -case 132: -#line 613 "perly.y" +case 134: +#line 617 "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 133: -#line 617 "perly.y" +case 135: +#line 621 "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 629 "perly.y" -{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } -break; -case 139: -#line 631 "perly.y" -{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } -break; case 140: #line 633 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; case 141: #line 635 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; case 142: #line 637 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +{ yyval.opval = yyvsp[0].opval; } break; case 143: #line 639 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 144: #line 641 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 145: #line 643 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(newNULLLIST()); } break; case 146: #line 645 "perly.y" @@ -2251,7 +2351,7 @@ case 147: break; case 148: #line 649 "perly.y" -{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} +{ yyval.opval = yyvsp[0].opval; } break; case 149: #line 651 "perly.y" @@ -2259,22 +2359,30 @@ case 149: break; case 150: #line 653 "perly.y" -{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } +{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 151: #line 655 "perly.y" -{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } +{ yyval.opval = yyvsp[0].opval; } break; case 152: #line 657 "perly.y" +{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } +break; +case 153: +#line 659 "perly.y" +{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } +break; +case 154: +#line 661 "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 153: -#line 663 "perly.y" +case 155: +#line 667 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2282,180 +2390,180 @@ case 153: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 154: -#line 670 "perly.y" +case 156: +#line 674 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 155: -#line 672 "perly.y" +case 157: +#line 676 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 156: -#line 674 "perly.y" +case 158: +#line 678 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 157: -#line 676 "perly.y" +case 159: +#line 680 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 158: -#line 679 "perly.y" +case 160: +#line 683 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 159: -#line 682 "perly.y" +case 161: +#line 686 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 160: -#line 685 "perly.y" -{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } -break; -case 161: -#line 687 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } -break; case 162: #line 689 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 163: #line 691 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 164: #line 693 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 165: #line 695 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 166: -#line 698 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 697 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 167: -#line 700 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, 0); } +#line 699 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 168: #line 702 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - scalar(yyvsp[0].opval)); } +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 169: -#line 705 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } +#line 704 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 170: -#line 707 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +#line 706 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + scalar(yyvsp[0].opval)); } break; case 171: #line 709 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } +{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 172: #line 711 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } +{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 175: -#line 718 "perly.y" -{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } +case 173: +#line 713 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 176: -#line 720 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +case 174: +#line 715 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 177: -#line 725 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +#line 722 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; case 178: -#line 727 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +#line 724 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 179: #line 729 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 180: #line 731 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(newNULLLIST()); } break; case 181: #line 733 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 182: -#line 738 "perly.y" -{ yyval.opval = Nullop; } +#line 735 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 183: -#line 740 "perly.y" +#line 737 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 184: -#line 744 "perly.y" +#line 742 "perly.y" { yyval.opval = Nullop; } break; case 185: -#line 746 "perly.y" +#line 744 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 186: #line 748 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +{ yyval.opval = Nullop; } break; case 187: -#line 754 "perly.y" -{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } +#line 750 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 188: -#line 758 "perly.y" -{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } +#line 752 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; case 189: -#line 762 "perly.y" -{ yyval.opval = newSVREF(yyvsp[0].opval); } +#line 758 "perly.y" +{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; case 190: -#line 766 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 762 "perly.y" +{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 191: -#line 770 "perly.y" -{ yyval.opval = newHVREF(yyvsp[0].opval); } +#line 766 "perly.y" +{ yyval.opval = newSVREF(yyvsp[0].opval); } break; case 192: -#line 774 "perly.y" +#line 770 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; case 193: -#line 778 "perly.y" -{ yyval.opval = newGVREF(0,yyvsp[0].opval); } +#line 774 "perly.y" +{ yyval.opval = newHVREF(yyvsp[0].opval); } break; case 194: -#line 783 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 778 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 195: -#line 785 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 782 "perly.y" +{ yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 196: #line 787 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 197: -#line 790 "perly.y" +#line 789 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } +break; +case 198: +#line 791 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 199: +#line 794 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2459 "perly.c" +#line 2567 "perly.c" } yyssp -= yym; yystate = *yyssp; diff --git a/perly.h b/perly.h index 15dfa0c..54d1372 100644 --- a/perly.h +++ b/perly.h @@ -43,23 +43,25 @@ #define COLONATTR 298 #define PREC_LOW 299 #define OROP 300 -#define ANDOP 301 -#define NOTOP 302 -#define ASSIGNOP 303 -#define OROR 304 -#define ANDAND 305 -#define BITOROP 306 -#define BITANDOP 307 -#define SHIFTOP 308 -#define MATCHOP 309 -#define UMINUS 310 -#define REFGEN 311 -#define POWOP 312 -#define PREINC 313 -#define PREDEC 314 -#define POSTINC 315 -#define POSTDEC 316 -#define ARROW 317 +#define DOROP 301 +#define ANDOP 302 +#define NOTOP 303 +#define ASSIGNOP 304 +#define OROR 305 +#define DORDOR 306 +#define ANDAND 307 +#define BITOROP 308 +#define BITANDOP 309 +#define SHIFTOP 310 +#define MATCHOP 311 +#define UMINUS 312 +#define REFGEN 313 +#define POWOP 314 +#define PREINC 315 +#define PREDEC 316 +#define POSTINC 317 +#define POSTDEC 318 +#define ARROW 319 #endif /* PERL_CORE */ typedef union { diff --git a/perly.y b/perly.y index f87f581..b1e7f90 100644 --- a/perly.y +++ b/perly.y @@ -96,7 +96,7 @@ static void yydestruct(pTHX_ void *ptr); %nonassoc PREC_LOW %nonassoc LOOPEX -%left OROP +%left OROP DOROP %left ANDOP %right NOTOP %nonassoc LSTOP LSTOPSUB @@ -104,7 +104,7 @@ static void yydestruct(pTHX_ void *ptr); %right ASSIGNOP %right '?' ':' %nonassoc DOTDOT -%left OROR +%left OROR DORDOR %left ANDAND %left BITOROP %left BITANDOP @@ -419,6 +419,8 @@ expr : expr ANDOP expr { $$ = newLOGOP(OP_AND, 0, $1, $3); } | expr OROP expr { $$ = newLOGOP($2, 0, $1, $3); } + | expr DOROP expr + { $$ = newLOGOP(OP_DOR, 0, $1, $3); } | argexpr %prec PREC_LOW ; @@ -545,6 +547,8 @@ termbinop : term ASSIGNOP term /* $x = $y */ { $$ = newLOGOP(OP_AND, 0, $1, $3); } | term OROR term /* $x || $y */ { $$ = newLOGOP(OP_OR, 0, $1, $3); } + | term DORDOR term /* $x // $y */ + { $$ = newLOGOP(OP_DOR, 0, $1, $3); } | term MATCHOP term /* $x =~ /$y/ */ { $$ = bind_match($2, $1, $3); } ; diff --git a/perly_c.diff b/perly_c.diff index c0db93a..a1be108 100644 --- a/perly_c.diff +++ b/perly_c.diff @@ -1,704 +1,457 @@ -*** perly.c.orig Tue Mar 26 01:38:52 2002 ---- perly.c Tue Mar 26 01:38:54 2002 -*************** -*** 1,5 **** - #ifndef lint -! static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; - #endif - #define YYBYACC 1 - #line 16 "perly.y" ---- 1,5 ---- - #ifndef lint -! /* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ - #endif - #define YYBYACC 1 - #line 16 "perly.y" -*************** -*** 9,15 **** - #ifdef EBCDIC - #undef YYDEBUG - #endif -! #define dep() deprecate("\"do\" to call subroutines") - - /* stuff included here to make perly_c.diff apply better */ - ---- 9,15 ---- - #ifdef EBCDIC - #undef YYDEBUG - #endif -! #define dep() deprecate_old("\"do\" to call subroutines") - - /* stuff included here to make perly_c.diff apply better */ - -*************** -*** 50,119 **** - #define yylex yylex_r - #endif - -! #line 54 "y.tab.c" -! #define WORD 257 -! #define METHOD 258 -! #define FUNCMETH 259 -! #define THING 260 -! #define PMFUNC 261 -! #define PRIVATEREF 262 -! #define FUNC0SUB 263 -! #define UNIOPSUB 264 -! #define LSTOPSUB 265 -! #define LABEL 266 -! #define FORMAT 267 -! #define SUB 268 -! #define ANONSUB 269 -! #define PACKAGE 270 -! #define USE 271 -! #define WHILE 272 -! #define UNTIL 273 -! #define IF 274 -! #define UNLESS 275 -! #define ELSE 276 -! #define ELSIF 277 -! #define CONTINUE 278 -! #define FOR 279 -! #define LOOPEX 280 -! #define DOTDOT 281 -! #define FUNC0 282 -! #define FUNC1 283 -! #define FUNC 284 -! #define UNIOP 285 -! #define LSTOP 286 -! #define RELOP 287 -! #define EQOP 288 -! #define MULOP 289 -! #define ADDOP 290 -! #define DOLSHARP 291 -! #define DO 292 -! #define HASHBRACK 293 -! #define NOAMP 294 -! #define LOCAL 295 -! #define MY 296 -! #define MYSUB 297 -! #define COLONATTR 298 -! #define PREC_LOW 299 -! #define OROP 300 -! #define ANDOP 301 -! #define NOTOP 302 -! #define ASSIGNOP 303 -! #define OROR 304 -! #define ANDAND 305 -! #define BITOROP 306 -! #define BITANDOP 307 -! #define SHIFTOP 308 -! #define MATCHOP 309 -! #define UMINUS 310 -! #define REFGEN 311 -! #define POWOP 312 -! #define PREINC 313 -! #define PREDEC 314 -! #define POSTINC 315 -! #define POSTDEC 316 -! #define ARROW 317 - #define YYERRCODE 256 -! short yylhs[] = { -1, - 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, ---- 50,58 ---- - #define yylex yylex_r - #endif - -! #line 54 "perly.c" - #define YYERRCODE 256 -! static short yylhs[] = { -1, - 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, -*************** -*** 135,141 **** - 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, - 21, 22, 23, 36, 36, 36, 36, - }; -! short yylen[] = { 2, - 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, - 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, ---- 74,80 ---- - 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, - 21, 22, 23, 36, 36, 36, 36, - }; -! static short yylen[] = { 2, - 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, - 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, -*************** -*** 157,163 **** - 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, - }; -! short yydefred[] = { 4, - 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, - 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, - 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, ---- 96,102 ---- - 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, - }; -! static short yydefred[] = { 4, - 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, - 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, - 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, -*************** -*** 199,205 **** - 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, - 0, 33, 0, 23, - }; -! short yydgoto[] = { 1, - 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, - 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, - 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, ---- 138,144 ---- - 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, - 0, 33, 0, 23, - }; -! static short yydgoto[] = { 1, - 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, - 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, - 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, -*************** -*** 207,213 **** - 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, - 85, 86, 87, 15, 16, 17, 18, 93, 278, - }; -! short yysindex[] = { 0, - 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, - 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, ---- 146,152 ---- - 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, - 85, 86, 87, 15, 16, 17, 18, 93, 278, - }; -! static short yysindex[] = { 0, - 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, - 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, -*************** -*** 249,255 **** - 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, - 216, 0, -123, 0, - }; -! short yyrindex[] = { 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ---- 188,194 ---- - 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, - 216, 0, -123, 0, - }; -! static short yyrindex[] = { 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -*************** -*** 291,297 **** - 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, - }; -! short yygindex[] = { 0, - 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, - -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, - 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, ---- 230,236 ---- - 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, - }; -! static short yygindex[] = { 0, - 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, - -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, - 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, -*************** -*** 300,306 **** - 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - #define YYTABLESIZE 4568 -! short yytable[] = { 71, - 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, - 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, - 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, ---- 239,245 ---- - 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - #define YYTABLESIZE 4568 -! static short yytable[] = { 71, - 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, - 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, - 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, -*************** -*** 759,765 **** - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 77, - }; -! short yycheck[] = { 15, - 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, - 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, - 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, ---- 698,704 ---- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 77, - }; -! static short yycheck[] = { 15, - 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, - 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, - 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, -*************** -*** 1224,1230 **** - #endif - #define YYMAXTOKEN 317 - #if YYDEBUG -! char *yyname[] = { - "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, - 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, ---- 1163,1169 ---- - #endif - #define YYMAXTOKEN 317 - #if YYDEBUG -! static char *yyname[] = { - "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - "'!'",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, -*************** -*** 1241,1247 **** - "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", - "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", - }; -! char *yyrule[] = { - "$accept : prog", - "prog : progstart lineseq", - "block : '{' remember lineseq '}'", ---- 1180,1186 ---- - "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", - "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", - }; -! static char *yyrule[] = { - "$accept : prog", - "prog : progstart lineseq", - "block : '{' remember lineseq '}'", -*************** -*** 1456,1472 **** - #define YYMAXDEPTH 500 - #endif - #endif -- int yydebug; -- int yynerrs; -- int yyerrflag; -- int yychar; -- short *yyssp; -- YYSTYPE *yyvsp; -- YYSTYPE yyval; -- YYSTYPE yylval; -- short yyss[YYSTACKSIZE]; -- YYSTYPE yyvs[YYSTACKSIZE]; -- #define yystacksize YYSTACKSIZE - #line 793 "perly.y" - /* PROGRAM */ - ---- 1395,1400 ---- -*************** -*** 1477,1483 **** - #endif - #define yyparse() Perl_yyparse(pTHX) - -! #line 1481 "y.tab.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab ---- 1405,1411 ---- - #endif - #define yyparse() Perl_yyparse(pTHX) - -! #line 1409 "perly.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab -*************** -*** 1485,1495 **** - yyparse() - { - register int yym, yyn, yystate; - #if YYDEBUG - register char *yys; -! extern char *getenv(); - -! if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') ---- 1413,1443 ---- - yyparse() - { - register int yym, yyn, yystate; -+ register short *yyssp; -+ register YYSTYPE *yyvsp; -+ short* yyss; -+ YYSTYPE* yyvs; -+ unsigned yystacksize = YYSTACKSIZE; -+ int retval = 0; - #if YYDEBUG - register char *yys; -! #endif - -! struct ysv *ysave; -! #ifdef USE_ITHREADS -! ENTER; /* force yydestruct() before we return */ -! #endif -! New(73, ysave, 1, struct ysv); -! SAVEDESTRUCTOR_X(yydestruct, ysave); -! ysave->oldyydebug = yydebug; -! ysave->oldyynerrs = yynerrs; -! ysave->oldyyerrflag = yyerrflag; -! ysave->oldyychar = yychar; -! ysave->oldyyval = yyval; -! ysave->oldyylval = yylval; -! -! #if YYDEBUG -! if ((yys = getenv("YYDEBUG"))) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') -*************** -*** 1501,1512 **** - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - - yyloop: -! if (yyn = yydefred[yystate]) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; ---- 1449,1470 ---- - yyerrflag = 0; - yychar = (-1); - -+ /* -+ ** Initialize private stacks (yyparse may be called from an action) -+ */ -+ New(73, yyss, yystacksize, short); -+ New(73, yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = yyss; -+ ysave->yyvs = yyvs; -+ if (!yyvs || !yyss) -+ goto yyoverflow; -+ - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - - yyloop: -! if ((yyn = yydefred[yystate])) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -*************** -*** 1516,1522 **** - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, reading %d (%s)\n", yystate, - yychar, yys); - } - #endif ---- 1474,1480 ---- - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, - yychar, yys); - } - #endif -*************** -*** 1526,1537 **** - { - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; ---- 1484,1507 ---- - { - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; -*************** -*** 1547,1560 **** - } - if (yyerrflag) goto yyinrecovery; - #ifdef lint -! goto yynewerror; - #endif -! yynewerror: - yyerror("syntax error"); - #ifdef lint -! goto yyerrlab; - #endif -! yyerrlab: - ++yynerrs; - yyinrecovery: - if (yyerrflag < 3) ---- 1517,1530 ---- - } - if (yyerrflag) goto yyinrecovery; - #ifdef lint -! - #endif -! - yyerror("syntax error"); - #ifdef lint -! - #endif -! - ++yynerrs; - yyinrecovery: - if (yyerrflag < 3) -*************** -*** 1567,1578 **** - { - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, error recovery shifting\ - to state %d\n", *yyssp, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; ---- 1537,1560 ---- - { - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery shifting\ - to state %d\n", *yyssp, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; -*************** -*** 1582,1588 **** - { - #if YYDEBUG - if (yydebug) -! printf("yydebug: error recovery discarding state %d\n", - *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; ---- 1564,1570 ---- - { - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", - *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; -*************** -*** 1600,1606 **** - yys = 0; - 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 ---- 1582,1588 ---- - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); - } - #endif -*************** -*** 1610,1616 **** - yyreduce: - #if YYDEBUG - if (yydebug) -! printf("yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif - yym = yylen[yyn]; ---- 1592,1598 ---- - yyreduce: - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif - yym = yylen[yyn]; -*************** -*** 2473,2479 **** - #line 790 "perly.y" - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2477 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; ---- 2455,2461 ---- - #line 790 "perly.y" - { yyval.opval = yyvsp[0].opval; } - break; -! #line 2459 "perly.c" - } - yyssp -= yym; - yystate = *yyssp; -*************** -*** 2483,2489 **** - { - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state 0 to\ - state %d\n", YYFINAL); - #endif - yystate = YYFINAL; ---- 2465,2471 ---- - { - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ - state %d\n", YYFINAL); - #endif - yystate = YYFINAL; -*************** -*** 2498,2504 **** - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! printf("yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } - #endif ---- 2480,2486 ---- - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } - #endif -*************** -*** 2513,2532 **** - yystate = yydgoto[yym]; - #if YYDEBUG - if (yydebug) -! printf("yydebug: after reduction, shifting from state %d \ - to state %d\n", *yyssp, yystate); - #endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; - yyoverflow: -! yyerror("yacc stack overflow"); - yyabort: -! return (1); - yyaccept: -! return (0); - } ---- 2495,2544 ---- - yystate = yydgoto[yym]; - #if YYDEBUG - if (yydebug) -! PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state %d \ - to state %d\n", *yyssp, yystate); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; - yyoverflow: -! yyerror("Out of memory for yacc stack"); - yyabort: -! retval = 1; - yyaccept: -! #ifdef USE_ITHREADS -! LEAVE; /* force yydestruct() before we return */ -! #endif -! return retval; -! } -! -! static void -! yydestruct(pTHX_ void *ptr) -! { -! struct ysv* ysave = (struct ysv*)ptr; -! if (ysave->yyss) Safefree(ysave->yyss); -! if (ysave->yyvs) Safefree(ysave->yyvs); -! yydebug = ysave->oldyydebug; -! yynerrs = ysave->oldyynerrs; -! yyerrflag = ysave->oldyyerrflag; -! yychar = ysave->oldyychar; -! yyval = ysave->oldyyval; -! yylval = ysave->oldyylval; -! Safefree(ysave); - } +--- perly.c.orig Mon Aug 5 15:02:10 2002 ++++ perly.c Mon Aug 5 15:08:41 2002 +@@ -1,5 +1,5 @@ + #ifndef lint +-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; ++/* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ + #endif + #define YYBYACC 1 + #line 16 "perly.y" +@@ -9,7 +9,7 @@ + #ifdef EBCDIC + #undef YYDEBUG + #endif +-#define dep() deprecate("\"do\" to call subroutines") ++#define dep() deprecate_old("\"do\" to call subroutines") + + /* stuff included here to make perly_c.diff apply better */ + +@@ -50,72 +50,9 @@ + #define yylex yylex_r + #endif + +-#line 54 "y.tab.c" +-#define WORD 257 +-#define METHOD 258 +-#define FUNCMETH 259 +-#define THING 260 +-#define PMFUNC 261 +-#define PRIVATEREF 262 +-#define FUNC0SUB 263 +-#define UNIOPSUB 264 +-#define LSTOPSUB 265 +-#define LABEL 266 +-#define FORMAT 267 +-#define SUB 268 +-#define ANONSUB 269 +-#define PACKAGE 270 +-#define USE 271 +-#define WHILE 272 +-#define UNTIL 273 +-#define IF 274 +-#define UNLESS 275 +-#define ELSE 276 +-#define ELSIF 277 +-#define CONTINUE 278 +-#define FOR 279 +-#define LOOPEX 280 +-#define DOTDOT 281 +-#define FUNC0 282 +-#define FUNC1 283 +-#define FUNC 284 +-#define UNIOP 285 +-#define LSTOP 286 +-#define RELOP 287 +-#define EQOP 288 +-#define MULOP 289 +-#define ADDOP 290 +-#define DOLSHARP 291 +-#define DO 292 +-#define HASHBRACK 293 +-#define NOAMP 294 +-#define LOCAL 295 +-#define MY 296 +-#define MYSUB 297 +-#define COLONATTR 298 +-#define PREC_LOW 299 +-#define OROP 300 +-#define DOROP 301 +-#define ANDOP 302 +-#define NOTOP 303 +-#define ASSIGNOP 304 +-#define OROR 305 +-#define DORDOR 306 +-#define ANDAND 307 +-#define BITOROP 308 +-#define BITANDOP 309 +-#define SHIFTOP 310 +-#define MATCHOP 311 +-#define UMINUS 312 +-#define REFGEN 313 +-#define POWOP 314 +-#define PREINC 315 +-#define PREDEC 316 +-#define POSTINC 317 +-#define POSTDEC 318 +-#define ARROW 319 ++#line 54 "perly.c" + #define YYERRCODE 256 +-short yylhs[] = { -1, ++static short yylhs[] = { -1, + 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, + 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, + 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, +@@ -137,7 +74,7 @@ + 49, 49, 49, 34, 34, 35, 35, 35, 44, 24, + 19, 20, 21, 22, 23, 36, 36, 36, 36, + }; +-short yylen[] = { 2, ++static short yylen[] = { 2, + 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, + 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, + 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, +@@ -159,7 +96,7 @@ + 1, 1, 1, 0, 1, 0, 1, 2, 1, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, + }; +-short yydefred[] = { 4, ++static short yydefred[] = { 4, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 3, 175, 0, 0, 156, +@@ -201,7 +138,7 @@ + 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, + 5, 0, 30, 0, 0, 33, 0, 23, + }; +-short yydgoto[] = { 1, ++static short yydgoto[] = { 1, + 10, 11, 20, 104, 19, 2, 95, 374, 98, 363, + 3, 12, 13, 70, 379, 289, 72, 73, 74, 75, + 76, 77, 78, 79, 295, 81, 296, 285, 287, 290, +@@ -209,7 +146,7 @@ + 196, 331, 156, 293, 275, 227, 14, 83, 137, 84, + 85, 86, 87, 15, 16, 17, 18, 93, 282, + }; +-short yysindex[] = { 0, ++static short yysindex[] = { 0, + 0, 0, -183, 0, 0, 0, -57, 0, 0, 0, + 0, 0, 0, 0, 820, 0, 0, 0, -222, -208, + 7, 0, 0, -208, 0, 0, 0, -31, -31, 0, +@@ -251,7 +188,7 @@ + 179, 0, 1860, -168, 352, 0, 2214, -168, 298, 0, + 0, 299, 0, 179, 179, 0, -256, 0, + }; +-short yyrindex[] = { 0, ++static short yyrindex[] = { 0, + 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +@@ -293,7 +230,7 @@ + 0, 0, 370, 91, 881, 0, 0, 91, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 0, + }; +-short yygindex[] = { 0, ++static short yygindex[] = { 0, + 0, 0, 29, 378, 0, 0, -55, 0, 676, 567, + -94, 0, 0, 0, -355, -15, 2480, 0, 650, 364, + 380, 0, 0, 0, 412, 755, 0, 0, 291, -202, +@@ -302,7 +239,7 @@ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + #define YYTABLESIZE 5052 +-short yytable[] = { 71, ++static short yytable[] = { 71, + 199, 22, 60, 229, 65, 65, 222, 297, 60, 111, + 380, 200, 279, 329, 65, 300, 62, 64, 258, 377, + 378, 161, 15, 184, 161, 220, 230, 187, 65, 67, +@@ -810,7 +747,7 @@ + 0, 0, 0, 0, 0, 115, 115, 115, 0, 115, + 115, 115, + }; +-short yycheck[] = { 15, ++static short yycheck[] = { 15, + 95, 59, 59, 41, 36, 36, 59, 210, 123, 40, + 366, 100, 201, 59, 36, 41, 59, 59, 40, 276, + 277, 41, 41, 40, 44, 40, 93, 91, 36, 37, +@@ -1324,7 +1261,7 @@ + #endif + #define YYMAXTOKEN 319 + #if YYDEBUG +-char *yyname[] = { ++static char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, + 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, +@@ -1341,7 +1278,7 @@ + "DORDOR","ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN", + "POWOP","PREINC","PREDEC","POSTINC","POSTDEC","ARROW", + }; +-char *yyrule[] = { ++static char *yyrule[] = { + "$accept : prog", + "prog : progstart lineseq", + "block : '{' remember lineseq '}'", +@@ -1558,17 +1495,6 @@ + #define YYMAXDEPTH 500 + #endif + #endif +-int yydebug; +-int yynerrs; +-int yyerrflag; +-int yychar; +-short *yyssp; +-YYSTYPE *yyvsp; +-YYSTYPE yyval; +-YYSTYPE yylval; +-short yyss[YYSTACKSIZE]; +-YYSTYPE yyvs[YYSTACKSIZE]; +-#define yystacksize YYSTACKSIZE + #line 797 "perly.y" + /* PROGRAM */ + +@@ -1579,7 +1505,7 @@ + #endif + #define yyparse() Perl_yyparse(pTHX) + +-#line 1583 "y.tab.c" ++#line 1509 "perly.c" + #define YYABORT goto yyabort + #define YYACCEPT goto yyaccept + #define YYERROR goto yyerrlab +@@ -1587,11 +1513,31 @@ + yyparse() + { + register int yym, yyn, yystate; ++ register short *yyssp; ++ register YYSTYPE *yyvsp; ++ short* yyss; ++ YYSTYPE* yyvs; ++ unsigned yystacksize = YYSTACKSIZE; ++ int retval = 0; + #if YYDEBUG + register char *yys; +- extern char *getenv(); ++#endif ++ ++ struct ysv *ysave; ++#ifdef USE_ITHREADS ++ ENTER; /* force yydestruct() before we return */ ++#endif ++ New(73, ysave, 1, struct ysv); ++ SAVEDESTRUCTOR_X(yydestruct, ysave); ++ ysave->oldyydebug = yydebug; ++ ysave->oldyynerrs = yynerrs; ++ ysave->oldyyerrflag = yyerrflag; ++ ysave->oldyychar = yychar; ++ ysave->oldyyval = yyval; ++ ysave->oldyylval = yylval; + +- if (yys = getenv("YYDEBUG")) ++#if YYDEBUG ++ if ((yys = getenv("YYDEBUG"))) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') +@@ -1603,12 +1549,22 @@ + yyerrflag = 0; + yychar = (-1); + ++ /* ++ ** Initialize private stacks (yyparse may be called from an action) ++ */ ++ New(73, yyss, yystacksize, short); ++ New(73, yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = yyss; ++ ysave->yyvs = yyvs; ++ if (!yyvs || !yyss) ++ goto yyoverflow; ++ + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + + yyloop: +- if (yyn = yydefred[yystate]) goto yyreduce; ++ if ((yyn = yydefred[yystate])) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +@@ -1618,7 +1574,7 @@ + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +- printf("yydebug: state %d, reading %d (%s)\n", yystate, ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, + yychar, yys); + } + #endif +@@ -1628,12 +1584,24 @@ + { + #if YYDEBUG + if (yydebug) +- printf("yydebug: state %d, shifting to state %d\n", ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +@@ -1649,14 +1617,14 @@ + } + if (yyerrflag) goto yyinrecovery; + #ifdef lint +- goto yynewerror; ++ + #endif +-yynewerror: ++ + yyerror("syntax error"); + #ifdef lint +- goto yyerrlab; ++ + #endif +-yyerrlab: ++ + ++yynerrs; + yyinrecovery: + if (yyerrflag < 3) +@@ -1669,12 +1637,24 @@ + { + #if YYDEBUG + if (yydebug) +- printf("yydebug: state %d, error recovery shifting\ ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery shifting\ + to state %d\n", *yyssp, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +@@ -1684,7 +1664,7 @@ + { + #if YYDEBUG + if (yydebug) +- printf("yydebug: error recovery discarding state %d\n", ++ PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); + #endif + if (yyssp <= yyss) goto yyabort; +@@ -1702,7 +1682,7 @@ + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +- printf("yydebug: state %d, error recovery discards token %d (%s)\n", ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); + } + #endif +@@ -1712,7 +1692,7 @@ + yyreduce: + #if YYDEBUG + if (yydebug) +- printf("yydebug: state %d, reducing by rule %d (%s)\n", ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +@@ -2583,7 +2563,7 @@ + #line 794 "perly.y" + { yyval.opval = yyvsp[0].opval; } + break; +-#line 2587 "y.tab.c" ++#line 2567 "perly.c" + } + yyssp -= yym; + yystate = *yyssp; +@@ -2593,7 +2573,7 @@ + { + #if YYDEBUG + if (yydebug) +- printf("yydebug: after reduction, shifting from state 0 to\ ++ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +@@ -2608,7 +2588,7 @@ + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +- printf("yydebug: state %d, reading %d (%s)\n", ++ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", + YYFINAL, yychar, yys); + } + #endif +@@ -2623,20 +2603,50 @@ + yystate = yydgoto[yym]; + #if YYDEBUG + if (yydebug) +- printf("yydebug: after reduction, shifting from state %d \ ++ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state %d \ + to state %d\n", *yyssp, yystate); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; + yyoverflow: +- yyerror("yacc stack overflow"); ++ yyerror("Out of memory for yacc stack"); + yyabort: +- return (1); ++ retval = 1; + yyaccept: +- return (0); ++#ifdef USE_ITHREADS ++ LEAVE; /* force yydestruct() before we return */ ++#endif ++ return retval; ++} ++ ++static void ++yydestruct(pTHX_ void *ptr) ++{ ++ struct ysv* ysave = (struct ysv*)ptr; ++ if (ysave->yyss) Safefree(ysave->yyss); ++ if (ysave->yyvs) Safefree(ysave->yyvs); ++ yydebug = ysave->oldyydebug; ++ yynerrs = ysave->oldyynerrs; ++ yyerrflag = ysave->oldyyerrflag; ++ yychar = ysave->oldyychar; ++ yyval = ysave->oldyyval; ++ yylval = ysave->oldyylval; ++ Safefree(ysave); + } diff --git a/pod/perl58delta.pod b/pod/perl58delta.pod new file mode 100644 index 0000000..f66c126 --- /dev/null +++ b/pod/perl58delta.pod @@ -0,0 +1,3735 @@ +=head1 NAME + +perldelta - what is new for perl v5.8.0 + +=head1 DESCRIPTION + +This document describes differences between the 5.6.0 release and +the 5.8.0 release. + +Many of the bug fixes in 5.8.0 were already seen in the 5.6.1 +maintenance release since the two releases were kept closely +coordinated (while 5.8.0 was still called 5.7.something). + +Changes that were integrated into the 5.6.1 release are marked C<[561]>. +Many of these changes have been further developed since 5.6.1 was released, +those are marked C<[561+]>. + +You can see the list of changes in the 5.6.1 release (both from the +5.005_03 release and the 5.6.0 release) by reading L. + +=head1 Highlights In 5.8.0 + +=over 4 + +=item * + +Better Unicode support + +=item * + +New IO Implementation + +=item * + +New Thread Implementation + +=item * + +Better Numeric Accuracy + +=item * + +Safe Signals + +=item * + +Many New Modules + +=item * + +More Extensive Regression Testing + +=back + +=head1 Incompatible Changes + +=head2 Binary Incompatibility + +B + +B + +(Pure Perl modules should continue to work.) + +The major reason for the discontinuity is the new IO architecture +called PerlIO. PerlIO is the default configuration because without +it many new features of Perl 5.8 cannot be used. In other words: +you just have to recompile your modules containing XS code, sorry +about that. + +In future releases of Perl, non-PerlIO aware XS modules may become +completely unsupported. This shouldn't be too difficult for module +authors, however: PerlIO has been designed as a drop-in replacement +(at the source code level) for the stdio interface. + +Depending on your platform, there are also other reasons why +we decided to break binary compatibility, please read on. + +=head2 64-bit platforms and malloc + +If your pointers are 64 bits wide, the Perl malloc is no longer being +used because it does not work well with 8-byte pointers. Also, +usually the system mallocs on such platforms are much better optimized +for such large memory models than the Perl malloc. Some memory-hungry +Perl applications like the PDL don't work well with Perl's malloc. +Finally, other applications than Perl (such as mod_perl) tend to prefer +the system malloc. Such platforms include Alpha and 64-bit HPPA, +MIPS, PPC, and Sparc. + +=head2 AIX Dynaloading + +The AIX dynaloading now uses in AIX releases 4.3 and newer the native +dlopen interface of AIX instead of the old emulated interface. This +change will probably break backward compatibility with compiled +modules. The change was made to make Perl more compliant with other +applications like mod_perl which are using the AIX native interface. + +=head2 Attributes for C variables now handled at run-time + +The C syntax now applies variable attributes at +run-time. (Subroutine and C variables still get attributes applied +at compile-time.) See L for additional details. In particular, +however, this allows variable attributes to be useful for C interfaces, +which was a deficiency of earlier releases. Note that the new semantics +doesn't work with the Attribute::Handlers module (as of version 0.76). + +=head2 Socket Extension Dynamic in VMS + +The Socket extension is now dynamically loaded instead of being +statically built in. This may or may not be a problem with ancient +TCP/IP stacks of VMS: we do not know since we weren't able to test +Perl in such configurations. + +=head2 IEEE-format Floating Point Default on OpenVMS Alpha + +Perl now uses IEEE format (T_FLOAT) as the default internal floating +point format on OpenVMS Alpha, potentially breaking binary compatibility +with external libraries or existing data. G_FLOAT is still available as +a configuration option. The default on VAX (D_FLOAT) has not changed. + +=head2 New Unicode Semantics (no more C, almost) + +Previously in Perl 5.6 to use Unicode one would say "use utf8" and +then the operations (like string concatenation) were Unicode-aware +in that lexical scope. + +This was found to be an inconvenient interface, and in Perl 5.8 the +Unicode model has completely changed: now the "Unicodeness" is bound +to the data itself, and for most of the time "use utf8" is not needed +at all. The only remaining use of "use utf8" is when the Perl script +itself has been written in the UTF-8 encoding of Unicode. (UTF-8 has +not been made the default since there are many Perl scripts out there +that are using various national eight-bit character sets, which would +be illegal in UTF-8.) + +See L for the explanation of the current model, +and L for the current use of the utf8 pragma. + +=head2 New Unicode Properties + +Unicode I are now supported. Scripts are similar to (and superior +to) Unicode I. The difference between scripts and blocks is that +scripts are the glyphs used by a language or a group of languages, while +the blocks are more artificial groupings of (mostly) 256 characters based +on the Unicode numbering. + +In general, scripts are more inclusive, but not universally so. For +example, while the script C includes all the Latin characters and +their various diacritic-adorned versions, it does not include the various +punctuation or digits (since they are not solely C). + +A number of other properties are now supported, including C<\p{L&}>, +C<\p{Any}> C<\p{Assigned}>, C<\p{Unassigned}>, C<\p{Blank}> [561] and +C<\p{SpacePerl}> [561] (along with their C<\P{...}> versions, of course). +See L for details, and more additions. + +The C or C prefix to names used with the C<\p{...}> and C<\P{...}> +are now almost always optional. The only exception is that a C prefix +is required to signify a Unicode block when a block name conflicts with a +script name. For example, C<\p{Tibetan}> refers to the script, while +C<\p{InTibetan}> refers to the block. When there is no name conflict, you +can omit the C from the block name (e.g. C<\p{BraillePatterns}>), but +to be safe, it's probably best to always use the C). + +=head2 REF(...) Instead Of SCALAR(...) + +A reference to a reference now stringifies as "REF(0x81485ec)" instead +of "SCALAR(0x81485ec)" in order to be more consistent with the return +value of ref(). + +=head2 pack/unpack D/F recycled + +The undocumented pack/unpack template letters D/F have been recycled +for better use: now they stand for long double (if supported by the +platform) and NV (Perl internal floating point type). (They used +to be aliases for d/f, but you never knew that.) + +=head2 glob() now returns filenames in alphabetical order + +The list of filenames from glob() (or <...>) is now by default sorted +alphabetically to be csh-compliant (which is what happened before +in most UNIX platforms). (bsd_glob() does still sort platform +natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.) [561] + +=head2 Deprecations + +=over 4 + +=item * + +The semantics of bless(REF, REF) were unclear and until someone proves +it to make some sense, it is forbidden. + +=item * + +The obsolete chat2 library that should never have been allowed +to escape the laboratory has been decommissioned. + +=item * + +Using chdir("") or chdir(undef) instead of explicit chdir() is +doubtful. A failure (think chdir(some_function()) can lead into +unintended chdir() to the home directory, therefore this behaviour +is deprecated. + +=item * + +The builtin dump() function has probably outlived most of its +usefulness. The core-dumping functionality will remain in future +available as an explicit call to C, but in future +releases the behaviour of an unqualified C call may change. + +=item * + +The very dusty examples in the eg/ directory have been removed. +Suggestions for new shiny examples welcome but the main issue is that +the examples need to be documented, tested and (most importantly) +maintained. + +=item * + +The (bogus) escape sequences \8 and \9 now give an optional warning +("Unrecognized escape passed through"). There is no need to \-escape +any C<\w> character. + +=item * + +The *glob{FILEHANDLE} is deprecated, use *glob{IO} instead. + +=item * + +The C syntax (C without an argument) has been +deprecated. Its semantics were never that clear and its +implementation even less so. If you have used that feature to +disallow all but fully qualified variables, C instead. + +=item * + +The unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still +recognised but now cause fatal errors. The previous behaviour of +ignoring them by default and warning if requested was unacceptable +since it, in a way, falsely promised that the features could be used. + +=item * + +In future releases, non-PerlIO aware XS modules may become completely +unsupported. Since PerlIO is a drop-in replacement for stdio at the +source code level, this shouldn't be that drastic a change. + +=item * + +Previous versions of perl and some readings of some sections of Camel +III implied that the C<:raw> "discipline" was the inverse of C<:crlf>. +Turning off "clrfness" is no longer enough to make a stream truly +binary. So the PerlIO C<:raw> layer (or "discipline", to use the Camel +book's older terminology) is now formally defined as being equivalent +to binmode(FH) - which is in turn defined as doing whatever is +necessary to pass each byte as-is without any translation. In +particular binmode(FH) - and hence C<:raw> - will now turn off both +CRLF and UTF-8 translation and remove other layers (e.g. :encoding()) +which would modify byte stream. + +=item * + +The current user-visible implementation of pseudo-hashes (the weird +use of the first array element) is deprecated starting from Perl 5.8.0 +and will be removed in Perl 5.10.0, and the feature will be +implemented differently. Not only is the current interface rather +ugly, but the current implementation slows down normal array and hash +use quite noticeably. The C pragma interface will remain +available. The I interface is expected to +be the replacement interface (see L). If your existing +programs depends on the underlying implementation, consider using +L from CPAN. + +=item * + +The syntaxes C<< @a->[...] >> and C<< %h->{...} >> have now been deprecated. + +=item * + +After years of trying, suidperl is considered to be too complex to +ever be considered truly secure. The suidperl functionality is likely +to be removed in a future release. + +=item * + +The 5.005 threads model (module C) is deprecated and expected +to be removed in Perl 5.10. Multithreaded code should be migrated to +the new ithreads model (see L, L and +L). + +=item * + +The long deprecated uppercase aliases for the string comparison +operators (EQ, NE, LT, LE, GE, GT) have now been removed. + +=item * + +The tr///C and tr///U features have been removed and will not return; +the interface was a mistake. Sorry about that. For similar +functionality, see pack('U0', ...) and pack('C0', ...). [561] + +=item * + +Earlier Perls treated "sub foo (@bar)" as equivalent to "sub foo (@)". +The prototypes are now checked better at compile-time for invalid +syntax. An optional warning is generated ("Illegal character in +prototype...") but this may be upgraded to a fatal error in a future +release. + +=item * + +The C and C operations now produce warnings on +tainted data and in some future release they will produce fatal errors. + +=item * + +The existing behaviour when localising tied arrays and hashes is wrong, +and will be changed in a future release, so do not rely on the existing +behaviour. See L<"Localising Tied Arrays and Hashes Is Broken">. + +=back + +=head1 Core Enhancements + +=head2 Unicode Overhaul + +Unicode in general should be now much more usable than in Perl 5.6.0 +(or even in 5.6.1). Unicode can be used in hash keys, Unicode in +regular expressions should work now, Unicode in tr/// should work now, +Unicode in I/O should work now. See L for introduction +and L for details. + +=over 4 + +=item * + +The Unicode Character Database coming with Perl has been upgraded +to Unicode 3.2.0. For more information, see http://www.unicode.org/ . +[561+] (5.6.1 has UCD 3.0.1.) + +=item * + +For developers interested in enhancing Perl's Unicode capabilities: +almost all the UCD files are included with the Perl distribution in +the F subdirectory. The most notable omission, for space +considerations, is the Unihan database. + +=item * + +The properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like +C isblank(), that is, it contains only "horizontal whitespace" (the space +character is, the newline isn't), and the "SpacePerl" is the Unicode +equivalent of C<\s> (\p{Space} isn't, since that includes the vertical +tabulator character, whereas C<\s> doesn't.) + +See "New Unicode Properties" earlier in this document for additional +information on changes with Unicode properties. + +=back + +=head2 PerlIO is Now The Default + +=over 4 + +=item * + +IO is now by default done via PerlIO rather than system's "stdio". +PerlIO allows "layers" to be "pushed" onto a file handle to alter the +handle's behaviour. Layers can be specified at open time via 3-arg +form of open: + + open($fh,'>:crlf :utf8', $path) || ... + +or on already opened handles via extended C: + + binmode($fh,':encoding(iso-8859-7)'); + +The built-in layers are: unix (low level read/write), stdio (as in +previous Perls), perlio (re-implementation of stdio buffering in a +portable manner), crlf (does CRLF <=> "\n" translation as on Win32, +but available on any platform). A mmap layer may be available if +platform supports it (mostly UNIXes). + +Layers to be applied by default may be specified via the 'open' pragma. + +See L for the effects +of PerlIO on your architecture name. + +=item * + +If your platform supports fork(), you can use the list form of C +for pipes. For example: + + open KID_PS, "-|", "ps", "aux" or die $!; + +forks the ps(1) command (without spawning a shell, as there are more +than three arguments to open()), and reads its standard output via the +C filehandle. See L. + +=item * + +File handles can be marked as accepting Perl's internal encoding of Unicode +(UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" : + + open($fh,">:utf8","Uni.txt"); + +Note for EBCDIC users: the pseudo layer ":utf8" is erroneously named +for you since it's not UTF-8 what you will be getting but instead +UTF-EBCDIC. See L, L, and +http://www.unicode.org/unicode/reports/tr16/ for more information. +In future releases this naming may change. See L +for more information about UTF-8. + +=item * + +If your environment variables (LC_ALL, LC_CTYPE, LANG, LANGUAGE) look +like you want to use UTF-8 (any of the the variables match C), +your STDIN, STDOUT, STDERR handles and the default open layer +(see L) are marked as UTF-8. (This feature, like other new +features that combine Unicode and I/O, work only if you are using +PerlIO, but that's the default.) + +Note that after this Perl really does assume that everything is UTF-8: +for example if some input handle is not, Perl will probably very soon +complain about the input data like this "Malformed UTF-8 ..." since +any old eight-bit data is not legal UTF-8. + +Note for code authors: if you want to enable your users to use UTF-8 +as their default encoding but in your code still have eight-bit I/O streams +(such as images or zip files), you need to explicitly open() or binmode() +with C<:bytes> (see L and L), or you +can just use C (nice for pre-5.8.0 backward compatibility). + +=item * + +File handles can translate character encodings from/to Perl's internal +Unicode form on read/write via the ":encoding()" layer. + +=item * + +File handles can be opened to "in memory" files held in Perl scalars via: + + open($fh,'>', \$variable) || ... + +=item * + +Anonymous temporary files are available without need to +'use FileHandle' or other module via + + open($fh,"+>", undef) || ... + +That is a literal undef, not an undefined value. + +=back + +=head2 ithreads + +The new interpreter threads ("ithreads" for short) implementation of +multithreading, by Arthur Bergman, replaces the old "5.005 threads" +implementation. In the ithreads model any data sharing between +threads must be explicit, as opposed to the model where data sharing +was implicit. See L and L, and +L. + +As a part of the ithreads implementation Perl will also use +any necessary and detectable reentrant libc interfaces. + +=head2 Restricted Hashes + +A restricted hash is restricted to a certain set of keys, no keys +outside the set can be added. Also individual keys can be restricted +so that the key cannot be deleted and the value cannot be changed. +No new syntax is involved: the Hash::Util module is the interface. + +=head2 Safe Signals + +Perl used to be fragile in that signals arriving at inopportune moments +could corrupt Perl's internal state. Now Perl postpones handling of +signals until it's safe (between opcodes). + +This change may have surprising side effects because signals no longer +interrupt Perl instantly. Perl will now first finish whatever it was +doing, like finishing an internal operation (like sort()) or an +external operation (like an I/O operation), and only then look at any +arrived signals (and before starting the next operation). No more corrupt +internal state since the current operation is always finished first, +but the signal may take more time to get heard. Note that breaking +out from potentially blocking operations should still work, though. + +=head2 Understanding of Numbers + +In general a lot of fixing has happened in the area of Perl's +understanding of numbers, both integer and floating point. Since in +many systems the standard number parsing functions like C +and C seem to have bugs, Perl tries to work around their +deficiencies. This results hopefully in more accurate numbers. + +Perl now tries internally to use integer values in numeric conversions +and basic arithmetics (+ - * /) if the arguments are integers, and +tries also to keep the results stored internally as integers. +This change leads to often slightly faster and always less lossy +arithmetics. (Previously Perl always preferred floating point numbers +in its math.) + +=head2 Arrays now always interpolate into double-quoted strings [561] + +In double-quoted strings, arrays now interpolate, no matter what. The +behavior in earlier versions of perl 5 was that arrays would interpolate +into strings if the array had been mentioned before the string was +compiled, and otherwise Perl would raise a fatal compile-time error. +In versions 5.000 through 5.003, the error was + + Literal @example now requires backslash + +In versions 5.004_01 through 5.6.0, the error was + + In string, @example now must be written as \@example + +The idea here was to get people into the habit of writing +C<"fred\@example.com"> when they wanted a literal C<@> sign, just as +they have always written C<"Give me back my \$5"> when they wanted a +literal C<$> sign. + +Starting with 5.6.1, when Perl now sees an C<@> sign in a +double-quoted string, it I attempts to interpolate an array, +regardless of whether or not the array has been used or declared +already. The fatal error has been downgraded to an optional warning: + + Possible unintended interpolation of @example in string + +This warns you that C<"fred@example.com"> is going to turn into +C if you don't backslash the C<@>. +See http://www.plover.com/~mjd/perl/at-error.html for more details +about the history here. + +=head2 Miscellaneous Changes + +=over 4 + +=item * + +AUTOLOAD is now lvaluable, meaning that you can add the :lvalue attribute +to AUTOLOAD subroutines and you can assign to the AUTOLOAD return value. + +=item * + +The $Config{byteorder} (and corresponding BYTEORDER in config.h) was +previously wrong in platforms if sizeof(long) was 4, but sizeof(IV) +was 8. The byteorder was only sizeof(long) bytes long (1234 or 4321), +but now it is correctly sizeof(IV) bytes long, (12345678 or 87654321). +(This problem didn't affect Windows platforms.) + +Also, $Config{byteorder} is now computed dynamically--this is more +robust with "fat binaries" where an executable image contains binaries +for more than one binary platform, and when cross-compiling. + +=item * + +C now works (previously one couldn't pass +in multiple arguments.) + +=item * + +C followed by a bareword now ensures that this bareword isn't +a keyword (to avoid a bug where C tried to call a +subroutine called C). This means that for example instead of +C you must write C. + +=item * + +The builtin dump() now gives an optional warning +C, +meaning that by default C is resolved as the builtin +dump() which dumps core and aborts, not as (possibly) user-defined +C. To call the latter, qualify the call as C<&dump(...)>. +(The whole dump() feature is to considered deprecated, and possibly +removed/changed in future releases.) + +=item * + +chomp() and chop() are now overridable. Note, however, that their +prototype (as given by C is undefined, +because it cannot be expressed and therefore one cannot really write +replacements to override these builtins. + +=item * + +END blocks are now run even if you exit/die in a BEGIN block. +Internally, the execution of END blocks is now controlled by +PL_exit_flags & PERL_EXIT_DESTRUCT_END. This enables the new +behaviour for Perl embedders. This will default in 5.10. See +L. + +=item * + +Formats now support zero-padded decimal fields. + +=item * + +Although "you shouldn't do that", it was possible to write code that +depends on Perl's hashed key order (Data::Dumper does this). The new +algorithm "One-at-a-Time" produces a different hashed key order. +More details are in L. + +=item * + +lstat(FILEHANDLE) now gives a warning because the operation makes no sense. +In future releases this may become a fatal error. + +=item * + +Spurious syntax errors generated in certain situations, when glob() +caused File::Glob to be loaded for the first time, have been fixed. [561] + +=item * + +Lvalue subroutines can now return C in list context. However, +the lvalue subroutine feature still remains experimental. [561+] + +=item * + +A lost warning "Can't declare ... dereference in my" has been +restored (Perl had it earlier but it became lost in later releases.) + +=item * + +A new special regular expression variable has been introduced: +C<$^N>, which contains the most-recently closed group (submatch). + +=item * + +C does not produce an error even if Module does not have an +unimport() method. This parallels the behavior of C vis-a-vis +C. [561] + +=item * + +The numerical comparison operators return C if either operand +is a NaN. Previously the behaviour was unspecified. + +=item * + +C can now have an experimental optional attribute C that +affects how global variables are shared among multiple interpreters, +see L. + +=item * + +The following builtin functions are now overridable: each(), keys(), +pop(), push(), shift(), splice(), unshift(). [561] + +=item * + +C can now group template letters with C<()> and then +apply repetition/count modifiers on the groups. + +=item * + +C can now process the Perl internal numeric types: +IVs, UVs, NVs-- and also long doubles, if supported by the platform. +The template letters are C, C, C, and C. + +=item * + +C can now be used to force a string to UTF8. + +=item * + +my __PACKAGE__ $obj now works. [561] + +=item * + +POSIX::sleep() now returns the number of I seconds +(as the POSIX standard says), as opposed to CORE::sleep() which +returns the number of slept seconds. + +=item * + +The printf() and sprintf() now support parameter reordering using the +C<%\d+\$> and C<*\d+\$> syntaxes. For example + + print "%2\$s %1\$s\n", "foo", "bar"; + +will print "bar foo\n". This feature helps in writing +internationalised software, and in general when the order +of the parameters can vary. + +=item * + +The (\&) prototype now works properly. [561] + +=item * + +prototype(\[$@%&]) is now available to implicitly create references +(useful for example if you want to emulate the tie() interface). + +=item * + +A new command-line option, C<-t> is available. It is the +little brother of C<-T>: instead of dying on taint violations, +lexical warnings are given. B + +=item * + +In other taint news, the C and C have now been +considered too risky (think C: it can start any program +with any arguments), and now the said forms cause a warning under +lexical warnings. You should carefully launder the arguments to +guarantee their validity. In future releases of Perl the forms will +become fatal errors so consider starting laundering now. + +=item * + +Tied hash interfaces are now required to have the EXISTS and DELETE +methods (either own or inherited). + +=item * + +If tr/// is just counting characters, it doesn't attempt to +modify its target. + +=item * + +untie() will now call an UNTIE() hook if it exists. See L +for details. [561] + +=item * + +L now supports C to change the +file timestamps to the current time. + +=item * + +The rules for allowing underscores (underbars) in numeric constants +have been relaxed and simplified: now you can have an underscore +simply B. + +=item * + +Rather than relying on C's argv[0] (which may not contain a full pathname) +where possible $^X is now set by asking the operating system. +(eg by reading F on Linux, F on FreeBSD) + +=item * + +A new variable, C<${^TAINT}>, indicates whether taint mode is enabled. + +=item * + +You can now override the readline() builtin, and this overrides also +the angle bracket operator. + +=item * + +The command-line options -s and -F are now recognized on the shebang +(#!) line. + +=item * + +Use of the C match modifier without an accompanying C modifier +elicits a new warning: C. + +Use of C in substitutions, even with C, elicits +C. + +Use of C with C elicits C. + +=item * + +Support for the C special subroutine had been added. +With ithreads, when a new thread is created, all Perl data is cloned, +however non-Perl data cannot be cloned automatically. In C you +can do whatever you need to do, like for example handle the cloning of +non-Perl data, if necessary. C will be executed once for every +package that has it defined or inherited. It will be called in the +context of the new thread, so all modifications are made in the new area. + +See L + +=back + +=head1 Modules and Pragmata + +=head2 New Modules and Pragmata + +=over 4 + +=item * + +C, originally by Damian Conway and now maintained +by Arthur Bergman, allows a class to define attribute handlers. + + package MyPack; + use Attribute::Handlers; + sub Wolf :ATTR(SCALAR) { print "howl!\n" } + + # later, in some package using or inheriting from MyPack... + + my MyPack $Fluffy : Wolf; # the attribute handler Wolf will be called + +Both variables and routines can have attribute handlers. Handlers can +be specific to type (SCALAR, ARRAY, HASH, or CODE), or specific to the +exact compilation phase (BEGIN, CHECK, INIT, or END). +See L. + +=item * + +C, by Stephen McCamant, is a new compiler backend for +walking the Perl syntax tree, printing concise info about ops. +The output is highly customisable. See L. [561+] + +=item * + +The new bignum, bigint, and bigrat pragmas, by Tels, implement +transparent bignum support (using the Math::BigInt, Math::BigFloat, +and Math::BigRat backends). + +=item * + +C, by Sean Burke, is a module for reporting the search +path for a class's ISA tree. See L. + +=item * + +C now has a split personality: if possible, an XS extension is +used, (this will hopefully be faster, more secure, and more robust) +but if not possible, the familiar Perl implementation is used. + +=item * + +C, originally by Kenneth Albanowski and now +maintained by Paul Marquess, has been added. It is primarily used +by C to enhance portability of XS modules between different +versions of Perl. See L. + +=item * + +C, frontend module for calculating digests (checksums), from +Gisle Aas, has been added. See L. + +=item * + +C for calculating MD5 digests (checksums) as defined in +RFC 1321, from Gisle Aas, has been added. See L. + + use Digest::MD5 'md5_hex'; + + $digest = md5_hex("Thirsty Camel"); + + print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1 + +NOTE: the C backward compatibility module is deliberately not +included since its further use is discouraged. + +See also L. + +=item * + +C, originally by Nick Ing-Simmons and now maintained by Dan +Kogai, provides a mechanism to translate between different character +encodings. Support for Unicode, ISO-8859-1, and ASCII are compiled in +to the module. Several other encodings (like the rest of the +ISO-8859, CP*/Win*, Mac, KOI8-R, three variants EBCDIC, Chinese, +Japanese, and Korean encodings) are included and can be loaded at +runtime. (For space considerations, the largest Chinese encodings +have been separated into their own CPAN module, Encode::HanExtra, +which Encode will use if available). See L. + +Any encoding supported by Encode module is also available to the +":encoding()" layer if PerlIO is used. + +=item * + +C is the interface to the new I +feature. (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and +Michael Schwern.) See L. + +=item * + +C can be used to query locale information. +See L. + +=item * + +C, by Sean Burke, has functions for dealing with +RFC3066-style language tags. See L. + +=item * + +C, by Nicholas Clark, is a new tool for extension +writers for generating XS code to import C header constants. +See L. + +=item * + +C, by Damian Conway, is an easy-to-use frontend to +Filter::Util::Call. See L. + + # in MyFilter.pm: + + package MyFilter; + + use Filter::Simple sub { + while (my ($from, $to) = splice @_, 0, 2) { + s/$from/$to/g; + } + }; + + 1; + + # in user's code: + + use MyFilter qr/red/ => 'green'; + + print "red\n"; # this code is filtered, will print "green\n" + print "bored\n"; # this code is filtered, will print "bogreen\n" + + no MyFilter; + + print "red\n"; # this code is not filtered, will print "red\n" + +=item * + +C, by Tim Jenness, allows one to create temporary files +and directories in an easy, portable, and secure way. See L. +[561+] + +=item * + +C, by Paul Marquess, provides you with the +framework to write I in Perl. For most uses, the +frontend Filter::Simple is to be preferred. See L. + +=item * + +C, by Ilya Zakharevich, is a new pragma for conditional inclusion +of modules. + +=item * + +L, by Graham Barr, is a collection of perl5 modules related +to network programming. See L, L, L +(not part of libnet, but related), L, L, +and L. + +Perl installation leaves libnet unconfigured; use F +to configure it. + +=item * + +C, by Graham Barr, is a selection of general-utility +list subroutines, such as sum(), min(), first(), and shuffle(). +See L. + +=item * + +C, C, C +C, and L, by Neil Bowers, have +been added. They provide the codes for various locale standards, such +as "fr" for France, "usd" for US Dollar, and "ja" for Japanese. + + use Locale::Country; + + $country = code2country('jp'); # $country gets 'Japan' + $code = country2code('Norway'); # $code gets 'no' + +See L, L, L, +and L. + +=item * + +C, by Sean Burke, is a localization framework. See +L, and L. The latter is an +article about software localization, originally published in The Perl +Journal #13, and republished here with kind permission. + +=item * + +C for big rational numbers, to accompany Math::BigInt and +Math::BigFloat, from Tels. See L. + +=item * + +C can make your functions faster by trading space for time, +from Mark-Jason Dominus. See L. + +=item * + +C, by Gisle Aas, allows you to encode data in base64, +as defined in RFC 2045 - I. + + use MIME::Base64; + + $encoded = encode_base64('Aladdin:open sesame'); + $decoded = decode_base64($encoded); + + print $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ==" + +See L. + +=item * + +C, by Gisle Aas, allows you to encode data +in quoted-printable encoding, as defined in RFC 2045 - I. + + use MIME::QuotedPrint; + + $encoded = encode_qp("Smiley in Unicode: \x{263a}"); + $decoded = decode_qp($encoded); + + print $encoded, "\n"; # "Smiley in Unicode: =263A" + +See also L. + +=item * + +C, by Damian Conway, is a pseudo-class for method redispatch. +See L. + +=item * + +C is a new pragma for setting the default I/O layers +for open(). + +=item * + +C, by Nick Ing-Simmons, provides the implementation +of IO to "in memory" Perl scalars as discussed above. It also serves +as an example of a loadable PerlIO layer. Other future possibilities +include PerlIO::Array and PerlIO::Code. See L. + +=item * + +C, by Nick Ing-Simmons, acts as a PerlIO layer and wraps +PerlIO layer functionality provided by a class (typically implemented +in Perl code). + +=item * + +C, by Elizabeth Mattijsen, is an example +of a C class: + + use PerlIO::via::QuotedPrint; + open($fh,">:via(QuotedPrint)",$path); + +This will automatically convert everything output to C<$fh> to +Quoted-Printable. See L and L. + +=item * + +C, by Russ Allbery, has been added, +to parse LZ<><> links in pods as described in the new +perlpodspec. + +=item * + +C, by Joe Smith, has been added. +It converts POD data to formatted overstrike text. +See L. [561+] + +=item * + +C is a selection of general-utility scalar subroutines, +such as blessed(), reftype(), and tainted(). See L. + +=item * + +C is a new pragma for controlling the behaviour of sort(). + +=item * + +C gives persistence to Perl data structures by allowing the +storage and retrieval of Perl data to and from files in a fast and +compact binary format. Because in effect Storable does serialisation +of Perl data structures, with it you can also clone deep, hierarchical +datastructures. Storable was originally created by Raphael Manfredi, +but it is now maintained by Abhijit Menon-Sen. Storable has been +enhanced to understand the two new hash features, Unicode keys and +restricted hashes. See L. + +=item * + +C, by Damian Conway, has been added. Just by saying + + use Switch; + +you have C and C available in Perl. + + use Switch; + + switch ($val) { + + case 1 { print "number 1" } + case "a" { print "string a" } + case [1..10,42] { print "number in list" } + case (@array) { print "number in list" } + case /\w+/ { print "pattern" } + case qr/\w+/ { print "pattern" } + case (%hash) { print "entry in hash" } + case (\%hash) { print "entry in hash" } + case (\&sub) { print "arg to subroutine" } + else { print "previous case not true" } + } + +See L. + +=item * + +C, by Michael Schwern, is yet another framework for writing +test scripts, more extensive than Test::Simple. See L. + +=item * + +C, by Michael Schwern, has basic utilities for writing +tests. See L. + +=item * + +C, by Damian Conway, has been added, for extracting +delimited text sequences from strings. + + use Text::Balanced 'extract_delimited'; + + ($a, $b) = extract_delimited("'never say never', he never said", "'", ''); + +$a will be "'never say never'", $b will be ', he never said'. + +In addition to extract_delimited(), there are also extract_bracketed(), +extract_quotelike(), extract_codeblock(), extract_variable(), +extract_tagged(), extract_multiple(), gen_delimited_pat(), and +gen_extract_tagged(). With these, you can implement rather advanced +parsing algorithms. See L. + +=item * + +C, by Arthur Bergman, is an interface to interpreter threads. +Interpreter threads (ithreads) is the new thread model introduced in +Perl 5.6 but only available as an internal interface for extension +writers (and for Win32 Perl for C emulation). See L, +L, and L. + +=item * + +C, by Arthur Bergman, allows data sharing for +interpreter threads. See L. + +=item * + +C, by Mark-Jason Dominus, associates a Perl array with the +lines of a file. See L. + +=item * + +C, by Ilya Zakharevich, provides on-demand loaded hashes. +See L. + +=item * + +C, by Edward Avis, allows storing hash +references (unlike the standard Tie::RefHash) The module is contained +within Tie::RefHash. See L. + +=item * + +C, by Douglas E. Wegscheid, provides high resolution +timing (ualarm, usleep, and gettimeofday). See L. + +=item * + +C offers a querying interface to the Unicode Character +Database. See L. + +=item * + +C, by SADAHIRO Tomoyuki, implements the UCA +(Unicode Collation Algorithm) for sorting Unicode strings. +See L. + +=item * + +C, by SADAHIRO Tomoyuki, implements the various +Unicode normalization forms. See L. + +=item * + +C, by Tim Jenness, is a test extension that exercises XS +APIs. Currently only C is tested: how to output various +basic data types from XS. + +=item * + +C, by Tim Jenness, is a test extension that exercises +XS typemaps. Nothing gets installed, but the code is worth studying +for extension writers. + +=back + +=head2 Updated And Improved Modules and Pragmata + +=over 4 + +=item * + +The following independently supported modules have been updated to the +newest versions from CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp, +Getopt::Long, Math::BigFloat, Math::BigInt, the podlators bundle +(Pod::Man, Pod::Text), Pod::LaTeX [561+], Pod::Parser, Storable, +Term::ANSIColor, Test, Text-Tabs+Wrap. + +=item * + +attributes::reftype() now works on tied arguments. + +=item * + +AutoLoader can now be disabled with C. + +=item * + +B::Deparse has been significantly enhanced by Robin Houston. It can +now deparse almost all of the standard test suite (so that the tests +still succeed). There is a make target "test.deparse" for trying this +out. + +=item * + +Carp now has better interface documentation, and the @CARP_NOT +interface has been added to get optional control over where errors +are reported independently of @ISA, by Ben Tilly. + +=item * + +Class::Struct can now define the classes in compile time. + +=item * + +Class::Struct now assigns the array/hash element if the accessor +is called with an array/hash element as the B argument. + +=item * + +The return value of Cwd::fastcwd() is now tainted. + +=item * + +Data::Dumper now has an option to sort hashes. + +=item * + +Data::Dumper now has an option to dump code references +using B::Deparse. + +=item * + +DB_File now supports newer Berkeley DB versions, among +other improvements. + +=item * + +Devel::Peek now has an interface for the Perl memory statistics +(this works only if you are using perl's malloc, and if you have +compiled with debugging). + +=item * + +The English module can now be used without the infamous performance +hit by saying + + use English '-no_match_vars'; + +(Assuming, of course, that you don't need the troublesome variables +C<$`>, C<$&>, or C<$'>.) Also, introduced C<@LAST_MATCH_START> and +C<@LAST_MATCH_END> English aliases for C<@-> and C<@+>. + +=item * + +ExtUtils::MakeMaker has been significantly cleaned up and fixed. +The enhanced version has also been backported to earlier releases +of Perl and submitted to CPAN so that the earlier releases can +enjoy the fixes. + +=item * + +The arguments of WriteMakefile() in Makefile.PL are now checked +for sanity much more carefully than before. This may cause new +warnings when modules are being installed. See L +for more details. + +=item * + +ExtUtils::MakeMaker now uses File::Spec internally, which hopefully +leads to better portability. + +=item * + +Fcntl, Socket, and Sys::Syslog have been rewritten by Nicholas Clark +to use the new-style constant dispatch section (see L). +This means that they will be more robust and hopefully faster. + +=item * + +File::Find now chdir()s correctly when chasing symbolic links. [561] + +=item * + +File::Find now has pre- and post-processing callbacks. It also +correctly changes directories when chasing symbolic links. Callbacks +(naughtily) exiting with "next;" instead of "return;" now work. + +=item * + +File::Find is now (again) reentrant. It also has been made +more portable. + +=item * + +The warnings issued by File::Find now belong to their own category. +You can enable/disable them with C. + +=item * + +File::Glob::glob() has been renamed to File::Glob::bsd_glob() +because the name clashes with the builtin glob(). The older +name is still available for compatibility, but is deprecated. [561] + +=item * + +File::Glob now supports C constant to limit the size of +the returned list of filenames. + +=item * + +IPC::Open3 now allows the use of numeric file descriptors. + +=item * + +IO::Socket now has an atmark() method, which returns true if the socket +is positioned at the out-of-band mark. The method is also exportable +as a sockatmark() function. + +=item * + +IO::Socket::INET failed to open the specified port if the service name +was not known. It now correctly uses the supplied port number as is. [561] + +=item * + +IO::Socket::INET has support for the ReusePort option (if your +platform supports it). The Reuse option now has an alias, ReuseAddr. +For clarity, you may want to prefer ReuseAddr. + +=item * + +IO::Socket::INET now supports a value of zero for C +(usually meaning that the operating system will make one up.) + +=item * + +'use lib' now works identically to @INC. Removing directories +with 'no lib' now works. + +=item * + +Math::BigFloat and Math::BigInt have undergone a full rewrite by Tels. +They are now magnitudes faster, and they support various bignum +libraries such as GMP and PARI as their backends. + +=item * + +Math::Complex handles inf, NaN etc., better. + +=item * + +Net::Ping has been considerably enhanced by Rob Brown: multihoming is +now supported, Win32 functionality is better, there is now time +measuring functionality (optionally high-resolution using +Time::HiRes), and there is now "external" protocol which uses +Net::Ping::External module which runs your external ping utility and +parses the output. A version of Net::Ping::External is available in +CPAN. + +Note that some of the Net::Ping tests are disabled when running +under the Perl distribution since one cannot assume one or more +of the following: enabled echo port at localhost, full Internet +connectivity, or sympathetic firewalls. You can set the environment +variable PERL_TEST_Net_Ping to "1" (one) before running the Perl test +suite to enable all the Net::Ping tests. + +=item * + +POSIX::sigaction() is now much more flexible and robust. +You can now install coderef handlers, 'DEFAULT', and 'IGNORE' +handlers, installing new handlers was not atomic. + +=item * + +In Safe, C<%INC> is now localised in a Safe compartment so that +use/require work. + +=item * + +In SDBM_File on dosish platforms, some keys went missing because of +lack of support for files with "holes". A workaround for the problem +has been added. + +=item * + +In Search::Dict one can now have a pre-processing hook for the +lines being searched. + +=item * + +The Shell module now has an OO interface. + +=item * + +In Sys::Syslog there is now a failover mechanism that will go +through alternative connection mechanisms until the message +is successfully logged. + +=item * + +The Test module has been significantly enhanced. + +=item * + +Time::Local::timelocal() does not handle fractional seconds anymore. +The rationale is that neither does localtime(), and timelocal() and +localtime() are supposed to be inverses of each other. + +=item * + +The vars pragma now supports declaring fully qualified variables. +(Something that C does not and will not support.) + +=item * + +The C name space (as in the pragma) provides various +Perl-callable functions to provide low level access to Perl's +internal Unicode representation. At the moment only length() +has been implemented. + +=back + +=head1 Utility Changes + +=over 4 + +=item * + +Emacs perl mode (emacs/cperl-mode.el) has been updated to version +4.31. + +=item * + +F is now much faster. + +=item * + +C is a tool for people adding their own encodings to the +Encode module. + +=item * + +C now supports C trigraphs. + +=item * + +C now produces a template README. + +=item * + +C now uses C for better portability between +different versions of Perl. + +=item * + +C uses the new L module +which will affect newly created extensions that define constants. +Since the new code is more correct (if you have two constants where the +first one is a prefix of the second one, the first constant B +got defined), less lossy (it uses integers for integer constant, +as opposed to the old code that used floating point numbers even for +integer constants), and slightly faster, you might want to consider +regenerating your extension code (the new scheme makes regenerating +easy). L now also supports C trigraphs. + +=item * + +C has been added to configure libnet. + +=item * + +C is now much more robust. It also sends the bug report to +perl.org, not perl.com. + +=item * + +C has been rewritten and its user interface (that is, +command line) is much more like that of the UNIX C compiler, cc. +(The perlbc tools has been removed. Use C instead.) +B [561] + +=item * + +C is a new Installation Verification Procedure utility +for running any time after installing Perl. + +=item * + +C is an implementation of the character conversion utility +C, demonstrating the new Encode module. + +=item * + +C now allows specifying a cache directory. + +=item * + +C now produces XHTML 1.0. + +=item * + +C now understands POD written using different line endings +(PC-like CRLF versus UNIX-like LF versus MacClassic-like CR). + +=item * + +C has been completely rewritten in Perl. (It is in fact a full +implementation of sed in Perl: you can use the sed functionality by +using the C utility.) + +=item * + +C now understands POD documentation embedded in the *.xs +files. [561] + +=item * + +C now supports the OUT keyword. + +=back + +=head1 New Documentation + +=over 4 + +=item * + +perl56delta details the changes between the 5.005 release and the +5.6.0 release. + +=item * + +perlclib documents the internal replacements for standard C library +functions. (Interesting only for extension writers and Perl core +hackers.) [561+] + +=item * + +perldebtut is a Perl debugging tutorial. [561+] + +=item * + +perlebcdic contains considerations for running Perl on EBCDIC +platforms. [561+] + +=item * + +perlintro is a gentle introduction to Perl. + +=item * + +perliol documents the internals of PerlIO with layers. + +=item * + +perlmodstyle is a style guide for writing modules. + +=item * + +perlnewmod tells about writing and submitting a new module. [561+] + +=item * + +perlpacktut is a pack() tutorial. + +=item * + +perlpod has been rewritten to be clearer and to record the best +practices gathered over the years. + +=item * + +perlpodspec is a more formal specification of the pod format, +mainly of interest for writers of pod applications, not to +people writing in pod. + +=item * + +perlretut is a regular expression tutorial. [561+] + +=item * + +perlrequick is a regular expressions quick-start guide. +Yes, much quicker than perlretut. [561] + +=item * + +perltodo has been updated. + +=item * + +perltootc has been renamed as perltooc (to not to conflict +with perltoot in filesystems restricted to "8.3" names). + +=item * + +perluniintro is an introduction to using Unicode in Perl. +(perlunicode is more of a detailed reference and background +information) + +=item * + +perlutil explains the command line utilities packaged with the Perl +distribution. [561+] + +=back + +The following platform-specific documents are available before +the installation as README.I, and after the installation +as perlI: + + perlaix perlamiga perlapollo perlbeos perlbs2000 + perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux + perlhurd perlirix perlmachten perlmacos perlmint perlmpeix + perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris + perltru64 perluts perlvmesa perlvms perlvos perlwin32 + +These documents usually detail one or more of the following subjects: +configuring, building, testing, installing, and sometimes also using +Perl on the said platform. + +Eastern Asian Perl users are now welcomed in their own languages: +README.jp (Japanese), README.ko (Korean), README.cn (simplified +Chinese) and README.tw (traditional Chinese), which are written in +normal pod but encoded in EUC-JP, EUC-KR, EUC-CN and Big5. These +will get installed as + + perljp perlko perlcn perltw + +=over 4 + +=item * + +The documentation for the POSIX-BC platform is called "BS2000", to avoid +confusion with the Perl POSIX module. + +=item * + +The documentation for the WinCE platform is called perlce (README.ce +in the source code kit), to avoid confusion with the perlwin32 +documentation on 8.3-restricted filesystems. + +=back + +=head1 Performance Enhancements + +=over 4 + +=item * + +map() could get pathologically slow when the result list it generates +is larger than the source list. The performance has been improved for +common scenarios. [561] + +=item * + +sort() is also fully reentrant, in the sense that the sort function +can itself call sort(). This did not work reliably in previous +releases. [561] + +=item * + +sort() has been changed to use primarily mergesort internally as +opposed to the earlier quicksort. For very small lists this may +result in slightly slower sorting times, but in general the speedup +should be at least 20%. Additional bonuses are that the worst case +behaviour of sort() is now better (in computer science terms it now +runs in time O(N log N), as opposed to quicksort's Theta(N**2) +worst-case run time behaviour), and that sort() is now stable +(meaning that elements with identical keys will stay ordered as they +were before the sort). See the C pragma for information. + +The story in more detail: suppose you want to serve yourself a little +slice of Pi. + + @digits = ( 3,1,4,1,5,9 ); + +A numerical sort of the digits will yield (1,1,3,4,5,9), as expected. +Which C<1> comes first is hard to know, since one C<1> looks pretty +much like any other. You can regard this as totally trivial, +or somewhat profound. However, if you just want to sort the even +digits ahead of the odd ones, then what will + + sort { ($a % 2) <=> ($b % 2) } @digits; + +yield? The only even digit, C<4>, will come first. But how about +the odd numbers, which all compare equal? With the quicksort algorithm +used to implement Perl 5.6 and earlier, the order of ties is left up +to the sort. So, as you add more and more digits of Pi, the order +in which the sorted even and odd digits appear will change. +and, for sufficiently large slices of Pi, the quicksort algorithm +in Perl 5.8 won't return the same results even if reinvoked with the +same input. The justification for this rests with quicksort's +worst case behavior. If you run + + sort { $a <=> $b } ( 1 .. $N , 1 .. $N ); + +(something you might approximate if you wanted to merge two sorted +arrays using sort), doubling $N doesn't just double the quicksort time, +it I it. Quicksort has a worst case run time that can +grow like N**2, so-called I behaviour, and it can happen +on patterns that may well arise in normal use. You won't notice this +for small arrays, but you I notice it with larger arrays, +and you may not live long enough for the sort to complete on arrays +of a million elements. So the 5.8 quicksort scrambles large arrays +before sorting them, as a statistical defence against quadratic behaviour. +But that means if you sort the same large array twice, ties may be +broken in different ways. + +Because of the unpredictability of tie-breaking order, and the quadratic +worst-case behaviour, quicksort was I replaced completely with +a stable mergesort. I means that ties are broken to preserve +the original order of appearance in the input array. So + + sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9); + +will yield (4,3,1,1,5,9), guaranteed. The even and odd numbers +appear in the output in the same order they appeared in the input. +Mergesort has worst case O(N log N) behaviour, the best value +attainable. And, ironically, this mergesort does particularly +well where quicksort goes quadratic: mergesort sorts (1..$N, 1..$N) +in O(N) time. But quicksort was rescued at the last moment because +it is faster than mergesort on certain inputs and platforms. +For example, if you really I care about the order of even +and odd digits, quicksort will run in O(N) time; it's very good +at sorting many repetitions of a small number of distinct elements. +The quicksort divide and conquer strategy works well on platforms +with relatively small, very fast, caches. Eventually, the problem gets +whittled down to one that fits in the cache, from which point it +benefits from the increased memory speed. + +Quicksort was rescued by implementing a sort pragma to control aspects +of the sort. The B subpragma forces stable behaviour, +regardless of algorithm. The B<_quicksort> and B<_mergesort> +subpragmas are heavy-handed ways to select the underlying implementation. +The leading C<_> is a reminder that these subpragmas may not survive +beyond 5.8. More appropriate mechanisms for selecting the implementation +exist, but they wouldn't have arrived in time to save quicksort. + +=item * + +Hashes now use Bob Jenkins "One-at-a-Time" hashing key algorithm +( http://burtleburtle.net/bob/hash/doobs.html ). This algorithm is +reasonably fast while producing a much better spread of values than +the old hashing algorithm (originally by Chris Torek, later tweaked by +Ilya Zakharevich). Hash values output from the algorithm on a hash of +all 3-char printable ASCII keys comes much closer to passing the +DIEHARD random number generation tests. According to perlbench, this +change has not affected the overall speed of Perl. + +=item * + +unshift() should now be noticeably faster. + +=back + +=head1 Installation and Configuration Improvements + +=head2 Generic Improvements + +=over 4 + +=item * + +INSTALL now explains how you can configure Perl to use 64-bit +integers even on non-64-bit platforms. + +=item * + +Policy.sh policy change: if you are reusing a Policy.sh file +(see INSTALL) and you use Configure -Dprefix=/foo/bar and in the old +Policy $prefix eq $siteprefix and $prefix eq $vendorprefix, all of +them will now be changed to the new prefix, /foo/bar. (Previously +only $prefix changed.) If you do not like this new behaviour, +specify prefix, siteprefix, and vendorprefix explicitly. + +=item * + +A new optional location for Perl libraries, otherlibdirs, is available. +It can be used for example for vendor add-ons without disturbing Perl's +own library directories. + +=item * + +In many platforms, the vendor-supplied 'cc' is too stripped-down to +build Perl (basically, 'cc' doesn't do ANSI C). If this seems +to be the case and 'cc' does not seem to be the GNU C compiler +'gcc', an automatic attempt is made to find and use 'gcc' instead. + +=item * + +gcc needs to closely track the operating system release to avoid +build problems. If Configure finds that gcc was built for a different +operating system release than is running, it now gives a clearly visible +warning that there may be trouble ahead. + +=item * + +Since Perl 5.8 is not binary-compatible with previous releases +of Perl, Configure no longer suggests including the 5.005 +modules in @INC. + +=item * + +Configure C<-S> can now run non-interactively. [561] + +=item * + +Configure support for pdp11-style memory models has been removed due +to obsolescence. [561] + +=item * + +configure.gnu now works with options with whitespace in them. + +=item * + +installperl now outputs everything to STDERR. + +=item * + +Because PerlIO is now the default on most platforms, "-perlio" doesn't +get appended to the $Config{archname} (also known as $^O) anymore. +Instead, if you explicitly choose not to use perlio (Configure command +line option -Uuseperlio), you will get "-stdio" appended. + +=item * + +Another change related to the architecture name is that "-64all" +(-Duse64bitall, or "maximally 64-bit") is appended only if your +pointers are 64 bits wide. (To be exact, the use64bitall is ignored.) + +=item * + +In AFS installations, one can configure the root of the AFS to be +somewhere else than the default F by using the Configure +parameter C<-Dafsroot=/some/where/else>. + +=item * + +APPLLIB_EXP, a lesser-known configuration-time definition, has been +documented. It can be used to prepend site-specific directories +to Perl's default search path (@INC); see INSTALL for information. + +=item * + +The version of Berkeley DB used when the Perl (and, presumably, the +DB_File extension) was built is now available as +C<@Config{qw(db_version_major db_version_minor db_version_patch)}> +from Perl and as C from C. + +=item * + +Building Berkeley DB3 for compatibility modes for DB, NDBM, and ODBM +has been documented in INSTALL. + +=item * + +If you have CPAN access (either network or a local copy such as a +CD-ROM) you can during specify extra modules to Configure to build and +install with Perl using the -Dextras=... option. See INSTALL for +more details. + +=item * + +In addition to config.over, a new override file, config.arch, is +available. This file is supposed to be used by hints file writers +for architecture-wide changes (as opposed to config.over which is +for site-wide changes). + +=item * + +If your file system supports symbolic links, you can build Perl outside +of the source directory by + + mkdir /tmp/perl/build/directory + cd /tmp/perl/build/directory + sh /path/to/perl/source/Configure -Dmksymlinks ... + +This will create in /tmp/perl/build/directory a tree of symbolic links +pointing to files in /path/to/perl/source. The original files are left +unaffected. After Configure has finished, you can just say + + make all test + +and Perl will be built and tested, all in /tmp/perl/build/directory. +[561] + +=item * + +For Perl developers, several new make targets for profiling +and debugging have been added; see L. + +=over 8 + +=item * + +Use of the F tool to profile Perl has been documented in +L. There is a make target called "perl.gprof" for +generating a gprofiled Perl executable. + +=item * + +If you have GCC 3, there is a make target called "perl.gcov" for +creating a gcoved Perl executable for coverage analysis. See +L. + +=item * + +If you are on IRIX or Tru64 platforms, new profiling/debugging options +have been added; see L for more information about pixie and +Third Degree. + +=back + +=item * + +Guidelines of how to construct minimal Perl installations have +been added to INSTALL. + +=item * + +The Thread extension is now not built at all under ithreads +(C) because it wouldn't work anyway (the +Thread extension requires being Configured with C<-Duse5005threads>). + +B + +=item * + +The Gconvert macro ($Config{d_Gconvert}) used by perl for stringifying +floating-point numbers is now more picky about using sprintf %.*g +rules for the conversion. Some platforms that used to use gcvt may +now resort to the slower sprintf. + +=item * + +The obsolete method of making a special (e.g., debugging) flavor +of perl by saying + + make LIBPERL=libperld.a + +has been removed. Use -DDEBUGGING instead. + +=back + +=head2 New Or Improved Platforms + +For the list of platforms known to support Perl, +see L. + +=over 4 + +=item * + +AIX dynamic loading should be now better supported. + +=item * + +AIX should now work better with gcc, threads, and 64-bitness. Also the +long doubles support in AIX should be better now. See L. + +=item * + +AtheOS ( http://www.atheos.cx/ ) is a new platform. + +=item * + +BeOS has been reclaimed. + +=item * + +The DG/UX platform now supports 5.005-style threads. +See L. + +=item * + +The DYNIX/ptx platform (also known as dynixptx) is supported at or +near osvers 4.5.2. + +=item * + +EBCDIC platforms (z/OS (also known as OS/390), POSIX-BC, and VM/ESA) +have been regained. Many test suite tests still fail and the +co-existence of Unicode and EBCDIC isn't quite settled, but the +situation is much better than with Perl 5.6. See L, +L (for POSIX-BC), and L for more information. + +=item * + +Building perl with -Duseithreads or -Duse5005threads now works under +HP-UX 10.20 (previously it only worked under 10.30 or later). You will +need a thread library package installed. See README.hpux. [561] + +=item * + +Mac OS Classic is now supported in the mainstream source package +(MacPerl has of course been available since perl 5.004 but now the +source code bases of standard Perl and MacPerl have been synchronised) +[561] + +=item * + +Mac OS X (or Darwin) should now be able to build Perl even on HFS+ +filesystems. (The case-insensitivity used to confuse the Perl build +process.) + +=item * + +NCR MP-RAS is now supported. [561] + +=item * + +All the NetBSD specific patches (except for the installation +specific ones) have been merged back to the main distribution. + +=item * + +NetWare from Novell is now supported. See L. + +=item * + +NonStop-UX is now supported. [561] + +=item * + +NEC SUPER-UX is now supported. + +=item * + +All the OpenBSD specific patches (except for the installation +specific ones) have been merged back to the main distribution. + +=item * + +Perl has been tested with the GNU pth userlevel thread package +( http://www.gnu.org/software/pth/pth.html ). All thread tests +of Perl now work, but not without adding some yield()s to the tests, +so while pth (and other userlevel thread implementations) can be +considered to be "working" with Perl ithreads, keep in mind the +possible non-preemptability of the underlying thread implementation. + +=item * + +Stratus VOS is now supported using Perl's native build method +(Configure). This is the recommended method to build Perl on +VOS. The older methods, which build miniperl, are still +available. See L. [561+] + +=item * + +The Amdahl UTS UNIX mainframe platform is now supported. [561] + +=item * + +WinCE is now supported. See L. + +=item * + +z/OS (formerly known as OS/390, formerly known as MVS OE) now has +support for dynamic loading. This is not selected by default, +however, you must specify -Dusedl in the arguments of Configure. [561] + +=back + +=head1 Selected Bug Fixes + +Numerous memory leaks and uninitialized memory accesses have been +hunted down. Most importantly, anonymous subs used to leak quite +a bit. [561] + +=over 4 + +=item * + +The autouse pragma didn't work for Multi::Part::Function::Names. + +=item * + +caller() could cause core dumps in certain situations. Carp was +sometimes affected by this problem. In particular, caller() now +returns a subroutine name of C<(unknown)> for subroutines that have +been removed from the symbol table. + +=item * + +chop(@list) in list context returned the characters chopped in +reverse order. This has been reversed to be in the right order. [561] + +=item * + +Configure no longer includes the DBM libraries (dbm, gdbm, db, ndbm) +when building the Perl binary. The only exception to this is SunOS 4.x, +which needs them. [561] + +=item * + +The behaviour of non-decimal but numeric string constants such as +"0x23" was platform-dependent: in some platforms that was seen as 35, +in some as 0, in some as a floating point number (don't ask). This +was caused by Perl's using the operating system libraries in a situation +where the result of the string to number conversion is undefined: now +Perl consistently handles such strings as zero in numeric contexts. + +=item * + +Several debugger fixes: exit code now reflects the script exit code, +condition C<"0"> now treated correctly, the C command now checks +line number, C<$.> no longer gets corrupted, and all debugger output +now goes correctly to the socket if RemotePort is set. [561] + +=item * + +The debugger (perl5db.pl) has been modified to present a more +consistent commands interface, via (CommandSet=580). perl5db.t was +also added to test the changes, and as a placeholder for further tests. + +See L. + +=item * + +The debugger has a new C option to control the maximum +depth to which nested structures are dumped. The C command has +been extended so that C dumps out the value of I to a +depth of at most I levels. + +=item * + +The debugger can now show lexical variables if you have the CPAN +module PadWalker installed. + +=item * + +The order of DESTROYs has been made more predictable. + +=item * + +Perl 5.6.0 could emit spurious warnings about redefinition of +dl_error() when statically building extensions into perl. +This has been corrected. [561] + +=item * + +L -R didn't work. + +=item * + +C<*foo{FORMAT}> now works. + +=item * + +Infinity is now recognized as a number. + +=item * + +UNIVERSAL::isa no longer caches methods incorrectly. (This broke +the Tk extension with 5.6.0.) [561] + +=item * + +Lexicals I: lexicals outside an eval "" weren't resolved +correctly inside a subroutine definition inside the eval "" if they +were not already referenced in the top level of the eval""ed code. + +=item * + +Lexicals II: lexicals leaked at file scope into subroutines that +were declared before the lexicals. + +=item * + +Lexical warnings now propagating correctly between scopes +and into C. + +=item * + +C did not work as intended. This has been +corrected. [561] + +=item * + +warnings::enabled() now reports the state of $^W correctly if the caller +isn't using lexical warnings. [561] + +=item * + +Line renumbering with eval and C<#line> now works. [561] + +=item * + +Fixed numerous memory leaks, especially in eval "". + +=item * + +Localised tied variables no longer leak memory + + use Tie::Hash; + tie my %tied_hash => 'Tie::StdHash'; + + ... + + # Used to leak memory every time local() was called; + # in a loop, this added up. + local($tied_hash{Foo}) = 1; + +=item * + +Localised hash elements (and %ENV) are correctly unlocalised to not +exist, if they didn't before they were localised. + + + use Tie::Hash; + tie my %tied_hash => 'Tie::StdHash'; + + ... + + # Nothing has set the FOO element so far + + { local $tied_hash{FOO} = 'Bar' } + + # This used to print, but not now. + print "exists!\n" if exists $tied_hash{FOO}; + +As a side effect of this fix, tied hash interfaces B define +the EXISTS and DELETE methods. + +=item * + +mkdir() now ignores trailing slashes in the directory name, +as mandated by POSIX. + +=item * + +Some versions of glibc have a broken modfl(). This affects builds +with C<-Duselongdouble>. This version of Perl detects this brokenness +and has a workaround for it. The glibc release 2.2.2 is known to have +fixed the modfl() bug. + +=item * + +Modulus of unsigned numbers now works (4063328477 % 65535 used to +return 27406, instead of 27047). [561] + +=item * + +Some "not a number" warnings introduced in 5.6.0 eliminated to be +more compatible with 5.005. Infinity is now recognised as a number. [561] + +=item * + +Numeric conversions did not recognize changes in the string value +properly in certain circumstances. [561] + +=item * + +Attributes (such as :shared) didn't work with our(). + +=item * + +our() variables will not cause bogus "Variable will not stay shared" +warnings. [561] + +=item * + +"our" variables of the same name declared in two sibling blocks +resulted in bogus warnings about "redeclaration" of the variables. +The problem has been corrected. [561] + +=item * + +pack "Z" now correctly terminates the string with "\0". + +=item * + +Fix password routines which in some shadow password platforms +(e.g. HP-UX) caused getpwent() to return every other entry. + +=item * + +The PERL5OPT environment variable (for passing command line arguments +to Perl) didn't work for more than a single group of options. [561] + +=item * + +PERL5OPT with embedded spaces didn't work. + +=item * + +printf() no longer resets the numeric locale to "C". + +=item * + +C now parses correctly as C<'a\\b'>: that is, as three +characters, not four. [561] + +=item * + +pos() did not return the correct value within s///ge in earlier +versions. This is now handled correctly. [561] + +=item * + +Printing quads (64-bit integers) with printf/sprintf now works +without the q L ll prefixes (assuming you are on a quad-capable platform). + +=item * + +Regular expressions on references and overloaded scalars now work. [561+] + +=item * + +Right-hand side magic (GMAGIC) could in many cases such as string +concatenation be invoked too many times. + +=item * + +scalar() now forces scalar context even when used in void context. + +=item * + +SOCKS support is now much more robust. + +=item * + +sort() arguments are now compiled in the right wantarray context +(they were accidentally using the context of the sort() itself). +The comparison block is now run in scalar context, and the arguments +to be sorted are always provided list context. [561] + +=item * + +Changed the POSIX character class C<[[:space:]]> to include the (very +rarely used) vertical tab character. Added a new POSIX-ish character +class C<[[:blank:]]> which stands for horizontal whitespace +(currently, the space and the tab). + +=item * + +The tainting behaviour of sprintf() has been rationalized. It does +not taint the result of floating point formats anymore, making the +behaviour consistent with that of string interpolation. [561] + +=item * + +Some cases of inconsistent taint propagation (such as within hash +values) have been fixed. + +=item * + +The RE engine found in Perl 5.6.0 accidentally pessimised certain kinds +of simple pattern matches. These are now handled better. [561] + +=item * + +Regular expression debug output (whether through C +or via C<-Dr>) now looks better. [561] + +=item * + +Multi-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed. The +bug has been fixed. [561] + +=item * + +Use of $& could trigger a core dump under some situations. This +is now avoided. [561] + +=item * + +The regular expression captured submatches ($1, $2, ...) are now +more consistently unset if the match fails, instead of leaving false +data lying around in them. [561] + +=item * + +readline() on files opened in "slurp" mode could return an extra +"" (blank line) at the end in certain situations. This has been +corrected. [561] + +=item * + +Autovivification of symbolic references of special variables described +in L (as in C<${$num}>) was accidentally disabled. This works +again now. [561] + +=item * + +Sys::Syslog ignored the C constant. + +=item * + +$AUTOLOAD, sort(), lock(), and spawning subprocesses +in multiple threads simultaneously are now thread-safe. + +=item * + +Tie::Array's SPLICE method was broken. + +=item * + +Allow a read-only string on the left-hand side of a non-modifying tr///. + +=item * + +If C is tied, warnings caused by C and C now +correctly pass to it. + +=item * + +Several Unicode fixes. + +=over 8 + +=item * + +BOMs (byte order marks) at the beginning of Perl files +(scripts, modules) should now be transparently skipped. +UTF-16 and UCS-2 encoded Perl files should now be read correctly. + +=item * + +The character tables have been updated to Unicode 3.2.0. + +=item * + +Comparing with utf8 data does not magically upgrade non-utf8 data +into utf8. (This was a problem for example if you were mixing data +from I/O and Unicode data: your output might have got magically encoded +as UTF-8.) + +=item * + +Generating illegal Unicode code points such as U+FFFE, or the UTF-16 +surrogates, now also generates an optional warning. + +=item * + +C, C, and C now match titlecase. + +=item * + +Concatenation with the C<.> operator or via variable interpolation, +C, C, C, C, the C operator, +substitution with C, single-quoted UTF8, should now work. + +=item * + +The C operator now works. Note that the C +functionality has been removed (but see pack('U0', ...)). + +=item * + +C now works. + +=item * + +Perl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings. +This has been corrected. [561] + +=item * + +Zero entries were missing from the Unicode classes such as C. + +=back + +=item * + +Large unsigned numbers (those above 2**31) could sometimes lose their +unsignedness, causing bogus results in arithmetic operations. [561] + +=item * + +The Perl parser has been stress tested using both random input and +Markov chain input and the few found crashes and lockups have been +fixed. + +=back + +=head2 Platform Specific Changes and Fixes + +=over 4 + +=item * + +BSDI 4.* + +Perl now works on post-4.0 BSD/OSes. + +=item * + +All BSDs + +Setting C<$0> now works (as much as possible; see L for details). + +=item * + +Cygwin + +Numerous updates; currently synchronised with Cygwin 1.3.10. + +=item * + +Previously DYNIX/ptx had problems in its Configure probe for non-blocking I/O. + +=item * + +EPOC + +EPOC now better supported. See README.epoc. [561] + +=item * + +FreeBSD 3.* + +Perl now works on post-3.0 FreeBSDs. + +=item * + +HP-UX + +README.hpux updated; C now works; +now uses HP-UX malloc instead of Perl malloc. + +=item * + +IRIX + +Numerous compilation flag and hint enhancements; accidental mixing +of 32-bit and 64-bit libraries (a doomed attempt) made much harder. + +=item * + +Linux + +=over 8 + +=item * + +Long doubles should now work (see INSTALL). [561] + +=item * + +Linux previously had problems related to sockaddrlen when using +accept(), recvfrom() (in Perl: recv()), getpeername(), and +getsockname(). + +=back + +=item * + +Mac OS Classic + +Compilation of the standard Perl distribution in Mac OS Classic should +now work if you have the Metrowerks development environment and the +missing Mac-specific toolkit bits. Contact the macperl mailing list +for details. + +=item * + +MPE/iX + +MPE/iX update after Perl 5.6.0. See README.mpeix. [561] + +=item * + +NetBSD/threads: try installing the GNU pth (should be in the +packages collection, or http://www.gnu.org/software/pth/), +and Configure with -Duseithreads. + +=item * + +NetBSD/sparc + +Perl now works on NetBSD/sparc. + +=item * + +OS/2 + +Now works with usethreads (see INSTALL). [561] + +=item * + +Solaris + +64-bitness using the Sun Workshop compiler now works. + +=item * + +Stratus VOS + +The native build method requires at least VOS Release 14.5.0 +and GNU C++/GNU Tools 2.0.1 or later. The Perl pack function +now maps overflowed values to +infinity and underflowed values +to -infinity. + +=item * + +Tru64 (aka Digital UNIX, aka DEC OSF/1) + +The operating system version letter now recorded in $Config{osvers}. +Allow compiling with gcc (previously explicitly forbidden). Compiling +with gcc still not recommended because buggy code results, even with +gcc 2.95.2. + +=item * + +Unicos + +Fixed various alignment problems that lead into core dumps either +during build or later; no longer dies on math errors at runtime; +now using full quad integers (64 bits), previously was using +only 46 bit integers for speed. + +=item * + +VMS + +See L and L for important changes not otherwise listed here. + +chdir() now works better despite a CRT bug; now works with MULTIPLICITY +(see INSTALL); now works with Perl's malloc. + +The tainting of C<%ENV> elements via C or C was previously +unimplemented. It now works as documented. + +The C emulation has been improved. The worst bug (now fixed) +was that a pid of -1 would cause a wildcard search of all processes on +the system. + +POSIX-style signals are now emulated much better on VMS versions prior +to 7.0. + +The C function and backticks operator have improved +functionality and better error handling. [561] + +File access tests now use current process privileges rather than the +user's default privileges, which could sometimes result in a mismatch +between reported access and actual access. This improvement is only +available on VMS v6.0 and later. + +There is a new C implementation based on C that allows +older VMS systems (pre-7.0) to use C to send signals rather than +simply force exit. This implementation also allows later systems to +call C from within a signal handler. + +Iterative logical name translations are now limited to 10 iterations in +imitation of SHOW LOGICAL and other OpenVMS facilities. + +=item * + +Windows + +=over 8 + +=item * + +Signal handling now works better than it used to. It is now implemented +using a Windows message loop, and is therefore less prone to random +crashes. + +=item * + +fork() emulation is now more robust, but still continues to have a few +esoteric bugs and caveats. See L for details. [561+] + +=item * + +A failed (pseudo)fork now returns undef and sets errno to EAGAIN. [561] + +=item * + +The following modules now work on Windows: + + ExtUtils::Embed [561] + IO::Pipe + IO::Poll + Net::Ping + +=item * + +IO::File::new_tmpfile() is no longer limited to 32767 invocations +per-process. + +=item * + +Better chdir() return value for a non-existent directory. + +=item * + +Compiling perl using the 64-bit Platform SDK tools is now supported. + +=item * + +The Win32::SetChildShowWindow() builtin can be used to control the +visibility of windows created by child processes. See L for +details. + +=item * + +Non-blocking waits for child processes (or pseudo-processes) are +supported via C. + +=item * + +The behavior of system() with multiple arguments has been rationalized. +Each unquoted argument will be automatically quoted to protect whitespace, +and any existing whitespace in the arguments will be preserved. This +improves the portability of system(@args) by avoiding the need for +Windows C shell specific quoting in perl programs. + +Note that this means that some scripts that may have relied on earlier +buggy behavior may no longer work correctly. For example, +C will now attempt to run the file +C and will fail when such a file isn't found. +On the other hand, perl will now execute code such as +C correctly. + +=item * + +The perl header files no longer suppress common warnings from the +Microsoft Visual C++ compiler. This means that additional warnings may +now show up when compiling XS code. + +=item * + +Borland C++ v5.5 is now a supported compiler that can build Perl. +However, the generated binaries continue to be incompatible with those +generated by the other supported compilers (GCC and Visual C++). [561] + +=item * + +Duping socket handles with open(F, ">&MYSOCK") now works under Windows 9x. +[561] + +=item * + +Current directory entries in %ENV are now correctly propagated to child +processes. [561] + +=item * + +New %ENV entries now propagate to subprocesses. [561] + +=item * + +Win32::GetCwd() correctly returns C:\ instead of C: when at the drive root. +Other bugs in chdir() and Cwd::cwd() have also been fixed. [561] + +=item * + +The makefiles now default to the features enabled in ActiveState ActivePerl +(a popular Win32 binary distribution). [561] + +=item * + +HTML files will now be installed in c:\perl\html instead of +c:\perl\lib\pod\html + +=item * + +REG_EXPAND_SZ keys are now allowed in registry settings used by perl. [561] + +=item * + +Can now send() from all threads, not just the first one. [561] + +=item * + +ExtUtils::MakeMaker now uses $ENV{LIB} to search for libraries. [561] + +=item * + +Less stack reserved per thread so that more threads can run +concurrently. (Still 16M per thread.) [561] + +=item * + +C<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp +(works better when perl is running as service). + +=item * + +Better UNC path handling under ithreads. [561] + +=item * + +wait(), waitpid(), and backticks now return the correct exit status +under Windows 9x. [561] + +=item * + +A socket handle leak in accept() has been fixed. [561] + +=back + +=back + +=head1 New or Changed Diagnostics + +Please see L for more details. + +=over 4 + +=item * + +Ambiguous range in the transliteration operator (like a-z-9) now +gives a warning. + +=item * + +chdir("") and chdir(undef) now give a deprecation warning because they +cause a possible unintentional chdir to the home directory. +Say chdir() if you really mean that. + +=item * + +Two new debugging options have been added: if you have compiled your +Perl with debugging, you can use the -DT [561] and -DR options to trace +tokenising and to add reference counts to displaying variables, +respectively. + +=item * + +The lexical warnings category "deprecated" is no longer a sub-category +of the "syntax" category. It is now a top-level category in its own +right. + +=item * + +Unadorned dump() will now give a warning suggesting to +use explicit CORE::dump() if that's what really is meant. + +=item * + +The "Unrecognized escape" warning has been extended to include C<\8>, +C<\9>, and C<\_>. There is no need to escape any of the C<\w> characters. + +=item * + +All regular expression compilation error messages are now hopefully +easier to understand both because the error message now comes before +the failed regex and because the point of failure is now clearly +marked by a C-- HERE> marker. + +=item * + +Various I/O (and socket) functions like binmode(), close(), and so +forth now more consistently warn if they are used illogically either +on a yet unopened or on an already closed filehandle (or socket). + +=item * + +Using lstat() on a filehandle now gives a warning. (It's a non-sensical +thing to do.) + +=item * + +The C<-M> and C<-m> options now warn if you didn't supply the module name. + +=item * + +If you in C specify a required minimum version, modules matching +the name and but not defining a $VERSION will cause a fatal failure. + +=item * + +Using negative offset for vec() in lvalue context is now a warnable offense. + +=item * + +Odd number of arguments to oveload::constant now elicits a warning. + +=item * + +Odd number of elements to in anonymous hash now elicits a warning. + +=item * + +The various "opened only for", "on closed", "never opened" warnings +drop the C prefix for filehandles in the C
package, +for example C instead of C. + +=item * + +Subroutine prototypes are now checked more carefully, you may +get warnings for example if you have used non-prototype characters. + +=item * + +If an attempt to use a (non-blessed) reference as an array index +is made, a warning is given. + +=item * + +C and C (with no values to push or unshift) +now give a warning. This may be a problem for generated and evaled +code. + +=item * + +If you try to L a number less than 0 or larger than 255 +using the C<"C"> format you will get an optional warning. Similarly +for the C<"c"> format and a number less than -128 or more than 127. + +=item * + +pack C

format now demands an explicit size. + +=item * + +unpack C now warns of unterminated compressed integers. + +=item * + +Warnings relating to the use of PerlIO have been added. + +=item * + +Certain regex modifiers such as C<(?o)> make sense only if applied to +the entire regex. You will get an optional warning if you try to do +otherwise. + +=item * + +Variable length lookbehind has not yet been implemented, trying to +use it will tell that. + +=item * + +Using arrays or hashes as references (e.g. C<< %foo->{bar} >> +has been deprecated for a while. Now you will get an optional warning. + +=item * + +Warnings relating to the use of the new restricted hashes feature +have been added. + +=item * + +Self-ties of arrays and hashes are not supported and fatal errors +will happen even at an attempt to do so. + +=item * + +Using C in scalar context now issues an optional warning. +This didn't do anything useful, as the sort was not performed. + +=item * + +Using the /g modifier in split() is meaningless and will cause a warning. + +=item * + +Using splice() past the end of an array now causes a warning. + +=item * + +Malformed Unicode encodings (UTF-8 and UTF-16) cause a lot of warnings, +ad doestrying to use UTF-16 surrogates (which are unimplemented). + +=item * + +Trying to use Unicode characters on an I/O stream without marking the +stream's encoding (using open() or binmode()) will cause "Wide character" +warnings. + +=item * + +Use of v-strings in use/require causes a (backward) portability warning. + +=item * + +Warnings relating to the use interpreter threads and their shared data +have been added. + +=back + +=head1 Changed Internals + +=over 4 + +=item * + +PerlIO is now the default. + +=item * + +perlapi.pod (a companion to perlguts) now attempts to document the +internal API. + +=item * + +You can now build a really minimal perl called microperl. +Building microperl does not require even running Configure; +C should be enough. Beware: microperl makes +many assumptions, some of which may be too bold; the resulting +executable may crash or otherwise misbehave in wondrous ways. +For careful hackers only. + +=item * + +Added rsignal(), whichsig(), do_join(), op_clear, op_null, +ptr_table_clear(), ptr_table_free(), sv_setref_uv(), and several UTF-8 +interfaces to the publicised API. For the full list of the available +APIs see L. + +=item * + +Made possible to propagate customised exceptions via croak()ing. + +=item * + +Now xsubs can have attributes just like subs. (Well, at least the +built-in attributes.) + +=item * + +dTHR and djSP have been obsoleted; the former removed (because it's +a no-op) and the latter replaced with dSP. + +=item * + +PERL_OBJECT has been completely removed. + +=item * + +The MAGIC constants (e.g. C<'P'>) have been macrofied +(e.g. C) for better source code readability +and maintainability. + +=item * + +The regex compiler now maintains a structure that identifies nodes in +the compiled bytecode with the corresponding syntactic features of the +original regex expression. The information is attached to the new +C member of the C. See L for more +complete information. + +=item * + +The C code has been made much more C clean. Some warning +messages still remain in some platforms, so if you are compiling with +gcc you may see some warnings about dubious practices. The warnings +are being worked on. + +=item * + +F, F, and F have now been extensively commented. + +=item * + +Documentation on how to use the Perl source repository has been added +to F. + +=item * + +There are now several profiling make targets. + +=back + +=head1 Security Vulnerability Closed [561] + +(This change was already made in 5.7.0 but bears repeating here.) +(5.7.0 came out before 5.6.1: the development branch 5.7 released +earlier than the maintenance branch 5.6) + +A potential security vulnerability in the optional suidperl component +of Perl was identified in August 2000. suidperl is neither built nor +installed by default. As of November 2001 the only known vulnerable +platform is Linux, most likely all Linux distributions. CERT and +various vendors and distributors have been alerted about the vulnerability. +See http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt +for more information. + +The problem was caused by Perl trying to report a suspected security +exploit attempt using an external program, /bin/mail. On Linux +platforms the /bin/mail program had an undocumented feature which +when combined with suidperl gave access to a root shell, resulting in +a serious compromise instead of reporting the exploit attempt. If you +don't have /bin/mail, or if you have 'safe setuid scripts', or if +suidperl is not installed, you are safe. + +The exploit attempt reporting feature has been completely removed from +Perl 5.8.0 (and the maintenance release 5.6.1, and it was removed also +from all the Perl 5.7 releases), so that particular vulnerability +isn't there anymore. However, further security vulnerabilities are, +unfortunately, always possible. The suidperl functionality is most +probably going to be removed in Perl 5.10. In any case, suidperl +should only be used by security experts who know exactly what they are +doing and why they are using suidperl instead of some other solution +such as sudo ( see http://www.courtesan.com/sudo/ ). + +=head1 New Tests + +Several new tests have been added, especially for the F and +F subsections. There are now about 69 000 individual tests +(spread over about 700 test scripts), in the regression suite (5.6.1 +has about 11 700 tests, in 258 test scripts) The exact numbers depend +on the platform and Perl configuration used. Many of the new tests +are of course introduced by the new modules, but still in general Perl +is now more thoroughly tested. + +Because of the large number of tests, running the regression suite +will take considerably longer time than it used to: expect the suite +to take up to 4-5 times longer to run than in perl 5.6. On a really +fast machine you can hope to finish the suite in about 6-8 minutes +(wallclock time). + +The tests are now reported in a different order than in earlier Perls. +(This happens because the test scripts from under t/lib have been moved +to be closer to the library/extension they are testing.) + +=head1 Known Problems + +=head2 The Compiler Suite Is Still Very Experimental + +The compiler suite is slowly getting better but it continues to be +highly experimental. Use in production environments is discouraged. + +=head2 Localising Tied Arrays and Hashes Is Broken + + local %tied_array; + +doesn't work as one would expect: the old value is restored +incorrectly. This will be changed in a future release, but we don't +know yet what the new semantics will exactly be. In any case, the +change will break existing code that relies on the current +(ill-defined) semantics, so just avoid doing this in general. + +=head2 Building Extensions Can Fail Because Of Largefiles + +Some extensions like mod_perl are known to have issues with +`largefiles', a change brought by Perl 5.6.0 in which file offsets +default to 64 bits wide, where supported. Modules may fail to compile +at all, or they may compile and work incorrectly. Currently, there +is no good solution for the problem, but Configure now provides +appropriate non-largefile ccflags, ldflags, libswanted, and libs +in the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the +extensions that are having problems can try configuring themselves +without the largefileness. This is admittedly not a clean solution, +and the solution may not even work at all. One potential failure is +whether one can (or, if one can, whether it's a good idea to) link +together at all binaries with different ideas about file offsets; +all this is platform-dependent. + +=head2 Modifying $_ Inside for(..) + + for (1..5) { $_++ } + +works without complaint. It shouldn't. (You should be able to +modify only lvalue elements inside the loops.) You can see the +correct behaviour by replacing the 1..5 with 1, 2, 3, 4, 5. + +=head2 mod_perl 1.26 Doesn't Build With Threaded Perl + +Use mod_perl 1.27 or higher. + +=head2 lib/ftmp-security tests warn 'system possibly insecure' + +Don't panic. Read the 'make test' section of INSTALL instead. + +=head2 libwww-perl (LWP) fails base/date #51 + +Use libwww-perl 5.65 or later. + +=head2 PDL failing some tests + +Use PDL 2.3.4 or later. + +=head2 Perl_get_sv + +You may get errors like 'Undefined symbol "Perl_get_sv"' or "can't +resolve symbol 'Perl_get_sv'", or the symbol may be "Perl_sv_2pv". +This probably means that you are trying to use an older shared Perl +library (or extensions linked with such) with Perl 5.8.0 executable. +Perl used to have such a subroutine, but that is no more the case. +Check your shared library path, and any shared Perl libraries in those +directories. + +Sometimes this problem may also indicate a partial Perl 5.8.0 +installation, see L for an +example and how to deal with it. + +=head2 Self-tying Problems + +Self-tying of arrays and hashes is broken in rather deep and +hard-to-fix ways. As a stop-gap measure to avoid people from getting +frustrated at the mysterious results (core dumps, most often), it is +forbidden for now (you will get a fatal error even from an attempt). + +A change to self-tying of globs has caused them to be recursively +referenced (see: L). You +will now need an explicit untie to destroy a self-tied glob. This +behaviour may be fixed at a later date. + +Self-tying of scalars and IO thingies works. + +=head2 ext/threads/t/libc + +If this test fails, it indicates that your libc (C library) is not +threadsafe. This particular test stress tests the localtime() call to +find out whether it is threadsafe. See L for more information. + +=head2 Failure of Thread (5.005-style) tests + +B + +The following tests are known to fail due to fundamental problems in +the 5.005 threading implementation. These are not new failures--Perl +5.005_0x has the same bugs, but didn't have these tests. + + ../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14 + ../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7 + ../lib/English.t 2 512 54 2 3.70% 2-3 + ../lib/FileCache.t 5 1 20.00% 5 + ../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3 + ../lib/Filter/Simple/t/filter_only. 9 3 33.33% 1-2 5 + ../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627 + ../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628- + 1629 + ../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633 + ../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628 + ../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65 + ../lib/autouse.t 10 1 10.00% 4 + op/flip.t 15 1 6.67% 15 + +These failures are unlikely to get fixed as 5.005-style threads +are considered fundamentally broken. (Basically what happens is that +competing threads can corrupt shared global state, one good example +being regular expression engine's state.) + +=head2 Timing problems + +The following tests may fail intermittently because of timing +problems, for example if the system is heavily loaded. + + t/op/alarm.t + ext/Time/HiRes/HiRes.t + lib/Benchmark.t + lib/Memoize/t/expmod_t.t + lib/Memoize/t/speed.t + +In case of failure please try running them manually, for example + + ./perl -Ilib ext/Time/HiRes/HiRes.t + +=head2 Tied/Magical Array/Hash Elements Do Not Autovivify + +For normal arrays C<$foo = \$bar[1]> will assign C to +C<$bar[1]> (assuming that it didn't exist before), but for +tied/magical arrays and hashes such autovivification does not happen +because there is currently no way to catch the reference creation. +The same problem affects slicing over non-existent indices/keys of +a tied/magical array/hash. + +=head2 Unicode in package/class and subroutine names does not work + +One can have Unicode in identifier names, but not in package/class or +subroutine names. While some limited functionality towards this does +exist as of Perl 5.8.0, that is more accidental than designed; use of +Unicode for the said purposes is unsupported. + +One reason of this unfinishedness is its (currently) inherent +unportability: since both package names and subroutine names may +need to be mapped to file and directory names, the Unicode capability +of the filesystem becomes important-- and there unfortunately aren't +portable answers. + +=head1 Platform Specific Problems + +=head2 AIX + +=over 4 + +=item * + +If using the AIX native make command, instead of just "make" issue +"make all". In some setups the former has been known to spuriously +also try to run "make install". Alternatively, you may want to use +GNU make. + +=item * + +In AIX 4.2, Perl extensions that use C++ functions that use statics +may have problems in that the statics are not getting initialized. +In newer AIX releases, this has been solved by linking Perl with +the libC_r library, but unfortunately in AIX 4.2 the said library +has an obscure bug where the various functions related to time +(such as time() and gettimeofday()) return broken values, and +therefore in AIX 4.2 Perl is not linked against libC_r. + +=item * + +vac 5.0.0.0 May Produce Buggy Code For Perl + +The AIX C compiler vac version 5.0.0.0 may produce buggy code, +resulting in a few random tests failing when run as part of "make +test", but when the failing tests are run by hand, they succeed. +We suggest upgrading to at least vac version 5.0.1.0, that has been +known to compile Perl correctly. "lslpp -L|grep vac.C" will tell +you the vac version. See README.aix. + +=item * + +If building threaded Perl, you may get compilation warning from pp_sys.c: + + "pp_sys.c", line 4651.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed. + +This is harmless; it is caused by the getnetbyaddr() and getnetbyaddr_r() +having slightly different types for their first argument. + +=back + +=head2 Alpha systems with old gccs fail several tests + +If you see op/pack, op/pat, op/regexp, or ext/Storable tests failing +in a Linux/alpha or *BSD/Alpha, it's probably time to upgrade your gcc. +gccs prior to 2.95.3 are definitely not good enough, and gcc 3.1 may +be even better. (RedHat Linux/alpha with gcc 3.1 reported no problems, +as did Linux 2.4.18 with gcc 2.95.4.) (In Tru64, it is preferable to +use the bundled C compiler.) + +=head2 AmigaOS + +Perl 5.8.0 doesn't build in AmigaOS. It broke at some point during +the ithreads work and we could not find Amiga experts to unbreak the +problems. Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2 +development release). + +=head2 BeOS + +The following tests fail on 5.8.0 Perl in BeOS Personal 5.03: + + t/op/lfs............................FAILED at test 17 + t/op/magic..........................FAILED at test 24 + ext/Fcntl/t/syslfs..................FAILED at test 17 + ext/File/Glob/t/basic...............FAILED at test 3 + ext/POSIX/t/sigaction...............FAILED at test 13 + ext/POSIX/t/waitpid.................FAILED at test 1 + +See L (README.beos) for more details. + +=head2 Cygwin "unable to remap" + +For example when building the Tk extension for Cygwin, +you may get an error message saying "unable to remap". +This is known problem with Cygwin, and a workaround is +detailed in here: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html + +=head2 Cygwin ndbm tests fail on FAT + +One can build but not install (or test the build of) the NDBM_File +on FAT filesystems. Installation (or build) on NTFS works fine. +If one attempts the test on a FAT install (or build) the following +failures are expected: + + ../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71 + ../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ?? + ../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4 + ../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11 + ../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4 + run/fresh_perl.t 97 1 1.03% 91 + +NDBM_File fails and ODBM_File just coredumps. + +=head2 DJGPP Failures + + t/op/stat............................FAILED at test 29 + lib/File/Find/t/find.................FAILED at test 1 + lib/File/Find/t/taint................FAILED at test 1 + lib/h2xs.............................FAILED at test 15 + lib/Pod/t/eol........................FAILED at test 1 + lib/Test/Harness/t/strap-analyze.....FAILED at test 8 + lib/Test/Harness/t/test-harness......FAILED at test 23 + lib/Test/Simple/t/exit...............FAILED at test 1 + +The above failures are known as of 5.8.0 with native builds with long +filenames, but there are a few more if running under dosemu because of +limitations (and maybe bugs) of dosemu: + + t/comp/cpp...........................FAILED at test 3 + t/op/inccode.........................(crash) + +and a few lib/ExtUtils tests, and several hundred Encode/t/Aliases.t +failures that work fine with long filenames. So you really might +prefer native builds and long filenames. + +=head2 FreeBSD built with ithreads coredumps reading large directories + +This is a known bug in FreeBSD 4.5's readdir_r(), it has been fixed in +FreeBSD 4.6 (see L (README.freebsd)). + +=head2 FreeBSD Failing locale Test 117 For ISO 8859-15 Locales + +The ISO 8859-15 locales may fail the locale test 117 in FreeBSD. +This is caused by the characters \xFF (y with diaeresis) and \xBE +(Y with diaeresis) not behaving correctly when being matched +case-insensitively. Apparently this problem has been fixed in +the latest FreeBSD releases. +( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 ) + +=head2 IRIX fails ext/List/Util/t/shuffle.t or Digest::MD5 + +IRIX with MIPSpro 7.3.1.2m or 7.3.1.3m compiler may fail the List::Util +test ext/List/Util/t/shuffle.t by dumping core. This seems to be +a compiler error since if compiled with gcc no core dump ensues, and +no failures have been seen on the said test on any other platform. + +Similarly, building the Digest::MD5 extension has been +known to fail with "*** Termination code 139 (bu21)". + +The cure is to drop optimization level (Configure -Doptimize=-O2). + +=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured + +If perl is configured with -Duse64bitall, the successful result of the +subtest 10 of lib/posix may arrive before the successful result of the +subtest 9, which confuses the test harness so much that it thinks the +subtest 9 failed. + +=head2 Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint + +This is a known bug in the glibc 2.2.5 with long long integers. +( http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 ) + +=head2 Linux With Sfio Fails op/misc Test 48 + +No known fix. + +=head2 Mac OS X + +Please remember to set your environment variable LC_ALL to "C" +(setenv LC_ALL C) before running "make test" to avoid a lot of +warnings about the broken locales of Mac OS X. + +The following tests are known to fail in Mac OS X 10.1.5 because of +buggy (old) implementations of Berkeley DB included in Mac OS X: + + Failed Test Stat Wstat Total Fail Failed List of Failed + ------------------------------------------------------------------------- + ../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ?? + ../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65 + +If you are building on a UFS partition, you will also probably see +t/op/stat.t subtest #9 fail. This is caused by Darwin's UFS not +supporting inode change time. + +Also the ext/POSIX/t/posix.t subtest #10 fails but it is skipped for +now because the failure is Apple's fault, not Perl's (blocked signals +are lost). + +If you Configure with ithreads, ext/threads/t/libc.t will fail. Again, +this is not Perl's fault-- the libc of Mac OS X is not threadsafe +(in this particular test, the localtime() call is found to be +threadunsafe.) + +=head2 Mac OS X dyld undefined symbols + +If after installing Perl 5.8.0 you are getting warnings about missing +symbols, for example + + dyld: perl Undefined symbols + _perl_sv_2pv + _perl_get_sv + +you probably have an old pre-Perl-5.8.0 installation (or parts of one) +in /Library/Perl (the undefined symbols used to exist in pre-5.8.0 Perls). +It seems that for some reason "make install" doesn't always completely +overwrite the files in /Library/Perl. You can move the old Perl +shared library out of the way like this: + + cd /Library/Perl/darwin/CORE + mv libperl.dylib libperlold.dylib + +and then reissue "make install". Note that the above of course is +extremely disruptive for anything using the /usr/local/bin/perl. +If that doesn't help, you may have to try removing all the .bundle +files from beneath /Library/Perl, and again "make install"-ing. + +=head2 OS/2 Test Failures + +The following tests are known to fail on OS/2 (for clarity +only the failures are shown, not the full error messages): + + ../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8 + ../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17 + ../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14 + lib/os2_process.t 2 512 227 2 0.88% 174 209 + lib/os2_process_kid.t 227 2 0.88% 174 209 + lib/rx_cmprt.t 255 65280 18 3 16.67% 16-18 + +=head2 op/sprintf tests 91, 129, and 130 + +The op/sprintf tests 91, 129, and 130 are known to fail on some platforms. +Examples include any platform using sfio, and Compaq/Tandem's NonStop-UX. + +Test 91 is known to fail on QNX6 (nto), because C +incorrectly produces C<0.000000e+0> instead of C<0.000000e+00>. + +For tests 129 and 130, the failing platforms do not comply with +the ANSI C Standard: lines 19ff on page 134 of ANSI X3.159 1989, to +be exact. (They produce something other than "1" and "-1" when +formatting 0.6 and -0.6 using the printf format "%.0f"; most often, +they produce "0" and "-0".) + +=head2 Solaris 2.5 + +In case you are still using Solaris 2.5 (aka SunOS 5.5), you may +experience failures (the test core dumping) in lib/locale.t. +The suggested cure is to upgrade your Solaris. + +=head2 Solaris x86 Fails Tests With -Duse64bitint + +The following tests are known to fail in Solaris x86 with Perl +configured to use 64 bit integers: + + ext/Data/Dumper/t/dumper.............FAILED at test 268 + ext/Devel/Peek/Peek..................FAILED at test 7 + +=head2 SUPER-UX (NEC SX) + +The following tests are known to fail on SUPER-UX: + + op/64bitint...........................FAILED tests 29-30, 32-33, 35-36 + op/arith..............................FAILED tests 128-130 + op/pack...............................FAILED tests 25-5625 + op/pow................................ + op/taint..............................# msgsnd failed + ../ext/IO/lib/IO/t/io_poll............FAILED tests 3-4 + ../ext/IPC/SysV/ipcsysv...............FAILED tests 2, 5-6 + ../ext/IPC/SysV/t/msg.................FAILED tests 2, 4-6 + ../ext/Socket/socketpair..............FAILED tests 12 + ../lib/IPC/SysV.......................FAILED tests 2, 5-6 + ../lib/warnings.......................FAILED tests 115-116, 118-119 + +The op/pack failure ("Cannot compress negative numbers at op/pack.t line 126") +is serious but as of yet unsolved. It points at some problems with the +signedness handling of the C compiler, as do the 64bitint, arith, and pow +failures. Most of the rest point at problems with SysV IPC. + +=head2 Term::ReadKey not working on Win32 + +Use Term::ReadKey 2.20 or later. + +=head2 UNICOS/mk + +=over 4 + +=item * + +During Configure, the test + + Guessing which symbols your C compiler and preprocessor define... + +will probably fail with error messages like + + CC-20 cc: ERROR File = try.c, Line = 3 + The identifier "bad" is undefined. + + bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K + ^ + + CC-65 cc: ERROR File = try.c, Line = 3 + A semicolon is expected at this point. + +This is caused by a bug in the awk utility of UNICOS/mk. You can ignore +the error, but it does cause a slight problem: you cannot fully +benefit from the h2ph utility (see L) that can be used to +convert C headers to Perl libraries, mainly used to be able to access +from Perl the constants defined using C preprocessor, cpp. Because of +the above error, parts of the converted headers will be invisible. +Luckily, these days the need for h2ph is rare. + +=item * + +If building Perl with interpreter threads (ithreads), the +getgrent(), getgrnam(), and getgrgid() functions cannot return the +list of the group members due to a bug in the multithreaded support of +UNICOS/mk. What this means is that in list context the functions will +return only three values, not four. + +=back + +=head2 UTS + +There are a few known test failures, see L (README.uts). + +=head2 VOS (Stratus) + +When Perl is built using the native build process on VOS Release +14.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either +pass or result in TODO (ignored) failures. + +=head2 VMS + +There should be no reported test failures with a default configuration, +though there are a number of tests marked TODO that point to areas +needing further debugging and/or porting work. + +=head2 Win32 + +In multi-CPU boxes, there are some problems with the I/O buffering: +some output may appear twice. + +=head2 XML::Parser not working + +Use XML::Parser 2.31 or later. + +=head2 z/OS (OS/390) + +z/OS has rather many test failures but the situation is actually much +better than it was in 5.6.0; it's just that so many new modules and +tests have been added. + + Failed Test Stat Wstat Total Fail Failed List of Failed + --------------------------------------------------------------------------- + ../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327 + 331 333 337 339 + ../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5 + ../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79 + 110-111 150 161 + ../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48 + ../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9 + op/pat.t 922 7 0.76% 665 776 785 832- + 834 845 + op/sprintf.t 224 3 1.34% 98 100 136 + op/tr.t 97 5 5.15% 63 71-74 + uni/fold.t 780 6 0.77% 61 169 196 661 + 710-711 + +The failures in dumper.t and downgrade.t are problems in the tests, +those in io_unix and sprintf are problems in the USS (UDP sockets and +printf formats). The pat, tr, and fold failures are genuine Perl +problems caused by EBCDIC (and in the pat and fold cases, combining +that with Unicode). The Constant and Embed are probably problems in +the tests (since they test Perl's ability to build extensions, and +that seems to be working reasonably well.) + +=head2 Unicode Support on EBCDIC Still Spotty + +Though mostly working, Unicode support still has problem spots on +EBCDIC platforms. One such known spot are the C<\p{}> and C<\P{}> +regular expression constructs for code points less than 256: the +C are testing for Unicode code points, not knowing about EBCDIC. + +=head2 Seen In Perl 5.7 But Gone Now + +C (previously known as C) was removed +because it was felt that it didn't have enough value in it to be a +core module. It is still a useful module, though, and is available +from the CPAN. + +Perl 5.8 unfortunately does not build anymore on AmigaOS; this broke +accidentally at some point. Since there are not that many Amiga +developers available, we could not get this fixed and tested in time +for 5.8.0. Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2 +development release). + +The C and C (capitalised) were renamed as +C and C (all lowercase) just before 5.8.0. +The main rationale was to have all core PerlIO layers to have all +lowercase names. The "plugins" are named as usual, for example +C. + +The C and C were +renamed as C and C just before 5.8.0. +The main rationale was to have thread modules to obey normal naming, +C (the C and C themselves are +more pragma-like, they affect compile-time, so they stay lowercase). + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the articles +recently posted to the comp.lang.perl.misc newsgroup and the perl +bug database at http://bugs.perl.org/ . There may also be +information at http://www.perl.com/ , the Perl Home Page. + +If you believe you have an unreported bug, please run the B +program included with your release. Be sure to trim your bug down +to a tiny but sufficient test case. Your bug report, along with the +output of C, will be sent off to perlbug@perl.org to be +analysed by the Perl porting team. + +=head1 SEE ALSO + +The F file for exhaustive details on what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=head1 HISTORY + +Written by Jarkko Hietaniemi >. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f66c126..9ade819 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,3710 +1,38 @@ =head1 NAME -perldelta - what is new for perl v5.8.0 +perldelta - what is new for perl v5.9.0 =head1 DESCRIPTION -This document describes differences between the 5.6.0 release and -the 5.8.0 release. +This document describes differences between the 5.8.0 release and +the 5.9.0 release. -Many of the bug fixes in 5.8.0 were already seen in the 5.6.1 -maintenance release since the two releases were kept closely -coordinated (while 5.8.0 was still called 5.7.something). - -Changes that were integrated into the 5.6.1 release are marked C<[561]>. -Many of these changes have been further developed since 5.6.1 was released, -those are marked C<[561+]>. - -You can see the list of changes in the 5.6.1 release (both from the -5.005_03 release and the 5.6.0 release) by reading L. - -=head1 Highlights In 5.8.0 - -=over 4 - -=item * - -Better Unicode support - -=item * - -New IO Implementation - -=item * - -New Thread Implementation - -=item * - -Better Numeric Accuracy - -=item * - -Safe Signals - -=item * - -Many New Modules - -=item * - -More Extensive Regression Testing - -=back - -=head1 Incompatible Changes - -=head2 Binary Incompatibility - -B - -B - -(Pure Perl modules should continue to work.) - -The major reason for the discontinuity is the new IO architecture -called PerlIO. PerlIO is the default configuration because without -it many new features of Perl 5.8 cannot be used. In other words: -you just have to recompile your modules containing XS code, sorry -about that. - -In future releases of Perl, non-PerlIO aware XS modules may become -completely unsupported. This shouldn't be too difficult for module -authors, however: PerlIO has been designed as a drop-in replacement -(at the source code level) for the stdio interface. - -Depending on your platform, there are also other reasons why -we decided to break binary compatibility, please read on. - -=head2 64-bit platforms and malloc - -If your pointers are 64 bits wide, the Perl malloc is no longer being -used because it does not work well with 8-byte pointers. Also, -usually the system mallocs on such platforms are much better optimized -for such large memory models than the Perl malloc. Some memory-hungry -Perl applications like the PDL don't work well with Perl's malloc. -Finally, other applications than Perl (such as mod_perl) tend to prefer -the system malloc. Such platforms include Alpha and 64-bit HPPA, -MIPS, PPC, and Sparc. - -=head2 AIX Dynaloading - -The AIX dynaloading now uses in AIX releases 4.3 and newer the native -dlopen interface of AIX instead of the old emulated interface. This -change will probably break backward compatibility with compiled -modules. The change was made to make Perl more compliant with other -applications like mod_perl which are using the AIX native interface. - -=head2 Attributes for C variables now handled at run-time - -The C syntax now applies variable attributes at -run-time. (Subroutine and C variables still get attributes applied -at compile-time.) See L for additional details. In particular, -however, this allows variable attributes to be useful for C interfaces, -which was a deficiency of earlier releases. Note that the new semantics -doesn't work with the Attribute::Handlers module (as of version 0.76). - -=head2 Socket Extension Dynamic in VMS - -The Socket extension is now dynamically loaded instead of being -statically built in. This may or may not be a problem with ancient -TCP/IP stacks of VMS: we do not know since we weren't able to test -Perl in such configurations. - -=head2 IEEE-format Floating Point Default on OpenVMS Alpha - -Perl now uses IEEE format (T_FLOAT) as the default internal floating -point format on OpenVMS Alpha, potentially breaking binary compatibility -with external libraries or existing data. G_FLOAT is still available as -a configuration option. The default on VAX (D_FLOAT) has not changed. - -=head2 New Unicode Semantics (no more C, almost) - -Previously in Perl 5.6 to use Unicode one would say "use utf8" and -then the operations (like string concatenation) were Unicode-aware -in that lexical scope. - -This was found to be an inconvenient interface, and in Perl 5.8 the -Unicode model has completely changed: now the "Unicodeness" is bound -to the data itself, and for most of the time "use utf8" is not needed -at all. The only remaining use of "use utf8" is when the Perl script -itself has been written in the UTF-8 encoding of Unicode. (UTF-8 has -not been made the default since there are many Perl scripts out there -that are using various national eight-bit character sets, which would -be illegal in UTF-8.) - -See L for the explanation of the current model, -and L for the current use of the utf8 pragma. - -=head2 New Unicode Properties - -Unicode I are now supported. Scripts are similar to (and superior -to) Unicode I. The difference between scripts and blocks is that -scripts are the glyphs used by a language or a group of languages, while -the blocks are more artificial groupings of (mostly) 256 characters based -on the Unicode numbering. - -In general, scripts are more inclusive, but not universally so. For -example, while the script C includes all the Latin characters and -their various diacritic-adorned versions, it does not include the various -punctuation or digits (since they are not solely C). - -A number of other properties are now supported, including C<\p{L&}>, -C<\p{Any}> C<\p{Assigned}>, C<\p{Unassigned}>, C<\p{Blank}> [561] and -C<\p{SpacePerl}> [561] (along with their C<\P{...}> versions, of course). -See L for details, and more additions. - -The C or C prefix to names used with the C<\p{...}> and C<\P{...}> -are now almost always optional. The only exception is that a C prefix -is required to signify a Unicode block when a block name conflicts with a -script name. For example, C<\p{Tibetan}> refers to the script, while -C<\p{InTibetan}> refers to the block. When there is no name conflict, you -can omit the C from the block name (e.g. C<\p{BraillePatterns}>), but -to be safe, it's probably best to always use the C). - -=head2 REF(...) Instead Of SCALAR(...) - -A reference to a reference now stringifies as "REF(0x81485ec)" instead -of "SCALAR(0x81485ec)" in order to be more consistent with the return -value of ref(). - -=head2 pack/unpack D/F recycled - -The undocumented pack/unpack template letters D/F have been recycled -for better use: now they stand for long double (if supported by the -platform) and NV (Perl internal floating point type). (They used -to be aliases for d/f, but you never knew that.) - -=head2 glob() now returns filenames in alphabetical order - -The list of filenames from glob() (or <...>) is now by default sorted -alphabetically to be csh-compliant (which is what happened before -in most UNIX platforms). (bsd_glob() does still sort platform -natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.) [561] - -=head2 Deprecations - -=over 4 - -=item * - -The semantics of bless(REF, REF) were unclear and until someone proves -it to make some sense, it is forbidden. - -=item * - -The obsolete chat2 library that should never have been allowed -to escape the laboratory has been decommissioned. - -=item * - -Using chdir("") or chdir(undef) instead of explicit chdir() is -doubtful. A failure (think chdir(some_function()) can lead into -unintended chdir() to the home directory, therefore this behaviour -is deprecated. - -=item * - -The builtin dump() function has probably outlived most of its -usefulness. The core-dumping functionality will remain in future -available as an explicit call to C, but in future -releases the behaviour of an unqualified C call may change. - -=item * - -The very dusty examples in the eg/ directory have been removed. -Suggestions for new shiny examples welcome but the main issue is that -the examples need to be documented, tested and (most importantly) -maintained. - -=item * - -The (bogus) escape sequences \8 and \9 now give an optional warning -("Unrecognized escape passed through"). There is no need to \-escape -any C<\w> character. - -=item * - -The *glob{FILEHANDLE} is deprecated, use *glob{IO} instead. - -=item * - -The C syntax (C without an argument) has been -deprecated. Its semantics were never that clear and its -implementation even less so. If you have used that feature to -disallow all but fully qualified variables, C instead. - -=item * - -The unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still -recognised but now cause fatal errors. The previous behaviour of -ignoring them by default and warning if requested was unacceptable -since it, in a way, falsely promised that the features could be used. - -=item * - -In future releases, non-PerlIO aware XS modules may become completely -unsupported. Since PerlIO is a drop-in replacement for stdio at the -source code level, this shouldn't be that drastic a change. - -=item * - -Previous versions of perl and some readings of some sections of Camel -III implied that the C<:raw> "discipline" was the inverse of C<:crlf>. -Turning off "clrfness" is no longer enough to make a stream truly -binary. So the PerlIO C<:raw> layer (or "discipline", to use the Camel -book's older terminology) is now formally defined as being equivalent -to binmode(FH) - which is in turn defined as doing whatever is -necessary to pass each byte as-is without any translation. In -particular binmode(FH) - and hence C<:raw> - will now turn off both -CRLF and UTF-8 translation and remove other layers (e.g. :encoding()) -which would modify byte stream. - -=item * - -The current user-visible implementation of pseudo-hashes (the weird -use of the first array element) is deprecated starting from Perl 5.8.0 -and will be removed in Perl 5.10.0, and the feature will be -implemented differently. Not only is the current interface rather -ugly, but the current implementation slows down normal array and hash -use quite noticeably. The C pragma interface will remain -available. The I interface is expected to -be the replacement interface (see L). If your existing -programs depends on the underlying implementation, consider using -L from CPAN. - -=item * - -The syntaxes C<< @a->[...] >> and C<< %h->{...} >> have now been deprecated. - -=item * - -After years of trying, suidperl is considered to be too complex to -ever be considered truly secure. The suidperl functionality is likely -to be removed in a future release. - -=item * - -The 5.005 threads model (module C) is deprecated and expected -to be removed in Perl 5.10. Multithreaded code should be migrated to -the new ithreads model (see L, L and -L). - -=item * - -The long deprecated uppercase aliases for the string comparison -operators (EQ, NE, LT, LE, GE, GT) have now been removed. - -=item * - -The tr///C and tr///U features have been removed and will not return; -the interface was a mistake. Sorry about that. For similar -functionality, see pack('U0', ...) and pack('C0', ...). [561] - -=item * - -Earlier Perls treated "sub foo (@bar)" as equivalent to "sub foo (@)". -The prototypes are now checked better at compile-time for invalid -syntax. An optional warning is generated ("Illegal character in -prototype...") but this may be upgraded to a fatal error in a future -release. - -=item * - -The C and C operations now produce warnings on -tainted data and in some future release they will produce fatal errors. - -=item * - -The existing behaviour when localising tied arrays and hashes is wrong, -and will be changed in a future release, so do not rely on the existing -behaviour. See L<"Localising Tied Arrays and Hashes Is Broken">. - -=back - -=head1 Core Enhancements - -=head2 Unicode Overhaul - -Unicode in general should be now much more usable than in Perl 5.6.0 -(or even in 5.6.1). Unicode can be used in hash keys, Unicode in -regular expressions should work now, Unicode in tr/// should work now, -Unicode in I/O should work now. See L for introduction -and L for details. - -=over 4 - -=item * - -The Unicode Character Database coming with Perl has been upgraded -to Unicode 3.2.0. For more information, see http://www.unicode.org/ . -[561+] (5.6.1 has UCD 3.0.1.) - -=item * - -For developers interested in enhancing Perl's Unicode capabilities: -almost all the UCD files are included with the Perl distribution in -the F subdirectory. The most notable omission, for space -considerations, is the Unihan database. - -=item * - -The properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like -C isblank(), that is, it contains only "horizontal whitespace" (the space -character is, the newline isn't), and the "SpacePerl" is the Unicode -equivalent of C<\s> (\p{Space} isn't, since that includes the vertical -tabulator character, whereas C<\s> doesn't.) - -See "New Unicode Properties" earlier in this document for additional -information on changes with Unicode properties. - -=back - -=head2 PerlIO is Now The Default - -=over 4 - -=item * - -IO is now by default done via PerlIO rather than system's "stdio". -PerlIO allows "layers" to be "pushed" onto a file handle to alter the -handle's behaviour. Layers can be specified at open time via 3-arg -form of open: - - open($fh,'>:crlf :utf8', $path) || ... - -or on already opened handles via extended C: - - binmode($fh,':encoding(iso-8859-7)'); - -The built-in layers are: unix (low level read/write), stdio (as in -previous Perls), perlio (re-implementation of stdio buffering in a -portable manner), crlf (does CRLF <=> "\n" translation as on Win32, -but available on any platform). A mmap layer may be available if -platform supports it (mostly UNIXes). - -Layers to be applied by default may be specified via the 'open' pragma. - -See L for the effects -of PerlIO on your architecture name. - -=item * - -If your platform supports fork(), you can use the list form of C -for pipes. For example: - - open KID_PS, "-|", "ps", "aux" or die $!; - -forks the ps(1) command (without spawning a shell, as there are more -than three arguments to open()), and reads its standard output via the -C filehandle. See L. - -=item * - -File handles can be marked as accepting Perl's internal encoding of Unicode -(UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" : - - open($fh,">:utf8","Uni.txt"); - -Note for EBCDIC users: the pseudo layer ":utf8" is erroneously named -for you since it's not UTF-8 what you will be getting but instead -UTF-EBCDIC. See L, L, and -http://www.unicode.org/unicode/reports/tr16/ for more information. -In future releases this naming may change. See L -for more information about UTF-8. - -=item * - -If your environment variables (LC_ALL, LC_CTYPE, LANG, LANGUAGE) look -like you want to use UTF-8 (any of the the variables match C), -your STDIN, STDOUT, STDERR handles and the default open layer -(see L) are marked as UTF-8. (This feature, like other new -features that combine Unicode and I/O, work only if you are using -PerlIO, but that's the default.) - -Note that after this Perl really does assume that everything is UTF-8: -for example if some input handle is not, Perl will probably very soon -complain about the input data like this "Malformed UTF-8 ..." since -any old eight-bit data is not legal UTF-8. - -Note for code authors: if you want to enable your users to use UTF-8 -as their default encoding but in your code still have eight-bit I/O streams -(such as images or zip files), you need to explicitly open() or binmode() -with C<:bytes> (see L and L), or you -can just use C (nice for pre-5.8.0 backward compatibility). - -=item * - -File handles can translate character encodings from/to Perl's internal -Unicode form on read/write via the ":encoding()" layer. - -=item * - -File handles can be opened to "in memory" files held in Perl scalars via: - - open($fh,'>', \$variable) || ... - -=item * - -Anonymous temporary files are available without need to -'use FileHandle' or other module via - - open($fh,"+>", undef) || ... - -That is a literal undef, not an undefined value. - -=back - -=head2 ithreads - -The new interpreter threads ("ithreads" for short) implementation of -multithreading, by Arthur Bergman, replaces the old "5.005 threads" -implementation. In the ithreads model any data sharing between -threads must be explicit, as opposed to the model where data sharing -was implicit. See L and L, and -L. - -As a part of the ithreads implementation Perl will also use -any necessary and detectable reentrant libc interfaces. - -=head2 Restricted Hashes - -A restricted hash is restricted to a certain set of keys, no keys -outside the set can be added. Also individual keys can be restricted -so that the key cannot be deleted and the value cannot be changed. -No new syntax is involved: the Hash::Util module is the interface. - -=head2 Safe Signals - -Perl used to be fragile in that signals arriving at inopportune moments -could corrupt Perl's internal state. Now Perl postpones handling of -signals until it's safe (between opcodes). - -This change may have surprising side effects because signals no longer -interrupt Perl instantly. Perl will now first finish whatever it was -doing, like finishing an internal operation (like sort()) or an -external operation (like an I/O operation), and only then look at any -arrived signals (and before starting the next operation). No more corrupt -internal state since the current operation is always finished first, -but the signal may take more time to get heard. Note that breaking -out from potentially blocking operations should still work, though. - -=head2 Understanding of Numbers - -In general a lot of fixing has happened in the area of Perl's -understanding of numbers, both integer and floating point. Since in -many systems the standard number parsing functions like C -and C seem to have bugs, Perl tries to work around their -deficiencies. This results hopefully in more accurate numbers. - -Perl now tries internally to use integer values in numeric conversions -and basic arithmetics (+ - * /) if the arguments are integers, and -tries also to keep the results stored internally as integers. -This change leads to often slightly faster and always less lossy -arithmetics. (Previously Perl always preferred floating point numbers -in its math.) - -=head2 Arrays now always interpolate into double-quoted strings [561] - -In double-quoted strings, arrays now interpolate, no matter what. The -behavior in earlier versions of perl 5 was that arrays would interpolate -into strings if the array had been mentioned before the string was -compiled, and otherwise Perl would raise a fatal compile-time error. -In versions 5.000 through 5.003, the error was - - Literal @example now requires backslash - -In versions 5.004_01 through 5.6.0, the error was - - In string, @example now must be written as \@example - -The idea here was to get people into the habit of writing -C<"fred\@example.com"> when they wanted a literal C<@> sign, just as -they have always written C<"Give me back my \$5"> when they wanted a -literal C<$> sign. - -Starting with 5.6.1, when Perl now sees an C<@> sign in a -double-quoted string, it I attempts to interpolate an array, -regardless of whether or not the array has been used or declared -already. The fatal error has been downgraded to an optional warning: - - Possible unintended interpolation of @example in string - -This warns you that C<"fred@example.com"> is going to turn into -C if you don't backslash the C<@>. -See http://www.plover.com/~mjd/perl/at-error.html for more details -about the history here. - -=head2 Miscellaneous Changes - -=over 4 - -=item * - -AUTOLOAD is now lvaluable, meaning that you can add the :lvalue attribute -to AUTOLOAD subroutines and you can assign to the AUTOLOAD return value. - -=item * - -The $Config{byteorder} (and corresponding BYTEORDER in config.h) was -previously wrong in platforms if sizeof(long) was 4, but sizeof(IV) -was 8. The byteorder was only sizeof(long) bytes long (1234 or 4321), -but now it is correctly sizeof(IV) bytes long, (12345678 or 87654321). -(This problem didn't affect Windows platforms.) - -Also, $Config{byteorder} is now computed dynamically--this is more -robust with "fat binaries" where an executable image contains binaries -for more than one binary platform, and when cross-compiling. - -=item * - -C now works (previously one couldn't pass -in multiple arguments.) - -=item * - -C followed by a bareword now ensures that this bareword isn't -a keyword (to avoid a bug where C tried to call a -subroutine called C). This means that for example instead of -C you must write C. - -=item * - -The builtin dump() now gives an optional warning -C, -meaning that by default C is resolved as the builtin -dump() which dumps core and aborts, not as (possibly) user-defined -C. To call the latter, qualify the call as C<&dump(...)>. -(The whole dump() feature is to considered deprecated, and possibly -removed/changed in future releases.) - -=item * - -chomp() and chop() are now overridable. Note, however, that their -prototype (as given by C is undefined, -because it cannot be expressed and therefore one cannot really write -replacements to override these builtins. - -=item * - -END blocks are now run even if you exit/die in a BEGIN block. -Internally, the execution of END blocks is now controlled by -PL_exit_flags & PERL_EXIT_DESTRUCT_END. This enables the new -behaviour for Perl embedders. This will default in 5.10. See -L. - -=item * - -Formats now support zero-padded decimal fields. - -=item * - -Although "you shouldn't do that", it was possible to write code that -depends on Perl's hashed key order (Data::Dumper does this). The new -algorithm "One-at-a-Time" produces a different hashed key order. -More details are in L. - -=item * - -lstat(FILEHANDLE) now gives a warning because the operation makes no sense. -In future releases this may become a fatal error. - -=item * - -Spurious syntax errors generated in certain situations, when glob() -caused File::Glob to be loaded for the first time, have been fixed. [561] - -=item * - -Lvalue subroutines can now return C in list context. However, -the lvalue subroutine feature still remains experimental. [561+] - -=item * - -A lost warning "Can't declare ... dereference in my" has been -restored (Perl had it earlier but it became lost in later releases.) - -=item * - -A new special regular expression variable has been introduced: -C<$^N>, which contains the most-recently closed group (submatch). - -=item * - -C does not produce an error even if Module does not have an -unimport() method. This parallels the behavior of C vis-a-vis -C. [561] - -=item * - -The numerical comparison operators return C if either operand -is a NaN. Previously the behaviour was unspecified. - -=item * - -C can now have an experimental optional attribute C that -affects how global variables are shared among multiple interpreters, -see L. - -=item * - -The following builtin functions are now overridable: each(), keys(), -pop(), push(), shift(), splice(), unshift(). [561] - -=item * - -C can now group template letters with C<()> and then -apply repetition/count modifiers on the groups. - -=item * - -C can now process the Perl internal numeric types: -IVs, UVs, NVs-- and also long doubles, if supported by the platform. -The template letters are C, C, C, and C. - -=item * - -C can now be used to force a string to UTF8. - -=item * - -my __PACKAGE__ $obj now works. [561] - -=item * - -POSIX::sleep() now returns the number of I seconds -(as the POSIX standard says), as opposed to CORE::sleep() which -returns the number of slept seconds. - -=item * - -The printf() and sprintf() now support parameter reordering using the -C<%\d+\$> and C<*\d+\$> syntaxes. For example - - print "%2\$s %1\$s\n", "foo", "bar"; - -will print "bar foo\n". This feature helps in writing -internationalised software, and in general when the order -of the parameters can vary. - -=item * - -The (\&) prototype now works properly. [561] - -=item * - -prototype(\[$@%&]) is now available to implicitly create references -(useful for example if you want to emulate the tie() interface). - -=item * - -A new command-line option, C<-t> is available. It is the -little brother of C<-T>: instead of dying on taint violations, -lexical warnings are given. B - -=item * - -In other taint news, the C and C have now been -considered too risky (think C: it can start any program -with any arguments), and now the said forms cause a warning under -lexical warnings. You should carefully launder the arguments to -guarantee their validity. In future releases of Perl the forms will -become fatal errors so consider starting laundering now. - -=item * - -Tied hash interfaces are now required to have the EXISTS and DELETE -methods (either own or inherited). - -=item * - -If tr/// is just counting characters, it doesn't attempt to -modify its target. - -=item * - -untie() will now call an UNTIE() hook if it exists. See L -for details. [561] - -=item * - -L now supports C to change the -file timestamps to the current time. - -=item * - -The rules for allowing underscores (underbars) in numeric constants -have been relaxed and simplified: now you can have an underscore -simply B. - -=item * - -Rather than relying on C's argv[0] (which may not contain a full pathname) -where possible $^X is now set by asking the operating system. -(eg by reading F on Linux, F on FreeBSD) - -=item * - -A new variable, C<${^TAINT}>, indicates whether taint mode is enabled. - -=item * - -You can now override the readline() builtin, and this overrides also -the angle bracket operator. - -=item * - -The command-line options -s and -F are now recognized on the shebang -(#!) line. - -=item * - -Use of the C match modifier without an accompanying C modifier -elicits a new warning: C. - -Use of C in substitutions, even with C, elicits -C. - -Use of C with C elicits C. - -=item * - -Support for the C special subroutine had been added. -With ithreads, when a new thread is created, all Perl data is cloned, -however non-Perl data cannot be cloned automatically. In C you -can do whatever you need to do, like for example handle the cloning of -non-Perl data, if necessary. C will be executed once for every -package that has it defined or inherited. It will be called in the -context of the new thread, so all modifications are made in the new area. - -See L - -=back - -=head1 Modules and Pragmata - -=head2 New Modules and Pragmata - -=over 4 - -=item * - -C, originally by Damian Conway and now maintained -by Arthur Bergman, allows a class to define attribute handlers. - - package MyPack; - use Attribute::Handlers; - sub Wolf :ATTR(SCALAR) { print "howl!\n" } - - # later, in some package using or inheriting from MyPack... - - my MyPack $Fluffy : Wolf; # the attribute handler Wolf will be called - -Both variables and routines can have attribute handlers. Handlers can -be specific to type (SCALAR, ARRAY, HASH, or CODE), or specific to the -exact compilation phase (BEGIN, CHECK, INIT, or END). -See L. - -=item * - -C, by Stephen McCamant, is a new compiler backend for -walking the Perl syntax tree, printing concise info about ops. -The output is highly customisable. See L. [561+] - -=item * - -The new bignum, bigint, and bigrat pragmas, by Tels, implement -transparent bignum support (using the Math::BigInt, Math::BigFloat, -and Math::BigRat backends). - -=item * - -C, by Sean Burke, is a module for reporting the search -path for a class's ISA tree. See L. - -=item * - -C now has a split personality: if possible, an XS extension is -used, (this will hopefully be faster, more secure, and more robust) -but if not possible, the familiar Perl implementation is used. - -=item * - -C, originally by Kenneth Albanowski and now -maintained by Paul Marquess, has been added. It is primarily used -by C to enhance portability of XS modules between different -versions of Perl. See L. - -=item * - -C, frontend module for calculating digests (checksums), from -Gisle Aas, has been added. See L. - -=item * - -C for calculating MD5 digests (checksums) as defined in -RFC 1321, from Gisle Aas, has been added. See L. - - use Digest::MD5 'md5_hex'; - - $digest = md5_hex("Thirsty Camel"); - - print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1 - -NOTE: the C backward compatibility module is deliberately not -included since its further use is discouraged. - -See also L. - -=item * - -C, originally by Nick Ing-Simmons and now maintained by Dan -Kogai, provides a mechanism to translate between different character -encodings. Support for Unicode, ISO-8859-1, and ASCII are compiled in -to the module. Several other encodings (like the rest of the -ISO-8859, CP*/Win*, Mac, KOI8-R, three variants EBCDIC, Chinese, -Japanese, and Korean encodings) are included and can be loaded at -runtime. (For space considerations, the largest Chinese encodings -have been separated into their own CPAN module, Encode::HanExtra, -which Encode will use if available). See L. - -Any encoding supported by Encode module is also available to the -":encoding()" layer if PerlIO is used. - -=item * - -C is the interface to the new I -feature. (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and -Michael Schwern.) See L. - -=item * - -C can be used to query locale information. -See L. - -=item * - -C, by Sean Burke, has functions for dealing with -RFC3066-style language tags. See L. - -=item * - -C, by Nicholas Clark, is a new tool for extension -writers for generating XS code to import C header constants. -See L. - -=item * - -C, by Damian Conway, is an easy-to-use frontend to -Filter::Util::Call. See L. - - # in MyFilter.pm: - - package MyFilter; - - use Filter::Simple sub { - while (my ($from, $to) = splice @_, 0, 2) { - s/$from/$to/g; - } - }; - - 1; - - # in user's code: - - use MyFilter qr/red/ => 'green'; - - print "red\n"; # this code is filtered, will print "green\n" - print "bored\n"; # this code is filtered, will print "bogreen\n" - - no MyFilter; - - print "red\n"; # this code is not filtered, will print "red\n" - -=item * - -C, by Tim Jenness, allows one to create temporary files -and directories in an easy, portable, and secure way. See L. -[561+] - -=item * - -C, by Paul Marquess, provides you with the -framework to write I in Perl. For most uses, the -frontend Filter::Simple is to be preferred. See L. - -=item * - -C, by Ilya Zakharevich, is a new pragma for conditional inclusion -of modules. - -=item * - -L, by Graham Barr, is a collection of perl5 modules related -to network programming. See L, L, L -(not part of libnet, but related), L, L, -and L. - -Perl installation leaves libnet unconfigured; use F -to configure it. - -=item * - -C, by Graham Barr, is a selection of general-utility -list subroutines, such as sum(), min(), first(), and shuffle(). -See L. - -=item * - -C, C, C -C, and L, by Neil Bowers, have -been added. They provide the codes for various locale standards, such -as "fr" for France, "usd" for US Dollar, and "ja" for Japanese. - - use Locale::Country; - - $country = code2country('jp'); # $country gets 'Japan' - $code = country2code('Norway'); # $code gets 'no' - -See L, L, L, -and L. - -=item * - -C, by Sean Burke, is a localization framework. See -L, and L. The latter is an -article about software localization, originally published in The Perl -Journal #13, and republished here with kind permission. - -=item * - -C for big rational numbers, to accompany Math::BigInt and -Math::BigFloat, from Tels. See L. - -=item * - -C can make your functions faster by trading space for time, -from Mark-Jason Dominus. See L. - -=item * - -C, by Gisle Aas, allows you to encode data in base64, -as defined in RFC 2045 - I. - - use MIME::Base64; - - $encoded = encode_base64('Aladdin:open sesame'); - $decoded = decode_base64($encoded); - - print $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ==" - -See L. - -=item * - -C, by Gisle Aas, allows you to encode data -in quoted-printable encoding, as defined in RFC 2045 - I. - - use MIME::QuotedPrint; - - $encoded = encode_qp("Smiley in Unicode: \x{263a}"); - $decoded = decode_qp($encoded); - - print $encoded, "\n"; # "Smiley in Unicode: =263A" - -See also L. - -=item * - -C, by Damian Conway, is a pseudo-class for method redispatch. -See L. - -=item * - -C is a new pragma for setting the default I/O layers -for open(). - -=item * - -C, by Nick Ing-Simmons, provides the implementation -of IO to "in memory" Perl scalars as discussed above. It also serves -as an example of a loadable PerlIO layer. Other future possibilities -include PerlIO::Array and PerlIO::Code. See L. - -=item * - -C, by Nick Ing-Simmons, acts as a PerlIO layer and wraps -PerlIO layer functionality provided by a class (typically implemented -in Perl code). - -=item * - -C, by Elizabeth Mattijsen, is an example -of a C class: - - use PerlIO::via::QuotedPrint; - open($fh,">:via(QuotedPrint)",$path); - -This will automatically convert everything output to C<$fh> to -Quoted-Printable. See L and L. - -=item * - -C, by Russ Allbery, has been added, -to parse LZ<><> links in pods as described in the new -perlpodspec. - -=item * - -C, by Joe Smith, has been added. -It converts POD data to formatted overstrike text. -See L. [561+] - -=item * - -C is a selection of general-utility scalar subroutines, -such as blessed(), reftype(), and tainted(). See L. - -=item * - -C is a new pragma for controlling the behaviour of sort(). - -=item * - -C gives persistence to Perl data structures by allowing the -storage and retrieval of Perl data to and from files in a fast and -compact binary format. Because in effect Storable does serialisation -of Perl data structures, with it you can also clone deep, hierarchical -datastructures. Storable was originally created by Raphael Manfredi, -but it is now maintained by Abhijit Menon-Sen. Storable has been -enhanced to understand the two new hash features, Unicode keys and -restricted hashes. See L. - -=item * - -C, by Damian Conway, has been added. Just by saying - - use Switch; - -you have C and C available in Perl. - - use Switch; - - switch ($val) { - - case 1 { print "number 1" } - case "a" { print "string a" } - case [1..10,42] { print "number in list" } - case (@array) { print "number in list" } - case /\w+/ { print "pattern" } - case qr/\w+/ { print "pattern" } - case (%hash) { print "entry in hash" } - case (\%hash) { print "entry in hash" } - case (\&sub) { print "arg to subroutine" } - else { print "previous case not true" } - } - -See L. - -=item * - -C, by Michael Schwern, is yet another framework for writing -test scripts, more extensive than Test::Simple. See L. - -=item * - -C, by Michael Schwern, has basic utilities for writing -tests. See L. - -=item * - -C, by Damian Conway, has been added, for extracting -delimited text sequences from strings. - - use Text::Balanced 'extract_delimited'; - - ($a, $b) = extract_delimited("'never say never', he never said", "'", ''); - -$a will be "'never say never'", $b will be ', he never said'. - -In addition to extract_delimited(), there are also extract_bracketed(), -extract_quotelike(), extract_codeblock(), extract_variable(), -extract_tagged(), extract_multiple(), gen_delimited_pat(), and -gen_extract_tagged(). With these, you can implement rather advanced -parsing algorithms. See L. - -=item * - -C, by Arthur Bergman, is an interface to interpreter threads. -Interpreter threads (ithreads) is the new thread model introduced in -Perl 5.6 but only available as an internal interface for extension -writers (and for Win32 Perl for C emulation). See L, -L, and L. - -=item * - -C, by Arthur Bergman, allows data sharing for -interpreter threads. See L. - -=item * - -C, by Mark-Jason Dominus, associates a Perl array with the -lines of a file. See L. - -=item * - -C, by Ilya Zakharevich, provides on-demand loaded hashes. -See L. - -=item * - -C, by Edward Avis, allows storing hash -references (unlike the standard Tie::RefHash) The module is contained -within Tie::RefHash. See L. - -=item * - -C, by Douglas E. Wegscheid, provides high resolution -timing (ualarm, usleep, and gettimeofday). See L. - -=item * - -C offers a querying interface to the Unicode Character -Database. See L. - -=item * - -C, by SADAHIRO Tomoyuki, implements the UCA -(Unicode Collation Algorithm) for sorting Unicode strings. -See L. - -=item * - -C, by SADAHIRO Tomoyuki, implements the various -Unicode normalization forms. See L. - -=item * - -C, by Tim Jenness, is a test extension that exercises XS -APIs. Currently only C is tested: how to output various -basic data types from XS. - -=item * - -C, by Tim Jenness, is a test extension that exercises -XS typemaps. Nothing gets installed, but the code is worth studying -for extension writers. - -=back - -=head2 Updated And Improved Modules and Pragmata - -=over 4 - -=item * - -The following independently supported modules have been updated to the -newest versions from CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp, -Getopt::Long, Math::BigFloat, Math::BigInt, the podlators bundle -(Pod::Man, Pod::Text), Pod::LaTeX [561+], Pod::Parser, Storable, -Term::ANSIColor, Test, Text-Tabs+Wrap. - -=item * - -attributes::reftype() now works on tied arguments. - -=item * - -AutoLoader can now be disabled with C. - -=item * - -B::Deparse has been significantly enhanced by Robin Houston. It can -now deparse almost all of the standard test suite (so that the tests -still succeed). There is a make target "test.deparse" for trying this -out. - -=item * - -Carp now has better interface documentation, and the @CARP_NOT -interface has been added to get optional control over where errors -are reported independently of @ISA, by Ben Tilly. - -=item * - -Class::Struct can now define the classes in compile time. - -=item * - -Class::Struct now assigns the array/hash element if the accessor -is called with an array/hash element as the B argument. - -=item * - -The return value of Cwd::fastcwd() is now tainted. - -=item * - -Data::Dumper now has an option to sort hashes. - -=item * - -Data::Dumper now has an option to dump code references -using B::Deparse. - -=item * - -DB_File now supports newer Berkeley DB versions, among -other improvements. - -=item * - -Devel::Peek now has an interface for the Perl memory statistics -(this works only if you are using perl's malloc, and if you have -compiled with debugging). - -=item * - -The English module can now be used without the infamous performance -hit by saying - - use English '-no_match_vars'; - -(Assuming, of course, that you don't need the troublesome variables -C<$`>, C<$&>, or C<$'>.) Also, introduced C<@LAST_MATCH_START> and -C<@LAST_MATCH_END> English aliases for C<@-> and C<@+>. - -=item * - -ExtUtils::MakeMaker has been significantly cleaned up and fixed. -The enhanced version has also been backported to earlier releases -of Perl and submitted to CPAN so that the earlier releases can -enjoy the fixes. - -=item * - -The arguments of WriteMakefile() in Makefile.PL are now checked -for sanity much more carefully than before. This may cause new -warnings when modules are being installed. See L -for more details. - -=item * - -ExtUtils::MakeMaker now uses File::Spec internally, which hopefully -leads to better portability. - -=item * - -Fcntl, Socket, and Sys::Syslog have been rewritten by Nicholas Clark -to use the new-style constant dispatch section (see L). -This means that they will be more robust and hopefully faster. - -=item * - -File::Find now chdir()s correctly when chasing symbolic links. [561] - -=item * - -File::Find now has pre- and post-processing callbacks. It also -correctly changes directories when chasing symbolic links. Callbacks -(naughtily) exiting with "next;" instead of "return;" now work. - -=item * - -File::Find is now (again) reentrant. It also has been made -more portable. - -=item * - -The warnings issued by File::Find now belong to their own category. -You can enable/disable them with C. - -=item * - -File::Glob::glob() has been renamed to File::Glob::bsd_glob() -because the name clashes with the builtin glob(). The older -name is still available for compatibility, but is deprecated. [561] - -=item * - -File::Glob now supports C constant to limit the size of -the returned list of filenames. - -=item * - -IPC::Open3 now allows the use of numeric file descriptors. - -=item * - -IO::Socket now has an atmark() method, which returns true if the socket -is positioned at the out-of-band mark. The method is also exportable -as a sockatmark() function. - -=item * - -IO::Socket::INET failed to open the specified port if the service name -was not known. It now correctly uses the supplied port number as is. [561] - -=item * - -IO::Socket::INET has support for the ReusePort option (if your -platform supports it). The Reuse option now has an alias, ReuseAddr. -For clarity, you may want to prefer ReuseAddr. - -=item * - -IO::Socket::INET now supports a value of zero for C -(usually meaning that the operating system will make one up.) - -=item * - -'use lib' now works identically to @INC. Removing directories -with 'no lib' now works. - -=item * - -Math::BigFloat and Math::BigInt have undergone a full rewrite by Tels. -They are now magnitudes faster, and they support various bignum -libraries such as GMP and PARI as their backends. - -=item * - -Math::Complex handles inf, NaN etc., better. - -=item * - -Net::Ping has been considerably enhanced by Rob Brown: multihoming is -now supported, Win32 functionality is better, there is now time -measuring functionality (optionally high-resolution using -Time::HiRes), and there is now "external" protocol which uses -Net::Ping::External module which runs your external ping utility and -parses the output. A version of Net::Ping::External is available in -CPAN. - -Note that some of the Net::Ping tests are disabled when running -under the Perl distribution since one cannot assume one or more -of the following: enabled echo port at localhost, full Internet -connectivity, or sympathetic firewalls. You can set the environment -variable PERL_TEST_Net_Ping to "1" (one) before running the Perl test -suite to enable all the Net::Ping tests. - -=item * - -POSIX::sigaction() is now much more flexible and robust. -You can now install coderef handlers, 'DEFAULT', and 'IGNORE' -handlers, installing new handlers was not atomic. - -=item * - -In Safe, C<%INC> is now localised in a Safe compartment so that -use/require work. - -=item * - -In SDBM_File on dosish platforms, some keys went missing because of -lack of support for files with "holes". A workaround for the problem -has been added. - -=item * - -In Search::Dict one can now have a pre-processing hook for the -lines being searched. - -=item * - -The Shell module now has an OO interface. - -=item * - -In Sys::Syslog there is now a failover mechanism that will go -through alternative connection mechanisms until the message -is successfully logged. - -=item * - -The Test module has been significantly enhanced. - -=item * - -Time::Local::timelocal() does not handle fractional seconds anymore. -The rationale is that neither does localtime(), and timelocal() and -localtime() are supposed to be inverses of each other. - -=item * - -The vars pragma now supports declaring fully qualified variables. -(Something that C does not and will not support.) - -=item * - -The C name space (as in the pragma) provides various -Perl-callable functions to provide low level access to Perl's -internal Unicode representation. At the moment only length() -has been implemented. - -=back - -=head1 Utility Changes - -=over 4 - -=item * - -Emacs perl mode (emacs/cperl-mode.el) has been updated to version -4.31. - -=item * - -F is now much faster. - -=item * - -C is a tool for people adding their own encodings to the -Encode module. - -=item * - -C now supports C trigraphs. - -=item * - -C now produces a template README. - -=item * - -C now uses C for better portability between -different versions of Perl. - -=item * - -C uses the new L module -which will affect newly created extensions that define constants. -Since the new code is more correct (if you have two constants where the -first one is a prefix of the second one, the first constant B -got defined), less lossy (it uses integers for integer constant, -as opposed to the old code that used floating point numbers even for -integer constants), and slightly faster, you might want to consider -regenerating your extension code (the new scheme makes regenerating -easy). L now also supports C trigraphs. - -=item * - -C has been added to configure libnet. - -=item * - -C is now much more robust. It also sends the bug report to -perl.org, not perl.com. - -=item * - -C has been rewritten and its user interface (that is, -command line) is much more like that of the UNIX C compiler, cc. -(The perlbc tools has been removed. Use C instead.) -B [561] - -=item * - -C is a new Installation Verification Procedure utility -for running any time after installing Perl. - -=item * - -C is an implementation of the character conversion utility -C, demonstrating the new Encode module. - -=item * - -C now allows specifying a cache directory. - -=item * - -C now produces XHTML 1.0. - -=item * - -C now understands POD written using different line endings -(PC-like CRLF versus UNIX-like LF versus MacClassic-like CR). - -=item * - -C has been completely rewritten in Perl. (It is in fact a full -implementation of sed in Perl: you can use the sed functionality by -using the C utility.) - -=item * - -C now understands POD documentation embedded in the *.xs -files. [561] - -=item * - -C now supports the OUT keyword. - -=back - -=head1 New Documentation - -=over 4 - -=item * - -perl56delta details the changes between the 5.005 release and the -5.6.0 release. - -=item * - -perlclib documents the internal replacements for standard C library -functions. (Interesting only for extension writers and Perl core -hackers.) [561+] - -=item * - -perldebtut is a Perl debugging tutorial. [561+] - -=item * - -perlebcdic contains considerations for running Perl on EBCDIC -platforms. [561+] - -=item * - -perlintro is a gentle introduction to Perl. - -=item * - -perliol documents the internals of PerlIO with layers. - -=item * - -perlmodstyle is a style guide for writing modules. - -=item * - -perlnewmod tells about writing and submitting a new module. [561+] - -=item * - -perlpacktut is a pack() tutorial. - -=item * - -perlpod has been rewritten to be clearer and to record the best -practices gathered over the years. - -=item * - -perlpodspec is a more formal specification of the pod format, -mainly of interest for writers of pod applications, not to -people writing in pod. - -=item * - -perlretut is a regular expression tutorial. [561+] - -=item * - -perlrequick is a regular expressions quick-start guide. -Yes, much quicker than perlretut. [561] - -=item * - -perltodo has been updated. - -=item * - -perltootc has been renamed as perltooc (to not to conflict -with perltoot in filesystems restricted to "8.3" names). - -=item * - -perluniintro is an introduction to using Unicode in Perl. -(perlunicode is more of a detailed reference and background -information) - -=item * - -perlutil explains the command line utilities packaged with the Perl -distribution. [561+] - -=back - -The following platform-specific documents are available before -the installation as README.I, and after the installation -as perlI: - - perlaix perlamiga perlapollo perlbeos perlbs2000 - perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux - perlhurd perlirix perlmachten perlmacos perlmint perlmpeix - perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris - perltru64 perluts perlvmesa perlvms perlvos perlwin32 - -These documents usually detail one or more of the following subjects: -configuring, building, testing, installing, and sometimes also using -Perl on the said platform. - -Eastern Asian Perl users are now welcomed in their own languages: -README.jp (Japanese), README.ko (Korean), README.cn (simplified -Chinese) and README.tw (traditional Chinese), which are written in -normal pod but encoded in EUC-JP, EUC-KR, EUC-CN and Big5. These -will get installed as - - perljp perlko perlcn perltw - -=over 4 - -=item * - -The documentation for the POSIX-BC platform is called "BS2000", to avoid -confusion with the Perl POSIX module. - -=item * - -The documentation for the WinCE platform is called perlce (README.ce -in the source code kit), to avoid confusion with the perlwin32 -documentation on 8.3-restricted filesystems. - -=back - -=head1 Performance Enhancements - -=over 4 - -=item * - -map() could get pathologically slow when the result list it generates -is larger than the source list. The performance has been improved for -common scenarios. [561] - -=item * - -sort() is also fully reentrant, in the sense that the sort function -can itself call sort(). This did not work reliably in previous -releases. [561] - -=item * - -sort() has been changed to use primarily mergesort internally as -opposed to the earlier quicksort. For very small lists this may -result in slightly slower sorting times, but in general the speedup -should be at least 20%. Additional bonuses are that the worst case -behaviour of sort() is now better (in computer science terms it now -runs in time O(N log N), as opposed to quicksort's Theta(N**2) -worst-case run time behaviour), and that sort() is now stable -(meaning that elements with identical keys will stay ordered as they -were before the sort). See the C pragma for information. - -The story in more detail: suppose you want to serve yourself a little -slice of Pi. - - @digits = ( 3,1,4,1,5,9 ); - -A numerical sort of the digits will yield (1,1,3,4,5,9), as expected. -Which C<1> comes first is hard to know, since one C<1> looks pretty -much like any other. You can regard this as totally trivial, -or somewhat profound. However, if you just want to sort the even -digits ahead of the odd ones, then what will - - sort { ($a % 2) <=> ($b % 2) } @digits; - -yield? The only even digit, C<4>, will come first. But how about -the odd numbers, which all compare equal? With the quicksort algorithm -used to implement Perl 5.6 and earlier, the order of ties is left up -to the sort. So, as you add more and more digits of Pi, the order -in which the sorted even and odd digits appear will change. -and, for sufficiently large slices of Pi, the quicksort algorithm -in Perl 5.8 won't return the same results even if reinvoked with the -same input. The justification for this rests with quicksort's -worst case behavior. If you run - - sort { $a <=> $b } ( 1 .. $N , 1 .. $N ); - -(something you might approximate if you wanted to merge two sorted -arrays using sort), doubling $N doesn't just double the quicksort time, -it I it. Quicksort has a worst case run time that can -grow like N**2, so-called I behaviour, and it can happen -on patterns that may well arise in normal use. You won't notice this -for small arrays, but you I notice it with larger arrays, -and you may not live long enough for the sort to complete on arrays -of a million elements. So the 5.8 quicksort scrambles large arrays -before sorting them, as a statistical defence against quadratic behaviour. -But that means if you sort the same large array twice, ties may be -broken in different ways. - -Because of the unpredictability of tie-breaking order, and the quadratic -worst-case behaviour, quicksort was I replaced completely with -a stable mergesort. I means that ties are broken to preserve -the original order of appearance in the input array. So - - sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9); - -will yield (4,3,1,1,5,9), guaranteed. The even and odd numbers -appear in the output in the same order they appeared in the input. -Mergesort has worst case O(N log N) behaviour, the best value -attainable. And, ironically, this mergesort does particularly -well where quicksort goes quadratic: mergesort sorts (1..$N, 1..$N) -in O(N) time. But quicksort was rescued at the last moment because -it is faster than mergesort on certain inputs and platforms. -For example, if you really I care about the order of even -and odd digits, quicksort will run in O(N) time; it's very good -at sorting many repetitions of a small number of distinct elements. -The quicksort divide and conquer strategy works well on platforms -with relatively small, very fast, caches. Eventually, the problem gets -whittled down to one that fits in the cache, from which point it -benefits from the increased memory speed. - -Quicksort was rescued by implementing a sort pragma to control aspects -of the sort. The B subpragma forces stable behaviour, -regardless of algorithm. The B<_quicksort> and B<_mergesort> -subpragmas are heavy-handed ways to select the underlying implementation. -The leading C<_> is a reminder that these subpragmas may not survive -beyond 5.8. More appropriate mechanisms for selecting the implementation -exist, but they wouldn't have arrived in time to save quicksort. - -=item * - -Hashes now use Bob Jenkins "One-at-a-Time" hashing key algorithm -( http://burtleburtle.net/bob/hash/doobs.html ). This algorithm is -reasonably fast while producing a much better spread of values than -the old hashing algorithm (originally by Chris Torek, later tweaked by -Ilya Zakharevich). Hash values output from the algorithm on a hash of -all 3-char printable ASCII keys comes much closer to passing the -DIEHARD random number generation tests. According to perlbench, this -change has not affected the overall speed of Perl. - -=item * - -unshift() should now be noticeably faster. - -=back - -=head1 Installation and Configuration Improvements - -=head2 Generic Improvements - -=over 4 - -=item * - -INSTALL now explains how you can configure Perl to use 64-bit -integers even on non-64-bit platforms. - -=item * - -Policy.sh policy change: if you are reusing a Policy.sh file -(see INSTALL) and you use Configure -Dprefix=/foo/bar and in the old -Policy $prefix eq $siteprefix and $prefix eq $vendorprefix, all of -them will now be changed to the new prefix, /foo/bar. (Previously -only $prefix changed.) If you do not like this new behaviour, -specify prefix, siteprefix, and vendorprefix explicitly. - -=item * - -A new optional location for Perl libraries, otherlibdirs, is available. -It can be used for example for vendor add-ons without disturbing Perl's -own library directories. - -=item * - -In many platforms, the vendor-supplied 'cc' is too stripped-down to -build Perl (basically, 'cc' doesn't do ANSI C). If this seems -to be the case and 'cc' does not seem to be the GNU C compiler -'gcc', an automatic attempt is made to find and use 'gcc' instead. - -=item * - -gcc needs to closely track the operating system release to avoid -build problems. If Configure finds that gcc was built for a different -operating system release than is running, it now gives a clearly visible -warning that there may be trouble ahead. - -=item * - -Since Perl 5.8 is not binary-compatible with previous releases -of Perl, Configure no longer suggests including the 5.005 -modules in @INC. - -=item * - -Configure C<-S> can now run non-interactively. [561] - -=item * - -Configure support for pdp11-style memory models has been removed due -to obsolescence. [561] - -=item * - -configure.gnu now works with options with whitespace in them. - -=item * - -installperl now outputs everything to STDERR. - -=item * - -Because PerlIO is now the default on most platforms, "-perlio" doesn't -get appended to the $Config{archname} (also known as $^O) anymore. -Instead, if you explicitly choose not to use perlio (Configure command -line option -Uuseperlio), you will get "-stdio" appended. - -=item * - -Another change related to the architecture name is that "-64all" -(-Duse64bitall, or "maximally 64-bit") is appended only if your -pointers are 64 bits wide. (To be exact, the use64bitall is ignored.) - -=item * - -In AFS installations, one can configure the root of the AFS to be -somewhere else than the default F by using the Configure -parameter C<-Dafsroot=/some/where/else>. - -=item * - -APPLLIB_EXP, a lesser-known configuration-time definition, has been -documented. It can be used to prepend site-specific directories -to Perl's default search path (@INC); see INSTALL for information. - -=item * - -The version of Berkeley DB used when the Perl (and, presumably, the -DB_File extension) was built is now available as -C<@Config{qw(db_version_major db_version_minor db_version_patch)}> -from Perl and as C from C. - -=item * - -Building Berkeley DB3 for compatibility modes for DB, NDBM, and ODBM -has been documented in INSTALL. - -=item * - -If you have CPAN access (either network or a local copy such as a -CD-ROM) you can during specify extra modules to Configure to build and -install with Perl using the -Dextras=... option. See INSTALL for -more details. - -=item * - -In addition to config.over, a new override file, config.arch, is -available. This file is supposed to be used by hints file writers -for architecture-wide changes (as opposed to config.over which is -for site-wide changes). - -=item * - -If your file system supports symbolic links, you can build Perl outside -of the source directory by - - mkdir /tmp/perl/build/directory - cd /tmp/perl/build/directory - sh /path/to/perl/source/Configure -Dmksymlinks ... - -This will create in /tmp/perl/build/directory a tree of symbolic links -pointing to files in /path/to/perl/source. The original files are left -unaffected. After Configure has finished, you can just say - - make all test - -and Perl will be built and tested, all in /tmp/perl/build/directory. -[561] - -=item * - -For Perl developers, several new make targets for profiling -and debugging have been added; see L. - -=over 8 - -=item * - -Use of the F tool to profile Perl has been documented in -L. There is a make target called "perl.gprof" for -generating a gprofiled Perl executable. - -=item * - -If you have GCC 3, there is a make target called "perl.gcov" for -creating a gcoved Perl executable for coverage analysis. See -L. - -=item * - -If you are on IRIX or Tru64 platforms, new profiling/debugging options -have been added; see L for more information about pixie and -Third Degree. - -=back - -=item * - -Guidelines of how to construct minimal Perl installations have -been added to INSTALL. - -=item * - -The Thread extension is now not built at all under ithreads -(C) because it wouldn't work anyway (the -Thread extension requires being Configured with C<-Duse5005threads>). - -B - -=item * - -The Gconvert macro ($Config{d_Gconvert}) used by perl for stringifying -floating-point numbers is now more picky about using sprintf %.*g -rules for the conversion. Some platforms that used to use gcvt may -now resort to the slower sprintf. - -=item * - -The obsolete method of making a special (e.g., debugging) flavor -of perl by saying - - make LIBPERL=libperld.a - -has been removed. Use -DDEBUGGING instead. - -=back - -=head2 New Or Improved Platforms - -For the list of platforms known to support Perl, -see L. - -=over 4 - -=item * - -AIX dynamic loading should be now better supported. - -=item * - -AIX should now work better with gcc, threads, and 64-bitness. Also the -long doubles support in AIX should be better now. See L. - -=item * - -AtheOS ( http://www.atheos.cx/ ) is a new platform. - -=item * - -BeOS has been reclaimed. - -=item * - -The DG/UX platform now supports 5.005-style threads. -See L. - -=item * - -The DYNIX/ptx platform (also known as dynixptx) is supported at or -near osvers 4.5.2. - -=item * - -EBCDIC platforms (z/OS (also known as OS/390), POSIX-BC, and VM/ESA) -have been regained. Many test suite tests still fail and the -co-existence of Unicode and EBCDIC isn't quite settled, but the -situation is much better than with Perl 5.6. See L, -L (for POSIX-BC), and L for more information. - -=item * - -Building perl with -Duseithreads or -Duse5005threads now works under -HP-UX 10.20 (previously it only worked under 10.30 or later). You will -need a thread library package installed. See README.hpux. [561] - -=item * - -Mac OS Classic is now supported in the mainstream source package -(MacPerl has of course been available since perl 5.004 but now the -source code bases of standard Perl and MacPerl have been synchronised) -[561] - -=item * - -Mac OS X (or Darwin) should now be able to build Perl even on HFS+ -filesystems. (The case-insensitivity used to confuse the Perl build -process.) - -=item * - -NCR MP-RAS is now supported. [561] - -=item * - -All the NetBSD specific patches (except for the installation -specific ones) have been merged back to the main distribution. - -=item * - -NetWare from Novell is now supported. See L. - -=item * - -NonStop-UX is now supported. [561] - -=item * - -NEC SUPER-UX is now supported. - -=item * - -All the OpenBSD specific patches (except for the installation -specific ones) have been merged back to the main distribution. - -=item * - -Perl has been tested with the GNU pth userlevel thread package -( http://www.gnu.org/software/pth/pth.html ). All thread tests -of Perl now work, but not without adding some yield()s to the tests, -so while pth (and other userlevel thread implementations) can be -considered to be "working" with Perl ithreads, keep in mind the -possible non-preemptability of the underlying thread implementation. - -=item * - -Stratus VOS is now supported using Perl's native build method -(Configure). This is the recommended method to build Perl on -VOS. The older methods, which build miniperl, are still -available. See L. [561+] - -=item * - -The Amdahl UTS UNIX mainframe platform is now supported. [561] - -=item * - -WinCE is now supported. See L. - -=item * - -z/OS (formerly known as OS/390, formerly known as MVS OE) now has -support for dynamic loading. This is not selected by default, -however, you must specify -Dusedl in the arguments of Configure. [561] - -=back - -=head1 Selected Bug Fixes - -Numerous memory leaks and uninitialized memory accesses have been -hunted down. Most importantly, anonymous subs used to leak quite -a bit. [561] - -=over 4 - -=item * - -The autouse pragma didn't work for Multi::Part::Function::Names. - -=item * - -caller() could cause core dumps in certain situations. Carp was -sometimes affected by this problem. In particular, caller() now -returns a subroutine name of C<(unknown)> for subroutines that have -been removed from the symbol table. - -=item * - -chop(@list) in list context returned the characters chopped in -reverse order. This has been reversed to be in the right order. [561] - -=item * - -Configure no longer includes the DBM libraries (dbm, gdbm, db, ndbm) -when building the Perl binary. The only exception to this is SunOS 4.x, -which needs them. [561] - -=item * - -The behaviour of non-decimal but numeric string constants such as -"0x23" was platform-dependent: in some platforms that was seen as 35, -in some as 0, in some as a floating point number (don't ask). This -was caused by Perl's using the operating system libraries in a situation -where the result of the string to number conversion is undefined: now -Perl consistently handles such strings as zero in numeric contexts. - -=item * - -Several debugger fixes: exit code now reflects the script exit code, -condition C<"0"> now treated correctly, the C command now checks -line number, C<$.> no longer gets corrupted, and all debugger output -now goes correctly to the socket if RemotePort is set. [561] - -=item * - -The debugger (perl5db.pl) has been modified to present a more -consistent commands interface, via (CommandSet=580). perl5db.t was -also added to test the changes, and as a placeholder for further tests. - -See L. - -=item * - -The debugger has a new C option to control the maximum -depth to which nested structures are dumped. The C command has -been extended so that C dumps out the value of I to a -depth of at most I levels. - -=item * - -The debugger can now show lexical variables if you have the CPAN -module PadWalker installed. - -=item * - -The order of DESTROYs has been made more predictable. - -=item * - -Perl 5.6.0 could emit spurious warnings about redefinition of -dl_error() when statically building extensions into perl. -This has been corrected. [561] - -=item * - -L -R didn't work. - -=item * - -C<*foo{FORMAT}> now works. - -=item * - -Infinity is now recognized as a number. - -=item * - -UNIVERSAL::isa no longer caches methods incorrectly. (This broke -the Tk extension with 5.6.0.) [561] - -=item * - -Lexicals I: lexicals outside an eval "" weren't resolved -correctly inside a subroutine definition inside the eval "" if they -were not already referenced in the top level of the eval""ed code. - -=item * - -Lexicals II: lexicals leaked at file scope into subroutines that -were declared before the lexicals. - -=item * - -Lexical warnings now propagating correctly between scopes -and into C. - -=item * - -C did not work as intended. This has been -corrected. [561] - -=item * - -warnings::enabled() now reports the state of $^W correctly if the caller -isn't using lexical warnings. [561] - -=item * - -Line renumbering with eval and C<#line> now works. [561] - -=item * - -Fixed numerous memory leaks, especially in eval "". - -=item * - -Localised tied variables no longer leak memory - - use Tie::Hash; - tie my %tied_hash => 'Tie::StdHash'; - - ... - - # Used to leak memory every time local() was called; - # in a loop, this added up. - local($tied_hash{Foo}) = 1; - -=item * - -Localised hash elements (and %ENV) are correctly unlocalised to not -exist, if they didn't before they were localised. - - - use Tie::Hash; - tie my %tied_hash => 'Tie::StdHash'; - - ... - - # Nothing has set the FOO element so far - - { local $tied_hash{FOO} = 'Bar' } - - # This used to print, but not now. - print "exists!\n" if exists $tied_hash{FOO}; - -As a side effect of this fix, tied hash interfaces B define -the EXISTS and DELETE methods. - -=item * - -mkdir() now ignores trailing slashes in the directory name, -as mandated by POSIX. - -=item * - -Some versions of glibc have a broken modfl(). This affects builds -with C<-Duselongdouble>. This version of Perl detects this brokenness -and has a workaround for it. The glibc release 2.2.2 is known to have -fixed the modfl() bug. - -=item * - -Modulus of unsigned numbers now works (4063328477 % 65535 used to -return 27406, instead of 27047). [561] - -=item * - -Some "not a number" warnings introduced in 5.6.0 eliminated to be -more compatible with 5.005. Infinity is now recognised as a number. [561] - -=item * - -Numeric conversions did not recognize changes in the string value -properly in certain circumstances. [561] - -=item * - -Attributes (such as :shared) didn't work with our(). - -=item * - -our() variables will not cause bogus "Variable will not stay shared" -warnings. [561] - -=item * - -"our" variables of the same name declared in two sibling blocks -resulted in bogus warnings about "redeclaration" of the variables. -The problem has been corrected. [561] - -=item * - -pack "Z" now correctly terminates the string with "\0". - -=item * - -Fix password routines which in some shadow password platforms -(e.g. HP-UX) caused getpwent() to return every other entry. - -=item * - -The PERL5OPT environment variable (for passing command line arguments -to Perl) didn't work for more than a single group of options. [561] - -=item * - -PERL5OPT with embedded spaces didn't work. - -=item * - -printf() no longer resets the numeric locale to "C". - -=item * - -C now parses correctly as C<'a\\b'>: that is, as three -characters, not four. [561] - -=item * - -pos() did not return the correct value within s///ge in earlier -versions. This is now handled correctly. [561] - -=item * - -Printing quads (64-bit integers) with printf/sprintf now works -without the q L ll prefixes (assuming you are on a quad-capable platform). - -=item * - -Regular expressions on references and overloaded scalars now work. [561+] - -=item * - -Right-hand side magic (GMAGIC) could in many cases such as string -concatenation be invoked too many times. - -=item * - -scalar() now forces scalar context even when used in void context. - -=item * - -SOCKS support is now much more robust. - -=item * - -sort() arguments are now compiled in the right wantarray context -(they were accidentally using the context of the sort() itself). -The comparison block is now run in scalar context, and the arguments -to be sorted are always provided list context. [561] - -=item * - -Changed the POSIX character class C<[[:space:]]> to include the (very -rarely used) vertical tab character. Added a new POSIX-ish character -class C<[[:blank:]]> which stands for horizontal whitespace -(currently, the space and the tab). - -=item * - -The tainting behaviour of sprintf() has been rationalized. It does -not taint the result of floating point formats anymore, making the -behaviour consistent with that of string interpolation. [561] - -=item * - -Some cases of inconsistent taint propagation (such as within hash -values) have been fixed. - -=item * - -The RE engine found in Perl 5.6.0 accidentally pessimised certain kinds -of simple pattern matches. These are now handled better. [561] - -=item * - -Regular expression debug output (whether through C -or via C<-Dr>) now looks better. [561] - -=item * - -Multi-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed. The -bug has been fixed. [561] - -=item * - -Use of $& could trigger a core dump under some situations. This -is now avoided. [561] - -=item * - -The regular expression captured submatches ($1, $2, ...) are now -more consistently unset if the match fails, instead of leaving false -data lying around in them. [561] - -=item * - -readline() on files opened in "slurp" mode could return an extra -"" (blank line) at the end in certain situations. This has been -corrected. [561] - -=item * - -Autovivification of symbolic references of special variables described -in L (as in C<${$num}>) was accidentally disabled. This works -again now. [561] - -=item * - -Sys::Syslog ignored the C constant. - -=item * - -$AUTOLOAD, sort(), lock(), and spawning subprocesses -in multiple threads simultaneously are now thread-safe. - -=item * - -Tie::Array's SPLICE method was broken. - -=item * - -Allow a read-only string on the left-hand side of a non-modifying tr///. - -=item * - -If C is tied, warnings caused by C and C now -correctly pass to it. - -=item * - -Several Unicode fixes. - -=over 8 - -=item * - -BOMs (byte order marks) at the beginning of Perl files -(scripts, modules) should now be transparently skipped. -UTF-16 and UCS-2 encoded Perl files should now be read correctly. - -=item * - -The character tables have been updated to Unicode 3.2.0. - -=item * - -Comparing with utf8 data does not magically upgrade non-utf8 data -into utf8. (This was a problem for example if you were mixing data -from I/O and Unicode data: your output might have got magically encoded -as UTF-8.) - -=item * - -Generating illegal Unicode code points such as U+FFFE, or the UTF-16 -surrogates, now also generates an optional warning. - -=item * - -C, C, and C now match titlecase. - -=item * - -Concatenation with the C<.> operator or via variable interpolation, -C, C, C, C, the C operator, -substitution with C, single-quoted UTF8, should now work. - -=item * - -The C operator now works. Note that the C -functionality has been removed (but see pack('U0', ...)). - -=item * - -C now works. - -=item * - -Perl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings. -This has been corrected. [561] - -=item * - -Zero entries were missing from the Unicode classes such as C. - -=back - -=item * - -Large unsigned numbers (those above 2**31) could sometimes lose their -unsignedness, causing bogus results in arithmetic operations. [561] - -=item * - -The Perl parser has been stress tested using both random input and -Markov chain input and the few found crashes and lockups have been -fixed. - -=back - -=head2 Platform Specific Changes and Fixes - -=over 4 - -=item * - -BSDI 4.* - -Perl now works on post-4.0 BSD/OSes. - -=item * - -All BSDs - -Setting C<$0> now works (as much as possible; see L for details). - -=item * - -Cygwin - -Numerous updates; currently synchronised with Cygwin 1.3.10. - -=item * - -Previously DYNIX/ptx had problems in its Configure probe for non-blocking I/O. - -=item * - -EPOC - -EPOC now better supported. See README.epoc. [561] - -=item * - -FreeBSD 3.* - -Perl now works on post-3.0 FreeBSDs. - -=item * - -HP-UX - -README.hpux updated; C now works; -now uses HP-UX malloc instead of Perl malloc. - -=item * - -IRIX - -Numerous compilation flag and hint enhancements; accidental mixing -of 32-bit and 64-bit libraries (a doomed attempt) made much harder. - -=item * - -Linux - -=over 8 - -=item * - -Long doubles should now work (see INSTALL). [561] - -=item * - -Linux previously had problems related to sockaddrlen when using -accept(), recvfrom() (in Perl: recv()), getpeername(), and -getsockname(). - -=back - -=item * - -Mac OS Classic - -Compilation of the standard Perl distribution in Mac OS Classic should -now work if you have the Metrowerks development environment and the -missing Mac-specific toolkit bits. Contact the macperl mailing list -for details. - -=item * - -MPE/iX - -MPE/iX update after Perl 5.6.0. See README.mpeix. [561] - -=item * - -NetBSD/threads: try installing the GNU pth (should be in the -packages collection, or http://www.gnu.org/software/pth/), -and Configure with -Duseithreads. - -=item * - -NetBSD/sparc - -Perl now works on NetBSD/sparc. - -=item * - -OS/2 - -Now works with usethreads (see INSTALL). [561] - -=item * - -Solaris - -64-bitness using the Sun Workshop compiler now works. - -=item * - -Stratus VOS - -The native build method requires at least VOS Release 14.5.0 -and GNU C++/GNU Tools 2.0.1 or later. The Perl pack function -now maps overflowed values to +infinity and underflowed values -to -infinity. - -=item * - -Tru64 (aka Digital UNIX, aka DEC OSF/1) - -The operating system version letter now recorded in $Config{osvers}. -Allow compiling with gcc (previously explicitly forbidden). Compiling -with gcc still not recommended because buggy code results, even with -gcc 2.95.2. - -=item * - -Unicos - -Fixed various alignment problems that lead into core dumps either -during build or later; no longer dies on math errors at runtime; -now using full quad integers (64 bits), previously was using -only 46 bit integers for speed. - -=item * - -VMS - -See L and L for important changes not otherwise listed here. - -chdir() now works better despite a CRT bug; now works with MULTIPLICITY -(see INSTALL); now works with Perl's malloc. - -The tainting of C<%ENV> elements via C or C was previously -unimplemented. It now works as documented. - -The C emulation has been improved. The worst bug (now fixed) -was that a pid of -1 would cause a wildcard search of all processes on -the system. - -POSIX-style signals are now emulated much better on VMS versions prior -to 7.0. - -The C function and backticks operator have improved -functionality and better error handling. [561] - -File access tests now use current process privileges rather than the -user's default privileges, which could sometimes result in a mismatch -between reported access and actual access. This improvement is only -available on VMS v6.0 and later. - -There is a new C implementation based on C that allows -older VMS systems (pre-7.0) to use C to send signals rather than -simply force exit. This implementation also allows later systems to -call C from within a signal handler. - -Iterative logical name translations are now limited to 10 iterations in -imitation of SHOW LOGICAL and other OpenVMS facilities. - -=item * - -Windows - -=over 8 - -=item * - -Signal handling now works better than it used to. It is now implemented -using a Windows message loop, and is therefore less prone to random -crashes. - -=item * - -fork() emulation is now more robust, but still continues to have a few -esoteric bugs and caveats. See L for details. [561+] - -=item * - -A failed (pseudo)fork now returns undef and sets errno to EAGAIN. [561] - -=item * - -The following modules now work on Windows: - - ExtUtils::Embed [561] - IO::Pipe - IO::Poll - Net::Ping - -=item * - -IO::File::new_tmpfile() is no longer limited to 32767 invocations -per-process. - -=item * - -Better chdir() return value for a non-existent directory. - -=item * - -Compiling perl using the 64-bit Platform SDK tools is now supported. - -=item * - -The Win32::SetChildShowWindow() builtin can be used to control the -visibility of windows created by child processes. See L for -details. - -=item * - -Non-blocking waits for child processes (or pseudo-processes) are -supported via C. - -=item * - -The behavior of system() with multiple arguments has been rationalized. -Each unquoted argument will be automatically quoted to protect whitespace, -and any existing whitespace in the arguments will be preserved. This -improves the portability of system(@args) by avoiding the need for -Windows C shell specific quoting in perl programs. - -Note that this means that some scripts that may have relied on earlier -buggy behavior may no longer work correctly. For example, -C will now attempt to run the file -C and will fail when such a file isn't found. -On the other hand, perl will now execute code such as -C correctly. - -=item * - -The perl header files no longer suppress common warnings from the -Microsoft Visual C++ compiler. This means that additional warnings may -now show up when compiling XS code. - -=item * - -Borland C++ v5.5 is now a supported compiler that can build Perl. -However, the generated binaries continue to be incompatible with those -generated by the other supported compilers (GCC and Visual C++). [561] - -=item * - -Duping socket handles with open(F, ">&MYSOCK") now works under Windows 9x. -[561] - -=item * - -Current directory entries in %ENV are now correctly propagated to child -processes. [561] - -=item * - -New %ENV entries now propagate to subprocesses. [561] - -=item * - -Win32::GetCwd() correctly returns C:\ instead of C: when at the drive root. -Other bugs in chdir() and Cwd::cwd() have also been fixed. [561] - -=item * - -The makefiles now default to the features enabled in ActiveState ActivePerl -(a popular Win32 binary distribution). [561] - -=item * - -HTML files will now be installed in c:\perl\html instead of -c:\perl\lib\pod\html - -=item * - -REG_EXPAND_SZ keys are now allowed in registry settings used by perl. [561] - -=item * - -Can now send() from all threads, not just the first one. [561] - -=item * - -ExtUtils::MakeMaker now uses $ENV{LIB} to search for libraries. [561] - -=item * - -Less stack reserved per thread so that more threads can run -concurrently. (Still 16M per thread.) [561] - -=item * - -C<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp -(works better when perl is running as service). - -=item * - -Better UNC path handling under ithreads. [561] - -=item * - -wait(), waitpid(), and backticks now return the correct exit status -under Windows 9x. [561] - -=item * - -A socket handle leak in accept() has been fixed. [561] - -=back - -=back - -=head1 New or Changed Diagnostics - -Please see L for more details. - -=over 4 - -=item * - -Ambiguous range in the transliteration operator (like a-z-9) now -gives a warning. - -=item * - -chdir("") and chdir(undef) now give a deprecation warning because they -cause a possible unintentional chdir to the home directory. -Say chdir() if you really mean that. - -=item * - -Two new debugging options have been added: if you have compiled your -Perl with debugging, you can use the -DT [561] and -DR options to trace -tokenising and to add reference counts to displaying variables, -respectively. - -=item * - -The lexical warnings category "deprecated" is no longer a sub-category -of the "syntax" category. It is now a top-level category in its own -right. - -=item * - -Unadorned dump() will now give a warning suggesting to -use explicit CORE::dump() if that's what really is meant. - -=item * - -The "Unrecognized escape" warning has been extended to include C<\8>, -C<\9>, and C<\_>. There is no need to escape any of the C<\w> characters. - -=item * - -All regular expression compilation error messages are now hopefully -easier to understand both because the error message now comes before -the failed regex and because the point of failure is now clearly -marked by a C-- HERE> marker. - -=item * - -Various I/O (and socket) functions like binmode(), close(), and so -forth now more consistently warn if they are used illogically either -on a yet unopened or on an already closed filehandle (or socket). - -=item * - -Using lstat() on a filehandle now gives a warning. (It's a non-sensical -thing to do.) - -=item * - -The C<-M> and C<-m> options now warn if you didn't supply the module name. - -=item * - -If you in C specify a required minimum version, modules matching -the name and but not defining a $VERSION will cause a fatal failure. - -=item * - -Using negative offset for vec() in lvalue context is now a warnable offense. - -=item * - -Odd number of arguments to oveload::constant now elicits a warning. - -=item * - -Odd number of elements to in anonymous hash now elicits a warning. - -=item * - -The various "opened only for", "on closed", "never opened" warnings -drop the C prefix for filehandles in the C

package, -for example C instead of C. - -=item * - -Subroutine prototypes are now checked more carefully, you may -get warnings for example if you have used non-prototype characters. - -=item * - -If an attempt to use a (non-blessed) reference as an array index -is made, a warning is given. - -=item * - -C and C (with no values to push or unshift) -now give a warning. This may be a problem for generated and evaled -code. - -=item * - -If you try to L a number less than 0 or larger than 255 -using the C<"C"> format you will get an optional warning. Similarly -for the C<"c"> format and a number less than -128 or more than 127. - -=item * - -pack C

format now demands an explicit size. - -=item * - -unpack C now warns of unterminated compressed integers. - -=item * - -Warnings relating to the use of PerlIO have been added. - -=item * - -Certain regex modifiers such as C<(?o)> make sense only if applied to -the entire regex. You will get an optional warning if you try to do -otherwise. - -=item * - -Variable length lookbehind has not yet been implemented, trying to -use it will tell that. - -=item * - -Using arrays or hashes as references (e.g. C<< %foo->{bar} >> -has been deprecated for a while. Now you will get an optional warning. - -=item * - -Warnings relating to the use of the new restricted hashes feature -have been added. - -=item * - -Self-ties of arrays and hashes are not supported and fatal errors -will happen even at an attempt to do so. - -=item * - -Using C in scalar context now issues an optional warning. -This didn't do anything useful, as the sort was not performed. - -=item * - -Using the /g modifier in split() is meaningless and will cause a warning. - -=item * - -Using splice() past the end of an array now causes a warning. - -=item * +=head1 Incompatible Changes -Malformed Unicode encodings (UTF-8 and UTF-16) cause a lot of warnings, -ad doestrying to use UTF-16 surrogates (which are unimplemented). +=head1 Core Enhancements -=item * +=head1 Modules and Pragmata -Trying to use Unicode characters on an I/O stream without marking the -stream's encoding (using open() or binmode()) will cause "Wide character" -warnings. +=head1 Utility Changes -=item * +=head1 New Documentation -Use of v-strings in use/require causes a (backward) portability warning. +=head1 Performance Enhancements -=item * +=head1 Installation and Configuration Improvements -Warnings relating to the use interpreter threads and their shared data -have been added. +=head1 Selected Bug Fixes -=back +=head1 New or Changed Diagnostics =head1 Changed Internals -=over 4 - -=item * - -PerlIO is now the default. - -=item * - -perlapi.pod (a companion to perlguts) now attempts to document the -internal API. - -=item * - -You can now build a really minimal perl called microperl. -Building microperl does not require even running Configure; -C should be enough. Beware: microperl makes -many assumptions, some of which may be too bold; the resulting -executable may crash or otherwise misbehave in wondrous ways. -For careful hackers only. - -=item * - -Added rsignal(), whichsig(), do_join(), op_clear, op_null, -ptr_table_clear(), ptr_table_free(), sv_setref_uv(), and several UTF-8 -interfaces to the publicised API. For the full list of the available -APIs see L. - -=item * - -Made possible to propagate customised exceptions via croak()ing. - -=item * - -Now xsubs can have attributes just like subs. (Well, at least the -built-in attributes.) - -=item * - -dTHR and djSP have been obsoleted; the former removed (because it's -a no-op) and the latter replaced with dSP. - -=item * - -PERL_OBJECT has been completely removed. - -=item * - -The MAGIC constants (e.g. C<'P'>) have been macrofied -(e.g. C) for better source code readability -and maintainability. - -=item * - -The regex compiler now maintains a structure that identifies nodes in -the compiled bytecode with the corresponding syntactic features of the -original regex expression. The information is attached to the new -C member of the C. See L for more -complete information. - -=item * - -The C code has been made much more C clean. Some warning -messages still remain in some platforms, so if you are compiling with -gcc you may see some warnings about dubious practices. The warnings -are being worked on. - -=item * - -F, F, and F have now been extensively commented. - -=item * - -Documentation on how to use the Perl source repository has been added -to F. - -=item * - -There are now several profiling make targets. - -=back - -=head1 Security Vulnerability Closed [561] - -(This change was already made in 5.7.0 but bears repeating here.) -(5.7.0 came out before 5.6.1: the development branch 5.7 released -earlier than the maintenance branch 5.6) - -A potential security vulnerability in the optional suidperl component -of Perl was identified in August 2000. suidperl is neither built nor -installed by default. As of November 2001 the only known vulnerable -platform is Linux, most likely all Linux distributions. CERT and -various vendors and distributors have been alerted about the vulnerability. -See http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt -for more information. - -The problem was caused by Perl trying to report a suspected security -exploit attempt using an external program, /bin/mail. On Linux -platforms the /bin/mail program had an undocumented feature which -when combined with suidperl gave access to a root shell, resulting in -a serious compromise instead of reporting the exploit attempt. If you -don't have /bin/mail, or if you have 'safe setuid scripts', or if -suidperl is not installed, you are safe. - -The exploit attempt reporting feature has been completely removed from -Perl 5.8.0 (and the maintenance release 5.6.1, and it was removed also -from all the Perl 5.7 releases), so that particular vulnerability -isn't there anymore. However, further security vulnerabilities are, -unfortunately, always possible. The suidperl functionality is most -probably going to be removed in Perl 5.10. In any case, suidperl -should only be used by security experts who know exactly what they are -doing and why they are using suidperl instead of some other solution -such as sudo ( see http://www.courtesan.com/sudo/ ). - =head1 New Tests -Several new tests have been added, especially for the F and -F subsections. There are now about 69 000 individual tests -(spread over about 700 test scripts), in the regression suite (5.6.1 -has about 11 700 tests, in 258 test scripts) The exact numbers depend -on the platform and Perl configuration used. Many of the new tests -are of course introduced by the new modules, but still in general Perl -is now more thoroughly tested. - -Because of the large number of tests, running the regression suite -will take considerably longer time than it used to: expect the suite -to take up to 4-5 times longer to run than in perl 5.6. On a really -fast machine you can hope to finish the suite in about 6-8 minutes -(wallclock time). - -The tests are now reported in a different order than in earlier Perls. -(This happens because the test scripts from under t/lib have been moved -to be closer to the library/extension they are testing.) - =head1 Known Problems -=head2 The Compiler Suite Is Still Very Experimental - -The compiler suite is slowly getting better but it continues to be -highly experimental. Use in production environments is discouraged. - -=head2 Localising Tied Arrays and Hashes Is Broken - - local %tied_array; - -doesn't work as one would expect: the old value is restored -incorrectly. This will be changed in a future release, but we don't -know yet what the new semantics will exactly be. In any case, the -change will break existing code that relies on the current -(ill-defined) semantics, so just avoid doing this in general. - -=head2 Building Extensions Can Fail Because Of Largefiles - -Some extensions like mod_perl are known to have issues with -`largefiles', a change brought by Perl 5.6.0 in which file offsets -default to 64 bits wide, where supported. Modules may fail to compile -at all, or they may compile and work incorrectly. Currently, there -is no good solution for the problem, but Configure now provides -appropriate non-largefile ccflags, ldflags, libswanted, and libs -in the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the -extensions that are having problems can try configuring themselves -without the largefileness. This is admittedly not a clean solution, -and the solution may not even work at all. One potential failure is -whether one can (or, if one can, whether it's a good idea to) link -together at all binaries with different ideas about file offsets; -all this is platform-dependent. - -=head2 Modifying $_ Inside for(..) - - for (1..5) { $_++ } - -works without complaint. It shouldn't. (You should be able to -modify only lvalue elements inside the loops.) You can see the -correct behaviour by replacing the 1..5 with 1, 2, 3, 4, 5. - -=head2 mod_perl 1.26 Doesn't Build With Threaded Perl - -Use mod_perl 1.27 or higher. - -=head2 lib/ftmp-security tests warn 'system possibly insecure' - -Don't panic. Read the 'make test' section of INSTALL instead. - -=head2 libwww-perl (LWP) fails base/date #51 - -Use libwww-perl 5.65 or later. - -=head2 PDL failing some tests - -Use PDL 2.3.4 or later. - -=head2 Perl_get_sv - -You may get errors like 'Undefined symbol "Perl_get_sv"' or "can't -resolve symbol 'Perl_get_sv'", or the symbol may be "Perl_sv_2pv". -This probably means that you are trying to use an older shared Perl -library (or extensions linked with such) with Perl 5.8.0 executable. -Perl used to have such a subroutine, but that is no more the case. -Check your shared library path, and any shared Perl libraries in those -directories. - -Sometimes this problem may also indicate a partial Perl 5.8.0 -installation, see L for an -example and how to deal with it. - -=head2 Self-tying Problems - -Self-tying of arrays and hashes is broken in rather deep and -hard-to-fix ways. As a stop-gap measure to avoid people from getting -frustrated at the mysterious results (core dumps, most often), it is -forbidden for now (you will get a fatal error even from an attempt). - -A change to self-tying of globs has caused them to be recursively -referenced (see: L). You -will now need an explicit untie to destroy a self-tied glob. This -behaviour may be fixed at a later date. - -Self-tying of scalars and IO thingies works. - -=head2 ext/threads/t/libc - -If this test fails, it indicates that your libc (C library) is not -threadsafe. This particular test stress tests the localtime() call to -find out whether it is threadsafe. See L for more information. - -=head2 Failure of Thread (5.005-style) tests - -B - -The following tests are known to fail due to fundamental problems in -the 5.005 threading implementation. These are not new failures--Perl -5.005_0x has the same bugs, but didn't have these tests. - - ../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14 - ../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7 - ../lib/English.t 2 512 54 2 3.70% 2-3 - ../lib/FileCache.t 5 1 20.00% 5 - ../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3 - ../lib/Filter/Simple/t/filter_only. 9 3 33.33% 1-2 5 - ../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627 - ../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628- - 1629 - ../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633 - ../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628 - ../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65 - ../lib/autouse.t 10 1 10.00% 4 - op/flip.t 15 1 6.67% 15 - -These failures are unlikely to get fixed as 5.005-style threads -are considered fundamentally broken. (Basically what happens is that -competing threads can corrupt shared global state, one good example -being regular expression engine's state.) - -=head2 Timing problems - -The following tests may fail intermittently because of timing -problems, for example if the system is heavily loaded. - - t/op/alarm.t - ext/Time/HiRes/HiRes.t - lib/Benchmark.t - lib/Memoize/t/expmod_t.t - lib/Memoize/t/speed.t - -In case of failure please try running them manually, for example - - ./perl -Ilib ext/Time/HiRes/HiRes.t - -=head2 Tied/Magical Array/Hash Elements Do Not Autovivify - -For normal arrays C<$foo = \$bar[1]> will assign C to -C<$bar[1]> (assuming that it didn't exist before), but for -tied/magical arrays and hashes such autovivification does not happen -because there is currently no way to catch the reference creation. -The same problem affects slicing over non-existent indices/keys of -a tied/magical array/hash. - -=head2 Unicode in package/class and subroutine names does not work - -One can have Unicode in identifier names, but not in package/class or -subroutine names. While some limited functionality towards this does -exist as of Perl 5.8.0, that is more accidental than designed; use of -Unicode for the said purposes is unsupported. - -One reason of this unfinishedness is its (currently) inherent -unportability: since both package names and subroutine names may -need to be mapped to file and directory names, the Unicode capability -of the filesystem becomes important-- and there unfortunately aren't -portable answers. - =head1 Platform Specific Problems -=head2 AIX - -=over 4 - -=item * - -If using the AIX native make command, instead of just "make" issue -"make all". In some setups the former has been known to spuriously -also try to run "make install". Alternatively, you may want to use -GNU make. - -=item * - -In AIX 4.2, Perl extensions that use C++ functions that use statics -may have problems in that the statics are not getting initialized. -In newer AIX releases, this has been solved by linking Perl with -the libC_r library, but unfortunately in AIX 4.2 the said library -has an obscure bug where the various functions related to time -(such as time() and gettimeofday()) return broken values, and -therefore in AIX 4.2 Perl is not linked against libC_r. - -=item * - -vac 5.0.0.0 May Produce Buggy Code For Perl - -The AIX C compiler vac version 5.0.0.0 may produce buggy code, -resulting in a few random tests failing when run as part of "make -test", but when the failing tests are run by hand, they succeed. -We suggest upgrading to at least vac version 5.0.1.0, that has been -known to compile Perl correctly. "lslpp -L|grep vac.C" will tell -you the vac version. See README.aix. - -=item * - -If building threaded Perl, you may get compilation warning from pp_sys.c: - - "pp_sys.c", line 4651.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed. - -This is harmless; it is caused by the getnetbyaddr() and getnetbyaddr_r() -having slightly different types for their first argument. - -=back - -=head2 Alpha systems with old gccs fail several tests - -If you see op/pack, op/pat, op/regexp, or ext/Storable tests failing -in a Linux/alpha or *BSD/Alpha, it's probably time to upgrade your gcc. -gccs prior to 2.95.3 are definitely not good enough, and gcc 3.1 may -be even better. (RedHat Linux/alpha with gcc 3.1 reported no problems, -as did Linux 2.4.18 with gcc 2.95.4.) (In Tru64, it is preferable to -use the bundled C compiler.) - -=head2 AmigaOS - -Perl 5.8.0 doesn't build in AmigaOS. It broke at some point during -the ithreads work and we could not find Amiga experts to unbreak the -problems. Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2 -development release). - -=head2 BeOS - -The following tests fail on 5.8.0 Perl in BeOS Personal 5.03: - - t/op/lfs............................FAILED at test 17 - t/op/magic..........................FAILED at test 24 - ext/Fcntl/t/syslfs..................FAILED at test 17 - ext/File/Glob/t/basic...............FAILED at test 3 - ext/POSIX/t/sigaction...............FAILED at test 13 - ext/POSIX/t/waitpid.................FAILED at test 1 - -See L (README.beos) for more details. - -=head2 Cygwin "unable to remap" - -For example when building the Tk extension for Cygwin, -you may get an error message saying "unable to remap". -This is known problem with Cygwin, and a workaround is -detailed in here: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html - -=head2 Cygwin ndbm tests fail on FAT - -One can build but not install (or test the build of) the NDBM_File -on FAT filesystems. Installation (or build) on NTFS works fine. -If one attempts the test on a FAT install (or build) the following -failures are expected: - - ../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71 - ../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ?? - ../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4 - ../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11 - ../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4 - run/fresh_perl.t 97 1 1.03% 91 - -NDBM_File fails and ODBM_File just coredumps. - -=head2 DJGPP Failures - - t/op/stat............................FAILED at test 29 - lib/File/Find/t/find.................FAILED at test 1 - lib/File/Find/t/taint................FAILED at test 1 - lib/h2xs.............................FAILED at test 15 - lib/Pod/t/eol........................FAILED at test 1 - lib/Test/Harness/t/strap-analyze.....FAILED at test 8 - lib/Test/Harness/t/test-harness......FAILED at test 23 - lib/Test/Simple/t/exit...............FAILED at test 1 - -The above failures are known as of 5.8.0 with native builds with long -filenames, but there are a few more if running under dosemu because of -limitations (and maybe bugs) of dosemu: - - t/comp/cpp...........................FAILED at test 3 - t/op/inccode.........................(crash) - -and a few lib/ExtUtils tests, and several hundred Encode/t/Aliases.t -failures that work fine with long filenames. So you really might -prefer native builds and long filenames. - -=head2 FreeBSD built with ithreads coredumps reading large directories - -This is a known bug in FreeBSD 4.5's readdir_r(), it has been fixed in -FreeBSD 4.6 (see L (README.freebsd)). - -=head2 FreeBSD Failing locale Test 117 For ISO 8859-15 Locales - -The ISO 8859-15 locales may fail the locale test 117 in FreeBSD. -This is caused by the characters \xFF (y with diaeresis) and \xBE -(Y with diaeresis) not behaving correctly when being matched -case-insensitively. Apparently this problem has been fixed in -the latest FreeBSD releases. -( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 ) - -=head2 IRIX fails ext/List/Util/t/shuffle.t or Digest::MD5 - -IRIX with MIPSpro 7.3.1.2m or 7.3.1.3m compiler may fail the List::Util -test ext/List/Util/t/shuffle.t by dumping core. This seems to be -a compiler error since if compiled with gcc no core dump ensues, and -no failures have been seen on the said test on any other platform. - -Similarly, building the Digest::MD5 extension has been -known to fail with "*** Termination code 139 (bu21)". - -The cure is to drop optimization level (Configure -Doptimize=-O2). - -=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured - -If perl is configured with -Duse64bitall, the successful result of the -subtest 10 of lib/posix may arrive before the successful result of the -subtest 9, which confuses the test harness so much that it thinks the -subtest 9 failed. - -=head2 Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint - -This is a known bug in the glibc 2.2.5 with long long integers. -( http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 ) - -=head2 Linux With Sfio Fails op/misc Test 48 - -No known fix. - -=head2 Mac OS X - -Please remember to set your environment variable LC_ALL to "C" -(setenv LC_ALL C) before running "make test" to avoid a lot of -warnings about the broken locales of Mac OS X. - -The following tests are known to fail in Mac OS X 10.1.5 because of -buggy (old) implementations of Berkeley DB included in Mac OS X: - - Failed Test Stat Wstat Total Fail Failed List of Failed - ------------------------------------------------------------------------- - ../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ?? - ../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65 - -If you are building on a UFS partition, you will also probably see -t/op/stat.t subtest #9 fail. This is caused by Darwin's UFS not -supporting inode change time. - -Also the ext/POSIX/t/posix.t subtest #10 fails but it is skipped for -now because the failure is Apple's fault, not Perl's (blocked signals -are lost). - -If you Configure with ithreads, ext/threads/t/libc.t will fail. Again, -this is not Perl's fault-- the libc of Mac OS X is not threadsafe -(in this particular test, the localtime() call is found to be -threadunsafe.) - -=head2 Mac OS X dyld undefined symbols - -If after installing Perl 5.8.0 you are getting warnings about missing -symbols, for example - - dyld: perl Undefined symbols - _perl_sv_2pv - _perl_get_sv - -you probably have an old pre-Perl-5.8.0 installation (or parts of one) -in /Library/Perl (the undefined symbols used to exist in pre-5.8.0 Perls). -It seems that for some reason "make install" doesn't always completely -overwrite the files in /Library/Perl. You can move the old Perl -shared library out of the way like this: - - cd /Library/Perl/darwin/CORE - mv libperl.dylib libperlold.dylib - -and then reissue "make install". Note that the above of course is -extremely disruptive for anything using the /usr/local/bin/perl. -If that doesn't help, you may have to try removing all the .bundle -files from beneath /Library/Perl, and again "make install"-ing. - -=head2 OS/2 Test Failures - -The following tests are known to fail on OS/2 (for clarity -only the failures are shown, not the full error messages): - - ../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8 - ../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17 - ../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14 - lib/os2_process.t 2 512 227 2 0.88% 174 209 - lib/os2_process_kid.t 227 2 0.88% 174 209 - lib/rx_cmprt.t 255 65280 18 3 16.67% 16-18 - -=head2 op/sprintf tests 91, 129, and 130 - -The op/sprintf tests 91, 129, and 130 are known to fail on some platforms. -Examples include any platform using sfio, and Compaq/Tandem's NonStop-UX. - -Test 91 is known to fail on QNX6 (nto), because C -incorrectly produces C<0.000000e+0> instead of C<0.000000e+00>. - -For tests 129 and 130, the failing platforms do not comply with -the ANSI C Standard: lines 19ff on page 134 of ANSI X3.159 1989, to -be exact. (They produce something other than "1" and "-1" when -formatting 0.6 and -0.6 using the printf format "%.0f"; most often, -they produce "0" and "-0".) - -=head2 Solaris 2.5 - -In case you are still using Solaris 2.5 (aka SunOS 5.5), you may -experience failures (the test core dumping) in lib/locale.t. -The suggested cure is to upgrade your Solaris. - -=head2 Solaris x86 Fails Tests With -Duse64bitint - -The following tests are known to fail in Solaris x86 with Perl -configured to use 64 bit integers: - - ext/Data/Dumper/t/dumper.............FAILED at test 268 - ext/Devel/Peek/Peek..................FAILED at test 7 - -=head2 SUPER-UX (NEC SX) - -The following tests are known to fail on SUPER-UX: - - op/64bitint...........................FAILED tests 29-30, 32-33, 35-36 - op/arith..............................FAILED tests 128-130 - op/pack...............................FAILED tests 25-5625 - op/pow................................ - op/taint..............................# msgsnd failed - ../ext/IO/lib/IO/t/io_poll............FAILED tests 3-4 - ../ext/IPC/SysV/ipcsysv...............FAILED tests 2, 5-6 - ../ext/IPC/SysV/t/msg.................FAILED tests 2, 4-6 - ../ext/Socket/socketpair..............FAILED tests 12 - ../lib/IPC/SysV.......................FAILED tests 2, 5-6 - ../lib/warnings.......................FAILED tests 115-116, 118-119 - -The op/pack failure ("Cannot compress negative numbers at op/pack.t line 126") -is serious but as of yet unsolved. It points at some problems with the -signedness handling of the C compiler, as do the 64bitint, arith, and pow -failures. Most of the rest point at problems with SysV IPC. - -=head2 Term::ReadKey not working on Win32 - -Use Term::ReadKey 2.20 or later. - -=head2 UNICOS/mk - -=over 4 - -=item * - -During Configure, the test - - Guessing which symbols your C compiler and preprocessor define... - -will probably fail with error messages like - - CC-20 cc: ERROR File = try.c, Line = 3 - The identifier "bad" is undefined. - - bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K - ^ - - CC-65 cc: ERROR File = try.c, Line = 3 - A semicolon is expected at this point. - -This is caused by a bug in the awk utility of UNICOS/mk. You can ignore -the error, but it does cause a slight problem: you cannot fully -benefit from the h2ph utility (see L) that can be used to -convert C headers to Perl libraries, mainly used to be able to access -from Perl the constants defined using C preprocessor, cpp. Because of -the above error, parts of the converted headers will be invisible. -Luckily, these days the need for h2ph is rare. - -=item * - -If building Perl with interpreter threads (ithreads), the -getgrent(), getgrnam(), and getgrgid() functions cannot return the -list of the group members due to a bug in the multithreaded support of -UNICOS/mk. What this means is that in list context the functions will -return only three values, not four. - -=back - -=head2 UTS - -There are a few known test failures, see L (README.uts). - -=head2 VOS (Stratus) - -When Perl is built using the native build process on VOS Release -14.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either -pass or result in TODO (ignored) failures. - -=head2 VMS - -There should be no reported test failures with a default configuration, -though there are a number of tests marked TODO that point to areas -needing further debugging and/or porting work. - -=head2 Win32 - -In multi-CPU boxes, there are some problems with the I/O buffering: -some output may appear twice. - -=head2 XML::Parser not working - -Use XML::Parser 2.31 or later. - -=head2 z/OS (OS/390) - -z/OS has rather many test failures but the situation is actually much -better than it was in 5.6.0; it's just that so many new modules and -tests have been added. - - Failed Test Stat Wstat Total Fail Failed List of Failed - --------------------------------------------------------------------------- - ../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327 - 331 333 337 339 - ../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5 - ../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79 - 110-111 150 161 - ../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48 - ../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9 - op/pat.t 922 7 0.76% 665 776 785 832- - 834 845 - op/sprintf.t 224 3 1.34% 98 100 136 - op/tr.t 97 5 5.15% 63 71-74 - uni/fold.t 780 6 0.77% 61 169 196 661 - 710-711 - -The failures in dumper.t and downgrade.t are problems in the tests, -those in io_unix and sprintf are problems in the USS (UDP sockets and -printf formats). The pat, tr, and fold failures are genuine Perl -problems caused by EBCDIC (and in the pat and fold cases, combining -that with Unicode). The Constant and Embed are probably problems in -the tests (since they test Perl's ability to build extensions, and -that seems to be working reasonably well.) - -=head2 Unicode Support on EBCDIC Still Spotty - -Though mostly working, Unicode support still has problem spots on -EBCDIC platforms. One such known spot are the C<\p{}> and C<\P{}> -regular expression constructs for code points less than 256: the -C are testing for Unicode code points, not knowing about EBCDIC. - -=head2 Seen In Perl 5.7 But Gone Now - -C (previously known as C) was removed -because it was felt that it didn't have enough value in it to be a -core module. It is still a useful module, though, and is available -from the CPAN. - -Perl 5.8 unfortunately does not build anymore on AmigaOS; this broke -accidentally at some point. Since there are not that many Amiga -developers available, we could not get this fixed and tested in time -for 5.8.0. Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2 -development release). - -The C and C (capitalised) were renamed as -C and C (all lowercase) just before 5.8.0. -The main rationale was to have all core PerlIO layers to have all -lowercase names. The "plugins" are named as usual, for example -C. - -The C and C were -renamed as C and C just before 5.8.0. -The main rationale was to have thread modules to obey normal naming, -C (the C and C themselves are -more pragma-like, they affect compile-time, so they stay lowercase). - =head1 Reporting Bugs If you find what you think is a bug, you might check the articles @@ -3728,8 +56,4 @@ The F file for general stuff. The F and F files for copyright information. -=head1 HISTORY - -Written by Jarkko Hietaniemi >. - =cut diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index b7fcd52..564f3b6 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -4572,7 +4572,7 @@ the original quicksort was faster. 5.8 has a sort pragma for limited control of the sort. Its rather blunt control of the underlying algorithm may not persist into future perls, but the ability to characterize the input or output in implementation -independent ways quite probably will. See L. +independent ways quite probably will. See L. Examples: diff --git a/pod/perlipc.pod b/pod/perlipc.pod index 02f2687..6ab14de 100644 --- a/pod/perlipc.pod +++ b/pod/perlipc.pod @@ -1638,10 +1638,11 @@ version and suggestions from the Perl Porters. There's a lot more to networking than this, but this should get you started. -For intrepid programmers, the indispensable textbook is I by W. Richard Stevens (published by Addison-Wesley). Note -that most books on networking address networking from the perspective of -a C programmer; translation to Perl is left as an exercise for the reader. +For intrepid programmers, the indispensable textbook is I by W. Richard Stevens +(published by Prentice-Hall). Note that most books on networking +address the subject from the perspective of a C programmer; translation +to Perl is left as an exercise for the reader. The IO::Socket(3) manpage describes the object library, and the Socket(3) manpage describes the low-level interface to sockets. Besides the obvious diff --git a/pod/perlop.pod b/pod/perlop.pod index 6785d24..8af2d5b 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -26,7 +26,7 @@ values only, not array values. left & left | ^ left && - left || + left || // nonassoc .. ... right ?: right = += -= *= etc. @@ -34,7 +34,7 @@ values only, not array values. nonassoc list operators (rightward) right not left and - left or xor + left or xor err In the following sections, these operators are covered in precedence order. @@ -361,12 +361,23 @@ if the left operand is true, the right operand is not even evaluated. Scalar or list context propagates down to the right operand if it is evaluated. -The C<||> and C<&&> operators differ from C's in that, rather than returning +=head2 C-style Logical Defined-Or + +Although it has no direct equivalent in C, Perl's C operator is related +to its C-style or. In fact, it's exactly the same as C<||>, except that it +tests the left hand side's definedness instead of its truth. Thus, C<$a // $b> +is similar to C (except that it returns the value of C<$a> +rather than the value of C) and is exactly equivalent to +C. This is very useful for providing default values +for variables. If you actually want to test if at least one of C<$a> and C<$b> is +defined, use C. + +The C<||>, C and C<&&> operators differ from C's in that, rather than returning 0 or 1, they return the last value evaluated. Thus, a reasonably portable -way to find out the home directory (assuming it's not "0") might be: +way to find out the home directory might be: - $home = $ENV{'HOME'} || $ENV{'LOGDIR'} || - (getpwuid($<))[7] || die "You're homeless!\n"; + $home = $ENV{'HOME'} // $ENV{'LOGDIR'} // + (getpwuid($<))[7] // die "You're homeless!\n"; In particular, this means that you shouldn't use this for selecting between two aggregates for assignment: @@ -375,10 +386,10 @@ for selecting between two aggregates for assignment: @a = scalar(@b) || @c; # really meant this @a = @b ? @b : @c; # this works fine, though -As more readable alternatives to C<&&> and C<||> when used for -control flow, Perl provides C and C operators (see below). -The short-circuit behavior is identical. The precedence of "and" and -"or" is much lower, however, so that you can safely use them after a +As more readable alternatives to C<&&>, C and C<||> when used for +control flow, Perl provides C, C and C operators (see below). +The short-circuit behavior is identical. The precedence of "and", "err" +and "or" is much lower, however, so that you can safely use them after a list operator without the need for parentheses: unlink "alpha", "beta", "gamma" @@ -600,7 +611,7 @@ expressions. It's equivalent to && except for the very low precedence. This means that it short-circuits: i.e., the right expression is evaluated only if the left expression is true. -=head2 Logical or and Exclusive Or +=head2 Logical or, Defined or, and Exclusive Or Binary "or" returns the logical disjunction of the two surrounding expressions. It's equivalent to || except for the very low precedence. @@ -623,7 +634,12 @@ takes higher precedence. @info = stat($file) || die; # oops, scalar sense of stat! @info = stat($file) or die; # better, now @info gets its due -Then again, you could always use parentheses. +Then again, you could always use parentheses. + +Binary "err" is equivalent to C--it's just like binary "or", except it tests +its left argument's definedness instead of its truth. There are two ways to +remember "err": either because many functions return C on an Bor, +or as a sort of correction: C<$a=($b err 'default')> Binary "xor" returns the exclusive-OR of the two surrounding expressions. It cannot short circuit, of course. @@ -847,6 +863,15 @@ the other flags are taken from the original pattern. If no match has previously succeeded, this will (silently) act instead as a genuine empty pattern (which will always match). +Note that it's possible to confuse Perl into thinking C (the empty +regex) is really C (the defined-or operator). Perl is usually pretty +good about this, but some pathological cases might trigger this, such as +C<$a///> (is that C<($a) / (//)> or C<$a // />?) and C +(C or C?). In all of these examples, Perl +will assume you meant defined-or. If you meant the empty regex, just +use parentheses or spaces to disambiguate, or even prefix the empty +regex with an C (so C becomes C). + If the C option is not used, C in list context returns a list consisting of the subexpressions matched by the parentheses in the pattern, i.e., (C<$1>, C<$2>, C<$3>...). (Note that here C<$1> etc. are diff --git a/pp.c b/pp.c index 7fa9c06..d7fc6bf 100644 --- a/pp.c +++ b/pp.c @@ -4611,8 +4611,12 @@ PP(pp_split) iters++; } else if (!origlimit) { - while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) - iters--, SP--; + while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0)) { + if (TOPs && !make_mortal) + sv_2mortal(TOPs); + iters--; + SP--; + } } if (realarray) { diff --git a/pp.sym b/pp.sym index 909e95e..f2dbb0b 100644 --- a/pp.sym +++ b/pp.sym @@ -390,3 +390,5 @@ Perl_pp_lock Perl_pp_threadsv Perl_pp_setstate Perl_pp_method_named +Perl_pp_dor +Perl_pp_dorassign diff --git a/pp_ctl.c b/pp_ctl.c index 971df59..336e002 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -1378,7 +1378,40 @@ PP(pp_orassign) else RETURNOP(cLOGOP->op_other); } - + +PP(pp_dorassign) +{ + dSP; + register SV* sv; + + sv = TOPs; + if (!sv || !SvANY(sv)) { + RETURNOP(cLOGOP->op_other); + } + + switch (SvTYPE(sv)) { + case SVt_PVAV: + if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied))) + RETURN; + break; + case SVt_PVHV: + if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied))) + RETURN; + break; + case SVt_PVCV: + if (CvROOT(sv) || CvXSUB(sv)) + RETURN; + break; + default: + if (SvGMAGICAL(sv)) + mg_get(sv); + if (SvOK(sv)) + RETURN; + } + + RETURNOP(cLOGOP->op_other); +} + PP(pp_caller) { dSP; diff --git a/pp_hot.c b/pp_hot.c index ae1b1c2..8f042b9 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -320,6 +320,42 @@ PP(pp_or) } } +PP(pp_dor) +{ + /* Most of this is lifted straight from pp_defined */ + dSP; + register SV* sv; + + sv = TOPs; + if (!sv || !SvANY(sv)) { + --SP; + RETURNOP(cLOGOP->op_other); + } + + switch (SvTYPE(sv)) { + case SVt_PVAV: + if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied))) + RETURN; + break; + case SVt_PVHV: + if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied))) + RETURN; + break; + case SVt_PVCV: + if (CvROOT(sv) || CvXSUB(sv)) + RETURN; + break; + default: + if (SvGMAGICAL(sv)) + mg_get(sv); + if (SvOK(sv)) + RETURN; + } + + --SP; + RETURNOP(cLOGOP->op_other); +} + PP(pp_add) { dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN); diff --git a/pp_proto.h b/pp_proto.h index 566074e..8631194 100644 --- a/pp_proto.h +++ b/pp_proto.h @@ -391,3 +391,5 @@ PERL_PPDEF(Perl_pp_lock) PERL_PPDEF(Perl_pp_threadsv) PERL_PPDEF(Perl_pp_setstate) PERL_PPDEF(Perl_pp_method_named) +PERL_PPDEF(Perl_pp_dor) +PERL_PPDEF(Perl_pp_dorassign) diff --git a/pp_sys.c b/pp_sys.c index bd2334a..7a44b6b 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -4048,24 +4048,14 @@ PP(pp_system) I32 did_pipes = 0; if (PL_tainting) { - int some_arg_tainted = 0; TAINT_ENV(); while (++MARK <= SP) { (void)SvPV_nolen(*MARK); /* stringify for taint check */ - if (PL_tainted) { - some_arg_tainted = 1; + if (PL_tainted) break; - } } MARK = ORIGMARK; - /* XXX Remove warning at end of deprecation cycle --RD 2002-02 */ - if (SP - MARK == 1) { - TAINT_PROPER("system"); - } - else if (some_arg_tainted && ckWARN2(WARN_TAINT, WARN_DEPRECATED)) { - Perl_warner(aTHX_ packWARN2(WARN_TAINT, WARN_DEPRECATED), - "Use of tainted arguments in %s is deprecated", "system"); - } + TAINT_PROPER("system"); } PERL_FLUSHALL_FOR_CHILD; #if (defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO) @@ -4186,24 +4176,14 @@ PP(pp_exec) STRLEN n_a; if (PL_tainting) { - int some_arg_tainted = 0; TAINT_ENV(); while (++MARK <= SP) { (void)SvPV_nolen(*MARK); /* stringify for taint check */ - if (PL_tainted) { - some_arg_tainted = 1; + if (PL_tainted) break; - } } MARK = ORIGMARK; - /* XXX Remove warning at end of deprecation cycle --RD 2002-02 */ - if (SP - MARK == 1) { - TAINT_PROPER("exec"); - } - else if (some_arg_tainted && ckWARN2(WARN_TAINT, WARN_DEPRECATED)) { - Perl_warner(aTHX_ packWARN2(WARN_TAINT, WARN_DEPRECATED), - "Use of tainted arguments in %s is deprecated", "exec"); - } + TAINT_PROPER("exec"); } PERL_FLUSHALL_FOR_CHILD; if (PL_op->op_flags & OPf_STACKED) { diff --git a/regcomp.c b/regcomp.c index 3055876..cc283a6 100644 --- a/regcomp.c +++ b/regcomp.c @@ -4224,11 +4224,11 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state) SV *rv; /* The 0th element stores the character class description - * in its textual form: used later (regexec.c:Perl_regclass_swatch()) + * in its textual form: used later (regexec.c:Perl_regclass_swash()) * to initialize the appropriate swash (which gets stored in * the 1st element), and also useful for dumping the regnode. * The 2nd element stores the multicharacter foldings, - * used later (regexec.c:s_reginclasslen()). */ + * used later (regexec.c:S_reginclass()). */ av_store(av, 0, listsv); av_store(av, 1, NULL); av_store(av, 2, (SV*)unicode_alternate); diff --git a/t/comp/hints.t b/t/comp/hints.t index 5911b77..1170968 100644 --- a/t/comp/hints.t +++ b/t/comp/hints.t @@ -1,36 +1,57 @@ -#!./perl -w +#!./perl -BEGIN { print "1..7\n"; } +# Tests the scoping of $^H and %^H + +BEGIN { print "1..14\n"; } BEGIN { print "not " if exists $^H{foo}; print "ok 1 - \$^H{foo} doesn't exist initially\n"; + print "not " if $^H & 0x00020000; + print "ok 2 - \$^H doesn't contain HINT_LOCALIZE_HH initially\n"; } { # simulate a pragma -- don't forget HINT_LOCALIZE_HH BEGIN { $^H |= 0x00020000; $^H{foo} = "a"; } BEGIN { print "not " if $^H{foo} ne "a"; - print "ok 2 - \$^H{foo} is now 'a'\n"; + print "ok 3 - \$^H{foo} is now 'a'\n"; + print "not " unless $^H & 0x00020000; + print "ok 4 - \$^H contains HINT_LOCALIZE_HH while compiling\n"; } { BEGIN { $^H |= 0x00020000; $^H{foo} = "b"; } BEGIN { print "not " if $^H{foo} ne "b"; - print "ok 3 - \$^H{foo} is now 'b'\n"; + print "ok 5 - \$^H{foo} is now 'b'\n"; } } BEGIN { print "not " if $^H{foo} ne "a"; - print "ok 4 - \$H^{foo} restored to 'a'\n"; + print "ok 6 - \$H^{foo} restored to 'a'\n"; } + # The pragma settings disappear after compilation + # (test at CHECK-time and at run-time) CHECK { print "not " if exists $^H{foo}; - print "ok 6 - \$^H{foo} doesn't exist when compilation complete\n"; + print "ok 9 - \$^H{foo} doesn't exist when compilation complete\n"; + print "not " if $^H & 0x00020000; + print "ok 10 - \$^H doesn't contain HINT_LOCALIZE_HH when compilation complete\n"; } print "not " if exists $^H{foo}; - print "ok 7 - \$^H{foo} doesn't exist at runtime\n"; + print "ok 11 - \$^H{foo} doesn't exist at runtime\n"; + print "not " if $^H & 0x00020000; + print "ok 12 - \$^H doesn't contain HINT_LOCALIZE_HH at run-time\n"; + # op_entereval should keep the pragmas it was compiled with + eval q* + print "not " if $^H{foo} ne "a"; + print "ok 13 - \$^H{foo} is 'a' at eval-\"\" time # TODO\n"; + print "not " unless $^H & 0x00020000; + print "ok 14 - \$^H contains HINT_LOCALIZE_HH at eval\"\"-time\n"; + *; } BEGIN { print "not " if exists $^H{foo}; - print "ok 5 - \$^H{foo} doesn't exist while finishing compilation\n"; + print "ok 7 - \$^H{foo} doesn't exist while finishing compilation\n"; + print "not " if $^H & 0x00020000; + print "ok 8 - \$^H doesn't contain HINT_LOCALIZE_HH while finishing compilation\n"; } diff --git a/t/lib/warnings/pp_hot b/t/lib/warnings/pp_hot index c008dd5..4e10627 100644 --- a/t/lib/warnings/pp_hot +++ b/t/lib/warnings/pp_hot @@ -57,6 +57,9 @@ $f = $a = "abc" ; print $f $a; no warnings 'unopened' ; print $f $a; +use warnings; +no warnings 'unopened' ; +print $f $a; EXPECT print() on unopened filehandle abc at - line 4. ######## @@ -100,6 +103,9 @@ no warnings 'closed' ; print STDIN "anc"; opendir STDIN, "."; print STDIN "anc"; +use warnings; +no warnings 'closed' ; +print STDIN "anc"; EXPECT print() on closed filehandle STDIN at - line 4. print() on closed filehandle STDIN at - line 6. diff --git a/t/op/attrs.t b/t/op/attrs.t index 1ed92a1..25abeb2 100644 --- a/t/op/attrs.t +++ b/t/op/attrs.t @@ -5,188 +5,117 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; + require './test.pl'; } -sub NTESTS () ; - -my ($test, $ntests); -BEGIN {$ntests=0} -$test=0; -my $failed = 0; - -print "1..".NTESTS."\n"; +plan tests => 47; $SIG{__WARN__} = sub { die @_ }; -sub mytest { - my $bad = ''; - if (!$@ ne !$_[0] || $_[0] && $@ !~ $_[0]) { - if ($@) { - my $x = $@; - $x =~ s/\n.*\z//s; - print "# Got: $x\n" - } - else { - print "# Got unexpected success\n"; - } - if ($_[0]) { - print "# Expected: $_[0]\n"; - } - else { - print "# Expected success\n"; - } - $failed = 1; - $bad = 'not '; - } - elsif (@_ == 3 && $_[1] ne $_[2]) { - print "# Got: $_[1]\n"; - print "# Expected: $_[2]\n"; - $failed = 1; - $bad = 'not '; - } - print $bad."ok ".++$test."\n"; +sub eval_ok ($) { + eval $_[0]; + is( $@, '' ); } -eval 'sub t1 ($) : locked { $_[0]++ }'; -mytest; -BEGIN {++$ntests} - -eval 'sub t2 : locked { $_[0]++ }'; -mytest; -BEGIN {++$ntests} - -eval 'sub t3 ($) : locked ;'; -mytest; -BEGIN {++$ntests} - -eval 'sub t4 : locked ;'; -mytest; -BEGIN {++$ntests} - -my $anon1; -eval '$anon1 = sub ($) : locked:method { $_[0]++ }'; -mytest; -BEGIN {++$ntests} - -my $anon2; -eval '$anon2 = sub : locked : method { $_[0]++ }'; -mytest; -BEGIN {++$ntests} - -my $anon3; -eval '$anon3 = sub : method { $_[0]->[1] }'; -mytest; -BEGIN {++$ntests} +eval_ok 'sub t1 ($) : locked { $_[0]++ }'; +eval_ok 'sub t2 : locked { $_[0]++ }'; +eval_ok 'sub t3 ($) : locked ;'; +eval_ok 'sub t4 : locked ;'; +our $anon1; eval_ok '$anon1 = sub ($) : locked:method { $_[0]++ }'; +our $anon2; eval_ok '$anon2 = sub : locked : method { $_[0]++ }'; +our $anon3; eval_ok '$anon3 = sub : method { $_[0]->[1] }'; eval 'sub e1 ($) : plugh ;'; -mytest qr/^Invalid CODE attributes?: ["']?plugh["']? at/; -BEGIN {++$ntests} +like $@, qr/^Invalid CODE attributes?: ["']?plugh["']? at/; eval 'sub e2 ($) : plugh(0,0) xyzzy ;'; -mytest qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /; -BEGIN {++$ntests} +like $@, qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /; eval 'sub e3 ($) : plugh(0,0 xyzzy ;'; -mytest qr/Unterminated attribute parameter in attribute list at/; -BEGIN {++$ntests} +like $@, qr/Unterminated attribute parameter in attribute list at/; eval 'sub e4 ($) : plugh + xyzzy ;'; -mytest qr/Invalid separator character '[+]' in attribute list at/; -BEGIN {++$ntests} - -eval 'my main $x : = 0;'; -mytest; -BEGIN {++$ntests} - -eval 'my $x : = 0;'; -mytest; -BEGIN {++$ntests} - -eval 'my $x ;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x) : = 0;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x) ;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x) : ;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x,$y) : = 0;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x,$y) ;'; -mytest; -BEGIN {++$ntests} - -eval 'my ($x,$y) : ;'; -mytest; -BEGIN {++$ntests} +like $@, qr/Invalid separator character '[+]' in attribute list at/; + +eval_ok 'my main $x : = 0;'; +eval_ok 'my $x : = 0;'; +eval_ok 'my $x ;'; +eval_ok 'my ($x) : = 0;'; +eval_ok 'my ($x) ;'; +eval_ok 'my ($x) : ;'; +eval_ok 'my ($x,$y) : = 0;'; +eval_ok 'my ($x,$y) ;'; +eval_ok 'my ($x,$y) : ;'; eval 'my ($x,$y) : plugh;'; -mytest qr/^Invalid SCALAR attribute: ["']?plugh["']? at/; -BEGIN {++$ntests} +like $@, qr/^Invalid SCALAR attribute: ["']?plugh["']? at/; + +# bug #16080 +eval '{my $x : plugh}'; +like $@, qr/^Invalid SCALAR attribute: ["']?plugh["']? at/; +eval '{my ($x,$y) : plugh(})}'; +like $@, qr/^Invalid SCALAR attribute: ["']?plugh\(}\)["']? at/; + +# More syntax tests from the attributes manpage +eval 'my $x : switch(10,foo(7,3)) : expensive;'; +like $@, qr/^Invalid SCALAR attributes: ["']?switch\(10,foo\(7,3\)\) : expensive["']? at/; +eval q/my $x : Ugly('\(") :Bad;/; +like $@, qr/^Invalid SCALAR attributes: ["']?Ugly\('\\\("\) : Bad["']? at/; +eval 'my $x : _5x5;'; +like $@, qr/^Invalid SCALAR attribute: ["']?_5x5["']? at/; +eval 'my $x : locked method;'; +like $@, qr/^Invalid SCALAR attributes: ["']?locked : method["']? at/; +eval 'my $x : switch(10,foo();'; +like $@, qr/^Unterminated attribute parameter in attribute list at/; +eval q/my $x : Ugly('(');/; +like $@, qr/^Unterminated attribute parameter in attribute list at/; +eval 'my $x : 5x5;'; +like $@, qr/error/; +eval 'my $x : Y2::north;'; +like $@, qr/Invalid separator character ':' in attribute list at/; sub A::MODIFY_SCALAR_ATTRIBUTES { return } eval 'my A $x : plugh;'; -mytest qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/; -BEGIN {++$ntests} +like $@, qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/; eval 'my A $x : plugh plover;'; -mytest qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /; -BEGIN {++$ntests} +like $@, qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /; eval 'package Cat; my Cat @socks;'; -mytest qr/^Can't declare class for non-scalar \@socks in "my"/; -BEGIN {++$ntests} +like $@, qr/^Can't declare class for non-scalar \@socks in "my"/; sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" } sub X::foo { 1 } *Y::bar = \&X::foo; *Y::bar = \&X::foo; # second time for -w eval 'package Z; sub Y::bar : foo'; -mytest qr/^X at /; -BEGIN {++$ntests} +like $@, qr/^X at /; eval 'package Z; sub Y::baz : locked {}'; my @attrs = eval 'attributes::get \&Y::baz'; -mytest '', "@attrs", "locked"; -BEGIN {++$ntests} +is "@attrs", "locked"; @attrs = eval 'attributes::get $anon1'; -mytest '', "@attrs", "locked method"; -BEGIN {++$ntests} +is "@attrs", "locked method"; sub Z::DESTROY { } sub Z::FETCH_CODE_ATTRIBUTES { return 'Z' } my $thunk = eval 'bless +sub : method locked { 1 }, "Z"'; -mytest '', ref($thunk), "Z"; -BEGIN {++$ntests} +is ref($thunk), "Z"; @attrs = eval 'attributes::get $thunk'; -mytest '', "@attrs", "locked method Z"; -BEGIN {++$ntests} +is "@attrs", "locked method Z"; # Test ability to modify existing sub's (or XSUB's) attributes. eval 'package A; sub X { $_[0] } sub X : lvalue'; @attrs = eval 'attributes::get \&A::X'; -mytest '', "@attrs", "lvalue"; -BEGIN {++$ntests} +is "@attrs", "lvalue"; # Above not with just 'pure' built-in attributes. sub Z::MODIFY_CODE_ATTRIBUTES { (); } eval 'package Z; sub L { $_[0] } sub L : Z lvalue'; @attrs = eval 'attributes::get \&Z::L'; -mytest '', "@attrs", "lvalue Z"; -BEGIN {++$ntests} - +is "@attrs", "lvalue Z"; # Begin testing attributes that tie @@ -196,26 +125,23 @@ BEGIN {++$ntests} sub TIESCALAR { my $x = $_[1]; bless \$x, $_[0]; } sub FETCH { ${$_[0]} } sub STORE { - #print "# In Ttie::STORE\n"; - ::mytest ''; + ::pass; ${$_[0]} = $_[1]*2; } package Tloop; sub MODIFY_SCALAR_ATTRIBUTES { tie ${$_[1]}, 'Ttie', -1; (); } } -eval ' +eval_ok ' package Tloop; for my $i (0..2) { my $x : TieLoop = $i; - $x != $i*2 and ::mytest "", $x, $i*2; + $x != $i*2 and ::is $x, $i*2; } '; -mytest; -BEGIN {$ntests += 4} - -# Other tests should be added above this line - -sub NTESTS () { $ntests } -exit $failed; +# bug #15898 +eval 'our ${""} : foo = 1'; +like $@, qr/Can't declare scalar dereference in our/; +eval 'my $$foo : bar = 1'; +like $@, qr/Can't declare scalar dereference in my/; diff --git a/t/op/dor.t b/t/op/dor.t new file mode 100644 index 0000000..56920c2 --- /dev/null +++ b/t/op/dor.t @@ -0,0 +1,44 @@ +#!./perl + +# Test // and friends. + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; +} + +package main; +require './test.pl'; + +plan( tests => 9 ); + +my($x); + +$x=1; +is($x // 0, 1, ' // : left-hand operand defined'); + +$x = undef; +is($x // 1, 1, ' // : left-hand operand undef'); + +$x=''; +is($x // 0, '', ' // : left-hand operand defined but empty'); + +$x=1; +is(($x err 0), 1, ' err: left-hand operand defined'); + +$x = undef; +is(($x err 1), 1, ' err: left-hand operand undef'); + +$x=''; +is(($x err 0), '', ' err: left-hand operand defined but empty'); + +$x=undef; +$x //= 1; +is($x, 1, ' //=: left-hand operand undefined'); + +$x //= 0; +is($x, 1, ' //=: left-hand operand defined'); + +$x = ''; +$x //= 0; +is($x, '', ' //=: left-hand operand defined but empty'); diff --git a/t/op/stash.t b/t/op/stash.t new file mode 100644 index 0000000..c8fe0ae --- /dev/null +++ b/t/op/stash.t @@ -0,0 +1,18 @@ +#!./perl + +BEGIN { + chdir 't' if -d 't'; + @INC = qw(../lib); +} + +require "./test.pl"; + +plan( tests => 1 ); + +# Used to segfault (bug #15479) +fresh_perl_is( + '%:: = ""', + 'Odd number of elements in hash assignment at - line 1.', + { switches => [ '-w' ] }, + 'delete $::{STDERR} and print a warning', +); diff --git a/t/op/taint.t b/t/op/taint.t index ac1cace..7e8d4c4 100755 --- a/t/op/taint.t +++ b/t/op/taint.t @@ -124,7 +124,7 @@ my $echo = "$Invoke_Perl $ECHO"; my $TEST = catfile(curdir(), 'TEST'); -print "1..205\n"; +print "1..206\n"; # First, let's make sure that Perl is checking the dangerous # environment variables. Maybe they aren't set yet, so we'll @@ -941,9 +941,7 @@ else { # bug 20020208.005 plus some extras # single arg exec/system are tests 80-83 - use if $] lt '5.009', warnings => FATAL => 'taint'; - my $err = $] ge '5.009' ? qr/^Insecure dependency/ - : qr/^Use of tainted arguments/; + my $err = qr/^Insecure dependency/ ; test 184, eval { exec $TAINT, $TAINT } eq '', 'exec'; test 185, $@ =~ $err, $@; test 186, eval { exec $TAINT $TAINT } eq '', 'exec'; @@ -973,3 +971,10 @@ else # If you add tests here update also the above skip block for VMS. } + +{ + # [ID 20020704.001] taint propagation failure + use re 'taint'; + $TAINT =~ /(.*)/; + test 206, tainted(my $foo = $1); +} diff --git a/toke.c b/toke.c index bfc6436..6bacaea 100644 --- a/toke.c +++ b/toke.c @@ -207,8 +207,8 @@ S_tokereport(pTHX_ char *thing, char* s, I32 rv) /* * S_ao * - * This subroutine detects &&= and ||= and turns an ANDAND or OROR - * into an OP_ANDASSIGN or OP_ORASSIGN + * This subroutine detects &&=, ||=, and //= and turns an ANDAND, OROR or DORDOR + * into an OP_ANDASSIGN, OP_ORASSIGN, or OP_DORASSIGN */ STATIC int @@ -220,6 +220,8 @@ S_ao(pTHX_ int toketype) yylval.ival = OP_ANDASSIGN; else if (toketype == OROR) yylval.ival = OP_ORASSIGN; + else if (toketype == DORDOR) + yylval.ival = OP_DORASSIGN; toketype = ASSIGNOP; } return toketype; @@ -2979,6 +2981,7 @@ Perl_yylex(pTHX) switch (tmp) { case KEY_or: case KEY_and: + case KEY_err: case KEY_for: case KEY_unless: case KEY_if: @@ -3046,7 +3049,7 @@ Perl_yylex(pTHX) break; /* require real whitespace or :'s */ } tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}(' for vi */ - if (*s != ';' && *s != tmp && (tmp != '=' || *s != ')')) { + if (*s != ';' && *s != '}' && *s != tmp && (tmp != '=' || *s != ')')) { char q = ((*s == '\'') ? '"' : '\''); /* If here for an expression, and parsed no attrs, back off. */ if (tmp == '=' && !attrs) { @@ -3542,8 +3545,16 @@ Perl_yylex(pTHX) PL_expect = XTERM; /* e.g. print $fh 3 */ else if (*s == '.' && isDIGIT(s[1])) PL_expect = XTERM; /* e.g. print $fh .3 */ - else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=') - PL_expect = XTERM; /* e.g. print $fh -1 */ + else if (strchr("?-+", *s) && !isSPACE(s[1]) && s[1] != '=') + PL_expect = XTERM; /* e.g. print $fh -1 */ + else if (*s == '/') { + if(s[1] == '/') { + PL_expect=XOPERATOR; + } + else { + PL_expect=XTERM; + } + } else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=') PL_expect = XTERM; /* print $fh <<"EOF" */ } @@ -3585,22 +3596,36 @@ Perl_yylex(pTHX) PL_pending_ident = '@'; TERM('@'); - case '/': /* may either be division or pattern */ - case '?': /* may either be conditional or pattern */ - if (PL_expect != XOPERATOR) { - /* Disable warning on "study /blah/" */ - if (PL_oldoldbufptr == PL_last_uni - && (*PL_last_uni != 's' || s - PL_last_uni < 5 - || memNE(PL_last_uni, "study", 5) - || isALNUM_lazy_if(PL_last_uni+5,UTF))) - check_uni(); - s = scan_pat(s,OP_MATCH); - TERM(sublex_start()); - } - tmp = *s++; - if (tmp == '/') - Mop(OP_DIVIDE); - OPERATOR(tmp); + case '/': /* may be division, defined-or, or pattern */ + case '?': /* may either be conditional or pattern */ + if(PL_expect == XOPERATOR) { + tmp = *s++; + if(tmp == '?') { + OPERATOR('?'); + } + else { + tmp = *s++; + if(tmp == '/') { + /* A // operator. */ + AOPERATOR(DORDOR); + } + else { + s--; + Mop(OP_DIVIDE); + } + } + } + else { + /* Disable warning on "study /blah/" */ + if (PL_oldoldbufptr == PL_last_uni + && (*PL_last_uni != 's' || s - PL_last_uni < 5 + || memNE(PL_last_uni, "study", 5) + || isALNUM_lazy_if(PL_last_uni+5,UTF) + )) + check_uni(); + s = scan_pat(s,OP_MATCH); + TERM(sublex_start()); + } case '.': if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack @@ -4316,6 +4341,9 @@ Perl_yylex(pTHX) case KEY_eof: UNI(OP_EOF); + case KEY_err: + OPERATOR(DOROP); + case KEY_exp: UNI(OP_EXP); @@ -5438,6 +5466,7 @@ Perl_keyword(pTHX_ register char *d, I32 len) break; case 3: if (strEQ(d,"eof")) return -KEY_eof; + if (strEQ(d,"err")) return -KEY_err; if (strEQ(d,"exp")) return -KEY_exp; break; case 4: diff --git a/util.c b/util.c index dbee23d..99c79fb 100644 --- a/util.c +++ b/util.c @@ -3481,8 +3481,6 @@ Perl_my_fflush_all(pTHX) void Perl_report_evil_fh(pTHX_ GV *gv, IO *io, I32 op) { - char *vile; - I32 warn_type; char *func = op == OP_READLINE ? "readline" : /* "" not nice */ op == OP_LEAVEWRITE ? "write" : /* "write exit" not nice */ @@ -3493,42 +3491,53 @@ Perl_report_evil_fh(pTHX_ GV *gv, IO *io, I32 op) "socket" : "filehandle"; char *name = NULL; - if (gv && io && IoTYPE(io) == IoTYPE_CLOSED) { - vile = "closed"; - warn_type = WARN_CLOSED; - } - else { - vile = "unopened"; - warn_type = WARN_UNOPENED; - } - if (gv && isGV(gv)) { name = GvENAME(gv); } if (op == OP_phoney_OUTPUT_ONLY || op == OP_phoney_INPUT_ONLY) { - if (name && *name) - Perl_warner(aTHX_ packWARN(WARN_IO), "Filehandle %s opened only for %sput", - name, - (op == OP_phoney_INPUT_ONLY ? "in" : "out")); - else - Perl_warner(aTHX_ packWARN(WARN_IO), "Filehandle opened only for %sput", - (op == OP_phoney_INPUT_ONLY ? "in" : "out")); - } else if (name && *name) { - Perl_warner(aTHX_ packWARN(warn_type), - "%s%s on %s %s %s", func, pars, vile, type, name); - if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP)) - Perl_warner(aTHX_ packWARN(warn_type), - "\t(Are you trying to call %s%s on dirhandle %s?)\n", - func, pars, name); + if (ckWARN(WARN_IO)) { + if (name && *name) + Perl_warner(aTHX_ packWARN(WARN_IO), + "Filehandle %s opened only for %sput", + name, (op == OP_phoney_INPUT_ONLY ? "in" : "out")); + else + Perl_warner(aTHX_ packWARN(WARN_IO), + "Filehandle opened only for %sput", + (op == OP_phoney_INPUT_ONLY ? "in" : "out")); + } } else { - Perl_warner(aTHX_ packWARN(warn_type), - "%s%s on %s %s", func, pars, vile, type); - if (gv && io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP)) - Perl_warner(aTHX_ packWARN(warn_type), - "\t(Are you trying to call %s%s on dirhandle?)\n", - func, pars); + char *vile; + I32 warn_type; + + if (gv && io && IoTYPE(io) == IoTYPE_CLOSED) { + vile = "closed"; + warn_type = WARN_CLOSED; + } + else { + vile = "unopened"; + warn_type = WARN_UNOPENED; + } + + if (ckWARN(warn_type)) { + if (name && *name) { + Perl_warner(aTHX_ packWARN(warn_type), + "%s%s on %s %s %s", func, pars, vile, type, name); + if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP)) + Perl_warner(aTHX_ packWARN(warn_type), + "\t(Are you trying to call %s%s on dirhandle %s?)\n", + func, pars, name); + } + else { + Perl_warner(aTHX_ packWARN(warn_type), + "%s%s on %s %s", func, pars, vile, type); + if (gv && io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP)) + Perl_warner(aTHX_ packWARN(warn_type), + "\t(Are you trying to call %s%s on dirhandle?)\n", + func, pars); + } + } } } diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 9d95e5a..da73856 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -200,11 +200,9 @@ THRLIBS2 = sys$share:cma$open_lib_shr/share|sys$share:cma$open_rtl/share .ifdef FAKETHREADED THREADDEF = THREADH = fakethr.h -acth = $(ARCHCORE)fakethr.h THREAD = THREAD .else THREADH = -acth = .endif # C preprocessor manifest "DEBUGGING" ==> perl -D, not the VMS debugger @@ -283,15 +281,19 @@ h = $(h0) $(h1) $(h2) $(h3) $(h4) $(h5) $(h6) ac0 = $(ARCHCORE)$(sockh) $(ARCHCORE)av.h $(ARCHCORE)cc_runtime.h ac1 = $(ARCHCORE)config.h $(ARCHCORE)cop.h $(ARCHCORE)cv.h $(ARCHCORE)embed.h -ac2 = $(ARCHCORE)embedvar.h $(ARCHCORE)extern.h $(acth) +ac2 = $(ARCHCORE)embedvar.h $(ARCHCORE)EXTERN.h $(ARCHCORE)fakethr.h ac3 = $(ARCHCORE)form.h $(ARCHCORE)gv.h $(ARCHCORE)handy.h $(ARCHCORE)hv.h -ac4 = $(ARCHCORE)intern.h $(ARCHCORE)intrpvar.h $(ARCHCORE)iperlsys.h +ac4 = $(ARCHCORE)INTERN.h $(ARCHCORE)intrpvar.h $(ARCHCORE)iperlsys.h ac5 = $(ARCHCORE)keywords.h $(ARCHCORE)mg.h $(ARCHCORE)nostdio.h ac6 = $(ARCHCORE)op.h $(ARCHCORE)opcode.h ac7 = $(ARCHCORE)opnames.h $(ARCHCORE)patchlevel.h $(ARCHCORE)perl.h ac8 = $(ARCHCORE)perlapi.h $(ARCHCORE)perlio.h $(ARCHCORE)perlsdio.h -ac9 = $(ARCHCORE)perlvars.h $(ARCHCORE)perly.h $(ARCHCORE)pp.h +ac9 = $(ARCHCORE)perlsfio.h $(ARCHCORE)perlvars.h $(ARCHCORE)perly.h $(ARCHCORE)pp.h +.ifdef THREADED +ac10 = $(ARCHCORE)pp_proto.h $(ARCHCORE)proto.h $(ARCHCORE)reentr.h $(ARCHCORE)regcomp.h +.else ac10 = $(ARCHCORE)pp_proto.h $(ARCHCORE)proto.h $(ARCHCORE)regcomp.h +.endif ac11 = $(ARCHCORE)regexp.h $(ARCHCORE)regnodes.h $(ARCHCORE)scope.h .ifdef SOCKARCH ac12 = $(ARCHCORE)sv.h $(ARCHCORE)thrdvar.h $(SOCKARCH) @@ -385,7 +387,7 @@ pod = $(pod0) $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) $( perlpods : $(pod) @ $(NOOP) -archcorefiles : $(ac) $(acth) $(ARCHAUTO)time.stamp +archcorefiles : $(ac) $(ARCHAUTO)time.stamp @ $(NOOP) [.lib]re.pm : [.ext.re]re.pm @@ -983,14 +985,12 @@ $(ARCHCORE)embed.h : embed.h $(ARCHCORE)embedvar.h : embedvar.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) -$(ARCHCORE)extern.h : extern.h +$(ARCHCORE)EXTERN.h : EXTERN.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) -.ifdef FAKETHREADED $(ARCHCORE)fakethr.h : fakethr.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) -.endif $(ARCHCORE)form.h : form.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) @@ -1003,7 +1003,7 @@ $(ARCHCORE)handy.h : handy.h $(ARCHCORE)hv.h : hv.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) -$(ARCHCORE)intern.h : intern.h +$(ARCHCORE)INTERN.h : INTERN.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) $(ARCHCORE)intrpvar.h : intrpvar.h @@ -1045,6 +1045,9 @@ $(ARCHCORE)perlio.h : perlio.h $(ARCHCORE)perlsdio.h : perlsdio.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) +$(ARCHCORE)perlsfio.h : perlsfio.h + @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) + Copy/Log $(MMS$SOURCE) $(MMS$TARGET) $(ARCHCORE)perlvars.h : perlvars.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) @@ -1060,6 +1063,11 @@ $(ARCHCORE)pp_proto.h : pp_proto.h $(ARCHCORE)proto.h : proto.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) +.ifdef THREADED +$(ARCHCORE)reentr.h : reentr.h + @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) + Copy/Log $(MMS$SOURCE) $(MMS$TARGET) +.endif $(ARCHCORE)regcomp.h : regcomp.h @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE) Copy/Log $(MMS$SOURCE) $(MMS$TARGET) @@ -1168,7 +1176,7 @@ pp_pack$(O) : pp_pack.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCK pp_sort$(O) : pp_sort.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h pp_sys$(O) : pp_sys.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h reentr.h $(CC) $(CORECFLAGS) $(MMS$SOURCE) -reentr(O) : reentr.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h intern.h reentr.h +reentr$(O) : reentr.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h intern.h reentr.h regcomp$(O) : regcomp.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h intern.h regcomp.h regnodes.h $(CC) $(CORECFLAGS) $(MMS$SOURCE) regexec$(O) : regexec.c extern.h perl.h config.h embed.h handy.h vmsish.h $(SOCKH) iperlsys.h perlsdio.h perl.h regexp.h sv.h util.h form.h gv.h cv.h opnames.h op.h cop.h av.h hv.h mg.h scope.h warnings.h utf8.h perly.h thread.h pp.h proto.h pp_proto.h opcode.h embedvar.h intrpvar.h thrdvar.h perlvars.h patchlevel.h regcomp.h regnodes.h diff --git a/vms/perly_c.vms b/vms/perly_c.vms index 2b99328..8a1006c 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -61,19 +61,19 @@ static short yylhs[] = { -1, 31, 32, 33, 54, 54, 1, 1, 1, 1, 1, 2, 39, 39, 47, 55, 3, 4, 5, 40, 41, 41, 45, 45, 45, 46, 46, 42, 42, 56, 56, - 58, 57, 16, 16, 16, 26, 26, 26, 37, 37, - 37, 37, 37, 37, 37, 37, 59, 37, 38, 38, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, - 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, - 53, 53, 53, 17, 17, 17, 17, 17, 17, 17, + 58, 57, 16, 16, 16, 16, 26, 26, 26, 37, + 37, 37, 37, 37, 37, 37, 37, 59, 37, 38, + 38, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, + 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, + 53, 53, 53, 53, 53, 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, 48, 48, 49, 49, 49, 49, - 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, - 21, 22, 23, 36, 36, 36, 36, + 17, 17, 17, 17, 17, 17, 48, 48, 49, 49, + 49, 49, 49, 34, 34, 35, 35, 35, 44, 24, + 19, 20, 21, 22, 23, 36, 36, 36, 36, }; static short yylen[] = { 2, 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, @@ -83,1086 +83,1184 @@ static short yylen[] = { 2, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 4, 1, 0, 6, 6, 0, 0, 0, 1, 0, 1, 0, 2, 1, 2, 1, 1, 1, 3, 2, - 0, 7, 3, 3, 1, 2, 3, 1, 3, 5, - 6, 3, 3, 5, 2, 4, 0, 5, 1, 1, - 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 4, 3, 5, 2, 2, 4, - 5, 4, 5, 1, 1, 1, 1, 5, 2, 1, - 2, 3, 2, 1, 1, 1, 1, 1, 1, 6, - 5, 4, 5, 1, 1, 3, 4, 3, 1, 2, - 2, 1, 2, 2, 2, 1, 3, 1, 3, 4, - 4, 6, 1, 1, 3, 2, 3, 2, 1, 1, - 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, + 0, 7, 3, 3, 3, 1, 2, 3, 1, 3, + 5, 6, 3, 3, 5, 2, 4, 0, 5, 1, + 1, 5, 4, 5, 4, 5, 6, 5, 4, 5, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 4, 3, 5, 2, + 2, 4, 5, 4, 5, 1, 1, 1, 1, 5, + 2, 1, 2, 3, 2, 1, 1, 1, 1, 1, + 1, 6, 5, 4, 5, 1, 1, 3, 4, 3, + 1, 2, 2, 1, 2, 2, 2, 1, 3, 1, + 3, 4, 4, 6, 1, 1, 3, 2, 3, 2, + 1, 1, 1, 0, 1, 0, 1, 2, 1, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, }; static short yydefred[] = { 4, 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, - 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, - 0, 168, 0, 57, 57, 0, 0, 0, 0, 0, + 0, 70, 71, 0, 14, 3, 175, 0, 0, 156, + 0, 170, 0, 57, 57, 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, 12, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 146, 148, 0, 0, 0, - 0, 174, 140, 134, 135, 136, 137, 52, 0, 59, - 0, 69, 0, 0, 7, 194, 197, 196, 195, 0, + 0, 0, 0, 0, 0, 148, 150, 0, 0, 0, + 0, 176, 142, 136, 137, 138, 139, 52, 0, 59, + 0, 69, 0, 0, 7, 196, 199, 198, 197, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, - 3, 0, 0, 0, 0, 0, 163, 0, 0, 0, - 0, 85, 0, 192, 0, 129, 0, 0, 0, 0, - 0, 0, 0, 179, 181, 180, 0, 188, 0, 0, - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 189, 190, 191, 193, 0, 34, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 165, 0, 0, 0, + 0, 86, 0, 194, 0, 131, 0, 0, 0, 0, + 0, 0, 0, 181, 183, 182, 0, 190, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 191, 192, 193, 195, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 119, 120, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 51, 61, 0, 0, 0, 0, 83, 0, 0, - 87, 0, 0, 0, 0, 0, 0, 0, 3, 167, - 169, 0, 0, 0, 0, 0, 0, 0, 126, 0, - 158, 178, 0, 0, 175, 0, 0, 123, 27, 0, - 0, 19, 0, 0, 0, 0, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 51, 61, 0, 0, 0, 0, 84, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 3, 169, 171, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 160, 180, 0, 0, 177, 0, 0, 125, + 27, 0, 0, 19, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 0, 90, 0, 0, 101, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 171, 0, 0, 0, - 42, 0, 43, 0, 0, 0, 0, 187, 0, 0, - 36, 41, 0, 0, 0, 170, 186, 86, 0, 130, - 0, 132, 0, 125, 177, 65, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 100, 94, 0, 92, 0, - 152, 0, 157, 63, 68, 67, 55, 0, 54, 84, - 0, 88, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 131, 133, 151, 0, 0, 0, 99, 93, - 0, 97, 95, 153, 91, 72, 172, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 150, 96, 81, 7, - 28, 29, 0, 0, 24, 25, 0, 32, 0, 0, - 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, - 0, 33, 0, 23, + 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, + 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, + 158, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 173, 0, 0, 0, 42, 0, 43, 0, 0, 0, + 0, 189, 0, 0, 36, 41, 0, 0, 0, 172, + 188, 87, 0, 132, 0, 134, 0, 127, 179, 65, + 0, 0, 0, 0, 99, 0, 0, 0, 0, 101, + 95, 0, 93, 0, 154, 0, 159, 63, 68, 67, + 55, 0, 54, 85, 0, 89, 129, 0, 0, 0, + 0, 0, 0, 0, 0, 81, 133, 135, 153, 0, + 0, 0, 100, 94, 0, 98, 96, 155, 92, 72, + 174, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 152, 97, 82, 7, 28, 29, 0, 0, 24, 25, + 0, 32, 0, 0, 0, 22, 0, 0, 0, 31, + 5, 0, 30, 0, 0, 33, 0, 23, }; static short yydgoto[] = { 1, - 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, - 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, - 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, - 294, 282, 284, 122, 214, 100, 82, 257, 89, 91, - 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, - 85, 86, 87, 15, 16, 17, 18, 93, 278, + 10, 11, 20, 104, 19, 2, 95, 374, 98, 363, + 3, 12, 13, 70, 379, 289, 72, 73, 74, 75, + 76, 77, 78, 79, 295, 81, 296, 285, 287, 290, + 298, 286, 288, 122, 216, 100, 82, 261, 89, 91, + 196, 331, 156, 293, 275, 227, 14, 83, 137, 84, + 85, 86, 87, 15, 16, 17, 18, 93, 282, }; static short yysindex[] = { 0, - 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, - 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, - -24, 0, 2181, 0, 0, 11, 16, 32, 46, -34, - 2181, 49, 72, 76, 1017, 977, -31, 1081, 1348, -134, - 2181, 85, -31, 2181, 2181, 2181, 2181, 2181, 2181, 1388, - 1428, 0, 2181, 2181, -31, -31, -31, -31, -150, 0, - 337, 849, -13, -58, -48, 0, 0, 8, 97, 92, - 116, 0, 0, 0, 0, 0, 0, 0, 52, 0, - -97, 0, -75, -97, 0, 0, 0, 0, 0, 2181, - 146, 2181, 395, 52, -97, 0, 0, 0, 0, 0, - 0, 150, 849, 153, 1468, 977, 0, 395, 0, -58, - 116, 0, 2181, 0, 157, 0, 395, -8, 83, -52, - 2181, 395, 1528, 0, 0, 0, -89, 0, 116, 107, - 107, 107, -104, -104, 123, -37, 0, -73, 107, 107, - 0, 0, 0, 0, 52, 0, 2181, 2181, 2181, 2181, - 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, - 2181, 2181, 2181, 2181, 2181, 2181, 2181, 0, 0, -12, - 2181, 1735, 2181, 2181, 2181, 2181, 2181, 2181, 1795, 0, - 2181, 0, 0, -64, -32, -64, 411, 0, 2181, 291, - 0, -64, 2181, 2181, 2181, 2181, 187, 1854, 0, 0, - 0, -29, 58, 189, 2181, 116, 1914, 2029, 0, 111, - 0, 0, -26, -19, 0, 2181, 165, 0, 0, -241, - -241, 0, -241, -241, -241, -40, 0, 1618, 395, 1306, - 185, 168, 849, 1235, 1129, 1169, 1268, 782, 235, 107, - 107, 2181, 0, 2121, 2181, 0, 218, -46, 0, -3, - -68, 61, 106, 65, 108, 68, 0, 17, 849, 26, - -30, 2181, -30, 0, 236, 2181, 0, 2181, 52, -241, - 0, 250, 0, 255, -241, 259, 260, 0, 248, 337, - 0, 0, 262, 261, 2181, 0, 0, 0, 22, 0, - 33, 0, 36, 0, 0, 0, 125, 2181, 2181, 71, - 0, 50, 127, 2181, 182, 0, 0, 184, 0, 199, - 0, 201, 0, 0, 0, 0, 0, 272, 0, 0, - 354, 0, 0, 216, 216, 216, 216, 2181, 216, 2181, - 301, 0, 0, 0, 0, 167, 2418, 228, 0, 0, - 319, 0, 0, 0, 0, 0, 0, 0, -150, -150, - -123, -123, 322, -150, 308, 216, 0, 0, 0, 0, - 0, 0, 216, 334, 0, 0, 216, 0, 1854, -150, - 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, - 216, 0, -123, 0, + 0, 0, -183, 0, 0, 0, -57, 0, 0, 0, + 0, 0, 0, 0, 820, 0, 0, 0, -222, -208, + 7, 0, 0, -208, 0, 0, 0, -31, -31, 0, + 32, 0, 2214, 0, 0, 33, 49, 56, 59, -30, + 2214, 63, 65, 66, 1005, 941, -31, 1150, 1269, -149, + 2214, -7, -31, 2214, 2214, 2214, 2214, 2214, 2214, 1329, + 1414, 0, 2214, 2214, -31, -31, -31, -31, -168, 0, + -121, 704, -16, -63, -59, 0, 0, -8, 80, 64, + 81, 0, 0, 0, 0, 0, 0, 0, -1, 0, + -134, 0, -125, -134, 0, 0, 0, 0, 0, 2214, + 95, 2214, 744, -1, -134, 0, 0, 0, 0, 0, + 0, 117, 704, 97, 1455, 941, 0, 744, 0, -63, + 81, 0, 2214, 0, 123, 0, 744, -14, 36, -52, + 2214, 744, 1563, 0, 0, 0, -132, 0, 81, -111, + -111, -111, -155, -155, 76, -37, 0, -66, -111, -111, + 0, 0, 0, 0, -1, 0, 2214, 2214, 2214, 2214, + 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, + 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 0, + 0, -21, 2214, 1724, 2214, 2214, 2214, 2214, 2214, 2214, + 1797, 0, 2214, 0, 0, -120, -74, -120, 343, 0, + 2214, 27, 0, -120, 2214, 2214, 2214, 2214, 153, 1860, + 0, 0, 0, -25, 4, 156, 2214, 81, 1933, 2005, + 0, 73, 0, 0, 18, -51, 0, 2214, 110, 0, + 0, 228, 228, 0, 228, 228, 228, -92, -92, 0, + 1351, 744, 961, 375, 271, 704, 585, 1068, 1068, 646, + 1485, 394, 611, -111, -111, 2214, 0, 2141, 2214, 0, + 172, 101, 0, 21, -62, 133, -43, 137, 128, 140, + 0, 24, 704, -38, -45, 2214, -45, 0, 177, 2214, + 0, 2214, -1, 228, 0, 178, 0, 204, 228, 206, + 211, 0, 175, -121, 0, 0, 220, 169, 2214, 0, + 0, 0, 78, 0, 98, 0, 121, 0, 0, 0, + 186, 2214, 2214, 174, 0, 124, 191, 2214, 142, 0, + 0, 147, 0, 148, 0, 168, 0, 0, 0, 0, + 0, 235, 0, 0, 233, 0, 0, 179, 179, 179, + 179, 2214, 179, 2214, 260, 0, 0, 0, 0, 216, + 1035, 182, 0, 0, 270, 0, 0, 0, 0, 0, + 0, 0, -168, -168, -256, -256, 286, -168, 269, 179, + 0, 0, 0, 0, 0, 0, 179, 290, 0, 0, + 179, 0, 1860, -168, 352, 0, 2214, -168, 298, 0, + 0, 299, 0, 179, 179, 0, -256, 0, }; static short yyrindex[] = { 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -19, 2283, 0, 0, 2402, 2567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 455, 0, 0, 2367, 2469, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, + -18, 1608, 2621, 2674, 2722, 0, 0, 2770, 2857, 0, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -56, 0, 0, -56, 0, 0, 0, 0, 0, 2567, + 0, 0, 4275, 0, -114, 0, 0, 0, 0, 0, + 0, 0, 1887, 0, 0, 302, 0, 4340, 468, 533, + 3225, 0, 0, 0, 3006, 0, 4395, 2674, 0, 0, + 2567, 4405, 0, 0, 0, 0, 3056, 0, 3460, 3696, + 3747, 3802, 3583, 3631, 3128, 0, 0, 0, 3867, 3915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, - 3, 943, 2515, 2603, 2653, 0, 0, 2708, 2754, 0, - -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -33, 0, 0, -33, 0, 0, 0, 0, 0, 2469, - 0, 0, 3919, 0, -102, 0, 0, 0, 0, 0, - 0, 0, 3216, 0, 0, 359, 0, 3955, 526, 587, - 2276, 0, 0, 0, 2801, 0, 3999, 2603, 0, 0, - 2469, 4043, 0, 0, 0, 0, 2858, 0, 3225, 3461, - 3527, 3588, 3352, 3399, 2908, 0, 0, 0, 3635, 3680, 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, 3176, 0, 0, -42, 0, -42, 881, 0, + 302, 0, 0, 230, 326, 0, 0, 0, 0, 310, + 0, 0, 0, 0, 340, 0, 0, 3511, 0, 0, + 0, 0, 0, 0, 0, 3292, 0, 0, 3347, 0, + 0, 17, 20, 0, 39, 45, 52, 1480, 1643, 0, + 2275, 4446, 4494, 4121, 4169, 2422, 0, 4698, 4746, 4631, + 4592, 4544, 4220, 4001, 4056, 0, 0, 0, 0, 0, + 3412, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2475, -41, 0, 330, 0, 0, 0, 0, + 0, 2567, 0, 53, 0, 0, 0, 0, 354, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2990, 0, 0, -28, 0, -28, 917, 0, 359, 0, - 0, 295, 379, 0, 0, 0, 0, 370, 0, 0, - 0, 0, 390, 0, 0, 3291, 0, 0, 0, 0, - 0, 0, 0, 3056, 0, 0, 3113, 0, 0, 14, - 35, 0, 55, 91, 117, 1991, 0, 4235, 4090, 1826, - 3807, 3871, 3283, 0, -22, 4191, 4155, 4145, 1048, 3719, - 3763, 0, 0, 0, 0, 0, 3163, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4267, -10, - 0, 375, 0, 0, 0, 0, 0, 2469, 0, 136, - 0, 0, 0, 0, 400, 0, 0, 0, 0, 139, + 0, 0, 0, 0, 0, 0, 0, 302, 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, 359, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, + 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 91, 187, 187, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, - 0, 0, 0, 0, 0, 0, 4080, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 119, 119, - 179, 179, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 415, 119, - 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, + 0, 0, 370, 91, 881, 0, 0, 91, 0, 0, + 0, 0, 0, 0, 0, 0, 187, 0, }; static short yygindex[] = { 0, - 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, - -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, - 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, - 103, 147, 280, -91, -185, 1, 0, 0, 0, 464, - -44, 222, 338, 0, -179, 0, 0, 0, 0, 0, + 0, 0, 29, 378, 0, 0, -55, 0, 676, 567, + -94, 0, 0, 0, -355, -15, 2480, 0, 650, 364, + 380, 0, 0, 0, 412, 755, 0, 0, 291, -202, + 82, 120, 277, -88, -188, 534, 0, 0, 0, 465, + -58, 217, -247, 0, -135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4568 +#define YYTABLESIZE 5052 static short yytable[] = { 71, - 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, - 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, - 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, - 62, 218, 185, 130, 75, 113, 113, 316, 376, 221, - 113, 90, 187, 15, 146, 148, 123, 124, 64, 196, - 106, 69, 75, 138, 18, 107, 121, 323, 162, 163, - 202, 15, 342, 92, 184, 151, 152, 153, 154, 394, - 113, 108, 18, 343, 186, 39, 344, 183, 255, 216, - 159, 117, 185, 159, 126, 109, 75, 121, 114, 60, - 349, 26, 26, 39, 62, 16, 341, 159, 159, 212, - 213, 297, 159, 203, 204, 205, 206, 207, 208, 181, - 252, 115, 64, 16, 184, 116, 215, 223, 26, 318, - 65, 67, 131, 320, 133, 192, 322, 155, 351, 348, - 188, 17, 159, 4, 5, 6, 189, 7, 8, 363, - 201, 230, 231, 233, 234, 235, 236, 237, 66, 17, - 190, 26, 373, 374, 26, 26, 26, 20, 26, 191, - 26, 26, 193, 26, 9, 258, 260, 261, 262, 263, - 264, 265, 266, 268, 26, 20, 38, 26, 21, 40, - 328, 195, 26, 213, 388, 199, 332, 280, 231, 209, - 231, 229, 290, 210, 38, 60, 217, 15, 319, 299, - 321, 301, 303, 23, 24, 21, 295, 219, 224, 26, - 307, 21, 180, 226, 21, 21, 21, 345, 21, 350, - 21, 21, 65, 21, 272, 96, 162, 163, 121, 298, - 97, 162, 163, 270, 121, 304, 310, 21, 312, 313, - 306, 26, 21, 26, 26, 253, 1, 162, 163, 113, - 113, 113, 113, 162, 163, 308, 113, 314, 113, 367, - 163, 110, 162, 163, 60, 75, 75, 75, 75, 21, - 162, 163, 75, 162, 163, 381, 330, 113, 113, 44, - 113, 113, 44, 44, 44, 324, 44, 338, 44, 44, - 334, 44, 346, 75, 75, 335, 162, 163, 213, 336, - 337, 21, 339, 21, 21, 44, 352, 326, 353, 326, - 44, 159, 159, 159, 159, 333, 162, 163, 159, 340, - 159, 162, 163, 354, 280, 355, 159, 159, 159, 159, - 356, 277, 162, 163, 276, 162, 163, 44, 358, 159, - 159, 366, 159, 159, 159, 159, 159, 159, 159, 162, - 163, 159, 368, 170, 159, 159, 159, 162, 163, 369, - 162, 163, 377, 71, 162, 163, 379, 162, 163, 44, - 162, 163, 44, 383, 26, 26, 26, 26, 26, 26, - 390, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 357, 391, 53, 26, 26, 184, - 26, 26, 26, 26, 26, 162, 163, 162, 163, 26, - 26, 26, 26, 26, 26, 26, 170, 62, 177, 37, - 26, 178, 179, 180, 162, 163, 162, 163, 35, 26, - 185, 26, 26, 182, 21, 21, 21, 21, 21, 21, - 40, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 37, 35, 167, 21, 21, 105, - 21, 21, 21, 21, 21, 135, 162, 163, 136, 21, - 21, 21, 21, 21, 21, 21, 176, 80, 232, 177, - 21, 385, 178, 179, 180, 287, 365, 94, 0, 21, - 0, 21, 21, 176, 329, 166, 177, 0, 166, 178, - 179, 180, 44, 44, 44, 44, 44, 44, 0, 44, - 44, 44, 166, 166, 0, 44, 0, 166, 44, 44, - 44, 44, 0, 167, 168, 44, 44, 0, 44, 44, - 44, 44, 44, 0, 0, 274, 0, 44, 44, 44, - 44, 44, 44, 176, 0, 0, 177, 166, 44, 178, - 179, 180, 0, 0, 0, 0, 0, 44, 194, 44, - 44, 194, 194, 194, 0, 194, 173, 194, 194, 173, - 194, 164, 0, 387, 0, 0, 0, 165, 166, 167, - 168, 0, 0, 173, 173, 0, 0, 0, 173, 194, - 0, 0, 0, 169, 171, 172, 173, 174, 175, 176, - 0, 0, 177, 0, 0, 178, 179, 180, 157, 158, - 159, 160, 0, 0, 0, 161, 194, 0, 173, 195, - 0, 0, 195, 195, 195, 0, 195, 144, 195, 195, - 144, 195, 0, 0, 164, 0, 162, 163, 0, 0, - 165, 166, 167, 168, 144, 144, 0, 0, 0, 144, - 195, 194, 0, 0, 0, 0, 169, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 0, 0, 178, 179, - 180, 0, 0, 0, 0, 0, 4, 5, 6, 144, - 7, 8, 55, 167, 168, 65, 67, 53, 0, 60, - 0, 68, 64, 0, 63, 0, 371, 372, 0, 0, - 0, 378, 175, 176, 0, 0, 177, 9, 62, 178, - 179, 180, 195, 66, 4, 5, 6, 386, 7, 8, - 0, 389, 0, 0, 0, 0, 166, 166, 166, 166, - 0, 0, 0, 166, 0, 166, 0, 0, 0, 0, - 61, 166, 166, 166, 166, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 166, 166, 0, 166, 166, 166, - 166, 166, 166, 166, 0, 0, 166, 0, 0, 166, - 166, 166, 26, 0, 0, 56, 0, 0, 0, 0, - 0, 0, 194, 194, 194, 194, 194, 0, 194, 194, - 194, 0, 0, 0, 194, 0, 0, 173, 173, 173, - 173, 0, 0, 0, 173, 194, 173, 194, 194, 194, - 194, 194, 173, 173, 173, 173, 194, 194, 194, 194, - 194, 194, 0, 0, 0, 173, 173, 194, 173, 173, - 173, 173, 173, 173, 173, 0, 194, 173, 194, 194, - 173, 173, 173, 195, 195, 195, 195, 195, 0, 195, - 195, 195, 0, 0, 0, 195, 0, 0, 144, 144, - 144, 144, 0, 0, 0, 144, 195, 144, 195, 195, - 195, 195, 195, 144, 144, 144, 144, 195, 195, 195, - 195, 195, 195, 0, 0, 0, 144, 144, 195, 144, - 144, 144, 144, 144, 144, 144, 0, 195, 144, 195, - 195, 144, 144, 144, 0, 25, 27, 28, 29, 30, - 31, 170, 32, 33, 34, 0, 0, 0, 35, 0, - 0, 36, 37, 38, 39, 0, 0, 0, 40, 41, + 199, 22, 60, 229, 65, 65, 222, 297, 60, 111, + 380, 200, 279, 329, 65, 300, 62, 64, 258, 377, + 378, 161, 15, 184, 161, 220, 230, 187, 65, 67, + 321, 189, 133, 130, 88, 198, 23, 24, 161, 161, + 15, 398, 223, 161, 146, 148, 204, 301, 90, 323, + 205, 206, 207, 208, 209, 210, 66, 18, 309, 186, + 39, 320, 277, 188, 327, 92, 60, 281, 283, 259, + 280, 102, 106, 161, 185, 18, 187, 26, 39, 16, + 62, 64, 4, 5, 6, 17, 7, 8, 107, 171, + 26, 26, 20, 38, 40, 108, 345, 16, 109, 214, + 215, 256, 114, 17, 115, 116, 183, 131, 186, 155, + 20, 38, 15, 9, 190, 375, 376, 225, 346, 191, + 382, 26, 192, 26, 193, 195, 26, 26, 26, 355, + 26, 197, 26, 26, 201, 26, 390, 212, 347, 367, + 393, 232, 233, 235, 236, 237, 238, 239, 240, 26, + 157, 158, 159, 160, 26, 299, 211, 161, 76, 319, + 221, 348, 219, 182, 353, 226, 228, 262, 264, 265, + 266, 267, 268, 269, 270, 272, 76, 274, 162, 163, + 164, 26, 276, 60, 392, 215, 21, 332, 65, 284, + 233, 322, 233, 336, 294, 324, 302, 308, 326, 21, + 312, 303, 179, 305, 307, 180, 181, 182, 310, 164, + 76, 318, 311, 26, 342, 26, 26, 334, 338, 21, + 325, 328, 21, 21, 21, 96, 21, 344, 21, 21, + 97, 21, 352, 162, 163, 164, 257, 162, 163, 164, + 314, 60, 316, 317, 339, 21, 340, 162, 163, 164, + 21, 341, 161, 161, 161, 161, 162, 163, 164, 161, + 343, 161, 162, 163, 164, 110, 356, 161, 161, 161, + 161, 357, 358, 361, 162, 163, 164, 21, 349, 385, + 161, 161, 161, 354, 161, 161, 161, 161, 161, 161, + 161, 161, 359, 360, 161, 171, 350, 161, 161, 161, + 370, 362, 215, 162, 163, 164, 372, 165, 371, 21, + 373, 21, 21, 166, 167, 168, 169, 162, 163, 164, + 162, 163, 164, 162, 163, 164, 381, 383, 284, 387, + 170, 172, 173, 174, 175, 176, 177, 178, 394, 395, + 179, 53, 186, 180, 181, 182, 26, 26, 26, 26, + 26, 26, 62, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 37, 71, 35, 26, + 26, 1, 26, 26, 26, 26, 26, 162, 163, 164, + 187, 26, 26, 26, 26, 26, 26, 26, 184, 76, + 76, 76, 76, 26, 40, 37, 76, 162, 163, 164, + 162, 163, 164, 26, 44, 26, 26, 44, 44, 44, + 35, 44, 105, 44, 44, 135, 44, 76, 76, 76, + 162, 163, 164, 162, 163, 164, 80, 162, 163, 164, + 44, 136, 162, 163, 164, 44, 162, 163, 164, 162, + 163, 164, 21, 21, 21, 21, 21, 21, 234, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 44, 369, 389, 21, 21, 278, 21, 21, + 21, 21, 21, 162, 163, 164, 391, 21, 21, 21, + 21, 21, 21, 21, 291, 162, 163, 164, 94, 21, + 162, 163, 164, 333, 44, 0, 0, 44, 0, 21, + 196, 21, 21, 196, 196, 196, 0, 196, 175, 196, + 196, 175, 196, 165, 0, 162, 163, 164, 0, 166, + 167, 168, 169, 0, 0, 175, 175, 162, 163, 164, + 175, 196, 0, 0, 0, 0, 170, 172, 173, 174, + 175, 176, 177, 178, 0, 0, 179, 0, 0, 180, + 181, 182, 0, 0, 0, 0, 0, 0, 196, 168, + 175, 0, 101, 0, 0, 197, 0, 0, 197, 197, + 197, 0, 197, 146, 197, 197, 146, 197, 0, 123, + 124, 178, 0, 0, 179, 0, 138, 180, 181, 182, + 146, 146, 0, 196, 0, 146, 197, 0, 151, 152, + 153, 154, 0, 0, 0, 0, 0, 0, 4, 5, + 6, 0, 7, 8, 0, 0, 0, 4, 5, 6, + 0, 7, 8, 0, 0, 146, 0, 44, 44, 44, + 44, 44, 44, 0, 44, 44, 44, 0, 0, 9, + 44, 0, 313, 44, 44, 44, 44, 171, 9, 217, + 44, 44, 0, 44, 44, 44, 44, 44, 197, 0, + 0, 0, 44, 44, 44, 44, 44, 44, 0, 0, + 0, 0, 0, 0, 44, 0, 0, 99, 99, 0, + 166, 167, 168, 169, 44, 178, 44, 44, 179, 112, + 69, 180, 181, 182, 0, 120, 99, 128, 0, 0, + 0, 134, 99, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 0, 99, 99, 99, 99, 0, 0, + 117, 0, 0, 126, 196, 196, 196, 196, 196, 0, + 196, 196, 196, 0, 0, 0, 196, 0, 0, 175, + 175, 175, 175, 0, 0, 0, 175, 196, 175, 196, + 196, 196, 196, 196, 175, 175, 175, 175, 196, 196, + 196, 196, 196, 196, 194, 120, 171, 175, 175, 175, + 196, 175, 175, 175, 175, 175, 175, 175, 175, 203, + 196, 175, 196, 196, 175, 175, 175, 0, 0, 197, + 197, 197, 197, 197, 0, 197, 197, 197, 0, 0, + 121, 197, 0, 0, 146, 146, 146, 146, 139, 0, + 0, 146, 197, 146, 197, 197, 197, 197, 197, 146, + 146, 146, 146, 197, 197, 197, 197, 197, 197, 0, + 231, 260, 146, 146, 146, 197, 146, 146, 146, 146, + 146, 146, 146, 146, 0, 197, 146, 197, 197, 146, + 146, 146, 55, 0, 121, 65, 67, 53, 292, 60, + 0, 68, 64, 0, 63, 165, 0, 0, 0, 0, + 0, 166, 167, 168, 169, 0, 0, 218, 62, 0, + 0, 0, 0, 66, 0, 121, 0, 0, 170, 172, + 173, 174, 175, 176, 177, 178, 0, 0, 179, 168, + 169, 180, 181, 182, 0, 364, 365, 366, 0, 368, + 61, 0, 0, 44, 0, 0, 44, 44, 44, 0, + 44, 178, 44, 44, 179, 44, 0, 180, 181, 182, + 0, 0, 166, 167, 168, 169, 384, 0, 0, 44, + 0, 0, 26, 386, 44, 56, 0, 388, 0, 0, + 330, 0, 330, 175, 176, 177, 178, 0, 337, 179, + 396, 397, 180, 181, 182, 0, 0, 0, 0, 0, + 0, 44, 0, 55, 0, 0, 65, 67, 53, 0, + 60, 0, 68, 64, 165, 63, 0, 0, 0, 0, + 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 66, 0, 44, 170, 172, 173, + 174, 175, 176, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, + 121, 61, 168, 169, 0, 0, 121, 55, 0, 0, + 65, 67, 53, 0, 60, 0, 68, 64, 0, 63, + 0, 0, 0, 177, 178, 0, 0, 179, 0, 0, + 180, 181, 182, 26, 0, 0, 56, 0, 66, 0, + 0, 0, 0, 0, 0, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 0, 36, 37, 38, 39, 61, 0, 171, 40, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, - 47, 48, 49, 50, 51, 52, 0, 0, 0, 44, - 0, 54, 44, 44, 44, 0, 44, 0, 44, 44, - 57, 44, 58, 59, 0, 0, 0, 0, 360, 361, - 362, 0, 364, 0, 0, 44, 0, 0, 0, 0, - 44, 0, 0, 78, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 78, 78, 0, 0, 0, 0, 382, 44, 0, 55, - 384, 0, 65, 67, 53, 0, 60, 0, 68, 64, - 0, 63, 0, 392, 393, 0, 99, 99, 0, 0, - 0, 0, 0, 0, 0, 78, 0, 0, 112, 44, - 66, 0, 44, 0, 120, 99, 128, 0, 0, 55, - 134, 99, 65, 67, 53, 0, 60, 0, 68, 64, - 0, 63, 0, 99, 99, 99, 99, 61, 165, 166, - 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 0, 106, 175, - 176, 106, 0, 177, 0, 0, 178, 179, 180, 26, - 0, 0, 56, 0, 0, 106, 106, 61, 0, 0, - 106, 0, 0, 55, 120, 0, 65, 67, 53, 0, - 60, 0, 68, 64, 0, 63, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 165, 166, 167, 168, 26, - 106, 0, 56, 0, 66, 0, 0, 0, 0, 0, - 0, 169, 171, 172, 173, 174, 175, 176, 0, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 61, 44, 44, 44, 44, 44, 44, 256, 44, - 44, 44, 0, 0, 0, 44, 0, 0, 44, 44, - 44, 44, 0, 0, 0, 44, 44, 0, 44, 44, - 44, 44, 44, 26, 0, 288, 56, 44, 44, 44, - 44, 44, 44, 0, 78, 78, 78, 78, 44, 0, - 0, 78, 0, 0, 0, 0, 0, 44, 0, 44, - 44, 0, 0, 119, 28, 29, 30, 31, 97, 32, - 33, 34, 78, 78, 0, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, - 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, - 50, 51, 52, 27, 28, 29, 30, 31, 54, 32, - 33, 34, 0, 0, 0, 35, 0, 57, 0, 58, - 59, 0, 309, 0, 0, 0, 41, 170, 42, 43, - 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, - 50, 51, 52, 0, 0, 0, 0, 0, 54, 106, - 106, 106, 106, 0, 0, 0, 106, 57, 106, 58, - 59, 0, 0, 0, 106, 106, 0, 125, 28, 29, - 30, 31, 0, 32, 33, 34, 0, 106, 106, 35, - 106, 106, 106, 106, 106, 106, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 26, 0, 0, + 56, 0, 57, 0, 58, 59, 44, 44, 44, 44, + 44, 44, 0, 44, 44, 44, 0, 0, 0, 44, + 0, 0, 44, 44, 44, 44, 0, 0, 0, 44, + 44, 0, 44, 44, 44, 44, 44, 0, 0, 0, + 0, 44, 44, 44, 44, 44, 44, 0, 0, 0, + 0, 0, 55, 44, 0, 65, 67, 53, 0, 60, + 0, 68, 64, 44, 63, 44, 44, 119, 28, 29, + 30, 31, 97, 32, 33, 34, 0, 0, 0, 35, + 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, - 55, 0, 54, 65, 67, 53, 0, 60, 0, 68, - 64, 57, 63, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, - 0, 66, 0, 0, 0, 165, 166, 167, 168, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 145, 68, - 64, 0, 63, 172, 173, 174, 175, 176, 61, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 165, 166, 167, 168, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 0, 68, - 64, 0, 63, 56, 173, 174, 175, 176, 61, 0, - 177, 0, 0, 178, 179, 180, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 211, 68, - 64, 0, 63, 56, 0, 164, 0, 0, 61, 0, - 147, 165, 166, 167, 168, 0, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 169, 171, 172, - 173, 174, 175, 176, 0, 0, 177, 0, 0, 178, - 179, 180, 0, 56, 165, 166, 167, 168, 61, 0, - 55, 0, 0, 65, 67, 53, 0, 60, 222, 68, - 64, 0, 63, 0, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 0, 66, 165, 56, 167, 168, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 28, 29, 30, 31, 0, - 32, 33, 34, 175, 176, 0, 35, 177, 61, 0, - 178, 179, 180, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 56, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 0, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 27, 28, 29, 30, 31, 54, - 32, 33, 34, 0, 0, 0, 35, 0, 57, 0, - 58, 59, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 0, 0, 0, 55, 0, 54, - 65, 67, 53, 0, 60, 259, 68, 64, 57, 63, - 58, 59, 0, 0, 27, 28, 29, 30, 31, 0, - 32, 33, 34, 0, 0, 0, 35, 0, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, - 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, - 49, 50, 51, 52, 0, 61, 0, 55, 0, 54, - 65, 67, 53, 0, 60, 267, 68, 64, 57, 63, - 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 56, 0, 0, 0, 0, 0, 108, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 108, 108, 61, 55, 0, 108, 65, - 67, 53, 0, 60, 0, 68, 64, 0, 63, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 108, 0, - 56, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 61, 0, 55, 0, 0, 65, - 67, 53, 0, 60, 300, 68, 64, 0, 63, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 56, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, - 0, 0, 0, 35, 61, 0, 0, 0, 0, 0, + 61, 0, 140, 54, 0, 140, 0, 166, 0, 168, + 169, 0, 0, 57, 0, 58, 59, 0, 0, 140, + 140, 27, 28, 29, 30, 31, 0, 32, 33, 34, + 177, 178, 26, 35, 179, 56, 0, 180, 181, 182, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, - 52, 74, 0, 0, 74, 0, 54, 0, 0, 56, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 74, - 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, - 0, 55, 0, 35, 65, 67, 53, 0, 60, 302, - 68, 64, 0, 63, 41, 0, 42, 43, 44, 45, - 46, 0, 0, 74, 0, 47, 48, 49, 50, 51, - 52, 0, 66, 0, 0, 0, 54, 108, 108, 108, - 108, 0, 0, 0, 108, 57, 108, 58, 59, 25, - 27, 28, 29, 30, 31, 0, 32, 33, 34, 61, - 0, 0, 35, 0, 0, 108, 108, 0, 108, 108, - 108, 108, 108, 41, 0, 42, 43, 44, 45, 46, - 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, - 0, 0, 0, 55, 56, 54, 65, 67, 53, 0, - 60, 311, 68, 64, 57, 63, 58, 59, 0, 0, + 46, 0, 0, 0, 140, 47, 48, 49, 50, 51, + 52, 55, 0, 0, 65, 67, 53, 54, 60, 0, + 68, 64, 0, 63, 0, 165, 0, 57, 0, 58, + 59, 166, 167, 168, 169, 0, 0, 129, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 0, 0, 172, + 173, 174, 175, 176, 177, 178, 0, 0, 179, 0, + 0, 180, 181, 182, 166, 167, 168, 169, 0, 61, + 0, 55, 0, 0, 65, 67, 53, 0, 60, 145, + 68, 64, 0, 63, 174, 175, 176, 177, 178, 0, + 0, 179, 0, 0, 180, 181, 182, 0, 0, 0, + 0, 0, 66, 0, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 55, 0, 0, 65, + 67, 53, 54, 60, 56, 68, 64, 0, 63, 0, + 0, 0, 57, 0, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 140, 140, 140, 140, 66, 0, 0, + 140, 0, 0, 0, 0, 0, 0, 55, 0, 0, + 65, 67, 53, 0, 60, 213, 68, 64, 0, 63, + 0, 140, 140, 140, 61, 140, 147, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, + 74, 0, 0, 74, 0, 27, 28, 29, 30, 31, + 0, 32, 33, 34, 0, 0, 0, 35, 74, 56, + 0, 0, 0, 0, 0, 61, 0, 0, 41, 0, + 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, + 0, 54, 74, 0, 0, 0, 0, 0, 0, 0, + 56, 57, 0, 58, 59, 27, 28, 29, 30, 31, + 0, 32, 33, 34, 0, 55, 0, 35, 65, 67, + 53, 0, 60, 224, 68, 64, 0, 63, 41, 0, + 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 51, 52, 0, 66, 0, 0, 0, + 0, 54, 0, 0, 0, 0, 0, 166, 167, 168, + 169, 57, 0, 58, 59, 0, 0, 0, 79, 0, + 0, 79, 0, 61, 0, 172, 173, 174, 175, 176, + 177, 178, 0, 0, 179, 79, 79, 180, 181, 182, 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, - 0, 0, 35, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 35, 75, 0, 0, 75, 0, 56, 0, + 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, + 79, 75, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 27, 28, 29, 30, 31, 54, 32, 33, 34, + 0, 0, 0, 35, 0, 0, 57, 0, 58, 59, + 0, 0, 0, 0, 41, 75, 42, 43, 44, 45, + 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, + 52, 74, 74, 74, 74, 0, 55, 54, 74, 65, + 67, 53, 0, 60, 263, 68, 64, 57, 63, 58, + 59, 166, 167, 168, 169, 0, 0, 0, 0, 74, + 74, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 176, 177, 178, 0, 0, 179, 0, + 0, 180, 181, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 0, 0, 0, 0, 27, + 28, 29, 30, 31, 0, 32, 33, 34, 0, 55, + 0, 35, 65, 67, 53, 0, 60, 271, 68, 64, + 0, 63, 41, 0, 42, 43, 44, 45, 46, 56, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 66, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 58, 59, 79, + 79, 79, 79, 0, 0, 0, 79, 61, 0, 0, + 0, 0, 55, 0, 0, 65, 67, 53, 0, 60, + 0, 68, 64, 0, 63, 0, 0, 79, 79, 79, + 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, + 0, 75, 56, 66, 0, 0, 0, 162, 0, 0, + 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 75, 75, 162, 162, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 55, 0, 0, 65, 67, + 53, 0, 60, 304, 68, 64, 0, 63, 0, 162, + 27, 28, 29, 30, 31, 56, 32, 33, 34, 0, + 0, 0, 35, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, - 0, 61, 0, 55, 0, 54, 65, 67, 53, 0, - 60, 0, 68, 64, 57, 63, 58, 59, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 56, 0, 0, 0, + 0, 0, 0, 61, 0, 0, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 57, 55, 58, 59, + 65, 67, 53, 0, 60, 306, 68, 64, 0, 63, + 0, 0, 0, 27, 28, 29, 30, 31, 56, 32, + 33, 34, 0, 0, 0, 35, 0, 0, 66, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, + 44, 45, 46, 0, 0, 0, 0, 47, 48, 49, + 50, 51, 52, 0, 0, 61, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, + 0, 58, 59, 0, 0, 25, 27, 28, 29, 30, + 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, + 56, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 0, 42, 43, 44, 45, 46, 0, 0, 0, 0, + 47, 48, 49, 50, 51, 52, 0, 0, 162, 162, + 162, 162, 54, 0, 0, 162, 0, 0, 0, 0, + 0, 0, 57, 55, 58, 59, 65, 67, 53, 0, + 60, 315, 68, 64, 0, 63, 162, 162, 162, 27, + 28, 29, 30, 31, 0, 32, 33, 34, 0, 0, + 0, 35, 0, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 42, 43, 44, 45, 46, 0, + 0, 0, 0, 47, 48, 49, 50, 51, 52, 0, + 0, 61, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 55, 58, 59, 65, + 67, 53, 0, 60, 0, 68, 64, 0, 63, 0, + 0, 27, 28, 29, 30, 31, 56, 32, 33, 34, + 0, 0, 0, 35, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 0, 41, 0, 42, 43, 44, 45, + 46, 0, 0, 0, 0, 47, 48, 49, 50, 51, + 52, 0, 0, 0, 61, 0, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 112, 0, 57, 112, 58, + 59, 0, 0, 168, 0, 0, 168, 0, 0, 0, + 0, 0, 112, 112, 0, 0, 0, 112, 0, 56, + 168, 168, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 74, 74, 74, 0, 0, 0, 74, - 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, - 74, 32, 33, 34, 0, 0, 0, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 41, 0, - 42, 43, 44, 45, 46, 0, 183, 0, 0, 47, - 48, 49, 50, 51, 52, 0, 0, 0, 0, 0, - 54, 0, 0, 183, 183, 0, 0, 0, 183, 57, - 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 42, 43, 44, 45, 46, 162, 0, 0, - 162, 47, 48, 49, 50, 51, 52, 0, 0, 0, - 0, 0, 54, 0, 162, 162, 0, 0, 0, 162, - 0, 57, 0, 58, 59, 0, 0, 27, 28, 29, - 30, 31, 0, 32, 33, 34, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 41, 0, 42, 43, 44, 45, 46, 0, 0, 0, - 0, 47, 48, 49, 50, 51, 52, 103, 0, 0, - 170, 0, 54, 0, 0, 113, 0, 0, 0, 118, - 0, 57, 127, 58, 59, 132, 0, 0, 0, 140, - 141, 142, 143, 144, 0, 0, 0, 149, 150, 182, - 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 182, 0, 0, - 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 183, 183, 183, - 183, 0, 0, 0, 183, 149, 183, 0, 149, 0, - 0, 182, 183, 183, 183, 183, 0, 0, 0, 0, - 0, 0, 149, 149, 0, 183, 183, 149, 183, 183, - 183, 183, 183, 183, 183, 0, 0, 183, 0, 0, - 183, 183, 183, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 149, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 162, 162, - 162, 162, 0, 144, 0, 162, 144, 162, 0, 0, - 0, 0, 0, 162, 162, 162, 162, 0, 0, 0, - 144, 144, 0, 0, 0, 144, 162, 162, 0, 162, - 162, 162, 162, 162, 162, 162, 0, 0, 162, 0, - 0, 162, 162, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 147, 0, 144, 147, 0, 164, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 0, 0, - 147, 147, 0, 0, 0, 147, 0, 0, 0, 0, - 331, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 0, 0, 178, 179, 180, 0, 0, 0, 0, 0, - 182, 182, 182, 182, 0, 147, 0, 182, 145, 182, - 0, 145, 0, 347, 0, 182, 182, 182, 182, 0, - 0, 0, 0, 0, 0, 145, 145, 0, 182, 182, - 145, 182, 182, 182, 182, 182, 182, 182, 0, 0, - 182, 0, 0, 182, 182, 182, 149, 149, 149, 149, - 0, 0, 0, 149, 155, 149, 0, 155, 0, 0, - 145, 149, 149, 149, 149, 0, 0, 0, 0, 0, - 0, 155, 155, 0, 149, 149, 155, 149, 149, 149, - 149, 149, 149, 149, 0, 0, 149, 0, 0, 149, + 0, 47, 48, 49, 50, 51, 52, 0, 0, 0, + 0, 0, 164, 54, 0, 164, 0, 0, 0, 0, + 0, 0, 0, 57, 0, 58, 59, 0, 0, 164, + 164, 0, 103, 0, 164, 103, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 0, 32, 33, 34, 103, + 103, 0, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 164, 42, 43, 44, 45, 46, + 0, 0, 0, 0, 47, 48, 49, 50, 51, 52, + 0, 0, 103, 0, 103, 78, 54, 0, 78, 0, + 113, 0, 0, 0, 118, 0, 57, 127, 58, 59, + 132, 0, 78, 78, 140, 141, 142, 143, 144, 0, + 0, 0, 149, 150, 0, 0, 112, 112, 112, 112, + 0, 0, 0, 112, 168, 168, 168, 168, 0, 0, + 0, 168, 0, 168, 0, 0, 0, 78, 0, 168, + 168, 168, 168, 0, 112, 112, 112, 0, 112, 0, + 0, 202, 168, 168, 168, 0, 168, 168, 168, 168, + 168, 168, 168, 168, 0, 0, 168, 0, 0, 168, + 168, 168, 0, 0, 0, 0, 0, 184, 0, 0, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 184, 184, 0, 0, 0, 184, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 184, + 0, 151, 0, 0, 151, 0, 0, 0, 0, 0, + 0, 0, 273, 164, 164, 164, 164, 0, 151, 151, + 164, 0, 164, 151, 0, 0, 0, 0, 164, 164, + 164, 164, 0, 103, 103, 103, 103, 0, 0, 0, + 103, 164, 164, 164, 0, 164, 164, 164, 164, 164, + 164, 164, 164, 151, 146, 164, 0, 146, 164, 164, + 164, 103, 103, 103, 0, 0, 0, 0, 0, 0, + 0, 146, 146, 0, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, + 0, 0, 0, 78, 0, 0, 0, 0, 0, 335, + 0, 0, 149, 0, 0, 149, 146, 0, 0, 0, + 0, 0, 0, 0, 78, 78, 78, 0, 0, 149, + 149, 0, 0, 0, 149, 0, 0, 0, 0, 0, + 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 147, 149, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 147, 147, 0, + 0, 0, 147, 0, 0, 0, 0, 0, 184, 184, + 184, 184, 0, 0, 0, 184, 0, 184, 0, 0, + 0, 0, 0, 184, 184, 184, 184, 0, 0, 0, + 0, 0, 147, 0, 0, 0, 184, 184, 184, 0, + 184, 184, 184, 184, 184, 184, 184, 184, 0, 0, + 184, 0, 0, 184, 184, 184, 0, 0, 0, 0, + 0, 0, 151, 151, 151, 151, 0, 157, 0, 151, + 157, 151, 0, 0, 0, 0, 0, 151, 151, 151, + 151, 0, 0, 0, 157, 157, 0, 0, 0, 157, + 151, 151, 151, 0, 151, 151, 151, 151, 151, 151, + 151, 151, 0, 0, 151, 0, 0, 151, 151, 151, + 0, 0, 0, 0, 0, 146, 146, 146, 146, 157, + 0, 0, 146, 0, 146, 0, 0, 0, 0, 0, + 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 146, 146, 146, 0, 146, 146, 146, + 146, 146, 146, 146, 146, 0, 0, 146, 0, 0, + 146, 146, 146, 149, 149, 149, 149, 0, 0, 0, + 149, 0, 149, 0, 0, 0, 0, 0, 149, 149, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173, 0, 0, 173, 0, 155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 144, 144, 144, 144, 0, 0, - 0, 144, 0, 144, 0, 0, 0, 0, 0, 144, - 144, 144, 144, 173, 0, 0, 0, 0, 176, 0, - 0, 176, 144, 144, 0, 144, 144, 144, 144, 144, - 144, 144, 0, 0, 144, 176, 176, 144, 144, 144, - 176, 0, 0, 0, 147, 147, 147, 147, 0, 0, - 0, 147, 0, 147, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 143, 0, - 176, 143, 147, 147, 0, 147, 147, 147, 147, 147, - 147, 147, 0, 0, 147, 143, 143, 147, 147, 147, - 143, 0, 0, 0, 0, 0, 0, 0, 0, 145, - 145, 145, 145, 0, 0, 0, 145, 0, 145, 0, + 0, 149, 149, 149, 0, 149, 149, 149, 149, 149, + 149, 149, 149, 0, 0, 149, 0, 0, 149, 149, + 149, 147, 147, 147, 147, 0, 175, 0, 147, 175, + 147, 0, 0, 0, 0, 0, 147, 147, 147, 147, + 0, 0, 0, 175, 175, 0, 0, 0, 175, 147, + 147, 147, 0, 147, 147, 147, 147, 147, 147, 147, + 147, 0, 0, 147, 0, 0, 147, 147, 147, 0, + 0, 0, 0, 0, 0, 0, 178, 0, 175, 178, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 178, 0, 0, 0, 178, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 157, + 157, 157, 0, 0, 0, 157, 0, 157, 0, 0, + 0, 0, 0, 157, 157, 157, 157, 0, 178, 0, + 0, 0, 0, 0, 0, 0, 157, 157, 157, 0, + 157, 157, 157, 157, 157, 157, 157, 157, 145, 0, + 157, 145, 0, 157, 157, 157, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 145, 0, 0, 0, + 145, 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, 77, 0, 0, 77, + 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 77, 77, 0, 0, 0, 77, 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, 185, 0, 0, 77, 0, + 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, + 175, 0, 185, 185, 175, 0, 175, 185, 0, 0, + 0, 0, 175, 175, 175, 175, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 175, 175, 175, 0, 175, + 175, 175, 175, 175, 175, 175, 175, 185, 0, 175, + 0, 0, 175, 175, 175, 0, 0, 178, 178, 178, + 178, 0, 66, 0, 178, 66, 178, 0, 0, 0, + 0, 0, 178, 178, 178, 178, 0, 0, 0, 66, + 66, 0, 0, 0, 66, 178, 178, 178, 0, 178, + 178, 178, 178, 178, 178, 178, 178, 0, 0, 178, + 0, 0, 178, 178, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 144, 0, 0, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, + 145, 145, 145, 0, 144, 144, 145, 0, 145, 144, 0, 0, 0, 0, 145, 145, 145, 145, 0, 0, - 143, 0, 0, 0, 0, 0, 0, 145, 145, 0, - 145, 145, 145, 145, 145, 145, 145, 0, 0, 145, - 0, 0, 145, 145, 145, 155, 155, 155, 155, 0, - 76, 0, 155, 76, 155, 0, 0, 0, 0, 0, - 155, 155, 155, 155, 0, 0, 0, 76, 76, 0, - 0, 0, 76, 155, 155, 0, 155, 155, 155, 155, - 155, 155, 155, 0, 0, 155, 0, 0, 155, 155, - 155, 0, 173, 173, 173, 173, 0, 0, 0, 173, - 0, 173, 76, 0, 0, 0, 0, 173, 173, 173, - 173, 0, 0, 0, 0, 0, 66, 0, 0, 66, - 173, 173, 0, 173, 173, 173, 173, 173, 173, 173, - 0, 0, 173, 66, 66, 173, 173, 173, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, - 176, 176, 176, 0, 0, 0, 176, 0, 176, 0, - 0, 0, 0, 0, 176, 176, 176, 176, 66, 0, - 0, 0, 0, 142, 0, 0, 142, 176, 176, 0, - 176, 176, 176, 176, 176, 176, 176, 0, 0, 176, - 142, 142, 176, 176, 176, 142, 0, 0, 0, 143, - 143, 143, 143, 0, 0, 0, 143, 0, 143, 0, - 0, 0, 0, 0, 143, 143, 143, 143, 0, 0, - 0, 0, 0, 82, 0, 142, 82, 143, 143, 0, - 143, 143, 143, 143, 143, 143, 143, 0, 0, 143, - 82, 82, 143, 143, 143, 82, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 145, 145, 145, + 0, 145, 145, 145, 145, 145, 145, 145, 145, 144, + 0, 145, 0, 0, 145, 145, 145, 77, 77, 77, + 77, 0, 83, 0, 77, 83, 77, 0, 0, 0, + 0, 0, 77, 77, 77, 77, 0, 0, 0, 83, + 83, 0, 0, 0, 83, 77, 77, 77, 0, 77, + 77, 77, 77, 77, 77, 77, 77, 0, 0, 77, + 0, 0, 77, 77, 77, 0, 185, 185, 185, 185, + 163, 0, 0, 185, 83, 185, 0, 0, 0, 0, + 0, 185, 185, 185, 185, 0, 0, 163, 163, 0, + 0, 0, 163, 0, 185, 185, 185, 0, 185, 185, + 185, 185, 185, 185, 185, 185, 0, 0, 185, 0, + 0, 185, 185, 185, 0, 0, 0, 0, 0, 0, + 0, 80, 163, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 66, 66, 66, 0, 80, 80, + 66, 0, 66, 80, 0, 0, 0, 0, 66, 66, + 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 66, 66, 66, 0, 66, 66, 66, 66, 66, + 66, 66, 66, 80, 0, 66, 0, 0, 66, 66, + 66, 0, 0, 0, 0, 0, 0, 0, 144, 144, + 144, 144, 0, 123, 0, 144, 123, 144, 0, 0, + 0, 0, 0, 144, 144, 144, 144, 0, 0, 0, + 123, 123, 0, 0, 0, 123, 144, 144, 144, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 0, 0, + 144, 0, 0, 144, 144, 144, 0, 0, 0, 0, + 0, 124, 0, 0, 124, 123, 0, 0, 0, 0, + 0, 0, 0, 83, 83, 83, 83, 0, 124, 124, + 83, 0, 83, 124, 0, 0, 0, 0, 83, 83, + 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 83, 83, 0, 83, 83, 83, 83, 83, + 83, 83, 83, 124, 0, 83, 0, 0, 83, 83, + 83, 163, 163, 163, 163, 0, 119, 0, 163, 119, + 163, 0, 0, 0, 0, 0, 163, 163, 163, 163, + 0, 0, 0, 119, 119, 0, 0, 0, 119, 163, + 163, 163, 0, 163, 163, 163, 163, 163, 163, 163, + 163, 0, 0, 163, 0, 0, 163, 163, 163, 0, + 0, 0, 80, 80, 80, 80, 0, 120, 119, 80, + 120, 80, 0, 0, 0, 0, 0, 80, 80, 80, + 80, 0, 0, 0, 120, 120, 0, 0, 0, 120, + 80, 80, 80, 0, 80, 80, 80, 80, 80, 80, + 80, 80, 0, 0, 80, 0, 0, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, + 0, 0, 141, 0, 0, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 123, 123, 123, 0, 141, + 141, 123, 0, 123, 141, 0, 0, 0, 0, 123, + 123, 123, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 123, 123, 0, 123, 123, 123, 123, + 123, 123, 123, 123, 141, 0, 123, 0, 0, 0, + 0, 0, 124, 124, 124, 124, 0, 117, 0, 124, + 117, 124, 0, 0, 0, 0, 0, 124, 124, 124, + 124, 0, 0, 0, 117, 117, 0, 0, 0, 117, + 124, 124, 124, 0, 124, 124, 124, 124, 124, 124, + 124, 124, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 0, 0, 118, 117, + 0, 0, 0, 0, 0, 0, 0, 119, 119, 119, + 119, 0, 118, 118, 119, 0, 119, 118, 0, 0, + 0, 0, 119, 119, 119, 119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 119, 119, 119, 0, 119, + 119, 119, 119, 119, 119, 119, 119, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, + 120, 120, 0, 0, 0, 120, 0, 120, 0, 0, + 0, 0, 0, 120, 120, 120, 120, 0, 0, 0, + 0, 116, 0, 0, 116, 0, 120, 120, 120, 0, + 120, 120, 120, 120, 120, 120, 120, 120, 116, 116, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 141, 141, 141, 0, 0, 0, + 141, 0, 141, 0, 0, 0, 0, 0, 141, 141, + 141, 141, 0, 116, 0, 0, 104, 0, 0, 104, + 0, 141, 141, 141, 0, 141, 141, 141, 141, 141, + 141, 141, 141, 104, 104, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, + 117, 117, 0, 0, 0, 117, 0, 117, 104, 0, + 0, 0, 0, 117, 117, 117, 117, 0, 0, 0, + 0, 105, 0, 0, 105, 0, 117, 117, 117, 0, + 117, 117, 117, 117, 117, 117, 117, 117, 105, 105, + 0, 0, 0, 105, 0, 0, 118, 118, 118, 118, + 0, 0, 0, 118, 0, 118, 0, 0, 0, 0, + 0, 118, 118, 118, 118, 0, 0, 0, 0, 106, + 0, 0, 106, 105, 118, 118, 118, 0, 118, 118, + 118, 118, 118, 118, 118, 118, 106, 106, 0, 0, + 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, 160, 0, 0, 160, - 0, 76, 76, 76, 76, 161, 0, 0, 76, 0, - 76, 0, 0, 160, 160, 0, 76, 76, 76, 76, - 0, 0, 161, 161, 0, 0, 0, 161, 0, 76, - 76, 0, 76, 76, 76, 76, 76, 76, 76, 0, - 0, 76, 0, 0, 76, 76, 76, 0, 160, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 0, 0, 0, 102, 0, 0, 102, 66, 66, 66, - 66, 79, 0, 0, 66, 0, 66, 0, 0, 0, - 102, 102, 66, 66, 66, 66, 0, 0, 79, 79, - 0, 0, 0, 79, 0, 66, 66, 0, 66, 66, - 66, 66, 66, 66, 66, 0, 0, 66, 0, 0, - 66, 66, 66, 0, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 79, 142, 142, 142, 142, 0, 0, - 0, 142, 121, 142, 0, 121, 0, 0, 0, 142, - 142, 142, 142, 0, 0, 0, 0, 0, 0, 121, - 121, 0, 142, 142, 121, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 142, 0, 0, 142, 142, 142, - 0, 0, 0, 0, 82, 82, 82, 82, 0, 122, - 0, 82, 122, 82, 121, 0, 0, 0, 0, 82, - 82, 82, 82, 0, 0, 0, 122, 122, 0, 0, - 0, 122, 82, 82, 0, 82, 82, 82, 82, 82, - 82, 82, 0, 0, 82, 0, 0, 82, 82, 82, - 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, - 160, 122, 0, 0, 160, 0, 161, 161, 161, 161, - 0, 117, 0, 161, 117, 161, 0, 0, 0, 0, - 0, 161, 161, 161, 161, 160, 160, 0, 117, 117, - 0, 0, 0, 117, 161, 161, 0, 161, 161, 161, - 161, 161, 161, 161, 0, 0, 161, 0, 0, 161, - 161, 161, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 102, 102, 102, 102, 0, 0, - 0, 102, 79, 79, 79, 79, 0, 118, 0, 79, - 118, 79, 0, 0, 0, 0, 0, 79, 79, 79, - 79, 0, 102, 102, 118, 118, 0, 0, 0, 118, - 79, 79, 0, 79, 79, 79, 79, 79, 79, 79, - 0, 0, 79, 0, 0, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 121, 121, 121, 121, 0, 139, 0, - 121, 139, 121, 0, 0, 0, 0, 0, 121, 121, - 121, 121, 0, 0, 0, 139, 139, 0, 0, 0, - 139, 121, 121, 0, 121, 121, 121, 121, 121, 121, - 121, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 122, 122, 122, 122, 0, 115, 0, 122, 115, 122, - 139, 0, 0, 0, 0, 122, 122, 122, 122, 0, - 0, 0, 115, 115, 0, 0, 0, 115, 122, 122, - 0, 122, 122, 122, 122, 122, 122, 122, 0, 0, - 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 116, 0, 0, 116, 0, 0, 0, 115, 0, 0, - 0, 0, 117, 117, 117, 117, 0, 116, 116, 117, - 0, 117, 116, 0, 0, 0, 0, 117, 117, 117, - 117, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 117, 117, 114, 117, 117, 117, 117, 117, 117, 117, - 0, 0, 116, 0, 0, 0, 114, 114, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, - 118, 118, 0, 103, 0, 118, 103, 118, 0, 0, - 0, 114, 0, 118, 118, 118, 118, 0, 0, 0, - 103, 103, 0, 0, 0, 103, 118, 118, 0, 118, - 118, 118, 118, 118, 118, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 104, 0, 0, 0, 0, 103, 0, 0, 0, 139, - 139, 139, 139, 0, 104, 104, 139, 0, 139, 104, - 0, 0, 0, 0, 139, 139, 139, 139, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 139, 0, - 139, 139, 139, 139, 139, 139, 139, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 115, 115, 115, 115, - 0, 105, 0, 115, 105, 115, 0, 0, 0, 0, - 0, 115, 115, 115, 115, 0, 0, 0, 105, 105, - 0, 0, 0, 105, 115, 115, 0, 115, 115, 115, - 115, 115, 115, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 116, 116, 116, 0, 0, 0, 116, 165, - 116, 0, 165, 105, 0, 0, 116, 116, 116, 116, - 0, 0, 0, 0, 0, 0, 165, 165, 0, 116, - 116, 165, 116, 116, 116, 116, 116, 116, 116, 0, - 114, 114, 114, 114, 0, 164, 0, 114, 164, 114, - 0, 0, 0, 0, 0, 114, 114, 114, 114, 0, - 0, 165, 164, 164, 0, 0, 0, 164, 114, 114, - 0, 114, 114, 114, 114, 114, 114, 114, 0, 0, - 0, 0, 0, 0, 103, 103, 103, 103, 0, 128, - 0, 103, 128, 103, 0, 0, 0, 164, 0, 103, - 103, 103, 103, 0, 0, 0, 128, 128, 0, 0, - 0, 128, 103, 103, 0, 103, 103, 103, 103, 103, - 103, 103, 0, 0, 0, 0, 0, 0, 104, 104, - 104, 104, 0, 141, 0, 104, 141, 104, 0, 0, - 0, 128, 0, 104, 104, 104, 104, 0, 0, 0, - 141, 141, 0, 0, 0, 141, 104, 104, 0, 104, - 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, - 138, 0, 0, 138, 0, 0, 0, 0, 0, 0, - 107, 0, 0, 107, 0, 141, 0, 138, 138, 0, - 0, 0, 105, 105, 105, 105, 0, 107, 107, 105, - 0, 105, 107, 0, 0, 0, 0, 105, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 106, 0, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 116, 116, 116, 0, 107, 107, 116, + 0, 116, 107, 0, 0, 0, 0, 116, 116, 116, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 116, 116, 0, 116, 116, 116, 116, 116, 116, + 116, 116, 107, 0, 0, 167, 0, 0, 167, 0, + 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, + 104, 0, 167, 167, 104, 0, 104, 167, 0, 0, + 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 104, 104, 0, 104, + 104, 104, 104, 104, 104, 104, 104, 167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 166, 0, 0, 166, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 0, 166, 166, 105, + 0, 105, 166, 0, 0, 0, 0, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 105, 138, 105, 105, 105, 105, 105, 105, 0, - 0, 0, 107, 0, 0, 109, 0, 0, 109, 0, - 165, 165, 165, 165, 0, 110, 0, 165, 110, 165, - 0, 0, 109, 109, 0, 165, 165, 109, 0, 0, - 0, 0, 110, 110, 0, 0, 0, 110, 165, 165, - 0, 165, 165, 165, 165, 165, 164, 164, 164, 164, - 0, 112, 0, 164, 112, 164, 0, 109, 0, 0, - 0, 164, 164, 0, 0, 0, 0, 110, 112, 112, - 0, 0, 0, 112, 164, 164, 0, 164, 164, 164, - 164, 164, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 0, 111, 0, 128, 111, 128, - 0, 0, 0, 112, 0, 128, 128, 0, 0, 0, - 0, 0, 111, 111, 0, 0, 0, 111, 128, 128, - 0, 128, 128, 128, 128, 128, 0, 77, 0, 0, - 77, 0, 0, 0, 141, 141, 141, 141, 0, 0, - 0, 141, 0, 141, 77, 77, 0, 111, 0, 141, - 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 141, 141, 0, 141, 141, 141, 141, 141, - 0, 138, 138, 138, 138, 0, 0, 0, 138, 77, - 0, 107, 107, 107, 107, 0, 0, 0, 107, 0, - 107, 0, 0, 0, 0, 0, 0, 107, 0, 138, - 138, 0, 138, 0, 0, 0, 0, 0, 0, 107, - 107, 0, 107, 107, 107, 107, 107, 0, 0, 0, + 105, 105, 105, 0, 105, 105, 105, 105, 105, 105, + 105, 0, 166, 0, 0, 130, 0, 0, 130, 0, + 106, 106, 106, 106, 0, 143, 0, 106, 143, 106, + 0, 0, 130, 130, 0, 106, 106, 130, 106, 0, + 0, 0, 143, 143, 0, 0, 0, 143, 106, 106, + 106, 0, 106, 106, 106, 106, 106, 106, 106, 0, + 0, 0, 0, 0, 0, 0, 108, 130, 0, 108, + 0, 107, 107, 107, 107, 0, 0, 143, 107, 0, + 107, 0, 0, 108, 108, 0, 107, 107, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, + 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 109, 0, 0, 109, 108, 0, + 0, 0, 0, 0, 0, 0, 167, 167, 167, 167, + 0, 109, 109, 167, 0, 167, 109, 0, 0, 0, + 0, 167, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 167, 167, 0, 167, 167, + 167, 167, 167, 167, 110, 0, 109, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 109, 109, 109, - 0, 0, 0, 109, 0, 109, 110, 110, 110, 110, - 0, 0, 0, 110, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 109, 0, 109, 109, 109, - 109, 109, 0, 0, 110, 110, 0, 110, 110, 110, - 110, 0, 112, 112, 112, 112, 0, 0, 0, 112, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 110, 0, 0, 0, 110, 0, 0, 0, + 0, 166, 166, 166, 166, 0, 0, 0, 166, 0, + 166, 0, 0, 0, 0, 0, 166, 166, 0, 0, + 0, 0, 111, 0, 0, 111, 110, 0, 0, 166, + 166, 166, 0, 166, 166, 166, 166, 166, 166, 111, + 111, 0, 0, 0, 111, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, + 0, 113, 0, 130, 113, 130, 143, 143, 143, 143, + 0, 130, 130, 143, 111, 143, 0, 0, 113, 113, + 0, 143, 143, 113, 130, 130, 130, 0, 130, 130, + 130, 130, 130, 130, 143, 143, 143, 0, 143, 143, + 143, 143, 143, 143, 0, 0, 0, 108, 108, 108, + 108, 0, 0, 113, 108, 0, 108, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 114, 0, + 0, 114, 0, 0, 0, 108, 108, 108, 0, 108, + 108, 108, 108, 108, 108, 114, 114, 0, 0, 0, + 114, 0, 0, 0, 0, 109, 109, 109, 109, 0, + 0, 0, 109, 0, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 115, 0, 0, 115, + 114, 0, 0, 109, 109, 109, 0, 109, 109, 109, + 109, 109, 109, 115, 115, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 0, 110, 110, 110, 110, 0, + 0, 0, 110, 0, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 110, 110, 110, 0, 110, 110, 110, + 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 111, 111, 111, 111, 0, 0, 0, + 111, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 111, 111, 111, 111, - 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, + 0, 111, 111, 111, 0, 111, 111, 111, 111, 111, + 0, 0, 113, 113, 113, 113, 0, 0, 0, 113, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 111, 111, 0, 111, 77, 77, - 77, 77, 0, 0, 0, 77, 0, 0, 0, 0, + 113, 113, 113, 0, 113, 113, 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, + 114, 114, 114, 0, 0, 0, 114, 0, 114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, + 0, 114, 114, 114, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 115, 115, 115, + 115, 0, 0, 0, 115, 0, 115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 115, 115, 115, 0, 115, + 115, 115, }; static short yycheck[] = { 15, - 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, - 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, - 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, - 59, 40, 91, 49, 41, 58, 59, 41, 362, 131, - 63, 257, 91, 41, 60, 61, 46, 47, 59, 94, - 40, 15, 59, 53, 41, 40, 100, 41, 300, 301, - 105, 59, 41, 59, 123, 65, 66, 67, 68, 393, - 93, 40, 59, 41, 123, 41, 41, 91, 91, 123, - 41, 45, 91, 44, 48, 40, 93, 131, 40, 123, - 41, 123, 123, 59, 123, 41, 295, 58, 59, 115, - 116, 44, 63, 106, 107, 108, 109, 110, 111, 123, - 123, 40, 123, 59, 123, 40, 116, 133, 0, 59, - 36, 37, 257, 59, 40, 89, 59, 278, 314, 59, - 123, 41, 93, 266, 267, 268, 40, 270, 271, 338, - 104, 157, 158, 159, 160, 161, 162, 163, 64, 59, - 59, 33, 276, 277, 36, 37, 38, 41, 40, 44, - 42, 43, 260, 45, 297, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 123, 59, 41, 59, 0, 41, - 272, 257, 64, 199, 383, 40, 278, 203, 204, 40, - 206, 155, 208, 41, 59, 298, 40, 59, 93, 215, - 93, 217, 218, 8, 9, 257, 209, 125, 298, 91, - 226, 33, 317, 91, 36, 37, 38, 93, 40, 93, - 42, 43, 36, 45, 257, 257, 300, 301, 272, 41, - 262, 300, 301, 298, 278, 125, 252, 59, 254, 255, - 260, 123, 64, 125, 126, 258, 0, 300, 301, 272, - 273, 274, 275, 300, 301, 91, 279, 40, 281, 93, - 301, 296, 300, 301, 298, 272, 273, 274, 275, 91, - 300, 301, 279, 300, 301, 370, 41, 300, 301, 33, - 303, 304, 36, 37, 38, 260, 40, 40, 42, 43, - 41, 45, 308, 300, 301, 41, 300, 301, 314, 41, - 41, 123, 41, 125, 126, 59, 125, 271, 125, 273, - 64, 272, 273, 274, 275, 279, 300, 301, 279, 59, - 281, 300, 301, 125, 340, 125, 287, 288, 289, 290, - 59, 41, 300, 301, 44, 300, 301, 91, 123, 300, - 301, 41, 303, 304, 305, 306, 307, 308, 309, 300, - 301, 312, 125, 63, 315, 316, 317, 300, 301, 41, - 300, 301, 41, 379, 300, 301, 59, 300, 301, 123, - 300, 301, 126, 40, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 41, 41, 123, 279, 280, 41, - 282, 283, 284, 285, 286, 300, 301, 300, 301, 291, - 292, 293, 294, 295, 296, 297, 63, 123, 312, 41, - 302, 315, 316, 317, 300, 301, 300, 301, 59, 311, - 41, 313, 314, 59, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 59, 41, 289, 279, 280, 35, - 282, 283, 284, 285, 286, 52, 300, 301, 52, 291, - 292, 293, 294, 295, 296, 297, 309, 15, 158, 312, - 302, 379, 315, 316, 317, 206, 340, 24, -1, 311, - -1, 313, 314, 309, 273, 41, 312, -1, 44, 315, - 316, 317, 256, 257, 258, 259, 260, 261, -1, 263, - 264, 265, 58, 59, -1, 269, -1, 63, 272, 273, - 274, 275, -1, 289, 290, 279, 280, -1, 282, 283, - 284, 285, 286, -1, -1, 125, -1, 291, 292, 293, - 294, 295, 296, 309, -1, -1, 312, 93, 302, 315, - 316, 317, -1, -1, -1, -1, -1, 311, 33, 313, - 314, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 45, 281, -1, 125, -1, -1, -1, 287, 288, 289, - 290, -1, -1, 58, 59, -1, -1, -1, 63, 64, - -1, -1, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, -1, -1, 315, 316, 317, 272, 273, - 274, 275, -1, -1, -1, 279, 91, -1, 93, 33, - -1, -1, 36, 37, 38, -1, 40, 41, 42, 43, - 44, 45, -1, -1, 281, -1, 300, 301, -1, -1, - 287, 288, 289, 290, 58, 59, -1, -1, -1, 63, - 64, 126, -1, -1, -1, -1, 303, 304, 305, 306, - 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, - 317, -1, -1, -1, -1, -1, 266, 267, 268, 93, - 270, 271, 33, 289, 290, 36, 37, 38, -1, 40, - -1, 42, 43, -1, 45, -1, 359, 360, -1, -1, - -1, 364, 308, 309, -1, -1, 312, 297, 59, 315, - 316, 317, 126, 64, 266, 267, 268, 380, 270, 271, - -1, 384, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - 91, 287, 288, 289, 290, 297, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, 123, -1, -1, 126, -1, -1, -1, -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, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, -1, -1, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 311, 312, 313, 314, - 315, 316, 317, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, -1, -1, -1, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, -1, 311, 312, 313, - 314, 315, 316, 317, -1, 256, 257, 258, 259, 260, - 261, 63, 263, 264, 265, -1, -1, -1, 269, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 280, + 95, 59, 59, 41, 36, 36, 59, 210, 123, 40, + 366, 100, 201, 59, 36, 41, 59, 59, 40, 276, + 277, 41, 41, 40, 44, 40, 93, 91, 36, 37, + 93, 91, 40, 49, 257, 94, 8, 9, 58, 59, + 59, 397, 131, 63, 60, 61, 105, 44, 257, 93, + 106, 107, 108, 109, 110, 111, 64, 41, 41, 123, + 41, 41, 198, 123, 41, 59, 123, 41, 204, 91, + 44, 40, 40, 93, 91, 59, 91, 123, 59, 41, + 123, 123, 266, 267, 268, 41, 270, 271, 40, 63, + 0, 123, 41, 41, 41, 40, 299, 59, 40, 115, + 116, 123, 40, 59, 40, 40, 123, 257, 123, 278, + 59, 59, 59, 297, 123, 363, 364, 133, 41, 40, + 368, 123, 59, 33, 44, 260, 36, 37, 38, 318, + 40, 257, 42, 43, 40, 45, 384, 41, 41, 342, + 388, 157, 158, 159, 160, 161, 162, 163, 164, 59, + 272, 273, 274, 275, 64, 211, 40, 279, 41, 59, + 125, 41, 40, 319, 41, 298, 91, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 59, 298, 300, 301, + 302, 91, 257, 298, 387, 201, 0, 276, 36, 205, + 206, 59, 208, 282, 210, 59, 41, 125, 59, 257, + 91, 217, 314, 219, 220, 317, 318, 319, 260, 302, + 93, 40, 228, 123, 40, 125, 126, 41, 41, 33, + 93, 260, 36, 37, 38, 257, 40, 59, 42, 43, + 262, 45, 59, 300, 301, 302, 258, 300, 301, 302, + 256, 298, 258, 259, 41, 59, 41, 300, 301, 302, + 64, 41, 272, 273, 274, 275, 300, 301, 302, 279, + 41, 281, 300, 301, 302, 296, 125, 287, 288, 289, + 290, 125, 125, 41, 300, 301, 302, 91, 93, 374, + 300, 301, 302, 93, 304, 305, 306, 307, 308, 309, + 310, 311, 125, 59, 314, 63, 312, 317, 318, 319, + 41, 123, 318, 300, 301, 302, 125, 281, 93, 123, + 41, 125, 126, 287, 288, 289, 290, 300, 301, 302, + 300, 301, 302, 300, 301, 302, 41, 59, 344, 40, + 304, 305, 306, 307, 308, 309, 310, 311, 41, 41, + 314, 123, 41, 317, 318, 319, 256, 257, 258, 259, + 260, 261, 123, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 41, 383, 59, 279, + 280, 0, 282, 283, 284, 285, 286, 300, 301, 302, + 41, 291, 292, 293, 294, 295, 296, 297, 59, 272, + 273, 274, 275, 303, 41, 59, 279, 300, 301, 302, + 300, 301, 302, 313, 33, 315, 316, 36, 37, 38, + 41, 40, 35, 42, 43, 52, 45, 300, 301, 302, + 300, 301, 302, 300, 301, 302, 15, 300, 301, 302, + 59, 52, 300, 301, 302, 64, 300, 301, 302, 300, + 301, 302, 256, 257, 258, 259, 260, 261, 158, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 91, 344, 383, 279, 280, 125, 282, 283, + 284, 285, 286, 300, 301, 302, 125, 291, 292, 293, + 294, 295, 296, 297, 208, 300, 301, 302, 24, 303, + 300, 301, 302, 277, 123, -1, -1, 126, -1, 313, + 33, 315, 316, 36, 37, 38, -1, 40, 41, 42, + 43, 44, 45, 281, -1, 300, 301, 302, -1, 287, + 288, 289, 290, -1, -1, 58, 59, 300, 301, 302, + 63, 64, -1, -1, -1, -1, 304, 305, 306, 307, + 308, 309, 310, 311, -1, -1, 314, -1, -1, 317, + 318, 319, -1, -1, -1, -1, -1, -1, 91, 289, + 93, -1, 29, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, 44, 45, -1, 46, + 47, 311, -1, -1, 314, -1, 53, 317, 318, 319, + 58, 59, -1, 126, -1, 63, 64, -1, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, 266, 267, + 268, -1, 270, 271, -1, -1, -1, 266, 267, 268, + -1, 270, 271, -1, -1, 93, -1, 256, 257, 258, + 259, 260, 261, -1, 263, 264, 265, -1, -1, 297, + 269, -1, 58, 272, 273, 274, 275, 63, 297, 116, + 279, 280, -1, 282, 283, 284, 285, 286, 126, -1, + -1, -1, 291, 292, 293, 294, 295, 296, -1, -1, + -1, -1, -1, -1, 303, -1, -1, 28, 29, -1, + 287, 288, 289, 290, 313, 311, 315, 316, 314, 40, + 15, 317, 318, 319, -1, 46, 47, 48, -1, -1, + -1, 52, 53, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, -1, 65, 66, 67, 68, -1, -1, + 45, -1, -1, 48, 257, 258, 259, 260, 261, -1, + 263, 264, 265, -1, -1, -1, 269, -1, -1, 272, + 273, 274, 275, -1, -1, -1, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 89, 116, 63, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 104, + 313, 314, 315, 316, 317, 318, 319, -1, -1, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + 46, 269, -1, -1, 272, 273, 274, 275, 54, -1, + -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, + 155, 182, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, + 318, 319, 33, -1, 100, 36, 37, 38, 209, 40, + -1, 42, 43, -1, 45, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 123, 59, -1, + -1, -1, -1, 64, -1, 131, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, 289, + 290, 317, 318, 319, -1, 339, 340, 341, -1, 343, + 91, -1, -1, 33, -1, -1, 36, 37, 38, -1, + 40, 311, 42, 43, 314, 45, -1, 317, 318, 319, + -1, -1, 287, 288, 289, 290, 370, -1, -1, 59, + -1, -1, 123, 377, 64, 126, -1, 381, -1, -1, + 275, -1, 277, 308, 309, 310, 311, -1, 283, 314, + 394, 395, 317, 318, 319, -1, -1, -1, -1, -1, + -1, 91, -1, 33, -1, -1, 36, 37, 38, -1, + 40, -1, 42, 43, 281, 45, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 123, 64, -1, 126, 304, 305, 306, + 307, 308, 309, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, -1, -1, -1, -1, -1, -1, -1, + 276, 91, 289, 290, -1, -1, 282, 33, -1, -1, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, -1, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, 123, -1, -1, 126, -1, 64, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + -1, 272, 273, 274, 275, 91, -1, 63, 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, -1, -1, -1, 33, - -1, 302, 36, 37, 38, -1, 40, -1, 42, 43, - 311, 45, 313, 314, -1, -1, -1, -1, 335, 336, - 337, -1, 339, -1, -1, 59, -1, -1, -1, -1, - 64, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, - 58, 59, -1, -1, -1, -1, 373, 91, -1, 33, - 377, -1, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, 390, 391, -1, 28, 29, -1, -1, - -1, -1, -1, -1, -1, 93, -1, -1, 40, 123, - 64, -1, 126, -1, 46, 47, 48, -1, -1, 33, - 52, 53, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, 65, 66, 67, 68, 91, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, - 64, -1, -1, -1, -1, -1, -1, -1, 41, 308, - 309, 44, -1, 312, -1, -1, 315, 316, 317, 123, - -1, -1, 126, -1, -1, 58, 59, 91, -1, -1, - 63, -1, -1, 33, 116, -1, 36, 37, 38, -1, - 40, -1, 42, 43, -1, 45, -1, -1, -1, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, 123, - 93, -1, 126, -1, 64, -1, -1, -1, -1, -1, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 91, 256, 257, 258, 259, 260, 261, 180, 263, - 264, 265, -1, -1, -1, 269, -1, -1, 272, 273, - 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, - 284, 285, 286, 123, -1, 207, 126, 291, 292, 293, - 294, 295, 296, -1, 272, 273, 274, 275, 302, -1, - -1, 279, -1, -1, -1, -1, -1, 311, -1, 313, - 314, -1, -1, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 300, 301, -1, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, 257, 258, 259, 260, 261, 302, 263, - 264, 265, -1, -1, -1, 269, -1, 311, -1, 313, - 314, -1, 58, -1, -1, -1, 280, 63, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, -1, -1, -1, 302, 272, - 273, 274, 275, -1, -1, -1, 279, 311, 281, 313, - 314, -1, -1, -1, 287, 288, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, 300, 301, 269, - 303, 304, 305, 306, 307, 308, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, -1, -1, + -1, -1, 303, -1, -1, -1, -1, 123, -1, -1, + 126, -1, 313, -1, 315, 316, 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, -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, - 33, -1, 302, 36, 37, 38, -1, 40, -1, 42, - 43, 311, 45, 313, 314, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, 64, -1, -1, -1, 287, 288, 289, 290, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, 305, 306, 307, 308, 309, 91, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 64, -1, -1, -1, 287, 288, 289, 290, -1, - 33, -1, -1, 36, 37, 38, -1, 40, -1, 42, - 43, -1, 45, 126, 306, 307, 308, 309, 91, -1, - 312, -1, -1, 315, 316, 317, -1, -1, -1, -1, - -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, 126, -1, 281, -1, -1, 91, -1, - 93, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 64, -1, -1, -1, -1, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, 126, 287, 288, 289, 290, 91, -1, - 33, -1, -1, 36, 37, 38, -1, 40, 41, 42, - 43, -1, 45, -1, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - -1, 64, 287, 126, 289, 290, -1, -1, -1, -1, - -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, - 263, 264, 265, 308, 309, -1, 269, 312, 91, -1, - 315, 316, 317, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, 126, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, -1, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, 257, 258, 259, 260, 261, 302, - 263, 264, 265, -1, -1, -1, 269, -1, 311, -1, - 313, 314, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, -1, -1, -1, 33, -1, 302, - 36, 37, 38, -1, 40, 41, 42, 43, 311, 45, - 313, 314, -1, -1, 257, 258, 259, 260, 261, -1, - 263, 264, 265, -1, -1, -1, 269, -1, 64, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 295, 296, -1, 91, -1, 33, -1, 302, - 36, 37, 38, -1, 40, 41, 42, 43, 311, 45, - 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - 126, -1, -1, -1, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 58, 59, 91, 33, -1, 63, 36, - 37, 38, -1, 40, -1, 42, 43, -1, 45, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 64, 93, -1, - 126, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, 33, -1, -1, 36, - 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 64, -1, 126, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, -1, -1, 269, 91, -1, -1, -1, -1, -1, + -1, -1, 33, 303, -1, 36, 37, 38, -1, 40, + -1, 42, 43, 313, 45, 315, 316, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, -1, 269, + -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + 91, -1, 41, 303, -1, 44, -1, 287, -1, 289, + 290, -1, -1, 313, -1, 315, 316, -1, -1, 58, + 59, 257, 258, 259, 260, 261, -1, 263, 264, 265, + 310, 311, 123, 269, 314, 126, -1, 317, 318, 319, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 41, -1, -1, 44, -1, 302, -1, -1, 126, - -1, -1, -1, -1, -1, 311, -1, 313, 314, 59, - -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, 93, -1, 291, 292, 293, 294, 295, - 296, -1, 64, -1, -1, -1, 302, 272, 273, 274, - 275, -1, -1, -1, 279, 311, 281, 313, 314, 256, - 257, 258, 259, 260, 261, -1, 263, 264, 265, 91, - -1, -1, 269, -1, -1, 300, 301, -1, 303, 304, - 305, 306, 307, 280, -1, 282, 283, 284, 285, 286, - -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - -1, -1, -1, 33, 126, 302, 36, 37, 38, -1, - 40, 41, 42, 43, 311, 45, 313, 314, -1, -1, + 286, -1, -1, -1, 93, 291, 292, 293, 294, 295, + 296, 33, -1, -1, 36, 37, 38, 303, 40, -1, + 42, 43, -1, 45, -1, 281, -1, 313, -1, 315, + 316, 287, 288, 289, 290, -1, -1, 59, -1, -1, + -1, -1, 64, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, 287, 288, 289, 290, -1, 91, + -1, 33, -1, -1, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, 307, 308, 309, 310, 311, -1, + -1, 314, -1, -1, 317, 318, 319, -1, -1, -1, + -1, -1, 64, -1, 126, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, 91, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, 33, -1, -1, 36, + 37, 38, 303, 40, 126, 42, 43, -1, 45, -1, + -1, -1, 313, -1, 315, 316, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, 64, -1, -1, + 279, -1, -1, -1, -1, -1, -1, 33, -1, -1, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, 300, 301, 302, 91, 304, 93, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, + 41, -1, -1, 44, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, -1, -1, 269, 59, 126, + -1, -1, -1, -1, -1, 91, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, -1, -1, -1, + -1, 303, 93, -1, -1, -1, -1, -1, -1, -1, + 126, 313, -1, 315, 316, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, + 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 64, -1, -1, -1, + -1, 303, -1, -1, -1, -1, -1, 287, 288, 289, + 290, 313, -1, 315, 316, -1, -1, -1, 41, -1, + -1, 44, -1, 91, -1, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, 58, 59, 317, 318, 319, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, - -1, -1, 269, -1, 64, -1, -1, -1, -1, -1, + -1, -1, 269, 41, -1, -1, 44, -1, 126, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + 93, 59, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 257, 258, 259, 260, 261, 303, 263, 264, 265, + -1, -1, -1, 269, -1, -1, 313, -1, 315, 316, + -1, -1, -1, -1, 280, 93, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, 272, 273, 274, 275, -1, 33, 303, 279, 36, + 37, 38, -1, 40, 41, 42, 43, 313, 45, 315, + 316, 287, 288, 289, 290, -1, -1, -1, -1, 300, + 301, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 91, -1, -1, -1, -1, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, 33, + -1, 269, 36, 37, 38, -1, 40, 41, 42, 43, + -1, 45, 280, -1, 282, 283, 284, 285, 286, 126, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 64, -1, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 313, -1, 315, 316, 272, + 273, 274, 275, -1, -1, -1, 279, 91, -1, -1, + -1, -1, 33, -1, -1, 36, 37, 38, -1, 40, + -1, 42, 43, -1, 45, -1, -1, 300, 301, 302, + -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, 126, 64, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, 58, 59, -1, -1, -1, -1, + 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, 36, 37, + 38, -1, 40, 41, 42, 43, -1, 45, -1, 93, + 257, 258, 259, 260, 261, 126, 263, 264, 265, -1, + -1, -1, 269, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - -1, 91, -1, 33, -1, 302, 36, 37, 38, -1, - 40, -1, 42, 43, 311, 45, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 64, -1, 126, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 303, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 313, 33, 315, 316, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, -1, -1, 257, 258, 259, 260, 261, 126, 263, + 264, 265, -1, -1, -1, 269, -1, -1, 64, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, 295, 296, -1, -1, 91, -1, -1, -1, 303, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, + -1, 315, 316, -1, -1, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, + 126, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, + 291, 292, 293, 294, 295, 296, -1, -1, 272, 273, + 274, 275, 303, -1, -1, 279, -1, -1, -1, -1, + -1, -1, 313, 33, 315, 316, 36, 37, 38, -1, + 40, 41, 42, 43, -1, 45, 300, 301, 302, 257, + 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, + -1, 269, -1, -1, 64, -1, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + -1, 91, -1, -1, -1, 303, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 313, 33, 315, 316, 36, + 37, 38, -1, 40, -1, 42, 43, -1, 45, -1, + -1, 257, 258, 259, 260, 261, 126, 263, 264, 265, + -1, -1, -1, 269, -1, -1, -1, 64, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, -1, -1, -1, 91, -1, -1, 303, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 313, 44, 315, + 316, -1, -1, 41, -1, -1, 44, -1, -1, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, 126, + 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, - 300, 263, 264, 265, -1, -1, -1, 269, -1, -1, - -1, -1, -1, -1, -1, -1, 126, -1, 280, -1, - 282, 283, 284, 285, 286, -1, 41, -1, -1, 291, - 292, 293, 294, 295, 296, -1, -1, -1, -1, -1, - 302, -1, -1, 58, 59, -1, -1, -1, 63, 311, - -1, 313, 314, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, 41, -1, -1, - 44, 291, 292, 293, 294, 295, 296, -1, -1, -1, - -1, -1, 302, -1, 58, 59, -1, -1, -1, 63, - -1, 311, -1, 313, 314, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, 33, -1, -1, - 63, -1, 302, -1, -1, 41, -1, -1, -1, 45, - -1, 311, 48, 313, 314, 51, -1, -1, -1, 55, - 56, 57, 58, 59, -1, -1, -1, 63, 64, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 102, 272, 273, 274, - 275, -1, -1, -1, 279, 41, 281, -1, 44, -1, - -1, 93, 287, 288, 289, 290, -1, -1, -1, -1, - -1, -1, 58, 59, -1, 300, 301, 63, 303, 304, - 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, - 315, 316, 317, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 191, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, -1, -1, + -1, -1, 41, 303, -1, 44, -1, -1, -1, -1, + -1, -1, -1, 313, -1, 315, 316, -1, -1, 58, + 59, -1, 41, -1, 63, 44, -1, -1, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, 58, + 59, -1, 269, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 280, 93, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, -1, 33, -1, 93, 41, 303, -1, 44, -1, + 41, -1, -1, -1, 45, -1, 313, 48, 315, 316, + 51, -1, 58, 59, 55, 56, 57, 58, 59, -1, + -1, -1, 63, 64, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, -1, -1, -1, 93, -1, 287, + 288, 289, 290, -1, 300, 301, 302, -1, 304, -1, + -1, 102, 300, 301, 302, -1, 304, 305, 306, 307, + 308, 309, 310, 311, -1, -1, 314, -1, -1, 317, + 318, 319, -1, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 93, + -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, 193, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, 41, 314, -1, 44, 317, 318, + 319, 300, 301, 302, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, -1, -1, -1, -1, 280, + -1, -1, 41, -1, -1, 44, 93, -1, -1, -1, + -1, -1, -1, -1, 300, 301, 302, -1, -1, 58, + 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, + -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 41, -1, -1, 44, 93, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, 309, -1, -1, 312, -1, - -1, 315, 316, 317, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, 93, 44, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, - 276, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 93, -1, 279, 41, 281, - -1, 44, -1, 309, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, 58, 59, -1, 300, 301, - 63, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, 315, 316, 317, 272, 273, 274, 275, - -1, -1, -1, 279, 41, 281, -1, 44, -1, -1, - 93, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 58, 59, -1, 300, 301, 63, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, 93, -1, -1, -1, -1, 41, -1, - -1, 44, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, 58, 59, 315, 316, 317, - 63, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, 41, -1, - 93, 44, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, 58, 59, 315, 316, 317, - 63, -1, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - 93, -1, -1, -1, -1, -1, -1, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - -1, -1, 315, 316, 317, 272, 273, 274, 275, -1, - 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, - -1, -1, 63, 300, 301, -1, 303, 304, 305, 306, - 307, 308, 309, -1, -1, 312, -1, -1, 315, 316, - 317, -1, 272, 273, 274, 275, -1, -1, -1, 279, - -1, 281, 93, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, 41, -1, -1, 44, - 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, 58, 59, 315, 316, 317, 63, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, 93, -1, - -1, -1, -1, 41, -1, -1, 44, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - 58, 59, 315, 316, 317, 63, -1, -1, -1, 272, - 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, 41, -1, 93, 44, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 312, - 58, 59, 315, 316, 317, 63, -1, -1, -1, -1, + -1, -1, 93, -1, -1, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, -1, -1, + 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, 317, 318, 319, + -1, -1, -1, -1, -1, 272, 273, 274, 275, 93, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, 310, 311, -1, -1, 314, -1, -1, + 317, 318, 319, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, -1, -1, 314, -1, -1, 317, 318, + 319, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, + -1, -1, -1, -1, -1, -1, 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, 93, -1, + -1, -1, -1, -1, -1, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 41, -1, + 314, 44, -1, 317, 318, 319, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 93, 41, -1, -1, 44, - -1, 272, 273, 274, 275, 41, -1, -1, 279, -1, - 281, -1, -1, 58, 59, -1, 287, 288, 289, 290, - -1, -1, 58, 59, -1, -1, -1, 63, -1, 300, - 301, -1, 303, 304, 305, 306, 307, 308, 309, -1, - -1, 312, -1, -1, 315, 316, 317, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - -1, -1, -1, 41, -1, -1, 44, 272, 273, 274, - 275, 41, -1, -1, 279, -1, 281, -1, -1, -1, - 58, 59, 287, 288, 289, 290, -1, -1, 58, 59, - -1, -1, -1, 63, -1, 300, 301, -1, 303, 304, - 305, 306, 307, 308, 309, -1, -1, 312, -1, -1, - 315, 316, 317, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, 41, 281, -1, 44, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 58, - 59, -1, 300, 301, 63, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, - -1, -1, -1, -1, 272, 273, 274, 275, -1, 41, - -1, 279, 44, 281, 93, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, -1, - -1, 63, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, 312, -1, -1, 315, 316, 317, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, 93, -1, -1, 279, -1, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, - -1, 287, 288, 289, 290, 300, 301, -1, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, 312, -1, -1, 315, - 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 272, 273, 274, 275, -1, -1, - -1, 279, 272, 273, 274, 275, -1, 41, -1, 279, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, 314, + -1, -1, 317, 318, 319, -1, -1, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, -1, -1, 314, + -1, -1, 317, 318, 319, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, + -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, 302, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 93, + -1, 314, -1, -1, 317, 318, 319, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, -1, -1, 63, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, -1, -1, 314, + -1, -1, 317, 318, 319, -1, 272, 273, 274, 275, + 41, -1, -1, 279, 93, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 58, 59, -1, + -1, -1, 63, -1, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 310, 311, -1, -1, 314, -1, + -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, + -1, 41, 93, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, -1, 314, -1, -1, 317, 318, + 319, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, -1, -1, 63, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, -1, -1, + 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, + -1, 41, -1, -1, 44, 93, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, + 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, + 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 93, -1, 314, -1, -1, 317, 318, + 319, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, + -1, -1, 272, 273, 274, 275, -1, 41, 93, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, - 290, -1, 300, 301, 58, 59, -1, -1, -1, 63, - 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 312, -1, -1, 315, 316, 317, -1, -1, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, 317, 318, 319, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, - 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, 58, 59, -1, -1, -1, - 63, 300, 301, -1, 303, 304, 305, 306, 307, 308, - 309, -1, -1, 312, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - 93, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - 312, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, 93, -1, -1, + -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, 58, + 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 300, 301, 302, -1, 304, 305, 306, 307, + 308, 309, 310, 311, 93, -1, 314, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, -1, -1, 314, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, -1, 44, 93, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + -1, 41, -1, -1, 44, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 58, 59, + -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, -1, 93, -1, -1, 41, -1, -1, 44, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, -1, -1, 279, -1, 281, 93, -1, + -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, + -1, 41, -1, -1, 44, -1, 300, 301, 302, -1, + 304, 305, 306, 307, 308, 309, 310, 311, 58, 59, + -1, -1, -1, 63, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, -1, -1, 41, + -1, -1, 44, 93, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 41, 93, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, -1, -1, -1, -1, -1, 41, - 300, 301, 44, 303, 304, 305, 306, 307, 308, 309, - -1, -1, 93, -1, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, - -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, 309, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, - 44, -1, -1, -1, -1, 93, -1, -1, -1, 272, - 273, 274, 275, -1, 58, 59, 279, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, -1, -1, 93, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, - -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, 308, 309, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 41, - 281, -1, 44, 93, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, 58, 59, -1, 300, - 301, 63, 303, 304, 305, 306, 307, 308, 309, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, 93, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 308, 309, -1, -1, - -1, -1, -1, -1, 272, 273, 274, 275, -1, 41, - -1, 279, 44, 281, -1, -1, -1, 93, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, -1, - -1, 63, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, - -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 300, 301, -1, 303, - 304, 305, 306, 307, 308, -1, -1, -1, -1, -1, + 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 93, -1, -1, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, 58, 59, 279, -1, 281, 63, -1, -1, + -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, 93, -1, 58, 59, -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, 279, - -1, 281, 63, -1, -1, -1, -1, 287, 288, -1, + -1, 281, 63, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 300, 301, 93, 303, 304, 305, 306, 307, 308, -1, - -1, -1, 93, -1, -1, 41, -1, -1, 44, -1, + 300, 301, 302, -1, 304, 305, 306, 307, 308, 309, + 310, -1, 93, -1, -1, 41, -1, -1, 44, -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, 58, 59, -1, 287, 288, 63, -1, -1, + -1, -1, 58, 59, -1, 287, 288, 63, 290, -1, -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, 272, 273, 274, 275, - -1, 41, -1, 279, 44, 281, -1, 93, -1, -1, - -1, 287, 288, -1, -1, -1, -1, 93, 58, 59, - -1, -1, -1, 63, 300, 301, -1, 303, 304, 305, - 306, 307, -1, -1, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, - -1, -1, -1, 93, -1, 287, 288, -1, -1, -1, - -1, -1, 58, 59, -1, -1, -1, 63, 300, 301, - -1, 303, 304, 305, 306, 307, -1, 41, -1, -1, - 44, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, 279, -1, 281, 58, 59, -1, 93, -1, 287, - 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 300, 301, -1, 303, 304, 305, 306, 307, - -1, 272, 273, 274, 275, -1, -1, -1, 279, 93, - -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, - 281, -1, -1, -1, -1, -1, -1, 288, -1, 300, - 301, -1, 303, -1, -1, -1, -1, -1, -1, 300, - 301, -1, 303, 304, 305, 306, 307, -1, -1, -1, + 302, -1, 304, 305, 306, 307, 308, 309, 310, -1, + -1, -1, -1, -1, -1, -1, 41, 93, -1, 44, + -1, 272, 273, 274, 275, -1, -1, 93, 279, -1, + 281, -1, -1, 58, 59, -1, 287, 288, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 310, + -1, -1, -1, -1, 41, -1, -1, 44, 93, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 58, 59, 279, -1, 281, 63, -1, -1, -1, + -1, 287, 288, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, -1, 287, 288, -1, -1, + -1, -1, 41, -1, -1, 44, 93, -1, -1, 300, + 301, 302, -1, 304, 305, 306, 307, 308, 309, 58, + 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, 272, 273, 274, 275, - -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 304, 305, - 306, 307, -1, -1, 300, 301, -1, 303, 304, 305, - 306, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 41, -1, 279, 44, 281, 272, 273, 274, 275, + -1, 287, 288, 279, 93, 281, -1, -1, 58, 59, + -1, 287, 288, 63, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, 300, 301, 302, -1, 304, 305, + 306, 307, 308, 309, -1, -1, -1, 272, 273, 274, + 275, -1, -1, 93, 279, -1, 281, -1, -1, -1, + -1, -1, -1, 288, -1, -1, -1, -1, 41, -1, + -1, 44, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, 307, 308, 309, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 93, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, 300, 301, 302, -1, 304, 305, 306, + 307, 308, 309, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 300, 301, 302, -1, 304, 305, 306, 307, 308, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 300, 301, -1, 303, 304, 305, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, + 300, 301, 302, -1, 304, 305, 306, 307, -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, 272, + 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 300, 301, -1, 303, 272, 273, - 274, 275, -1, -1, -1, 279, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 300, 301, 302, + -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 300, 301, + -1, -1, -1, -1, -1, 300, 301, 302, -1, 304, + 305, 306, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 317 +#define YYMAXTOKEN 319 #if YYDEBUG static char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1177,9 +1275,9 @@ static char *yyname[] = { "ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", "CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP", "RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY", -"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR", -"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", -"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", +"MYSUB","COLONATTR","PREC_LOW","OROP","DOROP","ANDOP","NOTOP","ASSIGNOP","OROR", +"DORDOR","ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN", +"POWOP","PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; static char *yyrule[] = { "$accept : prog", @@ -1257,6 +1355,7 @@ static char *yyrule[] = { "use : USE startsub $$1 WORD WORD listexpr ';'", "expr : expr ANDOP expr", "expr : expr OROP expr", +"expr : expr DOROP expr", "expr : argexpr", "argexpr : argexpr ','", "argexpr : argexpr ',' term", @@ -1296,6 +1395,7 @@ static char *yyrule[] = { "termbinop : term DOTDOT term", "termbinop : term ANDAND term", "termbinop : term OROR term", +"termbinop : term DORDOR term", "termbinop : term MATCHOP term", "termunop : '-' term", "termunop : '+' term", @@ -1396,7 +1496,7 @@ static char *yyrule[] = { #define YYMAXDEPTH 500 #endif #endif -#line 793 "perly.y" +#line 797 "perly.y" /* PROGRAM */ /* more stuff added to make perly_c.diff easier to apply */ @@ -1406,7 +1506,7 @@ static char *yyrule[] = { #endif #define yyparse() Perl_yyparse(pTHX) -#line 1409 "perly.c" +#line 1509 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -1943,148 +2043,148 @@ case 74: #line 421 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 76: -#line 427 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +case 75: +#line 423 "perly.y" +{ yyval.opval = newLOGOP(OP_DOR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 77: #line 429 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } +break; +case 78: +#line 431 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 79: -#line 435 "perly.y" +case 80: +#line 437 "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 80: -#line 438 "perly.y" +case 81: +#line 440 "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 81: -#line 441 "perly.y" +case 82: +#line 443 "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 82: -#line 446 "perly.y" +case 83: +#line 448 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, scalar(yyvsp[-2].opval), newUNOP(OP_METHOD, 0, yyvsp[0].opval))); } break; -case 83: -#line 450 "perly.y" +case 84: +#line 452 "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 84: -#line 455 "perly.y" +case 85: +#line 457 "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 85: -#line 460 "perly.y" -{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } -break; case 86: #line 462 "perly.y" -{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 87: #line 464 "perly.y" -{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } +{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 88: #line 466 "perly.y" +{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); } +break; +case 89: +#line 468 "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 91: -#line 480 "perly.y" -{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } -break; case 92: #line 482 "perly.y" -{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); } break; case 93: #line 484 "perly.y" +{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +break; +case 94: +#line 486 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 94: -#line 488 "perly.y" +case 95: +#line 490 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 95: -#line 492 "perly.y" +case 96: +#line 494 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 96: -#line 495 "perly.y" +case 97: +#line 497 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 97: -#line 500 "perly.y" +case 98: +#line 502 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); PL_expect = XOPERATOR; } break; -case 98: -#line 505 "perly.y" +case 99: +#line 507 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 99: -#line 508 "perly.y" +case 100: +#line 510 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 100: -#line 513 "perly.y" +case 101: +#line 515 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-3].opval)))); } break; -case 101: -#line 517 "perly.y" +case 102: +#line 519 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-2].opval))); } break; -case 102: -#line 523 "perly.y" -{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } -break; case 103: #line 525 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } +{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; case 104: #line 527 "perly.y" +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } +break; +case 105: +#line 529 "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 105: -#line 531 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } -break; case 106: #line 533 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } @@ -2107,86 +2207,94 @@ case 110: break; case 111: #line 543 "perly.y" -{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 112: #line 545 "perly.y" -{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; case 113: #line 547 "perly.y" -{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 114: #line 549 "perly.y" -{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } +{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 115: -#line 554 "perly.y" -{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } +#line 551 "perly.y" +{ yyval.opval = newLOGOP(OP_DOR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 116: -#line 556 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 553 "perly.y" +{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; case 117: #line 558 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; case 118: #line 560 "perly.y" -{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +{ yyval.opval = yyvsp[0].opval; } break; case 119: #line 562 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +break; +case 120: +#line 564 "perly.y" +{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +break; +case 121: +#line 566 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 120: -#line 565 "perly.y" +case 122: +#line 569 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 121: -#line 568 "perly.y" +case 123: +#line 572 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 122: -#line 571 "perly.y" +case 124: +#line 575 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 123: -#line 578 "perly.y" -{ yyval.opval = newANONLIST(yyvsp[-1].opval); } -break; -case 124: -#line 580 "perly.y" -{ yyval.opval = newANONLIST(Nullop); } -break; case 125: #line 582 "perly.y" -{ yyval.opval = newANONHASH(yyvsp[-2].opval); } +{ yyval.opval = newANONLIST(yyvsp[-1].opval); } break; case 126: #line 584 "perly.y" -{ yyval.opval = newANONHASH(Nullop); } +{ yyval.opval = newANONLIST(Nullop); } break; case 127: #line 586 "perly.y" -{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +{ yyval.opval = newANONHASH(yyvsp[-2].opval); } break; case 128: -#line 592 "perly.y" -{ yyval.opval = dofile(yyvsp[0].opval); } +#line 588 "perly.y" +{ yyval.opval = newANONHASH(Nullop); } break; case 129: -#line 594 "perly.y" -{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +#line 590 "perly.y" +{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 130: #line 596 "perly.y" +{ yyval.opval = dofile(yyvsp[0].opval); } +break; +case 131: +#line 598 "perly.y" +{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +break; +case 132: +#line 600 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2195,8 +2303,8 @@ case 130: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 131: -#line 604 "perly.y" +case 133: +#line 608 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2206,50 +2314,42 @@ case 131: scalar(yyvsp[-3].opval) )))); dep();} break; -case 132: -#line 613 "perly.y" +case 134: +#line 617 "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 133: -#line 617 "perly.y" +case 135: +#line 621 "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 629 "perly.y" -{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } -break; -case 139: -#line 631 "perly.y" -{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } -break; case 140: #line 633 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; case 141: #line 635 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; case 142: #line 637 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +{ yyval.opval = yyvsp[0].opval; } break; case 143: #line 639 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 144: #line 641 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 145: #line 643 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(newNULLLIST()); } break; case 146: #line 645 "perly.y" @@ -2261,7 +2361,7 @@ case 147: break; case 148: #line 649 "perly.y" -{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} +{ yyval.opval = yyvsp[0].opval; } break; case 149: #line 651 "perly.y" @@ -2269,22 +2369,30 @@ case 149: break; case 150: #line 653 "perly.y" -{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } +{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 151: #line 655 "perly.y" -{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } +{ yyval.opval = yyvsp[0].opval; } break; case 152: #line 657 "perly.y" +{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } +break; +case 153: +#line 659 "perly.y" +{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } +break; +case 154: +#line 661 "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 153: -#line 663 "perly.y" +case 155: +#line 667 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2292,180 +2400,180 @@ case 153: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); PL_expect = XOPERATOR; } break; -case 154: -#line 670 "perly.y" +case 156: +#line 674 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 155: -#line 672 "perly.y" +case 157: +#line 676 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; -case 156: -#line 674 "perly.y" +case 158: +#line 678 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; -case 157: -#line 676 "perly.y" +case 159: +#line 680 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; -case 158: -#line 679 "perly.y" +case 160: +#line 683 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; -case 159: -#line 682 "perly.y" +case 161: +#line 686 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; -case 160: -#line 685 "perly.y" -{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } -break; -case 161: -#line 687 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } -break; case 162: #line 689 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 163: #line 691 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 164: #line 693 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 165: #line 695 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 166: -#line 698 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 697 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 167: -#line 700 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, 0); } +#line 699 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 168: #line 702 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - scalar(yyvsp[0].opval)); } +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 169: -#line 705 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } +#line 704 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 170: -#line 707 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +#line 706 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + scalar(yyvsp[0].opval)); } break; case 171: #line 709 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } +{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 172: #line 711 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } +{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 175: -#line 718 "perly.y" -{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } +case 173: +#line 713 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 176: -#line 720 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +case 174: +#line 715 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 177: -#line 725 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +#line 722 "perly.y" +{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); } break; case 178: -#line 727 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +#line 724 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 179: #line 729 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 180: #line 731 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = sawparens(newNULLLIST()); } break; case 181: #line 733 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 182: -#line 738 "perly.y" -{ yyval.opval = Nullop; } +#line 735 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 183: -#line 740 "perly.y" +#line 737 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 184: -#line 744 "perly.y" +#line 742 "perly.y" { yyval.opval = Nullop; } break; case 185: -#line 746 "perly.y" +#line 744 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 186: #line 748 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +{ yyval.opval = Nullop; } break; case 187: -#line 754 "perly.y" -{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } +#line 750 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 188: -#line 758 "perly.y" -{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } +#line 752 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; case 189: -#line 762 "perly.y" -{ yyval.opval = newSVREF(yyvsp[0].opval); } +#line 758 "perly.y" +{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; case 190: -#line 766 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 762 "perly.y" +{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 191: -#line 770 "perly.y" -{ yyval.opval = newHVREF(yyvsp[0].opval); } +#line 766 "perly.y" +{ yyval.opval = newSVREF(yyvsp[0].opval); } break; case 192: -#line 774 "perly.y" +#line 770 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; case 193: -#line 778 "perly.y" -{ yyval.opval = newGVREF(0,yyvsp[0].opval); } +#line 774 "perly.y" +{ yyval.opval = newHVREF(yyvsp[0].opval); } break; case 194: -#line 783 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 778 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 195: -#line 785 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 782 "perly.y" +{ yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 196: #line 787 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 197: -#line 790 "perly.y" +#line 789 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } +break; +case 198: +#line 791 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 199: +#line 794 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2459 "perly.c" +#line 2567 "perly.c" } yyssp -= yym; yystate = *yyssp; diff --git a/vms/perly_h.vms b/vms/perly_h.vms index ff89cff..d45735f 100644 --- a/vms/perly_h.vms +++ b/vms/perly_h.vms @@ -44,23 +44,25 @@ #define COLONATTR 298 #define PREC_LOW 299 #define OROP 300 -#define ANDOP 301 -#define NOTOP 302 -#define ASSIGNOP 303 -#define OROR 304 -#define ANDAND 305 -#define BITOROP 306 -#define BITANDOP 307 -#define SHIFTOP 308 -#define MATCHOP 309 -#define UMINUS 310 -#define REFGEN 311 -#define POWOP 312 -#define PREINC 313 -#define PREDEC 314 -#define POSTINC 315 -#define POSTDEC 316 -#define ARROW 317 +#define DOROP 301 +#define ANDOP 302 +#define NOTOP 303 +#define ASSIGNOP 304 +#define OROR 305 +#define DORDOR 306 +#define ANDAND 307 +#define BITOROP 308 +#define BITANDOP 309 +#define SHIFTOP 310 +#define MATCHOP 311 +#define UMINUS 312 +#define REFGEN 313 +#define POWOP 314 +#define PREINC 315 +#define PREDEC 316 +#define POSTINC 317 +#define POSTDEC 318 +#define ARROW 319 #endif /* PERL_CORE */ typedef union { diff --git a/win32/Makefile b/win32/Makefile index 0877f4d..746beba 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -5,7 +5,7 @@ # MS Platform SDK 64-bit compiler and tools **experimental** # # This is set up to build a perl.exe that runs off a shared library -# (perl58.dll). Also makes individual DLLs for the XS extensions. +# (perl59.dll). Also makes individual DLLs for the XS extensions. # ## @@ -431,8 +431,8 @@ $(o).dll: # makedef.pl must be updated if this changes, and this should normally # only change when there is an incompatible revision of the public API. -PERLIMPLIB = ..\perl58.lib -PERLDLL = ..\perl58.dll +PERLIMPLIB = ..\perl59.lib +PERLDLL = ..\perl59.dll MINIPERL = ..\miniperl.exe MINIDIR = .\mini diff --git a/win32/makefile.mk b/win32/makefile.mk index d2f76e7..07e4cc1 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -7,7 +7,7 @@ # MS Platform SDK 64-bit compiler and tools **experimental** # # This is set up to build a perl.exe that runs off a shared library -# (perl58.dll). Also makes individual DLLs for the XS extensions. +# (perl59.dll). Also makes individual DLLs for the XS extensions. # ## @@ -624,7 +624,7 @@ CFGH_TMPL = config_H.bc CFGSH_TMPL = config.gc CFGH_TMPL = config_H.gc -PERLIMPLIB = ..\libperl58$(a) +PERLIMPLIB = ..\libperl59$(a) .ELSE @@ -640,8 +640,8 @@ CFGH_TMPL = config_H.vc # makedef.pl must be updated if this changes, and this should normally # only change when there is an incompatible revision of the public API. -PERLIMPLIB *= ..\perl58$(a) -PERLDLL = ..\perl58.dll +PERLIMPLIB *= ..\perl59$(a) +PERLDLL = ..\perl59.dll XCOPY = xcopy /f /r /i /d RCOPY = xcopy /f /r /i /e /d diff --git a/wince/Makefile.ce b/wince/Makefile.ce index 91e4780..6339c10 100644 --- a/wince/Makefile.ce +++ b/wince/Makefile.ce @@ -3,8 +3,8 @@ # Time-stamp: <26/10/01 15:10:06 keuchel@keuchelnt> SRCDIR = .. -PV = 58 -INST_VER = 5.8.0 +PV = 59 +INST_VER = 5.9.0 # INSTALL_ROOT specifies a path where this perl will be installed on CE device INSTALL_ROOT=/netzwerk/sprache/perl