From: millert Date: Thu, 6 Apr 2000 16:08:14 +0000 (+0000) Subject: virgin perl 5.6.0 X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=c8ca900353947dc5d441eb0530d040a27377e87a;p=openbsd virgin perl 5.6.0 --- diff --git a/gnu/usr.bin/perl/AUTHORS b/gnu/usr.bin/perl/AUTHORS new file mode 100644 index 00000000000..f978b51bd89 --- /dev/null +++ b/gnu/usr.bin/perl/AUTHORS @@ -0,0 +1,120 @@ +# Two sections: the real one and the virtual one. +# The real section has three \t+ fields: alias, name, email. +# The sections are separated by one or more empty lines. +# The virtual section (each record two \t+ separated fields) builds +# meta-aliases based on the real section. + +alan.burlison Alan Burlison Alan.Burlison@UK.Sun.com +allen Norton T. Allen allen@huarp.harvard.edu +bradapp Brad Appleton bradapp@enteract.com +cbail Charles Bailey bailey@newman.upenn.edu +dgris Daniel Grisinger dgris@dimensional.com +dmulholl Daniel Yacob dmulholl@cs.indiana.edu +dogcow Tom Spindler dogcow@merit.edu +domo Dominic Dunlop domo@slipper.ip.lu +doug Doug MacEachern dougm@pobox.com +doughera Andy Dougherty doughera@lafcol.lafayette.edu +gbarr Graham Barr gbarr@ti.com +gerti Gerd Knops gerti@BITart.com +gibreel Stephen Zander gibreel@pobox.com +gnat Nathan Torkington gnat@frii.com +gsar Gurusamy Sarathy gsar@activestate.com +hansmu Hans Mulder hansmu@xs4all.nl +ilya Ilya Zakharevich ilya@math.ohio-state.edu +jbuehler Joe Buehler jbuehler@hekimian.com +jfs John Stoffel jfs@fluent.com +jhi Jarkko Hietaniemi jhi@iki.fi +jon Jon Orwant orwant@media.mit.edu +jvromans Johan Vromans jvromans@squirrel.nl +k Andreas Koenig andreas.koenig@franz.ww.tu-berlin.de +kjahds Kenneth Albanowski kjahds@kjahds.com +krishna Krishna Sethuraman krishna@sgi.com +kstar Kurt D. Starsinic kstar@isinet.com +lstein Lincoln D. Stein lstein@genome.wi.mit.edu +lutherh Luther Huffman lutherh@stratcom.com +lutz Mark P. Lutz mark.p.lutz@boeing.com +lwall Larry Wall larry@wall.org +makemaker MakeMaker list makemaker@franz.ww.tu-berlin.de +mbiggar Mark A Biggar mab@wdl.loral.com +mbligh Martin J. Bligh mbligh@sequent.com +mike Mike Stok mike@stok.co.uk +millert Todd Miller millert@openbsd.org +laszlo.molnar Laszlo Molnar Laszlo.Molnar@eth.ericsson.se +mpeix Mark Bixby markb@cccd.edu +muir David Muir Sharnoff muir@idiom.com +neale Neale Ferguson neale@VMA.TABNSW.COM.AU +nik Nick Ing-Simmons nik@tiuk.ti.com +okamoto Jeff Okamoto okamoto@corp.hp.com +paul_green Paul Green Paul_Green@stratus.com +pmarquess Paul Marquess Paul.Marquess@btinternet.com +pomeranz Hal Pomeranz pomeranz@netcom.com +pudge Chris Nandor pudge@pobox.com +pueschel Norbert Pueschel pueschel@imsdd.meb.uni-bonn.de +pvhp Peter Prymmer pvhp@forte.com +raphael Raphael Manfredi Raphael_Manfredi@pobox.com +rdieter Rex Dieter rdieter@math.unl.edu +rsanders Robert Sanders Robert.Sanders@linux.org +roberto Ollivier Robert roberto@keltia.freenix.fr +roderick Roderick Schertler roderick@argon.org +roehrich Dean Roehrich roehrich@cray.com +tsanders Tony Sanders sanders@bsdi.com +schinder Paul Schinder schinder@pobox.com +scotth Scott Henry scotth@sgi.com +seibert Greg Seibert seibert@Lynx.COM +spider Spider Boardman spider@Orb.Nashua.NH.US +smccam Stephen McCamant smccam@uclink4.berkeley.edu +sugalskd Dan Sugalski sugalskd@osshe.edu +sundstrom David Sundstrom sunds@asictest.sc.ti.com +tchrist Tom Christiansen tchrist@perl.com +thomas.dorner Dorner Thomas Thomas.Dorner@start.de +timb Tim Bunce Tim.Bunce@ig.co.uk +tom.horsley Tom Horsley Tom.Horsley@mail.ccur.com +tye Tye McQueen tye@metronet.com +wayne.thompson Wayne Thompson Wayne.Thompson@Ebay.sun.com + +PUMPKING gsar +aix jhi +amiga pueschel +beos dogcow +bsdos tsanders +cfg jhi +cgi lstein +complex jhi,raphael +cpan k +cxux tom.horsley +cygwin win32 +dec_osf jhi,spider +dgux roderick +doc tchrist +dos laszlo.molnar +dynix/ptx mbligh +ebcdic vms,vmesa,posixbc +filespec kjahds +freebsd roberto +hpux okamoto,jhi +irix scotth,krishna,jfs,kstar +jpl gibreel +linux kjahds,kstar +locale jhi,domo +lynxos lynxos +machten domo +mm makemaker +mvs pvhp +netbsd jhi +openbsd millert +os2 ilya +plan9 lutherl +posix-bc thomas.dorner +powerux tom.horsley +qnx allen +solaris doughera,alan.burlison +step gerti,hansmu,rdieter +sunos4 doughera +svr4 tye +unicos jhi,lutz +uwin jbuehler +vmesa neale +vms sugalskd,cbail +vos paul_green +warn pmarquess +win32 gsar diff --git a/gnu/usr.bin/perl/Changes5.005 b/gnu/usr.bin/perl/Changes5.005 new file mode 100644 index 00000000000..d0d19a26ced --- /dev/null +++ b/gnu/usr.bin/perl/Changes5.005 @@ -0,0 +1,19336 @@ +Please note: This file provides a summary of significant changes +between versions and sub-versions of Perl, not necessarily a complete +list of each modification. If you'd like more detailed information, +please consult the comments in the patches on which the relevant +release of Perl is based. (Patches can be found on any CPAN +site, in the .../src/5.0 directory for full version releases, +or in the .../src/5/0/unsupported directory for sub-version +releases.) + + + --------------- + CAST AND CREW + --------------- + +To give due honor to those who have made Perl what is is today, +here are some of the more common names in the Changes file, and their +current addresses (as of July 1998): + + Gisle Aas + Abigail + Kenneth Albanowski + Russ Allbery + Spider Boardman + Tom Christiansen + Hallvard B Furuseth + M. J. T. Guy + Jarkko Hietaniemi + Nick Ing-Simmons + Andreas Koenig + Doug MacEachern + Paul Marquess + Stephen McCamant + Laszlo Molnar + Hans Mulder + Matthias Neeracher + Jeff Okamoto + Ulrich Pfeifer + Tom Phoenix + Joshua Pritikin + Norbert Pueschel + Dean Roehrich + Hugo van der Sanden + Roderick Schertler + Kurt D. Starsinic + Dan Sugalski + Larry W. Virden + Ilya Zakharevich + +And the Keepers of the Patch Pumpkin: + + Charles Bailey + Graham Barr + Malcolm Beattie + Tim Bunce + Andy Dougherty + Gurusamy Sarathy + Chip Salzenberg + +And, of course, the Author of Perl: + + Larry Wall + + +NOTE: Each change entry shows the change number; who checked it into the +repository; when; description of the change; which branch the change +happened in; and the affected files. The file lists have a short symbolic +indicator: + + ! modified + + added + - deleted + +> branched (from elsewhere) + !> merged changes (from elsewhere) + + +---------------- +Version 5.005_03 Third maintenance release of 5.005 +---------------- + +____________________________________________________________________________ +[ 3198] By: gbarr on 1999/03/28 22:21:49 + Log: redo #3193 which #3195 undid + Branch: maint-5.005/perl + ! pod/perlhist.pod +____________________________________________________________________________ +[ 3197] By: gbarr on 1999/03/28 21:04:04 + Log: Updated CPAN.pm to 1.48 + Branch: maint-5.005/perl + ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm +____________________________________________________________________________ +[ 3196] By: gbarr on 1999/03/28 17:21:27 + Log: AIX hints update from Jarkko + Branch: maint-5.005/perl + ! hints/aix.sh +____________________________________________________________________________ +[ 3195] By: jhi on 1999/03/28 16:42:54 + Log: Update perlhist on 5_03. + Branch: maint-5.005/perl + ! pod/perlhist.pod +____________________________________________________________________________ +[ 3193] By: gsar on 1999/03/28 09:46:29 + Log: =end needs matching =begin (or installhtml will croak) + Branch: maint-5.005/perl + ! pod/perlhist.pod +____________________________________________________________________________ +[ 3192] By: gsar on 1999/03/28 09:10:15 + Log: update pod/Makefile + Branch: maint-5.005/perl + ! pod/Makefile +____________________________________________________________________________ +[ 3191] By: gsar on 1999/03/28 08:43:47 + Log: integrate change#3180 from mainline + + fix bogus OPf_REF context for the BLOCK in C + (sometimes caused bizarreness in the BLOCK) + Branch: maint-5.005/perl + +> t/op/grep.t + !> MANIFEST op.c +____________________________________________________________________________ +[ 3190] By: gsar on 1999/03/28 08:29:51 + Log: integrate change#3147 from mainline + + warn about newfangled vfork() caveats + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 3189] By: gsar on 1999/03/28 08:22:00 + Log: various pod niggles + Branch: maint-5.005/perl + ! pod/perl.pod pod/perldebug.pod pod/perldiag.pod + ! pod/perlfunc.pod pod/perlhist.pod +____________________________________________________________________________ +[ 3188] By: gsar on 1999/03/28 07:37:43 + Log: integrate binary compatible variant of change#3098 from mainline + Branch: maint-5.005/perl + ! op.c perl.h t/base/lex.t toke.c +____________________________________________________________________________ +[ 3187] By: gsar on 1999/03/28 07:31:16 + Log: regularize CAPI declarations (CAPI extensions now build under + the Borland compiler) + Branch: maint-5.005/perl + ! win32/GenCAPI.pl +____________________________________________________________________________ +[ 3186] By: gsar on 1999/03/28 07:26:33 + Log: ensure XS_LOCKS stuff happens *before* XSUB is entered under + -DPERL_CAPI + Branch: maint-5.005/perl + ! XSlock.h win32/GenCAPI.pl win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 3185] By: gbarr on 1999/03/28 06:37:41 + Log: integrate change #2846 from mainline + + a modified version of suggested patch for pack template 'Z'; added docs + From: "Valeriy E. Ushakov" + Date: Mon, 16 Jun 1997 03:00:31 +0400 (MSD) + Message-ID: <%lOHpzIuGV@snark.ptc.spbu.ru> + Subject: lack of pack/unpack letter with useful symmetry for C null delimited strings + Branch: maint-5.005/perl + ! pod/perldelta.pod pod/perlfunc.pod pp.c + !> t/op/pack.t +____________________________________________________________________________ +[ 3184] By: gbarr on 1999/03/28 06:35:50 + Log: integrate change # 3160 from mainline + + better description of OP_UNSTACK (s/unstack/iteration finalizer/) + Branch: maint-5.005/perl + ! opcode.h opcode.pl +____________________________________________________________________________ +[ 3182] By: gbarr on 1999/03/28 03:40:28 + Log: Integrate changes #3067 and #3106 from mainline + + exempt $foo::a,$foo::b from warnings only if sort() was seen in package foo + From: Graham Barr + Date: Wed, 3 Mar 1999 17:23:56 -0600 + Message-ID: <19990303172356.F7442@dal.asp.ti.com> + Subject: Re: 'use strict' doesn't work for one-letter variables + + change#3067 failed package.t due to needless creation of $a and $b; + fixed to do that only for C, not C + Branch: maint-5.005/perl + ! gv.c op.c t/pragma/warn-1global +____________________________________________________________________________ +[ 3179] By: gsar on 1999/03/28 02:14:04 + Log: fix thread segfault when passing large number of arguments to child + a la Cnew($foo, 1..1000)> + Branch: maint-5.005/perl + ! ext/Thread/Thread.xs t/lib/thread.t +____________________________________________________________________________ +[ 3178] By: gbarr on 1999/03/28 01:39:23 + Log: fix $Config{'usethreads'} typo in perlthrtut + + From: Ian Maloney + Date: Thu, 25 Mar 1999 16:40:14 +0100 (MET) + Message-Id: <199903251540.QAA02439@wsblob.> + Subject: perlthrtut documentation error + Branch: maint-5.005/perl + ! pod/perlthrtut.pod +____________________________________________________________________________ +[ 3177] By: gbarr on 1999/03/28 01:09:59 + Log: Integrate #2910 from mainline + + slurping an empty file should return '' rather than undef, with + commensurate effects on ARGV processing + Branch: maint-5.005/perl + ! pod/perldelta.pod pp_hot.c sv.h + !> t/io/argv.t +____________________________________________________________________________ +[ 3176] By: gbarr on 1999/03/28 00:00:30 + Log: Integrate relevant doc changes from mainline + Branch: maint-5.005/perl + !> (integrate 34 files) +____________________________________________________________________________ +[ 3175] By: gbarr on 1999/03/27 19:20:32 + Log: Integrated #2352 and #2397 from mainline + + Implement $^C to allow perl access to -c flag - I think this + was agreed once... + + Update docs and English.pm for $^C + Branch: maint-5.005/perl + ! gv.c mg.c + !> lib/English.pm +____________________________________________________________________________ +[ 3174] By: gbarr on 1999/03/27 18:21:01 + Log: Update Copyright year + Branch: maint-5.005/perl + ! EXTERN.h INTERN.h README av.c av.h cop.h cv.h deb.c doio.c + ! doop.c dump.c form.h gv.c gv.h handy.h hv.c hv.h mg.c mg.h + ! op.c op.h perl.h perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c + ! regcomp.c regexec.c run.c scope.c sv.c sv.h toke.c util.c + ! util.h +____________________________________________________________________________ +[ 3173] By: gbarr on 1999/03/27 18:19:47 + Log: Update Test.pm to VERSION 1.122 from CPAN + Branch: maint-5.005/perl + ! lib/Test.pm +____________________________________________________________________________ +[ 3154] By: jhi on 1999/03/24 21:40:51 + Log: Reword the shared library search path (LD_LIBRARY_PATH) info + based on suggestions from Andy Dougherty. + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 3146] By: jhi on 1999/03/24 09:20:14 + Log: Bring in changes #2808 and #2812 (from mainline perl) + that enhance the perlbug checklist. + Branch: maint-5.005/perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 3130] By: jhi on 1999/03/23 22:02:23 + Log: Don't use config.msg to remind about the + LD_LIBRARY_PATH because Makefile.SH takes + care of that. + + Use shrplib in DEC O^W^Digital U^W^WTru64 UNIX. + This used to be the default but in some MT or another it + was dropped because of some transient error or another. + Branch: maint-5.005/perl + ! Configure hints/dec_osf.sh +____________________________________________________________________________ +[ 3122] By: jhi on 1999/03/19 21:12:14 + Log: Describe the new Benchmark feature in more detail. + Branch: cfgperl + ! pod/perldelta.pod + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 3121] By: jhi on 1999/03/19 08:16:12 + Log: AVAILABILITY tuning. + Branch: cfgperl + ! pod/perl.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3119] By: jhi on 1999/03/17 14:33:43 + Log: More Apollo fixes. + Branch: maint-5.005/perl + ! README.apollo hints/apollo.sh t/lib/io_udp.t +____________________________________________________________________________ +[ 3118] By: jhi on 1999/03/16 17:23:39 + Log: Nada. + Branch: maint-5.005/perl + ! README.apollo +____________________________________________________________________________ +[ 3117] By: jhi on 1999/03/16 17:18:49 + Log: Apollo DomainOS AVAILABILITY. + Branch: cfgperl + ! pod/perl.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3116] By: jhi on 1999/03/16 17:14:00 + Log: Apollo DomainOS patch + From: Johann Klasek + Subject: Re: DomainPerl + Date: Tue, 16 Mar 1999 17:46:32 +0100 + Message-ID: <19990316174632.A19759@euklid.auto.tuwien.ac.at> + Branch: maint-5.005/perl + + README.apollo apollo/netinet/in.h + ! MANIFEST hints/apollo.sh +____________________________________________________________________________ +[ 3115] By: jhi on 1999/03/16 14:23:54 + Log: From: Paul Marquess + To: Gurusamy Sarathy , + Graham Barr + Cc: Perl5 Porters , + "Paul.Marquess" + Subject: [PATCH 5.005_56 & 5.005_03_T6] Upgrade DB_File to version 1.65 + Date: Sun, 14 Mar 1999 14:43:57 -0000 + Message-Id: <199903141841.NAA17040@defender.perl.org> + Branch: maint-5.005/perl + ! ext/DB_File/Changes ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/typemap +____________________________________________________________________________ +[ 3114] By: jhi on 1999/03/16 12:42:20 + Log: Mention Rhapsody in 5.005_5X perldelta, + and in Rhapsody and Netware in 5.005_0X and 5.005_5X + *planned* AVAILABILITY. + Branch: cfgperl + ! pod/perl.pod pod/perldelta.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3113] By: jhi on 1999/03/16 10:38:53 + Log: perldelta niggling. + Branch: cfgperl + ! pod/perldelta.pod + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 3111] By: jhi on 1999/03/16 10:28:10 + Log: AVAILABILITY update: still mention PowerUX, + Novell Netware now has sources available. + Branch: cfgperl + ! pod/perl.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3105] By: jhi on 1999/03/12 15:54:57 + Log: Recognize the NetBSD packages collection. + Branch: maint-5.005/perl + ! hints/netbsd.sh +____________________________________________________________________________ +[ 3104] By: jhi on 1999/03/12 09:07:04 + Log: From: pvhp@forte.com (Peter Prymmer) + To: jhi@iki.fi, perl-mvs@perl.org, perlbug@perl.com + Subject: [PATCH MT6,_56] was Re: Not OK: perl 5.00503 +MAINT_TRIAL_6 on os390 06.00 (UNINSTALLED) + Date: Thu, 11 Mar 99 14:24:54 PST + Message-Id: <9903112224.AA24346@forte.com> + Branch: maint-5.005/perl + ! README.os390 t/lib/posix.t +____________________________________________________________________________ +[ 3102] By: jhi on 1999/03/10 11:01:20 + Log: From: pvhp@forte.com (Peter Prymmer) + To: perl5-porters@perl.org + Subject: [5.005_03-MT6]Patch: time passes + Date: Tue, 9 Mar 99 18:42:17 PST + Message-Id: <9903100242.AA29057@forte.com> + Branch: maint-5.005/perl + ! perl.c +____________________________________________________________________________ +[ 3101] By: jhi on 1999/03/10 10:30:15 + Log: From: Mark-Jason Dominus + To: perl5-porters@perl.com + Subject: Minor fix to perlfunc.pod + Date: Mon, 08 Mar 1999 20:05:53 -0500 + Message-ID: <19990309010553.13757.qmail@plover.com> + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 3094] By: jhi on 1999/03/06 16:16:15 + Log: From: Mark Kettenis + To: jhi@iki.fi + Subject: Oops + Date: Sat, 6 Mar 1999 17:15:35 +0100 (CET) + Message-Id: <199903061615.RAA00207@delius.kettenis.nl> + Branch: maint-5.005/perl + ! README.hurd +____________________________________________________________________________ +[ 3093] By: jhi on 1999/03/06 15:59:46 + Log: From: Mark Kettenis + To: jhi@iki.fi + Subject: New Hurd README + Date: Sat, 6 Mar 1999 16:46:12 +0100 (CET) + Message-Id: <199903061601.RAA00185@delius.kettenis.nl> + Branch: maint-5.005/perl + ! README.hurd +____________________________________________________________________________ +[ 3092] By: jhi on 1999/03/06 12:52:06 + Log: From: Paul_Green@stratus.com + To: perl5-porters@perl.org + Cc: jhi@iki.fi, Paul_Green@stratus.com + Subject: [PATCH 5.005_03-MAINT_TRIAL_6]: platform: vos -- updates to VOS port of Perl5 + Date: Fri, 5 Mar 1999 18:08:49 -0500 + Message-ID: <1D1A4EF7AD4DD211A80D00A0C9D7DB665A035A@exna1.stratus.com> + Branch: maint-5.005/perl + ! vos/config.h vos/config_h.SH_orig +____________________________________________________________________________ +[ 3091] By: jhi on 1999/03/06 12:42:21 + Log: From: Dan Sugalski + To: perl5-porters@perl.org, vmsperl@perl.org + Subject: [PATCH 5.005_03-MT6]VMS build patch + Date: Fri, 05 Mar 1999 12:36:19 -0800 + Message-Id: <3.0.6.32.19990305123619.02d326a0@ous.edu> + Branch: maint-5.005/perl + ! vms/subconfigure.com +____________________________________________________________________________ +[ 3090] By: gsar on 1999/03/06 04:40:03 + Log: integrate change#3089 from mainline + + tolerate CRs after options + Branch: maint-5.005/perl + !> perl.c +____________________________________________________________________________ +[ 3086] By: gbarr on 1999/03/05 01:48:05 + Log: #3085 was a bit premature, this is MT6 as 2 files were + missing from MANIFEST + Branch: maint-5.005/perl + ! MANIFEST +____________________________________________________________________________ +[ 3085] By: gbarr on 1999/03/05 01:41:06 + Log: Trial release 6 + Branch: maint-5.005/perl + ! Changes +____________________________________________________________________________ +[ 3084] By: gbarr on 1999/03/05 01:34:07 + Log: Don't process - as a file in Errno_pm.PL + + From: Jarkko Hietaniemi + Date: Thu, 4 Mar 1999 13:29:23 +0200 (EET) + Message-ID: <14046.28307.561693.849859@alpha.hut.fi> + Subject: Re: maint-5.005 + Branch: maint-5.005/perl + ! ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 3081] By: gsar on 1999/03/05 00:14:33 + Log: protect against doubled backslashes + Branch: maint-5.005/perl + ! ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 3080] By: gsar on 1999/03/04 23:37:20 + Log: pick up AIX hints from mainline + Branch: maint-5.005/perl + !> hints/aix.sh +____________________________________________________________________________ +[ 3079] By: gsar on 1999/03/04 21:09:43 + Log: tweak cast and crew + Branch: maint-5.005/perl + ! Changes +____________________________________________________________________________ +[ 3078] By: gsar on 1999/03/04 21:03:04 + Log: update patchlevel, Changes + Branch: maint-5.005/perl + ! Changes README.win32 patchlevel.h + !> pod/perlhist.pod +____________________________________________________________________________ +[ 3075] By: gsar on 1999/03/04 07:36:53 + Log: integrate changes#3037,3041 from mainline + + fix longstanding bug: searches for lexicals originating within eval'' + weren't stopping at the subroutine boundary correctly + -- + fix subtle bug in eval'' testsuite + Branch: maint-5.005/perl + !> op.c proto.h t/op/eval.t +____________________________________________________________________________ +[ 3074] By: gsar on 1999/03/04 07:32:15 + Log: integrate change#3048 from mainline + + updated HP-UX notes from Jeff Okamoto + Branch: maint-5.005/perl + !> MANIFEST README.hpux +____________________________________________________________________________ +[ 3073] By: gsar on 1999/03/04 07:29:43 + Log: integrate changes#3014,3015,3021,3032,3034,3045 from mainline + + more "correct" utbuf for utime() + -- + avoid modifying readonly values from qw() + -- + ansify perlio.c, fix PerlIO-ish typos + -- + add README.hpux + -- + s/print STDERR/warn/ suggested by abigail@fnx.com; add $VERSION + -- + destroy PL_svref_mutex in perl_destruct() + Branch: maint-5.005/perl + +> README.hpux + !> MANIFEST doio.c ext/DynaLoader/dl_beos.xs + !> ext/DynaLoader/dl_cygwin32.xs iperlsys.h + !> lib/ExtUtils/MM_Unix.pm lib/Getopt/Std.pm perl.c perlio.c +____________________________________________________________________________ +[ 3072] By: gsar on 1999/03/04 07:12:15 + Log: integrate changes#2978,2979 from mainline + + bring '*' prototype closer to how it behaves internally + -- + doc for change#2978 + Branch: maint-5.005/perl + +> t/lib/fatal.t + !> MANIFEST lib/Fatal.pm op.c pod/perlsub.pod t/comp/proto.t +____________________________________________________________________________ +[ 3071] By: gsar on 1999/03/04 07:05:50 + Log: integrate changes#2919,2920,2921,2928,2932,2933 from mainline + + applied suggested patch, with several language/readability tweaks + From: Ilya Zakharevich + Date: Fri, 29 Jan 1999 00:25:02 -0500 + Message-ID: <19990129002502.C2898@monk.mps.ohio-state.edu> + Subject: Re: [PATCH 5.005_*] Better parsing docs + -- + tweak READ() docs to mention $buffer must be altered by reference + -- + use New() et al., rather than safemalloc() et al. + From: jan.dubois@ibm.net (Jan Dubois) + Date: Fri, 29 Jan 1999 23:27:22 +0100 + Message-ID: <36bd33f2.51029616@smtp1.ibm.net> + Subject: [PATCH _03-MT5] POSIX.xs memory API + -- + allow the Carp routines to pass through exception objects + -- + clarify what a "line" is + -- + From: "J. van Krieken" + Date: Thu, 4 Feb 1999 17:25:25 +0100 (MET) + Message-Id: <199902041625.RAA14489@atcmpg.ATComputing.nl> + Subject: s2p incorrectly handles hold space commands + Branch: maint-5.005/perl + !> ext/POSIX/POSIX.xs lib/Carp.pm pod/perlfunc.pod pod/perlop.pod + !> pod/perltie.pod pod/perlvar.pod x2p/s2p.PL +____________________________________________________________________________ +[ 3070] By: gsar on 1999/03/04 06:43:57 + Log: integrate changes#2748,2753,2754,2819,2824,2855,2866,2867,2869,2885,2888,2889 + from mainline + + From: "Jonathan I. Kamens" + Date: Thu, 3 Dec 1998 15:10:17 -0500 + Message-Id: <199812032010.PAA09692@jik.shore.net> + Subject: sample checksum code in "perlfunc" man page is wrong + -- + Todo tweaks + -- + Todo updates from Andy Dougherty + -- + avoid garbage in db->dirbuf + From: Masahiro KAJIURA + Date: Sat, 05 Dec 1998 14:14:54 +0900 + Message-Id: <199812050514.OAA23268@toshiba.co.jp> + Subject: SDBM bug + -- + tweak doc on bitwise ops + -- + applied suggested patch; added tests + From: Adam Krolnik + Date: Sat, 12 Dec 98 15:30:18 -0600 + Message-Id: <9812122130.AA03717@gypsy.eng.cyrix.com> + Subject: Range operation doesn't handle IV_MAX + -- + display full pathname of unreadable files + -- + av_extend() doc tweak from Jan Dubois + -- + update win32/pod.mak + -- + note how to find REG_INFTY limit + -- + add note about test-notty target + -- + tweak PERL_STRICT_CR notes + Branch: maint-5.005/perl + !> Porting/pumpkin.pod README.win32 Todo Todo-5.005 + !> ext/SDBM_File/sdbm/sdbm.c pod/perldelta.pod pod/perlfunc.pod + !> pod/perlguts.pod pod/perlop.pod pod/perlre.pod pp_ctl.c + !> t/op/range.t utils/perldoc.PL win32/pod.mak +____________________________________________________________________________ +[ 3069] By: gsar on 1999/03/04 06:02:29 + Log: integrate change#2747 from mainline + + typos in Pod/Text.pm + Branch: maint-5.005/perl + !> lib/Pod/Text.pm +____________________________________________________________________________ +[ 3059] By: jhi on 1999/03/03 22:46:43 + Log: Document HP-UX 11 Y2K patch effect, based on + + From: "Richard L. England" + To: perlbug@perl.com + CC: "England, Richard" + Subject: test io/fs.t number 18 fails on HPUX 11.0 when Y2K patch installed. + Date: Fri, 26 Feb 1999 15:35:49 -0800 + Message-ID: <36D72FD4.4136C84F@mentorg.com> + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 3057] By: jhi on 1999/03/03 21:42:22 + Log: The *symbols patch (for Kurt's h2ph fixes) haunted us in AIX. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 3056] By: jhi on 1999/03/03 21:21:46 + Log: Fixed the pthreads_created_joinable test messed up + by the Mach cthreads change. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 3055] By: jhi on 1999/03/03 18:17:55 + Log: Configure and make gotchas. + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 3051] By: jhi on 1999/03/02 08:24:52 + Log: From: Dan Sugalski + To: perl5-porters@perl.org, vmsperl@perl.org + Subject: [PATCH 5.005_0x and 5.005_5x]Minor update to README.VMS + Date: Mon, 01 Mar 1999 16:10:57 -0800 + Message-Id: <3.0.6.32.19990301161057.03b1fc00@ous.edu> + Branch: cfgperl + ! README.vms + Branch: maint-5.005/perl + ! README.vms +____________________________________________________________________________ +[ 3049] By: jhi on 1999/03/02 07:34:21 + Log: From: Spider Boardman + To: perl5-porters@perl.org + Subject: [PATCH] Eliminate (valid) warning in byterun.c + Date: Mon, 01 Mar 1999 17:27:59 -0500 + Message-Id: <199903012227.RAA00181@leggy.zk3.dec.com> + Branch: cfgperl + ! bytecode.h + Branch: maint-5.005/perl + ! bytecode.h +____________________________________________________________________________ +[ 3028] By: jhi on 1999/02/26 14:40:00 + Log: HP-UX 11 threads. + + From: Jeff Okamoto + To: perl5-porters@perl.org + Cc: jhi@cc.hut.fi + Subject: Maint 5 and _54 with threading on HP-UX 11.00 + Date: Wed, 3 Feb 1999 12:57:18 -0800 (PST) + Message-Id: <199902032057.MAA10218@xfiles.intercon.hp.com> + + NOTE from jhi: the hpux hints could still be more robust by + disabling gdbm when necessary. + + Currently if there's a libgdbm.sl (gdbm 1.7.3) which is pre-11, + linking -lgdbm -lpthread creates an executable that instantly + core dumps on a pthreads internal panic: + + ./gdpt + + Pthread internal error: message: __libc_reinit() failed, file: ../pthreads/pthread.c, line: 1096 + Return Pointer is 0xc082bf33 + 17639 quit (core dumped) ./gdpt + + You don't have to *use* either gdbm or pthreads in the executable, + just linking them together is enough. Workaround is to recompile + the GDBM under HP-UX 11, that makes the problem to go away. + Branch: maint-5.005/perl + ! hints/hpux.sh thread.h +____________________________________________________________________________ +[ 3027] By: jhi on 1999/02/26 09:04:29 + Log: From: abigail@fnx.com + To: perl5-porters@perl.org (Perl Porters) + Subject: [PATCH 5.005_02 Getopt::Std] warn() instead of print STDERR. + Date: Thu, 25 Feb 1999 22:08:41 -0500 (EST) + Message-ID: <19990226030841.5985.qmail@alexandra.wayne.fnx.com> + Branch: maint-5.005/perl + ! lib/Getopt/Std.pm +____________________________________________________________________________ +[ 3026] By: jhi on 1999/02/26 08:18:26 + Log: full_ar wasn't propagated. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 3013] By: jhi on 1999/02/22 19:27:44 + Log: Fix MacPerl version, change PowerUX to PowerMAX. + + From: Chris Nandor + To: jhi@iki.fi + Cc: perl5-porters@perl.org + Subject: Re: perl current availability as documented by perl.pod + Date: Sun, 21 Feb 1999 11:06:03 -0500 + Message-Id: + + From: Tom Horsley + To: jhi@iki.fi + Cc: perl5-porters@perl.org + Subject: Re: perl current availability as documented by perl.pod + Date: Mon, 22 Feb 1999 13:08:30 GMT + Message-Id: <199902221308.NAA19971@cleo.ccur.com> + Branch: cfgperl + ! pod/perl.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3010] By: jhi on 1999/02/22 10:21:55 + Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + To: gbarr@pobox.com (Graham Barr) + Cc: perl5-porters@perl.org + Subject: [PATCH 5.005_03-MT5] DB_File 1.64 patch + Date: Mon, 22 Feb 1999 10:12:34 +0000 (GMT) + Message-Id: <9902221012.AA17784@claudius.bfsec.bt.co.uk> + Branch: maint-5.005/perl + ! ext/DB_File/Changes ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/typemap t/lib/db-recno.t +____________________________________________________________________________ +[ 3005] By: jhi on 1999/02/22 08:35:30 + Log: Configure/Perl knew how to look for use Mach cthreads + but Configure didn't let them to be used ($osname 'next'). + Branch: cfgperl + ! Configure config_h.SH + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 3004] By: jhi on 1999/02/21 15:46:02 + Log: Update Acorn AVAILABILITY. + Branch: cfgperl + ! pod/perl.pod + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 3003] By: jhi on 1999/02/21 14:50:42 + Log: From: rjk@linguist.dartmouth.edu (Ronald J. Kimball) + To: perl5-porters@perl.org (Perl 5 Porters) + Subject: PATCH: perlref.pod - symbolic ref example + Date: Sat, 20 Feb 1999 17:32:11 -0500 (EST) + Message-Id: <199902202232.RAA62306@linguist.dartmouth.edu> + Branch: cfgperl + ! pod/perlref.pod + Branch: maint-5.005/perl + ! pod/perlref.pod +____________________________________________________________________________ +[ 3000] By: jhi on 1999/02/21 14:15:31 + Log: pack s/l for negative numbers was broken on platforms + where sizeof(short) != 2 or sizeof(long) != 4 (Alpha, Cray). + pack v was broken for sizeof(short) == 8 big-endian platforms + (Cray), only zeros were produced. + Branch: maint-5.005/perl + ! perl.h pod/perlfunc.pod pp.c t/op/pack.t +____________________________________________________________________________ +[ 2997] By: jhi on 1999/02/20 14:00:26 + Log: Glossary update. + Branch: maint-5.005/perl + ! Porting/Glossary +____________________________________________________________________________ +[ 2995] By: jhi on 1999/02/20 12:25:10 + Log: Document #2893, Mach cthreads support. + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 2986] By: jhi on 1999/02/19 23:26:34 + Log: Remove the unnecessary osf1 -D__LANGUAGE_C__. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2983] By: jhi on 1999/02/19 20:35:51 + Log: Mach cthreads: + From: brie@corp.home.net (Brian Harrison) + Subject: perl5.005_02 patch for mthreads + To: perl5-porters@perl.org + Date: Fri, 23 Oct 1998 14:20:57 -0700 (PDT) + Message-ID: + Branch: maint-5.005/perl + ! Configure Porting/Glossary config_h.SH malloc.c perl.h + ! thread.h +____________________________________________________________________________ +[ 2981] By: jhi on 1999/02/19 19:49:03 + Log: From: "Kurt D. Starsinic" + To: Chaim Frenkel , + Russ Allbery , + Jarkko Hietaniemi , + Gurusamy Sarathy , + Graham Barr + Cc: bdensch@ameritech.net, perlbug@perl.com + Subject: [PATCH] Re: Solaris 7 for Intel + Message-ID: <19990219124404.A30182@O2.chapin.edu> + + and Glossary update. + Branch: maint-5.005/perl + ! Configure Makefile.SH Porting/Glossary +____________________________________________________________________________ +[ 2980] By: gbarr on 1999/02/19 16:06:53 + Log: Make result of h2xs work when user adds C + Branch: maint-5.005/perl + ! utils/h2xs.PL +____________________________________________________________________________ +[ 2976] By: gsar on 1999/02/18 21:54:09 + Log: integrate change#2975 from mainline + + distinguish eval'' from BEGIN|INIT|END CVs (fixes buggy propagation + of lexical searches in BEGIN|INIT|END) + Branch: maint-5.005/perl + !> cop.h cv.h op.c perly.c perly.y pp_ctl.c t/op/misc.t + !> vms/perly_c.vms +____________________________________________________________________________ +[ 2971] By: jhi on 1999/02/18 11:14:24 + Log: AIX syscalls.exp scan missed explicitly 32/64-bit syscalls. + + From: Joe Buehler + To: perl5-porters@perl.org + Subject: setsid not detected by perl 5.005_02 configure under AIX 4.3 + Date: 12 Feb 1999 11:25:21 -0500 + Message-ID: + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2967] By: jhi on 1999/02/17 23:12:59 + Log: Make SCO/Unixware scan to work in Unixware, too. + + From: Tom Hughes + To: perlbug@perl.com + Subject: Not OK: perl 5.00555 on i386-svr4 [actually Unixware 2.1] (UNINSTALLED) + Date: 17 Feb 1999 15:34:15 +0000 + Message-ID: + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2956] By: jhi on 1999/02/15 21:03:28 + Log: OpenBSD sparc SHMLBA (like change #2945). + Branch: maint-5.005/perl + ! ext/IPC/SysV/SysV.xs +____________________________________________________________________________ +[ 2950] By: jhi on 1999/02/15 13:37:28 + Log: AVAILABILITY sync. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2906] By: jhi on 1999/02/13 14:55:47 + Log: AVAILABILITY sync. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2905] By: gsar on 1999/02/13 00:12:53 + Log: integrate change#2898 from mainline + + support win32_putenv() + Branch: maint-5.005/perl + !> mg.c util.c win32/GenCAPI.pl win32/makedef.pl win32/perlhost.h + !> win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 2904] By: jhi on 1999/02/12 21:23:30 + Log: Add README.hurd, from Mark Kettenis . + Branch: maint-5.005/perl + + README.hurd + ! MANIFEST +____________________________________________________________________________ +[ 2900] By: jhi on 1999/02/12 12:07:28 + Log: SCO ODT/OSR release scanning. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2897] By: jhi on 1999/02/12 11:24:25 + Log: Undo a big bad paste from change #2884. + Branch: maint-5.005/perl + ! hints/openbsd.sh +____________________________________________________________________________ +[ 2896] By: jhi on 1999/02/12 11:19:52 + Log: Update the error message of db-recno.t to DB version 1.86 + and the URL to www.sleepycat.com instead of www.bostic.com. + Branch: maint-5.005/perl + ! t/lib/db-recno.t +____________________________________________________________________________ +[ 2895] By: gsar on 1999/02/12 11:18:59 + Log: integrate change#2854 from mainline + + compatibility fix: magic non-propagation in foreach implicit localization + Branch: maint-5.005/perl + !> pp_ctl.c t/op/local.t +____________________________________________________________________________ +[ 2884] By: jhi on 1999/02/12 08:36:14 + Log: OpenBSD pthreads awareness, thanks to + David Leonard + Branch: maint-5.005/perl + ! Configure hints/openbsd.sh +____________________________________________________________________________ +[ 2883] By: jhi on 1999/02/12 08:29:51 + Log: AVAILABILITY sync. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2878] By: jhi on 1999/02/11 22:00:50 + Log: Replace changes #2783, #2784, #2785, with a single tested + patch from Francois Desarmenien . + Branch: maint-5.005/perl + ! MANIFEST ext/GDBM_File/hints/sco.pl ext/IPC/SysV/SysV.xs + ! hints/sco.sh +____________________________________________________________________________ +[ 2876] By: jhi on 1999/02/11 20:43:17 + Log: From: Chris Nandor + To: perl5-porters@perl.org + Subject: [PATCH] perlport.pod 1.39 + Date: Thu, 11 Feb 1999 12:28:35 -0500 + Message-Id: + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 2875] By: jhi on 1999/02/11 20:35:08 + Log: The fpsetmask() really is SCO5 only. + Branch: maint-5.005/perl + ! unixish.h +____________________________________________________________________________ +[ 2874] By: jhi on 1999/02/11 20:32:06 + Log: Change #2783 missed these. + Branch: maint-5.005/perl + ! ext/IPC/SysV/SysV.xs unixish.h +____________________________________________________________________________ +[ 2873] By: jhi on 1999/02/11 20:27:45 + Log: Import the change #2810 from cfgperl. + Branch: maint-5.005/perl + + ext/GDBM_File/hints/sco.pl + ! MANIFEST hints/sco.sh unixish.h +____________________________________________________________________________ +[ 2872] By: jhi on 1999/02/11 19:57:37 + Log: Sync the current AVAILABILITY. + Branch: maint-5.005/perl + ! pod/perl.pod pod/perldelta.pod +____________________________________________________________________________ +[ 2871] By: jhi on 1999/02/11 19:42:54 + Log: Copied the GNU/Hurd hints file over from cfgperl + because it works well enough (there are still some + rough edges in Hurd), verified via private + email from Mark Kettenis + Branch: maint-5.005/perl + + hints/gnu.sh +____________________________________________________________________________ +[ 2864] By: jhi on 1999/02/11 08:45:00 + Log: From: Spider Boardman + To: perlbug@perl.com + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on RISC-ultrix 4.4 (UNINSTALLED) + Date: Wed, 10 Feb 1999 23:33:31 -0500 + Message-Id: <9902110433.AA12816@abyss.zk3.dec.com> + Branch: maint-5.005/perl + ! doio.c ext/IPC/SysV/SysV.xs hints/ultrix_4.sh +____________________________________________________________________________ +[ 2863] By: jhi on 1999/02/11 08:35:35 + Log: AVAILABILITY. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2858] By: gsar on 1999/02/11 07:10:59 + Log: remove dup hunk + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 2857] By: gsar on 1999/02/11 07:09:20 + Log: sync with parent version of perldelta.pod + Branch: maint-5.005/perl + !> pod/perldelta.pod +____________________________________________________________________________ +[ 2853] By: gsar on 1999/02/11 00:33:06 + Log: integrate change#2816 from mainline + + minor bug in dumping blessed subrefs + Branch: maint-5.005/perl + !> ext/Data/Dumper/Dumper.pm +____________________________________________________________________________ +[ 2852] By: gsar on 1999/02/10 23:17:49 + Log: fair warning about -Dusethreads + Branch: maint-5.005/perl + ! Configure INSTALL README.threads +____________________________________________________________________________ +[ 2851] By: jhi on 1999/02/10 23:00:39 + Log: Snapshot of the ongoing AVAILABILITY discussion. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2850] By: jhi on 1999/02/10 16:07:32 + Log: OS390 and Windows AVAILABILITY entries enhanced. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2849] By: jhi on 1999/02/10 12:39:46 + Log: AS/400 and Mac were not described right. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2848] By: jhi on 1999/02/10 09:13:49 + Log: Added AVAILABILITY section. + Branch: maint-5.005/perl + ! pod/perl.pod +____________________________________________________________________________ +[ 2837] By: jhi on 1999/02/08 14:51:39 + Log: Fix typo introduced in change #2836. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2836] By: jhi on 1999/02/08 14:44:31 + Log: Augment change #2809, the h2ph-*symbols patch. + Branch: maint-5.005/perl + ! Configure t/lib/h2ph.pht +____________________________________________________________________________ +[ 2815] By: gsar on 1999/02/05 03:44:50 + Log: integrate change#2242 from mainline + + fix skipspace() to properly account for newlines in eval''-ed + strings (caused bogus line numbers in diagnostics and debugger) + Branch: maint-5.005/perl + !> toke.c +____________________________________________________________________________ +[ 2814] By: jhi on 1999/02/04 21:21:39 + Log: Stratus perlport update. + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 2813] By: jhi on 1999/02/04 21:16:54 + Log: Stratus VOS update. + + From: Paul_Green@stratus.com + To: jhi@iki.fi + Subject: RE: VOS changes for Perl5.005_03 are ready! + Date: Thu, 4 Feb 1999 14:51:07 -0500 + Message-ID: <1D1A4EF7AD4DD211A80D00A0C9D7DB665A0168@exna1.stratus.com> + Branch: maint-5.005/perl + + vos/vos_accept.c + ! MANIFEST README.vos perl.c pod/perlport.pod vos/Changes + ! vos/build.cm vos/compile_perl.cm vos/config.h + ! vos/config_h.SH_orig vos/perl.bind vos/test_vos_dummies.c + ! vos/vos_dummies.c vos/vosish.h +____________________________________________________________________________ +[ 2809] By: jhi on 1999/02/03 19:54:16 + Log: h2ph fixes + Configure patch to support them. + + From: "Kurt D. Starsinic" + To: Graham Barr , Jarkko Hietaniemi , + Gurusamy Sarathy + Cc: perl5-porters@perl.org + Subject: [PATCH 5.00503_MT5] h2ph.PL + Date: Tue, 2 Feb 1999 19:48:06 -0500 + Message-ID: <19990202194806.E10647@O2.chapin.edu> + Branch: maint-5.005/perl + ! Configure utils/h2ph.PL +____________________________________________________________________________ +[ 2802] By: jhi on 1999/02/02 17:41:23 + Log: From: John Bley + To: perlbug@perl.org + Subject: [PATCH]5.005_54 (DOC) fix minor typos + Date: Tue, 2 Feb 1999 07:52:52 -0500 (EST) + Message-ID: + Branch: maint-5.005/perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 2790] By: jhi on 1999/02/02 16:51:45 + Log: Re-introduce the typo corrections (update to CGI 2.46 + overran them). + Branch: maint-5.005/perl + ! lib/CGI.pm +____________________________________________________________________________ +[ 2781] By: jhi on 1999/02/02 14:27:01 + Log: Update the MkLinux note. + Branch: maint-5.005/perl + ! hints/linux.sh +____________________________________________________________________________ +[ 2775] By: jhi on 1999/02/02 13:13:24 + Log: Mention lib/Dumpvalue.pm. + Branch: maint-5.005/perl + ! pod/roffitall +____________________________________________________________________________ +[ 2767] By: jhi on 1999/02/02 12:29:57 + Log: Demangle spaces to tab+space. + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2758] By: jhi on 1999/02/02 10:51:26 + Log: Detypo. + Branch: maint-5.005/perl + ! lib/Math/Trig.pm +____________________________________________________________________________ +[ 2755] By: jhi on 1999/02/02 09:07:51 + Log: Make FreeBSD 2.2.7 work with -Duseshrplib -ders. + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2752] By: jhi on 1999/02/01 22:15:12 + Log: Add perlthrtut.pod. + + From: Dan Sugalski + To: perl5-porters@perl.org + Subject: perlthrtut.pod + Date: Mon, 01 Feb 1999 10:57:11 -0800 + Message-Id: <3.0.6.32.19990201105711.02e62540@ous.edu> + Branch: maint-5.005/perl + + pod/perlthrtut.pod + ! MANIFEST pod/Makefile pod/buildtoc pod/perldelta.pod + ! pod/roffitall +____________________________________________________________________________ +[ 2741] By: gbarr on 1999/02/01 03:00:42 + Log: Fix typecasts in #2728 + + From: "G. Del Merritt" + Date: Fri, 29 Jan 1999 11:47:25 -0700 + Message-Id: <199901291847.LAA04828@jhereg.perl.com> + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on MSWin32-x86-object 4.0 (PATCH included) + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 2740] By: gsar on 1999/02/01 02:43:07 + Log: CAPI inheritance tweak and doc + Branch: maint-5.005/perl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 2739] By: jhi on 1999/01/31 18:31:54 + Log: Undo changes #2730 and #2731 and replace them + with an extensively tested patch from + Anton Berezin (via private email). + Branch: maint-5.005/perl + ! Makefile.SH hints/freebsd.sh +____________________________________________________________________________ +[ 2738] By: gsar on 1999/01/31 05:04:32 + Log: fix bogus CAPI inheritance from change#2541 + Branch: maint-5.005/perl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 2737] By: gsar on 1999/01/31 04:55:06 + Log: remove the big ugly thing jhi sneezed into INSTALL :-) + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 2736] By: jhi on 1999/01/30 12:57:06 + Log: From: pvhp@forte.com (Peter Prymmer) + To: perl-mvs@perl.org, perlbug@perl.com + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on os390 05.00 (UNINSTALLED) + Date: Fri, 29 Jan 99 19:22:31 PST + Message-Id: <9901300322.AA19136@forte.com> + + (slighty edited at the end) + Branch: maint-5.005/perl + ! README.os390 +____________________________________________________________________________ +[ 2735] By: jhi on 1999/01/30 11:49:54 + Log: Undo 5.005-devel random, srandom mention. + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 2734] By: jhi on 1999/01/29 22:22:00 + Log: Add perlreftut. + Branch: maint-5.005/perl + + pod/perlreftut.pod + ! MANIFEST pod/perl.pod pod/perldelta.pod pod/roffitall +____________________________________________________________________________ +[ 2732] By: gsar on 1999/01/29 20:09:44 + Log: integrate change#2720 from mainline + + missing space while munging CCFLAGS for PERL_CAPI + Branch: maint-5.005/perl + !> lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 2731] By: jhi on 1999/01/29 14:33:12 + Log: FreeBSD version numbers can be like "2.2.8-release". + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2730] By: jhi on 1999/01/29 12:40:38 + Log: FreeBSD hints iteration (hopefully convergent). + usethreads: require at least FreeBSD 2.2.8. + signal type: mirror change #2429 in cfgperl. + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2729] By: gbarr on 1999/01/29 05:06:32 + Log: Trial release 5 + Branch: maint-5.005/perl + ! Changes patchlevel.h pod/perlhist.pod +____________________________________________________________________________ +[ 2728] By: gbarr on 1999/01/29 04:10:37 + Log: From: Ted Law + Date: Wed, 27 Jan 1999 14:54:03 -0500 (EST) + Message-Id: <199901271954.OAA07391@dcm2.cibcwg.com> + Subject: POSIX::strftime buffer overflow problem + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 2728] By: gbarr on 1999/01/29 04:10:37 + Log: From: Ted Law + Date: Wed, 27 Jan 1999 14:54:03 -0500 (EST) + Message-Id: <199901271954.OAA07391@dcm2.cibcwg.com> + Subject: POSIX::strftime buffer overflow problem + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 2727] By: gbarr on 1999/01/29 04:09:57 + Log: From: Tom Spindler + Date: Thu, 28 Jan 1999 17:15:11 -0800 + Message-ID: <19990128171510.A11778@isi.net> + Subject: [PATCH] BeOS dynamic loading support for perl5.005_03_MT4 + Branch: maint-5.005/perl + + ext/DynaLoader/dl_beos.xs + ! Configure MANIFEST Makefile.SH README.beos hints/beos.sh + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 2726] By: gbarr on 1999/01/29 03:30:51 + Log: Remove use of File::Slurp in t/lib/textfill.t + Branch: maint-5.005/perl + ! t/lib/textfill.t +____________________________________________________________________________ +[ 2725] By: gbarr on 1999/01/29 03:11:41 + Log: From: Gurusamy Sarathy + Date: Wed, 27 Jan 1999 23:14:33 -0800 + Message-Id: <199901280714.XAA10176@activestate.com> + Subject: Re: NOT OK: "@INC contains: ." after make install - MAINT_TRIAL_4 - 5.005_03 maintenance trial 4 MSWin32-x86-object + Branch: maint-5.005/perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 2724] By: jhi on 1999/01/28 19:27:15 + Log: Change jhi@iki.fi to perlbug@perl.com. + Cosmetic change in semctl probing messages. + Branch: maint-5.005/perl + ! Configure hints/freebsd.sh +____________________________________________________________________________ +[ 2723] By: jhi on 1999/01/28 17:27:49 + Log: Yet another typo in a test program. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2722] By: jhi on 1999/01/28 17:13:52 + Log: The pthreads_created_joinable test had a typo, + by blind luck the default value works almost anywhere. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2721] By: jhi on 1999/01/28 13:04:23 + Log: MinT support, adapted from change #2594. + Branch: maint-5.005/perl + + README.mint ext/POSIX/hints/mint.pl hints/mint.sh + + mint/Makefile mint/README mint/errno.h mint/pwd.c mint/stdio.h + + mint/sys/time.h mint/time.h + ! MANIFEST doio.c malloc.c miniperlmain.c perl.c + ! pod/perldelta.pod t/io/fs.t t/lib/safe2.t t/op/groups.t + ! t/op/mkdir.t t/op/taint.t +____________________________________________________________________________ +[ 2719] By: jhi on 1999/01/27 19:49:49 + Log: From: "M.J.T. Guy" + To: perl5-porters@perl.org + Subject: Re: [PATCH] perl5.005_03-MAINT_TRIAL_3: clarify Sv[INU]V versus Sv[INU]VX in perlguts + Date: Tue, 26 Jan 1999 22:25:07 +0000 + Message-Id: + Branch: maint-5.005/perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 2718] By: jhi on 1999/01/27 19:46:04 + Log: io/fs.t fails test #18 (sense of tests appears to have been + changed incompletely; this patch just skips the test attached, + a la test #17 preceding it). + + From: "G. Del Merritt" + To: perlbug@perl.com + Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included) + Date: Tue, 26 Jan 1999 12:09:09 -0700 + Message-Id: <199901261909.MAA25525@jhereg.perl.com> + Branch: maint-5.005/perl + ! t/io/fs.t +____________________________________________________________________________ +[ 2717] By: jhi on 1999/01/27 19:44:46 + Log: Miniperl fails to build (pp_sys.c was changed and iperlsys.h wasn't) + + From: "G. Del Merritt" + To: perlbug@perl.com + Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included) + Date: Tue, 26 Jan 1999 12:09:09 -0700 + Message-Id: <199901261909.MAA25525@jhereg.perl.com> + Branch: maint-5.005/perl + ! iperlsys.h +____________________________________________________________________________ +[ 2716] By: jhi on 1999/01/27 19:38:36 + Log: From: Dan Sugalski + To: perlbug@perl.com, vmsperl@perl.org + Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on VMSAXP (Patch included, of course) + Date: Tue, 26 Jan 1999 14:40:38 -0800 + Message-Id: <3.0.6.32.19990126144038.02e5d650@ous.edu> + + From: Dan Sugalski + To: perl5-porters@perl.org, vmsperl@perl.org + Subject: [PATCH 5.005_03-MAILT_TRIAL_4]VMS test patches + Date: Tue, 26 Jan 1999 14:55:29 -0800 + Message-Id: <3.0.6.32.19990126145529.02f22280@ous.edu> + Branch: maint-5.005/perl + ! t/lib/textfill.t t/lib/textwrap.t vms/ext/Stdio/test.pl + ! vms/subconfigure.com +____________________________________________________________________________ +[ 2715] By: jhi on 1999/01/27 19:34:28 + Log: From: Mark Bixby + To: perl5-porters@perl.org + Subject: [PATCH perl5.005_03-MAINT_TRIAL_4] MPE port tweaks + Date: Tue, 26 Jan 1999 16:32:18 -0800 (PST) + Message-Id: <199901270032.QAA13395@spock.dis.cccd.edu> + Branch: maint-5.005/perl + ! hints/mpeix.sh mpeix/relink +____________________________________________________________________________ +[ 2714] By: jhi on 1999/01/27 19:32:41 + Log: NetBSD does not do setruid, setrgid. + Branch: maint-5.005/perl + ! hints/netbsd.sh +____________________________________________________________________________ +[ 2713] By: jhi on 1999/01/27 19:28:53 + Log: FreeBSD usethreads, based on private email with + Anton Berezin . + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2712] By: jhi on 1999/01/27 19:26:17 + Log: From: Ilya Zakharevich + To: Mailing list Perl5 + Subject: [PATCH 5.005_*] OS/2 threads + Date: Tue, 26 Jan 1999 13:39:46 -0500 + Message-ID: <19990126133946.A11594@monk.mps.ohio-state.edu> + Branch: maint-5.005/perl + ! os2/os2ish.h +____________________________________________________________________________ +[ 2711] By: jhi on 1999/01/27 19:24:28 + Log: "make ok", "make okfile", and "make nok" were broken + with -Duseshrplib, because of a shared typo. + + From: Spider Boardman + To: perlbug@perl.com + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED) + Date: Wed, 27 Jan 1999 12:27:15 -0500 + Message-Id: <199901271727.MAA233455@web.zk3.dec.com> + Branch: maint-5.005/perl + ! Makefile.SH +____________________________________________________________________________ +[ 2710] By: jhi on 1999/01/27 19:22:23 + Log: Errno fixes: + + From: Spider Boardman + To: perlbug@perl.com + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED) + Date: Wed, 27 Jan 1999 12:27:15 -0500 + Message-Id: <199901271727.MAA233455@web.zk3.dec.com> + + From: Spider Boardman + To: perlbug@perl.com + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED) + Date: Wed, 27 Jan 1999 13:31:16 -0500 + Message-Id: <199901271831.NAA241001@web.zk3.dec.com> + Branch: maint-5.005/perl + ! Configure ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 2709] By: jhi on 1999/01/27 19:17:35 + Log: Fix Configure installusrbinperl: + + From: Spider Boardman + To: jhi@iki.fi + cc: perl5-porters@perl.org + Subject: Re: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED) + Date: Wed, 27 Jan 1999 13:03:35 -0500 + Message-Id: <199901271803.NAA238257@web.zk3.dec.com> + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2708] By: gbarr on 1999/01/26 04:14:42 + Log: Trial release 4 + Branch: maint-5.005/perl + ! Changes patchlevel.h pod/perlhist.pod +____________________________________________________________________________ +[ 2707] By: gbarr on 1999/01/26 02:06:17 + Log: Add redef IO::Handle::* for setv?buf() + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.pm +____________________________________________________________________________ +[ 2706] By: jhi on 1999/01/24 22:26:12 + Log: Better AIX libc nm scan. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2703] By: jhi on 1999/01/24 14:26:18 + Log: Minor Configure adjustments. + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2702] By: jhi on 1999/01/24 13:57:33 + Log: Use usethreads.cbu consistently. + Branch: maint-5.005/perl + ! Configure hints/aix.sh hints/dec_osf.sh hints/dos_djgpp.sh + ! hints/freebsd.sh hints/hpux.sh hints/irix_4.sh hints/irix_5.sh + ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh + ! hints/linux.sh hints/os2.sh hints/solaris_2.sh +____________________________________________________________________________ +[ 2701] By: jhi on 1999/01/24 13:55:43 + Log: Mention year-1900 and month 0..11 also here. + Branch: maint-5.005/perl + ! lib/Time/Local.pm +____________________________________________________________________________ +[ 2700] By: jhi on 1999/01/24 13:52:36 + Log: Document Configure -Uinstallusrbinperl. + Branch: maint-5.005/perl + ! INSTALL pod/perldelta.pod +____________________________________________________________________________ +[ 2699] By: jhi on 1999/01/24 13:01:57 + Log: perlopentut was missing. + Branch: maint-5.005/perl + + pod/perlopentut.pod + ! MANIFEST pod/perldelta.pod +____________________________________________________________________________ +[ 2697] By: jhi on 1999/01/24 12:31:33 + Log: Remove t/op/grent.t (t/op/pwent.t was removed by #2685). + Branch: maint-5.005/perl + - t/op/grent.t + ! MANIFEST +____________________________________________________________________________ +[ 2696] By: gsar on 1999/01/24 11:39:39 + Log: integrate changes#2255,2694 from mainline + + another win32 portability fix: make sysread() and syswrite() + work on sockets + + better notes on 'make' on win32 + Branch: maint-5.005/perl + ! README.win32 pp_sys.c win32/win32.h +____________________________________________________________________________ +[ 2693] By: gbarr on 1999/01/24 00:53:31 + Log: Integrate changes #2646,2647 from cfgperl + + Show LANGUAGE env var when needed. (Augment change #2645). + + SHMLBA strikes back in NetBSD/sparc. + + From: Dave Nelson + To: jhi@iki.fi + Subject: perl5.005_02 + IPC::SysV + NetBSD/Sparc + Date: Mon, 18 Jan 1999 22:07:56 -0600 + Message-Id: <199901190407.WAA02543@longhorn.bellcow.com> + Branch: maint-5.005/perl + ! util.c utils/perlbug.PL + !> ext/IPC/SysV/SysV.xs +____________________________________________________________________________ +[ 2692] By: gbarr on 1999/01/24 00:28:52 + Log: Integrate #2630 from mainline and an errno save fix + Branch: maint-5.005/perl + !> doio.c +____________________________________________________________________________ +[ 2691] By: gbarr on 1999/01/24 00:28:37 + Log: Update CGI modules to 2.46 and Getopt::Long to 2.19 + Branch: maint-5.005/perl + ! lib/CGI.pm lib/CGI/Carp.pm lib/CGI/Cookie.pm lib/CGI/Fast.pm + ! lib/CGI/Push.pm lib/Getopt/Long.pm t/lib/cgi-html.t +____________________________________________________________________________ +[ 2690] By: gbarr on 1999/01/23 23:35:39 + Log: Integrate #2681 from cfgperl + + Better (I hope) LANGUAGE documentation. + Branch: maint-5.005/perl + !> pod/perllocale.pod +____________________________________________________________________________ +[ 2689] By: gbarr on 1999/01/23 23:31:59 + Log: More nosuid patches + + From: Jarkko Hietaniemi + Date: Fri, 22 Jan 1999 12:12:45 +0200 (EET) + Message-ID: <13992.20253.269284.841300@alpha.hut.fi> + Subject: Re: [PATCH] 5.005*: the "nosuid" problem: v2 + Branch: maint-5.005/perl + ! Configure config_h.SH perl.c perl.h pod/perldelta.pod + ! pod/perldiag.pod +____________________________________________________________________________ +[ 2688] By: gbarr on 1999/01/23 23:03:39 + Log: From: Anton Berezin + Date: 21 Jan 1999 17:07:28 +0100 + Message-ID: <86emood2yn.fsf@lion.plab.ku.dk> + Subject: [PATCH 5.005_54] hints/freebsd.sh - reflect the birth of version 4.0 + Branch: maint-5.005/perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 2687] By: gbarr on 1999/01/23 22:52:58 + Log: overload syntax is no longer experimental + Branch: maint-5.005/perl + ! lib/overload.pm +____________________________________________________________________________ +[ 2685] By: gbarr on 1999/01/23 22:15:46 + Log: Remove t/op/pwent.t added from cfgperl, but is not robust. + Branch: maint-5.005/perl + - t/op/pwent.t + ! MANIFEST +____________________________________________________________________________ +[ 2684] By: gbarr on 1999/01/23 22:13:07 + Log: More doc typos from Abigail, and undo some in lib/diagnostics.pm + from change #2672 + + From: abigail@fnx.com + Date: Tue, 19 Jan 1999 19:32:42 -0500 (EST) + Message-Id: <19990120003242.19938.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/CGI.pm] Typos + + From: abigail@fnx.com + Date: Tue, 19 Jan 1999 19:40:41 -0500 (EST) + Message-Id: <19990120004041.20052.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/CPAN.pm] Typos + Branch: maint-5.005/perl + ! lib/CGI.pm lib/CPAN.pm lib/diagnostics.pm +____________________________________________________________________________ +[ 2677] By: gbarr on 1999/01/22 03:38:07 + Log: Integrate #2645, #2648 and update patching.pod + + Document the GNU LANGUAGE env var. + + Mention /usr/share/locale. + + From: Daniel Grisinger + Date: 21 Jan 1999 00:17:35 -0700 + Message-Id: + Subject: [PATCH] patching.pod, misc fixes (was Re: Which ? What ? Why ? When ?) + Branch: maint-5.005/perl + ! Porting/patching.pod + !> pod/perllocale.pod +____________________________________________________________________________ +[ 2676] By: gbarr on 1999/01/22 01:54:02 + Log: Fixup FindBin to use File::Spec + + Message-Id: <19990120185157.D24479@west-tip.transeda.com> + Date: Wed, 20 Jan 1999 18:51:57 +0000 + From: Paul Johnson + Subject: Re: [PATCH] 5005_54 Make FindBin work with UNC paths + Branch: maint-5.005/perl + ! lib/FindBin.pm +____________________________________________________________________________ +[ 2675] By: gbarr on 1999/01/22 01:38:31 + Log: Add new config values added for nosuid fix into VMS configure + + From: Dan Sugalski + Date: Wed, 20 Jan 1999 12:05:18 -0800 + Message-Id: <3.0.6.32.19990120120518.00a98470@ous.edu> + Subject: [PATCH 5.005_03MT3]VMS configure tweak + Branch: maint-5.005/perl + ! vms/subconfigure.com +____________________________________________________________________________ +[ 2674] By: gbarr on 1999/01/22 01:36:35 + Log: Fix for buggy compiler optimization on dec for pack("I",...) + + From: Achim Bohnet + Date: Wed, 20 Jan 1999 20:25:53 +0100 + Message-Id: <199901201925.UAA16940@o06.xray.mpe.mpg.de> + Subject: [PATCH] Not OK: perl 5.00503 +MAINT_TRIAL_3 on alpha-dec_osf 4.0 + Branch: maint-5.005/perl + ! pp.c +____________________________________________________________________________ +[ 2673] By: gbarr on 1999/01/22 01:29:37 + Log: OS/2 patches from Ilya + + Date: Thu, 21 Jan 1999 02:08:27 -0500 + From: Ilya Zakharevich + Subject: [PATCH 5.00*] makedepend + Message-Id: <19990121020827.A25509@monk.mps.ohio-state.edu> + + Date: Thu, 21 Jan 1999 02:46:34 -0500 + From: Ilya Zakharevich + Subject: [PATCH 5.005_*] Errno.pm suffers from \\ too + Message-Id: <19990121024634.A25600@monk.mps.ohio-state.edu> + + Date: Thu, 21 Jan 1999 02:50:16 -0500 + From: Ilya Zakharevich + Subject: [PATCH 5.005_03] Resend of OS/2 patch + Message-Id: <19990121025016.A25612@monk.mps.ohio-state.edu> + + Date: Thu, 21 Jan 1999 03:58:29 -0500 + From: Ilya Zakharevich + Subject: [PATCH 5.005_*] OS2::PrfDB was exploiting a bug in U32 XSUBs + Message-Id: <19990121035829.A25822@monk.mps.ohio-state.edu> + Branch: maint-5.005/perl + ! ext/Errno/Errno_pm.PL makedepend.SH os2/Changes + ! os2/Makefile.SHs os2/OS2/PrfDB/PrfDB.xs os2/os2.c +____________________________________________________________________________ +[ 2672] By: gbarr on 1999/01/22 01:05:45 + Log: More doc typo patches from Abigail + + From: abigail@fnx.com + Message-Id: <19990120001410.19645.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL 3 lib/AutoLoader.pm] Typos + Date: Tue, 19 Jan 1999 19:14:10 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120004312.20152.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/Carp.pm] Typo + Date: Tue, 19 Jan 1999 19:43:12 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120004429.20190.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/Cwd.pm] Typo + Date: Tue, 19 Jan 1999 19:44:29 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120005241.20693.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/Safe.pm] Typo + Date: Tue, 19 Jan 1999 19:52:41 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120005525.20788.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/SelfLoader.pm] Typos + Date: Tue, 19 Jan 1999 19:55:25 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120005821.20926.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/Symbol.pm] Typo + Date: Tue, 19 Jan 1999 19:58:21 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120010002.20973.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/Test.pm] Typo + Date: Tue, 19 Jan 1999 20:00:02 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120013823.23015.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/diagnostics.pm] Typos (ignore + Date: Tue, 19 Jan 1999 20:38:23 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120013909.23085.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/ops.pm] Typo + Date: Tue, 19 Jan 1999 20:39:09 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120015817.24306.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/overload.pm] Typos + Date: Tue, 19 Jan 1999 20:58:16 -0500 (EST) + + From: abigail@fnx.com + Message-Id: <19990120020326.24373.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL3 lib/re.pm] Typos + Date: Tue, 19 Jan 1999 21:03:26 -0500 (EST) + Branch: maint-5.005/perl + ! ext/Opcode/Safe.pm ext/Opcode/ops.pm ext/re/re.pm + ! lib/AutoLoader.pm lib/Carp.pm lib/Cwd.pm lib/SelfLoader.pm + ! lib/Symbol.pm lib/Test.pm lib/diagnostics.pm lib/overload.pm +____________________________________________________________________________ +[ 2671] By: gbarr on 1999/01/22 00:40:13 + Log: Fix win32 for Borland compiler and spaces in paths + + From: Gurusamy Sarathy + Date: Mon, 18 Jan 1999 20:33:17 -0800 + Message-Id: <199901190433.UAA03656@activestate.com> + Subject: [PATCH] 5.005_03-trial3 win32 issues + Branch: maint-5.005/perl + ! README.win32 win32/Makefile win32/config_sh.PL + ! win32/makefile.mk win32/runperl.c +____________________________________________________________________________ +[ 2637] By: gbarr on 1999/01/18 02:52:18 + Log: Update DB_File to 1.63 + + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Date: Tue, 29 Dec 1998 16:23:54 +0000 (GMT) + Message-Id: <9812291623.AA20884@claudius.bfsec.bt.co.uk> + Subject: PATCH DB_File 1.63 for 5.005_54 & 5.005_03 + Branch: maint-5.005/perl + ! ext/DB_File/Changes ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/dbinfo ext/DB_File/typemap +____________________________________________________________________________ +[ 2636] By: gbarr on 1999/01/17 18:03:31 + Log: Trial release 3 + Branch: maint-5.005/perl + ! Changes patchlevel.h +____________________________________________________________________________ +[ 2635] By: gbarr on 1999/01/17 17:32:01 + Log: Update to CPAN-1.44 + + From: Mark-Jason Dominus + Date: Sat, 16 Jan 1999 17:22:06 -0500 + Message-ID: <19990116222206.3674.qmail@plover.com> + Subject: Re: DOC PATCH (5.005_54 perlsub.pod) + Branch: maint-5.005/perl + ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm + ! pod/perlsub.pod +____________________________________________________________________________ +[ 2634] By: gbarr on 1999/01/17 17:27:12 + Log: Fix for suidperl when script is on a nosuid filesystem + + From: Jarkko Hietaniemi + Date: Sun, 17 Jan 1999 16:27:06 +0200 (EET) + Message-ID: <13985.62266.324824.292401@alpha.hut.fi> + Subject: [PATCH] 5.005*: the "nosuid" problem: v2 + Branch: maint-5.005/perl + ! Configure config_h.SH perl.c perl.h pod/perldiag.pod +____________________________________________________________________________ +[ 2618] By: gbarr on 1999/01/16 19:18:26 + Log: Added Dumpvalue.pm + + From: Ilya Zakharevich + Date: Mon, 7 Dec 1998 02:44:25 -0500 (EST) + Message-Id: <199812070744.CAA18949@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Dumpvar.pm + Branch: maint-5.005/perl + + lib/Dumpvalue.pm + ! MANIFEST pod/perldelta.pod +____________________________________________________________________________ +[ 2617] By: gbarr on 1999/01/16 19:09:36 + Log: Minor change to perlxstut and added perlopentut.pod + + From: Nathan Torkington + Date: Sat, 26 Dec 1998 14:28:21 +1300 (NZDT) + Message-ID: <13956.15285.933914.320849@localhost.frii.com> + Subject: [PATCH] perlxstut.pod fix + + From: Tom Christiansen + Date: Sat, 09 Jan 1999 08:13:18 -0700 + Message-Id: <199901091513.IAA17512@jhereg.perl.com> + Subject: perlopentut.pod + Branch: maint-5.005/perl + ! MANIFEST pod/perl.pod pod/perldelta.pod pod/perlxstut.pod + ! pod/roffitall +____________________________________________________________________________ +[ 2616] By: gbarr on 1999/01/16 18:59:55 + Log: Win32 changes from Jan + + From: jan.dubois@ibm.net (Jan Dubois) + Date: Fri, 15 Jan 1999 23:38:35 +0100 + Message-ID: <36a7c10d.16311905@smtp1.ibm.net> + Subject: [PATCH 5.005_03m2] Win32 Makefile patches + + From: jan.dubois@ibm.net (Jan Dubois) + Date: Sat, 16 Jan 1999 13:02:45 +0100 + Message-ID: <36a07da6.10722337@smtp1.ibm.net> + Subject: [PATCH 5.005_03m2] minor tweaks to README.win32 + Branch: maint-5.005/perl + ! README.win32 win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 2615] By: gbarr on 1999/01/16 18:48:48 + Log: Jumbo patch from Sarathy for PERL_OBJECT & USE_THREADS + + From: Gurusamy Sarathy + Date: Thu, 07 Jan 1999 00:12:00 -0500 + Message-Id: <199901070512.AAA23568@aatma.engin.umich.edu> + Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds + + From: Gurusamy Sarathy + Date: Thu, 14 Jan 1999 19:21:46 -0500 + Message-Id: <199901150021.TAA01886@aatma.engin.umich.edu> + Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds + Branch: maint-5.005/perl + ! embed.h global.sym lib/ExtUtils/MM_Unix.pm objXSUB.h objpp.h + ! op.c perl.c perl.h perly.c perly.y perly_c.diff pp.c proto.h + ! sv.c t/io/fs.t toke.c win32/GenCAPI.pl win32/config.bc + ! win32/makedef.pl win32/runperl.c win32/win32.c +____________________________________________________________________________ +[ 2614] By: gbarr on 1999/01/16 16:48:38 + Log: From: Jarkko Hietaniemi + Date: Fri, 15 Jan 1999 17:28:34 +0200 (EET) + Message-Id: <199901151528.RAA08785@alpha.hut.fi> + Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: NetBSD patches + + From: Jarkko Hietaniemi + Date: Fri, 15 Jan 1999 18:44:19 +0200 (EET) + Message-Id: <199901151644.SAA08184@alpha.hut.fi> + Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: allow skipping the "install also as /usr/bin/perl" question of installperl + + From: Jarkko Hietaniemi + Date: Fri, 15 Jan 1999 18:52:29 +0200 (EET) + Message-Id: <199901151652.SAA11259@alpha.hut.fi> + Subject: the promised "installusrbinperl + NetBSD" fix + Branch: maint-5.005/perl + ! Configure Makefile.SH hints/netbsd.sh installperl + ! makedepend.SH unixish.h +____________________________________________________________________________ +[ 2613] By: gbarr on 1999/01/16 16:28:40 + Log: From: Laszlo Molnar + Date: Thu, 14 Jan 1999 22:37:26 +0100 + Message-ID: <19990114223726.A177@beeblebrox> + Subject: [PATCH for 5.005_03-MAINT_TRIAL_2] dos-djgpp update + Branch: maint-5.005/perl + ! djgpp/config.over djgpp/djgpp.c +____________________________________________________________________________ +[ 2612] By: gbarr on 1999/01/16 16:27:25 + Log: Hints for sco.sh to automatically support dynamic linking + + From: Peter Wolfe + Date: Mon, 11 Jan 1999 11:50:20 -0800 (PST) + Message-Id: <199901111950.LAA01703@titan.teloseng.com> + Subject: SCO 3.2v5 patch for perl5.005_03-MAINT_TRIAL_1 + Branch: maint-5.005/perl + ! hints/sco.sh +____________________________________________________________________________ +[ 2610] By: gbarr on 1999/01/14 03:07:33 + Log: Fix login in installperl for pods + + From: Robin Barker + Date: Mon, 4 Jan 1999 13:50:10 GMT + Message-Id: <199901041350.NAA19665@cyclone.cise.npl.co.uk> + Subject: PATCH to installperl + Branch: maint-5.005/perl + ! installperl +____________________________________________________________________________ +[ 2609] By: gbarr on 1999/01/14 03:04:37 + Log: Fix incorrect "used only once" warnings + + From: Ilya Zakharevich + Date: Fri, 8 Jan 1999 04:37:10 -0500 + Message-ID: <19990108043710.A14390@monk.mps.ohio-state.edu> + Subject: Re: change#965 flakiness + Branch: maint-5.005/perl + ! gv.c +____________________________________________________________________________ +[ 2608] By: gbarr on 1999/01/14 02:56:46 + Log: Fixed double GLOB de-reference + + From: Gurusamy Sarathy + Date: Sat, 09 Jan 1999 23:40:24 -0500 + Message-Id: <199901100440.XAA12360@aatma.engin.umich.edu> + Subject: Re: IO::Pipe with perl -d (on HPUX) + Branch: maint-5.005/perl + ! ext/IO/lib/IO/Pipe.pm +____________________________________________________________________________ +[ 2607] By: gbarr on 1999/01/14 02:53:40 + Log: Added Carp::cluck to perldelta.pod + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 2606] By: gbarr on 1999/01/14 02:44:04 + Log: New perlfaq*.pod from Tom (private mail) + Branch: maint-5.005/perl + ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + ! pod/perlfaq9.pod +____________________________________________________________________________ +[ 2584] By: gbarr on 1999/01/08 04:50:56 + Log: implemented Ilya's suggested fix, and added a testcase + + From: Ilya Zakharevich + Date: Tue, 5 Jan 1999 00:56:01 -0500 (EST) + Message-Id: <199901050556.AAA02597@monk.mps.ohio-state.edu> + Subject: Re: Text::ParseWords: regex fix + Branch: maint-5.005/perl + ! lib/Text/ParseWords.pm t/lib/parsewords.t +____________________________________________________________________________ +[ 2583] By: gbarr on 1999/01/08 04:50:03 + Log: From: Jarkko Hietaniemi + Date: Thu, 7 Jan 1999 12:47:38 +0200 (EET) + Message-Id: <199901071047.MAA24100@alpha.hut.fi> + Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: ext/Errno_pm.PL: understand wrapper cppstdins + Branch: maint-5.005/perl + ! ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 2582] By: gbarr on 1999/01/08 03:37:55 + Log: More doc changes from Abigail, and included change #2575 from cfgperl + + From: abigail@fnx.com + Message-ID: <19990107041434.22326.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Time/gmtime.pm] Typo fix + Date: Wed, 6 Jan 1999 23:14:34 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107041746.22376.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Time/localtime.pm] Typo fix + Date: Wed, 6 Jan 1999 23:17:46 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107042105.22527.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/User/grent.pm] Typo fix + Date: Wed, 6 Jan 1999 23:21:05 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107042254.22624.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/User/pwent.pw] Typo fix + Date: Wed, 6 Jan 1999 23:22:54 -0500 (EST) + Branch: maint-5.005/perl + ! lib/Math/Trig.pm lib/Time/gmtime.pm lib/Time/localtime.pm + ! lib/User/grent.pm lib/User/pwent.pm +____________________________________________________________________________ +[ 2578] By: gbarr on 1999/01/07 04:30:26 + Log: From: Dan Sugalski + Date: Wed, 06 Jan 1999 13:47:34 -0800 + Message-Id: <3.0.6.32.19990106134734.0334d260@ous.edu> + Subject: [PATCH 5.005_02-MT2, 5.005_5x]VMS.C tweak for occasional system() error + Branch: maint-5.005/perl + ! vms/vms.c +____________________________________________________________________________ +[ 2577] By: gbarr on 1999/01/07 04:26:28 + Log: Another set of doc patches from Abigail + + From: abigail@fnx.com + Message-ID: <19990107032132.20124.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRAIL2 lib/Net/hostent.pm] Typo fix + Date: Wed, 6 Jan 1999 22:21:32 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107032445.20178.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Net/netent.pm] Typo fix + Date: Wed, 6 Jan 1999 22:24:45 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107032834.20362.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRAIL2 lib/Term/Complete.pm] Typo fix + Date: Wed, 6 Jan 1999 22:28:34 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107033136.20440.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRAIL2 lib/Term/ReadLine.pm] Typo fix + Date: Wed, 6 Jan 1999 22:31:36 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107033351.20540.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Apache.pm] Typo fix + Date: Wed, 6 Jan 1999 22:33:51 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107033933.20707.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Push.pm] Typo fix + Date: Wed, 6 Jan 1999 22:39:33 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107034548.20936.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/File/Copy.pm] Typo fixes + Date: Wed, 6 Jan 1999 22:45:48 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107034856.21056.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec.pm] Typo fix + Date: Wed, 6 Jan 1999 22:48:56 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107035113.21174.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec/Mac.pm] Typo fixes + Date: Wed, 6 Jan 1999 22:51:13 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107035612.21522.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigFloat.pm] Typo fix + Date: Wed, 6 Jan 1999 22:56:12 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107035842.21585.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigInt.pm] Typo fixes + Date: Wed, 6 Jan 1999 22:58:41 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107040644.22009.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Text/Wrap.pm] Typo fixes + Date: Wed, 6 Jan 1999 23:06:44 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107040955.22087.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Array.pm] Typo fixes + Date: Wed, 6 Jan 1999 23:09:55 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990107041136.22174.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Hash.pm] Typo fix + Date: Wed, 6 Jan 1999 23:11:36 -0500 (EST) + Branch: maint-5.005/perl + ! lib/CGI/Apache.pm lib/CGI/Push.pm lib/File/Copy.pm + ! lib/File/Spec.pm lib/File/Spec/Mac.pm lib/Math/BigFloat.pm + ! lib/Math/BigInt.pm lib/Net/hostent.pm lib/Net/netent.pm + ! lib/Term/Complete.pm lib/Term/ReadLine.pm lib/Text/Wrap.pm + ! lib/Tie/Array.pm lib/Tie/Hash.pm +____________________________________________________________________________ +[ 2568] By: gbarr on 1999/01/06 03:13:15 + Log: From: jan.dubois@ibm.net (Jan Dubois) + Date: Wed, 06 Jan 1999 01:24:09 +0100 + Message-ID: <3696aa85.18259325@smtp1.ibm.net> + Subject: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds + Branch: maint-5.005/perl + ! embed.h global.sym objXSUB.h objpp.h perl.c proto.h + ! win32/GenCAPI.pl win32/makedef.pl +____________________________________________________________________________ +[ 2567] By: gbarr on 1999/01/06 02:31:28 + Log: From: Dan Sugalski + Date: Tue, 05 Jan 1999 16:47:31 -0800 + Message-Id: <3.0.6.32.19990105164731.00b5b2d0@ous.edu> + Subject: [PATCH 5.005_03-MAINT_TRIAL_2]taint.c fix for VMS + Branch: maint-5.005/perl + ! taint.c +____________________________________________________________________________ +[ 2566] By: gbarr on 1999/01/06 02:29:05 + Log: From: "W. Phillip Moore" + Date: Tue, 5 Jan 1999 12:40:27 -0500 (EST) + Message-ID: <13970.20107.190314.549471@zappa> + Subject: [PATCH] POSIX getpgrp is not -w clean + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.pm +____________________________________________________________________________ +[ 2565] By: gbarr on 1999/01/06 02:19:00 + Log: From: Slaven Rezic + Date: Mon, 4 Jan 1999 23:01:46 +0100 (CET) + Message-Id: <199901042201.XAA01875@cabulja.herceg.de> + Subject: FindBin.pm on Win32 systems + Branch: maint-5.005/perl + ! lib/FindBin.pm +____________________________________________________________________________ +[ 2564] By: gbarr on 1999/01/06 02:13:23 + Log: From: Mark Bixby + Date: Mon, 4 Jan 1999 13:34:58 -0800 (PST) + Message-Id: <199901042134.NAA18852@spock.dis.cccd.edu> + Subject: [PATCH 5.005_03-MAINT_TRIAL_2] t/op/sysio.t for MPE/iX + Branch: maint-5.005/perl + ! t/op/sysio.t +____________________________________________________________________________ +[ 2563] By: gbarr on 1999/01/06 02:03:44 + Log: From: Jarkko Hietaniemi + Date: Mon, 4 Jan 1999 19:25:03 +0200 (EET) + Message-Id: <199901041725.TAA30462@alpha.hut.fi> + Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: undo untrue HP-UX 64-bitness (mostly harmless but misleading) + Branch: maint-5.005/perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 2562] By: gbarr on 1999/01/06 02:02:18 + Log: Jumbo doc patch from Abigail + + From: abigail@fnx.com + Message-ID: <19990105170142.4889.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03-TRIAL2 lib/ExtUtils/Liblist.pm] pod fixes + Date: Tue, 5 Jan 1999 12:01:42 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105172855.5115.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Commands.pm] Typo fix. + Date: Tue, 5 Jan 1999 12:28:55 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105173808.5260.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH perl5.005_03 MAINT3 lib/ExtUtils/Embed.pm] Typo fix + Date: Tue, 5 Jan 1999 12:38:08 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105174859.5533.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Install.pm] Typo fix + Date: Tue, 5 Jan 1999 12:48:59 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105174947.5547.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 lib/ExtUtils/MM_Unix.pm] Typo fixes + Date: Tue, 5 Jan 1999 12:49:46 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105182301.5966.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 lib/ExtUtils/MakeMaker.pm] Typos fixes. + Date: Tue, 5 Jan 1999 13:23:00 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105183344.6065.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Manifest.pm] Typo fixes + Date: Tue, 5 Jan 1999 13:33:44 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990105184028.6220.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Mksymlists.pm] Typo fix + Date: Tue, 5 Jan 1999 13:40:28 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990106012015.9451.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/IO/Pipe.pm] Typo fixes. + Date: Tue, 5 Jan 1999 20:20:15 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990106012047.9459.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRAIL2 lib/IO/Seekable.pm] Typo fixes + Date: Tue, 5 Jan 1999 20:20:47 -0500 (EST) + + From: abigail@fnx.com + Message-ID: <19990106012338.9536.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_03 TRIAL2 lib/IO/Socket.pm] Typo fix + Date: Tue, 5 Jan 1999 20:23:38 -0500 (EST) + Branch: maint-5.005/perl + ! ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm + ! ext/IO/lib/IO/Socket.pm lib/ExtUtils/Command.pm + ! lib/ExtUtils/Embed.pm lib/ExtUtils/Install.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm + ! lib/ExtUtils/Mksymlists.pm +____________________________________________________________________________ +[ 2560] By: gbarr on 1999/01/03 16:59:01 + Log: Trial release 2 + Branch: maint-5.005/perl + ! Changes patchlevel.h +____________________________________________________________________________ +[ 2559] By: gbarr on 1999/01/02 15:37:35 + Log: From: Blair Zajac + Date: Wed, 23 Dec 1998 17:13:32 -0800 + Message-ID: <3681953C.8B6A90AA@geostaff.com> + Subject: Tie::SubstrHash patch + Branch: maint-5.005/perl + ! lib/Tie/SubstrHash.pm +____________________________________________________________________________ +[ 2558] By: gbarr on 1999/01/02 15:30:01 + Log: integrate change #2544 + + From: Tim Bunce + Subject: bug in pod2man search for perl binary [5.005_5x] + Date: Sat, 12 Dec 1998 23:08:51 +0000 + Message-ID: <19981212230851.A20578@ig.co.uk> + Branch: maint-5.005/perl + !> pod/pod2man.PL +____________________________________________________________________________ +[ 2557] By: gbarr on 1999/01/02 15:20:42 + Log: integrate change #2548 + + From: Hugo van der Sanden + To: perl5-porters@perl.org + cc: hv@crypt0.demon.co.uk + Subject: [bug 5.004_54] duplicate error message + Date: Thu, 31 Dec 1998 04:05:25 +0000 + Message-Id: <199812310405.EAA00386@crypt.compulink.co.uk> + + Message-ID: <13963.60672.134591.383377@alias-2.pr.mcs.net> + From: Stephen McCamant + To: hv@crypt0.demon.co.uk + Cc: perl5-porters@perl.org + Subject: [PATCH _54] Re: duplicate error message + Date: Thu, 31 Dec 1998 16:10:13 -0600 (CST) + + Message-Id: <199901010732.HAA02926@crypt.compulink.co.uk> + From: Hugo van der Sanden + To: Stephen McCamant + cc: hv@crypt0.demon.co.uk, perl5-porters@perl.org + Subject: [TEST PATCH _54] Re: duplicate error message + Date: Fri, 01 Jan 1999 07:32:14 +0000 + Branch: maint-5.005/perl + ! op.c t/pragma/warn-1global taint.c +____________________________________________________________________________ +[ 2556] By: gbarr on 1999/01/02 15:18:58 + Log: From: abigail@fnx.com + Date: Mon, 28 Dec 1998 14:16:12 -0500 (EST) + Message-ID: <19981228191612.8380.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_02; lib/fields.pm] Typos in pod. + Branch: maint-5.005/perl + ! lib/fields.pm +____________________________________________________________________________ +[ 2555] By: gbarr on 1999/01/02 15:11:45 + Log: intregrate change #2547 + + From: Chris Nandor + Subject: Re: [PATCH] perlport.pod 1.38 + Date: Thu, 31 Dec 1998 09:06:48 -0500 + Message-Id: + Branch: maint-5.005/perl + !> pod/perlport.pod +____________________________________________________________________________ +[ 2543] By: gbarr on 1998/12/31 06:17:13 + Log: integrated relevant parts og changes #2385 & #2387 from mainline + + various fixes for race conditions under threads: mutex locks based + on PL_threadnum were seriously flawed, since it means more than one + thread could enter the critical region; PL_na was global instead of + thread-local; child thread could finish and free thr structures + before Thread->new() got around to creating the Thread object; + cv_clone() needed locking, as it mucks with PL_comppad and other + global data; new_struct_thread() needed to lock template-thread's + mutex while copying its data + + another threads reliability fix: serialize writes to thr->threadsv + avoid most uses of PL_na (which is much more inefficient than a + simple local); update docs to suit; PL_na now being thr->Tna may + be a minor compatibility issue for extensions--will require dTHR + outside of XSUBs (those get automatic dTHR) + Branch: maint-5.005/perl + ! XSUB.h djgpp/djgpp.c doio.c doop.c dump.c embedvar.h + ! ext/DynaLoader/dl_next.xs ext/IO/IO.xs ext/Opcode/Opcode.xs + ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs ext/attrs/attrs.xs + ! gv.c malloc.c mg.c objXSUB.h op.c os2/OS2/REXX/REXX.xs + ! os2/os2.c perl.c perlvars.h perly.c perly.y pod/perlcall.pod + ! pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod pp.c pp.h + ! pp_ctl.c pp_hot.c pp_sys.c run.c sv.c taint.c thread.h toke.c + ! universal.c util.c vms/ext/Stdio/Stdio.xs vms/perly_c.vms + ! vms/vms.c win32/win32.c win32/win32thread.c +____________________________________________________________________________ +[ 2542] By: gbarr on 1998/12/30 14:46:40 + Log: doc updates + + From: abigail@fnx.com + Date: Wed, 23 Dec 1998 22:32:07 -0500 (EST) + Message-ID: <19981224033207.16751.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_02] Typo in documentation of pod2html. + + From: abigail@fnx.com + Date: Wed, 23 Dec 1998 22:59:59 -0500 (EST) + Message-ID: <19981224035959.16994.qmail@alexandra.wayne.fnx.com> + Subject: [PATCH 5.005_02] Re: m// doc is buggy (was Re: m'$foo' is undocumented) + + pod/perldelta.pod from: + From: Jarkko Hietaniemi + Date: Thu, 17 Dec 1998 16:13:34 +0200 (EET) + Message-ID: <13945.4494.140163.973953@alpha.hut.fi> + Subject: Re: important UNDOC issues for 5.005_54 + Branch: maint-5.005/perl + ! pod/perldelta.pod pod/perlop.pod pod/pod2html.PL +____________________________________________________________________________ +[ 2541] By: gbarr on 1998/12/30 14:37:14 + Log: From: jan.dubois@ibm.net (Jan Dubois) + Date: Wed, 23 Dec 1998 21:26:38 +0100 + Message-ID: <36895086.8849224@smtp1.ibm.net> + Subject: [PATCH 5.005_03m1] subdirectory Makefiles should inherit CAPI setting from command line + Branch: maint-5.005/perl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 2538] By: gbarr on 1998/12/29 14:41:29 + Log: From: Jarkko Hietaniemi + Date: Tue, 22 Dec 1998 10:57:48 +0200 (EET) + Message-ID: <13951.24332.932827.831376@alpha.hut.fi> + Subject: Re: x operator broken in DEC Alpha for 8-bit characters (Re: Digest-MD5-2.00 test fails on DEC Alpha - a patch) + Branch: maint-5.005/perl + ! t/op/repeat.t util.c +____________________________________________________________________________ +[ 2535] By: gbarr on 1998/12/29 14:27:56 + Log: From: Jarkko Hietaniemi + Date: Fri, 18 Dec 1998 16:39:27 +0200 (EET) + Message-ID: <13946.26911.140905.387070@alpha.hut.fi> + Subject: Math::Trig, Math::Complex, Fcntl, addressed (Re: Undocumentation Issues for 5.005) + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 2534] By: gbarr on 1998/12/29 14:23:02 + Log: From: Jarkko Hietaniemi + Date: Tue, 15 Dec 1998 17:52:32 +0200 (EET) + Message-ID: <13942.34240.66558.169330@alpha.hut.fi> + Subject: some doc link fixes + Branch: maint-5.005/perl + ! pod/perlcall.pod pod/perldata.pod pod/perldiag.pod + ! pod/perlfaq5.pod pod/perlfaq7.pod pod/perlfunc.pod + ! pod/perlguts.pod pod/perllocale.pod pod/perlobj.pod + ! pod/perlsub.pod pod/perlvar.pod +____________________________________________________________________________ +[ 2533] By: gbarr on 1998/12/29 14:23:00 + Log: From: Chris Nandor + Date: Sat, 19 Dec 1998 12:54:34 -0500 + Message-Id: + Subject: [PATCH] perlport.pod v1.37 + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 2531] By: gbarr on 1998/12/29 14:12:25 + Log: change in_pod pattern to /^=\w/ from /^=/ + From: Frank Ridderbusch + Date: Tue, 15 Dec 1998 16:23:12 +0100 (MET) + Message-ID: <13942.32480.700000.640927@utensil> + Subject: Minor Bug in AutoSplit.qm in 5.005 and 5.004 + Branch: maint-5.005/perl + ! lib/AutoSplit.pm +____________________________________________________________________________ +[ 2530] By: gbarr on 1998/12/29 14:09:51 + Log: undo the "perlsyn intrusion" into perlfunc + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 2529] By: gbarr on 1998/12/29 14:04:35 + Log: From: Jarkko Hietaniemi + Date: Sun, 13 Dec 1998 14:54:56 +0200 (EET) + Message-Id: <199812131254.OAA24494@koah.research.nokia.com> + Subject: ignore_versioned_libs isn't used anywhere (it became ignore_versioned_solibs) + Branch: maint-5.005/perl + ! hints/linux.sh +____________________________________________________________________________ +[ 2528] By: gbarr on 1998/12/29 13:59:49 + Log: From: Ilya Zakharevich + Date: Wed, 28 Oct 1998 01:20:33 -0500 (EST) + Message-Id: <199810280620.BAA06893@monk.mps.ohio-state.edu> + Subject: [PATCH 5.00552] Make sort respect overloading + Branch: maint-5.005/perl + ! pp_ctl.c t/pragma/overload.t +____________________________________________________________________________ +[ 2527] By: gbarr on 1998/12/29 13:58:56 + Log: doc update, quads only work on 64-but platforms + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 2526] By: gbarr on 1998/12/29 13:49:55 + Log: From: Andy Dougherty + Date: Tue, 1 Dec 1998 12:50:27 -0500 (EST) + Message-Id: + Subject: [PATCH 5.005_xx] erroneous 'none' in lddlflags + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2512] By: gbarr on 1998/12/28 14:56:36 + Log: change t/op/pwent.t to ignore NIS includes + From: achampio@lehman.com (Alan Champion) + Date: Tue, 1 Dec 1998 15:18:03 GMT + Message-Id: <9812011518.AA00005@lonhpov1.lehman.com> + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on sun4-solaris 2.3 (UNINSTALLED) + + From: pvhp@forte.com (Peter Prymmer) + Date: Fri, 4 Dec 98 17:11:41 PST + Message-Id: <9812050111.AA16778@forte.com> + Subject: [PATCH 5.005_03-MAINT_TRIAL_1 && 5.005_54]dumper and searchdict ebcdic style + Branch: maint-5.005/perl + ! t/lib/dumper.t t/lib/searchdict.t t/op/pwent.t +____________________________________________________________________________ +[ 2511] By: gbarr on 1998/12/28 14:55:28 + Log: From: jan.dubois@ibm.net (Jan Dubois) + Date: Tue, 01 Dec 1998 00:07:33 +0100 + Message-ID: <366921b5.14512598@smtp1.ibm.net> + Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] to compile on Win32 + + From: jan.dubois@ibm.net (Jan Dubois) + Date: Wed, 02 Dec 1998 00:24:54 +0100 + Message-ID: <366a77bb.19498126@smtp1.ibm.net> + Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] spaces in filenames support + Branch: maint-5.005/perl + ! perl.h proto.h taint.c win32/GenCAPI.pl win32/Makefile + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_sh.PL win32/makedef.pl +____________________________________________________________________________ +[ 2510] By: gbarr on 1998/12/28 14:37:35 + Log: From: Ilya Zakharevich + Date: Tue, 1 Dec 1998 00:34:08 -0500 (EST) + Message-Id: <199812010534.AAA21371@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Debugger 'v' command + Branch: maint-5.005/perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 2478] By: gbarr on 1998/12/13 16:02:24 + Log: From: pvhp@forte.com (Peter Prymmer) + Date: Mon, 30 Nov 98 21:08:36 PST + Message-Id: <9812010508.AA07791@forte.com> + Subject: [PATCH 5.005_03t1 && 5.005_54]dll linkage side decks for OS/390 + Branch: maint-5.005/perl + ! hints/os390.sh +____________________________________________________________________________ +[ 2477] By: gbarr on 1998/12/13 16:00:23 + Log: From: Dan Sugalski + Date: Mon, 30 Nov 1998 17:08:12 -0800 + Message-Id: <3.0.6.32.19981130170812.00b12b70@ous.edu> + Subject: [PATCH 5.005_03]Minor VMS patches needed to build + Branch: maint-5.005/perl + ! lib/ExtUtils/MM_VMS.pm vms/subconfigure.com +____________________________________________________________________________ +[ 2476] By: gbarr on 1998/12/13 15:30:58 + Log: From: pvhp@forte.com (Peter Prymmer) + Date: Fri, 4 Dec 98 00:37:32 PST + Message-Id: <9812040837.AA10908@forte.com> + Subject: Re: [PATCH 5.005_03-MAINT-TRIAL1] some tweaks to the build process for OS/390 + Branch: maint-5.005/perl + ! Makefile.SH regcomp.c +____________________________________________________________________________ +[ 2472] By: gbarr on 1998/12/12 17:12:28 + Log: undo changes to Exporter.pm from #2312 + Branch: maint-5.005/perl + ! lib/Exporter.pm +____________________________________________________________________________ +[ 2471] By: gbarr on 1998/12/12 17:09:39 + Log: integrate change#2459 from cfgperl + + enclose case want_vtbl_collxfrm with #ifdef USE_LOCALE_COLLATE + + From: hansm@icgroup.nl + Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on OPENSTEP-Mach 4_1 (UNINSTALLED) + Date: Sun, 6 Dec 98 22:19:54 +0100 + Message-Id: <9812062116.AA26445@icgned.icgroup.nl> + Branch: maint-5.005/perl + ! util.c +____________________________________________________________________________ +[ 2470] By: gbarr on 1998/12/12 16:46:03 + Log: re-sync'd Text::Wrap with new version from CPAN + Branch: maint-5.005/perl + +> t/lib/textfill.t + ! MANIFEST + !> lib/Text/Wrap.pm t/lib/textwrap.t +____________________________________________________________________________ +[ 2469] By: gbarr on 1998/12/12 15:58:43 + Log: integrate changes#2435,2436 from cfgperl + + Pod::Html and Pod::Text were not locale-savvy: + for example in =head1 all non-ASCII-\w-runs were + turned into underscores in NAME tags. This could + result in several NAME tags becoming identical. + Reported by: + + From: Fyodor Krasnov + Subject: pod2html vs Russian Characters + To: Tom.Christiansen@snn.aha.ru, tchrist@perl.com + Date: Tue, 24 Nov 1998 19:00:36 +0300 (MSK) + Message-Id: <199811241600.TAA05149@stat.aha.ru> + + One paste too many in #2435. + Branch: maint-5.005/perl + !> lib/Pod/Html.pm lib/Pod/Text.pm +____________________________________________________________________________ +[ 2468] By: gbarr on 1998/12/12 15:01:58 + Log: redirect trail program to error msg file in Configure + + From: Andy Dougherty + Date: Tue, 1 Dec 1998 13:40:12 -0500 (EST) + Message-Id: + Subject: [PATCH 5.005_xx] Missing redirection of simple test program + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2467] By: gbarr on 1998/12/12 14:52:24 + Log: Change reall_srchlen back to an int from a #define + + From: Graham Barr + Date: Mon, 30 Nov 1998 14:29:14 -0600 + Message-ID: <19981130142914.X1504@asic.sc.ti.com> + Subject: [PATCH 5.005_03-MT!] Re: one compilation warning from 5_03-MT1 + Branch: maint-5.005/perl + ! malloc.c +____________________________________________________________________________ +[ 2466] By: gbarr on 1998/12/12 14:40:56 + Log: s/SCM_CREDENTIALSS/SCM_CREDENTIALs/ in Socket.xs + + From: Andy Dougherty + Date: Thu, 3 Dec 1998 11:26:25 -0500 (EST) + Message-Id: + Subject: [PATCH 5.005_03-MAINT_TRIAL_1] Trivial grammar patch + Branch: maint-5.005/perl + ! Porting/Glossary + !> ext/Socket/Socket.xs +____________________________________________________________________________ +[ 2456] By: gsar on 1998/12/06 13:49:02 + Log: branch perldelta.pod + Branch: maint-5.005/perl + +> pod/perldelta.pod +____________________________________________________________________________ +[ 2455] By: gsar on 1998/12/06 13:47:21 + Log: clobber perldelta.pod to reestablish branch from perl5005delta.pod + Branch: maint-5.005/perl + - pod/perldelta.pod +____________________________________________________________________________ +[ 2415] By: gbarr on 1998/11/30 02:31:15 + Log: Chnages,patchlevel.h etc... + Branch: maint-5.005/perl + ! Changes MANIFEST patchlevel.h t/op/tr.t win32/Makefile + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 2411] By: gbarr on 1998/11/30 01:31:22 + Log: integrated changes#2323,2353,2369 + + From: maeda@src.ricoh.co.jp + Date: Tue, 24 Nov 1998 10:37:45 +0900 + Message-Id: <199811240137.KAA05867@luna.src.ricoh.co.jp> + Subject: format "..." bug + + Locale collation, ctype, and numeric, were initialized wrong + (if LC_ALL or LANG were unset, so were the collation/ctype/numeric), + as reported by + + From: Ilya.Sandler@etak.com (Ilya Sandler) + Subject: a bug in locale handling: LC_COLLATE ignored sometimes + Date: 25 Nov 1998 04:53:52 +0200 + Message-ID: + + allow final period in a file (not followed by a newline) to + terminate format spec + Branch: maint-5.005/perl + ! pp_ctl.c toke.c util.c + !> t/op/write.t +____________________________________________________________________________ +[ 2408] By: gbarr on 1998/11/30 01:29:19 + Log: integrated ext/B/... changes from mainline + Branch: maint-5.005/perl + !> ext/B/B.pm ext/B/B.xs ext/B/B/Assembler.pm ext/B/B/C.pm + !> ext/B/B/Disassembler.pm +____________________________________________________________________________ +[ 2404] By: gbarr on 1998/11/30 00:26:36 + Log: integrate some of change#2318 from mainline + Branch: maint-5.005/perl + +> t/op/grent.t t/op/pwent.t + !> ext/DB_File/Changes ext/DB_File/DB_File.pm + !> ext/DB_File/DB_File.xs ext/POSIX/hints/dynixptx.pl + !> ext/Socket/Socket.pm ext/Socket/Socket.xs lib/Benchmark.pm + !> pod/perldata.pod t/op/sort.t +____________________________________________________________________________ +[ 2398] By: gbarr on 1998/11/29 22:11:16 + Log: integrate changes#2254,2259,2335,2345,2348,2361,2368,2380 from mainline + + win32_recvfrom() compatibility fix + + From: "Kurt D. Starsinic" + Subject: Re: [PATCH] Re: pod2man bug in date generated line + To: Albert Dvornik , "Larry W. Virden" + Cc: perlbug@perl.com + Date: 20 Nov 1998 21:30:17 +0200 + Message-ID: + + make $1 et al readonly under threads; make C fail like + C<$1 = undef> does + + fix typo in pp_defined() causing C to fail + + more conservative version of changes#2345,2346,2347; those break + C which seems to be extensively used in + the libs :-( + + fix uninitialized warnings + From: Brian Callaghan + Date: Thu, 19 Nov 1998 17:49:10 -0800 + Message-Id: <3654CA96.B64FCAEB@itginc.com> + Subject: Complete.pm patch (version 1.1) + + Liblist tweak suggested by Swen Thuemmler ; + add C<$Config{installarchlib}/CORE> to the default locations searched + on win32 + + prefer IO::Handle for IO if FileHandle:: is empty (as suggested by + Tim Bunce) + Branch: maint-5.005/perl + ! gv.c op.c pp.c + !> lib/ExtUtils/Liblist.pm lib/Term/Complete.pm pod/perlfaq4.pod + !> pod/pod2man.PL t/op/undef.t win32/win32sck.c +____________________________________________________________________________ +[ 2315] By: gbarr on 1998/11/27 05:16:50 + Log: integrate change#2246 from mainline, while still allowing + C + + allow C + Branch: maint-5.005/perl + ! op.c sv.c + !> t/op/sort.t +____________________________________________________________________________ +[ 2314] By: gbarr on 1998/11/27 04:03:58 + Log: integrate change#2159 from mainline + + Data::Dumper update + Branch: maint-5.005/perl + !> ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm + !> ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Todo t/lib/dumper.t +____________________________________________________________________________ +[ 2313] By: gbarr on 1998/11/27 03:04:21 + Log: Fix typo in change#2312 + Branch: maint-5.005/perl + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 2312] By: gbarr on 1998/11/27 03:03:03 + Log: integrate change#1837,1967,1986,2060,2068,2146,2214,2224,2300,2301 from mainline + + (via private mail) + From: Charles Bailey + Date: Sat, 05 Sep 1998 01:23:58 -0400 (EDT) + Message-id: <01J1FH7R43NS002F14@cor.newman.upenn.edu> + Subject: [Patch 5.005_02] Miscellaneous VMS cleanup + + correct bugs exposed in MM_Unix.pm by commenting out Selfloader + (MAN3PODS cannot be set to ' '; stray stricture violation) + + qualify names of builtins + + handle '::' in section names properly + From: Graham Barr + Date: Sat, 17 Oct 1998 12:57:54 -0500 + Message-ID: <19981017125754.C510@pobox.com> + Subject: Re: pod2html + + From: Zachary Miller + Date: Tue, 20 Oct 1998 20:52:20 -0500 + Message-Id: <199810210152.UAA07792@simon.er.usgs.gov> + Subject: Exporter.pm's export_to_level() argument handling buggy + + hand-apply whitespace-mutiliated patch + From: "vishal bhatia" + Date: Wed, 28 Oct 1998 23:45:32 PST + Message-ID: <19981029074534.2334.qmail@hotmail.com> + Subject: [PATCH 5.005_52]Compiling modules,more bugfixes for B + + typo in newHVhv() + + avoid endless loops in Text::Wrap (from a suggestion by Lupe + Christoph ) + + properly free temporaries created by threads + + fix PL_defoutgv leak under threads + Branch: maint-5.005/perl + !> (integrate 31 files) +____________________________________________________________________________ +[ 2311] By: gbarr on 1998/11/27 01:31:36 + Log: integrate change#2210 from mainline + + fix AvREALISH bogusness + Branch: maint-5.005/perl + ! av.c + !> t/op/array.t +____________________________________________________________________________ +[ 2310] By: gbarr on 1998/11/27 00:20:21 + Log: integrate changes#2235,2299,2300 from mainline + + catch a neophyte trap: open(), close() etc. + + fix C misoptimization that fails + to set the package for the block properly + + properly free temporaries created by threads + Branch: maint-5.005/perl + ! ext/Thread/Thread.xs op.c perl.h util.c + !> t/comp/package.t +____________________________________________________________________________ +[ 2309] By: gbarr on 1998/11/27 00:16:36 + Log: integrate change#2298 from mainline + Branch: maint-5.005/perl + !> universal.c +____________________________________________________________________________ +[ 2308] By: gbarr on 1998/11/27 00:11:44 + Log: Updates for MPE/iX DynaLoader and installperl, via private mail + forwarded by Jarkko Hietaniemi from Mark Bixby + Branch: maint-5.005/perl + ! ext/DynaLoader/dl_mpeix.xs installperl +____________________________________________________________________________ +[ 2307] By: gbarr on 1998/11/27 00:07:27 + Log: Remove docs for feature not in _0* + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 2306] By: gbarr on 1998/11/26 23:44:47 + Log: Allow PL_FILES to have multiple targets from one source by allowing + an array ref as the value in the hash + Branch: maint-5.005/perl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 2305] By: gbarr on 1998/11/26 23:38:06 + Log: fix unsigned variables to use SvUV and sv_setuv + Branch: maint-5.005/perl + ! lib/ExtUtils/typemap +____________________________________________________________________________ +[ 2304] By: gbarr on 1998/11/26 23:36:17 + Log: Fix embeded \n in ABSTRACT and <> in AUTHOR + Branch: maint-5.005/perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 2302] By: gbarr on 1998/11/26 15:27:03 + Log: integrate changes#2177,2189,2228,2229 from cfgperl + + 0**0 = 1, from + + From: d-lewart@uiuc.edu (Daniel S. Lewart) + Subject: Math::Complex 0**0 patches + Date: Sun, 1 Nov 1998 19:21:48 -0600 (CST) + Message-Id: <199811020121.TAA28310@staff2.cso.uiuc.edu> + + sysio.t failure: fix undefined order of evaluation, from + + From: Spider Boardman + Subject: Not OK: perl 5.00553 on alpha-thread 5.0 [PATCH] + Date: 4 Nov 1998 01:22:30 +0200 + Message-ID: + + From: "Martin J. Bligh" + Message-ID: <187803647.910720870@w-186d219.rhe.sequent.com> + Subject: Re: Making Perl work on DYNIX/ptx + Date: Tue, 10 Nov 1998 18:01:10 -0800 + + From: "Martin J. Bligh" + Subject: Re: Making Perl work on DYNIX/ptx + Date: Tue, 10 Nov 1998 16:24:26 -0800 + Message-ID: <181999655.910715066@w-186d219.rhe.sequent.com> + Branch: maint-5.005/perl + +> ext/DB_File/hints/dynixptx.pl ext/POSIX/hints/dynixptx.pl + ! pp_sys.c + !> hints/dynixptx.sh lib/Math/Complex.pm t/lib/complex.t +____________________________________________________________________________ +[ 2297] By: gbarr on 1998/11/24 02:32:38 + Log: integrate change#2266 from cfgperl + From: John Tobey + Subject: [PATCH] perlfaq typos + To: perl5-porters@perl.com + Date: 22 Nov 1998 04:25:15 +0200 + Message-ID: + Branch: maint-5.005/perl + !> pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + !> pod/perlfaq7.pod pod/perlfaq8.pod +____________________________________________________________________________ +[ 2296] By: gbarr on 1998/11/24 01:39:18 + Log: integrated changes#2011,2092,2106,2108,2143 from cfgperl + + More robust yacc/bison failure output handling. + + More robustness. + + Bison says 'parse error', not 'parser error'. + + The "parse error" must be converted to "syntax error", + just matching it aint' enough. + + There can be multiple yacc/bison errors. + Branch: maint-5.005/perl + !> t/comp/require.t t/op/misc.t t/pragma/subs.t + !> t/pragma/warning.t +____________________________________________________________________________ +[ 2295] By: gbarr on 1998/11/24 00:49:28 + Log: integrate change#1823 from mainline + From: Joe Buehler + Date: 29 Aug 1998 17:13:28 -0400 + Message-ID: + Subject: patches for perl 5.005_51 under U/WIN + Branch: maint-5.005/perl + +> hints/uwin.sh + ! Configure + !> installman makedepend.SH t/lib/posix.t +____________________________________________________________________________ +[ 2258] By: gbarr on 1998/11/21 20:48:02 + Log: Another Configure patch from Jarkko + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 2257] By: gbarr on 1998/11/21 17:23:13 + Log: Big Configure patch from Jarkko Hietaniemi via + private mail + Branch: maint-5.005/perl + ! Configure Makefile.SH config_h.SH hints/dec_osf.sh + ! hints/freebsd.sh hints/irix_6.sh hints/linux.sh + ! hints/next_3.sh hints/os390.sh pp_sys.c +____________________________________________________________________________ +[ 2239] By: gbarr on 1998/11/14 03:59:58 + Log: more doc changes from mainline + Branch: maint-5.005/perl + ! pod/perldiag.pod pod/perlfunc.pod pod/perlre.pod + !> INSTALL README.vms vms/ext/Stdio/Stdio.pm +____________________________________________________________________________ +[ 2238] By: gbarr on 1998/11/14 02:51:51 + Log: integrate doc changes from mainline, including + changes#1796,1811,1830,1831,1844,1846,1876,1905,2149,2152 + Branch: maint-5.005/perl + !> README.os390 pod/perl.pod pod/perldelta.pod pod/perlfaq1.pod + !> pod/perlform.pod pod/perlfunc.pod pod/perlguts.pod + !> pod/perlipc.pod pod/perllocale.pod pod/perlport.pod + !> pod/perlref.pod pod/perlrun.pod pod/perlvar.pod pod/perlxs.pod + !> pod/pod2man.PL +____________________________________________________________________________ +[ 2237] By: gbarr on 1998/11/14 02:51:49 + Log: integrate change#1847 from mainline + From: Roderick Schertler + Date: Wed, 09 Sep 1998 23:52:48 -0400 + Message-ID: <20567.905399568@eeyore.ibcinc.com> + Subject: seed srand from /dev/urandom when possible + Branch: maint-5.005/perl + ! pp.c +____________________________________________________________________________ +[ 2232] By: gbarr on 1998/11/13 03:12:37 + Log: integrate change#2215 from mainline + set close-on-exec bit on pipe() FDs + Branch: maint-5.005/perl + ! pod/perlfunc.pod pod/perlvar.pod pp_sys.c +____________________________________________________________________________ +[ 2231] By: gbarr on 1998/11/13 02:16:03 + Log: integrate change#2188 from mainline + fix return value of win32_pclose() + Branch: maint-5.005/perl + !> win32/win32.c +____________________________________________________________________________ +[ 2218] By: gbarr on 1998/11/08 16:48:44 + Log: From: Graham Barr + Date: Mon, 2 Nov 1998 07:38:52 -0600 + Message-ID: <19981102073852.A12751@asic.sc.ti.com> + Subject: [PATCH 5.005_*] Re: IPC::Msg 1.03 + Branch: maint-5.005/perl + ! ext/IPC/SysV/Msg.pm +____________________________________________________________________________ +[ 2217] By: gbarr on 1998/11/08 05:22:39 + Log: fix changes in 2213 not to break binary compat + Branch: maint-5.005/perl + ! pp_ctl.c proto.h +____________________________________________________________________________ +[ 2216] By: gbarr on 1998/11/08 04:21:01 + Log: integrate change#2192 from mainline + indeterminate order-of-evaluation fixes + Branch: maint-5.005/perl + ! mg.c +____________________________________________________________________________ +[ 2213] By: gbarr on 1998/11/08 00:39:44 + Log: integrate change#2051 from mainline + properly restore PL_rsfp_filters after require + Branch: maint-5.005/perl + ! embed.h global.sym objXSUB.h objpp.h pp_ctl.c proto.h scope.c + ! scope.h +____________________________________________________________________________ +[ 2212] By: gbarr on 1998/11/07 23:13:29 + Log: integrate changes#1914,1925,1926,1945,1956,1987 from mainline + + normalize tm struct passed to strftime() with mktime() + From: Spider Boardman + Date: Wed, 30 Sep 1998 15:12:09 -0400 + Message-Id: <199809301912.PAA26119@Orb.Nashua.NH.US> + Subject: [PATCH 5.005_52] Re: POSIX::strftime returns incorrect date + + disable USE_THREADS when PERL_OBJECT is enabled + + From: Mark-Jason Dominus + Date: Sun, 04 Oct 1998 14:48:11 -0400 + Message-ID: <19981004184811.16048.qmail@plover.com> + Subject: PATCH: perldoc -f does not locate -e, -r, -x, etc. + + defer "deep recursion" warnings until CXt_SUB context is properly + set up + + Mutexen should be initialized only once. + + perldoc pod update + From: Daniel Grisinger + Date: 06 Oct 1998 23:56:51 -0600 + Message-ID: + Subject: [PATCH _02 and _52] perldoc + Branch: maint-5.005/perl + ! gv.c op.c pp_hot.c + !> ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs utils/perldoc.PL + !> win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 2207] By: gbarr on 1998/11/06 01:36:17 + Log: integrate changes#1912,1948 from mainline + change warning about glob process failure + Branch: maint-5.005/perl + ! pod/perldiag.pod pp_hot.c +____________________________________________________________________________ +[ 2200] By: gbarr on 1998/11/05 04:26:26 + Log: integrate changes#1840,1855,1860,1882,1884,1891,1900,1907 from mainline + pl2bat tweak from Tye McQueen + + reset errno after C search (as suggested by Larry) + + upgrade to CPAN-1.40 + + missing file in last submit (1881) + + temporarily disable perl malloc for a2p until we clean up + conflicting malloc() declarations everywhere + + Fixed apostrophe problem from Mark Knutsen. + + use SETERRNO() to reset errno (suggested by Charles Bailey) + + applied patches, but retained old behavior for win32 (where compilers + can't read from stdin at all) + From: Graham Barr + Date: Mon, 28 Sep 1998 09:41:49 -0500 + Message-ID: <19980928094149.B26576@asic.sc.ti.com> + Subject: Re: 5.005_51 Errno invokes cpprun incorrectly + -- + Date: Tue, 29 Sep 1998 12:35:43 -0500 + Message-ID: <19980929123543.Z26576@asic.sc.ti.com> + Subject: Re: 5.005_51 Errno invokes cpprun incorrectly + + and ext/Errno/Errno_pm.PL from change#2050 + Branch: maint-5.005/perl + ! perl.h pp_ctl.c proto.h sv.h + !> ext/Errno/Errno_pm.PL lib/CPAN.pm lib/CPAN/FirstTime.pm + !> win32/bin/pl2bat.pl x2p/Makefile.SH +____________________________________________________________________________ +[ 2199] By: gbarr on 1998/11/05 03:35:00 + Log: integrate changes#1817,1856,1869,1909 from mainline + updated usethreads hints for hpux 10.X + From: Matthew T Harden + Date: Fri, 28 Aug 1998 14:10:42 GMT + Message-Id: <199808281410.AA11058@mthard1.monsanto.com> + Subject: Re: OK: perl 5.00502 on PA-RISC1.1-thread 10.20 (UNINSTALLED) + + update hints for OPENSTEP 4.2 on i386 + From: Gerben Wierda + Date: Sun, 20 Sep 1998 01:03:18 +0200 + Message-Id: <9809192303.AA29190@Spike> + Subject: Perl 5.005_02 compilation problems + + use STRICT_ALIGNMENT on IRIX to allow usemymalloc=y again + From: Scott Henry + Date: 13 Aug 1998 09:52:15 PDT + Message-Id: + Subject: [PATCH] Irix USE_LONG_LONG/malloc.c incompatibility (was...) + + update SCO hints for dynamic loading + From: Andy Dougherty + Date: Mon, 28 Sep 1998 16:50:38 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV + -- + Date: Tue, 29 Sep 1998 16:48:55 -0400 (EDT) + Message-Id: + Subject: Re: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV + Branch: maint-5.005/perl + !> hints/hpux.sh hints/irix_6.sh hints/next_4.sh hints/sco.sh +____________________________________________________________________________ +[ 2198] By: gbarr on 1998/11/05 03:00:51 + Log: integrate OS2 changes from mainline, change#1836,1930,1996,2063 + and os2/os2,c from #2145 + + From: Ilya Zakharevich + Date: Sat, 5 Sep 1998 00:14:51 -0400 (EDT) + Message-Id: <199809050414.AAA19801@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] OS/2 spawning typos + + From: Ilya Zakharevich + Message-Id: <199810050637.CAA07781@monk.mps.ohio-state.edu> + Date: Mon, 5 Oct 1998 02:37:43 -0400 (EDT) + Subject: [PATCH 5.005_52] Cumulative OS/2-related patch + + From: Ilya Zakharevich + Date: Tue, 13 Oct 1998 04:46:00 -0400 (EDT) + Message-Id: <199810130846.EAA00769@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_52] Memory overrun in os2.c + + From: Ilya Zakharevich + Date: Sun, 18 Oct 1998 23:20:57 -0400 (EDT) + Message-Id: <199810190320.XAA28249@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Improve sbrk() on OS/2 + + remaining PL_foo stragglers + Branch: maint-5.005/perl + ! mg.c perl_exp.SH util.c + !> hints/os2.sh os2/Changes os2/Makefile.SHs os2/os2.c +____________________________________________________________________________ +[ 2197] By: gbarr on 1998/11/05 02:15:53 + Log: integrate changes#1826,1862 from mainline + + From: Jarkko Hietaniemi + Date: Wed, 12 Aug 1998 22:41:37 +0300 (EET DST) + Message-Id: <199808121941.WAA06263@alpha.hut.fi> + Subject: [PATCH] 5.004_50 or 5.005_02: get rid of interp.sym because not even AIX needs it + + remove bogus warn() + Branch: maint-5.005/perl + - interp.sym + ! MANIFEST Makefile.SH embed.pl perl_exp.SH +____________________________________________________________________________ +[ 2194] By: gbarr on 1998/11/05 01:26:46 + Log: integarte malloc.c changes from mainline change#1807,2112,2133 + Branch: maint-5.005/perl + !> malloc.c +____________________________________________________________________________ +[ 2193] By: gbarr on 1998/11/05 01:25:31 + Log: integrate changes#1763,1778,1801,1804 from mainline + + From: Stephen McCamant + Date: Sun, 2 Aug 1998 16:33:18 -0500 (CDT) + Message-ID: <13764.55116.921952.837027@alias-2.pr.mcs.net> + Subject: [PATCH] Eliminate superfluous RV2p[AH]Vs in oops[AH]V() + + Implicit require during compile reset line numbering + + silence redefined warning for XS(INIT) {} + + From: Laszlo Molnar + Date: Sun, 9 Aug 1998 22:38:23 +0200 + Message-ID: <19980809223823.A215@cdata.tvnet.hu> + Subject: [PATCH 5.5002] dos-djgpp update + Branch: maint-5.005/perl + ! op.c pp_ctl.c + !> t/io/fs.t +____________________________________________________________________________ +[ 2176] By: gbarr on 1998/11/02 04:51:48 + Log: integrate change#2030 from mainline + + fix handling of mayhaps-extended @_ in goto &sub + Branch: maint-5.005/perl + ! av.c pp_ctl.c + !> t/op/goto.t +____________________________________________________________________________ +[ 2175] By: gbarr on 1998/11/02 04:32:02 + Log: integrate chnage#1934,1935 from mainline + fix USE_THREADS coredump due to uninitialized PL_hv_fetch_ent_mh + add test for previous fix + Branch: maint-5.005/perl + ! util.c + !> ext/Thread/create.t +____________________________________________________________________________ +[ 2174] By: gbarr on 1998/11/02 04:22:20 + Log: integrate change#1863,1881 from mainline + + provide locked access to string table for USE_THREADS + + serial access to PL_x[inpr]v_root for USE_THREADS + Branch: maint-5.005/perl + ! embedvar.h objXSUB.h perl.c proto.h sv.c + !> hv.c intrpvar.h thread.h +____________________________________________________________________________ +[ 2173] By: gbarr on 1998/11/02 04:10:46 + Log: integrate change#1990 from mainline + + provide option to enable optimization with VC (suggested by Jan + Dubois) + Branch: maint-5.005/perl + !> win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 2172] By: gbarr on 1998/11/02 02:52:29 + Log: integrate changes#1944,1948,1966 from mainline + + change#1614 merely disabled earlier fix (doh!); undo it and properly + fixup the cop_seq value that must be seen by lexical lookups that + emanate within eval'' + + tweak to make fix in change#1944 behave correctly for closures + created within eval'' + Branch: maint-5.005/perl + ! op.c pp_ctl.c pp_hot.c scope.c + !> cop.h t/op/eval.t +____________________________________________________________________________ +[ 2171] By: gbarr on 1998/11/01 03:59:39 + Log: integrate changes 1835,2003,2067 and File::Find change in 1938 + warn on C + + silence -w noises (suggested by Greg Bacon) Term::Complete + + From: jan.dubois@ibm.net (Jan Dubois) + Date: Wed, 21 Oct 1998 00:55:51 +0200 + Message-ID: <36380269.55370608@smtp1.ibm.net> + Subject: Make _really_ sure Dynaloader.xs code is initialized only once + Branch: maint-5.005/perl + ! op.c pod/perldiag.pod + !> ext/DynaLoader/DynaLoader_pm.PL lib/File/Find.pm + !> lib/Term/Complete.pm +____________________________________________________________________________ +[ 2170] By: gbarr on 1998/11/01 03:48:38 + Log: integrate change 1992 from mainline + + applied suggested patch with small doc tweak + From: Gisle Aas + Date: 11 Oct 1998 12:53:13 +0200 + Message-ID: + Subject: Re: [PATCH 5.005_52] Optional syswrite LENGTH argument + Branch: maint-5.005/perl + ! pod/perlfunc.pod pp_sys.c + !> opcode.h opcode.pl t/op/sysio.t t/op/tiehandle.t +____________________________________________________________________________ +[ 2168] By: gbarr on 1998/11/01 01:58:58 + Log: From: jan.dubois@ibm.net (Jan Dubois) + Date: Fri, 09 Oct 1998 23:28:31 +0200 + Message-ID: <36217b7f.3193091@smtp1.ibm.net> + Subject: [PATCH 5.005_02] Allow XS access to vtbl_*s when compiled with PERL_OBJECT + Branch: maint-5.005/perl + ! XSUB.h +____________________________________________________________________________ +[ 2167] By: gbarr on 1998/11/01 01:22:41 + Log: integrate change#2029 from mainline + restore sanity to "constant" references + Branch: maint-5.005/perl + ! op.c pod/perldiag.pod + !> lib/constant.pm t/pragma/constant.t +____________________________________________________________________________ +[ 2166] By: gbarr on 1998/11/01 01:04:24 + Log: integrate changes#1895,1896,2066,2147,2148 from mainline + fix win32_stat() to do the right thing for share names + + small tweak on last change + + recognize '%' as a shell metachar for win32 + From: jan.dubois@ibm.net (Jan Dubois) + Date: Tue, 20 Oct 1998 21:57:35 +0200 + Message-ID: <3636ea31.49170453@smtp1.ibm.net> + Subject: [PATCH 5.005_02, Win32] Re: %ENV% not expanded in backquotes? + + tweaked version of suggested patch + From: Anton Berezin + Date: 29 Oct 1998 14:48:54 +0100 + Message-ID: <86yapzv5q1.fsf@lion.plab.ku.dk> + Subject: [PATCH 5.005_52] One more problem with win32_stat and MSVC + + From: Anton Berezin + Date: 29 Oct 1998 17:06:25 +0100 + Message-ID: <86pvbbuzcu.fsf@lion.plab.ku.dk> + Subject: [PATCH 5.005_52] win32_opendir() fails on empty drives + Branch: maint-5.005/perl + !> win32/win32.c +____________________________________________________________________________ +[ 2165] By: gbarr on 1998/11/01 00:10:15 + Log: integrated changes#1941,1942,1943,1975,2061,2111,2151 from mainline + + don't longjmp() in pp_goto() (regressive bug from old single-stack + implementation) + + force copy of substrings when matching against temporaries + + ensure recursive attempts to findlex()icals know enough about where + the last eval'' context was encountered + + propagate typeness of lexicals while cloning them + + From: Graham Barr + Date: Sat, 17 Oct 1998 22:22:02 -0500 + Message-ID: <19981017222202.J510@pobox.com> + Subject: Re: '*' prototype does not allow bareword with strict + + smarter C<$SIG{FOO} = BAREWORD;> warning + + From: Mark-Jason Dominus + Date: Fri, 30 Oct 1998 14:24:23 EST + Message-Id: <19981030192423.27276.qmail@plover.com> + Subject: PATCH: (5.005_02) a2p should use `chomp' instead of `chop' + Branch: maint-5.005/perl + ! op.c pp_ctl.c pp_hot.c t/op/pat.t toke.c + !> t/op/eval.t t/op/runlevel.t x2p/walk.c +____________________________________________________________________________ +[ 2158] By: gbarr on 1998/10/31 05:03:02 + Log: integrate changes#1821 & 1857 from mainline + + s/runops/CALLRUNOPS/ + + From: Ilya Zakharevich + Date: Tue, 22 Sep 1998 17:30:16 -0400 (EDT) + Message-Id: <199809222130.RAA17034@monk.mps.ohio-state.edu> + Subject: More verbose Test::Harness [PATCH] + Branch: maint-5.005/perl + !> cc_runtime.h lib/Test/Harness.pm +____________________________________________________________________________ +[ 2157] By: gbarr on 1998/10/31 02:35:07 + Log: integrate change#1839 from mainline + From: Drago Goricanec + Date: Mon, 7 Sep 1998 17:36:09 +0900 + Message-Id: <199809070836.RAA14631@raptor.otsd.ts.fujitsu.co.jp> + Subject: Thread::cond_wait bug in 5.005.51 causes deadlock + Branch: maint-5.005/perl + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 2156] By: gbarr on 1998/10/31 02:22:11 + Log: integrate change#1829 from mainline + fix problematic typecast in filter_del() + From: Mark P Lutz + Date: Mon, 31 Aug 1998 21:13:11 GMT + Message-Id: <199808312113.VAA53356@triton.ca.boeing.com> + Subject: perl5.005_02 does not build on Cray T90 + Branch: maint-5.005/perl + ! toke.c +____________________________________________________________________________ +[ 2155] By: gbarr on 1998/10/31 01:59:08 + Log: integrate chnages#1824,2118 from mainline + From: Ilya Zakharevich + Date: Sat, 29 Aug 1998 17:38:30 -0400 (EDT) + Message-Id: <199808292138.RAA18359@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Protect debugger from nonlocal exits + + From: Ilya Zakharevich + Date: Wed, 28 Oct 1998 01:23:27 -0500 (EST) + Message-Id: <199810280623.BAA06968@monk.mps.ohio-state.edu> + Subject: [PATCH 5.00552] Minor debugger tweaks + Branch: maint-5.005/perl + !> lib/perl5db.pl +____________________________________________________________________________ +[ 2154] By: gbarr on 1998/10/31 01:06:35 + Log: integrate all lib/ExtUtils/... changes from mainline + Branch: maint-5.005/perl + !> lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm + !> lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm + !> lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mkbootstrap.pm + !> lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp +____________________________________________________________________________ +[ 2139] By: gbarr on 1998/10/30 04:17:53 + Log: apply chnage#2071 from mainline + From: Graham Barr + Date: Sat, 17 Oct 1998 20:42:41 -0500 + Message-ID: <19981017204241.G510@pobox.com> + Subject: Re: taint checking for: use lib "$ENV{'EVIL'}" + Branch: maint-5.005/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 2138] By: gbarr on 1998/10/30 04:14:35 + Log: apply change#2077 from mainline + From: Graham Barr + Date: Sat, 24 Oct 1998 21:45:50 -0500 + Message-ID: <19981024214550.C508@pobox.com> + Subject: Re: die with a reference should use overload "" operator + Branch: maint-5.005/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 2137] By: gbarr on 1998/10/30 04:01:06 + Log: integrate change#1937 from mainline + fix $/ init for USE_THREADS + Branch: maint-5.005/perl + ! perl.c +____________________________________________________________________________ +[ 2136] By: gbarr on 1998/10/30 03:40:55 + Log: apply change#2076 from mainline + From: Graham Barr + Date: Sat, 24 Oct 1998 12:45:21 -0500 + Message-ID: <19981024124521.C512@pobox.com> + Subject: [PATCH 5.005_02] Re: Auto-incrementing tied scalar causes SEGV + Branch: maint-5.005/perl + ! sv.c +____________________________________________________________________________ +[ 2135] By: gbarr on 1998/10/30 03:28:29 + Log: integrate change#1873 from mainline + From: Ilya Zakharevich + Date: Tue, 25 Aug 1998 04:29:49 -0400 (EDT) + Message-Id: <199808250829.EAA02470@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Extraneous warning for (?()A|B) + Branch: maint-5.005/perl + ! regcomp.c +____________________________________________________________________________ +[ 2134] By: gbarr on 1998/10/30 03:15:12 + Log: integrate change#1816 from mainline + don't create empty directories in installperl + From: Robin Barker + Date: Fri, 21 Aug 1998 11:29:24 +0100 (BST) + Message-Id: <199808211029.LAA00551@cyclone.cise.npl.co.uk> + Subject: [PATCH 5.005_02] install: empty dirs + Branch: maint-5.005/perl + !> installperl +____________________________________________________________________________ +[ 2132] By: gbarr on 1998/10/30 01:39:00 + Log: integrate changes#1815 & 1828 from mainline + make behavior of /(a{3})+/ like /(aaa)+/ w.r.t where it matches + From: Ilya Zakharevich + Date: Fri, 21 Aug 1998 05:41:02 -0400 (EDT) + Message-Id: <199808210941.FAA16467@monk.mps.ohio-state.edu> + Subject: Re: your mail + + From: Ilya Zakharevich + Date: Mon, 31 Aug 1998 14:52:10 -0400 (EDT) + Message-Id: <199808311852.OAA24676@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_5*] (?>) broken in RE + Branch: maint-5.005/perl + ! regexec.c + !> t/op/re_tests +____________________________________________________________________________ +[ 2131] By: gbarr on 1998/10/30 01:09:19 + Log: integrate change#1947 from mainline + let docatch() pass the buck when restartop turns out to be null, + making exceptions in BEGIN{} propagate as expected + Branch: maint-5.005/perl + ! pp_ctl.c + !> t/op/misc.t +____________________________________________________________________________ +[ 2129] By: gbarr on 1998/10/29 14:53:11 + Log: integrate change#1810 from mainline + fix bogus integerization of pop()'s return value + From: Gurusamy Sarathy + Date: Sat, 15 Aug 1998 23:27:54 -0400 + Message-Id: <199808160327.XAA05186@aatma.engin.umich.edu> + Subject: Re: Complex expression does integer arithmetic + Branch: maint-5.005/perl + !> opcode.h opcode.pl +____________________________________________________________________________ +[ 2128] By: gbarr on 1998/10/29 14:28:13 + Log: integrate change#1870 from mainline + From: Dan Sugalski + Date: Fri, 14 Aug 1998 09:20:16 PDT + Message-Id: <3.0.5.32.19980814092016.00b37dc0@ous.edu> + Subject: [PATCH 5.005_02] (and _5x I expect) VMS config procedure patch + Branch: maint-5.005/perl + !> configure.com +____________________________________________________________________________ +[ 2127] By: gbarr on 1998/10/29 13:36:29 + Log: Integrate change#1789 from mainline + delay freeing itervar so C works + Branch: maint-5.005/perl + !> cop.h t/cmd/for.t +____________________________________________________________________________ +[ 2123] By: gbarr on 1998/10/29 02:43:01 + Log: Apply change#2075 from mainline + fix C etc. + Branch: maint-5.005/perl + ! toke.c +____________________________________________________________________________ +[ 2122] By: gbarr on 1998/10/29 02:40:31 + Log: Apply change#2070 from mainline + avoid bogus line number in XSUB redefined warnings + Branch: maint-5.005/perl + ! op.c +____________________________________________________________________________ +[ 2121] By: gbarr on 1998/10/29 02:38:59 + Log: Apply change#2052 from mainline + avoid the circular refcnt logic in magic_mutexfree() + Branch: maint-5.005/perl + ! mg.c pp.c pp_hot.c +____________________________________________________________________________ +[ 2120] By: gbarr on 1998/10/29 02:36:23 + Log: Remove "5.005" hard-coded and expose vtbl_* from the perl DLL + From: "Douglas Lankshear" + Date: Mon, 28 Sep 1998 08:49:13 -0700 + Message-ID: <000001bdeaf7$8a189350$a32fa8c0@tau.Active> + Subject: PATCH [5.005_02] update + Branch: maint-5.005/perl + ! embed.h global.sym objXSUB.h objpp.h perl.h proto.h util.c + ! win32/win32.c +____________________________________________________________________________ +[ 2084] By: gbarr on 1998/10/25 19:09:11 + Log: Integrate change#2069 from mainline + From: Martijn Koster + Date: Wed, 21 Oct 1998 13:12:03 +0100 + Message-ID: <19981021131203.A15661@excitecorp.com> + Subject: File::Path::mkpath reports the wrong error + Branch: maint-5.005/perl + !> lib/File/Path.pm +____________________________________________________________________________ +[ 2083] By: gbarr on 1998/10/25 18:48:39 + Log: Integrate change#1965 from mainline + use better numbers for exitstatus test + Branch: maint-5.005/perl + !> t/op/die_exit.t +____________________________________________________________________________ +[ 2082] By: gbarr on 1998/10/25 18:22:54 + Log: Apply change 2054 from mainline + disallow 'x' in hex numbers (except leading '0x') + From: Gisle Aas + Date: 16 Oct 1998 16:33:12 +0200 + Message-ID: + Subject: Re: [PATCH 5.005_52] 'x' is not a legal hex digit + Branch: maint-5.005/perl + ! perlvars.h util.c + !> t/op/oct.t +____________________________________________________________________________ +[ 2081] By: gbarr on 1998/10/25 17:58:04 + Log: Apply change #1998 from mainline + skip readonly vars and unref references when doing a reset() + Branch: maint-5.005/perl + ! sv.c +____________________________________________________________________________ +[ 2080] By: gbarr on 1998/10/25 16:06:35 + Log: Integrate changes #2072 & #1993 from mainline + fix bug in B::CC::pp_sassign() + From: "vishal bhatia" + Date: Sun, 11 Oct 1998 18:41:38 PDT + Message-ID: <19981012014139.19614.qmail@hotmail.com> + Subject: B::CC problems with pp_sassign routine + implement C and other fixes (via private mail) + From: "vishal bhatia" + Date: Wed, 21 Oct 1998 22:59:03 PDT + Message-Id: <19981022055904.20083.qmail@hotmail.com> + Subject: [PATCH 5.005_52] More fixes for B + Branch: maint-5.005/perl + !> ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm +____________________________________________________________________________ +[ 2079] By: gbarr on 1998/10/25 14:08:00 + Log: integrate from mainline more FSF address changes + Branch: maint-5.005/perl + !> Copying ext/B/README lib/Getopt/Long.pm +____________________________________________________________________________ +[ 2053] By: gbarr on 1998/10/25 04:56:47 + Log: From: Graham Barr + Date: Sat, 17 Oct 1998 23:05:18 -0500 + Message-ID: <19981017230518.K510@pobox.com> + Subject: Re: redo LOOP not restoring $` $' $& + Branch: maint-5.005/perl + ! cop.h t/cmd/while.t +____________________________________________________________________________ +[ 2048] By: gbarr on 1998/10/24 04:20:10 + Log: Change Free Software Foundation address in README + Branch: maint-5.005/perl + !> README +____________________________________________________________________________ +[ 2047] By: gbarr on 1998/10/24 04:02:20 + Log: Remove #ifdef DEBUGGING around SvTEMP_off + From: Gurusamy Sarathy + Date: Mon, 28 Sep 1998 15:23:39 -0400 + Message-Id: <199809281923.PAA10303@aatma.engin.umich.edu> + Subject: Re: [PATCH] Re: 5.005_52: the miniperl coredump: touch magic and you're toast + Branch: maint-5.005/perl + ! scope.c +____________________________________________________________________________ +[ 2046] By: gbarr on 1998/10/24 04:00:54 + Log: use cpp symbols instead of hardwired constants + From: Hugo van der Sanden + Date: Mon, 05 Oct 1998 09:23:33 +0100 + Message-Id: <199810050823.JAA00891@crypt.compulink.co.uk> + Subject: [PATCH 5.005_52] By the numbers (resend) + Branch: maint-5.005/perl + ! op.c +____________________________________________________________________________ +[ 2045] By: gbarr on 1998/10/24 03:50:25 + Log: squelch undef warnings + From: Hugo van der Sanden + Date: Fri, 02 Oct 1998 11:01:14 +0100 + Message-Id: <199810021001.LAA19214@crypt.compulink.co.uk> + Subject: [PATCH] Re: Apparent bug in Math::BigInt + Branch: maint-5.005/perl + !> lib/Math/BigInt.pm +____________________________________________________________________________ +[ 2044] By: gbarr on 1998/10/24 03:47:24 + Log: Add note to INSTALL about ANSI C + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 2043] By: gbarr on 1998/10/24 02:38:12 + Log: make C AUTOLOAD-aware (autouse now works for modules + that are autoloaded) + From: Gurusamy Sarathy + Date: Thu, 24 Sep 1998 03:01:01 -0400 + Message-Id: <199809240701.DAA16223@aatma.engin.umich.edu> + Subject: Re: autouse and Getopt::Long don't work together anymore + Branch: maint-5.005/perl + ! pp_ctl.c t/op/goto.t +____________________________________________________________________________ +[ 2042] By: gbarr on 1998/10/24 02:16:26 + Log: From: jarkko.hietaniemi@research.nokia.com (Jarkko Hietaniemi) + Date: Wed, 12 Aug 1998 15:42:35 +0300 + Message-Id: <199808121242.PAA29761@comanche.spices> + Subject: [PATCH] 5.004_02 or 5.005_51: fix regexp and tr character ranges in non-ASCII lands + Branch: maint-5.005/perl + + t/op/tr.t + ! MANIFEST perl.h pod/perllocale.pod pod/perlop.pod + ! pod/perlre.pod regcomp.c t/pragma/locale.t toke.c +____________________________________________________________________________ +[ 2021] By: gbarr on 1998/10/20 01:25:23 + Log: From: Chip Salzenberg + Date: Tue, 6 Oct 1998 13:33:05 -0400 + Message-ID: <19981006133305.A2348@perlsupport.com> + Subject: [PATCH] 5.005_02: Eliminate leak on self-ties + Branch: maint-5.005/perl + ! av.c doop.c hv.c mg.c mg.h pp.c pp_hot.c pp_sys.c scope.c + ! t/op/tie.t +____________________________________________________________________________ +[ 2015] By: gbarr on 1998/10/17 21:49:56 + Log: make h2xs generate ANSI prototypes + Branch: maint-5.005/perl + !> utils/h2xs.PL +____________________________________________________________________________ +[ 2014] By: gbarr on 1998/10/17 20:31:42 + Log: Fix POSIX::sigprocmask not to check type of $old parameter + as it is output only + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 2013] By: gbarr on 1998/10/17 17:51:16 + Log: From: "Kurt D. Starsinic" + Date: Thu, 20 Aug 1998 20:59:03 -0400 + Message-ID: <19980820205903.A12908@O2.chapin.edu> + Subject: [PATCH] h2ph misquotes #error directives + + fix h2ph handling of C<#error "foo"> + From: SAKAI Kiyotaka + Date: Thu, 10 Sep 1998 09:59:33 +0900 + Message-Id: <19980910095933N.ksakai@netwk.ntt-at.co.jp> + Subject: [5.005_02] h2ph problem + Branch: maint-5.005/perl + !> t/lib/h2ph.pht utils/h2ph.PL +____________________________________________________________________________ +[ 1985] By: gbarr on 1998/10/17 00:41:40 + Log: s/last/first/ typo in append_list() + Branch: maint-5.005/perl + ! op.c +____________________________________________________________________________ +[ 1984] By: gbarr on 1998/10/17 00:36:51 + Log: From: "Green, Paul" + Date: Thu, 10 Sep 1998 00:02:07 -0400 + Message-ID: <646CD0392810D211B04A00A024BF26FB1022EB@terminator.sw.stratus.com> + Subject: RE: [PATCH] 5.005_02 and 5.005_51: Stratus VOS port + Branch: maint-5.005/perl + + README.vos vos/Changes vos/build.cm vos/compile_perl.cm + + vos/config.h vos/config_h.SH_orig vos/perl.bind + + vos/test_vos_dummies.c vos/vos_dummies.c vos/vosish.h + ! MANIFEST perl.c perl.h pod/perlport.pod +____________________________________________________________________________ +[ 1983] By: gbarr on 1998/10/17 00:23:31 + Log: define PUT_svindex(), PUT_opindex() + Branch: maint-5.005/perl + !> ext/B/B/Assembler.pm +____________________________________________________________________________ +[ 1982] By: gbarr on 1998/10/17 00:20:57 + Log: From: Jochen Wiedmann + Date: Thu, 17 Sep 1998 17:16:06 +0200 + Message-ID: <360127B6.E44564A@ispsoft.de> + Subject: [PATCH] ExtUtils::MakeMaker::prompt cannot return 0 + Branch: maint-5.005/perl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1981] By: gbarr on 1998/10/16 02:58:10 + Log: better CR-handling on shebang line and in formats (fixed variant of + patch suggested by Igor Sysoev ) + Branch: maint-5.005/perl + ! perl.c toke.c +____________________________________________________________________________ +[ 1980] By: gbarr on 1998/10/16 02:21:57 + Log: From: Roderick Schertler + Date: 11 Sep 1998 16:19:21 -0400 + Message-ID: + Subject: Re: Open2 and memory leaks + Branch: maint-5.005/perl + !> lib/IPC/Open3.pm +____________________________________________________________________________ +[ 1979] By: gbarr on 1998/10/16 02:15:54 + Log: integrate change #1908 from mainline + Branch: maint-5.005/perl + !> lib/File/Find.pm +____________________________________________________________________________ +[ 1977] By: gbarr on 1998/10/16 01:52:46 + Log: tests missing from change #1794 + Branch: maint-5.005/perl + ! t/op/re_tests +____________________________________________________________________________ +[ 1794] By: gbarr on 1998/09/20 15:59:20 + Log: From: Ilya Zakharevich + Date: Tue, 11 Aug 1998 18:43:29 -0400 (EDT) + Message-Id: <199808112243.SAA14243@monk.mps.ohio-state.edu> + Subject: Re: Segmentation fault for /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/ + Branch: maint-5.005/perl + ! regcomp.c t/op/re_tests +____________________________________________________________________________ +[ 1793] By: gbarr on 1998/09/20 15:39:41 + Log: From: Peter Prymmer + Date: Mon, 10 Aug 98 16:58:22 PDT + Message-Id: <9808102358.AA10616@forte.com> + Subject: fix for unpack('u') failures on OS/390 + Branch: maint-5.005/perl + ! pp.c +____________________________________________________________________________ +[ 1792] By: gbarr on 1998/09/20 15:11:33 + Log: From: "M.J.T. Guy" + Date: Sun, 9 Aug 1998 15:51:48 +0100 + Message-Id: + Subject: Fix typo, change "an array" to "a hash" + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1791] By: gbarr on 1998/09/20 14:49:26 + Log: From: Gurusamy Sarathy + Date: Wed, 16 Sep 1998 22:13:17 -0400 + Message-Id: <199809170213.WAA10546@aatma.engin.umich.edu> + Subject: fill gaps in sig_* entries in win32/config.?c + and resync win32/config.?c with Porting/config.sh to pick up apiversion + Branch: maint-5.005/perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1790] By: gbarr on 1998/09/20 14:40:56 + Log: From: Gurusamy Sarathy + Date: Sun, 06 Sep 1998 15:35:11 -0400 + Message-Id: <199809061935.PAA21531@aatma.engin.umich.edu> + Subject: suppress bogus warning on C + Branch: maint-5.005/perl + ! toke.c +____________________________________________________________________________ +[ 1784] By: nick on 1998/09/12 09:53:36 + Log: Two tweaks to allow quiet compile qith egcs-1.1 + Branch: maint-5.005/perl + ! win32/win32.h +____________________________________________________________________________ +[ 1783] By: gbarr on 1998/09/07 20:33:11 + Log: Subject: index() applied BM optimization to wrong argument + From: larry@wall.org (Larry Wall) + Date: Thu, 3 Sep 1998 12:49:13 -0700 + Message-Id: <199809031949.MAA29566@wall.org>, <199809060004.RAA23792@wall.org> + Branch: maint-5.005/perl + ! op.c util.c +____________________________________________________________________________ +[ 1782] By: gbarr on 1998/09/07 18:54:49 + Log: From: Gurusamy Sarathy + Date: Fri, 28 Aug 1998 00:33:15 -0400 + Mssage-Id: <199808280433.AAA06767@aatma.engin.umich.edu> + Subject: socket problems on NT + Branch: maint-5.005/perl + ! objXSUB.h +____________________________________________________________________________ +[ 1759] By: gsar on 1998/08/08 20:57:47 + Log: pending submit of 5.005_02 + Branch: maint-5.005/perl + ! Changes + +---------------- +Version 5.005_02 Second maintenance release of 5.005 +---------------- + +____________________________________________________________________________ +[ 1758] By: gsar on 1998/08/08 03:45:04 + Log: set patchlevel.h, other minor tweaks + Branch: maint-5.005/perl + ! Changes patchlevel.h pod/perlhist.pod pod/perlport.pod +____________________________________________________________________________ +[ 1757] By: gsar on 1998/08/08 03:33:33 + Log: prevent lexical leaks from Benchmark into target code (inspired by + an attempt by John Allen) + Branch: maint-5.005/perl + ! lib/Benchmark.pm +____________________________________________________________________________ +[ 1755] By: gsar on 1998/08/07 23:58:33 + Log: temporary opcode.pl workaround for ebcdic (suggested by + David J. Fiander and M.J.T. Guy) + Branch: maint-5.005/perl + ! opcode.pl +____________________________________________________________________________ +[ 1754] By: gsar on 1998/08/07 22:21:10 + Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Date: Fri, 7 Aug 1998 09:56:01 +0100 (BST) + Message-Id: <9808070856.AA28065@claudius.bfsec.bt.co.uk> + Subject: [PATCH 5.005_50 & 5.005_02] Fix for command line use of source filters + Branch: maint-5.005/perl + ! perl.c +____________________________________________________________________________ +[ 1753] By: gsar on 1998/08/07 22:19:42 + Log: perlport.pod notes from Jarkko Hietaniemi; utime() note for Win32 + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 1752] By: gsar on 1998/08/07 22:08:29 + Log: perlport.pod v1.33 from Chris Nandor + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 1751] By: gsar on 1998/08/07 22:01:04 + Log: From: Ilya Zakharevich + Date: Thu, 6 Aug 1998 19:44:16 -0400 (EDT) + Message-Id: <199808062344.TAA09505@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Minor cleanup of RE tests and docs + Branch: maint-5.005/perl + ! pod/perlre.pod t/op/regexp.t +____________________________________________________________________________ +[ 1750] By: gsar on 1998/08/07 21:51:52 + Log: allow more compatible interpretation of spaces File::DosGlob::glob() + patterns + Branch: maint-5.005/perl + ! lib/File/DosGlob.pm +____________________________________________________________________________ +[ 1749] By: gsar on 1998/08/07 21:36:04 + Log: don't use © in Test.pm (suggested by M.J.T. Guy) + Branch: maint-5.005/perl + ! lib/Test.pm +____________________________________________________________________________ +[ 1748] By: gsar on 1998/08/07 21:31:46 + Log: From: Dominic Dunlop + Date: Thu, 6 Aug 1998 12:38:07 +0000 + Message-Id: + Subject: [Patch perl5.005_02-TRIAL2] Update hints, Configure for MachTen 4.1.1 + Branch: maint-5.005/perl + ! Configure hints/machten.sh +____________________________________________________________________________ +[ 1746] By: gsar on 1998/08/05 22:55:59 + Log: MM_Win32.pm and Liblist.pm tweaks + Branch: maint-5.005/perl + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm +____________________________________________________________________________ +[ 1745] By: gsar on 1998/08/05 21:57:00 + Log: pod/perlfaq* update from Tom Christiansen + Branch: maint-5.005/perl + ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq8.pod +____________________________________________________________________________ +[ 1744] By: gsar on 1998/08/05 21:53:30 + Log: From: Chris Nandor + Date: Wed, 5 Aug 1998 15:38:48 -0400 + Message-Id: + Subject: [PATCH] perlport 1.32 + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 1743] By: gsar on 1998/08/05 21:52:05 + Log: README.os2 update + From: Ilya Zakharevich + Date: Wed, 5 Aug 1998 05:44:46 -0400 (EDT) + Message-Id: <199808050944.FAA09053@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Additional OS/2 tweaks: docs, tests + Branch: maint-5.005/perl + ! README.os2 t/lib/posix.t t/op/exec.t +____________________________________________________________________________ +[ 1742] By: gsar on 1998/08/05 21:50:07 + Log: additional INSTALL notes from Jarkko Hietaniemi + on semget failure in t/lib/ipc_sysv.t + Branch: maint-5.005/perl + ! INSTALL +____________________________________________________________________________ +[ 1741] By: gsar on 1998/08/05 21:46:13 + Log: correct URL for perlcrt.dll + Branch: maint-5.005/perl + ! Changes win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1740] By: gsar on 1998/08/05 10:05:46 + Log: update Changes, patchlevel, tweak Liblist.pm + Branch: maint-5.005/perl + ! Changes lib/ExtUtils/Liblist.pm patchlevel.h +____________________________________________________________________________ +[ 1739] By: gsar on 1998/08/05 09:10:45 + Log: newer cperl-mode.el + From: Ilya Zakharevich + Date: Wed, 5 Aug 1998 03:50:16 -0400 (EDT) + Message-Id: <199808050750.DAA07240@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] CPerl update + Branch: maint-5.005/perl + ! emacs/cperl-mode.el +____________________________________________________________________________ +[ 1738] By: gsar on 1998/08/05 09:08:33 + Log: support :nosearch in ExtUtils::Liblist for win32, and make -lfoo + processing (somewhat) compiler-specific + Branch: maint-5.005/perl + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm +____________________________________________________________________________ +[ 1737] By: gsar on 1998/08/05 03:20:03 + Log: add index entries for -X + From: Ilya Zakharevich + Date: Sun, 02 Aug 1998 16:33:18 EDT + Message-Id: <199808022033.QAA18778@monk.mps.ohio-state.edu> + Subject: [PATCH] A missing docu patch + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1736] By: gsar on 1998/08/05 03:09:58 + Log: make Test::Harness optionally check for stray files when running tests + From: Ilya Zakharevich + Date: Sun, 2 Aug 1998 18:12:48 -0400 (EDT) + Message-Id: <199808022212.SAA20126@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] File leaked from test suite + Branch: maint-5.005/perl + ! lib/Test/Harness.pm +____________________________________________________________________________ +[ 1735] By: gsar on 1998/08/05 02:29:46 + Log: back out change#1703 that break bincompat with PERL_OBJECT and + MULTIPLICITY + Branch: maint-5.005/perl + ! ext/re/re.pm regcomp.c regexec.c thrdvar.h +____________________________________________________________________________ +[ 1734] By: gsar on 1998/08/05 02:23:47 + Log: fixes to enable ISC to build IPC/SysV + From: Jarkko Hietaniemi + Date: 05 Aug 1998 00:59:13 +0300 + Message-ID: + Subject: [PATCH] 5.005_02-TRIAL1: (Re: Bug in pp_rename and ISC hint) + Branch: maint-5.005/perl + ! ext/IPC/SysV/SysV.xs hints/isc.sh hints/isc_2.sh +____________________________________________________________________________ +[ 1733] By: gsar on 1998/08/05 01:20:29 + Log: let some 'tr' be '$tr' for occult reasons + From: Jeff Okamoto + Date: Mon, 3 Aug 1998 11:04:30 -0700 (PDT) + Message-Id: <199808031804.LAA25595@xfiles.intercon.hp.com> + Subject: PATCH: Configure uses tr, not $tr + Branch: maint-5.005/perl + ! Configure +____________________________________________________________________________ +[ 1732] By: gsar on 1998/08/05 01:16:40 + Log: perlre.pod tweak suggested by Mike Wescott + Branch: maint-5.005/perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 1731] By: gsar on 1998/08/05 01:10:41 + Log: explain caveat about use of numeric constants in podoc for sysopen() + From: "David J. Fiander" + Date: Tue, 4 Aug 1998 13:09:58 -0400 + Message-Id: <199808041709.NAA01750@mks.com> + Subject: Re: [PATCH] 5.005_01: OE MVS + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1730] By: gsar on 1998/08/05 00:46:53 + Log: end pod processing when source file is closed (prevents it carrying + over into require()d files) + Branch: maint-5.005/perl + ! t/comp/require.t toke.c +____________________________________________________________________________ +[ 1729] By: gsar on 1998/08/04 23:03:23 + Log: correct prototype for des_fcrypt(), explain how to add it in more + detail, and supply a patch for libdes-3.06 + Branch: maint-5.005/perl + + win32/des_fcrypt.patch + ! MANIFEST README.win32 win32/Makefile win32/makefile.mk + ! win32/win32.c +____________________________________________________________________________ +[ 1728] By: gsar on 1998/08/04 21:50:40 + Log: tweak to avoid ambiguity warnings + Branch: maint-5.005/perl + ! pp.c +____________________________________________________________________________ +[ 1727] By: gsar on 1998/08/04 20:31:04 + Log: remove useless 'rcsid' (extension of a suggestion by + Stephen McCamant) + Branch: maint-5.005/perl + ! embed.h ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/sdbm.c + ! global.sym gv.c perl.c vms/gen_shrfls.pl +____________________________________________________________________________ +[ 1726] By: gsar on 1998/08/04 19:52:43 + Log: correct Pod::Html's notion of email addresses + From: abigail@fnx.com + Date: Mon, 3 Aug 1998 20:22:49 -0400 (EDT) + Message-ID: <19980804002249.2011.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.005_01] lib/Pod/Html.pm + Branch: maint-5.005/perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 1725] By: gsar on 1998/08/04 19:50:06 + Log: perlport.pod additions from Peter Prymmer + Date: Mon, 3 Aug 98 15:31:35 PDT + Message-Id: <9808032231.AA22324@forte.com> + -- + Date: Tue, 4 Aug 98 12:44:20 PDT + Message-Id: <9808041944.AA04815@forte.com> + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 1724] By: gsar on 1998/08/04 18:08:07 + Log: From: Chris Nandor + Date: Mon, 3 Aug 1998 13:35:25 -0400 + Message-Id: + Subject: [PATCH] perlport 1.30 + Branch: maint-5.005/perl + ! pod/perlport.pod +____________________________________________________________________________ +[ 1723] By: gsar on 1998/08/04 18:06:13 + Log: update postscript generator + From: Tom Christiansen + Date: Mon, 3 Aug 1998 05:29:25 -0600 + Message-Id: <199808031129.FAA24985@chthon.perl.com> + Subject: PATCH: pod/roffitall (5.005_02) + Branch: maint-5.005/perl + ! pod/roffitall +____________________________________________________________________________ +[ 1722] By: gsar on 1998/08/03 17:01:12 + Log: applied suggested patch, slightly tweaked + From: Jarkko Hietaniemi + Date: Mon, 3 Aug 1998 11:52:30 +0300 (EET DST) + Message-Id: <199808030852.LAA14153@alpha.hut.fi> + Subject: [PATCH] perl5.005_02-TRIAL1: pod/perlhist.pod + Branch: maint-5.005/perl + ! pod/perlhist.pod +____________________________________________________________________________ +[ 1721] By: gsar on 1998/08/03 16:30:20 + Log: fix segfault when threadsv is used as foreach itervar + From: Stephen McCamant + Date: Sun, 02 Aug 1998 21:44:34 CDT + Message-Id: <13765.8641.997452.14516@alias-2.pr.mcs.net> + Subject: [PATCH] threadsv index in enteriter targ in op_free() + Branch: maint-5.005/perl + ! op.c +____________________________________________________________________________ +[ 1720] By: gsar on 1998/08/02 23:33:42 + Log: close() open files before unlink() + From: Ilya Zakharevich + Date: Sun, 2 Aug 1998 18:14:22 -0400 (EDT) + Message-Id: <199808022214.SAA20135@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] File leaked from test suite - tests + Branch: maint-5.005/perl + ! t/base/rs.t t/op/defins.t +____________________________________________________________________________ +[ 1719] By: gsar on 1998/08/02 23:31:51 + Log: more pack() tests + From: Jarkko Hietaniemi + Date: Mon, 3 Aug 1998 00:59:41 +0300 (EET DST) + Message-Id: <199808022159.AAA17160@alpha.hut.fi> + Subject: Re: uudecode 'u' problem + Branch: maint-5.005/perl + ! t/op/pack.t +____________________________________________________________________________ +[ 1718] By: gsar on 1998/08/02 23:26:51 + Log: t/TEST aesthetic tweak suggested by Jarkko + Branch: maint-5.005/perl + ! t/TEST +____________________________________________________________________________ +[ 1717] By: gsar on 1998/08/02 23:23:43 + Log: add Digital Unix 3.x notes to README.threads (as suggested by + Phoenix ) + Branch: maint-5.005/perl + ! README.threads +____________________________________________________________________________ +[ 1716] By: gsar on 1998/08/02 23:15:00 + Log: allow *FOO{BAR}[0] etc. (without intervening arrow) + From: Stephen McCamant + Date: Sun, 2 Aug 1998 16:16:50 -0500 (CDT) + Message-ID: <13764.54929.60137.104838@alias-2.pr.mcs.net> + Subject: [PATCH] Re: Minor nit in glob notation + Branch: maint-5.005/perl + ! Changes op.c +____________________________________________________________________________ +[ 1715] By: gsar on 1998/08/02 22:49:53 + Log: fix unpack('u',...) problem with spaces in input + Branch: maint-5.005/perl + ! pp.c t/op/pack.t +____________________________________________________________________________ +[ 1714] By: gsar on 1998/08/02 21:27:19 + Log: update location of perlcrt.dll for win32 builds + Branch: maint-5.005/perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1713] By: gsar on 1998/08/02 09:28:32 + Log: From: Ilya Zakharevich + Date: Sun, 2 Aug 1998 04:35:11 -0400 (EDT) + Message-Id: <199808020835.EAA09367@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Better debugging output from malloc.c + Branch: maint-5.005/perl + ! malloc.c +____________________________________________________________________________ +[ 1712] By: gsar on 1998/08/02 09:16:55 + Log: fix longstanding bug in pack('u',...) (reads garbage beyond the end + of the input string) + Branch: maint-5.005/perl + ! pp.c +____________________________________________________________________________ +[ 1711] By: gsar on 1998/08/02 08:14:25 + Log: update Changes, tweak Porting/makerel + Branch: maint-5.005/perl + ! Changes Porting/makerel +____________________________________________________________________________ +[ 1710] By: gsar on 1998/08/02 07:31:37 + Log: remove CRs from djgpp/configure.bat (Porting/makerel adds them) + Branch: maint-5.005/perl + ! djgpp/configure.bat +____________________________________________________________________________ +[ 1709] By: gsar on 1998/08/02 07:27:34 + Log: Porting/makerel tweaks + Branch: maint-5.005/perl + ! Porting/makerel +____________________________________________________________________________ +[ 1708] By: gsar on 1998/08/02 07:09:35 + Log: fixes for pod noises + Branch: maint-5.005/perl + ! ext/B/B/Bytecode.pm ext/Thread/Thread/Specific.pm + ! pod/perlembed.pod pod/perlfaq.pod +____________________________________________________________________________ +[ 1707] By: gsar on 1998/08/02 06:59:47 + Log: malloc.c tweaks + From: Ilya Zakharevich + Date: Sat, 01 Aug 1998 18:46:32 EDT + Message-Id: <199808012246.SAA00699@monk.mps.ohio-state.edu> + Subject: [PATCH 5.005_*] Better malloc.c + Branch: maint-5.005/perl + ! malloc.c +____________________________________________________________________________ +[ 1706] By: gsar on 1998/08/02 06:56:37 + Log: fix quoting of keys with embedded nulls + From: Slaven Rezic + Date: Sat, 01 Aug 1998 13:38:03 +0200 + Message-Id: <199808011138.NAA05189@mail.cs.tu-berlin.de> + Subject: Data::Dumper 2.09, patch + Branch: maint-5.005/perl + ! ext/Data/Dumper/Dumper.xs +____________________________________________________________________________ +[ 1705] By: gsar on 1998/08/02 06:50:07 + Log: From: pvhp@forte.com (Peter Prymmer) + Date: Fri, 31 Jul 1998 14:50:41 PDT + Message-Id: <9807312150.AA08867@forte.com> + Subject: Re: \Q doesn't work in interpolated regular expressions + Branch: maint-5.005/perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 1704] By: gsar on 1998/08/02 06:37:06 + Log: add test for magic autovivification + From: "M.J.T. Guy" + Date: Thu, 30 Jul 1998 12:18:15 +0100 + Message-Id: + Subject: Re: Perl5.005_01 failing to autovivify subroutine args + Branch: maint-5.005/perl + ! pod/perldiag.pod t/cmd/subval.t +____________________________________________________________________________ +[ 1703] By: gsar on 1998/08/02 06:26:57 + Log: From: Ilya Zakharevich + Date: Tue, 21 Jul 1998 23:58:53 -0400 (EDT) + Message-Id: <199807220358.XAA19811@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_76] better RE colors + Branch: maint-5.005/perl + ! ext/re/re.pm regcomp.c regexec.c thrdvar.h +____________________________________________________________________________ +[ 1702] By: gsar on 1998/08/02 06:22:15 + Log: mark link type of exported functions for OS/2 + From: Ilya Zakharevich + Date: Sun, 26 Jul 1998 21:03:03 -0400 (EDT) + Message-Id: <199807270103.VAA04977@monk.mps.ohio-state.edu> + Subject: Re: Compiler linkage's types [PATCH 5.005] + Branch: maint-5.005/perl + ! os2/os2ish.h proto.h +____________________________________________________________________________ +[ 1701] By: gsar on 1998/08/02 06:16:03 + Log: tweaked version of suggested patch + From: Ilya Zakharevich + Date: Mon, 20 Jul 1998 21:40:00 -0400 (EDT) + Message-Id: <199807210140.VAA17186@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_75] Enable -DS + Branch: maint-5.005/perl + ! README.threads ext/Thread/Thread.xs ext/Thread/typemap mg.c + ! op.c perl.c perl.h pod/perlrun.pod pp.c pp_hot.c scope.c + ! thread.h util.c win32/win32thread.c +____________________________________________________________________________ +[ 1700] By: gsar on 1998/08/02 05:54:00 + Log: up patchlevel to 5.005_02 + Branch: maint-5.005/perl + ! Changes patchlevel.h win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1699] By: gsar on 1998/08/02 05:50:01 + Log: From: Ilya Zakharevich + Message-Id: <199807180809.EAA09379@monk.mps.ohio-state.edu> + Date: Sat, 18 Jul 1998 04:09:26 -0400 (EDT) + Subject: [PATCH 5.004_72] Make tests succeed on OS/2 + Branch: maint-5.005/perl + ! t/io/fs.t t/lib/io_pipe.t t/lib/io_sock.t t/op/stat.t +____________________________________________________________________________ +[ 1698] By: gsar on 1998/08/02 05:41:41 + Log: use I32_MAX as the limit when U16_MAX > I32_MAX (for CRAY) + Branch: maint-5.005/perl + ! regcomp.c +____________________________________________________________________________ +[ 1697] By: gsar on 1998/08/02 05:20:12 + Log: support OE/MVS + From: Jarkko Hietaniemi + Message-Id: <199808010903.MAA09371@alpha.hut.fi> + Date: Sat, 1 Aug 1998 12:03:02 +0300 (EET DST) + Subject: [PATCH] 5.005_01: OE MVS + Branch: maint-5.005/perl + + README.os390 ebcdic.c + ! Configure MANIFEST doio.c ext/Errno/Errno_pm.PL gv.c handy.h + ! hints/os390.sh lib/bigint.pl mg.c patchlevel.h perl.c perl.h + ! perly.c perly.h perly.y perly_c.diff pod/perldelta.pod + ! pod/perlport.pod pp.c pp_ctl.c pp_hot.c pp_sys.c sv.c + ! t/base/term.t t/comp/package.t t/comp/require.t + ! t/lib/bigintpm.t t/lib/cgi-html.t t/lib/filehand.t t/lib/ph.t + ! t/op/auto.t t/op/bop.t t/op/each.t t/op/magic.t t/op/misc.t + ! t/op/ord.t t/op/pack.t t/op/quotemeta.t t/op/re_tests + ! t/op/regexp.t t/op/sort.t t/op/sprintf.t t/op/subst.t + ! t/op/taint.t t/op/universal.t t/pragma/constant.t + ! t/pragma/overload.t t/pragma/subs.t toke.c x2p/a2p.h + ! x2p/a2py.c +____________________________________________________________________________ +[ 1696] By: gsar on 1998/08/02 05:03:09 + Log: VMS patches + From: pvhp@forte.com (Peter Prymmer) + Message-Id: <9807290017.AA01833@forte.com> + Date: Tue, 28 Jul 98 17:17:33 PDT + Subject: Re: Not OK: perl 5.00501 on VMS_AXP-thread I7.2 + -- + From: Dan Sugalski + Message-Id: <3.0.5.32.19980729125623.00b562b0@ous.edu> + Date: Wed, 29 Jul 1998 12:56:23 -0700 + Subject: [PATCH 5.005_01]Typo in CONFIGURE.COM (vms) + -- + From: Dan Sugalski + Date: Thu, 30 Jul 1998 09:02:24 -0700 + Message-Id: <3.0.5.32.19980730090224.00b70eb0@ous.edu> + Subject: [PATCH 5.005_01]VMS config SOCKETSHR typo patch and fcntl check + Branch: maint-5.005/perl + ! configure.com vms/subconfigure.com +____________________________________________________________________________ +[ 1695] By: gsar on 1998/08/02 04:49:32 + Log: rename duplicate warning in regexec.c + Branch: maint-5.005/perl + ! regexec.c +____________________________________________________________________________ +[ 1694] By: gsar on 1998/08/02 04:44:20 + Log: beware egcs' ld on Solaris + From: Tom Spindler + Message-ID: <19980801212158.A2934@home.merit.edu> + Date: Sat, 1 Aug 1998 21:21:58 -0400 + Subject: Re: [PATCH perl5.005_01] hints/solaris_2.sh, egcs, and ld + Branch: maint-5.005/perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 1693] By: gsar on 1998/08/02 04:41:43 + Log: de-utf-ized variation of Ilya's patch + From: Jan-Pieter Cornet + Date: 31 Jul 1998 12:44:57 +0200 + Message-ID: <6ps779$hmj$1@xs1.xs4all.nl> + Subject: Re: s/\s*$//g in majordomo causes segfault under 5.005_01 + Branch: maint-5.005/perl + ! regexec.c +____________________________________________________________________________ +[ 1692] By: gsar on 1998/08/02 04:39:14 + Log: better validation of SysV IPC availability + From: Jarkko Hietaniemi + Date: Fri, 31 Jul 1998 13:13:57 +0300 (EEST) + Message-Id: <199807311013.NAA28887@koah.research.nokia.com> + Subject: Re: lib/ipc_sysv.t fails under FreeBSD 2.2.1 + Branch: maint-5.005/perl + ! Configure INSTALL ext/IPC/SysV/SysV.xs pod/perldiag.pod + ! t/lib/ipc_sysv.t +____________________________________________________________________________ +[ 1691] By: gsar on 1998/08/02 04:32:30 + Log: fix bug in display of watched expressions + From: Ilya Zakharevich + Date: Thu, 30 Jul 1998 20:02:04 -0400 (EDT) + Message-Id: <199807310002.UAA21681@monk.mps.ohio-state.edu> + Subject: Re: Bug? in perl5db.pl [PATCH] + Branch: maint-5.005/perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 1690] By: gsar on 1998/08/02 04:29:08 + Log: applied all but one hunk + From: Horst von Brand + Date: Thu, 30 Jul 1998 17:19:42 -0400 + Message-Id: <199807302119.RAA06852@sleipnir.valparaiso.cl> + Subject: Some typos in perldelta.pod + Branch: maint-5.005/perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 1689] By: gsar on 1998/08/02 04:27:02 + Log: From: Andy Dougherty + Date: Thu, 30 Jul 1998 10:22:36 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.005_05] Remove redundant dTHR + Branch: maint-5.005/perl + ! mg.c sv.c +____________________________________________________________________________ +[ 1688] By: gsar on 1998/08/02 04:25:49 + Log: From: Tom Hughes + Date: 30 Jul 1998 09:47:31 +0100 + Message-ID: + Subject: Class::Struct has an incomplete tied array package + Branch: maint-5.005/perl + ! lib/Class/Struct.pm +____________________________________________________________________________ +[ 1687] By: gsar on 1998/08/02 04:21:48 + Log: ensure implicit close on local(*FH) doesn't affect $! and thence $? + Branch: maint-5.005/perl + ! sv.c t/op/die_exit.t +____________________________________________________________________________ +[ 1686] By: gsar on 1998/08/02 03:57:28 + Log: From: Jarkko Hietaniemi + Date: Thu, 30 Jul 1998 00:39:30 +0300 (EET DST) + Message-Id: <199807292139.AAA01795@alpha.hut.fi> + Subject: Re: [PATCH] 5.004_05-MAINT_TRIAL_5: three locale fixes + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.xs pod/perllocale.pod +____________________________________________________________________________ +[ 1685] By: gsar on 1998/08/02 03:54:15 + Log: PERL_OBJECT bincompat fixes from Douglas Lankshear + Date: Wed, 29 Jul 1998 10:45:31 -0700 + Message-ID: <000101bdbb18$ae767550$a32fa8c0@tau.Active> + Subject: [PATCH 5.005_01] Fixes binary compatibility for PERL_OBJECT + -- + Date: Sat, 1 Aug 1998 09:33:19 -0700 + Message-ID: <000701bdbd6a$17ada180$a32fa8c0@tau.Active> + Subject: [PATCH 5.005_01] + Branch: maint-5.005/perl + ! perl.h proto.h +____________________________________________________________________________ +[ 1684] By: gsar on 1998/08/02 03:49:33 + Log: hand-apply whitespace-mutiliated patch + From: Nicholas Clark + Date: Tue, 28 Jul 1998 16:40:42 +0100 (BST) + Message-Id: <199807281540.QAA04640@flirble.org> + Subject: [PATCH] POSIX::ELOOP + Branch: maint-5.005/perl + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 1683] By: gsar on 1998/08/02 03:45:26 + Log: document return values of do() better + From: "M.J.T. Guy" + Date: Tue, 28 Jul 1998 12:44:36 +0100 + Message-Id: + Subject: [PATCH] Re: Obscurity of lexicals with do "" + Branch: maint-5.005/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1682] By: gsar on 1998/08/02 03:42:26 + Log: avoid reusing foreach itervar if magic got tacked onto it + From: Stephen McCamant + Date: Tue, 28 Jul 1998 22:18:25 -0500 (CDT) + Message-ID: <13758.36756.215424.719750@alias-2.pr.mcs.net> + Subject: [PATCH] Re: pos() resetting changed with 5.005? + Branch: maint-5.005/perl + ! pp_hot.c +____________________________________________________________________________ +[ 1681] By: gsar on 1998/08/02 03:39:27 + Log: From: Nick Ing-Simmons + Date: Wed, 29 Jul 1998 13:28:14 +0100 + Message-Id: <199807291228.NAA20055@tiuk.ti.com> + Subject: [Patch] Math::Complex - Ambiguous call resolved as CORE::foo() + Branch: maint-5.005/perl + + Porting/fixCORE + ! MANIFEST lib/Math/Complex.pm +____________________________________________________________________________ +[ 1680] By: gsar on 1998/08/02 03:33:07 + Log: From: h.sanden@elsevier.nl (Hugo van der Sanden) + Date: Mon, 27 Jul 1998 13:34:45 +0200 + Message-Id: <199807271134.NAA24475@dorlas.elsevier.nl> + Subject: perlcall.pod + Branch: maint-5.005/perl + ! pod/perlcall.pod +____________________________________________________________________________ +[ 1679] By: gsar on 1998/08/02 03:29:41 + Log: MM_Win32::maybe_command() case-insesitivity tweak + Branch: maint-5.005/perl + ! lib/ExtUtils/MM_Win32.pm +____________________________________________________________________________ +[ 1678] By: gsar on 1998/08/02 03:24:29 + Log: fix MM_Win32::maybe_command() + Branch: maint-5.005/perl + ! lib/ExtUtils/MM_Win32.pm +____________________________________________________________________________ +[ 1677] By: gsar on 1998/08/01 19:52:19 + Log: fixes for overloading bugs and docs, tweaked some + From: Ilya Zakharevich + Date: Sat, 25 Jul 1998 21:28:16 -0400 (EDT) + Message-Id: <199807260128.VAA10543@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_76] better overloading + Branch: maint-5.005/perl + ! Changes gv.c lib/dumpvar.pl lib/overload.pm lib/perl5db.pl + ! t/pragma/overload.t +____________________________________________________________________________ +[ 1676] By: gsar on 1998/08/01 19:37:13 + Log: stray s/foo/PL_foo/ + From: win@in.rhein-main.de (Winfried Koenig) + Date: Mon, 27 Jul 98 21:13 MET + Message-Id: + Subject: Bug in pp_rename and ISC hint + Branch: maint-5.005/perl + ! pp_sys.c +____________________________________________________________________________ +[ 1675] By: gsar on 1998/08/01 19:22:13 + Log: newer Porting/patchls from maint-5.004 + Branch: maint-5.005/perl + ! Porting/patchls +____________________________________________________________________________ +[ 1674] By: gsar on 1998/08/01 17:50:44 + Log: fix buggy detection of failed glob() + Branch: maint-5.005/perl + ! pp_hot.c +____________________________________________________________________________ +[ 1673] By: gsar on 1998/07/29 18:14:32 + Log: fix typo in change#1489 that prevented magic-autovivification + Branch: maint-5.005/perl + ! mg.c + +---------------- +Version 5.005_01 First maintenance release of 5.005 +---------------- + +____________________________________________________________________________ +[ 1669] By: gsar on 1998/07/26 23:19:02 + Log: update Changes; add sv_*_mg() entries in win32/GenCAPI.pl + Branch: maint-5.005/perl + ! Changes proto.h win32/GenCAPI.pl +____________________________________________________________________________ +[ 1668] By: gsar on 1998/07/26 21:12:11 + Log: s/TMP_CRLF_PATCH/PERL_STRICT_CR/ with sense reversed, so they + can disable it from config.sh if they want; up patchlevel to 5_01; + little tweaks to pods + Branch: maint-5.005/perl + ! README.win32 patchlevel.h pod/perldelta.pod toke.c + ! win32/Makefile win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc win32/makefile.mk win32/win32.c +____________________________________________________________________________ +[ 1662] By: gsar on 1998/07/26 05:01:52 + Log: add missing sv_*_mg() prototypes in proto.h, update perlhist.pod + Branch: maint-5.005/perl + ! pod/perlhist.pod proto.h +____________________________________________________________________________ +[ 1658] By: gsar on 1998/07/26 02:23:46 + Log: VMS patches from Dan Sugalski + Date: Fri, 24 Jul 1998 11:38:25 -0700 + Message-Id: <3.0.5.32.19980724113825.00a067b0@ous.edu> + Subject: [PATCH 5.005] version number problem with VMS (Corrected) + -- + Date: Fri, 24 Jul 1998 12:30:36 -0700 + Message-Id: <3.0.5.32.19980724123036.009f0390@ous.edu> + Subject: [PATCH 5.005]Tweaks to README.vms + -- + Date: Sat, 25 Jul 1998 17:56:55 -0700 (PDT) + Message-ID: + Subject: [PATCH 5.005] Final build cleanup patch + Branch: maint-5.005/perl + ! README.vms vms/descrip_mms.template vms/subconfigure.com +____________________________________________________________________________ +[ 1657] By: gsar on 1998/07/26 02:19:50 + Log: another platform where pp_sselect() needs a whole fd_set buffer + From: Lupe Christoph + Date: Sat, 25 Jul 1998 19:49:33 +0200 (MET DST) + Message-Id: <199807251749.TAA22347@alanya.m.isar.de> + Subject: Patch for Not OK: perl 5.005 on i86pc-solaris-thread 2.6 + Branch: maint-5.005/perl + ! pp_sys.c +____________________________________________________________________________ +[ 1656] By: gsar on 1998/07/26 02:12:46 + Log: fix problem building modules on dos-djgpp + From: Laszlo Molnar + Date: Sat, 25 Jul 1998 00:53:39 +0200 + Message-ID: <19980725005339.C222@cdata.tvnet.hu> + Subject: [PATCH 5.005] dos-djgpp and modules problem + Branch: maint-5.005/perl + ! djgpp/fixpmain +____________________________________________________________________________ +[ 1655] By: gsar on 1998/07/26 02:11:09 + Log: From: Tom Spindler + Date: Wed, 22 Jul 1998 16:11:07 -0400 + Message-ID: <19980722161107.A16813@home.merit.edu> + Subject: [PATCH 5.005] BeOS tweak + Branch: maint-5.005/perl + ! hints/beos.sh +____________________________________________________________________________ +[ 1654] By: gsar on 1998/07/26 02:09:29 + Log: various pod tweaks + Branch: maint-5.005/perl + ! Changes pod/perldelta.pod pod/perlmodinstall.pod + ! pod/perltoc.pod +____________________________________________________________________________ +[ 1653] By: gsar on 1998/07/26 02:05:46 + Log: fix emacs/ptags for PL_* changes + From: Ilya Zakharevich + Date: Fri, 24 Jul 1998 03:12:35 -0400 (EDT) + Message-Id: <199807240712.DAA04204@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_76] Yet better ptags + Branch: maint-5.005/perl + ! emacs/ptags +____________________________________________________________________________ +[ 1652] By: gsar on 1998/07/26 02:03:01 + Log: fix behavior of <=> on bigints + From: "M.J.T. Guy" + Message-Id: + Date: Fri, 24 Jul 1998 18:29:53 +0100 + Subject: [PATCH] Re: Math::BigInt <=> op is not correct. + Branch: maint-5.005/perl + ! lib/Math/BigInt.pm t/lib/bigintpm.t +____________________________________________________________________________ +[ 1649] By: gsar on 1998/07/24 03:56:56 + Log: create maint-5.005 branch + Branch: maint-5.005/perl + +> (branch 1079 files) +____________________________________________________________________________ +[ 1648] By: gsar on 1998/07/24 03:36:35 + Log: un-checked-in 5.005 Changes (this is 5.005 *exactly*) + Branch: perl + ! Changes + +------------- +Version 5.005 Production release +------------- + +____________________________________________________________________________ +[ 1647] By: gsar on 1998/07/22 21:11:29 + Log: sneak in hints/irix_6.sh update + Branch: perl + ! Changes hints/irix_6.sh +____________________________________________________________________________ +[ 1646] By: gsar on 1998/07/22 21:00:44 + Log: Update perldelta and Changes; refresh perltoc; newer perlembed.pod + from Jon Orwant ; update guts documentation + to reflect PL_* changes; is this *it* for 5.005? + Branch: perl + ! Changes README.win32 patchlevel.h pod/perlcall.pod + ! pod/perldelta.pod pod/perlembed.pod pod/perlguts.pod + ! pod/perltoc.pod pod/perlxs.pod +____________________________________________________________________________ +[ 1645] By: gsar on 1998/07/22 19:37:41 + Log: don't use qualify() in class methods + From: Albert Dvornik + Date: 22 Jul 1998 15:14:46 EDT + Message-Id: + Subject: [PATCH 5.005-MAYBE] Bug in IO::Handle->input_record_separator + Branch: perl + ! ext/IO/lib/IO/Handle.pm +____________________________________________________________________________ +[ 1644] By: gsar on 1998/07/22 18:13:31 + Log: newer perlembed.pod + Branch: perl + ! pod/perlembed.pod +____________________________________________________________________________ +[ 1643] By: gsar on 1998/07/22 18:03:42 + Log: From: Andy Dougherty + Date: Wed, 22 Jul 1998 13:42:20 EDT + Message-Id: + Subject: Re: 5.005 - a sneak preview + Branch: perl + ! Porting/pumpkin.pod +____________________________________________________________________________ +[ 1642] By: gsar on 1998/07/22 17:58:42 + Log: add perlmodinstall, regen perltoc + Branch: perl + + pod/perlmodinstall.pod + ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod + ! pod/perltoc.pod win32/pod.mak +____________________________________________________________________________ +[ 1641] By: gsar on 1998/07/22 17:11:55 + Log: support optional crypt() with PERL_OBJECT + From: "Douglas Lankshear" + Date: Wed, 22 Jul 1998 08:21:10 PDT + Message-Id: <000701bdb584$5b57c070$a32fa8c0@tau.Active> + Subject: [PATCH 5.005 maybe] for crypt with PERL_OBJECT + Branch: perl + ! iperlsys.h pp.c win32/Makefile win32/makefile.mk + ! win32/perlhost.h win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1640] By: gsar on 1998/07/22 17:09:11 + Log: win32 tweaks + Date: Wed, 22 Jul 1998 07:09:09 PDT + Message-Id: <000001bdb57a$4bc9dd00$a32fa8c0@tau.Active> + From: "Douglas Lankshear" + Branch: perl + ! win32/Makefile win32/makefile.mk win32/win32.h +____________________________________________________________________________ +[ 1639] By: gsar on 1998/07/22 17:00:30 + Log: From: d-lewart@uiuc.edu (Daniel S. Lewart) + Date: Wed, 22 Jul 1998 06:20:08 CDT + Message-Id: <199807221120.GAA07962@staff2.cso.uiuc.edu> + Subject: [PATCH] lib/Sys/Syslog.pm doc + Branch: perl + ! Changes lib/Sys/Syslog.pm +____________________________________________________________________________ +[ 1638] By: gsar on 1998/07/22 09:12:26 + Log: up patchlevel etc (only doc patching from now on, testing in progress) + Branch: perl + ! Changes patchlevel.h win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1637] By: gsar on 1998/07/22 08:27:09 + Log: VMS patches from Dan Sugalski + Date: Tue, 21 Jul 1998 16:04:40 PDT + Message-Id: <3.0.5.32.19980721160440.00a916f0@ous.edu> + Subject: [PATCH 5.004_76]Document Vax C's death for VMS + -- + Date: Tue, 21 Jul 1998 16:08:57 PDT + Message-Id: <3.0.5.32.19980721160857.00a6d250@ous.edu> + Subject: [PATCH 5.004_76]fix clean/realclean targets of VMS' makefile + -- + Date: Tue, 21 Jul 1998 16:05:56 PDT + Message-Id: <3.0.5.32.19980721160556.00a1a100@ous.edu> + Subject: [PATCH 5.004_76]Note the record-read capabilities of $/ in perldelta.pod + Branch: perl + ! README.vms pod/perldelta.pod vms/descrip_mms.template +____________________________________________________________________________ +[ 1636] By: gsar on 1998/07/22 08:04:37 + Log: fix quoting in t/io/inplace.t + Branch: perl + ! t/io/inplace.t +____________________________________________________________________________ +[ 1635] By: gsar on 1998/07/22 07:59:30 + Log: From: Dan Sugalski + Date: Tue, 21 Jul 1998 13:06:44 PDT + Message-Id: <3.0.5.32.19980721130644.00ac5100@ous.edu> + Subject: [PATCH 5.004_76]t/io/inplace.t enabled for VMS + Branch: perl + ! t/io/inplace.t vms/test.com +____________________________________________________________________________ +[ 1634] By: gsar on 1998/07/22 07:55:35 + Log: From: Dan Sugalski + Date: Tue, 21 Jul 1998 12:42:20 PDT + Message-Id: <3.0.5.32.19980721124220.00a82a20@ous.edu> + Subject: [PATCH 5.004_76]Fix inplace editing for VMS + Branch: perl + ! doio.c +____________________________________________________________________________ +[ 1633] By: gsar on 1998/07/22 07:53:53 + Log: fix AIX hints for PL_* changes + From: Jarkko Hietaniemi + Date: Tue, 21 Jul 1998 22:53:54 +0300 + Message-Id: <199807211953.WAA55724@vipunen.hut.fi> + Subject: Re: _76 fails to link B extension on AIX 414 + Branch: perl + ! perl_exp.SH +____________________________________________________________________________ +[ 1632] By: gsar on 1998/07/22 07:51:56 + Log: From: Anton Berezin + Date: Tue, 21 Jul 1998 21:46:45 +0200 + Message-Id: <199807211946.VAA01301@lion.plab.ku.dk> + Subject: [PATCH _76] t/op/eval.t test for eval & scoping of lexicals + Branch: perl + ! t/op/eval.t +____________________________________________________________________________ +[ 1631] By: gsar on 1998/07/22 07:48:20 + Log: applied patch, with tweak suggested by Michael Parker + From: Andy Dougherty + Date: Tue, 21 Jul 1998 14:30:05 EDT + Message-Id: + Subject: Re: Not OK: _76 on IP22-irix6.2 fails tests + Branch: perl + ! hints/irix_6.sh +____________________________________________________________________________ +[ 1630] By: gsar on 1998/07/22 07:40:25 + Log: better diagnostic on errno.t failure + From: Graham Barr + Date: Tue, 21 Jul 1998 13:07:29 CDT + Message-Id: <19980721130729.K4337@asic.sc.ti.com> + Branch: perl + ! t/lib/errno.t +____________________________________________________________________________ +[ 1629] By: gsar on 1998/07/22 07:36:38 + Log: win32 tweaks: disable XSLOCKS in perl.c, correct typo, search + the registry for anything that begins with "PERL", not "PERL5" + From: "Douglas Lankshear" + Date: Tue, 21 Jul 1998 11:08:00 PDT + Message-Id: <000601bdb4d2$7ee74720$a32fa8c0@tau.Active> + Branch: perl + ! perl.c win32/perlhost.h win32/win32.c +____________________________________________________________________________ +[ 1628] By: gsar on 1998/07/22 07:28:35 + Log: suppress redefined warnings on C + Branch: perl + ! op.c +____________________________________________________________________________ +[ 1627] By: gsar on 1998/07/22 07:15:19 + Log: remove spurious $VERSION line that confuses CPAN + From: Johan Vromans + Date: Tue, 21 Jul 1998 20:01:36 +0200 + Message-Id: <13748.55168.397720.564438@phoenix.squirrel.nl> + Subject: Re: 5.004_76 missing version numbers + Branch: perl + ! lib/Getopt/Long.pm +____________________________________________________________________________ +[ 1626] By: gsar on 1998/07/22 06:57:56 + Log: From: Andy Dougherty + Date: Tue, 21 Jul 1998 10:20:13 EDT + Message-Id: + Subject: [PATCH] Porting/config* updates for 5.005 + Branch: perl + ! Changes Porting/config.sh Porting/config_H +____________________________________________________________________________ +[ 1625] By: gsar on 1998/07/22 06:46:38 + Log: add a few more globals with old names #defined + Branch: perl + ! embed.pl embedvar.h +____________________________________________________________________________ +[ 1624] By: gsar on 1998/07/22 06:39:22 + Log: allow extensions to be specified as paths + From: Paul Johnson + Date: Tue, 21 Jul 1998 12:04:27 BST + Message-Id: <19980721120427.F903@west-tip.transeda.com> + Subject: [PATCH] 5.004_75 Embed and static extensions + Branch: perl + ! lib/ExtUtils/Embed.pm +____________________________________________________________________________ +[ 1623] By: gsar on 1998/07/22 06:12:50 + Log: make $ prototype to accept THREADSVs + Branch: perl + ! op.c +____________________________________________________________________________ +[ 1622] By: gsar on 1998/07/22 06:04:25 + Log: fix Liblist.pm to find entries that are plain pathnames on win32 + Branch: perl + ! lib/ExtUtils/Liblist.pm +____________________________________________________________________________ +[ 1621] By: gsar on 1998/07/22 05:10:53 + Log: perlfaq update from From Tom Christiansen and Nathan Torkington + (removes all mention of training courses from perlfaq*.pod) + Branch: perl + ! pod/perlfaq.pod pod/perlfaq2.pod pod/perlfaq3.pod + ! pod/perlfaq4.pod pod/perlfaq6.pod pod/perlfaq7.pod + ! pod/perlfaq8.pod pod/perlfaq9.pod +____________________________________________________________________________ +[ 1620] By: gsar on 1998/07/22 02:51:13 + Log: applied patch, modulo parts already added to perldelta + From: Stephen McCamant + Date: Tue, 21 Jul 1998 17:06:23 CDT + Message-Id: <13749.3106.995764.413053@alias-2.pr.mcs.net> + Subject: [PATCH] Re: Beta2 is available + Branch: perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 1619] By: gsar on 1998/07/22 02:45:55 + Log: applied patch, add new message to perldeta + From: Stephen McCamant + Date: Tue, 21 Jul 1998 16:12:25 CDT + Message-Id: <13749.910.83378.949909@alias-2.pr.mcs.net> + Subject: [PATCH] Band-aid patch for local($avhv->{a}) + Branch: perl + ! pod/perldelta.pod pod/perldiag.pod pp.c pp_hot.c +____________________________________________________________________________ +[ 1618] By: gsar on 1998/07/22 02:08:00 + Log: fix up B modules for PL_* changes + Branch: perl + ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm +____________________________________________________________________________ +[ 1617] By: gsar on 1998/07/22 01:42:14 + Log: From: Malcolm Beattie + Date: Tue, 21 Jul 1998 18:13:16 BST + Message-Id: <199807211713.SAA20735@sable.ox.ac.uk> + Subject: Compiler docs for 5.005 + Branch: perl + ! ext/B/B.pm ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/CC.pm + ! ext/B/O.pm +____________________________________________________________________________ +[ 1616] By: gsar on 1998/07/22 01:29:09 + Log: s/PL_sv/PL_bytecode_sv/ etc., so we have unique, case-insensitive + names + Branch: perl + ! bytecode.h bytecode.pl byterun.c embedvar.h interp.sym + ! intrpvar.h +____________________________________________________________________________ +[ 1615] By: nick on 1998/07/21 22:26:34 + Log: Mingw32 PERL_OBJECT tweaks + Branch: perl + ! ext/Fcntl/Fcntl.xs ext/IO/IO.xs ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 1614] By: gsar on 1998/07/21 19:43:32 + Log: fix off-by-one in change#623 that broke lexical lookups in eval'' + Branch: perl + ! pp_ctl.c + +---------------- +Version 5.004_76 5.005 Public Beta, Issue 2 +---------------- + +____________________________________________________________________________ +[ 1613] By: gsar on 1998/07/21 10:26:01 + Log: final tweaks before beta2 + Branch: perl + + Porting/findvars + +> Porting/fixvars + - fixvars + ! Changes MANIFEST intrpvar.h iperlsys.h + ! lib/ExtUtils/MM_Win32.pm win32/perlhost.h +____________________________________________________________________________ +[ 1612] By: gsar on 1998/07/21 07:15:54 + Log: fixes to enable PERL_OBJECT build with mingw32/egcs-1.0.2 + Branch: perl + ! ext/Opcode/Opcode.xs proto.h win32/makedef.pl + ! win32/makefile.mk win32/perlhost.h win32/win32.c win32/win32.h + ! win32/win32sck.c +____________________________________________________________________________ +[ 1611] By: gsar on 1998/07/21 07:12:00 + Log: fix bytecode.pl with moved var names + Branch: perl + ! bytecode.pl byterun.c byterun.h ext/B/B/Asmdata.pm +____________________________________________________________________________ +[ 1610] By: gsar on 1998/07/21 05:51:10 + Log: tweak toke.c + Branch: perl + ! toke.c +____________________________________________________________________________ +[ 1609] By: gsar on 1998/07/21 05:46:59 + Log: change case of PERL_OBJECT filenames, consistent with the rest + Branch: perl + + XSlock.h objXSUB.h + - ObjXSub.h XSLock.h + ! MANIFEST XSUB.h lib/ExtUtils/MM_Win32.pm perl.h + ! win32/GenCAPI.pl win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1608] By: gsar on 1998/07/21 05:31:13 + Log: part 2 of PERL_OBJECT fixes (globals in bytecode.h moved to intrpvar.h) + Branch: perl + ! bytecode.h byterun.c embedvar.h interp.sym intrpvar.h +____________________________________________________________________________ +[ 1607] By: gsar on 1998/07/21 05:29:10 + Log: part 1 of PERL_OBJECT fixes for new var names + Branch: perl + ! ObjXSub.h bytecode.h globals.c iperlsys.h perl.h pp_ctl.c + ! run.c win32/GenCAPI.pl +____________________________________________________________________________ +[ 1606] By: gsar on 1998/07/21 05:17:26 + Log: From: Stephen McCamant + Date: Mon, 20 Jul 1998 23:53:32 CDT + Message-Id: <13748.6947.311341.657005@alias-2.pr.mcs.net> + Subject: [PATCH] redundant RV2GVs in ck_fun() + Branch: perl + ! op.c +____________________________________________________________________________ +[ 1605] By: gsar on 1998/07/21 05:13:28 + Log: From: Stephen McCamant + Date: Mon, 20 Jul 1998 23:32:42 CDT + Message-Id: <13748.6392.921893.643238@alias-2.pr.mcs.net> + Subject: B::Deparse 0.56 (first testsuite fixes; big) + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1604] By: gsar on 1998/07/21 05:07:29 + Log: applied a slightly tweaked version of suggested patch + From: Colin Kuskie + Date: Mon, 20 Jul 1998 15:58:31 -0700 (PDT) + Message-ID: + Subject: [PATCH _75] More documentation for -i prefix + Branch: perl + ! pod/perlrun.pod +____________________________________________________________________________ +[ 1603] By: gsar on 1998/07/21 04:59:19 + Log: disable malloced_size() feedback with -DLEAKTEST + From: Ilya Zakharevich + Date: Mon, 20 Jul 1998 21:20:21 -0400 (EDT) + Message-Id: <199807210120.VAA15031@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_75] -DLEAKTEST broken + Branch: perl + ! av.c sv.c +____________________________________________________________________________ +[ 1602] By: gsar on 1998/07/21 04:57:43 + Log: fix hints/hpux.sh for cpp recognition + From: Andy Dougherty + Date: Mon, 20 Jul 1998 12:46:33 -0400 (EDT) + Message-Id: + Subject: RE: Configure misses preprocessor on HP-UX + Branch: perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 1601] By: gsar on 1998/07/21 04:55:51 + Log: From: Ilya Zakharevich + Date: Sun, 19 Jul 1998 18:16:38 -0400 (EDT) + Message-Id: <199807192216.SAA10482@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Compile (?{}) into a correct package + Branch: perl + ! pp_ctl.c t/op/pat.t +____________________________________________________________________________ +[ 1600] By: gsar on 1998/07/21 04:48:32 + Log: allocate a whole fd_set for pp_sselect() on more platforms + From: Jarkko Hietaniemi + Date: 20 Jul 1998 00:14:18 +0300 + Message-ID: + Subject: Re: Not OK: perl 5.00475 +DEVEL_BETA_ISSUE_1 on OPENSTEP-Mach 4_1 (UNINSTALLED) + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 1599] By: gsar on 1998/07/21 04:44:04 + Log: add tests to check if context propagation works + From: Francois Desarmenien + Date: Sun, 19 Jul 1998 12:28:33 +0200 + Message-ID: <35B1CA51.A606AD27@club-internet.fr> + Subject: Re: m//g strange behaviour in 5.004 + Branch: perl + + t/op/context.t + ! MANIFEST +____________________________________________________________________________ +[ 1598] By: gsar on 1998/07/21 04:37:49 + Log: applied RE doc patches, with tweaks to the prose + From: Ilya Zakharevich + Date: Sat, 18 Jul 1998 23:11:13 -0400 (EDT) + Message-Id: <199807190311.XAA25080@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Document irregular zero-length matches + -- + Date: Sun, 19 Jul 1998 00:38:44 -0400 (EDT) + Message-Id: <199807190438.AAA26226@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Another irregularity of expressions documented + Branch: perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 1597] By: gsar on 1998/07/21 04:16:51 + Log: pod tweak suggested by Ilya + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1596] By: gsar on 1998/07/21 04:12:39 + Log: enable color output with -Mre=debugcolor with -DDEBUGGING + From: Ilya Zakharevich + Date: Sat, 18 Jul 1998 17:34:00 -0400 (EDT) + Message-Id: <199807182134.RAA20644@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Better -Mre=colordb + Branch: perl + ! ext/re/re.xs +____________________________________________________________________________ +[ 1595] By: gsar on 1998/07/21 04:07:44 + Log: From: "John L. Allen" + Date: Thu, 16 Jul 1998 11:43:54 -0400 (EDT) + Message-ID: + Subject: [PATCH _75 & _05] perlbug does not report usage on invalid flags + Branch: perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 1594] By: gsar on 1998/07/21 04:06:06 + Log: don't use SelectSaver on IO::Handle->input_*() methods + From: Robin Barker + Date: Thu, 16 Jul 1998 15:00:39 +0100 (BST) + Message-Id: <199807161400.PAA25532@tempest.cise.npl.co.uk> + Subject: Re: Bug in IO::Handle->input_record_separator + Branch: perl + ! ext/IO/lib/IO/Handle.pm +____________________________________________________________________________ +[ 1593] By: gsar on 1998/07/21 04:03:46 + Log: applied a tweaked version of suggested patch + From: Ilya Zakharevich + Date: Wed, 15 Jul 1998 17:02:48 -0400 (EDT) + Message-Id: <199807152102.RAA19952@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Enable/document colors in re.pm + Branch: perl + ! ext/re/re.pm +____________________________________________________________________________ +[ 1592] By: gsar on 1998/07/21 03:49:55 + Log: remove compat3.sym and rename perld4.pod + Branch: perl + +> pod/perl5004delta.pod + - compat3.sym pod/perld4.pod + ! MANIFEST +____________________________________________________________________________ +[ 1591] By: gsar on 1998/07/21 03:38:16 + Log: update patchlevel, Changes + Branch: perl + ! Changes patchlevel.h win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1590] By: gsar on 1998/07/21 03:06:04 + Log: documentation tweaks from Abigail + Date: Fri, 17 Jul 1998 20:52:36 -0400 (EDT) + Message-ID: <19980718005236.5154.qmail@betelgeuse.wayne.fnx.com> + Subject: Re: [PATCH 5.00475] pod/perlsyn.pod + -- + Date: Thu, 16 Jul 1998 17:00:49 -0400 (EDT) + Message-ID: <19980716210049.16156.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.00475] pod/perlguts.pod + -- + Date: Thu, 16 Jul 1998 16:52:05 -0400 (EDT) + Message-ID: <19980716205205.15949.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.00475] Tweaking pod/perlfunc.pod + -- + Date: Fri, 17 Jul 1998 22:58:05 -0400 (EDT) + Message-ID: <19980718025805.7135.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH, 5.00475], pod/perlsub.pod + -- + Date: Sat, 18 Jul 1998 04:02:00 -0400 (EDT) + Message-ID: <19980718080200.9927.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.00475] pod/perlfunc.pod + Branch: perl + ! pod/perlfunc.pod pod/perlguts.pod pod/perlsub.pod + ! pod/perlsyn.pod +____________________________________________________________________________ +[ 1589] By: gsar on 1998/07/21 02:44:25 + Log: VMS patches from Dan Sugalski + Date: Wed, 15 Jul 1998 09:38:12 -0700 + Message-Id: <3.0.5.32.19980715093812.00a42a50@ous.edu> + Subject: [PATCH 5.005-beta1]Quick VMS config update + -- + Date: Wed, 15 Jul 1998 12:53:52 -0700 + Message-Id: <3.0.5.32.19980715125352.00a25cb0@ous.edu> + Subject: Re: $ebcdic has broken VMS in _75 (Now with doc patch!) + -- + Date: Thu, 16 Jul 1998 11:15:44 -0700 + Message-Id: <3.0.5.32.19980716111544.00b78770@ous.edu> + Subject: [PATCH 5.004_75]Another VMS tweak for the Vax C compiler + -- + Date: Thu, 16 Jul 1998 11:21:55 -0700 + Message-Id: <3.0.5.32.19980716112155.00a66c50@ous.edu> + Subject: [PATCH 5.004_75]Get archname correct for thread build on VMS + -- + Date: Thu, 16 Jul 1998 11:25:04 -0700 + Message-Id: <3.0.5.32.19980716112504.00ae0d50@ous.edu> + Subject: [PATCH 5.004_75]Thread build tweaks for VMS 6.2 and older + -- + Date: Fri, 17 Jul 1998 15:29:13 -0700 + Message-Id: <3.0.5.32.19980717152913.00a469b0@ous.edu> + Subject: [PATCH 5.004_75]Missed a header file in VMS build procedure + -- + Date: Mon, 20 Jul 1998 10:20:49 -0700 + Message-Id: <3.0.5.32.19980720102049.00a05100@ous.edu> + Subject: [PATCH 5.004_75]Tweaks to Thread.XS for OLD_PTHREADS_API build + -- + Date: Mon, 20 Jul 1998 10:13:03 -0700 + Message-Id: <3.0.5.32.19980720101303.00a17100@ous.edu> + Subject: [PATCH 5.004_75]Explicitly specify extensions during VMS config process + -- + From: Brad Hughes + Date: Mon, 20 Jul 1998 15:51:22 -0700 + Message-Id: <3.0.5.32.19980720155122.00a41950@ous.edu> + Subject: patch for readme.vms + Branch: perl + ! README.vms ext/Thread/Thread.xs vms/descrip_mms.template + ! vms/gen_shrfls.pl vms/subconfigure.com +____________________________________________________________________________ +[ 1588] By: gsar on 1998/07/21 01:26:20 + Log: change#1481 didn't go through at all, redo it + Branch: perl + ! t/base/rs.t +____________________________________________________________________________ +[ 1587] By: gsar on 1998/07/21 01:21:41 + Log: workaround C<"foo" "bar"> catenation-intolerant compilers + Branch: perl + ! regexec.c toke.c +____________________________________________________________________________ +[ 1586] By: gsar on 1998/07/21 01:05:49 + Log: do not override PERL_DESTRUCT_LEVEL if use has it set + Branch: perl + ! t/TEST +____________________________________________________________________________ +[ 1585] By: gsar on 1998/07/21 00:39:17 + Log: fix small memory leak when mess_sv happens to be touched by magic + Branch: perl + ! perl.c t/lib/thread.t t/op/local.t t/op/pat.t t/op/regexp.t +____________________________________________________________________________ +[ 1584] By: gsar on 1998/07/21 00:37:32 + Log: fix memory leak in C + Branch: perl + ! scope.c +____________________________________________________________________________ +[ 1583] By: TimBunce on 1998/07/20 22:14:11 + Log: Update Changes and patchlevel.h for release. At last. + Branch: maint-5.004/perl + ! Changes patchlevel.h +____________________________________________________________________________ +[ 1582] By: gsar on 1998/07/20 21:28:43 + Log: add rsfp_filters and perldb to pollutants list + Branch: perl + ! embed.pl +____________________________________________________________________________ +[ 1581] By: nick on 1998/07/20 19:22:37 + Log: Integrate mainline pre-beta2 - just in case + Branch: ansiperl + !> (integrate 66 files) +____________________________________________________________________________ +[ 1580] By: TimBunce on 1998/07/20 17:16:38 + Log: Assorted patches: + + Title: "Clean up hash array allocation" + From: Gurusamy Sarathy + Msg-ID: <199807201052.GAA13336@aatma.engin.umich.edu> + Files: hv.c + + Title: "Further fixes for cppstdin on HP-UX 11" + From: Andy Dougherty + Msg-ID: + Files: hints/hpux.sh + Branch: maint-5.004/perl + ! hints/hpux.sh hv.c +____________________________________________________________________________ +[ 1579] By: TimBunce on 1998/07/20 09:46:14 + Log: Assorted patches: + + Title: "Fix C<$1 .. $2> coredump under debugger" + From: Gurusamy Sarathy + Msg-ID: <199807200042.UAA23288@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "Fix lvalue leaks stemming from failure to free LvTARG(sv)" + From: Gurusamy Sarathy + Msg-ID: <199807191829.OAA12433@aatma.engin.umich.edu> + Files: embed.h perl.h proto.h global.sym mg.c sv.c t/op/substr.t t/op/vec.t + + Title: "fix major bug (from 5.003_96); void contexts were using the context + of the enclosing sub!" + From: Francois Desarmenien , Gurusamy Sarathy + + Msg-ID: <199807180927.FAA08032@aatma.engin.umich.edu>, + <35B1CA51.A606AD27@club-internet.fr> + Files: op.h + + Title: "Update lib/Getopt/Long.pm (from perl5.005 beta 1)" + From: Johan Vromans + Msg-ID: <13745.47704.943964.34613@phoenix.squirrel.nl> + Files: lib/Getopt/Long.pm + + Title: "Add Porting/p4d2p utility for converting perforce diffs" + From: Gurusamy Sarathy + Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu> + Files: MANIFEST Porting/p4d2p + Branch: maint-5.004/perl + + Porting/p4d2p + ! MANIFEST embed.h global.sym lib/Getopt/Long.pm mg.c op.h + ! perl.h pp_ctl.c proto.h sv.c t/op/substr.t t/op/vec.t +____________________________________________________________________________ +[ 1578] By: gsar on 1998/07/20 09:38:39 + Log: complete s/foo/PL_foo/ changes (all escaped cases identified with + brute force search script). Result builds and passes all tests on + Solaris. win32 and PERL_OBJECT are still untested. + Branch: perl + ! XSLock.h XSUB.h bytecode.h bytecode.pl byterun.c cc_runtime.h + ! djgpp/djgpp.c embed.pl ext/B/B.xs ext/B/B/Asmdata.pm + ! ext/B/byteperl.c ext/DB_File/DB_File.xs ext/DB_File/typemap + ! ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_next.xs + ! ext/DynaLoader/dl_vms.xs ext/GDBM_File/typemap ext/IO/IO.xs + ! ext/IPC/SysV/SysV.xs ext/NDBM_File/typemap + ! ext/ODBM_File/ODBM_File.xs ext/ODBM_File/typemap + ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs ext/SDBM_File/typemap + ! ext/Thread/Thread.xs ext/attrs/attrs.xs fakethr.h gv.c hv.c + ! lib/ExtUtils/typemap malloc.c mg.c op.c os2/OS2/PrfDB/PrfDB.xs + ! os2/OS2/PrfDB/typemap os2/OS2/REXX/REXX.xs os2/os2.c + ! os2/os2ish.h perl.c perl.h pp.c pp_ctl.c pp_hot.c pp_sys.c + ! regcomp.c regcomp.h regexec.c scope.c scope.h sv.h taint.c + ! toke.c util.c vms/ext/DCLsym/DCLsym.xs vms/ext/Stdio/Stdio.xs + ! vms/vms.c vms/vmsish.h win32/win32.c win32/win32thread.c +____________________________________________________________________________ +[ 1577] By: TimBunce on 1998/07/20 08:28:17 + Log: Title: "Make failed matches return empty list in list context" + From: "Paul E. Maisano" , Gurusamy Sarathy + , Paul Maisano + Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu>, + <199807200027.KAA27815@ironbark-ridge.aaii.oz.au>, + <35B156FB.504E66E@aaii.oz.au> + Files: pod/perlop.pod pp_hot.c t/op/pat.t + Branch: maint-5.004/perl + ! pod/perlop.pod pp_hot.c t/op/pat.t +____________________________________________________________________________ +[ 1576] By: TimBunce on 1998/07/20 08:11:37 + Log: Title: "win32 update from 5.005 beta 2 for 5.004_05" + From: Gurusamy Sarathy + Msg-ID: <199807192332.TAA20905@aatma.engin.umich.edu> + Files: win32/include/dirent.h win32/include/sys/socket.h proto.h + lib/ExtUtils/Liblist.pm lib/ExtUtils/Mksymlists.pm + win32/win32.h win32/win32iop.h README.win32 installperl + pp_ctl.c win32/Makefile win32/config.bc win32/config.vc + win32/config_H.bc win32/config_H.vc win32/config_h.PL + win32/config_sh.PL win32/dl_win32.xs win32/makedef.pl + win32/makefile.mk win32/pod.mak win32/win32.c + win32/win32sck.c win32/bin/pl2bat.pl + Branch: maint-5.004/perl + ! README.win32 installperl lib/ExtUtils/Liblist.pm + ! lib/ExtUtils/Mksymlists.pm pp_ctl.c proto.h win32/Makefile + ! win32/bin/pl2bat.pl win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/config_h.PL + ! win32/config_sh.PL win32/dl_win32.xs win32/include/dirent.h + ! win32/include/sys/socket.h win32/makedef.pl win32/makefile.mk + ! win32/pod.mak win32/win32.c win32/win32.h win32/win32iop.h + ! win32/win32sck.c +____________________________________________________________________________ +[ 1575] By: gsar on 1998/07/20 01:27:14 + Log: integrate ansi branch to get s/foo/PL_foo/ changes + Branch: perl + +> fixvars + !> (integrate 537 files) +____________________________________________________________________________ +[ 1574] By: gsar on 1998/07/20 00:33:43 + Log: fix C<$1 .. $2> coredump under debugger + Branch: perl + ! pp_ctl.c +____________________________________________________________________________ +[ 1573] By: gsar on 1998/07/20 00:28:27 + Log: misc win32 config tweaks + Branch: perl + ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc + ! win32/config_h.PL win32/makefile.mk +____________________________________________________________________________ +[ 1572] By: nick on 1998/07/19 19:04:58 + Log: Missed file that had changed + Branch: ansiperl + ! embedvar.h +____________________________________________________________________________ +[ 1571] By: nick on 1998/07/19 18:57:35 + Log: Another threaded, perl malloc issue, x2p's Makefile.SH has a + pattern match... + Branch: ansiperl + ! x2p/Makefile.SH +____________________________________________________________________________ +[ 1570] By: nick on 1998/07/19 18:16:20 + Log: Drat! - threaded perl-malloc has mutex that needs PL_ + Branch: ansiperl + ! malloc.c perl.h +____________________________________________________________________________ +[ 1569] By: nick on 1998/07/19 17:55:22 + Log: PL_ for perl's malloc + Branch: ansiperl + ! hv.c malloc.c +____________________________________________________________________________ +[ 1568] By: nick on 1998/07/19 16:23:30 + Log: PL_ minir tidy up + Branch: ansiperl + ! embed.pl ext/Thread/Thread.xs util.c +____________________________________________________________________________ +[ 1567] By: nick on 1998/07/19 13:21:07 + Log: Add PL_ to merged file + Branch: ansiperl + ! pp_hot.c +____________________________________________________________________________ +[ 1566] By: nick on 1998/07/19 12:38:30 + Log: Merge Mainline + Branch: ansiperl + + fixvars + !> (integrate 29 files) +____________________________________________________________________________ +[ 1565] By: gsar on 1998/07/19 07:06:54 + Log: tweak pod in MakeMaker.pm + From: Paul Johnson + Date: Sat, 18 Jul 1998 15:58:48 +0100 + Message-ID: <19980718155847.D903@west-tip.transeda.com> + Subject: [PATCH]5.004_75 (DOC) MakeMaker.pm + Branch: perl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1564] By: gsar on 1998/07/19 07:04:45 + Log: From: Gisle Aas + Date: 17 Jul 1998 22:49:32 +0200 + Message-ID: + Subject: [PATCH _75] sv_gets() did not NUL-terminate SV when reading records + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1563] By: gsar on 1998/07/19 07:03:32 + Log: update freebsd hints + From: Mik Firestone + Date: Fri, 17 Jul 1998 15:24:26 -0400 (EDT) + Message-Id: <199807171924.AA05297@interlock2.lexmark.com> + Subject: [PATCH 5.005b1] hints/freebsd.sh + Branch: perl + ! hints/freebsd.sh +____________________________________________________________________________ +[ 1562] By: gsar on 1998/07/19 07:01:33 + Log: From: Mark Bixby + Date: Fri, 17 Jul 1998 10:37:49 -0700 (PDT) + Message-Id: <199807171737.KAA06967@spock.dis.cccd.edu> + Subject: [PATCH 5.005b1] MPE/iX hints and readme tweaks + Branch: perl + ! README.mpeix hints/mpeix.sh +____________________________________________________________________________ +[ 1561] By: gsar on 1998/07/19 07:00:19 + Log: From: Norton Allen + Date: Fri, 17 Jul 1998 12:37:27 -0400 (edt) + Message-Id: <199807171637.MAA24830@bottesini.harvard.edu> + Subject: [PATCH: 75] make install fails + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1560] By: gsar on 1998/07/19 06:58:55 + Log: fix flawed substitution-loop detection on zero-length matches + From: Ilya Zakharevich + Date: Fri, 17 Jul 1998 13:55:38 -0400 (EDT) + Message-Id: <199807171755.NAA27720@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Substitution loop in devel branch + Branch: perl + ! pp_hot.c t/op/subst.t +____________________________________________________________________________ +[ 1559] By: gsar on 1998/07/19 06:56:19 + Log: add perltrap entry about "${#a}", as suggested by + andy barfoot + Branch: perl + ! pod/perltrap.pod +____________________________________________________________________________ +[ 1558] By: gsar on 1998/07/19 06:43:53 + Log: From: Anton Berezin + Date: Fri, 17 Jul 1998 11:49:30 +0200 (CEST) + Message-Id: <199807170949.LAA18099@lion.plab.ku.dk> + Subject: [PATCH 5.005b1] perlcall.pod SAVETMPS/FREETMPS bracket + Branch: perl + ! pod/perlcall.pod +____________________________________________________________________________ +[ 1557] By: gsar on 1998/07/19 06:40:33 + Log: From: "Art Green" + Date: Thu, 16 Jul 1998 21:37:05 -0500 + Message-ID: <86256644.000E61D4.00@FDLTest1.mercmarine.com> + Subject: [PATCH]:_75 - Update hints/aix.sh for c_r library + Branch: perl + ! hints/aix.sh +____________________________________________________________________________ +[ 1556] By: gsar on 1998/07/19 06:38:17 + Log: update README.threads + From: Andy Dougherty + Date: Thu, 16 Jul 1998 11:10:33 -0400 (EDT) + Message-Id: + Subject: Re: Sort of OK: 5.005-beta1 and threads on ppc-powerux-threads + Branch: perl + ! README.threads +____________________________________________________________________________ +[ 1555] By: gsar on 1998/07/19 06:36:32 + Log: From: Scott Henry + Date: 15 Jul 1998 20:23:02 -0700 + Message-ID: + Subject: [PATCH 5.005-beta1] update hints/irix_6.sh + Branch: perl + ! hints/irix_6.sh +____________________________________________________________________________ +[ 1554] By: gsar on 1998/07/19 06:35:10 + Log: From: Spider Boardman + Date: Wed, 15 Jul 1998 16:56:48 -0400 + Message-Id: <199807152056.QAA369057@web.zk3.dec.com> + Subject: [PATCH _75] dec_osf hints still wrong + Branch: perl + ! hints/dec_osf.sh +____________________________________________________________________________ +[ 1553] By: gsar on 1998/07/19 06:33:29 + Log: tweak hpux hints in vain attempt to get cppstdin set properly + From: Andy Dougherty + Date: Wed, 15 Jul 1998 16:11:43 -0400 (EDT) + Subject: Re: HP-UX 11, perl 5.004_04, Oracle 7.3.3.4, DBI 0.93 + Message-Id: + -- + From: Andy Dougherty + Date: Thu, 16 Jul 1998 11:37:58 -0400 (EDT) + Subject: Re: Configure misses preprocessor on HP-UX + Message-Id: + Branch: perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 1552] By: gsar on 1998/07/19 06:26:24 + Log: From: Tye McQueen + Date: Wed, 15 Jul 1998 13:46:44 -0500 (CDT) + Message-Id: <199807151846.AA12653@metronet.com> + Subject: Minor debugger fix + Branch: perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 1551] By: gsar on 1998/07/19 06:25:05 + Log: From: Andy Dougherty + Date: Wed, 15 Jul 1998 14:23:39 -0400 (EDT) + Message-Id: + Subject: Re: Configure s?rand support [PATCH 5.004_75] -- better patch + Branch: perl + ! INSTALL pp.c +____________________________________________________________________________ +[ 1550] By: gsar on 1998/07/19 06:23:10 + Log: minor re.pm cleanup + From: "M.J.T. Guy" + Date: Wed, 15 Jul 1998 12:41:14 +0100 + Message-Id: + Subject: Re: [PATCH 5.004_74]Don't use tainted REs in Basename.pm when building perl + Branch: perl + ! ext/re/re.pm pod/perldiag.pod +____________________________________________________________________________ +[ 1549] By: gsar on 1998/07/19 06:20:49 + Log: export additional symbols on OS/2 + From: Ilya Zakharevich + Date: Wed, 15 Jul 1998 06:13:07 -0400 (EDT) + Message-Id: <199807151013.GAA11279@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Export more symbols from Perl DLL + Branch: perl + ! os2/os2.sym +____________________________________________________________________________ +[ 1548] By: gsar on 1998/07/19 06:18:58 + Log: From: Ilya Zakharevich + Date: Wed, 15 Jul 1998 06:10:36 -0400 (EDT) + Message-Id: <199807151010.GAA11270@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Minor improvements to perlcc + Branch: perl + ! utils/perlcc.PL +____________________________________________________________________________ +[ 1547] By: gsar on 1998/07/19 06:17:22 + Log: applied slightly tweaked version of patch + From: Ilya Zakharevich + Date: Thu, 16 Jul 1998 15:49:15 -0400 (EDT) + Message-Id: <199807161949.PAA08214@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Updated patch to Test::Harness + Branch: perl + ! lib/Test/Harness.pm +____________________________________________________________________________ +[ 1546] By: gsar on 1998/07/19 06:11:03 + Log: improve 'frame' handling in debugger + From: Ilya Zakharevich + Date: Wed, 15 Jul 1998 00:52:10 -0400 (EDT) + Message-Id: <199807150452.AAA06685@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Better debugger trace + Branch: perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 1545] By: gsar on 1998/07/19 06:07:51 + Log: fix and test handling of literal newlines in heredocs + From: Gisle Aas + Date: 17 Jul 1998 14:58:25 +0200 + Message-ID: + Subject: Re: [PATCH _71] CRs et al + -- + From: larry@wall.org (Larry Wall) + Date: Fri, 17 Jul 1998 09:32:35 -0700 + Message-Id: <199807171632.JAA12959@wall.org> + Subject: Re: [PATCH _71] CRs et al + Branch: perl + ! t/comp/multiline.t toke.c +____________________________________________________________________________ +[ 1544] By: gsar on 1998/07/19 06:00:12 + Log: remove possibly unwritable lib/re.pm before overwrite + From: larry@wall.org (Larry Wall) + Date: Wed, 15 Jul 1998 14:26:03 -0700 + Message-Id: <199807152126.OAA04623@wall.org> + Subject: Re: bug encountered building perl5.005beta1 + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1543] By: gsar on 1998/07/19 05:56:18 + Log: unsubmitted Changes tweak + Branch: perl + ! Changes cygwin32/ld2 +____________________________________________________________________________ +[ 1542] By: gsar on 1998/07/19 01:21:22 + Log: make failed matches return empty list in list context + Branch: perl + ! pod/perlop.pod pp_hot.c t/op/pat.t +____________________________________________________________________________ +[ 1541] By: gsar on 1998/07/18 22:27:59 + Log: remove obsolete perltrap about m//g's pos() reset behavior + Branch: perl + ! pod/perltrap.pod +____________________________________________________________________________ +[ 1540] By: nick on 1998/07/18 22:16:26 + Log: PL_ stuff passes non-threaded on Mingw32 + (Why did it compile without this fix?) + Branch: ansiperl + ! pp_sys.c +____________________________________________________________________________ +[ 1539] By: TimBunce on 1998/07/18 22:04:58 + Log: Assorted patches: + + Title: "Minor fixes to MakeMaker docs re ExtUtils::Embed" + From: Paul Johnson + Msg-ID: <19980718155847.D903@west-tip.transeda.com> + Files: lib/ExtUtils/MakeMaker.pm + + Title: "Update t/op/array.t (from 5.005 beta 1)" + Files: t/op/array.t + Branch: maint-5.004/perl + ! lib/ExtUtils/MakeMaker.pm t/op/array.t +____________________________________________________________________________ +[ 1538] By: TimBunce on 1998/07/18 21:57:50 + Log: Title: "Remove flawed '// with parens or $&' performance patch (Change 662)" + From: "M.J.T. Guy" , Tim Bunce , + larry@wall.org (Larry Wall) + Msg-ID: <19980717015308.E6244@ig.co.uk>, <199807171819.LAA13771@wall.org>, + + Files: cop.h embed.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c + pp_ctl.c pp_hot.c regexec.c scope.c + Branch: maint-5.004/perl + ! cop.h embed.h gv.c interp.sym perl.c perl.h pp.c pp_ctl.c + ! pp_hot.c proto.h regexec.c regexp.h scope.c +____________________________________________________________________________ +[ 1537] By: nick on 1998/07/18 20:56:58 + Log: PL_ scheme Builds under Minw32 - some SEGFAULT snags + Branch: ansiperl + ! doio.c mg.c perl.c pp_hot.c pp_sys.c util.c win32/perllib.c + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 1536] By: nick on 1998/07/18 20:50:26 + Log: Merge latest mainline + Branch: ansiperl + ! patchlevel.h + !> ext/Thread/Thread.xs op.h util.c +____________________________________________________________________________ +[ 1535] By: nick on 1998/07/18 16:45:29 + Log: Edited "behind my back" ... + Branch: ansiperl + ! vms/perly_c.vms +____________________________________________________________________________ +[ 1534] By: nick on 1998/07/18 16:38:27 + Log: PL_ stuff for threads + Branch: ansiperl + ! byterun.c cop.h deb.c doio.c doop.c embed.pl embedvar.h + ! ext/B/B.xs ext/Thread/Thread.xs gv.c intrpvar.h mg.c + ! miniperlmain.c op.c op.h perl.c perl.h perly.y pp.c pp.h + ! pp_ctl.c pp_hot.c pp_sys.c regexec.c run.c scope.c sv.c sv.h + ! thread.h toke.c util.c win32/perllib.c +____________________________________________________________________________ +[ 1533] By: nick on 1998/07/18 14:30:54 + Log: Builds and passes tests with -DMULTIPLICITY and -DCRIPPLED_CC + (still with PERL_GLOBAL_STRUCT) - to cover more #if branches + Branch: ansiperl + ! embed.pl intrpvar.h perl.c toke.c +____________________________________________________________________________ +[ 1532] By: nick on 1998/07/18 13:53:03 + Log: PL_ prefix to all perlvars, part1 + Builds and passes all tests at one limit i.e. -DPERL_GLOBAL_STRUCT + Branch: ansiperl + ! XSUB.h av.c bytecode.h byterun.c byterun.h cop.h deb.c doio.c + ! doop.c dump.c embed.h embed.pl embedvar.h ext/B/B.xs + ! ext/Data/Dumper/Dumper.xs ext/DynaLoader/dl_next.xs + ! ext/ODBM_File/ODBM_File.xs ext/Opcode/Opcode.xs + ! ext/POSIX/POSIX.xs ext/Socket/Socket.xs ext/attrs/attrs.xs + ! ext/re/re.xs gv.c hv.c hv.h lib/ExtUtils/typemap + ! lib/ExtUtils/xsubpp mg.c miniperlmain.c op.c perl.c perl.h + ! perly.c perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c regcomp.c + ! regcomp.h regexec.c run.c scope.c scope.h sv.c sv.h taint.c + ! thrdvar.h toke.c universal.c util.c +____________________________________________________________________________ +[ 1531] By: gsar on 1998/07/18 08:48:13 + Log: fix yet another USE_THREADS leak due to failure to free stacks + Branch: perl + ! ext/Thread/Thread.xs util.c +____________________________________________________________________________ +[ 1530] By: gsar on 1998/07/18 08:46:58 + Log: fix major bug in GIMME (introduced in 5.003_96); void contexts were + using the context of the enclosing sub! + Branch: perl + ! op.h +____________________________________________________________________________ +[ 1529] By: nick on 1998/07/18 08:18:03 + Log: Integrate post-beta tweaks to ansiperl + Branch: ansiperl + !> ObjXSub.h embed.h ext/Thread/Thread.xs global.sym gv.c mg.c + !> objpp.h op.c perl.c perl.h pp_sys.c proto.h sv.c t/op/substr.t + !> t/op/vec.t toke.c util.c +____________________________________________________________________________ +[ 1528] By: gsar on 1998/07/18 04:23:12 + Log: fix lvalue leaks stemming from failure to free LvTARG(sv) + Branch: perl + ! ObjXSub.h embed.h global.sym mg.c objpp.h perl.h proto.h sv.c + ! t/op/substr.t t/op/vec.t +____________________________________________________________________________ +[ 1527] By: gsar on 1998/07/18 02:16:40 + Log: check ferror() only if read() returned 0 + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 1526] By: gsar on 1998/07/18 02:08:01 + Log: fix another CvMUTEXP() leak + Branch: perl + ! gv.c +____________________________________________________________________________ +[ 1525] By: TimBunce on 1998/07/18 01:51:52 + Log: Assorted patches: + + Title: "Fix @a=@a=qw(...) properly" + From: Stephen McCamant + Msg-ID: <13742.49404.367751.437966@alias-2.pr.mcs.net> + Files: opcode.h + + Title: "Larry's patch to support CR LF in scripts (updated)" + From: Gisle Aas , larry@wall.org (Larry Wall) + Msg-ID: <199807120054.RAA19550@wall.org>, + Files: t/comp/multiline.t toke.c + + Title: "Change getc() docs to match behaviour. Make read() return undef on + error." + From: Gurusamy Sarathy + Msg-ID: <199807052257.SAA10004@aatma.engin.umich.edu> + Files: pod/perlfunc.pod pp_sys.c + + Title: "Update patchls utility" + Files: Porting/patchls + Branch: maint-5.004/perl + ! Porting/patchls opcode.h pod/perlfunc.pod pp_sys.c + ! t/comp/multiline.t toke.c +____________________________________________________________________________ +[ 1524] By: gsar on 1998/07/18 01:22:35 + Log: fix CvMUTEXP() leaks with -Dusethreads + Branch: perl + ! op.c toke.c +____________________________________________________________________________ +[ 1523] By: gsar on 1998/07/18 01:17:28 + Log: fix $/ init for multiple interpreters/threads + Branch: perl + ! ext/Thread/Thread.xs perl.c util.c +____________________________________________________________________________ +[ 1522] By: gsar on 1998/07/18 01:11:07 + Log: fix missing init that caused RE alternations to fail under + -Dusethreads + Branch: perl + ! util.c +____________________________________________________________________________ +[ 1521] By: TimBunce on 1998/07/16 22:23:25 + Log: Assorted patches: + + Title: "Allow $SIG{CHLD}='IGNORE' to work (reap zombies) on Solaris" + From: Albert Dvornik , Chip Salzenberg + Msg-ID: <19980708181055.A8005@perlsupport.com>, + + Files: util.c + + Title: "Document perltrap on precedence of keys/values/each" + From: Gurusamy Sarathy + Msg-ID: <199807151857.OAA04704@aatma.engin.umich.edu> + Files: pod/perltrap.pod + + Title: "perlbook.pod patch" + From: Tom Christiansen + Msg-ID: <199807140037.SAA04556@chthon.perl.com> + Files: pod/perlbook.pod + + Title: "perlmod.pod patch" + From: Tom Christiansen + Msg-ID: <199807140109.TAA04678@chthon.perl.com> + Files: pod/perlmod.pod + + Title: "Fix bug in IO::Handle->input_record_separator" + From: Robin Barker , Swen Thuemmler + + Msg-ID: <199807161400.PAA25532@tempest.cise.npl.co.uk>, + + Files: ext/IO/lib/IO/Handle.pm + + Title: "update h2ph, Math::Complex and Math::Trig (from 5.005 beta 1)" + Files: lib/Math/Complex.pm lib/Math/Trig.pm t/lib/complex.t t/lib/h2ph.t + t/lib/trig.t utils/h2ph.PL + + Title: "Update hints/irix_6.sh" + From: Scott Henry + Msg-ID: + Files: hints/irix_6.sh + + Title: "Configure misses preprocessor on HP-UX (further fix)" + From: Andy Dougherty + Msg-ID: + Files: hints/hpux.sh + + Title: "update perlbug to v1.26 (from 5.005 beta 1)" + Files: utils/perlbug.PL + Branch: maint-5.004/perl + ! ext/IO/lib/IO/Handle.pm hints/hpux.sh hints/irix_6.sh + ! lib/Math/Complex.pm lib/Math/Trig.pm pod/perlbook.pod + ! pod/perlmod.pod pod/perltrap.pod t/lib/complex.t t/lib/h2ph.t + ! t/lib/trig.t util.c utils/h2ph.PL utils/perlbug.PL +____________________________________________________________________________ +[ 1520] By: TimBunce on 1998/07/15 21:24:12 + Log: Assorted patches: + + Title: "Add stub attrs.pm" + From: Graham Barr , Gurusamy Sarathy + Msg-ID: <19980713163312.A18222@asic.sc.ti.com>, + <199807132140.RAA09583@aatma.engin.umich.edu> + Files: MANIFEST lib/attrs.pm + + Title: "Fix @a=@a=qw(...)" + From: Gurusamy Sarathy , Stephen McCamant + + Msg-ID: <13737.12300.950886.821143@alias-2.pr.mcs.net>, + <199807122351.TAA05649@aatma.engin.umich.edu> + Files: op.c opcode.pl t/op/array.t + + Title: "Fix 'PERL_DESTRUCT_LEVEL=2 ./perl -DD -e 1' loop" + From: Gisle Aas , Stephen McCamant + Msg-ID: <13739.55551.205810.338648@alias-2.pr.mcs.net>, + + Files: sv.c + + Title: "Make Power MachTen use vfork() and system malloc()" + From: Dominic Dunlop , Jarkko Hietaniemi + Msg-ID: + Files: hints/machten.sh malloc.c + + Title: "Use REG_INFTY in place of hardwired constant" + From: Dominic Dunlop + Msg-ID: + Files: regcomp.h regcomp.c regexec.c + + Title: "Minor debugger fix (history adds an extra newline)" + From: Tye McQueen + Msg-ID: <199807151846.AA12653@metronet.com> + Files: lib/perl5db.pl + + Title: "Protect Term::ReadLine against non-default $/ value" + From: Ilya Zakharevich , + kstar@chapin.edu@ig.co.uk () + Msg-ID: <19980713151749.G8596@O2.chapin.edu>, + <199807132139.RAA11270@monk.mps.ohio-state.edu> + Files: lib/Term/ReadLine.pm + + Title: "Fix HP-UX 11 build (cppstdin)" + From: Andy Dougherty + Msg-ID: + Files: Configure hints/hpux.sh + + Title: "VMS filetest operator fixup (SS$_ACCONFLICT)" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980702135255.00a6ad90@ous.edu> + Files: vms/vms.c + Branch: maint-5.004/perl + + lib/attrs.pm + ! Configure MANIFEST hints/hpux.sh hints/machten.sh + ! lib/Term/ReadLine.pm lib/perl5db.pl malloc.c op.c opcode.pl + ! regcomp.c regcomp.h regexec.c sv.c t/op/array.t vms/vms.c +____________________________________________________________________________ +[ 1519] By: nick on 1998/07/15 18:56:17 + Log: Integrate mainline at beta1 + Branch: ansiperl + +> Porting/p4d2p README.mpeix Todo-5.005 + +> ext/DynaLoader/dl_mpeix.xs ext/re/hints/mpeix.pl + +> mpeix/mpeixish.h mpeix/nm mpeix/relink perly_c.diff + +> pod/perld4.pod pod/perlport.pod t/lib/ipc_sysv.t + - Todo.5.005 lib/Bundle/CPAN.pm perly.c.diff pod/perldelta4.pod + - t/op/ipcmsg.t t/op/ipcsem.t + !> (integrate 167 files) + +---------------- +Version 5.004_75 5.005 Public Beta, Issue 1 +---------------- + +____________________________________________________________________________ +[ 1518] By: gsar on 1998/07/15 10:01:41 + Log: add stub docs for ext/B, other minor tweaks + Branch: perl + ! Changes Porting/config_H config_h.SH ext/B/B.pm + ! ext/B/B/Asmdata.pm ext/B/B/Assembler.pm ext/B/B/Bblock.pm + ! ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/CC.pm + ! ext/B/B/Debug.pm ext/B/B/Disassembler.pm ext/B/B/Showlex.pm + ! ext/B/B/Stackobj.pm ext/B/B/Terse.pm ext/B/O.pm sv.c +____________________________________________________________________________ +[ 1517] By: gsar on 1998/07/15 08:27:15 + Log: up patchlevel to 75 (Beta, Issue 1), add podpatch + From: abigail@fnx.com + Date: Wed, 15 Jul 1998 04:03:44 -0400 (EDT) + Message-ID: <19980715080344.21975.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.004_74] pod/perlop.pod + Branch: perl + ! Changes patchlevel.h pod/perlop.pod win32/Makefile + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 1516] By: gsar on 1998/07/15 08:04:24 + Log: From: abigail@fnx.com + Date: Wed, 15 Jul 1998 03:47:56 EDT + Message-Id: <19980715074756.21868.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.004_74] pod/pod2man.PL Fix use of < inside C<> + Branch: perl + ! pod/pod2man.PL +____________________________________________________________________________ +[ 1515] By: gsar on 1998/07/15 08:02:14 + Log: From: Ilya Zakharevich + Date: Wed, 15 Jul 1998 03:49:24 EDT + Message-Id: <199807150749.DAA09177@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] Additional targets for OS/2 build + Branch: perl + ! os2/Makefile.SHs +____________________________________________________________________________ +[ 1514] By: gsar on 1998/07/15 07:58:29 + Log: rename some long file names to be 8.3 truncation-safe + Branch: perl + +> Todo-5.005 perly_c.diff pod/perld4.pod + - Todo.5.005 perly.c.diff pod/perldelta4.pod + ! MANIFEST Porting/pumpkin.pod perly.fixer +____________________________________________________________________________ +[ 1513] By: gsar on 1998/07/15 07:35:29 + Log: minor tweaks to docs on qr// + Branch: perl + ! ext/re/re.pm pod/perldelta.pod pod/perlop.pod pod/perlre.pod +____________________________________________________________________________ +[ 1512] By: gsar on 1998/07/15 07:06:02 + Log: applied patch, with tab tweak suggest by Peter Prymmer + From: Dan Sugalski + Date: Tue, 14 Jul 1998 16:41:14 -0700 + Message-Id: <3.0.5.32.19980714164114.00a3e2a0@ous.edu> + Subject: [PATCH 5.004_74]VMS build cleanups + Branch: perl + ! vms/descrip_mms.template +____________________________________________________________________________ +[ 1511] By: gsar on 1998/07/15 07:03:33 + Log: allow perlbug -ok when STDIN it not a tty + From: Hugo van der Sanden + Date: Wed, 15 Jul 1998 03:24:56 +0200 + Message-Id: + Subject: Re: [NOT OK] 5.004_74: "make ok" not ok in IRIX 6.2 + Branch: perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 1510] By: gsar on 1998/07/15 06:59:43 + Log: From: "Art Green" + Date: Tue, 14 Jul 1998 20:53:48 -0500 + Message-ID: <86256642.0004D7AB.00@FDLTest1.mercmarine.com> + Subject: [PATCH]:_74 - Allow Configure to recognize _AIX41 & _POWER compiler defines + Branch: perl + ! Configure +____________________________________________________________________________ +[ 1509] By: gsar on 1998/07/15 06:57:50 + Log: typecast long vs. IV compares in pp_flip/pp_flop + Branch: perl + ! pp_ctl.c +____________________________________________________________________________ +[ 1508] By: gsar on 1998/07/15 06:50:49 + Log: don't copy foreach itervar when no external refs exist + From: Gisle Aas + Date: 15 Jul 1998 03:35:25 +0200 + Message-ID: + Subject: Re: Testcase for 1..n closure change + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 1507] By: gsar on 1998/07/15 06:46:41 + Log: applied patch, regen headers + From: Stephen McCamant + Date: Tue, 14 Jul 1998 19:56:47 -0500 (CDT) + Message-ID: <13739.64763.792570.626015@alias-2.pr.mcs.net> + Subject: B::Deparse update for qr// and regcreset + Branch: perl + ! ext/B/B/Deparse.pm opcode.h opcode.pl +____________________________________________________________________________ +[ 1506] By: gsar on 1998/07/15 06:43:04 + Log: make pregcomp et al VIRTUAL again for PERL_OBJECT + From: "Douglas Lankshear" + Date: Tue, 14 Jul 1998 16:40:30 -0700 + Message-ID: <000301bdaf80$c93d14a0$a32fa8c0@tau.Active> + Subject: [PATCH 5.004_74] + Branch: perl + ! proto.h +____________________________________________________________________________ +[ 1505] By: gsar on 1998/07/15 06:41:43 + Log: dont use sv_dump() in -DD diagnostic + From: Gisle Aas + Date: 14 Jul 1998 23:55:36 +0200 + Message-ID: + Subject: [PATCH] Fix 'PERL_DESTRUCT_LEVEL=2 ./perl -DD -e 1' loop + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1504] By: gsar on 1998/07/15 06:39:37 + Log: add a few more thread.t tests + Branch: perl + ! t/lib/thread.t +____________________________________________________________________________ +[ 1503] By: gsar on 1998/07/15 06:31:33 + Log: fix thread.t ('join $t' ne '$t->join' !) + Branch: perl + ! t/lib/thread.t +____________________________________________________________________________ +[ 1502] By: gsar on 1998/07/15 06:26:00 + Log: From: Jarkko Hietaniemi + Date: Wed, 15 Jul 1998 01:45:57 +0300 (EET DST) + Message-Id: <199807142245.BAA09651@alpha.hut.fi> + Subject: [PATCH] 5.004_74: MPE/iX final touches + Branch: perl + ! installperl lib/File/Copy.pm +____________________________________________________________________________ +[ 1501] By: gsar on 1998/07/15 05:59:49 + Log: apply (reversed) patch + From: Peter Wolfe + Date: Tue, 14 Jul 1998 13:01:58 -0700 (PDT) + Message-Id: <199807142001.NAA26550@titan.teloseng.com> + Subject: NOT_OK: perl 5.00474 on SCO 3.2v5.0.4 + Branch: perl + ! ext/IPC/SysV/SysV.xs +____________________________________________________________________________ +[ 1500] By: gsar on 1998/07/15 05:57:39 + Log: From: Andy Dougherty + Date: Tue, 14 Jul 1998 14:14:59 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_74] Config_74-01 + Branch: perl + ! Configure MANIFEST Porting/Glossary Porting/config.sh + ! Porting/config_H Porting/pumpkin.pod config_h.SH + ! vms/subconfigure.com win32/config.bc win32/config.gc + ! win32/config.vc +____________________________________________________________________________ +[ 1499] By: gsar on 1998/07/15 05:48:38 + Log: From: Jarkko Hietaniemi + Date: Tue, 14 Jul 1998 21:35:02 +0300 (EET DST) + Message-Id: <199807141835.VAA09030@alpha.hut.fi> + Subject: [PATCH] 5.004_74: trig.t: math inaccuracy fudge for unicos + Branch: perl + ! t/lib/trig.t +____________________________________________________________________________ +[ 1498] By: gsar on 1998/07/15 05:47:33 + Log: -w, strict clean perldoc (via PM) + From: Robin Barker + Date: Tue, 14 Jul 98 17:22:01 BST + Message-Id: <18695.9807141622@tempest.cise.npl.co.uk> + Subject: [PATCH 5.004_74] perldoc.PL + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1497] By: gsar on 1998/07/15 05:35:54 + Log: add comment about cpprun etc., to hints/hpux.sh + Branch: perl + ! hints/hpux.sh +____________________________________________________________________________ +[ 1496] By: gsar on 1998/07/15 05:15:16 + Log: fix warning from CGI::Carp + Branch: perl + ! lib/CGI/Carp.pm +____________________________________________________________________________ +[ 1495] By: gsar on 1998/07/14 23:47:18 + Log: fix off-by-one in win32 registry handling + From: "Douglas Lankshear" + Date: Tue, 14 Jul 1998 07:39:06 -0700 + Message-ID: <000401bdaf35$27489e80$a32fa8c0@tau.Active> + Subject: [PATCH 5.004_73] + Branch: perl + ! win32/win32.c +____________________________________________________________________________ +[ 1494] By: gsar on 1998/07/14 23:45:58 + Log: doc patches from Gisle Aas + Date: 14 Jul 1998 16:18:31 +0200 + Message-ID: + Subject: [PATCH] substr/splice changes for perldelta.pod + -- + Date: 14 Jul 1998 20:31:27 +0200 + Message-ID: + Subject: [PATCH] Duplicate description of use integer % + Branch: perl + ! pod/perldelta.pod pod/perlop.pod +____________________________________________________________________________ +[ 1493] By: gsar on 1998/07/14 23:39:31 + Log: File/Spec.pm needs trailing newline + Branch: perl + ! lib/File/Spec.pm +____________________________________________________________________________ +[ 1492] By: gsar on 1998/07/14 21:43:03 + Log: unsubmitted _74 tweaks + Branch: perl + ! Changes mpeix/nm mpeix/relink pod/perldelta.pod + ! pod/perldiag.pod + +---------------- +Version 5.004_74 +---------------- + +____________________________________________________________________________ +[ 1491] By: gsar on 1998/07/14 08:48:28 + Log: up patchlevel to 74; introduce distinct archname for PERL_OBJECT + Branch: perl + ! Changes patchlevel.h pod/perlhist.pod win32/Makefile + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 1490] By: gsar on 1998/07/14 08:31:13 + Log: From: Gisle Aas + Date: 14 Jul 1998 10:20:34 +0200 + Message-Id: + Subject: [PATCH] Make -DP work (and readable) + Branch: perl + ! run.c +____________________________________________________________________________ +[ 1489] By: gsar on 1998/07/14 08:23:46 + Log: fix function parameter autovivification for pseudohashes + Branch: perl + ! mg.c t/op/avhv.t +____________________________________________________________________________ +[ 1488] By: gsar on 1998/07/14 07:34:45 + Log: merge changes#1423,1465 from maintbranch; checkin two missed files + from earlier changes#1461,1478 + Branch: perl + ! pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod pp_sys.c + ! t/TEST t/lib/thread.t t/op/local.t t/op/pat.t t/op/regexp.t + ! t/op/substr.t t/op/vec.t +____________________________________________________________________________ +[ 1487] By: gsar on 1998/07/14 07:04:54 + Log: tweak t/lib/thread.t + Branch: perl + ! t/lib/thread.t +____________________________________________________________________________ +[ 1486] By: gsar on 1998/07/14 06:38:15 + Log: applied patch, slightly tweaked + From: Dan Sugalski + Date: Mon, 13 Jul 1998 11:52:27 -0700 + Message-Id: <3.0.5.32.19980713115227.00a73970@ous.edu> + Subject: [PATCH 5.004_73]Get re module working on VMS + Branch: perl + ! ext/re/Makefile.PL perl.h proto.h +____________________________________________________________________________ +[ 1485] By: gsar on 1998/07/14 06:32:58 + Log: add Porting/p4d2p + Branch: perl + + Porting/p4d2p + ! MANIFEST +____________________________________________________________________________ +[ 1484] By: gsar on 1998/07/14 06:08:20 + Log: doc patches from Tom Christiansen (via PM) + Date: Mon, 13 Jul 1998 19:09:09 -0600 + Message-Id: <199807140109.TAA04678@chthon.perl.com> + Subject: perlmod.pod patch + -- + Date: Mon, 13 Jul 1998 18:37:07 -0600 + Message-Id: <199807140037.SAA04556@chthon.perl.com> + Subject: perlbook.pod patch + Branch: perl + ! pod/perlbook.pod pod/perlmod.pod +____________________________________________________________________________ +[ 1483] By: gsar on 1998/07/14 06:04:25 + Log: OS/2 update + From: Ilya Zakharevich + Message-Id: <199807132336.TAA12967@monk.mps.ohio-state.edu> + Date: Mon, 13 Jul 1998 19:36:05 -0400 (EDT) + Subject: [PATCH 5.004_72] OS/2 system() and friends additions + Branch: perl + ! README.os2 hints/os2.sh os2/Changes os2/os2.c t/op/magic.t +____________________________________________________________________________ +[ 1482] By: gsar on 1998/07/14 06:01:12 + Log: more VMS patches from Dan Sugalski + Date: Mon, 13 Jul 1998 16:37:49 -0700 + Message-Id: <3.0.5.32.19980713163749.00af1c40@ous.edu> + Subject: [PATCH 5.004_73]t/io/iprefix.t patch for VMS + -- + Date: Mon, 13 Jul 1998 15:51:09 -0700 + Message-Id: <3.0.5.32.19980713155109.00a52c30@ous.edu> + Subject: [PATCH5.004_73]Tweak t/lib/cgi-html.t to work on VMS + Branch: perl + ! t/io/iprefix.t t/lib/cgi-html.t +____________________________________________________________________________ +[ 1481] By: gsar on 1998/07/14 05:57:36 + Log: From: Dan Sugalski + Date: Mon, 13 Jul 1998 15:41:53 -0700 + Message-Id: <3.0.5.32.19980713154153.00a87be0@ous.edu> + Subject: [PATCH 5.004_73]Fix t/base/rs.t test failures on VMS + Branch: perl + ! t/base/rs.t +____________________________________________________________________________ +[ 1480] By: gsar on 1998/07/14 05:56:14 + Log: From: Dan Sugalski + Message-Id: <3.0.5.32.19980713150427.00b2a540@ous.edu> + Date: Mon, 13 Jul 1998 15:04:27 -0700 + Subject: [PATCH 5.004_73]Thread tweak for VMS.C + Branch: perl + ! vms/vms.c +____________________________________________________________________________ +[ 1479] By: gsar on 1998/07/14 05:55:13 + Log: From: Laszlo Molnar + Date: Mon, 13 Jul 1998 23:13:43 +0200 + Message-ID: <19980713231343.A178@cdata.tvnet.hu> + Subject: [PATCH _72] Configure problem on dos-djgpp + Branch: perl + ! Configure +____________________________________________________________________________ +[ 1478] By: gsar on 1998/07/14 05:53:08 + Log: add files and tweaks needed for MPE/iX port (via PM) + From: Jarkko Hietaniemi + Date: Tue, 14 Jul 1998 00:07:30 +0300 (EET DST) + Message-Id: <199807132107.AAA20603@alpha.hut.fi> + Subject: MPE/iX patches for _73 + Branch: perl + + README.mpeix ext/DynaLoader/dl_mpeix.xs ext/re/hints/mpeix.pl + + mpeix/mpeixish.h mpeix/nm mpeix/relink + ! MANIFEST ext/Socket/Socket.xs hints/mpeix.sh installperl + ! lib/File/Copy.pm perl.c perl.h pod/perldelta.pod +____________________________________________________________________________ +[ 1477] By: gsar on 1998/07/14 04:23:28 + Log: added suggested patch (via PM), tweaked to implicitly specify -DDEBUGGING + From: Andy Dougherty + Date: Mon, 13 Jul 1998 16:50:55 -0400 (EDT) + Message-Id: + Subject: Re: _70 and Devel::RE + Branch: perl + ! ext/re/Makefile.PL ext/re/re.xs regcomp.c regexec.c +____________________________________________________________________________ +[ 1476] By: gsar on 1998/07/14 04:06:25 + Log: minor Configure nits + From: Jarkko Hietaniemi + Date: Mon, 13 Jul 1998 23:25:27 +0300 (EET DST) + Message-Id: <199807132025.XAA10771@alpha.hut.fi> + Subject: Configure patches for MVS (and one x2p/Makefile.SH) + Branch: perl + ! Configure x2p/Makefile.SH +____________________________________________________________________________ +[ 1475] By: gsar on 1998/07/14 03:59:56 + Log: From: Dan Sugalski + Date: Mon, 13 Jul 1998 12:54:19 -0700 + Message-Id: <3.0.5.32.19980713125419.009e0100@ous.edu> + Subject: [PATCH 5.004_73] Fixes to the VMS configuration system + Branch: perl + ! vms/munchconfig.c vms/subconfigure.com +____________________________________________________________________________ +[ 1474] By: gsar on 1998/07/14 03:58:13 + Log: make Term::Readline::get_line() independent of caller's $/ + From: kstar@chapin.edu + Date: Mon, 13 Jul 1998 15:17:49 -0400 + Message-ID: <19980713151749.G8596@O2.chapin.edu> + Subject: [PATCH] Was: CPAN.pm still fails + Branch: perl + ! lib/Term/ReadLine.pm +____________________________________________________________________________ +[ 1473] By: gsar on 1998/07/14 03:55:29 + Log: fix $trnl interpolation in here-docs (via PM) + From: Andy Dougherty + Date: Mon, 13 Jul 1998 15:49:00 -0400 (EDT) + Message-Id: + Subject: Re: [PATCH] 5.004_73: Re: Configure/trnl craziness + Branch: perl + ! Configure +____________________________________________________________________________ +[ 1472] By: gsar on 1998/07/14 03:50:18 + Log: From: Dominic Dunlop + Date: Mon, 13 Jul 1998 15:55:09 +0100 (WET DST) + Message-Id: <199807131455.PAA23621@ppp52.vo.lu> + Subject: Not OK: perl 5.00473 on powerpc-machten 4.1 [PATCH 5.004_73] + Branch: perl + ! hints/machten.sh +____________________________________________________________________________ +[ 1471] By: gsar on 1998/07/14 03:49:07 + Log: From: Dan Sugalski + Message-Id: <3.0.5.32.19980713123005.00b6be50@ous.edu> + Date: Mon, 13 Jul 1998 12:30:05 -0700 + Subject: [PATCH 5.004_73] Add Data::Dumper and re modules to VMS config stuff + Branch: perl + ! configure.com vms/descrip_mms.template +____________________________________________________________________________ +[ 1470] By: gsar on 1998/07/14 03:40:14 + Log: consistently refer to functions as C + From: abigail@fnx.com + Date: Mon, 13 Jul 1998 03:04:24 -0400 (EDT) + Message-ID: <19980713070424.19841.qmail@betelgeuse.wayne.fnx.com> + Subject: Re: [PATCH 5.004_71] pod/perlfunc.pod + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1469] By: gsar on 1998/07/14 03:35:06 + Log: From: Tom Hughes + Date: 13 Jul 1998 09:34:16 +0100 + Message-ID: + Subject: [PATCH 5.004_72] Fix d_Gconvert definition in hints/svr4.sh + Branch: perl + ! hints/svr4.sh +____________________________________________________________________________ +[ 1468] By: gsar on 1998/07/14 03:34:03 + Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig) + Date: 13 Jul 1998 11:16:27 +0200 + Message-ID: + Subject: Parallel Makefiles + Branch: perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 1467] By: gsar on 1998/07/14 03:31:39 + Log: From: Ilya Zakharevich + Date: Mon, 13 Jul 1998 00:12:19 -0400 (EDT) + Message-Id: <199807130412.AAA27128@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_72] t/io/pipe.t - completely broken? + Branch: perl + ! t/io/pipe.t +____________________________________________________________________________ +[ 1466] By: gsar on 1998/07/14 03:29:25 + Log: minor tweaks to perldelta and README.win32 + Branch: perl + ! Changes README.win32 pod/perldelta.pod +____________________________________________________________________________ +[ 1465] By: TimBunce on 1998/07/13 21:33:45 + Log: Assorted patches: + + Title: "Fix string substitution returncode problem" + From: Dominic Dunlop , Gurusamy Sarathy + Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>, + + Files: pp_hot.c + + Title: "umask EXPR is fatal only if (EXPR & 0700) > 0" + From: Gurusamy Sarathy + Msg-ID: <199807111656.MAA03310@aatma.engin.umich.edu> + Files: pod/perldiag.pod pp_sys.c + + Title: "Remove reference to qsort from perlfunc.pod" + From: Gurusamy Sarathy + Msg-ID: <199807111923.PAA05124@aatma.engin.umich.edu> + Files: pod/perlfunc.pod + + Title: "Deprecate AvFILL in favor of av_len()" + From: Gurusamy Sarathy + Msg-ID: <199807111945.PAA05489@aatma.engin.umich.edu> + Files: pod/perlguts.pod + + Title: "Further clarify effects of using quotes with m operator" + From: Gurusamy Sarathy + Msg-ID: <199806201921.PAA03829@aatma.engin.umich.edu> + Files: pod/perlop.pod + + Title: "Add PERL_DESTRUCT_LEVEL=2 to test suite" + From: Tim Bunce + Files: t/TEST t/op/local.t t/op/pat.t t/op/regexp.t t/op/substr.t t/op/vec.t + Branch: maint-5.004/perl + ! pod/perldiag.pod pod/perlfunc.pod pod/perlguts.pod + ! pod/perlop.pod pp_hot.c pp_sys.c t/TEST t/op/local.t + ! t/op/pat.t t/op/regexp.t t/op/substr.t t/op/vec.t toke.c + +---------------- +Version 5.004_73 +---------------- + +____________________________________________________________________________ +[ 1464] By: gsar on 1998/07/13 04:41:07 + Log: up patchlevel to 73, update Changes &c. + Branch: perl + ! Changes patchlevel.h pod/perlhist.pod t/op/array.t + ! win32/Makefile win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1463] By: gsar on 1998/07/13 02:58:51 + Log: avoid empty rm -f in MM_Unix.pm + Branch: perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 1462] By: gsar on 1998/07/13 02:54:52 + Log: update perldelta + Branch: perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 1461] By: gsar on 1998/07/13 02:44:30 + Log: added patch, tweaked PERL_OBJECT things + From: Graham Barr + Date: Sun, 12 Jul 1998 19:57:47 CDT + Message-Id: <19980712195747.C493@pobox.com> + Subject: [ PATCH perl5.004_72] patch to add qr// + Branch: perl + ! dump.c embed.h ext/Opcode/Opcode.pm global.sym globals.c + ! keywords.h keywords.pl op.c op.h opcode.h opcode.pl + ! pod/perlfunc.pod pp.c pp_hot.c pp_proto.h proto.h regcomp.c + ! regexp.h sv.c t/op/pat.t toke.c +____________________________________________________________________________ +[ 1460] By: gsar on 1998/07/13 01:25:07 + Log: add a few more PURIFY guards + Branch: perl + ! av.c sv.c +____________________________________________________________________________ +[ 1459] By: gsar on 1998/07/12 23:38:31 + Log: add tests for change#1458 and then some + Branch: perl + ! t/op/array.t +____________________________________________________________________________ +[ 1458] By: gsar on 1998/07/12 22:42:47 + Log: apply patch for smarter AASSIGN_COMMON detection; regen headers + From: Stephen McCamant + Date: Sun, 12 Jul 1998 17:17:00 CDT + Message-Id: <13737.12300.950886.821143@alias-2.pr.mcs.net> + Subject: [PATCH] @a=@a=qw(1) not working, both 5.004_04 and 5.004_71 + Branch: perl + ! op.c opcode.h opcode.pl +____________________________________________________________________________ +[ 1457] By: gsar on 1998/07/12 22:06:05 + Log: small tweaks from Jarkko Hietaniemi + Branch: perl + ! Configure Makefile.SH ext/Socket/Socket.xs perl.c +____________________________________________________________________________ +[ 1456] By: gsar on 1998/07/12 21:56:39 + Log: From: Doug MacEachern + Date: Sun, 12 Jul 1998 14:29:29 -0400 + Message-Id: <199807121829.OAA00525@postman.opengroup.org> + Subject: [PATCH 5.004_72] Embed.pm support for PERL_OBJECT + Branch: perl + ! lib/ExtUtils/Embed.pm +____________________________________________________________________________ +[ 1455] By: gsar on 1998/07/12 21:54:02 + Log: applied installperl patch, corrected other little nits + From: andreas.koenig@kulturbox.de (Andreas J. Koenig) + Date: 12 Jul 1998 16:27:21 +0200 + Message-ID: + Subject: [5.004_72] installperl tweak + Branch: perl + ! Changes Configure README.win32 installperl win32/makefile.mk +____________________________________________________________________________ +[ 1454] By: gsar on 1998/07/12 10:14:24 + Log: update MANIFEST, Changes + Branch: perl + - lib/Bundle/CPAN.pm + ! Changes MANIFEST + +---------------- +Version 5.004_72 +---------------- + +____________________________________________________________________________ +[ 1453] By: gsar on 1998/07/12 10:04:33 + Log: merge changes 1424, 1428 from maintbranch + Branch: perl + ! Porting/makerel ext/re/re.pm lib/Sys/Syslog.pm +____________________________________________________________________________ +[ 1452] By: gsar on 1998/07/12 09:46:40 + Log: patchlevel up to 72, update Changes, minor tweaks to win32/config* + and README.win32 + Branch: perl + ! Changes README.win32 patchlevel.h win32/Makefile + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 1451] By: gsar on 1998/07/12 07:01:26 + Log: generic Configure mods and HAS_GROUP additions to help MiNT/MPEix/MVS + From: Jarkko Hietaniemi + Date: Sat, 11 Jul 1998 17:51:07 +0300 (EET DST) + Message-Id: <199807111451.RAA27010@alpha.hut.fi> + Subject: M3 "generic" parts + Branch: perl + ! Configure Makefile.SH config_h.SH ext/POSIX/POSIX.xs + ! ext/SDBM_File/sdbm/sdbm.h lib/ExtUtils/MM_Unix.pm + ! makedepend.SH mv-if-diff perl.h plan9/plan9ish.h pp_sys.c + ! unixish.h vms/subconfigure.com vms/vmsish.h win32/config_H.bc + ! win32/config_H.gc x2p/Makefile.SH +____________________________________________________________________________ +[ 1450] By: gsar on 1998/07/12 06:38:27 + Log: various tweaks for PERL_OBJECT build & test + Branch: perl + ! globals.c iperlsys.h win32/GenCAPI.pl win32/Makefile + ! win32/makefile.mk win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1449] By: gsar on 1998/07/12 06:29:23 + Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig) + Date: 12 Jul 1998 08:22:16 +0200 + Message-Id: + Subject: [5.004_71] Patch: let CPAN.pm work with threaded perl + Branch: perl + ! lib/CPAN.pm lib/SelfLoader.pm +____________________________________________________________________________ +[ 1448] By: gsar on 1998/07/12 05:10:50 + Log: make RE engine threadsafe; -Dusethreads builds, tests on Solaris, + and runs regexes in 1000s of threads without crashing; also fixed + statcache not being thread-local + Branch: perl + ! embed.h embedvar.h ext/Thread/Thread.xs ext/re/re.xs + ! intrpvar.h op.c perl.c pp_ctl.c regcomp.c regexec.c sv.c + ! t/lib/thread.t thrdvar.h util.c +____________________________________________________________________________ +[ 1447] By: gsar on 1998/07/12 02:40:45 + Log: From: Hugo van der Sanden + Date: Sun, 12 Jul 1998 03:23:04 +0200 + Message-Id: + Subject: Re: perlbug doesn't check that save succeeded + Branch: perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 1446] By: gsar on 1998/07/12 02:39:24 + Log: be generous about CRs + From: larry@wall.org (Larry Wall) + Date: Sat, 11 Jul 1998 17:54:21 PDT + Message-Id: <199807120054.RAA19550@wall.org> + Subject: [PATCH _71] CRs et al + Branch: perl + ! toke.c +____________________________________________________________________________ +[ 1445] By: gsar on 1998/07/12 02:11:16 + Log: fix pp_caller() to fully traverse stacklevels + Branch: perl + ! objpp.h pp_ctl.c proto.h t/op/runlevel.t +____________________________________________________________________________ +[ 1444] By: gsar on 1998/07/11 23:43:37 + Log: add patch, along with all the missing bits, and doc tweaks + From: Ilya Zakharevich + Date: Thu, 9 Jul 1998 18:47:25 -0400 (EDT) + Message-Id: <199807092247.SAA06314@monk.mps.ohio-state.edu> + Subject: Re: [PATCH 5.004_71] Secure RE update + Branch: perl + ! ObjXSub.h embed.h embedvar.h ext/Opcode/Opcode.pm ext/re/re.pm + ! global.sym globals.c interp.sym intrpvar.h op.c opcode.h + ! opcode.pl pp_ctl.c pp_proto.h regcomp.c sv.c t/op/misc.t + ! t/op/pat.t t/op/subst.t +____________________________________________________________________________ +[ 1443] By: gsar on 1998/07/11 23:08:14 + Log: tweak to get BSDI to build IPC/SysV + From: Jarkko Hietaniemi + Date: 11 Jul 1998 16:26:44 +0300 + Message-ID: + Subject: Re: NOT OK: perl5.004_71 on BSDI 3.1 + Branch: perl + ! ext/IPC/SysV/SysV.xs +____________________________________________________________________________ +[ 1442] By: gsar on 1998/07/11 23:03:39 + Log: fix closures in optimized C (only the tests are in this + change, the pp_hot.c fix accidentally went in change#1441) + Branch: perl + ! t/op/closure.t +____________________________________________________________________________ +[ 1441] By: gsar on 1998/07/11 22:35:40 + Log: From: Ilya Zakharevich + Date: Sat, 11 Jul 1998 18:21:21 -0400 (EDT) + Message-Id: <199807112221.SAA03221@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_71] Update os2's OS2::Process + Branch: perl + ! os2/OS2/Process/Makefile.PL os2/OS2/Process/Process.pm + ! os2/OS2/Process/Process.xs pp_hot.c +____________________________________________________________________________ +[ 1440] By: gsar on 1998/07/11 19:41:59 + Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig) + Date: 11 Jul 1998 17:00:21 +0200 + Message-ID: + Subject: [perl5.004_71] Patch: change MakeMaker default compress --> gzip + Branch: perl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1439] By: gsar on 1998/07/11 19:36:58 + Log: export newRV_noinc on win32, deprecate AvFILL in favor of av_len() + Branch: perl + ! pod/perlguts.pod win32/makedef.pl +____________________________________________________________________________ +[ 1438] By: gsar on 1998/07/11 19:14:21 + Log: applied patch for perlfunc tweaks, removed reference to system qsort() + From: abigail@fnx.com + Date: Sat, 11 Jul 1998 04:20:54 -0400 (EDT) + Message-ID: <19980711082054.2184.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.004_71] pod/perlfunc.pod + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1437] By: gsar on 1998/07/11 19:05:00 + Log: From: abigail@fnx.com + Date: Sat, 11 Jul 1998 04:09:57 -0400 (EDT) + Message-ID: <19980711080957.2106.qmail@betelgeuse.wayne.fnx.com> + Subject: [PATCH 5.004_71] pod/pod2man.PL + Branch: perl + ! pod/pod2man.PL +____________________________________________________________________________ +[ 1436] By: gsar on 1998/07/11 18:58:03 + Log: more complete version of change#1421 + From: Stephen McCamant + Date: Fri, 10 Jul 1998 23:46:46 -0500 (CDT) + Message-ID: <13734.58994.735473.859218@alias-2.pr.mcs.net> + Subject: [PATCH] Re: B::Deparse for(1..100000) + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1435] By: gsar on 1998/07/11 18:54:42 + Log: win32 fixes for VC 6.0 nits + Branch: perl + ! ext/Data/Dumper/Dumper.xs win32/Makefile win32/makefile.mk + ! win32/win32.h +____________________________________________________________________________ +[ 1434] By: gsar on 1998/07/11 18:45:32 + Log: s/AVHV/pseudo-hash/ (via PM) + From: Gisle Aas + Date: 11 Jul 1998 00:16:53 +0200 + Message-ID: + Subject: [PATCH] trivial fields.pm doc patch + Branch: perl + ! lib/fields.pm +____________________________________________________________________________ +[ 1433] By: gsar on 1998/07/11 18:43:11 + Log: From: Laszlo Molnar + Date: Fri, 10 Jul 1998 23:12:11 +0200 + Message-ID: <19980710231211.A161@cdata.tvnet.hu> + Subject: [PATCH _71] dos-djgpp update + Branch: perl + ! Configure djgpp/config.over djgpp/djgppsed.sh djgpp/fixpmain +____________________________________________________________________________ +[ 1432] By: gsar on 1998/07/11 18:41:00 + Log: applied patch, reformatted long lines in places + From: Dominic Dunlop + Date: Fri, 10 Jul 1998 23:11:30 +0000 + Message-Id: + Subject: [PATCH 5.004_71] Re: Document "count exceeded" regular expression + warning + Branch: perl + ! pod/perldiag.pod regexec.c +____________________________________________________________________________ +[ 1431] By: gsar on 1998/07/11 18:29:18 + Log: From: "John L. Allen" + Date: Fri, 10 Jul 1998 13:57:01 -0400 (EDT) + Message-ID: + Subject: [PATCH]: _71 & _04 - Make AIX hints preserve ccflags as per docs + Branch: perl + ! hints/aix.sh +____________________________________________________________________________ +[ 1430] By: TimBunce on 1998/07/11 18:15:09 + Log: Title: "Fix string substitution returncode problem" + From: Dominic Dunlop , Gurusamy Sarathy + Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>, + + Files: pp_hot.c + Branch: maint-5.004/perl + ! pp_hot.c +____________________________________________________________________________ +[ 1429] By: gsar on 1998/07/11 18:07:52 + Log: applied patch, tweaked doc and code that does labels/indentation + From: Ilya Zakharevich + Date: Thu, 9 Jul 1998 21:39:40 -0400 (EDT) + Message-Id: <199807100139.VAA08617@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_71] perldebug.pod and RE + Branch: perl + ! pod/perldebug.pod regcomp.c regexec.c +____________________________________________________________________________ +[ 1428] By: TimBunce on 1998/07/11 17:45:56 + Log: Assorted patches: + + Title: "makerel now reads local patch list from patchlevel.h" + Files: patchlevel.h Porting/makerel + + Title: "pod/pod2man.PL" + From: abigail@fnx.com + Msg-ID: <19980711080957.2106.qmail@betelgeuse.wayne.fnx.com> + Files: pod/pod2man.PL + + Title: "Clarify taint example in re.pm" + From: Tom Phoenix + Msg-ID: + Files: lib/re.pm + + Title: "Anohter ptags improvement" + From: Ilya Zakharevich + Msg-ID: <199807070059.UAA28815@monk.mps.ohio-state.edu> + Files: emacs/ptags + + Title: "_71 & _04 - Make AIX hints preserve ccflags as per docs" + From: "John L. Allen" + Msg-ID: + Files: hints/aix.sh + Branch: maint-5.004/perl + ! Porting/makerel emacs/ptags hints/aix.sh lib/re.pm + ! patchlevel.h pod/pod2man.PL +____________________________________________________________________________ +[ 1427] By: gsar on 1998/07/11 17:04:47 + Log: make Liblist return consistently backslashed paths + Branch: perl + ! lib/ExtUtils/Liblist.pm +____________________________________________________________________________ +[ 1426] By: gsar on 1998/07/11 16:53:56 + Log: don't 'touch a2p.c', it might readonly (via PM) + From: Robin Barker + Date: Fri, 10 Jul 98 17:19:54 BST + Message-Id: <20430.9807101619@tempest.cise.npl.co.uk> + Branch: perl + ! x2p/Makefile.SH +____________________________________________________________________________ +[ 1425] By: TimBunce on 1998/07/11 16:42:26 + Log: Title: "Add newCONSTSUB (from 5.005_70)" + Files: embed.h proto.h global.sym op.c + Branch: maint-5.004/perl + ! embed.h global.sym op.c proto.h +____________________________________________________________________________ +[ 1424] By: TimBunce on 1998/07/11 16:20:21 + Log: Title: "Assorted fixes for Sys::Syslog.pm" + From: "M.J.T. Guy" , Sean Robinson + , Tim.Bunce@ig.co.uk + Msg-ID: <01IXGLISWJ7Q0001B6@sc.maricopa.edu>, + <199805270939.KAA08453@toad.ig.co.uk>, + + Files: lib/Sys/Syslog.pm + Branch: maint-5.004/perl + ! lib/Sys/Syslog.pm +____________________________________________________________________________ +[ 1423] By: TimBunce on 1998/07/11 15:53:37 + Log: Assorted patches: + + Title: "umask: die if EXPR & 0700 else return undef" + From: Chip Salzenberg , Jarkko Hietaniemi , + Jarkko Hietaniemi , Malcolm Beattie + , Tim.Bunce@ig.co.uk (Tim Bunce), + kstar@chapin.ed, kstar@chapin.edu@ig.co.uk () + Msg-ID: <199805291520.QAA01615@sable.ox.ac.uk>, + <199805291549.SAA01439@alpha.hut.fi>, + <199805291608.RAA29283@toad.ig.co.uk>, + <19980530105129.A24006@O2.chapin.edu>, + <19980608133037.A8793@perlsupport.com> + Files: pod/perldiag.pod pod/perlfunc.pod pp_sys.c + + Title: "File name DynaLoader.pm.PL is 8.3 unfriendly" + From: Laszlo Molnar + Msg-ID: <19980610005417.G162@cdata.tvnet.hu> + Files: MANIFEST ext/DynaLoader/Makefile.PL + Branch: maint-5.004/perl + +> ext/DynaLoader/DynaLoader_pm.PL + - ext/DynaLoader/DynaLoader.pm.PL + ! MANIFEST ext/DynaLoader/Makefile.PL pod/perldiag.pod + ! pod/perlfunc.pod pp_sys.c +____________________________________________________________________________ +[ 1421] By: gsar on 1998/07/11 02:54:02 + Log: From: Gisle Aas + Subject: [PATCH] B::Deparse for(1..100000) + Date: 10 Jul 1998 14:04:44 +0200 + Message-ID: + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1420] By: gsar on 1998/07/11 02:28:18 + Log: add 'clean' target for ext/re + Branch: perl + ! ext/re/Makefile.PL +____________________________________________________________________________ +[ 1419] By: gsar on 1998/07/11 02:20:32 + Log: From: Tom Hughes + Date: 10 Jul 1998 10:25:18 +0100 + Message-ID: + Subject: [5.004_71] Patch: svr4 hints updates for Unixware + Branch: perl + ! hints/svr4.sh +____________________________________________________________________________ +[ 1418] By: gsar on 1998/07/11 02:19:12 + Log: move op/ipc{msg,sem}.t into lib/ipc_sysv.t + From: Jarkko Hietaniemi + Date: Fri, 10 Jul 1998 13:08:08 +0300 (EET DST) + Message-Id: <199807101008.NAA10817@alpha.hut.fi> + Subject: Re: make minitest does not work out of the box - test subset + needs pruning + Branch: perl + + t/lib/ipc_sysv.t + - t/op/ipcmsg.t t/op/ipcsem.t + ! MANIFEST +____________________________________________________________________________ +[ 1417] By: gsar on 1998/07/11 02:14:16 + Log: disable CR croaking (via #define, default off) in lieu of more + complete fix + Branch: perl + ! toke.c +____________________________________________________________________________ +[ 1416] By: gsar on 1998/07/11 02:06:11 + Log: added patch, made linking with setargv a build option + From: "Douglas Lankshear" + Date: Thu, 9 Jul 1998 09:51:42 -0700 + Message-ID: <000101bdab59$d9602dc0$a32fa8c0@tau.Active> + Subject: [PATCH 5.004_71] + Branch: perl + ! perl.c pp_sys.c win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1415] By: gsar on 1998/07/11 01:47:19 + Log: From: Tom Hughes + Date: 10 Jul 1998 09:01:12 +0100 + Message-ID: + Subject: [5.004_71] Patch: Fix perl_exp.SH for Unixware + Branch: perl + ! perl_exp.SH +____________________________________________________________________________ +[ 1414] By: gsar on 1998/07/11 01:45:45 + Log: make lib/re.pm a prereq for minitest + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1413] By: gsar on 1998/07/11 01:40:56 + Log: add patch (via PM) + From: Stephen McCamant + Date: Fri, 10 Jul 1998 01:14:11 -0500 (CDT) + Message-ID: <13733.45251.47363.431138@alias-2.pr.mcs.net> + Subject: Big B::Deparse update + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1412] By: gsar on 1998/07/11 00:25:17 + Log: add perlport.pod v1.23 from Chris Nandor + Branch: perl + + pod/perlport.pod + ! pod/perl.pod +____________________________________________________________________________ +[ 1411] By: gsar on 1998/07/10 21:53:06 + Log: make binmode(STDIN) not whine + From: Dan Sugalski + Date: Thu, 09 Jul 1998 16:51:27 -0700 + Message-Id: <3.0.5.32.19980709165127.00a692e0@ous.edu> + Subject: [PATCH 5.004_70] Fix up binmode() for VMS + Branch: perl + ! vms/vms.c +____________________________________________________________________________ +[ 1410] By: gsar on 1998/07/10 21:50:57 + Log: CPAN-1.39 update + From: koenig@kulturbox.de (Andreas J. Koenig) + Date: 10 Jul 1998 00:45:36 +0200 + Message-ID: + Subject: Re: perl5.004_71 hit the stands this morn + Branch: perl + ! MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm +____________________________________________________________________________ +[ 1409] By: gsar on 1998/07/10 21:45:10 + Log: manually apply patch with conflicts + From: Dan Sugalski + Date: Thu, 09 Jul 1998 12:08:33 -0700 + Message-Id: <3.0.5.32.19980709120833.009eb100@ous.edu> + Subject: [PATCH 5.004_70] Updated duble-quotes in config.h/config.pm patch + Branch: perl + ! configpm +____________________________________________________________________________ +[ 1408] By: gsar on 1998/07/10 21:36:54 + Log: From: Andy Dougherty + Date: Thu, 9 Jul 1998 11:58:30 -0400 (EDT) + Message-Id: + Subject: Re: perldelta.pod [PATCH] + Branch: perl + ! pod/perldelta.pod +____________________________________________________________________________ +[ 1407] By: gsar on 1998/07/10 21:35:13 + Log: From: Andy Dougherty + Date: Thu, 9 Jul 1998 11:26:03 -0400 (EDT) + Subject: [PATCH 5.004_71] Allow static build of IPC::SysV + Message-Id: + Branch: perl + ! ext/IPC/SysV/Makefile.PL +____________________________________________________________________________ +[ 1406] By: gsar on 1998/07/10 21:33:30 + Log: manually apply patch with conflicts + From: kstar@chapin.edu + Message-ID: <19980709093621.B7857@O2.chapin.edu> + Date: Thu, 9 Jul 1998 09:36:21 -0400 + Subject: Re: [PATCH] 5.004_70 installperl and docs + Branch: perl + ! installperl +____________________________________________________________________________ +[ 1405] By: gsar on 1998/07/10 21:28:29 + Log: misc tweaks to docs and qsortsv() warning + Branch: perl + ! Changes pod/perldelta.pod pod/perlsub.pod pp_ctl.c +____________________________________________________________________________ +[ 1404] By: gsar on 1998/07/10 21:23:53 + Log: add more correct version of change#1350 (as yet untested) + From: joshua.pritikin@db.com + Date: Thu, 9 Jul 1998 09:22:46 -0400 + Message-Id: + Subject: Re: [PATCH _70] cache missing methods + Branch: perl + ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h +____________________________________________________________________________ +[ 1403] By: gsar on 1998/07/10 20:46:12 + Log: add win32_rename() that does what docs say + Branch: perl + ! win32/GenCAPI.pl win32/makedef.pl win32/perlhost.h + ! win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1402] By: gsar on 1998/07/10 20:19:18 + Log: inet_aton() should do DNS lookup only if arg isn't a dotted-quad + (suggested by Philippe.Simonet@swisscom.com) + Branch: perl + ! ext/Socket/Socket.xs +____________________________________________________________________________ +[ 1401] By: gsar on 1998/07/10 03:24:45 + Log: undo change#1379 (order of tests *is* significant) + Branch: perl + ! t/lib/posix.t +____________________________________________________________________________ +[ 1400] By: nick on 1998/07/09 17:43:14 + Log: Integrate mainline (_071-ish) + Branch: ansiperl + +> ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm + +> ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Makefile.PL + +> ext/Data/Dumper/Todo ext/IPC/SysV/ChangeLog + +> ext/IPC/SysV/MANIFEST ext/IPC/SysV/Makefile.PL + +> ext/IPC/SysV/Msg.pm ext/IPC/SysV/README + +> ext/IPC/SysV/Semaphore.pm ext/IPC/SysV/SysV.pm + +> ext/IPC/SysV/SysV.xs ext/IPC/SysV/t/msg.t ext/IPC/SysV/t/sem.t + +> ext/re/Makefile.PL ext/re/re.pm ext/re/re.xs pp_proto.h + +> t/io/iprefix.t t/lib/dumper-ovl.t t/lib/dumper.t + !> (integrate 145 files) + +---------------- +Version 5.004_71 +---------------- + +____________________________________________________________________________ +[ 1399] By: gsar on 1998/07/09 12:15:12 + Log: update Changes, perlhist.pod, beginnings of perldelta.pod + Branch: perl + ! Changes pod/perldelta.pod pod/perlhist.pod +____________________________________________________________________________ +[ 1397] By: gsar on 1998/07/09 08:35:39 + Log: merge changes from maintbranch (1354, and relevant part of 1356); all + maintenance changes upto 1356 merged + Branch: perl + ! pod/perldiag.pod pp_hot.c t/op/misc.t +____________________________________________________________________________ +[ 1396] By: gsar on 1998/07/09 08:02:52 + Log: add Data-Dumper, up patchlevel to 71, various misc tweaks to + make all configs build on Solaris and win32 + Branch: perl + + ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm + + ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Makefile.PL + + ext/Data/Dumper/Todo t/lib/dumper-ovl.t t/lib/dumper.t + ! MANIFEST Todo patchlevel.h win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1395] By: gsar on 1998/07/09 05:39:48 + Log: From: Stephen McCamant + Date: Wed, 08 Jul 1998 23:16:49 CDT + Message-Id: <13732.16626.904108.608743@alias-2.pr.mcs.net> + Subject: [PATCH] UNOP opclass test in B.xs + Branch: perl + ! ext/B/B.xs +____________________________________________________________________________ +[ 1394] By: gsar on 1998/07/09 05:37:48 + Log: get it building again on win32 + Branch: perl + ! bytecode.h embed.h ext/re/Makefile.PL global.sym intrpvar.h + ! op.c opcode.pl perl.h pp.c pp_ctl.c pp_hot.c pp_proto.h + ! pp_sys.c proto.h win32/Makefile win32/makedef.pl + ! win32/makefile.mk +____________________________________________________________________________ +[ 1393] By: gsar on 1998/07/09 05:20:31 + Log: applied patch from Ilya, tweaked some to get clean static build of + the ext/re stuff (untested on win32) + Branch: perl + ! regcomp.c regexec.c +____________________________________________________________________________ +[ 1392] By: gsar on 1998/07/09 03:56:45 + Log: fix installperl typo + From: kstar@chapin.edu + Date: Wed, 08 Jul 1998 23:51:57 EDT + Message-Id: <19980708235157.D1380@O2.chapin.edu> + Subject: Re: [PATCH] 5.004_70 installperl and docs + Branch: perl + ! installperl +____________________________________________________________________________ +[ 1391] By: gsar on 1998/07/09 01:48:16 + Log: From: Chip Salzenberg + Date: Wed, 8 Jul 1998 18:10:55 -0400 + Message-ID: <19980708181055.A8005@perlsupport.com> + Subject: [PATCH _70] Allow $SIG{CHLD}='IGNORE' to work on Solaris + Branch: perl + ! util.c +____________________________________________________________________________ +[ 1390] By: gsar on 1998/07/09 01:45:16 + Log: added patch, tweaked per Ilya's suggestion + From: "M.J.T. Guy" + Date: Wed, 8 Jul 1998 13:34:42 +0100 + Message-Id: + Subject: [PATCH] perl5db.pl complains about non-integer condition + Branch: perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 1389] By: gsar on 1998/07/09 01:42:13 + Log: reenable misaligned memory checks, cast to UV & check alignment + From: Dominic Dunlop + Date: Wed, 8 Jul 1998 11:21:48 +0000 + Message-Id: + Subject: Re: [PATCH 5.00469] corrupt malloc ptr on NeXT + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1388] By: gsar on 1998/07/09 01:36:22 + Log: From: Andy Dougherty + Date: Wed, 8 Jul 1998 13:32:07 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_70] more on finding metaconfig units. + Branch: perl + ! Porting/pumpkin.pod +____________________________________________________________________________ +[ 1387] By: gsar on 1998/07/09 01:35:23 + Log: From: Andy Dougherty + Date: Wed, 8 Jul 1998 13:29:34 -0400 (EDT) + Message-Id: + Subject: Configure indentation patch + Branch: perl + ! Configure +____________________________________________________________________________ +[ 1386] By: gsar on 1998/07/09 01:33:31 + Log: don't try to hardlink perldiag.pod; that is no longer not needed + From: Andy Dougherty + Date: Wed, 8 Jul 1998 12:18:32 -0400 (EDT) + Message-Id: + Subject: Re: pelr installation attempts hard links between file systems + Branch: perl + ! installperl +____________________________________________________________________________ +[ 1385] By: gsar on 1998/07/09 01:28:05 + Log: win32/makefile.mk =~ s|gcc -pipe|gcc| + Branch: perl + ! win32/makefile.mk +____________________________________________________________________________ +[ 1384] By: gsar on 1998/07/09 01:26:19 + Log: make t/TEST run 'perl $switches ./foo/test.t' everywhere + Branch: perl + ! t/TEST +____________________________________________________________________________ +[ 1383] By: gsar on 1998/07/09 01:06:47 + Log: manually apply patch with a dependency on unapplied patch + From: Ilya Zakharevich + Date: Wed, 8 Jul 1998 07:03:51 -0400 (EDT) + Message-Id: <199807081103.HAA25145@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_70] make quoted RE embeddable + Branch: perl + ! sv.c t/op/pat.t +____________________________________________________________________________ +[ 1382] By: gsar on 1998/07/09 01:02:23 + Log: change order of libs for extensions + From: Laszlo Molnar + Date: Tue, 7 Jul 1998 23:48:05 +0200 + Message-ID: <19980707234805.C180@cdata.tvnet.hu> + Subject: [PATCH _70] linking problem with modules + Branch: perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 1381] By: gsar on 1998/07/09 00:56:12 + Log: patch for more flexible initialization of xsub parameters + From: Tye McQueen + Date: Mon, 6 Jul 1998 19:04:27 -0500 (CDT) + Message-Id: <199807070004.AA16454@metronet.com> + Subject: Enhanced arg inits for xsubpp + Branch: perl + ! lib/ExtUtils/xsubpp pod/perlxs.pod +____________________________________________________________________________ +[ 1380] By: gsar on 1998/07/09 00:44:01 + Log: From: Tye McQueen + Date: Mon, 6 Jul 1998 17:34:54 -0500 (CDT) + Message-Id: <16619-17073@lyris.activestate.com> + Subject: New pl2bat.pl + Branch: perl + ! win32/bin/pl2bat.pl +____________________________________________________________________________ +[ 1379] By: gsar on 1998/07/09 00:30:58 + Log: remove ordering dependency in posix.t + Branch: perl + ! t/lib/posix.t +____________________________________________________________________________ +[ 1378] By: gsar on 1998/07/08 20:17:43 + Log: make -i'*suffix' work too + Branch: perl + ! doio.c +____________________________________________________________________________ +[ 1377] By: gsar on 1998/07/08 08:56:28 + Log: regen headers; result builds & tests on Solaris again (threaded) + Branch: perl + ! embedvar.h +____________________________________________________________________________ +[ 1376] By: gsar on 1998/07/08 08:55:03 + Log: change#1350 breaks things, back it out + Branch: perl + ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h +____________________________________________________________________________ +[ 1375] By: gsar on 1998/07/08 07:47:00 + Log: From: Ilya Zakharevich + Date: Wed, 8 Jul 1998 01:30:15 -0400 (EDT) + Message-Id: <199807080530.BAA14072@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_70] Switch modifiers in RE off + Branch: perl + ! pod/perlre.pod regcomp.c t/op/re_tests +____________________________________________________________________________ +[ 1374] By: gsar on 1998/07/08 07:41:06 + Log: From: Gisle Aas + Date: 07 Jul 1998 23:08:59 +0200 + Message-ID: + Subject: [PATCH] Faster copying from SvIV/SvNVs in sv_setsv() + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1373] By: gsar on 1998/07/08 07:36:01 + Log: From: Laszlo Molnar + Date: Tue, 7 Jul 1998 23:47:50 +0200 + Message-ID: <19980707234750.A180@cdata.tvnet.hu> + Subject: [PATCH _70] dos-djgpp update + Branch: perl + ! djgpp/config.over djgpp/djgppsed.sh +____________________________________________________________________________ +[ 1372] By: gsar on 1998/07/08 07:12:47 + Log: add extension to support SysV IPC + From: Jarkko Hietaniemi + Date: Tue, 7 Jul 1998 02:32:53 +0300 (EET DST) + Message-Id: <199807062332.CAA25792@alpha.hut.fi> + Subject: [PATCH] 5.004_70: IPC::SysV + Branch: perl + + ext/IPC/SysV/ChangeLog ext/IPC/SysV/MANIFEST + + ext/IPC/SysV/Makefile.PL ext/IPC/SysV/Msg.pm + + ext/IPC/SysV/README ext/IPC/SysV/Semaphore.pm + + ext/IPC/SysV/SysV.pm ext/IPC/SysV/SysV.xs ext/IPC/SysV/t/msg.t + + ext/IPC/SysV/t/sem.t + ! Configure MANIFEST pod/perlfunc.pod pod/perlipc.pod + ! t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 1371] By: gsar on 1998/07/08 05:12:07 + Log: add patch for C + From: Ilya Zakharevich + Date: Mon, 6 Jul 1998 22:24:33 -0400 (EDT) + Message-Id: <199807070224.WAA10318@monk.mps.ohio-state.edu> + Subject: Re: _70 and Devel::RE + Branch: perl + + ext/re/Makefile.PL ext/re/re.pm ext/re/re.xs + - lib/re.pm + ! MANIFEST Makefile.SH global.sym interp.sym intrpvar.h op.c + ! perl.h pp.c pp_ctl.c pp_hot.c regcomp.c regexec.c +____________________________________________________________________________ +[ 1370] By: gsar on 1998/07/08 04:27:27 + Log: added patch to generate PPDEF(pp_foo) + From: Ilya Zakharevich + Date: Mon, 6 Jul 1998 20:43:54 -0400 (EDT) + Message-Id: <199807070043.UAA28572@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_70] Autogenerate declarations for opcodes + Branch: perl + + pp_proto.h + ! MANIFEST Makefile.SH opcode.pl proto.h +____________________________________________________________________________ +[ 1369] By: gsar on 1998/07/08 04:19:49 + Log: suggest 'make test' after make + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1368] By: gsar on 1998/07/08 03:58:19 + Log: added patch for -i'foo*bar', made code somewhat simpler, tweaked doc + From: Colin Kuskie + Date: Tue, 7 Jul 1998 09:44:33 -0700 (PDT) + Message-ID: + Subject: Corrected -i prefix patch + Branch: perl + + t/io/iprefix.t + ! MANIFEST doio.c pod/perlrun.pod +____________________________________________________________________________ +[ 1366] By: gsar on 1998/07/08 02:28:30 + Log: From: Gisle Aas + Date: 07 Jul 1998 17:48:36 +0200 + Message-ID: + Subject: [PATCH] Remove some rendundant SvOOK_on tests + Branch: perl + ! sv.c sv.h +____________________________________________________________________________ +[ 1365] By: gsar on 1998/07/08 02:25:17 + Log: applied patch to clarify m//g + From: "M.J.T. Guy" + Date: Tue, 7 Jul 1998 15:59:03 +0100 + Message-Id: + Subject: [PATCH] Re: m//g in perlop.pod + Branch: perl + ! pod/perlop.pod +____________________________________________________________________________ +[ 1364] By: gsar on 1998/07/08 02:13:07 + Log: From: "M.J.T. Guy" + Subject: [PATCH] 5.004_70 bug in perlfaq.pod + Message-Id: + Date: Tue, 7 Jul 1998 11:59:41 +0100 + Branch: perl + ! pod/perlfaq.pod +____________________________________________________________________________ +[ 1363] By: gsar on 1998/07/08 02:11:11 + Log: applied tweak (via private mail) + From: Jarkko Hietaniemi + Date: Tue, 7 Jul 1998 13:27:47 +0300 (EET DST) + Message-Id: <199807071027.NAA20829@alpha.hut.fi> + Subject: tiny perllocale.pod patch for 5.004_70 + Branch: perl + ! pod/perllocale.pod +____________________________________________________________________________ +[ 1362] By: gsar on 1998/07/08 02:07:48 + Log: applied patch, various tweaks to pander to pod2man tantrums + From: Ilya Zakharevich + Date: Mon, 6 Jul 1998 22:47:30 -0400 (EDT) + Message-Id: <199807070247.WAA10677@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_70] CONFIGPM + Branch: perl + ! Porting/Glossary configpm +____________________________________________________________________________ +[ 1361] By: gsar on 1998/07/07 22:13:11 + Log: From: Stephen McCamant + Date: Mon, 6 Jul 1998 21:22:17 -0500 (CDT) + Message-ID: <13729.33816.311236.995647@alias-2.pr.mcs.net> + Subject: Re: Inconsistent arithmetics on refs + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1360] By: gsar on 1998/07/07 22:11:11 + Log: From: Ilya Zakharevich + Date: Mon, 6 Jul 1998 20:59:10 -0400 (EDT) + Message-Id: <199807070059.UAA28815@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_70] Anohter ptags improvement + Branch: perl + ! emacs/ptags +____________________________________________________________________________ +[ 1359] By: gsar on 1998/07/07 22:08:48 + Log: fix accidental RE-de-optimization + From: larry@wall.org (Larry Wall) + Date: Mon, 6 Jul 1998 17:49:31 -0700 + Message-Id: <199807070049.RAA23475@wall.org> + Subject: Re: before you deluge us with patches + -- + From: Ilya Zakharevich + Date: Tue, 7 Jul 1998 03:10:56 -0400 (EDT) + Message-Id: <199807070710.DAA25399@monk.mps.ohio-state.edu> + Subject: Re: before you deluge us with patches + Branch: perl + ! pp_hot.c regexec.c +____________________________________________________________________________ +[ 1358] By: gsar on 1998/07/07 21:36:29 + Log: From: Gisle Aas + Subject: [PATCH] Evaluation of AVHVs in scalar context + Date: 06 Jul 1998 21:41:14 +0200 + Message-ID: + Branch: perl + ! pp_hot.c t/op/avhv.t +____________________________________________________________________________ +[ 1357] By: gsar on 1998/07/07 21:29:46 + Log: doc tweaks suggested by Abigail, M.J.T. Guy, and Larry Wall + Branch: perl + ! lib/Math/Trig.pm lib/fields.pm thread.sym +____________________________________________________________________________ +[ 1356] By: TimBunce on 1998/07/07 17:19:42 + Log: Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Add Test.pm (from perl 5.004_70)" + Files: MANIFEST lib/Test.pm + + ------ EXTENSIONS ------ + + Title: "Add CR LF CRLF to Socket.pm" + From: Chris Nandor + Msg-ID: + Files: ext/Socket/Socket.pm + + ------ LIBRARY ------ + + Title: "AutoSplit upgrade (AutoSplit 1.0302 from 5.004_70)" + Files: lib/AutoSplit.pm + + Title: "Upgrade base.pm (from perl 5.004_70)" + Files: lib/base.pm + + Title: "Add File::Spec modules (from 5.004_70)" + Files: lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm + lib/File/Spec/Win32.pm + + ------ TESTS ------ + + Title: "fixup test for method call on undefined value" + Files: t/op/misc.t + + ------ UTILITIES ------ + + Title: "perlbug upgrade (from 5.004_70)" + Files: utils/perlbug.PL + + Title: "Upgrade perldoc (from 5.004_70)" + Files: utils/perldoc.PL + Branch: maint-5.004/perl + + lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm + + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm + + lib/File/Spec/Win32.pm lib/Test.pm + ! MANIFEST ext/Socket/Socket.pm lib/AutoSplit.pm lib/base.pm + ! t/op/misc.t utils/perlbug.PL utils/perldoc.PL +____________________________________________________________________________ +[ 1355] By: TimBunce on 1998/07/07 14:39:51 + Log: Title: "Fix memory leak in Safe module" + From: Gurusamy Sarathy + Msg-ID: <199806290544.BAA18463@aatma.engin.umich.edu> + Files: ext/Opcode/Opcode.xs ext/Opcode/Safe.pm + Branch: maint-5.004/perl + ! ext/Opcode/Opcode.xs ext/Opcode/Safe.pm +____________________________________________________________________________ +[ 1354] By: TimBunce on 1998/07/07 14:35:25 + Log: Title: "Better error message for $undef->method call" + From: Tim Bunce , Graham Barr , + joshua.pritikin@db.com + Msg-ID: <19980615171027.U4120@asic.sc.ti.com>, + Files: pod/perldiag.pod pp_hot.c + Branch: maint-5.004/perl + ! pod/perldiag.pod pp_hot.c +____________________________________________________________________________ +[ 1353] By: gsar on 1998/07/06 23:33:38 + Log: From: Andy Dougherty + Date: Mon, 6 Jul 1998 16:59:06 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_70] Update metaconfig info + Branch: perl + ! Porting/pumpkin.pod +____________________________________________________________________________ +[ 1352] By: gsar on 1998/07/06 23:30:54 + Log: From: Andy Dougherty + Date: Mon, 6 Jul 1998 13:14:37 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_70] Config_70-01: Remove default "/share" + Branch: perl + ! Configure INSTALL Policy_sh.SH Porting/Glossary + ! Porting/config.sh Porting/config_H +____________________________________________________________________________ +[ 1351] By: gsar on 1998/07/06 23:24:47 + Log: try harder to run non-executable tests + Branch: perl + ! t/TEST +____________________________________________________________________________ +[ 1350] By: gsar on 1998/07/06 23:12:17 + Log: add patch to improve method caching, regen headers + From: joshua.pritikin@db.com + Date: Mon, 6 Jul 1998 09:19:29 -0400 + Message-Id: + Subject: [PATCH _70] cache missing methods + Branch: perl + ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h +____________________________________________________________________________ +[ 1349] By: TimBunce on 1998/07/06 23:03:16 + Log: Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Configure: Workaround bash CDPATH oddity" + From: Andy Dougherty + Msg-ID: + Files: Configure + + Title: "Don't suppress display of Makefile recipes that invoke perl" + From: Gurusamy Sarathy + Msg-ID: <199806252213.SAA08545@aatma.engin.umich.edu> + Files: Makefile.SH + + ------ CORE LANGUAGE ------ + + Title: "one more^Wless quad unpack bug" + From: Jarkko Hietaniemi + Msg-ID: <199806301132.OAA27353@alpha.hut.fi> + Files: pp.c + + Title: "minor fixups to bring maint closer to devel for patching" + From: Gurusamy Sarathy + Msg-ID: <199805200046.UAA19284@aatma.engin.umich.edu> + Files: pod/perldiag.pod deb.c dump.c t/op/ref.t t/op/split.t taint.c util.c + + Title: "-Pw switches used together report bogus error" + From: Gurusamy Sarathy + Msg-ID: <199806252331.TAA10160@aatma.engin.umich.edu> + Files: perl.c + + Title: "Add doc and perl home page info to -v output" + From: Tom Christiansen + Msg-ID: <199802172229.PAA29309@jhereg.perl.com> + Files: perl.c + + Title: "Fix C<@a = (%a = 1)> bizarreness" + From: Gurusamy Sarathy , Tom Christiansen + + Msg-ID: <199807012026.OAA31507@jhereg.perl.com>, + <199807012339.TAA26024@aatma.engin.umich.edu> + Files: pp_hot.c + + Title: "make find_script() return saved string, reenable missing + diagnostics" + From: Gurusamy Sarathy + Msg-ID: <199806262224.SAA00422@aatma.engin.umich.edu> + Files: perl.c util.c + + Title: "minor e_script optimization" + From: Gurusamy Sarathy + Msg-ID: <199807060704.DAA25988@aatma.engin.umich.edu> + Files: perl.c + + ------ DOCUMENTATION ------ + + Title: "Insecure $ENV{} message out of step with perldiag" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perldiag.pod pod/perlsec.pod + + Title: "documenting close without arguments" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: "pod for scalar .. op" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlop.pod + + ------ EXTENSIONS ------ + + Title: "Fcntl: add few constants, enhance maintainability" + From: Jarkko Hietaniemi + Msg-ID: <199806221558.SAA18626@alpha.hut.fi> + Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs + + ------ LIBRARY ------ + + Title: "Fix undef warnings in Text::Parsewords" + From: Jarkko Hietaniemi + Msg-ID: <199806300842.LAA26409@alpha.hut.fi> + Files: lib/Text/ParseWords.pm + + Title: "Add Symbol::delete_package()" + From: Gurusamy Sarathy + Msg-ID: <199807060702.DAA25976@aatma.engin.umich.edu> + Files: pod/perlembed.pod lib/Symbol.pm + Branch: maint-5.004/perl + ! Configure Makefile.SH deb.c dump.c ext/Fcntl/Fcntl.pm + ! ext/Fcntl/Fcntl.xs lib/Symbol.pm lib/Text/ParseWords.pm perl.c + ! pod/perldiag.pod pod/perlembed.pod pod/perlfunc.pod + ! pod/perlop.pod pod/perlsec.pod pp.c pp_hot.c t/op/ref.t + ! t/op/split.t taint.c util.c +____________________________________________________________________________ +[ 1348] By: gsar on 1998/07/06 22:55:56 + Log: remove #! line from Errno_pm.PL + Branch: perl + ! ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 1347] By: gsar on 1998/07/06 22:51:34 + Log: added patch to fix Cwd.pm warnings, fixed a couple more places + From: Gisle Aas + Date: 06 Jul 1998 13:08:53 +0200 + Message-ID: + Subject: [PATCH] 5.004_70 Cwd.pm now give warnings + Branch: perl + ! lib/Cwd.pm +____________________________________________________________________________ +[ 1346] By: gsar on 1998/07/06 22:20:29 + Log: much simpler fix to typecheck read/sysread/recv, as suggested by + Stephen McCamant + Branch: perl + ! op.c +____________________________________________________________________________ +[ 1345] By: gsar on 1998/07/06 21:58:52 + Log: undo ck_sysread() changes#1319,1337 in preparation for a much + simpler fix + Branch: perl + ! ObjXSub.h embed.h global.sym globals.c objpp.h op.c opcode.h + ! opcode.pl proto.h +____________________________________________________________________________ +[ 1344] By: TimBunce on 1998/07/06 21:51:05 + Log: Title: "Fix for broken goto &xsub" + From: Albert Dvornik , + Msg-ID: + Files: MANIFEST pp_ctl.c t/op/goto_xs.t + Branch: maint-5.004/perl + + t/op/goto_xs.t + ! MANIFEST pp_ctl.c +____________________________________________________________________________ +[ 1343] By: TimBunce on 1998/07/06 21:40:14 + Log: Title: "Undo sub stub optimization and add comments on GV_FOO constants" + From: Gurusamy Sarathy + Msg-ID: <199807050841.EAA25114@aatma.engin.umich.edu> + Files: gv.h gv.c op.c toke.c + Branch: maint-5.004/perl + ! gv.c gv.h op.c toke.c +____________________________________________________________________________ +[ 1342] By: gsar on 1998/07/06 20:57:06 + Log: From: Gisle Aas + Message-Id: + Date: 06 Jul 1998 21:52:12 +0200 + Subject: Keepers of the Patch Pumpkin + Branch: perl + ! Changes +____________________________________________________________________________ +[ 1341] By: gsar on 1998/07/06 20:43:35 + Log: remove dup entry in perldiag + Branch: perl + ! pod/perldiag.pod +____________________________________________________________________________ +[ 1340] By: gsar on 1998/07/06 20:31:44 + Log: more reasonable diagnostic on keyword vs. sub ambiguity + Branch: perl + ! pod/perldiag.pod toke.c +____________________________________________________________________________ +[ 1339] By: gsar on 1998/07/06 19:23:06 + Log: rename s/\bSI_/PERLSI_/ to avoid collisions with sysinfo headers + Branch: perl + ! av.c cop.h gv.c mg.c op.c perl.c pp_ctl.c pp_sys.c scope.c + ! sv.c toke.c util.c +____________________________________________________________________________ +[ 1338] By: gsar on 1998/07/06 18:45:35 + Log: per Larry suggestion, toss change#1327 and fix the documentation + to match behavior instead + Branch: perl + ! pod/perlfunc.pod pp_sys.c +____________________________________________________________________________ +[ 1337] By: gsar on 1998/07/06 17:15:26 + Log: allow read(FH,threadsv,...) + Branch: perl + ! op.c + +---------------- +Version 5.004_70 +---------------- + +____________________________________________________________________________ +[ 1336] By: gsar on 1998/07/06 09:06:33 + Log: 5.004_70 tweaks + Branch: perl + ! Changes win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1335] By: gsar on 1998/07/06 07:05:37 + Log: update Changes + Branch: perl + ! Changes pod/perldiag.pod +____________________________________________________________________________ +[ 1334] By: gsar on 1998/07/06 06:41:17 + Log: allow eval-groups in patterns only if they C + Branch: perl + ! lib/re.pm perl.h pod/perldiag.pod pod/perlre.pod regcomp.c + ! t/op/misc.t t/op/pat.t t/op/regexp.t t/op/subst.t +____________________________________________________________________________ +[ 1333] By: gsar on 1998/07/06 03:22:52 + Log: From: Hans Mulder + Date: Mon, 6 Jul 98 02:11:32 +0200 + Message-Id: <9807060021.AA29027@icgned.icgroup.nl> + Subject: [PATCH 5.00469] corrupt malloc ptr on NeXT + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1332] By: gsar on 1998/07/06 03:18:34 + Log: added Errno-1.09 from CPAN + Branch: perl + ! ext/Errno/ChangeLog ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 1331] By: gsar on 1998/07/06 02:59:09 + Log: fix small memleak on -e, don't try to find_script() when e_script + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 1330] By: gsar on 1998/07/06 00:40:24 + Log: add Symbol::delete_package() + Branch: perl + ! lib/Symbol.pm pod/perlembed.pod +____________________________________________________________________________ +[ 1329] By: gsar on 1998/07/05 23:05:40 + Log: patch to remove assumptions about offset of IV being == sizeof(XPV) + From: Stephen McCamant + Date: Sun, 5 Jul 1998 17:36:14 -0500 (CDT) + Message-ID: <13727.63831.95324.696098@alias-2.pr.mcs.net> + Subject: [PATCH] alignment in X[IN]V allocation + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1328] By: gsar on 1998/07/05 22:47:57 + Log: make read() return undef on errors as documented, and clarify docs + Branch: perl + ! pod/perlfunc.pod pp_sys.c +____________________________________________________________________________ +[ 1327] By: gsar on 1998/07/05 22:11:21 + Log: fix getc() to return empty string instead of undef on eof, as it was + documented to behave; still returns undef on error + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 1326] By: gsar on 1998/07/05 21:53:30 + Log: patch whitespace-mutiliated; applied manually + From: Hans Mulder + Date: Sun, 5 Jul 98 23:23:20 +0200 + Message-Id: <9807052133.AA28626@icgned.icgroup.nl> + Subject: [PATCH 5.004_69] building Errno.pm still fails on NeXT + Branch: perl + ! ext/Errno/Errno_pm.PL +____________________________________________________________________________ +[ 1325] By: gsar on 1998/07/05 21:38:39 + Log: applied patch (via private mail), modulo retrohunks in pod/perlfaq2.pod + From: Tom Christiansen + Date: Sun, 05 Jul 1998 09:15:22 -0500 + Subject: Re: docpatch + Message-Id: <199807051515.JAA03644@jhereg.perl.com> + Branch: perl + ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + ! pod/perlfaq9.pod pod/perlfunc.pod pod/perlipc.pod + ! pod/perlrun.pod +____________________________________________________________________________ +[ 1324] By: gsar on 1998/07/05 21:06:56 + Log: applied patch, and undid change#1302 which it made unnecessary + From: Billy + Date: Sun, 5 Jul 1998 23:05:52 +0930 (CST) + Subject: [PATCH] utils/h2ph.PL and t/lib/h2ph.t + Message-ID: + Branch: perl + ! t/lib/h2ph.t utils/h2ph.PL +____________________________________________________________________________ +[ 1323] By: gsar on 1998/07/05 20:56:39 + Log: fix t/lib/fields.t's @INC so make test runs + Branch: perl + ! t/lib/fields.t +____________________________________________________________________________ +[ 1322] By: gsar on 1998/07/05 20:26:43 + Log: add comments on GV_FOO constants, s/8/GV_ADDINEVAL/ + Branch: perl + ! gv.c gv.h toke.c +____________________________________________________________________________ +[ 1321] By: gsar on 1998/07/05 07:41:50 + Log: sundry win32 config tweaks + Branch: perl + ! Todo.5.005 t/op/stat.t win32/Makefile win32/config.bc + ! win32/config.gc win32/config.vc win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/config_h.PL + ! win32/config_sh.PL win32/makefile.mk +____________________________________________________________________________ +[ 1320] By: gsar on 1998/07/05 06:30:35 + Log: update Changes + Branch: perl + ! Changes +____________________________________________________________________________ +[ 1319] By: gsar on 1998/07/05 06:27:37 + Log: add ck_sysread() for better sysread/read/recv sanity + Branch: perl + ! ObjXSub.h embed.h global.sym globals.c objpp.h op.c opcode.h + ! opcode.pl proto.h +____________________________________________________________________________ +[ 1318] By: gsar on 1998/07/05 04:34:05 + Log: From: Stephen McCamant + Date: Sat, 4 Jul 1998 23:24:47 -0500 (CDT) + Subject: [PATCH] Document B::Deparse, add pp_threadsv + Message-ID: <13726.65230.19324.216849@alias-2.pr.mcs.net> + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1317] By: gsar on 1998/07/05 04:15:25 + Log: added patch with tweak to doc + From: Chip Salzenberg + Message-ID: <19980704205136.A16319@perlsupport.com> + Date: Sat, 4 Jul 1998 20:51:36 -0400 + Subject: [PATCH _69] Take 2: Warn on C + Branch: perl + ! ext/IO/lib/IO/Handle.pm pod/perldiag.pod toke.c +____________________________________________________________________________ +[ 1316] By: gsar on 1998/07/05 03:56:22 + Log: Porting/Glossary goes podly into Config.pm + Branch: perl + ! Porting/Glossary configpm +____________________________________________________________________________ +[ 1315] By: gsar on 1998/07/05 02:50:18 + Log: add suggested tool as an example in ExtUtils::Packlist + From: Alan Burlison + Message-Id: <199807031028.LAA10456@sale-wts> + Date: Fri, 3 Jul 1998 11:28:03 +0100 (BST) + Subject: Re: [make install] another horror story + Branch: perl + ! lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm +____________________________________________________________________________ +[ 1314] By: gsar on 1998/07/05 02:28:04 + Log: avoid race condition (storing ptr to SV before incrementing its + REFCNT) and warning in newRV() + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1313] By: gsar on 1998/07/05 02:06:40 + Log: applied suggested fix for xhv_array sizing, with portability tweaks + From: Gisle Aas + Subject: Re: [PATCH] Re: perl5.004_69 core dump + Date: 04 Jul 1998 10:20:35 +0200 + Message-ID: + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 1312] By: gsar on 1998/07/05 01:36:45 + Log: From: Gisle Aas + Subject: [PATCH] hv_max may be a few too many + Date: 04 Jul 1998 09:28:46 +0200 + Message-ID: + Branch: perl + ! doop.c +____________________________________________________________________________ +[ 1311] By: gsar on 1998/07/05 00:35:27 + Log: patchlevel up to 5.004_70, various tweaks + * fix taint problems due to maintbranch regression + * PERL_OBJECT now builds again + * deal with C++ strong-typing problems in hv.c + * fix mismatch in "reserved word" diagnostic + Branch: perl + ! av.c hv.c objpp.h patchlevel.h pp_ctl.c pp_hot.c proto.h + ! regexec.c regexp.h toke.c win32/perlhost.h win32/win32.c +____________________________________________________________________________ +[ 1310] By: TimBunce on 1998/07/04 11:35:25 + Log: Remove old RE //t flag from scan_subst(). + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 1309] By: gsar on 1998/07/04 08:32:53 + Log: various small tweaks (still fails a few taint tests in {taint,locale}.t) + Branch: perl + ! Todo.5.005 lib/re.pm sv.c t/lib/fields.t +____________________________________________________________________________ +[ 1307] By: gsar on 1998/07/04 07:00:14 + Log: fix C, add tests + Branch: perl + ! pp_hot.c t/op/local.t +____________________________________________________________________________ +[ 1306] By: gsar on 1998/07/04 05:52:34 + Log: fixes for mortalization bug in xsubpp, other efficiency tweaks + From: joshua.pritikin@db.com + Date: Wed, 1 Jul 1998 10:09:43 -0400 + Message-Id: + Subject: [PATCH _69] sv_2mortal fix + Branch: perl + ! lib/ExtUtils/xsubpp perl.c pp.c pp_hot.c proto.h sv.c sv.h +____________________________________________________________________________ +[ 1305] By: gsar on 1998/07/04 05:46:42 + Log: add patch preextend global string table, tweak for 512 entries + From: Gisle Aas + Date: 04 Jul 1998 01:04:08 +0200 + Subject: Re: [PATCH] Re: perl5.004_69 core dump + Message-ID: + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 1304] By: gsar on 1998/07/04 05:40:35 + Log: simplify xhv_array sizing + From: Gisle Aas + Date: 04 Jul 1998 00:49:42 +0200 + Subject: Re: [PATCH] Re: perl5.004_69 core dump + Message-ID: + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 1303] By: gsar on 1998/07/04 05:37:29 + Log: make 4-arg win32_select() sleep more reasonably on false values + From: Blair Zajac + Message-Id: <199807020225.TAA18740@gobi.gps.caltech.edu> + Date: Wed, 1 Jul 1998 19:25:56 -0700 (PDT) + Subject: [PATCH 5.004_69] select dumps core on MSWin32-x86 + -- + Message-Id: <199807030107.SAA08595@gobi.gps.caltech.edu> + Date: Thu, 2 Jul 1998 18:07:19 -0700 (PDT) + Subject: [PATCH 5.004_69] select dumps core on MSWin32-x86 + Branch: perl + ! win32/win32sck.c +____________________________________________________________________________ +[ 1302] By: gsar on 1998/07/04 05:32:50 + Log: adjust h2ph.t for dos-specific problem + From: Laszlo Molnar + Message-ID: <19980703234525.C208@cdata.tvnet.hu> + Date: Fri, 3 Jul 1998 23:45:25 +0200 + Subject: Re: [PATCH _68] t/lib/h2ph.t problem + Branch: perl + ! t/lib/h2ph.t +____________________________________________________________________________ +[ 1301] By: gsar on 1998/07/04 05:31:04 + Log: fix CPAN.pm problem, OS2 tweaks + From: Ilya Zakharevich + Message-Id: <199807030459.AAA00097@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_68] PAtch to CPAN first-time + Date: Fri, 3 Jul 1998 00:59:35 -0400 (EDT) + Branch: perl + ! lib/CPAN/FirstTime.pm lib/ExtUtils/MM_OS2.pm + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1300] By: gsar on 1998/07/04 05:27:20 + Log: From: Ilya Zakharevich + Message-Id: <199807030102.VAA26813@monk.mps.ohio-state.edu> + Date: Thu, 2 Jul 1998 21:02:59 -0400 (EDT) + Subject: [PATCH 5.004_68] Add elc target to to makefile + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1299] By: gsar on 1998/07/04 05:25:56 + Log: newer emacs/cperl-mode.el (via private mail) + From: Ilya Zakharevich + Message-Id: <199807030104.VAA26825@monk.mps.ohio-state.edu> + Date: Thu, 2 Jul 1998 21:04:29 -0400 (EDT) + Subject: [PATCH 5.004_68] cperl-mode + Branch: perl + ! emacs/cperl-mode.el +____________________________________________________________________________ +[ 1298] By: gsar on 1998/07/04 05:22:41 + Log: From: Dominic Dunlop + Message-Id: + Date: Thu, 2 Jul 1998 22:57:26 +0000 + Subject: [PATCH 5.004_69] Make Power MachTen use vfork and perl's malloc + Branch: perl + ! hints/machten.sh malloc.c +____________________________________________________________________________ +[ 1297] By: gsar on 1998/07/04 05:20:52 + Log: allow a flags args to fbm_instr() for future needs + From: Ilya Zakharevich + Message-Id: <199807020749.DAA12379@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_68] mORE FBM_ CHANGES FOR FUTURE + Date: Thu, 2 Jul 1998 03:49:32 -0400 (EDT) + Branch: perl + ! pod/perlguts.pod pp.c pp_hot.c proto.h regexec.c util.c +____________________________________________________________________________ +[ 1296] By: gsar on 1998/07/04 05:16:15 + Log: From: Andy Dougherty + Date: Thu, 2 Jul 1998 11:50:41 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_69] INSTALL-1.39 + Branch: perl + ! INSTALL +____________________________________________________________________________ +[ 1295] By: gsar on 1998/07/04 05:15:05 + Log: Configure update + From: doughera@newton.phys.lafayette.edu (Andy Dougherty) + Date: Wed, 1 Jul 98 23:07:50 EDT + Message-Id: <9807020307.AA17848@newton.phys.lafayette.edu> + Subject: [PATCH 5.004_69] Config_69-01 + Branch: perl + ! Configure INSTALL MANIFEST Policy_sh.SH Porting/Glossary + ! Porting/config.sh Porting/config_H Porting/pumpkin.pod + ! config_h.SH win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1294] By: gsar on 1998/07/04 05:10:25 + Log: add perlbug -F switch to save message to file + From: Hugo van der Sanden + Message-Id: + Date: Wed, 1 Jul 1998 21:14:22 +0200 + Subject: Re: [PATCH 5.004_69] perlbug -fok + Branch: perl + ! Makefile.SH utils/perlbug.PL +____________________________________________________________________________ +[ 1293] By: gsar on 1998/07/04 05:06:52 + Log: catch nonexistent backrefs in REs + From: Hugo van der Sanden + Message-Id: + Date: Wed, 1 Jul 1998 20:14:05 +0200 + Subject: Re: [PATCH _66] for bad backrefs + -- + Message-Id: + Date: Wed, 1 Jul 1998 20:47:16 +0200 + Subject: Re: [PATCH _66] for bad backrefs + Branch: perl + ! regcomp.c t/op/re_tests util.c +____________________________________________________________________________ +[ 1292] By: gsar on 1998/07/04 05:02:01 + Log: fix perlcc to not rm output file, and other -w(arts) + Branch: perl + ! utils/perlcc.PL +____________________________________________________________________________ +[ 1291] By: gsar on 1998/07/04 04:30:03 + Log: ignore stash entries that are not GVs in dump.c + Branch: perl + ! dump.c +____________________________________________________________________________ +[ 1290] By: gsar on 1998/07/04 03:55:10 + Log: cleaner page headers from pod2man + Branch: perl + ! pod/pod2man.PL +____________________________________________________________________________ +[ 1288] By: gsar on 1998/07/04 03:16:39 + Log: tweaks to Getopt::Std + From: Robin Barker + Date: Tue, 30 Jun 98 14:45:49 BST + Message-Id: <14103.9806301345@tempest.cise.npl.co.uk> + Subject: [PATCH perl5.004_69] lib/Getopt/Std.pm + -- + Message-Id: <17918.9807021053@tempest.cise.npl.co.uk> + To: perl5-porters@perl.org + Subject: [PATCH perl5.004_69] second: lib/Getopt/Std.pm + Branch: perl + ! lib/Getopt/Std.pm +____________________________________________________________________________ +[ 1287] By: gsar on 1998/07/04 03:13:02 + Log: added patch, with tweaks + From: Gisle Aas + Date: 03 Jul 1998 00:50:15 +0200 + Message-ID: + Subject: [PATCH] Some AVHV documentation + Branch: perl + ! pod/perlref.pod +____________________________________________________________________________ +[ 1286] By: gsar on 1998/07/04 02:53:26 + Log: applied patch with tweaks to prose + From: Gisle Aas + Subject: [PATCH] Simplified AVHV support + Date: 30 Jun 1998 13:34:07 +0200 + Message-ID: + Branch: perl + ! ObjXSub.h av.c embed.h global.sym objpp.h pod/perldiag.pod + ! pp.c proto.h t/op/avhv.t +____________________________________________________________________________ +[ 1285] By: gsar on 1998/07/04 02:30:48 + Log: tweak doc for ".." + From: "M.J.T. Guy" + Subject: [PATCH] pod for scalar .. + Message-Id: + Date: Tue, 30 Jun 1998 12:14:50 +0100 + Branch: perl + ! pod/perlop.pod +____________________________________________________________________________ +[ 1284] By: gsar on 1998/07/04 02:28:43 + Log: fix use of uninitialized var in pp_unpack() + From: Jarkko Hietaniemi + Date: Tue, 30 Jun 1998 14:32:17 +0300 (EET DST) + Message-Id: <199806301132.OAA27353@alpha.hut.fi> + Subject: [PATCH] 5.004_69 (also for 5.004_04) one more^Wless quad bug + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 1283] By: gsar on 1998/07/04 02:26:37 + Log: From: Jarkko Hietaniemi + Date: Tue, 30 Jun 1998 11:40:22 +0300 (EET DST) + Message-Id: <199806300840.LAA04872@alpha.hut.fi> + Subject: [PATCH] 5.004_69: Parsewords.pm: avoid undefined warnings + Branch: perl + ! lib/Text/ParseWords.pm +____________________________________________________________________________ +[ 1282] By: gsar on 1998/07/04 02:24:32 + Log: VMS updates from Dan Sugalski + Message-Id: <3.0.5.32.19980629165356.00a20730@ous.edu> + Date: Mon, 29 Jun 1998 16:53:56 -0700 + Subject: [PATCH 5.004_69]README.vms doc patch + -- + Message-Id: <3.0.5.32.19980629165125.00a4e100@ous.edu> + Date: Mon, 29 Jun 1998 16:51:25 -0700 + -- + Message-Id: <3.0.5.32.19980702135357.00a5eb40@ous.edu> + Date: Thu, 02 Jul 1998 13:53:57 -0700 + Subject: [PATCH 5.004_69]VMS filetest operator fixup + Branch: perl + ! README.vms vms/descrip_mms.template vms/vms.c +____________________________________________________________________________ +[ 1281] By: gsar on 1998/07/04 02:17:48 + Log: From: Dan Sugalski + Message-Id: <3.0.5.32.19980629164625.00a4d7c0@ous.edu> + Date: Mon, 29 Jun 1998 16:46:25 -0700 + Subject: [PATCH 5.004_69]Tweaks to VMS configuration procedure + Branch: perl + ! vms/subconfigure.com +____________________________________________________________________________ +[ 1280] By: gsar on 1998/07/04 02:16:03 + Log: don't attempt to copy directories on VMS + From: Dan Sugalski + Message-Id: <3.0.5.32.19980629163129.00a82140@ous.edu> + Date: Mon, 29 Jun 1998 16:31:29 -0700 + Subject: [PATCH 5.004_69]Tweak to installperl + Branch: perl + ! installperl +____________________________________________________________________________ +[ 1279] By: gsar on 1998/07/04 02:09:26 + Log: add 'installhtml*dir' to win32 config templates + From: "Douglas Lankshear" + Subject: [PATCH 5.004_68] For Win32 config + Date: Mon, 29 Jun 1998 09:00:13 -0700 + Message-ID: <000a01bda376$ffe8b0b0$a32fa8c0@tau.Active> + Branch: perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1278] By: gsar on 1998/07/04 02:06:23 + Log: implemented described fix for h2ph hanging on "enum" + From: Billy + Subject: Re: h2ph problem on Solaris 2.6/SPARC/Sun compiler + Message-ID: + Date: Sat, 27 Jun 1998 01:13:12 +0930 (CST) + Branch: perl + ! utils/h2ph.PL +____________________________________________________________________________ +[ 1277] By: gsar on 1998/07/04 01:51:47 + Log: merge changes#1210,1211,1270 from maintbranch + Branch: perl + + lib/re.pm + ! MANIFEST dump.c installperl lib/File/Basename.pm mg.c op.c + ! op.h perl.h pod/perlmodlib.pod pod/perlop.pod pp_ctl.c + ! pp_hot.c t/lib/basename.t t/op/taint.t toke.c +____________________________________________________________________________ +[ 1276] By: gsar on 1998/07/04 00:33:37 + Log: deprecate use of reserved word "our" (Larry's idea) + Date: Mon, 22 Jun 1998 08:55:09 -0700 + From: larry@wall.org (Larry Wall) + Message-Id: <199806221555.IAA07212@wall.org> + Subject: Re: our + Branch: perl + ! pod/perldiag.pod toke.c +____________________________________________________________________________ +[ 1275] By: nick on 1998/07/02 18:36:59 + Log: Integrate mainline, just to keep up. + Branch: ansiperl + +> t/lib/fields.t + - lib/Math/Trig/Radial.pm + !> MANIFEST lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm + !> lib/Math/Trig.pm lib/base.pm lib/fields.pm mg.c + !> pod/perldiag.pod pod/perltrap.pod pp_hot.c scope.c scope.h + !> t/lib/trig.t t/op/array.t toke.c utils/perldoc.PL + !> win32/config.bc win32/config.gc win32/config.vc + !> win32/include/dirent.h win32/makedef.pl win32/win32.c + !> win32/win32iop.h +____________________________________________________________________________ +[ 1274] By: gsar on 1998/07/02 16:47:20 + Log: tweak win32/config.* variables + Branch: perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1273] By: gsar on 1998/07/02 16:33:53 + Log: export opendir() set of functions on win32 + Branch: perl + ! win32/include/dirent.h win32/makedef.pl win32/win32.c + ! win32/win32iop.h +____________________________________________________________________________ +[ 1272] By: gsar on 1998/07/01 23:21:49 + Log: fix C<@a = (%a = 1)> bizarreness + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 1271] By: gsar on 1998/06/30 22:49:39 + Log: document perltrap on precedence of keys/values/each + Branch: perl + ! pod/perltrap.pod +____________________________________________________________________________ +[ 1270] By: TimBunce on 1998/06/30 09:06:21 + Log: Added lib/re.pm missing from change 1210 + Branch: maint-5.004/perl + + lib/re.pm +____________________________________________________________________________ +[ 1269] By: gsar on 1998/06/30 08:20:52 + Log: From: Murray Nesbitt + Message-Id: <77180549BCE.AAA466A@mail.rdc1.bc.wave.home.com> + Date: Mon, 29 Jun 1998 14:30:59 PDT + Subject: Re: [PATCH 5.004_67] MakeMaker mods for PPD support + Branch: perl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1268] By: gsar on 1998/06/30 05:38:34 + Log: From: Robin Barker + Message-Id: <13254.9806291404@tempest.cise.npl.co.uk> + Date: Mon, 29 Jun 1998 15:04:57 -0000 + Subject: [PATCH perl5.004_69] perldoc.PL + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1267] By: gsar on 1998/06/30 05:34:06 + Log: add patch to integrate Math::Trig::Radial into Math::Trig + From: Jarkko Hietaniemi + Date: Mon, 29 Jun 1998 16:28:53 +0300 (EET DST) + Message-Id: <199806291328.QAA16916@alpha.hut.fi> + Subject: [PATCH] 5.004_68 (or 5.004_04): radial trig + Branch: perl + - lib/Math/Trig/Radial.pm + ! MANIFEST lib/Math/Trig.pm t/lib/trig.t +____________________________________________________________________________ +[ 1266] By: gsar on 1998/06/30 05:17:33 + Log: From: Gisle Aas + Message-Id: + Date: 29 Jun 1998 12:36:09 +0200 + Subject: Re: [PATCH] Simplified magic_setisa() and improved fields.pm + Branch: perl + + t/lib/fields.t + ! MANIFEST lib/base.pm lib/fields.pm mg.c pod/perldiag.pod + ! t/op/array.t +____________________________________________________________________________ +[ 1265] By: gsar on 1998/06/30 05:12:57 + Log: tweaks to overloaded constants (change#1259) + Branch: perl + ! scope.c scope.h toke.c +____________________________________________________________________________ +[ 1264] By: nick on 1998/06/29 17:38:03 + Log: Integrate mainline c. _69 to ansiperl + Branch: ansiperl + +> eg/cgi/caution.xbm eg/cgi/dna.small.gif.uu + +> eg/cgi/nph-multipart.cgi ext/Errno/ChangeLog + +> ext/Errno/Errno_pm.PL ext/Errno/Makefile.PL lib/CGI/Cookie.pm + +> lib/Math/Trig/Radial.pm perlio.h t/lib/cgi-form.t + +> t/lib/cgi-function.t t/lib/cgi-html.t t/lib/cgi-request.t + +> t/lib/errno.t t/op/goto_xs.t t/op/splice.t + !> (integrate 100 files) + +---------------- +Version 5.004_69 +---------------- + +____________________________________________________________________________ +[ 1263] By: gsar on 1998/06/29 09:17:28 + Log: update Changes and perlhist.pod + Branch: perl + ! Changes pod/perlhist.pod +____________________________________________________________________________ +[ 1262] By: gsar on 1998/06/29 08:26:36 + Log: bump patchlevel to 69, various little tweaks (tested on win32, Solaris + under several build configurations) + Branch: perl + ! Todo.5.005 op.c patchlevel.h t/lib/cgi-function.t + ! t/lib/cgi-request.t toke.c win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1261] By: gsar on 1998/06/29 06:51:10 + Log: add missing SSCHECK() to rectify faulty SSPUSH*() logic in change#1259 + Branch: perl + ! scope.h +____________________________________________________________________________ +[ 1260] By: gsar on 1998/06/29 06:46:12 + Log: Message-Id: <199806290610.IAA19443@moulon.inra.fr> + Date: Mon, 29 Jun 1998 08:10:46 +0200 + From: ts + Subject: {perlembed.pod] Re: Memory leak in Perl 5.004 and the fix + Branch: perl + ! pod/perlembed.pod +____________________________________________________________________________ +[ 1259] By: gsar on 1998/06/29 06:01:35 + Log: added patch for overloading constants, made PERL_OBJECT-aware + From: Ilya Zakharevich + Message-Id: <199806270328.XAA21088@monk.mps.ohio-state.edu> + Date: Fri, 26 Jun 1998 23:28:41 -0400 (EDT) + Branch: perl + ! ObjXSub.h embed.h embedvar.h global.sym hv.c interp.sym + ! intrpvar.h lib/Math/BigInt.pm lib/overload.pm objpp.h op.c + ! perl.c perl.h pp_ctl.c proto.h scope.c scope.h + ! t/pragma/overload.t toke.c +____________________________________________________________________________ +[ 1258] By: gsar on 1998/06/29 05:32:25 + Log: fix Socket.pm typo from change#1240 + Branch: perl + ! ext/Socket/Socket.pm +____________________________________________________________________________ +[ 1257] By: gsar on 1998/06/29 05:09:24 + Log: applied patch, tweak for threads awareness + From: Albert Dvornik + Subject: [PATCH]5.004_04-m4 (CORE) fix for broken "goto &xsub" + Date: 24 Jun 1998 19:33:09 -0400 + Message-Id: + Branch: perl + + t/op/goto_xs.t + ! MANIFEST pp_ctl.c +____________________________________________________________________________ +[ 1256] By: gsar on 1998/06/29 03:34:18 + Log: applied patch, fixed one more leak, tweaked whitespace bugs + From: Guy Decoux + (via) + Date: Fri, 26 Jun 1998 09:59:32 -0400 + From: "Chunhui Teng" + Message-Id: <199806261359.JAA02393@bmers357.nortel.ca> + Subject: Memory leak in Perl 5.004 and the fix + Branch: perl + ! ext/Opcode/Opcode.xs ext/Opcode/Safe.pm +____________________________________________________________________________ +[ 1255] By: gsar on 1998/06/29 02:50:37 + Log: From: koenig@kulturbox.de (Andreas J. Koenig) + Subject: Permissions in MakeMaker (Was: patch to MM_Unix.pm) + Date: 28 Jun 1998 23:47:07 +0200 + Message-ID: + Branch: perl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1254] By: gsar on 1998/06/28 21:35:02 + Log: From: joshua.pritikin@db.com + Date: Fri, 26 Jun 1998 09:34:34 -0400 + Message-Id: + Subject: [PATCH _68] PUSHSTACK renovation + Branch: perl + ! av.c cop.h gv.c mg.c perl.c pp_ctl.c pp_sys.c sv.c util.c +____________________________________________________________________________ +[ 1253] By: gsar on 1998/06/28 21:21:22 + Log: From: Stephen McCamant + Message-Id: + Date: Sat, 27 Jun 1998 16:38:19 -0500 (CDT) + Subject: IV changes for long long (was Re: 5.004_68 on its way to the CPAN) + Branch: perl + ! perlvars.h sv.c +____________________________________________________________________________ +[ 1252] By: gsar on 1998/06/28 21:16:34 + Log: From: Ilya Zakharevich + Message-Id: <199806272359.TAA05436@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_68] Improve warning on zero-length chunks in RE + Date: Sat, 27 Jun 1998 19:59:13 -0400 (EDT) + Branch: perl + ! regcomp.c +____________________________________________________________________________ +[ 1251] By: gsar on 1998/06/28 21:14:32 + Log: add Math/Trig/Radial.pm, update MANIFEST + From: Jarkko Hietaniemi + Date: Sat, 27 Jun 1998 17:28:14 +0300 (EET DST) + Message-Id: <199806271428.RAA05307@alpha.hut.fi> + Subject: Math::Trig::Radial ? + Branch: perl + + lib/Math/Trig/Radial.pm + ! MANIFEST +____________________________________________________________________________ +[ 1250] By: gsar on 1998/06/28 21:09:48 + Log: applied patch, tweaked doc, and regen regnodes.h + From: Ilya Zakharevich + Message-Id: <199806270655.CAA29144@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_68] \z in RE + Date: Sat, 27 Jun 1998 02:55:26 -0400 (EDT) + Branch: perl + ! pod/perlre.pod regcomp.c regcomp.sym regexec.c regnodes.h + ! t/op/re_tests t/op/regexp.t toke.c +____________________________________________________________________________ +[ 1249] By: gsar on 1998/06/28 20:56:38 + Log: From: mike@bill.iac.net + Message-ID: <19980627034913.A32220@bill.minivend.com> + Date: Sat, 27 Jun 1998 03:49:13 +0000 + Subject: [ PATCH 5.004 68 ] Text::ParseWords, ^W fixed, version 3.1 + Branch: perl + ! lib/Text/ParseWords.pm t/lib/parsewords.t +____________________________________________________________________________ +[ 1248] By: gsar on 1998/06/28 20:54:43 + Log: From: Ilya Zakharevich + Message-Id: <199806270352.XAA21174@monk.mps.ohio-state.edu> + Subject: [PATCH] Fix ptags + Date: Fri, 26 Jun 1998 23:52:54 -0400 (EDT) + Branch: perl + ! emacs/ptags +____________________________________________________________________________ +[ 1247] By: gsar on 1998/06/28 20:42:54 + Log: apply patch sent via private mail + From: Stephen McCamant + Message-Id: + Date: Fri, 26 Jun 1998 21:32:23 -0500 (CDT) + Subject: Re: Enhanced B::Deparse + Branch: perl + ! ext/B/B/Deparse.pm +____________________________________________________________________________ +[ 1246] By: gsar on 1998/06/28 20:38:24 + Log: From: Ilya Zakharevich + Message-Id: <199806270109.VAA14907@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_68] pat.t tests + Date: Fri, 26 Jun 1998 21:09:02 -0400 (EDT) + Branch: perl + ! t/op/pat.t +____________________________________________________________________________ +[ 1245] By: gsar on 1998/06/28 20:36:08 + Log: From: joshua.pritikin@db.com + Date: Fri, 26 Jun 1998 10:02:32 -0400 + Message-Id: + Subject: [PATCH _68] improve recursive error messages! + Branch: perl + ! gv.c pod/perldiag.pod universal.c +____________________________________________________________________________ +[ 1244] By: gsar on 1998/06/28 20:09:02 + Log: From: Dominic Dunlop + Message-Id: + Date: Thu, 25 Jun 1998 17:46:55 +0000 + Subject: [PATCH 5.004_68]: Move REG_INFTY-dependent tests from op/regexp.t + to op/pat.t; add tests for a few more regexp parse failures etc. + Branch: perl + ! t/op/pat.t t/op/re_tests t/op/regexp.t +____________________________________________________________________________ +[ 1243] By: gsar on 1998/06/28 20:06:30 + Log: specify *.sym files needed in perl_exp.SH instead of picking up all + From: Andy Dougherty + Date: Thu, 25 Jun 1998 10:36:21 -0400 (EDT) + Subject: Re: Not OK: perl 5.00468 on aix-thread 4.1.4.0 + Message-Id: + Branch: perl + ! perl_exp.SH +____________________________________________________________________________ +[ 1242] By: gsar on 1998/06/28 20:01:28 + Log: + From: Gisle Aas + Subject: Re: [PATCH] 4-arg substr update for perl5.004_68 + Date: 25 Jun 1998 10:32:43 +0200 + Message-ID: + Branch: perl + ! op.c pod/perlfunc.pod pp.c t/op/substr.t +____________________________________________________________________________ +[ 1241] By: gsar on 1998/06/28 19:55:11 + Log: applied patch, tweaked opcode.pl for PERL_OBJECT, and regen opcode.h + From: Stephen McCamant + Message-Id: + Date: Wed, 24 Jun 1998 21:10:32 -0500 (CDT) + Subject: [PATCH REPOST] refgen in opcode.pl + Branch: perl + ! opcode.h opcode.pl +____________________________________________________________________________ +[ 1240] By: gsar on 1998/06/28 19:46:29 + Log: From: Chris Nandor + Message-Id: + Date: Wed, 24 Jun 1998 19:58:28 -0400 + Subject: [PATCH 3d try] Add CR LF CRLF to Socket.pm + Branch: perl + ! ext/Socket/Socket.pm +____________________________________________________________________________ +[ 1239] By: gsar on 1998/06/28 19:44:19 + Log: From: Gisle Aas + Subject: [PATCH] Optimize foreach (1..1000000) + Date: 24 Jun 1998 20:26:48 +0200 + Message-ID: + Branch: perl + ! Todo cop.h op.c pod/perldiag.pod pod/perlop.pod pp_ctl.c + ! pp_hot.c t/op/range.t +____________________________________________________________________________ +[ 1238] By: gsar on 1998/06/28 19:28:13 + Log: avoid creation of %^R + From: Ilya Zakharevich + Message-Id: <199806241825.OAA06346@monk.mps.ohio-state.edu> + Subject: Re: [5.004_68] What is %^R ? [PATCH?] + Date: Wed, 24 Jun 1998 14:25:06 -0400 (EDT) + Branch: perl + ! perl.c t/op/splice.t +____________________________________________________________________________ +[ 1237] By: gsar on 1998/06/28 19:23:40 + Log: From: Gisle Aas + Subject: [PATCH] Negative LENGTH argument to splice + Date: 24 Jun 1998 15:11:35 +0200 + Message-ID: + Branch: perl + + t/op/splice.t + ! MANIFEST pod/perlfunc.pod pp.c +____________________________________________________________________________ +[ 1236] By: gsar on 1998/06/28 19:18:29 + Log: From: "M.J.T. Guy" + Subject: [PATCH] Insecure $ENV{} message out of step with perldiag + Message-Id: + Date: Wed, 24 Jun 1998 13:13:02 +0100 + Branch: perl + ! pod/perldiag.pod pod/perlsec.pod +____________________________________________________________________________ +[ 1235] By: gsar on 1998/06/28 19:16:13 + Log: Complex.pm update + From: Jarkko Hietaniemi + Date: Wed, 24 Jun 1998 15:19:05 +0300 (EET DST) + Message-Id: <199806241219.PAA04061@alpha.hut.fi> + Subject: [PATCH] 5.004_68: Complex.pm, complex.t + Branch: perl + ! lib/Math/Complex.pm t/lib/complex.t +____________________________________________________________________________ +[ 1234] By: gsar on 1998/06/28 19:13:05 + Log: disable perl malloc on UNICOS for now + From: Jarkko Hietaniemi + Date: Wed, 24 Jun 1998 12:37:14 +0300 (EET DST) + Message-Id: <199806240937.MAA01669@alpha.hut.fi> + Subject: [PATCH] 5.004_68: UNICOS hints + Branch: perl + ! hints/unicos.sh +____________________________________________________________________________ +[ 1233] By: gsar on 1998/06/28 19:10:53 + Log: fixes unpack("q"...), and semctl() tests for UNICOS + From: Jarkko Hietaniemi + Date: Wed, 24 Jun 1998 11:55:09 +0300 (EET DST) + Message-Id: <199806240855.LAA16152@alpha.hut.fi> + Subject: [PATCH] 5.004_68: semctl() in UNICOS (was: pack/unpack) + Branch: perl + ! pp.c t/op/ipcsem.t t/op/pack.t +____________________________________________________________________________ +[ 1232] By: gsar on 1998/06/28 19:01:23 + Log: tweak various places for iperlsys.h awareness + Branch: perl + ! MANIFEST Makefile.SH lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MM_VMS.pm pod/perlapio.pod +____________________________________________________________________________ +[ 1231] By: gsar on 1998/06/28 18:37:07 + Log: add a perlio.h stub for compat (some extensions seem to #include it) + Branch: perl + + perlio.h +____________________________________________________________________________ +[ 1230] By: gsar on 1998/06/28 18:35:23 + Log: Message-ID: <19980624003701.C161@cdata.tvnet.hu> + Date: Wed, 24 Jun 1998 00:37:01 +0200 + From: Laszlo Molnar + Subject: Re: [PATCH for _66] Makefile.SH problem on dos/djgpp + Branch: perl + ! pod/pod2text.PL +____________________________________________________________________________ +[ 1229] By: gsar on 1998/06/28 18:33:42 + Log: hand apply mutiliated patch + Message-Id: <3.0.5.32.19980623114100.00ab76e0@ous.edu> + Date: Tue, 23 Jun 1998 11:41:00 -0700 + From: Dan Sugalski + Subject: [PATCH 5.004_68]Configure update for VMS + Branch: perl + ! configure.com vms/descrip_mms.template vms/subconfigure.com +____________________________________________________________________________ +[ 1228] By: gsar on 1998/06/28 17:17:35 + Log: hand apply whitespace mutiliated patch + Date: Tue, 23 Jun 98 16:38:06 BST + Message-Id: <5389.9806231538@tempest.cise.npl.co.uk> + From: Robin Barker + Subject: PATCH [perl5.004_68] perlbug.PL; was Re: Error message for Errno_pm.PL + Branch: perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 1227] By: gsar on 1998/06/28 17:14:34 + Log: Date: Tue, 23 Jun 1998 08:51:00 -0700 (PDT) + From: Tom Phoenix + Subject: [PATCH] documenting close without arguments + Message-ID: + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1226] By: gsar on 1998/06/28 17:12:56 + Log: Date: Tue, 23 Jun 1998 05:37:09 -0700 (PDT) + From: Tom Phoenix + Subject: Better diags for vars.pm + Message-ID: + Branch: perl + ! lib/vars.pm +____________________________________________________________________________ +[ 1225] By: gsar on 1998/06/28 17:05:59 + Log: hand apply whitespace mutiliated perldoc.PL patches + Date: Tue, 23 Jun 98 15:49:52 BST + Message-Id: <5302.9806231449@tempest.cise.npl.co.uk> + From: Robin Barker + Subject: PATCH [5.004_68] perldoc.PL + -- + Date: Fri, 26 Jun 98 17:50:05 BST + Message-Id: <6834.9806261650@tempest.cise.npl.co.uk> + From: Robin Barker + Subject: [PATCH 5.004_68] perldoc.PL + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1224] By: gsar on 1998/06/28 16:50:59 + Log: integrate ansiperl to get makedef.pl tweak + Branch: perl + ! Porting/pumpkin.pod win32/makedef.pl +____________________________________________________________________________ +[ 1223] By: gsar on 1998/06/28 16:33:32 + Log: add CGI-2.42, its and testsuite + Branch: perl + + eg/cgi/caution.xbm eg/cgi/dna.small.gif.uu + + eg/cgi/nph-multipart.cgi lib/CGI/Cookie.pm t/lib/cgi-form.t + + t/lib/cgi-function.t t/lib/cgi-html.t t/lib/cgi-request.t + ! MANIFEST eg/cgi/RunMeFirst eg/cgi/file_upload.cgi + ! eg/cgi/index.html eg/cgi/monty.cgi eg/cgi/save_state.cgi + ! eg/cgi/wilogo.gif.uu lib/CGI.pm lib/CGI/Apache.pm + ! lib/CGI/Carp.pm lib/CGI/Fast.pm lib/CGI/Push.pm + ! lib/CGI/Switch.pm +____________________________________________________________________________ +[ 1222] By: gsar on 1998/06/28 15:28:29 + Log: enable Errno build on win32, add Errno-1.08 files to repository + Branch: perl + + ext/Errno/ChangeLog ext/Errno/Errno_pm.PL + + ext/Errno/Makefile.PL t/lib/errno.t + ! MANIFEST win32/Makefile win32/config.bc win32/config.gc + ! win32/config.vc win32/makefile.mk +____________________________________________________________________________ +[ 1221] By: gsar on 1998/06/28 14:34:06 + Log: tweak win32 config templates for cpp + Branch: perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1220] By: nick on 1998/06/26 16:46:13 + Log: Integrate mainline + Branch: ansiperl + !> Changes Makefile.SH ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod + !> ext/POSIX/POSIX.xs perl.c pod/perlre.pod pod/perlvar.pod sv.c + !> util.c win32/win32.h +____________________________________________________________________________ +[ 1219] By: gsar on 1998/06/26 04:33:57 + Log: make find_script() return saved string, reenable missing diagnostics + Branch: perl + ! perl.c util.c +____________________________________________________________________________ +[ 1218] By: gsar on 1998/06/25 23:24:53 + Log: avoid warning with -P switch + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 1217] By: gsar on 1998/06/25 22:06:58 + Log: don't suppress display of Makefile recipes that invoke perl + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1216] By: gsar on 1998/06/25 21:32:06 + Log: tweak order of destruction so OBJECTs in GLOBs are visited after those + in RVs + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1215] By: gsar on 1998/06/25 18:56:59 + Log: mknod() is not POSIX, so remove the POSIX pieces from change#1199 + Branch: perl + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs +____________________________________________________________________________ +[ 1214] By: gsar on 1998/06/25 18:11:22 + Log: add FILE_SHARE_DELETE ifndef in win32.h + Branch: perl + ! win32/win32.h +____________________________________________________________________________ +[ 1213] By: nick on 1998/06/24 17:18:59 + Log: Correct perl malloc tweak to .def generation + Branch: ansiperl + ! win32/makedef.pl +____________________________________________________________________________ +[ 1212] By: gsar on 1998/06/24 12:40:13 + Log: check in what change#1182 didn't, and Changes + Branch: perl + ! Changes pod/perlre.pod pod/perlvar.pod +____________________________________________________________________________ +[ 1211] By: TimBunce on 1998/06/23 23:09:37 + Log: Update test count in t/lib/basename.t (see change 1210) + Branch: maint-5.004/perl + ! t/lib/basename.t +____________________________________________________________________________ +[ 1210] By: TimBunce on 1998/06/23 22:58:18 + Log: Title: "Add C pragma to propagate tainting in m// and s///" + From: Chip Salzenberg , Gurusamy Sarathy + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <19980525155222.A18445@perlsupport.com>, + <199805261143.MAA04260@toad.ig.co.uk>, + <199805261235.IAA10371@aatma.engin.umich.edu>, + Files: MANIFEST pod/perlmodlib.pod pod/perlop.pod op.h perl.h dump.c + installperl lib/re.pm lib/File/Basename.pm mg.c op.c + pp_ctl.c pp_hot.c t/lib/basename.t t/op/taint.t toke.c + Branch: maint-5.004/perl + ! MANIFEST dump.c embed.h installperl lib/File/Basename.pm mg.c + ! op.c op.h perl.h pod/perlmodlib.pod pod/perlop.pod pp_ctl.c + ! pp_hot.c t/lib/basename.t t/op/taint.t toke.c +____________________________________________________________________________ +[ 1209] By: nick on 1998/06/23 21:33:34 + Log: Perl_malloced_size() only available with perl's malloc + Branch: ansiperl + ! win32/makefile.mk +____________________________________________________________________________ +[ 1208] By: nick on 1998/06/23 18:15:23 + Log: Integrate mainline c. 5.004_68 into ansiperl, mainly + so see what has changed... + Branch: ansiperl + +> Porting/genlog iperlsys.h lib/File/Spec.pm + +> lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm + +> lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm + +> lib/File/Spec/Win32.pm regcomp.pl regcomp.sym regnodes.h + +> t/lib/filespec.t win32/perlhost.h + - atomic.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h + - ipstdio.h perldir.h perlenv.h perlio.h perllio.h perlmem.h + - perlproc.h perlsock.h + !> (integrate 96 files) + +---------------- +Version 5.004_68 +---------------- + +____________________________________________________________________________ +[ 1207] By: gsar on 1998/06/23 10:55:05 + Log: final touches to 5.004_68 + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 1206] By: gsar on 1998/06/23 10:50:10 + Log: more MULTIPLICITY tweaks + Branch: perl + ! objpp.h perl.c perl.h proto.h win32/GenCAPI.pl win32/config.bc + ! win32/config.gc win32/config.vc win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc +____________________________________________________________________________ +[ 1205] By: gsar on 1998/06/23 09:03:46 + Log: partial MULTIPLICITY cleanup + Branch: perl + ! embedvar.h interp.sym intrpvar.h perl.c perlvars.h proto.h + ! thrdvar.h +____________________________________________________________________________ +[ 1204] By: gsar on 1998/06/23 09:00:48 + Log: tweak MANIFEST, add Dev_t to POSIX/typemap + Branch: perl + ! MANIFEST Porting/makerel README.win32 ext/POSIX/typemap +____________________________________________________________________________ +[ 1203] By: gsar on 1998/06/23 07:08:02 + Log: bump patchlevel to 68, Porting/makerel tweaks + Branch: perl + ! Porting/makerel patchlevel.h win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1202] By: gsar on 1998/06/23 06:16:19 + Log: remove atomic.h pending resolution of licensing issues, + EMULATE_ATOMIC_REFCOUNTS everywhere + Branch: perl + - atomic.h + ! MANIFEST perl.h sv.h +____________________________________________________________________________ +[ 1201] By: gsar on 1998/06/23 06:06:23 + Log: applied patch, regen headers + From: Ilya Zakharevich + Message-Id: <199806220819.EAA03295@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Malloc size feedback + Date: Mon, 22 Jun 1998 04:19:45 -0400 (EDT) + Branch: perl + ! ObjXSub.h av.c embed.h global.sym hv.c malloc.c objpp.h perl.c + ! pp_sys.c proto.h sv.c toke.c +____________________________________________________________________________ +[ 1200] By: gsar on 1998/06/23 05:59:09 + Log: Message-Id: + Date: Mon, 22 Jun 1998 21:19:43 -0500 (CDT) + From: Stephen McCamant + Subject: [PATCH] Inheritance of B:: classes + Branch: perl + ! ext/B/B.pm +____________________________________________________________________________ +[ 1199] By: gsar on 1998/06/23 05:57:58 + Log: applied patch, moved #define mkfifo ... from perl.h to POSIX.xs + Date: Tue, 23 Jun 1998 00:01:02 +0300 (EET DST) + Message-Id: <199806222101.AAA16456@alpha.hut.fi> + Subject: [PATCH] _67: somebody said POSIX::mknod? + From: Jarkko Hietaniemi + Branch: perl + ! Configure config_h.SH ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod + ! ext/POSIX/POSIX.xs perl.h +____________________________________________________________________________ +[ 1198] By: gsar on 1998/06/23 05:48:56 + Log: Date: Mon, 22 Jun 1998 14:10:46 -0600 (MDT) + From: Daniel Grisinger + Subject: PATCH [5.004_67] perldoc.PL + Message-ID: + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1197] By: gsar on 1998/06/23 05:47:24 + Log: Message-Id: <3.0.5.32.19980622092918.00aa46e0@ous.edu> + Date: Mon, 22 Jun 1998 09:29:18 -0700 + From: Dan Sugalski + Subject: [PATCH 5.004_67] Autosplit's not qite case-insensitive enough on VMS + Branch: perl + ! lib/AutoSplit.pm +____________________________________________________________________________ +[ 1196] By: gsar on 1998/06/23 05:45:19 + Log: Date: Mon, 22 Jun 1998 18:58:55 +0300 (EET DST) + Message-Id: <199806221558.SAA18626@alpha.hut.fi> + Subject: [PATCH] 5.004_67: Fcntl: add few constants, enhance maintainability + From: Jarkko Hietaniemi + Branch: perl + ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs +____________________________________________________________________________ +[ 1195] By: gsar on 1998/06/23 05:43:32 + Log: Message-Id: + Date: Mon, 22 Jun 1998 15:22:24 +0000 + From: Dominic Dunlop + Subject: [PATCH 5.004_67] Amend tests/regexp.t for variable REG_INFTY; + update machten.sh to vary REG_INFTY + Branch: perl + ! hints/machten.sh t/op/re_tests t/op/regexp.t +____________________________________________________________________________ +[ 1194] By: gsar on 1998/06/23 05:38:36 + Log: filter out array subscripts when generating symbols for AIX + Date: Mon, 22 Jun 1998 12:14:31 +0300 (EET DST) + Message-Id: <199806220914.MAA13631@alpha.hut.fi> + Subject: [PATCH] 5.004_67: perl.exp bug, AIX unhappy + From: Jarkko Hietaniemi + Branch: perl + ! perl_exp.SH +____________________________________________________________________________ +[ 1193] By: gsar on 1998/06/23 05:32:52 + Log: updated hints file to cope with buggy sigsetjmp() on Solaris-x86 + Message-Id: <199806221102.NAA12106@alanya.m.isar.de> + Date: Mon, 22 Jun 1998 13:02:45 +0200 (MET DST) + From: Lupe Christoph + Subject: Re: Perl 5.004_67: Death is on vacation - miniperl can't die + Branch: perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 1192] By: gsar on 1998/06/23 05:27:13 + Log: add detailed changelogs and 'genlog'--the script which generates them + Branch: perl + + Porting/genlog + ! Changes INSTALL +____________________________________________________________________________ +[ 1191] By: gsar on 1998/06/22 15:56:27 + Log: tweak win32 makefiles for PERL_OBJECT build + Branch: perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1190] By: gsar on 1998/06/22 04:06:02 + Log: backout change#1178 as it was dependent on an unapplied patch, + fix filespec.t to know its @INC + Branch: perl + ! sv.c t/lib/filespec.t +____________________________________________________________________________ +[ 1189] By: gsar on 1998/06/22 03:47:43 + Log: eliminate use of tokenbuf in util.c + Branch: perl + ! util.c +____________________________________________________________________________ +[ 1188] By: gsar on 1998/06/22 01:53:59 + Log: add patch that generates regnodes.h via regcomp.pl + From: Ilya Zakharevich + Message-Id: <199806212038.QAA29797@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] regcomp.h regnodes cleanup + Date: Sun, 21 Jun 1998 16:38:21 -0400 (EDT) + Branch: perl + + regcomp.pl regcomp.sym regnodes.h + ! MANIFEST Makefile.SH regcomp.h +____________________________________________________________________________ +[ 1187] By: gsar on 1998/06/22 01:42:21 + Log: From: Ilya Zakharevich + Message-Id: <199806210145.VAA21629@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Avoid temporaries on recursion + Date: Sat, 20 Jun 1998 21:45:03 -0400 (EDT) + Branch: perl + ! pp_ctl.c pp_hot.c +____________________________________________________________________________ +[ 1186] By: gsar on 1998/06/22 01:14:14 + Log: merge relevant portions from maintbranch change#1155 + Branch: perl + ! lib/Math/BigFloat.pm op.c pod/perlfunc.pod pod/perlop.pod + ! pod/perlrun.pod pp_hot.c +____________________________________________________________________________ +[ 1185] By: gsar on 1998/06/22 00:59:28 + Log: From: Ilya Zakharevich + Message-Id: <199806210827.EAA26322@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Zero-length matching bug + Date: Sun, 21 Jun 1998 04:27:16 -0400 (EDT) + Branch: perl + ! regexec.c t/op/pat.t +____________________________________________________________________________ +[ 1184] By: gsar on 1998/06/22 00:57:27 + Log: fix alignment issues in malloc.c on 64-bit platforms (via private mail) + From: Ilya Zakharevich + Message-Id: <199806170844.EAA24584@monk.mps.ohio-state.edu> + Subject: Re: _67 not okay + Date: Wed, 17 Jun 1998 04:44:26 -0400 (EDT) + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1183] By: gsar on 1998/06/22 00:53:37 + Log: From: Ilya Zakharevich + Message-Id: <199806210727.DAA24072@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Test study/re/ + Date: Sun, 21 Jun 1998 03:27:13 -0400 (EDT) + Branch: perl + ! t/op/pat.t +____________________________________________________________________________ +[ 1182] By: gsar on 1998/06/21 21:25:07 + Log: From: Ilya Zakharevich + Message-Id: <199806210430.AAA21818@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] $^R documented + Date: Sun, 21 Jun 1998 00:30:48 -0400 (EDT) + Branch: perl + ! pod/perlre.pod pod/perlvar.pod +____________________________________________________________________________ +[ 1181] By: gsar on 1998/06/21 21:23:41 + Log: From: Ilya Zakharevich + Message-Id: <199806210111.VAA17752@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Re docs + Date: Sat, 20 Jun 1998 21:11:37 -0400 (EDT) + Branch: perl + ! pod/perlop.pod pod/perlre.pod +____________________________________________________________________________ +[ 1180] By: gsar on 1998/06/21 21:22:16 + Log: adapted contents of message into comments in malloc.c and INSTALL + From: Ilya Zakharevich + Message-Id: <199806162240.SAA23597@monk.mps.ohio-state.edu> + Subject: [5.004_67] malloc.c -Defines + Date: Tue, 16 Jun 1998 18:40:41 -0400 (EDT) + Branch: perl + ! INSTALL malloc.c +____________________________________________________________________________ +[ 1179] By: gsar on 1998/06/21 07:26:35 + Log: applied patch, with edits to the prose + From: Ilya Zakharevich + Message-Id: <199806201936.PAA17499@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Error variables compared + Date: Sat, 20 Jun 1998 15:36:14 -0400 (EDT) + Branch: perl + ! pod/perlvar.pod +____________________________________________________________________________ +[ 1178] By: gsar on 1998/06/21 07:07:16 + Log: From: Ilya Zakharevich + Message-Id: <199806200104.VAA11343@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] print study /re/ broken + Date: Fri, 19 Jun 1998 21:04:54 -0400 (EDT) + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 1177] By: gsar on 1998/06/21 07:06:10 + Log: applied patch, tweaked wording + From: Ilya Zakharevich + Message-Id: <199806200838.EAA13992@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Documentation patch for malloc + Date: Sat, 20 Jun 1998 04:38:07 -0400 (EDT) + Branch: perl + ! malloc.c pod/perldiag.pod +____________________________________________________________________________ +[ 1176] By: gsar on 1998/06/21 07:00:30 + Log: From: Ilya Zakharevich + Message-Id: <199806200829.EAA13974@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Cosmetic malloc patch + Date: Sat, 20 Jun 1998 04:29:00 -0400 (EDT) + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1175] By: gsar on 1998/06/21 06:58:37 + Log: Message-Id: <3.0.5.32.19980619160057.032e7480@ous.edu> + Date: Fri, 19 Jun 1998 16:00:57 -0700 + From: Dan Sugalski + Subject: [PATCH 5.004_67] fixup patches for VMS + Branch: perl + ! ext/SDBM_File/sdbm/Makefile.PL t/lib/filecopy.t t/op/defins.t + ! t/op/taint.t vms/test.com vms/vms.c +____________________________________________________________________________ +[ 1174] By: gsar on 1998/06/21 06:55:18 + Log: applied VMS patch from Dan Sugalski + Date: Fri, 19 Jun 1998 15:36:34 -0700 + From: SYSTEM@cedar.osshe.edu + Message-Id: <980619153634.2063ee12@cedar.osshe.edu> + Subject: [PATCH 5.004_67] Enhancements to the VMS configuration procedures + Branch: perl + ! configure.com lib/ExtUtils/MM_VMS.pm perl.h + ! vms/descrip_mms.template vms/gen_shrfls.pl + ! vms/subconfigure.com +____________________________________________________________________________ +[ 1173] By: gsar on 1998/06/21 06:51:38 + Log: applied patch, modified logic to avoid reentering lexer at compile-time + Message-ID: <19980619113104.S9711@asic.sc.ti.com> + Date: Fri, 19 Jun 1998 11:31:04 -0500 + From: Graham Barr + Subject: Re: [PATCH perl5.004_67] Add Errno in ext/ + Branch: perl + ! Configure MANIFEST Makefile.SH ext/util/make_ext gv.c + ! lib/English.pm +____________________________________________________________________________ +[ 1172] By: gsar on 1998/06/21 06:27:57 + Log: applied patch, along with many changes: + - ipfoo.h headers have been coalesced along with perlfoo.h into + iperlsys.h + - win32/cp*.h have been combined in perlhost.h + - CPerlObj::PerlParse() takes an extra xsinit arg + - tweaks to get dl_win32.xs compiling again w/ PERL_OBJECT + From: "Douglas Lankshear" + Message-Id: <000001bd9b8c$0417fe90$a32fa8c0@tau.Active> + Subject: RE: [PATCH 5.004_67] Fixes for broken MS compiler + Date: Fri, 19 Jun 1998 10:59:50 -0700 + Branch: perl + + iperlsys.h win32/perlhost.h + - ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h ipstdio.h + - perldir.h perlenv.h perlio.h perllio.h perlmem.h perlproc.h + - perlsock.h + ! MANIFEST mg.h op.h perl.h perlio.c proto.h util.c + ! win32/Makefile win32/dl_win32.xs win32/makefile.mk + ! win32/runperl.c win32/win32.h +____________________________________________________________________________ +[ 1171] By: gsar on 1998/06/21 00:44:42 + Log: Date: Fri, 19 Jun 1998 07:55:19 -0600 (MDT) + From: Daniel Grisinger + Subject: Re: PATCH _67 (Doc) perlop.pod + Message-ID: + Branch: perl + ! pod/perlop.pod +____________________________________________________________________________ +[ 1170] By: gsar on 1998/06/21 00:43:06 + Log: a tweaked version of: + From: "Douglas Lankshear" + Subject: [PATCH 5.004_67] Win32 using PerlCRT.dll + Date: Wed, 17 Jun 1998 20:25:51 -0700 + Message-ID: <001b01bd9a68$cb752410$a32fa8c0@tau.Active> + Branch: perl + ! lib/ExtUtils/MM_Win32.pm win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1169] By: gsar on 1998/06/21 00:10:18 + Log: added patch, regen headers + From: Ilya Zakharevich + Message-Id: <199806190227.WAA07371@monk.mps.ohio-state.edu> + Subject: Re: Ilya's patches + Date: Thu, 18 Jun 1998 22:27:31 -0400 (EDT) + Branch: perl + ! ObjXSub.h embedvar.h interp.sym intrpvar.h toke.c +____________________________________________________________________________ +[ 1168] By: gsar on 1998/06/21 00:05:01 + Log: Date: Thu, 18 Jun 1998 23:37:32 -0700 (PDT) + From: Tom Phoenix + Subject: [PATCH] docs creating files via open + Message-ID: + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 1167] By: gsar on 1998/06/21 00:03:34 + Log: From: Ilya Zakharevich + Message-Id: <199806172151.RAA28441@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_67] Better version of malloc improver + Date: Wed, 17 Jun 1998 17:51:54 -0400 (EDT) + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1166] By: gsar on 1998/06/20 23:59:23 + Log: enhance perlre.pod to say C<)> can't appear in a (?#...) comment + Branch: perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 1165] By: gsar on 1998/06/20 23:47:09 + Log: added patch, tweaked missed files, excised comment that doesn't really + belong in the sources + From: joshua.pritikin@db.com + Date: Mon, 15 Jun 1998 10:03:37 -0400 + Message-Id: + Subject: [PATCH 5.004_57] tied hash slice & do_kv cleanup + Branch: perl + ! ObjXSub.h av.c doop.c embed.h global.sym objpp.h pp.c proto.h + ! t/op/avhv.t +____________________________________________________________________________ +[ 1164] By: gsar on 1998/06/20 23:29:09 + Log: add File-Spec-0.6 from CPAN + Branch: perl + + lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm + + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm + + lib/File/Spec/Win32.pm t/lib/filespec.t + ! MANIFEST +____________________________________________________________________________ +[ 1163] By: gsar on 1998/06/20 23:15:41 + Log: tweaks to allow both mingw32{gcc-2.8.1,egcs-1.0.2} build and test + Branch: perl + ! ext/POSIX/POSIX.xs win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1162] By: gsar on 1998/06/20 21:48:32 + Log: manual integration of all outstanding ansi branch stuff into mainline + Branch: perl + ! ext/POSIX/POSIX.xs lib/ExtUtils/MM_Win32.pm t/op/ipcsem.t + ! win32/config.gc win32/dl_win32.xs win32/makefile.mk + ! win32/win32.h +____________________________________________________________________________ +[ 1161] By: gsar on 1998/06/20 21:12:01 + Log: undo goofed change 1157 (backed out the fix instead of keeping it) + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1160] By: nick on 1998/06/20 21:05:51 + Log: Patches to build with EGCS-1.0.2 Mingw32 port. + Branch: ansiperl + ! ext/POSIX/POSIX.xs win32/config.gc win32/config_H.gc + ! win32/dl_win32.xs win32/makefile.mk win32/win32.h +____________________________________________________________________________ +[ 1159] By: gsar on 1998/06/20 02:51:35 + Log: cleanup installation of utilities on win32 + Branch: perl + ! installperl pod/Makefile win32/Makefile win32/makefile.mk + ! win32/pod.mak +____________________________________________________________________________ +[ 1158] By: gsar on 1998/06/20 02:50:35 + Log: intuit @INC pathnames from exe location only if dll location + is unknown (ensures that multiple executables will coexist) + Branch: perl + ! win32/win32.c +____________________________________________________________________________ +[ 1157] By: gsar on 1998/06/20 02:48:34 + Log: make perldoc ignore null files (it tried to open() them) + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1156] By: gsar on 1998/06/19 21:18:47 + Log: fix perldoc to ignore unfound null filenames + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 1155] By: TimBunce on 1998/06/19 18:47:57 + Log: Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Clarify varargs issues in INSTALL docs" + From: Andy Dougherty + Msg-ID: + Files: INSTALL + + ------ CORE LANGUAGE ------ + + Title: "Further fixes for updated SysV IPC support" + From: Jarkko Hietaniemi + Msg-ID: <199805211644.TAA15139@alpha.hut.fi> + Files: Configure perl.h doio.c + + Title: "Fixed SEGV caused by bug in pp_hot.c:pp_sassign()" + From: Andrew Bettison + Msg-ID: + Files: pp_hot.c + + Title: "Invalidate method cache on C" + From: Chip Salzenberg + Msg-ID: <19980604134731.D24343@perlsupport.com> + Files: scope.c t/op/method.t + + Title: "fix uninitialized cv variable in op.c" + From: joshua.pritikin@db.com + Msg-ID: + Files: op.c + + Title: "fix for undef as last arg to setsockopt" + From: Graham Barr + Msg-ID: <19980603112219.B7638@asic.sc.ti.com> + Files: pp_sys.c + + Title: "Fix -i when @ARGV is empty" + From: Chip Salzenberg , Gurusamy Sarathy + , Ilya Zakharevich + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <19980606184942.A4583@perlsupport.com>, + <199806070029.UAA18709@monk.mps.ohio-state.edu>, + <199806071817.OAA28141@aatma.engin.umich.edu>, + <199806191549.QAA16376@toad.ig.co.uk> + Files: pp_hot.c + + ------ DOCUMENTATION ------ + + Title: "Discrepancy between perlop.pod and m// operator docs" + From: Tom Phoenix + Msg-ID: + Files: pod/perlop.pod + + Title: "Doc addition for perlfunc entry for system()" + From: Ilya Zakharevich , Mike Fletcher + + Msg-ID: <199806011908.PAA31069@dewdrop2.mindspring.com>, + <199806012057.QAA26830@monk.mps.ohio-state.edu> + Files: pod/perlfunc.pod + + Title: "Clarify effects of using quotes with m operator" + From: Daniel Grisinger + Msg-ID: + Files: pod/perlop.pod + + Title: "Document -i with STDIN" + From: joshua.pritikin@db.com + Msg-ID: + Files: pod/perlrun.pod + + ------ EXTENSIONS ------ + + Title: "Fix Liblist.pm to tolerate backslashen in paths" + From: Gurusamy Sarathy + Msg-ID: <199806011954.PAA10900@aatma.engin.umich.edu> + Files: lib/ExtUtils/Liblist.pm + + ------ LIBRARY ------ + + Title: "Typo fix for Math::BogFloat" + From: Mike Stok + Msg-ID: + Files: lib/Math/BigFloat.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Add docs about types of diff to Porting/patching.pod" + From: Gurusamy Sarathy + Msg-ID: <199806090105.VAA20005@aatma.engin.umich.edu> + Files: Porting/patching.pod + + Title: "Set dont_use_nlink for PowerMAX OS 4.2" + From: Tom Horsley + Msg-ID: <199806161354.NAA21316@cleo.ssd.hcsc.com> + Files: hints/powerux.sh + + Title: "Assorted improvements to hints/solaris_2.sh" + From: Andy Dougherty + Msg-ID: + Files: hints/solaris_2.sh + Branch: maint-5.004/perl + ! Configure INSTALL Porting/patching.pod doio.c hints/powerux.sh + ! hints/solaris_2.sh lib/ExtUtils/Liblist.pm + ! lib/Math/BigFloat.pm op.c perl.h pod/perlfunc.pod + ! pod/perlop.pod pod/perlrun.pod pp_hot.c pp_sys.c scope.c + ! t/op/method.t +____________________________________________________________________________ +[ 1154] By: gsar on 1998/06/19 17:22:23 + Log: update repository copy of Asmdata.pm after `perl bytecode.pl` + Branch: perl + ! ext/B/B/Asmdata.pm regcomp.c +____________________________________________________________________________ +[ 1153] By: nick on 1998/06/19 17:21:21 + Log: Use libxxx.a for -lxxx with GCC + Branch: ansiperl + ! lib/ExtUtils/MM_Win32.pm win32/config.gc win32/config_H.gc + ! win32/makefile.mk +____________________________________________________________________________ +[ 1152] By: TimBunce on 1998/06/19 17:08:18 + Log: Title: Tom's jumbo doc patch + From: Tom Christiansen + Msg-Id: <199806140419.WAA20549@chthon.perl.com> + Files: pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod + pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod + pod/perlipc.pod pod/perllocale.pod pod/perllol.pod + pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod + pod/perlop.pod pod/perlre.pod pod/perlref.pod + pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod + pod/perlsyn.pod pod/perltie.pod pod/perltoot.pod + pod/perlvar.pod + Branch: maint-5.004/perl + ! pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod + ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + ! pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod + ! pod/perlipc.pod pod/perllocale.pod pod/perllol.pod + ! pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod + ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlsec.pod pod/perlsub.pod pod/perlsyn.pod + ! pod/perltie.pod pod/perltoot.pod pod/perlvar.pod +____________________________________________________________________________ +[ 1151] By: nick on 1998/06/19 15:38:28 + Log: Resolve latest + Branch: ansiperl + !> av.c embed.h embedvar.h ext/Socket/Socket.xs global.sym + !> hints/powerux.sh mg.c perl.h pod/perlsub.pod pp_ctl.c proto.h + !> sv.c t/TEST +____________________________________________________________________________ +[ 1150] By: gsar on 1998/06/18 20:43:07 + Log: Date: Tue, 16 Jun 1998 13:54:17 GMT + Message-Id: <199806161354.NAA21316@cleo.ssd.hcsc.com> + From: Tom Horsley + Subject: [PATCH] perl5.004 hints file (maint and dev paths) + Branch: perl + ! hints/powerux.sh +____________________________________________________________________________ +[ 1149] By: gsar on 1998/06/18 20:41:30 + Log: hand apply whitespace-mutiliated patch + From: joshua.pritikin@db.com + Date: Mon, 15 Jun 1998 09:21:36 -0400 + Message-Id: + Subject: [PATCH 5.004_67] SvREADONLY for av_clear + Branch: perl + ! av.c +____________________________________________________________________________ +[ 1148] By: gsar on 1998/06/18 20:33:59 + Log: hand apply whitespace-mutiliated and reversed patch + Date: Tue, 16 Jun 1998 16:31:40 -0400 + From: Les Peters + Message-Id: <199806162031.QAA08202@ds9> + Subject: [PATCH 5.004_67] Socket.xs tweak for IRIX 6.3 + Branch: perl + ! ext/Socket/Socket.xs +____________________________________________________________________________ +[ 1147] By: gsar on 1998/06/18 20:26:59 + Log: close child pipe in t/TEST, other cosmetic tweaks + Branch: perl + ! t/TEST +____________________________________________________________________________ +[ 1146] By: gsar on 1998/06/18 19:37:41 + Log: back out problematic change#1105, tweak perlsub.pod + Branch: perl + ! embed.h embedvar.h global.sym mg.c perl.h pod/perlsub.pod + ! pp_ctl.c proto.h sv.c +____________________________________________________________________________ +[ 1145] By: nick on 1998/06/18 19:31:07 + Log: Integrate and resolve -at mainline to ansiperl prior to Ming32 hacking + Branch: ansiperl + +> configure.com ext/DB_File/dbinfo + +> ext/DynaLoader/DynaLoader_pm.PL t/base/rs.t + +> t/op/regexp_noamp.t vms/descrip_mms.template vms/munchconfig.c + +> vms/subconfigure.com + - ext/DynaLoader/DynaLoader.pm.PL vms/config.vms vms/descrip.mms + - vms/fndvers.com + !> (integrate 499 files) +____________________________________________________________________________ +[ 1144] By: gsar on 1998/06/18 16:35:11 + Log: fix spurious cxstack_max init that trampled memory + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 1143] By: gsar on 1998/06/18 16:33:01 + Log: fix memory leaks and uninitialized memory accesses found by Purify + Branch: perl + ! doio.c perl.c regexec.c sv.c +____________________________________________________________________________ +[ 1142] By: gsar on 1998/06/18 16:28:48 + Log: fix off-by-one that trampled memory in re_croak2() + Branch: perl + ! regcomp.c +____________________________________________________________________________ +[ 1141] By: gsar on 1998/06/18 16:26:59 + Log: fix AutoLoader to do the right thing when there are relative paths + in @INC + Branch: perl + ! lib/AutoLoader.pm +____________________________________________________________________________ +[ 1140] By: gsar on 1998/06/18 16:22:47 + Log: fix Makefile.SH typo + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1139] By: gsar on 1998/06/17 18:06:16 + Log: 5.004_67 niggles + Branch: perl + ! Makefile.SH op.c + +---------------- +Version 5.004_67 +---------------- + +____________________________________________________________________________ +[ 1138] By: gsar on 1998/06/15 10:09:27 + Log: up patchlevel.h to 67, other small tweaks + Branch: perl + ! patchlevel.h pod/perlhist.pod pod/perltoc.pod vms/perly_c.vms + ! win32/Makefile win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1137] By: gsar on 1998/06/15 09:08:57 + Log: tweaks to get PERL_OBJECT building again; passes tests + Branch: perl + ! ObjXSub.h objpp.h proto.h +____________________________________________________________________________ +[ 1136] By: gsar on 1998/06/15 08:51:54 + Log: back out previous change (it breaks PERL_OBJECT) + Branch: perl + ! ObjXSub.h cc_runtime.h embed.h embedvar.h global.sym + ! interp.sym intrpvar.h objpp.h perl.c perl.h pod/perldiag.pod + ! pod/perlguts.pod pp_ctl.c proto.h scope.c scope.h util.c +____________________________________________________________________________ +[ 1135] By: gsar on 1998/06/15 05:32:01 + Log: added patch, fixed typo, reworked documentation + Message-Id: + Date: Sun, 14 Jun 1998 14:03:15 EDT + From: joshua.pritikin@db.com + Subject: [PATCH 5.004_66] JMPENV! + Branch: perl + ! ObjXSub.h cc_runtime.h embed.h embedvar.h global.sym + ! interp.sym intrpvar.h objpp.h perl.c perl.h pod/perldiag.pod + ! pod/perlguts.pod pp_ctl.c proto.h scope.c scope.h util.c +____________________________________________________________________________ +[ 1134] By: gsar on 1998/06/15 04:07:18 + Log: various win32 odds and ends + - added support for waitpid(), open2/open3, and a bugfix for kill() + from Ronald Schmidt + - tweak testsuite mods of above + - regenerate win32/config_H.?c + - change kill() to win32_kill() and export it + - coalesce common code in win32.c + - add PerlProc_waitpid() and export win32_waitpid() + result builds and passes on the three win32 compilers + Branch: perl + ! ipproc.h lib/IPC/Open3.pm perlproc.h t/lib/open2.t + ! t/lib/open3.t util.c win32/config.bc win32/config.gc + ! win32/config.vc win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc win32/makedef.pl win32/runperl.c + ! win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1133] By: gsar on 1998/06/15 01:39:13 + Log: newer Getopt/Long.pm from public distribution cited in: + Message-Id: + Date: 14 Jun 1998 15:15:28 +0200 + From: Johan Vromans + Subject: Getopt::Long version 2.17 released + Branch: perl + ! lib/Getopt/Long.pm +____________________________________________________________________________ +[ 1132] By: gsar on 1998/06/15 01:37:12 + Log: documentation update from tchrist + Message-Id: <199806140419.WAA20549@chthon.perl.com> + Date: Sat, 13 Jun 1998 22:19:32 MDT + From: Tom Christiansen + Subject: doc patches + Branch: perl + ! pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod + ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + ! pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod + ! pod/perlipc.pod pod/perllocale.pod pod/perllol.pod + ! pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod + ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlsec.pod pod/perlsub.pod pod/perlsyn.pod + ! pod/perltie.pod pod/perltoot.pod pod/perlvar.pod +____________________________________________________________________________ +[ 1131] By: gsar on 1998/06/14 19:33:36 + Log: Message-ID: + From: Roderick Schertler + Subject: [PATCH] Re: Exceptions in IPC::Open2 + Date: 12 Jun 1998 13:24:15 -0400 + Branch: perl + ! lib/IPC/Open3.pm +____________________________________________________________________________ +[ 1130] By: gsar on 1998/06/14 19:32:25 + Log: fixup MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 1129] By: gsar on 1998/06/14 18:51:53 + Log: various win32 fixes + - fixes that silence VC noises about dup exports, non-default libs, and + unsupported *.def file directives + - s/inplace/inplace_label/ malloc.c + - update Config{usemymalloc} based on d_mymalloc + - export Perl_*Vars + - fix makefiles to not build miniperl.exe twice, and to make it properly + when defaults are changed + Branch: perl + ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/Mksymlists.pm malloc.c + ! win32/Makefile win32/config_sh.PL win32/makedef.pl + ! win32/makefile.mk win32/perllib.c win32/win32.h +____________________________________________________________________________ +[ 1128] By: gsar on 1998/06/14 01:38:39 + Log: remove unused global `scrgv' + Branch: perl + ! ObjXSub.h cygwin32/cw32imp.h embedvar.h perlvars.h +____________________________________________________________________________ +[ 1127] By: nick on 1998/06/13 08:39:07 + Log: Move specialsv_list to embed.sym, regen embed*.h + Branch: win32/perl + ! embed.h embedvar.h global.sym interp.sym +____________________________________________________________________________ +[ 1126] By: gsar on 1998/06/12 07:23:06 + Log: From: jan.dubois@ibm.net (Jan Dubois) + Subject: Re: execv in toke.c [PATCH]: win32 wrapper for _66 + Date: Thu, 11 Jun 1998 21:13:31 +0200 + Message-ID: <35842ac5.7883075@smtp1.ibm.net> + Branch: perl + ! win32/makedef.pl win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1125] By: gsar on 1998/06/12 07:21:29 + Log: added patch, undo earlier workaround + From: jan.dubois@ibm.net (Jan Dubois) + Subject: Re: Why does saferealloc(NULL,size) croak? [PATCH] against _66 + Date: Thu, 11 Jun 1998 20:28:36 +0200 + Message-ID: <35831f69.4975644@smtp1.ibm.net> + Branch: perl + ! perl.c util.c +____________________________________________________________________________ +[ 1124] By: gsar on 1998/06/12 07:16:12 + Log: hand-applied patch with wrapped lines + From: "Douglas Lankshear" + Subject: [PATCH 5.004_66] Win32::Reg... bloat in Win32 + Date: Thu, 11 Jun 1998 11:06:33 -0700 + Message-ID: <000101bd9563$aae0c4c0$a32fa8c0@tau.Active> + Branch: perl + ! win32/win32.c +____________________________________________________________________________ +[ 1123] By: gsar on 1998/06/12 07:07:25 + Log: Date: Thu, 11 Jun 1998 12:40:05 -0400 (EDT) + From: Andy Dougherty + Subject: [PATCH 5.004_66] Config_66-01-02.diff + Message-Id: + Branch: perl + ! Configure +____________________________________________________________________________ +[ 1122] By: gsar on 1998/06/12 07:06:02 + Log: Message-Id: + Date: Thu, 11 Jun 1998 12:27:15 -0400 (EDT) + From: Andy Dougherty + Subject: Re: [PATCH for _66] Makefile.SH problem on dos/djgpp + Branch: perl + ! pod/checkpods.PL pod/pod2html.PL pod/pod2latex.PL + ! pod/pod2man.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL + ! utils/perlbug.PL utils/perlcc.PL utils/perldoc.PL + ! utils/pl2pm.PL utils/splain.PL x2p/find2perl.PL x2p/s2p.PL +____________________________________________________________________________ +[ 1121] By: gsar on 1998/06/12 07:01:20 + Log: a tweaked version of: + Message-Id: + Date: Fri, 12 Jun 1998 01:26:53 +0200 + From: Hugo van der Sanden + Subject: Re: Misparsing s///x + Branch: perl + ! pod/perlre.pod +____________________________________________________________________________ +[ 1120] By: gsar on 1998/06/12 06:51:08 + Log: applied patch, with indentation tweaks + From: Ilya Zakharevich + Message-Id: <199806110803.EAA09149@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_66] Remove REG_ALIGN junk + Date: Thu, 11 Jun 1998 04:03:58 -0400 (EDT) + Branch: perl + ! regcomp.c regcomp.h regexec.c +____________________________________________________________________________ +[ 1119] By: gsar on 1998/06/11 17:42:07 + Log: make REG_INFTY default to something saner when sizeof(short) > 2 + Message-Id: + Date: Thu, 11 Jun 1998 11:50:07 EDT + From: Andy Dougherty + Subject: Re: [PATCH for tests] Regexp fails on long string + Branch: perl + ! regcomp.h +____________________________________________________________________________ +[ 1118] By: gsar on 1998/06/11 07:09:06 + Log: regen embedvar.h + Branch: perl + ! embedvar.h +____________________________________________________________________________ +[ 1117] By: gsar on 1998/06/11 06:45:52 + Log: From: Ilya Zakharevich + Message-Id: <199806100751.DAA05441@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_66] Bugs with (?{}), $^R and many-to-many subst + Date: Wed, 10 Jun 1998 03:51:47 -0400 (EDT) + Branch: perl + ! interp.sym intrpvar.h op.c op.h perl.c regcomp.c regcomp.h + ! regexec.c regexp.h t/op/pat.t t/op/subst.t +____________________________________________________________________________ +[ 1116] By: gsar on 1998/06/11 06:35:54 + Log: misc win32 fixes + From: "Douglas Lankshear" + Subject: [PATCH 5.004_66] + Date: Wed, 10 Jun 1998 11:28:27 -0700 + Message-ID: <001a01bd949d$8fd18050$a32fa8c0@tau.Active> + Branch: perl + ! ObjXSub.h perl.c win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1115] By: gsar on 1998/06/11 06:33:21 + Log: Message-ID: <19980610005325.D162@cdata.tvnet.hu> + Date: Wed, 10 Jun 1998 00:53:25 +0200 + From: Laszlo Molnar + Subject: [PATCH for _66] Makefile.SH problem on dos/djgpp + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 1114] By: gsar on 1998/06/11 06:31:34 + Log: back out change#1111 and add alternative patch: + From: Ilya Zakharevich + Message-Id: <199806101538.LAA07293@monk.mps.ohio-state.edu> + Subject: Re: PATCH for study/foo/ + Date: Wed, 10 Jun 1998 11:38:58 -0400 (EDT) + Branch: perl + ! pp.c sv.c +____________________________________________________________________________ +[ 1113] By: gsar on 1998/06/11 02:59:23 + Log: fix outdated bytecode.pl + Branch: perl + ! bytecode.h bytecode.pl byterun.c byterun.h +____________________________________________________________________________ +[ 1112] By: gsar on 1998/06/10 07:56:06 + Log: Added patch, regenerated perly.c and perly.c.diff + Message-Id: + Date: Sun, 31 May 1998 12:56:14 -0500 (CDT) + From: Stephen McCamant + Subject: [PATCH] too many RV2GVs in *foo{THING} + Branch: perl + ! perly.c perly.c.diff perly.y t/op/gv.t +____________________________________________________________________________ +[ 1111] By: gsar on 1998/06/10 07:40:30 + Log: From: Ilya Zakharevich + Message-Id: <199806100309.XAA04974@monk.mps.ohio-state.edu> + Subject: Re: PATCH for study/foo/ + Date: Tue, 9 Jun 1998 23:09:55 -0400 (EDT) + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 1110] By: gsar on 1998/06/10 07:37:04 + Log: From: Ilya Zakharevich + Message-Id: <199806100219.WAA04865@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_66] -DL and PERL_DEBUG_MSTATS unravelled + Date: Tue, 9 Jun 1998 22:19:02 -0400 (EDT) + Branch: perl + ! pod/perldebug.pod +____________________________________________________________________________ +[ 1109] By: gsar on 1998/06/10 07:35:29 + Log: From: Ilya Zakharevich + Message-Id: <199806100302.XAA04958@monk.mps.ohio-state.edu> + Subject: Re: [PATCH 5.004_66] REG_INFTY patch corrected + Date: Tue, 9 Jun 1998 23:02:52 -0400 (EDT) + Branch: perl + ! regcomp.h +____________________________________________________________________________ +[ 1108] By: gsar on 1998/06/10 07:31:25 + Log: Added patch, tweaked other places affected by name change + Message-ID: <19980610005417.G162@cdata.tvnet.hu> + Date: Wed, 10 Jun 1998 00:54:17 +0200 + From: Laszlo Molnar + Subject: [PATCH] file name DynaLoader.pm.PL is 8.3 unfriendly + Branch: perl + +> ext/DynaLoader/DynaLoader_pm.PL + - ext/DynaLoader/DynaLoader.pm.PL + ! MANIFEST ext/DynaLoader/Makefile.PL win32/Makefile + ! win32/makefile.mk +____________________________________________________________________________ +[ 1107] By: gsar on 1998/06/10 07:24:20 + Log: Message-ID: <19980610005342.E162@cdata.tvnet.hu> + Date: Wed, 10 Jun 1998 00:53:42 +0200 + From: Laszlo Molnar + Subject: [PATCH for _66] new version of README.dos + Branch: perl + ! README.dos +____________________________________________________________________________ +[ 1106] By: gsar on 1998/06/10 07:22:31 + Log: Message-ID: <19980610005404.F162@cdata.tvnet.hu> + Date: Wed, 10 Jun 1998 00:54:04 +0200 + From: Laszlo Molnar + Subject: [PATCH for _66] op/taint.t problem on dos/djgpp + Branch: perl + ! t/op/taint.t +____________________________________________________________________________ +[ 1105] By: gsar on 1998/06/10 07:21:21 + Log: Applied patch, followed by tweaks to *.sym and `perl embed.pl` + From: Ilya Zakharevich + Message-Id: <199806090216.WAA02041@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_66] Resend of RE cache patch (modified) + Date: Mon, 8 Jun 1998 22:16:56 -0400 (EDT) + Branch: perl + ! embed.h embedvar.h global.sym intrpvar.h mg.c perl.h + ! perlvars.h pp_ctl.c proto.h sv.c +____________________________________________________________________________ +[ 1104] By: gsar on 1998/06/10 07:06:01 + Log: From: Ilya Zakharevich + Message-Id: <199806090210.WAA02027@monk.mps.ohio-state.edu> + Subject: Lost chunk of RE jumbo patch + Date: Mon, 8 Jun 1998 22:10:52 -0400 (EDT) + Branch: perl + + t/op/regexp_noamp.t +____________________________________________________________________________ +[ 1103] By: gsar on 1998/06/10 07:04:20 + Log: From: Ilya Zakharevich + Message-Id: <199806090207.WAA02015@monk.mps.ohio-state.edu> + Subject: [PATCH 5.004_66] Combined OS/2 support + Date: Mon, 8 Jun 1998 22:07:48 -0400 (EDT) + Branch: perl + ! os2/Changes os2/diff.configure os2/os2.c +____________________________________________________________________________ +[ 1102] By: gsar on 1998/06/10 07:00:08 + Log: Message-Id: <199803140103.UAA04839@monk.mps.ohio-state.edu> + Date: Fri, 13 Mar 1998 20:03:52 EST + From: Ilya Zakharevich + Subject: [PATCH 5.004_62 5_004_04m1] pod2html again + Branch: perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 1101] By: gsar on 1998/06/10 06:55:20 + Log: From: Ilya Zakharevich + Subject: Re: 5.004_65 uninitialized variable regexec.c (2) + Date: Thu, 28 May 1998 01:28:54 -0400 (EDT) + Branch: perl + ! regexec.c +____________________________________________________________________________ +[ 1100] By: gsar on 1998/06/10 06:52:50 + Log: updated MANIFEST for previous change + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 1099] By: gsar on 1998/06/10 06:51:08 + Log: Mangled patch, needed hand-tweaks, along with binmode for rs.t: + Message-Id: <3.0.5.32.19980605110840.009e12b0@ous.edu> + Date: Fri, 05 Jun 1998 11:08:40 -0700 + From: Dan Sugalski + Subject: Re: [PATCH 5.004_66]Add record read capability to <> + Branch: perl + + t/base/rs.t + ! perl.h pod/perlvar.pod sv.c +____________________________________________________________________________ +[ 1098] By: gsar on 1998/06/10 06:36:59 + Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Message-Id: <9806042022.AA10418@claudius.bfsec.bt.co.uk> + Subject: [PATCH fror 5.004_66] DB_File-1.60 + Date: Thu, 4 Jun 1998 21:22:35 +0100 (BST) + Branch: perl + + ext/DB_File/dbinfo + ! MANIFEST ext/DB_File/Changes ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/typemap t/lib/db-btree.t + ! t/lib/db-hash.t t/lib/db-recno.t +____________________________________________________________________________ +[ 1097] By: gsar on 1998/06/10 06:33:16 + Log: Message-ID: <19980604134731.D24343@perlsupport.com> + Date: Thu, 4 Jun 1998 13:47:31 -0400 + From: Chip Salzenberg + Subject: [PATCH] Invalidate method cache on C + Branch: perl + ! scope.c t/op/method.t +____________________________________________________________________________ +[ 1096] By: gsar on 1998/06/10 06:30:51 + Log: From: Norton Allen + Message-Id: <199806031908.PAA04183@bottesini.harvard.edu> + Subject: [PATCH] _66 MM_Unix.pm for QNX + Date: Wed, 3 Jun 1998 15:08:33 -0400 (edt) + Branch: perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 1095] By: gsar on 1998/06/10 06:29:21 + Log: From: Norton Allen + Message-Id: <199806031909.PAA04358@bottesini.harvard.edu> + Subject: [PATCH] _66 proto.h + Date: Wed, 3 Jun 1998 15:09:14 -0400 (edt) + Branch: perl + ! proto.h +____________________________________________________________________________ +[ 1094] By: gsar on 1998/06/10 06:26:39 + Log: Applied relevant parts of: + From: Paul Johnson + Date: Wed, 3 Jun 1998 19:07:55 +0100 (BST) + Message-Id: <199806031807.TAA04100@west-tip.transeda.com> + Subject: [PATCH] Enhancing xsubpp's support for C++ + Branch: perl + ! lib/ExtUtils/xsubpp +____________________________________________________________________________ +[ 1093] By: gsar on 1998/06/10 06:22:54 + Log: Message-ID: <19980603112219.B7638@asic.sc.ti.com> + Date: Wed, 3 Jun 1998 11:22:19 -0500 + From: Graham Barr + Subject: [PATCH perl5.004_04-m4] fix for undef as last arg to setsockopt + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 1092] By: gsar on 1998/06/10 06:20:44 + Log: Message-Id: <199806030919.KAA03527@sale-wts> + Date: Wed, 3 Jun 1998 10:20:06 +0100 (BST) + From: Alan Burlison + Subject: [PATCH 5.004_66] ExtUtils::Installed.pm and ExtUtils::Packlist.pm + Branch: perl + ! lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm +____________________________________________________________________________ +[ 1091] By: gsar on 1998/06/10 06:18:42 + Log: Message-Id: <3.0.5.32.19980601122229.00a58420@ous.edu> + Date: Mon, 01 Jun 1998 12:22:29 -0700 + From: SYSTEM@cedar.osshe.edu (by way of Dan Sugalski ) + Subject: [PATCH 5.004_66] proto.h change to make byterun() visible to VMS + Branch: perl + ! proto.h +____________________________________________________________________________ +[ 1090] By: gsar on 1998/06/10 06:14:24 + Log: A tweaked version of: + Date: Mon, 1 Jun 1998 12:05:47 -0700 + From: SYSTEM@cedar.osshe.edu + Message-Id: <980601120547.20617d54@cedar.osshe.edu> + Subject: [PATCH 5.004_66] Fix problem with SDBM makefile on VMS + Branch: perl + ! ext/SDBM_File/sdbm/Makefile.PL +____________________________________________________________________________ +[ 1089] By: gsar on 1998/06/10 05:58:00 + Log: Message-Id: + Date: Fri, 29 May 1998 23:52:26 -0500 (CDT) + From: Stephen McCamant + Subject: [PATCH] Re: Uninitialised error from -M() + Branch: perl + ! op.c t/op/stat.t +____________________________________________________________________________ +[ 1088] By: gsar on 1998/06/10 05:55:24 + Log: Date: Sat, 30 May 1998 08:07:01 -0400 + From: lvirden@cas.org (Larry Virden) + Message-Id: <199805301207.IAA08856@cas.org> + Subject: PATCH for pod and warning notice + Branch: perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 1087] By: gsar on 1998/06/10 05:52:05 + Log: From: Andy Dougherty + Date: Mon, 8 Jun 1998 14:45:36 -0400 (EDT) + Message-Id: + Subject: [PATCH 5.004_66] Config_66-01 + Branch: perl + ! Configure MANIFEST Porting/Glossary Porting/config.sh + ! Porting/config_H config_h.SH +____________________________________________________________________________ +[ 1086] By: gsar on 1998/06/10 05:46:38 + Log: Message-Id: <3.0.5.32.19980608161314.00a0a880@ous.edu> + Date: Mon, 08 Jun 1998 16:13:14 -0700 + From: Dan Sugalski + Subject: [PATCH 5.004_66] Documentation patch for Semaphore.pm + Branch: perl + ! ext/Thread/Thread/Semaphore.pm +____________________________________________________________________________ +[ 1085] By: gsar on 1998/06/10 05:44:44 + Log: Message-Id: <3.0.5.32.19980608161002.00a64a70@ous.edu> + Date: Mon, 08 Jun 1998 16:10:02 -0700 + From: Dan Sugalski + Subject: [PATCH 5.004_66]Doc & feature patch for Thread::Queue + Branch: perl + - vms/descrip.mms + ! ext/Thread/Thread/Queue.pm +____________________________________________________________________________ +[ 1084] By: gsar on 1998/06/10 05:38:11 + Log: Message-Id: <3.0.5.32.19980608153828.00a81ea0@ous.edu> + Date: Mon, 08 Jun 1998 15:38:28 -0700 + From: Dan Sugalski + Subject: [PATCH POINTER 5.004_66]A configuration system for VMS perl + Branch: perl + + configure.com vms/descrip_mms.template vms/munchconfig.c + + vms/subconfigure.com + - vms/config.vms vms/fndvers.com + ! MANIFEST README.vms lib/ExtUtils/MM_VMS.pm +____________________________________________________________________________ +[ 1083] By: gsar on 1998/06/10 05:07:04 + Log: xsubpp enhancements ($CPAN/authors/id/ILYAZ/patches/diff_xsubpp_65), a + variant of: + Message-Id: <199712131231.HAA04125@monk.mps.ohio-state.edu> + Date: Sat, 13 Dec 1997 07:31:02 EST + From: Ilya Zakharevich + Subject: 5.004_55: xsubpp: new keywords INTERFACE C_ARGS + Branch: perl + ! XSUB.h lib/ExtUtils/xsubpp pod/perlxs.pod +____________________________________________________________________________ +[ 1082] By: gsar on 1998/06/10 04:52:26 + Log: add newer malloc.c from Ilya Zakharevich + (from $CPAN/authors/id/ILYAZ/patches/diff_malloc_65) + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 1081] By: gsar on 1998/06/10 03:45:10 + Log: reverse integrate contents of win32 branch into mainline + Branch: perl + !> (integrate 44 files) +____________________________________________________________________________ +[ 1080] By: gsar on 1998/06/09 17:37:55 + Log: `p4 integrate -b ASPerl && p4 resolve -at` + Branch: asperl + !> (integrate 43 files) +____________________________________________________________________________ +[ 1079] By: gsar on 1998/06/09 00:59:06 + Log: add examples of diff(1) usage + Branch: win32/perl + ! Porting/patching.pod +____________________________________________________________________________ +[ 1078] By: gsar on 1998/06/09 00:52:23 + Log: undo change#1077 + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 1077] By: gsar on 1998/06/06 16:47:32 + Log: make sv_setsv() treat freed SVs like SVt_NULL + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 1076] By: gsar on 1998/06/05 19:03:14 + Log: delete undiscussed AS changes for PPD (broke .packlist + mechanism) + Branch: win32/perl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 1075] By: gsar on 1998/06/05 18:18:44 + Log: add AS patch#26 (rename THIS to PERL_OBJEC_THIS to avoid clash + with the xsubpp-generated symbol) + Branch: win32/perl + ! ObjXSub.h perl.c perl.h pp_ctl.c pp_hot.c toke.c + ! win32/dl_win32.xs +____________________________________________________________________________ +[ 1074] By: gsar on 1998/06/04 22:45:18 + Log: add AS patch#25 (allow B build with -DPERL_OBJECT) + Branch: win32/perl + ! ObjXSub.h byterun.h embed.h embedvar.h ext/B/B.xs intrpvar.h + ! objpp.h proto.h util.c win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1073] By: nick on 1998/06/04 17:18:14 + Log: resolve -at win32 branch into ansiperl + Branch: ansiperl + +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h + +> ipsock.h ipstdio.h objpp.h t/lib/h2ph.h t/lib/h2ph.pht + +> t/lib/h2ph.t win32/GenCAPI.pl + !> (integrate 127 files) +____________________________________________________________________________ +[ 1072] By: gsar on 1998/06/04 01:49:24 + Log: document CORE::GLOBAL:: and global overriding, fix up + File::DosGlob, testsuited and all + Branch: win32/perl + ! lib/File/DosGlob.pm pod/perlsub.pod t/lib/dosglob.t +____________________________________________________________________________ +[ 1071] By: gsar on 1998/06/03 22:12:55 + Log: add AS patch#24, remove one other instance of error_no + that was missed (patch#23 was intentionally skipped) + Branch: win32/perl + ! embedvar.h globals.c perlvars.h win32/makedef.pl + ! win32/runperl.c +____________________________________________________________________________ +[ 1070] By: gsar on 1998/06/01 19:42:06 + Log: fix Liblist.pm to tolerate backslashen in paths + Branch: win32/perl + ! lib/ExtUtils/Liblist.pm +____________________________________________________________________________ +[ 1069] By: gsar on 1998/06/01 07:43:02 + Log: @INC construction on win32 cleaned up + - perl.dll location based paths should be much more reliable now + - registry stuff unchanged + - Config.pm now has all the installfoolib entries for MakeMaker et al + Branch: win32/perl + ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/config_h.PL win32/config_sh.PL win32/makefile.mk + ! win32/runperl.c win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 1068] By: gsar on 1998/05/31 21:52:18 + Log: semctl tweak + Message-Id: <199805312127.QAA06750@gbarr.connect.net> + Date: Sun, 31 May 1998 16:27:33 CDT + From: Graham Barr + Subject: Not OK: perl 5.00466 on i586-linux-thread 2.0.31 + Branch: win32/perl + ! doio.c +____________________________________________________________________________ +[ 1067] By: gsar on 1998/05/31 21:07:44 + Log: minimal fix to enable compiling with -DMULTIPLICITY + (non-threadsafe regcomp.c globals need revisiting) + Branch: win32/perl + ! ObjXSub.h embedvar.h interp.sym intrpvar.h regcomp.c + ! win32/GenCAPI.pl win32/makedef.pl +____________________________________________________________________________ +[ 1066] By: gsar on 1998/05/30 21:35:37 + Log: integrate mainline changes (ASPerl branch is identical to + win32 branch as of this change) + Branch: asperl + !> MANIFEST Todo.5.005 embed.h ext/POSIX/POSIX.xs global.sym + !> lib/ExtUtils/Mksymlists.pm pod/perldelta.pod pp_sys.c + !> t/op/ipcmsg.t t/op/ipcsem.t win32/Makefile win32/config.bc + !> win32/config.gc win32/config.vc win32/config_H.bc + !> win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 1065] By: gsar on 1998/05/30 21:13:06 + Log: change#1060 was inexplicably missing some of the "ensure + AS stuff does no harm" fixes + Branch: win32/perl + ! embed.h global.sym win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1064] By: gsar on 1998/05/30 21:10:27 + Log: integrate mainline to pick up trivial changes + Branch: win32/perl + !> MANIFEST pp_sys.c + +---------------- +Version 5.004_66 +---------------- + +____________________________________________________________________________ +[ 1063] By: mbeattie on 1998/05/29 15:19:55 + Log: Remove duplicate win32/TEST line from MANIFEST. + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 1062] By: mbeattie on 1998/05/29 15:18:33 + Log: Add missing ";" to pp_umask (spotted by Jarkko Hietaniemi). + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 1061] By: mbeattie on 1998/05/29 12:02:17 + Log: Integrate from win32 branch into mainline (this now pulls in the + asperl stuff). + Branch: perl + +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h + +> ipsock.h ipstdio.h objpp.h t/lib/h2ph.h t/lib/h2ph.pht + +> t/lib/h2ph.t win32/GenCAPI.pl + !> (integrate 104 files) +____________________________________________________________________________ +[ 1060] By: gsar on 1998/05/29 11:05:50 + Log: reverse integrate asperl branch contents (phew!) + - various fixups to ensure AS stuff does no harm + - adjust win32/makefiles for the new directory layout (new layout + looks rather a muddle--needs rework) + - verified build & test on NT and Solaris/gcc + Branch: win32/perl + +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h + +> ipsock.h ipstdio.h objpp.h win32/GenCAPI.pl + ! ext/POSIX/POSIX.xs lib/ExtUtils/Mksymlists.pm win32/Makefile + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk + !> (integrate 77 files) +____________________________________________________________________________ +[ 1059] By: gsar on 1998/05/29 08:33:56 + Log: asperl branch verified to build w/o PERL_OBJECT on Solaris and NT + Branch: asperl + ! util.c +____________________________________________________________________________ +[ 1058] By: gsar on 1998/05/29 08:31:09 + Log: type xtext for *.t that were missing it + Branch: asperl + ! t/lib/thread.t t/op/nothread.t +____________________________________________________________________________ +[ 1057] By: gsar on 1998/05/29 08:28:46 + Log: stray t/op/ipc*.t fixups + Branch: win32/perl + ! t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 1056] By: gsar on 1998/05/29 07:41:49 + Log: fixups to make it build and pass tests under both compilers + Branch: asperl + ! ObjXSub.h objpp.h proto.h +____________________________________________________________________________ +[ 1055] By: gsar on 1998/05/29 07:22:51 + Log: integrate mainline changes + Branch: asperl + +> t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t + !> (integrate 69 files) + Branch: win32/perl + ! Todo.5.005 pod/perldelta.pod +____________________________________________________________________________ +[ 1054] By: gsar on 1998/05/29 05:04:03 + Log: add a txt_compare() routine to t/h2ph.t for DOSISH sanity + Branch: win32/perl + ! t/lib/h2ph.t +____________________________________________________________________________ +[ 1053] By: gsar on 1998/05/29 05:01:54 + Log: misc changes + - remove code that works around lack of I_STDARG (we're a happy ANSI family) + - leave dump_foo() stubs when not -DDEBUGGING for consistent symbol exports + Branch: win32/perl + ! deb.c dump.c ext/DynaLoader/dlutils.c ext/POSIX/POSIX.xs + ! perl.h perlio.c proto.h regcomp.c run.c scope.c sv.c util.c + ! x2p/util.c x2p/util.h +____________________________________________________________________________ +[ 1052] By: gsar on 1998/05/29 02:31:44 + Log: merge changes#1014,1038 from maintbranch + Branch: win32/perl + + t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t + ! MANIFEST Makefile.SH doio.c ext/POSIX/POSIX.xs gv.c + ! lib/Benchmark.pm lib/ExtUtils/MM_Unix.pm pod/perldebug.pod + ! pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod + ! pod/perlre.pod pod/perltie.pod pod/perltrap.pod sv.c + ! t/io/pipe.t utils/h2ph.PL +____________________________________________________________________________ +[ 1051] By: gsar on 1998/05/29 01:38:51 + Log: regenerate win32/config_H.?c + Branch: win32/perl + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc +____________________________________________________________________________ +[ 1050] By: gsar on 1998/05/29 01:32:41 + Log: integrate mainline + Branch: win32/perl + ! win32/Makefile win32/makefile.mk + !> Configure INSTALL MANIFEST Porting/Glossary Porting/config.sh + !> Porting/config_H Porting/patching.pod config_h.SH doio.c + !> ext/POSIX/hints/sunos_4.pl hints/bsdos.sh hints/openbsd.sh + !> hints/solaris_2.sh hints/sunos_4_1.sh hints/svr4.sh + !> lib/FileHandle.pm patchlevel.h perl.h plan9/config.plan9 + !> vms/config.vms win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1049] By: gsar on 1998/05/29 00:57:05 + Log: fix various shenanigans with C, BC and VC builds now pass + all tests + Branch: asperl + ! globals.c win32/Makefile win32/makefile.mk win32/runperl.c + ! win32/win32.h win32/win32iop.h +____________________________________________________________________________ +[ 1048] By: mbeattie on 1998/05/28 18:07:24 + Log: Integrated win32 branch into mainline. The changes to t/op/ipc*.t + in change 1043 clashed badly with changes made in the win32 + branch. I did an accept on the win32 branch version for now. + Branch: perl + +> t/op/die.t + !> (integrate 52 files) +____________________________________________________________________________ +[ 1047] By: mbeattie on 1998/05/28 17:59:18 + Log: From: Andy Dougherty + Subject: [PATCH 5.004_65] Config_65-02-03.diff: SunOS and Solaris hints + Date: Thu, 28 May 1998 13:27:25 -0400 (EDT) + Subject: [PATCH 5.004_65] Config_65-03-04.diff: semctl probing + Date: Thu, 28 May 1998 13:28:21 -0400 (EDT) + Branch: perl + ! Configure MANIFEST Porting/Glossary Porting/config.sh + ! Porting/config_H config_h.SH doio.c ext/POSIX/hints/sunos_4.pl + ! hints/solaris_2.sh hints/sunos_4_1.sh perl.h vms/config.vms + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1046] By: mbeattie on 1998/05/28 17:55:48 + Log: Back out change 1043 since Andy's forthcoming Config patch + includes a modified version. + Branch: perl + ! Configure config_h.SH doio.c perl.h +____________________________________________________________________________ +[ 1045] By: mbeattie on 1998/05/28 17:52:40 + Log: Bump patchlevel.h to 66. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 1044] By: mbeattie on 1998/05/28 17:51:49 + Log: From: Daniel Grisinger + Subject: [PATCH] _04m2 perlfunc.pod (fwd) + Date: Fri, 15 May 1998 16:18:26 -0600 (MDT) + (above minus the t/system.t test pending checking) + Subject: [PATCH] 5.004[04|65] FileHandle.pm + Date: Wed, 20 May 1998 19:50:50 -0600 (MDT) + Subject: [PATCH] _65 and _04 patching.pod + Date: Thu, 21 May 1998 16:33:03 -0600 (MDT) + Branch: perl + ! Porting/patching.pod lib/FileHandle.pm pod/perlfunc.pod +____________________________________________________________________________ +[ 1043] By: mbeattie on 1998/05/28 17:42:21 + Log: This change really is: + Subject: [PATCH] 5.004_65: the infamous semctl() + Date: Sun, 24 May 1998 16:13:21 +0300 (EET DST) + From: Jarkko Hietaniemi + + Change 1041 claimed to be this patch but was really: + Subject: [PATCH] 5.004_65: t/op/ipc*.t + Date: Sat, 16 May 1998 00:52:39 +0300 (EET DST) + From: Jarkko Hietaniemi + Branch: perl + ! Configure config_h.SH doio.c perl.h +____________________________________________________________________________ +[ 1042] By: mbeattie on 1998/05/28 17:36:57 + Log: From: Andy Dougherty + Subject: [PATCH 5.004_65] Config_65-01: lchown() detection. + Date: Thu, 28 May 1998 13:25:21 -0400 (EDT) + Subject: [PATCH 5.004_65] Config_65-01-02.diff: INSTALL and hints fixes + Date: Thu, 28 May 1998 13:26:18 -0400 (EDT) + Branch: perl + ! Configure INSTALL Porting/Glossary Porting/config.sh + ! Porting/config_H config_h.SH doio.c hints/bsdos.sh + ! hints/openbsd.sh hints/svr4.sh plan9/config.plan9 + ! vms/config.vms win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 1041] By: mbeattie on 1998/05/28 17:34:26 + Log: Subject: [PATCH] 5.004_65: the infamous semctl() + Date: Sun, 24 May 1998 16:13:21 +0300 (EET DST) + From: Jarkko Hietaniemi + Branch: perl + ! t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 1040] By: gsar on 1998/05/28 02:06:47 + Log: tweaks to enable Borland build + Branch: asperl + ! win32/makefile.mk win32/win32.c +____________________________________________________________________________ +[ 1039] By: gsar on 1998/05/27 23:29:22 + Log: remove C<#define index strchr> from win32.h (unused, and the + pollution causes spurious variable name changes in extensions) + Branch: win32/perl + ! win32/win32.h +____________________________________________________________________________ +[ 1038] By: TimBunce on 1998/05/27 17:29:15 + Log: Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "add utilities to make test dependencies" + From: Robin Barker + Msg-ID: <2607.9805211303@tempest.cise.npl.co.uk> + Files: Makefile.SH + + Title: "Add 'make nok' complement to 'make ok'" + From: "M.J.T. Guy" + Msg-ID: + Files: Makefile.SH + + Title: "further h2ph patches (add enum support)" + From: Billy + Msg-ID: + Files: MANIFEST t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL + + ------ CORE LANGUAGE ------ + + Title: "Fix %! error spelling and add perldiag.pod entry" + From: Graham Barr , Tim Bunce + Msg-ID: <19980524193101.A573@pobox.com> + Files: pod/perldiag.pod gv.c + + Title: "Remove obsolete Win32 uppercasing ENV code" + From: Gurusamy Sarathy + Msg-ID: <199805201510.LAA28676@aatma.engin.umich.edu> + Files: perl.c + + Title: "Don't mung $! on implicit close" + From: Chip Salzenberg + Msg-ID: <19980525113309.A15845@perlsupport.com> + Files: doio.c + + Title: "Maint trial 3 fails on SunOS 4.1.3 with Sun cc" + From: Andy Dougherty + Msg-ID: + Files: doio.c + + ------ DOCUMENTATION ------ + + Title: "doc patch: you canna return an array ( list context: || vs or)" + From: Jarkko Hietaniemi + Msg-ID: + Files: pod/perldebug.pod pod/perlfunc.pod pod/perltie.pod pod/perltrap.pod + + Title: "doc patch: @ needs escaping in m/\Q\E/ environment" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlop.pod pod/perlre.pod + + Title: "Discrepancy between perlop.pod and m// operator", "Doc fix: Only + with /g does list context get matches without parens" + From: Greg Chapman , Tom Christiansen + , Tom Phoenix + + Msg-ID: <000201bd865e$f3bf72e0$1f04400c@assigned.well.com>, + <199805231559.JAA21316@jhereg.perl.com>, + + Files: pod/perlop.pod + + Title: "Documenting last/next/redo even further" + From: "M.J.T. Guy" , Tom Phoenix + + Msg-ID: , + + Files: pod/perlfunc.pod + + Title: "Documenting last/next/redo within continue block" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: "Document stat return in scalar context" + From: Mark-Jason Dominus + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "Better LD_RUN_PATH handling on IRIX" + From: "W. Phillip Moore" + Msg-ID: <199805212206.SAA07504@zappa.morgan.com> + Files: lib/ExtUtils/MM_Unix.pm + + Title: "Dealing with in POSIX and SunOS" + From: Andy Dougherty + Msg-ID: + Files: ext/POSIX/hints/sunos_4.pl hints/sunos_4_1.sh ext/POSIX/POSIX.xs + + ------ LIBRARY ------ + + Title: "Fix FileHandle.pm example bug" + From: Daniel Grisinger + Msg-ID: + Files: lib/FileHandle.pm + + Title: "Add zero/negative $count docs for Benchmark.pm" + From: "M.J.T. Guy" + Msg-ID: + Files: lib/Benchmark.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Add test suite recommendations to Porting/patching.pod" + From: Daniel Grisinger + Msg-ID: + Files: Porting/patching.pod + + ------ TESTS ------ + + Title: "Fix looping bug in t/io/pipe.t" + From: "M.J.T. Guy" + Msg-ID: + Files: t/io/pipe.t + Branch: maint-5.004/perl + ! MANIFEST Makefile.SH Porting/patching.pod doio.c + ! ext/POSIX/POSIX.xs ext/POSIX/hints/sunos_4.pl gv.c + ! hints/sunos_4_1.sh lib/Benchmark.pm lib/ExtUtils/MM_Unix.pm + ! lib/FileHandle.pm perl.c pod/perldebug.pod pod/perldiag.pod + ! pod/perlfunc.pod pod/perlop.pod pod/perlre.pod pod/perltie.pod + ! pod/perltrap.pod t/io/pipe.t t/lib/h2ph.pht t/lib/h2ph.t + ! utils/h2ph.PL +____________________________________________________________________________ +[ 1037] By: gsar on 1998/05/27 16:18:30 + Log: add AS patch#22 (fix to make die_exit.t pass) + Branch: asperl + ! win32/runperl.c +____________________________________________________________________________ +[ 1036] By: gsar on 1998/05/27 12:50:34 + Log: add AS patch#21 (misc. fixes) + Branch: asperl + ! ObjXSub.h lib/ExtUtils/MM_Unix.pm objpp.h perl.h + ! win32/GenCAPI.pl win32/Makefile win32/makefile.mk + ! win32/win32.c win32/win32sck.c +____________________________________________________________________________ +[ 1035] By: gsar on 1998/05/26 17:26:17 + Log: more changes to satisfy non-debug VC build (C-API doesn't + build, and the testsuite still won't run) + Branch: asperl + ! ObjXSub.h deb.c dump.c ext/POSIX/POSIX.xs globals.c proto.h + ! regcomp.c run.c scope.c sv.c util.c win32/GenCAPI.pl +____________________________________________________________________________ +[ 1034] By: gsar on 1998/05/26 17:20:22 + Log: remove doubled hunk (perforce auto-integrate oddity) + Branch: win32/perl + ! pod/perldiag.pod +____________________________________________________________________________ +[ 1033] By: gsar on 1998/05/26 13:39:14 + Log: tweaks to make it build with the Borland compiler. Won't run + testsuite because @INC intuition from location of perlcore.dll seems + to be broken. Also, system() and qx// seem broken as well. + Branch: asperl + ! ObjXSub.h doio.c embedvar.h ext/POSIX/POSIX.xs interp.sym + ! intrpvar.h objpp.h perl.c perl.h perlvars.h proto.h regcomp.c + ! regexec.c toke.c +____________________________________________________________________________ +[ 1032] By: gsar on 1998/05/24 23:13:05 + Log: tweak Benchmark.pm to restore old timestr() behavior--show wall secs + Branch: win32/perl + ! lib/Benchmark.pm +____________________________________________________________________________ +[ 1031] By: gsar on 1998/05/24 05:36:44 + Log: tweak makefiles + Branch: asperl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 1030] By: gsar on 1998/05/23 18:58:23 + Log: merge changes#1016,1018 from maintbranch (1017 is n/a) + Branch: win32/perl + ! pp_sys.c t/op/die.t +____________________________________________________________________________ +[ 1029] By: gsar on 1998/05/23 18:55:13 + Log: merge change#1015 from maintbranch (must revisit 1014 later, is + incomplete) + Branch: win32/perl + ! embed.h global.sym op.c pp.c proto.h sv.c +____________________________________________________________________________ +[ 1028] By: gsar on 1998/05/23 18:25:14 + Log: merge change#1013 from maintbranch (1012 is n/a) + Branch: win32/perl + ! toke.c +____________________________________________________________________________ +[ 1027] By: gsar on 1998/05/23 18:02:21 + Log: merge change#1011 from maintbranch + Branch: win32/perl + ! perl.c pod/perldiag.pod pod/perlfunc.pod pp_ctl.c + ! utils/perlbug.PL +____________________________________________________________________________ +[ 1026] By: nick on 1998/05/23 08:45:04 + Log: Ids of msgs and sems can be zero, so change || die to a defined() test + Branch: win32/perl + ! t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 1025] By: nick on 1998/05/23 08:36:36 + Log: Resolve win32 into ansiperl + Branch: ansiperl + +> t/op/die.t + !> (integrate 42 files) +____________________________________________________________________________ +[ 1024] By: gsar on 1998/05/21 21:11:12 + Log: more mingw32 tweaks + Branch: win32/perl + ! ext/POSIX/POSIX.xs t/pragma/locale.t +____________________________________________________________________________ +[ 1023] By: gsar on 1998/05/21 19:15:02 + Log: fix problematic change#965 from maintbranch + Message-Id: <199805162145.RAA02552@monk.mps.ohio-state.edu> + Date: Sat, 16 May 1998 17:45:22 EDT + From: Ilya Zakharevich + Subject: Re: Not OK (after all) : perl 5.00404 +MAINT_TRIAL_3 on sun4-solaris 2.5 + Branch: win32/perl + ! gv.c op.c t/comp/proto.t +____________________________________________________________________________ +[ 1022] By: gsar on 1998/05/21 01:37:04 + Log: fix POSIX for mingw32 + Branch: win32/perl + ! ext/POSIX/POSIX.xs win32/config.gc win32/config_H.gc +____________________________________________________________________________ +[ 1021] By: gsar on 1998/05/20 15:02:21 + Log: remove strupr() from perl.c + Branch: win32/perl + ! perl.c +____________________________________________________________________________ +[ 1020] By: TimBunce on 1998/05/19 22:41:40 + Log: Title: "fix up descrepancy in h2ph test" + From: Tim Bunce + Files: t/lib/h2ph.pht + Branch: maint-5.004/perl + ! t/lib/h2ph.pht +____________________________________________________________________________ +[ 1019] By: TimBunce on 1998/05/19 22:17:15 + Log: Title: "add a test to check return value from successful s/// (there was none!)" + From: Gurusamy Sarathy + Msg-ID: <199805161759.NAA12995@aatma.engin.umich.edu> + Files: t/op/subst.t + + Title: "fix up descrepancy in h2ph test" + From: Tim Bunce + Files: t/lib/h2ph.t + Branch: maint-5.004/perl + ! t/lib/h2ph.t t/op/subst.t +____________________________________________________________________________ +[ 1018] By: TimBunce on 1998/05/19 21:56:32 + Log: Title: "fix mem leak and core dump from change 1016" + From: Tim Bunce + Files: pp_sys.c + Branch: maint-5.004/perl + ! pp_sys.c +____________________________________________________________________________ +[ 1017] By: TimBunce on 1998/05/19 21:26:03 + Log: Title: "qsort, Win32 "POSIX" plus other devel changes for patch-compatibility" + From: Gurusamy Sarathy + Files: MANIFEST cflags.SH pod/perlembed.pod pod/perlfunc.pod + pod/perlguts.pod pod/perlref.pod pod/perlrun.pod + pod/perlxstut.pod av.h embed.h hv.h op.h perl.h pp.h + proto.h Todo av.c cygwin32/perlgcc cygwin32/perlld deb.c + doio.c doop.c ext/ODBM_File/ODBM_File.xs + ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + gv.c hv.c interp.sym lib/AutoSplit.pm lib/Cwd.pm + lib/FindBin.pm lib/strict.pm lib/ExtUtils/Command.pm + lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm + lib/ExtUtils/Manifest.pm lib/File/Basename.pm + lib/File/Find.pm lib/File/Path.pm lib/Getopt/Long.pm + lib/Getopt/Std.pm lib/Net/Ping.pm lib/Pod/Html.pm + lib/Pod/Text.pm lib/Term/Cap.pm lib/Test/Harness.pm mg.c + op.c perl.c pod/pod2latex.PL pod/pod2man.PL pp.c pp_ctl.c + pp_hot.c pp_sys.c scope.c sv.c t/lib/posix.t + t/pragma/locale.t utils/perldoc.PL win32/win32.h toke.c + universal.c util.c win32/Makefile win32/config_H.bc + win32/config_H.vc win32/dl_win32.xs win32/makedef.pl + win32/makefile.mk win32/perlglob.c win32/runperl.c + win32/win32.c win32/win32sck.c x2p/s2p.PL + Branch: maint-5.004/perl + ! MANIFEST Todo av.c av.h cflags.SH cygwin32/perlgcc + ! cygwin32/perlld deb.c doio.c doop.c embed.h + ! ext/ODBM_File/ODBM_File.xs ext/POSIX/Makefile.PL + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs gv.c hv.c hv.h + ! interp.sym lib/AutoSplit.pm lib/Cwd.pm lib/ExtUtils/Command.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm + ! lib/ExtUtils/Manifest.pm lib/File/Basename.pm lib/File/Find.pm + ! lib/File/Path.pm lib/FindBin.pm lib/Getopt/Long.pm + ! lib/Getopt/Std.pm lib/Net/Ping.pm lib/Pod/Html.pm + ! lib/Pod/Text.pm lib/Term/Cap.pm lib/Test/Harness.pm + ! lib/strict.pm mg.c op.c op.h perl.c perl.h pod/perlembed.pod + ! pod/perlfunc.pod pod/perlguts.pod pod/perlref.pod + ! pod/perlrun.pod pod/perlxstut.pod pod/pod2latex.PL + ! pod/pod2man.PL pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h + ! scope.c sv.c t/lib/posix.t t/pragma/locale.t toke.c + ! universal.c util.c utils/perldoc.PL win32/Makefile + ! win32/config_H.bc win32/config_H.vc win32/dl_win32.xs + ! win32/makedef.pl win32/makefile.mk win32/perlglob.c + ! win32/runperl.c win32/win32.c win32/win32.h win32/win32sck.c + ! x2p/s2p.PL +____________________________________________________________________________ +[ 1016] By: TimBunce on 1998/05/19 20:37:42 + Log: Title: "eval { die $obj }; die; calls $obj->PROPAGATE" + From: Graham Barr + Msg-ID: <3561D147.7F3E0C88@ti.com> + Files: pp_sys.c t/op/die.t + Branch: maint-5.004/perl + ! pp_sys.c t/op/die.t +____________________________________________________________________________ +[ 1015] By: TimBunce on 1998/05/19 20:07:01 + Log: Title: "loosen const sub re-defined warnings" + From: Doug MacEachern + Msg-ID: <355F713B.6A4C0F04@pobox.com> + Files: proto.h global.sym op.c pp.c sv.c + Branch: maint-5.004/perl + ! global.sym op.c pp.c proto.h sv.c +____________________________________________________________________________ +[ 1014] By: TimBunce on 1998/05/19 19:48:18 + Log: Title: "s/FORMLINE/FORMAT/ in sv.c" + From: Hugo van der Sanden + Msg-ID: + Files: sv.c + + Title: "Further h2ph patches (including a test suite)" + From: Billy + Msg-ID: + Files: MANIFEST t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL + Branch: maint-5.004/perl + + t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t + ! MANIFEST sv.c utils/h2ph.PL +____________________________________________________________________________ +[ 1013] By: TimBunce on 1998/05/19 19:14:13 + Log: Title: "Remove change 673 (Allow empty BLOCK in code)" + From: Gurusamy Sarathy , Ilya Zakharevich + + Msg-ID: <199805151857.OAA29586@monk.mps.ohio-state.edu>, + <199805151931.PAA23086@aatma.engin.umich.edu>, + <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 1012] By: TimBunce on 1998/05/19 19:03:32 + Log: Title: "Further SysV sem/msg fixes and removal of non-portable tests" + From: Andy Dougherty , Jarkko Hietaniemi + + Msg-ID: <199805182028.XAA15717@alpha.hut.fi>, + + Files: MANIFEST Configure config_h.SH perl.h doio.c t/op/ipcmsg.t + t/op/ipcsem.t + Branch: maint-5.004/perl + ! Configure MANIFEST config_h.SH doio.c perl.h t/op/ipcmsg.t + ! t/op/ipcsem.t +____________________________________________________________________________ +[ 1011] By: TimBunce on 1998/05/19 17:55:38 + Log: Title: "interp.sym is missing C after -e fix" + From: jan.dubois@ibm.net (Jan Dubois) + Msg-ID: <355d460d.7621669@smtp1.ibm.net> + Files: embed.h interp.sym + + Title: "Undo changed error message which breaks Tk" + From: Gurusamy Sarathy + Msg-ID: <199805161557.LAA08106@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "Minor fixups to new -e script code" + From: Tim Bunce + Files: perl.c + + Title: "Remove old diags not relevant after -e fix" + From: Andy Dougherty , Gurusamy Sarathy + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199805172143.RAA07896@aatma.engin.umich.edu>, + <199805181335.OAA07008@toad.ig.co.uk>, + + Files: pod/perldiag.pod + + Title: "more examples for vec()" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: ""make ok" (perlbug -ok) should not be interactive" + From: Hugo van der Sanden , Jarkko Hietaniemi + + Msg-ID: <199805160942.MAA20171@alpha.hut.fi>, + + Files: utils/perlbug.PL + Branch: maint-5.004/perl + ! embed.h interp.sym perl.c pod/perldiag.pod pod/perlfunc.pod + ! pp_ctl.c utils/perlbug.PL +____________________________________________________________________________ +[ 1010] By: gsar on 1998/05/18 09:40:58 + Log: integrate mainline changes (untested) + Branch: asperl + +> Porting/Contract Porting/patching.pod README.beos beos/nm.c + +> ext/DynaLoader/DynaLoader.pm.PL ext/POSIX/hints/bsdos.pl + +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl + +> ext/POSIX/hints/openbsd.pl hints/beos.sh hints/openbsd.sh + +> pod/perldelta4.pod t/op/defins.t t/op/die.t t/op/die_exit.t + +> t/op/ipcmsg.t t/op/ipcsem.t t/op/pos.t utils/perlcc.PL + - ext/DynaLoader/DynaLoader.pm + ! win32/win32.c + !> (integrate 234 files) +____________________________________________________________________________ +[ 1009] By: gsar on 1998/05/18 07:51:19 + Log: more whitespace tweaks from maintbranch + Branch: win32/perl + ! av.c perl.c pp_ctl.c pp_sys.c toke.c +____________________________________________________________________________ +[ 1008] By: gsar on 1998/05/17 22:37:20 + Log: sundry whitespace cleanups from maintbranch + Branch: win32/perl + ! Porting/Contract XSUB.h av.c gv.c mg.c perl.c +____________________________________________________________________________ +[ 1007] By: gsar on 1998/05/16 21:59:46 + Log: integrate mainline + Branch: win32/perl + !> INSTALL doio.c lib/strict.pm perl.c perl.h pod/perldebug.pod + !> t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 1006] By: gsar on 1998/05/16 21:54:23 + Log: merge changes#996,998,999 from maintbranch + Branch: win32/perl + ! Changes5.004 Porting/makerel t/base/lex.t toke.c +____________________________________________________________________________ +[ 1005] By: gsar on 1998/05/16 21:49:47 + Log: merge change#995 from maintbranch, tweak interp.sym and + run embed.pl + Branch: win32/perl + ! embedvar.h interp.sym intrpvar.h perl.c +____________________________________________________________________________ +[ 1004] By: gsar on 1998/05/16 21:27:18 + Log: merge changes#989,990,992 from maintbranch + Branch: win32/perl + + t/op/die.t + ! MANIFEST installperl pod/perldiag.pod pp_ctl.c t/op/ipcmsg.t +____________________________________________________________________________ +[ 1003] By: gsar on 1998/05/16 21:16:47 + Log: sync config*.gc with others, and verify that nothing from + change#986 needs to be merged + Branch: win32/perl + ! win32/config.gc win32/config_H.gc +____________________________________________________________________________ +[ 1002] By: gsar on 1998/05/16 21:04:04 + Log: merge change#985 from maintbranch + Branch: win32/perl + ! lib/AutoSplit.pm lib/ExtUtils/Manifest.pm pp_ctl.c pp_sys.c + ! util.c +____________________________________________________________________________ +[ 1001] By: gsar on 1998/05/16 17:53:16 + Log: add a test to check return value from successful s/// (there was none!) + Branch: win32/perl + ! t/op/subst.t +____________________________________________________________________________ +[ 1000] By: gsar on 1998/05/16 17:42:34 + Log: fix misplaced SPAGAIN that caused successful s/// to fail to + return a value on the stack + Branch: win32/perl + ! pp_hot.c +____________________________________________________________________________ +[ 999] By: TimBunce on 1998/05/15 23:04:30 + Log: Title: "Update Porting/makerel script for perforce dir structure" + From: Tim Bunce + Files: Porting/makerel + Branch: maint-5.004/perl + ! Porting/makerel +____________________________________________________________________________ +[ 998] By: TimBunce on 1998/05/15 22:49:55 + Log: Title: "Updated Changes file for trial 3" + From: Tim Bunce + Files: Changes + Branch: maint-5.004/perl + ! Changes +____________________________________________________________________________ +[ 997] By: gsar on 1998/05/15 22:21:41 + Log: merge changes#982,984 from maintbranch + Branch: win32/perl + ! gv.c lib/English.pm perl.c pod/perlfunc.pod t/io/pipe.t + ! t/op/exec.t t/op/ipcsem.t util.c utils/h2ph.PL utils/h2xs.PL +____________________________________________________________________________ +[ 996] By: TimBunce on 1998/05/15 22:19:32 + Log: Title: "Negative array subscript unrecognized in regex" + From: Mark-Jason Dominus , + h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <19980425040819.13828.qmail@plover.com>, + <199805151514.RAA04121@dorlas.elsevier.nl> + Files: t/base/lex.t toke.c + + Title: "Remove e_fp from toke.c after change 955" + From: Tim Bunce + Files: toke.c + Branch: maint-5.004/perl + ! t/base/lex.t toke.c +____________________________________________________________________________ +[ 995] By: TimBunce on 1998/05/15 22:08:32 + Log: Title: "Fix -e security hole (no longer uses temp file)" + From: Tim Bunce + Files: embed.h perl.h perl.c + Branch: maint-5.004/perl + ! embed.h perl.c perl.h +____________________________________________________________________________ +[ 994] By: gsar on 1998/05/15 22:08:17 + Log: merge change#981 from maintbranch, add XXX comment about + supporting %! for usethreads case + Branch: win32/perl + ! gv.c op.c +____________________________________________________________________________ +[ 992] By: TimBunce on 1998/05/15 22:01:32 + Log: Title: "install non-backwards compatible .pm files into archlib" + From: Tim Bunce + Files: installperl + + Title: "revert "Can't locate" message to original for maintenance" + From: Tim Bunce + Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com> + Files: pod/perldiag.pod pp_ctl.c + Branch: maint-5.004/perl + ! installperl pod/perldiag.pod pp_ctl.c +____________________________________________________________________________ +[ 991] By: gsar on 1998/05/15 21:35:00 + Log: reverse integrate ansiperl (all except the + C stuff, and the duplicate hunks) + i.e. prototype fixes, perldoc.PL enhancements, and s/comment/comment_t/g + Branch: win32/perl + !> bytecode.h byterun.c cv.h ext/attrs/attrs.pm + !> ext/attrs/attrs.xs pod/perlop.pod pp_hot.c sv.c toke.c + !> utils/perldoc.PL +____________________________________________________________________________ +[ 990] By: TimBunce on 1998/05/15 16:54:18 + Log: Title: "Add tests for die $ref" + From: Graham Barr + Msg-ID: <355C6297.121B576B@ti.com> + Files: MANIFEST t/op/die.t + Branch: maint-5.004/perl + + t/op/die.t + ! MANIFEST +____________________________________________________________________________ +[ 989] By: TimBunce on 1998/05/15 16:38:19 + Log: Title: "Fix t/op/ipcmsg.t for Digital UNIX" + From: Jarkko Hietaniemi + Msg-ID: <199805151337.QAA01174@alpha.hut.fi> + Files: t/op/ipcmsg.t + Branch: maint-5.004/perl + ! t/op/ipcmsg.t +____________________________________________________________________________ +[ 988] By: mbeattie on 1998/05/15 16:28:08 + Log: Patch from Sarathy to fix up win32 integration. Patch from Jarkko + (manually applied and tweaked) to fix up SysV IPC semaphores for + Solaris and Linux (pre-glibc and glibc). Fix up t/op/ipcmsg.t and + t/op/ipcsem.t for platforms which wanted to skip test. Completely + disable ipcsem.t since it doesn't seem to work properly even when + not skipped. This is _65. + Branch: perl + ! INSTALL doio.c lib/strict.pm perl.c perl.h pod/perldebug.pod + ! t/op/ipcmsg.t t/op/ipcsem.t +____________________________________________________________________________ +[ 987] By: nick on 1998/05/15 16:03:35 + Log: Integrate win32 + Branch: ansiperl + +> Porting/Contract Porting/patching.pod README.beos beos/nm.c + +> ext/DynaLoader/DynaLoader.pm.PL ext/POSIX/hints/bsdos.pl + +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl + +> ext/POSIX/hints/openbsd.pl hints/beos.sh hints/openbsd.sh + +> pod/perldelta4.pod t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t + +> t/op/pos.t utils/perlcc.PL + - ext/DynaLoader/DynaLoader.pm + !> (integrate 208 files) +____________________________________________________________________________ +[ 986] By: TimBunce on 1998/05/15 15:28:45 + Log: Title: "Patches for BeOS port of Perl, courtesy of Tom Spindler" + From: Jarkko Hietaniemi , Tom Spindler + Msg-ID: <199805042312.CAA09025@alpha.hut.fi> + Files: MANIFEST Configure config_h.SH hints/beos.sh pod/perlfunc.pod + Porting/Glossary README.beos beos/nm.c lib/Term/ReadLine.pm + plan9/config.plan9 pp_sys.c t/io/pipe.t vms/config.vms + win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc + Branch: maint-5.004/perl + + README.beos beos/nm.c hints/beos.sh + ! Configure MANIFEST Porting/Glossary config_h.SH + ! lib/Term/ReadLine.pm plan9/config.plan9 pod/perlfunc.pod + ! pp_sys.c t/io/pipe.t vms/config.vms win32/config.bc + ! win32/config.vc win32/config_H.bc win32/config_H.vc +____________________________________________________________________________ +[ 985] By: TimBunce on 1998/05/15 15:02:43 + Log: Title: "allow die $ref" + From: Graham Barr , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199805151351.OAA01985@toad.ig.co.uk>, <355C3E67.AF25B9F7@ti.com> + Files: pp_ctl.c pp_sys.c util.c + + Title: "ExtUtils::Manifest could truncate files during "make dist"" + From: "James E Jurach Jr." , + koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: <199805111048.MAA02573@arrakis.int.ein.cz>, + + Files: lib/ExtUtils/Manifest.pm + + Title: "Autosplit doesn't like upper case letters in sub names on VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980330152332.009cb130@osshe.edu> + Files: lib/AutoSplit.pm + + Title: "AutoSplit/AutoLoaded subs: give useful line numbers in warnings etc" + From: "Jesse N. Glick" , koenig@anna.mind.de (Andreas + J. Koenig), larry@wall.org (Larry Wall) + Msg-ID: <199709292015.NAA09627@wall.org>, <342FCDDF.23534195@sig.bsh.com>, + , + + Files: lib/AutoSplit.pm + Branch: maint-5.004/perl + ! lib/AutoSplit.pm lib/ExtUtils/Manifest.pm pp_ctl.c pp_sys.c + ! util.c +____________________________________________________________________________ +[ 984] By: TimBunce on 1998/05/15 14:18:52 + Log: ------ CORE LANGUAGE ------ + + Title: "Fix close pipe returning status from wrong child" + From: "M.J.T. Guy" , kstar@chapin.edu@ig.co.uk () + Msg-ID: <199805142313.TAA02684@chapin.edu>, + + Files: t/io/pipe.t util.c + + Title: "Avoid English.pm triggering load of Errno.pm" + From: Tim Bunce + Files: gv.c lib/English.pm + + ------ DOCUMENTATION ------ + + Title: "Document child exit cause a parent sleep to end early" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "BSD Platforms need STRUCT_TM_HASZONE for POSIX" + From: Andy Dougherty + Msg-ID: + Files: MANIFEST ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl + + Title: "MM_VMS.pm fixes for building external library" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980511160542.009dd480@ous.edu> + Files: lib/ExtUtils/MM_VMS.pm + + Title: "Appease picky DEC compiler in POSIX.xs" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980511161434.009f8bb0@ous.edu> + Files: ext/POSIX/POSIX.xs + + ------ TESTS ------ + + Title: "Fix constant detection in t/op/ipcsem.t for Digit UNIX" + From: Jarkko Hietaniemi + Msg-ID: <199805121212.PAA15351@alpha.hut.fi> + Files: t/op/ipcsem.t + + Title: "Fix doc bug for system() return value" + From: Daniel Grisinger + Msg-ID: + Files: pod/perlfunc.pod t/op/exec.t + + ------ UTILITIES ------ + + Title: "Avoid possible constant autoload loop" + From: "M.J.T. Guy" , Graham Barr , Ilya + Zakharevich + Msg-ID: <199805141910.PAA26994@monk.mps.ohio-state.edu>, + <355B475A.C5AD4B90@ti.com>, + + Files: utils/h2xs.PL + + Title: "Further improvements to h2ph.PL" + From: kstar@chapin.edu + Msg-ID: <199805130241.WAA25459@chapin.edu> + Files: utils/h2ph.PL + Branch: maint-5.004/perl + + ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl + + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl + ! MANIFEST ext/POSIX/POSIX.xs gv.c lib/English.pm + ! lib/ExtUtils/MM_VMS.pm pod/perlfunc.pod t/io/pipe.t + ! t/op/exec.t t/op/ipcsem.t util.c utils/h2ph.PL utils/h2xs.PL + +---------------- +Version 5.004_64 +---------------- + +____________________________________________________________________________ +[ 983] By: mbeattie on 1998/05/15 14:04:17 + Log: Integrate win32 branch into mainline. + Branch: perl + +> Porting/patching.pod t/op/defins.t + !> (integrate 107 files) +____________________________________________________________________________ +[ 982] By: TimBunce on 1998/05/15 12:33:26 + Log: Title: "comment init_postdump_symbols issues" + From: Tim Bunce + Files: perl.c + + Title: "Improve sort docs re SUBNAME" + From: circle@azstarnet.com + Msg-ID: <199804281828.LAA22737@andromeda.azstarnet.com> + Files: pod/perlfunc.pod + Branch: maint-5.004/perl + ! perl.c pod/perlfunc.pod +____________________________________________________________________________ +[ 981] By: TimBunce on 1998/05/15 11:47:28 + Log: Title: "Add hook to tie %! to external Errno.pm module (not included)" + From: Graham Barr + Msg-ID: <355080CD.1111BC81@ti.com> + Files: gv.c + Branch: maint-5.004/perl + ! gv.c +____________________________________________________________________________ +[ 980] By: gsar on 1998/05/15 06:16:13 + Log: add doc for C<+{}> vs. C<{;}> disambiguation + Branch: win32/perl + ! pod/perlref.pod +____________________________________________________________________________ +[ 979] By: gsar on 1998/05/15 04:59:47 + Log: tweaks to win32 makefiles. This version builds and passes all + tests on Solaris/gcc, win32/[bv]c. Looks all set to go. + Branch: win32/perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 978] By: gsar on 1998/05/15 02:41:58 + Log: merge changes#922,944,949,965,970 from maintbranch + Branch: win32/perl + + Porting/patching.pod t/op/defins.t + ! MANIFEST Porting/makerel ext/POSIX/POSIX.pod gv.c gv.h hv.c + ! lib/File/Find.pm op.c pod/Makefile pod/perlfunc.pod + ! pod/perlguts.pod pod/perlop.pod pod/pod2man.PL + ! t/lib/filefind.t t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t + ! utils/perlbug.PL +____________________________________________________________________________ +[ 977] By: gsar on 1998/05/15 02:15:25 + Log: merge changes#906,907,909,910 from maintbranch + Branch: win32/perl + ! MANIFEST doio.c doop.c embed.h embedvar.h global.sym + ! keywords.h lib/Carp.pm lib/File/Basename.pm mg.c opcode.h + ! perl.c perl.h pod/perldiag.pod pp.c pp_hot.c proto.h sv.c + ! util.c +____________________________________________________________________________ +[ 976] By: gsar on 1998/05/15 01:34:53 + Log: merge change#905 from maintbranch, minor fixes to get + clean build+test on Solaris + Branch: win32/perl + ! doop.c dump.c embed.h embedvar.h lib/strict.pm mg.c op.h + ! opcode.h pod/perlop.pod pod/perlre.pod pp_ctl.c pp_hot.c + ! regcomp.c sv.c t/op/taint.t toke.c +____________________________________________________________________________ +[ 975] By: gsar on 1998/05/14 23:34:26 + Log: merge change#904 from maintbranch + Branch: win32/perl + ! doop.c ext/DynaLoader/dl_aix.xs ext/IO/lib/IO/Socket.pm + ! ext/NDBM_File/NDBM_File.pm lib/strict.pm lib/subs.pm + ! lib/vars.pm op.c perl.c pod/perldiag.pod pod/perlembed.pod + ! pod/perlfunc.pod pod/perlsec.pod pp_ctl.c sv.c utils/h2ph.PL + ! vms/descrip.mms +____________________________________________________________________________ +[ 974] By: gsar on 1998/05/14 23:11:05 + Log: merge change#897 from maintbranch + Branch: win32/perl + ! Porting/Contract Todo doio.c emacs/ptags embed.h ext/IO/IO.pm + ! ext/Opcode/Opcode.pm lib/Carp.pm lib/ExtUtils/MM_Unix.pm + ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h + ! opcode.pl perl.c pod/perlapio.pod pod/perlcall.pod + ! pod/perldebug.pod pod/perldelta.pod pod/perldelta4.pod + ! pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + ! pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod + ! pod/perlfunc.pod pod/perlguts.pod pod/perlhist.pod + ! pod/perlipc.pod pod/perllocale.pod pod/perlmodlib.pod + ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod + ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL + ! pod/roffitall pp.c pp_sys.c t/TEST t/op/gv.t t/op/hashwarn.t + ! t/op/substr.t vms/vms.c win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/win32.c + ! x2p/find2perl.PL +____________________________________________________________________________ +[ 973] By: gsar on 1998/05/14 22:24:26 + Log: integrate mainline + Branch: win32/perl + + Porting/Contract + +> README.beos beos/nm.c ext/POSIX/hints/bsdos.pl + +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl + +> ext/POSIX/hints/openbsd.pl hints/beos.sh pod/perldelta4.pod + +> utils/perlcc.PL + ! MANIFEST Todo doio.c emacs/ptags embed.h ext/IO/IO.pm + ! ext/Opcode/Opcode.pm ext/Socket/Socket.xs hints/irix_5.sh + ! hints/netbsd.sh hv.c lib/Benchmark.pm lib/Carp.pm + ! lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm + ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h + ! opcode.pl perl.c perl.h pod/perlapio.pod pod/perlcall.pod + ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod + ! pod/perlembed.pod pod/perlfaq2.pod pod/perlfaq3.pod + ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq7.pod + ! pod/perlfaq8.pod pod/perlform.pod pod/perlfunc.pod + ! pod/perlguts.pod pod/perlhist.pod pod/perlipc.pod + ! pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod + ! pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod + ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL + ! pod/roffitall pp.c pp_hot.c pp_sys.c sv.c t/TEST t/op/gv.t + ! t/op/hashwarn.t t/op/substr.t vms/vms.c win32/config.bc + ! win32/config.vc win32/config_H.bc win32/config_H.vc + ! win32/win32.c x2p/find2perl.PL + !> (integrate 59 files) +____________________________________________________________________________ +[ 972] By: nick on 1998/05/14 18:09:01 + Log: Changes to allow compiler with gcc-2.8.1 in C++ mode, + Remove K&R style functions, avoid struct/typedef clash. + Branch: ansiperl + ! bytecode.h byterun.c sv.c toke.c +____________________________________________________________________________ +[ 971] By: TimBunce on 1998/05/14 16:52:19 + Log: + Title: "fix C (pp_refgen fumbles when G_SCALAR, no args)" + From: Gurusamy Sarathy + Msg-ID: <199805070402.AAA02858@aatma.engin.umich.edu> + Files: pp.c + Branch: maint-5.004/perl + ! pp.c +____________________________________________________________________________ +[ 970] By: TimBunce on 1998/05/14 16:18:06 + Log: + Title: "perlbug reformatted" + From: Dominic Dunlop , Hugo van der Sanden + + Msg-ID: <199805110954.LAA20367@dorlas.elsevier.nl>, + , + + Files: utils/perlbug.PL + Branch: maint-5.004/perl + ! utils/perlbug.PL +____________________________________________________________________________ +[ 969] By: mbeattie on 1998/05/14 16:15:09 + Log: Integrate win32 branch into mainline + Branch: perl + +> ext/DynaLoader/DynaLoader.pm.PL hints/openbsd.sh + +> t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/pos.t + - ext/DynaLoader/DynaLoader.pm + !> (integrate 118 files) +____________________________________________________________________________ +[ 968] By: mbeattie on 1998/05/14 16:05:57 + Log: Bump patchlevel to 65 + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 967] By: mbeattie on 1998/05/14 16:05:19 + Log: Another fixup of MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 966] By: mbeattie on 1998/05/14 16:02:20 + Log: Add missing files to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 965] By: TimBunce on 1998/05/14 16:00:11 + Log: + Title: "Sub declaration cost reduced from ~500 to ~100 bytes" + From: Ilya Zakharevich + Msg-ID: <199805050607.CAA02050@monk.mps.ohio-state.edu> + Files: gv.h gv.c op.c + Branch: maint-5.004/perl + ! gv.c gv.h op.c +____________________________________________________________________________ +[ 964] By: mbeattie on 1998/05/14 15:58:01 + Log: Subject: [PATCH] Using Getopts::* with strict vars + Date: Wed, 29 Apr 1998 22:48:16 -0700 (PDT) + From: Tom Phoenix + Branch: perl + ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/strict.pm +____________________________________________________________________________ +[ 963] By: mbeattie on 1998/05/14 15:56:53 + Log: Subject: [ PATCH 5.004_64 ] Integrated regression tests for compiler + Date: Wed, 29 Apr 1998 21:02:36 -0600 (MDT) + From: epeschko@den-mdev1 (Ed Peschko) + Branch: perl + + utils/perlcc.PL + ! MANIFEST Makefile.SH installperl lib/Test/Harness.pm + ! pod/Makefile t/TEST t/harness utils/Makefile x2p/Makefile.SH +____________________________________________________________________________ +[ 962] By: mbeattie on 1998/05/14 15:45:28 + Log: From: Dan Sugalski + Subject: [PATCH 5.004_64] Final (I hope) doc patch for Thread.pm + Date: Wed, 08 Apr 1998 17:08:48 -0700 + Subject: [PATCH 5.004_64] Revised second Thread.PM doc patch + Date: Fri, 08 May 1998 10:49:16 -0700 + Branch: perl + ! ext/Thread/Thread.pm +____________________________________________________________________________ +[ 961] By: mbeattie on 1998/05/14 15:43:39 + Log: Subject: Consolidated patch to 5.004_64 + Date: Wed, 08 Apr 1998 19:44:34 -0400 (EDT) + From: Charles Bailey + Branch: perl + ! ext/B/byteperl.c lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MM_VMS.pm lib/chat2.pl perl.c pod/perlsub.pod + ! vms/config.vms vms/descrip.mms vms/genconfig.pl + ! vms/perlvms.pod +____________________________________________________________________________ +[ 960] By: mbeattie on 1998/05/14 15:41:41 + Log: Subject: Re: ANNOUNCE: Perl 5.005b1t3 (a.k.a. perl5.004_64) is available + Date: 07 Apr 1998 18:31:21 +0200 + From: JVromans@Squirrel.nl (Johan Vromans) + Branch: perl + ! lib/Getopt/Long.pm +____________________________________________________________________________ +[ 959] By: mbeattie on 1998/05/14 15:39:29 + Log: From: Jarkko Hietaniemi + Subject: Re: [PATCH] 5.004_04 or 5.004_64: Benchmark.pm: add run-for-some-time + Date: Wed, 8 Apr 1998 09:47:45 +0300 (EET DST) + Subject: [PATCH] perl 5.004_64+Config_04 + Date: Thu, 14 May 1998 12:14:07 +0300 (EET DST) + Branch: perl + ! lib/Benchmark.pm pod/perlfunc.pod +____________________________________________________________________________ +[ 958] By: mbeattie on 1998/05/14 15:36:30 + Log: From: kstar@chapin.edu + Subject: [PATCH] hints for Irix 6 + Date: Mon, 6 Apr 1998 15:14:14 -0400 (EDT) + Subject: [PATCH 5.004_64] Threads - an easy way for dual installation + Date: Wed, 29 Apr 1998 15:39:46 -0400 (EDT) + Branch: perl + ! INSTALL hints/irix_6.sh installperl +____________________________________________________________________________ +[ 957] By: mbeattie on 1998/05/14 15:33:48 + Log: Subject: [PATCH] Install extensions with bootstrap (again) in $archlib + Date: Mon, 06 Apr 1998 21:09:24 +0200 + From: Achim Bohnet + Branch: perl + ! lib/ExtUtils/Install.pm +____________________________________________________________________________ +[ 956] By: mbeattie on 1998/05/14 15:32:39 + Log: Subject: [PATCH] Config: Irix 5 hints + Date: Mon, 6 Apr 1998 13:12:47 -0400 (EDT) + From: kstar@O2.chapin.edu + Branch: perl + ! hints/irix_5.sh +____________________________________________________________________________ +[ 955] By: mbeattie on 1998/05/14 15:31:12 + Log: Subject: PATCH: h2ph produces incorrect code + Date: Mon, 6 Apr 1998 23:52:13 +0930 (CST) + From: Billy + Branch: perl + ! utils/h2ph.PL +____________________________________________________________________________ +[ 954] By: mbeattie on 1998/05/14 15:29:27 + Log: Subject: [PATCH] perldebug.pod + Date: Mon, 6 Apr 1998 00:36:57 -0600 + From: jason stewart + Branch: perl + ! pod/perldebug.pod +____________________________________________________________________________ +[ 953] By: mbeattie on 1998/05/14 15:28:00 + Log: From: Dominic Dunlop + Subject: [PATCH 5.004_64]: hints/machten.sh: disable semctl() + Date: Wed, 6 May 1998 14:39:32 +0000 + Subject: [PATCH] Not OK: perl 5.00464 on powerpc-machten 4.1 (hashwarn @INC problem) + Date: Sat, 4 Apr 1998 19:44:34 +0000 + Branch: perl + ! hints/machten.sh t/op/hashwarn.t +____________________________________________________________________________ +[ 952] By: mbeattie on 1998/05/14 15:23:19 + Log: New pod/perldelta.pod (previous one branched in last change): + Subject: [PATCH 5.004_64] Start new perldelta + Date: Thu, 23 Apr 1998 12:12:38 -0400 (EDT) + From: Andy Dougherty + Branch: perl + + pod/perldelta.pod +____________________________________________________________________________ +[ 951] By: mbeattie on 1998/05/14 15:20:43 + Log: From: Andy Dougherty + Subject: [PATCH for 5.004_04 and 5.004_64] (Was: Obsoleted svr4.sh) + Date: Thu, 23 Apr 1998 11:10:15 -0400 (EDT) + Subject: [PATCH 5.004_64] Start new perldelta + Date: Thu, 23 Apr 1998 12:12:38 -0400 (EDT) + (above branched perldelta -> perldelta4, new perldelta will be + created/added next change) + Subject: [PATCH] BSD Platforms need STRUCT_TM_HASZONE + Date: Tue, 12 May 1998 09:58:49 -0400 (EDT) + Branch: perl + + ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl + + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl + +> pod/perldelta4.pod + - pod/perldelta.pod + ! MANIFEST hints/svr4.sh +____________________________________________________________________________ +[ 949] By: TimBunce on 1998/05/14 15:11:30 + Log: + Title: "while($x=<>) no longer warns (implicit defined added)" + From: Nick Ing-Simmons + Msg-ID: <199805051035.LAA27365@pluto.tiuk.ti.com> + Files: MANIFEST op.c t/op/defins.t + Branch: maint-5.004/perl + + t/op/defins.t + ! MANIFEST op.c +____________________________________________________________________________ +[ 948] By: mbeattie on 1998/05/14 15:09:51 + Log: From: Andy Dougherty + Subject: [PATCH for 5.004_64] Configure patch Config_64-01 + Date: Tue, 14 Apr 1998 13:04:58 -0400 (EDT) + Subject: [PATCH for 5.004_64] Configure patch Config_64-01-02.diff + Date: Fri, 17 Apr 1998 11:01:13 -0400 (EDT) + Subject: [PATCH for 5.004_64] Configure patch Config_64-02-03.diff + Date: Thu, 23 Apr 1998 15:03:20 -0400 (EDT) + Subject: [PATCH 5.004_64] Config_64-03-04.diff + Date: Wed, 13 May 1998 14:33:30 -0400 (EDT) + Branch: perl + + README.beos beos/nm.c hints/beos.sh + ! Configure INSTALL MANIFEST Makefile.SH Policy_sh.SH + ! Porting/Glossary Porting/config.sh Porting/config_H + ! Porting/pumpkin.pod Todo cflags.SH config_h.SH + ! djgpp/djgppsed.sh doop.c handy.h hints/dos_djgpp.sh + ! hints/netbsd.sh hints/solaris_2.sh hints/unicos.sh + ! hints/unicosmk.sh hv.h lib/Term/ReadLine.pm perl.h + ! plan9/config.plan9 pod/perlfunc.pod pp.c pp_sys.c sv.h + ! t/io/pipe.t thread.h vms/config.vms win32/config.bc + ! win32/config.vc win32/config_H.bc win32/config_H.vc +____________________________________________________________________________ +[ 946] By: TimBunce on 1998/05/14 15:07:06 + Log: + Title: "Fix PERL_DESTRUCT_LEVEL core dumps" + From: Gurusamy Sarathy + Msg-ID: <199805062301.TAA24599@aatma.engin.umich.edu> + Files: perl.c sv.c t/op/misc.t + Branch: maint-5.004/perl + ! perl.c sv.c t/op/misc.t +____________________________________________________________________________ +[ 945] By: mbeattie on 1998/05/14 15:00:31 + Log: Subject: Perl Social Contract + Date: 13 Apr 1998 06:16:59 -0700 + From: Russ Allbery + Branch: perl + + Porting/Contract +____________________________________________________________________________ +[ 944] By: TimBunce on 1998/05/14 14:59:37 + Log: + Title: "5.004_04-m2 Cleanup of test failures" + From: Gurusamy Sarathy + Msg-ID: <199805070416.AAA03082@aatma.engin.umich.edu> + Files: t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t + win32/config.bc win32/config.vc + Branch: maint-5.004/perl + ! t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t + ! win32/config.bc win32/config.vc +____________________________________________________________________________ +[ 943] By: mbeattie on 1998/05/14 14:58:13 + Log: From: Joshua.Pritikin@NewYork2.dmg.deuba.com + Subject: [PATCH 5.004_64] Test.pm update + Date: Sat, 4 Apr 1998 08:33:50 -0500 + Subject: [PATCH 5.004_64] modcount + comments + Date: Fri, 17 Apr 1998 16:07:35 -0400 + Branch: perl + ! lib/Test.pm op.c thrdvar.h +____________________________________________________________________________ +[ 942] By: mbeattie on 1998/05/14 14:49:43 + Log: From: Ilya Zakharevich + Subject: [PATCH 5.004_64] newSV + Date: Wed, 8 Apr 1998 03:21:03 -0400 (EDT) + Subject: [PATCH 5.004_64] Cryptic error from B::CC + Date: Sat, 11 Apr 1998 19:52:25 -0400 (EDT) + Branch: perl + ! ext/B/B/CC.pm handy.h proto.h sv.c +____________________________________________________________________________ +[ 941] By: mbeattie on 1998/05/14 14:47:29 + Log: From: Ilya Zakharevich + Subject: [PATCH 5.004_64] anydbm.t + Date: Sat, 4 Apr 1998 01:39:03 -0500 (EST) + Subject: [PATCH 5.004_64] threads on OS/2 + Date: Sat, 4 Apr 1998 01:44:29 -0500 (EST) + Subject: [PATCH 5.004_64] Better handling of Perl DLLs under OS/2 + Date: Sat, 4 Apr 1998 01:47:58 -0500 (EST) + Subject: [PATCH 5.004_64] Immediate stop in debugger + Date: Sat, 11 Apr 1998 19:50:58 -0400 (EDT) + Subject: [PATCH 5.005_64] ptags broken + Date: Sat, 11 Apr 1998 22:08:21 -0400 (EDT) + Subject: [PATCH 5.004_64] Document switch syntax via RE + Date: Sun, 12 Apr 1998 01:12:33 -0400 (EDT) + Branch: perl + ! emacs/ptags lib/ExtUtils/MM_OS2.pm lib/ExtUtils/Mksymlists.pm + ! lib/perl5db.pl os2/Changes os2/Makefile.SHs os2/os2.c + ! os2/os2thread.h pod/perlsyn.pod t/lib/anydbm.t +____________________________________________________________________________ +[ 940] By: mbeattie on 1998/05/14 14:38:44 + Log: Subject: [PATCH 5.004_64] Build Stdio and DCLSym modules as part of normal VMS perl build + Date: Fri, 03 Apr 1998 16:01:57 -0800 + From: Dan Sugalski + Branch: perl + ! vms/descrip.mms vms/ext/DCLsym/Makefile.PL + ! vms/ext/Stdio/Makefile.PL vms/ext/Stdio/Stdio.xs +____________________________________________________________________________ +[ 939] By: mbeattie on 1998/05/14 14:35:42 + Log: Subject: [PATCH 5.004_64] perl dies in perl_construct when compiled with MULTIPLICITY + Date: Fri, 03 Apr 1998 13:58:15 -0800 + From: Dan Sugalski + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 938] By: gsar on 1998/05/14 10:53:55 + Log: merge change#896 from maintbranch + Branch: win32/perl + ! doio.c ext/Socket/Socket.xs lib/Class/Struct.pm lib/Cwd.pm + ! lib/File/Find.pm lib/Math/BigInt.pm lib/lib.pm lib/strict.pm + ! op.c pod/perldiag.pod pod/perlfunc.pod pp.c pp_ctl.c sv.c + ! t/op/gv.t t/op/misc.t t/op/pack.t +____________________________________________________________________________ +[ 937] By: gsar on 1998/05/14 09:31:34 + Log: merge change#887 from maintbranch + Branch: win32/perl + + t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t + ! MANIFEST doio.c lib/File/CheckTree.pm lib/Getopt/Long.pm + ! lib/Math/BigFloat.pm lib/Text/ParseWords.pm lib/Text/Wrap.pm + ! lib/base.pm perl.c pod/perlre.pod t/lib/io_sock.t + ! t/lib/io_udp.t t/lib/parsewords.t t/lib/timelocal.t + ! t/op/stat.t toke.c utils/h2xs.PL +____________________________________________________________________________ +[ 936] By: gsar on 1998/05/14 09:06:18 + Log: merge change#886 from maintbranch + Branch: win32/perl + ! README.os2 README.vms cop.h ext/DynaLoader/dl_hpux.xs + ! ext/POSIX/POSIX.xs ext/POSIX/hints/linux.pl global.sym + ! hints/aix.sh hints/bsdos.sh hints/dec_osf.sh hints/hpux.sh + ! hints/linux.sh hints/netbsd.sh hints/os2.sh hints/svr4.sh + ! lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm + ! lib/File/Basename.pm lib/File/Path.pm op.c os2/Makefile.SHs + ! os2/os2.c os2/perl2cmd.pl perl.c perl.h pod/perlguts.pod + ! pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c proto.h + ! t/lib/filecopy.t util.c utils/perldoc.PL vms/config.vms + ! vms/descrip.mms vms/ext/Filespec.pm vms/ext/filespec.t + ! vms/test.com +____________________________________________________________________________ +[ 935] By: gsar on 1998/05/14 07:00:02 + Log: merge changes#872,873 from maintbranch + Branch: win32/perl + ! Changes5.004 INSTALL lib/ExtUtils/MakeMaker.pm + ! lib/FileHandle.pm lib/Tie/Hash.pm lib/constant.pm + ! lib/integer.pm pod/perl.pod pod/perlbook.pod pod/perldsc.pod + ! pod/perlfunc.pod pod/perlguts.pod pod/perlhist.pod + ! pod/perlop.pod pod/perlre.pod pod/perlrun.pod pod/perlsec.pod + ! pod/perltrap.pod pod/perlvar.pod pod/pod2latex.PL + ! utils/perldoc.PL +____________________________________________________________________________ +[ 934] By: gsar on 1998/05/14 06:24:38 + Log: merge changes#755..759,763,764 from maintbranch + Branch: win32/perl + + hints/openbsd.sh + ! MANIFEST Porting/patchls perl.c perlsdio.h pod/perlfunc.pod + ! t/op/pos.t utils/perldoc.PL +____________________________________________________________________________ +[ 933] By: gsar on 1998/05/14 06:07:31 + Log: merge change#754 from maintbranch + Branch: win32/perl + ! perl.c +____________________________________________________________________________ +[ 932] By: gsar on 1998/05/14 06:03:50 + Log: merge changes#752,753 from maintbranch + Branch: win32/perl + + t/op/pos.t + ! README ext/GDBM_File/GDBM_File.pm + ! ext/SDBM_File/sdbm/Makefile.PL pod/perlsyn.pod +____________________________________________________________________________ +[ 931] By: gsar on 1998/05/14 05:51:19 + Log: merge change#745 from maintbranch + Branch: win32/perl + + ext/DynaLoader/DynaLoader.pm.PL + - ext/DynaLoader/DynaLoader.pm + ! MANIFEST ext/DynaLoader/Makefile.PL +____________________________________________________________________________ +[ 930] By: nick on 1998/05/13 20:39:59 + Log: resolve -at //depot/win32 into ansiperl for C++ testing. + Branch: ansiperl + ! utils/perldoc.PL + !> MANIFEST ext/Fcntl/Fcntl.pm hv.c lib/ExtUtils/Liblist.pm op.c + !> perl.c pod/perlfunc.pod pod/perlguts.pod pp.c pp_ctl.c + !> regcomp.c regcomp.h regexec.c t/op/hashwarn.t t/op/runlevel.t + !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc + !> win32/makedef.pl win32/makefile.mk +____________________________________________________________________________ +[ 929] By: gsar on 1998/05/13 10:13:36 + Log: merge change#687 from maintbranch + Branch: win32/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 928] By: gsar on 1998/05/13 10:08:13 + Log: merge change#683 from maintbranch + Branch: win32/perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 927] By: gsar on 1998/05/13 09:51:43 + Log: merge change#681 from maintbranch + Branch: win32/perl + ! ext/Fcntl/Fcntl.pm +____________________________________________________________________________ +[ 926] By: gsar on 1998/05/13 09:47:11 + Log: merge change#664 from maint branch + Branch: win32/perl + ! regcomp.c regcomp.h regexec.c +____________________________________________________________________________ +[ 925] By: gsar on 1998/05/13 08:55:28 + Log: merge missing part of change#663 from maint branch + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 924] By: gsar on 1998/05/12 18:50:04 + Log: remove x586 code gen switch (-5) for Borland, it is non-generic, + and seems to generate problematic code for PII. + Branch: win32/perl + ! win32/makefile.mk +____________________________________________________________________________ +[ 923] By: gsar on 1998/05/12 16:24:02 + Log: fix test failure + Message-Id: <199805120940.KAA01252@pluto.tiuk.ti.com> + Date: Tue, 12 May 1998 10:40:57 BST + From: Nick.Ing-Simmons@tiuk.ti.com + Subject: test buglet + Branch: win32/perl + ! t/op/hashwarn.t +____________________________________________________________________________ +[ 922] By: TimBunce on 1998/05/11 20:58:58 + Log: Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "incorrect return value for hv_iterinit" + From: Gurusamy Sarathy + Msg-ID: <199805031848.OAA20618@aatma.engin.umich.edu> + Files: pod/perlguts.pod hv.c + + ------ DOCUMENTATION ------ + + Title: "perlvar.pod buglet E" + From: Achim Bohnet + Msg-ID: <9805041415.AA22185@o09.xray.mpe.mpg.de> + Files: pod/perlvar.pod + + Title: "Improve docs for warning about code after an exec()" + From: "M.J.T. Guy" , Chaim Frenkel + + Msg-ID: , + + Files: pod/perlfunc.pod + + Title: "Remove dead code from pod2man" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/pod2man.PL + + Title: "tweak doc for C" + From: Gurusamy Sarathy + Msg-ID: <199805090017.UAA06888@aatma.engin.umich.edu> + Files: pod/perlfunc.pod + + Title: "Document integer pragma effect on % operator" + From: Gisle Aas + Msg-ID: + Files: pod/perlop.pod + + Title: "Reduce rm command line length in pod/Makefile" + From: Hugo van der Sanden + Msg-ID: <199805041423.QAA13199@dorlas.elsevier.nl> + Files: pod/Makefile + + ------ EXTENSIONS ------ + + Title: "Clarify Termios usage in POSIX.pod" + From: Rocco Caputo + Msg-ID: <199805101952.PAA12738@ns.netrus.net> + Files: ext/POSIX/POSIX.pod + + ------ LIBRARY ------ + + Title: "Fix File::Find::finddepth typo in trial 2 release" + From: koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: + Files: lib/File/Find.pm t/lib/filefind.t + + ------ PORTABILITY - GENERAL ------ + + Title: "Add Porting/patching.pod document" + From: Daniel Grisinger + Msg-ID: <199805030305.XAA16147@relay.pair.com> + Files: MANIFEST Porting/patching.pod + + Title: "hints/machten.sh: disable semctl(), align with devel version" + From: Dominic Dunlop + Msg-ID: + Files: hints/machten.sh + + Title: "Add VMS specifics to Porting/makerel" + From: Charles Bailey + Msg-ID: <01IWDK1LONRQ0026P0@cor.newman.upenn.edu>, + <199804271732.SAA13762@toad.ig.co.uk>, + <9804250212.AA27695@forte.com> + Files: Porting/makerel + Branch: maint-5.004/perl + + Porting/patching.pod + ! MANIFEST Porting/makerel ext/POSIX/POSIX.pod hints/machten.sh + ! hv.c lib/File/Find.pm pod/Makefile pod/perlfunc.pod + ! pod/perlguts.pod pod/perlop.pod pod/perlvar.pod pod/pod2man.PL + ! t/lib/filefind.t +____________________________________________________________________________ +[ 921] By: gsar on 1998/05/10 02:28:03 + Log: various tweaks to makefiles + Branch: win32/perl + ! win32/Makefile win32/makedef.pl win32/makefile.mk +____________________________________________________________________________ +[ 920] By: gsar on 1998/05/10 02:27:19 + Log: fix ExtUtils::Liblist mishandling paths with spaces + Branch: win32/perl + ! lib/ExtUtils/Liblist.pm +____________________________________________________________________________ +[ 919] By: gsar on 1998/05/09 17:10:15 + Log: minor cleanup + Branch: win32/perl + ! MANIFEST perl.c +____________________________________________________________________________ +[ 918] By: gsar on 1998/05/09 17:09:09 + Log: protect sortcop from C + Message-Id: <199805082333.TAA06287@aatma.engin.umich.edu> + Date: Fri, 08 May 1998 19:33:44 EDT + From: Gurusamy Sarathy + Subject: [PATCH] Re: double recursion in sort + Branch: win32/perl + ! pp_ctl.c t/op/runlevel.t +____________________________________________________________________________ +[ 917] By: gsar on 1998/05/09 17:05:55 + Log: c + Branch: win32/perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 916] By: gsar on 1998/05/07 03:40:15 + Log: fix C (pp_refgen fumbles when G_SCALAR, no args) + Branch: win32/perl + ! pp.c +____________________________________________________________________________ +[ 915] By: mbeattie on 1998/05/06 13:08:29 + Log: Speed up pp_entersub for usethreads with only 1 thread running. + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 914] By: gsar on 1998/05/03 18:44:38 + Log: make hv_iterinit() return HvKEYS() + Message-Id: <3.0.1.32.19980502162922.009e6320@www.syncad.com> + Date: Sat, 02 May 1998 16:29:22 EDT + From: "SynaptiCAD, Inc." + Subject: incorrect return value for hv_iterinit + Branch: win32/perl + ! hv.c pod/perlguts.pod +____________________________________________________________________________ +[ 913] By: TimBunce on 1998/05/01 22:38:38 + Log: Update MANIFEST for trial 2. + (Porting/Contract lib/Tie/Handle.pm t/op/tiehandle.t) + Branch: maint-5.004/perl + ! MANIFEST +____________________________________________________________________________ +[ 912] By: TimBunce on 1998/05/01 22:30:29 + Log: Add t/op/tiehandle.t as xtext to repository (see change 911) + Branch: maint-5.004/perl + + t/op/tiehandle.t +____________________________________________________________________________ +[ 911] By: TimBunce on 1998/05/01 21:35:03 + Log: + Title: "Add ERRSV, ERRHV, DEFSV and SAVE_DEFSV for XS 5.005 compatibility" + From: timbo@ig.co.uk (Tim Bunce) + Msg-ID: <199804200854.JAA01482@toad.ig.co.uk> + Files: perl.h + + Title: "Add WRITE & CLOSE to TIEHANDLE" + From: Graham Barr + Msg-ID: <34F63DC8.CA95670F@pobox.com> + Files: pod/perltie.pod lib/Tie/Handle.pm pp_sys.c t/op/tiehandle.t + Branch: maint-5.004/perl + + lib/Tie/Handle.pm + ! perl.h pod/perltie.pod pp_sys.c +____________________________________________________________________________ +[ 910] By: TimBunce on 1998/05/01 20:47:47 + Log: + Title: "Add warning for Illegal hex digit" + From: Stephen P Potter , Stephen Potter + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199804232219.SAA02267@spp.users.ds.net>, + <199804271409.PAA12819@toad.ig.co.uk>, + <199804280307.WAA12332@psasolar.psa.pencom.com> + Files: pod/perldiag.pod util.c + + Title: "perl_call_method() bug fix (corrupt op pointer)" + From: "Alterman, Eugene" + Msg-ID: <510415F72ECFD111A31700A0C9B3CCDE3098@efx98digmasa.bremer-inc.com> + Files: perl.c + + Title: "Fix printf segmentation fault" + From: Hugo van der Sanden + Msg-ID: + Files: pp_hot.c + + Title: "Document changed local($a[$i],$b{$j}) behaviour re delete/splice" + From: Charles Bailey + Msg-ID: <01IVMVIHNZ36001NKH@cor.newman.upenn.edu> + Files: pod/perlsub.pod + Branch: maint-5.004/perl + ! perl.c pod/perldiag.pod pod/perlsub.pod pp_hot.c util.c +____________________________________________________________________________ +[ 909] By: TimBunce on 1998/05/01 19:44:47 + Log: + Title: "Change Ilya's do_binmode to K&R prototype and move to doio.c" + Files: doio.c util.c + Branch: maint-5.004/perl + ! doio.c util.c +____________________________________________________________________________ +[ 908] By: gsar on 1998/05/01 19:21:02 + Log: add AS patch#20 (exposes more global constants) + Branch: asperl + ! ObjXSub.h byterun.h embed.h embedvar.h global.sym globals.c + ! interp.sym ipsock.h ipstdio.h objpp.h perlio.h perlsock.h + ! proto.h util.c win32/GenCAPI.pl win32/runperl.c +____________________________________________________________________________ +[ 907] By: TimBunce on 1998/05/01 17:50:46 + Log: + Title: "Runtime Carp verbosity without aliasing" + From: Joshua.Pritikin@NewYork2.dmg.deuba.com, Tim Bunce + Msg-ID: + Files: lib/Carp.pm + + Title: "Fix File::Basename to not untaint results (using new //t flag)" + From: Eric Hammond , Tom Phoenix + + Msg-ID: <199710070515.WAA00682@finity.citysearch.com>, + + Files: lib/File/Basename.pm + Branch: maint-5.004/perl + ! lib/Carp.pm lib/File/Basename.pm +____________________________________________________________________________ +[ 906] By: TimBunce on 1998/04/28 11:04:49 + Log: + ------ CORE LANGUAGE ------ + + Title: "5.004_04m5t1: Fix dangling references in LVs", "Fix dangling + references in LVs" + From: Spider Boardman + Msg-ID: <199804010541.AAA32615@Orb.Nashua.NH.US>, + <19980422164037.D29222@perl.org> + Files: embed.h keywords.h opcode.h perl.h proto.h doop.c global.sym mg.c + pp.c sv.c + + Title: "Fix SvGMAGIC typo in change 904" + Files: doop.c + Branch: maint-5.004/perl + ! doop.c embed.h global.sym keywords.h mg.c opcode.h perl.h pp.c + ! proto.h sv.c +____________________________________________________________________________ +[ 905] By: TimBunce on 1998/04/28 10:32:20 + Log: Regexp patches + + Title: "New regex flag //t to leave $1 etc. tainted" + From: Chip Salzenberg , Tim Bunce + Msg-ID: <19980310192640.37826@cyprus> + Files: pod/perlop.pod pod/perlre.pod op.h dump.c mg.c pp_hot.c sv.c + t/op/taint.t toke.c + + Title: "Don't accidentally untaint target of s///" + From: Chip Salzenberg + Msg-ID: <19980310151756.24767@cyprus> + Files: pp_ctl.c pp_hot.c t/op/taint.t + + Title: "Allow but ignore embedded /...(?o).../ in regexp" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199804201243.OAA08244@dorlas.elsevier.nl> + Files: regcomp.c + Branch: maint-5.004/perl + ! dump.c mg.c op.h pod/perlop.pod pod/perlre.pod pp_ctl.c + ! pp_hot.c regcomp.c sv.c t/op/taint.t toke.c +____________________________________________________________________________ +[ 904] By: TimBunce on 1998/04/27 20:20:21 + Log: Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Protect join() against double reads on undef and SvGMAGICALs" + From: Chip Salzenberg , Tim Bunce + + Msg-ID: <19980424080630.D13985@perl.org> + Files: doop.c + + Title: "Better error message for require failure" + From: epeschko@den-mdev1 (Ed Peschko) + Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com> + Files: pod/perldiag.pod pp_ctl.c + + Title: "fixes for various noises under PERL_DESTRUCT_LEVEL" + From: Gurusamy Sarathy + Msg-ID: <199804231926.PAA23969@aatma.engin.umich.edu> + Files: perl.c + + Title: "Fix nice_chunk memory leak" + From: Gurusamy Sarathy + Msg-ID: <199804052347.TAA15699@aatma.engin.umich.edu> + Files: sv.c + + Title: "-2.0 vs. -2 (was Number representations)" + From: Chip Salzenberg + Msg-ID: <19980309185652.11231@cyprus> + Files: op.c + + Title: "perl.c fixes for -DUNEXEC" + From: Matt Wette , Matthew R Wette + + Msg-ID: <199710152146.OAA07283@mr-ed.jpl.nasa.gov> + Files: perl.c + + ------ DOCUMENTATION ------ + + Title: "perlcall is Perl from C, not C from Perl" + From: Steve A Fink + Files: pod/perlembed.pod + + Title: "Clarify require "Foo::Bar" non-bareword issue" + From: Dominique Dumont + Msg-ID: <199804231527.AA153445256@ss7serv.grenoble.hp.com> + Files: pod/perlfunc.pod + + Title: "(repost) new text for perlsec", "new text for perlsec" + From: Tom Phoenix + Msg-ID: + Files: pod/perlsec.pod + + ------ EXTENSIONS ------ + + Title: "IO::Socket->socketpair broken (typo)" + From: Olaf Titz + Msg-ID: <19980425224535.2807.qmail@bigred.inka.de> + Files: ext/IO/lib/IO/Socket.pm + + Title: "NDBM_File man page needs Fcntl" + From: "Danny R. Faught" + Msg-ID: <199707011500.IAA00601@palrel3.hp.com> + Files: ext/NDBM_File/NDBM_File.pm + + ------ LIBRARY ------ + + Title: "Documentation discrepancy: pragmatic modules" + From: "M.J.T. Guy" , h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199804221525.RAA12695@dorlas.elsevier.nl>, + + Files: lib/strict.pm lib/subs.pm lib/vars.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Updated hints file for svr4" + From: Andy Dougherty + Msg-ID: + Files: hints/svr4.sh + + Title: "Pumpkin update -- shared libperl.so location" + From: Andy Dougherty + Msg-ID: + Files: Porting/pumpkin.pod + + Title: "perl compile fix for AIX 4.3" + From: Jens-Uwe Mager + Msg-ID: <199804261611.SAA34728@ans.helios.de> + Files: ext/DynaLoader/dl_aix.xs + + Title: "Dynaloader build on VMS", + From: pvhp@forte.com (Peter Prymmer), timbo@ig.co.uk (Tim Bunce) + Msg-ID: <199804271732.SAA13762@toad.ig.co.uk>, <9804250212.AA27695@forte.com> + Files: vms/descrip.mms + + ------ UTILITIES ------ + + Title: "Major update to h2ph.PL" + From: Billy + Msg-ID: + Files: utils/h2ph.PL + Branch: maint-5.004/perl + ! Porting/pumpkin.pod doop.c ext/DynaLoader/dl_aix.xs + ! ext/IO/lib/IO/Socket.pm ext/NDBM_File/NDBM_File.pm + ! hints/svr4.sh lib/strict.pm lib/subs.pm lib/vars.pm op.c + ! perl.c pod/perldiag.pod pod/perlembed.pod pod/perlfunc.pod + ! pod/perlsec.pod pp_ctl.c sv.c utils/h2ph.PL vms/descrip.mms +____________________________________________________________________________ +[ 903] By: gsar on 1998/04/25 22:27:19 + Log: add AS patch#19 (adds socket layer generation to GenCAPI.pl) + Branch: asperl + ! win32/GenCAPI.pl +____________________________________________________________________________ +[ 902] By: nick on 1998/04/25 16:35:08 + Log: Case sensitive tweak to perldoc.PL + Branch: ansiperl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 901] By: nick on 1998/04/25 15:16:54 + Log: Implement use attrs qw(locked package); + Passes all tests except posix (hangs/dies) in sigaction test after + printing "ok 9". + Branch: ansiperl + ! cv.h ext/attrs/attrs.pm ext/attrs/attrs.xs pp_hot.c +____________________________________________________________________________ +[ 900] By: nick on 1998/04/25 13:58:17 + Log: Auto-insert defined() test in while when test expression is + readline (i.e. <>), glob, readdir, or each. + Branch: ansiperl + + t/op/defins.t + ! op.c pod/perlop.pod +____________________________________________________________________________ +[ 899] By: nick on 1998/04/25 13:14:52 + Log: Resolve ansiperl against win32 branch + Branch: ansiperl + +> (branch 53 files) + - config_H + !> (integrate 227 files) +____________________________________________________________________________ +[ 898] By: gsar on 1998/04/24 17:01:05 + Log: add AS patch#18 + Branch: asperl + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/xsubpp win32/GenCAPI.pl +____________________________________________________________________________ +[ 897] By: TimBunce on 1998/04/23 19:49:22 + Log: Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "fix for "Unbalanced string table refcount"" + From: Gurusamy Sarathy + Msg-ID: <199804042251.RAA25527@aatma.engin.umich.edu> + Files: sv.c + + Title: "Allow more lenient switch processing" + From: "John L. Allen" + Msg-ID: <199803251638.LAA22664@gateway.grumman.com> + Files: perl.c + + Title: "Add fourth arg to substr: substr EXPR,OFFSET,LEN,REPLACEMENT" + From: Gisle Aas + Msg-ID: + Files: pod/perlfunc.pod Todo opcode.pl pp.c t/op/substr.t + + Title: "Odd number of elements in hash list." + From: Tom Phoenix + Msg-ID: + Files: MANIFEST pod/perldiag.pod pp.c pp_hot.c t/op/hashwarn.t + + Title: "another destruct_level fix" + From: Gurusamy Sarathy + Msg-ID: <199804030105.UAA04400@aatma.engin.umich.edu> + Files: hv.c + + Title: "bidirectional pipe warning blues" + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9804082151.AA20399@claudius.bfsec.bt.co.uk> + Files: doio.c + + Title: "stale pointers after realloc (MEXTEND in pp_print and pp_prtf)" + From: Malcolm Beattie + Msg-ID: <199801191107.LAA17979@sable.ox.ac.uk> + Files: pp_hot.c pp_sys.c + + Title: "unimplemented umask() should return undef not die" + From: kstar@chapin.edu (Kurt D. Starsinic) + Msg-ID: <199803120515.VAA08660@chapin.edu> + Files: pod/perlfunc.pod pp_sys.c + + Title: "warning for: bless $foo, """ + From: Joshua.Pritikin@NewYork2.dmg.deuba.com + Msg-ID: + Files: pod/perldiag.pod pp.c + + ------ DOCUMENTATION ------ + + Title: "Mention SWIG in perlxs.pod" + From: Steve A Fink + Msg-ID: + Files: pod/perlxs.pod + + Title: "fix-up of previous perlre.pod patch" + From: Ted Ashton + Msg-ID: <199803031540.KAA09388@ns.southern.edu> + Files: pod/perlre.pod + + Title: "long list of man page nitpicks" + From: Greg Bacon , Tom Christiansen + + Msg-ID: <199804221844.NAA08338@pluto.cs.uah.edu>, + <199804222204.QAA20805@jhereg.perl.com> + Files: pod/perlapio.pod pod/perlcall.pod pod/perldebug.pod pod/perldelta.pod + pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod + pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod + pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod + pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod + pod/perlre.pod pod/perlref.pod pod/perlrun.pod + pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod + pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod + pod/pod2man.PL + + Title: "document that system() does not set $! when it fails" + From: "Mark R. Levinson" + Msg-ID: <199803011946.OAA31942@anaximander.dccs.upenn.edu> + Files: pod/perlfunc.pod + + Title: "Fix pod/roffitall execute permission" + From: lvirden@cas.org + Msg-ID: <1997Nov17.132031.2589892@cor.newman> + Files: pod/roffitall + + Title: "document when split ignores trailing empty fields" + From: Hugo van der Sanden + Msg-ID: + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "Buglet in Opcode.pm documentation" + From: Horst von Brand + Msg-ID: <199804170349.XAA32445@sleipnir.valparaiso.cl> + Files: ext/Opcode/Opcode.pm + + Title: "Failure to append to perllocal.pod should not be fatal" + From: koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: + Files: lib/ExtUtils/MM_Unix.pm + + Title: "Document that IO.pm does not load IO::Select etc" + From: Graham Barr + Msg-ID: <353B48F1.64E35A63@ti.com> + Files: ext/IO/IO.pm + + Title: "Install extensions with bootstrap (again) in $archlib" + From: Achim Bohnet , koenig@kulturbox.de (Andreas J. + Koenig) + Msg-ID: <9804061909.AA12675@o09.xray.mpe.mpg.de>, + + Files: lib/ExtUtils/Install.pm + + Title: "glibc2.0.6 missing MSG_* defines." + From: Andy Dougherty + Msg-ID: + Files: ext/Socket/Socket.xs + + ------ LIBRARY ------ + + Title: "Benchmark.pm: add run-for-some-time mode" + From: Jarkko Hietaniemi + Msg-ID: <199804080647.JAA15136@alpha.hut.fi> + Files: lib/Benchmark.pm + + Title: "Comments added to Carp.pm" + From: Andy Wardley , Chip Salzenberg + , Tom Christiansen + + Msg-ID: <19980422164242.E29222@perl.org>, + <199804222033.OAA17959@jhereg.perl.com>, + <980409182357.ZM21638@bandanna> + Files: lib/Carp.pm + + Title: "chat2.pl fix" + From: Charles Bailey + Msg-ID: <01IVMVF507PO001NKH@cor.newman.upenn.edu> + Files: lib/chat2.pl + + Title: "lib/Pod/Html.pm" + From: d-lewart@uiuc.edu (Daniel S. Lewart) + Msg-ID: <199710170718.DAA25472@staff1.cso.uiuc.edu>, + <199710180417.AAA19778@staff2.cso.uiuc.edu> + Files: lib/Pod/Html.pm + + Title: "ormaments method in Term/ReadLine.pm causes warning with string + arg." + From: hiroo.hayashi@computer.org + Msg-ID: <199804061519.AAA21907@mail.fb3.so-net.ne.jp> + Files: lib/Term/ReadLine.pm + + ------ OTHER CHANGES ------ + + Title: "ptags broken" + From: Ilya Zakharevich + Msg-ID: <199804120208.WAA29264@monk.mps.ohio-state.edu> + Files: emacs/ptags + + ------ PORTABILITY - WIN32 ------ + + Title: "win32 tweaks (signals and crypt support)" + From: Gurusamy Sarathy + Msg-ID: <199804170505.BAA06413@aatma.engin.umich.edu> + Files: perl.h win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc win32/win32.c + + ------ PORTABILITY - GENERAL ------ + + Title: "Add Social Contract (2nd Draft) as Porting/Contract" + From: Russ Allbery + Msg-ID: + Files: Porting/Contract + + Title: "Config: Irix 5 hints" + From: kstar@O2.chapin.edu + Msg-ID: <199804061712.NAA22823@O2.chapin.edu> + Files: hints/irix_5.sh + + Title: "VMS patches to 5.004_03" + From: Charles Bailey + Msg-ID: <01IVYJS0L8D200209B@cor.newman.upenn.edu> + Files: vms/vms.c + + Title: "hints/netbsd.sh - enable vfork" + From: Andy Dougherty + Msg-ID: + Files: hints/netbsd.sh + + ------ UTILITIES ------ + + Title: "support find2perl -follow" + From: Billy + Msg-ID: + Files: x2p/find2perl.PL + Branch: maint-5.004/perl + + Porting/Contract t/op/hashwarn.t + ! MANIFEST Todo doio.c emacs/ptags embed.h ext/IO/IO.pm + ! ext/Opcode/Opcode.pm ext/Socket/Socket.xs hints/irix_5.sh + ! hints/netbsd.sh hv.c lib/Benchmark.pm lib/Carp.pm + ! lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm + ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h + ! opcode.pl perl.c perl.h pod/perlapio.pod pod/perlcall.pod + ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod + ! pod/perlembed.pod pod/perlfaq2.pod pod/perlfaq3.pod + ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq7.pod + ! pod/perlfaq8.pod pod/perlform.pod pod/perlfunc.pod + ! pod/perlguts.pod pod/perlhist.pod pod/perlipc.pod + ! pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod + ! pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod + ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL + ! pod/roffitall pp.c pp_hot.c pp_sys.c sv.c t/TEST t/op/gv.t + ! t/op/substr.t vms/vms.c win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/win32.c + ! x2p/find2perl.PL +____________________________________________________________________________ +[ 896] By: TimBunce on 1998/04/22 11:49:24 + Log: Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Additional regex-cache patch" + From: Chip Salzenberg + Msg-ID: <19980305104831.38100@cyprus> + Files: pp_ctl.c + + Title: "Conservative C<*x = undef> patch" + From: Chip Salzenberg + Msg-ID: <19980310163310.48509@cyprus> + Files: pod/perldiag.pod pod/perlfunc.pod pp.c sv.c t/op/gv.t + + Title: "Consider @ARGV to be plain files if inplace (-i)" + From: Chip Salzenberg + Msg-ID: <199802042106.QAA04082@nielsenmedia.com> + Files: doio.c + + Title: "Fix semctl for Linux, Sun and SVR4" + From: Graham Barr , lvirden@cas.org (Larry W. Virden, x2487) + Msg-ID: <3484247D.BB036D39@ti.com>, <9712021313.AA11495@cas.org> + Files: doio.c + + Title: "C entails using C, not C" + From: Gurusamy Sarathy + Msg-ID: <199803070149.UAA12217@aatma.engin.umich.edu> + Files: pod/perlcall.pod pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod + doio.c doop.c ext/DB_File/DB_File.xs + ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs + ext/POSIX/POSIX.xs ext/Socket/Socket.xs gv.c + lib/ExtUtils/typemap mg.c os2/OS2/REXX/REXX.xs + win32/win32.c + + Title: "Make autouse -w-safe" + From: Ilya Zakharevich + Msg-ID: <199803030236.VAA13244@monk.mps.ohio-state.edu> + Files: lib/autouse.pm op.c sv.c + + Title: "Misleading error on close of unopened handle" + From: "M.J.T. Guy" + Msg-ID: + Files: doio.c + + Title: "Confusing error from perl -e "x'"" + From: Hans Mulder + Msg-ID: <1998Mar25.174320.2866352@cor.newman.upenn.edu> + Files: toke.c + + Title: "Add HAS_GNULIBC define" + From: Andy Dougherty + Msg-ID: + Files: config_H config_h.SH + + Title: "h_errno might not be an int" + From: Andy Dougherty + Msg-ID: + Files: pp_sys.c + + Title: "Revised taint hole closer", "Revised taint hole closer" + From: Chip Salzenberg , Ilya Zakharevich + + Msg-ID: <19980310222127.09350@cyprus>, + <199803110554.AAA29157@monk.mps.ohio-state.edu> + Files: doio.c + + Title: "SEGV compiling localised lexical in perl5.004_05t1" + From: Gurusamy Sarathy , h.sanden@elsevier.nl (Hugo + van der Sanden) + Msg-ID: <199803171530.QAA24053@dorlas.elsevier.nl>, + <199803171727.MAA05234@aatma.engin.umich.edu> + Files: op.c t/op/misc.t + + Title: "Stale SP in pp_substr" + From: Stephen McCamant + Msg-ID: + Files: pp.c + + Title: "Statement unlikely to be reached warning" + From: Hans Mulder + Msg-ID: <1997Dec24.171511.2683516@cor.newman> + Files: op.c + + Title: "Tainting propagates from nowhere" + From: Gurusamy Sarathy + Msg-ID: <199803140411.XAA09343@aatma.engin.umich.edu> + Files: pp.c + + Title: "two trivial tweaks to 5.004m5t1" + From: Gurusamy Sarathy + Msg-ID: <199803060553.AAA28461@aatma.engin.umich.edu> + Files: proto.h win32/Makefile + + Title: "unpacking negatives on Alpha" + From: Achim Bohnet + Msg-ID: <9710201503.AA24797@o09.xray.mpe.mpg.de> + Files: pp.c t/op/pack.t + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "Cwd.pm: abs_path() and fast_abs_path() plus code merge" + From: Graham Barr + Msg-ID: <3482F365.4A0486BA@ti.com> + Files: lib/Cwd.pm + + Title: "Math/BigInt.pm, fixed use of undefined value." + From: abigail@fnx.com + Msg-ID: <19980313052452.27365.qmail@betelgeuse.wayne.fnx.com> + Files: lib/Math/BigInt.pm + + Title: "File::Find rewrite" + From: Ilya Zakharevich + Msg-ID: <199803052344.SAA01008@monk.mps.ohio-state.edu> + Files: lib/File/Find.pm + + Title: "efficient version of strict.pm" + From: koenig@anna.mind.de (Andreas J. Koenig) + Msg-ID: + Files: lib/strict.pm + + Title: "Socket occasional SEGV in pack_sockaddr_un" + From: Trevor Blackwell + Msg-ID: <199710281804.NAA09632@wagg.viaweb.com> + Files: ext/Socket/Socket.xs + + Title: "Warning on mis-use of 'use lib'" + From: "M.J.T. Guy" , Tom Phoenix + , chip@atlantic.net + Msg-ID: <199801270435.XAA14147@cyprus.atlantic.net>, + , + + Files: lib/lib.pm + + Title: "bug in Class::Struct" + From: Tom Christiansen + Msg-ID: <199803290814.KAA05699@toy.perl.com> + Files: lib/Class/Struct.pm + + Title: "Allow POSIX to export nice()" + From: bkeelerx@iwa.dp.intel.com (Bruce J. Keeler) + Msg-ID: + Files: ext/POSIX/POSIX.pm + + Title: "'use Env' on WinNT/95 fails" + From: Gurusamy Sarathy + Msg-ID: <199803280511.AAA15933@aatma.engin.umich.edu> + Files: lib/Env.pm + + ------ OTHER CHANGES ------ + + Title: "mv-if-diff" + From: Robin Barker + Msg-ID: <14572.9803271806@tempest.cise.npl.co.uk> + Files: mv-if-diff + + ------ PORTABILITY - WIN32 ------ + + Title: "fix various problems with backticks on win32" + From: Gurusamy Sarathy + Msg-ID: <199803070705.CAA15945@aatma.engin.umich.edu> + Files: win32/config_h.PL win32/win32.c + + ------ TESTS ------ + + Title: "Fix bug in locale.t" + From: Jarkko Hietaniemi + Msg-ID: <199801042148.XAA08599@alpha.hut.fi> + Files: t/pragma/locale.t + Branch: maint-5.004/perl + ! config_H config_h.SH doio.c doop.c ext/DB_File/DB_File.xs + ! ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs ext/Socket/Socket.xs + ! gv.c lib/Class/Struct.pm lib/Cwd.pm lib/Env.pm + ! lib/ExtUtils/typemap lib/File/Find.pm lib/Math/BigInt.pm + ! lib/autouse.pm lib/lib.pm lib/strict.pm mg.c mv-if-diff op.c + ! os2/OS2/REXX/REXX.xs pod/perlcall.pod pod/perldiag.pod + ! pod/perlembed.pod pod/perlfunc.pod pod/perlguts.pod + ! pod/perlxs.pod pp.c pp_ctl.c pp_sys.c proto.h sv.c t/op/gv.t + ! t/op/misc.t t/op/pack.t t/pragma/locale.t toke.c + ! win32/Makefile win32/config_h.PL win32/win32.c +____________________________________________________________________________ +[ 895] By: gsar on 1998/04/22 03:13:19 + Log: intern -> sys_intern + Branch: win32/perl + ! embedvar.h interp.sym intrpvar.h win32/win32.h +____________________________________________________________________________ +[ 894] By: gsar on 1998/04/22 02:42:20 + Log: hand-applied patch along with small tweaks + Message-Id: <35400e2a.13538517@smtp1.ibm.net> + Date: Tue, 21 Apr 1998 23:31:06 +0200 + From: jan.dubois@ibm.net (Jan Dubois) + Subject: Re: Per-Interpreter variables for win32.c + Branch: win32/perl + ! embedvar.h interp.sym intrpvar.h perl.c perl.h proto.h + ! win32/makedef.pl win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 893] By: gsar on 1998/04/21 03:42:21 + Log: add AS patch#17 + Branch: asperl + + win32/GenCAPI.pl + ! MANIFEST XSUB.h cv.h ipstdio.h lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm + ! lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp op.c perl.h + ! pp_ctl.c pp_hot.c proto.h sv.h thread.h win32/Makefile + ! win32/dl_win32.xs win32/makefile.mk win32/runperl.c + ! win32/win32.c +____________________________________________________________________________ +[ 892] By: gsar on 1998/04/20 20:51:50 + Log: add AS patch#16 + Branch: asperl + ! globals.c ipdir.h perl.h perlvars.h regcomp.h win32/Makefile + ! win32/makefile.mk +____________________________________________________________________________ +[ 891] By: gsar on 1998/04/19 23:50:34 + Log: tweak doc for C + Branch: win32/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 890] By: gsar on 1998/04/19 01:08:11 + Log: use a pidtable that grows dynamically for popen() + Message-Id: <3539f434.44835409@smtp1.ibm.net> + Date: Sat, 18 Apr 1998 21:01:27 +0200 + From: jan.dubois@ibm.net (Jan Dubois) + Subject: Re: [PATCH] for bug in 5.004_64 when compiled with MSC++ 4.2 + Branch: win32/perl + ! win32/win32.c +____________________________________________________________________________ +[ 889] By: gsar on 1998/04/17 02:13:58 + Log: support POSIX, enable more locale tests + Branch: win32/perl + ! ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + ! t/lib/posix.t t/pragma/locale.t win32/Makefile + ! win32/makedef.pl win32/makefile.mk +____________________________________________________________________________ +[ 888] By: mbeattie on 1998/04/14 16:22:51 + Log: CC did "<<" instead of ">>" for right-shift on ints. + Branch: perl + ! ext/B/B/CC.pm +____________________________________________________________________________ +[ 887] By: TimBunce on 1998/04/10 17:44:55 + Log: Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Re: die exits with 0" + From: Robin Barker + Files: perl.c t/op/die_exit.t + + Title: "More toke.c commentary; fix oddity" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199803251022.LAA01308@dorlas.elsevier.nl> + Files: toke.c + + Title: "for semctl on solaris" + From: Graham Barr + Msg-ID: <34624B80.C014E841@ti.com> + Files: doio.c t/op/ipcmsg.t t/op/ipcsem.t + + ------ DOCUMENTATION ------ + + Title: "Add more 'see also's to perlre.pod.", "Perl regexp /g modifier bug" + From: Ilya Zakharevich , epeschko@den-mdev1 (Ed + Peschko), pjr@watcher.telstra.com.au (Peter Richardson) + Msg-ID: <199803050000.LAA11476@watcher.telecom.com.au>, + <199803050231.VAA19128@monk.mps.ohio-state.edu>, + <199803050605.XAA09785@den-mdev1.co.csgsystems.com> + Files: pod/perlre.pod + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "BigFloat - small neagtive numbers cause panic" + From: Hugo van der Sanden + Msg-ID: <199711201325.NAA09732@crypt.compulink.co.uk> + Files: lib/Math/BigFloat.pm + + Title: "Update Getopt::Long to 2.16" + From: JVromans@Squirrel.nl (Johan Vromans), Johan Vromans + + Msg-ID: <13571.48089.726787.147769@plume.nl.compuware.com>, + <13572.6847.863219.973795@phoenix.squirrel.nl> + Files: lib/Getopt/Long.pm + + Title: "New Text::ParseWords" + From: pomeranz@netcom.com (Hal Pomeranz) + Msg-ID: <199710162118.OAA06275@netcom7.netcom.com> + Files: lib/Text/ParseWords.pm t/lib/parsewords.t + + Title: "Fixed Text/Wrap.pm bugs (2)" + From: Jacqui Caren + Msg-ID: <199709291548.QAA08645@toad.ig.co.uk> + Files: lib/Text/Wrap.pm + + Title: "Very *evil* File::CheckTree behavior! (now uses warn/die not + print/exit)" + From: Eryq , Randal Schwartz + Msg-ID: <34B542FD.190A@zeegee.com>, <8cen2i9k6f.fsf@gadget.cscaper.com> + Files: lib/File/CheckTree.pm + + ------ OTHER CHANGES ------ + + Title: "Add ./emacs/ptags" + From: Ilya Zakharevich + Msg-ID: <199803150847.DAA08196@monk.mps.ohio-state.edu> + Files: emacs/ptags + + ------ TESTS ------ + + Title: "Avoid stat test failure from build in /tmp (tmpfs)", "Build in /tmp" + From: Andy Dougherty , Greg Bacon + , pudge@pobox.com (Chris Nandor) + Msg-ID: <199710171616.LAA13435@crp-201.adtran.com>, + , + + Files: t/op/stat.t + + Title: "for failure with lib/timelocal" + From: "M.J.T. Guy" , jan.dubois@ibm.net (Jan Dubois) + Msg-ID: <34c78f61.2529827@smtp1.ibm.net>, + + Files: t/lib/timelocal.t + + Title: "Make "localhost" related failures more clear" + From: Paul Hoffman + Msg-ID: <199801201859.KAA05686@mail.proper.com> + Files: t/lib/io_sock.t t/lib/io_udp.t + + ------ UTILITIES ------ + + Title: "Let h2xs read multiple header files" + From: Andy Dougherty , Benjamin Sugars + + Msg-ID: , + + Files: utils/h2xs.PL + Branch: maint-5.004/perl + + emacs/ptags t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t + ! MANIFEST doio.c lib/File/CheckTree.pm lib/Getopt/Long.pm + ! lib/Math/BigFloat.pm lib/Text/ParseWords.pm lib/Text/Wrap.pm + ! lib/base.pm perl.c pod/perlre.pod t/lib/io_sock.t + ! t/lib/io_udp.t t/lib/parsewords.t t/lib/timelocal.t + ! t/op/stat.t toke.c utils/h2xs.PL vms/perly_h.vms +____________________________________________________________________________ +[ 886] By: TimBunce on 1998/04/10 14:35:34 + Log: Changes relating primarily to portability. + + ------ CORE LANGUAGE ------ + + Title: "5.004_55: Another round of OS/2 patches" + From: Ilya Zakharevich + Msg-ID: <199803050945.EAA20153@monk.mps.ohio-state.edu> + Files: hints/os2.sh pod/perlguts.pod cop.h perl.h proto.h README.os2 + global.sym lib/ExtUtils/MM_OS2.pm lib/File/Path.pm op.c + os2/Changes os2/Makefile.SHs os2/os2.c os2/perl2cmd.pl + perl.c pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c + t/lib/filecopy.t util.c utils/perldoc.PL + + Title: "VMS: chdir() with empty arg list" + From: lane@duphy4.drexel.edu (Charles Lane) + Msg-ID: <980317125556.222041c7@DUPHY4.Physics.Drexel.Edu> + Files: pp_sys.c + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "ExtUtils/MM_Unix.pm changed to use ld -rpath on IRIX" + From: "W. Phillip Moore" + Msg-ID: <199712011738.MAA21139@zappa.morgan.com> + Files: lib/ExtUtils/MM_Unix.pm + + Title: "[Linux] POSIX::_[PS]C_.+ bug (add HINT_SC_EXIST)" + From: Yutaka OIWA + Msg-ID: <199712251923.EAA08260@tjms1f.is.s.u-tokyo.ac.jp> + Files: ext/POSIX/hints/linux.pl ext/POSIX/POSIX.xs + + Title: "5.004_04-m1] Use HAS_GNULIBC in POSIX.xs" + From: Andy Dougherty + Msg-ID: + Files: ext/POSIX/POSIX.xs + + Title: ""ODBM_File.c", line 275: NULL undefined" + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9803091310.AA23264@claudius.bfsec.bt.co.uk> + Files: ext/ODBM_File/ODBM_File.xs + + ------ OTHER CHANGES ------ + Files: + + ------ PORTABILITY - GENERAL ------ + + Title: "5.004_04 QNX getcwd" + From: Norton Allen + Msg-ID: <199802121838.NAA20452@dolores.harvard.edu>, + <199803061511.KAA22346@bottesini.harvard.edu> + Files: hints/qnx.sh lib/Cwd.pm t/op/magic.t + + Title: "hints/netbsd.sh d_setrgid d_setruid" + From: Jarkko Hietaniemi + Msg-ID: <199802281435.QAA10866@alpha.hut.fi> + Files: hints/netbsd.sh + + Title: "osname=unixware, osvers=2.03, archname=i386-unixware + d_casti32=undef" + From: Tom Hughes + Msg-ID: <465398da47%tom@compton.demon.co.uk> + Files: hints/svr4.sh + + Title: "hints/bsdos.sh patch for BSDI 3.1" + From: Jan-Pieter Cornet + Msg-ID: <6fbip6$3cp$1@xs1.xs4all.nl> + Files: hints/bsdos.sh + + Title: "Remove BIND_NOSTART from DynaLoader for HP" + From: Keong Lim + Msg-ID: <01BD1D03.53B65E90@sieplan2.sr.com.au> + Files: ext/DynaLoader/dl_hpux.xs + + Title: "Building Perl on AIX 4+ with shared libraries and dynamic loading" + From: Juan Gallego + Msg-ID: + Files: hints/aix.sh + + Title: "alpha-dec_osf 5.0" + From: Spider Boardman + Msg-ID: <199712232305.SAA08359@Orb.Nashua.NH.US> + Files: hints/dec_osf.sh + + Title: "Off-by-one error with OS2::PrfDB" + From: Ilya Zakharevich + Msg-ID: <199710170920.FAA00390@monk.mps.ohio-state.edu> + Files: os2/OS2/PrfDB/PrfDB.xs + + Title: "5.004_04-m1] Allow overrides in hints/openbsd.sh" + From: Andy Dougherty + Msg-ID: + Files: hints/openbsd.sh + + Title: "5.004_04-m1] Linux shouldn't use -lnet" + From: Andy Dougherty + Msg-ID: + Files: hints/linux.sh + + Title: "5.004_(04|63)] Close VMS security hole" + From: Charles Bailey + Msg-ID: <01IV6LRJCSSC0009C4@cor.newman.upenn.edu> + Files: vms/vms.c + + Title: "Re: Perl online documentation on OpenVMS" + From: pvhp@forte.com (Peter Prymmer) + Msg-ID: <9803192143.AA28120@forte.com> + Files: README.vms + + Title: "Perl5.004_04m4t4 *almost* makes it for VMS", "Updated + vms/perly_c.vms and vms/perly_h.vms" + From: Andy Dougherty , Dan Sugalski + , larry@wall.org (Larry Wall) + Msg-ID: <199710151650.JAA29185@wall.org>, + <3.0.3.32.19971014150404.02fdef78@osshe.edu>, + + Files: vms/perly_c.vms + + Title: "Updated, non-wordwrapped, patch to README.VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980213133828.0092c870@osshe.edu> + Files: README.vms + + Title: "VMS patches to 5.004_03 (excluding installperl and timelocal.t)" + From: Charles Bailey + Msg-ID: <01INZT9G2LZS0006YW@cor.newman.upenn.edu> + Files: lib/File/Basename.pm lib/File/Path.pm vms/config.vms vms/descrip.mms + vms/genconfig.pl vms/test.com vms/vms.c vms/ext/Filespec.pm + vms/ext/filespec.t + + Title: "Re: VMSperl crashes on -Mblib argument" + From: bailey@newman.upenn.edu (Charles Bailey) + Msg-ID: <1997Dec10.004439.2635060@cor.newman> + Files: lib/blib.pm vms/vms.c + + Title: "hints/linux.sh (MkLinux / PPC)" + From: pudge@pobox.com (Chris Nandor) + Msg-ID: + Files: hints/linux.sh + + Title: "hpux.sh hints file clarification suggestion" + From: root@qad.com + Msg-ID: <199802192351.QAA09096@jhereg.perl.com> + Files: hints/hpux.sh + + Title: "new hints/solaris_2.sh" + From: "M.J.T. Guy" + Msg-ID: + Files: hints/solaris_2.sh + Branch: maint-5.004/perl + ! README.os2 README.vms cop.h ext/DynaLoader/dl_hpux.xs + ! ext/ODBM_File/ODBM_File.xs ext/POSIX/POSIX.xs + ! ext/POSIX/hints/linux.pl global.sym hints/aix.sh + ! hints/bsdos.sh hints/dec_osf.sh hints/hpux.sh hints/linux.sh + ! hints/netbsd.sh hints/openbsd.sh hints/os2.sh hints/qnx.sh + ! hints/solaris_2.sh hints/svr4.sh lib/Cwd.pm + ! lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm + ! lib/File/Basename.pm lib/File/Path.pm lib/blib.pm op.c + ! os2/Changes os2/Makefile.SHs os2/OS2/PrfDB/PrfDB.xs os2/os2.c + ! os2/perl2cmd.pl perl.c perl.h pod/perlguts.pod pod/pod2man.PL + ! pp_ctl.c pp_hot.c pp_sys.c proto.h t/lib/filecopy.t + ! t/op/magic.t util.c utils/perldoc.PL vms/config.vms + ! vms/descrip.mms vms/ext/Filespec.pm vms/ext/filespec.t + ! vms/genconfig.pl vms/perly_c.vms vms/perly_h.vms vms/test.com + ! vms/vms.c +____________________________________________________________________________ +[ 885] By: gsar on 1998/04/08 01:14:29 + Log: small tweaks to make it compile (doesn't run) + Branch: asperl + ! objpp.h win32/Makefile win32/config.bc win32/config.gc + ! win32/config.vc win32/makefile.mk +____________________________________________________________________________ +[ 884] By: gsar on 1998/04/08 00:14:13 + Log: integrate mainline changes + Branch: asperl + +> Changes5.004 ext/Thread/Thread/Signal.pm + +> lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm + +> lib/ExtUtils/inst t/op/hashwarn.t + ! ObjXSub.h embedvar.h interp.sym intrpvar.h objpp.h + !> (integrate 127 files) +____________________________________________________________________________ +[ 883] By: gsar on 1998/04/06 20:21:20 + Log: make old DomainName() implementation the default (so Win95 + is happy) + Branch: win32/perl + ! win32/win32.c +____________________________________________________________________________ +[ 882] By: gsar on 1998/04/05 23:32:33 + Log: fix memory leaks in offer_nice_chunk() + Branch: win32/perl + ! perl.h sv.c +____________________________________________________________________________ +[ 881] By: gsar on 1998/04/04 23:11:52 + Log: set up PUSHSTACK for __DIE__ and __WARN__ hooks also + Branch: win32/perl + ! cop.h util.c +____________________________________________________________________________ +[ 880] By: gsar on 1998/04/04 22:35:54 + Log: fix refcounting of GvSTASH() when glob becomes nought + (this takes care of the "unbalanced strtab refcount" problem) + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 879] By: gsar on 1998/04/04 21:16:17 + Log: change 866 was incomplete + Branch: win32/perl + ! hv.c +____________________________________________________________________________ +[ 878] By: gsar on 1998/04/04 20:31:56 + Log: fixes for various noises under PERL_DESTRUCT_LEVEL + Branch: win32/perl + ! cop.h perl.c pp_ctl.c +____________________________________________________________________________ +[ 877] By: gsar on 1998/04/04 17:55:30 + Log: integrate mainline + Branch: win32/perl + +> Changes5.004 + !> Changes MANIFEST sv.c t/op/misc.t +____________________________________________________________________________ +[ 876] By: gsar on 1998/04/04 17:26:32 + Log: remove __declspec kludge in sdbm.h in favor of setting a + flag for static symbols + Branch: win32/perl + ! EXTERN.h ext/SDBM_File/sdbm/Makefile.PL + ! ext/SDBM_File/sdbm/sdbm.h +____________________________________________________________________________ +[ 875] By: gsar on 1998/04/04 01:11:57 + Log: fix order of init + Message-Id: <3.0.5.32.19980403135815.009d2440@osshe.edu> + Date: Fri, 03 Apr 1998 13:58:15 PST + From: Dan Sugalski + Subject: [PATCH 5.004_64] perl dies in perl_construct when compiled + with MULTIPLICITY + Branch: win32/perl + ! perl.c +____________________________________________________________________________ +[ 874] By: gsar on 1998/04/04 00:34:59 + Log: the EXTCONST in sdbm.h breaks SDBM on Borland, since + the declared symbol is not in a DLL (so kludge it) + Branch: win32/perl + ! ext/SDBM_File/sdbm/sdbm.h +____________________________________________________________________________ +[ 873] By: TimBunce on 1998/04/03 22:17:40 + Log: Title: "FileHandle Documentation patch" + From: "Darren/Torin/Who Ever..." + Msg-ID: <87emzqo49g.fsf@perv.daft.com> + Files: lib/FileHandle.pm + Branch: maint-5.004/perl + ! lib/FileHandle.pm +____________________________________________________________________________ +[ 872] By: TimBunce on 1998/04/03 22:01:03 + Log: Documentation and documentation related patches: + + ------ BUILD PROCESS ------ + + Title: "Docs re /usr/bin/perl quasi-standard location" + From: Tom Phoenix + Msg-ID: + Files: INSTALL pod/perlrun.pod + + ------ DOCUMENTATION ------ + + Title: "/RFC|RFC-1305/ non-greedy" + From: Jan-Pieter Cornet + Msg-ID: <6epo02$c4r$1@xs1.xs4all.nl> + Files: pod/perlre.pod + + Title: "5.004_04: perlhist.pod, buildtoc, perltoc.pod" + From: Jarkko Hietaniemi + Msg-ID: <199802191543.RAA29231@alpha.hut.fi> + Files: pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc + + Title: "5.004_04: pod/perlfunc.pod: i18n example for localtime()" + From: Jarkko Hietaniemi + Msg-ID: <199711141555.RAA18875@alpha.hut.fi> + Files: pod/perlfunc.pod + + Title: "typo-fix and suggestion for perlguts.pod" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199803051543.QAA03097@dorlas.elsevier.nl> + Files: pod/perlguts.pod + + Title: "perlfunc/syscall curiosity" + From: Roderick Schertler , Tkil + + Msg-ID: <199711302259.PAA02134@reptile.scrye.com>, + + Files: pod/perlfunc.pod + + Title: "Document sprintf %#x behaviour for zero value" + From: ilya@math.ohio-state.edu (Ilya Zakharevich) + Msg-ID: <1997Nov5.185959.2539604@cor.newman> + Files: pod/perlfunc.pod + + Title: "NUL termination (was Re: STOP THE PRESSES)" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlguts.pod + + Title: "Typo fix." + From: abigail@fnx.com + Msg-ID: <19971101120114.1030.qmail@betelgeuse.wayne.fnx.com> + Files: pod/perlop.pod pod/perlvar.pod + + Title: "5.004_63 perlrun.pod: _DEBUG_MSTATS" + From: Achim Bohnet + Msg-ID: <9803181940.AA22587@o09.xray.mpe.mpg.de> + Files: pod/perlrun.pod + + Title: "Re: Conservative C<*x = undef> patch" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perltrap.pod + + Title: "perlfunc.pod for flock()" + From: "Jeremy D. Zawodny" + Msg-ID: <3.0.5.32.19971118203119.00a723e0@woody.wcnet.org> + Files: pod/perlfunc.pod + + Title: "buglet: 'perltoc' not mentioned in perl.pod" + From: Tkil + Msg-ID: <19971127035036.17668.qmail@scrye.com> + Files: pod/perl.pod + + Title: "for() and map() peculiarity" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlsyn.pod + + Title: "Re: new text for perlsec" + From: Tom Phoenix + Msg-ID: + Files: pod/perlsec.pod + + Title: "perldsc's debugger x command" + From: Roderick Schertler + Msg-ID: <10669.878352893@eeyore.ibcinc.com> + Files: pod/perldsc.pod + + Title: "perlre.pod" + From: Ted Ashton + Msg-ID: <199802271501.KAA09279@ns.southern.edu> + Files: pod/perlre.pod + + Title: "Re: printf and $\", "printf and $\" + From: Roderick Schertler , Tom Phoenix + , nag + Msg-ID: <199711141918.TAA08096@flirble.org>, + , + Files: pod/perlfunc.pod + + Title: "recv() typo" + From: Roderick Schertler + Msg-ID: <12064.877012073@eeyore.ibcinc.com> + Files: pod/perlfunc.pod + + Title: "truncate return value" + From: Roderick Schertler + Msg-ID: <5490.878337883@eeyore.ibcinc.com> + Files: pod/perlfunc.pod + + Title: "update to perlbook.pod" + From: "Nathan V. Patwardhan" , Randal Schwartz + , Stephen Potter + , Tom Phoenix + + Msg-ID: <199803241354.HAA23938@psasolar.psa.pencom.com>, + <199803241441.OAA01261@mediaone.net>, + <8clnu0i05k.fsf@gadget.cscaper.com>, + + Files: pod/perlbook.pod + + Title: "utime documentation" + From: "Brandon S. Allbery KF8NH" , "M.J.T. Guy" + + Msg-ID: <199802180256.VAA11369@speaker.kf8nh.apk.net>, + + Files: pod/perlfunc.pod + + Title: "(well, doc patch) use of // requires successful match" + From: Roderick Schertler + Msg-ID: + Files: pod/perlop.pod + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "MakeMaker PM doc patch and a DIR buglet" + From: Achim Bohnet + Msg-ID: <9711101050.AA13868@o09.xray.mpe.mpg.de> + Files: lib/ExtUtils/MakeMaker.pm + + Title: "bareword clarification for constant.pm" + From: Roderick Schertler + Msg-ID: <6460.878143077@eeyore.ibcinc.com> + Files: lib/constant.pm + + Title: "integer rand - bug or feature?" + From: Roderick Schertler + Msg-ID: + Files: lib/integer.pm + + ------ OTHER CHANGES ------ + + Title: "FileHandle Documentation patch" + From: "Darren/Torin/Who Ever..." + Msg-ID: <87emzqo49g.fsf@perv.daft.com> + + Title: "perl5.004_61 myconfig updates" + From: Andy Dougherty + Msg-ID: + Files: myconfig + + Title: "small fixups in pod2latex.PL" + From: "Darren/Torin/Who Ever..." + Msg-ID: <873eg6o3v2.fsf@perv.daft.com> + + ------ PORTABILITY - GENERAL ------ + + Title: "Misc doc fixes for README.VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980121113134.00924a20@osshe.edu> + Files: README.vms + + Title: "moved DynaLib" + From: John Tobey + Msg-ID: <199710182332.XAA21630@remote212> + Files: ext/DynaLoader/DynaLoader.pm.PL + + ------ UTILITIES ------ + + Title: "Searching for FAQs (patch to perldoc)" + From: Piers Cawley , Russ Allbery + Msg-ID: , + + Files: utils/perldoc.PL + + Title: "perldoc" + From: Ted Ashton + Msg-ID: <199802271510.KAA10506@ns.southern.edu> + Files: utils/perldoc.PL + + Title: "perldoc -f not using pod2man" + From: Russ Allbery + Msg-ID: + Files: utils/perldoc.PL + + Title: "perldoc -m should not require pod" + From: Robin Houston + Msg-ID: <199803241319.NAA24777@stringfellow.guardian.co.uk> + Files: utils/perldoc.PL + + Title: "small fix for perldoc in perl 5.004_04" + From: Julian Yip + Msg-ID: + Files: utils/perldoc.PL + Branch: maint-5.004/perl + - ext/DynaLoader/DynaLoader.pm + ! Changes Configure INSTALL README.vms + ! ext/DynaLoader/DynaLoader.pm.PL ext/Socket/Socket.pm + ! lib/ExtUtils/MakeMaker.pm lib/Tie/Hash.pm lib/constant.pm + ! lib/integer.pm myconfig pod/buildtoc pod/checkpods.PL + ! pod/perl.pod pod/perlbook.pod pod/perldelta.pod + ! pod/perldiag.pod pod/perldsc.pod pod/perlfunc.pod + ! pod/perlguts.pod pod/perlhist.pod pod/perllocale.pod + ! pod/perlmod.pod pod/perlop.pod pod/perlre.pod pod/perlrun.pod + ! pod/perlsec.pod pod/perlstyle.pod pod/perlsyn.pod + ! pod/perltoc.pod pod/perltrap.pod pod/perlvar.pod + ! pod/pod2latex.PL toke.c utils/perldoc.PL + +---------------- +Version 5.004_64 +---------------- + +____________________________________________________________________________ +[ 871] By: mbeattie on 1998/04/03 13:38:59 + Log: Update Changes5.004 and Changes, fix MANIFEST + Branch: perl + + Changes + ! Changes5.004 MANIFEST +____________________________________________________________________________ +[ 870] By: mbeattie on 1998/04/03 13:36:29 + Log: Rename Changes to Changes5.004 (via an integrate) + Branch: perl + +> Changes5.004 + - Changes +____________________________________________________________________________ +[ 869] By: mbeattie on 1998/04/03 11:53:00 + Log: Subject: [PATCH] Perl 5.005b1t2/perl5.004_63 (resend) + Date: Wed, 18 Mar 1998 01:24:20 +0100 (MET) + From: Jan-Pieter Cornet + Branch: perl + ! sv.c t/op/misc.t +____________________________________________________________________________ +[ 868] By: mbeattie on 1998/04/03 11:16:26 + Log: Integrate win32 branch into mainline + Branch: perl + !> (integrate 31 files) +____________________________________________________________________________ +[ 867] By: gsar on 1998/04/03 08:47:55 + Log: config.* fixes + Branch: win32/perl + ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 866] By: gsar on 1998/04/03 07:22:50 + Log: fixup hv_free_ent() to not fail on null HeVAL() + Branch: win32/perl + ! hv.c perl.c +____________________________________________________________________________ +[ 865] By: gsar on 1998/04/03 07:06:12 + Log: integrate mainline + Branch: win32/perl + +> ext/Thread/Thread/Signal.pm t/op/hashwarn.t + !> (integrate 71 files) +____________________________________________________________________________ +[ 864] By: gsar on 1998/04/03 06:59:37 + Log: implement stack-of-stacks so that magic invocations don't + invalidate local stack pointer + Branch: win32/perl + ! av.c cop.h deb.c embed.h embedvar.h global.sym gv.c interp.sym + ! intrpvar.h mg.c op.c perl.c pp.h pp_ctl.c pp_sys.c proto.h + ! scope.c sv.c t/op/runlevel.t thrdvar.h util.c +____________________________________________________________________________ +[ 863] By: gsar on 1998/04/03 01:26:09 + Log: add AS patch#15 + Branch: asperl + ! ipenv.h lib/ExtUtils/MM_Unix.pm perl.c perlenv.h + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/config_h.PL win32/config_sh.PL win32/runperl.c + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 862] By: mbeattie on 1998/04/02 17:08:43 + Log: Subject: [PATCH for 5.004_63] Config_63-04-05.diff + Date: Thu, 2 Apr 1998 11:56:51 -0500 (EST) + From: Andy Dougherty + Branch: perl + ! Configure ext/Socket/Socket.xs myconfig +____________________________________________________________________________ +[ 861] By: mbeattie on 1998/04/02 16:32:53 + Log: Change 854 added { NULL, 0 } to sdbm.h which needs to be {0, 0} + since appropriate headers aren't included. + Branch: perl + ! ext/SDBM_File/sdbm/sdbm.h +____________________________________________________________________________ +[ 860] By: mbeattie on 1998/04/02 16:17:11 + Log: Bumped patchlevel.h to 64 + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 859] By: mbeattie on 1998/04/02 16:16:26 + Log: Subject: Re: [PATCH] 5.004_63: UNICOS 9 + Date: Fri, 20 Mar 1998 19:39:28 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! hints/unicos.sh regcomp.h +____________________________________________________________________________ +[ 858] By: mbeattie on 1998/04/02 16:13:24 + Log: Subject: [PATCH] Re: Odd number of elements in hash list. + Date: Sat, 28 Mar 1998 15:26:46 -0800 (PST) + From: Tom Phoenix + Branch: perl + + t/op/hashwarn.t + ! MANIFEST pod/perldiag.pod pp.c pp_hot.c +____________________________________________________________________________ +[ 857] By: mbeattie on 1998/04/02 16:08:43 + Log: Subject: [PATCH 5.004_(04|63)] Close VMS security hole + Date: Sat, 28 Mar 1998 02:05:03 -0500 (EST) + From: Charles Bailey + Branch: perl + ! vms/vms.c +____________________________________________________________________________ +[ 856] By: mbeattie on 1998/04/02 16:07:44 + Log: Subject: [PATCH] mv-if-diff + Date: Fri, 27 Mar 98 18:06:11 GMT + From: Robin Barker + Branch: perl + ! mv-if-diff +____________________________________________________________________________ +[ 855] By: mbeattie on 1998/04/02 16:06:54 + Log: From: Jan-Pieter Cornet + Subject: Re: [PATCH] [BUG 5.004_63] define/set of PERL_DESTRUCT_LEVEL + Date: Fri, 27 Mar 1998 02:11:21 +0100 (MET) + Subject: [PATCH] another destruct_level fix + Date: Mon, 30 Mar 1998 23:48:12 +0200 (MET DST) + Branch: perl + ! perl.c sv.c +____________________________________________________________________________ +[ 854] By: mbeattie on 1998/04/02 16:03:37 + Log: Subject: Next wave of _63 VMS patches + Date: Thu, 26 Mar 1998 15:11:50 -0500 (EST) + From: Charles Bailey + Branch: perl + ! EXTERN.h INTERN.h ext/SDBM_File/Makefile.PL + ! ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/dba.c + ! ext/SDBM_File/sdbm/dbd.c ext/SDBM_File/sdbm/dbu.c + ! ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/pair.c + ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h + ! ext/Thread/io.t installperl lib/ExtUtils/MM_VMS.pm + ! lib/Net/Ping.pm perldir.h perlsdio.h t/lib/english.t + ! vms/config.vms vms/descrip.mms vms/ext/Filespec.pm + ! vms/ext/Stdio/0README.txt vms/ext/Stdio/Stdio.pm + ! vms/ext/Stdio/Stdio.xs vms/ext/Stdio/test.pl + ! vms/ext/filespec.t vms/genconfig.pl vms/perly_c.vms vms/vms.c + ! vms/vmsish.h +____________________________________________________________________________ +[ 853] By: mbeattie on 1998/04/02 15:55:46 + Log: Subject: [PATCH 5.00463] Confusing error from perl -e "x'" + Date: Wed, 25 Mar 1998 17:43:17 -0500 (EST) + From: Hans Mulder + Branch: perl + ! toke.c +____________________________________________________________________________ +[ 852] By: mbeattie on 1998/04/02 15:54:24 + Log: Subject: [PATCH] small fixups in pod2latex.PL + Date: 25 Mar 1998 13:30:25 -0800 + From: "Darren/Torin/Who Ever..." + Branch: perl + ! pod/pod2latex.PL +____________________________________________________________________________ +[ 851] By: mbeattie on 1998/04/02 15:50:58 + Log: Subject: [PATCH] hints/irix_6.sh with GCC + Date: Tue, 24 Mar 1998 12:25:10 -0800 (EST) + From: kstar@chapin.edu (Kurt D. Starsinic) + Branch: perl + ! hints/irix_6.sh +____________________________________________________________________________ +[ 850] By: mbeattie on 1998/04/02 15:45:33 + Log: Subject: [PATCH] perldoc -m + Date: Tue, 24 Mar 1998 13:19:38 GMT + From: Robin Houston + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 849] By: mbeattie on 1998/04/02 15:42:52 + Log: Subject: [PATCH for 5.004_63] dos-djgpp update + Date: Mon, 23 Mar 1998 14:13:46 +0100 + From: Laszlo Molnar + Branch: perl + ! djgpp/config.over hints/dos_djgpp.sh +____________________________________________________________________________ +[ 848] By: mbeattie on 1998/04/02 15:38:19 + Log: Subject: [PATCH] Stale SP in pp_substr + Date: Thu, 19 Mar 1998 21:28:02 -0600 (CST) + From: Stephen McCamant + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 847] By: mbeattie on 1998/04/02 15:36:33 + Log: Add missing export of "nice" to ext/POSIX/POSIX.pm (Phil Tait) + Branch: perl + ! ext/POSIX/POSIX.pm +____________________________________________________________________________ +[ 846] By: mbeattie on 1998/04/02 15:34:36 + Log: Subject: [PATCH] 5.004_63: further -e patching + Date: Wed, 18 Mar 1998 23:21:08 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! perl.c pod/perldiag.pod +____________________________________________________________________________ +[ 845] By: mbeattie on 1998/04/02 15:25:18 + Log: Andy Dougherty's configuration patches (Config_63-01 up to 04). + Branch: perl + ! Configure INSTALL Policy_sh.SH Porting/Glossary + ! Porting/config.sh Porting/config_H config_h.SH + ! ext/POSIX/POSIX.xs handy.h hints/hpux.sh myconfig perlsock.h + ! pp.c pp_sys.c regexec.c +____________________________________________________________________________ +[ 844] By: mbeattie on 1998/04/02 14:28:17 + Log: Subject: [PATCH 5.004_63] perlrun.pod: PERL_DEBUG_MSTATS + Date: Wed, 18 Mar 1998 20:40:19 +0100 + From: Achim Bohnet + Branch: perl + ! pod/perlrun.pod +____________________________________________________________________________ +[ 843] By: mbeattie on 1998/04/02 14:26:52 + Log: From: Dan Sugalski + Subject: 5.004_63 picky compiler fixes [PATCH] + Date: Wed, 18 Mar 1998 09:36:32 -0800 + Subject: [PATCH 5.004_63] Fix function prototype with long doubles + Date: Wed, 18 Mar 1998 14:48:19 -0800 + Branch: perl + ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs vms/vms.c +____________________________________________________________________________ +[ 842] By: mbeattie on 1998/04/02 14:22:41 + Log: From: Stephen Potter + Subject: Re: doc: perlrun typo + Date: Wed, 18 Mar 1998 10:06:55 -0600 + Subject: Re: [PATCH 5.004_63] PerlLIO abstraction cleanup + Date: Tue, 24 Mar 1998 21:20:51 -0600 + Branch: perl + ! mg.c perl.c pod/perlrun.pod pp_hot.c pp_sys.c util.c +____________________________________________________________________________ +[ 841] By: mbeattie on 1998/04/02 14:17:31 + Log: Subject: [PATCH] Add "Full 64 bit support" to Todo; document Todo in pumpkin.pod + Date: Wed, 18 Mar 1998 12:44:58 +0100 + From: Dominic Dunlop + Branch: perl + ! Porting/pumpkin.pod Todo +____________________________________________________________________________ +[ 840] By: mbeattie on 1998/04/02 14:14:22 + Log: Subject: [PATCH] Configure hints/ patches + Date: Wed, 18 Mar 1998 02:47:38 +0100 (MET) + From: Jan-Pieter Cornet + Branch: perl + ! hints/linux.sh hints/qnx.sh +____________________________________________________________________________ +[ 839] By: mbeattie on 1998/04/02 14:13:13 + Log: Remove duplicate code in cygwin32/perlgcc (Blair Zajac) + Branch: perl + ! cygwin32/perlgcc +____________________________________________________________________________ +[ 838] By: gsar on 1998/03/28 05:01:57 + Log: fix Env.pm to weed out illegal names + Branch: win32/perl + ! lib/Env.pm +____________________________________________________________________________ +[ 837] By: gsar on 1998/03/28 04:39:43 + Log: fix typo in makefile.mk + Branch: win32/perl + ! win32/makefile.mk +____________________________________________________________________________ +[ 836] By: gsar on 1998/03/23 17:40:15 + Log: add file: to installhtml URLs + Branch: win32/perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 835] By: mbeattie on 1998/03/18 11:03:11 + Log: Add Thread::Signal to run signal handlers reliably in a new thread + Branch: perl + + ext/Thread/Thread/Signal.pm + ! MANIFEST ext/Thread/Thread.xs + +---------------- +Version 5.004_63 +---------------- + +____________________________________________________________________________ +[ 834] By: mbeattie on 1998/03/17 16:19:10 + Log: Policy_sh.SH had extra $ in pager=$pager comment (Hallvard B Furuseth) + Branch: perl + ! Policy_sh.SH +____________________________________________________________________________ +[ 833] By: mbeattie on 1998/03/17 16:11:02 + Log: Integrate win32 branch into mainline. + Branch: perl + !> regcomp.c win32/config.bc win32/config.gc win32/config.vc + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + !> win32/win32.c +____________________________________________________________________________ +[ 832] By: gsar on 1998/03/17 14:32:39 + Log: propagate bugfix @ change831 from asperl + Branch: win32/perl + ! regcomp.c +____________________________________________________________________________ +[ 831] By: gsar on 1998/03/17 14:02:51 + Log: fix buggy order of free() in regcomp.c (from AS) + Branch: asperl + ! regcomp.c +____________________________________________________________________________ +[ 830] By: gsar on 1998/03/17 01:10:54 + Log: add a part of AS patch#14, backout incomplete variable + name changes for gcc. Builds and tests under VC/BC once again. + Branch: asperl + ! bytecode.h mg.c pp.c pp_ctl.c pp_hot.c toke.c +____________________________________________________________________________ +[ 829] By: gsar on 1998/03/16 23:49:18 + Log: stray tweak to win32.c + Branch: win32/perl + ! win32/win32.c +____________________________________________________________________________ +[ 828] By: gsar on 1998/03/16 22:06:03 + Log: update win32/config* files + Branch: win32/perl + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc +____________________________________________________________________________ +[ 827] By: gsar on 1998/03/16 19:09:30 + Log: trivial integrate of mainline + Branch: win32/perl + +> lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm + +> lib/ExtUtils/inst + !> (integrate 61 files) +____________________________________________________________________________ +[ 826] By: mbeattie on 1998/03/16 16:39:23 + Log: newCONSTSUB had private MY_start_subparse. + Branch: perl + ! op.c +____________________________________________________________________________ +[ 825] By: mbeattie on 1998/03/16 16:36:55 + Log: Missing dTHR in hv_fetch_ent when statics moved to thread struct. + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 824] By: mbeattie on 1998/03/16 16:27:43 + Log: Added missing entry for lib/ExtUtils/Packlist.pm to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 823] By: mbeattie on 1998/03/16 16:26:02 + Log: Missed p4 add of lib/ExtUtils/Packlist.pm in change 814. + Branch: perl + + lib/ExtUtils/Packlist.pm +____________________________________________________________________________ +[ 822] By: mbeattie on 1998/03/16 16:22:58 + Log: Bump patchlevel.h to 63. + Branch: perl + ! ext/IO/IO.xs patchlevel.h + !> (integrate 41 files) +____________________________________________________________________________ +[ 821] By: mbeattie on 1998/03/16 16:18:35 + Log: newCONSTSUB added (XSUB equivalent for inlinable sub () { 123 }). + Subject: Bundling builtin.pm and newCONSTSUB with the core? + From: jan.dubois@ibm.net (Jan Dubois) + Date: Sun, 15 Mar 1998 19:09:05 +0100 + Branch: perl + ! embed.h global.sym op.c pod/perlguts.pod proto.h +____________________________________________________________________________ +[ 820] By: mbeattie on 1998/03/16 16:02:50 + Log: Subject: [PATCH] STRESS_REALLOC + Date: Fri, 13 Mar 1998 22:28:19 -0600 (CST) + From: Stephen McCamant + Branch: perl + ! malloc.c perl.c scope.c +____________________________________________________________________________ +[ 819] By: mbeattie on 1998/03/16 16:01:06 + Log: Subject: [BUG+PATCH] _62 with -DDEBUGGING and -Duseperlio + Date: Fri, 13 Mar 1998 23:21:25 +0100 + From: Jan-Pieter Cornet + Branch: perl + ! perly.c +____________________________________________________________________________ +[ 818] By: mbeattie on 1998/03/16 15:59:16 + Log: Subject: [Configure PATCH] for OS/2 + Date: Fri, 13 Mar 1998 16:18:12 -0500 (EST) + From: Ilya Zakharevich + [Two hunks to Configure failed to apply due to clashes] + Branch: perl + ! Configure hints/os2.sh +____________________________________________________________________________ +[ 817] By: mbeattie on 1998/03/16 15:55:28 + Log: Subject: [PATCH 5.004_62] VMS updates (direct) + Date: Thu, 12 Mar 1998 16:02:29 -0500 (EST) + From: Charles Bailey + [Needed manual tweaks on vms/config.vms since it clashed with other + patches. I may have got it wrong.] + Branch: perl + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/Mksymlists.pm perl.h pp.c pp_hot.c regcomp.c + ! regcomp.h utils/perldoc.PL vms/config.vms vms/descrip.mms + ! vms/ext/Stdio/Stdio.pm vms/ext/filespec.t vms/fndvers.com + ! vms/gen_shrfls.pl vms/genconfig.pl vms/sockadapt.h + ! vms/test.com vms/vms.c vms/vmsish.h +____________________________________________________________________________ +[ 816] By: mbeattie on 1998/03/16 15:26:04 + Log: Subject: [PATCH] Let h2xs read multiple header files + Date: Tue, 10 Mar 1998 09:35:42 -0500 (EST) + From: Benjamin Sugars + Branch: perl + ! utils/h2xs.PL +____________________________________________________________________________ +[ 815] By: mbeattie on 1998/03/16 15:24:12 + Log: Subject: Re: Almost OK: Perl 5.004_62 on VMS 7.1 + Date: Mon, 09 Mar 1998 09:18:56 -0800 + From: Dan Sugalski + Branch: perl + ! vms/config.vms +____________________________________________________________________________ +[ 814] By: mbeattie on 1998/03/16 13:17:14 + Log: Subject: PATCH for 5.004_62 : Add .packlist handling classes to ExtUtils + Date: Sun, 08 Mar 1998 12:50:23 +0000 + From: Alan Burlison + plus manual update of MANIFEST + Branch: perl + + lib/ExtUtils/Installed.pm lib/ExtUtils/inst + ! MANIFEST installman installperl lib/ExtUtils/Install.pm + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 813] By: mbeattie on 1998/03/16 13:08:55 + Log: From: Blair Zajac + Subject: PATCH: util.c and util.h function declarations do not match + Date: Fri, 6 Mar 1998 10:29:29 -0800 (PST) + Subject: PATCH: cgywin32 patch for perlgcc + Date: Fri, 6 Mar 1998 11:15:36 -0800 (PST) + Subject: PATCH: perl5.004_62 on cygwin32 + Date: Fri, 6 Mar 1998 11:57:35 -0800 (PST) + Branch: perl + ! Configure cygwin32/perlgcc cygwin32/perlld pp_sys.c x2p/util.c +____________________________________________________________________________ +[ 812] By: mbeattie on 1998/03/16 12:55:39 + Log: From: Andy Dougherty + Subject: [PATCH 5.004_62} Config_62-01 patch available. + Date: Mon, 9 Mar 1998 15:23:33 -0500 (EST) + Subject: [PATCH 5.004_62] Tiny hint file updates + Date: Mon, 9 Mar 1998 13:21:46 -0500 (EST) + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH ext/ODBM_File/ODBM_File.xs handy.h hints/aix.sh + ! hints/dec_osf.sh hints/dos_djgpp.sh hints/freebsd.sh + ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh + ! hints/os2.sh hints/solaris_2.sh patchlevel.h perl.c perl.h + ! perllio.h pod/perldiag.pod pp_sys.c vms/config.vms +____________________________________________________________________________ +[ 811] By: mbeattie on 1998/03/16 12:13:55 + Log: DOS djgpp updates: + From: Laszlo Molnar + Subject: [PATCH for 5.004_61] dos-djgpp update + Date: Fri, 6 Mar 1998 10:41:01 +0100 + Subject: [PATCH 5.004_62] dos-djgpp update + Date: Thu, 12 Mar 1998 13:34:51 +0100 + Branch: perl + ! djgpp/config.over hints/dos_djgpp.sh +____________________________________________________________________________ +[ 810] By: gsar on 1998/03/16 08:48:17 + Log: integrate mainline + Branch: win32/perl + !> pp_sys.c +____________________________________________________________________________ +[ 809] By: gsar on 1998/03/16 08:44:37 + Log: various changes to get asperl working under Borland + (passes all tests when built under PERL_OBJECT) + Branch: asperl + ! ObjXSub.h ext/Opcode/Opcode.xs globals.c mg.c objpp.h op.c + ! perl.h perly.c perly.c.diff pp.c pp_ctl.c pp_hot.c pp_sys.c + ! proto.h scope.h sv.c toke.c win32/Makefile win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc win32/makedef.pl + ! win32/makefile.mk win32/runperl.c win32/win32.c win32/win32.h + ! win32/win32sck.c +____________________________________________________________________________ +[ 808] By: gsar on 1998/03/12 19:50:20 + Log: set sockets to nonoverlapped mode for every thread + Message-Id: <35081FE4.965A484D@enteract.com> + Date: Thu, 12 Mar 1998 11:48:20 CST + From: Steve Nielsen + Subject: [PATCH 5.004_62] win32: set sockopt on a per-thread basis + Branch: win32/perl + ! win32/win32.h win32/win32sck.c +____________________________________________________________________________ +[ 807] By: gsar on 1998/03/12 19:26:54 + Log: add AS patch#13 + Branch: asperl + ! win32/Makefile +____________________________________________________________________________ +[ 806] By: gsar on 1998/03/12 00:51:08 + Log: added AS patch#12 with minor changes + Branch: asperl + ! ObjXSub.h bytecode.h byterun.c doio.c iplio.h + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm + ! lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp objpp.h perl.c + ! perllio.h proto.h regcomp.c win32/Makefile win32/config_h.PL + ! win32/runperl.c +____________________________________________________________________________ +[ 805] By: gsar on 1998/03/10 20:35:10 + Log: reinstate some standard sig_names to avoid noise from + modules (and in hopes of making them _do_ something in future) + Branch: win32/perl + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc +____________________________________________________________________________ +[ 804] By: gsar on 1998/03/10 20:33:05 + Log: mingw32 tweaks + Branch: win32/perl + ! win32/makefile.mk win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 803] By: gsar on 1998/03/09 20:56:07 + Log: tweak Win32::DomainName() implementation + Branch: win32/perl + ! win32/Makefile win32/win32.c +____________________________________________________________________________ +[ 802] By: gsar on 1998/03/09 03:51:01 + Log: merge C patch, also moved statics in + [ah]v.c to thrdvar.h + Branch: win32/perl + ! av.c embedvar.h hv.c scope.c t/op/local.t thrdvar.h +____________________________________________________________________________ +[ 801] By: gsar on 1998/03/09 02:38:35 + Log: minor win32 support fixes + - add a better implementation of Win32::DomainName() (as + suggested by Jutta M. Klebe ) + - fix opendir() emulation was unsafe what given long paths + Branch: win32/perl + ! win32/win32.c +____________________________________________________________________________ +[ 800] By: nick on 1998/03/07 09:36:41 + Log: There has been a 'thaw' in config.h (the ICE has gone ;-)) + So pp_sys.c needs tweaking otherwise it does not believe getservby*() + exist. (Breaks libnet). + Branch: perl + ! pp_sys.c +____________________________________________________________________________ +[ 799] By: gsar on 1998/03/07 07:51:28 + Log: integrate mainline changes + Branch: asperl + !> (integrate 111 files) +____________________________________________________________________________ +[ 798] By: gsar on 1998/03/07 07:01:55 + Log: integrate mainline + Branch: win32/perl + !> myconfig patchlevel.h +____________________________________________________________________________ +[ 797] By: gsar on 1998/03/07 06:49:49 + Log: provide our own popen()/pclose() to fix problems with qx//: + - qx// used to always invoke the shell, now does so only when needed + - qx// didn't respect PERL5SHELL, now does + Branch: win32/perl + ! lib/ExtUtils/typemap win32/config_h.PL win32/win32.c +____________________________________________________________________________ +[ 796] By: gsar on 1998/03/07 01:37:10 + Log: a missed s/sp/SP/ + Branch: win32/perl + ! lib/ExtUtils/typemap pod/perlcall.pod +____________________________________________________________________________ +[ 795] By: gsar on 1998/03/07 01:05:21 + Log: change all 'sp' to 'SP' in code and in the docs. Explicitly + mention that local stack pointer should be called SP. This makes the + API safer from source incompatibilities down the line. + Branch: win32/perl + ! av.c doio.c doop.c ext/DB_File/DB_File.xs + ! ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs + ! ext/POSIX/POSIX.xs ext/Socket/Socket.xs ext/Thread/Thread.xs + ! gv.c mg.c op.c os2/OS2/REXX/REXX.xs perl.c pod/perlcall.pod + ! pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod pp.c + ! pp_ctl.c pp_hot.c pp_sys.c util.c + +---------------- +Version 5.004_62 +---------------- + +____________________________________________________________________________ +[ 794] By: mbeattie on 1998/03/06 09:38:08 + Log: Subject: [PATCH] perl5.004_61 myconfig updates + Date: Thu, 5 Mar 1998 15:10:54 -0500 (EST) + From: Andy Dougherty + Branch: perl + ! myconfig +____________________________________________________________________________ +[ 793] By: mbeattie on 1998/03/06 09:36:37 + Log: Bump patchlevel.h to 62. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 792] By: mbeattie on 1998/03/06 09:35:57 + Log: Integrate win32 branch into mainline. + Branch: perl + !> bytecode.h op.c proto.h scope.c win32/Makefile win32/config.bc + !> win32/config.gc win32/config.vc win32/config_H.bc + !> win32/config_H.gc win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 791] By: gsar on 1998/03/06 06:00:08 + Log: various + - s/PerlIO_fread/PerlIO_read/, the former doesn't exist + - add missing prototypes + - regenerate win32/config*.?c + Branch: win32/perl + ! bytecode.h proto.h win32/config.bc win32/config.gc + ! win32/config.vc win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc win32/makefile.mk +____________________________________________________________________________ +[ 790] By: gsar on 1998/03/06 03:19:23 + Log: fix typo in Makefile + Branch: win32/perl + ! win32/Makefile +____________________________________________________________________________ +[ 789] By: gsar on 1998/03/05 22:55:53 + Log: integrate mainline + Branch: win32/perl + !> (integrate 47 files) +____________________________________________________________________________ +[ 788] By: gsar on 1998/03/05 20:02:09 + Log: added AS patch#11 + Message-Id: <01BD4820.AFC70110.dougl@ActiveState.com> + Date: Thu, 05 Mar 1998 10:23:04 PST + From: Douglas Lankshear + + This patch fixes a bug I introduced removing duplicate code. + -- Doug + Branch: asperl + ! ObjXSub.h objpp.h win32/runperl.c +____________________________________________________________________________ +[ 787] By: gsar on 1998/03/05 19:56:17 + Log: add Nick's dTHR fixes + Branch: win32/perl + ! op.c scope.c +____________________________________________________________________________ +[ 786] By: gsar on 1998/03/05 19:54:49 + Log: maintpatch + Message-Id: <199803050749.CAA15206@Orb.Nashua.NH.US> + Date: Thu, 05 Mar 1998 02:49:46 EST + From: Spider Boardman + Subject: [PATCH] 5.004_04 +MAINT_TRIAL_1 broken when sizeof(int) != sizeof(void + Branch: win32/perl + ! scope.c +____________________________________________________________________________ +[ 785] By: mbeattie on 1998/03/05 19:12:14 + Log: Subject: [5.004_61 PATCH] Make incompatible changes to RE engine NOW + Date: Wed, 4 Mar 1998 23:55:54 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! op.c proto.h regcomp.c regexp.h util.c +____________________________________________________________________________ +[ 784] By: mbeattie on 1998/03/05 19:11:09 + Log: Subject: [PATCH] Re: perl 5.0061 unable to build on sparc 5 Sol2.5.1 threads. + Date: Wed, 4 Mar 1998 10:18:03 GMT + From: Nick Ing-Simmons + Branch: perl + ! atomic.h +____________________________________________________________________________ +[ 783] By: mbeattie on 1998/03/05 19:09:16 + Log: Subject: Configure patches -01 and -02 for 5.004_61. + Date: Tue, 3 Mar 1998 16:41:16 -0500 (EST) + From: Andy Dougherty + Branch: perl + ! Configure INSTALL Policy_sh.SH Porting/Glossary + ! Porting/config.sh Porting/config_H Porting/pumpkin.pod + ! config_h.SH handy.h hints/README.hints hints/aix.sh + ! hints/linux.sh hints/solaris_2.sh hints/unicos.sh + ! makedepend.SH myconfig pp_sys.c +____________________________________________________________________________ +[ 782] By: mbeattie on 1998/03/05 19:05:23 + Log: Subject: [PATCH] Compiling with OP_IN_REGISTER + Date: 03 Mar 1998 18:05:07 +0100 + From: Gisle Aas + Branch: perl + ! perl.h pp_ctl.c +____________________________________________________________________________ +[ 781] By: mbeattie on 1998/03/05 19:04:34 + Log: Subject: [PATCH] Make autouse -w-safe + Date: Mon, 2 Mar 1998 21:36:02 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! lib/autouse.pm op.c sv.c +____________________________________________________________________________ +[ 780] By: mbeattie on 1998/03/05 19:02:50 + Log: Subject: [PATCH] External symbol re_croak2 + Date: 02 Mar 1998 13:00:45 +0100 + From: Gisle Aas + Branch: perl + ! regcomp.c regcomp.h +____________________________________________________________________________ +[ 779] By: mbeattie on 1998/03/05 19:01:25 + Log: Subject: [PATCH 5.004_61] Miscellaneous minor fixes + Date: Mon, 02 Mar 1998 01:48:27 -0500 (EST) + From: bailey@newman.upenn.edu (Charles Bailey) + Branch: perl + ! bytecode.h embedvar.h ext/B/Makefile.PL ext/B/byteperl.c + ! ext/Thread/Makefile.PL lib/File/Path.pm patchlevel.h perldir.h + ! sv.h +____________________________________________________________________________ +[ 778] By: mbeattie on 1998/03/05 18:53:13 + Log: Subject: [PATCH 5.004_61] USHRT range limit macros + Date: Mon, 02 Mar 1998 01:41:41 -0500 (EST) + From: bailey@newman.upenn.edu (Charles Bailey) + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 777] By: mbeattie on 1998/03/05 18:50:25 + Log: Subject: [PATCH 5.004_61] File::Basename taint fix (revised) + Date: Mon, 02 Mar 1998 01:39:47 -0500 (EST) + From: bailey@newman.upenn.edu (Charles Bailey) + Branch: perl + ! lib/File/Basename.pm +____________________________________________________________________________ +[ 776] By: mbeattie on 1998/03/05 18:49:15 + Log: Subject: [PATCH] Take out version number in perlguts (perl5.004_61) + Date: 01 Mar 1998 15:16:03 +0100 + From: Gisle Aas + Branch: perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 775] By: mbeattie on 1998/03/05 18:48:05 + Log: Subject: Re: [PATCH] 5.004_61: Makefile.SH (Re: 5.004_61: annoyingly missing patch) + Date: Sun, 1 Mar 1998 12:14:44 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! Makefile.SH perl_exp.SH +____________________________________________________________________________ +[ 774] By: mbeattie on 1998/03/05 18:46:32 + Log: Subject: Almost OK: 5.004_61 (threads, perlio) + Date: Sun, 1 Mar 1998 02:02:47 -0500 + From: Spider Boardman + Branch: perl + ! bytecode.h bytecode.pl byterun.c byterun.h perlsdio.h +____________________________________________________________________________ +[ 773] By: mbeattie on 1998/03/05 18:43:57 + Log: Subject: [PATCH 5.004_61] print sort {-1} 1..10; hangs + Date: Sat, 28 Feb 1998 15:51:14 -0500 (EST) + From: Hans Mulder + Branch: perl + ! pp_ctl.c +____________________________________________________________________________ +[ 772] By: mbeattie on 1998/03/05 18:39:25 + Log: Subject: [PATCH] 5.004_61: Makefile.SH: 'ok' target needs perlbug... + Date: Sat, 28 Feb 1998 17:06:41 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! Makefile.SH +____________________________________________________________________________ +[ 771] By: mbeattie on 1998/03/05 18:38:32 + Log: Subject: [PATCH] 5.004_61: hints/netbsd.sh + Date: Sat, 28 Feb 1998 16:35:32 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! hints/netbsd.sh +____________________________________________________________________________ +[ 770] By: mbeattie on 1998/03/05 18:36:50 + Log: Add byterun.c to cflags.SH (Dominic Dunlop ) + Branch: perl + ! cflags.SH +____________________________________________________________________________ +[ 769] By: mbeattie on 1998/03/05 18:34:35 + Log: Change getc/fread to PerlIO_getc/fread in bytecode.h: + Subject: [PATCH 5.004_61] bunch of small patches + Date: Fri, 27 Feb 1998 20:03:29 -0500 (EST) + From: Andrew Cohen + Branch: perl + ! bytecode.h +____________________________________________________________________________ +[ 768] By: mbeattie on 1998/03/05 18:13:06 + Log: Integrate win32 branch into mainline. + Branch: perl + !> (integrate 53 files) +____________________________________________________________________________ +[ 767] By: TimBunce on 1998/03/05 11:48:09 + Log: Update to change 744. + Branch: maint-5.004/perl + ! lib/ExtUtils/Install.pm +____________________________________________________________________________ +[ 765] By: TimBunce on 1998/03/05 11:24:24 + Log: Update embed.h after make regen_headers. + Branch: maint-5.004/perl + ! embed.h +____________________________________________________________________________ +[ 764] By: TimBunce on 1998/03/05 11:05:13 + Log: APPLLIB_EXP now has arch and version dirs added to @INC + Branch: maint-5.004/perl + ! perl.c +____________________________________________________________________________ +[ 763] By: TimBunce on 1998/03/05 11:01:38 + Log: Added hints/openbsd.sh and t/op/pos.t to MANIFEST + Added MAINT_TRIAL_1 local patch label to patchlevel.h + Removed win32/win32io.c and win32/win32io.h from repository + Branch: maint-5.004/perl + - win32/win32io.c win32/win32io.h + ! MANIFEST patchlevel.h +____________________________________________________________________________ +[ 762] By: TimBunce on 1998/03/05 10:05:34 + Log: Title: "5.004_04 +MAINT_TRIAL_1 broken when sizeof(int) != sizeof(void)" + From: Spider Boardman + Files: scope.c + Branch: maint-5.004/perl + ! scope.c +____________________________________________________________________________ +[ 761] By: TimBunce on 1998/03/05 10:03:10 + Log: Title: "properly refcount localization, fix C" + From: Gurusamy Sarathy + Msg-ID: <199802191207.MAA10742@toad.ig.co.uk> + Files: av.c hv.c scope.c t/op/local.t + Branch: maint-5.004/perl + ! av.c hv.c scope.c t/op/local.t +____________________________________________________________________________ +[ 760] By: gsar on 1998/03/04 20:58:21 + Log: added AS patch#10 + Message-Id: <01BD4691.963D1670.dougl@ActiveState.com> + Date: Tue, 03 Mar 1998 10:46:13 PST + From: Douglas Lankshear + Subject: [PATCH] + + Here's a patch to win32/dl_win32.xs that is a fix for the lookup of statically + linked modules. + + -- Doug + Branch: asperl + ! win32/dl_win32.xs +____________________________________________________________________________ +[ 759] By: TimBunce on 1998/03/04 18:46:41 + Log: Update patchls utility + Branch: maint-5.004/perl + ! Porting/patchls +____________________________________________________________________________ +[ 758] By: TimBunce on 1998/03/04 17:07:06 + Log: perldoc -f now uses pager if text is too long for screen + Branch: maint-5.004/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 757] By: TimBunce on 1998/03/04 16:57:04 + Log: Added OpenBSD hint file from + Document 'warn with no args' behaviour, from + Branch: maint-5.004/perl + + hints/openbsd.sh + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 756] By: TimBunce on 1998/03/04 16:48:40 + Log: Fix for new gnulibc stdio.h when using sfio+perlio + Branch: maint-5.004/perl + ! perlsdio.h +____________________________________________________________________________ +[ 755] By: TimBunce on 1998/03/04 16:47:08 + Log: Fixed typo in vms/ext/Stdio/Stdio.pm AUTOLOAD + Added details of split in scalar context to perlfunc.pod + Branch: maint-5.004/perl + ! pod/perlfunc.pod vms/ext/Stdio/Stdio.pm +____________________________________________________________________________ +[ 754] By: TimBunce on 1998/03/04 16:35:58 + Log: Updated perl -v info to include reference to docs and home page. + Branch: maint-5.004/perl + ! perl.c +____________________________________________________________________________ +[ 753] By: TimBunce on 1998/03/04 16:31:29 + Log: Updated hints/bsdos.sh for BSD/OS 3.1 + Fixed typo in pod/perlsyn.pod + Added workaround for old gmake in ext/SDBM_File/sdbm/Makefile.PL + Fixed typo in ext/GDBM_File/GDBM_File.pm + Branch: maint-5.004/perl + ! ext/GDBM_File/GDBM_File.pm ext/SDBM_File/sdbm/Makefile.PL + ! hints/bsdos.sh pod/perlsyn.pod +____________________________________________________________________________ +[ 752] By: TimBunce on 1998/03/04 15:49:19 + Log: Changed bug address in README to perlbug@perl.com + Changed Copyright in perl.c to 1998 + Added op/pos.t test from Robin Houston + Branch: maint-5.004/perl + + t/op/pos.t + ! README perl.c +____________________________________________________________________________ +[ 751] By: TimBunce on 1998/03/04 14:47:15 + Log: Make t/comp/require.t and t/lib/ph.t executable in repository + Branch: maint-5.004/perl + ! t/comp/require.t t/lib/ph.t +____________________________________________________________________________ +[ 750] By: TimBunce on 1998/03/04 13:29:58 + Log: Added dTHR definition to ease backwards compatibility for XS + source code from 5.005. + Branch: maint-5.004/perl + ! perl.h +____________________________________________________________________________ +[ 749] By: TimBunce on 1998/03/04 12:19:19 + Log: Title: "rename local 'op' variables to 'o'", #F114 + From: Gurusamy Sarathy + Files: op.h opcode.h proto.h dump.c op.c opcode.pl pp_ctl.c run.c scope.c + toke.c + Branch: maint-5.004/perl + ! dump.c op.c op.h opcode.h opcode.pl pp_ctl.c proto.h run.c + ! scope.c toke.c +____________________________________________________________________________ +[ 748] By: TimBunce on 1998/03/04 12:12:27 + Log: Title: "consolidated win32 patch", #F112 + From: Gurusamy Sarathy + Files: MANIFEST pod/perlfaq2.pod pod/perlrun.pod win32/include/sys/socket.h + EXTERN.h INTERN.h dosish.h lib/ExtUtils/Command.pm + lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm + lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm t/TEST + t/harness win32/win32.h win32/win32iop.h README.win32 + doio.c installhtml installperl pp_sys.c win32/Makefile + win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc win32/config_h.PL win32/config_sh.PL + win32/dl_win32.xs win32/makedef.pl win32/makefile.mk + win32/perllib.c win32/runperl.c win32/win32.c + win32/win32sck.c win32/bin/perlglob.pl x2p/a2p.h x2p/a2p.c + x2p/a2py.c + Branch: maint-5.004/perl + + win32/bin/perlglob.pl + ! EXTERN.h INTERN.h MANIFEST README.win32 doio.c dosish.h + ! installhtml installperl lib/ExtUtils/Command.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm + ! lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm + ! pod/perlfaq2.pod pod/perlrun.pod pp_sys.c t/TEST t/harness + ! win32/Makefile win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/config_h.PL + ! win32/config_sh.PL win32/dl_win32.xs + ! win32/include/sys/socket.h win32/makedef.pl win32/makefile.mk + ! win32/perllib.c win32/runperl.c win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32sck.c x2p/a2p.c x2p/a2p.h + ! x2p/a2py.c +____________________________________________________________________________ +[ 747] By: TimBunce on 1998/03/04 11:59:57 + Log: Title: "initialize @INC in ph.t, and fix up MANIFEST", #F111 + From: Gurusamy Sarathy + Files: MANIFEST t/lib/ph.t + Branch: maint-5.004/perl + ! MANIFEST t/lib/ph.t +____________________________________________________________________________ +[ 746] By: TimBunce on 1998/03/04 11:47:43 + Log: Title: "properly save STDOUT during system() in debugger", #F110 + From: Jason Smith + Files: lib/perl5db.pl + Branch: maint-5.004/perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 745] By: TimBunce on 1998/03/04 11:40:19 + Log: Title: "generate DynaLoader.pm at build time", #F109 + From: Achim Bohnet + Msg-ID: <9802111938.AA26224@o09.xray.mpe.mpg.de> + Files: MANIFEST ext/DynaLoader/DynaLoader.pm.PL ext/DynaLoader/Makefile.PL + Branch: maint-5.004/perl + + ext/DynaLoader/DynaLoader.pm.PL + ! MANIFEST ext/DynaLoader/Makefile.PL +____________________________________________________________________________ +[ 744] By: TimBunce on 1998/03/04 11:34:09 + Log: Title: "Install extensions with bootstrap in $archlib", #F108 + From: koenig@anna.mind.de (Andreas J. Koenig), koenig@kulturbox.de (Andreas + J. Koenig) + Msg-ID: + Files: lib/ExtUtils/Install.pm + Branch: maint-5.004/perl + ! lib/ExtUtils/Install.pm +____________________________________________________________________________ +[ 743] By: TimBunce on 1998/03/04 10:45:05 + Log: Title: "Pod::Html trips over "C<0>"", #F107 + From: Chip Salzenberg + Files: lib/Pod/Html.pm + Branch: maint-5.004/perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 742] By: TimBunce on 1998/03/04 10:12:54 + Log: Title: "5.004_58 | _04: pod2*,perlpod: L", #F106 + From: Achim Bohnet + Msg-ID: <9802111629.AA00595@o09.xray.mpe.mpg.de> + Files: pod/perlpod.pod lib/Pod/Html.pm lib/Pod/Text.pm pod/pod2man.PL + Branch: maint-5.004/perl + ! lib/Pod/Html.pm lib/Pod/Text.pm pod/perlpod.pod pod/pod2man.PL +____________________________________________________________________________ +[ 741] By: TimBunce on 1998/03/04 10:08:31 + Log: Title: "New patch for $^E==GetLastError() under Win32", #F105 + From: Gurusamy Sarathy , Tye McQueen + , ilya@math.ohio-state.edu (Ilya + Zakharevich) + Msg-ID: <199801040630.AA29298@metronet.com>, + <199801041826.NAA11568@aatma.engin.umich.edu>, + <1998Jan4.130412.2719461@cor.newman> + Files: pod/perlfunc.pod pod/perlvar.pod doio.c lib/dumpvar.pl lib/perl5db.pl + win32/win32.h mg.c util.c win32/makedef.pl win32/win32.c + Branch: maint-5.004/perl + ! doio.c lib/dumpvar.pl lib/perl5db.pl mg.c pod/perlfunc.pod + ! pod/perlvar.pod util.c win32/makedef.pl win32/win32.c + ! win32/win32.h +____________________________________________________________________________ +[ 740] By: TimBunce on 1998/03/04 09:55:57 + Log: Title: "5.004_56: Patch to Tie::Hash and docs", #F104 + From: Ilya Zakharevich + Msg-ID: <199801120134.UAA05437@monk.mps.ohio-state.edu> + Files: pod/perlfunc.pod lib/Tie/Hash.pm + Branch: maint-5.004/perl + ! lib/Tie/Hash.pm pod/perlfunc.pod +____________________________________________________________________________ +[ 739] By: TimBunce on 1998/03/04 09:26:01 + Log: Title: "more doc for perldoc", #F103 + From: Gurusamy Sarathy + Files: utils/perldoc.PL + Branch: maint-5.004/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 738] By: TimBunce on 1998/03/04 09:23:16 + Log: Title: "Make perldoc look for an index file ", #F102 + From: Gisle Aas + Msg-ID: <199801221220.NAA22902@furu.g.aas.no> + Files: utils/perldoc.PL + Branch: maint-5.004/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 737] By: TimBunce on 1998/03/04 09:21:15 + Log: Title: "perldoc -F filename", #F101 + From: Ilya Zakharevich + Msg-ID: <199712120037.TAA00176@math.mps.ohio-state.edu> + Files: utils/perldoc.PL + Branch: maint-5.004/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 736] By: TimBunce on 1998/03/04 09:16:20 + Log: Title: "sv_grow can fail for HAS_64K_LIMIT systems", #F100 + From: Gisle Aas + Msg-ID: + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 735] By: TimBunce on 1998/03/04 09:08:51 + Log: Title: "Benchmark.pm: timethese corrupts $_", #F099 + From: abigail@fnx.com + Msg-ID: <19980201114609.7779.qmail@betelgeuse.wayne.fnx.com> + Files: lib/Benchmark.pm + Branch: maint-5.004/perl + ! lib/Benchmark.pm +____________________________________________________________________________ +[ 734] By: TimBunce on 1998/03/04 08:59:58 + Log: Title: "STRANGE_MALLOC should test failed alloc", #F098 + From: Gisle Aas + Msg-ID: <199802021406.PAA03285@furu.g.aas.no> + Files: hv.c + Branch: maint-5.004/perl + ! hv.c +____________________________________________________________________________ +[ 733] By: TimBunce on 1998/03/04 08:35:19 + Log: Title: "support caseless %ENV", #F097 + From: Gurusamy Sarathy + Files: hv.c t/op/magic.t win32/win32.h + Branch: maint-5.004/perl + ! hv.c t/op/magic.t win32/win32.h +____________________________________________________________________________ +[ 732] By: TimBunce on 1998/03/04 08:33:58 + Log: Title: "newer cperl-mode.el (from 5.004_60)", #F096 + From: Ilya Zakharevich + Files: emacs/cperl-mode.el + Branch: maint-5.004/perl + ! emacs/cperl-mode.el +____________________________________________________________________________ +[ 731] By: TimBunce on 1998/03/04 08:26:23 + Log: Title: "Handle set magic on xsub OUTPUT args, add API functions that handle + magic", #F095 + From: Gurusamy Sarathy + Msg-ID: <199801190409.XAA26710@aatma.engin.umich.edu> + Files: pod/perlguts.pod pod/perlxs.pod embed.h proto.h sv.h global.sym + lib/ExtUtils/xsubpp sv.c + Branch: maint-5.004/perl + ! embed.h global.sym lib/ExtUtils/xsubpp pod/perlguts.pod + ! pod/perlxs.pod proto.h sv.c sv.h +____________________________________________________________________________ +[ 730] By: TimBunce on 1998/03/04 08:20:52 + Log: Title: "Fix flawed cleanup when signal handlers are not defined", #F094 + From: Gurusamy Sarathy + Msg-ID: <199710290106.UAA11485@aatma.engin.umich.edu> + Files: mg.c + Branch: maint-5.004/perl + ! mg.c +____________________________________________________________________________ +[ 729] By: TimBunce on 1998/03/04 08:18:02 + Log: Title: "Tests for C", #F093 + From: Hugo van der Sanden + Msg-ID: <199711021247.MAA01743@crypt.compulink.co.uk> + Files: t/op/sort.t + Branch: maint-5.004/perl + ! t/op/sort.t +____________________________________________________________________________ +[ 728] By: TimBunce on 1998/03/04 08:17:07 + Log: Title: "Make search.pl work on win32", #F092 + From: Gurusamy Sarathy + Files: win32/bin/search.pl + Branch: maint-5.004/perl + ! win32/bin/search.pl +____________________________________________________________________________ +[ 727] By: gsar on 1998/03/04 04:13:23 + Log: missing s/op/o/ from one of the mainpatches + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 726] By: gsar on 1998/03/04 02:12:13 + Log: maintpatches #102 and #103 to perldoc.PL + Branch: win32/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 725] By: gsar on 1998/03/04 02:00:15 + Log: renumber some tests to match maint branch + Branch: win32/perl + ! t/op/local.t +____________________________________________________________________________ +[ 724] By: gsar on 1998/03/04 01:25:50 + Log: maintpatch + #70: "Fix random whitespace errors in docs" + From: Roderick Schertler + Msg-ID: <12726.877706444@eeyore.ibcinc.com> + Date: Fri, 24 Oct 1997 11:20:44 -0400 + Files: pod/checkpods.PL pod/perlfunc.pod + Branch: win32/perl + ! pod/checkpods.PL +____________________________________________________________________________ +[ 723] By: gsar on 1998/03/04 01:04:37 + Log: sync maintpatch + #76: "Fix infinite loop on unlink() failure in File::Path::rmtree() + From: Chip Salzenberg + Files: lib/File/Path.pm + Branch: win32/perl + ! lib/File/Path.pm +____________________________________________________________________________ +[ 722] By: gsar on 1998/03/04 00:46:46 + Log: remove redundancy in File::Find + Branch: win32/perl + ! lib/File/Find.pm +____________________________________________________________________________ +[ 721] By: TimBunce on 1998/03/03 20:06:41 + Log: Title: "Fix spurious perldoc warnings on DOSISH platforms", #F091 + From: Molnar Laszlo + Msg-ID: <34475659.1AA69855@cdata.tvnet.hu> + Files: utils/perldoc.PL + Branch: maint-5.004/perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 720] By: TimBunce on 1998/03/03 20:03:59 + Log: Title: "Make ExtUtils::MM_Unix::fixin() do something meaningful on win32", + #F090 + From: Gurusamy Sarathy + Msg-ID: <199801070016.TAA17766@aatma.engin.umich.edu> + Files: lib/ExtUtils/MM_Unix.pm + Branch: maint-5.004/perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 719] By: TimBunce on 1998/03/03 20:02:06 + Log: Title: "Fix inconsistent case $ENV{Path} (vs $ENV{PATH})", #F089 + From: Gurusamy Sarathy + Files: lib/FindBin.pm + Branch: maint-5.004/perl + ! lib/FindBin.pm +____________________________________________________________________________ +[ 718] By: TimBunce on 1998/03/03 20:00:26 + Log: Title: "Fix File::Find's longstanding confusion about win32 being like VMS", + #F088 + From: Gurusamy Sarathy + Msg-ID: <199802020459.XAA04964@aatma.engin.umich.edu> + Files: lib/File/Find.pm + Branch: maint-5.004/perl + ! lib/File/Find.pm +____________________________________________________________________________ +[ 717] By: TimBunce on 1998/03/03 19:59:38 + Log: Title: "do_postponed breaks with multiple interpreters", #F087 + From: Gurusamy Sarathy + Msg-ID: <199710290316.WAA15888@aatma.engin.umich.edu> + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 716] By: TimBunce on 1998/03/03 19:57:17 + Log: Title: "Make warning on C optional, add to perl{diag,delta}.pod", + #F086 + From: Gurusamy Sarathy + Files: pod/perldelta.pod pod/perldiag.pod toke.c + Branch: maint-5.004/perl + ! pod/perldelta.pod pod/perldiag.pod toke.c +____________________________________________________________________________ +[ 715] By: TimBunce on 1998/03/03 19:51:33 + Log: Title: "Pod::Html bug and fix: missing in index", #F085 + From: Gurusamy Sarathy + Msg-ID: <199802192314.SAA23326@aatma.engin.umich.edu> + Files: lib/Pod/Html.pm + Branch: maint-5.004/perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 714] By: TimBunce on 1998/03/03 19:50:28 + Log: Title: "New pod: perlhist", #F084 + From: Jarkko Hietaniemi + Msg-ID: <199802191556.RAA09578@alpha.hut.fi> + Files: MANIFEST pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc + Branch: maint-5.004/perl + + pod/perlhist.pod + ! MANIFEST pod/buildtoc pod/perl.pod pod/perltoc.pod +____________________________________________________________________________ +[ 713] By: TimBunce on 1998/03/03 19:47:13 + Log: Title: "Fix restoration of locals on scope unwinding", #F083 + From: Gurusamy Sarathy + Msg-ID: <199802110515.AAA23700@aatma.engin.umich.edu> + Files: pp_ctl.c t/op/local.t + Branch: maint-5.004/perl + ! pp_ctl.c t/op/local.t +____________________________________________________________________________ +[ 712] By: TimBunce on 1998/03/03 19:45:56 + Log: Title: "after an eval-ed bad require, requiring a string ref SEGVs", #F082 + From: Gurusamy Sarathy + Msg-ID: <199802102349.SAA16001@aatma.engin.umich.edu> + Files: pp_ctl.c + Branch: maint-5.004/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 711] By: TimBunce on 1998/03/03 19:44:41 + Log: Title: "Fix seg fault on eval/require and syntax errors", #F081 + From: Gurusamy Sarathy + Msg-ID: <199802102321.SAA15346@aatma.engin.umich.edu> + Files: MANIFEST scope.h op.c pp_ctl.c scope.c t/comp/require.t toke.c + Branch: maint-5.004/perl + + t/comp/require.t + ! MANIFEST op.c pp_ctl.c scope.c scope.h toke.c +____________________________________________________________________________ +[ 710] By: TimBunce on 1998/03/03 19:36:34 + Log: Title: "5.004_58: the locale.t problem in IRIX", #F080 + From: Jarkko Hietaniemi + Msg-ID: <199802091747.TAA01735@alpha.hut.fi> + Files: t/pragma/locale.t + Branch: maint-5.004/perl + ! t/pragma/locale.t +____________________________________________________________________________ +[ 709] By: TimBunce on 1998/03/03 19:32:30 + Log: Title: "sv_setnv will upgrade SVt_NV to SVt_PVNV", #F079 + From: Gisle Aas + Msg-ID: + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 708] By: TimBunce on 1998/03/03 19:28:06 + Log: Title: "Eliminate double warnings under C", #F077 + From: "M.J.T. Guy" + Msg-ID: + Files: gv.c op.c toke.c + Branch: maint-5.004/perl + ! gv.c op.c toke.c +____________________________________________________________________________ +[ 707] By: TimBunce on 1998/03/03 19:13:17 + Log: Title: "Fix infinite loop on unlink() failure in File::Path::rmtree()", + #F076 + From: Murray Nesbitt , Tim Bunce + Msg-ID: <199802061100.LAA16423@toad.ig.co.uk> + Files: lib/File/Path.pm + Branch: maint-5.004/perl + ! lib/File/Path.pm +____________________________________________________________________________ +[ 706] By: TimBunce on 1998/03/03 19:08:45 + Log: Title: "Update of h2ph", #F075 + From: kstar@www.chapin.edu (Kurt D. Starsinic) + Msg-ID: <199802051354.FAA11452@www.chapin.edu> + Files: t/lib/ph.t utils/h2ph.PL + Branch: maint-5.004/perl + + t/lib/ph.t + ! utils/h2ph.PL +____________________________________________________________________________ +[ 705] By: TimBunce on 1998/03/03 18:56:59 + Log: Title: "Fix AutoLoader for deep packages", #F074 + From: Zachary Miller + Msg-ID: <199710092348.SAA02108@zappy.er.usgs.gov> + Files: lib/AutoLoader.pm + Branch: maint-5.004/perl + ! lib/AutoLoader.pm +____________________________________________________________________________ +[ 704] By: TimBunce on 1998/03/03 18:35:36 + Log: Title: "Fix order of warnings for misplaced subscripts", #F073 + From: Hugo van der Sanden + Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk> + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 703] By: TimBunce on 1998/03/03 18:32:28 + Log: Title: "Make recursive lexical analysis more robust", #F072 + From: Ilya Zakharevich and Chip Salzenberg + Msg-ID: <199710160102.VAA28817@monk.mps.ohio-state.edu> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 702] By: TimBunce on 1998/03/03 18:18:10 + Log: Title: "Fix random whitespace errors in docs", #F070 + From: Roderick Schertler + Msg-ID: <12726.877706444@eeyore.ibcinc.com> + Files: pod/perlfunc.pod pod/checkpods.PL + Branch: maint-5.004/perl + ! pod/checkpods.PL pod/perlfunc.pod +____________________________________________________________________________ +[ 701] By: TimBunce on 1998/03/03 18:13:54 + Log: Title: "Fix line numbers after here documents in eval STRING", #F069 + From: Ilya Zakharevich + Msg-ID: <199710241745.NAA08166@monk.mps.ohio-state.edu> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 700] By: TimBunce on 1998/03/03 18:11:20 + Log: Title: "Fix SEGV from combining caller and C", #F068 + From: James Duncan , Nicholas Clark + + Msg-ID: <199710241248.NAA00163@flirble.org>, + + Files: pp_ctl.c sv.c + Branch: maint-5.004/perl + ! pp_ctl.c sv.c +____________________________________________________________________________ +[ 699] By: TimBunce on 1998/03/03 18:06:59 + Log: Title: "Don't fold string comparison under C", #F067 + From: Jarkko Hietaniemi + Msg-ID: <199711151506.RAA26287@alpha.hut.fi> + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 698] By: TimBunce on 1998/03/03 18:04:51 + Log: Title: "Fix SEGV on constant at end of sort block", #F066 + From: Administration + Msg-ID: <199711170838.JAA26073@thetis.fi.muni.cz> + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 697] By: TimBunce on 1998/03/03 18:02:54 + Log: Title: "Allow C to mean C", #F065 + From: Chip Salzenberg + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 696] By: TimBunce on 1998/03/03 17:58:12 + Log: Title: "Fix extension version mismatch message", #F064 + From: Chip Salzenberg + Files: XSUB.h + Branch: maint-5.004/perl + ! XSUB.h +____________________________________________________________________________ +[ 695] By: TimBunce on 1998/03/03 17:53:04 + Log: Title: "Better handle and test struct tm of Linux and SunOS", #F063 + From: Andy Dougherty + Msg-ID: + Files: MANIFEST ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t + Branch: maint-5.004/perl + + ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + ! MANIFEST hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t +____________________________________________________________________________ +[ 694] By: TimBunce on 1998/03/03 17:40:47 + Log: Title: "Fix doc bug in getservbyname() examples", #F062 + From: Tom Christiansen + Files: ext/Socket/Socket.pm + Branch: maint-5.004/perl + ! ext/Socket/Socket.pm +____________________________________________________________________________ +[ 693] By: TimBunce on 1998/03/03 17:32:57 + Log: Title: "Kill warning about parameter type", #F061 + From: Chip Salzenberg + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 692] By: TimBunce on 1998/03/03 17:11:07 + Log: Title: "Socket occasional SEGV", #F060 + From: Trevor Blackwell + Msg-ID: <199710281804.NAA09632@wagg.viaweb.com> + Files: ext/Socket/Socket.xs + Branch: maint-5.004/perl + ! ext/Socket/Socket.xs +____________________________________________________________________________ +[ 691] By: TimBunce on 1998/03/03 17:09:51 + Log: Title: "Avoid SEGV from local($@)", #F059 + From: Gurusamy Sarathy + Msg-ID: <199710290251.VAA14362@aatma.engin.umich.edu> + Files: pp_ctl.c + Branch: maint-5.004/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 690] By: TimBunce on 1998/03/03 17:08:21 + Log: Title: "Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 )", #F058 + From: Gurusamy Sarathy + Msg-ID: <199710300036.TAA01004@aatma.engin.umich.edu> + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 689] By: TimBunce on 1998/03/03 17:05:57 + Log: Title: "Use STMT_{START,END} in XSRETURN", #F057 + From: Gurusamy Sarathy + Msg-ID: <199710300245.VAA04244@aatma.engin.umich.edu> + Files: XSUB.h + Branch: maint-5.004/perl + ! XSUB.h +____________________________________________________________________________ +[ 688] By: TimBunce on 1998/03/03 17:04:15 + Log: Title: "Re: Sort grammar bug", #F056 + From: Gurusamy Sarathy + Msg-ID: <199711011946.OAA18882@aatma.engin.umich.edu> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 687] By: TimBunce on 1998/03/03 17:01:32 + Log: Title: "Document indirect object cases for exec(), system()", #F055 + From: Dominic Dunlop + Msg-ID: + Files: pod/perlfunc.pod + Branch: maint-5.004/perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 686] By: TimBunce on 1998/03/03 16:56:44 + Log: Title: "Update docs on tr///", #F054 + From: Tom Phoenix + Msg-ID: + Files: pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod + pod/perllocale.pod pod/perlmod.pod pod/perlop.pod + pod/perlstyle.pod toke.c + Branch: maint-5.004/perl + ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod + ! pod/perllocale.pod pod/perlmod.pod pod/perlop.pod + ! pod/perlstyle.pod toke.c +____________________________________________________________________________ +[ 685] By: TimBunce on 1998/03/03 16:38:50 + Log: Title: "Re: perlop bitwise & | ^ documentation", #F053 + From: Tom Phoenix + Msg-ID: + Files: pod/perlop.pod + Branch: maint-5.004/perl + ! pod/perlop.pod +____________________________________________________________________________ +[ 684] By: TimBunce on 1998/03/03 16:37:00 + Log: Title: "Fix SEGV on C<*glob{'SCALAR','ARRAY'}>", #F052 + From: "Joseph N. Hall" + Msg-ID: <199711110552.WAA12613@gadget.cscaper.com> + Files: perly.c perly.c.diff perly.y vms/perly_c.vms + Branch: maint-5.004/perl + ! perly.c perly.c.diff perly.y vms/perly_c.vms +____________________________________________________________________________ +[ 683] By: TimBunce on 1998/03/03 16:31:15 + Log: Title: "for perlguts.pod: document sv_derived_from, sv_vcatpfn and + sv_vsetpfn", #F051 + From: jan.dubois@ibm.net (Jan Dubois) and Chip Salzenberg + Msg-ID: <346ae970.7444534@smtp1.ibm.net> + Files: pod/perlguts.pod + Branch: maint-5.004/perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 682] By: TimBunce on 1998/03/03 16:28:30 + Log: Title: "5.004_04: locale startup failure (at last) documented", #F050 + From: Jarkko Hietaniemi + Msg-ID: <199711172054.WAA08261@alpha.hut.fi> + Files: INSTALL pod/perldiag.pod pod/perllocale.pod + Branch: maint-5.004/perl + ! INSTALL pod/perldiag.pod pod/perllocale.pod +____________________________________________________________________________ +[ 681] By: TimBunce on 1998/03/03 16:24:12 + Log: Title: "Cope with lack of args in Fcntl::AUTOLOAD", #F049 + From: Jerome Abela + Msg-ID: <19971120183248.23588@coredump.hsc.fr> + Files: ext/Fcntl/Fcntl.pm + Branch: maint-5.004/perl + ! ext/Fcntl/Fcntl.pm +____________________________________________________________________________ +[ 680] By: TimBunce on 1998/03/03 16:23:20 + Log: Title: "Commenting toke.c", #F048 + From: gnat@frii.com + Msg-ID: <199801082138.OAA14186@prometheus.frii.com> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 679] By: TimBunce on 1998/03/03 16:18:32 + Log: Title: "Re: 5.004_04 vec() fails with 32-bit values", #F047 + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlguts.pod pp.c t/op/vec.t + Branch: maint-5.004/perl + ! pod/perlguts.pod pp.c t/op/vec.t +____________________________________________________________________________ +[ 678] By: TimBunce on 1998/03/03 16:15:44 + Log: Title: "A few perl5.004_03 bugs", #F046 + From: Hugo van der Sanden + Msg-ID: <199801221211.MAA05315@crypt.compulink.co.uk> + Files: mg.c t/op/magic.t + Branch: maint-5.004/perl + ! mg.c t/op/magic.t +____________________________________________________________________________ +[ 677] By: TimBunce on 1998/03/03 16:13:11 + Log: Title: "Faster, cleaner av_unshift() ", #F045 + From: Gisle Aas + Msg-ID: <199801221850.TAA23111@furu.g.aas.no> + Files: av.c + Branch: maint-5.004/perl + ! av.c +____________________________________________________________________________ +[ 676] By: TimBunce on 1998/03/03 16:04:30 + Log: Title: "New hints/solaris2.sh", #F044 + From: Stephen Zander + Msg-ID: <87oh12y458.fsf@wsuse5.mckesson.com> + Files: hints/solaris_2.sh + Branch: maint-5.004/perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 675] By: TimBunce on 1998/03/03 15:33:07 + Log: Title: "Refresh Complex.pm and test", #F043 + From: Jarkko Hietaniemi + Msg-ID: <199802051608.SAA20262@alpha.hut.fi> + Files: lib/Math/Complex.pm t/lib/complex.t + Branch: maint-5.004/perl + ! lib/Math/Complex.pm t/lib/complex.t +____________________________________________________________________________ +[ 674] By: TimBunce on 1998/03/03 15:29:16 + Log: Title: "Fix (\@@) proto", #F042 + From: "Joseph N. Hall" + Msg-ID: <199801240132.SAA25111@gadget.cscaper.com> + Files: op.c t/comp/proto.t + Branch: maint-5.004/perl + ! op.c t/comp/proto.t +____________________________________________________________________________ +[ 673] By: TimBunce on 1998/03/03 15:26:31 + Log: Title: "Allow empty BLOCK in code", #F041 + From: Vladimir Alexiev + Msg-ID: <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 672] By: TimBunce on 1998/03/03 15:23:55 + Log: Title: "Fix name of $Foo::{'Bar::'}: '*Foo::Bar::'", #F040 + From: Chip Salzenberg + Files: gv.c t/op/gv.t + Branch: maint-5.004/perl + ! gv.c t/op/gv.t +____________________________________________________________________________ +[ 671] By: TimBunce on 1998/03/03 10:02:32 + Log: Title: "Keep accurate reference count on globs' stashes", #F038 + From: Gisle Aas + Msg-ID: + Files: gv.c sv.c + Branch: maint-5.004/perl + ! gv.c sv.c +____________________________________________________________________________ +[ 670] By: TimBunce on 1998/03/03 09:59:48 + Log: Title: "Avoid memory allocation in gv_fetchpv(), for speed", #F037 + From: Chip Salzenberg + Files: gv.c + Branch: maint-5.004/perl + ! gv.c +____________________________________________________________________________ +[ 669] By: TimBunce on 1998/03/03 09:58:58 + Log: Title: "Make Configure less negative about PerlIO", #F036 + From: chip@atlantic.net + Msg-ID: <199801312323.SAA15237@cyprus.atlantic.net> + Files: Configure + Branch: maint-5.004/perl + ! Configure +____________________________________________________________________________ +[ 668] By: TimBunce on 1998/03/03 09:55:51 + Log: Title: "Fix (mostly) pseudo-same-REs due to embedded NULs", #F035 + From: Martin Plechsmid + Msg-ID: <199802021217.NAA05230@albert.karlin.mff.cuni.cz> + Files: pp_ctl.c + Branch: maint-5.004/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 667] By: TimBunce on 1998/03/03 09:52:59 + Log: Title: "Make Getopt::Long avoid $&, $`, $'", #F034 + From: Irving Reid + Msg-ID: <98Feb3.005102est.11655@janus.tor.securecomputing.com> + Files: lib/Getopt/Long.pm + Branch: maint-5.004/perl + ! lib/Getopt/Long.pm +____________________________________________________________________________ +[ 666] By: TimBunce on 1998/03/03 09:51:27 + Log: Title: "adding the newSVpvn API function", #F033 + From: Matthias Ulrich Neeracher + Msg-ID: <199801310532.GAA23798@solar.ethz.ch> + Files: pod/perlguts.pod pod/perltoc.pod proto.h global.sym sv.c + Branch: maint-5.004/perl + ! global.sym pod/perlguts.pod pod/perltoc.pod proto.h sv.c +____________________________________________________________________________ +[ 665] By: TimBunce on 1998/03/03 09:43:30 + Log: Title: "Support C as function-blind bearword", #F032 + From: Chip Salzenberg + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 664] By: TimBunce on 1998/03/03 09:41:40 + Log: Title: "Re-optimize character classes", #F031 + From: Chip Salzenberg + Files: regcomp.h regcomp.c regexec.c + Branch: maint-5.004/perl + ! regcomp.c regcomp.h regexec.c +____________________________________________________________________________ +[ 663] By: TimBunce on 1998/03/03 09:39:55 + Log: Title: "Fix C which needed ENTER/LEAVE", #F030 + From: dfh@dwroll.lucent.com (D461-David_F_Haertig(Dave)83040) + Msg-ID: + Files: op.c t/op/local.t + Branch: maint-5.004/perl + ! op.c t/op/local.t +____________________________________________________________________________ +[ 662] By: TimBunce on 1998/03/03 09:37:51 + Log: Title: "Dramatically improve performance of // with parens or $&", #F029 + From: Chip Salzenberg + Files: cop.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c pp_ctl.c + pp_hot.c regexec.c scope.c + Branch: maint-5.004/perl + ! cop.h gv.c interp.sym perl.c perl.h pp.c pp_ctl.c pp_hot.c + ! proto.h regexec.c regexp.h scope.c +____________________________________________________________________________ +[ 661] By: TimBunce on 1998/03/03 09:27:04 + Log: Title: "Don't warn on $x{shift}, ne => 1, or -f => 1", #F028 + From: Chip Salzenberg + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 660] By: TimBunce on 1998/03/03 09:24:41 + Log: Title: "Protect against weirdness with unreal @_ in C", #F027 + From: Chip Salzenberg + Files: scope.c + Branch: maint-5.004/perl + ! scope.c +____________________________________________________________________________ +[ 659] By: TimBunce on 1998/03/03 09:24:00 + Log: Title: "Fix C", #F026 + From: Hugo van der Sanden + Msg-ID: <199711021331.NAA01826@crypt.compulink.co.uk> + Files: sv.c t/op/sprintf.t + Branch: maint-5.004/perl + ! sv.c t/op/sprintf.t +____________________________________________________________________________ +[ 658] By: TimBunce on 1998/03/03 09:22:13 + Log: Title: "Tiny core patch for source filters", #F025 + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9711202312.AA02937@claudius.bfsec.bt.co.uk> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 657] By: TimBunce on 1998/03/03 09:20:00 + Log: Title: "Here-doc in s///e (was: Bug)", #F024 + From: Hugo van der Sanden + Msg-ID: <199711221445.OAA14153@crypt.compulink.co.uk> + Files: t/base/lex.t toke.c + Branch: maint-5.004/perl + ! t/base/lex.t toke.c +____________________________________________________________________________ +[ 656] By: TimBunce on 1998/03/03 09:17:56 + Log: Title: "Fix duplicate warnings on C<-e undef>", #F023 + From: Hugo van der Sanden + Msg-ID: <199711221252.MAA14000@crypt.compulink.co.uk> + Files: doio.c t/pragma/warn-1global + Branch: maint-5.004/perl + ! doio.c t/pragma/warn-1global +____________________________________________________________________________ +[ 655] By: TimBunce on 1998/03/03 09:16:56 + Log: Title: "Fix '*' prototype", #F022 + From: Ilya Zakharevich + Msg-ID: <199711212225.RAA00755@monk.mps.ohio-state.edu> + Files: toke.c + Branch: maint-5.004/perl + ! toke.c +____________________________________________________________________________ +[ 654] By: TimBunce on 1998/03/03 09:15:04 + Log: Title: "File::Find bugs (and patches)", "File::Find bugs & patches", #F021 + From: "Conrad E. Kimball" + Msg-ID: <199711260703.XAA21257@mailgate2.boeing.com> + Files: lib/File/Find.pm + Branch: maint-5.004/perl + ! lib/File/Find.pm +____________________________________________________________________________ +[ 653] By: TimBunce on 1998/03/03 09:11:55 + Log: Title: "Fix typo: FORM{,AT}LINE", #F020 + From: Chip Salzenberg + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 652] By: TimBunce on 1998/03/03 09:07:50 + Log: Title: "Fix use of unref mem when blessed object goes out of scope", #F019 + From: Gurusamy Sarathy + Msg-ID: <199711282326.SAA15090@aatma.engin.umich.edu> + Files: scope.c + Branch: maint-5.004/perl + ! scope.c +____________________________________________________________________________ +[ 651] By: TimBunce on 1998/03/03 09:07:10 + Log: Title: "Fix C", #F018 + From: Stephane Payrard + Msg-ID: <199712040054.BAA04612@www.zweig.com> + Files: op.c t/op/my.t + Branch: maint-5.004/perl + ! op.c t/op/my.t +____________________________________________________________________________ +[ 650] By: TimBunce on 1998/03/03 09:04:04 + Log: Title: "enhanced "use strict" warning", #F017 + From: Tkil + Msg-ID: <199712040938.CAA07628@reptile.scrye.com> + Files: gv.c t/pragma/strict-subs t/pragma/strict-vars + Branch: maint-5.004/perl + ! gv.c t/pragma/strict-subs t/pragma/strict-vars +____________________________________________________________________________ +[ 649] By: TimBunce on 1998/03/03 09:02:55 + Log: Title: "eval of sub gives spurious "uninitialised" warning", #F016 + From: Gurusamy Sarathy + Msg-ID: <199712061025.FAA14396@aatma.engin.umich.edu> + Files: pod/perldelta.pod pod/perlfunc.pod op.c t/op/eval.t + Branch: maint-5.004/perl + ! op.c pod/perldelta.pod pod/perlfunc.pod t/op/eval.t +____________________________________________________________________________ +[ 648] By: TimBunce on 1998/03/03 08:58:00 + Log: Title: "[PERL] Assigning result of pop scrambles unrelated reference", #F015 + From: Gurusamy Sarathy + Msg-ID: <199712061100.GAA14864@aatma.engin.umich.edu> + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 647] By: TimBunce on 1998/03/03 08:53:35 + Log: Title: "[PERL] Filedescriptor leak in 5.004_55 (and earlier)", #F014 + From: Ilya Zakharevich + Msg-ID: <199712151922.OAA06410@monk.mps.ohio-state.edu> + Files: os2/os2.c util.c + Branch: maint-5.004/perl + ! os2/os2.c util.c +____________________________________________________________________________ +[ 646] By: TimBunce on 1998/03/03 08:51:04 + Log: Title: "Fix fdopen() on STD{IN,OUT,ERR}", #F013 + From: Roderick Schertler + Msg-ID: + Files: doio.c t/op/misc.t + Branch: maint-5.004/perl + ! doio.c t/op/misc.t +____________________________________________________________________________ +[ 645] By: TimBunce on 1998/03/03 08:49:34 + Log: Title: "Fix local $a[0] and local $h{a}", #F012 + From: Stephen McCamant + Msg-ID: + Files: embed.h scope.h global.sym pp.c pp_hot.c scope.c t/op/local.t + Branch: maint-5.004/perl + ! embed.h global.sym pp.c pp_hot.c scope.c scope.h t/op/local.t +____________________________________________________________________________ +[ 644] By: TimBunce on 1998/03/03 08:43:06 + Log: Title: "Eliminate redundant mg_get() in SvTRUE()", #F011 + From: Spider Boardman + Msg-ID: <199712251839.NAA14800@Orb.Nashua.NH.US> + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 643] By: TimBunce on 1998/03/03 08:41:07 + Log: Title: "Don't force scalar context on C or C", #F010 + From: Chip Salzenberg + Files: op.c t/op/my.t + Branch: maint-5.004/perl + ! op.c t/op/my.t +____________________________________________________________________________ +[ 642] By: TimBunce on 1998/03/03 08:39:11 + Log: Title: "Fix assignment to $_[0] in DESTROY", #F009 + From: Gurusamy Sarathy + Msg-ID: <199801010030.TAA14274@aatma.engin.umich.edu> + Files: pod/perlobj.pod sv.c t/op/ref.t + Branch: maint-5.004/perl + ! pod/perlobj.pod sv.c t/op/ref.t +____________________________________________________________________________ +[ 641] By: gsar on 1998/03/03 04:39:49 + Log: merge problematic maintpatch to op.c + #77: "Eliminate double warnings under C" + From: Chip Salzenberg + Files: gv.c op.c toke.c + Branch: win32/perl + ! gv.c op.c toke.c +____________________________________________________________________________ +[ 640] By: gsar on 1998/03/03 04:30:22 + Log: merge another conflicting maintpatch to op.c + #17: "Enhanced "use strict" warning" + From: Tkil + Msg-ID: <199712040938.CAA07628@reptile.scrye.com> + Date: Thu, 4 Dec 1997 02:38:26 -0700 + Files: gv.c t/pragma/strict-subs t/pragma/strict-vars + Branch: win32/perl + ! gv.c t/pragma/strict-subs t/pragma/strict-vars +____________________________________________________________________________ +[ 639] By: gsar on 1998/03/03 04:09:11 + Log: maintpatch + #73: "Fix order of warnings for misplaced subscripts" + From: Hugo van der Sanden + Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk> + Date: Mon, 13 Oct 1997 11:23:56 +0100 + Files: op.c + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 638] By: gsar on 1998/03/03 04:02:16 + Log: manually apply another conflicting maintpatch + #64: "Fix extension version mismatch message" + From: Chip Salzenberg + Files: XSUB.h + Branch: win32/perl + ! XSUB.h +____________________________________________________________________________ +[ 637] By: gsar on 1998/03/03 03:57:08 + Log: maintpatch + #62: "Fix doc bug in getservbyname() examples" + From: Tom Christiansen + Files: ext/Socket/Socket.pm + Branch: win32/perl + ! ext/Socket/Socket.pm +____________________________________________________________________________ +[ 636] By: gsar on 1998/03/03 03:55:13 + Log: maintpatch + #60: "Socket occasional SEGV" + From: Trevor Blackwell + Msg-ID: <199710281804.NAA09632@wagg.viaweb.com> + Date: Tue, 28 Oct 1997 13:04:43 -0500 (EST) + Files: ext/Socket/Socket.xs + Branch: win32/perl + ! ext/Socket/Socket.xs +____________________________________________________________________________ +[ 635] By: gsar on 1998/03/03 03:51:01 + Log: maintpatches for docs + #53: "Perlop bitwise & | ^ documentation" + From: Tom Phoenix + Msg-ID: + Msg-ID: + Message-Id: <199801221211.MAA05315@crypt.compulink.co.uk> + Date: Thu, 22 Jan 1998 12:11:49 +0000 + Subject: Re: [PERL] A few perl5.004_03 bugs + Branch: win32/perl + ! mg.c t/op/magic.t +____________________________________________________________________________ +[ 633] By: gsar on 1998/03/03 03:36:40 + Log: merge another toke.c patch and its dependent (very carefully) + #32: "Support C as function-blind bearword" + From: Chip Salzenberg + Files: toke.c + -------- + #86: "Make warning on C optional, add to perl{diag,delta}.pod" + From: Gurusamy Sarathy + Files: toke.c pod/perldelta.pod pod/perldiag.pod + Branch: win32/perl + ! pod/perldelta.pod pod/perldiag.pod toke.c +____________________________________________________________________________ +[ 632] By: gsar on 1998/03/03 03:12:16 + Log: another toke.c maintpatch + #28: "Don't warn on $x{shift}, ne => 1, or -f => 1" + From: Chip Salzenberg + Files: toke.c + Branch: win32/perl + ! toke.c +____________________________________________________________________________ +[ 631] By: gsar on 1998/03/03 03:06:59 + Log: still another maintpatch + From: Hugo van der Sanden + Message-Id: <199711021331.NAA01826@crypt.compulink.co.uk> + Date: Sun, 02 Nov 1997 13:31:54 +0000 + Subject: [PATCH] assorted sprintf bugs + Branch: win32/perl + ! sv.c t/op/sprintf.t +____________________________________________________________________________ +[ 630] By: gsar on 1998/03/03 03:03:55 + Log: yet another maintpatch + From: Hugo van der Sanden + Message-Id: <199711221252.MAA14000@crypt.compulink.co.uk> + Date: Sat, 22 Nov 1997 12:52:16 +0000 + Subject: Re: [PERL] Unexpected output + Branch: win32/perl + ! doio.c t/pragma/warn-1global +____________________________________________________________________________ +[ 629] By: gsar on 1998/03/03 02:57:33 + Log: merge another maintpatch to toke.c + From: Hugo van der Sanden + Date: Sat, 22 Nov 1997 14:45:23 GMT + Message-Id: <199711221445.OAA14153@crypt.compulink.co.uk> + Subject: Re: [PERL] Here-doc in s///e (was: Bug) + Branch: win32/perl + ! t/base/lex.t toke.c +____________________________________________________________________________ +[ 628] By: gsar on 1998/03/03 02:50:20 + Log: manually merge a maintpatch + Date: Thu, 8 Jan 1998 14:38:04 -0700 (MST) + Message-Id: <199801082138.OAA14186@prometheus.frii.com> + From: gnat@frii.com + Subject: [PERL] Commenting toke.c + Branch: win32/perl + ! toke.c +____________________________________________________________________________ +[ 627] By: TimBunce on 1998/03/02 22:34:47 + Log: Title: "Fix inefficient checks for TIEHANDLE", #F008 + From: Gurusamy Sarathy + Msg-ID: <199801080106.UAA05048@aatma.engin.umich.edu> + Files: pp_hot.c pp_sys.c + Branch: maint-5.004/perl + ! pp_hot.c pp_sys.c +____________________________________________________________________________ +[ 626] By: TimBunce on 1998/03/02 22:31:13 + Log: This is the change description for change 625 + Title: "Fix tr///s option", #F007 + From: Inaba Hiroto + Msg-ID: <19980110155333D.inaba@st.rim.or.jp> + Files: doop.c + Branch: maint-5.004/perl + ! doop.c +____________________________________________________________________________ +[ 625] By: TimBunce on 1998/03/02 22:23:48 + Log: Branch: maint-5.004/perl + ! doop.c +____________________________________________________________________________ +[ 623] By: TimBunce on 1998/03/02 21:51:53 + Log: Title: "Fix lexical lookup in eval-sub-eval", #F006 + From: Chip Salzenberg + Files: pp_ctl.c + Branch: maint-5.004/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 622] By: TimBunce on 1998/03/02 21:43:29 + Log: Title: "Don't upgrade target of assignment from LVALUE", #F005 + From: Chip Salzenberg + Files: sv.c + Branch: maint-5.004/perl + ! sv.c +____________________________________________________________________________ +[ 621] By: TimBunce on 1998/03/02 21:29:59 + Log: Title: "Fix compile-time warning line in while ()", #F004 + From: Chip Salzenberg + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 620] By: TimBunce on 1998/03/02 21:25:27 + Log: Title: "STMT foreach LIST;", #F002 + From: Chip Salzenberg + Files: pod/perlsyn.pod perly.c perly.c.diff perly.y t/cmd/mod.t toke.c + vms/perly_c.vms + Branch: maint-5.004/perl + ! perly.c perly.c.diff perly.y pod/perlsyn.pod t/cmd/mod.t + ! toke.c vms/perly_c.vms +____________________________________________________________________________ +[ 619] By: TimBunce on 1998/03/02 21:12:58 + Log: Title: "Fix SIGSEGV on C<42 until forever>", #F001 + From: Chip Salzenberg + Files: op.c + Branch: maint-5.004/perl + ! op.c +____________________________________________________________________________ +[ 618] By: gsar on 1998/03/02 04:40:16 + Log: make t/lib/nothread.t type xtext also + Branch: win32/perl + ! t/op/nothread.t +____________________________________________________________________________ +[ 617] By: gsar on 1998/03/02 04:35:15 + Log: make t/lib/thread.t type xtext + Branch: win32/perl + ! t/lib/thread.t +____________________________________________________________________________ +[ 616] By: gsar on 1998/03/02 04:17:40 + Log: fix misapplied hunks in change#614 + Branch: win32/perl + ! scope.c scope.h +____________________________________________________________________________ +[ 615] By: gsar on 1998/03/02 03:39:16 + Log: another one down + From: "Conrad E. Kimball" + Message-Id: <199711260703.XAA21257@mailgate2.boeing.com> + Date: Tue, 25 Nov 1997 23:03:48 -0800 + Subject: [PERL] File::Find bugs & patches + Branch: win32/perl + ! lib/File/Find.pm +____________________________________________________________________________ +[ 614] By: gsar on 1998/03/02 03:28:28 + Log: this one with adjusted test numbers + Message-Id: + Date: Sat, 20 Dec 1997 15:16:14 -0600 (CST) + From: Stephen McCamant + Subject: [PERL] [PATCH] Fix local $a[0] and local $h{a} + Branch: win32/perl + ! embed.h global.sym pp.c pp_hot.c scope.c scope.h t/op/local.t +____________________________________________________________________________ +[ 613] By: gsar on 1998/03/02 03:13:32 + Log: still another + From: Inaba Hiroto + Subject: [PERL] tr///s bug + Message-Id: <19980110155333D.inaba@st.rim.or.jp> + Date: Sat, 10 Jan 1998 15:53:33 +0900 + Branch: win32/perl + ! doop.c t/op/subst.t +____________________________________________________________________________ +[ 612] By: gsar on 1998/03/02 03:01:27 + Log: yet another patch + From: Chip Salzenberg + Message-Id: <199709161748.NAA08418@nielsenmedia.com> + Subject: Tiny but massively cool: C + Date: Tue, 16 Sep 1997 13:47:28 -0400 (EDT) + Branch: win32/perl + ! perly.c perly.c.diff perly.y pod/perlsyn.pod t/cmd/mod.t + ! toke.c vms/perly_c.vms +____________________________________________________________________________ +[ 611] By: gsar on 1998/03/02 01:52:46 + Log: yet another 'old' patch + From: Stephane Payrard + Message-Id: <199712040054.BAA04612@www.zweig.com> + To: perl5-porters@perl.org + Subject: Re: [PERL] buglet : minor but gratuitous inconsistency + between `my' and `local' (Patch included) + Branch: win32/perl + ! op.c t/op/my.t +____________________________________________________________________________ +[ 610] By: gsar on 1998/03/02 01:45:55 + Log: another 'old' patch + From: Roderick Schertler + Date: 19 Dec 1997 12:52:36 -0500 + Message-Id: + Subject: [PERL] [PATCH] Re: Problem with open >&= + Branch: win32/perl + ! doio.c t/op/misc.t +____________________________________________________________________________ +[ 609] By: gsar on 1998/03/02 01:23:56 + Log: apply missing pieces from: + From: Chip Salzenberg + Message-Id: <199711272044.PAA12102@nielsenmedia.com> + Subject: [PATCH] Improved LVALUE patch + Date: Thu, 27 Nov 1997 15:44:02 -0500 (EST) + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 608] By: gsar on 1998/03/02 01:13:01 + Log: merge two important 'old' patches + From: Chip Salzenberg + Message-Id: <199709241632.MAA09164@nielsenmedia.com> + Subject: [PATCH] Fix C<42 until forever> SIGSEGV + Date: Wed, 24 Sep 1997 12:32:11 -0400 (EDT) + ------ + From: Chip Salzenberg + Message-Id: <199710221332.JAA04814@nielsenmedia.com> + Subject: [PATCH] Fix for compile-time while() warnings + Date: Wed, 22 Oct 1997 09:31:50 -0400 (EDT) + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 607] By: gsar on 1998/03/01 06:52:26 + Log: integrate mainline changes + Branch: asperl + +> Policy_sh.SH Porting/config.sh Porting/config_H atomic.h + +> lib/Tie/Handle.pm t/op/tiehandle.t + - config_H + !> (integrate 89 files) +____________________________________________________________________________ +[ 606] By: gsar on 1998/02/28 23:11:00 + Log: misc small tweaks + - AutoLoader fix for long::pack::names + - d_mymalloc can be set from makefiles now + - make search.pl actually work on win32 + - revert podoc about $^E on OS/2 (per Ilya's wishes) + Branch: win32/perl + ! lib/AutoLoader.pm pod/perlvar.pod win32/Makefile + ! win32/bin/search.pl win32/makefile.mk win32/win32.c +____________________________________________________________________________ +[ 605] By: gsar on 1998/02/28 22:16:45 + Log: fix typo in sv.h, and run 'make regen_headers' to make it build + Branch: win32/perl + ! embedvar.h sv.h +____________________________________________________________________________ +[ 604] By: gsar on 1998/02/28 21:08:58 + Log: integrate mainline + Branch: win32/perl + +> Policy_sh.SH atomic.h lib/Tie/Handle.pm t/op/tiehandle.t + !> Configure MANIFEST Makefile.SH bytecode.h bytecode.pl + !> byterun.c ext/SDBM_File/Makefile.PL + !> ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/sdbm.h + !> lib/ExtUtils/MM_VMS.pm os2/diff.configure os2/os2.c perl.c + !> perlvars.h pod/perltie.pod pp_sys.c sv.c sv.h t/lib/anydbm.t + !> t/lib/sdbm.t util.c vms/descrip.mms vms/perlvms.pod + !> vms/test.com win32/makedef.pl +____________________________________________________________________________ +[ 603] By: nick on 1998/02/28 11:31:15 + Log: Missed FREAD in bytecode.h + Cannot export svref_mutex in non-threaded perl + Branch: perl + ! bytecode.h win32/makedef.pl + +---------------- +Version 5.004_61 +---------------- + +____________________________________________________________________________ +[ 602] By: mbeattie on 1998/02/27 18:35:27 + Log: Change FREAD/FGETC to BGET_FREAD/BGET_FGETC to avoid clash with + preprocessor symbol on Digital UNIX. + Branch: perl + ! bytecode.h bytecode.pl byterun.c +____________________________________________________________________________ +[ 601] By: mbeattie on 1998/02/27 18:27:00 + Log: Fix stupid ATOMIC_DEC_AND_TEST typo in sv.h. + Branch: perl + ! sv.h +____________________________________________________________________________ +[ 600] By: mbeattie on 1998/02/27 18:15:07 + Log: Add atomic.h to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 599] By: mbeattie on 1998/02/27 18:13:52 + Log: Integrate win32 branch into mainline. + Branch: perl + ! bytecode.pl + !> bytecode.h byterun.c byterun.h dosish.h embed.h embedvar.h + !> ext/B/B.xs ext/B/Makefile.PL global.sym perl.h sv.c + !> win32/Makefile win32/bin/pl2bat.pl win32/config.bc + !> win32/config.gc win32/config.vc win32/config_H.bc + !> win32/config_H.gc win32/config_H.vc win32/config_h.PL + !> win32/makedef.pl win32/makefile.mk win32/win32.c win32/win32.h + !> win32/win32thread.h +____________________________________________________________________________ +[ 598] By: mbeattie on 1998/02/27 18:06:41 + Log: Make refcounts atomic for threading (dependent on appropriate + arch-dependent and compiler-dependent definitions in atomic.h + or else falls back to a global mutex to protect refcounts). + Branch: perl + + atomic.h + ! global.sym perl.c perlvars.h sv.c sv.h +____________________________________________________________________________ +[ 597] By: mbeattie on 1998/02/27 15:37:22 + Log: Tiehandle stuff in change 595 didn't add to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 596] By: mbeattie on 1998/02/27 15:34:55 + Log: Missed adding new file Policy_sh.SH in change 592. + Branch: perl + + Policy_sh.SH +____________________________________________________________________________ +[ 595] By: mbeattie on 1998/02/27 15:34:06 + Log: Subject: [PATCH] _60 & _04 - Add WRITE & CLOSE to TIEHANDLE + Date: Fri, 27 Feb 1998 04:15:04 +0000 + From: Graham Barr + Branch: perl + + lib/Tie/Handle.pm t/op/tiehandle.t + ! pod/perltie.pod pp_sys.c +____________________________________________________________________________ +[ 594] By: mbeattie on 1998/02/27 15:31:12 + Log: From: Dan Sugalski + Subject: [PATCH 5.004_60] Fix to MM_VMS.PM + Date: Thu, 26 Feb 1998 11:09:55 -0800 + Subject: [PATCH 5.004_60] Get SDBM_File working on VMS + Date: Thu, 26 Feb 1998 11:15:24 -0800 + Branch: perl + ! ext/SDBM_File/Makefile.PL ext/SDBM_File/sdbm/Makefile.PL + ! ext/SDBM_File/sdbm/sdbm.h lib/ExtUtils/MM_VMS.pm + ! t/lib/anydbm.t t/lib/sdbm.t vms/descrip.mms vms/perlvms.pod + ! vms/test.com +____________________________________________________________________________ +[ 593] By: mbeattie on 1998/02/27 15:26:45 + Log: Fix file-descriptor leak when pipes fail via taint checks: + Subject: [PATCH] Some patches went through cracks + Date: Thu, 26 Feb 1998 02:47:46 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! os2/os2.c util.c +____________________________________________________________________________ +[ 592] By: mbeattie on 1998/02/27 15:15:12 + Log: Subject: Config_60-03-04.diff patch for 5.004_60 + Date: Wed, 25 Feb 1998 17:14:39 -0500 (EST) + From: Andy Dougherty + Branch: perl + ! Configure MANIFEST Makefile.SH os2/diff.configure +____________________________________________________________________________ +[ 591] By: gsar on 1998/02/26 19:34:50 + Log: added AS patch#9 + Branch: asperl + - win32/ipdir.c win32/ipenv.c win32/iplio.c win32/ipmem.c + - win32/ipproc.c win32/ipsock.c win32/ipstdio.c + - win32/ipstdiowin.h win32/perlobj.def + ! ObjXSub.h globals.c perl.c proto.h win32/Makefile + ! win32/dl_win32.xs win32/runperl.c win32/win32.c win32/win32.h + ! win32/win32sck.c win32/win32thread.c +____________________________________________________________________________ +[ 590] By: gsar on 1998/02/26 04:25:40 + Log: various changes to make win32 build under the new Configure & co. + - added byterun.c to core C build + - makefile.mk now has a regen_config_h target to quickly update config_H.[bgv]c + after adding new variables to config.[bgv]c + - sig_name_init now has only the valid signals + - we now have $Config{usethreads} + - tested under the two commercial compilers w/ and w/o usethreads + Branch: win32/perl + ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/config_h.PL win32/makedef.pl win32/makefile.mk +____________________________________________________________________________ +[ 589] By: gsar on 1998/02/26 03:56:19 + Log: various cleanups so that B can be built as "just another extension" + - export symbols needed for building B + - bset_obj_store() is needed by byterun(), so define it there instead + of at B.xs, and export it + - freadpv() is only used in B.xs, so move it there + - byte*.h are now included by perl.h + - regenerate embed*.h + Branch: win32/perl + ! bytecode.h bytecode.pl byterun.c byterun.h embed.h embedvar.h + ! ext/B/B.xs ext/B/Makefile.PL global.sym perl.h +____________________________________________________________________________ +[ 588] By: gsar on 1998/02/25 21:46:35 + Log: integrate mainline + Branch: win32/perl + +> Porting/config.sh Porting/config_H + - config_H + !> (integrate 54 files) +____________________________________________________________________________ +[ 587] By: gsar on 1998/02/25 19:20:26 + Log: added AS patch#8 + Branch: asperl + ! sv.c x2p/a2py.c x2p/util.c +____________________________________________________________________________ +[ 586] By: gsar on 1998/02/25 19:08:06 + Log: added AS patch#7 + Message-Id: <01BD40F9.CE57B210.dougl@ActiveState.com> + Date: Tue, 24 Feb 1998 07:57:07 PST + From: Douglas Lankshear + Subject: [PATCH] + + Here's an attempt at + 6. MANIFEST must be updated with new file names + 5. Mktime(), Stat() etc., rather than MKtime()/STat() etc. + And some changes to move toward + 1. Merge PERL_OBJECT build support into regular Makefile and makefile.mk + + -- Doug + Branch: asperl + ! MANIFEST installperl ipdir.h ipenv.h iplio.h ipmem.h ipproc.h + ! ipsock.h ipstdio.h lib/ExtUtils/MM_Win32.pm perldir.h + ! perlenv.h perlio.h perllio.h win32/Makefile +____________________________________________________________________________ +[ 585] By: mbeattie on 1998/02/25 17:44:34 + Log: More compiler tweaks. + Branch: perl + ! Makefile.SH bytecode.pl byterun.c byterun.h ext/B/B/Asmdata.pm +____________________________________________________________________________ +[ 584] By: mbeattie on 1998/02/25 15:36:38 + Log: Subject: [PATCH 5.004_60] dos-djgpp update + Date: Wed, 25 Feb 1998 11:17:07 +0100 + From: Laszlo Molnar + Branch: perl + ! djgpp/djgpp.c dosish.h hints/dos_djgpp.sh perl.c thread.h +____________________________________________________________________________ +[ 583] By: mbeattie on 1998/02/25 15:34:48 + Log: Move find_threadsv to right bit of global.sym. Bump patchlevel to 61. + Branch: perl + ! global.sym patchlevel.h +____________________________________________________________________________ +[ 582] By: mbeattie on 1998/02/25 15:28:08 + Log: Subject: Re: [PATCH 5.004_60] Fix goto-in-eval segfault (unwrapped!) + Date: Tue, 24 Feb 1998 11:15:57 +0000 + From: Robin Houston + Branch: perl + ! pod/perldiag.pod pp_ctl.c +____________________________________________________________________________ +[ 581] By: mbeattie on 1998/02/25 15:27:06 + Log: Subject: [PATCH] #ifdef CAN_PROTOTYPE cleanup + Date: 23 Feb 1998 23:36:09 +0100 + From: Gisle Aas + Branch: perl + ! doio.c miniperlmain.c op.c perl.c pp.h regcomp.c toke.c util.c +____________________________________________________________________________ +[ 580] By: mbeattie on 1998/02/25 15:25:29 + Log: Subject: [PATCH 5.004_60] improved Test.pm + Date: Sat, 21 Feb 1998 14:17:09 -0500 + From: Joshua Pritikin + Branch: perl + ! lib/Test.pm +____________________________________________________________________________ +[ 579] By: mbeattie on 1998/02/25 15:23:24 + Log: HP-UX hints and AIX global.sym changes (with Makefile.SH rule) + From: Jarkko Hietaniemi + Subject: [PATCH] 5.004_60: AIX: global.sym and Makefile.SH + Date: Sat, 21 Feb 1998 15:26:19 +0200 (EET) + Subject: Re: your HP-UX perl patch + Date: Mon, 23 Feb 1998 23:14:37 +0200 (EET) + Branch: perl + ! Makefile.SH embed.h global.sym hints/hpux.sh +____________________________________________________________________________ +[ 578] By: mbeattie on 1998/02/25 15:18:06 + Log: Back out DB_File patch (change _553) and tweak Configure. + Subject: ANNOUNCE: perl5.004_60 is available + Date: Mon, 23 Feb 1998 10:47:26 -0000 + From: Paul Marquess + Branch: perl + ! Configure ext/DB_File/DB_File.xs +____________________________________________________________________________ +[ 577] By: mbeattie on 1998/02/25 15:04:00 + Log: Subject: [PATCH] Cwd.pm + Date: Fri, 20 Feb 1998 10:27:54 -0600 + From: Graham Barr + Branch: perl + ! lib/Cwd.pm +____________________________________________________________________________ +[ 576] By: mbeattie on 1998/02/25 15:02:57 + Log: From: ilya@math.ohio-state.edu (Ilya Zakharevich) + Subject: [5.004_5* PATCH] Make ornaments default in Term::ReadLine + Date: Fri, 20 Feb 1998 00:09:52 -0500 (EST) + Subject: [PATCH 5.004_5*] Fix debugger messages and the default package + Date: Fri, 20 Feb 1998 00:12:28 -0500 (EST) + Subject: Re: Continued presence of segmentation violation in study_chunk()[PATCH] + Date: Sat, 21 Feb 1998 15:32:29 -0500 (EST) + Branch: perl + ! lib/Term/ReadLine.pm lib/perl5db.pl regcomp.c +____________________________________________________________________________ +[ 575] By: mbeattie on 1998/02/25 14:58:00 + Log: Subject: Re: ANNOUNCE: perl5.004_60 Configure patch is available + Date: Tue, 24 Feb 1998 16:02:43 -0500 (EST) + From: Andy Dougherty + Branch: perl + + Porting/config.sh Porting/config_H + - config_H + ! Configure INSTALL MANIFEST Makefile.SH Porting/Glossary + ! Porting/pumpkin.pod config_h.SH ext/POSIX/POSIX.xs + ! hints/aix.sh hints/amigaos.sh hints/bsdos.sh hints/dec_osf.sh + ! hints/freebsd.sh hints/irix_6.sh hints/linux.sh + ! hints/netbsd.sh hints/next_3.sh hints/next_4.sh hints/os2.sh + ! hints/solaris_2.sh makedepend.SH perl.c perl.h pp.c pp_sys.c + ! t/lib/thread.t t/op/nothread.t x2p/Makefile.SH +____________________________________________________________________________ +[ 574] By: gsar on 1998/02/24 02:21:14 + Log: fix typos in sv.c + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 573] By: mbeattie on 1998/02/23 10:03:39 + Log: Remove old Linux+threads segfault degugging kludge. + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 572] By: gsar on 1998/02/23 09:45:26 + Log: undo previous change (no added value!) + Branch: win32/perl + ! win32/bin/pl2bat.pl +____________________________________________________________________________ +[ 571] By: gsar on 1998/02/23 09:18:32 + Log: fix pl2bat.pl to tolerate trailing .bat (as suggested by + John Cavanaugh ) + Branch: win32/perl + ! win32/bin/pl2bat.pl +____________________________________________________________________________ +[ 570] By: gsar on 1998/02/22 04:02:15 + Log: support chown() (just a noop for now) + Branch: win32/perl + ! dosish.h win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 569] By: gsar on 1998/02/22 03:09:55 + Log: integrate latest win32 branch + Branch: asperl + +> (branch 41 files) + !> (integrate 59 files) +____________________________________________________________________________ +[ 568] By: gsar on 1998/02/22 02:40:56 + Log: get compiler building under win32 (needed Makefile.PL + hacks that could be applicable to other platforms) + Branch: win32/perl + ! ext/B/Makefile.PL win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 567] By: gsar on 1998/02/22 01:30:19 + Log: integrate mainline + Branch: win32/perl + +> (branch 41 files) + !> (integrate 46 files) +____________________________________________________________________________ +[ 566] By: gsar on 1998/02/20 22:31:56 + Log: fix handle leak in join() + Branch: win32/perl + ! win32/win32thread.h + +---------------- +Version 5.004_60 +---------------- + +____________________________________________________________________________ +[ 565] By: mbeattie on 1998/02/20 18:23:47 + Log: Remove compiler files from their old lib/B locations. The compiler + now builds by default (without the byteperl executable so far) and + seems to work at least minimally. + Branch: perl + - lib/B.pm lib/B/Asmdata.pm lib/B/Assembler.pm lib/B/Bblock.pm + - lib/B/Bytecode.pm lib/B/C.pm lib/B/CC.pm lib/B/Debug.pm + - lib/B/Deparse.pm lib/B/Disassembler.pm lib/B/Lint.pm + - lib/B/Showlex.pm lib/B/Stackobj.pm lib/B/Terse.pm + - lib/B/Xref.pm lib/B/assemble lib/B/cc_harness + - lib/B/disassemble lib/B/makeliblinks lib/O.pm + ! MANIFEST bytecode.pl +____________________________________________________________________________ +[ 564] By: mbeattie on 1998/02/20 18:05:33 + Log: Move lib/B/... and lib/[BO].pm over to where they should be, + under ext/B. + Branch: perl + +> ext/B/B.pm ext/B/B/Asmdata.pm ext/B/B/Assembler.pm + +> ext/B/B/Bblock.pm ext/B/B/Bytecode.pm ext/B/B/C.pm + +> ext/B/B/CC.pm ext/B/B/Debug.pm ext/B/B/Deparse.pm + +> ext/B/B/Disassembler.pm ext/B/B/Lint.pm ext/B/B/Showlex.pm + +> ext/B/B/Stackobj.pm ext/B/B/Terse.pm ext/B/B/Xref.pm + +> ext/B/B/assemble ext/B/B/cc_harness ext/B/B/disassemble + +> ext/B/B/makeliblinks ext/B/O.pm +____________________________________________________________________________ +[ 563] By: mbeattie on 1998/02/20 17:54:58 + Log: Start getting compiler to work when built with the core. + [Still won't work as of this change.] + Branch: perl + +> byterun.c byterun.h lib/B/Asmdata.pm lib/B/Assembler.pm + +> lib/B/Bblock.pm lib/B/Bytecode.pm lib/B/C.pm lib/B/CC.pm + +> lib/B/Debug.pm lib/B/Deparse.pm lib/B/Disassembler.pm + +> lib/B/Lint.pm lib/B/Showlex.pm lib/B/Stackobj.pm + +> lib/B/Terse.pm lib/B/Xref.pm + ! MANIFEST Makefile.SH bytecode.pl ext/B/Makefile.PL +____________________________________________________________________________ +[ 562] By: mbeattie on 1998/02/20 16:42:13 + Log: Merge perlext/Compiler/... into mainline. Some files move to + ext/B/..., some to lib/B/..., O.pm and B.pm go in lib and some + move to the base perl directory (e.g. headers). Will need some + cleaning up before it builds properly, I would guess. + Branch: perl + +> bytecode.h bytecode.pl cc_runtime.h ext/B/B.xs + +> ext/B/Makefile.PL ext/B/NOTES ext/B/README ext/B/TESTS + +> ext/B/Todo ext/B/byteperl.c ext/B/ramblings/cc.notes + +> ext/B/ramblings/curcop.runtime ext/B/ramblings/flip-flop + +> ext/B/ramblings/magic ext/B/ramblings/reg.alloc + +> ext/B/ramblings/runtime.porting ext/B/typemap lib/B.pm + +> lib/B/assemble lib/B/cc_harness lib/B/disassemble + +> lib/B/makeliblinks lib/O.pm +____________________________________________________________________________ +[ 561] By: mbeattie on 1998/02/20 16:39:38 + Log: Win32 changes from Sarathy, tweaked slightly by me. + Branch: perlext + ! Compiler/B.xs Compiler/B/Asmdata.pm Compiler/B/Bytecode.pm + ! Compiler/B/C.pm Compiler/Makefile.PL Compiler/assemble + ! Compiler/bytecode.h Compiler/bytecode.pl Compiler/byteperl.c + ! Compiler/byterun.c Compiler/byterun.h Compiler/cc_harness +____________________________________________________________________________ +[ 560] By: mbeattie on 1998/02/20 15:46:15 + Log: Initialise $@ early (fixes t/lib/ph.t for threaded perl). + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 559] By: mbeattie on 1998/02/20 12:56:10 + Log: Add missing t/op/wantarray.t to MANIFEST. Bump patchlevel to 60. + Branch: perl + ! MANIFEST patchlevel.h +____________________________________________________________________________ +[ 558] By: mbeattie on 1998/02/20 12:53:26 + Log: Integrate win32 branch into mainline. + Branch: perl + !> XSUB.h config_h.SH doio.c lib/Pod/Html.pm pp_sys.c + !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + !> win32/makedef.pl win32/makefile.mk win32/win32.c win32/win32.h + !> win32/win32iop.h x2p/a2p.h +____________________________________________________________________________ +[ 557] By: mbeattie on 1998/02/20 12:51:42 + Log: Subject: retry [PATCH] 5.004_59: the perlhist.pod etc + Date: Thu, 19 Feb 1998 17:54:52 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! ext/Thread/Thread.pm ext/Thread/Thread/Queue.pm + ! ext/Thread/Thread/Semaphore.pm ext/Thread/Thread/Specific.pm + ! lib/fields.pm pod/buildtoc pod/perl.pod pod/perlhist.pod + ! pod/perltoc.pod pod/perlvar.pod +____________________________________________________________________________ +[ 556] By: mbeattie on 1998/02/20 12:49:54 + Log: Subject: [PATCH] installperl + Date: Wed, 18 Feb 1998 11:51:44 -0500 (est) + From: Norton Allen + Branch: perl + ! installperl +____________________________________________________________________________ +[ 555] By: mbeattie on 1998/02/20 12:49:09 + Log: Subject: [PATCH:_59] t/op/wantarray.t + Date: Wed, 18 Feb 1998 11:19:54 -0500 (est) + From: Norton Allen + Branch: perl + + t/op/wantarray.t +____________________________________________________________________________ +[ 554] By: mbeattie on 1998/02/20 12:47:44 + Log: Subject: Misprint in regcomp.c [PATCH] + Date: Tue, 17 Feb 1998 23:54:07 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! regcomp.c +____________________________________________________________________________ +[ 553] By: mbeattie on 1998/02/20 12:45:08 + Log: Subject: DB_File ->length does not work just after tie. + Date: Tue, 17 Feb 1998 13:19:18 GMT + From: Nick Ing-Simmons + Branch: perl + ! ext/DB_File/DB_File.xs +____________________________________________________________________________ +[ 552] By: mbeattie on 1998/02/20 12:43:32 + Log: Subject: [PATCH] - perl5.005_59, update Copyright + Date: Mon, 16 Feb 1998 20:31:06 -0500 (EST) + From: lusol@CS4.CC.Lehigh.EDU (Stephen O. Lidie) + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 551] By: mbeattie on 1998/02/20 12:42:41 + Log: Subject: Re: for() and map() peculiarity + Date: Mon, 16 Feb 1998 21:33:44 +0000 + From: "M.J.T. Guy" + Branch: perl + ! pod/perlsyn.pod +____________________________________________________________________________ +[ 550] By: mbeattie on 1998/02/20 12:41:53 + Log: Subject: [PATCH 5.004_59] Updates to VMS/CONFIG.VMS + Date: Mon, 16 Feb 1998 11:46:29 -0800 + From: Dan Sugalski + Branch: perl + ! vms/config.vms +____________________________________________________________________________ +[ 549] By: mbeattie on 1998/02/20 12:40:55 + Log: Subject: [PATCH] 5.004_59 global.sym for AIX 3.2.5 + Date: Mon, 16 Feb 1998 14:27:53 -0500 (EST) + From: "Stephen O. Lidie" + Branch: perl + ! global.sym +____________________________________________________________________________ +[ 548] By: mbeattie on 1998/02/20 12:39:56 + Log: Subject: [PATCH] 5.004_59: hints/irix_6.sh + Date: Mon, 16 Feb 1998 15:44:57 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! hints/irix_6.sh +____________________________________________________________________________ +[ 547] By: mbeattie on 1998/02/20 12:38:58 + Log: Subject: [PATCH] perlguts update + Date: 16 Feb 1998 11:23:53 +0100 + From: Gisle Aas + Branch: perl + ! pod/perlguts.pod +____________________________________________________________________________ +[ 546] By: mbeattie on 1998/02/20 12:38:01 + Log: Subject: [PATCH 5.004_59] bsdos/hints.sh is wrong + Date: Sun, 15 Feb 1998 23:56:05 -0500 + From: Irving Reid + Branch: perl + ! hints/bsdos.sh +____________________________________________________________________________ +[ 545] By: mbeattie on 1998/02/20 12:37:11 + Log: Subject: [PATCH] 5% speedup in an empty loop + Date: Sun, 15 Feb 1998 17:49:46 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! op.c +____________________________________________________________________________ +[ 544] By: mbeattie on 1998/02/20 12:36:26 + Log: Subject: [PATCH for 5.004_59] netdb_host_type and netdb_hlen_type on NeXt + Date: Sun, 15 Feb 98 23:06:16 +0100 + From: Hans Mulder + Branch: perl + ! hints/next_3.sh hints/next_4.sh +____________________________________________________________________________ +[ 543] By: mbeattie on 1998/02/20 12:35:39 + Log: Subject: [PATCH for 5.004_59] Perl_sbrk declared inconsistently + Date: Sun, 15 Feb 98 23:05:20 +0100 + From: Hans Mulder + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 542] By: mbeattie on 1998/02/20 12:35:03 + Log: Subject: [PATCH for 5.004_59] "d_gethbyname" misspelled in Configure + From: Hans Mulder + Date: Sun, 15 Feb 98 23:04:29 +0100 + Branch: perl + ! Configure +____________________________________________________________________________ +[ 541] By: mbeattie on 1998/02/20 12:33:56 + Log: Subject: [PATCH for 5.004_59] NeXT doesn't need DONT_DECLARE_STD (was: + NeXT needs DONT_DECLARE_STD) + Date: Sun, 15 Feb 98 23:04:19 +0100 + From: Hans Mulder + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 540] By: mbeattie on 1998/02/20 12:32:25 + Log: Subject: [PATCH] sv_check_thinkfirst macroized + Date: 15 Feb 1998 22:00:38 +0100 + From: Gisle Aas + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 539] By: mbeattie on 1998/02/20 12:31:07 + Log: Subject: [PATCH 5.004_59] allow the Test::Harness to grok TODO-type tests docs + Date: Sat, 14 Feb 1998 17:58:01 -0500 + From: Joshua Pritikin + Branch: perl + + lib/Test.pm + ! MANIFEST lib/Test/Harness.pm +____________________________________________________________________________ +[ 538] By: mbeattie on 1998/02/20 12:24:31 + Log: Subject: [PATCH] 5.004_59: locale startup problems documentation++ + Date: Sat, 14 Feb 1998 15:40:44 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! INSTALL pod/perldiag.pod pod/perllocale.pod +____________________________________________________________________________ +[ 537] By: mbeattie on 1998/02/20 12:23:04 + Log: Subject: [PATCH] Updated, non-wordwrapped, patch to README.VMS + Date: Fri, 13 Feb 1998 13:38:28 -0800 + From: Dan Sugalski + Branch: perl + ! README.vms +____________________________________________________________________________ +[ 536] By: mbeattie on 1998/02/20 12:20:29 + Log: Subject: [PATCH] 5.004_58, move intuition tests + Date: Thu, 12 Feb 1998 17:11:05 -0600 + From: Stephen Potter + Branch: perl + ! t/lib/anydbm.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t + ! t/lib/sdbm.t t/op/array.t t/op/delete.t t/op/each.t + ! t/op/flip.t t/op/pat.t t/op/push.t +____________________________________________________________________________ +[ 535] By: gsar on 1998/02/19 23:07:24 + Log: applied a version of this with tabs intact + Message-Id: + Date: 19 Feb 1998 15:06:38 EST + From: dfan@harmonixmusic.com (Dan Schmidt) + Subject: Pod::Html bug and fix: missing in index + Branch: win32/perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 534] By: gsar on 1998/02/19 19:40:27 + Log: Fix C<0> problem in Pod::Html + Branch: win32/perl + ! lib/Pod/Html.pm +____________________________________________________________________________ +[ 533] By: gsar on 1998/02/18 18:11:08 + Log: non-debug VC builds are -O1 now (they say it works, and is + faster) + Branch: win32/perl + ! win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 532] By: gsar on 1998/02/18 04:11:03 + Log: integrate nick's patch to mainline + Branch: win32/perl + !> pp.c +____________________________________________________________________________ +[ 531] By: mbeattie on 1998/02/17 17:50:50 + Log: Assorted changes to the compiler + Branch: perlext + ! Compiler/B.pm Compiler/B.xs Compiler/B/Asmdata.pm + ! Compiler/B/Bytecode.pm Compiler/B/C.pm Compiler/B/Debug.pm + ! Compiler/NOTES Compiler/O.pm Compiler/bytecode.pl + ! Compiler/byterun.c Compiler/byterun.h Compiler/typemap +____________________________________________________________________________ +[ 530] By: gsar on 1998/02/17 01:47:35 + Log: DLLs are now ok on mingw32/gcc-2.8.0 after removing the + FORCE_ARG_STRING() hack (that bug is fixed in gcc now). mingw32 + build passes all tests except t/lib/io_xs.t (seems to be due to + broken tmpfile() in the CRT or import lib) + Branch: win32/perl + ! XSUB.h win32/makefile.mk win32/win32.h +____________________________________________________________________________ +[ 529] By: gsar on 1998/02/16 23:03:31 + Log: fix mingw32 gcc 2.8.0 build (DLLs generated seem to be broken + in this version of gcc!) + Branch: win32/perl + ! doio.c pp_sys.c win32/config.gc win32/makefile.mk + ! win32/win32.c win32/win32.h win32/win32iop.h x2p/a2p.h +____________________________________________________________________________ +[ 528] By: nick on 1998/02/16 22:13:04 + Log: Missing PUSHMARK in unshift TIEARRAY hook + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 527] By: gsar on 1998/02/15 20:59:07 + Log: integrate win32 branch + Branch: asperl + !> config_h.SH win32/config.bc win32/config.gc win32/config.vc + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + !> win32/makedef.pl +____________________________________________________________________________ +[ 526] By: gsar on 1998/02/15 20:02:11 + Log: Fix typo: s/GETNETBYADD\b/GETNETBYADDR/ + Branch: win32/perl + ! config_h.SH win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc +____________________________________________________________________________ +[ 525] By: gsar on 1998/02/15 03:26:45 + Log: fix build problems due to renamed Config variables + Branch: win32/perl + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/makedef.pl +____________________________________________________________________________ +[ 524] By: gsar on 1998/02/14 01:00:15 + Log: bring ASPerl uptodate with mainline changes + Branch: asperl + +> ext/DB_File/Changes t/comp/require.t + !> (integrate 41 files) +____________________________________________________________________________ +[ 523] By: gsar on 1998/02/14 00:52:17 + Log: integrate mainline + Branch: win32/perl + !> hints/qnx.sh lib/Cwd.pm lib/ExtUtils/xsubpp patchlevel.h + !> pp_hot.c t/op/magic.t +____________________________________________________________________________ +[ 522] By: gsar on 1998/02/14 00:42:37 + Log: added AS patch#6 + Message-Id: <01BD3846.B29FB880.dougl@ActiveState.com> + Date: Fri, 13 Feb 1998 06:14:51 PST + From: Douglas Lankshear + Subject: [PATCH] command line build + + This patch is for the command line build of perl object. + I'll merge the ipfoo.c function with win32_xxx functions next. + + -- Doug + Branch: asperl + ! ObjXSub.h ext/Opcode/Opcode.xs lib/ExtUtils/MM_Win32.pm + ! objpp.h proto.h sv.c win32/dl_win32.xs win32/ipenv.c + ! win32/ipstdio.c win32/makedef.pl win32/runperl.c win32/win32.h +____________________________________________________________________________ +[ 521] By: gsar on 1998/02/14 00:14:04 + Log: added AS patch#5 (patch #4 was intentionally skipped after + discussion) + Branch: asperl + ! embed.h embedvar.h global.sym globals.c hv.c interp.sym + ! intrpvar.h op.c perl.c perl.h pp_ctl.c proto.h regcomp.c + ! regexec.c sv.c toke.c +____________________________________________________________________________ +[ 520] By: nick on 1998/02/13 18:15:46 + Log: Resolve ansiperl against win32 + Branch: ansiperl + +> ext/DB_File/Changes ext/POSIX/hints/linux.pl + +> ext/POSIX/hints/sunos_4.pl lib/Fatal.pm t/comp/require.t + +> t/lib/ph.t + !> (integrate 898 files) + +---------------- +Version 5.004_59 +---------------- + +____________________________________________________________________________ +[ 519] By: mbeattie on 1998/02/13 17:05:37 + Log: Integrate win32 into mainline. + Branch: perl + ! lib/ExtUtils/xsubpp + !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc + !> win32/makefile.mk +____________________________________________________________________________ +[ 518] By: mbeattie on 1998/02/13 17:01:16 + Log: Bump patchlevel.h to 59. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 517] By: mbeattie on 1998/02/13 16:57:59 + Log: Subject: [PATCH] _58: wantarray in void context broken + Date: Fri, 13 Feb 1998 11:24:49 -0500 (est) + From: Norton Allen + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 516] By: mbeattie on 1998/02/13 16:55:33 + Log: Subject: [PATCH] 5.004_58 QNX getcwd + Date: Thu, 12 Feb 1998 13:40:56 -0500 (est) + From: Norton Allen + Branch: perl + ! hints/qnx.sh lib/Cwd.pm t/op/magic.t +____________________________________________________________________________ +[ 515] By: gsar on 1998/02/12 18:29:52 + Log: pickup lddlflags properly for Config.pm + Branch: win32/perl + ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc + ! win32/makefile.mk +____________________________________________________________________________ +[ 514] By: gsar on 1998/02/12 18:16:09 + Log: fix xsubpp bug in SETMAGIC code + Branch: win32/perl + ! lib/ExtUtils/xsubpp +____________________________________________________________________________ +[ 513] By: gsar on 1998/02/12 18:06:30 + Log: integrate mainline + Branch: win32/perl + +> ext/DB_File/Changes + !> Configure MANIFEST config_h.SH ext/DB_File/DB_File.pm + !> ext/DB_File/DB_File.xs hints/machten.sh + !> lib/ExtUtils/Install.pm lib/Pod/Html.pm lib/Pod/Text.pm + !> lib/perl5db.pl malloc.c pod/perldiag.pod pod/perlpod.pod + !> pod/pod2man.PL pp_sys.c regcomp.c regexec.c scope.h sv.c + !> t/lib/db-recno.t t/lib/filecopy.t t/op/misc.t t/op/pat.t + !> t/op/re_tests t/pragma/locale.t +____________________________________________________________________________ +[ 512] By: mbeattie on 1998/02/12 17:34:02 + Log: Missing WITH_THR from new deb() in ENTER/LEAVE caused builds + with -DUSE_THREADS -DDEBUGGING to fail. + Branch: perl + ! scope.h +____________________________________________________________________________ +[ 511] By: mbeattie on 1998/02/12 16:44:03 + Log: Integrate win32 into mainline + Branch: perl + +> t/comp/require.t + !> MANIFEST pp_ctl.c scope.c scope.h t/op/local.t toke.c +____________________________________________________________________________ +[ 510] By: mbeattie on 1998/02/12 16:42:26 + Log: Subject: Re: [PATCH] 5.004_58 | _04 DynaLoader.pm -> DynaLoader.pm.PL (resend) + Date: 12 Feb 1998 14:25:55 +0100 + From: koenig@kulturbox.de (Andreas J. Koenig) + Branch: perl + ! lib/ExtUtils/Install.pm +____________________________________________________________________________ +[ 509] By: mbeattie on 1998/02/12 16:40:34 + Log: Subject: Re: wrong prototype for sbrk [PATCH] + Date: Wed, 11 Feb 1998 15:37:31 -0500 (EST) + From: Andy Dougherty + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 508] By: mbeattie on 1998/02/12 16:36:53 + Log: Subject: [PATCH] 5.004_58 | _04: pod2*,perlpod: L + Date: Wed, 11 Feb 1998 17:29:20 +0100 + From: Achim Bohnet + Branch: perl + ! lib/Pod/Html.pm lib/Pod/Text.pm pod/perlpod.pod pod/pod2man.PL +____________________________________________________________________________ +[ 507] By: mbeattie on 1998/02/12 16:35:26 + Log: Subject: [PATCH] slight tweaks to hints/machten.sh + Date: Wed, 11 Feb 1998 14:59:46 +0100 + From: Dominic Dunlop + Branch: perl + ! hints/machten.sh +____________________________________________________________________________ +[ 506] By: mbeattie on 1998/02/12 16:28:40 + Log: Subject: DB_File 1.58 patch + Date: Tue, 10 Feb 1998 11:23:22 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + + ext/DB_File/Changes + ! MANIFEST ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + ! t/lib/db-recno.t +____________________________________________________________________________ +[ 505] By: mbeattie on 1998/02/12 16:24:26 + Log: Subject: 5.004_5*: [PATCH] restore old behaviour of \1 in RE + Date: Tue, 10 Feb 1998 02:57:46 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! regexec.c t/op/re_tests +____________________________________________________________________________ +[ 504] By: mbeattie on 1998/02/12 16:22:46 + Log: From: Jarkko Hietaniemi + Subject: [PATCH] 5.004_58: the locale.t problem in IRIX + Date: Mon, 9 Feb 1998 19:47:22 +0200 (EET) + Subject: [PATCH] 5.004_58: reserve the POSIX regexp extensions + Date: Tue, 10 Feb 1998 15:12:12 +0200 (EET) + Subject: [PATCH] 5.004_58: API prototype probing + Date: Wed, 11 Feb 1998 12:50:35 +0200 (EET) + Branch: perl + ! Configure config_h.SH pod/perldiag.pod pp_sys.c regcomp.c + ! t/op/misc.t t/op/pat.t t/op/re_tests t/pragma/locale.t +____________________________________________________________________________ +[ 503] By: mbeattie on 1998/02/12 16:15:43 + Log: Subject: [PATCH] filecopy.t #3 fails on dos-djgpp + Date: Mon, 9 Feb 1998 13:19:45 +0100 + From: Laszlo Molnar + Branch: perl + ! t/lib/filecopy.t +____________________________________________________________________________ +[ 502] By: mbeattie on 1998/02/12 16:14:27 + Log: Assorted patches to sv.c: + From: Gisle Aas + Subject: [PATCH] sv_grow can fail for HAS_64K_LIMIT systems + Date: 07 Feb 1998 00:21:57 +0100 + Subject: [PATCH] sv_setnv will upgrade SVt_NV to SVt_PVNV + Date: 07 Feb 1998 00:29:45 +0100 + Subject: [PATCH] sv_upgrade() always returns TRUE + Date: 09 Feb 1998 15:44:01 +0100 + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 501] By: mbeattie on 1998/02/12 16:09:26 + Log: Fix saving of STDOUT during system() in lib/perl5db.pl: + Subject: Perl debugger. + Date: Fri, 6 Feb 1998 17:47:08 -0500 + From: "Jason A. Smith" + Branch: perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 500] By: gsar on 1998/02/12 03:20:55 + Log: merge another maint patch + Message-Id: <199802102349.SAA16001@aatma.engin.umich.edu> + Date: Tue, 10 Feb 1998 18:49:00 EST + From: Gurusamy Sarathy + Subject: Re: after an eval-ed bad require, requiring a string ref gives a SEGV + Branch: win32/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 499] By: gsar on 1998/02/12 03:14:39 + Log: make t/comp/require.t type xtext + Branch: win32/perl + ! t/comp/require.t +____________________________________________________________________________ +[ 498] By: gsar on 1998/02/12 03:09:58 + Log: fix extra LEAVE when require fails + Message-Id: <199802102321.SAA15346@aatma.engin.umich.edu> + Date: Tue, 10 Feb 1998 18:21:37 EST + From: Gurusamy Sarathy + Subject: Re: evals and requires make seg-fault with bad require file + Branch: win32/perl + + t/comp/require.t + ! MANIFEST pp_ctl.c scope.c scope.h toke.c +____________________________________________________________________________ +[ 497] By: gsar on 1998/02/12 02:47:29 + Log: merge a maint patch + Message-Id: <199802110515.AAA23700@aatma.engin.umich.edu> + Date: Wed, 11 Feb 1998 00:15:51 EST + From: Gurusamy Sarathy + Subject: Re: "local" can crash perl-4.00[34] on Solaris-x86 & FreeBSD + Branch: win32/perl + ! pp_ctl.c t/op/local.t +____________________________________________________________________________ +[ 496] By: mbeattie on 1998/02/11 13:04:50 + Log: Integrate win32 into mainline. + Branch: perl + !> embed.h ext/GDBM_File/typemap ext/NDBM_File/typemap + !> ext/ODBM_File/typemap ext/SDBM_File/typemap global.sym gv.c + !> lib/ExtUtils/typemap lib/ExtUtils/xsubpp op.c + !> os2/OS2/PrfDB/typemap pod/perlguts.pod pod/perlobj.pod + !> pod/perlxs.pod pod/perlxstut.pod proto.h sv.c sv.h t/op/ref.t + !> win32/makedef.pl win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 495] By: mbeattie on 1998/02/11 13:03:59 + Log: Fix special constants in Xref.pm + Branch: perlext + ! Compiler/B/Xref.pm +____________________________________________________________________________ +[ 494] By: gsar on 1998/02/10 18:26:28 + Log: fix opendir() problem on share names + Message-Id: <199802101828.NAA10420@aatma.engin.umich.edu> + Date: Tue, 10 Feb 1998 13:28:53 EST + From: Gurusamy Sarathy + Subject: Re: BUG: opendir and UNC names on NT + Branch: win32/perl + ! win32/win32.c +____________________________________________________________________________ +[ 493] By: gsar on 1998/02/09 23:09:40 + Log: integrate win32 branch contents + Branch: asperl + +> ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + +> lib/Fatal.pm t/lib/ph.t + ! hv.c + !> (integrate 895 files) +____________________________________________________________________________ +[ 492] By: gsar on 1998/02/09 07:30:19 + Log: enhancements to previous patch for XSUB OUTPUT args + Message-Id: <199802090731.CAA04438@aatma.engin.umich.edu> + Date: Mon, 09 Feb 1998 02:31:55 EST + From: Gurusamy Sarathy + Subject: Re: [PATCH] XSUB OUTPUT arguments and 'set' magic + Branch: win32/perl + ! embed.h ext/GDBM_File/typemap ext/NDBM_File/typemap + ! ext/ODBM_File/typemap ext/SDBM_File/typemap global.sym + ! lib/ExtUtils/typemap lib/ExtUtils/xsubpp os2/OS2/PrfDB/typemap + ! pod/perlguts.pod pod/perlxs.pod pod/perlxstut.pod proto.h sv.c + ! sv.h +____________________________________________________________________________ +[ 491] By: gsar on 1998/02/09 03:00:52 + Log: don't share TARG unless -DUSE_BROKEN_PAD_RESET + Message-Id: <199710300036.TAA01004@aatma.engin.umich.edu> + Date: Wed, 29 Oct 1997 19:36:25 EST + From: Gurusamy Sarathy + Subject: [PATCH] Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 ) + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 490] By: gsar on 1998/02/09 02:30:43 + Log: fix for bugs in handling DESTROY (adjusted test numbers) + Message-Id: <199801010030.TAA14274@aatma.engin.umich.edu> + Subject: Re: [PERL] RFD: iterative DESTROYing of objects + Date: Wed, 31 Dec 1997 19:30:46 -0500 + From: Gurusamy Sarathy + Branch: win32/perl + ! pod/perlobj.pod sv.c t/op/ref.t +____________________________________________________________________________ +[ 489] By: gsar on 1998/02/09 00:30:35 + Log: ansify prototype for my_safemalloc(), avoid warnings + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 488] By: gsar on 1998/02/09 00:29:08 + Log: fix misapplied hunks in 5.004_58 + Message-Id: <199802080718.CAA18115@aatma.engin.umich.edu> + Date: Sun, 08 Feb 1998 02:18:12 EST + From: Gurusamy Sarathy + Subject: [PATCH] fixes for test failures in 5.004_58 + Branch: win32/perl + ! gv.c op.c +____________________________________________________________________________ +[ 487] By: gsar on 1998/02/09 00:27:16 + Log: win32_utime() tweaks to avoid warnings + Branch: win32/perl + ! win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 486] By: gsar on 1998/02/07 23:45:22 + Log: integrate mainline, plus a few small win32 enhancements + - remove Win32::GetCurrentDirectory() + - add Win32::Sleep() for compat + - add smarter utime() from Jan Dubois, and export it as win32_utime() + Branch: win32/perl + +> ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + +> lib/Fatal.pm t/lib/ph.t + ! win32/makedef.pl win32/win32.c win32/win32iop.h + !> (integrate 61 files) + +---------------- +Version 5.004_58 +---------------- + +____________________________________________________________________________ +[ 485] By: mbeattie on 1998/02/06 18:11:47 + Log: Bump patchlevel to 58. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 484] By: mbeattie on 1998/02/06 18:08:28 + Log: Fix up problem with gv.c from change 477. + Fix up Config.pm use in t/lib/ph.t from change 478. + Branch: perl + ! gv.c t/lib/ph.t +____________________________________________________________________________ +[ 483] By: mbeattie on 1998/02/06 17:34:34 + Log: Integrate win32 branch into mainline + Branch: perl + !> win32/win32sck.c +____________________________________________________________________________ +[ 482] By: mbeattie on 1998/02/06 17:26:41 + Log: lib/Fatal.pm missing from repository + Branch: perl + + lib/Fatal.pm +____________________________________________________________________________ +[ 481] By: mbeattie on 1998/02/06 17:24:57 + Log: Subject: [PATCH] Re: posix::strftime (core dumped) + Date: Thu, 5 Feb 1998 13:55:23 -0500 (EST) + From: Andy Dougherty + Branch: perl + + ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + ! MANIFEST hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t +____________________________________________________________________________ +[ 480] By: mbeattie on 1998/02/06 17:19:52 + Log: x2p/str.c was missing from list of changed files in change 466 + Branch: perl + ! x2p/str.c +____________________________________________________________________________ +[ 479] By: mbeattie on 1998/02/06 17:16:54 + Log: Added t/lib/ph.t to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 478] By: mbeattie on 1998/02/06 17:15:38 + Log: Subject: [PATCH] h2ph.PL + Date: Thu, 5 Feb 1998 05:53:54 -0800 (EST) + From: kstar@www.chapin.edu (Kurt D. Starsinic) + Branch: perl + + t/lib/ph.t + ! utils/h2ph.PL +____________________________________________________________________________ +[ 477] By: mbeattie on 1998/02/06 17:10:46 + Log: Subject: [PATCH] Faster gv_fetchpv() for nested packages + Date: 04 Feb 1998 14:49:46 +0100 + From: Gisle Aas + as modified by + From: chip@atlantic.net + Date: Wed, 4 Feb 1998 11:46:49 -0500 (EST) + Branch: perl + ! gv.c +____________________________________________________________________________ +[ 476] By: mbeattie on 1998/02/06 16:47:03 + Log: From: Jarkko Hietaniemi + Subject: [PATCH] almost OK: perl 5.00457 on i386-freebsd-thread 3.0 + Date: Wed, 4 Feb 1998 12:59:47 +0200 (EET) + Subject: Re: [PATCH] 5.004_04 and 5.004_57: Complex.pm and complex.t + Date: Thu, 5 Feb 1998 18:08:20 +0200 (EET) + Branch: perl + ! hints/freebsd.sh lib/Math/Complex.pm t/lib/complex.t +____________________________________________________________________________ +[ 475] By: mbeattie on 1998/02/06 16:44:57 + Log: Subject: [PATCH] nomemok + Date: Mon, 2 Feb 1998 15:06:50 +0100 + From: Gisle Aas + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 474] By: mbeattie on 1998/02/06 16:43:46 + Log: Subject: [PATCH] Benchmark.pm: timethese corrupts $_ + Date: Sun, 1 Feb 1998 06:46:08 -0500 (EST) + From: abigail@fnx.com + Branch: perl + ! lib/Benchmark.pm +____________________________________________________________________________ +[ 473] By: mbeattie on 1998/02/06 16:42:53 + Log: Subject: [PATCH] adding the newSVpvn API function + Date: Sat, 31 Jan 1998 06:32:42 +0100 + From: Matthias Ulrich Neeracher + Branch: perl + ! embed.h embedvar.h global.sym pod/perlguts.pod pod/perltoc.pod + ! proto.h sv.c +____________________________________________________________________________ +[ 472] By: mbeattie on 1998/02/06 16:35:41 + Log: Subject: Re: [PATCH] new hints/solaris2.sh (was Re: make check fails 17% of it's tests on Solaris...) + Date: 28 Jan 1998 17:40:37 -0800 + From: Stephen Zander + Branch: perl + ! hints/solaris_2.sh +____________________________________________________________________________ +[ 471] By: mbeattie on 1998/02/06 16:02:57 + Log: Subject: [PATCH] Re: 5.004_04 vec() fails with 32-bit values + Date: Thu, 15 Jan 1998 11:53:06 +0000 + From: "M.J.T. Guy" + Branch: perl + ! pod/perlguts.pod pp.c t/op/vec.t +____________________________________________________________________________ +[ 470] By: mbeattie on 1998/02/06 16:01:36 + Log: From: Ilya Zakharevich + Subject: 5.004_56: Patch to Tie::Hash and docs + Date: Sun, 11 Jan 1998 20:34:05 -0500 (EST) + Subject: 5.004_56: Patch to (?{}) quoting + cosmetic + Date: Mon, 2 Feb 1998 01:28:46 -0500 (EST) + Branch: perl + ! lib/Tie/Hash.pm pod/perlfunc.pod pod/perlre.pod regcomp.c + ! t/op/misc.t t/op/pat.t toke.c +____________________________________________________________________________ +[ 469] By: mbeattie on 1998/02/06 15:58:31 + Log: Subject: Another Array.pm patch + Date: Wed, 4 Feb 1998 20:37:03 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + ! lib/Tie/Array.pm +____________________________________________________________________________ +[ 468] By: mbeattie on 1998/02/06 15:56:28 + Log: Subject: documentation patch for 5.004_57 + Date: Wed, 4 Feb 1998 14:54:13 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + ! lib/Tie/Array.pm +____________________________________________________________________________ +[ 467] By: mbeattie on 1998/02/06 15:55:34 + Log: Subject: 5.004_56: patch for `use Fatal' again + Date: Thu, 29 Jan 1998 17:04:28 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! MANIFEST pod/perldiag.pod pod/perlfunc.pod pod/perlmodlib.pod + ! pp.c t/comp/proto.t toke.c +____________________________________________________________________________ +[ 466] By: mbeattie on 1998/02/06 15:53:53 + Log: Subject: Newer -DLEAKTEST patch + Date: Fri, 9 Jan 1998 17:55:09 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! ext/DB_File/DB_File.xs ext/DynaLoader/dl_next.xs + ! ext/DynaLoader/dl_vms.xs ext/Opcode/Opcode.xs handy.h hv.c + ! perl.c perly.c perly.c.diff perly.fixer pod/perlembed.pod + ! pod/perlguts.pod pod/perlrun.pod pod/perltoc.pod pp_hot.c sv.c + ! toke.c util.c vms/perly_c.vms x2p/hash.c +____________________________________________________________________________ +[ 465] By: mbeattie on 1998/02/06 15:46:35 + Log: More Chip patches (tweaked for _5x). The final one mentioned here + (@ARGV with -i) actually went in at change 462 but I failed to + add it to the change description: + Subject: [PATCH] Fix typo: "FORM{,AT}LINE" + Date: Sun, 11 Jan 1998 19:37:17 -0500 (EST) + Subject: [PATCH] Fix for C<@x = my @y> + Date: Sun, 11 Jan 1998 18:12:16 -0500 (EST) + Subject: [PATCH] Fix SEGV on C<*glob{SCALAR,ARRAY}> + Date: Thu, 5 Feb 1998 21:30:13 -0500 (EST) + Subject: [PATCH] Allow last() to mean last + Date: Thu, 5 Feb 1998 21:42:57 -0500 (EST) + Subject: [PATCH] Consider @ARGV to be plain files if inplace (-i) + Date: Wed, 4 Feb 1998 16:04:47 -0500 (EST) + Branch: perl + ! op.c perly.c perly.h perly.y sv.c t/op/my.t vms/perly_c.vms + ! vms/perly_h.vms +____________________________________________________________________________ +[ 464] By: mbeattie on 1998/02/06 15:06:18 + Log: More Chip patches: + Subject: [PATCH] Fix SEGV from combining caller and C + Date: Thu, 5 Feb 1998 21:47:50 -0500 (EST) + Subject: [PATCH] Fix line numbers after here documents in eval STRING + Date: Thu, 5 Feb 1998 21:50:08 -0500 (EST) + Subject: [PATCH] Make recursive lexical analysis more robust + Date: Thu, 5 Feb 1998 21:57:02 -0500 (EST) + Branch: perl + ! pp_ctl.c sv.c toke.c +____________________________________________________________________________ +[ 463] By: mbeattie on 1998/02/06 15:04:17 + Log: Some more Chip patches (tweaked to match _5x): + Subject: [PATCH] Fix empty BLOCK + Date: Wed, 4 Feb 1998 16:52:28 -0500 (EST) + Subject: [PATCH] fix (\@@) proto + Date: Thu, 5 Feb 1998 10:24:29 -0500 (EST) + Subject: [PATCH] Cope with lack of args in Fcntl::AUTOLOAD + Date: Thu, 5 Feb 1998 21:26:55 -0500 (EST) + Subject: [PATCH] Don't fold string comparison under C + Date: Thu, 5 Feb 1998 21:46:25 -0500 (EST) + Branch: perl + ! ext/Fcntl/Fcntl.pm op.c t/comp/proto.t toke.c +____________________________________________________________________________ +[ 462] By: mbeattie on 1998/02/06 14:56:30 + Log: Some Chip patches (some tweaked to match _5x source): + From: Chip Salzenberg + Subject: [PATCH] local leakage + Date: Tue, 3 Feb 1998 09:16:50 -0500 (EST) + Subject: [PATCH] NULs in patterns + Date: Wed, 4 Feb 1998 01:33:51 -0500 (EST) + Subject: [PATCH] Configure on PerlIO + Date: Wed, 4 Feb 1998 01:38:43 -0500 (EST) + Subject: [PATCH] Avoid core dump on package alias + Date: Wed, 4 Feb 1998 15:38:42 -0500 (EST) + Subject: [PATCH] Fix name of $Foo::{'Bar::'} + Date: Wed, 4 Feb 1998 16:37:51 -0500 (EST) + Branch: perl + ! Configure doio.c gv.c op.c pp_ctl.c sv.c t/op/gv.t + ! t/op/local.t +____________________________________________________________________________ +[ 461] By: gsar on 1998/02/04 03:34:36 + Log: support win32_select(0,0,0,msec) (winsock doesn't) + Branch: win32/perl + ! win32/win32sck.c +____________________________________________________________________________ +[ 460] By: gsar on 1998/02/04 00:44:47 + Log: bug: win32_select() must StartSockets() + Branch: win32/perl + ! win32/win32sck.c + +---------------- +Version 5.004_57 +---------------- + +____________________________________________________________________________ +[ 459] By: mbeattie on 1998/02/03 16:00:07 + Log: Replaced two occurrences of THREADSV(find_thread_sv(...)) (order + of execution causes core dump if threadsvp is moved). Replaced + lvalue occurrence of AvARRAY(av) with SvPVX(av) (former does cast). + Branch: perl + ! av.c perl.c +____________________________________________________________________________ +[ 458] By: mbeattie on 1998/02/03 14:40:02 + Log: Fix up MANIFEST. + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 457] By: mbeattie on 1998/02/03 13:50:23 + Log: Integrate win32 into mainline. My last integration from ansiperl + to the mainline was a dismal failure: I did -ay but meant -at. + This should fix things now since win32 has already integrated + all the necessary changes from ansiperl. + Branch: perl + !> (integrate 111 files) +____________________________________________________________________________ +[ 456] By: gsar on 1998/02/03 04:48:08 + Log: Fix minor problems with non USE_THREADS build. win32 branch + now looks 5.004_57-ready. + Branch: win32/perl + ! thread.h win32/makedef.pl +____________________________________________________________________________ +[ 455] By: gsar on 1998/02/03 03:45:09 + Log: integrate mainline + Branch: win32/perl + !> (integrate 887 files) +____________________________________________________________________________ +[ 454] By: mbeattie on 1998/02/02 16:44:24 + Log: The new dec_osf.sh didn't work so the new glibpth and useshrplib + defaults have been commented out for now. + Branch: perl + ! hints/dec_osf.sh +____________________________________________________________________________ +[ 453] By: mbeattie on 1998/02/02 15:51:39 + Log: Introduced thr->threadsvp and THREADSV() for faster per-thread + variables. Moved threadnum to a per-interpreter variable and + made dTHR and lock/unlock of sv_mutex bypass the get/lock unless + more than one thread may be running. Minor tweaks to Thread.xs. + Branch: perl + ! dosish.h embedvar.h ext/Thread/Thread.xs interp.sym intrpvar.h + ! op.c perl.c perl.h pp.c pp_ctl.c scope.c sv.c thrdvar.h + ! thread.h util.c +____________________________________________________________________________ +[ 452] By: gsar on 1998/02/02 04:56:50 + Log: remove totally egregious s/\\dir// in File::Find + Branch: win32/perl + ! lib/File/Find.pm +____________________________________________________________________________ +[ 451] By: gsar on 1998/02/01 22:20:20 + Log: added AS patch#3 + Message-Id: <01BD2EF2.53433A40.dougl@ActiveState.com> + Date: Sun, 01 Feb 1998 09:18:13 PST + From: Douglas Lankshear + To: "'Gurusamy Sarathy'" + + Here's an additional diff against //depot/asperl + + The field name mg_length was changed back to mg_len + The function name mg_len was change to mg_length + + The need for sort_mutex removed thanks to the code derived + from Tom Horsley's work. + + -- Doug + Branch: asperl + + XSLock.h + ! ObjXSub.h XSUB.h av.c embedvar.h ext/DynaLoader/dlutils.c + ! globals.c ipstdio.h mg.c mg.h objpp.h perl.c perl.h perlio.h + ! perlvars.h perly.c pp.c pp_ctl.c pp_hot.c proto.h regexec.c + ! scope.c scope.h sv.c toke.c universal.c util.c + ! win32/dl_win32.xs win32/iplio.c win32/ipstdio.c + ! win32/perlobj.def win32/runperl.c +____________________________________________________________________________ +[ 450] By: gsar on 1998/01/30 23:43:57 + Log: various tweaks + - add new functions to proto.h + - fix up makefile.mk for $(OBJECT) + Branch: asperl + ! pp_ctl.c proto.h win32/makefile.mk +____________________________________________________________________________ +[ 449] By: gsar on 1998/01/30 21:23:15 + Log: fix up missing patches from AS patch#2 + Branch: asperl + ! perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h + ! pp_ctl.c proto.h +____________________________________________________________________________ +[ 448] By: gsar on 1998/01/30 18:23:17 + Log: fix htonlx typo + Branch: win32/perl + ! perlsock.h +____________________________________________________________________________ +[ 447] By: mbeattie on 1998/01/30 16:03:49 + Log: Fix up MANIFEST to add missing files + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 446] By: mbeattie on 1998/01/30 12:34:55 + Log: Bump patchlevel to 57. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 445] By: gsar on 1998/01/30 10:44:38 + Log: initial merge of latest win32 branch into ASPerl + Branch: asperl + +> lib/Tie/Array.pm pod/perlhist.pod t/lib/tie-push.t + +> t/lib/tie-stdarray.t t/lib/tie-stdpush.t t/op/tiearray.t + +> win32/bin/perlglob.pl + !> (integrate 141 files) +____________________________________________________________________________ +[ 444] By: gsar on 1998/01/30 09:25:58 + Log: goofed branching, redo asperl branch + Branch: asperl + ! perl.h +____________________________________________________________________________ +[ 443] By: gsar on 1998/01/30 09:23:36 + Log: added AS patch#2 + Branch: asperl + + ObjXSub.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h + + ipstdio.h objpp.h win32/ipdir.c win32/ipenv.c win32/iplio.c + + win32/ipmem.c win32/ipproc.c win32/ipsock.c win32/ipstdio.c + + win32/ipstdiowin.h win32/perlobj.def + ! EXTERN.h XSUB.h cv.h doio.c dosish.h dump.c embedvar.h + ! globals.c gv.c hv.c intrpvar.h malloc.c mg.c mg.h op.c op.h + ! opcode.h perl.c perl.h perldir.h perlenv.h perlio.h perllio.h + ! perlmem.h perlproc.h perlsock.h perlvars.h perly.c pp.c pp.h + ! pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regcomp.h + ! regexec.c run.c scope.c scope.h sv.c sv.h thread.h toke.c + ! universal.c util.c vms/vms.c win32/Makefile win32/config_H.bc + ! win32/config_H.vc win32/dl_win32.xs win32/include/sys/socket.h + ! win32/makedef.pl win32/runperl.c win32/win32iop.h +____________________________________________________________________________ +[ 441] By: gsar on 1998/01/30 08:54:19 + Log: Created new branch from win32@396, added AS patch#1 + Branch: asperl + + doio.c malloc.c perl.c perl.h perldir.h perlenv.h perllio.h + + perlmem.h perlproc.h perlsock.h pp.c pp_hot.c pp_sys.c + + regcomp.c scope.h sv.c toke.c util.c + +> (branch 915 files) +____________________________________________________________________________ +[ 440] By: gsar on 1998/01/30 04:43:23 + Log: integrate winansi + Branch: win32/perl + +> pod/perlhist.pod + !> MANIFEST av.c hv.c op.c perlsock.h pp_ctl.c pp_sys.c scope.c + !> util.c +____________________________________________________________________________ +[ 439] By: mbeattie on 1998/01/27 15:31:53 + Log: Integrate ansi branch into mainline (resolve -ay). + Branch: perl + +> lib/Tie/Array.pm perldir.h perlenv.h perllio.h perlmem.h + +> perlproc.h perlsock.h pod/perlhist.pod t/lib/tie-push.t + +> t/lib/tie-stdarray.t t/lib/tie-stdpush.t t/op/tiearray.t + +> win32/bin/perlglob.pl + ! op.c + !> (integrate 868 files) +____________________________________________________________________________ +[ 438] By: nick on 1998/01/24 12:02:34 + Log: Gisle's av_unshift tweak, two small patches from chip + and check for NULL in hv_delete in case '~' and tie magic + are present + Branch: ansiperl + ! av.c hv.c op.c pp_ctl.c scope.c +____________________________________________________________________________ +[ 437] By: nick on 1998/01/24 10:37:56 + Log: Get PerlXxx_yyyy() macro stuff to _compile_ on Solaris. + Ugh! ... + Macros were unsuitable for declaring the functions, extra () round + parameters removed - non-function forms of PerlXxx_yyyy() need to + add () themselves. + Need to include perlmem.h in util.c (at least) if not using Perl's malloc. + Branch: ansiperl + ! perlsock.h pp_sys.c util.c +____________________________________________________________________________ +[ 436] By: nick on 1998/01/24 10:03:03 + Log: Integrate win32 into ansiperl + Branch: ansiperl + +> perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h + +> win32/bin/perlglob.pl + !> (integrate 38 files) +____________________________________________________________________________ +[ 435] By: nick on 1998/01/24 09:47:49 + Log: Add perlhist.pod + Branch: ansiperl + + pod/perlhist.pod + ! MANIFEST +____________________________________________________________________________ +[ 434] By: gsar on 1998/01/19 05:01:47 + Log: s/PerlENV/PerlEnv/ just to be consistent + Branch: win32/perl + ! malloc.c perl.c perlenv.h regcomp.c toke.c util.c +____________________________________________________________________________ +[ 433] By: gsar on 1998/01/19 04:52:18 + Log: foo() -> PerlGroup_foo() patch from ActiveState + Branch: win32/perl + + perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h + ! doio.c malloc.c perl.c perl.h pp.c pp_hot.c pp_sys.c regcomp.c + ! scope.h sv.c toke.c util.c +____________________________________________________________________________ +[ 432] By: gsar on 1998/01/19 04:42:26 + Log: integrate mainline + Branch: win32/perl + !> pod/perlfunc.pod +____________________________________________________________________________ +[ 431] By: gsar on 1998/01/19 04:40:04 + Log: integrate changes in winansi + Branch: win32/perl + +> lib/Tie/Array.pm t/lib/tie-push.t t/lib/tie-stdarray.t + +> t/lib/tie-stdpush.t t/op/tiearray.t + !> (integrate 98 files) +____________________________________________________________________________ +[ 430] By: gsar on 1998/01/19 04:10:43 + Log: Fix autovivification problems with XSUB OUTPUT args + Message-Id: <199801190409.XAA26710@aatma.engin.umich.edu> + Date: Sun, 18 Jan 1998 23:09:07 EST + From: Gurusamy Sarathy + Subject: [PATCH] XSUB OUTPUT arguments and 'set' magic + Branch: win32/perl + ! ext/GDBM_File/typemap ext/NDBM_File/typemap + ! ext/ODBM_File/typemap ext/SDBM_File/typemap + ! lib/ExtUtils/typemap os2/OS2/PrfDB/typemap pod/perlguts.pod + ! pod/perlxs.pod pod/perlxstut.pod sv.c sv.h win32/win32.h +____________________________________________________________________________ +[ 429] By: nick on 1998/01/17 21:01:50 + Log: Subject: [PATCH] 5.004_56 threaded and "CONFIG key 'exe_ext' does not exist in Config.pm" + Date: Thu, 25 Dec 1997 13:39:15 -0500 + From: Spider Boardman + To: perl5-porters@perl.org + + It turns out that the potential for the "CONFIG key 'exe_ext' + does not exist in Config.pm" problem has been around for a while, + in the definition of SvTRUE(). It's just that non-gcc compilers + are more or less being built as CRIPPLED_CC when USE_THREADS is + defined (even if they can inline things). The inline macro for + SvTRUE works with tied hashes and the EXISTS method, and the + functional version (sv_true in 5.004_56, or SvTRUE in 5.004_04) + does not, because it adds an excess mg_get() which replaces the + EXISTS result with a FETCH result. + Branch: ansiperl + ! sv.c +____________________________________________________________________________ +[ 428] By: nick on 1998/01/17 20:59:11 + Log: From: Robin Barker + Date: Fri, 19 Dec 97 17:19:09 GMT + Message-Id: <26260.9712191719@lightning.cise.npl.co.uk> + Branch: ansiperl + ! doio.c sv.c toke.c util.c +____________________________________________________________________________ +[ 427] By: nick on 1998/01/17 12:01:53 + Log: Permit tie ?foo,$object + tidy up dead #ifdef ORIGINAL_TIE) + Remove 'P' magic from hash, before adding new one in dbm_open like tie does. + Branch: ansiperl + ! pp_sys.c +____________________________________________________________________________ +[ 426] By: nick on 1998/01/15 18:06:36 + Log: First working TIEARRAY and other misc tie fixes + Branch: ansiperl + ! MANIFEST pp.c pp_hot.c t/op/tiearray.t +____________________________________________________________________________ +[ 425] By: nick on 1998/01/14 21:56:40 + Log: Not working yet - split problems ... + Branch: ansiperl + ! pp.c t/lib/thread.t t/op/tiearray.t +____________________________________________________________________________ +[ 424] By: nick on 1998/01/14 18:49:25 + Log: TIEARRAY updates - almost works ... + Branch: ansiperl + + t/lib/tie-push.t t/lib/tie-stdarray.t t/lib/tie-stdpush.t + ! MANIFEST av.c av.h ext/DB_File/DB_File.pm lib/Tie/Array.pm + ! mg.c pod/perltie.pod pp.c pp_hot.c pp_sys.c scope.c + ! t/op/avhv.t t/op/push.t t/op/tiearray.t +____________________________________________________________________________ +[ 423] By: gsar on 1998/01/14 00:13:16 + Log: fix MakeMaker installbin problem + Message-Id: <199801070016.TAA17766@aatma.engin.umich.edu> + Subject: Re: can't modify message with HTML-Stream, v.1.42 + Date: Tue, 06 Jan 1998 19:16:35 -0500 + From: Gurusamy Sarathy + Branch: win32/perl + ! lib/ExtUtils/MM_Unix.pm +____________________________________________________________________________ +[ 422] By: gsar on 1998/01/13 23:53:02 + Log: add archname to *sitearch in config.{b,g,v}c + Branch: win32/perl + ! win32/config.bc win32/config.gc win32/config.vc +____________________________________________________________________________ +[ 421] By: gsar on 1998/01/13 23:15:14 + Log: set $ENV{PERL5LIB} in t/harness (so child perlglob.bat sees it) + Branch: win32/perl + ! t/harness +____________________________________________________________________________ +[ 420] By: nick on 1998/01/13 22:55:02 + Log: tiearray tweaks + Branch: ansiperl + ! av.c pp_sys.c t/op/nothread.t t/op/tiearray.t +____________________________________________________________________________ +[ 419] By: nick on 1998/01/13 21:27:33 + Log: Skeleton Tie::Array + Branch: ansiperl + + lib/Tie/Array.pm +____________________________________________________________________________ +[ 418] By: nick on 1998/01/13 20:52:38 + Log: tie array changes to core and tests + Branch: ansiperl + + t/op/tiearray.t + ! MANIFEST av.c av.h deb.c embed.h ext/DB_File/DB_File.pm + ! global.sym gv.c mg.c op.c perl.c perl.h pp.c pp.h pp_ctl.c + ! pp_hot.c proto.h sv.c toke.c universal.c util.c +____________________________________________________________________________ +[ 417] By: gsar on 1998/01/13 20:49:52 + Log: fix perlglob.bat warnings by splitting it from File::DosGlob + Branch: win32/perl + + win32/bin/perlglob.pl + ! MANIFEST README.win32 lib/File/DosGlob.pm win32/Makefile + ! win32/makefile.mk +____________________________________________________________________________ +[ 416] By: gsar on 1998/01/13 02:46:53 + Log: various tweaks to build support (NOTE: meant for 5.004_57) + - build and install x2p + - fix installperl warnings on win32 + - `make install` now does puts the archlibs in right places + - makefiles don't default to USE_THREADS anymore + - sync config.{b,g,v}c + - sync makefile.mk -> Makefile + Branch: win32/perl + ! installperl win32/Makefile win32/config.bc win32/config.gc + ! win32/config.vc win32/config_sh.PL win32/makefile.mk x2p/a2p.h + ! x2p/a2py.c +____________________________________________________________________________ +[ 415] By: nick on 1998/01/11 16:54:26 + Log: Integrate win32 into ansiperl + Branch: ansiperl + !> Configure hints/dec_osf.sh hv.c lib/Getopt/Long.pm lib/blib.pm + !> lib/newgetopt.pl perl.h perl_exp.SH pp_ctl.c pp_hot.c pp_sys.c + !> proto.h regcomp.h regexec.c t/op/re_tests t/pragma/locale.t + !> utils/perldoc.PL vms/config.vms vms/descrip.mms + !> vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c + !> vms/vmsish.h x2p/s2p.PL +____________________________________________________________________________ +[ 414] By: nick on 1998/01/11 15:13:49 + Log: Integratye mainline -> ansiperl + Branch: ansiperl + !> (integrate 64 files) +____________________________________________________________________________ +[ 413] By: mbeattie on 1998/01/09 12:57:58 + Log: Add missing blank line in pod/perlfunc.pod. + Branch: perl + ! pod/perlfunc.pod +____________________________________________________________________________ +[ 412] By: gsar on 1998/01/08 20:54:31 + Log: change#398 breaks ENV_IS_CASELESS, fix it + Branch: win32/perl + ! hv.c +____________________________________________________________________________ +[ 411] By: gsar on 1998/01/08 18:33:58 + Log: Integrate mainline + Branch: win32/perl + !> Configure hints/dec_osf.sh hv.c lib/Getopt/Long.pm lib/blib.pm + !> lib/newgetopt.pl perl.h perl_exp.SH pp_ctl.c pp_hot.c pp_sys.c + !> proto.h regcomp.h regexec.c t/op/re_tests t/pragma/locale.t + !> utils/perldoc.PL vms/config.vms vms/descrip.mms + !> vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c + !> vms/vmsish.h x2p/s2p.PL +____________________________________________________________________________ +[ 410] By: mbeattie on 1998/01/08 16:06:22 + Log: Fix thinko in t/pragma/locale.t: + Subject: [PATCH] _04 or _56: locale.t + Date: Sun, 4 Jan 1998 23:48:44 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! t/pragma/locale.t +____________________________________________________________________________ +[ 409] By: mbeattie on 1998/01/08 16:05:09 + Log: Use Tom Horley's qsort for sorting: + Subject: Re: [PATCH for 5.004_56] Re: op/sort.t hangs under Solaris 2.5 + Date: Fri, 02 Jan 1998 19:33:24 -0500 (EST) + From: Hans Mulder + Branch: perl + ! pp_ctl.c +____________________________________________________________________________ +[ 408] By: mbeattie on 1998/01/08 16:01:57 + Log: Make s2p not use cpp: + Subject: [PATCH for 5.004_56] s2p shouldn't use cpp + Date: Mon, 29 Dec 1997 19:38:18 -0500 (EST) + From: Hans Mulder + Branch: perl + ! x2p/s2p.PL +____________________________________________________________________________ +[ 407] By: mbeattie on 1998/01/08 15:57:31 + Log: DG/UX tweaks to perl.h: + Subject: [PATCH] _56 on dgux without threads + Date: Sat, 20 Dec 1997 23:01:40 -0500 + From: Roderick Schertler + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 406] By: mbeattie on 1998/01/08 15:56:02 + Log: Configure and hints/dec_osf.sh changes for Digital UNIX: + Subject: [PATCH] perl5.004_56 NOT OK on alpha-dec_osf-thread (Digital UNIX X5.0-13) + Date: Sat, 20 Dec 1997 02:30:01 -0500 + From: Spider Boardman + Branch: perl + ! Configure hints/dec_osf.sh +____________________________________________________________________________ +[ 405] By: mbeattie on 1998/01/08 15:53:40 + Log: Missing "" in Configure echo for gethbadd_addr_type. + Branch: perl + ! Configure +____________________________________________________________________________ +[ 404] By: mbeattie on 1998/01/08 13:04:48 + Log: print/printf/... over-eager mg_find for glob magic: + Subject: [PATCH] fix inefficient checks for TIEHANDLE + Date: Wed, 07 Jan 1998 20:06:05 -0500 + From: Gurusamy Sarathy + Branch: perl + ! pp_hot.c pp_sys.c +____________________________________________________________________________ +[ 403] By: mbeattie on 1998/01/08 12:56:31 + Log: Assorted VMS patches (mostly VMS makefile update for new headers): + Subject: [PATCH] VMS update for 5.004_56 + Date: Sat, 03 Jan 1998 03:54:29 -0500 (EST) + From: Charles Bailey + Branch: perl + ! lib/blib.pm proto.h regcomp.h vms/config.vms vms/descrip.mms + ! vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c + ! vms/vmsish.h +____________________________________________________________________________ +[ 402] By: mbeattie on 1998/01/08 12:46:15 + Log: Fix utils/perldoc.PL for dos-djgpp: + Subject: 5.004_56: perldoc.PL dos-djgpp patches + Date: Tue, 6 Jan 1998 18:14:59 +0100 + From: Molnar Laszlo + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 401] By: mbeattie on 1998/01/08 12:40:14 + Log: Version 2.13 of GetoptLong: + Subject: Re: ANNOUNCE: perl 5.004_56 is available + Date: 06 Jan 1998 16:21:45 +0100 + From: JVromans@Squirrel.nl (Johan Vromans) + Branch: perl + ! lib/Getopt/Long.pm lib/newgetopt.pl +____________________________________________________________________________ +[ 400] By: mbeattie on 1998/01/08 12:28:08 + Log: Fix variable export and threading configuration for AIX: + Subject: [PATCH] 5.004_56: AIX 4.1.5.0: sans et avec threads + Date: Tue, 23 Dec 1997 15:39:12 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! Configure perl_exp.SH +____________________________________________________________________________ +[ 399] By: mbeattie on 1998/01/08 12:25:38 + Log: Regexp fix: (?>a+)b doesn't match aaab: + Subject: Re: Regexp [PATCH] 5.004_56 (?>...) + Date: Fri, 19 Dec 1997 16:02:50 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! regexec.c t/op/re_tests +____________________________________________________________________________ +[ 398] By: mbeattie on 1998/01/08 12:23:41 + Log: Fix hv_delete for 'm'-magic. Based on following patch, modified + to cope with ENV_IS_CASELESS: + Subject: [perl5.004_56] [PATCH] hv_delete and 'm' magic + Date: Fri, 19 Dec 1997 11:31:36 -0500 + From: Owen Taylor + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 397] By: mbeattie on 1998/01/08 12:10:29 + Log: Integrate win32 branch into mainline. + Branch: perl + !> (integrate 41 files) +____________________________________________________________________________ +[ 396] By: gsar on 1998/01/07 19:12:27 + Log: tweak case-insensitive ENV implementation + Branch: win32/perl + ! hv.c +____________________________________________________________________________ +[ 395] By: nick on 1998/01/07 18:40:55 + Log: Integrate win32 branch + Branch: ansiperl + !> (integrate 31 files) +____________________________________________________________________________ +[ 394] By: gsar on 1998/01/05 19:17:40 + Log: Allow $ENV{PERL5SHELL} to contain switches etc., and document + the fact + Branch: win32/perl + ! pod/perlrun.pod win32/win32.c +____________________________________________________________________________ +[ 393] By: gsar on 1998/01/05 05:43:33 + Log: Support case-tolerant %ENV + - underlying system calls see the case-as-supplied by user + - added tests to verify addition/deletion/enumeration case-tolerance + - hv.c touched, but changes are fully conditional on -DENV_IS_CASELESS, + which is default on win32 now + Branch: win32/perl + ! hv.c t/op/magic.t win32/win32.h +____________________________________________________________________________ +[ 392] By: gsar on 1998/01/04 17:55:19 + Log: Add a tweaked version of: + Message-Id: <199801040630.AA29298@metronet.com> + Date: Sun, 04 Jan 1998 00:30:57 CST + From: Tye McQueen + Subject: New patch for $^E==GetLastError() under Win32 + Branch: win32/perl + ! doio.c lib/dumpvar.pl lib/perl5db.pl mg.c perl.h + ! pod/perlfunc.pod pod/perlvar.pod util.c win32/makedef.pl + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 391] By: gsar on 1998/01/04 07:59:44 + Log: Various win32 fixes + - support spawn via system(&P_NOWAIT,...) like OS2 + - support wait() and waitpid() + - s/GetCurrentDirectory/GetCwd/, long-named XS to be removed + - support -lfoo properly in ExtUtils::Liblist + - fix outdated info about Win32 support in perlfaq2 + - fix win32 bug in perldoc that causes spurious warnings + - regularize global function/variable names yet more + - fix bug in do_aspawn() (it was always invoking shell, instead of + almost never) + - implement and export win32_wait() + - stub version of USE_RTL_THREAD_API + Branch: win32/perl + ! README.win32 dosish.h lib/Cwd.pm lib/ExtUtils/Liblist.pm + ! pod/perlfaq2.pod pp_sys.c util.c utils/perldoc.PL + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/config_h.PL win32/perllib.c win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32sck.c win32/win32thread.c + ! win32/win32thread.h +____________________________________________________________________________ +[ 390] By: gsar on 1997/12/30 21:00:28 + Log: Fix $ENV{Path} in FindBin.pm + Branch: win32/perl + ! lib/FindBin.pm +____________________________________________________________________________ +[ 389] By: nick on 1997/12/29 10:33:23 + Log: Resolve ansiperl against win32 + Branch: ansiperl + !> (integrate 105 files) +____________________________________________________________________________ +[ 388] By: gsar on 1997/12/24 04:59:28 + Log: make $? Unix (and ActiveWare) compatible + Branch: win32/perl + ! README.win32 win32/win32.c +____________________________________________________________________________ +[ 387] By: gsar on 1997/12/24 04:21:30 + Log: support ioctl() on sockets (does what ioctlsocket() does) to make + non-blocking IO on sockets possible + Branch: win32/perl + ! README.win32 dosish.h win32/makedef.pl win32/win32.c + ! win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 386] By: gsar on 1997/12/24 03:10:55 + Log: support getlogin() + Branch: win32/perl + ! README.win32 win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 385] By: gsar on 1997/12/24 02:24:59 + Log: add support for crypt() via user-supplied des_fcrypt() source or library. + Update README.win32. + Branch: win32/perl + ! README.win32 perl.h win32/Makefile win32/makedef.pl + ! win32/makefile.mk win32/win32.c win32/win32.h win32/win32iop.h +____________________________________________________________________________ +[ 384] By: gsar on 1997/12/24 02:22:42 + Log: tweak op.c to avoid warning + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 383] By: gsar on 1997/12/23 21:12:42 + Log: Trivial bugfix#3 from local repository + Message-Id: <199712061100.GAA14864@aatma.engin.umich.edu> + Subject: Re: Assigning result of pop scrambles unrelated reference + Date: Sat, 06 Dec 1997 06:00:45 -0500 + From: Gurusamy Sarathy + Branch: win32/perl + ! sv.c +____________________________________________________________________________ +[ 382] By: gsar on 1997/12/23 21:09:32 + Log: Trivial bugfix#2 from local repository + Message-Id: <199712061025.FAA14396@aatma.engin.umich.edu> + Subject: Re: eval of sub gives spurious "uninitialised" warning + Date: Sat, 06 Dec 1997 05:25:07 -0500 + From: Gurusamy Sarathy + Branch: win32/perl + ! op.c pod/perldelta.pod pod/perlfunc.pod t/op/eval.t +____________________________________________________________________________ +[ 381] By: gsar on 1997/12/23 21:01:04 + Log: Trivial bugfix#1 from local repository + Message-Id: <199711282326.SAA15090@aatma.engin.umich.edu> + Subject: [PATCH] Re: [5.004_04 BUG] bless broke scoping? + Date: Fri, 28 Nov 1997 18:26:52 -0500 + From: Gurusamy Sarathy + Branch: win32/perl + ! scope.c +____________________________________________________________________________ +[ 380] By: gsar on 1997/12/18 15:10:23 + Log: Integrate mainline + Branch: win32/perl + +> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c + +> djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh + +> os2/os2.sym os2/os2thread.h + !> (integrate 77 files) + +---------------- +Version 5.004_56 +---------------- + +____________________________________________________________________________ +[ 379] By: mbeattie on 1997/12/18 13:28:35 + Log: Integrate ansi @364,@366 into mainline. + Branch: perl + !> lib/ExtUtils/MakeMaker.pm miniperlmain.c perl.h +____________________________________________________________________________ +[ 378] By: mbeattie on 1997/12/18 13:20:15 + Log: Add a few missing files to MANIFEST + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 377] By: mbeattie on 1997/12/18 13:00:16 + Log: Bump patchlevel to 56. + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 376] By: nick on 1997/12/18 01:32:12 + Log: Resolve against mainline + Branch: ansiperl + +> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c + +> djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh + +> os2/os2.sym os2/os2thread.h + !> (integrate 74 files) +____________________________________________________________________________ +[ 375] By: nick on 1997/12/18 01:06:15 + Log: Resolve against Win32 + Branch: ansiperl + !> Configure README.threads config_h.SH doop.c embed.h + !> ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh + !> hints/irix_6.sh op.c op.h perl.h perlvars.h pp_hot.c pp_sys.c + !> sv.c sv.h thread.h util.c +____________________________________________________________________________ +[ 374] By: mbeattie on 1997/12/17 14:44:26 + Log: Lots of VMS changes. vms/gen_shrfls.pl (which parses header files) + needs rewriting now that we use perlvars.h and foovar.h: + Subject: [PATCH] 5.004_54 under VMS (fwd) + Date: Wed, 26 Nov 1997 12:32:09 -0400 (EDT) + From: Charles Bailey + Branch: perl + ! dosish.h handy.h intrpvar.h os2/os2ish.h perl.c perl.h + ! plan9/plan9ish.h pp.c proto.h sv.c t/lib/thread.t + ! t/lib/timelocal.t t/op/nothread.t taint.c thrdvar.h toke.c + ! unixish.h vms/config.vms vms/descrip.mms vms/fndvers.com + ! vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms + ! vms/test.com vms/vms.c vms/vms_yfix.pl vms/vmsish.h +____________________________________________________________________________ +[ 373] By: mbeattie on 1997/12/17 14:10:50 + Log: Major changes to the DOS/djgpp port (including threading): + Subject: Re: dos-djgpp port not in perl 5.004_54 + Date: Fri, 21 Nov 1997 10:58:26 +0100 + From: Molnar Laszlo + Branch: perl + + README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c + + djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh + ! Configure MANIFEST Makefile.SH doio.c dosish.h + ! ext/POSIX/POSIX.xs installhtml installperl lib/AutoSplit.pm + ! lib/Cwd.pm lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/Manifest.pm lib/File/Basename.pm lib/File/Find.pm + ! lib/File/Path.pm lib/FindBin.pm lib/Pod/Html.pm + ! lib/Pod/Text.pm lib/Term/Cap.pm lib/perl5db.pl makedepend.SH + ! mg.c perl.c pod/pod2man.PL pp_hot.c t/io/fs.t t/lib/anydbm.t + ! t/lib/filehand.t t/lib/gdbm.t t/lib/io_sel.t t/lib/io_tell.t + ! t/lib/sdbm.t t/lib/thread.t t/op/magic.t t/op/stat.t + ! t/op/sysio.t t/op/taint.t utils/perldoc.PL +____________________________________________________________________________ +[ 372] By: mbeattie on 1997/12/17 13:18:34 + Log: Upgrade DB_File to 1.56: + Subject: DB_File-1.56 for _55 + Date: Tue, 16 Dec 1997 22:25:29 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + ! Configure ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + ! ext/DB_File/Makefile.PL ext/DB_File/typemap t/lib/db-btree.t +____________________________________________________________________________ +[ 371] By: mbeattie on 1997/12/17 12:02:03 + Log: Threading patches for OS/2 (missing files taken from previous patch): + Subject: Re: 5.004_55: OS/2 patches again + Date: Sat, 13 Dec 1997 18:09:15 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + + os2/os2.sym os2/os2thread.h + ! MANIFEST hints/os2.sh os2/Changes os2/Makefile.SHs + ! os2/OS2/PrfDB/PrfDB.xs os2/OS2/REXX/REXX.xs os2/os2.c + ! os2/os2ish.h perl.h +____________________________________________________________________________ +[ 370] By: mbeattie on 1997/12/17 11:01:34 + Log: Add OS2 to list for DONT_DECLARE_STD in perl.h: + Subject: Re: 5.004_55: OS/2 patches again + Date: Sat, 13 Dec 1997 18:05:55 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 369] By: mbeattie on 1997/12/17 10:59:40 + Log: Fix typo in compiler B/C.pm. + Branch: perlext + ! Compiler/B/C.pm +____________________________________________________________________________ +[ 368] By: mbeattie on 1997/12/17 10:58:35 + Log: Allow "perldoc -F filename": + Subject: 5.004_55: Patch to perldoc + Date: Thu, 11 Dec 1997 19:37:00 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! utils/perldoc.PL +____________________________________________________________________________ +[ 367] By: mbeattie on 1997/12/17 10:54:47 + Log: Fix not-reached warning for pp_threadsv. + Branch: perl + ! pp.c +____________________________________________________________________________ +[ 366] By: nick on 1997/12/14 16:06:24 + Log: Fix typo in Ilya's patch :-( + Branch: ansiperl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 365] By: nick on 1997/12/14 15:30:25 + Log: #undef new PERLVARIC macro in appropriate places + Branch: ansiperl + ! miniperlmain.c perl.h +____________________________________________________________________________ +[ 364] By: nick on 1997/12/14 15:04:36 + Log: Ilya's MakeMaker (empty makefile) patch + Branch: ansiperl + ! lib/ExtUtils/MakeMaker.pm +____________________________________________________________________________ +[ 363] By: gsar on 1997/12/13 05:57:13 + Log: Integrate mainline. Builds and passes (Borland). + Branch: win32/perl + !> Configure README.threads config_h.SH doop.c embed.h + !> ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh + !> hints/irix_6.sh op.c op.h perl.h perlvars.h pp_hot.c pp_sys.c + !> sv.c sv.h thread.h util.c +____________________________________________________________________________ +[ 362] By: nick on 1997/12/13 02:53:03 + Log: Resolve ansiperl against mainline + Branch: ansiperl + !> (integrate 92 files) +____________________________________________________________________________ +[ 361] By: mbeattie on 1997/12/12 16:20:38 + Log: pp_print and pp_prtf handling of tied file handles used EXTEND + instead of MEXTEND leading to core dumps. This fix needs + propagating back to the maintenance branch. + Branch: perl + ! pp_hot.c pp_sys.c +____________________________________________________________________________ +[ 360] By: mbeattie on 1997/12/11 15:45:56 + Log: Add missing patch to op.c that didn't come across with win32 merge. + Branch: perl + ! op.c +____________________________________________________________________________ +[ 359] By: mbeattie on 1997/12/11 11:54:41 + Log: Stop tr/// from writing to target when only counting. + Branch: perl + ! doop.c op.c op.h +____________________________________________________________________________ +[ 358] By: mbeattie on 1997/12/10 18:36:26 + Log: Fix char*/unsigned char* clashes in util.c:fbm_instr and remove + a few extraneous trailing semicolons in perlvars.h. + Branch: perl + ! perlvars.h util.c +____________________________________________________________________________ +[ 357] By: mbeattie on 1997/12/10 18:33:53 + Log: Start overhauling compiler. It was working at least minimally + right up until the final tweak of B.xs to add threadsv_names + at which point building it provokes a seg fault in perl while + doing the xsubpp :-(. + Branch: perl + ! op.h util.c + Branch: perlext + ! Compiler/B.pm Compiler/B.xs Compiler/B/Asmdata.pm + ! Compiler/B/C.pm Compiler/B/CC.pm Compiler/Makefile.PL + ! Compiler/bytecode.pl Compiler/byteperl.c Compiler/byterun.c + ! Compiler/byterun.h Compiler/cc_harness Compiler/cc_runtime.h + ! Compiler/ccop.c Compiler/ccop.h Compiler/test_harness + ! Compiler/test_harness_cc +____________________________________________________________________________ +[ 356] By: mbeattie on 1997/12/10 13:43:32 + Log: Fix perl_os_thread typedef for pthreads. Tweak SvTAINT so that + sv_setfoo functions go back to not needing dTHR. Fix Configure + to check for already-existing -thread on archname and to check + better for d_pthread_created_joinable. + Branch: perl + ! Configure perl.h sv.c sv.h thread.h +____________________________________________________________________________ +[ 355] By: mbeattie on 1997/12/10 10:53:58 + Log: Minor fix/speedup to util.c:fbm_instr: + Subject: 5.004_55: Minor regexp patch + Date: Fri, 5 Dec 1997 05:09:54 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! util.c +____________________________________________________________________________ +[ 354] By: mbeattie on 1997/12/10 10:41:25 + Log: Patches for IRIX, AIX and some generic stuff: + Subject: [PATCH] _55: Mostly AIX stuff but also IRIX and generic + Date: Sat, 29 Nov 1997 08:35:30 -0800 (PST) + From: Jarkko Hietaniemi + (checked/ignored a few rejects; tweaked wording). + Branch: perl + ! Configure README.threads config_h.SH embed.h + ! ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh + ! hints/irix_6.sh +____________________________________________________________________________ +[ 353] By: mbeattie on 1997/12/10 10:10:19 + Log: Integrate win32 back into mainline (trivial). + Branch: perl + +> embedvar.h intrpvar.h perlvars.h thrdvar.h win32/config.gc + +> win32/config_H.gc + !> (integrate 36 files) +____________________________________________________________________________ +[ 352] By: nick on 1997/12/09 17:36:45 + Log: Resolve win32 - Sarathy's tweak. + Branch: ansiperl + !> win32/makedef.pl +____________________________________________________________________________ +[ 351] By: gsar on 1997/12/08 06:13:04 + Log: re-add PERLVARI?C? change that somehow went missing in makedef.pl + Branch: win32/perl + ! win32/makedef.pl +____________________________________________________________________________ +[ 350] By: nick on 1997/12/05 00:56:03 + Log: Resolve ansiperl against win32 + Branch: ansiperl + - win32/makegcc.mk + !> embed.h embed.pl embedvar.h global.sym miniperlmain.c perl.h + !> perlvars.h win32/Makefile win32/config.gc win32/makedef.pl + !> win32/makefile.mk win32/perllib.c win32/win32.h +____________________________________________________________________________ +[ 349] By: gsar on 1997/12/02 07:28:23 + Log: Revert to keeping (some) constant strings as globals + Branch: win32/perl + ! embed.h embed.pl embedvar.h global.sym miniperlmain.c perl.h + ! perlvars.h win32/makedef.pl win32/perllib.c +____________________________________________________________________________ +[ 348] By: gsar on 1997/12/02 05:38:06 + Log: makegcc.mk merged into makefile.mk, so makegcc.mk is gone. + Other minor fixes. Now is a good time to get the changes in win32 branch. + Branch: win32/perl + - win32/makegcc.mk + ! win32/Makefile win32/config.gc win32/makefile.mk win32/win32.h +____________________________________________________________________________ +[ 347] By: gsar on 1997/12/02 03:32:55 + Log: Integrate winansi again. Result builds and passes all tests on all + three compilers. + Branch: win32/perl + !> lib/ExtUtils/MM_Win32.pm win32/config.gc win32/makefile.mk + !> win32/makegcc.mk win32/win32.h +____________________________________________________________________________ +[ 346] By: gsar on 1997/12/02 03:28:23 + Log: various hacks to get mingw32 to build. Sync Makefile with makefile.mk. + makegcc.mk to be merged into makefile.mk soon. + Branch: win32/perl + ! lib/ExtUtils/MM_Win32.pm win32/Makefile win32/config.gc + ! win32/makedef.pl win32/makefile.mk win32/makegcc.mk + ! win32/win32.h +____________________________________________________________________________ +[ 345] By: nick on 1997/12/02 01:57:17 + Log: Add a 4th step (yes FOUR) to dll build process for gcc. + Now runs again... + Branch: ansiperl + ! lib/ExtUtils/MM_Win32.pm +____________________________________________________________________________ +[ 344] By: nick on 1997/12/02 01:11:16 + Log: Sarathy's patch + Branch: ansiperl + ! lib/ExtUtils/MM_Win32.pm win32/config.gc win32/makefile.mk + ! win32/makegcc.mk win32/win32.h +____________________________________________________________________________ +[ 343] By: gsar on 1997/12/01 04:37:06 + Log: Reverse integrate to get all of Nick's changes over at winansi (win32/perl/* + is identical to ansiperl/* now) + Branch: win32/perl + +> embedvar.h intrpvar.h perlvars.h thrdvar.h + !> (integrate 34 files) +____________________________________________________________________________ +[ 342] By: nick on 1997/12/01 04:01:57 + Log: Builds and passes all tests with gcc on Win32 - phew! + Branch: ansiperl + ! embed.h embedvar.h ext/Opcode/Opcode.xs global.sym perl.h + ! proto.h util.c win32/makedef.pl +____________________________________________________________________________ +[ 341] By: nick on 1997/12/01 02:54:29 + Log: Create a struct for all perls globals (as an option) + Mainly for Mingw32 which cannot import data. + Now only Opcode tests fail (op_desc/op_name not + handled yet stuff) + Branch: ansiperl + ! EXTERN.h embed.h embed.pl embedvar.h ext/Thread/Thread.xs + ! global.sym miniperlmain.c perl.c perl.h perlvars.h pp_hot.c + ! proto.h run.c util.c win32/Makefile win32/makedef.pl + ! win32/makegcc.mk win32/perllib.c win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32thread.c +____________________________________________________________________________ +[ 340] By: nick on 1997/11/30 20:21:10 + Log: Fixup exports in non -DDEBUGGING case + Branch: ansiperl + ! win32/makedef.pl +____________________________________________________________________________ +[ 339] By: nick on 1997/11/30 20:10:04 + Log: Disable hard-coded -DDEBUGGING + Branch: ansiperl + ! win32/config_h.PL +____________________________________________________________________________ +[ 338] By: nick on 1997/11/30 20:00:19 + Log: embed.pl now reads *var*.h to do its stuff. + Split generated embed.h into two - new embedvar.h + is #included when 'op' etc. will not mess up proto.h etc. + Removed #define foo (thr->Tfoo) from thread.h + Added some 'missing' symbols to global.sym, removed + those in the *var*.h files + Has build all MULTIPLICITY/USE_THREADS options on win32 + with VC++ (and passed tests), but not with exactly this set + of files. + Branch: ansiperl + + embedvar.h + ! embed.h embed.pl global.sym interp.sym intrpvar.h perl.h + ! perlvars.h regcomp.c thrdvar.h thread.h win32/Makefile + ! win32/makedef.pl +____________________________________________________________________________ +[ 337] By: nick on 1997/11/29 23:55:31 + Log: Globals and structs via macros - part 1 of N + - introduce perlvars.h intrpvar.h and thrdvar.h + - change perl.h and thread.h to include them with + appropriate macros defined + - result is status-quo but with macros + - next step is to tweak embed.* to capitalize on + new easy-to-find info. + Branch: ansiperl + + intrpvar.h perlvars.h thrdvar.h + ! perl.h thread.h win32/Makefile +____________________________________________________________________________ +[ 336] By: nick on 1997/11/29 19:13:55 + Log: VC++ default to threaded + Branch: ansiperl + ! win32/Makefile +____________________________________________________________________________ +[ 335] By: nick on 1997/11/29 18:38:26 + Log: Avoid __declspec(thread) by default, for both scratch + return areas and THR stuff. Use struct thread intern instead. + Branch: ansiperl + ! win32/win32.c win32/win32.h win32/win32sck.c + ! win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 334] By: nick on 1997/11/29 17:49:04 + Log: Non-threaded build fix + Branch: ansiperl + ! win32/win32thread.c +____________________________________________________________________________ +[ 333] By: nick on 1997/11/29 17:29:07 + Log: Sort out malloc_mutex for perl's malloc + Remove BINCOMPAT3 from embed.pl + Add dependancy to CORE_H for PERL95_OBJ + Branch: ansiperl + ! dosish.h embed.h embed.pl global.sym perl.h win32/Makefile + ! win32/win32.c +____________________________________________________________________________ +[ 332] By: nick on 1997/11/29 16:21:01 + Log: Integrate win32 into ansiperl + Branch: ansiperl + !> README.threads hints/irix_6.sh lib/Test/Harness.pm + !> lib/perl5db.pl malloc.c miniperlmain.c perl.h sv.c t/TEST + !> t/lib/anydbm.t t/lib/db-btree.t t/lib/db-hash.t + !> t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t + !> t/lib/safe2.t t/lib/sdbm.t t/op/pat.t t/op/taint.t + !> win32/perllib.c +____________________________________________________________________________ +[ 331] By: nick on 1997/11/29 01:35:45 + Log: GCC + Threads on Win32 - best gcc results yet + Branch: ansiperl + ! XSUB.h perl.h thread.h win32/makedef.pl win32/makegcc.mk + ! win32/win32.h win32/win32iop.h win32/win32thread.c + ! win32/win32thread.h +____________________________________________________________________________ +[ 330] By: nick on 1997/11/28 23:05:08 + Log: Un-botch gcc workround + Branch: ansiperl + ! XSUB.h +____________________________________________________________________________ +[ 329] By: nick on 1997/11/28 22:39:39 + Log: Builds completely with Mingw32, dynamic loaded extensions + don't work yet - suspect __declspec() non-implemented issues. + Branch: ansiperl + ! XSUB.h lib/ExtUtils/Command.pm lib/ExtUtils/MM_Win32.pm + ! lib/ExtUtils/Mksymlists.pm win32/config.gc win32/makegcc.mk + ! win32/runperl.c win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 328] By: gsar on 1997/11/28 05:48:15 + Log: integrate winansi. + Branch: win32/perl + +> win32/config.gc win32/config_H.gc win32/makegcc.mk + ! perl.h + !> dosish.h hv.c win32/dl_win32.xs win32/include/sys/socket.h + !> win32/makedef.pl win32/makefile.mk win32/runperl.c + !> win32/win32.c win32/win32.h win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 327] By: gsar on 1997/11/28 05:38:48 + Log: Integrate mainline. + Branch: win32/perl + !> README.threads hints/irix_6.sh lib/Test/Harness.pm + !> lib/perl5db.pl malloc.c miniperlmain.c sv.c t/TEST + !> t/lib/anydbm.t t/lib/db-btree.t t/lib/db-hash.t + !> t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t + !> t/lib/safe2.t t/lib/sdbm.t t/op/pat.t t/op/taint.t + !> win32/perllib.c +____________________________________________________________________________ +[ 326] By: nick on 1997/11/27 19:13:36 + Log: GCC builds perl.dll and perl.exe on Win32 + Branch: ansiperl + ! win32/makedef.pl win32/makegcc.mk +____________________________________________________________________________ +[ 325] By: nick on 1997/11/27 17:46:30 + Log: Add files and tweak others to get 'native' Mingw32 gcc port as + far as building miniperl and perl.dll (but not import lib yet) + Seems to lack popen()/pclose() and fcloseall() and fflushall(). + Also only CRTDLL not MCRTDLL so threading is probably not + possible yet. + Had to mess with win32iop.h's placement as we need __attribute__ + to get STDCALL, and #define of printf messes up proto.h + Branch: ansiperl + + win32/config.gc win32/config_H.gc win32/makegcc.mk + ! dosish.h perl.h win32/dl_win32.xs win32/include/sys/socket.h + ! win32/makefile.mk win32/runperl.c win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 324] By: mbeattie on 1997/11/27 17:08:06 + Log: Give dire warnings about the IRIX 6.2 kernel panic. + Branch: perl + ! README.threads hints/irix_6.sh +____________________________________________________________________________ +[ 323] By: mbeattie on 1997/11/27 16:57:33 + Log: Fix prototypes of sv_vsetpvfn and sv_vcatpvfn: + Subject: Re: ANNOUNCE: perl 5.004_55 is available + Date: 27 Nov 1997 17:18:53 +0100 + From: koenig@kulturbox.de (Andreas J. Koenig) + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 322] By: mbeattie on 1997/11/27 16:12:15 + Log: Integrate win32 branch back into mainline. + Branch: perl + !> (integrate 42 files) +____________________________________________________________________________ +[ 321] By: mbeattie on 1997/11/27 15:06:36 + Log: Fix t/lib/safe2.t for SunOS 4.1.3: + Subject: Re: ANNOUNCE: perl 5.004_55 is available + Date: Thu, 27 Nov 1997 10:46:42 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + ! t/lib/safe2.t +____________________________________________________________________________ +[ 320] By: mbeattie on 1997/11/27 15:02:59 + Log: Fix MYMALLOC (wrong #define in malloc.c): + Subject: 5.004_55: MYMALLOC completely busted + Date: Thu, 27 Nov 1997 01:08:16 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! malloc.c +____________________________________________________________________________ +[ 319] By: mbeattie on 1997/11/27 15:01:37 + Log: Fix newSVrv so sv_setref_foo work better: + Subject: [PATCH] [5.004_55] newSVrv (again) + Date: Thu, 27 Nov 1997 00:25:50 -0500 + From: Owen Taylor + Branch: perl + ! sv.c +____________________________________________________________________________ +[ 318] By: mbeattie on 1997/11/27 14:59:03 + Log: Output skipped test information in test suite: + Subject: 5.004_55: Making test harness platform_aware + Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST) + Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST) + Branch: perl + ! lib/Test/Harness.pm t/TEST t/lib/anydbm.t t/lib/db-btree.t + ! t/lib/db-hash.t t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t + ! t/lib/odbm.t t/lib/sdbm.t t/op/taint.t +____________________________________________________________________________ +[ 317] By: mbeattie on 1997/11/27 14:55:15 + Log: Add 'W'atch command to debugger and improve help: + Subject: 5.004_55: Debugger patch again + Date: Wed, 26 Nov 1997 17:05:57 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! lib/perl5db.pl +____________________________________________________________________________ +[ 316] By: mbeattie on 1997/11/27 14:52:44 + Log: Stop double initialisation of malloc_mutex: + Subject: 5.004_55: Double initialiazation of malloc_mutex + Date: Wed, 26 Nov 1997 16:51:43 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! miniperlmain.c win32/perllib.c +____________________________________________________________________________ +[ 315] By: mbeattie on 1997/11/27 14:48:58 + Log: Fix PVLV case in sv_setsv (plus tests in op/pat.t). + Branch: perl + ! sv.c t/op/pat.t +____________________________________________________________________________ +[ 314] By: nick on 1997/11/27 01:03:19 + Log: Merge win32 and ansiperl branches post _55 tweaks from Sarathy. + Branch: ansiperl + !> (integrate 897 files) +____________________________________________________________________________ +[ 313] By: gsar on 1997/11/26 03:20:55 + Log: merge win32-aware installperl in ansiperl branch. + Branch: win32/perl + !> installperl +____________________________________________________________________________ +[ 312] By: gsar on 1997/11/26 01:50:37 + Log: Fix for C bug: + From: Gurusamy Sarathy + Message-Id: <199711011946.OAA18882@aatma.engin.umich.edu> + Subject: [PATCH] Re: Sort grammar bug + Date: Sat, 01 Nov 1997 14:46:35 -0500 + ------ + From: Hugo van der Sanden + Message-Id: <199711021247.MAA01743@crypt.compulink.co.uk> + Subject: Re: Sort grammar bug + Date: Sun, 02 Nov 1997 12:47:51 +0000 + Branch: win32/perl + ! t/op/sort.t toke.c +____________________________________________________________________________ +[ 311] By: nick on 1997/11/26 01:42:50 + Log: Win32-ize installperl + Branch: ansiperl + ! installperl +____________________________________________________________________________ +[ 310] By: gsar on 1997/11/26 01:36:39 + Log: Another trivial patch: + From: Gurusamy Sarathy + Message-Id: <199710300245.VAA04244@aatma.engin.umich.edu> + Subject: [PATCH] Re: Why doesn't XSRETURN have STMT_START/STMT_END brackets? + Date: Wed, 29 Oct 1997 21:45:26 -0500 + Branch: win32/perl + ! XSUB.h +____________________________________________________________________________ +[ 309] By: nick on 1997/11/26 01:33:32 + Log: Fixup _55 for Win32: + Missed thread :-> perl_thread changes + Two #define THR (not the same) + K&R style func in hv.c + Branch: ansiperl + ! hv.c win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 308] By: gsar on 1997/11/26 01:30:21 + Log: Sync yet another patch (this one manually edited): + From: Gurusamy Sarathy + Message-Id: <199710290251.VAA14362@aatma.engin.umich.edu> + Subject: [PATCH] Re: local($@) gives core dump + Date: Tue, 28 Oct 1997 21:51:25 -0500 + Branch: win32/perl + ! pp_ctl.c +____________________________________________________________________________ +[ 307] By: gsar on 1997/11/26 01:22:10 + Log: Sync another change from local repository. + From: Gurusamy Sarathy + Message-Id: <199710290316.WAA15888@aatma.engin.umich.edu> + Subject: Re: do_postponed breaks with multiple interpreters + Date: Tue, 28 Oct 1997 22:16:13 -0500 + Branch: win32/perl + ! op.c +____________________________________________________________________________ +[ 306] By: gsar on 1997/11/26 01:17:46 + Log: Sync a change from local repository. + From: Gurusamy Sarathy + Message-Id: <199710290106.UAA11485@aatma.engin.umich.edu> + Subject: [PATCH] Re: Core dump from using sockets w/ system or open(pipe) or "`" + Date: Tue, 28 Oct 1997 20:06:06 -0500 + Branch: win32/perl + ! mg.c +____________________________________________________________________________ +[ 305] By: nick on 1997/11/26 00:50:10 + Log: Integrate mainline as of _55 + Branch: ansiperl + +> emacs/ptags + !> (integrate 36 files) +____________________________________________________________________________ +[ 304] By: gsar on 1997/11/26 00:27:57 + Log: Various changes to make it build cleanly and pass all tests: + - needed to run `perl embed.pl` + - use PERL_CORE instead of PERLDLL in places that do mean PERL_CORE + - fix prototypes for a few declarations (Borland is finally quiet) + - move declaration of Mymalloc etc to perl.h (since win32 and other + ports may #define malloc themselves, to let extensions bind to + the version that perl used) + - move struct reg_data into a public header file, since it is + referenced in a public datatype + - win32 makefile fixes + - fix remaining s/thread/perl_thread/ + Branch: win32/perl + ! EXTERN.h embed.h ext/DynaLoader/dlutils.c + ! ext/SDBM_File/sdbm/sdbm.h hv.c perl.h proto.h regcomp.h + ! regexp.h win32/Makefile win32/dl_win32.xs win32/makefile.mk + ! win32/win32.h win32/win32iop.h win32/win32thread.c +____________________________________________________________________________ +[ 303] By: gsar on 1997/11/25 20:57:31 + Log: Fixup the places where the automatic merge got it wrong. + Previous change (#302) was just a normal integration--ignore the + "reverse" in there. + Branch: win32/perl + ! op.c perl.h +____________________________________________________________________________ +[ 302] By: gsar on 1997/11/25 20:32:12 + Log: reverse integrate mainline + Branch: win32/perl + +> emacs/ptags + !> (integrate 896 files) + +---------------- +Version 5.004_55 +---------------- + +____________________________________________________________________________ +[ 301] By: mbeattie on 1997/11/25 17:59:53 + Log: Fix minor thinkos in hv.c and pp_ctl.c. This is 5.004_55. + Branch: perl + ! hv.c pp_ctl.c +____________________________________________________________________________ +[ 300] By: mbeattie on 1997/11/25 16:29:36 + Log: Add t/avhv.t to MANIFEST and bump patchlevel.h to 55. + Branch: perl + ! MANIFEST patchlevel.h +____________________________________________________________________________ +[ 299] By: mbeattie on 1997/11/25 15:59:16 + Log: Move malloc_mutex initialisation/destruction: + Subject: patch to 5.004_54 for pthreads with Perl's malloc + From: ilya@math.ohio-state.edu (Ilya Zakharevich) + Branch: perl + ! malloc.c os2/os2.c os2/os2ish.h perl.c perl.h plan9/plan9ish.h + ! unixish.h vms/vmsish.h +____________________________________________________________________________ +[ 298] By: mbeattie on 1997/11/25 15:49:22 + Log: Make hv_ functions cope better with 'm'-magic: + Subject: [5.004_54] Another neglected patch + Date: Fri, 21 Nov 1997 22:28:17 -0500 + From: Owen Taylor + Branch: perl + ! hv.c +____________________________________________________________________________ +[ 297] By: mbeattie on 1997/11/25 15:47:36 + Log: Fix typo in Thread.xs. + Branch: perl + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 296] By: mbeattie on 1997/11/25 15:42:07 + Log: Integrate from ansi branch to mainline. + Branch: perl + !> (integrate 890 files) +____________________________________________________________________________ +[ 295] By: mbeattie on 1997/11/25 14:29:31 + Log: AIX patch for DynaLoader/dl_aix.xs and hints/aix.sh: + Subject: Re: _54 on AIX + Date: Tue, 25 Nov 1997 00:49:52 -0800 (PST) + From: Jarkko Hietaniemi + Branch: perl + ! ext/DynaLoader/dl_aix.xs +____________________________________________________________________________ +[ 294] By: mbeattie on 1997/11/25 14:29:10 + Log: AIX patch for hints/aix.sh: + Subject: Re: _54 on AIX + Date: Tue, 25 Nov 1997 00:49:52 -0800 (PST) + From: Jarkko Hietaniemi + Branch: perl + ! hints/aix.sh +____________________________________________________________________________ +[ 291] By: mbeattie on 1997/11/25 14:17:05 + Log: Fix scalar dereference of threadsv variables (e.g. $$_). + Branch: perl + ! op.c op.h +____________________________________________________________________________ +[ 290] By: mbeattie on 1997/11/25 14:16:29 + Log: AIX patch (including Configure support for {sched,pthread}_yield, + pthread initial detach state, renaming perl_thread to perl_os_thread + and struct thread to struct perl_thread): + Subject: Re: _54 on AIX + Date: Thu, 20 Nov 1997 06:10:51 -0800 (PST) + From: Jarkko Hietaniemi + Branch: perl + ! Configure config_h.SH cv.h ext/DB_File/DB_File.xs + ! ext/Thread/Makefile.PL ext/Thread/Thread.pm + ! ext/Thread/Thread.xs fakethr.h hints/aix.sh perl.c perl.h pp.h + ! proto.h sv.h thread.h util.c win32/win32thread.c + ! win32/win32thread.h +____________________________________________________________________________ +[ 289] By: mbeattie on 1997/11/25 12:33:02 + Log: Rename perl_thread to perl_os_thread. + Branch: perl + ! fakethr.h thread.h util.c win32/win32thread.h +____________________________________________________________________________ +[ 288] By: mbeattie on 1997/11/25 12:27:35 + Log: Remove bincompat3 support: + Subject: Re: ANNOUNCE: perl5.004_54 is available + Date: Wed, 19 Nov 1997 08:07:10 -0800 (PST) + From: Jarkko Hietaniemi + Branch: perl + ! Configure INSTALL embed.h global.sym malloc.c +____________________________________________________________________________ +[ 287] By: mbeattie on 1997/11/25 12:23:50 + Log: Emacs/tags update: + Subject: Emacs/tags update for 5.004_54 + Date: Fri, 21 Nov 1997 15:02:09 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + + emacs/ptags + ! MANIFEST Makefile.SH emacs/cperl-mode.el +____________________________________________________________________________ +[ 286] By: nick on 1997/11/23 23:03:56 + Log: Add $$_ test + Branch: ansiperl + ! t/op/ref.t +____________________________________________________________________________ +[ 285] By: gsar on 1997/11/23 08:26:00 + Log: Initial reverse integration of winansi branch. + Branch: win32/perl + !> (integrate 50 files) +____________________________________________________________________________ +[ 284] By: gsar on 1997/11/23 07:32:24 + Log: Add to docs about the BEGIN { shift } feature. Make the change + yet simpler using CvUNIQUE(compcv) instead of subline (Chip's idea). + Branch: win32/perl + ! op.c perly.c perly.y pod/perlfunc.pod vms/perly_c.vms +____________________________________________________________________________ +[ 283] By: nick on 1997/11/22 21:29:30 + Log: Duplicate perl_threadsv + Branch: ansiperl + ! global.sym +____________________________________________________________________________ +[ 282] By: nick on 1997/11/22 21:18:11 + Log: Munge pseudo-Configure stuff to add -thread to archname as + Malcolm seems to think that is way to test for threads. + Update @INC stuffing hackery to have traditional @INC + search order archlib, privlib, sitearch, site. + Branch: ansiperl + ! t/lib/english.t win32/config.bc win32/config_H.bc + ! win32/config_H.vc win32/config_h.PL win32/config_sh.PL + ! win32/makefile.mk win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 281] By: nick on 1997/11/22 19:28:21 + Log: Builds and passes all but english.t on win32 VC++ + Branch: ansiperl + ! global.sym pp_ctl.c win32/Makefile win32/config.vc + ! win32/config_H.vc win32/win32thread.h +____________________________________________________________________________ +[ 280] By: nick on 1997/11/22 18:10:50 + Log: ansiperl builds with Borland C++ again + Branch: ansiperl + ! pp_ctl.c regcomp.c regcomp.h regexec.c toke.c util.c + ! win32/config.bc win32/config_H.bc win32/perlglob.c + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 279] By: nick on 1997/11/22 16:42:51 + Log: Resolve ansiperl against mainline + Branch: ansiperl + !> embed.h ext/Thread/Thread.xs global.sym op.c op.h perl.c + !> perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.c scope.h + !> t/lib/english.t thread.h toke.c util.c +____________________________________________________________________________ +[ 278] By: nick on 1997/11/22 16:30:27 + Log: Resolve ansiperl against win32 + Branch: ansiperl + !> (integrate 55 files) +____________________________________________________________________________ +[ 277] By: gsar on 1997/11/22 09:48:02 + Log: - shift() inside BEGIN|END|INIT now shifts @ARGV instead of @_ + - added a test for the above + - fixed up perly.c.diff and vms/perl_c.vms for above and added the + ansification hunks + Branch: win32/perl + ! op.c perly.c perly.c.diff perly.y t/op/misc.t vms/perly_c.vms +____________________________________________________________________________ +[ 276] By: gsar on 1997/11/22 07:24:01 + Log: Generic change in win32 branch: don't just turn on CRIPPLED_CC + when USE_THREADS. GCC for instance, can do without macros that use + globals. Instead, selectively re#define only those macros + that use globals to their functional equivalents. Tests 100% on + Solaris/gcc (after `chmod +x t/op/nothread.t t/lib/thread.t` (hint,hint)). + Branch: win32/perl + ! perl.h sv.h +____________________________________________________________________________ +[ 275] By: gsar on 1997/11/22 05:27:04 + Log: Integrate mainline. + Branch: win32/perl + +> ext/Thread/die.t ext/Thread/die2.t t/op/avhv.t + - lib/Class/Fields.pm lib/ISA.pm + !> (integrate 41 files) +____________________________________________________________________________ +[ 274] By: mbeattie on 1997/11/21 18:28:22 + Log: $_ is now per-thread (rather a lot of changes). Only tested under + *-linux-thread at the moment. + Branch: perl + ! embed.h ext/Thread/Thread.xs global.sym op.c op.h perl.c + ! perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.c scope.h + ! t/lib/english.t thread.h toke.c util.c +____________________________________________________________________________ +[ 273] By: mbeattie on 1997/11/21 10:31:29 + Log: Filter patch to toke.c: + Subject: Tiny core patch for source filters + Date: Thu, 20 Nov 1997 23:12:09 +0000 (GMT) + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Branch: perl + ! toke.c +____________________________________________________________________________ +[ 272] By: nick on 1997/11/21 00:54:43 + Log: Basic integrate of lastest perl into ansiperl + Branch: ansiperl + +> ext/Thread/die.t ext/Thread/die2.t t/op/avhv.t + - lib/Class/Fields.pm lib/ISA.pm + ! win32/win32.c win32/win32.h + !> (integrate 57 files) +____________________________________________________________________________ +[ 271] By: mbeattie on 1997/11/20 12:12:00 + Log: Initial stab at IRIX configuration support for threading. Manually + applied parts of following patches: + Subject: Perl 5.004_54 on IRIX + Date: Wed, 19 Nov 1997 18:37:14 +0200 (EET) + From: Jarkko Hietaniemi + Subject: Re: Perl 5.004_54 on IRIX + Date: 19 Nov 1997 17:10:17 -0800 + From: Scott Henry + Branch: perl + ! README.threads hints/irix_6.sh hints/irix_6_0.sh + ! hints/irix_6_1.sh perl.h +____________________________________________________________________________ +[ 270] By: mbeattie on 1997/11/19 17:45:37 + Log: The new jumbo regexp stuff did SSPUSHINT on a char* instead of + SSPUSHPTR causing Alpha to core dump in pat.t. While fixing it, + also fixed two instances of referring to SVs after destruction. + Branch: perl + ! regcomp.c regexec.c +____________________________________________________________________________ +[ 269] By: mbeattie on 1997/11/19 15:33:23 + Log: avhv_keys under Digital UNIX made avhv.t fail because *keysp was + changed by mg_get(*keysp) (!). Introducing a new local variable + fixed it but I don't know if it's a compiler problem or some + other corruption happening elsewhere. + Branch: perl + ! av.c +____________________________________________________________________________ +[ 268] By: mbeattie on 1997/11/19 11:39:49 + Log: Let Configure sort out get{host,net}byaddr* prototypes: + Subject: [PATCH] 5.004_54: little something for + get{hos,ne}tbyaddr protos (Configure, config_h.SH, pp_sys.c) + Date: Tue, 18 Nov 1997 19:08:19 +0200 (EET) + From: Jarkko Hietaniemi + Branch: perl + ! Configure config_h.SH pp_sys.c +____________________________________________________________________________ +[ 267] By: mbeattie on 1997/11/19 11:04:15 + Log: Jumbo regexp patch applied (with minor fix-up tweaks): + Subject: Version 7 of Jumbo RE patch available + Date: Sun, 16 Nov 1997 00:29:39 -0500 (EST) + From: Ilya Zakharevich + Branch: perl + ! MANIFEST dump.c embed.h global.sym mg.c op.c op.h perl.c + ! perl.h pod/perlre.pod pp.c pp_ctl.c pp_hot.c proto.h regcomp.c + ! regcomp.h regexec.c regexp.h sv.c t/op/misc.t t/op/pat.t + ! t/op/re_tests t/op/regexp.t t/op/split.t t/op/subst.t toke.c + ! util.c +____________________________________________________________________________ +[ 266] By: mbeattie on 1997/11/18 17:26:09 + Log: Separate avhv_foo() key handling into avhv_keys(). Slightly tweaked + version of patch: + Subject: tie fake hash patch for 5.004_54 + Date: Sat, 15 Nov 1997 19:18:30 -0500 + From: Joshua Pritikin + Branch: perl + + t/op/avhv.t + ! av.c embed.h global.sym proto.h +____________________________________________________________________________ +[ 265] By: mbeattie on 1997/11/18 16:51:04 + Log: Bring MANIFEST up to date. Add new thread tests. + Branch: perl + + ext/Thread/die.t ext/Thread/die2.t + ! MANIFEST +____________________________________________________________________________ +[ 264] By: mbeattie on 1997/11/18 16:41:27 + Log: magic_setisa enhanced to update %FIELDS automatically when @ISA + is assigned to. Added tests to t/op/array.t. magic_setisa now + warns about including non-existent packages in @ISA when -w is on. + Branch: perl + - lib/Class/Fields.pm lib/ISA.pm + ! mg.c t/op/array.t +____________________________________________________________________________ +[ 263] By: mbeattie on 1997/11/18 16:38:57 + Log: Fix typo in win32 -> mainline integration. + Branch: perl + ! perl.h +____________________________________________________________________________ +[ 262] By: mbeattie on 1997/11/18 11:56:09 + Log: Integrate win32 branch back into mainline. + Branch: perl + - win32/win32io.c win32/win32io.h + ! op.c + !> (integrate 30 files) +____________________________________________________________________________ +[ 261] By: gsar on 1997/11/18 00:14:02 + Log: Export our own FD_SET() et al to complete sockets-as-handles pretense. + Branch: win32/perl + ! win32/config.bc win32/config.vc win32/config_H.bc + ! win32/config_H.vc win32/include/sys/socket.h win32/win32sck.c +____________________________________________________________________________ +[ 260] By: nick on 1997/11/16 23:16:16 + Log: Generic file changes for MYMALLOC + Branch: ansiperl + ! miniperlmain.c perl.c +____________________________________________________________________________ +[ 259] By: nick on 1997/11/16 23:14:36 + Log: MYMALLOC for Win32: + 1. Initialize malloc_mutex before it is used (all platforms!) + 2. Adjust #ifdef muddle to allow MYMALLOC and win32_ to coexist + 3. Tweak win32/config*.* to define MYMALLOC + 4. Provide sbrk() in terms of VirtualAlloc(). + + Also fixup -MT (perl95) build to handle Perl_current_thread + via call to DLL (as though an extension). + Branch: ansiperl + ! win32/Makefile win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/makedef.pl + ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32thread.h +____________________________________________________________________________ +[ 258] By: nick on 1997/11/15 20:42:28 + Log: Implement dTHR via __declspec(thread) - part 2 + Branch: ansiperl + ! win32/makedef.pl win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 257] By: nick on 1997/11/15 19:52:53 + Log: Use __declspec(thread) var rather tha TslAlloc & co. + Branch: ansiperl + ! win32/makedef.pl win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 256] By: gsar on 1997/11/15 02:58:09 + Log: Add #include guard in Thread.xs so it will build even under + no USE_THREADS (for win32). This was missed because of edit + w/o checkout perforce kludge. + Branch: win32/perl + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 255] By: nick on 1997/11/15 00:33:46 + Log: Integrate mainline (5.004_54?) into ansiperl + Branch: ansiperl + !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs + !> ext/Thread/Thread/Specific.pm ext/Thread/join.t + !> ext/Thread/specific.t global.sym lib/fields.pm mg.c op.c + !> perl.c perl.h pp_ctl.c pp_hot.c pp_sys.c proto.h scope.c + !> t/io/pipe.t t/lib/io_pipe.t t/op/magic.t thread.h +____________________________________________________________________________ +[ 254] By: nick on 1997/11/15 00:25:26 + Log: Interate win32 into ansiperl + Branch: ansiperl + +> ext/Thread/Thread/Specific.pm ext/Thread/specific.t + +> lib/fields.pm + !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs + !> ext/Thread/join.t global.sym mg.c op.c perl.c perl.h pp_ctl.c + !> pp_hot.c pp_sys.c proto.h scope.c t/io/pipe.t t/lib/io_pipe.t + !> t/op/magic.t thread.h win32/Makefile win32/config.bc + !> win32/config.vc win32/config_sh.PL win32/makefile.mk +____________________________________________________________________________ +[ 253] By: gsar on 1997/11/14 22:04:58 + Log: Integrate mainline changes into win32 branch. Now would be a good time + to reverse integrate the win32 branch into mainline. + Branch: win32/perl + +> ext/Thread/Thread/Specific.pm ext/Thread/specific.t + +> lib/fields.pm + !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs + !> ext/Thread/join.t global.sym mg.c op.c perl.c perl.h pp_ctl.c + !> pp_hot.c pp_sys.c proto.h scope.c t/io/pipe.t t/lib/io_pipe.t + !> t/op/magic.t thread.h + +---------------- +Version 5.004_54 +---------------- + +____________________________________________________________________________ +[ 252] By: mbeattie on 1997/11/14 15:07:19 + Log: Two more delays added to test suite to help *-solaris-thread. + Branch: perl + ! t/io/pipe.t t/lib/io_pipe.t +____________________________________________________________________________ +[ 251] By: mbeattie on 1997/11/14 15:05:57 + Log: Remove stale code from Thread.xs. + Branch: perl + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 250] By: mbeattie on 1997/11/14 10:12:40 + Log: Add delay to signal handling in t/op/magic.t. (Solaris with pthreads + doesn't run handlers for self-sent signals until kill has returned.) + Branch: perl + ! t/op/magic.t +____________________________________________________________________________ +[ 249] By: gsar on 1997/11/14 05:14:44 + Log: Fix various details in win32 makefiles and Config.pm setup. + - ldflags is set for both compilers now + - extensions list is now correct + - delete perl95.exe on distclean + - cf_time now gets updated (once) + - ccdlflags is set for Borland + - fix startperl so dprofpp works + Branch: win32/perl + ! win32/Makefile win32/config.bc win32/config.vc + ! win32/config_sh.PL win32/makefile.mk +____________________________________________________________________________ +[ 248] By: mbeattie on 1997/11/13 18:01:27 + Log: Rewrite thread return code to distinguish between ordinary return + and die() and make join propagate the die. Add tiny method eval + which just does "return eval { shift->join; }". Add Thread::Specific + class for access to thread specific user data along with specific.t. + Rename Class to classname throughout Thread.xs for consistency. + Fix pp_specific to pp_threadsv in global.sym. Add support to + pp_entersub in pp_hot.c to lock stash for static locked methods. + Branch: perl + + ext/Thread/Thread/Specific.pm ext/Thread/specific.t + + lib/fields.pm + ! MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs + ! ext/Thread/join.t global.sym mg.c pp_hot.c thread.h +____________________________________________________________________________ +[ 247] By: mbeattie on 1997/11/13 14:13:30 + Log: Change CONTEXT to PERL_CONTEXT throughout source (since the #define + to avoid the Digital UNIX clash no longer works). Changed the #ifdef + in pp_sys.c for whether getnet* function get protoyped (since the + default had a broken prototype for getnetbyaddr). + Branch: perl + ! mg.c op.c perl.c perl.h pp_ctl.c pp_hot.c pp_sys.c proto.h + ! scope.c thread.h +____________________________________________________________________________ +[ 246] By: nick on 1997/11/13 02:44:40 + Log: Integrate Win32 branch + Branch: ansiperl + - configure ext/util/extliblist win32/bin/pl2bat.bat + - win32/bin/search.bat win32/bin/test.bat win32/bin/webget.bat + - win32/config.H win32/config.w32 win32/win32io.c + - win32/win32io.h + !> (integrate 905 files) +____________________________________________________________________________ +[ 245] By: nick on 1997/11/13 00:47:54 + Log: Integrate (-ay) win32 branch at its creation to + establish and ancestor as per perkforce technote #9 + Branch: ansiperl + +> configure ext/util/extliblist win32/bin/pl2bat.bat + +> win32/bin/search.bat win32/bin/test.bat win32/bin/webget.bat + +> win32/config.H win32/config.w32 + !> (integrate 859 files) +____________________________________________________________________________ +[ 244] By: gsar on 1997/11/12 22:26:39 + Log: More cleanups of win32/win32*.[ch] files. win32/win32iop.h now + contains the all the declarations and macros for the win32io layer. + New std-ish functions are exported now. All win32-specific exported + functions begin with "win32_" consistently. win32 version of + init_os_extras() is now exported, so embedders can get the in-core + xsubs. + Branch: win32/perl + ! dosish.h win32/makedef.pl win32/win32.c win32/win32.h + ! win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 243] By: gsar on 1997/11/12 07:41:52 + Log: Really delete deleted files. + Branch: win32/perl + - win32/win32io.c win32/win32io.h +____________________________________________________________________________ +[ 242] By: gsar on 1997/11/12 07:40:54 + Log: Egregious IOsubsystem code excised. Phew, what a relief! Two + files (win32/win32io.[ch]) completely removed, as are all traces + of them in makefiles and MANIFEST. RunPerl() retains the void* arg + for later. Various myfoo() things regularized to my_foo(). CPP not + required anymore to create a perl binary :) + Branch: win32/perl + ! MANIFEST win32/Makefile win32/makedef.pl win32/makefile.mk + ! win32/perllib.c win32/runperl.c win32/win32.c win32/win32.h + ! win32/win32io.c win32/win32io.h win32/win32iop.h + ! win32/win32sck.c +____________________________________________________________________________ +[ 241] By: gsar on 1997/11/12 05:31:28 + Log: Fix various win32 code blemishes: + - s/stolen/win32/g + - s/(CROAK|WARN)/lc($1)/eg + - remove deadcode from most places + Branch: win32/perl + ! win32/makedef.pl win32/win32.c win32/win32io.c + ! win32/win32iop.h +____________________________________________________________________________ +[ 240] By: gsar on 1997/11/12 04:36:29 + Log: Carry over changes in ansiperl branch. Win32 branch is now + the leading edge. + Branch: win32/perl + ! embed.h global.sym perl.c win32/win32thread.c + ! win32/win32thread.h +____________________________________________________________________________ +[ 239] By: gsar on 1997/11/12 03:39:57 + Log: Add missing win32_closesocket() and export it (extension writers' complaint). + Branch: win32/perl + ! win32/include/sys/socket.h win32/makedef.pl win32/win32sck.c +____________________________________________________________________________ +[ 238] By: gsar on 1997/11/12 03:25:17 + Log: Clean up win32/win32sck.c (runtime load of Winsock now gone, it can be + done cleaner, if really needed (perhaps only for efficiency reasons?)). + Redundant EXTERN_C definitions and related warnings fixed. + Branch: win32/perl + ! miniperlmain.c perl.h win32/perllib.c win32/win32io.c + ! win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 237] By: nick on 1997/11/12 02:45:15 + Log: Fixup Win32 + - #undef start_env before re-#defining it + - change pp_specific pp_threadsv in global.sym + - re-build embed.h + - avoid HAVE_THREAD_INTERN - we don't and empty struct + is a pain. If we did have it it would contain cached + values of things we can only get at _IN_ the thread + so new_struct_thread is wrong place to call it. + - add new macro SET_THREAD_SELF - we must (in main thread) + define in win32thread.h, support in win32thread.c, + test and call in perl.c + Branch: ansiperl + ! embed.h global.sym perl.c thread.h win32/win32thread.c + ! win32/win32thread.h +____________________________________________________________________________ +[ 236] By: nick on 1997/11/12 01:54:23 + Log: Integrate mainline after it integrated us. + Accepted 'theirs' everywhere - so two branches should + now point to same files again. + Almost all of these were what was suggested, others were + whitespace diffs. A few dubious spots which we will now + go fix. + Branch: ansiperl + !> embed.h ext/DB_File/DB_File.xs ext/GDBM_File/GDBM_File.xs + !> ext/Opcode/Opcode.pm ext/Thread/Thread.xs interp.sym mg.c op.c + !> opcode.h opcode.pl perl.c perl.h pp.c pp_ctl.c pp_sys.c t/TEST + !> t/lib/safe2.t t/lib/thread.t t/op/nothread.t thread.h toke.c + !> util.c +____________________________________________________________________________ +[ 235] By: gsar on 1997/11/12 01:22:26 + Log: Minor tweaks to add a thread_intern struct that should ultimately + contain all the win32-specific statics. + Win32 branch now passes all tests with or w/o USE_THREADS. + Branch: win32/perl + ! embed.h perl.c win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 234] By: gsar on 1997/11/11 23:08:54 + Log: Initial (untested) integration of mainline changes. + Branch: win32/perl + - configure + !> (integrate 89 files) +____________________________________________________________________________ +[ 233] By: mbeattie on 1997/11/11 18:07:30 + Log: Typo in thread.h: ADD_THREAD_INTERN should be HAVE_THREAD_INTERN + Branch: perl + ! thread.h +____________________________________________________________________________ +[ 232] By: mbeattie on 1997/11/11 17:49:12 + Log: t/TEST (reverted to @229 version) should have been included in the + previous change (231) but my way of recovering it didn't work + properly. The change 231 comments about successful tests applies + to this t/TEST (i.e. as of this change). + Branch: perl + ! t/TEST +____________________________________________________________________________ +[ 231] By: mbeattie on 1997/11/11 17:46:59 + Log: Fix up ansiperl integration. Back to passing all expected tests + with usethreads. Untested with non-threaded perl. + Branch: perl + ! embed.h ext/DB_File/DB_File.xs ext/GDBM_File/GDBM_File.xs + ! perl.c perl.h pp.c t/lib/thread.t t/op/nothread.t util.c +____________________________________________________________________________ +[ 230] By: mbeattie on 1997/11/11 16:36:22 + Log: Initial integration of ansi branch into mainline (untested). + Branch: perl + +> t/lib/thread.t t/op/nothread.t thread.sym + - configure + !> (integrate 84 files) +____________________________________________________________________________ +[ 229] By: mbeattie on 1997/11/11 15:20:43 + Log: Change name of OP_SPECIFIC to OP_THREADSV. Fixed perl_get_sv when + getting per-thread magicals. Fixed thr->errsv initialisation. + Branch: perl + ! ext/Opcode/Opcode.pm op.c opcode.h opcode.pl perl.c pp.c + ! t/lib/safe2.t toke.c +____________________________________________________________________________ +[ 228] By: mbeattie on 1997/11/11 12:48:26 + Log: Fix up $@ (ERRSV now refers to GvSV(errgv) for non-threaded perl and + thr->errsv for threaded perl). Fix pp_tie and pp_dbmopen to use + GvCV(gv) instead of gv so AUTOLOAD stuff works. All tests now pass + again for non-threaded perl. Enhanced perl_get_sv to return + per-thread magicals where necessary for threaded perl. + Branch: perl + ! embed.h ext/Thread/Thread.xs interp.sym mg.c op.c perl.c + ! perl.h pp_ctl.c pp_sys.c thread.h toke.c util.c +____________________________________________________________________________ +[ 227] By: mbeattie on 1997/11/11 11:00:02 + Log: hashlock bug. + + Jobs fixed ... + + hashlock fixed on 1997/11/11 by mbeattie@localhost + + Subject: [perl5.004_53; patch] Another hash-locking fix + Date: 23 Oct 1997 14:13:55 -0400 + From: Owen Taylor + Branch: bugs + + hashlock +____________________________________________________________________________ +[ 226] By: gsar on 1997/11/11 02:11:23 + Log: Slightly more refined lock() keyword recognition (using %INC). + Branch: win32/perl + ! toke.c +____________________________________________________________________________ +[ 225] By: gsar on 1997/11/11 00:26:09 + Log: "weak" lock keyword (hardcoded initial implementation) now works. + if not defined(&Thread::join) and defined(&__PACKAGE__::lock), 'lock' + is recognized as a sub, a regular keyword otherwise. Could be + generalized by storing a flag for every op in OP struct, and turning + the flag off when Thread.xs loads. + Branch: win32/perl + ! toke.c +____________________________________________________________________________ +[ 224] By: gsar on 1997/11/10 22:59:55 + Log: Merge a patch in preparation for "weak keywords": + From: Gurusamy Sarathy + Message-Id: <199710080618.CAA23899@aatma.engin.umich.edu> + Subject: [PATCH] global overrides for keywords + Date: Wed, 08 Oct 1997 02:18:23 -0400 + Branch: win32/perl + ! embed.h interp.sym perl.c perl.h toke.c +____________________________________________________________________________ +[ 223] By: gsar on 1997/11/10 22:41:31 + Log: Remove runlevel. It was used to count how many runops() calls + we were in the process of executing, and longjmp() to the topmost + one (if not already there). We use a null top_env->je_prev + to distinguish that now. + Branch: win32/perl + ! embed.h interp.sym perl.h pp_ctl.c run.c thread.h util.c +____________________________________________________________________________ +[ 222] By: gsar on 1997/11/10 04:47:48 + Log: Win32 branch now contains all non-ansification changes in ansiperl branch. + USE_THREADS case builds and passes all tests using both compilers. + Additional tweaks: + - fixup win32/makedef.pl to skip more symbols for non-thread build. + - sync win32/Makefile with win32/makefile.mk + >>>Non-thread build fails a lot of tests.<<< + Branch: win32/perl + + thread.sym + ! MANIFEST ext/Thread/Thread.xs perl.c perl.h pp_sys.c sv.c + ! util.c win32/Makefile win32/config.bc win32/config_H.bc + ! win32/makedef.pl win32/makefile.mk +____________________________________________________________________________ +[ 221] By: gsar on 1997/11/10 00:57:53 + Log: Initial (untested) merge of all non-ansi changes on ansiperl branch + into win32 branch. + Branch: win32/perl + + t/lib/thread.t t/op/nothread.t + ! MANIFEST embed.h ext/Opcode/Opcode.pm global.sym interp.sym + ! perl.c proto.h sv.h t/lib/english.t t/op/misc.t thread.h + ! util.c win32/Makefile win32/config.bc win32/config.vc + ! win32/config_H.bc win32/config_H.vc win32/makedef.pl + ! win32/makefile.mk win32/win32.c win32/win32.h win32/win32io.c + ! win32/win32io.h win32/win32iop.h win32/win32sck.c + ! win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 220] By: gsar on 1997/11/09 22:44:41 + Log: Integrate latest mainline into win32 branch. + Branch: win32/perl + +> win32/win32thread.c win32/win32thread.h + !> (integrate 39 files) +____________________________________________________________________________ +[ 219] By: nick on 1997/11/09 21:46:06 + Log: Conditionalize english.t, + Enhance times() for NT, + (Failed) attempt to implement alarm(), + Fixed config.h dependancy in makefile.mk + Branch: ansiperl + ! t/lib/english.t win32/config.bc win32/config_H.bc + ! win32/makefile.mk win32/win32.c +____________________________________________________________________________ +[ 218] By: nick on 1997/11/09 15:38:00 + Log: Dick Hardt's patch for build on Alpha + Branch: ansiperl + ! win32/Makefile +____________________________________________________________________________ +[ 217] By: nick on 1997/11/09 03:31:20 + Log: MakeMaker not in vofig noise fix for dmake + Branch: ansiperl + ! win32/config.bc win32/makefile.mk +____________________________________________________________________________ +[ 216] By: nick on 1997/11/09 03:15:06 + Log: Fix 'anydbm.t' - if the gv is passed 1st call to inherited + TIEHASH works, but 2nd call (after db is closed, attempt + to reopen) tries to AUTOLOAD TIEHASH rather than using + cached value. + Branch: ansiperl + ! pp_sys.c +____________________________________________________________________________ +[ 215] By: nick on 1997/11/08 16:41:24 + Log: Cleanup MakeMaker 'not in config' noise + Branch: ansiperl + ! win32/Makefile win32/config.vc +____________________________________________________________________________ +[ 214] By: nick on 1997/11/08 15:07:24 + Log: Remove 'configure' leaving configure.gnu and Configure + Win32 ignores case and keeps trying to update + repository copy of 'configure' or 'Configure' with + the other. + Branch: ansiperl + - configure + ! MANIFEST +____________________________________________________________________________ +[ 213] By: nick on 1997/11/08 15:03:39 + Log: Get threads working again on Win32 + Root cause of fail was init_thread_intern() in + new_struct_thread() (which is called in parent thread) + clobbering dTHR of parent thread. + It is doubtfull if setting 'self' in new_struct_thread() + is 'right' but left in for now. + Branch: ansiperl + ! ext/Thread/Thread.xs perl.c thread.h util.c win32/Makefile + ! win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 212] By: nick on 1997/11/08 00:34:03 + Log: Add :base_thread to :default in Opcode.pm + This allows lib/safe.t to pass when threaded. + It is unclear if 'lock' should be safe as it allows + denial of service attack, but could not figure out + how to add just 'specific' (sic) to :default + without triggering 'already tagged' warning noise. + Branch: ansiperl + ! ext/Opcode/Opcode.pm win32/makefile.mk +____________________________________________________________________________ +[ 211] By: nick on 1997/11/07 23:59:31 + Log: Merge changes as of 18:00 CST + Branch: ansiperl + !> op.c pp.c pp_sys.c thread.h util.c +____________________________________________________________________________ +[ 210] By: nick on 1997/11/07 23:52:35 + Log: Reverse integrate Malcolm's chanes into local + repository, then import result back into my view + of Malcolm's repository. + Builds and passes (most) tests with GNU C++/Solaris + and Borland C++, Win32. + Branch: ansiperl + ! doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c + ! interp.sym mg.c op.c opcode.h opcode.pl patchlevel.h perl.c + ! perl.h pp.c pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c + ! thread.h toke.c util.c win32/makefile.mk +____________________________________________________________________________ +[ 209] By: mbeattie on 1997/11/07 18:12:36 + Log: Change pp_tie and pp_dbmopen to use perl_call_sv instead of a + DIY pp_entersub (in preparation for AUTOLOAD change). dbmopen + not tested. ofslen now maps to thr->Tofslen in thread.h. Added + missing #ifdef USE_THREADS around some DEBU_L statements in die(). + Building without USE_THREADS fails quite a lot of tests. It looks + as though the move to per-thread magicals must be missing some + #ifdef USE_THREADS. + Branch: perl + ! op.c pp.c pp_sys.c thread.h util.c +____________________________________________________________________________ +[ 208] By: nick on 1997/11/07 01:37:28 + Log: Raw integrate of latest perl + Branch: ansiperl + ! t/TEST + !> README.threads Todo.5.005 embed.h ext/Opcode/Opcode.pm + !> ext/Thread/Thread.xs global.sym gv.c interp.sym op.c op.h + !> perl.c perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.h sv.h + !> thread.h toke.c util.c +____________________________________________________________________________ +[ 207] By: mbeattie on 1997/11/06 14:58:00 + Log: Update README.threads and Todo.5.005. + Branch: perl + ! README.threads Todo.5.005 +____________________________________________________________________________ +[ 206] By: mbeattie on 1997/11/06 14:37:37 + Log: Remove #ifdef DEPRECATED stuff: newXSUB, pp_entersubr, FREE_TMPS(). + Branch: perl + ! op.c pp_ctl.c proto.h scope.h +____________________________________________________________________________ +[ 205] By: mbeattie on 1997/11/06 14:31:38 + Log: Per-thread magicals now stored in their own thr->magicals and keyed + more directly. cvcache and oursv become ordinary struct thread + fields instead of #defined thr->Tfoo ones. SvREFCNT_inc now checks + for 0 again. Main thread initialisation done by new function + init_main_thread instead of (now fixed) new_struct_thread. + + Jobs fixed ... + + jmpenv fixed on 1997/11/06 by mbeattie@localhost + + Subject: [perl5.004_53; patch] eval's and threads + Date: 23 Oct 1997 23:59:19 -0400 + From: Owen Taylor + Branch: bugs + + jmpenv + Branch: perl + ! embed.h ext/Thread/Thread.xs global.sym gv.c op.c perl.c + ! pp_ctl.c pp_hot.c proto.h sv.h thread.h toke.c util.c +____________________________________________________________________________ +[ 204] By: mbeattie on 1997/11/05 17:18:18 + Log: Per-thread magicals mostly working (and localisable). Now getting + intermittent occasional "Use of uninitialized value" warnings + which may be due to some op flag black magic I've broken. + Branch: perl + ! embed.h ext/Opcode/Opcode.pm ext/Thread/Thread.xs gv.c + ! interp.sym op.c op.h perl.c perl.h pp.c thread.h toke.c util.c +____________________________________________________________________________ +[ 203] By: nick on 1997/11/05 01:04:10 + Log: Builds C++ Borland, MSVC++ (Win32) and GCC++ (Solaris) + Branch: ansiperl + ! XSUB.h doio.c doop.c embed.h ext/SDBM_File/sdbm/sdbm.h + ! ext/Thread/Thread.xs global.sym gv.c hv.c interp.sym mg.c + ! miniperlmain.c op.c op.h opcode.h opcode.pl patchlevel.h + ! perl.c perl.h pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h + ! sv.c sv.h taint.c thread.h toke.c util.c win32/Makefile + ! win32/config.vc win32/config_H.vc win32/makedef.pl + ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h + ! win32/win32io.c win32/win32io.h win32/win32iop.h + ! win32/win32sck.c win32/win32thread.h +____________________________________________________________________________ +[ 202] By: nick on 1997/11/05 00:50:27 + Log: Compile(d) at least once with threads on win32 + but did not work + Branch: ansiperl + ! embed.h perl.c thread.h +____________________________________________________________________________ +[ 201] By: nick on 1997/11/05 00:32:13 + Log: Trivial integrate + Branch: ansiperl + !> patchlevel.h +____________________________________________________________________________ +[ 200] By: mbeattie on 1997/11/04 12:06:09 + Log: Up patchlevel to 5.004_54 (I missed _53 for the last release). + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 199] By: nick on 1997/11/01 00:18:52 + Log: Integrate mainline @ 18:15 CST 31 Oct 1997 + Branch: ansiperl + !> doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c + !> interp.sym mg.c op.c opcode.h opcode.pl perl.c perl.h pp.c + !> pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c thread.h toke.c + !> util.c +____________________________________________________________________________ +[ 198] By: nick on 1997/11/01 00:08:33 + Log: win32thread.* not in MANIFEST which has muddled moving + back and forth between depots. + Branch: ansiperl + ! MANIFEST win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 197] By: nick on 1997/11/01 00:02:49 + Log: Test changes + Branch: ansiperl + + t/lib/thread.t t/op/nothread.t thread.sym + ! MANIFEST +____________________________________________________________________________ +[ 196] By: nick on 1997/10/31 23:54:01 + Log: Further ANSI changes now builds and passes (most) tests + with gcc -x c++. + Branch: ansiperl + ! INTERN.h embed.h ext/DynaLoader/dl_dlopen.xs + ! ext/Fcntl/Fcntl.xs ext/GDBM_File/GDBM_File.xs ext/IO/IO.xs + ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs + ! ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/pair.c + ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h + ! ext/SDBM_File/sdbm/util.c ext/Socket/Socket.xs + ! ext/Thread/Thread.xs ext/attrs/attrs.xs global.sym perl.h + ! perly.c sv.c t/lib/english.t t/op/misc.t thread.h util.c + ! win32/Makefile win32/makedef.pl win32/makefile.mk x2p/a2p.c + ! x2p/a2p.h x2p/a2py.c x2p/hash.c x2p/str.c x2p/util.c + ! x2p/walk.c +____________________________________________________________________________ +[ 195] By: mbeattie on 1997/10/31 18:05:31 + Log: Half way through moving per-thread magicals into per-thread fields + and the associated new OP_SPECIFIC and find_thread_magical stuff. + perl will compile but plenty of the magicals are still broken. + Branch: perl + ! doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c + ! interp.sym mg.c op.c opcode.h opcode.pl perl.c perl.h pp.c + ! pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c thread.h toke.c + ! util.c +____________________________________________________________________________ +[ 194] By: nick on 1997/10/31 01:43:49 + Log: Convert miniperl sources to ANSI C. Several passes of + GNU C's 'protoize' plus a few hand edits. + Will compile miniperl with gcc -x c++ (i.e. treat .c a C++ files) + Does not link seems gcc's C++ does not define a symbol for + const char foo[] = "...."; + i.e. with empty []. + Branch: ansiperl + ! av.c deb.c doio.c doop.c dump.c gv.c hv.c malloc.c mg.c + ! miniperlmain.c op.c perl.c perl.h perlio.c perly.y pp.c + ! pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c + ! sv.c taint.c toke.c universal.c util.c +____________________________________________________________________________ +[ 193] By: nick on 1997/10/30 03:00:01 + Log: Make the ansi branch + Branch: ansiperl + +> (branch 907 files) +____________________________________________________________________________ +[ 192] By: nick on 1997/10/30 02:48:17 + Log: Oneperl builds with THREADS/THISPTR Borland + Manualy inserted Sarathy's new COND_XXXXX from his mail. + Manual change if Tself -> self as was easier than resolve :-( + Two aTHIS's in op.c + Branch: oneperl + ! embed.h op.c thread.h thread.sym win32/makefile.mk + ! win32/win32thread.h +____________________________________________________________________________ +[ 191] By: nick on 1997/10/30 01:54:50 + Log: Raw resolve of latest sources with oneperl + Branch: oneperl + !> Todo.5.005 ext/Thread/Thread.xs fakethr.h op.c op.h opcode.h + !> opcode.pl perl.c thread.h win32/win32thread.c + !> win32/win32thread.h +____________________________________________________________________________ +[ 190] By: mbeattie on 1997/10/29 14:39:54 + Log: Remove global macro "self". Change thr->Tself to thr->self. + Branch: perl + ! ext/Thread/Thread.xs fakethr.h perl.c thread.h + ! win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 189] By: mbeattie on 1997/10/29 12:49:01 + Log: Add to Todo: compiler with fake SvCUR in comppad_name entries. + Branch: perl + ! Todo.5.005 +____________________________________________________________________________ +[ 188] By: mbeattie on 1997/10/29 12:45:32 + Log: Add pp_lock knowledge to compiler + Branch: perlext + ! Compiler/ccop.c Compiler/ccop.h +____________________________________________________________________________ +[ 187] By: mbeattie on 1997/10/29 12:45:02 + Log: Change peep() to optimise away unneeded rv2av in lval->[] and lval->{} + Branch: perl + ! op.c +____________________________________________________________________________ +[ 186] By: mbeattie on 1997/10/29 12:43:36 + Log: Move compiler OP class information into opcode.pl. + Branch: perl + ! op.h opcode.h opcode.pl +____________________________________________________________________________ +[ 185] By: nick on 1997/10/26 22:52:05 + Log: Split failing test in op/misc.t into op/nothread.t + so all tests can be passed where they apply. + Cleanup other two cases of THREADS/THISPTR. + Conditional compile option for CriticalSection's on Win32 + Branch: oneperl + + t/op/nothread.t + ! sv.h t/op/misc.t win32/Makefile win32/makedef.pl + ! win32/win32thread.h +____________________________________________________________________________ +[ 184] By: nick on 1997/10/26 19:42:00 + Log: USE_THISPTR fixes for CRIPPLED_CC (implied by threads) + Branch: oneperl + ! embed.h global.sym proto.h sv.c sv.h toke.c +____________________________________________________________________________ +[ 183] By: nick on 1997/10/26 18:31:58 + Log: Make USE_THREADS imply CRIPPLED_CC. + This avoids most of the uses of 'Sv' and hence many needs of + dTHR in extension code. + With this change Data::Dumper builds as-is + and Tk only needs four tweaks: + 1. Obscure dump-stack case which really needs dTHR + 2. A curcop in error-message code + 3. Two cases of SAVETMPS + 4. A curcop == &compiling which is probably not required. + IMHO the SAVETMPS case is only one which merits further automation. + Branch: oneperl + ! embed.h global.sym perl.h sv.c win32/Makefile win32/makedef.pl +____________________________________________________________________________ +[ 182] By: nick on 1997/10/26 16:31:58 + Log: Change dSP to imply dTHR for extension source compatibility + introduce djSP (Declare Just SP) for use in perl sources + and thread-aware extensions. Use latter. + Branch: oneperl + ! XSUB.h doio.c doop.c ext/Thread/Thread.xs gv.c mg.c perl.c + ! pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c sv.c +____________________________________________________________________________ +[ 181] By: nick on 1997/10/26 00:39:57 + Log: More tests + Branch: oneperl + ! t/lib/thread.t +____________________________________________________________________________ +[ 180] By: nick on 1997/10/25 22:18:27 + Log: Use return of THREAD_CREATE() - add basic thread test + Branch: oneperl + + t/lib/thread.t + ! ext/Thread/Thread.xs +____________________________________________________________________________ +[ 179] By: nick on 1997/10/25 21:25:23 + Log: Builds with no thread/this + Branch: oneperl + ! ext/Thread/Thread.xs t/lib/english.t win32/makedef.pl + ! win32/win32thread.c +____________________________________________________________________________ +[ 178] By: nick on 1997/10/25 18:28:03 + Log: Cleanup dead #ifdef branch introduced by scruffy merging. + Branch: oneperl + ! perl.c +____________________________________________________________________________ +[ 177] By: nick on 1997/10/25 18:11:33 + Log: Basic integrate of oneperl with threads, passes + tests THISPTR+THREADs - win32/win32thread.* needed + changes (where did they come from)? + Branch: oneperl + ! embed.h ext/Thread/Thread.xs perl.h thread.h win32/Makefile + ! win32/makedef.pl win32/win32thread.c win32/win32thread.h +____________________________________________________________________________ +[ 176] By: nick on 1997/10/25 17:05:52 + Log: Onepel builds THISPTR no threads + Branch: oneperl + ! ext/Thread/Thread.xs thread.h win32/makedef.pl +____________________________________________________________________________ +[ 175] By: nick on 1997/10/25 16:40:10 + Log: Integrate oneperl with new style JOIN etc. macros + Branch: oneperl + +> win32/win32thread.c win32/win32thread.h + !> Todo.5.005 ext/POSIX/POSIX.xs ext/Thread/Thread.xs fakethr.h + !> global.sym gv.c hv.c mg.c op.c opcode.h opcode.pl perl.c + !> perl.h pp.c pp_hot.c sv.h thread.h vms/descrip.mms + !> vms/gen_shrfls.pl vms/vms.c vms/vmsish.h win32/Makefile + !> win32/makefile.mk +____________________________________________________________________________ +[ 174] By: mbeattie on 1997/10/24 17:14:00 + Log: Remove xcv_condp CV field which is no longer used. + Branch: perl + ! sv.h +____________________________________________________________________________ +[ 173] By: mbeattie on 1997/10/24 14:36:09 + Log: Patches for VMS [Dan Sugalski] + Branch: bugs + + vms2 + Branch: perl + ! ext/POSIX/POSIX.xs vms/descrip.mms vms/gen_shrfls.pl vms/vms.c + ! vms/vmsish.h +____________________________________________________________________________ +[ 172] By: mbeattie on 1997/10/24 13:50:59 + Log: Improve internal threading API. Introduce win32/win32thread.[ch] + to use new API and patch win32 makefile stuff a little. + Branch: perl + + win32/win32thread.c win32/win32thread.h + ! Todo.5.005 ext/Thread/Thread.xs fakethr.h global.sym gv.c hv.c + ! perl.c perl.h thread.h win32/Makefile win32/makefile.mk +____________________________________________________________________________ +[ 171] By: mbeattie on 1997/10/23 14:00:27 + Log: Fix pp_hot.c:get_db_sub core dump when perl debugger used. + + Jobs fixed ... + + get_db_sub fixed on 1997/10/23 by mbeattie@squash + + Subject: [perl5.004_53] Debugger crash (patch) + Date: Thu, 16 Oct 1997 22:03:09 -0400 + From: Owen Taylor + Branch: bugs + + get_db_sub + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 170] By: mbeattie on 1997/10/23 09:22:40 + Log: Fix refcounts for lock/magic_mutexfree. Make OP_LOCK auto-ref + its argument using ck_rfun as OP_DEFINED. Make pp_lock return + a ref to its argument for AV, HV, CV. + Branch: perl + ! mg.c op.c opcode.h opcode.pl pp.c pp_hot.c +____________________________________________________________________________ +[ 169] By: gsar on 1997/10/21 03:49:25 + Log: With these fixes, oneperl builds THISPTR && THREADS under both win32 compilers: + - Fixup static functions that were missing aTHIS. + - s/extern/EXT/ in dTHR macro, or Borland CC croaks. + - Removed static functions from global.sym. + - Typo in perl.h. + - Additions to makefile.mk. + Branch: oneperl + ! embed.h embed.pl global.sym op.c perl.h pp_ctl.c toke.c + ! win32/makefile.mk +____________________________________________________________________________ +[ 168] By: nick on 1997/10/20 02:47:18 + Log: Passes expected tests with -DUSE_THREADS with/without -DUSE_THISPTR + Branch: oneperl + ! embed.h ext/Thread/Thread.xs mg.c pp.c pp_hot.c proto.h + ! scope.h thread.h +____________________________________________________________________________ +[ 167] By: nick on 1997/10/20 01:03:00 + Log: Add missing aTHIS in cast + Branch: oneperl + ! win32/dl_win32.xs +____________________________________________________________________________ +[ 166] By: nick on 1997/10/20 00:44:42 + Log: Builds and passes test with -DUSE_THISPTR + Branch: oneperl + ! ext/Thread/Thread.xs win32/Makefile win32/makedef.pl + ! win32/perllib.c +____________________________________________________________________________ +[ 165] By: nick on 1997/10/19 21:45:36 + Log: Oneperl runs miniperl with THISPTR (Win32 threading patch included) + Branch: oneperl + ! embed.h ext/Thread/Thread.xs global.sym interp.sym perl.c + ! perl.h t/TEST thread.h win32/Makefile win32/makedef.pl + ! win32/makefile.mk win32/perllib.c +____________________________________________________________________________ +[ 164] By: nick on 1997/10/19 20:09:13 + Log: oneperl compiles (but fails) with -DUSE_THISPTR + Branch: oneperl + ! av.c embed.h mg.c perl.c perl.h pp.c pp_ctl.c pp_hot.c + ! pp_sys.c proto.h regexec.c sv.c thread.h thread.sym util.c + ! win32/win32.c win32/win32.h +____________________________________________________________________________ +[ 163] By: nick on 1997/10/19 16:46:09 + Log: Builds on NT4 without THISPTR or THREADS, passes all tests + Branch: oneperl + ! embed.h perl.h thread.h vars.h +____________________________________________________________________________ +[ 162] By: nick on 1997/10/19 14:42:16 + Log: Dubious merge of oneperl's variable and struct thread + Branch: oneperl + !> perl.h thread.h +____________________________________________________________________________ +[ 161] By: nick on 1997/10/18 18:05:13 + Log: integrate all but perl.h/thread.h + Branch: oneperl + +> Todo.5.005 perlio.sym + !> (integrate 98 files) +____________________________________________________________________________ +[ 160] By: nick on 1997/10/18 03:49:27 + Log: Integrate rest of sub-dirs into oneperl + Branch: oneperl + +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README + +> ext/Thread/Thread.pm ext/Thread/Thread.xs + +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm + +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t + +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t + +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t + +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t + +> ext/Thread/unsync3.t ext/Thread/unsync4.t hints/newsos4.sh + +> hints/os390.sh + - ext/util/extliblist + !> (integrate 425 files) +____________________________________________________________________________ +[ 159] By: nick on 1997/10/18 03:20:11 + Log: Integrate (accept) t and win32 into oneperl + Branch: oneperl + +> t/lib/dosglob.t win32/bin/pl2bat.pl win32/bin/runperl.pl + +> win32/bin/search.pl win32/bin/webget.pl win32/config.bc + +> win32/config.vc win32/config_H.bc win32/config_H.vc + +> win32/makefile.mk + !> (integrate 188 files) +____________________________________________________________________________ +[ 158] By: nick on 1997/10/18 03:12:59 + Log: Integrate lib/... into oneperl + Branch: oneperl + +> lib/File/DosGlob.pm lib/base.pm lib/chat2.pl + !> (integrate 138 files) +____________________________________________________________________________ +[ 157] By: nick on 1997/10/18 02:55:53 + Log: Make lib/Bundle/CPAN.pm text in oneperl too. + Branch: oneperl + ! lib/Bundle/CPAN.pm +____________________________________________________________________________ +[ 156] By: nick on 1997/10/18 02:52:44 + Log: Make lib/Bundle/CPAN.pm a text file + Branch: perl + ! lib/Bundle/CPAN.pm +____________________________________________________________________________ +[ 155] By: nick on 1997/10/18 02:33:02 + Log: Some weirdness in the intgrate process + Branch: oneperl + - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat + - win32/bin/webget.bat win32/config.H win32/config.w32 +____________________________________________________________________________ +[ 153] By: nick on 1997/10/18 02:29:16 + Log: Let us try all the pure integrate stuff + Branch: oneperl + !> (integrate 647 files) +____________________________________________________________________________ +[ 152] By: nick on 1997/10/18 02:13:35 + Log: Get more sub directories out of the way. + Branch: oneperl + !> (integrate 92 files) +____________________________________________________________________________ +[ 151] By: nick on 1997/10/18 02:05:41 + Log: Integrate hints + Branch: oneperl + !> (integrate 68 files) +____________________________________________________________________________ +[ 150] By: nick on 1997/10/18 01:57:20 + Log: Try reopening some non-contravertial files + Branch: oneperl + !> x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h + !> x2p/a2p.pod x2p/a2p.y x2p/a2py.c x2p/cflags.SH + !> x2p/find2perl.PL x2p/hash.c x2p/hash.h x2p/proto.h x2p/s2p.PL + !> x2p/str.c x2p/str.h x2p/util.c x2p/util.h x2p/walk.c +____________________________________________________________________________ +[ 144] By: gsar on 1997/10/16 22:26:07 + Log: Merge changes to Thread and add makefile fixups to accomodate Thread + build. Once again, builds and runs all Thread tests using either + compiler. + Branch: win32/perl + ! embed.h ext/Thread/Thread.xs interp.sym perl.c win32/Makefile + ! win32/makefile.mk +____________________________________________________________________________ +[ 143] By: gsar on 1997/10/16 20:45:58 + Log: A quick merge of latest mainline. + Branch: win32/perl + +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README + +> ext/Thread/Thread.pm ext/Thread/Thread.xs + +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm + +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t + +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t + +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t + +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t + +> ext/Thread/unsync3.t ext/Thread/unsync4.t hints/os390.sh + +> lib/base.pm t/lib/dosglob.t + - ext/util/extliblist + !> (integrate 134 files) + +---------------- +Version 5.004_53 +---------------- + +____________________________________________________________________________ +[ 142] By: mbeattie on 1997/10/16 16:52:55 + Log: Add newly moved perl/ext/Thread/... files to MANIFEST. + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 141] By: mbeattie on 1997/10/16 16:42:13 + Log: Move perlext/Thread into perl/ext/Thread. + Branch: perl + +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README + +> ext/Thread/Thread.pm ext/Thread/Thread.xs + +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm + +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t + +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t + +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t + +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t + +> ext/Thread/unsync3.t ext/Thread/unsync4.t + ! Configure + Branch: perlext + - Thread/Makefile.PL Thread/Notes Thread/README Thread/Thread.pm + - Thread/Thread.xs Thread/Thread/Queue.pm + - Thread/Thread/Semaphore.pm Thread/create.t Thread/io.t + - Thread/join.t Thread/join2.t Thread/list.t Thread/lock.t + - Thread/queue.t Thread/sync.t Thread/sync2.t Thread/typemap + - Thread/unsync.t Thread/unsync2.t Thread/unsync3.t + - Thread/unsync4.t +____________________________________________________________________________ +[ 140] By: mbeattie on 1997/10/16 16:26:53 + Log: Correct threads_mutex locking in main thread destruction. + Add per-interp thrsv to hold SV struct thread for main thread. + Move Thread.xs MUTEX_DESTROY from end of threadstart to remove_thread. + Add Thread/list.t test of Thread->list method. + Let Thread::Semaphore methods up and down take an extra argument. + Branch: perl + ! embed.h interp.sym perl.c perl.h thread.h + Branch: perlext + + Thread/list.t + ! Thread/Thread.xs Thread/Thread/Semaphore.pm +____________________________________________________________________________ +[ 139] By: mbeattie on 1997/10/16 14:01:11 + Log: Fix up merge with 5.004_04. + Branch: perl + ! op.c perl.c t/lib/dosglob.t +____________________________________________________________________________ +[ 138] By: TimBunce on 1997/10/16 12:58:22 + Log: Fix-up PerForce type for t/lib/dosglob.t from text to xtext + Branch: maint-5.004/perl + ! t/lib/dosglob.t +____________________________________________________________________________ +[ 137] By: mbeattie on 1997/10/16 11:09:25 + Log: Merge maint-5.004 branch (5.004_04) with mainline. + Branch: perl + +> hints/os390.sh lib/base.pm t/lib/dosglob.t + - ext/util/extliblist + !> (integrate 132 files) +____________________________________________________________________________ +[ 135] By: gsar on 1997/10/15 21:46:05 + Log: Win32 changes over 5.004_52: + - rearranged MUTEX_LOCK()s in perl_destroy so that we don't call it + on an already locked mutex. + - other minor tweaks. + Now builds and runs win32-version of Thread_52, passing all tests. + Branch: win32/perl + ! perl.c proto.h thread.h +____________________________________________________________________________ +[ 134] By: gsar on 1997/10/15 18:19:31 + Log: fixup makefile.mk conflict. + Branch: win32/perl + ! win32/makefile.mk +____________________________________________________________________________ +[ 133] By: gsar on 1997/10/15 18:02:46 + Log: Integrated latest changes from mainline into win32. + Branch: win32/perl + +> fakethr.h + !> MANIFEST Porting/makerel Porting/patchls README.threads + !> Todo.5.005 perl.c pp_hot.c thread.h util.c win32/config.bc + !> win32/config.vc win32/config_H.bc win32/config_H.vc + !> win32/makefile.mk + +---------------- +Version 5.004_52 +---------------- + +____________________________________________________________________________ +[ 132] By: mbeattie on 1997/10/15 17:02:38 + Log: Remove out-of-date test Thread/cond.t. + Branch: perlext + - Thread/cond.t +____________________________________________________________________________ +[ 131] By: mbeattie on 1997/10/15 16:57:45 + Log: Finish thread state machine: fixes global destruction of threads, + detaching, joining etc. Alter FAKE_THREADS-specific fields to use + new HAVE_THREAD_INTERN stuff. Updates docs. Various fixes to + Thread.xs. + Branch: perl + ! MANIFEST README.threads Todo.5.005 perl.c util.c + Branch: perlext + ! Thread/Thread.xs Thread/queue.t +____________________________________________________________________________ +[ 130] By: mbeattie on 1997/10/15 16:55:10 + Log: Add HAVE_THREAD_INTERN for platform-dependent struct thread additions. + Fix ThrSETSTATE not to lock t->mutex itself. + Branch: perl + ! fakethr.h thread.h +____________________________________________________________________________ +[ 129] By: mbeattie on 1997/10/15 16:53:35 + Log: Remove stale code from pp_entersub which breaks sub ownership locks. + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 128] By: TimBunce on 1997/10/15 15:55:26 + Log: Maintenance 5.004_04 changes + Branch: maint-5.004/perl + + hints/os390.sh lib/base.pm t/lib/dosglob.t + - ext/util/extliblist + ! Changes Configure INSTALL MANIFEST Makefile.SH Porting/makerel + ! Porting/patchls Porting/pumpkin.pod README.vms av.c configpm + ! doop.c eg/sysvipc/ipcsem emacs/cperl-mode.el embed.h + ! ext/DynaLoader/DynaLoader.pm ext/IO/lib/IO/Socket.pm + ! ext/util/make_ext global.sym gv.c hints/bsdos.sh + ! hints/dec_osf.sh hints/dynixptx.sh hints/irix_6.sh + ! hints/linux.sh hints/machten.sh hints/os2.sh hints/qnx.sh hv.c + ! installperl lib/AutoLoader.pm lib/CPAN.pm + ! lib/CPAN/FirstTime.pm lib/Carp.pm lib/Cwd.pm lib/English.pm + ! lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/xsubpp + ! lib/File/DosGlob.pm lib/File/Find.pm lib/FileHandle.pm + ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/Math/Complex.pm + ! lib/Sys/Hostname.pm lib/Sys/Syslog.pm lib/Test/Harness.pm + ! lib/Time/Local.pm lib/autouse.pm lib/blib.pm + ! lib/diagnostics.pm lib/getopt.pl lib/perl5db.pl lib/vars.pm + ! makedepend.SH malloc.c mg.c miniperlmain.c myconfig op.c + ! opcode.h os2/Changes os2/OS2/REXX/Makefile.PL + ! os2/OS2/REXX/REXX.pm os2/os2.c patchlevel.h perl.c perl.h + ! perly.c perly.fixer perly.y pod/perl.pod pod/perlapio.pod + ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod + ! pod/perlguts.pod pod/perlipc.pod pod/perlop.pod + ! pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod + ! pod/perltrap.pod pod/perlvar.pod pod/perlxs.pod pp.c pp_ctl.c + ! pp_hot.c pp_sys.c proto.h regcomp.c regexec.c scope.c sv.c + ! t/TEST t/comp/proto.t t/lib/complex.t t/lib/io_sock.t + ! t/lib/io_udp.t t/op/glob.t t/op/method.t t/op/misc.t + ! t/op/ref.t t/op/runlevel.t t/op/split.t t/op/sprintf.t + ! t/op/subst.t t/op/taint.t t/pragma/locale.t taint.c toke.c + ! unixish.h util.c utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL + ! utils/perldoc.PL vms/perly_c.vms vms/vms.c vms/vmsish.h + ! win32/Makefile win32/config_H.bc win32/config_H.vc + ! win32/makefile.mk win32/pod.mak win32/win32.c win32/win32io.c + ! win32/win32sck.c x2p/Makefile.SH x2p/util.c +____________________________________________________________________________ +[ 127] By: mbeattie on 1997/10/15 10:00:18 + Log: Added fakethr.h. + Branch: perl + + fakethr.h +____________________________________________________________________________ +[ 126] By: mbeattie on 1997/10/15 09:50:57 + Log: pthread_condattr_init in thread.h for OLD_PTHREADS_API. + Branch: perl + ! thread.h +____________________________________________________________________________ +[ 125] By: mbeattie on 1997/10/15 09:09:24 + Log: Started rewriting thread state machine. + Branch: perl + ! perl.c thread.h + Branch: perlext + ! Thread/Thread.xs +____________________________________________________________________________ +[ 124] By: gsar on 1997/10/14 00:23:15 + Log: Remove spurious extra MUTEX_LOCK in pp_entersub(). Now builds and passes + tests in win32 version of latest perlext/Thread. + Branch: win32/perl + ! pp_hot.c +____________________________________________________________________________ +[ 123] By: gsar on 1997/10/13 23:18:38 + Log: Initial merge of win32 threads patch. + Branch: win32/perl + ! embed.h global.sym interp.sym perl.c perl.h pp_hot.c thread.h + ! win32/Makefile win32/makedef.pl win32/makefile.mk + ! win32/perllib.c win32/pod.mak win32/win32.h +____________________________________________________________________________ +[ 122] By: gsar on 1997/10/10 20:58:40 + Log: Integrated changes on mainline into the win32 branch. Had to set + P4USER=mbeattie for the resolve step (due to the presence of newly + branched files that had not been submitted?) + Branch: win32/perl + +> Porting/makerel Porting/patchls README.threads Todo.5.005 + +> ext/attrs/Makefile.PL ext/attrs/attrs.pm ext/attrs/attrs.xs + +> hints/newsos4.sh lib/File/DosGlob.pm lib/chat2.pl perlio.sym + +> win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl + +> win32/bin/webget.pl win32/config.bc win32/config.vc + +> win32/config_H.bc win32/config_H.vc win32/makefile.mk + - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat + - win32/bin/webget.bat win32/config.H win32/config.w32 + ! thread.h + !> (integrate 858 files) +____________________________________________________________________________ +[ 121] By: mbeattie on 1997/10/10 17:23:41 + Log: Tweak a few Thread tests. + Branch: perlext + + Thread/join2.t + ! Thread/io.t Thread/sync2.t +____________________________________________________________________________ +[ 120] By: mbeattie on 1997/10/10 17:22:46 + Log: Rewrite thread destruction system using linked list of threads. + Still not completely done. Add methods self, equal, flags, list + to Thread.xs. Add Thread_MAGIC_SIGNATURE check to typemap. + Branch: perl + ! perl.c perl.h thread.h + Branch: perlext + ! Thread/Thread.xs Thread/typemap +____________________________________________________________________________ +[ 119] By: mbeattie on 1997/10/10 17:19:55 + Log: Fix up locking/synchronisation for pp_entersub. + Branch: perl + ! pp_hot.c +____________________________________________________________________________ +[ 118] By: mbeattie on 1997/10/10 09:55:32 + Log: Put back entries in MANIFEST for the four now-returned win32/* files + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 117] By: mbeattie on 1997/10/10 08:12:23 + Log: Took out mystack_foo for good, fixed up interp.sym and win32/makedef.pl + Branch: perl + ! Todo.5.005 embed.h interp.sym perl.h win32/makedef.pl +____________________________________________________________________________ +[ 116] By: mbeattie on 1997/10/08 15:41:08 + Log: Add missing sig_pipe definition to Thread.xs. + Branch: perlext + ! Thread/Thread.xs +____________________________________________________________________________ +[ 115] By: mbeattie on 1997/10/08 15:40:46 + Log: Fix up 5.004_03 merge: remove missing win32 files from MANIFEST, + add missing dTHR; to new function unwind_handler_stack() in mg.c + and bump patchlevel.h to 5.004_52. + Branch: perl + ! MANIFEST mg.c patchlevel.h +____________________________________________________________________________ +[ 114] By: mbeattie on 1997/10/08 10:19:27 + Log: Merge maint-5.004 branch (5.004_03) with mainline. + MANIFEST is out of sync. + Branch: perl + +> win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl + +> win32/bin/webget.pl + - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat + - win32/bin/webget.bat + !> (integrate 168 files) +____________________________________________________________________________ +[ 113] By: mbeattie on 1997/10/05 17:52:49 + Log: Move init of global mutexes/cond vars earlier. + Branch: perl + ! perl.c +____________________________________________________________________________ +[ 112] By: nick on 1997/10/04 15:25:28 + Log: Add perl.sym to MANIFEST + Branch: oneperl + ! MANIFEST +____________________________________________________________________________ +[ 111] By: nick on 1997/10/04 15:23:37 + Log: Missing file + Branch: oneperl + + perl.sym +____________________________________________________________________________ +[ 110] By: nick on 1997/10/04 13:04:26 + Log: Now builds the extensions as well + Passes all tests + Branch: oneperl + ! XSUB.h embed.pl ext/DynaLoader/dlutils.c ext/Opcode/Opcode.xs + ! mg.c op.c perl.c pp_ctl.c pp_hot.c pp_sys.c proto.h sv.c + ! toke.c util.c writemain.SH +____________________________________________________________________________ +[ 109] By: nick on 1997/10/04 12:02:14 + Log: Odd checkin issue + Branch: oneperl + ! dump.c global.sym gv.c hv.c malloc.c mg.c op.c opcode.h perl.c + ! perly.c perly.c.diff perly.h perly.y pp.c pp_hot.c pp_sys.c + ! proto.h scope.c sv.c toke.c universal.c util.c vms/perly_c.vms + ! vms/perly_h.vms writemain.SH +____________________________________________________________________________ +[ 108] By: nick on 1997/10/04 11:12:52 + Log: Added lots of (missing) prototypes (ckprotos is util to check) + Fixed missing aTHIS flagged by above. + -DUSE_THISPTR passes minitest! + Branch: oneperl + + ckprotos + ! dump.c global.sym gv.c hv.c malloc.c mg.c op.c opcode.h perl.c + ! perly.c perly.c.diff perly.h perly.y pp.c pp_hot.c pp_sys.c + ! proto.h scope.c sv.c toke.c universal.c util.c vms/perly_c.vms + ! vms/perly_h.vms +____________________________________________________________________________ +[ 107] By: nick on 1997/10/03 22:36:52 + Log: .y muddle fixup - will get this sorted oneday ... + Branch: oneperl + ! miniperlmain.c perly.c perly.c.diff perly.h vms/perly_c.vms + ! vms/perly_h.vms +____________________________________________________________________________ +[ 106] By: mbeattie on 1997/10/03 17:12:33 + Log: Remove last traces of "tokenbuf as temp buffer" and removed it + from struct thread. Added missing thr->Tfoo defines for statbuf + and timesbuf and removed unused Tbuf field. + Branch: perl + ! doio.c mg.c perl.c pp_sys.c sv.c thread.h +____________________________________________________________________________ +[ 105] By: nick on 1997/10/03 15:56:50 + Log: dTHIS -> hasTHIS, dTHR -> dTHR; builds without THISPTR with/without USE_THREADS + Branch: oneperl + ! XSUB.h av.c deb.c doio.c doop.c dump.c embed.pl global.sym + ! gv.c hv.c mg.c op.c perl.c perl.h perlio.c perly.c pp.c pp.h + ! pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c + ! sv.c taint.c thread.h toke.c universal.c util.c +____________________________________________________________________________ +[ 104] By: mbeattie on 1997/10/03 15:23:25 + Log: Back out sv_bless3 change which made pp_bless zap '~'-magic. + Branch: perl + ! global.sym pp.c proto.h sv.c +____________________________________________________________________________ +[ 103] By: mbeattie on 1997/10/03 15:17:39 + Log: Fixed sv_mutex locking for new_SV, del_SV and nice_chunks. + Branch: perl + ! av.c hv.c perl.h sv.c +____________________________________________________________________________ +[ 102] By: mbeattie on 1997/10/03 11:53:51 + Log: Reliable thread signal handling. + Branch: perl + ! global.sym mg.c perl.c perl.h + Branch: perlext + ! Thread/Thread.xs +____________________________________________________________________________ +[ 101] By: nick on 1997/10/02 20:43:17 + Log: Cleanup perly.y stuff + Branch: oneperl + ! embed.h perly.c perly.c.diff vms/perly_c.vms vms/perly_h.vms +____________________________________________________________________________ +[ 100] By: nick on 1997/10/02 18:54:08 + Log: Compiles with less invasive aTHIS adding + Branch: oneperl + + nothis.sym + ! MANIFEST XSUB.h av.c cop.h deb.c doio.c doop.c dump.c embed.h + ! embed.pl global.sym gv.c gv.h handy.h hv.c hv.h mg.c op.c op.h + ! opcode.h perl.c perl.h perlio.c perlsdio.h perly.c + ! perly.c.diff perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c + ! proto.h regcomp.c regcomp.h regexec.c run.c scope.c scope.h + ! sv.c sv.h t/op/sort.t taint.c thread.h toke.c universal.c + ! util.c vars.h + +---------------- +Version 5.004_51 +---------------- + +____________________________________________________________________________ +[ 99] By: mbeattie on 1997/10/02 17:23:48 + Log: Added Thread/queue.t. + Branch: perlext + + Thread/queue.t +____________________________________________________________________________ +[ 98] By: mbeattie on 1997/10/02 17:19:44 + Log: Bumped patchlevel to 51. Updated Todo.5.005. + Branch: perl + ! Todo.5.005 patchlevel.h +____________________________________________________________________________ +[ 97] By: mbeattie on 1997/10/02 17:07:47 + Log: Update README.threads amd Thread/README + Branch: perl + ! README.threads + Branch: perlext + ! Thread/README +____________________________________________________________________________ +[ 96] By: mbeattie on 1997/10/02 16:58:47 + Log: Configure -Dusethreads hints for dec_osf and solaris_2 and + fix sv_bless3 prototype. + Branch: perl + ! hints/dec_osf.sh hints/solaris_2.sh sv.c +____________________________________________________________________________ +[ 95] By: mbeattie on 1997/10/02 16:50:21 + Log: Fixed broken typemap for Thread. + Branch: perlext + ! Thread/typemap +____________________________________________________________________________ +[ 94] By: mbeattie on 1997/10/02 16:34:03 + Log: Fix pod text in Lint.pm for private-names option. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 93] By: mbeattie on 1997/10/02 13:44:46 + Log: Add Todo.5.005 to MANIFEST and submit remade embed.h. + Branch: perl + ! MANIFEST embed.h +____________________________________________________________________________ +[ 92] By: mbeattie on 1997/10/02 13:27:10 + Log: Add Todo.5.005 + Branch: perl + + Todo.5.005 +____________________________________________________________________________ +[ 91] By: nick on 1997/10/01 20:23:38 + Log: Raw _T# trial + Branch: oneperl + ! embed.h embed.pl proto.h sv.c +____________________________________________________________________________ +[ 90] By: nick on 1997/10/01 18:22:03 + Log: THIS + new sort stuff + Branch: oneperl + ! miniperlmain.c perl.c pp_ctl.c proto.h util.c +____________________________________________________________________________ +[ 89] By: nick on 1997/10/01 18:03:05 + Log: qsort cleanup - now tailored to perl's use and 'this' aware. + Branch: oneperl + ! pp_ctl.c proto.h util.c +____________________________________________________________________________ +[ 88] By: mbeattie on 1997/10/01 17:04:12 + Log: Start of Configure support for -Dusethreads plus associated + Linux hints. + Branch: perl + ! Configure hints/linux.sh +____________________________________________________________________________ +[ 87] By: mbeattie on 1997/10/01 17:03:34 + Log: Move runops_foo prototypes from proto.h to early in perl.h. + Branch: perl + ! perl.h proto.h +____________________________________________________________________________ +[ 86] By: nick on 1997/09/30 19:15:21 + Log: Debug hackery to thread.h - temporary + Quick-fix qsort() replacement - more to come. + Branch: oneperl + ! thread.h util.c +____________________________________________________________________________ +[ 85] By: mbeattie on 1997/09/30 15:50:27 + Log: Added Lint option regexp-variables. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 84] By: mbeattie on 1997/09/30 15:11:07 + Log: Merge maint-5.004 branch (5.004_01) with mainline. + Branch: perl + +> Porting/makerel Porting/patchls hints/newsos4.sh + +> lib/File/DosGlob.pm lib/chat2.pl perlio.sym win32/config.bc + +> win32/config.vc win32/config_H.bc win32/config_H.vc + +> win32/makefile.mk + - win32/config.H win32/config.w32 + !> (integrate 109 files) +____________________________________________________________________________ +[ 83] By: TimBunce on 1997/09/30 14:27:09 + Log: Maintenance 5.004_03 changes (addendum) + Branch: maint-5.004/perl + - win32/bin/search.bat +____________________________________________________________________________ +[ 82] By: TimBunce on 1997/09/30 14:11:29 + Log: Maintenance 5.004_03 changes + Branch: maint-5.004/perl + + win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl + + win32/bin/webget.pl + - win32/bin/pl2bat.bat win32/bin/runperl.bat win32/bin/test.bat + - win32/bin/webget.bat + ! Changes Configure MANIFEST Makefile.SH Porting/makerel + ! ext/DynaLoader/DynaLoader.pm hints/hpux.sh hints/linux.sh + ! hints/sco.sh hints/sunos_4_1.sh installhtml lib/CPAN.pm + ! lib/ExtUtils/MM_Unix.pm lib/FileCache.pm lib/Math/Complex.pm + ! lib/Math/Trig.pm lib/blib.pm os2/diff.configure patchlevel.h + ! perl.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod + ! pod/perlop.pod pod/perlre.pod pod/perlrun.pod pod/pod2man.PL + ! pp_ctl.c pp_sys.c t/lib/complex.t t/pragma/locale.t toke.c + ! utils/perlbug.PL win32/Makefile win32/makefile.mk + ! win32/win32.c +____________________________________________________________________________ +[ 81] By: TimBunce on 1997/09/30 13:17:27 + Log: Maintenance 5.004_02 changes + Branch: maint-5.004/perl + + win32/bin/runperl.bat + ! Changes Configure INSTALL MANIFEST Makefile.SH Porting/patchls + ! README.os2 README.win32 Todo XSUB.h av.c configpm doio.c + ! dosish.h embed.h ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + ! ext/DB_File/typemap ext/GDBM_File/typemap ext/IO/IO.xs + ! ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm + ! ext/IO/lib/IO/Socket.pm ext/NDBM_File/typemap + ! ext/ODBM_File/ODBM_File.xs ext/POSIX/POSIX.xs + ! ext/SDBM_File/typemap global.sym gv.c hints/cxux.sh + ! hints/os2.sh hints/sunos_4_1.sh hints/svr4.sh installhtml + ! lib/Bundle/CPAN.pm lib/CPAN.pm lib/CPAN/FirstTime.pm + ! lib/CPAN/Nox.pm lib/Carp.pm lib/Class/Struct.pm + ! lib/Exporter.pm lib/ExtUtils/Command.pm lib/ExtUtils/Embed.pm + ! lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm + ! lib/ExtUtils/xsubpp lib/File/Compare.pm lib/File/Copy.pm + ! lib/File/Find.pm lib/File/Path.pm lib/FileHandle.pm + ! lib/I18N/Collate.pm lib/IPC/Open3.pm lib/Net/hostent.pm + ! lib/Pod/Html.pm lib/Shell.pm lib/Sys/Hostname.pm + ! lib/Sys/Syslog.pm lib/Term/ReadLine.pm lib/Time/Local.pm + ! lib/UNIVERSAL.pm lib/dumpvar.pl lib/ftp.pl lib/perl5db.pl + ! malloc.c mg.c op.c opcode.pl os2/Changes os2/Makefile.SHs + ! os2/diff.configure os2/os2.c os2/os2ish.h patchlevel.h perl.c + ! perl.h pod/perlapio.pod pod/perlbook.pod pod/perldebug.pod + ! pod/perldelta.pod pod/perldiag.pod pod/perlembed.pod + ! pod/perlfunc.pod pod/perlguts.pod pod/perlop.pod + ! pod/perlre.pod pod/perlrun.pod pod/perltoc.pod + ! pod/perltrap.pod pod/perlvar.pod pod/perlxstut.pod + ! pod/pod2man.PL pod/splitpod pp.c pp_ctl.c pp_hot.c pp_sys.c + ! proto.h regcomp.c regexec.c scope.c sv.c t/TEST t/base/lex.t + ! t/comp/cmdopt.t t/comp/term.t t/lib/db-btree.t t/lib/db-hash.t + ! t/lib/db-recno.t t/lib/filehand.t t/lib/gdbm.t t/lib/ndbm.t + ! t/lib/odbm.t t/lib/sdbm.t t/op/local.t t/op/magic.t + ! t/op/pack.t t/op/re_tests t/op/ref.t t/op/regexp.t t/op/stat.t + ! t/op/substr.t t/op/universal.t toke.c universal.c util.c + ! utils/Makefile utils/h2ph.PL utils/perlbug.PL utils/perldoc.PL + ! vms/config.vms vms/descrip.mms vms/ext/filespec.t + ! vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c + ! vms/vmsish.h win32/Makefile win32/bin/pl2bat.bat + ! win32/config.bc win32/config.vc win32/config_H.bc + ! win32/config_H.vc win32/config_h.PL win32/makedef.pl + ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h + ! win32/win32io.c win32/win32io.h win32/win32iop.h + ! win32/win32sck.c +____________________________________________________________________________ +[ 80] By: nick on 1997/09/29 20:31:43 + Log: Add some prototypes in attempt to flush out errors + Tidy up vars.h usage. + Branch: oneperl + ! av.c embed.h hv.c opcode.h perl.c perl.h perlio.c pp_sys.c + ! proto.h util.c vars.h +____________________________________________________________________________ +[ 79] By: nick on 1997/09/29 17:12:07 + Log: Builds and passes tests without THISPTR + Branch: oneperl + ! MANIFEST global.sym perl.c perl.h vars.h +____________________________________________________________________________ +[ 78] By: mbeattie on 1997/09/29 16:57:23 + Log: Re-introduce the changes from change 68 (runops becomes a + function pointer and sv_bless3 for '~'-magic) which got lost + during the preparation for the maint-merge. + Branch: perl + ! global.sym perl.h pp.c proto.h run.c sv.c +____________________________________________________________________________ +[ 77] By: mbeattie on 1997/09/29 16:44:16 + Log: Start merge with maint-5.004 branch by creating an ancestral + branch point via a fake resolution with the maint-merge branch. + See Perforce Tech Note 9 for details. + Branch: perl + !> (integrate 864 files) +____________________________________________________________________________ +[ 76] By: nick on 1997/09/28 19:04:42 + Log: Code with this pointer compiles (but core dumps) + Branch: oneperl + ! EXTERN.h INTERN.h XSUB.h av.c av.h cop.h cv.h deb.c doio.c + ! doop.c dosish.h dump.c form.h gv.c gv.h handy.h hv.c hv.h + ! keywords.h mg.c mg.h miniperlmain.c nostdio.h op.c op.h + ! opcode.h patchlevel.h perl.c perl.h perlio.c perlio.h + ! perlsdio.h perlsfio.h perly.c perly.c.diff perly.h perly.y + ! pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c + ! regcomp.h regexec.c regexp.h run.c scope.c scope.h sv.c sv.h + ! taint.c thread.h toke.c universal.c unixish.h util.c util.h + ! vars.h +____________________________________________________________________________ +[ 75] By: nick on 1997/09/28 15:45:35 + Log: Quasi sensible starting point for aTHIS addition. + Branch: oneperl + ! perl.c perl.h pp_ctl.c sv.c thread.h toke.c util.c +____________________________________________________________________________ +[ 74] By: nick on 1997/09/28 11:23:32 + Log: Ooops - unwind perly.* stuff for now + Branch: oneperl + ! perly.c perly.h perly.y vms/perly_c.vms vms/perly_h.vms +____________________________________________________________________________ +[ 73] By: nick on 1997/09/28 11:17:23 + Log: Builds and passes all tests again + Branch: oneperl + ! embed.pl ext/DB_File/DB_File.xs gv.c perl.c perl.h perly.y + ! pp.h proto.h thread.sym vms/perly_c.vms vms/perly_h.vms +____________________________________________________________________________ +[ 72] By: nick on 1997/09/28 10:47:01 + Log: Save "important things" before re-try + Branch: oneperl + + vars.h + ! embed.pl thread.h thread.sym +____________________________________________________________________________ +[ 71] By: nick on 1997/09/26 17:47:31 + Log: Basic hacks to build with USE_THISPTR, not yet useful + but builds miniperl and passes minitest with all thread + variables via a _GLOBAL_ thr variable rather than globals. + Now for the local thr variable ... + Branch: oneperl + + thread.sym + ! MANIFEST README.threads XSUB.h av.c cv.h deb.c doio.c doop.c + ! dump.c embed.pl ext/DB_File/DB_File.xs gv.c hints/solaris_2.sh + ! hv.c mg.c op.c perl.c perl.h pp.c pp_ctl.c pp_hot.c pp_sys.c + ! proto.h regcomp.c regexec.c run.c scope.c sv.c thread.h toke.c + ! util.c vms/vms.c +____________________________________________________________________________ +[ 70] By: mbeattie on 1997/09/23 14:29:23 + Log: Branch oneperl from mainline. + Branch: oneperl + +> (branch 871 files) +____________________________________________________________________________ +[ 69] By: mbeattie on 1997/09/22 16:02:37 + Log: struct thread now stored in an SV and uses '~'-magic for access. + Branch: perl + ! thread.h + Branch: perlext + ! Thread/Thread.xs Thread/typemap +____________________________________________________________________________ +[ 68] By: mbeattie on 1997/09/22 16:01:48 + Log: runops becomes a funtion pointer and sv_bless3 created + to avoid pointer forgery with '~'-magic. + Branch: perl + ! global.sym perl.c perl.h pp.c proto.h run.c sv.c +____________________________________________________________________________ +[ 67] By: mbeattie on 1997/09/22 15:45:56 + Log: More fprintf -> PerlIO_printf changes. + Branch: perl + ! perl.c pp_hot.c util.c +____________________________________________________________________________ +[ 66] By: mbeattie on 1997/09/22 15:10:40 + Log: Minor multi-threading patches for VMS. + Branch: perl + ! mg.c thread.h vms/vms.c +____________________________________________________________________________ +[ 65] By: mbeattie on 1997/09/15 14:09:11 + Log: Add undefined-subs option to Lint.pm. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 64] By: mbeattie on 1997/09/10 16:39:41 + Log: Debugging output for lock handling. + Branch: perl + ! mg.c pp.c pp_hot.c util.c +____________________________________________________________________________ +[ 63] By: mbeattie on 1997/09/10 14:49:00 + Log: Move Thread/Semaphore.pm to Thread/Thread/Semaphore.pm + Branch: perlext + +> Thread/Thread/Semaphore.pm + - Thread/Semaphore.pm +____________________________________________________________________________ +[ 62] By: mbeattie on 1997/09/10 14:47:31 + Log: Move Thread/Queue.pm to Thread/Thread/Queue.pm + Branch: perlext + +> Thread/Thread/Queue.pm + - Thread/Queue.pm +____________________________________________________________________________ +[ 61] By: mbeattie on 1997/09/10 13:56:50 + Log: Solaris fixes: delete pad and padname from thread.h and remove + MUTEX_* stuff when malloc.c gets copied to x2p/malloc.c. + Branch: perl + ! thread.h x2p/Makefile.SH + +---------------- +Version 5.004_50 First developer release towards 5.005 +---------------- + +Maintenance of the 5.004 version of perl continues with the 5.004_xx +series, where 'xx' is <= 49. Development of the next version, 5.005, +starts with 5.004_50. + +____________________________________________________________________________ +[ 60] By: mbeattie on 1997/09/09 16:57:41 + Log: Update README.threads to mention -DL. + Branch: perl + ! README.threads +____________________________________________________________________________ +[ 59] By: mbeattie on 1997/09/09 16:49:08 + Log: Add Thread modules Queue.pm and Semaphore.pm + Branch: perlext + + Thread/Queue.pm Thread/Semaphore.pm +____________________________________________________________________________ +[ 58] By: mbeattie on 1997/09/09 16:33:45 + Log: Update README.threads + Branch: perl + ! README.threads +____________________________________________________________________________ +[ 57] By: mbeattie on 1997/09/09 16:26:47 + Log: Add debug info to Thread typemap. + Branch: perlext + ! Thread/typemap +____________________________________________________________________________ +[ 56] By: mbeattie on 1997/09/09 15:04:26 + Log: Rewrite synchronisation of subs/methods and add attrs + extension for specifying 'locked' and 'method' attributes. + Branch: perl + + ext/attrs/Makefile.PL ext/attrs/attrs.pm ext/attrs/attrs.xs + ! MANIFEST cv.h embed.h global.sym op.c perl.c pp.c pp_ctl.c + ! pp_hot.c proto.h sv.c sv.h toke.c + Branch: perlext + ! Thread/Thread.pm Thread/Thread.xs Thread/sync.t Thread/sync2.t +____________________________________________________________________________ +[ 55] By: mbeattie on 1997/09/03 16:34:47 + Log: Add new keyword "lock" to Opcode.pm + Branch: perl + ! ext/Opcode/Opcode.pm +____________________________________________________________________________ +[ 54] By: mbeattie on 1997/09/03 14:44:44 + Log: Run embed.pl and keywords.pl to complete RESTART -> INIT change + Branch: perl + ! embed.h keywords.h +____________________________________________________________________________ +[ 53] By: mbeattie on 1997/09/03 13:52:24 + Log: Add to MANIFEST: README.threads, lib/ISA.pm, lib/Class/Fields.pm + Branch: perl + ! MANIFEST +____________________________________________________________________________ +[ 52] By: mbeattie on 1997/09/03 13:41:20 + Log: Let Lint private_names catch out-of-package _foo methods. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 51] By: mbeattie on 1997/09/03 13:20:12 + Log: Bump patchlevel.h to 5.004_50 + Branch: perl + ! patchlevel.h +____________________________________________________________________________ +[ 50] By: mbeattie on 1997/09/03 12:31:48 + Log: Make compiler build/work with devel 5.005 + Branch: perlext + ! Compiler/B.xs Compiler/B/Asmdata.pm Compiler/bytecode.h + ! Compiler/bytecode.pl Compiler/byterun.c Compiler/byterun.h +____________________________________________________________________________ +[ 49] By: mbeattie on 1997/09/03 12:28:05 + Log: Rename RESTART to INIT and associated changes + Branch: perl + ! interp.sym keywords.pl op.c perl.c perl.h perly.c perly.y + ! toke.c vms/perly_c.vms +____________________________________________________________________________ +[ 48] By: mbeattie on 1997/09/02 15:54:27 + Log: Added private-names option. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 47] By: mbeattie on 1997/09/02 11:54:55 + Log: For compiler's CC, make PP_EVAL, PP_ENTERTRY work with JMPENV. + Branch: perlext + ! Compiler/cc_runtime.h +____________________________________________________________________________ +[ 46] By: mbeattie on 1997/08/28 19:40:08 + Log: Missing sprintf in try_autoload. + Branch: perlext + ! Compiler/B/C.pm +____________________________________________________________________________ +[ 45] By: mbeattie on 1997/08/13 16:15:25 + Log: Threading fixups for Digital UNIX. + Branch: perl + ! README.threads malloc.c perl.h toke.c +____________________________________________________________________________ +[ 44] By: mbeattie on 1997/08/11 15:46:29 + Log: Assorted changes for multi-threading (now works rather more). + Branch: perl + + README.threads + ! gv.c mg.c op.c perl.c perl.h pp_ctl.c pp_hot.c sv.c thread.h + ! toke.c util.c + Branch: perlext + ! Thread/Makefile.PL Thread/Thread.xs Thread/lock.t + ! Thread/unsync.t +____________________________________________________________________________ +[ 43] By: mbeattie on 1997/08/08 14:11:00 + Log: Made Lint check subs (and -u packages). + Added support for dollar_underscore and implicit $_ in foreach. + Branch: perlext + ! Compiler/B/Lint.pm +____________________________________________________________________________ +[ 42] By: TimBunce on 1997/07/25 17:15:57 + Log: Maintenance 5.004_01 changes + Branch: maint-5.004/perl + + Porting/makerel Porting/patchls hints/newsos4.sh + + lib/File/DosGlob.pm lib/chat2.pl perlio.sym win32/config.bc + + win32/config.vc win32/config_H.bc win32/config_H.vc + + win32/makefile.mk + - win32/config.H win32/config.w32 + ! Changes Configure EXTERN.h INSTALL MANIFEST Makefile.SH + ! Porting/pumpkin.pod README README.win32 doio.c embed.h + ! ext/DynaLoader/dl_aix.xs ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs + ! ext/SDBM_File/Makefile.PL ext/SDBM_File/sdbm/Makefile.PL + ! global.sym hints/next_3.sh hints/next_4.sh hints/svr4.sh + ! installhtml installman lib/AutoLoader.pm lib/AutoSplit.pm + ! lib/CGI/Push.pm lib/CPAN.pm lib/ExtUtils/Install.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm + ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm + ! lib/ExtUtils/xsubpp lib/Pod/Html.pm lib/Pod/Text.pm + ! lib/Sys/Syslog.pm lib/Term/ReadLine.pm lib/Test/Harness.pm + ! lib/ftp.pl mg.c op.c patchlevel.h perl.c perl.h perl_exp.SH + ! perlio.c pod/checkpods.PL pod/perlbook.pod pod/perldata.pod + ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod + ! pod/perlembed.pod pod/perlfaq4.pod pod/perlfaq8.pod + ! pod/perlfaq9.pod pod/perlfunc.pod pod/perlguts.pod + ! pod/perllol.pod pod/perlop.pod pod/perlrun.pod pod/perlsub.pod + ! pod/perltoc.pod pod/perltoot.pod pod/pod2man.PL pod/roffitall + ! pod/splitpod pp.c pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c + ! regcomp.h regexec.c sv.c t/lib/safe2.t t/op/flip.t + ! t/op/groups.t t/op/magic.t t/op/mkdir.t t/op/re_tests + ! t/op/regexp.t t/op/split.t t/op/stat.t t/op/subst.t + ! t/op/taint.t util.c utils/Makefile utils/h2xs.PL + ! utils/perlbug.PL vms/ext/DCLsym/DCLsym.pm + ! vms/ext/Stdio/Stdio.pm vms/gen_shrfls.pl vms/perlvms.pod + ! win32/Makefile win32/config_sh.PL win32/include/sys/socket.h + ! win32/makedef.pl win32/makeperldef.pl win32/perlglob.c + ! win32/perllib.c win32/win32.c win32/win32.h win32/win32io.c + ! win32/win32io.h win32/win32iop.h win32/win32sck.c +____________________________________________________________________________ +[ 41] By: mbeattie on 1997/07/24 14:57:53 + Log: Start support for fake threads. + pp_lock now returns its argument. + Branch: perl + ! MANIFEST Makefile.SH cv.h op.c opcode.h opcode.pl perl.c + ! perl.h pp.c pp_ctl.c pp_hot.c proto.h sv.h thread.h toke.c + ! util.c + Branch: perlext + ! Thread/Thread.xs +____________________________________________________________________________ +[ 40] By: mbeattie on 1997/07/24 14:55:07 + Log: Add missing reset of eval_owner if doeval() fails to parse. + Branch: perl + ! pp_ctl.c +____________________________________________________________________________ +[ 39] By: mbeattie on 1997/07/17 13:35:51 + Log: Fix multiple problems with lexical @_. + Branch: perl + ! cop.h op.c perl.c pp.c pp_ctl.c pp_hot.c t/op/do.t thread.h + ! toke.c +____________________________________________________________________________ +[ 38] By: mbeattie on 1997/07/16 17:02:09 + Log: Change %lx to %x in B::CV::save to prevent some CV + fields becoming 0 in the init section. Add missing + write_back in B::Stackobj::Padsv::load_double to fix + test 22 of op/my.t. + Branch: perlext + ! Compiler/B/C.pm Compiler/B/Stackobj.pm +____________________________________________________________________________ +[ 37] By: mbeattie on 1997/07/10 11:28:16 + Log: Branch win32 developments from main perl branch. + Branch: win32/perl + +> (branch 867 files) +____________________________________________________________________________ +[ 36] By: mbeattie on 1997/07/05 11:58:05 + Log: B::CC::pp_padsv must cope with vivify_ref (5.004) + as well as provide_ref (5.003). + Branch: perlext + ! Compiler/B/C.pm Compiler/B/CC.pm Compiler/NOTES +____________________________________________________________________________ +[ 35] By: mbeattie on 1997/07/05 11:55:18 + Log: Introduce pp_lock. + Branch: perl + ! embed.h global.sym keywords.h keywords.pl opcode.h opcode.pl + ! pp.c pp_ctl.c toke.c +____________________________________________________________________________ +[ 34] By: mbeattie on 1997/07/01 12:24:28 + Log: Support for op in global register (still buggy) + Branch: perl + ! embed.h global.sym gv.c op.c perl.c perl.h pp_ctl.c pp_sys.c + ! proto.h scope.c scope.h thread.h +____________________________________________________________________________ +[ 33] By: mbeattie on 1997/06/24 16:34:24 + Log: Branch lexical warnings from perl branch. + Branch: lexwarn/perl + +> (branch 867 files) +____________________________________________________________________________ +[ 32] By: mbeattie on 1997/06/24 14:33:57 + Log: Branch integration of maint-5.004 from relperl. + Branch: mainline/perl + +> (branch 600 files) + Branch: maint-5.004/perl + +> (branch 864 files) +____________________________________________________________________________ +[ 31] By: mbeattie on 1997/06/20 11:46:50 + Log: corrected bad_type() prototype. + Branch: perl + ! op.c +____________________________________________________________________________ +[ 30] By: mbeattie on 1997/06/12 12:38:05 + Log: Tweak README. + Branch: perlext + ! Thread/README +____________________________________________________________________________ +[ 29] By: mbeattie on 1997/06/12 12:34:59 + Log: Document -m option of CC backend. + Branch: perlext + ! Compiler/NOTES +____________________________________________________________________________ +[ 28] By: mbeattie on 1997/06/12 12:25:05 + Log: Support sysseek introduced in 5.004. + Branch: perlext + ! Compiler/ccop.c Compiler/ccop.h +____________________________________________________________________________ +[ 27] By: mbeattie on 1997/06/05 14:20:51 + Log: More fixups for thrperl integration. + Branch: perl + ! ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + ! ext/Opcode/Makefile.PL ext/Opcode/Opcode.pm + ! ext/Opcode/Opcode.xs gv.c hv.c mg.c op.c perl.c perly.c + ! perly.y pp.c pp_ctl.c run.c scope.c sv.c sv.h thread.h toke.c + ! util.c +____________________________________________________________________________ +[ 25] By: mbeattie on 1997/05/28 15:11:24 + Log: Fixups for thrperl integration. + Branch: perl + ! embed.h keywords.h op.c opcode.h perl.c util.c +____________________________________________________________________________ +[ 24] By: mbeattie on 1997/05/26 20:10:42 + Log: Integrate thrperl 5.003->5.004. + Branch: perl + +> thread.h + !> (integrate 33 files) +____________________________________________________________________________ +[ 23] By: mbeattie on 1997/05/26 11:45:39 + Log: Fix ppname when saving subs. + Branch: perlext + ! Compiler/B/C.pm +____________________________________________________________________________ +[ 22] By: mbeattie on 1997/05/26 11:45:03 + Log: -mFoo option now forces -uFoo. + Branch: perlext + ! Compiler/B/CC.pm +____________________________________________________________________________ +[ 21] By: mbeattie on 1997/05/26 11:43:37 + Log: Put back objsym/savesym (used by walkoptree_exec). + Branch: perlext + ! Compiler/B.pm +____________________________________________________________________________ +[ 20] By: mbeattie on 1997/05/26 11:38:45 + Log: Add avhv_store_ent. Add missing avhv_* to global.sym. + Branch: perl + ! av.c global.sym +____________________________________________________________________________ +[ 19] By: mbeattie on 1997/05/25 21:19:38 + Log: Fix up integration 5.003->5.004. + Branch: perl + + lib/Class/Fields.pm lib/ISA.pm + ! av.c ext/DB_File/DB_File.xs perl.c pp.c pp_hot.c proto.h + ! toke.c +____________________________________________________________________________ +[ 18] By: mbeattie on 1997/05/25 10:31:21 + Log: First stab at 5.003 -> 5.004 integration. + Branch: perl + +> (branch 291 files) + - Changes.Conf ext/DynaLoader/dl_os2.xs + - ext/FileHandle/FileHandle.pm ext/FileHandle/FileHandle.xs + - ext/FileHandle/Makefile.PL ext/SDBM_File/sdbm/readme.ps + - ext/Safe/Makefile.PL ext/Safe/Safe.pm ext/Safe/Safe.xs + - hints/aux.sh hints/dnix.sh hints/irix_6_2.sh lib/chat2.inter + - lib/chat2.pl lib/splain os2/README os2/README.old + - os2/diff.db_file os2/notes pod/perlovl.pod t/lib/safe.t + - t/op/overload.t t/re_tests vms/Makefile x2p/a2p.man + - x2p/handy.h x2p/s2p.man + !> (integrate 392 files) +____________________________________________________________________________ +[ 17] By: mbeattie on 1997/05/24 18:46:49 + Log: Wholesale update to 5.004. + Branch: relperl + + Changes5.000 Changes5.001 Changes5.002 Changes5.003 + + Porting/Glossary Porting/pumpkin.pod README.amiga + + README.cygwin32 README.os2 README.plan9 README.qnx + + README.win32 compat3.sym configure.gnu cygwin32/cw32imp.h + + cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc cygwin32/perlld + + eg/cgi/RunMeFirst eg/cgi/clickable_image.cgi eg/cgi/cookie.cgi + + eg/cgi/crash.cgi eg/cgi/customize.cgi eg/cgi/diff_upload.cgi + + eg/cgi/file_upload.cgi eg/cgi/frameset.cgi eg/cgi/index.html + + eg/cgi/internal_links.cgi eg/cgi/javascript.cgi + + eg/cgi/monty.cgi eg/cgi/multiple_forms.cgi + + eg/cgi/nph-clock.cgi eg/cgi/popup.cgi eg/cgi/save_state.cgi + + eg/cgi/tryit.cgi eg/cgi/wilogo.gif.uu + + ext/DynaLoader/dl_cygwin32.xs ext/IO/IO.pm ext/IO/IO.xs + + ext/IO/Makefile.PL ext/IO/README ext/IO/lib/IO/File.pm + + ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Pipe.pm + + ext/IO/lib/IO/Seekable.pm ext/IO/lib/IO/Select.pm + + ext/IO/lib/IO/Socket.pm ext/NDBM_File/hints/dec_osf.pl + + ext/NDBM_File/hints/dynixptx.pl ext/ODBM_File/hints/hpux.pl + + ext/ODBM_File/hints/ultrix.pl ext/Opcode/Makefile.PL + + ext/Opcode/Opcode.pm ext/Opcode/Opcode.xs ext/Opcode/Safe.pm + + ext/Opcode/ops.pm ext/POSIX/hints/next_3.pl hints/amigaos.sh + + hints/aux_3.sh hints/broken-db.msg hints/cygwin32.sh + + hints/dcosx.sh hints/irix_6_0.sh hints/irix_6_1.sh + + hints/lynxos.sh hints/next_4.sh hints/qnx.sh hints/umips.sh + + hints/unicosmk.sh installhtml lib/Bundle/CPAN.pm lib/CGI.pm + + lib/CGI/Apache.pm lib/CGI/Carp.pm lib/CGI/Fast.pm + + lib/CGI/Push.pm lib/CGI/Switch.pm lib/CPAN.pm + + lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm lib/Class/Struct.pm + + lib/ExtUtils/Command.pm lib/ExtUtils/Embed.pm + + lib/ExtUtils/MM_Win32.pm lib/File/Compare.pm lib/File/stat.pm + + lib/FileHandle.pm lib/FindBin.pm lib/Math/Trig.pm + + lib/Net/hostent.pm lib/Net/netent.pm lib/Net/protoent.pm + + lib/Net/servent.pm lib/Pod/Html.pm lib/Tie/RefHash.pm + + lib/Time/gmtime.pm lib/Time/localtime.pm lib/Time/tm.pm + + lib/UNIVERSAL.pm lib/User/grent.pm lib/User/pwent.pm + + lib/autouse.pm lib/blib.pm lib/constant.pm lib/locale.pm + + nostdio.h os2/Changes os2/OS2/ExtAttr/Changes + + os2/OS2/ExtAttr/ExtAttr.pm os2/OS2/ExtAttr/ExtAttr.xs + + os2/OS2/ExtAttr/MANIFEST os2/OS2/ExtAttr/Makefile.PL + + os2/OS2/ExtAttr/myea.h os2/OS2/ExtAttr/t/os2_ea.t + + os2/OS2/ExtAttr/typemap os2/OS2/PrfDB/Changes + + os2/OS2/PrfDB/MANIFEST os2/OS2/PrfDB/Makefile.PL + + os2/OS2/PrfDB/PrfDB.pm os2/OS2/PrfDB/PrfDB.xs + + os2/OS2/PrfDB/t/os2_prfdb.t os2/OS2/PrfDB/typemap + + os2/OS2/Process/MANIFEST os2/OS2/Process/Makefile.PL + + os2/OS2/Process/Process.pm os2/OS2/Process/Process.xs + + os2/OS2/REXX/Changes os2/OS2/REXX/MANIFEST + + os2/OS2/REXX/Makefile.PL os2/OS2/REXX/REXX.pm + + os2/OS2/REXX/REXX.xs os2/OS2/REXX/t/rx_cmprt.t + + os2/OS2/REXX/t/rx_dllld.t os2/OS2/REXX/t/rx_objcall.t + + os2/OS2/REXX/t/rx_sql.test os2/OS2/REXX/t/rx_tiesql.test + + os2/OS2/REXX/t/rx_tievar.t os2/OS2/REXX/t/rx_tieydb.t + + os2/OS2/REXX/t/rx_varset.t os2/OS2/REXX/t/rx_vrexx.t + + os2/dl_os2.c os2/dlfcn.h perlio.c perlio.h perlsdio.h + + perlsfio.h plan9/aperl plan9/arpa/inet.h plan9/buildinfo + + plan9/config.plan9 plan9/exclude plan9/fndvers + + plan9/genconfig.pl plan9/mkfile plan9/myconfig.plan9 + + plan9/perlplan9.doc plan9/perlplan9.pod plan9/plan9.c + + plan9/plan9ish.h plan9/setup.rc plan9/versnum pod/checkpods.PL + + pod/perlapio.pod pod/perldelta.pod pod/perlfaq.pod + + pod/perlfaq1.pod pod/perlfaq2.pod pod/perlfaq3.pod + + pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq6.pod + + pod/perlfaq7.pod pod/perlfaq8.pod pod/perlfaq9.pod + + pod/perllocale.pod pod/perlmodlib.pod pod/perltoot.pod + + pod/rofftoc qnx/ar qnx/cpp t/comp/colon.t t/comp/proto.t + + t/comp/redef.t t/comp/use.t t/io/read.t t/lib/abbrev.t + + t/lib/autoloader.t t/lib/basename.t t/lib/checktree.t + + t/lib/complex.t t/lib/env.t t/lib/filecache.t t/lib/filecopy.t + + t/lib/filefind.t t/lib/filepath.t t/lib/findbin.t + + t/lib/getopt.t t/lib/hostname.t t/lib/io_dup.t t/lib/io_pipe.t + + t/lib/io_sel.t t/lib/io_sock.t t/lib/io_taint.t + + t/lib/io_tell.t t/lib/io_udp.t t/lib/io_xs.t t/lib/opcode.t + + t/lib/open2.t t/lib/open3.t t/lib/ops.t t/lib/parsewords.t + + t/lib/safe1.t t/lib/safe2.t t/lib/searchdict.t + + t/lib/selectsaver.t t/lib/symbol.t t/lib/texttabs.t + + t/lib/textwrap.t t/lib/timelocal.t t/lib/trig.t t/op/arith.t + + t/op/assignwarn.t t/op/bop.t t/op/closure.t t/op/cmp.t + + t/op/gv.t t/op/inc.t t/op/method.t t/op/recurse.t + + t/op/runlevel.t t/op/sysio.t t/op/taint.t t/op/tie.t + + t/op/universal.t t/pragma/constant.t t/pragma/locale.t + + t/pragma/overload.t t/pragma/strict-refs t/pragma/strict-subs + + t/pragma/strict-vars t/pragma/strict.t t/pragma/subs.t + + t/pragma/warn-1global t/pragma/warning.t universal.c + + utils/splain.PL vms/ext/DCLsym/0README.txt + + vms/ext/DCLsym/DCLsym.pm vms/ext/DCLsym/DCLsym.xs + + vms/ext/DCLsym/Makefile.PL vms/ext/DCLsym/test.pl + + vms/ext/XSSymSet.pm vms/ext/filespec.t vms/ext/vmsish.pm + + vms/ext/vmsish.t win32/Makefile win32/TEST win32/autosplit.pl + + win32/bin/network.pl win32/bin/pl2bat.bat win32/bin/search.bat + + win32/bin/test.bat win32/bin/webget.bat win32/bin/www.pl + + win32/config.H win32/config.w32 win32/config_h.PL + + win32/config_sh.PL win32/dl_win32.xs win32/genxsdef.pl + + win32/include/arpa/inet.h win32/include/dirent.h + + win32/include/netdb.h win32/include/sys/socket.h + + win32/makedef.pl win32/makemain.pl win32/makeperldef.pl + + win32/perlglob.c win32/perllib.c win32/pod.mak win32/runperl.c + + win32/splittree.pl win32/win32.c win32/win32.h win32/win32io.c + + win32/win32io.h win32/win32iop.h win32/win32sck.c x2p/a2p.pod + + x2p/proto.h + - Changes.Conf ext/DynaLoader/dl_os2.xs + - ext/FileHandle/FileHandle.pm ext/FileHandle/FileHandle.xs + - ext/FileHandle/Makefile.PL ext/SDBM_File/sdbm/readme.ps + - ext/Safe/Makefile.PL ext/Safe/Safe.pm ext/Safe/Safe.xs + - hints/aux.sh hints/dnix.sh hints/irix_6_2.sh lib/chat2.inter + - lib/chat2.pl lib/splain os2/README os2/README.old + - os2/diff.db_file os2/notes pod/perlovl.pod t/lib/safe.t + - t/op/overload.t t/re_tests vms/Makefile x2p/a2p.man + - x2p/handy.h x2p/s2p.man + ! Artistic Changes Configure EXTERN.h INSTALL INTERN.h MANIFEST + ! Makefile.SH README README.vms Todo XSUB.h av.c av.h cflags.SH + ! config_H config_h.SH configpm configure cop.h cv.h deb.c + ! doio.c doop.c dosish.h dump.c eg/README eg/nih + ! eg/sysvipc/ipcmsg eg/sysvipc/ipcsem eg/sysvipc/ipcshm + ! emacs/cperl-mode.el embed.h embed.pl ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/Makefile.PL + ! ext/DB_File/typemap ext/DynaLoader/DynaLoader.pm + ! ext/DynaLoader/Makefile.PL ext/DynaLoader/dl_aix.xs + ! ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_dlopen.xs + ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs + ! ext/DynaLoader/dl_vms.xs ext/DynaLoader/dlutils.c + ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs + ! ext/GDBM_File/GDBM_File.pm ext/NDBM_File/NDBM_File.pm + ! ext/ODBM_File/ODBM_File.pm ext/ODBM_File/ODBM_File.xs + ! ext/ODBM_File/hints/dec_osf.pl ext/POSIX/POSIX.pm + ! ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs + ! ext/SDBM_File/Makefile.PL ext/SDBM_File/SDBM_File.pm + ! ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/pair.c + ! ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/sdbm.3 + ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h + ! ext/Socket/Socket.pm ext/Socket/Socket.xs ext/util/make_ext + ! form.h global.sym gv.c gv.h handy.h hints/3b1.sh + ! hints/README.hints hints/aix.sh hints/apollo.sh hints/bsdos.sh + ! hints/convexos.sh hints/cxux.sh hints/dec_osf.sh hints/dgux.sh + ! hints/dynixptx.sh hints/epix.sh hints/esix4.sh + ! hints/freebsd.sh hints/hpux.sh hints/irix_4.sh hints/irix_5.sh + ! hints/irix_6.sh hints/isc.sh hints/linux.sh hints/machten.sh + ! hints/machten_2.sh hints/mips.sh hints/mpeix.sh + ! hints/netbsd.sh hints/next_3.sh hints/next_3_0.sh hints/os2.sh + ! hints/powerux.sh hints/sco.sh hints/sco_2_3_3.sh + ! hints/sco_2_3_4.sh hints/solaris_2.sh hints/sunos_4_0.sh + ! hints/sunos_4_1.sh hints/svr4.sh hints/titanos.sh + ! hints/ultrix_4.sh hints/unicos.sh hints/utekv.sh hv.c hv.h + ! installman installperl interp.sym keywords.h keywords.pl + ! lib/AnyDBM_File.pm lib/AutoLoader.pm lib/AutoSplit.pm + ! lib/Benchmark.pm lib/Carp.pm lib/Cwd.pm + ! lib/Devel/SelfStubber.pm lib/English.pm lib/Env.pm + ! lib/Exporter.pm lib/ExtUtils/Install.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_OS2.pm + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm + ! lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/Mksymlists.pm + ! lib/ExtUtils/testlib.pm lib/ExtUtils/typemap + ! lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/Copy.pm + ! lib/File/Find.pm lib/File/Path.pm lib/FileCache.pm + ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/I18N/Collate.pm + ! lib/IPC/Open2.pm lib/IPC/Open3.pm lib/Math/BigInt.pm + ! lib/Math/Complex.pm lib/Net/Ping.pm lib/Pod/Functions.pm + ! lib/Pod/Text.pm lib/Search/Dict.pm lib/SelectSaver.pm + ! lib/SelfLoader.pm lib/Symbol.pm lib/Sys/Hostname.pm + ! lib/Sys/Syslog.pm lib/Term/Cap.pm lib/Term/Complete.pm + ! lib/Term/ReadLine.pm lib/Test/Harness.pm lib/Text/Abbrev.pm + ! lib/Text/ParseWords.pm lib/Text/Soundex.pm lib/Text/Tabs.pm + ! lib/Text/Wrap.pm lib/Tie/Hash.pm lib/Tie/Scalar.pm + ! lib/Tie/SubstrHash.pm lib/Time/Local.pm lib/abbrev.pl + ! lib/bigfloat.pl lib/bigint.pl lib/cacheout.pl lib/complete.pl + ! lib/diagnostics.pm lib/dotsh.pl lib/dumpvar.pl lib/find.pl + ! lib/finddepth.pl lib/ftp.pl lib/getcwd.pl lib/getopts.pl + ! lib/importenv.pl lib/lib.pm lib/look.pl lib/newgetopt.pl + ! lib/open2.pl lib/open3.pl lib/overload.pm lib/perl5db.pl + ! lib/sigtrap.pm lib/strict.pm lib/subs.pm lib/syslog.pl + ! lib/termcap.pl lib/timelocal.pl lib/validate.pl lib/vars.pm + ! makeaperl.SH makedepend.SH malloc.c mg.c mg.h minimod.pl + ! miniperlmain.c myconfig op.c op.h opcode.h opcode.pl + ! os2/Makefile.SHs os2/diff.configure os2/os2.c os2/os2ish.h + ! os2/perl2cmd.pl patchlevel.h perl.c perl.h perl_exp.SH perlsh + ! perly.c perly.c.diff perly.h perly.y pod/Makefile pod/buildtoc + ! pod/perl.pod pod/perlbook.pod pod/perlbot.pod pod/perlcall.pod + ! pod/perldata.pod pod/perldebug.pod pod/perldiag.pod + ! pod/perldsc.pod pod/perlembed.pod pod/perlform.pod + ! pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod + ! pod/perllol.pod pod/perlmod.pod pod/perlobj.pod pod/perlop.pod + ! pod/perlpod.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod + ! pod/perlsec.pod pod/perlstyle.pod pod/perlsub.pod + ! pod/perlsyn.pod pod/perltie.pod pod/perltoc.pod + ! pod/perltrap.pod pod/perlvar.pod pod/perlxs.pod + ! pod/perlxstut.pod pod/pod2html.PL pod/pod2latex.PL + ! pod/pod2man.PL pod/pod2text.PL pod/roffitall pp.c pp.h + ! pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regcomp.h + ! regexec.c regexp.h run.c scope.c scope.h sv.c sv.h t/README + ! t/TEST t/base/lex.t t/base/term.t t/cmd/mod.t t/cmd/while.t + ! t/comp/cpp.t t/comp/multiline.t t/comp/package.t + ! t/comp/script.t t/harness t/io/argv.t t/io/dup.t t/io/fs.t + ! t/io/inplace.t t/io/pipe.t t/io/tell.t t/lib/anydbm.t + ! t/lib/bigintpm.t t/lib/db-btree.t t/lib/db-hash.t + ! t/lib/db-recno.t t/lib/dirhand.t t/lib/filehand.t t/lib/gdbm.t + ! t/lib/ndbm.t t/lib/odbm.t t/lib/posix.t t/lib/sdbm.t + ! t/lib/socket.t t/op/chop.t t/op/delete.t t/op/each.t + ! t/op/exec.t t/op/fork.t t/op/glob.t t/op/goto.t t/op/groups.t + ! t/op/magic.t t/op/misc.t t/op/mkdir.t t/op/my.t t/op/oct.t + ! t/op/pack.t t/op/pat.t t/op/quotemeta.t t/op/rand.t + ! t/op/re_tests t/op/readdir.t t/op/ref.t t/op/regexp.t + ! t/op/sleep.t t/op/sort.t t/op/split.t t/op/stat.t t/op/subst.t + ! t/op/substr.t t/op/write.t taint.c toke.c unixish.h util.c + ! util.h utils/Makefile utils/c2ph.PL utils/h2ph.PL + ! utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL + ! vms/config.vms vms/descrip.mms vms/ext/Filespec.pm + ! vms/ext/Stdio/Stdio.pm vms/ext/Stdio/Stdio.xs + ! vms/ext/Stdio/test.pl vms/fndvers.com vms/gen_shrfls.pl + ! vms/genconfig.pl vms/genopt.com vms/myconfig.com + ! vms/perlvms.pod vms/perly_c.vms vms/perly_h.vms + ! vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c + ! vms/vms_yfix.pl vms/vmsish.h vms/writemain.pl writemain.SH + ! x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h + ! x2p/a2p.y x2p/a2py.c x2p/cflags.SH x2p/find2perl.PL x2p/hash.c + ! x2p/hash.h x2p/s2p.PL x2p/str.c x2p/str.h x2p/util.c + ! x2p/util.h x2p/walk.c +____________________________________________________________________________ +[ 16] By: mbeattie on 1997/05/23 22:42:08 + Log: Initial integration of relperl from 5.003. + Branch: relperl + +> (branch 600 files) +____________________________________________________________________________ +[ 14] By: mbeattie on 1997/05/12 20:22:56 + Log: Finish code generation rewrite. Clean up B::Section class and + handle symbol table translation internally. Simple .pm modules + now compile OK. + Branch: perlext + ! Compiler/B.pm Compiler/B/Bblock.pm Compiler/B/C.pm + ! Compiler/B/CC.pm +____________________________________________________________________________ +[ 13] By: mbeattie on 1997/05/05 19:41:18 + Log: Don't make pp_enter and pp_return trigger basic blocks. + Branch: perlext + ! Compiler/B/Bblock.pm +____________________________________________________________________________ +[ 12] By: mbeattie on 1997/05/05 19:40:16 + Log: Rewrite code generation. Sections (de)multiplexed into a + temporary file instead of stored in arrays. + Branch: perlext + ! Compiler/B.pm Compiler/B/C.pm Compiler/B/CC.pm +____________________________________________________________________________ +[ 11] By: mbeattie on 1997/05/03 20:20:59 + Log: Development to pre-alpha4 + Branch: perlext + + Compiler/B/Deparse.pm Compiler/B/Lint.pm Compiler/makeliblinks + ! Compiler/B.pm Compiler/B.xs Compiler/B/Bblock.pm + ! Compiler/B/Bytecode.pm Compiler/B/C.pm Compiler/B/CC.pm + ! Compiler/B/Debug.pm Compiler/B/Terse.pm Compiler/B/Xref.pm + ! Compiler/Makefile.PL Compiler/README Compiler/TESTS + ! Compiler/assemble Compiler/bytecode.pl Compiler/byteperl.c + ! Compiler/byterun.c Compiler/cc_runtime.h Compiler/disassemble + ! Compiler/test_harness Compiler/test_harness_cc +____________________________________________________________________________ +[ 10] By: mbeattie on 1997/05/03 14:47:06 + Log: Initial check-in of perl compiler. + Branch: perlext + + Compiler/Artistic Compiler/B.pm Compiler/B.xs + + Compiler/B/Asmdata.pm Compiler/B/Assembler.pm + + Compiler/B/Bblock.pm Compiler/B/Bytecode.pm Compiler/B/C.pm + + Compiler/B/CC.pm Compiler/B/Debug.pm + + Compiler/B/Disassembler.pm Compiler/B/Showlex.pm + + Compiler/B/Stackobj.pm Compiler/B/Terse.pm Compiler/B/Xref.pm + + Compiler/Copying Compiler/Makefile.PL Compiler/NOTES + + Compiler/O.pm Compiler/README Compiler/TESTS + + Compiler/TESTS.alpha2 Compiler/Todo Compiler/assemble + + Compiler/bytecode.h Compiler/bytecode.pl Compiler/byteperl.c + + Compiler/byterun.c Compiler/byterun.h Compiler/cc_harness + + Compiler/cc_runtime.h Compiler/ccop.c Compiler/ccop.h + + Compiler/disassemble Compiler/old/README.feb11 + + Compiler/old/TESTS.mar11 Compiler/old/TESTS.mar20 + + Compiler/old/TESTS.may11 Compiler/old/TESTS.pre-jul27 + + Compiler/op.patch Compiler/ramblings/cc.notes + + Compiler/ramblings/curcop.runtime + + Compiler/ramblings/dontparse.c Compiler/ramblings/flip-flop + + Compiler/ramblings/foo.bench Compiler/ramblings/foo2.bench + + Compiler/ramblings/foo3.bench Compiler/ramblings/magic + + Compiler/ramblings/pp_i_add Compiler/ramblings/reg.alloc + + Compiler/ramblings/runtime.porting + + Compiler/ramblings/sort.notes Compiler/ramblings/sub.call + + Compiler/ramblings/subst.notes Compiler/run_bytecode_test + + Compiler/run_cc_test Compiler/run_test Compiler/test_harness + + Compiler/test_harness_bytecode Compiler/test_harness_cc + + Compiler/typemap +____________________________________________________________________________ +[ 9] By: mbeattie on 1997/05/02 19:03:49 + Log: Don't require CvDEPTH == 0 when bombing out of subs. + Branch: thrperl + ! pp_hot.c +____________________________________________________________________________ +[ 8] By: mbeattie on 1997/04/23 19:06:45 + Log: Added programmer-level condition variables via "condpair" magic. + Added support for detached threads and tweaked a few things. + Branch: thrperl + ! embed.h global.sym keywords.h mg.c opcode.h perl.c perl.h + ! pp_ctl.c pp_hot.c proto.h run.c scope.c sv.c sv.h thread.h + ! util.c +____________________________________________________________________________ +[ 7] By: mbeattie on 1997/04/23 19:04:18 + Log: Rewrote programmer-level condition variables from scratch. Added + support for detaching threads. Fixed handling for arguments + passed in to threads and return values for joined threads. + Branch: perlext + + Thread/lock.t + ! Thread/README Thread/Thread.pm Thread/Thread.xs Thread/cond.t + ! Thread/typemap +____________________________________________________________________________ +[ 6] By: mbeattie on 1997/04/10 20:17:26 + Log: Initial check-in of Thread module. + Branch: perlext + + Thread/Makefile.PL Thread/Notes Thread/README Thread/Thread.pm + + Thread/Thread.xs Thread/cond.t Thread/create.t Thread/io.t + + Thread/join.t Thread/sync.t Thread/sync2.t Thread/typemap + + Thread/unsync.t Thread/unsync2.t Thread/unsync3.t + + Thread/unsync4.t +____________________________________________________________________________ +[ 5] By: mbeattie on 1997/04/10 20:05:52 + Log: Tweaks to allow compilation without -DUSE_THREADS and fix + missing parens (pad allocation) in the tokener. + Branch: thrperl + ! op.c pp_ctl.c toke.c +____________________________________________________________________________ +[ 4] By: mbeattie on 1997/03/28 18:40:44 + Log: Initial 3-way merge from (5.001m, thr1m, 5.003) plus fixups. + Branch: thrperl + + thread.h + ! XSUB.h av.c cv.h deb.c doio.c doop.c dump.c global.sym gv.c + ! hv.c malloc.c mg.c op.c op.h opcode.h opcode.pl perl.c perl.h + ! pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regexec.c + ! run.c scope.c sv.c sv.h toke.c util.c +____________________________________________________________________________ +[ 3] By: mbeattie on 1997/03/28 13:36:23 + Log: Branch 5.003 -> thrperl + Branch: thrperl + +> (branch 600 files) +____________________________________________________________________________ +[ 2] By: mbeattie on 1997/03/28 13:32:21 + Log: Initial devel changes. + Pseudo-hashes. Optional strong typing. RESTART {}. + Branch: perl + ! av.c doop.c embed.h ext/DB_File/DB_File.xs global.sym + ! interp.sym keywords.h keywords.pl lib/ExtUtils/xsubpp op.c + ! perl.c perl.h pp.c pp_hot.c proto.h t/op/groups.t toke.c +____________________________________________________________________________ +[ 1] By: mbeattie on 1997/03/28 13:17:33 + Log: Perl 5.003 check-in + Branch: perl + + Artistic Changes Changes.Conf Configure Copying EXTERN.h + + INSTALL INTERN.h MANIFEST Makefile.SH README README.vms Todo + + XSUB.h av.c av.h cflags.SH config_H config_h.SH configpm + + configure cop.h cv.h deb.c doio.c doop.c dosish.h dump.c + + eg/ADB eg/README eg/changes eg/client eg/down eg/dus eg/findcp + + eg/findtar eg/g/gcp eg/g/gcp.man eg/g/ged eg/g/ghosts eg/g/gsh + + eg/g/gsh.man eg/muck eg/muck.man eg/myrup eg/nih eg/relink + + eg/rename eg/rmfrom eg/scan/scan_df eg/scan/scan_last + + eg/scan/scan_messages eg/scan/scan_passwd eg/scan/scan_ps + + eg/scan/scan_sudo eg/scan/scan_suid eg/scan/scanner eg/server + + eg/shmkill eg/sysvipc/README eg/sysvipc/ipcmsg + + eg/sysvipc/ipcsem eg/sysvipc/ipcshm eg/travesty eg/unuc + + eg/uudecode eg/van/empty eg/van/unvanish eg/van/vanexp + + eg/van/vanish eg/who eg/wrapsuid emacs/cperl-mode.el embed.h + + embed.pl ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + + ext/DB_File/DB_File_BS ext/DB_File/Makefile.PL + + ext/DB_File/typemap ext/DynaLoader/DynaLoader.pm + + ext/DynaLoader/Makefile.PL ext/DynaLoader/README + + ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_dld.xs + + ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs + + ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_none.xs + + ext/DynaLoader/dl_os2.xs ext/DynaLoader/dl_vms.xs + + ext/DynaLoader/dlutils.c ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs + + ext/Fcntl/Makefile.PL ext/FileHandle/FileHandle.pm + + ext/FileHandle/FileHandle.xs ext/FileHandle/Makefile.PL + + ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs + + ext/GDBM_File/Makefile.PL ext/GDBM_File/typemap + + ext/NDBM_File/Makefile.PL ext/NDBM_File/NDBM_File.pm + + ext/NDBM_File/NDBM_File.xs ext/NDBM_File/hints/solaris.pl + + ext/NDBM_File/hints/svr4.pl ext/NDBM_File/typemap + + ext/ODBM_File/Makefile.PL ext/ODBM_File/ODBM_File.pm + + ext/ODBM_File/ODBM_File.xs ext/ODBM_File/hints/dec_osf.pl + + ext/ODBM_File/hints/sco.pl ext/ODBM_File/hints/solaris.pl + + ext/ODBM_File/hints/svr4.pl ext/ODBM_File/typemap + + ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod + + ext/POSIX/POSIX.xs ext/POSIX/typemap ext/SDBM_File/Makefile.PL + + ext/SDBM_File/SDBM_File.pm ext/SDBM_File/SDBM_File.xs + + ext/SDBM_File/sdbm/CHANGES ext/SDBM_File/sdbm/COMPARE + + ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/README + + ext/SDBM_File/sdbm/README.too ext/SDBM_File/sdbm/biblio + + ext/SDBM_File/sdbm/dba.c ext/SDBM_File/sdbm/dbd.c + + ext/SDBM_File/sdbm/dbe.1 ext/SDBM_File/sdbm/dbe.c + + ext/SDBM_File/sdbm/dbm.c ext/SDBM_File/sdbm/dbm.h + + ext/SDBM_File/sdbm/dbu.c ext/SDBM_File/sdbm/grind + + ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/linux.patches + + ext/SDBM_File/sdbm/makefile.sdbm ext/SDBM_File/sdbm/pair.c + + ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/readme.ms + + ext/SDBM_File/sdbm/readme.ps ext/SDBM_File/sdbm/sdbm.3 + + ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h + + ext/SDBM_File/sdbm/tune.h ext/SDBM_File/sdbm/util.c + + ext/SDBM_File/typemap ext/Safe/Makefile.PL ext/Safe/Safe.pm + + ext/Safe/Safe.xs ext/Socket/Makefile.PL ext/Socket/Socket.pm + + ext/Socket/Socket.xs ext/util/extliblist ext/util/make_ext + + ext/util/mkbootstrap form.h global.sym globals.c gv.c gv.h + + h2pl/README h2pl/cbreak.pl h2pl/cbreak2.pl h2pl/eg/sizeof.ph + + h2pl/eg/sys/errno.pl h2pl/eg/sys/ioctl.pl h2pl/eg/sysexits.pl + + h2pl/getioctlsizes h2pl/mksizes h2pl/mkvars h2pl/tcbreak + + h2pl/tcbreak2 handy.h hints/3b1.sh hints/3b1cc + + hints/README.hints hints/aix.sh hints/altos486.sh + + hints/apollo.sh hints/aux.sh hints/bsdos.sh hints/convexos.sh + + hints/cxux.sh hints/dec_osf.sh hints/dgux.sh hints/dnix.sh + + hints/dynix.sh hints/dynixptx.sh hints/epix.sh hints/esix4.sh + + hints/fps.sh hints/freebsd.sh hints/genix.sh + + hints/greenhills.sh hints/hpux.sh hints/i386.sh + + hints/irix_4.sh hints/irix_5.sh hints/irix_6.sh + + hints/irix_6_2.sh hints/isc.sh hints/isc_2.sh hints/linux.sh + + hints/machten.sh hints/machten_2.sh hints/mips.sh hints/mpc.sh + + hints/mpeix.sh hints/ncr_tower.sh hints/netbsd.sh + + hints/next_3.sh hints/next_3_0.sh hints/opus.sh hints/os2.sh + + hints/powerux.sh hints/sco.sh hints/sco_2_3_0.sh + + hints/sco_2_3_1.sh hints/sco_2_3_2.sh hints/sco_2_3_3.sh + + hints/sco_2_3_4.sh hints/solaris_2.sh hints/stellar.sh + + hints/sunos_4_0.sh hints/sunos_4_1.sh hints/svr4.sh + + hints/ti1500.sh hints/titanos.sh hints/ultrix_4.sh + + hints/unicos.sh hints/unisysdynix.sh hints/utekv.sh + + hints/uts.sh hv.c hv.h installman installperl interp.sym + + keywords.h keywords.pl lib/AnyDBM_File.pm lib/AutoLoader.pm + + lib/AutoSplit.pm lib/Benchmark.pm lib/Carp.pm lib/Cwd.pm + + lib/Devel/SelfStubber.pm lib/DirHandle.pm lib/English.pm + + lib/Env.pm lib/Exporter.pm lib/ExtUtils/Install.pm + + lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_OS2.pm + + lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm + + lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm + + lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/Mksymlists.pm + + lib/ExtUtils/testlib.pm lib/ExtUtils/typemap + + lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/CheckTree.pm + + lib/File/Copy.pm lib/File/Find.pm lib/File/Path.pm + + lib/FileCache.pm lib/Getopt/Long.pm lib/Getopt/Std.pm + + lib/I18N/Collate.pm lib/IPC/Open2.pm lib/IPC/Open3.pm + + lib/Math/BigFloat.pm lib/Math/BigInt.pm lib/Math/Complex.pm + + lib/Net/Ping.pm lib/Pod/Functions.pm lib/Pod/Text.pm + + lib/Search/Dict.pm lib/SelectSaver.pm lib/SelfLoader.pm + + lib/Shell.pm lib/Symbol.pm lib/Sys/Hostname.pm + + lib/Sys/Syslog.pm lib/Term/Cap.pm lib/Term/Complete.pm + + lib/Term/ReadLine.pm lib/Test/Harness.pm lib/Text/Abbrev.pm + + lib/Text/ParseWords.pm lib/Text/Soundex.pm lib/Text/Tabs.pm + + lib/Text/Wrap.pm lib/Tie/Hash.pm lib/Tie/Scalar.pm + + lib/Tie/SubstrHash.pm lib/Time/Local.pm lib/abbrev.pl + + lib/assert.pl lib/bigfloat.pl lib/bigint.pl lib/bigrat.pl + + lib/cacheout.pl lib/chat2.inter lib/chat2.pl lib/complete.pl + + lib/ctime.pl lib/diagnostics.pm lib/dotsh.pl lib/dumpvar.pl + + lib/exceptions.pl lib/fastcwd.pl lib/find.pl lib/finddepth.pl + + lib/flush.pl lib/ftp.pl lib/getcwd.pl lib/getopt.pl + + lib/getopts.pl lib/hostname.pl lib/importenv.pl lib/integer.pm + + lib/less.pm lib/lib.pm lib/look.pl lib/newgetopt.pl + + lib/open2.pl lib/open3.pl lib/overload.pm lib/perl5db.pl + + lib/pwd.pl lib/shellwords.pl lib/sigtrap.pm lib/splain + + lib/stat.pl lib/strict.pm lib/subs.pm lib/syslog.pl + + lib/tainted.pl lib/termcap.pl lib/timelocal.pl lib/validate.pl + + lib/vars.pm makeaperl.SH makedepend.SH makedir.SH malloc.c + + mg.c mg.h minimod.pl miniperlmain.c mv-if-diff myconfig op.c + + op.h opcode.h opcode.pl os2/Makefile.SHs os2/POSIX.mkfifo + + os2/README os2/README.old os2/diff.configure os2/diff.db_file + + os2/notes os2/os2.c os2/os2ish.h os2/perl2cmd.pl patchlevel.h + + perl.c perl.h perl_exp.SH perlsh perly.c perly.c.diff + + perly.fixer perly.h perly.y pod/Makefile pod/buildtoc + + pod/perl.pod pod/perlbook.pod pod/perlbot.pod pod/perlcall.pod + + pod/perldata.pod pod/perldebug.pod pod/perldiag.pod + + pod/perldsc.pod pod/perlembed.pod pod/perlform.pod + + pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod + + pod/perllol.pod pod/perlmod.pod pod/perlobj.pod pod/perlop.pod + + pod/perlovl.pod pod/perlpod.pod pod/perlre.pod pod/perlref.pod + + pod/perlrun.pod pod/perlsec.pod pod/perlstyle.pod + + pod/perlsub.pod pod/perlsyn.pod pod/perltie.pod + + pod/perltoc.pod pod/perltrap.pod pod/perlvar.pod + + pod/perlxs.pod pod/perlxstut.pod pod/pod2html.PL + + pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL pod/roffitall + + pod/splitman pod/splitpod pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c + + proto.h regcomp.c regcomp.h regexec.c regexp.h run.c scope.c + + scope.h sv.c sv.h t/README t/TEST t/base/cond.t t/base/if.t + + t/base/lex.t t/base/pat.t t/base/term.t t/cmd/elsif.t + + t/cmd/for.t t/cmd/mod.t t/cmd/subval.t t/cmd/switch.t + + t/cmd/while.t t/comp/cmdopt.t t/comp/cpp.aux t/comp/cpp.t + + t/comp/decl.t t/comp/multiline.t t/comp/package.t + + t/comp/script.t t/comp/term.t t/harness t/io/argv.t t/io/dup.t + + t/io/fs.t t/io/inplace.t t/io/pipe.t t/io/print.t t/io/tell.t + + t/lib/anydbm.t t/lib/bigint.t t/lib/bigintpm.t + + t/lib/db-btree.t t/lib/db-hash.t t/lib/db-recno.t + + t/lib/dirhand.t t/lib/english.t t/lib/filehand.t t/lib/gdbm.t + + t/lib/ndbm.t t/lib/odbm.t t/lib/posix.t t/lib/safe.t + + t/lib/sdbm.t t/lib/socket.t t/lib/soundex.t t/op/append.t + + t/op/array.t t/op/auto.t t/op/chop.t t/op/cond.t t/op/delete.t + + t/op/do.t t/op/each.t t/op/eval.t t/op/exec.t t/op/exp.t + + t/op/flip.t t/op/fork.t t/op/glob.t t/op/goto.t t/op/groups.t + + t/op/index.t t/op/int.t t/op/join.t t/op/list.t t/op/local.t + + t/op/magic.t t/op/misc.t t/op/mkdir.t t/op/my.t t/op/oct.t + + t/op/ord.t t/op/overload.t t/op/pack.t t/op/pat.t t/op/push.t + + t/op/quotemeta.t t/op/rand.t t/op/range.t t/op/re_tests + + t/op/read.t t/op/readdir.t t/op/ref.t t/op/regexp.t + + t/op/repeat.t t/op/sleep.t t/op/sort.t t/op/split.t + + t/op/sprintf.t t/op/stat.t t/op/study.t t/op/subst.t + + t/op/substr.t t/op/time.t t/op/undef.t t/op/unshift.t + + t/op/vec.t t/op/write.t t/re_tests taint.c toke.c unixish.h + + util.c util.h utils/Makefile utils/c2ph.PL utils/h2ph.PL + + utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL + + vms/Makefile vms/config.vms vms/descrip.mms + + vms/ext/Filespec.pm vms/ext/Stdio/0README.txt + + vms/ext/Stdio/Makefile.PL vms/ext/Stdio/Stdio.pm + + vms/ext/Stdio/Stdio.xs vms/ext/Stdio/test.pl vms/fndvers.com + + vms/gen_shrfls.pl vms/genconfig.pl vms/genopt.com + + vms/make_command.com vms/mms2make.pl vms/myconfig.com + + vms/perlvms.pod vms/perly_c.vms vms/perly_h.vms + + vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c + + vms/vms_yfix.pl vms/vmsish.h vms/writemain.pl writemain.SH + + x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h + + x2p/a2p.man x2p/a2p.y x2p/a2py.c x2p/cflags.SH + + x2p/find2perl.PL x2p/handy.h x2p/hash.c x2p/hash.h x2p/s2p.PL + + x2p/s2p.man x2p/str.c x2p/str.h x2p/util.c x2p/util.h + + x2p/walk.c diff --git a/gnu/usr.bin/perl/MAINTAIN b/gnu/usr.bin/perl/MAINTAIN new file mode 100644 index 00000000000..37ef4896637 --- /dev/null +++ b/gnu/usr.bin/perl/MAINTAIN @@ -0,0 +1,879 @@ +# In addition to actual maintainers this file also lists "interested parties". +# +# The maintainer aliases come from AUTHORS. They may be defined in +# a layered way: 'doc' expands to tchrist which expands to Tom Christiansen. +# +# A file that is in MANIFEST need not be here at all. +# In any case, if nobody else is listed as maintainer, +# PUMPKING (from AUTHORS) should be it. +# +# Filenames can contain * which means qr(.*) on the filenames found +# using File::Find (it's _not_ filename glob). +# +# Maintainership definitions are of course cumulative: if A maintains +# X/* and B maintains X/Y/Z, if X/Y/Z is changed, both A and B should +# be notified. +# +# The filename(glob) and the maintainer(s) are separated by one or more tabs. + +Artistic +Changes +Changes5.000 +Changes5.001 +Changes5.002 +Changes5.003 +Changes5.004 +Changes5.005 +Configure cfg +Copying +EXTERN.h +INSTALL +INTERN.h +MANIFEST +Makefile.SH +objXSUB.h +Policy_sh.SH +Porting/* cfg +Porting/Contract +Porting/Glossary +Porting/config.sh +Porting/config_H +Porting/findvars +Porting/fixCORE +Porting/fixvars +Porting/genlog +Porting/makerel +Porting/p4d2p +Porting/p4desc +Porting/patching.pod dgris +Porting/patchls +Porting/pumpkin.pod +README +README.amiga amiga +README.beos beos +README.cygwin cygwin +README.dos dos +README.hpux hpux +README.lexwarn lexwarn +README.machten machten +README.mpeix mpeix +README.os2 os2 +README.os390 mvs +README.plan9 plan9 +README.posix-bc posix-bc +README.qnx qnx +README.threads +README.vmesa vmesa +README.vms vms +README.vos vos +README.win32 win32 +Todo +Todo-5.005 +XSlock.h +XSUB.h +av.c +av.h +beos/* beos +bytecode.h +bytecode.pl +byterun.c +byterun.h +cc_runtime.h +cflags.SH +config_h.SH cfg +configpm +configure.com vms +configure.gnu +cop.h +cv.h +cygwin/* cygwin +deb.c +djgpp/* dos +doio.c +doop.c +dosish.h +dump.c +ebcdic.c +eg/ADB +eg/README +eg/cgi/* cgi +eg/changes +eg/client +eg/down +eg/dus +eg/findcp +eg/findtar +eg/g/gcp +eg/g/gcp.man +eg/g/ged +eg/g/ghosts +eg/g/gsh +eg/g/gsh.man +eg/muck +eg/muck.man +eg/myrup +eg/nih +eg/relink +eg/rename +eg/rmfrom +eg/scan/scan_df +eg/scan/scan_last +eg/scan/scan_messages +eg/scan/scan_passwd +eg/scan/scan_ps +eg/scan/scan_sudo +eg/scan/scan_suid +eg/scan/scanner +eg/server +eg/shmkill +eg/sysvipc/README +eg/sysvipc/ipcmsg +eg/sysvipc/ipcsem +eg/sysvipc/ipcshm +eg/travesty +eg/unuc +eg/uudecode +eg/van/empty +eg/van/unvanish +eg/van/vanexp +eg/van/vanish +eg/who +eg/wrapsuid +emacs/* ilya +embed.h +embed.pl +embedvar.h +ext/*/hints* cfg +ext/B/* nik +ext/B/B/Deparse.pm smccam +ext/DB_File* pmarquess +ext/DB_File/hints/dynixptx.pl dynix/ptx +ext/Data/Dumper/* gsar +ext/Devel/DProf/* +ext/Devel/Peek/* ilya +ext/DynaLoader/DynaLoader_pm.PL +ext/DynaLoader/Makefile.PL +ext/DynaLoader/README +ext/DynaLoader/dl_aix.xs aix +ext/DynaLoader/dl_dld.xs rsanders +ext/DynaLoader/dl_dlopen.xs timb +ext/DynaLoader/dl_hpux.xs hpux +ext/DynaLoader/dl_mpeix.xs mpeix +ext/DynaLoader/dl_next.xs next +ext/DynaLoader/dl_none.xs +ext/DynaLoader/dl_vms.xs vms +ext/DynaLoader/dl_vmesa.xs vmesa +ext/DynaLoader/dlutils.c +ext/DynaLoader/hints/linux.pl linux +ext/Errno/* gbarr +ext/Fcntl/* jhi +ext/GDBM_File/GDBM_File.pm +ext/GDBM_File/GDBM_File.xs +ext/GDBM_File/Makefile.PL +ext/GDBM_File/typemap +ext/IO/* +ext/IPC/SysV/* gbarr +ext/NDBM_File/Makefile.PL +ext/NDBM_File/NDBM_File.pm +ext/NDBM_File/NDBM_File.xs +ext/NDBM_File/hints/dec_osf.pl dec_osf +ext/NDBM_File/hints/dynixptx.pl dynix/ptx +ext/NDBM_File/hints/solaris.pl solaris +ext/NDBM_File/hints/svr4.pl svr4 +ext/NDBM_File/typemap +ext/ODBM_File/Makefile.PL +ext/ODBM_File/ODBM_File.pm +ext/ODBM_File/ODBM_File.xs +ext/ODBM_File/hints/dec_osf.pl dec_osf +ext/ODBM_File/hints/hpux.pl hpux +ext/ODBM_File/hints/sco.pl sco +ext/ODBM_File/hints/solaris.pl solaris +ext/ODBM_File/hints/svr4.pl svr4 +ext/ODBM_File/hints/ultrix.pl +ext/ODBM_File/typemap +ext/Opcode/Makefile.PL +ext/Opcode/Opcode.pm +ext/Opcode/Opcode.xs +ext/Opcode/Safe.pm +ext/Opcode/ops.pm +ext/POSIX/Makefile.PL +ext/POSIX/POSIX.pm +ext/POSIX/POSIX.pod +ext/POSIX/POSIX.xs +ext/POSIX/hints/bsdos.pl bsdos +ext/POSIX/hints/dynixptx.pl dynix/ptx +ext/POSIX/hints/freebsd.pl freebsd +ext/POSIX/hints/linux.pl linux +ext/POSIX/hints/netbsd.pl netbsd +ext/POSIX/hints/next_3.pl next +ext/POSIX/hints/openbsd.pl openbsd +ext/POSIX/hints/sunos_4.pl sunos4 +ext/POSIX/typemap +ext/SDBM_File/Makefile.PL +ext/SDBM_File/SDBM_File.pm +ext/SDBM_File/SDBM_File.xs +ext/SDBM_File/sdbm/CHANGES +ext/SDBM_File/sdbm/COMPARE +ext/SDBM_File/sdbm/Makefile.PL +ext/SDBM_File/sdbm/README +ext/SDBM_File/sdbm/README.too +ext/SDBM_File/sdbm/biblio +ext/SDBM_File/sdbm/dba.c +ext/SDBM_File/sdbm/dbd.c +ext/SDBM_File/sdbm/dbe.1 +ext/SDBM_File/sdbm/dbe.c +ext/SDBM_File/sdbm/dbm.c +ext/SDBM_File/sdbm/dbm.h +ext/SDBM_File/sdbm/dbu.c +ext/SDBM_File/sdbm/grind +ext/SDBM_File/sdbm/hash.c +ext/SDBM_File/sdbm/linux.patches +ext/SDBM_File/sdbm/makefile.sdbm +ext/SDBM_File/sdbm/pair.c +ext/SDBM_File/sdbm/pair.h +ext/SDBM_File/sdbm/readme.ms +ext/SDBM_File/sdbm/sdbm.3 +ext/SDBM_File/sdbm/sdbm.c +ext/SDBM_File/sdbm/sdbm.h +ext/SDBM_File/sdbm/tune.h +ext/SDBM_File/sdbm/util.c +ext/SDBM_File/typemap +ext/Socket/Makefile.PL +ext/Socket/Socket.pm +ext/Socket/Socket.xs +ext/Thread/Makefile.PL +ext/Thread/Notes +ext/Thread/README +ext/Thread/Thread.pm +ext/Thread/Thread.xs +ext/Thread/Thread/Queue.pm +ext/Thread/Thread/Semaphore.pm +ext/Thread/Thread/Signal.pm +ext/Thread/Thread/Specific.pm +ext/Thread/create.t +ext/Thread/die.t +ext/Thread/die2.t +ext/Thread/io.t +ext/Thread/join.t +ext/Thread/join2.t +ext/Thread/list.t +ext/Thread/lock.t +ext/Thread/queue.t +ext/Thread/specific.t +ext/Thread/sync.t +ext/Thread/sync2.t +ext/Thread/typemap +ext/Thread/unsync.t +ext/Thread/unsync2.t +ext/Thread/unsync3.t +ext/Thread/unsync4.t +ext/attrs/Makefile.PL +ext/attrs/attrs.pm +ext/attrs/attrs.xs +ext/re/Makefile.PL +ext/re/hints/mpeix.pl mpeix +ext/re/re.pm regex +ext/re/re.xs regex +ext/util/make_ext +ext/util/mkbootstrap +fakethr.h +form.h +global.sym +globals.c +globvar.sym +gv.c +gv.h +h2pl/README +h2pl/cbreak.pl +h2pl/cbreak2.pl +h2pl/eg/sizeof.ph +h2pl/eg/sys/errno.pl +h2pl/eg/sys/ioctl.pl +h2pl/eg/sysexits.pl +h2pl/getioctlsizes +h2pl/mksizes +h2pl/mkvars +h2pl/tcbreak +h2pl/tcbreak2 +handy.h +hints/* cfg +hints/3b1.sh +hints/3b1cc +hints/README.hints +hints/aix.sh aix +hints/altos486.sh +hints/amigaos.sh amiga +hints/apollo.sh +hints/aux_3.sh +hints/beos.sh beos +hints/broken-db.msg +hints/bsdos.sh bsdos +hints/convexos.sh +hints/cxux.sh cxux +hints/cygwin.sh cygwinx +hints/dcosx.sh +hints/dec_osf.sh dec_osf +hints/dgux.sh dgux +hints/dos_djgpp.sh dos +hints/dynix.sh dynix/ptx +hints/dynixptx.sh dynix/ptx +hints/epix.sh +hints/esix4.sh +hints/fps.sh +hints/freebsd.sh freebsd +hints/genix.sh +hints/greenhills.sh +hints/hpux.sh hpux +hints/i386.sh +hints/irix* irix +hints/isc.sh +hints/isc_2.sh +hints/linux.sh linux +hints/lynxos.sh lynxos +hints/machten.sh machten +hints/machten_2.sh +hints/mips.sh +hints/mpc.sh +hints/mpeix.sh mpeix +hints/ncr_tower.sh +hints/netbsd.sh netbsd +hints/newsos4.sh +hints/next* step +hints/openbsd.sh openbsd +hints/opus.sh +hints/os2.sh os2 +hints/os390.sh mvs +hints/posix-bc.sh posix-bc +hints/powerux.sh powerux +hints/qnx.sh qnx +hints/sco.sh +hints/sco_2_3_0.sh +hints/sco_2_3_1.sh +hints/sco_2_3_2.sh +hints/sco_2_3_3.sh +hints/sco_2_3_4.sh +hints/solaris_2.sh solaris +hints/stellar.sh +hints/sunos_4* sunos4 +hints/svr4.sh svr4 +hints/ti1500.sh +hints/titanos.sh +hints/ultrix_4.sh ultrix +hints/umips.sh +hints/unicos* unicos +hints/unisysdynix.sh +hints/utekv.sh +hints/uts.sh +hints/uwin.sh uwin +hints/vmesa.sh vmesa +hv.c +hv.h +installhtml +installman +installperl +intrpvar.h +iperlsys.h +jpl/* jpl +keywords.h +keywords.pl +lib/AnyDBM_File.pm +lib/AutoLoader.pm +lib/AutoSplit.pm +lib/Benchmark.pm jhi,timb +lib/CGI* cgi +lib/CPAN* cpan +lib/Carp.pm +lib/Class/Struct.pm tchrist +lib/Cwd.pm +lib/Devel/SelfStubber.pm +lib/DirHandle.pm +lib/English.pm +lib/Env.pm +lib/Exporter.pm +lib/ExtUtils/* mm +lib/ExtUtils/Command.pm nik +lib/ExtUtils/Embed.pm doug +lib/ExtUtils/Installed.pm alan.burlison +lib/ExtUtils/Mksymlists.pm cbail +lib/ExtUtils/MM_OS2.pm os2 +lib/ExtUtils/MM_VMS.pm vms +lib/ExtUtils/MM_Win32.pm win32 +lib/ExtUtils/Packlist.pm alan.burlison +lib/Fatal.pm +lib/File/Basename.pm +lib/File/CheckTree.pm +lib/File/Compare.pm nik +lib/File/Copy.pm cbail +lib/File/DosGlob.pm gsar +lib/File/Find.pm +lib/File/Path.pm timb,cbail +lib/File/Spec* kjahds +lib/File/Spec/Mac.pm schinder +lib/File/Spec/OS2.pm ilya +lib/File/Spec/VMS.pm vms +lib/File/Spec/Win32.pm win32 +lib/File/stat.pm tchrist +lib/FileCache.pm +lib/FileHandle.pm +lib/FindBin.pm +lib/Getopt/Long.pm jvromans +lib/I18N/Collate.pm jhi +lib/IPC/Open2.pm +lib/IPC/Open3.pm +lib/Math/BigFloat.pm mbiggar +lib/Math/BigInt.pm mbiggar +lib/Math/Complex.pm complex +lib/Math/Trig.pm complex +lib/Net/Ping.pm +lib/Net/hostent.pm tchrist +lib/Net/netent.pm tchrist +lib/Net/protoent.pm tchrist +lib/Net/servent.pm tchrist +lib/Pod/Checker.pm bradapp +lib/Pod/Functions.pm +lib/Pod/Html.pm tchrist +lib/Pod/InputObjects.pm bradapp +lib/Pod/Parser.pm bradapp +lib/Pod/PlainText.pm bradapp +lib/Pod/Select.pm bradapp +lib/Pod/Text.pm tchrist +lib/Pod/Usage.pm bradapp +lib/Search/Dict.pm +lib/SelectSaver.pm +lib/SelfLoader.pm +lib/Shell.pm +lib/Symbol.pm +lib/Sys/Hostname.pm sundstrom +lib/Sys/Syslog.pm tchrist +lib/Term/Cap.pm +lib/Term/Complete.pm wayne.thompson +lib/Term/ReadLine.pm +lib/Test.pm +lib/Test/Harness.pm k +lib/Text/Abbrev.pm +lib/Text/ParseWords.pm pomeranz +lib/Text/Soundex.pm stok +lib/Text/Tabs.pm muir +lib/Text/Wrap.pm muir +lib/Tie/Array.pm nik +lib/Tie/Handle.pm +lib/Tie/Hash.pm +lib/Tie/RefHash.pm gsar +lib/Tie/Scalar.pm +lib/Tie/SubstrHash.pm +lib/Time/Local.pm pomeranz +lib/Time/gmtime.pm tchrist +lib/Time/localtime.pm tchrist +lib/Time/tm.pm tchrist +lib/UNIVERSAL.pm +lib/User/grent.pm tchrist +lib/User/pwent.pm tchrist +lib/abbrev.pl +lib/assert.pl +lib/autouse.pm +lib/base.pm +lib/bigfloat.pl +lib/bigint.pl +lib/bigrat.pl +lib/blib.pm +lib/cacheout.pl +lib/charnames.pm ilya +lib/chat2.pl +lib/complete.pl +lib/constant.pm +lib/ctime.pl +lib/diagnostics.pm doc +lib/dotsh.pl +lib/dumpvar.pl +lib/exceptions.pl +lib/fastcwd.pl +lib/fields.pm +lib/filetest.pm +lib/find.pl +lib/finddepth.pl +lib/flush.pl +lib/ftp.pl +lib/getcwd.pl +lib/getopt.pl +lib/getopts.pl +lib/hostname.pl +lib/importenv.pl +lib/integer.pm +lib/less.pm +lib/lib.pm +lib/locale.pm locale +lib/look.pl +lib/newgetopt.pl +lib/open2.pl +lib/open3.pl +lib/overload.pm ilya +lib/perl5db.pl ilya +lib/pwd.pl +lib/shellwords.pl +lib/sigtrap.pm +lib/stat.pl +lib/strict.pm +lib/subs.pm +lib/syslog.pl +lib/tainted.pl +lib/termcap.pl +lib/timelocal.pl +lib/unicode/*Ethiopic* dmulholl +lib/unicode* lwall +lib/utf8* lwall +lib/validate.pl +lib/vars.pm +lib/warning.pm lexwarn +makeaperl.SH +makedepend.SH +makedir.SH +malloc.c ilya +mg.c +mg.h +minimod.pl +miniperlmain.c +mpeix/* mpeix +mv-if-diff +myconfig +nostdio.h +op.c +op.h +opcode.h +opcode.pl +os2/* ilya +patchlevel.h +perl.c +perl.h +perl_exp.SH +perlio.c +perlio.h +perlio.sym +perlsdio.h +perlsfio.h +perlsh +perlvars.h +perly.c +perly_c.diff +perly.fixer +perly.h +perly.y +plan9/* plan9 +pod/pod2usage.PL bradapp +pod/podchecker.PL bradapp +pod/podselect.PL bradapp +pod/* doc +pod/buildtoc +pod/checkpods.PL +pod/perl.pod +pod/perlapio.pod +pod/perlbook.pod +pod/perlbot.pod +pod/perlcall.pod pmarquess +pod/perldata.pod +pod/perldebug.pod +pod/perldelta.pod +pod/perl5005delta.pod +pod/perl5004delta.pod +pod/perldiag.pod +pod/perldsc.pod tchrist +pod/perlembed.pod doug,jon +pod/perlfaq* gnat +pod/perlform.pod +pod/perlfunc.pod +pod/perlguts.pod +pod/perlhist.pod jhi +pod/perlipc.pod tchrist +pod/perllocale.pod locale +pod/perllol.pod tchrist +pod/perlmod.pod +pod/perlmodinstall.pod jon +pod/perlmodlib.pod +pod/perlobj.pod +pod/perlop.pod +pod/perlpod.pod lwall +pod/perlport.pod pudge +pod/perlre.pod regex +pod/perlref.pod +pod/perlreftut.pod mjd +pod/perlrun.pod +pod/perlsec.pod +pod/perlstyle.pod +pod/perlsub.pod +pod/perlsyn.pod +pod/perltie.pod tchrist +pod/perltoc.pod +pod/perltoot.pod tchrist +pod/perltrap.pod +pod/perlvar.pod +pod/perlxs.pod roehrich +pod/perlxstut.pod okamoto +pod/pod2html.PL +pod/pod2latex.PL +pod/pod2man.PL +pod/pod2text.PL +pod/roffitall +pod/rofftoc +pod/splitman +pod/splitpod +pp.c +pp.h +pp.sym +pp_ctl.c +pp_hot.c +pp_proto.h +pp_sys.c +proto.h +qnx/* qnx +regcomp.c regex +regcomp.h regex +regcomp.pl regex +regcomp.sym regex +regexec.c regex +regexp.h regex +regnodes.h regex +run.c +scope.c +scope.h +sv.c +sv.h +t/README +t/TEST +t/UTEST +t/base/cond.t +t/base/if.t +t/base/lex.t +t/base/pat.t +t/base/rs.t +t/base/term.t +t/cmd/elsif.t +t/cmd/for.t +t/cmd/mod.t +t/cmd/subval.t +t/cmd/switch.t +t/cmd/while.t +t/comp/cmdopt.t +t/comp/colon.t +t/comp/cpp.aux +t/comp/cpp.t +t/comp/decl.t +t/comp/multiline.t +t/comp/package.t +t/comp/proto.t +t/comp/redef.t +t/comp/require.t +t/comp/script.t +t/comp/term.t +t/comp/use.t +t/harness +t/io/argv.t +t/io/dup.t +t/io/fs.t +t/io/inplace.t +t/io/iprefix.t +t/io/pipe.t +t/io/print.t +t/io/read.t +t/io/tell.t +t/lib/abbrev.t +t/lib/anydbm.t +t/lib/autoloader.t +t/lib/basename.t +t/lib/bigint.t +t/lib/bigintpm.t +t/lib/cgi-form.t +t/lib/cgi-function.t +t/lib/cgi-html.t +t/lib/cgi-request.t +t/lib/charnames.t ilya +t/lib/checktree.t +t/lib/complex.t complex +t/lib/db-btree.t pmarquess +t/lib/db-hash.t pmarquess +t/lib/db-recno.t pmarquess +t/lib/dirhand.t +t/lib/dosglob.t +t/lib/dumper-ovl.t gsar +t/lib/dumper.t gsar +t/lib/english.t +t/lib/env.t +t/lib/errno.t gbarr +t/lib/fields.t +t/lib/filecache.t +t/lib/filecopy.t +t/lib/filefind.t +t/lib/filehand.t +t/lib/filepath.t +t/lib/filespec.t kjahds +t/lib/findbin.t +t/lib/gdbm.t +t/lib/getopt.t jvromans +t/lib/h2ph* kstar +t/lib/hostname.t +t/lib/io_* gbarr +t/lib/ipc_sysv.t gbarr +t/lib/ndbm.t +t/lib/odbm.t +t/lib/opcode.t +t/lib/open2.t +t/lib/open3.t +t/lib/ops.t +t/lib/parsewords.t +t/lib/ph.t kstar +t/lib/posix.t +t/lib/safe1.t +t/lib/safe2.t +t/lib/sdbm.t +t/lib/searchdict.t +t/lib/selectsaver.t +t/lib/socket.t +t/lib/soundex.t +t/lib/symbol.t +t/lib/texttabs.t muir +t/lib/textfill.t muir +t/lib/textwrap.t +t/lib/thr5005.t +t/lib/tie-push.t +t/lib/tie-stdarray.t +t/lib/tie-stdpush.t +t/lib/timelocal.t +t/lib/trig.t +t/op/append.t +t/op/arith.t +t/op/array.t +t/op/assignwarn.t +t/op/auto.t +t/op/avhv.t +t/op/bop.t +t/op/chop.t +t/op/closure.t +t/op/cmp.t +t/op/cond.t +t/op/context.t +t/op/defins.t +t/op/delete.t +t/op/die.t +t/op/die_exit.t +t/op/do.t +t/op/each.t +t/op/eval.t +t/op/exec.t +t/op/exp.t +t/op/filetest.t +t/op/flip.t +t/op/fork.t +t/op/glob.t +t/op/goto.t +t/op/goto_xs.t +t/op/grent.t +t/op/groups.t +t/op/gv.t +t/op/hashwarn.t +t/op/inc.t +t/op/index.t +t/op/int.t +t/op/join.t +t/op/lex_assign.t +t/op/list.t +t/op/local.t +t/op/magic.t +t/op/method.t +t/op/misc.t +t/op/mkdir.t +t/op/my.t +t/op/nothr5005.t +t/op/oct.t +t/op/ord.t +t/op/pack.t +t/op/pat.t +t/op/pos.t +t/op/push.t +t/op/pwent.t +t/op/quotemeta.t +t/op/rand.t +t/op/range.t +t/op/re_tests regex +t/op/read.t +t/op/readdir.t +t/op/recurse.t +t/op/ref.t +t/op/regexp.t regex +t/op/regexp_noamp.t regex +t/op/repeat.t +t/op/runlevel.t +t/op/sleep.t +t/op/sort.t +t/op/splice.t +t/op/split.t +t/op/sprintf.t +t/op/stat.t +t/op/study.t +t/op/subst.t +t/op/substr.t +t/op/sysio.t +t/op/taint.t +t/op/tie.t +t/op/tiearray.t +t/op/tiehandle.t +t/op/time.t +t/op/tr.t +t/op/undef.t +t/op/universal.t +t/op/unshift.t +t/op/vec.t +t/op/wantarray.t +t/op/write.t +t/pod/* bradapp +t/pragma/constant.t +t/pragma/locale.t locale +t/pragma/overload.t ilya +t/pragma/strict-refs +t/pragma/strict-subs +t/pragma/strict-vars +t/pragma/strict.t +t/pragma/subs.t +t/pragma/warn/* lexwarn +t/pragma/warn/regcomp regex +t/pragma/warn/regexec regex +t/pragma/warning.t lexwarn +taint.c +thrdvar.h +thread.h +toke.c +universal.c +unixish.h +utf* lwall +utils/Makefile +utils/c2ph.PL tchrist +utils/h2ph.PL kstar +utils/h2xs.PL +utils/perlbug.PL +utils/perlcc.PL +utils/perldoc.PL +utils/pl2pm.PL +utils/splain.PL doc +vmesa/* vmesa +vms/* vms +vos/* vos +warning.h lexwarn +warning.pl lexwarn +win32/* +writemain.SH +x2p/EXTERN.h +x2p/INTERN.h +x2p/Makefile.SH +x2p/a2p.c +x2p/a2p.h +x2p/a2p.pod +x2p/a2p.y +x2p/a2py.c +x2p/cflags.SH +x2p/find2perl.PL +x2p/hash.c +x2p/hash.h +x2p/proto.h +x2p/s2p.PL +x2p/str.c +x2p/str.h +x2p/util.c +x2p/util.h +x2p/walk.c diff --git a/gnu/usr.bin/perl/Policy_sh.SH b/gnu/usr.bin/perl/Policy_sh.SH index 52a2c57da5e..0d9c1dfbc75 100644 --- a/gnu/usr.bin/perl/Policy_sh.SH +++ b/gnu/usr.bin/perl/Policy_sh.SH @@ -1,4 +1,4 @@ -case $CONFIG in +case $CONFIGDOTSH in '') . ./config.sh ;; esac echo "Extracting Policy.sh (with variable substitutions)" @@ -29,12 +29,25 @@ case "\$perladmin" in '') perladmin='$perladmin' ;; esac -# Installation prefix. Allow a Configure -D override. You +# Installation prefixes. Allow a Configure -D override. You # may wish to reinstall perl under a different prefix, perhaps # in order to test a different configuration. +# For an explanation of the installation directories, see the +# INSTALL file section on "Installation Directories". case "\$prefix" in '') prefix='$prefix' ;; esac +case "\$siteprefix" in +'') siteprefix='$siteprefix' ;; +esac +case "\$vendorprefix" in +'') vendorprefix='$vendorprefix' ;; +esac + +# Where installperl puts things. +case "\$installprefix" in +'') installprefix='$installprefix' ;; +esac # Installation directives. Note that each one comes in three flavors. # For example, we have privlib, privlibexp, and installprivlib. @@ -44,7 +57,22 @@ esac # out automatically by Configure, so you don't have to include it here. # installprivlib is for systems (such as those running AFS) that # need to distinguish between the place where things -# get installed and where they finally will reside. +# get installed and where they finally will reside. As of 5.005_6x, +# this too is handled automatically by Configure based on +# $installprefix, so it isn't included here either. +# +# Note also that there are three broad hierarchies of installation +# directories, as discussed in the INSTALL file under +# "Installation Directories": +# +# =item Directories for the perl distribution +# +# =item Directories for site-specific add-on files +# +# =item Directories for vendor-supplied add-on files +# +# See Porting/Glossary for the definitions of these names, and see the +# INSTALL file for further explanation and some examples. # # In each case, if your previous value was the default, leave it commented # out. That way, if you override prefix, all of these will be @@ -56,13 +84,17 @@ esac !GROK!THIS! -for var in bin scriptdir privlib archlib \ - man1dir man3dir sitelib sitearch \ - installbin installscript installprivlib installarchlib \ - installman1dir installman3dir installsitelib installsitearch \ - man1ext man3ext; do +for var in \ + bin scriptdir privlib archlib man1dir man3dir html1dir html3dir \ + sitebin sitescript sitelib sitearch \ + siteman1 siteman3 sitehtml1 sitehtml3 \ + vendorbin vendorscript vendorlib vendorarch \ + vendorman1 vendorman3 vendorhtml1 vendorhtml3 +do case "$var" in + + # Directories for the core perl components bin) dflt=$prefix/bin ;; # The scriptdir test is more complex, but this is probably usually ok. scriptdir) @@ -78,47 +110,73 @@ for var in bin scriptdir privlib archlib \ *) dflt=$prefix/lib/$package/$version ;; esac ;; - archlib) - case "$prefix" in - *perl*) dflt=$prefix/lib/$version/$archname ;; - *) dflt=$prefix/lib/$package/$version/$archname ;; - esac + archlib) dflt="$privlib/$archname" ;; + + man1dir) dflt="$prefix/man/man1" ;; + man3dir) dflt="$prefix/man/man3" ;; + # Can we assume all sed's have greedy matching? + man1ext) dflt=`echo $man1dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;; + man3ext) dflt=`echo $man3dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;; + + # We don't know what to do with these yet. + html1dir) dflt='' ;; + htm31dir) dflt='' ;; + + # Directories for site-specific add-on files + sitebin) dflt=$siteprefix/bin ;; + sitescript) + if $test -d $siteprefix/script; then + dflt=$siteprefix/script + else + dflt=$sitebin + fi ;; sitelib) - case "$prefix" in - *perl*) dflt=$prefix/lib/site_perl/$apiversion ;; - *) dflt=$prefix/lib/$package/site_perl/$apiversion ;; - esac - ;; - sitearch) - case "$prefix" in - *perl*) dflt=$prefix/lib/site_perl/$apiversion/$archname ;; - *) dflt=$prefix/lib/$package/site_perl/$apiversion/$archname ;; - esac - ;; - man1dir) dflt="$prefix/man/man1" ;; - man3dir) - case "$prefix" in - *perl*) dflt=`echo $man1dir | - sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;; - *) dflt=$privlib/man/man3 ;; + case "$siteprefix" in + *perl*) dflt=$prefix/lib/site_perl/$version ;; + *) dflt=$prefix/lib/$package/site_perl/$version ;; esac ;; + sitearch) dflt="$sitelib/$archname" ;; - # Can we assume all sed's have greedy matching? - man1ext) dflt=`echo $man1dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;; - man3ext) dflt=`echo $man3dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;; + siteman1) dflt="$siteprefix/man/man1" ;; + siteman3) dflt="$siteprefix/man/man3" ;; + # We don't know what to do with these yet. + sitehtml1) dflt='' ;; + sitehtm31dir) dflt='' ;; + + # Directories for vendor-supplied add-on files + # These are all usually empty. + vendor*) + if test X"$vendorprefix" = X""; then + dflt='' + else + case "$var" in + vendorbin) dflt=$vendorprefix/bin ;; + vendorscript) + if $test -d $vendorprefix/script; then + dflt=$vendorprefix/script + else + dflt=$vendorbin + fi + ;; + vendorlib) + case "$vendorprefix" in + *perl*) dflt=$prefix/lib/vendor_perl/$version ;; + *) dflt=$prefix/lib/$package/vendor_perl/$version ;; + esac + ;; + vendorarch) dflt="$vendorlib/$archname" ;; - # It might be possible to fool these next tests. Please let - # me know if they don't work right for you. - installbin) dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;; - installscript) dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;; - installprivlib) dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;; - installarchlib) dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;; - installsitelib) dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;; - installsitearch) dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;; - installman1dir) dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;; - installman3dir) dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;; + vendorman1) dflt="$vendorprefix/man/man1" ;; + vendorman3) dflt="$vendorprefix/man/man3" ;; + # We don't know what to do with these yet. + vendorhtml1) dflt='' ;; + vendorhtm3) dflt='' ;; + + esac # End of vendorprefix != '' + fi + ;; esac eval val="\$$var" @@ -148,6 +206,5 @@ $spitshell <>Policy.sh # The original design for this Policy.sh file came from Wayne Davison, # maintainer of trn. # This version for Perl5.004_61 originally written by -# Andy Dougherty . +# Andy Dougherty . # This file may be distributed under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/Porting/config.sh b/gnu/usr.bin/perl/Porting/config.sh index 20e1c4cfd78..3f29888e6c6 100644 --- a/gnu/usr.bin/perl/Porting/config.sh +++ b/gnu/usr.bin/perl/Porting/config.sh @@ -8,9 +8,9 @@ # Package name : perl5 # Source directory : . -# Configuration time: Tue Jul 21 10:03:27 EDT 1998 -# Configured by : doughera -# Target system : linux fractal 2.0.34 #1 tue jun 23 10:09:17 edt 1998 i686 unknown +# Configuration time: Tue Mar 21 23:22:20 EET 2000 +# Configured by : jhi +# Target system : osf1 alpha.hut.fi v4.0 878 alpha Author='' Date='$Date' @@ -27,33 +27,40 @@ _a='.a' _exe='' _o='.o' afs='false' -alignbytes='4' +alignbytes='8' ansi2knr='' aphostname='' -apiversion='5.005' +api_revision='5' +api_subversion='0' +api_version='5' +api_versionstring='5.005' ar='ar' -archlib='/opt/perl/lib/5.005/i686-linux-thread' -archlibexp='/opt/perl/lib/5.005/i686-linux-thread' -archname='i686-linux-thread' +archlib='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi' +archlibexp='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi' +archname64='' +archname='alpha-dec_osf-thread-multi' archobjs='' awk='awk' baserev='5.0' bash='' bin='/opt/perl/bin' +bincompat5005='undef' binexp='/opt/perl/bin' bison='' byacc='byacc' -byteorder='1234' -c='' +byteorder='12345678' +c='\c' castflags='0' cat='cat' cc='cc' -cccdlflags='-fpic' -ccdlflags='-rdynamic' -ccflags='-D_REENTRANT -Dbool=char -DHAS_BOOL -I/usr/local/include' -cf_by='doughera' +cccdlflags=' ' +ccdlflags=' -Wl,-rpath,/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi/CORE' +ccflags='-pthread -std -DLANGUAGE_C' +ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_BSD=1 SYSTYPE_BSD=1 unix=1' +cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' -cf_time='Tue Jul 21 10:03:27 EDT 1998' +cf_time='Tue Mar 21 23:22:20 EET 2000' +charsize='1' chgrp='' chmod='' chown='' @@ -65,23 +72,42 @@ cp='cp' cpio='' cpp='cpp' cpp_stuff='42' -cppflags='-D_REENTRANT -Dbool=char -DHAS_BOOL -I/usr/local/include' -cpplast='-' -cppminus='-' -cpprun='cc -E' -cppstdin='cc -E' +cppccsymbols='LANGUAGE_C=1' +cppflags='-pthread -std -DLANGUAGE_C' +cpplast='' +cppminus='' +cpprun='/usr/bin/cpp' +cppstdin='cppstdin' +cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1' +crosscompile='undef' cryptlib='' csh='csh' d_Gconvert='gcvt((x),(n),(b))' +d_PRIEldbl='define' +d_PRIFldbl='define' +d_PRIGldbl='define' +d_PRIX64='define' +d_PRId64='define' +d_PRIeldbl='define' +d_PRIfldbl='define' +d_PRIgldbl='define' +d_PRIi64='define' +d_PRIo64='define' +d_PRIu64='define' +d_PRIx64='define' d_access='define' +d_accessx='undef' d_alarm='define' d_archlib='define' -d_attribut='define' +d_atolf='undef' +d_atoll='undef' +d_attribut='undef' d_bcmp='define' d_bcopy='define' +d_bincompat5005='undef' d_bsd='undef' d_bsdgetpgrp='undef' -d_bsdsetpgrp='undef' +d_bsdsetpgrp='define' d_bzero='define' d_casti32='undef' d_castneg='define' @@ -96,18 +122,21 @@ d_csh='define' d_cuserid='define' d_dbl_dig='define' d_difftime='define' -d_dirnamlen='undef' +d_dirnamlen='define' d_dlerror='define' d_dlopen='define' d_dlsymun='undef' d_dosuid='undef' +d_drand48proto='define' d_dup2='define' +d_eaccess='undef' d_endgrent='define' d_endhent='define' d_endnent='define' d_endpent='define' d_endpwent='define' d_endsent='define' +d_endspent='undef' d_eofnblk='define' d_eunice='undef' d_fchmod='define' @@ -121,16 +150,26 @@ d_flexfnam='define' d_flock='define' d_fork='define' d_fpathconf='define' +d_fpos64_t='undef' +d_fs_data_s='undef' +d_fseeko='undef' d_fsetpos='define' +d_fstatfs='define' +d_fstatvfs='define' +d_ftello='undef' d_ftime='undef' +d_getcwd='define' +d_getfsstat='define' d_getgrent='define' d_getgrps='define' d_gethbyaddr='define' d_gethbyname='define' d_gethent='define' -d_gethname='undef' +d_gethname='define' d_gethostprotos='define' d_getlogin='define' +d_getmnt='undef' +d_getmntent='undef' d_getnbyaddr='define' d_getnbyname='define' d_getnent='define' @@ -149,38 +188,62 @@ d_getsbyname='define' d_getsbyport='define' d_getsent='define' d_getservprotos='define' +d_getspent='undef' +d_getspnam='undef' d_gettimeod='define' -d_gnulibc='define' +d_gnulibc='undef' d_grpasswd='define' +d_hasmntopt='undef' d_htonl='define' +d_iconv='define' d_index='undef' d_inetaton='define' +d_int64_t='undef' d_isascii='define' d_killpg='define' -d_lchown='undef' +d_lchown='define' +d_ldbl_dig='define' d_link='define' d_locconv='define' d_lockf='define' d_longdbl='define' d_longlong='define' +d_lseekproto='define' d_lstat='define' +d_madvise='define' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' +d_memchr='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' +d_mkdtemp='undef' d_mkfifo='define' +d_mkstemp='define' +d_mkstemps='undef' d_mktime='define' +d_mmap='define' +d_mprotect='define' d_msg='define' +d_msg_ctrunc='define' +d_msg_dontroute='define' +d_msg_oob='define' +d_msg_peek='define' +d_msg_proxy='undef' d_msgctl='define' d_msgget='define' d_msgrcv='define' d_msgsnd='define' +d_msync='define' +d_munmap='define' d_mymalloc='undef' d_nice='define' +d_nv_preserves_uv='undef' +d_off64_t='undef' +d_old_pthread_create_joinable='undef' d_oldpthreads='undef' d_oldsock='undef' d_open3='define' @@ -191,15 +254,16 @@ d_pipe='define' d_poll='define' d_portable='define' d_pthread_yield='undef' -d_pthreads_created_joinable='define' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' -d_pwcomment='undef' +d_pwcomment='define' d_pwexpire='undef' d_pwgecos='define' -d_pwquota='undef' d_pwpasswd='define' +d_pwquota='define' +d_qgcvt='undef' +d_quad='define' d_readdir='define' d_readlink='define' d_rename='define' @@ -209,6 +273,7 @@ d_safebcpy='define' d_safemcpy='undef' d_sanemcmp='define' d_sched_yield='define' +d_scm_rights='define' d_seekdir='define' d_select='define' d_sem='define' @@ -235,10 +300,11 @@ d_setregid='define' d_setresgid='undef' d_setresuid='undef' d_setreuid='define' -d_setrgid='undef' -d_setruid='undef' +d_setrgid='define' +d_setruid='define' d_setsent='define' d_setsid='define' +d_setspent='undef' d_setvbuf='define' d_sfio='undef' d_shm='define' @@ -250,10 +316,16 @@ d_shmget='define' d_sigaction='define' d_sigsetjmp='define' d_socket='define' +d_socklen_t='undef' d_sockpair='define' -d_statblks='undef' -d_stdio_cnt_lval='undef' +d_sqrtl='define' +d_statblks='define' +d_statfs_f_flags='define' +d_statfs_s='define' +d_statvfs='define' +d_stdio_cnt_lval='define' d_stdio_ptr_lval='define' +d_stdio_stream_array='define' d_stdiobase='define' d_stdstdio='define' d_strchr='define' @@ -263,7 +335,11 @@ d_strerrm='strerror(e)' d_strerror='define' d_strtod='define' d_strtol='define' +d_strtold='undef' +d_strtoll='undef' d_strtoul='define' +d_strtoull='undef' +d_strtouq='undef' d_strxfrm='define' d_suidsafe='undef' d_symlink='define' @@ -275,13 +351,18 @@ d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' +d_telldirproto='define' d_time='define' d_times='define' d_truncate='define' d_tzname='define' d_umask='define' d_uname='define' -d_union_semun='define' +d_union_semun='undef' +d_ustat='define' +d_vendorarch='undef' +d_vendorbin='undef' +d_vendorlib='undef' d_vfork='undef' d_void_closedir='undef' d_voidsig='define' @@ -301,7 +382,8 @@ direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' -dynamic_ext='B DB_File Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs re' +drand01='drand48()' +dynamic_ext='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re' eagain='EAGAIN' ebcdic='undef' echo='echo' @@ -310,17 +392,24 @@ emacs='' eunicefix=':' exe_ext='' expr='expr' -extensions='B DB_File Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs re Errno' -find='find' +extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re Errno' +fflushNULL='define' +fflushall='undef' +find='' firstmakefile='makefile' flex='' +fpossize='8' fpostype='fpos_t' freetype='void' -full_csh='/bin/csh' -full_sed='/bin/sed' -gccversion='2.7.2.3' +full_ar='/usr/bin/ar' +full_csh='/usr/bin/csh' +full_sed='/usr/bin/sed' +gccversion='' +gidformat='"u"' +gidsign='1' +gidsize='4' gidtype='gid_t' -glibpth='/usr/shlib /shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/local/lib ' +glibpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib' grep='grep' groupcat='cat /etc/group' groupstype='gid_t' @@ -330,6 +419,14 @@ h_sysfile='true' hint='recommended' hostcat='cat /etc/hosts' huge='' +i16size='2' +i16type='short' +i32size='4' +i32type='int' +i64size='8' +i64type='long' +i8size='1' +i8type='char' i_arpainet='define' i_bsdioctl='' i_db='define' @@ -339,88 +436,131 @@ i_dld='undef' i_dlfcn='define' i_fcntl='undef' i_float='define' -i_gdbm='define' +i_gdbm='undef' i_grp='define' +i_iconv='define' +i_ieeefp='undef' +i_inttypes='undef' i_limits='define' i_locale='define' +i_machcthr='undef' i_malloc='define' i_math='define' i_memory='undef' +i_mntent='undef' i_ndbm='define' i_netdb='define' i_neterrno='undef' +i_netinettcp='define' i_niin='define' +i_poll='define' +i_pthread='define' i_pwd='define' i_rpcsvcdbm='undef' i_sfio='undef' i_sgtty='undef' +i_shadow='undef' +i_socks='undef' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' +i_sunmath='undef' +i_sysaccess='define' i_sysdir='define' i_sysfile='define' i_sysfilio='undef' i_sysin='undef' i_sysioctl='define' +i_syslog='define' +i_sysmman='define' +i_sysmode='define' +i_sysmount='define' i_sysndir='undef' i_sysparam='define' i_sysresrc='define' +i_syssecrt='define' i_sysselct='define' i_syssockio='' i_sysstat='define' +i_sysstatfs='undef' +i_sysstatvfs='define' i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' +i_sysuio='define' i_sysun='define' +i_sysutsname='define' +i_sysvfs='undef' i_syswait='define' i_termio='undef' i_termios='define' i_time='undef' i_unistd='define' +i_ustat='define' i_utime='define' i_values='define' i_varargs='undef' i_varhdr='stdarg.h' i_vfork='undef' +ignore_versioned_solibs='' +inc_version_list=' ' +inc_version_list_init='0' incpath='' inews='' -installarchlib='/opt/perl/lib/5.005/i686-linux-thread' +installarchlib='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi' installbin='/opt/perl/bin' installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' -installprivlib='/opt/perl/lib/5.005' -installscript='/opt/perl/script' -installsitearch='/opt/perl/lib/site_perl/5.005/i686-linux-thread' -installsitelib='/opt/perl/lib/site_perl/5.005' +installprefix='/opt/perl' +installprefixexp='/opt/perl' +installprivlib='/opt/perl/lib/5.6.0' +installscript='/opt/perl/bin' +installsitearch='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi' +installsitebin='/opt/perl/bin' +installsitelib='/opt/perl/lib/site_perl/5.6.0' +installstyle='lib' +installusrbinperl='define' +installvendorarch='' +installvendorbin='' +installvendorlib='' intsize='4' -known_extensions='B DB_File Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs re' +ivdformat='"ld"' +ivsize='8' +ivtype='long' +known_extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re' ksh='' large='' -ld='cc' -lddlflags='-shared -L/usr/local/lib' -ldflags=' -L/usr/local/lib' +ld='ld' +lddlflags='-shared -expect_unresolved "*" -msym -std -s' +ldflags='' +ldlibpthname='LD_LIBRARY_PATH' less='less' lib_ext='.a' -libc='' -libperl='libperl.a' -libpth='/usr/local/lib /lib /usr/lib' -libs='-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lpthread -lc -lposix -lcrypt' -libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m pthread c cposix posix ndir dir crypt ucb BSD PW x' -line='line' +libc='/usr/shlib/libc.so' +libperl='libperl.so' +libpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib' +libs='-lgdbm -ldbm -ldb -lm -liconv -lpthread -lexc' +libsdirs=' /usr/shlib /usr/ccs/lib' +libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so libpthread.so libexc.so' +libsfound=' /usr/shlib/libgdbm.so /usr/ccs/lib/libdbm.a /usr/shlib/libdb.so /usr/shlib/libm.so /usr/shlib/libiconv.so /usr/shlib/libpthread.so /usr/shlib/libexc.so' +libspath=' /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib' +libswanted='sfio socket bind inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt sec ucb BSD x iconv pthread exc' +line='' lint='' lkflags='' ln='ln' -lns='/bin/ln -s' +lns='/usr/bin/ln -s' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' -longdblsize='12' +longdblsize='8' longlongsize='8' -longsize='4' +longsize='8' lp='' lpr='' ls='ls' +lseeksize='8' lseektype='off_t' mail='' mailx='' @@ -436,64 +576,90 @@ man3dir='/opt/perl/man/man3' man3direxp='/opt/perl/man/man3' man3ext='3' medium='' -mips='' mips_type='' mkdir='mkdir' +mmaptype='void *' models='none' modetype='mode_t' more='more' +multiarch='undef' mv='' -myarchname='i686-linux' +myarchname='alpha-dec_osf' mydomain='.yourplace.com' myhostname='yourhost' -myuname='linux fractal 2.0.34 #1 tue jun 23 10:09:17 edt 1998 i686 unknown ' -n='-n' +myuname='osf1 alpha.hut.fi v4.0 878 alpha ' +n='' netdb_hlen_type='int' netdb_host_type='const char *' netdb_name_type='const char *' -netdb_net_type='unsigned long' +netdb_net_type='int' nm='nm' -nm_opt='' -nm_so_opt='--dynamic' +nm_opt='-p' +nm_so_opt='' nonxs_ext='Errno' nroff='nroff' +nvsize='8' +nvtype='double' o_nonblock='O_NONBLOCK' obj_ext='.o' +old_pthread_create_joinable='' optimize='-O' orderlib='false' -osname='linux' -osvers='2.0.34' +osname='dec_osf' +osvers='4.0' package='perl5' -pager='/usr/bin/less' +pager='/c/bin/less' passcat='cat /etc/passwd' -patchlevel='5' +patchlevel='6' path_sep=':' -perl='perl' +perl5='/u/vieraat/vieraat/jhi/Perl/bin/perl' +perl='' perladmin='yourname@yourhost.yourplace.com' perlpath='/opt/perl/bin/perl' pg='pg' phostname='' pidtype='pid_t' plibpth='' +pm_apiversion='5.005' pmake='' pr='' prefix='/opt/perl' prefixexp='/opt/perl' -privlib='/opt/perl/lib/5.005' -privlibexp='/opt/perl/lib/5.005' +privlib='/opt/perl/lib/5.6.0' +privlibexp='/opt/perl/lib/5.6.0' prototype='define' -ptrsize='4' -randbits='31' +ptrsize='8' +quadkind='2' +quadtype='long' +randbits='48' +randfunc='drand48' +randseedtype='long' ranlib=':' rd_nodata='-1' +revision='5' rm='rm' rmail='' -runnm='false' -scriptdir='/opt/perl/script' -scriptdirexp='/opt/perl/script' +runnm='true' +sPRIEldbl='"E"' +sPRIFldbl='"F"' +sPRIGldbl='"G"' +sPRIX64='"lX"' +sPRId64='"ld"' +sPRIeldbl='"e"' +sPRIfldbl='"f"' +sPRIgldbl='"g"' +sPRIi64='"li"' +sPRIo64='"lo"' +sPRIu64='"lu"' +sPRIx64='"lx"' +sched_yield='sched_yield()' +scriptdir='/opt/perl/bin' +scriptdirexp='/opt/perl/bin' sed='sed' +seedfunc='srand48' +selectminbits='32' selecttype='fd_set *' -sendmail='sendmail' +sendmail='' sh='/bin/sh' shar='' sharpbang='#!' @@ -501,14 +667,22 @@ shmattype='void *' shortsize='2' shrpenv='' shsharp='true' -sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR UNUSED IOT CLD POLL ' -sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "UNUSED", "IOT", "CLD", "POLL", 0' -sig_num='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 6, 17, 29, 0' +sig_count='49' +sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM IOINT STOP TSTP CONT CHLD TTIN TTOU AIO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 RESV RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 MAX IOT LOST URG CLD IO POLL PTY PWR RTMAX ' +sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "RESV", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "PWR", "RTMAX", 0' +sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 6 6 16 20 23 23 23 29 48 ' +sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0' signal_t='void' -sitearch='/opt/perl/lib/site_perl/5.005/i686-linux-thread' -sitearchexp='/opt/perl/lib/site_perl/5.005/i686-linux-thread' -sitelib='/opt/perl/lib/site_perl/5.005' -sitelibexp='/opt/perl/lib/site_perl/5.005' +sitearch='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi' +sitearchexp='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi' +sitebin='/opt/perl/bin' +sitebinexp='/opt/perl/bin' +sitelib='/opt/perl/lib/site_perl/5.6.0' +sitelib_stem='/opt/perl/lib/site_perl' +sitelibexp='/opt/perl/lib/site_perl/5.6.0' +siteprefix='/opt/perl' +siteprefixexp='/opt/perl' +sizesize='8' sizetype='size_t' sleep='' smail='' @@ -516,6 +690,7 @@ small='' so='so' sockethdr='' socketlib='' +socksizetype='int' sort='sort' spackage='Perl5' spitshell='cat' @@ -525,12 +700,13 @@ ssizetype='ssize_t' startperl='#!/opt/perl/bin/perl' startsh='#!/bin/sh' static_ext=' ' -stdchar='char' -stdio_base='((fp)->_IO_read_base)' -stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' -stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' +stdchar='unsigned char' +stdio_base='((fp)->_base)' +stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' +stdio_cnt='((fp)->_cnt)' stdio_filbuf='' -stdio_ptr='((fp)->_IO_read_ptr)' +stdio_ptr='((fp)->_ptr)' +stdio_stream_array='_iob' strings='/usr/include/string.h' submit='' subversion='0' @@ -538,7 +714,7 @@ sysman='/usr/man/man1' tail='' tar='' tbl='' -tee='tee' +tee='' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' @@ -546,40 +722,85 @@ touch='touch' tr='tr' trnl='\n' troff='' +u16size='2' +u16type='unsigned short' +u32size='4' +u32type='unsigned int' +u64size='8' +u64type='unsigned long' +u8size='1' +u8type='unsigned char' +uidformat='"u"' +uidsign='1' +uidsize='4' uidtype='uid_t' uname='uname' uniq='uniq' +uquadtype='unsigned long' +use5005threads='undef' +use64bitall='define' +use64bitint='define' usedl='define' +useithreads='define' +uselargefiles='define' +uselongdouble='undef' +usemorebits='undef' +usemultiplicity='define' usemymalloc='n' -usenm='false' +usenm='true' useopcode='true' useperlio='undef' useposix='true' usesfio='false' -useshrplib='false' +useshrplib='true' +usesocks='undef' usethreads='define' +usevendorprefix='undef' usevfork='false' usrinc='/usr/include' uuname='' -version='5.005' +uvoformat='"lo"' +uvsize='8' +uvtype='unsigned long' +uvuformat='"lu"' +uvxformat='"lx"' +vendorarch='' +vendorarchexp='' +vendorbin='' +vendorbinexp='' +vendorlib='' +vendorlib_stem='' +vendorlibexp='' +vendorprefix='' +vendorprefixexp='' +version='5.6.0' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' +xs_apiversion='5.6.0' zcat='' zip='zip' # Configure command line arguments. config_arg0='Configure' -config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE' -config_argc=9 +config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE' +config_argc=11 config_arg1='-Dprefix=/opt/perl' config_arg2='-Doptimize=-O' config_arg3='-Dusethreads' -config_arg4='-Dcf_by=yourname' -config_arg5='-Dcf_email=yourname@yourhost.yourplace.com' -config_arg6='-Dperladmin=yourname@yourhost.yourplace.com' -config_arg7='-Dmydomain=.yourplace.com' -config_arg8='-Dmyhostname=yourhost' -config_arg9='-dE' -PATCHLEVEL=5 -SUBVERSION=0 -CONFIG=true +config_arg4='-Duse64bitint' +config_arg5='-Duselargefiles' +config_arg6='-Dcf_by=yourname' +config_arg7='-Dcf_email=yourname@yourhost.yourplace.com' +config_arg8='-Dperladmin=yourname@yourhost.yourplace.com' +config_arg9='-Dmydomain=.yourplace.com' +config_arg10='-Dmyhostname=yourhost' +config_arg11='-dE' +PERL_REVISION=5 +PERL_VERSION=6 +PERL_SUBVERSION=0 +PERL_API_REVISION=5 +PERL_API_VERSION=5 +PERL_API_SUBVERSION=0 +CONFIGDOTSH=true +# Variables propagated from previous config.sh file. +pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' diff --git a/gnu/usr.bin/perl/Porting/findvars b/gnu/usr.bin/perl/Porting/findvars index 2e81244ac86..3cdb854614d 100644 --- a/gnu/usr.bin/perl/Porting/findvars +++ b/gnu/usr.bin/perl/Porting/findvars @@ -11,15 +11,17 @@ chop $pat if $pat =~ /\|$/; # grep while (<>) { - if (/^(.*?)\b($pat)\b(.*)$/o) { - my $head = "$1#$2#"; - $_ = $3; - while (/^(.*?)\b($pat)\b(.*)$/o) { - $head .= "$1#$2#"; - $_ = $3; - } - print "$ARGV\:$.\:$head$_\n"; - } + print "$ARGV\:$.\:$_" if s/\b($pat)\b/#$1#/og; +# this variant might useful if the transformation is more complicated +# if (/^(.*?)\b($pat)\b(.*)$/o) { +# my $head = "$1#$2#"; +# $_ = $3; +# while (/^(.*?)\b($pat)\b(.*)$/o) { +# $head .= "$1#$2#"; +# $_ = $3; +# } +# print "$ARGV\:$.\:$head$_\n"; +# } } continue { close ARGV if eof; @@ -238,7 +240,6 @@ osname pad_reset_pending padix padix_floor -parsehook patchlevel patleave pending_ident diff --git a/gnu/usr.bin/perl/Porting/genlog b/gnu/usr.bin/perl/Porting/genlog index 5c3e90577e1..efb7ef8e108 100644 --- a/gnu/usr.bin/perl/Porting/genlog +++ b/gnu/usr.bin/perl/Porting/genlog @@ -12,7 +12,7 @@ # # Outputs the changelist to stdout. # -# Gurusamy Sarathy +# Gurusamy Sarathy # use Text::Wrap; @@ -107,8 +107,9 @@ EOT my $files = $files{$branch}{$kind}; # don't show large branches and integrations $files = ["($kind " . scalar(@$files) . ' files)'] - if (@$files > 25 - && ( $kind eq 'integrate' || $kind eq 'branch')); + if (@$files > 25 && ($kind eq 'integrate' + || $kind eq 'branch')) + || @$files > 100; print wrap(sprintf("%12s ", $editkind{$kind}), sprintf("%12s ", $editkind{$kind}), "@$files\n"); diff --git a/gnu/usr.bin/perl/Porting/p4d2p b/gnu/usr.bin/perl/Porting/p4d2p index 67780a93933..f645ef807e1 100644 --- a/gnu/usr.bin/perl/Porting/p4d2p +++ b/gnu/usr.bin/perl/Porting/p4d2p @@ -4,7 +4,7 @@ # reads a perforce style diff on stdin and outputs appropriate headers # so the diff can be applied with the patch program # -# Gurusamy Sarathy +# Gurusamy Sarathy # BEGIN { diff --git a/gnu/usr.bin/perl/Porting/p4desc b/gnu/usr.bin/perl/Porting/p4desc new file mode 100644 index 00000000000..0bf79da2e00 --- /dev/null +++ b/gnu/usr.bin/perl/Porting/p4desc @@ -0,0 +1,118 @@ +#!/usr/bin/perl -wpi.bak + +# +# Munge "p4 describe ..." output to include new files. +# +# Gurusamy Sarathy +# + +use vars qw($thisfile $change $file $fnum $h $v $p4port @addfiles); + +BEGIN { + $0 =~ s|^.*/||; + $p4port = $ENV{P4PORT} || 'localhost:1666'; + for (@ARGV) { + if ($p4port =~ /^\s+$/) { + $p4port = $_; + } + elsif (/^-p(.*)$/) { + $p4port = $1 || ' '; + } + elsif (/^-v$/) { + $v++; + } + elsif (/^-h/) { + $h++; + } + else { + push @files, $_; + } + } + unless (@files) { @files = '-'; undef $^I; } + @ARGV = @files; + if ($h) { + print STDERR < change-123.desc + p4 describe -du 123 | $0 | p4d2p > change-123.patch + +USAGE + exit(0); + } + $thisfile = ""; +} + + +if ($ARGV ne $thisfile) { + warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; + $thisfile = $ARGV; +} + +my $cur = m|^Affected files| ... m|^Differences|; + +# while we are within range +if ($cur) { + if (m{^\.\.\. (//depot/.+?#\d+) (add|branch)$}) { + my $newfile = $1; + push @addfiles, $newfile; + warn "$newfile add, revision != 1!\n" unless $newfile =~ /#1$/; + } + warn "file [$file] line [$cur] file# [$fnum]\n" if $v; +} + +if (/^Change (\d+) by/) { + $_ = "\n\n" . $_ if $change; # start of a new change list + $change = $1; + my $new = newfiles(); + if ($new) { + $_ = $new . $_; + } +} + +if (eof) { + $_ .= newfiles(); +} + +sub newfiles { + my $addfile; + my $ret = ""; + for $addfile (@addfiles) { + my $type = `p4 -p $p4port files '$addfile'`; + if ($?) { + warn "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n"; + next; + } + $type =~ m|^//.*\((.+)\)$| or next; + $type = $1; + unless ($type =~ /text/) { + $ret .= "\n==== $addfile ($type) ====\n\n"; + next; + } + my @new = `p4 -p $p4port print '$addfile'`; + if ($?) { + die "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n"; + } + my $desc = shift @new; # discard initial description + $ret .= "\n==== $addfile ($type) ====\n\n"; + my $lines = "," . @new; + $lines = "" if @new < 2; + $ret .= "\@\@ -0,0 +1$lines \@\@\n"; + $ret .= join("+","",@new); + $ret .= "\n\\ No newline at end of file\n" if $ret !~ /\n$/; + } + @addfiles = (); + return $ret; +} diff --git a/gnu/usr.bin/perl/Porting/patching.pod b/gnu/usr.bin/perl/Porting/patching.pod index caada0c9802..5659f23c60e 100644 --- a/gnu/usr.bin/perl/Porting/patching.pod +++ b/gnu/usr.bin/perl/Porting/patching.pod @@ -30,7 +30,7 @@ attempt to make everybody's life easier. The most common problems appear to be patches being mangled by certain mailers (I won't name names, but most of these seem to be originating on -boxes running a certain popular commercial operating system). Other problems +boxes running a certain popular commercial operating system). Other problems include patches not rooted in the appropriate place in the directory structure, and patches not produced using standard utilities (such as diff). @@ -52,7 +52,7 @@ First, back up the original files. This can't be stressed enough, back everything up _first_. Also, please create patches against a clean distribution of the perl source. -This insures that everyone else can apply your patch without clobbering their +This ensures that everyone else can apply your patch without clobbering their source tree. =item diff @@ -63,15 +63,18 @@ respectively, unified diffs (where the changed line appears immediately next to the original) and context diffs (where several lines surrounding the changes are included). See the manpage for diff for more details. -Also, the preferred method for patching is - +The preferred method for creating a unified diff suitable for feeding +to the patch program is: -C | C<-u>] Eold-fileE Enew-fileE> + diff -u old-file new-file > patch-file -Note the order of files. +Note the order of files. See below for how to create a patch from +two directory trees. -Also, if your patch is to the core (rather than to a module) it -is better to create it as a context diff as some machines have -broken patch utilities that choke on unified diffs. +If your patch is for wider consumption, it may be better to create it as +a context diff as some machines have broken patch utilities that choke on +unified diffs. A context diff is made using C rather than +C. GNU diff has many desirable features not provided by most vendor-supplied diffs. Some examples using GNU diff: @@ -94,23 +97,34 @@ diffs. Some examples using GNU diff: =item Directories -Patches should be generated from the source root directory, not from the -directory that the patched file resides in. This insures that the maintainer -patches the proper file and avoids name collisions (especially common when trying -to apply patches to files that appear in both $src_root/ext/* and $src_root/lib/*). -It is better to diff the file in $src_root/ext than the file in $src_root/lib. +IMPORTANT: Patches should be generated from the source root directory, not +from the directory that the patched file resides in. This ensures that the +maintainer patches the proper file. + +Many files in the distribution are derivative--avoid patching them. +Patch the originals instead. Most utilities (like perldoc) are in +this category, i.e. patch utils/perldoc.PL rather than utils/perldoc. +Similarly, don't create patches for files under $src_root/ext from +their copies found in $install_root/lib. If you are unsure about the +proper location of a file that may have gotten copied while building +the source distribution, consult the C. =item Filenames The most usual convention when submitting patches for a single file is to make your changes to a copy of the file with the same name as the original. Rename -the original file in such a way that it is obvious what is being patched ($file~ or -$file.old seem to be popular). +the original file in such a way that it is obvious what is being patched +($file.dist or $file.old seem to be popular). + +If you are submitting patches that affect multiple files then you should +backup the entire directory tree (to $source_root.old/ for example). This +will allow C to create all the patches at once. -If you are submitting patches that affect multiple files then you should backup -the entire directory tree (to $source_root.old/ for example). This will allow -C Eold-dirE Enew-dirE> to create all the patches -at once. +=item Try it yourself + +Just to make sure your patch "works", be sure to apply it to the Perl +distribution, rebuild everything, and make sure the testsuite runs +without incident. =back @@ -125,7 +139,7 @@ the patch corrects. If it is a code patch (rather than a documentation patch) you should also include a small test case that illustrates the bug. -=item Direction for application +=item Directions for application You should include instructions on how to properly apply your patch. These should include the files affected, any shell scripts or commands @@ -150,15 +164,35 @@ side of adding too many comments than too few. =item Style -Please follow the indentation style and nesting style in use in the -block of code that you are patching. +In general, please follow the particular style of the code you are patching. + +In particular, follow these general guidelines for patching Perl sources: + + 8-wide tabs (no exceptions!) + 4-wide indents for code, 2-wide indents for nested CPP #defines + try hard not to exceed 79-columns + ANSI C prototypes + uncuddled elses and "K&R" style for indenting control constructs + no C++ style (//) comments, most C compilers will choke on them + mark places that need to be revisited with XXX (and revisit often!) + opening brace lines up with "if" when conditional spans multiple + lines; should be at end-of-line otherwise + in function definitions, name starts in column 0 (return value is on + previous line) + single space after keywords that are followed by parens, no space + between function name and following paren + avoid assignments in conditionals, but if they're unavoidable, use + extra paren, e.g. "if (a && (b = c)) ..." + "return foo;" rather than "return(foo);" + "if (!foo) ..." rather than "if (foo == FALSE) ..." etc. + =item Testsuite When submitting a patch you should make every effort to also include an addition to perl's regression tests to properly exercise your patch. Your testsuite additions should generally follow these -guidelines (courtesy of Gurusamy Sarathy (gsar@engin.umich.edu))- +guidelines (courtesy of Gurusamy Sarathy ): Know what you're testing. Read the docs, and the source. Tend to fail, not succeed. @@ -173,16 +207,16 @@ guidelines (courtesy of Gurusamy Sarathy (gsar@engin.umich.edu))- do use them, make sure that you cover _all_ perl platforms. Unlink any temporary files you create. Promote unforeseen warnings to errors with $SIG{__WARN__}. - Be sure to use the libraries and modules shipped with version + Be sure to use the libraries and modules shipped with the version being tested, not those that were already installed. Add comments to the code explaining what you are testing for. Make updating the '1..42' string unnecessary. Or make sure that you update it. - Test _all_ behaviors of a given operator, library, or function- - All optional arguments - Return values in various contexts (boolean, scalar, list, lvalue) - Use both global and lexical variables - Don't forget the exceptional, pathological cases. + Test _all_ behaviors of a given operator, library, or function: + - All optional arguments + - Return values in various contexts (boolean, scalar, list, lvalue) + - Use both global and lexical variables + - Don't forget the exceptional, pathological cases. =back @@ -196,7 +230,7 @@ patch, didn't you). =head2 An example patch creation -This should work for most patches- +This should work for most patches: cp MANIFEST MANIFEST.old emacs MANIFEST @@ -222,7 +256,7 @@ word wraps your patch or that MIME encodes it. Both of these leave the patch essentially worthless to the maintainer. If you have no choice in mailers and no way to get your hands on a -better one there is, of course, a perl solution. Just do this- +better one there is, of course, a perl solution. Just do this: perl -ne 'print pack("u*",$_)' patch > patch.uue @@ -234,27 +268,37 @@ and post patch.uue with a note saying to unpack it using The subject line on your patch should read -[PATCH]5.xxx_xx (Area) Description + [PATCH 5.xxx_xx AREA] Description -where the x's are replaced by the appropriate version number, -area is a short keyword identifying what area of perl you are -patching, and description is a very brief summary of the +where the x's are replaced by the appropriate version number. +The description should be a very brief but accurate summary of the problem (don't forget this is an email header). -Examples- +Examples: -[PATCH]5.004_04 (DOC) fix minor typos + [PATCH 5.004_04 DOC] fix minor typos -[PATCH]5.004_99 (CORE) New warning for foo() when frobbing + [PATCH 5.004_99 CORE] New warning for foo() when frobbing -[PATCH]5.005_42 (CONFIG) Added support for fribnatz 1.5 + [PATCH 5.005_42 CONFIG] Added support for fribnatz 1.5 + +The name of the file being patched makes for a poor subject line if +no other descriptive text accompanies it. =item Where to send your patch -If your patch is for the perl core it should be sent perlbug@perl.org. +If your patch is for a specific bug in the Perl core, it should be sent +using the perlbug utility. Don't forget to describe the problem and the +fix adequately. + If it is a patch to a module that you downloaded from CPAN you should submit your patch to that module's author. +If your patch addresses one of the items described in perltodo.pod, +please discuss your approach B you make the patch at +. Be sure to browse the archives of past +discussions (see perltodo.pod for archive locations). + =back =head2 Applying a patch @@ -270,19 +314,21 @@ to your perl distribution. =item patch C<-p> -It is generally easier to apply patches with the C<-p> argument to -patch. This helps reconcile differing paths between the machine the -patch was created on and the machine on which it is being applied. +It is generally easier to apply patches with the C<-p N> argument to +patch (where N is the number of path components to skip in the files +found in the headers). This helps reconcile differing paths between +the machine the patch was created on and the machine on which it is +being applied. =item Cut and paste -_Never_ cut and paste a patch into your editor. This usually clobbers +B cut and paste a patch into your editor. This usually clobbers the tabs and confuses patch. =item Hand editing patches -Avoid hand editing patches as this frequently screws up the whitespace -in the patch and confuses the patch program. +Avoid hand editing patches as this almost always screws up the line +numbers and offsets in the patch, making it useless. =back diff --git a/gnu/usr.bin/perl/README.Y2K b/gnu/usr.bin/perl/README.Y2K new file mode 100644 index 00000000000..378db15c11a --- /dev/null +++ b/gnu/usr.bin/perl/README.Y2K @@ -0,0 +1,47 @@ +The following information about Perl and the year 2000 is a modified +version of the information that can be found in the Frequently Asked +Question (FAQ) documents. + +Does Perl have a year 2000 problem? Is Perl Y2K compliant? + +Short answer: No, Perl does not have a year 2000 problem. Yes, + Perl is Y2K compliant (whatever that means). The + programmers you've hired to use it, however, probably are + not. If you want perl to complain when your programmers + create programs with certain types of possible year 2000 + problems, a build option allows you to turn on warnings. + +Long answer: The question belies a true understanding of the + issue. Perl is just as Y2K compliant as your pencil + --no more, and no less. Can you use your pencil to write + a non-Y2K-compliant memo? Of course you can. Is that + the pencil's fault? Of course it isn't. + + The date and time functions supplied with perl (gmtime and + localtime) supply adequate information to determine the + year well beyond 2000 (2038 is when trouble strikes for + 32-bit machines). The year returned by these functions + when used in an array context is the year minus 1900. For + years between 1910 and 1999 this happens to be a 2-digit + decimal number. To avoid the year 2000 problem simply do + not treat the year as a 2-digit number. It isn't. + + When gmtime() and localtime() are used in scalar context + they return a timestamp string that contains a fully- + expanded year. For example, $timestamp = + gmtime(1005613200) sets $timestamp to "Tue Nov 13 01:00:00 + 2001". There's no year 2000 problem here. + + That doesn't mean that Perl can't be used to create non- + Y2K compliant programs. It can. But so can your pencil. + It's the fault of the user, not the language. At the risk + of inflaming the NRA: ``Perl doesn't break Y2K, people + do.'' See http://language.perl.com/news/y2k.html for a + longer exposition. + + If you want perl to warn you when it sees a program which + catenates a number with the string "19" -- a common + indication of a year 2000 problem -- build perl using the + Configure option "-Accflags=-DPERL_Y2KWARN". + (See the file INSTALL for more information about building + perl.) diff --git a/gnu/usr.bin/perl/README.amiga b/gnu/usr.bin/perl/README.amiga index 55167cb44d8..c4bc6c5bb4b 100644 --- a/gnu/usr.bin/perl/README.amiga +++ b/gnu/usr.bin/perl/README.amiga @@ -110,7 +110,7 @@ deficiencies in the UNIX-emulation, most notably: =item umask() works, but the correct permissions are only set when the file is finally close()d - + =back =head1 INSTALLATION diff --git a/gnu/usr.bin/perl/README.cygwin b/gnu/usr.bin/perl/README.cygwin new file mode 100644 index 00000000000..514e01328e6 --- /dev/null +++ b/gnu/usr.bin/perl/README.cygwin @@ -0,0 +1,631 @@ +If you read this file _as_is_, just ignore the funny characters you +see. It is written in the POD format (see pod/perlpod.pod) which is +specially designed to be readable as is. + +=head1 NAME + +README.cygwin - Perl for Cygwin + +=head1 SYNOPSIS + +This document will help you configure, make, test and install Perl +on Cygwin. This document also describes features of Cygwin that will +affect how Perl behaves at runtime. + +B There are pre-built Perl packages available for Cygwin and a +version of Perl is provided on the Cygwin CD. If you have no need to +customize the configuration, consider using one of these packages: + + http://cygutils.netpedia.net/ + +=head1 PREREQUISITES + +=head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it) + +The Cygwin tools are ports of the popular GNU development tools for Win32 +platforms. They run thanks to the Cygwin library which provides the UNIX +system calls and environment these programs expect. More information +about this project can be found at: + + http://sourceware.cygnus.com/cygwin/ + +A recent net or commercial release of Cygwin is required. + +At the time this document was written, the port required recent +development snapshots that were expected to stabilize early in 2000 and +be released to the net as B21 and commercially as v1.1. + +B At this point, minimal effort has been made to provide +compatibility with old (beta) Cygwin releases. The focus has been to +provide a high quality release and not worry about working around old +Cygwin bugs. If you wish to use Perl with Cygwin B20.1 or earlier, +consider using either perl5.005_03 or perl5.005_62, which are available +in source and binary form at C or on the +Cygwin CD. If there is significant demand, a patch kit can be developed +to port back to earlier Cygwin versions. + +=head2 Compiler + +A recent net or commercial release of I is required. + +At the time this document was written, I was current and +could be downloaded from: + + ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95.2/ + +=head2 Cygwin Configuration + +While building Perl some changes may be necessary to your Cygwin setup so +that Perl builds cleanly. These changes are B required for normal +Perl usage. + +B The binaries that are built will run on all Win32 versions. +They do not depend on your host system (Win9x, WinNT) or your Cygwin +configuration (I, I, binary/text mounts). The only +dependencies come from hardcoded pathnames like C. However, +your host system and Cygwin configuration will affect Perl's runtime +behavior (see L). Some regression tests may fail in different +ways depending on your setup. For now, the test suite does not skip +tests that do not make sense given a particular setup. If a test can +pass in some Cygwin setup, it is left in and explainable test failures +are documented. + +=over 4 + +=item * C + +Set the C environment variable so that Configure finds the Cygwin +versions of programs. Any Windows directories should be removed or +moved to the end of your C. + +=item * F + +There should be an instance of I in F (or F). +Configure tests C<#!/bin/cat> and if it is not found, you will see +the error: + + Configure: ./try: No such file or directory + +=item * F + +If you do not have a F directory, Configure will B prompt +you to install I into F. + +=item * I + +If you do not have I (which is part of the I package), +Configure will B prompt you to install man pages. + +=item * Permissions + +On WinNT with either the I or I C settings, directory +and file permissions may not be set correctly. Since the build process +creates files and directories, to be safe you may want to run a `C' on the entire Perl source tree. + +Also, it is a well known WinNT "feature" that files created by a login +that is a member of the I group will be owned by the +I group. Depending on your umask, you may find that you +can not write to files that you just created (because you are no longer +the owner). When using the I C setting, this is not an +issue because it "corrects" the ownership to what you would expect on +a UNIX system. + +=back + +=head1 CONFIGURE + +The default options gathered by Configure with the assistance of +F will build a Perl that supports dynamic loading +(which requires a shared F). + +This will run Configure and keep a record: + + ./Configure 2>&1 | tee log.configure + +If you are willing to accept all the defaults add a B<-d> option. +However, several useful customizations are available. + +=head2 Strip Binaries + +It is possible to strip the EXEs and DLLs created by the build process. +The resulting binaries will be significantly smaller. If you want the +binaries to be stripped, you can either add a B<-s> option when Configure +prompts you, + + Any additional ld flags (NOT including libraries)? [none] -s + Any special flags to pass to gcc to use dynamic linking? [none] -s + Any special flags to pass to ld2 to create a dynamically loaded library? + [none] -s + +or you can edit F and uncomment the relevant variables +near the end of the file. + +=head2 Optional Libraries + +Several Perl functions and modules depend on the existence of +some optional libraries. Configure will find them if they are +installed in one of the directories listed as being used for library +searches. Pre-built packages for most of these are available at +C. + +=over 4 + +=item * C<-lcrypt> + +The crypt libraries in GNU libc have been ported to Cygwin. + +The DES based Ultra Fast Crypt port was done by Alexey Truhan: + + http://dome.weeg.uiowa.edu/pub/domestic/sos/cw32crypt-dist-0.tgz + +NOTE: There are various export restrictions on DES implementations, +see the glibc README for more details. + +The MD5 port was done by Andy Piper: + + http://dome.weeg.uiowa.edu/pub/domestic/sos/libcrypt.tgz + +More information can also be found at: + + http://miracle.geol.msu.ru/sos/ + +=item * C<-lgdbm> (C) + +GDBM is available for Cygwin. GDBM's ndbm/dbm compatibility feature +also makes C and C possible (although they add +little extra value). + +=item * C<-ldb> (C) + +BerkeleyDB is available for Cygwin. Some details can be found in +F. + +=item * C<-lcygipc> (C) + +A port of SysV IPC is available for Cygwin. + +NOTE: This has B been extensively tested. In particular, +C is undefined because it fails a configure test and on +Win9x the shm*() functions seem to hang. + +=back + +=head2 Configure-time Options + +The F document describes several Configure-time options. Some of +these will work with Cygwin, others are not yet possible. Also, some of +these are experimental. You can either select an option when Configure +prompts you or you can define (undefine) symbols on the command line. + +=over 4 + +=item * C<-Uusedl> + +Undefining this symbol forces Perl to be compiled statically. + +=item * C<-Uusemymalloc> + +By default Perl uses the malloc() included with the Perl source. If you +want to force Perl to build with the system malloc() undefine this symbol. + +=item * C<-Dusemultiplicity> + +Multiplicity is required when embedding Perl in a C program and using +more than one interpreter instance. This works with the Cygwin port. + +=item * C<-Duseperlio> + +The PerlIO abstraction works with the Cygwin port. + +=item * C<-Duse64bitint> + +I supports 64-bit integers. However, several additional long long +functions are necessary to use them within Perl (I<{strtol,strtoul}l>). +These are B yet available with Cygwin. + +=item * C<-Duselongdouble> + +I supports long doubles (12 bytes). However, several additional +long double math functions are necessary to use them within Perl +(I<{atan2,cos,exp,floor,fmod,frexp,log,modf,pow,sin,sqrt}l,strtold>). +These are B yet available with Cygwin. + +=item * C<-Dusethreads> + +POSIX threads are B yet implemented in Cygwin. + +=item * C<-Duselargefiles> + +Although Win32 supports large files, Cygwin currently uses 32-bit integers +for internal size and position calculations. + +=back + +=head2 Suspicious Warnings + +You may see some messages during Configure that seem suspicious. + +=over 4 + +=item * Whoa There + +Cygwin does not yet implement chroot(), setegid() or seteuid() +functionality, but has stub functions that return C. You will +see a message when Configure detects that its guess conflicts with the +hint file. + + *** WHOA THERE!!! *** + The recommended value for $d_chroot on this machine was "undef"! + Keep the recommended value? [y] + +You should keep the recommended value. + +=item * dlsym + +I is needed to build dynamic libraries, but it does not exist +when dlsym() checking occurs (it is not created until `C' runs). +You will see the following message: + + Checking whether your dlsym() needs a leading underscore ... + I can't compile and run the test program. + I'm guessing that dlsym doesn't need a leading underscore. + +Since the guess is correct, this is not a problem. + +=item * Win9x and d_eofnblk + +Win9x does not correctly report C with a non-blocking read on a +closed pipe. You will see the following messages: + + But it also returns -1 to signal EOF, so be careful! + WARNING: you can't distinguish between EOF and no data! + + *** WHOA THERE!!! *** + The recommended value for $d_eofnblk on this machine was "define"! + Keep the recommended value? [y] + +At least for consistency with WinNT, you should keep the recommended +value. + +=item * Checking how std your stdio is... + +Configure reports: + + Your stdio doesn't appear very std. + +This is correct. + +=item * Compiler/Preprocessor defines + +The following error occurs because of the Cygwin C<#define> of +C<_LONG_DOUBLE>: + + Guessing which symbols your C compiler and preprocessor define... + try.c:3847: parse error + +This failure does not seem to cause any problems. + +=back + +=head1 MAKE + +Simply run make and wait: + + make 2>&1 | tee log.make + +=head2 Warnings + +Warnings like these are normal: + + warning: overriding commands for target + warning: ignoring old commands for target + + Warning: no export definition file provided + dllwrap will create one, but may not be what you want + +=head2 ld2 + +During `C', I will be created and installed in your $installbin +directory (where you said to put public executables). It does not +wait until the `C' process to install the I script, +this is because the remainder of the `C' refers to I without +fully specifying its path and does this from multiple subdirectories. +The assumption is that $installbin is in your current C. If this +is not the case or if you do not have an I program, `C' +will fail at some point. If this happens, just manually copy I +from the source directory to someplace in your C. + +=head1 TEST + +There are two steps to running the test suite: + + make test 2>&1 | tee log.make-test + + cd t;./perl harness 2>&1 | tee ../log.harness + +The same tests are run both times, but more information is provided when +running as `C<./perl harness>'. + +Test results vary depending on your host system and your Cygwin +configuration. It is possible that Cygwin will pass all the tests, +but it is more likely that some tests will fail for one of these reasons. + +=head2 File Permissions + +UNIX file permissions are based on sets of mode bits for +{read,write,execute} for each {user,group,other}. By default Cygwin only +tracks the Win32 readonly attribute represented as the UNIX file user +write bit (files are always readable, files are executable if they have +a F<.{com,bat,exe}> extension or begin with C<#!>, directories are always +readable and executable). On WinNT with the I C setting, +the remaining mode bits are stored as extended attributes. On WinNT +with the I C setting, permissions use the standard WinNT +security descriptors and access control lists. Without one of these +options, these tests will fail: + + Failed Test List of failed + ------------------------------------ + io/fs.t 5, 7, 9-10 + lib/anydbm.t 2 + lib/db-btree.t 20 + lib/db-hash.t 16 + lib/db-recno.t 18 + lib/gdbm.t 2 + lib/ndbm.t 2 + lib/odbm.t 2 + lib/sdbm.t 2 + op/stat.t 9, 20 (.tmp not an executable extension) + +=head2 Hard Links + +FAT partitions do not support hard links (whereas NTFS does), in which +case Cygwin implements link() by copying the file. These tests will fail: + + Failed Test List of failed + ------------------------------------ + io/fs.t 4 + op/stat.t 3 + +=head2 Filetime Granularity + +On FAT partitions the filetime granularity is 2 seconds. The following +test will fail: + + Failed Test List of failed + ------------------------------------ + io/fs.t 18 + +=head2 Tainting Checks + +When Perl is running in taint mode, C<$ENV{PATH}> is considered tainted +and not used, so DLLs not in the default system directories will not +be found. While the tests are running you will see warnings popup from +the system with messages like: + + Win9x + Error Starting Program + A required .DLL file, CYGWIN1.DLL, was not found + + WinNT + perl.exe or sh.exe - Unable to Locate DLL + The dynamic link library cygwin1.dll could not be found in the + specified path ... + +Just click OK and ignore them. When running `C', 2 popups +occur. During `C<./perl harness>', 4 popups occur. Also, these tests +will fail: + + Failed Test List of failed + ------------------------------------ + op/taint.t 1, 3, 31, 37 + +Alternatively, you can copy F into one of the Windows system +directories (although, this is B recommended). + +=head2 /etc/group + +Cygwin does not require F, in which case the F +test will be skipped. The check performed by F expects to +see entries that use the members field, otherwise this test will fail: + + Failed Test List of failed + ------------------------------------ + op/grent.t 1 + +=head2 Unexplained Failures + +Any additional tests that fail are likely due to bugs in Cygwin or the +optional libraries. It is expected that by the time of the next net +release most of these will be solved so they are not described here. + +=head2 Script Portability + +Cygwin does an outstanding job of providing UNIX-like semantics on +top of Win32 systems. However, in addition to the items noted above, +there are some differences that you should know about. This is only a +very brief guide to portability, more information can be found in the +Cygwin documentation. + +=over 4 + +=item * Pathnames + +Cygwin pathnames can be separated by forward (F) or backward (F<\>) +slashes. They may also begin with drive letters (F) or Universal +Naming Codes (F). DOS device names (F, F, F, +F, F) are invalid as base filenames. However, they can be +used in extensions (e.g., F). Names may not contain these +characters: + + : * ? " < > | + +File names are case insensitive, but case preserving. With the I +C setting, file names are mixed-case (although, directory names +remain case insensitive). + +The I setting is only available with the "coolview" version of +F provided by Sergey Okhapkin at: + + ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Okhapkin_Sergey/ + +=item * Text/Binary + +When a file is opened it is in either text or binary mode. In text mode +a file is subject to CR/LF/Ctrl-Z translations. With Cygwin, the default +mode for an open() is determined by the mode of the mount that underlies +the file. Perl provides a binmode() function to set binary mode on files +that otherwise would be treated as text. sysopen() with the C +flag sets text mode on files that otherwise would be treated as binary: + + sysopen(FOO, "bar", O_WRONLY|O_CREAT|O_TEXT) + +lseek(), tell() and sysseek() only work with files opened in binary mode. + +The text/binary issue is covered at length in the Cygwin documentation. + +=item * F<.exe> + +The Cygwin stat() makes the F<.exe> extension transparent by looking for +a F when you ask for F (unless a F also exists). +Cygwin does not require a F<.exe> extension, but I adds it +automatically when building a program. However, when accessing an +executable as a normal file (e.g., I or I in a makefile) +the F<.exe> is not transparent. + +NOTE: There is a version of I that understands the F<.exe> +semantics, it can be found at: + + ftp://ftp.franken.de/pub/win32/develop/gnuwin32/cygwin/porters/Humblet_Pierre_A/ + +=item * chown() + +On WinNT with the I C setting, chown() can change a file's +user and group IDs. In all other configurations chown() is a no-op, +although this is appropriate on Win9x since there is no security model. + +=item * Miscellaneous + +File locking using the C command to fcntl() is a stub that +returns C. + +Win9x can not rename() an open file (although WinNT can). + +=back + +=head1 INSTALL + +This will install Perl, including man pages. + + make install | tee log.make-install + +NOTE: If C is redirected `C' will B prompt +you to install I into F. + +You may need to be I to run `C'. If you +are not, you must have write access to the directories in question. + +Information on installing the Perl documentation in HTML format can be +found in the F document. + +=head1 MANIFEST + +These are the files in the Perl release that contain references to Cygwin. +These very brief notes attempt to explain the reason for all conditional +code. Hopefully, keeping this up to date will allow the Cygwin port to +be kept as clean as possible. + +=over 4 + +=item Documentation + + INSTALL README.cygwin + Changes Changes5.005 Changes5.004 + AUTHORS MAINTAIN MANIFEST README.win32 + pod/perl.pod pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod + pod/perlport.pod pod/perltoc.pod pod/perl5004delta.pod + +=item Build, Configure, Make, Install + + cygwin/Makefile.SHs + cygwin/ld2.in + cygwin/perlld.in + ext/IPC/SysV/hints/cygwin.pl + ext/NDBM_File/hints/cygwin.pl + ext/ODBM_File/hints/cygwin.pl + hints/cygwin.sh + Configure - help finding hints from uname, + shared libperl required for dynamic loading + Makefile.SH - linklibperl + Porting/patchls - cygwin in port list + installman - man pages with :: translated to . + installperl - install dll/ld2/perlld, install to pods + makedepend.SH - uwinfix + +=item Tests + + t/io/tell.t - binmode + t/lib/glob-basic.t - Win32 directory list access differs from read mode + t/op/magic.t - $^X/symlink WORKAROUND, s/.exe// + t/op/stat.t - no /dev, skip Win32 ftCreationTime quirk + (cache manager sometimes preserves ctime of file + previously created and deleted), no -u (setuid) + +=item Compiled Perl Source + + EXTERN.h - __declspec(dllimport) + XSUB.h - __declspec(dllexport) + cygwin/cygwin.c - os_extras (getcwd) + perl.c - os_extras + perl.h - binmode + doio.c - win9x can not rename a file when it is open + pp_sys.c - do not define h_errno + mg.c - environ WORKAROUND + unixish.h - environ WORKAROUND + util.c - environ WORKAROUND + +=item Compiled Module Source + + ext/POSIX/POSIX.xs - tzname defined externally + ext/SDBM_File/sdbm/pair.c + - EXTCONST needs to be redefined from EXTERN.h + ext/SDBM_File/sdbm/sdbm.c + - binary open + +=item Perl Modules/Scripts + + lib/Cwd.pm - hook to internal Cwd::cwd + lib/ExtUtils/MakeMaker.pm + - require MM_Cygwin.pm + lib/ExtUtils/MM_Cygwin.pm + - canonpath, cflags, manifypods, perl_archive + lib/File/Spec/Unix.pm - preserve //unc + lib/perl5db.pl - use stdin not /dev/tty + utils/perlcc.PL - DynaLoader.a in compile, -DUSEIMPORTLIB + utils/perldoc.PL - version comment + +=back + +=head1 BUGS + +Upon each start, I warns that a rule for F is overridden +(but there seems to be no better solution than adding an explicit define). + +`C' does not remove library F<.def> and F<.exe.stackdump> +files. + +The I script contains references to the source directory. You should +change these to C (or whatever) after install. + +=head1 AUTHORS + +Charles Wilson Ecwilson@ece.gatech.eduE, +Eric Fifer Eefifer@sanwaint.comE, +alexander smishlajev Eals@turnhere.comE, +Steven Morlock Enewspost@morlock.netE, +Sebastien Barre ESebastien.Barre@utc.frE, +Teun Burgers Eburgers@ecn.nlE. + +=head1 HISTORY + +Last updated: 1 March 2000 diff --git a/gnu/usr.bin/perl/README.dos b/gnu/usr.bin/perl/README.dos index 0e0a17335b6..269b891fa66 100644 --- a/gnu/usr.bin/perl/README.dos +++ b/gnu/usr.bin/perl/README.dos @@ -5,7 +5,7 @@ specially designed to be readable as is. =head1 NAME perldos - Perl under DOS, W31, W95. - + =head1 SYNOPSIS These are instructions for building Perl under DOS (or w??), using @@ -46,7 +46,7 @@ the world. Like: You need the following files to build perl (or add new modules): - v2/djdev201.zip + v2/djdev202.zip v2/bnu27b.zip v2gnu/gcc2721b.zip v2gnu/bsh1147b.zip @@ -60,17 +60,11 @@ You need the following files to build perl (or add new modules): v2gnu/gawk303b.zip v2misc/csdpmi4b.zip -or any newer version. +or possibly any newer version. =item Pthreads -If you want multithreading support in perl, you need a pthread library -that supports DJGPP. One of them can be found at: - - ftp://ftp.cs.fsu.edu/pub/PART/PTHREADS/pthreads.zip - -But thread support is still in alpha, it may be unstable. For more information -see below. +Thread support is not tested in this version of the djgpp perl. =back @@ -105,11 +99,11 @@ sockets =item * -Unpack the source package F with djtarx. If you want +Unpack the source package F with djtarx. If you want to use long file names under w95, don't forget to use set LFN=y - + before unpacking the archive. =item * @@ -160,7 +154,7 @@ with: C). You can use the Configure script in non-interactive mode too. When I built my F, I used something like this: - configure.bat -Uuseposix -des + configure.bat -des You can find more info about Configure's command line switches in the F file. @@ -191,9 +185,10 @@ Type: make test -You should see "All tests successful" if you configured a database -manager, and 1 failed test script if not (F). If you -configured POSIX you will see 1 additional failed subtest in F. +If you're lucky you should see "All tests successful". But there can be +a few failed subtests (less than 5 hopefully) depending on some external +conditions (e.g. some subtests fail under linux/dosemu or plain dos +with short filenames only). =head2 Installation @@ -206,67 +201,9 @@ directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation goes under C<($DJDIR)/lib/perl5/pod>. -=head2 Threaded perl under dos-djgpp - -Multithreading support is considered alpha, because some of the -tests in C still die with SIGSEGV (patches are welcome). But -if you want to give it a try, here are the necessary steps: - -=over 4 - -=item - -1. You will need a pthread library which supports djgpp. Go, and download -FSU's version from: - - ftp://ftp.cs.fsu.edu/pub/PART/PTHREADS/pthreads.zip - -The latest version is 3.5, released in Feb 98. - -=item - -2. Unzip the file, cd to C and run F. - -=item - -3. Add C or C or C to C -in the F. Note that using these values, multithreading will -NOT be preemptive. This is necessary, since djgpp's libc is not thread safe. - -=item - -4. Apply the following patch: - - *** include/pthread/signal.h~ Wed Feb 4 10:51:24 1998 - --- include/pthread/signal.h Tue Feb 10 22:40:32 1998 - *************** - *** 364,368 **** - --- 364,370 ---- - - #ifndef SA_ONSTACK - + #ifdef SV_ONSTACK - #define SA_ONSTACK SV_ONSTACK - + #endif - #endif /* !SA_ONSTACK */ - -=item - -5. run make (before you do this, you must make sure your C environment -variable does NOT point to bash). - -=item - -6. Install the library and header files into your djgpp directory structure. - -=item - -7. Add C<-Dusethreads> to the commmand line of perl's F. - -=back - =head1 AUTHOR -Laszlo Molnar, F +Laszlo Molnar, F =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/README.epoc b/gnu/usr.bin/perl/README.epoc new file mode 100644 index 00000000000..b4bcca60e4a --- /dev/null +++ b/gnu/usr.bin/perl/README.epoc @@ -0,0 +1,160 @@ +===================================================================== +Perl 5 README file for the EPOC operating system. +===================================================================== + +Olaf Flebbe +http://www.linuxstart.com/~oflebbe/perl/perl5.html +2000-02-20 + +===================================================================== +Introduction +===================================================================== + +EPOC is a OS for palmtops and mobile phones. For more informations look at: +http://www.symbian.com/ + +This is a port of Perl version 5.5.650 to EPOC. It runs on the Perl +Series 5, Series 5mx and the Psion Revo. I have no reports for other +EPOC devices. + +Features are left out, because of restrictions of the POSIX support. + +===================================================================== +Installation/Usage +===================================================================== + +You will need ~4MB free space in order to install and run perl. + +Install perl.sis on the EPOC machine (most likely a PSION Series 5, +5mx). If you do not know how to do that, you are on your own. + +Perl itself and its standard library are using 2.5 MB disk space. I +left out unicode support modules and modules which will not work with +this version. (For details look into epoc/createpkg.pl). If you like +to use them, you are free to copy them from a current perl release. + +Copy eshell.exe from the same page you got perl to your EPOC device. +Start eshell.exe with a double tap. + +Now you can enter: perl -de 0 in order to run the perl debugger. If +you are leaving perl, you get into the system screen. You have to +switch back manually to eshell.exe When perl is running, you will see +a task with the name STDOUT in the task list. + +====================================================================== +IO Redirection +====================================================================== + +You can redirect the output with the UNIX bourne shell syntax (this is +built into perl rather then eshell) For instance the following command +line will run the script test.pl with the output redirected to +stdout_file, the errors to stderr_file and input from stdin_file. + +perl test.pl >stdout_file stderr_file + +Alternativly you can use 2>&1 in order to add the standard error +output to stdout. + +====================================================================== +PATH Names +====================================================================== + +Pathnames to executables in eshell.exe have to be written with +backslashes '\', file arguments to perl with slashes '/'. The default +drive of perl is the same as the drive perl.exe is located on, the +default path seems to be '/'. + +i.e. command lines look a little bit funny: + +D:\perl.exe C:/test.pl >C:/output.txt + +You can automatically search for file on all EPOC drives with a ? as +the driver letter. For instance ?:\a.txt seraches for C:\a.txt, +D:\b.txt (and Z:\a.txt). + +====================================================================== +Editors +====================================================================== + +You may have a problem to create perl scripts. A cumbersome workaround +is to use the OPL Editor and exporting to text. + +The OPL+ Editor is quite good. (Shareware: http://www.twiddlebit.com) +There is a port of vim around: + http://www.starship.freeserve.co.uk/index.html + +====================================================================== +Restrictions +====================================================================== + +The following things are left out of this perl port: + ++ backquoting, pipes etc. + ++ system() does not inherit ressources like: file descriptors, + environment etc. + ++ signal, kill, alarm. Do not try to use them. This may be + impossible to implement on EPOC. + ++ select is missing. + ++ binmode does not exist. (No CR LF to LF translation for text files) + ++ EPOC does not handle the notion of current drive and current + directory very well (i.e. not at all, but it tries hard to emulate + one) See PATH. + ++ You need the shell eshell.exe in order to run perl.exe and supply + it with arguments. + ++ Heap is limited to 4MB. + +=================================================================== +Compiling Perl 5 on the EPOC cross compiling envionment. +=================================================================== + +Sorry, this is far too short. + + You will need the C++ SDK from http://developer.epocworld.com/. + + You will need to set up the cross SDK from + http://www.linuxstart.com/~oflebbe + + You may have to adjust config.sh (cc, cppflags) for your epoc + install location. + + You may have to adjust config.sh for your cross SDK location + + Get the Perl sources from your nearest CPAN site. + + Unpack the sources. + + Build a native perl from this sources... + cp epoc/* . + ./Configure -S + make perl + cp miniperl.native miniperl + make perl + perl link.pl perlmain.o lib/auto/DynaLoader/DynaLoader.a \ + lib/auto/Data/Dumper.a \ + lib/auto/File/Glob/Glob.a lib/auto/IO/IO.a \ + lib/auto/Socket/Socket.a perl.a `cat ext.libs` + perl createpkg.pl + wine "G:/bin/makesis perl.pkg perl.sis" + + +==================================================================== +Wish List +==================================================================== + +- Threads ? +- Acess to the GUI? + +==================================================================== +Support Status +==================================================================== + +I'm offering this port "as is". You can ask me questions, but I can't +guarantee I'll be able to answer them; I don't know much about Perl +internals myself; diff --git a/gnu/usr.bin/perl/README.hurd b/gnu/usr.bin/perl/README.hurd index 40e1ba996d8..6db3ef3638d 100644 --- a/gnu/usr.bin/perl/README.hurd +++ b/gnu/usr.bin/perl/README.hurd @@ -1,5 +1,5 @@ Notes on Perl on the Hurd -Last Updated: Sat, 6 Mar 1999 16:07:59 +0100 +Last Updated: Fri, 29 Oct 1999 22:50:30 +0200 Written by: Mark Kettenis If you want to use Perl on the Hurd, I recommend using the Debian @@ -9,32 +9,32 @@ binary distribution will most certainly have additional problems. * Known Problems -The Perl testsuite may still report some errors on the Hurd. The -`lib/anydbm.t' and `op/stat.t' tests will most certainly fail. The -first fails because Berkeley DB 2 does not allow empty keys and the -test tries to use them anyway. This is not really a Hurd bug. The -same test fails on Linux with version 2.1 of the GNU C Library. The -second failure is caused by a bug in the Hurd's filesystem servers, -that we have not been able to fix yet. I don't think it is crucial. +The Perl test suite may still report some errors on the Hurd. The +`lib/anydbm' and `pragma/warnings' tests will almost certainly fail. +Both failures are not really specific to the Hurd, as indicated by the +test suite output. The socket tests may fail if the network is not configured. You have to make `/hurd/pfinet' the translator for `/servers/socket/2', giving it the right arguments. Try `/hurd/pfinet --help' for more information. -Here are the statistics for Perl 5.005_03 on my system: +Here are the statistics for Perl 5.005_62 on my system: Failed Test Status Wstat Total Fail Failed List of failed ------------------------------------------------------------------------------- lib/anydbm.t 12 1 8.33% 12 -op/stat.t 58 1 1.72% 4 -5 tests skipped, plus 14 subtests skipped. -Failed 2/189 test scripts, 98.94% okay. 2/6669 subtests failed, 99.97% okay. +pragma/warnings 333 1 0.30% 215 +8 tests and 24 subtests skipped. +Failed 2/229 test scripts, 99.13% okay. 2/10850 subtests failed, 99.98% okay. There are quite a few systems out there that do worse! However, since I am running a very recent Hurd snapshot, in which a lot of -bugs that were exposed by the Perl testsuite have been fixed, you may -encounter more failures. Likely candidates are: `lib/io_pipe.t', -`lib/io_sock.t', `lib/io_udp.t' and `lib/time.t'. +bugs that were exposed by the Perl test suite have been fixed, you may +encounter more failures. Likely candidates are: `op/stat', `lib/io_pipe', +`lib/io_sock', `lib/io_udp' and `lib/time'. +In any way, if you're seeing failures beyond those mentioned in this +document, please consider upgrading to the latest Hurd before reporting +the failure as a bug. diff --git a/gnu/usr.bin/perl/README.machten b/gnu/usr.bin/perl/README.machten new file mode 100644 index 00000000000..4310bbcde38 --- /dev/null +++ b/gnu/usr.bin/perl/README.machten @@ -0,0 +1,101 @@ +If you read this file _as_is_, just ignore the funny characters you +see. It is written in the POD format (see pod/perlpod.pod) which is +specially designed to be readable as is. + +=head1 NAME + +README.machten - Perl version 5 on Power MachTen systems + +=head1 DESCRIPTION + +This document describes how to build Perl 5 on Power MachTen systems, +and discusses a few wrinkles in the implementation. + +=head2 Compiling Perl 5 on MachTen + +To compile perl under MachTen 4.1.4 (and probably earlier versions): + + ./Configure -de + make + make test + make install + +This builds and installs a statically-linked perl; MachTen's dynamic +linking facilities are not adequate to support Perl's use of +dynamically linked libraries. (See F for more +information.) + +You should have at least 32 megabytes of free memory on your +system before running the C command. + +For much more information on building perl -- for example, on how to +change the default installation directory -- see F. + +=head2 Failures during C + +=over 4 + +=item op/lexassign.t + +This test may fail when first run after building perl. It does not +fail subsequently. The cause is unknown. + +=item pragma/warnings.t + +Test 257 fails due to a failure to warn about attempts to read from a +filehandle which is a duplicate of stdout when stdout is attached to a +pipe. The output of the test contains a block comment which discusses +a different failure, not applicable to MachTen. + +The root of the problem is that Machten does not assign a file type to +either end of a pipe (see L), resulting, among other things +in Perl's C<-p> test failing on file descriptors belonging to pipes. +As a result, perl becomes confused, and the test for reading from a +write-only file fails. I am reluctant to patch perl to get around +this, as it's clearly an OS bug (about which Tenon has been informed), +and limited in its effect on practical Perl programs. + +=back + +=head2 Using external modules + +If warnings are enabled with Perl's C<-w> command-line flag, you are +likely to see warnings when using external modules containing XS +(compiled) code: + + Subroutine DynaLoader::dl_error redefined at /usr/local/lib/perl5/5.6.0/powerpc-machten/DynaLoader.pm line 93. + +This is a harmless consequence of the static linking used for MachTen +perl. You can suppress the warnings by using the more modern +C<-Mwarnings> instead of the traditional C<-w>. (See L.) + +=head2 Building external modules + +To add an external module to perl, build in the normal way, which +is documented in L, or which can be driven +automatically by the CPAN module (see L), which is part of the +standard distribution. If wou want to install a +module contains XS code (C or C++ source which compiles to object code +for linking with perl), you will have to replace your perl binary with +a new version containing the new statically-linked object module. The +build process tells you how to do this. + +There is a gotcha, however, which users usually encounter immediately +they respond to CPAN's invitation to C. When +installing a I -- a group of modules which together achieve +some particular purpose, the installation process for later modules in +the bundle tends to assume that earlier modules have been fully +installed and are available for use. This is not true on a +statically-linked system for earlier modules which contain XS code. +As a result the installation of the bundle fails. The work-around is +not to install the bundle as a one-shot operation, but instead to see +what modules it contains, and install these one-at-a-time by hand in +the order given. + +=head1 AUTHOR + +Dominic Dunlop + +=head1 DATE + +Version 1.0 2000-03-22 diff --git a/gnu/usr.bin/perl/README.mint b/gnu/usr.bin/perl/README.mint index 9cd480881d2..1915129ff86 100644 --- a/gnu/usr.bin/perl/README.mint +++ b/gnu/usr.bin/perl/README.mint @@ -63,17 +63,11 @@ and fix its stack. I have made good experiences with This doesn't establish a stack of 2 Bytes only as you might think. It really reserves one half of the available memory for cc1's stack. A setting of 1 would reserve the entire -memory for cc1, 3 would reserve three thirds. You will have +memory for cc1, 3 would reserve three fourths. You will have to find out the value that suits to your system yourself. -BTW, cc1 is maybe a little hard to find. It is generally installed -as - /usr/local/lib/gcc-lib///cc1 - -where is probably something like "m68k-atari-mint" -and is the gcc version you use (find out with -"gcc --version"). Maybe "gcc-lib" is not installed in -"/usr/local/lib" but "/usr/lib" on your system. +To find out the location of the program `cc1' simply type +`gcc --print-prog-name cc1' at your shell prompt. Now run make (maybe "make -k"). If you get a fatal signal 10 increase cc1's stacksize, if you run out of memory you should diff --git a/gnu/usr.bin/perl/README.posix-bc b/gnu/usr.bin/perl/README.posix-bc new file mode 100644 index 00000000000..34bcad75230 --- /dev/null +++ b/gnu/usr.bin/perl/README.posix-bc @@ -0,0 +1,131 @@ +This is a first ported perl for the POSIX subsystem in BS2000 VERSION +'V121', OSD V3.1, POSIX Shell V03.1A55. It may work on other +versions, but that's the one we've tested it on. + +You may need the following GNU programs in order to install perl: + +gzip: + +We used version 1.2.4, which could be installed out of the box with +one failure during 'make check'. + +bison: + +The yacc coming with BS2000 POSIX didn't work for us. So we had to +use bison. We had to make a few changes to perl in order to use the +pure (reentrant) parser of bison. We used version 1.25, but we had to +add a few changes due to EBCDIC. + + +UNPACKING: +========== + +To extract an ASCII tar archive on BS2000 POSIX you need an ASCII +filesystem (we used the mountpoint /usr/local/ascii for this). Now +you extract the archive in the ASCII filesystem without I/O-conversion: + +cd /usr/local/ascii +export IO_CONVERSION=NO +gunzip < /usr/local/src/perl.tar.gz | pax -r + +You may ignore the error message for the first element of the archive +(this doesn't look like a tar archive / skipping to next file...), +it's only the directory which will be made anyway. + +After extracting the archive you copy the whole directory tree to your +EBCDIC filesystem. This time you use I/O-conversion: + +cd /usr/local/src +IO_CONVERSION=YES +cp -r /usr/local/ascii/perl5.005_02 ./ + + +COMPILING: +========== + +There is a "hints" file for posix-bc that specifies the correct values +for most things. The major problem is (of course) the EBCDIC character +set. + +Configure did everything except the perl parser. + +Because of our problems with the native yacc we used GNU bison to +generate a pure (=reentrant) parser for perly.y. So our yacc is +really the following script: + +-----8<-----/usr/local/bin/yacc-----8<----- +#! /usr/bin/sh + +# Bison as a reentrant yacc: + +# save parameters: +params="" +while [[ $# -gt 1 ]]; do + params="$params $1" + shift +done + +# add flag %pure_parser: + +tmpfile=/tmp/bison.$$.y +echo %pure_parser > $tmpfile +cat $1 >> $tmpfile + +# call bison: + +echo "/usr/local/bin/bison --yacc $params $1\t\t\t(Pure Parser)" +/usr/local/bin/bison --yacc $params $tmpfile + +# cleanup: + +rm -f $tmpfile +-----8<----------8<----- + +We still use the normal yacc for a2p.y though!!! We made a softlink +called byacc to distinguish between the two versions: + +ln -s /usr/bin/yacc /usr/local/bin/byacc + +We build perl using both GNU make and the native make. + + +TESTING: +======== + +We still got a few errors during 'make test'. Most of them are the +result of using bison. Bison prints 'parser error' instead of 'syntax +error', so we may ignore them. One error in the test op/regexp (and +op/regexp_noamp) seems a bit critical, the result was an 'Out of +memory' (core dump with op/regexp_noamp). The following list shows +our errors, your results may differ: + +op/misc.............FAILED tests 45-46 +op/pack.............FAILED tests 58-60 +op/regexp...........FAILED tests 405-492 (core dump) +op/regexp_noamp.....FAILED tests 405-492 (core dump) +pragma/overload.....FAILED tests 152-153, 170-171 +pragma/subs.........FAILED tests 1-2 +pragma/warning......FAILED tests 121, 127, 130, 142 +lib/cgi-html........dubious, FAILED tests 1-17 (ALL) +lib/complex.........FAILED tests 264, 484 +lib/dumper..........FAILED tests MANY +Failed 7/190 test scripts, 96.32% okay. 234/6549 subtests failed, 96.43% okay. + + +INSTALLING: +=========== + +We have no nroff on BS2000 POSIX (yet), so we ignored any errors while +installing the documentation. + + +USING PERL: +=========== + +BS2000 POSIX doesn't support the shebang notation +('#!/usr/local/bin/perl'), so you have to use the following lines +instead: + +: # use perl + eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' + if $running_under_some_shell; diff --git a/gnu/usr.bin/perl/README.threads b/gnu/usr.bin/perl/README.threads index 136b156e7ff..15d36de6446 100644 --- a/gnu/usr.bin/perl/README.threads +++ b/gnu/usr.bin/perl/README.threads @@ -1,53 +1,89 @@ -NOTE - -Threading is a highly experimental feature. There are still a -few race conditions that show up under high contention on SMP +NOTE: This documentation describes the style of threading that was +available in 5.005. Perl v5.6 also has the early beginnings of +interpreter-based threads support (which is what will be enabled by +default when you simply ask for -Dusethreads). However, be advised +that interpreter threads cannot as yet be created from the Perl level +yet. If you're looking to create threads from within Perl, chances +are you _don't_ want interpreter threads, but want the older support +for threads described below, enabled with: + + sh Configure -Dusethreads -Duse5005threads + +The rest of this document only applies to the use5005threads style of +threads. +--------------------------------------------------------------------------- + +Support for threading is still in the highly experimental stages. There +are known race conditions that show up under high contention on SMP machines. Internal implementation is still subject to changes. It is not recommended for production use at this time. +--------------------------------------------------------------------------- + Building -If you want to build with multi-threading support and you are -running one of the following: +If your system is in the following list you should be able to just: - * Linux 2.x (with the LinuxThreads library installed: that's - the linuxthreads and linuxthreads-devel RPMs for RedHat) + ./Configure -Dusethreads -Duse5005threads -des + make - * Digital UNIX 4.x +and ignore the rest of this "Building" section. If not, continue +from the "Problems" section. - * Digital UNIX 3.x (Formerly DEC OSF/1), see additional note below + * Linux 2.* (with the LinuxThreads library installed: + that's the linuxthreads and linuxthreads-devel RPMs + for RedHat) - * Solaris 2.x for recentish x (2.5 is OK) + * Tru64 UNIX (formerly Digital UNIX formerly DEC OSF/1) + (see additional note below) - * IRIX 6.2 or newer. 6.2 will require a few os patches. - IMPORTANT: Without patch 2401, a kernel bug in IRIX 6.2 will - cause your machine to panic and crash when running threaded perl. - IRIX 6.3 and up should be OK. See lower down for patch details. + * Solaris 2.* for recentish x (2.5 is OK) -then you should be able to use + * IRIX 6.2 or newer. 6.2 will require a few OS patches. + IMPORTANT: Without patch 2401 (or its replacement), + a kernel bug in IRIX 6.2 will cause your machine to + panic and crash when running threaded perl. + IRIX 6.3 and up should be OK. See lower down for patch details. - ./Configure -Dusethreads -des - make + * AIX 4.1.5 or newer. + + * FreeBSD 2.2.8 or newer. + + * OpenBSD + + * NeXTstep, OpenStep -and ignore the rest of this "Building" section. If it doesn't -work or you are using another platform which you believe supports -POSIX.1c threads then read on. Additional information may be in -a platform-specific "hints" file in the hints/ subdirectory. + * OS/2 -On other platforms that use Configure to build perl, omit the -d -from your ./Configure arguments. For example, use: + * DOS DJGPP - ./Configure -Dusethreads + * VM/ESA + +--------------------------------------------------------------------------- + +Problems + +If the simple way doesn't work or you are using another platform which +you believe supports POSIX.1c threads then read on. Additional +information may be in a platform-specific "hints" file in the hints/ +subdirectory. + +On platforms that use Configure to build perl, omit the -d from your +./Configure arguments. For example, use: + + ./Configure -Dusethreads -Duse5005threads When Configure prompts you for ccflags, insert any other arguments in -there that your compiler needs to use POSIX threads. When Configure -prompts you for linking flags, include any flags required for -threading (usually nothing special is required here). Finally, when -COnfigure prompts you for libraries, include any necessary libraries -(e.g. -lpthread). Pay attention to the order of libraries. It is -probably necessary to specify your threading library *before* your -standard C library, e.g. it might be necessary to have -lpthread -lc, -instead of -lc -lpthread. +there that your compiler needs to use POSIX threads (-D_REENTRANT, +-pthreads, -threads, -pthread, -thread, are good guesses). When +Configure prompts you for linking flags, include any flags required +for threading (usually nothing special is required here). Finally, +when Configure prompts you for libraries, include any necessary +libraries (e.g. -lpthread). Pay attention to the order of libraries. +It is probably necessary to specify your threading library *before* +your standard C library, e.g. it might be necessary to have -lpthread +-lc, instead of -lc -lpthread. You may also need to use -lc_r instead +of -lc. Once you have specified all your compiler flags, you can have Configure accept all the defaults for the remainder of the session by typing &-d @@ -71,7 +107,7 @@ For Digital Unix 4.x: For Digital Unix 3.x (Formerly DEC OSF/1): Add -DOLD_PTHREADS_API to ccflags - If compiling with the GNU cc compiler, remove -thread from ccflags + If compiling with the GNU cc compiler, remove -threads from ccflags (The following should be done automatically if you call Configure with the -Dusethreads option). @@ -93,6 +129,7 @@ For IRIX: For IRIX 6.3 and 6.4 the pthreads should work out of the box. Thanks to Hannu Napari for the IRIX pthreads patches information. + For AIX: (This should all be done automatically by the hint file). Change cc to xlc_r or cc_r. @@ -107,6 +144,12 @@ For Win32: Now you can do a make +When you succeed in compiling and testing ("make test" after your +build) a threaded Perl in a platform previosuly unknown to support +threaded perl, please let perlbug@perl.com know about your victory. +Explain what you did in painful detail. + +--------------------------------------------------------------------------- O/S specific bugs @@ -138,8 +181,8 @@ has this fixed but the following patch can be applied to 0.5 for now: Building the Thread extension The Thread extension is now part of the main perl distribution tree. -If you did Configure -Dusethreads then it will have been added to -the list of extensions automatically. +If you did Configure -Dusethreads -Duse5005threads then it will have been +added to the list of extensions automatically. You can try some of the tests with cd ext/Thread @@ -155,6 +198,7 @@ Try running the main perl test suite too. There are known failures for some of the DBM/DB extensions (if their underlying libraries were not compiled to be thread-aware). +--------------------------------------------------------------------------- Bugs @@ -164,8 +208,7 @@ tested at all in recent times.) * There may still be races where bugs show up under contention. -* Need to document "lock", Thread.pm, Queue.pm, ... - +--------------------------------------------------------------------------- Debugging @@ -178,6 +221,7 @@ have to delete the lines in perl.c which say DEBUG_S(signal(SIGSEGV, (void(*)(int))catch_sigsegv);); #endif +--------------------------------------------------------------------------- Background @@ -287,3 +331,6 @@ Andy Dougherty Other minor updates 10 Feb 1999 by Gurusamy Sarathy + +More platforms added 26 Jul 1999 by +Jarkko Hietaniemi diff --git a/gnu/usr.bin/perl/README.vmesa b/gnu/usr.bin/perl/README.vmesa new file mode 100644 index 00000000000..a6bb96b37f4 --- /dev/null +++ b/gnu/usr.bin/perl/README.vmesa @@ -0,0 +1,76 @@ +README.vmesa + +This is a fully ported perl for VM/ESA 2.3.0. It may work on +other versions, but that's the one we've tested it on. + +If you've downloaded the binary distribution, it needs to be +installed below /usr/local. Source code distributions have an +automated `make install` step that means you do not need to extract +the source code below /usr/local (though that is where it will be +installed by default). You may need to worry about the networking +configuration files discussed in the last bullet below. + +To extract an ASCII tar archive on VM/ESA, try this: + + pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar + +GNU make for VM/ESA, which may be required for the build of perl, +is available from: + + http://pucc.princeton.edu/~neale/vmoe.html + +Once you've unpacked the distribution, run Configure (see INSTALL for +full discussion of the Configure options), and then run make, then +"make test" then "make install" (this last step may require UID=0 +privileges) + +There is a "hints" file for vmesa that specifies the correct values +for most things. Some things to watch out for are + + - this port does support dynamic loading but it's not had much testing + + - Don't turn on the compiler optimization flag "-O". There's + a bug in the compiler (APAR PQ18812) that generates some bad code + the optimizer is on. + + - As VM/ESA doesn't fully support the fork() API programs relying on + this call will not work. I've replaced fork()/exec() with spawn() + and the standalone exec() with spawn(). This has a side effect when + opening unnamed pipes in a shell script: there is no child process + generated under. + + - At the moment the hints file for VM/ESA basically bypasses all of the + automatic configuration process. This is because Configure relies on: + 1. The header files living in the Byte File System (you could put the + there if you want; + 2. The C preprocessor including the #include statements in the + preprocessor output (.i) file. + +When using perl on VM/ESA please keep in mind that the EBCDIC and ASCII +character sets are different. Perl builtin functions that may behave +differently under EBCDIC are mentioned in the perlport.pod document. + +OpenEdition (UNIX System Services) does not (yet) support the #! means +of script invokation. +See: + + head `whence perldoc` + +for an example of how to use the "eval exec" trick to ask the shell to +have perl run your scripts for you. + +If you are interested in the VM and OS/390 ports of perl then see the +perl-mvs mailing list: The Perl Institute (http://www.perl.org/) +maintains a mailing list of interest to all folks building and/or +using perl on EBCDIC platforms. To subscibe, send a message of: + + subscribe perl-mvs + +to majordomo@perl.org. + +Regression tests: as the 5.005 kit was was being assembled +the following "failures" were known to appear on some machines +during `make test` (mostly due to ASCII vs. EBCDIC conflicts), +your results may differ: + +[the list of failures being compiled] diff --git a/gnu/usr.bin/perl/README.vos b/gnu/usr.bin/perl/README.vos index 40753c66d28..99abf0d6c5b 100644 --- a/gnu/usr.bin/perl/README.vos +++ b/gnu/usr.bin/perl/README.vos @@ -1,11 +1,11 @@ Perl 5 README file for the Stratus VOS operating system. Paul Green (Paul_Green@stratus.com) -February 4, 1999 +February 3, 2000 Introduction ------------ -This is a port of Perl version 5, revision 005-03, to VOS. Perl +This is a port of Perl version 5, revision 005-63, to VOS. Perl is a scripting or macro language that is popular on many systems. See your local computer bookstore for a number of good books on Perl. @@ -44,9 +44,19 @@ following additional items. Instructions for unbundling this file are at ftp://ftp.stratus.com/pub/vos/utility/utility.html. +4. You must compile this version of Perl 5 on VOS Release + 14.1.0 or higher because some of the perl source files + contain more than 32,767 source lines. Due to VOS + release-compatibility rules, this port of perl may not + execute on VOS Release 12 or earlier. + To build perl 5, change to the "vos" subdirectory and type the command "compile_perl -processor X", where X is the processor type (mc68020, i80860, pa7100, pa8000) that you wish to use. +Note that code compiled for the pa7100 processor type can +execute on the PA7100, PA8000, and PA8500 processors, and that +code compiled for the pa8000 processor type can execute on the +PA8000 and PA8500 processors. Installing Perl 5 on VOS @@ -134,6 +144,8 @@ Support Status -------------- I'm offering this port "as is". You can ask me questions, but I can't guarantee I'll be able to answer them; I don't know much -about Perl itself; I'm still learning that. +about Perl itself; I'm still learning that. There are some +excellent books available on the Perl language; consult a book +seller. (end) diff --git a/gnu/usr.bin/perl/Todo-5.6 b/gnu/usr.bin/perl/Todo-5.6 new file mode 100644 index 00000000000..9abeb55ebb7 --- /dev/null +++ b/gnu/usr.bin/perl/Todo-5.6 @@ -0,0 +1,156 @@ +Unicode support + finish byte <-> utf8 and localencoding <-> utf8 conversions + make substr($bytestr,0,0,$charstr) do the right conversion + add Unicode::Map equivivalent to core + add support for I/O disciplines + - a way to specify disciplines when opening things: + open(F, "<:crlf :utf16", $file) + - a way to specify disciplines for an already opened handle: + binmode(STDIN, ":slurp :raw") + - a way to set default disciplines for all handle constructors: + use open IN => ":any", OUT => ":utf8", SYS => ":utf16" + eliminate need for "use utf8;" + autoload byte.pm when byte:: is seen by the parser + check uv_to_utf8() calls for buffer overflow + (see also "Locales", "Regexen", and "Miscellaneous") + +Multi-threading + support "use Thread;" under useithreads + add mechanism to: + - create new interpreter in a different thread + - exchange data between interpreters/threads + - share namespaces between interpreters/threads + work out consistent semantics for exit/die in threads + support for externally created threads? + Thread::Pool? + +Compiler + auto-produce executable + typed lexicals should affect B::CC::load_pad + workarounds to help Win32 + END blocks need saving in compiled output + _AUTOLOAD prodding + fix comppadlist (names in comppad_name can have fake SvCUR + from where newASSIGNOP steals the field) + +Namespace cleanup + CPP-space: restrict what we export from headers when !PERL_CORE + header-space: move into CORE/perl/? + API-space: complete the list of things that constitute public api + +Configure + fix the vicious cyclic multidependency of cc <-> libpth <-> loclibpth + libswanted <-> usethreads <-> use64bitint <-> use64bitall <-> + uselargefiles <-> ... + make configuring+building away from source directory work (VPATH et al) + this is related to: cross-compilation configuring (see Todo) + _r support (see Todo for mode detailed description) + POSIX 1003.1 1996 Edition support--realtime stuff: + POSIX semaphores, message queues, shared memory, realtime clocks, + timers, signals (the metaconfig units mostly already exist for these) + UNIX98 support: reader-writer locks, realtime/asynchronous IO + IPv6 support: see RFC2292, RFC2553 + +Long doubles + figure out where the PV->NV->PV conversion gets it wrong at least + in AIX and Tru64 (V5.0 and onwards) when using long doubles: see the + regexp tricks we had to insert to t/comp/use.t and t/lib/bigfltpm.t, + (?:9|8999\d+) and the like. + +64-bit support + Configure probe for quad_t, uquad_t, and (argh) u_quad_t, they might + be in some systems the only thing working as quadtype and uquadtype. + +Locales + deprecate traditional/legacy locales? + How do locales work across packages? + figure out how to support Unicode locales + suggestion: integrate the IBM Classes for Unicode (ICU) + http://oss.software.ibm.com/developerworks/opensource/icu/project/ + and check out also the Locale Converter: + http://alphaworks.ibm.com/tech/localeconverter + ICU is "portable, open-source Unicode library with: + charset-independent locales (with multiple locales simultaneously + supported in same thread; character conversions; formatting/parsing + for numbers, currencies, date/time and messages; message catalogs + (resources) ; transliteration, collation, normalization, and text + boundaries (grapheme, word, line-break))". + There is also 'iconv', either from XPG4 or GNU (glibc). + iconv is about character set conversions. + Either ICU or iconv would be valuable to get integrated + into Perl, Configure already probes for libiconv and . + +Regexen + make RE engine thread-safe + a way to do full character set arithmetics: now one can do + addition, negate a whole class, and negate certain subclasses + (e.g. \D, [:^digit:]), but a more generic way to add/subtract/ + intersect characters/classes, like described in the Unicode technical + report on Regular Expression Guidelines, + http://www.unicode.org/unicode/reports/tr18/ + (amusingly, the TR notes that difference and intersection + can be done using "Perl-style look-ahead") + difference syntax? maybe [[:alpha:][^abc]] meaning + "all alphabetic expect a, b, and c"? or [[:alpha:]-[abc]]? + (maybe bad, as we explicitly disallow such 'ranges') + intersection syntax? maybe [[..]&[...]]? + POSIX [=bar=] and [.zap.] would nice too but there's no API for them + =bar= could be done with Unicode, though, see the Unicode TR #15 about + normalization forms: + http://www.unicode.org/unicode/reports/tr15/ + this is also a part of the Unicode 3.0: + http://www.unicode.org/unicode/uni2book/u2.html + executive summary: there are several different levels of 'equivalence' + approximate matching + +Security + use fchown, fchmod (and futimes?) internally when possible + use fchdir(how portable?) + create secure reliable portable temporary file modules + audit the standard utilities for security problems and fix them + +Reliable Signals + custom opcodes + alternate runops() for signal despatch + figure out how to die() in delayed sighandler + make Thread::Signal work under useithreads + +Win32 stuff + sort out the spawnvp() mess for system('a','b','c') compatibility + work out DLL versioning + +Miscellaneous + add new modules (Archive::Tar, Compress::Zlib, CPAN::FTP?) + sub-second sleep()? alarm()? time()? (integrate Time::HiRes? + Configure doesn't yet probe for usleep/nanosleep/ualarm but + the units exist) + floating point handling: nans, infinities, fp exception masks, etc. + at least the following interfaces exist: fp_classify(), fp_class(), + class(), isnan(), isinf(), isfinite(), finite(), isnormal(), + ordered(), fp_setmask(), fp_getmask(), fp_setround(), fp_getround(), + ieeefp.h, fp_class.h. There are metaconfig units for most of these. + Search for ifdef __osf__ in pp.c to find a temporary fix that + needs to be done right. + fix the basic arithmetics (+ - * / %) to preserve IVness/UVness if + both arguments are IVs/UVs + replace pod2html with new PodtoHtml? (requires other modules from CPAN) + automate testing with large parts of CPAN + Unicode collation? http://www.unicode.org/unicode/reports/tr10/ + turn Cwd into an XS module? (Configure already probes for getcwd()) + mmap for speeding up input? (Configure already probes for the mmap family) + sendmsg, recvmsg? (Configure doesn't probe for these but the units exist) + setitimer, getitimer? (the metaconfig units exist) + +Ongoing + keep filenames 8.3 friendly, where feasible + upgrade to newer versions of all independently maintained modules + comprehensive perldelta.pod + +Documentation + describe new age patterns + update perl{guts,call,embed,xs} with additions, changes to API + convert more examples to use autovivified filehandles + document Win32 choices + spot-check all new modules for completeness + better docs for pack()/unpack() + reorg tutorials vs. reference sections diff --git a/gnu/usr.bin/perl/bytecode.pl b/gnu/usr.bin/perl/bytecode.pl index cc096ac1bcf..d1e1c708c0d 100644 --- a/gnu/usr.bin/perl/bytecode.pl +++ b/gnu/usr.bin/perl/bytecode.pl @@ -1,3 +1,6 @@ +BEGIN { + push @INC, './lib'; +} use strict; my %alias_to = ( U32 => [qw(PADOFFSET STRLEN)], @@ -6,7 +9,7 @@ my %alias_to = ( U8 => [qw(char)], ); -my @optype= qw(OP UNOP BINOP LOGOP CONDOP LISTOP PMOP SVOP GVOP PVOP LOOP COP); +my @optype= qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP); # Nullsv *must* come first in the following so that the condition # ($$sv == 0) can continue to be used to test (sv == Nullsv). @@ -19,7 +22,7 @@ while (($from, $tos) = each %alias_to) { my $c_header = <<'EOT'; /* - * Copyright (c) 1996-1998 Malcolm Beattie + * Copyright (c) 1996-1999 Malcolm Beattie * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -33,7 +36,7 @@ EOT my $perl_header; ($perl_header = $c_header) =~ s{[/ ]?\*/?}{#}g; -unlink "byterun.c", "byterun.h", "ext/B/B/Asmdata.pm"; +unlink "ext/ByteLoader/byterun.c", "ext/ByteLoader/byterun.h", "ext/B/B/Asmdata.pm"; # # Start with boilerplate for Asmdata.pm @@ -44,7 +47,7 @@ package B::Asmdata; use Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(%insn_data @insn_name @optype @specialsv_name); -use vars qw(%insn_data @insn_name @optype @specialsv_name); +our(%insn_data, @insn_name, @optype, @specialsv_name); EOT print ASMDATA_PM <<"EOT"; @@ -59,34 +62,72 @@ EOT # # Boilerplate for byterun.c # -open(BYTERUN_C, ">byterun.c") or die "byterun.c: $!"; +open(BYTERUN_C, ">ext/ByteLoader/byterun.c") or die "ext/ByteLoader/byterun.c: $!"; print BYTERUN_C $c_header, <<'EOT'; +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" +#define NO_XSLOCKS +#include "XSUB.h" + +#ifdef PERL_OBJECT +#undef CALL_FPTR +#define CALL_FPTR(fptr) (pPerl->*fptr) +#undef PL_ppaddr +#define PL_ppaddr (*get_ppaddr()) +#endif + +#include "byterun.h" +#include "bytecode.h" + + +static int optype_size[] = { +EOT +my $i = 0; +for ($i = 0; $i < @optype - 1; $i++) { + printf BYTERUN_C " sizeof(%s),\n", $optype[$i], $i; +} +printf BYTERUN_C " sizeof(%s)\n", $optype[$i], $i; +print BYTERUN_C <<'EOT'; +}; + +static SV *specialsv_list[4]; + +static int bytecode_iv_overflows = 0; +static SV *bytecode_sv; +static XPV bytecode_pv; +static void **bytecode_obj_list; +static I32 bytecode_obj_list_fill = -1; void * -bset_obj_store(void *obj, I32 ix) +bset_obj_store(pTHXo_ void *obj, I32 ix) { - if (ix > PL_bytecode_obj_list_fill) { - if (PL_bytecode_obj_list_fill == -1) - New(666, PL_bytecode_obj_list, ix + 1, void*); + if (ix > bytecode_obj_list_fill) { + if (bytecode_obj_list_fill == -1) + New(666, bytecode_obj_list, ix + 1, void*); else - Renew(PL_bytecode_obj_list, ix + 1, void*); - PL_bytecode_obj_list_fill = ix; + Renew(bytecode_obj_list, ix + 1, void*); + bytecode_obj_list_fill = ix; } - PL_bytecode_obj_list[ix] = obj; + bytecode_obj_list[ix] = obj; return obj; } -#ifdef INDIRECT_BGET_MACROS -void byterun(struct bytestream bs) -#else -void byterun(PerlIO *fp) -#endif /* INDIRECT_BGET_MACROS */ +void +byterun(pTHXo_ struct bytestream bs) { dTHR; int insn; + +EOT + +for (my $i = 0; $i < @specialsv; $i++) { + print BYTERUN_C " specialsv_list[$i] = $specialsv[$i];\n"; +} + +print BYTERUN_C <<'EOT'; + while ((insn = BGET_FGETC()) != EOF) { switch (insn) { EOT @@ -121,7 +162,7 @@ while () { if ($flags =~ /x/) { print BYTERUN_C "\t\tBSET_$insn($lvalue$optarg);\n"; } elsif ($flags =~ /s/) { - # Store instructions store to PL_bytecode_obj_list[arg]. "lvalue" field is rvalue. + # Store instructions store to bytecode_obj_list[arg]. "lvalue" field is rvalue. print BYTERUN_C "\t\tBSET_OBJ_STORE($lvalue$optarg);\n"; } elsif ($optarg && $lvalue ne "none") { @@ -145,7 +186,7 @@ EOT # print BYTERUN_C <<'EOT'; default: - croak("Illegal bytecode instruction %d\n", insn); + Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn); /* NOTREACHED */ } } @@ -155,23 +196,18 @@ EOT # # Write the instruction and optype enum constants into byterun.h # -open(BYTERUN_H, ">byterun.h") or die "byterun.h: $!"; +open(BYTERUN_H, ">ext/ByteLoader/byterun.h") or die "ext/ByteLoader/byterun.h: $!"; print BYTERUN_H $c_header, <<'EOT'; -#ifdef INDIRECT_BGET_MACROS struct bytestream { void *data; - int (*fgetc)(void *); - int (*fread)(char *, size_t, size_t, void*); - void (*freadpv)(U32, void*); + int (*pfgetc)(void *); + int (*pfread)(char *, size_t, size_t, void *); + void (*pfreadpv)(U32, void *, XPV *); }; -#endif /* INDIRECT_BGET_MACROS */ - -void *bset_obj_store _((void *, I32)); enum { EOT -my $i = 0; my $add_enum_value = 0; my $max_insn; for ($i = 0; $i < @insn_name; $i++) { @@ -196,22 +232,10 @@ for ($i = 0; $i < @optype - 1; $i++) { printf BYTERUN_H " OPt_%s,\t\t/* %d */\n", $optype[$i], $i; } printf BYTERUN_H " OPt_%s\t\t/* %d */\n};\n\n", $optype[$i], $i; -print BYTERUN_H <<'EOT'; -EXT int optype_size[] -#ifdef DOINIT -= { -EOT -for ($i = 0; $i < @optype - 1; $i++) { - printf BYTERUN_H " sizeof(%s),\n", $optype[$i], $i; -} -printf BYTERUN_H " sizeof(%s)\n}\n", $optype[$i], $i; -print BYTERUN_H <<'EOT'; -#endif /* DOINIT */ -; - -EOT print BYTERUN_H <<'EOT'; +extern void byterun(pTHXo_ struct bytestream bs); + #define INIT_SPECIALSV_LIST STMT_START { \ EOT for ($i = 0; $i < @specialsv; $i++) { @@ -270,85 +294,85 @@ nop none none #opcode lvalue argtype flags # ret none none x -ldsv PL_bytecode_sv svindex +ldsv bytecode_sv svindex ldop PL_op opindex -stsv PL_bytecode_sv U32 s +stsv bytecode_sv U32 s stop PL_op U32 s -ldspecsv PL_bytecode_sv U8 x -newsv PL_bytecode_sv U8 x +ldspecsv bytecode_sv U8 x +newsv bytecode_sv U8 x newop PL_op U8 x newopn PL_op U8 x newpv none PV -pv_cur PL_bytecode_pv.xpv_cur STRLEN -pv_free PL_bytecode_pv none x -sv_upgrade PL_bytecode_sv char x -sv_refcnt SvREFCNT(PL_bytecode_sv) U32 -sv_refcnt_add SvREFCNT(PL_bytecode_sv) I32 x -sv_flags SvFLAGS(PL_bytecode_sv) U32 -xrv SvRV(PL_bytecode_sv) svindex -xpv PL_bytecode_sv none x -xiv32 SvIVX(PL_bytecode_sv) I32 -xiv64 SvIVX(PL_bytecode_sv) IV64 -xnv SvNVX(PL_bytecode_sv) double -xlv_targoff LvTARGOFF(PL_bytecode_sv) STRLEN -xlv_targlen LvTARGLEN(PL_bytecode_sv) STRLEN -xlv_targ LvTARG(PL_bytecode_sv) svindex -xlv_type LvTYPE(PL_bytecode_sv) char -xbm_useful BmUSEFUL(PL_bytecode_sv) I32 -xbm_previous BmPREVIOUS(PL_bytecode_sv) U16 -xbm_rare BmRARE(PL_bytecode_sv) U8 -xfm_lines FmLINES(PL_bytecode_sv) I32 -xio_lines IoLINES(PL_bytecode_sv) long -xio_page IoPAGE(PL_bytecode_sv) long -xio_page_len IoPAGE_LEN(PL_bytecode_sv) long -xio_lines_left IoLINES_LEFT(PL_bytecode_sv) long -xio_top_name IoTOP_NAME(PL_bytecode_sv) pvcontents -xio_top_gv *(SV**)&IoTOP_GV(PL_bytecode_sv) svindex -xio_fmt_name IoFMT_NAME(PL_bytecode_sv) pvcontents -xio_fmt_gv *(SV**)&IoFMT_GV(PL_bytecode_sv) svindex -xio_bottom_name IoBOTTOM_NAME(PL_bytecode_sv) pvcontents -xio_bottom_gv *(SV**)&IoBOTTOM_GV(PL_bytecode_sv) svindex -xio_subprocess IoSUBPROCESS(PL_bytecode_sv) short -xio_type IoTYPE(PL_bytecode_sv) char -xio_flags IoFLAGS(PL_bytecode_sv) char -xcv_stash *(SV**)&CvSTASH(PL_bytecode_sv) svindex -xcv_start CvSTART(PL_bytecode_sv) opindex -xcv_root CvROOT(PL_bytecode_sv) opindex -xcv_gv *(SV**)&CvGV(PL_bytecode_sv) svindex -xcv_filegv *(SV**)&CvFILEGV(PL_bytecode_sv) svindex -xcv_depth CvDEPTH(PL_bytecode_sv) long -xcv_padlist *(SV**)&CvPADLIST(PL_bytecode_sv) svindex -xcv_outside *(SV**)&CvOUTSIDE(PL_bytecode_sv) svindex -xcv_flags CvFLAGS(PL_bytecode_sv) U8 -av_extend PL_bytecode_sv SSize_t x -av_push PL_bytecode_sv svindex x -xav_fill AvFILLp(PL_bytecode_sv) SSize_t -xav_max AvMAX(PL_bytecode_sv) SSize_t -xav_flags AvFLAGS(PL_bytecode_sv) U8 -xhv_riter HvRITER(PL_bytecode_sv) I32 -xhv_name HvNAME(PL_bytecode_sv) pvcontents -hv_store PL_bytecode_sv svindex x -sv_magic PL_bytecode_sv char x -mg_obj SvMAGIC(PL_bytecode_sv)->mg_obj svindex -mg_private SvMAGIC(PL_bytecode_sv)->mg_private U16 -mg_flags SvMAGIC(PL_bytecode_sv)->mg_flags U8 -mg_pv SvMAGIC(PL_bytecode_sv) pvcontents x -xmg_stash *(SV**)&SvSTASH(PL_bytecode_sv) svindex -gv_fetchpv PL_bytecode_sv strconst x -gv_stashpv PL_bytecode_sv strconst x -gp_sv GvSV(PL_bytecode_sv) svindex -gp_refcnt GvREFCNT(PL_bytecode_sv) U32 -gp_refcnt_add GvREFCNT(PL_bytecode_sv) I32 x -gp_av *(SV**)&GvAV(PL_bytecode_sv) svindex -gp_hv *(SV**)&GvHV(PL_bytecode_sv) svindex -gp_cv *(SV**)&GvCV(PL_bytecode_sv) svindex -gp_filegv *(SV**)&GvFILEGV(PL_bytecode_sv) svindex -gp_io *(SV**)&GvIOp(PL_bytecode_sv) svindex -gp_form *(SV**)&GvFORM(PL_bytecode_sv) svindex -gp_cvgen GvCVGEN(PL_bytecode_sv) U32 -gp_line GvLINE(PL_bytecode_sv) line_t -gp_share PL_bytecode_sv svindex x -xgv_flags GvFLAGS(PL_bytecode_sv) U8 +pv_cur bytecode_pv.xpv_cur STRLEN +pv_free bytecode_pv none x +sv_upgrade bytecode_sv char x +sv_refcnt SvREFCNT(bytecode_sv) U32 +sv_refcnt_add SvREFCNT(bytecode_sv) I32 x +sv_flags SvFLAGS(bytecode_sv) U32 +xrv SvRV(bytecode_sv) svindex +xpv bytecode_sv none x +xiv32 SvIVX(bytecode_sv) I32 +xiv64 SvIVX(bytecode_sv) IV64 +xnv SvNVX(bytecode_sv) NV +xlv_targoff LvTARGOFF(bytecode_sv) STRLEN +xlv_targlen LvTARGLEN(bytecode_sv) STRLEN +xlv_targ LvTARG(bytecode_sv) svindex +xlv_type LvTYPE(bytecode_sv) char +xbm_useful BmUSEFUL(bytecode_sv) I32 +xbm_previous BmPREVIOUS(bytecode_sv) U16 +xbm_rare BmRARE(bytecode_sv) U8 +xfm_lines FmLINES(bytecode_sv) I32 +xio_lines IoLINES(bytecode_sv) long +xio_page IoPAGE(bytecode_sv) long +xio_page_len IoPAGE_LEN(bytecode_sv) long +xio_lines_left IoLINES_LEFT(bytecode_sv) long +xio_top_name IoTOP_NAME(bytecode_sv) pvcontents +xio_top_gv *(SV**)&IoTOP_GV(bytecode_sv) svindex +xio_fmt_name IoFMT_NAME(bytecode_sv) pvcontents +xio_fmt_gv *(SV**)&IoFMT_GV(bytecode_sv) svindex +xio_bottom_name IoBOTTOM_NAME(bytecode_sv) pvcontents +xio_bottom_gv *(SV**)&IoBOTTOM_GV(bytecode_sv) svindex +xio_subprocess IoSUBPROCESS(bytecode_sv) short +xio_type IoTYPE(bytecode_sv) char +xio_flags IoFLAGS(bytecode_sv) char +xcv_stash *(SV**)&CvSTASH(bytecode_sv) svindex +xcv_start CvSTART(bytecode_sv) opindex +xcv_root CvROOT(bytecode_sv) opindex +xcv_gv *(SV**)&CvGV(bytecode_sv) svindex +xcv_file CvFILE(bytecode_sv) pvcontents +xcv_depth CvDEPTH(bytecode_sv) long +xcv_padlist *(SV**)&CvPADLIST(bytecode_sv) svindex +xcv_outside *(SV**)&CvOUTSIDE(bytecode_sv) svindex +xcv_flags CvFLAGS(bytecode_sv) U16 +av_extend bytecode_sv SSize_t x +av_push bytecode_sv svindex x +xav_fill AvFILLp(bytecode_sv) SSize_t +xav_max AvMAX(bytecode_sv) SSize_t +xav_flags AvFLAGS(bytecode_sv) U8 +xhv_riter HvRITER(bytecode_sv) I32 +xhv_name HvNAME(bytecode_sv) pvcontents +hv_store bytecode_sv svindex x +sv_magic bytecode_sv char x +mg_obj SvMAGIC(bytecode_sv)->mg_obj svindex +mg_private SvMAGIC(bytecode_sv)->mg_private U16 +mg_flags SvMAGIC(bytecode_sv)->mg_flags U8 +mg_pv SvMAGIC(bytecode_sv) pvcontents x +xmg_stash *(SV**)&SvSTASH(bytecode_sv) svindex +gv_fetchpv bytecode_sv strconst x +gv_stashpv bytecode_sv strconst x +gp_sv GvSV(bytecode_sv) svindex +gp_refcnt GvREFCNT(bytecode_sv) U32 +gp_refcnt_add GvREFCNT(bytecode_sv) I32 x +gp_av *(SV**)&GvAV(bytecode_sv) svindex +gp_hv *(SV**)&GvHV(bytecode_sv) svindex +gp_cv *(SV**)&GvCV(bytecode_sv) svindex +gp_file GvFILE(bytecode_sv) pvcontents +gp_io *(SV**)&GvIOp(bytecode_sv) svindex +gp_form *(SV**)&GvFORM(bytecode_sv) svindex +gp_cvgen GvCVGEN(bytecode_sv) U32 +gp_line GvLINE(bytecode_sv) line_t +gp_share bytecode_sv svindex x +xgv_flags GvFLAGS(bytecode_sv) U8 op_next PL_op->op_next opindex op_sibling PL_op->op_sibling opindex op_ppaddr PL_op->op_ppaddr strconst x @@ -360,8 +384,6 @@ op_private PL_op->op_private U8 op_first cUNOP->op_first opindex op_last cBINOP->op_last opindex op_other cLOGOP->op_other opindex -op_true cCONDOP->op_true opindex -op_false cCONDOP->op_false opindex op_children cLISTOP->op_children U32 op_pmreplroot cPMOP->op_pmreplroot opindex op_pmreplrootgv *(SV**)&cPMOP->op_pmreplroot svindex @@ -371,18 +393,19 @@ pregcomp PL_op pvcontents x op_pmflags cPMOP->op_pmflags U16 op_pmpermflags cPMOP->op_pmpermflags U16 op_sv cSVOP->op_sv svindex -op_gv *(SV**)&cGVOP->op_gv svindex +op_padix cPADOP->op_padix PADOFFSET op_pv cPVOP->op_pv pvcontents op_pv_tr cPVOP->op_pv op_tr_array op_redoop cLOOP->op_redoop opindex op_nextop cLOOP->op_nextop opindex op_lastop cLOOP->op_lastop opindex cop_label cCOP->cop_label pvcontents -cop_stash *(SV**)&cCOP->cop_stash svindex -cop_filegv *(SV**)&cCOP->cop_filegv svindex +cop_stashpv cCOP pvcontents x +cop_file cCOP pvcontents x cop_seq cCOP->cop_seq U32 cop_arybase cCOP->cop_arybase I32 -cop_line cCOP->cop_line line_t +cop_line cCOP line_t x +cop_warnings cCOP->cop_warnings svindex main_start PL_main_start opindex main_root PL_main_root opindex curpad PL_curpad svindex x diff --git a/gnu/usr.bin/perl/cc_runtime.h b/gnu/usr.bin/perl/cc_runtime.h index 9a01ff83359..dbc74757749 100644 --- a/gnu/usr.bin/perl/cc_runtime.h +++ b/gnu/usr.bin/perl/cc_runtime.h @@ -1,4 +1,5 @@ -#define DOOP(ppname) PUTBACK; PL_op = ppname(ARGS); SPAGAIN +#define DOOP(ppname) PUTBACK; PL_op = ppname(aTHX); SPAGAIN +#define CCPP(s) OP * s(pTHX) #define PP_LIST(g) do { \ dMARK; \ @@ -43,7 +44,7 @@ JMPENV_PUSH(ret); \ switch (ret) { \ case 0: \ - PL_op = ppaddr(ARGS); \ + PL_op = ppaddr(aTHX); \ PL_retstack[PL_retstack_ix - 1] = Nullop; \ if (PL_op != nxt) CALLRUNOPS(); \ JMPENV_POP; \ @@ -52,20 +53,23 @@ case 2: JMPENV_POP; JMPENV_JUMP(2); \ case 3: \ JMPENV_POP; \ - if (PL_restartop != nxt) \ + if (PL_restartop && PL_restartop != nxt) \ JMPENV_JUMP(3); \ } \ PL_op = nxt; \ SPAGAIN; \ } while (0) -#define PP_ENTERTRY(jmpbuf,label) do { \ - dJMPENV; \ - int ret; \ - JMPENV_PUSH(ret); \ - switch (ret) { \ - case 1: JMPENV_POP; JMPENV_JUMP(1); \ - case 2: JMPENV_POP; JMPENV_JUMP(2); \ - case 3: JMPENV_POP; SPAGAIN; goto label;\ - } \ - } while (0) + +#define PP_ENTERTRY(jmpbuf,label) \ + STMT_START { \ + int ret; \ + JMPENV_PUSH_ENV(jmpbuf,ret); \ + switch (ret) { \ + case 1: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(1);\ + case 2: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(2);\ + case 3: JMPENV_POP_ENV(jmpbuf); SPAGAIN; goto label;\ + } \ + } STMT_END +#define PP_LEAVETRY \ + STMT_START{ PL_top_env=PL_top_env->je_prev; }STMT_END diff --git a/gnu/usr.bin/perl/configure.com b/gnu/usr.bin/perl/configure.com index d51793abe80..003a047bbe8 100644 --- a/gnu/usr.bin/perl/configure.com +++ b/gnu/usr.bin/perl/configure.com @@ -4,34 +4,33 @@ $! $! For example, if you unpacked perl into: [USER.PERL5_00n...] then you will $! want to cd into the tree and execute Configure: $! -$! $ SET DEFAULT [USER.PERL5_00n] +$! $ SET DEFAULT [USER.PERL5_xxx] $! $ @Configure $! $! or $! -$! $ SET DEFAULT [USER.PERL5_00n] +$! $ SET DEFAULT [USER.PERL5_xxx] $! $ @Configure "-des" $! $! That's it. If you get into a bind trying to build perl on VMS then $! definitely read through the README.VMS file. -$! Beyond that send email to VMSPerl@cor.newman.upenn.edu +$! Beyond that send email to vmsperl@perl.org $! $! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $! $! send suggestions to: -$! Dan Sugalski +$! Dan Sugalski $! Thank you!!!! $! $! Adapted and converted from Larry Wall & Andy Dougherty's $! "Configure generated by metaconfig 3.0 PL60." by Peter Prymmer -$! (a Bourne sh[ell] script for configuring the installation of perl on VMS) -$! in the perl5.002|3 epoch (spring/summer 1996) +$! (a Bourne sh[ell] script for configuring the installation of perl +$! on non-VMS systems) in the perl5.002|3 epoch (spring/summer 1996) $! with much valuable help from Charles Bailey & $! the whole VMSPerl crew. $! Extended and messed about with by Dan Sugalski $! -$! SET NOVERIFY -$ sav_ver = F$VERIFY(sav_ver) +$ sav_ver = F$VERIFY(0) $! $! VMS-isms we will need: $ echo = "write sys$output " @@ -39,16 +38,24 @@ $ cat = "type" $ gcc_symbol = "gcc" $ ans = "" $ macros = "" -$ use_debugging_perl = "Y" +$ extra_flags = "" +$ user_c_flags = "" +$ use_ieee_math = "n" +$ be_case_sensitive = "n" +$ use_vmsdebug_perl = "n" +$ use64bitall = "n" +$ use64bitint = "n" $ C_Compiler_Replace = "CC=" $ Thread_Live_Dangerously = "MT=" $ use_two_pot_malloc = "N" $ use_pack_malloc = "N" $ use_debugmalloc = "N" -$ preload_env = "N" +$ d_secintgenv = "N" +$ cc_flags = "" +$ use_multiplicity = "N" $ vms_default_directory_name = F$ENVIRONMENT("DEFAULT") -$! max_allowed_dir_depth = 3 ! e.g. [A.B.PERL5_00n] not [A.B.C.PERL5_00n] -$ max_allowed_dir_depth = 2 ! e.g. [FOO.PERL5_00n] not [FOO.BAR.PERL5_00n] +$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERL5_xxx] not [A.B.C.PERL5_xxx] +$! max_allowed_dir_depth = 2 ! e.g. [A.PERL5_xxx] not [A.B.PERL5_xxx] $! $ vms_filcnt = F$GETJPI ("","FILCNT") $! @@ -110,6 +117,7 @@ $! $!: set up default values $ fastread="" $ reuseval="false" +$ maniskip = "false" $ config_sh="" $ alldone="" $ error="" @@ -118,18 +126,24 @@ $ extractsh="" $ override="" $ knowitall="" $ Using_Dec_C = "" -$ Using_Vax_C = "" $ Using_Gnu_C = "" $ Dec_C_Version = "" $ use_threads = "F" +$ use_5005_threads = "N" +$ use_ithreads = "N" $! $!: option parsing +$ config_args = "" $ IF (P1 .NES. "") $ THEN !one or more switches was thrown $ i = 1 $ bang = 0 $Param_loop: -$ IF (P'i'.NES."") THEN bang = bang + 1 +$ IF (P'i'.NES."") +$ THEN +$ bang = bang + 1 +$ config_args = config_args + F$FAO(" !AS",P'i') +$ ENDIF $ i = i + 1 $ IF (i.LT.9) THEN GOTO Param_loop !DCL allows P1..P8 $! @@ -162,8 +176,8 @@ $ P'i' = P'i' - "f" $ config_sh = P'i' $ IF (F$SEARCH(config_sh).NES."") $ THEN -$ test = F$FILE_ATTRIBUTES(config_sh,"PRO") -$ IF (F$LOCATE("R",test).NE.F$LENGTH(test)) +$ test_config_sh = F$FILE_ATTRIBUTES(config_sh,"PRO") +$ IF (F$LOCATE("R",test_config_sh).NE.F$LENGTH(test_config_sh)) $ THEN $ CONTINUE !at this point check UIC && if test allows... $ !to be continued ? @@ -184,6 +198,13 @@ $ gotopt = "t" $ P'i' = P'i' - "h" $ gotshortopt = "t" $ ENDIF +$ IF (F$EXTRACT(0,1,P'i') .EQS. "m") +$ THEN +$ maniskip = "true" +$ gotopt = "t" +$ P'i' = P'i' - "m" +$ gotshortopt = "t" +$ ENDIF $ IF (F$EXTRACT(0,1,P'i') .EQS. "r") $ THEN $ reuseval = "true" @@ -283,17 +304,19 @@ $ i = i + 1 $ IF (i .LT. (bang + 1)) THEN GOTO Opt_loop $! $ ENDIF ! (P1 .NES. "") +$ config_args = F$EDIT(config_args,"TRIM") $! $ IF (error) $ THEN $ me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME") -$ echo "Usage: @''me' [-dehrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]" -$ echo " [-Usymbol] [-Usymbol=]" +$ echo "Usage: @''me' [-dehmrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]" +$ echo " [-Usymbol] [-Usymbol=]" $ TYPE SYS$INPUT "-d" : use defaults for all answers. "-e" : go on without questioning past the production of config.sh. * "-f" : specify an alternate default configuration file. "-h" : print this help message and exit (with an error status). + "-m" : skip the MANIFEST check to see that all files are present "-r" : reuse C symbols value if possible (skips costly nm extraction).* "-s" : silent mode, only echoes questions and essential information. -"D" : define symbol to have some value: * @@ -319,11 +342,19 @@ $! $ GOTO Check_silence $! $Shut_up: -$ STDOUT = F$TRNLNM("SYS$OUTPUT") +$ IF F$Mode() .eqs. "BATCH" +$ THEN +$ STDOUT = F$GetQuI("DISPLAY_JOB","LOG_SPECIFICATION",,"THIS_JOB") +$ WRITE SYS$OUTPUT "Warning: Executing in batch mode. To avoid file locking conflicts," +$ WRITE SYS$OUTPUT "output intended for SYS$OUTPUT will be sent to a new version" +$ WRITE SYS$OUTPUT STDOUT +$ ELSE +$ STDOUT = F$TRNLNM("SYS$OUTPUT") +$ ENDIF $ DEFINE SYS$OUTPUT "_NLA0:" $ echo4 = "write STDOUT " $ cat4 = "TYPE/OUTPUT=''STDOUT'" -$ open/write STDOUT 'STDOUT' +$ open/write/share=read STDOUT 'STDOUT' $ RETURN $! $Check_silence: @@ -341,6 +372,7 @@ $! maybe someday $! $!: set package name $ package = "perl5" +$ packageup = F$EDIT((package - "5"),"UPCASE") $! $!: Eunice requires " " instead of "", can you believe it $ echo "" @@ -382,7 +414,7 @@ $ ELSE $! MANIFEST. has been found and we have set def'ed there - $! time to bail out before it's too late. $ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE")) -$ IF tmp .GES. "7.2" THEN GOTO Beyond_depth_check +$ IF (tmp .GES. "7.2") .AND. (F$GETSYI("HW_MODEL") .GE. 1024) THEN GOTO Beyond_depth_check $ IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("Default")).nes.".") $ THEN $ TYPE SYS$INPUT: @@ -417,8 +449,11 @@ $! $ OPEN/WRITE MISSING MISSING. $!change to "FALSE" if you wish to skip the manifest search $!(which after all is rather slow in DCL :-) -$ IF ("TRUE") +$ IF (maniskip) $ THEN +$ echo "Skipping MANIFEST check as requested" +$ ELSE +$! $ OPEN/READ CONFIG 'manifestfound' $Read_loop_manifest: $ READ/END_OF_FILE = Done_manifest CONFIG line @@ -466,6 +501,19 @@ $ IF (((f$length(file_2_find)+1) .eq. f$length(basename)) .and. - $ file_2_find = dirname + basename $! $ found = F$SEARCH(file_2_find) +$ IF (found .EQS. "" .AND. dots .GT. 2) +$ THEN +$! 17-DEC-1999 Improved to turn "[.foo.bar]baz.c_buz" into +$! "[.foo.bar]baz_c.buz" to cover unzipped archives and put +$! "[.foo.bar]baz.c_buz,baz_c.buz" into missing list if neither is found. +$ basename[f$locate(".",basename),1] := _ +$ dot_ele = F$ELEMENT(dots - 1,"_",basename) +$ basename = - + f$extract(0,f$length(basename)-(f$length(dot_ele)+1),basename) - + + "." + dot_ele +$ found = F$SEARCH(dirname + basename) +$ file_2_find = file_2_find + "," + basename +$ ENDIF $ IF (found .EQS. "") $ THEN $ WRITE MISSING file_2_find @@ -495,7 +543,7 @@ THIS PACKAGE SEEMS TO BE INCOMPLETE. You have the option of continuing the configuration process, despite the distinct possibility that your kit is damaged, by typing 'y'es. If you do, don't blame me if something goes wrong. I advise you to type 'n'o -and contact the author (sugalskd@ous.edu). +and contact the author (dan@sidhe.org) $ READ SYS$COMMAND/PROMPT="Continue? [n] " ans $ IF ans @@ -561,7 +609,7 @@ $ user = F$EDIT(F$GETJPI("","USERNAME"),"TRIM,COLLAPSE") $ IF .NOT.(F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."") $ THEN $ messages = F$ENVIRONMENT("MESSAGE") -$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT !sorry :-( +$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT $ contains /NOOUTPUT [-.CONFIG]INSTRUCT. 'user' $ IF .NOT.($status.EQ.%X08D78053) $ THEN @@ -571,7 +619,7 @@ $ rp = "Would you like to see the instructions? [''dflt'] " $ GOSUB myread $ if .NOT.ans THEN needman="" $ ENDIF -$ SET MESSAGE 'messages' !hope you made it here :-) +$ SET MESSAGE 'messages' $ ENDIF $ if (fastread.AND.silent.AND.(alldone.eqs."cont")) THEN needman="" $! @@ -589,9 +637,9 @@ brackets; typing carriage return will give you the default. $ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans $ TYPE SYS$INPUT: -In a hurry? You may run '@Configure -d'. This will bypass nearly all +In a hurry? You may run '@Configure "-d"'. This will bypass nearly all the questions and use the computed defaults (or the previous answers provided -there was already a config.sh file). Type '@Configure -h' for a list of +there was already a config.sh file). Type '@Configure "-h"' for a list of options. $ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans @@ -600,7 +648,7 @@ $ TYPE SYS$INPUT: Much effort has been expended to ensure that this shell script will run on any VMS system. If despite that it blows up on yours, your best bet is to edit Configure.com and @ it again. Whatever problems -you have with Configure.com, let me (sugalskd@ous.edu) know how I blew +you have with Configure.com, let me (dan@sidhe.org) know how I blew it. $!This installation script affects things in two ways: @@ -687,7 +735,7 @@ $ TYPE SYS$INPUT: %Config-E-VMS, ERROR: Err, you do not appear to be running VMS! - This package is intended to Configure the building of Perl for VMS. + This procedure is intended to Configure the building of Perl for VMS. $ READ SYS$COMMAND/PROMPT="Continue anyway? [n] " ans $ IF ans @@ -723,7 +771,7 @@ $!: who configured the system $! see 'user' above. $ cf_by = F$EDIT(user,"LOWERCASE") $! cf_time = F$CVTIME() !superceded by procedure below -$ osvers = F$GETSYI("VERSION") +$ osvers = F$EDIT(F$GETSYI("VERSION"),"TRIM") $! $! Peter Prymmer has seen: $! "SYS$TIMEZONE_DIFFERENTIAL" = "-46800" (sic) @@ -811,7 +859,7 @@ $! $TZSet: $ echo "" $ echo "Please tell me in hh:mm form what time offset from GMT/UTC in England" -$ echo "you are. As an example Eastern (US) Standard Time is -5:00 offset, but" +$ echo "you are. As an example Eastern (US) Standard Time is -5:00 offset, but" $ echo "Eastern Daylight Time (summer) is -4:00 offset." $ dflt = "0:00" $ rp = "Enter the Time Zone offset: [''dflt'] " @@ -855,8 +903,14 @@ $! $ IF (F$GETSYI("HW_MODEL") .LT. 1024) $ THEN $ archname = "VMS_VAX" +$ otherarch = "an Alpha" +$ alignbytes="8" +$ arch_type = "ARCH-TYPE=__VAX__" $ ELSE $ archname = "VMS_AXP" +$ otherarch = "a VAX" +$ alignbytes="8" +$ arch_type = "ARCH-TYPE=__AXP__" $ ENDIF $ rp = "What is your architecture name? [''archname'] " $ GOSUB myread @@ -868,24 +922,22 @@ $ THEN $ echo4 "I'll go with ''archname' anyway..." $ ENDIF $ ENDIF -$ IF (archname.EQS."VMS_AXP") +$ dflt = "n" +$ rp = "Will you be sharing your PERL_ROOT with ''otherarch'? [''dflt'] " +$ GOSUB myread +$ if ans.NES."" +$ THEN +$ ans = F$EXTRACT(0,1,F$EDIT(ans,"COLLAPSE, UPCASE")) +$ ENDIF +$ IF (ans.NES."Y") $ THEN -$ dflt = "n" -$ rp = "Are you sharing your PERL_ROOT with a VAX? [''dflt'] " -$ GOSUB myread -$ if ans.NES."" -$ THEN -$ ans = F$EDIT(ans,"COLLAPSE, UPCASE") -$ ENDIF -$ IF (ans.NES."Y") +$ sharedperl = "N" +$ ELSE +$ sharedperl = "Y" +$ IF (archname.EQS."VMS_AXP") $ THEN -$ sharedperl = "N" -$ ELSE -$ sharedperl = "Y" $ macros = macros + """AXE=1""," $ ENDIF -$ ELSE -$ sharedperl = "N" $ ENDIF $! $!: is AFS running? !sfn @@ -894,44 +946,44 @@ $!: set up shell script to do ~ expansion !sfn $!: expand filename !sfn $!: now set up to get a file name !sfn $! +$ prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]" +$ prefix = F$PARSE(prefix,,,,"NO_CONCEAL") - "][" - ".;" +$ prefixbase = prefix - "]" +$ prefix = prefixbase + ".]" +$!: determine root of directory hierarchy where package will be installed. +$ dflt = prefix +$ IF .NOT.silent +$ THEN +$ echo "" +$ echo "By default, ''package' will be installed in ''dflt', pod" +$ echo "pages under ''prefixbase'LIB.POD], etc..., i.e. with ''dflt' as prefix for" +$ echo "all installation directories." +$ echo "On ''osname' the ''prefix' is used to DEFINE the ''packageup'_ROOT prior to installation" +$ echo "as well as during subsequent use of ''package' via ''packageup'_SETUP.COM." +$ ENDIF +$ rp = "Installation prefix to use (for ''packageup'_ROOT)? [ ''dflt' ] " +$ GOSUB myread +$ IF ans.NES."" +$ THEN +$ prefix = ans +$ IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]" +$ ELSE +$ prefix = dflt +$ ENDIF +$! +$! Check here for pre-existing PERL_ROOT. +$! -> ask if removal desired. +$! Check here for writability of requested PERL_ROOT if it is not the default (cwd). +$! -> recommend letting PERL_ROOT be PERL_SRC if requested PERL_ROOT is not writable. +$! $ vms_skip_install = "true" $ dflt = "y" $! echo "" -$ rp = "%Config-I-VMS, Do you wish to skip the """"where install"""" questions? [''dflt'] " +$ rp = "%Config-I-VMS, Skip the remaining """"where install"""" questions? [''dflt'] " $ GOSUB myread $ IF (.NOT.ans).AND.(ans.NES."") THEN vms_skip_install = "false" -$ prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]" -$ prefix = f$parse(prefix,,,,"NO_CONCEAL") - "][" - ".;" -$ prefix = prefix - "]" + ".]" $ IF (.NOT.vms_skip_install) $ THEN -$!: determine root of directory hierarchy where package will be installed. -$ dflt = "default" -$ IF .NOT.silent -$ THEN -$ echo "" -$ echo "By default, ''package' will be installed in ''dflt'/bin, manual" -$ echo "pages under ''dflt'/man, etc..., i.e. with ''dflt' as prefix for" -$ echo "all installation directories. Typically set to /usr/local, but you" -$ echo "may choose /usr if you wish to install ''package' among your system -$ ENDIF -$ IF .NOT.silent -$ THEN TYPE SYS$INPUT: -binaries. If you wish to have binaries under /bin but manual pages -under /usr/local/man, that's ok: you will be prompted separately -for each of the installation directories, the prefix being only used -to set the defaults. -$ ENDIF -$ dflt = prefix -$ rp = "Installation prefix to use? [ ''dflt' ] " -$ GOSUB myread -$ IF ans.NES."" -$ THEN -$ prefix = ans -$ IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]" -$ ELSE -$ prefix = dflt -$ ENDIF $! $!: set the prefixit variable, to compute a suitable default value $! @@ -953,10 +1005,44 @@ $ THEN privlib = ans $ ELSE privlib = dflt $ ENDIF $! -$ ENDIF !%Config-I-VMS, skip "where install" questions +$ ENDIF !%Config-I-VMS, skip remaining "where install" questions +$! +$ perl_symbol = "true" +$ perl_verb = "" +$ dflt = "y" +$ IF .NOT.silent +$ THEN +$ echo "" +$ echo "%Config-I-VMS, You may choose to write ''packageup'_SETUP.COM to assign a foreign" +$ echo "-Config-I-VMS, symbol to invoke ''package', which is the usual method." +$ echO "-Config-I-VMS, If you do not do so then you would need a DCL command verb at the" +$ echo "-Config-I-VMS, process or the system wide level." +$ ENDIF +$ rp = "Invoke perl as a global symbol foreign command [''dflt'] " +$ GOSUB myread +$ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false" +$! +$ IF (.NOT.perl_symbol) +$ THEN +$ dflt = "y" +$ IF .NOT.silent +$ THEN +$ echo "" +$ echo "%Config-I-VMS, Since you won't be using a symbol you must choose to put the ''packageup'" +$ echo "-Config-I-VMS, verb in a per-process table or in the system wide DCLTABLES (which" +$ echo "-Config-I-VMS, would require write privilege)." +$ ENDIF +$ rp = "Invoke perl as a per process command verb [ ''dflt' ] " +$ GOSUB myread +$ IF (.NOT.ans).AND.(ans.NES."") +$ THEN perl_verb = "DCLTABLES" +$ ELSE perl_verb = "PROCESS" +$ ENDIF +$ ENDIF ! (.NOT.perl_symbol) $! $!: set the base revision $ baserev="5.0" +$ revision = baserev - ".0" $!: get the patchlevel $ echo "" $ echo4 "Getting the current patchlevel..." !>&4 @@ -965,21 +1051,42 @@ $ IF (patchlevel_h.NES."") $ THEN $ got_patch = "false" $ got_sub = "false" +$ got_api_revision = "false" +$ got_api_version = "false" +$ got_api_subversion = "false" $ OPEN/READONLY CONFIG 'patchlevel_h' $Patchlevel_h_loop: $ READ/END_Of_File=Close_patch CONFIG line -$ IF ((F$LOCATE("#define PATCHLEVEL",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch)) +$ IF ((F$LOCATE("#define PERL_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch)) $ THEN $ line = F$EDIT(line,"COMPRESS, TRIM") -$ patchlevel = F$EXTRACT(18,F$LENGTH(line)-18,line) +$ patchlevel = F$ELEMENT(2," ",line) $ got_patch = "true" $ ENDIF -$ IF ((F$LOCATE("#define SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub)) +$ IF ((F$LOCATE("#define PERL_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub)) $ THEN $ line = F$EDIT(line,"COMPRESS, TRIM") -$ subversion = F$EXTRACT(18,F$LENGTH(line)-18,line) +$ subversion = F$ELEMENT(2," ",line) $ got_sub = "true" $ ENDIF +$ IF ((F$LOCATE("#define PERL_API_REVISION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_revision)) +$ THEN +$ line = F$EDIT(line,"COMPRESS, TRIM") +$ api_revision = F$ELEMENT(2," ",line) +$ got_api_revision = "true" +$ ENDIF +$ IF ((F$LOCATE("#define PERL_API_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_version)) +$ THEN +$ line = F$EDIT(line,"COMPRESS, TRIM") +$ api_version = F$ELEMENT(2," ",line) +$ got_api_version = "true" +$ ENDIF +$ IF ((F$LOCATE("#define PERL_API_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_subversion)) +$ THEN +$ line = F$EDIT(line,"COMPRESS, TRIM") +$ api_subversion = F$ELEMENT(2," ",line) +$ got_api_subversion = "true" +$ ENDIF $ IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop $Close_patch: $ CLOSE CONFIG @@ -987,24 +1094,14 @@ $ ELSE $ patchlevel="0" $ subversion="0" $ ENDIF -$ echo "(You have ''package' ''baserev' PL''patchlevel' sub''subversion'.)" -$! This whole thing needs replacing w/ F$FAO() calls: -$ patchlevel = F$INTEGER(patchlevel) -$ IF patchlevel.LT.10 -$ THEN patchlevel = "00" + F$STRING(patchlevel) -$ ELSE patchlevel = "0" + F$STRING(patchlevel) -$ ENDIF -$ subversion = F$INTEGER(subversion) -$ IF subversion.GT.0 +$ IF (F$STRING(subversion) .NES. "0") $ THEN -$ IF subversion.LT.10 -$ THEN subversion = "0" + F$STRING(subversion) -$ ELSE subversion = F$STRING(subversion) -$ ENDIF -$ ELSE subversion = "" +$ echo "(You have ''package' revision ''revision' patchlevel ''patchlevel' subversion ''subversion'.)" +$ ELSE +$ echo "(You have ''package' revision ''revision' patchlevel ''patchlevel'.)" $ ENDIF $! -$ version = F$EXTRACT(0,1,baserev) + "_" + patchlevel + subversion +$ version = revision + "_" + patchlevel + "_" + subversion $! $ IF (.NOT.vms_skip_install) $ THEN @@ -1105,7 +1202,7 @@ $! $ ENDIF !%Config-I-VMS, skip "where install" questions $! $!: see if we need a special compiler -$! cc_list = "cc/vaxc|cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands +$! cc_list = "cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands $! $ nocc = "f" $ vms_cc_dflt = "" @@ -1124,12 +1221,12 @@ $ WRITE CONFIG " exit(0);" $ WRITE CONFIG "}" $ CLOSE CONFIG $! -$ DEFINE SYS$ERROR _NLA0: -$ DEFINE SYS$OUTPUT _NLA0: +$! DEFINE SYS$ERROR _NLA0: +$! DEFINE SYS$OUTPUT _NLA0: $ cc/NoObj/list=ccvms.lis ccvms.c $ tmp = $status -$ DEASSIGN SYS$OUTPUT -$ DEASSIGN SYS$ERROR +$! DEASSIGN SYS$OUTPUT +$! DEASSIGN SYS$ERROR $ IF (silent) THEN GOSUB Shut_up $! echo "%Config-I-VMS, After cc compile $status = >''tmp'<" !diagnostic $! @@ -1147,8 +1244,6 @@ $ IF .NOT.silent THEN echo "" $ echo "%Config-I-VMS, Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'" $ IF F$LOCATE("VAX",line).NE.F$LENGTH(line) $ THEN -$ vms_cc_dflt = "/vaxc" -$ vms_cc_available = vms_cc_available + "cc/vaxc " $ IF .NOT.silent $ THEN $ echo "%Config-I-VMS, Will try cc/decc..." @@ -1171,28 +1266,10 @@ $ echo "%Config-I-VMS, You also have: ''line' ''archsufx' ''F$GETSYI("VERSIO $ vms_cc_available = vms_cc_available + "cc/decc " $ ENDIF $ ELSE -$ IF F$LOCATE("DEC",line).NE.F$LENGTH(line) +$ IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line)) $ THEN $ vms_cc_dflt = "/decc" $ vms_cc_available = vms_cc_available + "cc/decc " -$ echo "%Config-I-VMS, Will try cc/vaxc..." -$ DEFINE SYS$ERROR _NLA0: -$ DEFINE SYS$OUTPUT _NLA0: -$ SET NOON -$ cc/vaxc/NoObj/list=ccvms.lis ccvms.c -$ tmp = $status -$ DEASSIGN SYS$OUTPUT -$ DEASSIGN SYS$ERROR -$ SET ON -$ IF (silent) THEN GOSUB Shut_up -$ IF tmp.NE.%X10B90001 -$ THEN -$ echo "%Config-I-VMS, Apparently you don't have that one." -$ ELSE -$ GOSUB List_parse -$ echo "%Config-I-VMS, You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'" -$ vms_cc_available = vms_cc_available + "cc/vaxc " -$ ENDIF $ ENDIF $ ENDIF $! @@ -1241,29 +1318,19 @@ $ IF ans.NES."" $ THEN $ ans = F$EDIT(ans,"TRIM, COMPRESS, LOWERCASE") $ Mcc = ans -$ IF F$LOCATE("dec",ans).NE.F$LENGTH(ans) +$ IF (F$LOCATE("dec",ans).NE.F$LENGTH(ans)).or.(F$LOCATE("compaq",ans).NE.F$LENGTH(ans)) $ THEN $ Mcc = "cc/decc" $ Using_Dec_C = "Yes" $ C_COMPILER_Replace = "CC=cc=''Mcc'" $ ENDIF -$ IF F$LOCATE("vax",ans).NE.F$LENGTH(ans) -$ THEN -$ Mcc = "cc/vaxc" -$ Using_Vax_C = "Yes" -$ C_COMPILER_Replace = "CC=cc=''Mcc'" -$ ENDIF $ IF Mcc.NES.dflt $ THEN -$ IF F$LOCATE("dec",dflt).NE.F$LENGTH(dflt) +$ IF (F$LOCATE("dec",dflt).NE.F$LENGTH(dflt)).or(F$LOCATE("compaq",dflt).NE.F$LENGTH(dflt)) $ THEN $ C_COMPILER_Replace = "CC=cc=''Mcc'" $ ELSE $ Using_Dec_C = "Yes" -$ IF F$LOCATE("vax",dflt).NE.F$LENGTH(dflt) -$ THEN -$ C_COMPILER_Replace = "CC=cc=''Mcc'" -$ ENDIF $ ENDIF $ ELSE $ IF Mcc .EQS. "cc/decc" @@ -1279,11 +1346,6 @@ $ THEN $ Using_Dec_C = "Yes" $ C_COMPILER_Replace = "CC=cc=''Mcc'" $ ENDIF -$ IF Mcc .EQS. "cc/vaxc" -$ THEN -$ Using_Vax_C = "Yes" -$ C_COMPILER_Replace = "CC=cc=''Mcc'" -$ ENDIF $ IF Mcc .EQS. "gcc" $ THEN $ Using_Gnu_C = "Yes" @@ -1339,36 +1401,8 @@ $ CLOSE CONFIG $! DELETE/NOLOG/NOCONFIRM deccvers.*; $ echo "You are using Dec C ''line'" $ Dec_C_Version = line -$ ENDIF -$Vaxc_Invoke_check: -$ IF "''Using_Vax_C'".EQS."Yes" -$ THEN -$ echo "" -$ echo4 "Checking to see how to invoke Vax C..." -$ OPEN/WRITE CONFIG vaxcchk.c -$ WRITE CONFIG "#include " -$ WRITE CONFIG "int main() {" -$ WRITE CONFIG " printf(""%i\n"", ""1"");" -$ WRITE CONFIG " exit(0);" -$ WRITE CONFIG "}" -$ CLOSE CONFIG -$ DEFINE SYS$ERROR _NLA0: -$ DEFINE SYS$OUTPUT _NLA0: -$ SET NOON -$ cc/vaxc/NoObj vaxcchk.c -$ tmp = $status -$ DEASSIGN SYS$OUTPUT -$ DEASSIGN SYS$ERROR -$ SET ON -$ IF (silent) THEN GOSUB Shut_up -$ IF tmp.NE.%X10B90001 -$ THEN -$ Mcc = "cc" -$ ELSE -$ Mcc = "cc/vaxc" -$ ENDIF -$Vax_c_cleanup: -$ DELETE/NOLOG/NOCONFIRM vaxcchk.*; +$ Dec_C_Version = Dec_C_Version + 0 +$ if Dec_C_Version.ge.60200000 THEN CC_FLAGS = CC_FLAGS + "/NOANSI_ALIAS" $ ENDIF $Gcc_check: $ if "''using_gnu_c'" .eqs. "Yes" @@ -1561,7 +1595,7 @@ $ IF mydomain.NES."" !no periods in DECnet names like "MYDECNODE::" $ THEN $ rp = "What is your domain name? [''mydomain'] " $ GOSUB myread -$ IF ans THEN mydomain = ans +$ IF ans .nes. "" THEN mydomain = ans $!: translate upper to lower if necessary $ mydomain = F$EDIT(mydomain,"COLLAPSE") $ mylowdomain = F$EDIT(mydomain," LOWERCASE") @@ -1582,10 +1616,10 @@ no easy means to double check it. The default value provided below is most probably close to the reality but may not be valid from outside your organization... $ ENDIF -$ dflt = "''cf_by@''myhostname'"+"''mydomain'" +$ dflt = "''cf_by'@''myhostname'"+"''mydomain'" $ rp = "What is your e-mail address? [''dflt'] " $ GOSUB myread -$ IF ans +$ IF ans .nes. "" $ THEN cf_email = ans $ ELSE cf_email = dflt $ ENDIF @@ -1602,7 +1636,7 @@ $ ENDIF $ dflt = "''cf_email'" $ rp = "Perl administrator e-mail address [''dflt'] " $ GOSUB myread -$ IF ans +$ IF ans .nes. "" $ THEN perladmin = ans $ ELSE perladmin = dflt $ ENDIF @@ -1669,13 +1703,115 @@ $ IF ans.eqs."socketshr" then has_socketshr = "T" $ endif $! $! +$! Ask if they want to build with VMS_DEBUG perl +$ echo "" +$ echo "Perl can be built to run under the VMS debugger." +$ echo "You should only select this option if you are debugging" +$ echo "perl itself. This can be a useful feature if you are " +$ echo "embedding perl in a program." +$ dflt = "n" +$ rp = "Build a VMS-DEBUG version of Perl? [''dflt'] " +$ GOSUB myread +$ IF ans.eqs."" then ans = dflt +$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y" +$ THEN +$ use_vmsdebug_perl = "Y" +$ macros = macros + """__DEBUG__=1""," +$ ELSE +$ use_vmsdebug_perl = "N" +$ ENDIF +$! +$! Ask if they want to build with DEBUGGING +$ echo "" +$ echo "Perl can be built with extra runtime debugging enabled. This +$ echo "enables the -D switch, at the cost of some performance. It +$ echo "was mandatory on perl 5.005 and before on VMS, but is now +$ echo "optional. If you don't generally use it you should probably +$ echo "leave this off and gain a bit of extra speed. +$ dflt = "y" +$ rp = "Build a DEBUGGING version of Perl? [''dflt'] " +$ GOSUB myread +$ IF ans.eqs."" then ans = dflt +$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y" +$ THEN +$ use_debugging_perl = "Y" +$ ELSE +$ use_debugging_perl = "N" +$ ENDIF +$! +$! Ask if they want to build with MULTIPLICITY +$ echo "" +$ echo "The perl interpreter engine can be built in a way that makes it +$ echo "possible for a program that embeds perl into it (and yes, you can +$ echo "do that--it's pretty keen) to have multiple perl interpreters active +$ echo "at once. There is some performance overhead, however, so you +$ echo "probably don't want to choose this unless you're going to be doing +$ echo "funky perl embedding." +$ dflt = "n" +$ rp = "Build with MULTIPLICITY? [''dflt'] " +$ GOSUB myread +$ if ans.eqs."" then ans = dflt +$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y" +$ THEN +$ use_multiplicity="Y" +$ ELSE +$ use_multiplicity="N" +$ ENDIF +$! +$! Ask if they want to build with 64-bit support +$ IF (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1") +$ THEN +$ dflt = use64bitint +$ echo "" +$ echo "You can have native 64-bit long integers. +$ echo "" +$ echo "Perl can be built to take advantage of 64-bit integer types +$ echo "on some systems, which provide a much larger range for perl's +$ echo "mathematical operations. (Note that does *not* enable 64-bit +$ echo "fileops at the moment, as Dec C doesn't do that yet)." +$ echo "Choosing this option will most probably introduce binary incompatibilities. +$ echo "" +$ echo "If this doesn't make any sense to you, just accept the default ''dflt'. +$ rp = "Try to use 64-bit integers, if available? [''dflt'] " +$ GOSUB myread +$ IF ans .EQS. "" THEN ans = dflt +$ IF (f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) .EQS. "Y") +$ THEN +$ use64bitint="Y" +$ ELSE +$ use64bitint="N" +$ ENDIF +$ IF (use64bitint) +$ THEN +$ dflt = use64bitall +$ echo "" +$ echo "Since you chose 64-bitness you may want to try maximal 64-bitness. +$ echo "What you have chosen is minimal 64-bitness which means just enough +$ echo "to get 64-bit integers. The maximal means using as much 64-bitness +$ echo "as is possible on the platform. This in turn means even more binary +$ echo "incompatibilities. On the other hand, your platform may not have +$ echo "any more maximal 64-bitness than what you already have chosen. +$ echo "" +$ echo "If this doesn't make any sense to you, just accept the default ''dflt'. +$ rp = "Try to use full 64-bit support, if available? [''dflt'] " +$ GOSUB myread +$ IF ans .EQS. "" THEN ans = dflt +$ IF (f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) .EQS. "Y") +$ THEN +$ use64bitall="Y" +$ ELSE +$ use64bitall="N" +$ ENDIF +$ ENDIF +$ ENDIF ! AXP && >= 7.1 +$! $! Ask about threads, if appropriate $ if (Using_Dec_C.eqs."Yes") $ THEN +$ echo "" $ echo "This version of Perl can be built with threads. While really nifty, $ echo "they are a beta feature, and there is a speed penalty for perl $ echo "programs if you build with threads *even if you don't use them* -$ echo "" $ dflt = "n" $ rp = "Build with threads? [''dflt'] " $ GOSUB myread @@ -1683,6 +1819,32 @@ $ if ans.eqs."" then ans = dflt $ if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y") $ THEN $ use_threads="T" +$! +$ ! Shall we do the 5.005-stype threads, or IThreads? +$ echo "As of 5.5.640, Perl has two different internal threading +$ echo "implementations, the 5.005 version (5005threads) and an +$ echo "interpreter-based version (ithreads) that has one +$ echo "interpreter per thread. Both are very experimental. This +$ echo "arrangement exists to help developers work out which one +$ echo "is better. +$ echo " +$ echo "If you're a casual user, you probably don't want +$ echo "interpreter-threads at this time. There doesn't yet exist +$ echo "a way to create threads from within Perl in this model, +$ echo "i.e., ""use Thread;"" will NOT work. +$ echo " +$ dflt = "n" +$ rp = "Build with Interpreter threads? [''dflt'] +$ GOSUB myread +$ if ans.eqs."" then ans = dflt +$ if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y") +$ THEN +$ use_ithreads="Y" +$ use_5005_threads="N" +$ ELSE +$ use_ithreads="N" +$ use_5005_threads="Y" +$ ENDIF $ ! Are they on VMS 7.1 on an alpha? $ if (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1") $ THEN @@ -1695,7 +1857,6 @@ $ echo "all the threads in a program, even on a single-processor $ echo "machine. Unfortunately this feature isn't safe on an $ echo "unpatched 7.1 system. (Several OS patches were required when $ echo "this procedure was written) -$ echo "" $ dflt = "n" $ rp = "Enable multiple kernel threads and upcalls? [''dflt'] " $ gosub myread @@ -1707,27 +1868,87 @@ $ ENDIF $ ENDIF $ ENDIF $ ENDIF +$ if archname .eqs. "VMS_AXP" +$ then +$! +$! Case sensitive? +$ echo "" +$ echo "By default, perl (and pretty much everything else on VMS) uses +$ echo "case-insensitive linker symbols. Which is to say, when the +$ echo "underlying C code makes a call to a routine called Perl_foo in +$ echo "the source, the name in the object modules or shareable images +$ echo "is really PERL_FOO. There are some packages that use an +$ echo "embedded perl interpreter that instead require case-sensitive +$ echo "linker symbols. +$ echo "" +$ echo "If you have no idea what this means, and don't have +$ echo "any program requiring anything, choose the default. +$ dflt = be_case_sensitive +$ rp = "Case-sensitive symbols [''dflt'] " +$ gosub myread +$ if ans.eqs."" then ans="''dflt'" +$ be_case_sensitive = "''ans'" $! -$! Pre-load %ENV? +$! IEEE math? $ echo "" -$ echo "Because of the way perl fetches the list of logical names -$ echo "for the %ENV hash (we spawn a subprocess that does a -$ echo "SHOW LOGICALS *, which is expensive), we defer fetching it -$ echo "until the first time a program iterates over the %ENV hash. -$ echo "This means things like 'exists($ENV{'SYS$MANAGER'})' will -$ echo "return false unless you've already accessed $ENV{SYS$MANAGER} -$ echo "or done something like a keys %ENV." +$ echo "Perl normally uses G_FLOAT format floating point numbers +$ echo "internally, as do most things on VMS. You can, however, build +$ echo "with IEEE floating point numbers instead if you need to. +$ dflt = use_ieee_math +$ rp = "Use IEEE math [''dflt'] " +$ gosub myread +$ if ans.eqs."" then ans="''dflt'" +$ use_ieee_math = "''ans'" +$ endif +$! CC Flags $ echo "" -$ echo "If you choose, perl can populate the %ENV hash at startup. -$ echo "This will exact both a memory penalty (to store the keys) and -$ echo "a time penalty (to spawn the subprocess) every time you invoke -$ echo "perl. Depending on your system, this might not be a big deal. +$ echo "You can, if you need to, pass extra flags on to the C +$ echo "compiler. In general you should only do this if you really, +$ echo "really know what you're doing. +$ dflt = user_c_flags +$ rp = "Extra C flags [''dflt'] " +$ gosub myread +$ if ans.eqs."" then ans="''dflt'" +$ user_c_flags = "''ans'" +$! +$! Ask whether they want to use secure logical translation when tainting $ echo "" -$ dflt = "n" -$ rp = "Populate %ENV at startup time? [''dflt'] " +$ echo "As Perl starts up, it checks several logical names, such as" +$ echo "PERL5LIB and PERL_ENV_TABLES, which allow you to modify aspects" +$ echo "of its behavior. For additional security, you may limit this" +$ echo "process to executive- and kernel-mode translation when tainting" +$ echo "is enabled. In this case, logical names normally skipped when" +$ echo "tainting is enabled (e.g. PERL5OPTS) are translated as well." +$ echo "If you do not choose to do this, the usual order of access modes" +$ echo "is used for logical name translation." +$ echo "" +$ echo "This restriction does not apply to the %ENV hash or to implicit" +$ echo "logical name translation during parsing of file specifications;" +$ echo "these always use the normal sequence of access modes for logical" +$ echo "name translation." +$ dflt = "y" +$ rp = "Use secure logical name translation? [''dflt'] " +$ GOSUB myread +$ if ans.eqs."" then ans="''dflt'" +$ d_secintgenv = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")) +$! +$! Ask whether they want to default filetypes +$ echo "" +$ echo "When you pass the name of a program to Perl on the command line," +$ echo "it generally doesn't supply any defaults unless the -S command" +$ echo "line switch is specified. In keeping with the VMS tradition of" +$ echo "default file types, however, you can configure Perl to try default" +$ echo "file types of nothing, .pl, and .com, in that order (e.g. typing" +$ echo """$ perl foo"" would cause Perl to look for foo., then foo.pl, and" +$ echo "finally foo.com)." +$ echo "" +$ echo "This is currently broken in some configurations. Only enable it if +$ echo "you know what you're doing. " +$ dflt = "N" +$ rp = "Always use default file types? [''dflt'] " $ GOSUB myread $ if ans.eqs."" then ans="''dflt'" -$ preload_env = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")) +$ d_alwdeftype = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) $! $! Ask if they want to use perl's memory allocator $ echo "" @@ -1735,12 +1956,11 @@ $ echo "Perl has a built-in memory allocator that's tuned for perl's $ echo "normal memory usage. It's oftentimes better than the standard $ echo "system memory allocator. It also has the advantage of providing $ echo "memory allocation statistics, if you choose to enable them. -$ echo "" $ dflt = "n" $ rp = "Build with perl's memory allocator? [''dflt'] " $ GOSUB myread $ if ans.eqs."" then ans="''dflt'" -$ mymalloc = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")) +$ mymalloc = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) $ if mymalloc.eqs."Y" $ THEN $ if use_debugging_perl.eqs."Y" @@ -1749,12 +1969,11 @@ $ echo "" $ echo "Perl can keep statistics on memory usage if you choose to use $ echo "them. This is useful for debugging, but does have some $ echo "performance overhead. -$ echo "" $ dflt = "n" $ rp = "Do you want the debugging memory allocator? [''dflt'] " $ gosub myread $ if ans.eqs."" then ans="''dflt'" -$ use_debugmalloc = f$extract(0, 1, f$edit(ans, "TRIM,COMPRESS,UPCASE")) +$ use_debugmalloc = f$extract(0, 1, f$edit(ans, "COLLAPSE,UPCASE")) $ ENDIF $ ! Check which memory allocator we want $ echo "" @@ -1765,7 +1984,6 @@ $ echo "larger allocations), and PACK_MALLOC (which is optimized to save $ echo "memory for smaller allocations). They're all good, but if your $ echo "usage tends towards larger chunks use TWO_POT, otherwise use $ echo "PACK_MALLOC." -$ echo "" $ dflt = "DEFAULT" $ rp = "Memory allocator (DEFAULT, TWO_POT, PACK_MALLOC) [''dflt'] " $ GOSUB myread @@ -1779,22 +1997,56 @@ $ echo "" $ echo "It's time to specify which modules you want to build into $ echo "perl. Most of these are standard and should be chosen, though $ echo "you might, for example, want to build GDBM_File instead of -$ echo "SDBM_File if you have the GDBM library built on your machine +$ echo "SDBM_File if you have the GDBM library built on your machine. +$ echo "Whatever you do, make sure the re module is first or things will +$ echo "break badly" $ echo " $ echo "Which modules do you want to build into perl?" -$ dflt = "Fcntl Errno IO Opcode Dumper attrs re Stdio DCLsym B SDBM_File" +$! dflt = "Fcntl Errno File::Glob IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File" +$ dflt = "re Fcntl Errno File::Glob IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Thread Sys::Hostname" $ if Using_Dec_C.eqs."Yes" $ THEN $ dflt = dflt + " POSIX" -$ if Use_Threads.eqs."T" -$ THEN -$ dflt = dflt + " Thread" -$ ENDIF $ ENDIF $ rp = "[''dflt'] " $ GOSUB myread $ if ans.eqs."" then ans = "''dflt'" +$ a = "" +$ j = 0 +$ xloop1: +$ x = f$elem(j," ",ans) +$ j = j + 1 +$ if x .eqs. " " then goto exloop1 +$ xloop2: +$ k = f$locate("::",x) +$ if k .ge. f$len(x) then goto exloop2 +$ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x) +$ goto xloop2 +$ exloop2: +$ a = a + " " + x +$ goto xloop1 +$ exloop1: +$ ans = f$edit(a,"trim") +$! +$ a = "" +$ j = 0 +$ xloop3: +$ x = f$elem(j," ",dflt) +$ j = j + 1 +$ if x .eqs. " " then goto exloop3 +$ xloop4: +$ k = f$locate("::",x) +$ if k .ge. f$len(x) then goto exloop4 +$ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x) +$ goto xloop4 +$ exloop4: +$ a = a + " " + x +$ goto xloop3 +$ exloop3: +$ dflt = f$edit(a,"trim") +$! $ extensions = "''ans'" +$ perl_known_extensions = "''dflt'" $! $! %Config-I-VMS, determine build/make utility here (make gmake mmk mms) $ echo "" @@ -1821,9 +2073,9 @@ $Build_probe: $ build = F$ELEMENT(n,"/",builders) $ probe = F$ELEMENT(n,"!",probers) $ echo "Testing whether you have ''build' on your system..." -$ SET NOON !sorry :-( -$ ON CONTROL_Y THEN GOTO Reenable_messages_build !sorry :-( -$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT !sorry :-( +$ SET NOON +$ ON CONTROL_Y THEN GOTO Reenable_messages_build +$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT $ 'build' 'probe' $ IF ($SEVERITY .EQ. 1) $ THEN @@ -1838,9 +2090,9 @@ $ IF (.NOT. default_set) THEN dflt = build $ ELSE $ echo "Nope." $ ENDIF -$Reenable_messages_build: !hope you made it here :-) -$ SET MESSAGE 'messages' !hope you made it here :-) -$ SET ON !hope you made it here :-) +$Reenable_messages_build: +$ SET MESSAGE 'messages' +$ SET ON $ n = n + 1 $ IF (n .LT. max_build) THEN GOTO Build_probe $! @@ -1912,13 +2164,13 @@ $! echo4 "Updating makefile..." $! $ IF (make .EQS. "MMS").OR.(make .EQS. "MMK") $ THEN -$ makefile = "" !wrt MANIFEST dir -$ UUmakefile = "DESCRIP.MMS" !wrt CWD dir -$ DEFmakefile = "DESCRIP.MMS" !wrt DEF dir (?) +$ makefile = "" !wrt MANIFEST dir +$ UUmakefile = "[-]DESCRIP.MMS" !wrt CWD dir +$ DEFmakefile = "DESCRIP.MMS" !wrt DEF dir (?) $ ELSE -$ makefile = " -f [.VMS]Makefile." !wrt MANIFEST dir -$ UUmakefile = "[-.VMS]Makefile." !wrt CWD dir -$ DEFmakefile = "[-.VMS]Makefile." !wrt DEF dir (?) +$ makefile = " -f Makefile." !wrt MANIFEST dir +$ UUmakefile = "[-]Makefile." !wrt CWD dir +$ DEFmakefile = "Makefile." !wrt DEF dir (?) $ ENDIF $! $ IF macros.NES."" @@ -1927,21 +2179,108 @@ $ tmp = F$LENGTH(macros) $ macros = F$EXTRACT(0,(tmp-1),macros) !miss trailing comma $ macros = "/macro=(" + macros + ")" $ ENDIF +$! Build up the extra C flags +$! +$ if use_ieee_math +$ then +$ extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm_results" +$ endif +$ if be_case_sensitive +$ then +$ extra_flags = "''extra_flags'" + "/Names=As_Is" +$ endif +$ extra_flags = "''extra_flags'" + "''user_c_flags'" $! $! Invoke the subconfig piece $! $ echo "" -$ echo4 "Checking the C Run time library" +$ echo4 "Checking the C run-time library" $ dflt = F$ENVIRONMENT("DEFAULT") $ SET DEFAULT [-.vms] $ @subconfigure $ SET DEFAULT 'dflt $! +$! Warn of dangerous symbols or logical names +$! +$Bad_environment: SUBROUTINE +$ Bad_env = "" +$ IF p2 .eqs. "SYMBOL" +$ THEN +$ IF f$type('p1) .nes. "" THEN Bad_env := SYMBOL +$ ELSE +$ IF f$trnlnm(p1) .nes. "" THEN Bad_env := LOGICAL +$ ENDIF +$ IF Bad_env .eqs. "SYMBOL" .or. Bad_env .eqs. "LOGICAL" +$ THEN +$ IF f$search("config.msg") .nes. "" +$ THEN +$ OPEN/APPEND CONFIG config.msg +$ ELSE +$ OPEN/WRITE CONFIG config.msg +$ ENDIF +$ IF Bad_env .eqs. "SYMBOL" +$ THEN +$ WRITE CONFIG "" +$ WRITE CONFIG "Symbol name ''p1' found in environment as " + &p1 +$ WRITE CONFIG " delete before building ''package' via:" +$ WRITE CONFIG " $ DELETE/SYMBOL/GLOBAL ''p1'" +$ IF f$locate("""",&p1) .ge. f$length(&p1) +$ THEN +$ WRITE CONFIG " after building, testing, and installing ''package' +$ WRITE CONFIG " restore the symbol with:" +$ WRITE CONFIG " $ ''p1' == """ + &p1 + """" +$ ENDIF +$ ENDIF +$ IF Bad_env .eqs. "LOGICAL" +$ THEN +$ WRITE CONFIG "" +$ WRITE CONFIG "Logical name ''p1' found in environment as " + f$trnlnm(p1) +$ WRITE CONFIG " deassign before building ''package'" +$ ENDIF +$ CLOSE CONFIG +$ Bad_env = "" +$ ENDIF +$ EXIT +$ ENDSUBROUTINE ! Bad_environment +$ echo "" +$ echo4 "%Config-I-VMS, Checking for dangerous pre-existing global symbols and logical names." +$ CALL Bad_environment "TMP" +$ CALL Bad_environment "LIB" +$ CALL Bad_environment "T" +$ CALL Bad_environment "FOO" +$ CALL Bad_environment "EXT" +$ CALL Bad_environment "TEST" "SYMBOL" +$ IF f$search("config.msg") .eqs. "" THEN echo "OK." +$! $! %Config-I-VMS, write perl_setup.com here $! +$ IF (.NOT.perl_symbol) +$ THEN +$ file_2_find = "[-]''packageup'.cld" +$ echo "" +$ echo4 "%Config-I-VMS, The perl.cld file is now being written..." +$ OPEN/WRITE CONFIG 'file_2_find' +$ ext = ".exe" +$ IF ((sharedperl) .AND. (f$getsyi("ARCH_NAME") .NES. "VAX")) THEN ext := .AXE +$ IF (use_vmsdebug_perl) +$ THEN +$ WRITE CONFIG "define verb dbgperl" +$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]dbgperl''ext'") +$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)") +$ WRITE CONFIG "" +$ WRITE CONFIG "define verb perl" +$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]ndbgPerl''ext'") +$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)") +$ ELSE +$ WRITE CONFIG "define verb perl" +$ WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]perl''ext'") +$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)") +$ ENDIF +$ CLOSE CONFIG +$ ENDIF ! (.NOT.perl_symbol) $ echo "" $ echo4 "%Config-I-VMS, The perl_setup.com file is now being written..." -$ file_2_find = "[-.vms]perl_setup.com" +$ file_2_find = "[-]perl_setup.com" $ OPEN/WRITE CONFIG 'file_2_find' $ WRITE CONFIG "$!" $ WRITE CONFIG "$! Perl_Setup.com ''cf_time'" @@ -1952,11 +2291,42 @@ $ ELSE $ WRITE CONFIG "$! This perl configured & administered by ''perladmin'" $ ENDIF $ WRITE CONFIG "$!" +$ prefix = prefix - "000000." $ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN - prefix = prefix - "]" + ".]" $ WRITE CONFIG "$ define/translation=concealed Perl_Root ''prefix'" -$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl" -$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr.Exe" +$ WRITE CONFIG "$ ext = "".exe""" +$ IF sharedperl .EQS. "Y" +$ THEN +$ write config "$ if f$getsyi(""ARCH_NAME"") .nes. ""VAX"" then ext = "".AXE""" +$ ENDIF +$ IF (perl_symbol) +$ THEN +$ IF (use_vmsdebug_perl) +$ THEN +$ WRITE CONFIG "$ dbgperl :== $Perl_Root:[000000]dbgPerl'ext'" +$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]ndbgPerl'ext'" +$ WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'" +$ ELSE +$ WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl'ext'" +$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'" +$ ENDIF +$ ELSE ! .NOT.perl_symbol +$ IF (use_vmsdebug_perl) +$ THEN +$ WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'" +$ ELSE +$ WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'" +$ ENDIF +$ IF perl_verb .EQS. "PROCESS" +$ THEN +$ WRITE CONFIG "$ set command ''packagup'_ROOT:[000000]''packageup'.CLD" +$ ENDIF +$ ENDIF ! perl_symbol +$ WRITE CONFIG "$ define/nolog pod2text Perl_Root:[lib.pod]pod2text.com" +$ WRITE CONFIG "$ define/nolog pod2html Perl_Root:[lib.pod]pod2html.com" +$ WRITE CONFIG "$ define/nolog pod2man Perl_Root:[lib.pod]pod2man.com" +$! $ IF (tzneedset) $ THEN $ WRITE CONFIG "$ define SYS$TIMEZONE_DIFFERENTIAL ''tzd'" @@ -1966,7 +2336,40 @@ $ ENDIF $ WRITE CONFIG "$!" $ WRITE CONFIG "$! Symbols for commonly used scripts:" $ WRITE CONFIG "$!" -$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t""" +$ IF (perl_symbol) +$ THEN +$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t""" +$ WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text""" +$ WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html""" +$ WRITE CONFIG "$ pod2latex == ""'"+"'Perl' Perl_Root:[lib.pod]pod2latex.com""" +$ WRITE CONFIG "$!pod2man == ""'"+"'Perl' pod2man""" +$ WRITE CONFIG "$!Perlbug == ""'"+"'Perl' Perl_Root:[lib]Perlbug.com""" +$ WRITE CONFIG "$ c2ph == ""'"+"'Perl' Perl_Root:[utils]c2ph.com""" +$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions) +$ THEN +$ WRITE CONFIG "$ dprofpp == ""'"+"'Perl' Perl_Root:[utils]dprofpp.com""" +$ ENDIF +$ WRITE CONFIG "$ h2ph == ""'"+"'Perl' Perl_Root:[utils]h2ph.com""" +$ WRITE CONFIG "$ h2xs == ""'"+"'Perl' Perl_Root:[utils]h2xs.com""" +$ WRITE CONFIG "$!perlcc == ""'"+"'Perl' Perl_Root:[utils]perlcc.com""" +$ WRITE CONFIG "$ splain == ""'"+"'Perl' Perl_Root:[utils]splain.com""" +$ ELSE +$ WRITE CONFIG "$ Perldoc == ""Perl Perl_Root:[lib.pod]Perldoc.com -t""" +$ WRITE CONFIG "$ pod2text == ""Perl pod2text""" +$ WRITE CONFIG "$ pod2html == ""Perl pod2html""" +$ WRITE CONFIG "$ pod2latex == ""Perl Perl_Root:[lib.pod]pod2latex.com""" +$ WRITE CONFIG "$!pod2man == ""Perl pod2man""" +$ WRITE CONFIG "$!Perlbug == ""Perl Perl_Root:[lib]Perlbug.com""" +$ WRITE CONFIG "$ c2ph == ""Perl Perl_Root:[utils]c2ph.com""" +$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions) +$ THEN +$ WRITE CONFIG "$ dprofpp == ""Perl Perl_Root:[utils]dprofpp.com""" +$ ENDIF +$ WRITE CONFIG "$ h2ph == ""Perl Perl_Root:[utils]h2ph.com""" +$ WRITE CONFIG "$ h2xs == ""Perl Perl_Root:[utils]h2xs.com""" +$ WRITE CONFIG "$!perlcc == ""Perl Perl_Root:[utils]perlcc.com""" +$ WRITE CONFIG "$ splain == ""Perl Perl_Root:[utils]splain.com""" +$ ENDIF $ CLOSE CONFIG $! $ echo "" @@ -1976,6 +2379,20 @@ $ echo "-Config-I-VMS, Add that file (or an @ call to it) to your [SY]LOGIN.COM $ echo "-Config-I-VMS, when you are satisfied with a successful compilation," $ echo "-Config-I-VMS, testing, and installation of your perl." $ echo "" +$ IF ((.NOT.perl_symbol) .AND. (perl_verb .EQS. "DCLTABLES")) +$ THEN +$ file_2_find = "[-]''packageup'_install.com" +$ OPEN/WRITE CONFIG 'file_2_find +$ WRITE CONFIG "$ set command perl /table=sys$common:[syslib]dcltables.exe -" +$ WRITE CONFIG " /output=sys$common:[syslib]dcltables.exe" +$ WRITE CONFIG "$ install replace sys$common:[syslib]dcltables.exe" +$ CLOSE CONFIG +$ echo4 "" +$ echo4 "%Config-I-VMS, In order to install the ''packageup' verb into DCLTABLES run:" +$ echo4 "-Config-I-VMS, @ ''F$SEARCH(file_2_find)'" +$ echo4 "-Config-I-VMS, after a successful build, test, and install. Do so with CMKRNL privilege." +$ echo4 "" +$ ENDIF $! $!figure out where we "are" by parsing 'vms_default_directory_name' $! @@ -2009,6 +2426,15 @@ $ ENDIF $ echo4 " ''make'''makefile'", macros $ echo4 "" $! +$ IF ( F$SEARCH("config.msg").NES."" ) +$ THEN +$ echo "Hmm. I also noted the following information while running:" +$ echo "" +$ type config.msg +$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) config.msg +$ DELETE/NOLOG/NOCONFIRM config.msg; +$ ENDIF +$! $Clean_up: $ IF (silent) $ THEN diff --git a/gnu/usr.bin/perl/cygwin/Makefile.SHs b/gnu/usr.bin/perl/cygwin/Makefile.SHs new file mode 100644 index 00000000000..df15826f648 --- /dev/null +++ b/gnu/usr.bin/perl/cygwin/Makefile.SHs @@ -0,0 +1,193 @@ +# This file is read by Makefile.SH to produce rules for $(LIBPERL) (and +# some additional rules as well). + +# Rerun `sh Makefile.SH; make depend' after making any change. + +# Additional rules supported: libperls.a (for static linking), +# ld2, perlld (dynamic linking tools) +# + +#! /bin/sh +case $CONFIG in +'') + if test -f config.sh; then TOP=.; + elif test -f ../config.sh; then TOP=..; + elif test -f ../../config.sh; then TOP=../..; + elif test -f ../../../config.sh; then TOP=../../..; + elif test -f ../../../../config.sh; then TOP=../../../..; + else + echo "Can't find config.sh."; exit 1 + fi + . $TOP/config.sh + ;; +esac + +addtopath=`pwd` +$spitshell >>Makefile <ld2 + @echo "installing ld2 into $installbin" +# install is included in Cygwin distributions, and we make a note of th +# requirement in the README.cygwin file. However, let's give them +# a warning. + @install -c -m 755 ld2 ${installbin}/ld2 + @if test ! -f ${installbin}/ld2; then \ + echo "*************************************************" ; \ + echo "Make will probably fail in a few more steps." ; \ + echo "When it does, copy \"ld2\" to a directory in" ; \ + echo "your path, other than \".\"." ; \ + echo "\"/usr/local/bin\" or something similar will do." ; \ + echo "Then restart make." ; \ + echo "*************************************************" ; \ + fi + +!GROK!THIS! + +$spitshell >>Makefile <perlld + +!GROK!THIS! + +# make sure that all library names are not malformed +libperl=`echo $libperl|sed -e s,\\\..*,,` + +# it would be nice to allow dll to have any name, +# but for now i insist on 'lib.dll' +if ( ! ( echo $libperl | grep '^lib' >/dev/null ) ) +then + libperl=lib$libperl +fi +linklibperl=-l`echo $libperl|sed -e s,^lib,,` + +$spitshell >>Makefile <>Makefile <<'!NO!SUBS!' +cwobj = $(obj) + +# override default rule (NB: make croaks!) to force dll usage +perlmain$(OBJ_EXT): perlmain.c + $(CCCMD) $(PLDLFLAGS) -DUSEIMPORTLIB $*.c + +# library used to make statically linked executables +# miniperl is linked against it to avoid libperl.dll locking +$(LIBPERL)s$(LIB_EXT): $& perl$(OBJ_EXT) $(cwobj) + $(AR) rcu $@ perl$(OBJ_EXT) $(cwobj) + +# dll and import library +$(LIBPERL)$(LIB_EXT): $& perl$(OBJ_EXT) $(cwobj) ld2 + $(LDLIBPTH) ld2 $(SHRPLDFLAGS) -o $(LIBPERL)$(DLSUFFIX) \ + perl$(OBJ_EXT) $(cwobj) $(libs) + +# How to build executables. + +# The miniperl -w -MExporter line is a basic cheap test to catch errors +# before make goes on to run preplibrary and then MakeMaker on extensions. +# This is very handy because later errors are often caused by miniperl +# build problems but that's not obvious to the novice. +# The Module used here must not depend on Config or any extensions. + +miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)s$(LIB_EXT) opmini$(OBJ_EXT) + $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL)s $(libs) + $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '' || $(MAKE) minitest + +!NO!SUBS! + ;; +*) +$spitshell >>Makefile <<'!NO!SUBS!' +cwobj = $(obj) + +# perl library +$(LIBPERL)$(LIB_EXT): $& perl$(OBJ_EXT) $(cwobj) + $(AR) rcu $@ perl$(OBJ_EXT) $(cwobj) + +# How to build executables. + +# The miniperl -w -MExporter line is a basic cheap test to catch errors +# before make goes on to run preplibrary and then MakeMaker on extensions. +# This is very handy because later errors are often caused by miniperl +# build problems but that's not obvious to the novice. +# The Module used here must not depend on Config or any extensions. + +miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) opmini$(OBJ_EXT) + $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs) + $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '' || $(MAKE) minitest + +!NO!SUBS! + ;; +esac + +# libperl.a is _the_ library both in dll and static cases +# $(LIBPERL)$(LIB_EXT) expands to this name dependless of build model +# +$spitshell >>Makefile <<'!NO!SUBS!' + +opmini$(OBJ_EXT) : op.c + $(CCCMD) $(PLDLFLAGS) -DPERL_EXTERNAL_GLOB -o opmini$(OBJ_EXT) op.c + +perl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs + $(SHRPENV) $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs + $(SHRPENV) $(LDLIBPTH) purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs + $(SHRPENV) $(LDLIBPTH) purecov $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs + $(SHRPENV) $(LDLIBPTH) quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) + +!NO!SUBS! + +# suid perl is removed - i've never seen suid scripts for win32 + +############################################## +# additional targets + +$spitshell >>Makefile <<'!NO!SUBS!' + +DIST_DIRECTORY = .dist + +distdir: miniperl + -mkdir $(DIST_DIRECTORY) + ./miniperl '-MExtUtils::Manifest' \ + -e "ExtUtils::Manifest::manicopy(ExtUtils::Manifest::maniread(),'$(DIST_DIRECTORY)')" + +!NO!SUBS! diff --git a/gnu/usr.bin/perl/cygwin/cygwin.c b/gnu/usr.bin/perl/cygwin/cygwin.c new file mode 100644 index 00000000000..bece81b1e4a --- /dev/null +++ b/gnu/usr.bin/perl/cygwin/cygwin.c @@ -0,0 +1,37 @@ +/* + * Cygwin extras + */ + +#include "EXTERN.h" +#include "perl.h" +#undef USE_DYNAMIC_LOADING +#include "XSUB.h" + +#include + + +/* see also Cwd.pm */ +static +XS(Cygwin_cwd) +{ + dXSARGS; + char *cwd; + + if(items != 0) + Perl_croak(aTHX_ "Usage: Cwd::cwd()"); + if(cwd = getcwd(NULL, 0)) { + ST(0) = sv_2mortal(newSVpv(cwd, 0)); + safesysfree(cwd); + XSRETURN(1); + } + XSRETURN_UNDEF; +} + +void +init_os_extras(void) +{ + char *file = __FILE__; + dTHX; + + newXS("Cwd::cwd", Cygwin_cwd, file); +} diff --git a/gnu/usr.bin/perl/cygwin/ld2.in b/gnu/usr.bin/perl/cygwin/ld2.in new file mode 100644 index 00000000000..3776c71f876 --- /dev/null +++ b/gnu/usr.bin/perl/cygwin/ld2.in @@ -0,0 +1,20 @@ +#!/bin/sh +# +# ld wrapper for building dynamic lib version of perl; +# passes all args to perlld +# + +# own miniperl is first candidate 'cause it doesn not lock libperl.dll +for trythis in @buildpath@/miniperl @buildpath@/perl perl +do + if [ -x $trythis ] + then + $trythis @buildpath@/perlld "$@" + exit $? + fi +done +# hard luck! +echo i see no perl executable around there +echo perl is required to build dynamic libraries +echo go fetch one or build this one static +exit 1 diff --git a/gnu/usr.bin/perl/cygwin/perlld.in b/gnu/usr.bin/perl/cygwin/perlld.in new file mode 100644 index 00000000000..19a1a2f7b9c --- /dev/null +++ b/gnu/usr.bin/perl/cygwin/perlld.in @@ -0,0 +1,89 @@ +# +# Perl script being a wrapper around the gnu ld. When a dll is specified to +# to be built, special processing is done, else the standard ld is called. +# + +# theese are pretty mandatory +my $CC = '@CC@'; +my $DLLWRAP = '@DLLWRAP@'; + +# following are optional. +my $WRAPDRIVER = '@WRAPDRIVER@'; +my $AS = '@AS@'; +my $DLLTOOL = '@DLLTOOL@'; +my $EXPORT_ALL = @EXPORT_ALL@; +# if some of extensions are undefined, +# no corresponding output will be done. +# most probably, you'd like to have an export library +my $DEF_EXT = '@DEF_EXT@'; +# my $EXP_EXT = '@EXP_EXT@'; +my $LIB_EXT = '@LIB_EXT@'; + +#my $DEBUG ="perlld.out"; +my $DEBUG =undef; + +my $args = join(" ",@ARGV); # get args +my $verbose =grep(/^\-(v|\-verbose)$/, @ARGV); + +sub shellexec; + +if ($DEBUG) { + open DEBUGFILE, ">>$DEBUG"; + print DEBUGFILE "\n--- " .localtime() ."\nargs:\n$args\n\nenvironment:\n"; + foreach (keys(%ENV)) { print DEBUGFILE $_, "=", $ENV{$_}, "\n"; }; +} + +if ($args !~ /\-o (\S+)/) { + print DEBUGFILE "+ no dll output -- passing to gcc\n\n" if $DEBUG; + shellexec("$CC $args\n"); +} else { + my ($path, $command, $dllname, $libname) =''; + + $dllname =$1; + print DEBUGFILE "output file: $dllname\n" if $DEBUG; + # remove -o from args + $args =~ s/(^| )\-o \S+/$1/; + + # Check for path: + if( $dllname =~ /.*[\/\\]/){ + $dllname = $'; + $path = $&; + $path =~ s,[/\\](\.[/\\])*,/,g; + } + if ($dllname =~ /\./) { $libname =$`; } else { $libname =$dllname; }; + $dllname ="$libname.dll"; + $libname ="lib$libname" unless ($libname =~ /^lib/); + print DEBUGFILE "dll name: $dllname\nimport library: $libname\npath: $path\n" if $DEBUG; + + $command ="$DLLWRAP --dllname $dllname"; + $command .=" --driver-name $WRAPDRIVER" if $WRAPDRIVER; + $command .=" --dlltool $DLLTOOL" if $DLLTOOL; + $command .=" --export-all-symbols" if $EXPORT_ALL; + $command .=" --as $AS" if $AS; + $command .=" --verbose" if $verbose; + + $command .=" --output-def $libname$DEF_EXT" if $DEF_EXT; + $command .=" --output-exp $libname$EXP_EXT" if $EXP_EXT; + $command .=" --output-lib $libname$LIB_EXT" if $LIB_EXT; + + # other args are passed through + shellexec("$command \\\n$args\n"); + + if ($path) { + $command ="mv $dllname"; + $command .=" $libname$LIB_EXT" if $LIB_EXT; + shellexec("$command $path\n"); + }; +}; +close DEBUGFILE if $DEBUG; + +#--------------------------------------------------------------------------- +sub shellexec{ + my $command =shift; + print $command; + print DEBUGFILE $command if $DEBUG; + system($command) == 0 + or die "perlld: *** system() failed to execute\n$command\n"; +}; + +1; diff --git a/gnu/usr.bin/perl/djgpp/config.over b/gnu/usr.bin/perl/djgpp/config.over index b81c6970968..5c252362c76 100644 --- a/gnu/usr.bin/perl/djgpp/config.over +++ b/gnu/usr.bin/perl/djgpp/config.over @@ -25,7 +25,16 @@ repair() -e 's/posix/POSIX/'\ -e 's/sdbm_fil/SDBM_File/'\ -e 's/socket/Socket/'\ - -e 's/thread/Thread/' + -e 's/thread/Thread/'\ + -e 's/byteload/ByteLoader/'\ + -e 's=devel/peek=Devel/Peek='\ + -e 's=devel/dprof=Devel/DProf='\ + -e 's=sys/sys=Sys/Sys='\ + -e 's=sys/hos=Sys/Hos='\ + -e 's=file/=='\ + -e 's=File/=='\ + -e 's=glob=='\ + -e 's=Glob==' } static_ext=$(repair "$static_ext") extensions=$(repair "$extensions") @@ -35,5 +44,5 @@ nonxs_ext=$(repair "$nonxs_ext") # I use Dos::UseLFN in AutoSplit.pm to override this under win0.95 d_flexfnam='undef' -# under W95 + bash the test program returns bogus result +# with W95 + bash the test program returns bogus result d_casti32='undef' diff --git a/gnu/usr.bin/perl/djgpp/djgpp.c b/gnu/usr.bin/perl/djgpp/djgpp.c index 3a3a1fc5264..c928851b766 100644 --- a/gnu/usr.bin/perl/djgpp/djgpp.c +++ b/gnu/usr.bin/perl/djgpp/djgpp.c @@ -117,23 +117,22 @@ pclose (FILE *pp) #define EXECF_EXEC 1 static int -convretcode (int rc,char *prog,int fl) +convretcode (pTHX_ int rc,char *prog,int fl) { - if (rc < 0 && PL_dowarn) - warn ("Can't %s \"%s\": %s",fl ? "exec" : "spawn",prog,Strerror (errno)); - if (rc > 0) - return rc <<= 8; - if (rc < 0) - return 255 << 8; - return 0; + if (rc < 0 && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ WARN_EXEC,"Can't %s \"%s\": %s", + fl ? "exec" : "spawn",prog,Strerror (errno)); + if (rc >= 0) + return rc << 8; + return -1; } int -do_aspawn (SV *really,SV **mark,SV **sp) +do_aspawn (pTHX_ SV *really,SV **mark,SV **sp) { dTHR; int rc; - char **a,*tmps,**argv; + char **a,*tmps,**argv; STRLEN n_a; if (sp<=mark) @@ -164,7 +163,7 @@ do_aspawn (SV *really,SV **mark,SV **sp) #define EXTRA "\x00\x00\x00\x00\x00\x00" int -do_spawn2 (char *cmd,int execf) +do_spawn2 (pTHX_ char *cmd,int execf) { char **a,*s,*shell,*metachars; int rc,unixysh; @@ -232,15 +231,15 @@ doshell: } int -do_spawn (char *cmd) +do_spawn (pTHX_ char *cmd) { - return do_spawn2 (cmd,EXECF_SPAWN); + return do_spawn2 (aTHX_ cmd,EXECF_SPAWN); } bool -do_exec (char *cmd) +Perl_do_exec (pTHX_ char *cmd) { - do_spawn2 (cmd,EXECF_EXEC); + do_spawn2 (aTHX_ cmd,EXECF_EXEC); return FALSE; } @@ -333,10 +332,10 @@ glob_handler (__FSEXT_Fnumber n,int *rv,va_list args) if ((gi=searchfd (fd))==NULL) break; - if (siz+gi->pos>gi->size) - siz=gi->size-gi->pos; + if (siz+gi->pos > gi->size) + siz = gi->size - gi->pos; memcpy (buf,gi->pos+gi->matches,siz); - gi->pos+=siz; + gi->pos += siz; *rv=siz; return 1; } @@ -362,7 +361,7 @@ XS(dos_GetCwd) dXSARGS; if (items) - croak ("Usage: Dos::GetCwd()"); + Perl_croak (aTHX_ "Usage: Dos::GetCwd()"); { char tmp[PATH_MAX+2]; ST(0)=sv_newmortal (); @@ -380,7 +379,7 @@ XS(dos_UseLFN) } void -init_os_extras() +Perl_init_os_extras(pTHX) { char *file = __FILE__; diff --git a/gnu/usr.bin/perl/djgpp/djgppsed.sh b/gnu/usr.bin/perl/djgpp/djgppsed.sh index 5276f4f67fb..bb95ad8538e 100644 --- a/gnu/usr.bin/perl/djgpp/djgppsed.sh +++ b/gnu/usr.bin/perl/djgpp/djgppsed.sh @@ -17,13 +17,14 @@ SCOR='s=c\\\.c|=c\_c|=g' SHSED='s=\.\(hsed\)=_\1=g' SDEPTMP='s=\.\(deptmp\)=_\1=g' SCPP='s=\.\(cpp\.\)=_\1=g' -SARGV='s=\.\(argv\.\)=_\1=g' +SARGV='s=\.\(argv\)\.=_\1_=g' SABC='s=\.\([abc][^a]\)=_\1=g' SDBMX='s=\.\(dbmx\)=_\1=g' SDBHASH='s=dbhash\.tmp=dbhash_tmp=g' SSTAT='s=\.\(stat\.\)=_\1=g' STMP2='s=tmp2=tm2=g' SPACKLIST='s=\.\(packlist\)=_\1=g' +SDOTTMP='s=\.tmp=_tmp=g' sed -e $SCONFIG -e $SGREPTMP -e $SECHOTMP -e $SDDC -e $SOUT -e 's=\.\( \./\$file\)$=sh\1=g' Configure |tr -d '\r' >s; mv -f s Configure sed -e $SEXISTS -e $SLIST -e $SCONFIG Makefile.SH |tr -d '\r' >s; mv -f s Makefile.SH @@ -33,7 +34,7 @@ sed -e $SEXISTS -e $SPACKLIST installperl >s; mv -f s installperl sed -e $SPOD2HTML lib/Pod/Html.pm |tr -d '\r' >s; mv -f s lib/Pod/Html.pm sed -e $SCC -e $SLIST -e $SFILEC -e $SCOR -e $SDEPTMP -e $SHSED makedepend.SH |tr -d '\r' >s; mv -f s makedepend.SH sed -e $SCPP t/comp/cpp.aux |tr -d '\r' >s; mv -f s t/comp/cpp.aux -sed -e $SARGV t/io/argv.t >s; mv -f s t/io/argv.t +sed -e $SARGV -e $SDOTTMP t/io/argv.t >s; mv -f s t/io/argv.t sed -e $SABC t/io/inplace.t >s; mv -f s t/io/inplace.t sed -e $SDBMX t/lib/anydbm.t >s; mv -f s t/lib/anydbm.t sed -e $SDBMX -e $SDBHASH t/lib/gdbm.t >s; mv -f s t/lib/gdbm.t diff --git a/gnu/usr.bin/perl/ebcdic.c b/gnu/usr.bin/perl/ebcdic.c index 890bd086d2b..d86d50bd327 100644 --- a/gnu/usr.bin/perl/ebcdic.c +++ b/gnu/usr.bin/perl/ebcdic.c @@ -1,4 +1,5 @@ #include "EXTERN.h" +#define PERL_IN_EBCDIC_C #include "perl.h" /* in ASCII order, not that it matters */ @@ -14,7 +15,7 @@ ebcdic_control(int ch) ch = toupper(ch); if ((ctlp = strchr(controllablechars, ch)) == 0) { - die("unrecognised control character '%c'\n", ch); + Perl_die(aTHX_ "unrecognised control character '%c'\n", ch); } if (ctlp == controllablechars) @@ -24,9 +25,17 @@ ebcdic_control(int ch) } else { /* Want uncontrol */ if (ch == '\177' || ch == -1) return('?'); + else if (ch == '\157') + return('\177'); + else if (ch == '\174') + return('\000'); + else if (ch == '^') /* '\137' in 1047, '\260' in 819 */ + return('\036'); + else if (ch == '\155') + return('\037'); else if (0 < ch && ch < (sizeof(controllablechars) - 1)) return(controllablechars[ch+1]); else - die("invalid control request: '\\%03o'\n", ch & 0xFF); + Perl_die(aTHX_ "invalid control request: '\\%03o'\n", ch & 0xFF); } } diff --git a/gnu/usr.bin/perl/eg/cgi/dna_small_gif.uu b/gnu/usr.bin/perl/eg/cgi/dna_small_gif.uu new file mode 100644 index 00000000000..1745c737612 --- /dev/null +++ b/gnu/usr.bin/perl/eg/cgi/dna_small_gif.uu @@ -0,0 +1,63 @@ +begin 444 dna_small.gif +M1TE&.#=A)0`J`.<``+9%&Y@_&A$_5`Y#3$=2"=#59M((H88,GP\/]X^&+$R +M$"(79"DF33(93"$86=%;&"T4/=Y"&\\A$Q4Z4!`62*T4-Q4B9+X1*BH96SP? +M1<0D/3(F<-TM$!`=5:H.(!<64C$W?#8J3*`S(S<@3=8V%K$](QT.6Q`43AL4 +M1:$D,;<0,\X9&,8])\@=$A(U244S5U,D6Q=/#YH> +M08$I1B,09S$35R(:4C0?<19$75!()-;4702M`=;56)A`25,0K%"X< +M83`N>K`H'HDS*1`40,M&%!<@7M,_$AE+#%0>0S0/:4PJ9I,F-6DG420Y<"@09R,0 +M-V$R/R4M<:\H0!(H410Z:AT27&4Q9"L@;=1%(MA-$M5+#RL4+M8Z&AT<7[<: +M(-QA&2,36R$++B(84!0:5ALO:K$A.]X?&!$84V@;/SX<6Q`;2$(B2QD21W4J +M1=TW&@```````````````"P`````)0`J```(_@!]:(N'18\W%15T$1N'C)V? +M0_HH,<$G9YBX!C6<3;+T@AZ-)K@\O*"!KP^$>"KVA`L3*8P3)^5ZA)@B:AH+ +M9];F7.$Q+!`!0=*.%",&P7J"9XB82L5,48F5K,:" +M'94FU='6;!*R3T->E"%&95DR"`/6P,I0PDF)0SG8($$RJN0R`FI(H7$A2]VD +M*^^L_6(T3U*V%XH"_AB:HDS8H$AO5@R:P,8.I%^.:*AC(>Z!'":6RC`1L@W- +M%1Q/,%(.'5+1``/"*]=90`PD.F'3SR@-AG)`&_A=3'"**#[J(P<0^C0&S/#1""(ZI)'&*6,,$842N%Q!@3NK +M"R'%%4KP0D(Q?"`S!3)BVE(/$+)#-80 +M<+,`-[QH$LP+0_P!1C>=S("!,N>8XP<8H6131!B;3`#&#)"DTH(L5#P0S#W+ +MQ)*`$K1HHD4^;E!2QP%:B``&4H$,/Y2C$Y*(1%0(00A)@```77B"*$0@#3>P +MP&PU4`,^H!","P!!$')0P^H6((I5L"$'.;``';[Q!@-\PP"$0?)M$`<92!%OG8Q3#@(`U2C*)%9-!`&`K`!!EP0@80 +M2,0M;I$.:"C#"D.@P#UJ``]GT"*,K%B&*0+!@TFH8VV*0$(:_/`)?7@#'.'0 +M@R[H8``\:&`,=NC"*"B@!2TTHP5]N((TEH&`<)B"!PU`0RQ(P8MNS``9K6@% +M'W31AG%$(BZ2&((PA-&#'I"A&`F8!DD\\`H6-,.,X'B'%,+R#FX4`PS&_L!$ +M.4R0#7W<0@%O2,07$($#9@C3"%C8P!5H88\]J$,"-E!;(.X@C5T<`!65V,40 +M,'&(0C!"`1JP@"3TH`T9=&,5JRC$-]+1`U%TP@@[^,$>Z$&*0%1A%XFK`BFD +MX0L6Y"(#A_A$#[JPC@%\@1@02`(SJ#&&.`A@'\&$!AALX(4Y="`/TA"",UA! +M@%W<8!*\$`$@C%""+G1A"9AP!"<>9@ME*)$0F\C!$I8`B3\TP@%'@$(QH$`" +M)8@#'(B0ACB`P`,@%&,'9"##)S`1!&)\`0)^&,,^+$`("QC"#D\X!":HX0!< +ML(`&-O!%,&H@BS#F0AI'`!LO^"`,/OS!%KJ0_H0HEA`E27Q#%T%X0"%"@`1E +M2,`!:F!%+Q#A!G)40A!HP`4OFK`#-13#`?I(QCW38(Q/9&``%0#!);01BE>$ +M@!TZNL81$G`!-]2!&&5@A1N&T0Q<,$$$%*!``BR1A5$PPPH<74$%]*`#$.RA +M`(VP@#`X$(`7``(%T=@`.5Q`C@:0`P[)D$4'$H`."MB#"908Q=X@,01B9$(7 +MG'A%`#8!"QSL@PUAL,0==M"")CQCP4)0QQUDP806H&,!T]A!`EH@AC2P`P,^ +MT`,*NN%-&&T!&L@X!!Y^<(4.D(,%E>A`,T20C#IXL`6-:,`5F+"#!W"@'%OH +MA`IJ$5(#;`(;AV/'FA103(EV+(,>GHB&&ZJ`!D'P!57`X1F9D`4<0!]FB(F*(A55\BX%UEI^;OJ8N%(*Z^4G +M.OJJ>8HZ.(>;JRMD>X" +M%A1XSM]!A?T8/C0T$1XMJG\B&G+,"-&C/(VS0(842;`)M'S>_OE8F#"=2S#* +M8LHLAS'D1Y,42UGY9O,F-T:X@@JEE@D1RW>/D@8R.DZ-+*E0CQ:9JJ5JU!SQ +MR&BU2D.;E*4'ER0TNY%G2A/Y.G[=VG%81+5K_UG$21-GQW55;$8L\RW6J8-9>QM7<^A/SMZK!ESY$,+ +(KPA.EJ```#L` +end diff --git a/gnu/usr.bin/perl/emacs/e2ctags.pl b/gnu/usr.bin/perl/emacs/e2ctags.pl new file mode 100644 index 00000000000..ef7a8d8539a --- /dev/null +++ b/gnu/usr.bin/perl/emacs/e2ctags.pl @@ -0,0 +1,75 @@ + +##e2ctags.pl +##Convert an Emacs-style TAGS file to a standard ctags file. +##Runs in a single pass over the TAGS file and keeps the first +##tag entry found, and the file name and line number the tag can +##be found on. +##Then it opens all relevant files and builds the regular expression +##for ctags. +##Run over a few test files and compared with a real ctags file shows +##only extra tags in the translated file, which probably won't hurt +##vi. +## + +use strict; + +my $filename; +my ($tag,$line_no,$line); +my %tags = (); +my %files = (); +my @lines = (); + +while (<>) { + if ($_ eq "\x0C\n") { + ##Grab next line and parse it for the filename + $_ = <>; + chomp; + s/,\d+$//; + $filename = $_; + ++$files{$filename}; + next; + } + ##Figure out how many records in this line and + ##extract the tag name and the line that it is found on + next if /struct/; + if (/\x01/) { + ($tag,$line_no) = /\x7F(\w+)\x01(\d+)/; + next unless $tag; + ##Take only the first entry per tag + next if defined($tags{$tag}); + $tags{$tag}{FILE} = $filename; + $tags{$tag}{LINE_NO} = $line_no; + } + else { + tr/(//d; + ($tag,$line_no) = /(\w+)\s*\x7F(\d+),/; + next unless $tag; + ##Take only the first entry per tag + next if defined($tags{$tag}); + $tags{$tag}{FILE} = $filename; + $tags{$tag}{LINE_NO} = $line_no; + } +} + +foreach $filename (keys %files) { + open FILE, $filename or die "Couldn't open $filename: $!\n"; + @lines = ; + close FILE; + chomp @lines; + foreach $tag ( keys %tags ) { + next unless $filename eq $tags{$tag}{FILE}; + $line = $lines[$tags{$tag}{LINE_NO}-1]; + if (length($line) >= 50) { + $line = substr($line,0,50); + } + else { + $line .= '$'; + } + $line =~ s#\\#\\\\#; + $tags{$tag}{LINE} = join '', '/^',$line,'/'; + } +} + +foreach $tag ( sort keys %tags ) { + print "$tag\t$tags{$tag}{FILE}\t$tags{$tag}{LINE}\n"; +} diff --git a/gnu/usr.bin/perl/emacs/ptags b/gnu/usr.bin/perl/emacs/ptags index c6726122374..54770a0a14b 100644 --- a/gnu/usr.bin/perl/emacs/ptags +++ b/gnu/usr.bin/perl/emacs/ptags @@ -21,8 +21,10 @@ if test ! -z "$OS2_SHELL"; then alias find=gnufind; fi # Move autogenerated less-informative files to the end: # Hard to do embed.h and embedvar.h in one sweep: -topfiles="`echo ' ' *.y *.c *.h ' ' | sed 's/ \(embed\(var\|\)\.h\|obj\(pp\|XSUB\)\.h\|globals\.c\) \(\(embedvar\|objpp\).h \|\)/ /g'`" -subdirfiles="`( find ./*/* -name '*.[cy]' -print | sort ; find ./*/* -name '*.[hH]' -print | sort )`" +topfiles="`echo ' ' *.y *.c *.h ' ' | sed 's/ / /g' | sed 's/ embedvar\.h\|embed\.h\|obj\(pp\|XSUB\)\.h\|\(globals\|perlapi\)\.c / /g'`" +subdirs="`find ./* -maxdepth 0 -type d`" +subdirfiles="`find $subdirs -name '*.[cy]' -print | sort`" +subdirfiles1="`find $subdirs -name '*.[hH]' -print | sort`" xsfiles="`find . -name '*.xs' -print | sort`" # etags -d : process defines too (default now) @@ -51,15 +53,20 @@ rm -f TAGS.tmp TAGS.tm2 etags -o TAGS.tmp \ -l none -r '/#\(\$[a-zA-Z_0-9]+\|define\)[ \t]+\([a-zA-Z_0-9]+\)/\2/' \ config_h.SH +# Process lines like this: Mcc (Loc.U): +etags -o TAGS.tmp -a \ + -l none -r '/^\([a-zA-Z_0-9]+\)[ \t]+(/\$\1/' \ + -r '/^\([a-zA-Z_0-9]+\)[ \t]+(/\1/' Porting/Glossary + etags -o TAGS.tmp -a "$@" $topfiles # Now add these PL_: -perl -w014pe 'if (s/^( .* PERLVAR I? # 1: TAG group +perl -w014pe 'if (s/^( .* PERLVAR A?I? # 1: TAG group \s* \( \s* [GIT] # .* # \x7F # End of description ) - ( .* \x1 ) # 2: Exact group + ( .* \x01 ) # 2: Exact group /${1}PL_$2/mgx) { # Add PL_ $chars = chomp; s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e; @@ -67,17 +74,44 @@ perl -w014pe 'if (s/^( .* PERLVAR I? # 1: TAG group }' TAGS.tmp > TAGS.tm1 && mv TAGS.tm1 TAGS.tmp +# Now remove these Perl_, add empty- and perl_-flavors: +perl -w014pe 'if (s/^(Perl_ # 1: First group + (\w+) \( # 2: Stripped name + \x7F # End of description + ) # End of description + (\d+,\d+\n) # 3: TAGS Trail + /$1$3$1$2\x01$3$1perl_$2\x01$3/mgx) { # Repeat, add empty and perl_ flavors + $chars = chomp; + s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e; + $_ .= ("\f" x $chars); + }' TAGS.tmp > TAGS.tm1 && mv TAGS.tm1 TAGS.tmp + +# Now remove these S_, add empty-flavor: +perl -w014pe 'if (s/^(S_ # 1: First group + (\w+) \( # 2: Stripped name + \x7F # End of description + ) # End of description + (\d+,\d+\n) # 3: TAGS Trail + /$1$3$1$2\x01$3/mgx) { # Repeat, add empty_ flavor + $chars = chomp; + s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e; + $_ .= ("\f" x $chars); + }' TAGS.tmp > TAGS.tm1 && mv TAGS.tm1 TAGS.tmp etags -o TAGS.tmp -a -D -l none -r '/#define.*\t\(Perl_.*\)/\1/' embed.h -etags -o TAGS.tmp -a globals.c embedvar.h objXSUB.h objpp.h +etags -o TAGS.tmp -a globals.c embedvar.h objXSUB.h perlapi.c -perl -w014pe 'if (s/^( [^\n\x7F\x1]*\b # 1: TAG group +# The above processes created a lot of descriptions with an +# an explicitly specified tag. Such descriptions have higher +# precedence than descriptions without an explicitely specified tag. +# To restore the justice, make all the descriptions explicit. +perl -w014pe 'if (s/^( [^\n\x7F\x01]*\b # 1: TAG group (\w+) # 2: word - [^\w\x7X\x1\n]* # Most anything + [^\w\x7F\x01\n]* # Most anything \x7F # End of description ) (\d+,\d+\n) # 3: TAGS Trail - /$1$2\x1$3/mgx) { # Add specific marking + /$1$2\x01$3/mgx) { # Add specific marking $chars = chomp; s/^((\n.+,)\d+)/ $2 . (length($_) - length($1) - 1) /e; $_ .= ("\f" x $chars); @@ -104,6 +138,7 @@ etags -o TAGS.tmp -a -d -l c \ # $xsfiles etags -o TAGS.tmp -a "$@" $subdirfiles +etags -o TAGS.tmp -a "$@" $subdirfiles1 if test ! -f emacs/cperl-mode.elc ; then ( cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el ) diff --git a/gnu/usr.bin/perl/embedvar.h b/gnu/usr.bin/perl/embedvar.h index 25b31e01556..e790976a18f 100644 --- a/gnu/usr.bin/perl/embedvar.h +++ b/gnu/usr.bin/perl/embedvar.h @@ -1,271 +1,1106 @@ /* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - This file is built by embed.pl from global.sym, intrpvar.h, - and thrdvar.h. Any changes made here will be lost! + This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h, + perlvars.h and thrdvar.h. Any changes made here will be lost! */ /* (Doing namespace management portably in C is really gross.) */ -/* EMBED has no run-time penalty, but helps keep the Perl namespace - from colliding with that used by other libraries pulled in - by extensions or by embedding perl. Allow a cc -DNO_EMBED - override, however, to keep binary compatability with previous - versions of perl. +/* + The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT + and PERL_IMPLICIT_CONTEXT are supported: + 1) none + 2) MULTIPLICITY # supported for compatibility + 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT + 4) USE_THREADS && PERL_IMPLICIT_CONTEXT + 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT + 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT + + All other combinations of these flags are errors. + + #3, #4, #5, and #6 are supported directly, while #2 is a special + case of #3 (supported by redefining vTHX appropriately). */ +#if defined(MULTIPLICITY) +/* cases 2, 3 and 5 above */ + +# if defined(PERL_IMPLICIT_CONTEXT) +# define vTHX aTHX +# else +# define vTHX PERL_GET_INTERP +# endif + +#define PL_Sv (vTHX->TSv) +#define PL_Xpv (vTHX->TXpv) +#define PL_av_fetch_sv (vTHX->Tav_fetch_sv) +#define PL_bodytarget (vTHX->Tbodytarget) +#define PL_bostr (vTHX->Tbostr) +#define PL_chopset (vTHX->Tchopset) +#define PL_colors (vTHX->Tcolors) +#define PL_colorset (vTHX->Tcolorset) +#define PL_curcop (vTHX->Tcurcop) +#define PL_curpad (vTHX->Tcurpad) +#define PL_curpm (vTHX->Tcurpm) +#define PL_curstack (vTHX->Tcurstack) +#define PL_curstackinfo (vTHX->Tcurstackinfo) +#define PL_curstash (vTHX->Tcurstash) +#define PL_defoutgv (vTHX->Tdefoutgv) +#define PL_defstash (vTHX->Tdefstash) +#define PL_delaymagic (vTHX->Tdelaymagic) +#define PL_dirty (vTHX->Tdirty) +#define PL_dumpindent (vTHX->Tdumpindent) +#define PL_efloatbuf (vTHX->Tefloatbuf) +#define PL_efloatsize (vTHX->Tefloatsize) +#define PL_errors (vTHX->Terrors) +#define PL_extralen (vTHX->Textralen) +#define PL_firstgv (vTHX->Tfirstgv) +#define PL_formtarget (vTHX->Tformtarget) +#define PL_hv_fetch_ent_mh (vTHX->Thv_fetch_ent_mh) +#define PL_hv_fetch_sv (vTHX->Thv_fetch_sv) +#define PL_in_eval (vTHX->Tin_eval) +#define PL_last_in_gv (vTHX->Tlast_in_gv) +#define PL_lastgotoprobe (vTHX->Tlastgotoprobe) +#define PL_lastscream (vTHX->Tlastscream) +#define PL_localizing (vTHX->Tlocalizing) +#define PL_mainstack (vTHX->Tmainstack) +#define PL_markstack (vTHX->Tmarkstack) +#define PL_markstack_max (vTHX->Tmarkstack_max) +#define PL_markstack_ptr (vTHX->Tmarkstack_ptr) +#define PL_maxscream (vTHX->Tmaxscream) +#define PL_modcount (vTHX->Tmodcount) +#define PL_na (vTHX->Tna) +#define PL_nrs (vTHX->Tnrs) +#define PL_ofs (vTHX->Tofs) +#define PL_ofslen (vTHX->Tofslen) +#define PL_op (vTHX->Top) +#define PL_opsave (vTHX->Topsave) +#define PL_protect (vTHX->Tprotect) +#define PL_reg_call_cc (vTHX->Treg_call_cc) +#define PL_reg_curpm (vTHX->Treg_curpm) +#define PL_reg_eval_set (vTHX->Treg_eval_set) +#define PL_reg_flags (vTHX->Treg_flags) +#define PL_reg_ganch (vTHX->Treg_ganch) +#define PL_reg_leftiter (vTHX->Treg_leftiter) +#define PL_reg_magic (vTHX->Treg_magic) +#define PL_reg_maxiter (vTHX->Treg_maxiter) +#define PL_reg_oldcurpm (vTHX->Treg_oldcurpm) +#define PL_reg_oldpos (vTHX->Treg_oldpos) +#define PL_reg_oldsaved (vTHX->Treg_oldsaved) +#define PL_reg_oldsavedlen (vTHX->Treg_oldsavedlen) +#define PL_reg_poscache (vTHX->Treg_poscache) +#define PL_reg_poscache_size (vTHX->Treg_poscache_size) +#define PL_reg_re (vTHX->Treg_re) +#define PL_reg_start_tmp (vTHX->Treg_start_tmp) +#define PL_reg_start_tmpl (vTHX->Treg_start_tmpl) +#define PL_reg_starttry (vTHX->Treg_starttry) +#define PL_reg_sv (vTHX->Treg_sv) +#define PL_reg_whilem_seen (vTHX->Treg_whilem_seen) +#define PL_regbol (vTHX->Tregbol) +#define PL_regcc (vTHX->Tregcc) +#define PL_regcode (vTHX->Tregcode) +#define PL_regcomp_parse (vTHX->Tregcomp_parse) +#define PL_regcomp_rx (vTHX->Tregcomp_rx) +#define PL_regcompp (vTHX->Tregcompp) +#define PL_regdata (vTHX->Tregdata) +#define PL_regdummy (vTHX->Tregdummy) +#define PL_regendp (vTHX->Tregendp) +#define PL_regeol (vTHX->Tregeol) +#define PL_regexecp (vTHX->Tregexecp) +#define PL_regflags (vTHX->Tregflags) +#define PL_regfree (vTHX->Tregfree) +#define PL_regindent (vTHX->Tregindent) +#define PL_reginput (vTHX->Treginput) +#define PL_regint_start (vTHX->Tregint_start) +#define PL_regint_string (vTHX->Tregint_string) +#define PL_reginterp_cnt (vTHX->Treginterp_cnt) +#define PL_reglastparen (vTHX->Treglastparen) +#define PL_regnarrate (vTHX->Tregnarrate) +#define PL_regnaughty (vTHX->Tregnaughty) +#define PL_regnpar (vTHX->Tregnpar) +#define PL_regprecomp (vTHX->Tregprecomp) +#define PL_regprev (vTHX->Tregprev) +#define PL_regprogram (vTHX->Tregprogram) +#define PL_regsawback (vTHX->Tregsawback) +#define PL_regseen (vTHX->Tregseen) +#define PL_regsize (vTHX->Tregsize) +#define PL_regstartp (vTHX->Tregstartp) +#define PL_regtill (vTHX->Tregtill) +#define PL_regxend (vTHX->Tregxend) +#define PL_restartop (vTHX->Trestartop) +#define PL_retstack (vTHX->Tretstack) +#define PL_retstack_ix (vTHX->Tretstack_ix) +#define PL_retstack_max (vTHX->Tretstack_max) +#define PL_rs (vTHX->Trs) +#define PL_savestack (vTHX->Tsavestack) +#define PL_savestack_ix (vTHX->Tsavestack_ix) +#define PL_savestack_max (vTHX->Tsavestack_max) +#define PL_scopestack (vTHX->Tscopestack) +#define PL_scopestack_ix (vTHX->Tscopestack_ix) +#define PL_scopestack_max (vTHX->Tscopestack_max) +#define PL_screamfirst (vTHX->Tscreamfirst) +#define PL_screamnext (vTHX->Tscreamnext) +#define PL_secondgv (vTHX->Tsecondgv) +#define PL_seen_evals (vTHX->Tseen_evals) +#define PL_seen_zerolen (vTHX->Tseen_zerolen) +#define PL_sortcop (vTHX->Tsortcop) +#define PL_sortcxix (vTHX->Tsortcxix) +#define PL_sortstash (vTHX->Tsortstash) +#define PL_stack_base (vTHX->Tstack_base) +#define PL_stack_max (vTHX->Tstack_max) +#define PL_stack_sp (vTHX->Tstack_sp) +#define PL_start_env (vTHX->Tstart_env) +#define PL_statbuf (vTHX->Tstatbuf) +#define PL_statcache (vTHX->Tstatcache) +#define PL_statgv (vTHX->Tstatgv) +#define PL_statname (vTHX->Tstatname) +#define PL_tainted (vTHX->Ttainted) +#define PL_timesbuf (vTHX->Ttimesbuf) +#define PL_tmps_floor (vTHX->Ttmps_floor) +#define PL_tmps_ix (vTHX->Ttmps_ix) +#define PL_tmps_max (vTHX->Ttmps_max) +#define PL_tmps_stack (vTHX->Ttmps_stack) +#define PL_top_env (vTHX->Ttop_env) +#define PL_toptarget (vTHX->Ttoptarget) +#define PL_watchaddr (vTHX->Twatchaddr) +#define PL_watchok (vTHX->Twatchok) + +# if defined(PERL_OBJECT) +# include "error: PERL_OBJECT + MULTIPLICITY don't go together" +# endif -/* Put interpreter-specific symbols into a struct? */ - -#ifdef MULTIPLICITY - -#ifndef USE_THREADS -/* If we do not have threads then per-thread vars are per-interpreter */ - -#define PL_Sv (PL_curinterp->TSv) -#define PL_Xpv (PL_curinterp->TXpv) -#define PL_av_fetch_sv (PL_curinterp->Tav_fetch_sv) -#define PL_bodytarget (PL_curinterp->Tbodytarget) -#define PL_bostr (PL_curinterp->Tbostr) -#define PL_chopset (PL_curinterp->Tchopset) -#define PL_colors (PL_curinterp->Tcolors) -#define PL_colorset (PL_curinterp->Tcolorset) -#define PL_curcop (PL_curinterp->Tcurcop) -#define PL_curpad (PL_curinterp->Tcurpad) -#define PL_curpm (PL_curinterp->Tcurpm) -#define PL_curstack (PL_curinterp->Tcurstack) -#define PL_curstackinfo (PL_curinterp->Tcurstackinfo) -#define PL_curstash (PL_curinterp->Tcurstash) -#define PL_defoutgv (PL_curinterp->Tdefoutgv) -#define PL_defstash (PL_curinterp->Tdefstash) -#define PL_delaymagic (PL_curinterp->Tdelaymagic) -#define PL_dirty (PL_curinterp->Tdirty) -#define PL_extralen (PL_curinterp->Textralen) -#define PL_firstgv (PL_curinterp->Tfirstgv) -#define PL_formtarget (PL_curinterp->Tformtarget) -#define PL_hv_fetch_ent_mh (PL_curinterp->Thv_fetch_ent_mh) -#define PL_hv_fetch_sv (PL_curinterp->Thv_fetch_sv) -#define PL_in_eval (PL_curinterp->Tin_eval) -#define PL_last_in_gv (PL_curinterp->Tlast_in_gv) -#define PL_lastgotoprobe (PL_curinterp->Tlastgotoprobe) -#define PL_lastscream (PL_curinterp->Tlastscream) -#define PL_localizing (PL_curinterp->Tlocalizing) -#define PL_mainstack (PL_curinterp->Tmainstack) -#define PL_markstack (PL_curinterp->Tmarkstack) -#define PL_markstack_max (PL_curinterp->Tmarkstack_max) -#define PL_markstack_ptr (PL_curinterp->Tmarkstack_ptr) -#define PL_maxscream (PL_curinterp->Tmaxscream) -#define PL_modcount (PL_curinterp->Tmodcount) -#define PL_nrs (PL_curinterp->Tnrs) -#define PL_ofs (PL_curinterp->Tofs) -#define PL_ofslen (PL_curinterp->Tofslen) -#define PL_op (PL_curinterp->Top) -#define PL_opsave (PL_curinterp->Topsave) -#define PL_reg_eval_set (PL_curinterp->Treg_eval_set) -#define PL_reg_flags (PL_curinterp->Treg_flags) -#define PL_reg_start_tmp (PL_curinterp->Treg_start_tmp) -#define PL_reg_start_tmpl (PL_curinterp->Treg_start_tmpl) -#define PL_regbol (PL_curinterp->Tregbol) -#define PL_regcc (PL_curinterp->Tregcc) -#define PL_regcode (PL_curinterp->Tregcode) -#define PL_regcomp_parse (PL_curinterp->Tregcomp_parse) -#define PL_regcomp_rx (PL_curinterp->Tregcomp_rx) -#define PL_regcompp (PL_curinterp->Tregcompp) -#define PL_regdata (PL_curinterp->Tregdata) -#define PL_regdummy (PL_curinterp->Tregdummy) -#define PL_regendp (PL_curinterp->Tregendp) -#define PL_regeol (PL_curinterp->Tregeol) -#define PL_regexecp (PL_curinterp->Tregexecp) -#define PL_regflags (PL_curinterp->Tregflags) -#define PL_regindent (PL_curinterp->Tregindent) -#define PL_reginput (PL_curinterp->Treginput) -#define PL_reginterp_cnt (PL_curinterp->Treginterp_cnt) -#define PL_reglastparen (PL_curinterp->Treglastparen) -#define PL_regnarrate (PL_curinterp->Tregnarrate) -#define PL_regnaughty (PL_curinterp->Tregnaughty) -#define PL_regnpar (PL_curinterp->Tregnpar) -#define PL_regprecomp (PL_curinterp->Tregprecomp) -#define PL_regprev (PL_curinterp->Tregprev) -#define PL_regprogram (PL_curinterp->Tregprogram) -#define PL_regsawback (PL_curinterp->Tregsawback) -#define PL_regseen (PL_curinterp->Tregseen) -#define PL_regsize (PL_curinterp->Tregsize) -#define PL_regstartp (PL_curinterp->Tregstartp) -#define PL_regtill (PL_curinterp->Tregtill) -#define PL_regxend (PL_curinterp->Tregxend) -#define PL_restartop (PL_curinterp->Trestartop) -#define PL_retstack (PL_curinterp->Tretstack) -#define PL_retstack_ix (PL_curinterp->Tretstack_ix) -#define PL_retstack_max (PL_curinterp->Tretstack_max) -#define PL_rs (PL_curinterp->Trs) -#define PL_savestack (PL_curinterp->Tsavestack) -#define PL_savestack_ix (PL_curinterp->Tsavestack_ix) -#define PL_savestack_max (PL_curinterp->Tsavestack_max) -#define PL_scopestack (PL_curinterp->Tscopestack) -#define PL_scopestack_ix (PL_curinterp->Tscopestack_ix) -#define PL_scopestack_max (PL_curinterp->Tscopestack_max) -#define PL_screamfirst (PL_curinterp->Tscreamfirst) -#define PL_screamnext (PL_curinterp->Tscreamnext) -#define PL_secondgv (PL_curinterp->Tsecondgv) -#define PL_seen_evals (PL_curinterp->Tseen_evals) -#define PL_seen_zerolen (PL_curinterp->Tseen_zerolen) -#define PL_sortcop (PL_curinterp->Tsortcop) -#define PL_sortcxix (PL_curinterp->Tsortcxix) -#define PL_sortstash (PL_curinterp->Tsortstash) -#define PL_stack_base (PL_curinterp->Tstack_base) -#define PL_stack_max (PL_curinterp->Tstack_max) -#define PL_stack_sp (PL_curinterp->Tstack_sp) -#define PL_start_env (PL_curinterp->Tstart_env) -#define PL_statbuf (PL_curinterp->Tstatbuf) -#define PL_statcache (PL_curinterp->Tstatcache) -#define PL_statgv (PL_curinterp->Tstatgv) -#define PL_statname (PL_curinterp->Tstatname) -#define PL_tainted (PL_curinterp->Ttainted) -#define PL_timesbuf (PL_curinterp->Ttimesbuf) -#define PL_tmps_floor (PL_curinterp->Ttmps_floor) -#define PL_tmps_ix (PL_curinterp->Ttmps_ix) -#define PL_tmps_max (PL_curinterp->Ttmps_max) -#define PL_tmps_stack (PL_curinterp->Ttmps_stack) -#define PL_top_env (PL_curinterp->Ttop_env) -#define PL_toptarget (PL_curinterp->Ttoptarget) - -#endif /* !USE_THREADS */ - -/* These are always per-interpreter if there is more than one */ - -#define PL_Argv (PL_curinterp->IArgv) -#define PL_Cmd (PL_curinterp->ICmd) -#define PL_DBcv (PL_curinterp->IDBcv) -#define PL_DBgv (PL_curinterp->IDBgv) -#define PL_DBline (PL_curinterp->IDBline) -#define PL_DBsignal (PL_curinterp->IDBsignal) -#define PL_DBsingle (PL_curinterp->IDBsingle) -#define PL_DBsub (PL_curinterp->IDBsub) -#define PL_DBtrace (PL_curinterp->IDBtrace) -#define PL_ampergv (PL_curinterp->Iampergv) -#define PL_archpat_auto (PL_curinterp->Iarchpat_auto) -#define PL_argvgv (PL_curinterp->Iargvgv) -#define PL_argvoutgv (PL_curinterp->Iargvoutgv) -#define PL_basetime (PL_curinterp->Ibasetime) -#define PL_beginav (PL_curinterp->Ibeginav) -#define PL_bytecode_iv_overflows (PL_curinterp->Ibytecode_iv_overflows) -#define PL_bytecode_obj_list (PL_curinterp->Ibytecode_obj_list) -#define PL_bytecode_obj_list_fill (PL_curinterp->Ibytecode_obj_list_fill) -#define PL_bytecode_pv (PL_curinterp->Ibytecode_pv) -#define PL_bytecode_sv (PL_curinterp->Ibytecode_sv) -#define PL_cddir (PL_curinterp->Icddir) -#define PL_compcv (PL_curinterp->Icompcv) -#define PL_compiling (PL_curinterp->Icompiling) -#define PL_comppad (PL_curinterp->Icomppad) -#define PL_comppad_name (PL_curinterp->Icomppad_name) -#define PL_comppad_name_fill (PL_curinterp->Icomppad_name_fill) -#define PL_comppad_name_floor (PL_curinterp->Icomppad_name_floor) -#define PL_copline (PL_curinterp->Icopline) -#define PL_curcopdb (PL_curinterp->Icurcopdb) -#define PL_curstname (PL_curinterp->Icurstname) -#define PL_dbargs (PL_curinterp->Idbargs) -#define PL_debdelim (PL_curinterp->Idebdelim) -#define PL_debname (PL_curinterp->Idebname) -#define PL_debstash (PL_curinterp->Idebstash) -#define PL_defgv (PL_curinterp->Idefgv) -#define PL_diehook (PL_curinterp->Idiehook) -#define PL_dlevel (PL_curinterp->Idlevel) -#define PL_dlmax (PL_curinterp->Idlmax) -#define PL_doextract (PL_curinterp->Idoextract) -#define PL_doswitches (PL_curinterp->Idoswitches) -#define PL_dowarn (PL_curinterp->Idowarn) -#define PL_dumplvl (PL_curinterp->Idumplvl) -#define PL_e_script (PL_curinterp->Ie_script) -#define PL_endav (PL_curinterp->Iendav) -#define PL_envgv (PL_curinterp->Ienvgv) -#define PL_errgv (PL_curinterp->Ierrgv) -#define PL_eval_root (PL_curinterp->Ieval_root) -#define PL_eval_start (PL_curinterp->Ieval_start) -#define PL_exitlist (PL_curinterp->Iexitlist) -#define PL_exitlistlen (PL_curinterp->Iexitlistlen) -#define PL_fdpid (PL_curinterp->Ifdpid) -#define PL_filemode (PL_curinterp->Ifilemode) -#define PL_forkprocess (PL_curinterp->Iforkprocess) -#define PL_formfeed (PL_curinterp->Iformfeed) -#define PL_generation (PL_curinterp->Igeneration) -#define PL_gensym (PL_curinterp->Igensym) -#define PL_globalstash (PL_curinterp->Iglobalstash) -#define PL_hintgv (PL_curinterp->Ihintgv) -#define PL_in_clean_all (PL_curinterp->Iin_clean_all) -#define PL_in_clean_objs (PL_curinterp->Iin_clean_objs) -#define PL_incgv (PL_curinterp->Iincgv) -#define PL_initav (PL_curinterp->Iinitav) -#define PL_inplace (PL_curinterp->Iinplace) -#define PL_last_proto (PL_curinterp->Ilast_proto) -#define PL_lastfd (PL_curinterp->Ilastfd) -#define PL_lastsize (PL_curinterp->Ilastsize) -#define PL_lastspbase (PL_curinterp->Ilastspbase) -#define PL_laststatval (PL_curinterp->Ilaststatval) -#define PL_laststype (PL_curinterp->Ilaststype) -#define PL_leftgv (PL_curinterp->Ileftgv) -#define PL_lineary (PL_curinterp->Ilineary) -#define PL_linestart (PL_curinterp->Ilinestart) -#define PL_localpatches (PL_curinterp->Ilocalpatches) -#define PL_main_cv (PL_curinterp->Imain_cv) -#define PL_main_root (PL_curinterp->Imain_root) -#define PL_main_start (PL_curinterp->Imain_start) -#define PL_maxsysfd (PL_curinterp->Imaxsysfd) -#define PL_mess_sv (PL_curinterp->Imess_sv) -#define PL_minus_F (PL_curinterp->Iminus_F) -#define PL_minus_a (PL_curinterp->Iminus_a) -#define PL_minus_c (PL_curinterp->Iminus_c) -#define PL_minus_l (PL_curinterp->Iminus_l) -#define PL_minus_n (PL_curinterp->Iminus_n) -#define PL_minus_p (PL_curinterp->Iminus_p) -#define PL_modglobal (PL_curinterp->Imodglobal) -#define PL_multiline (PL_curinterp->Imultiline) -#define PL_mystrk (PL_curinterp->Imystrk) -#define PL_ofmt (PL_curinterp->Iofmt) -#define PL_oldlastpm (PL_curinterp->Ioldlastpm) -#define PL_oldname (PL_curinterp->Ioldname) -#define PL_op_mask (PL_curinterp->Iop_mask) -#define PL_origargc (PL_curinterp->Iorigargc) -#define PL_origargv (PL_curinterp->Iorigargv) -#define PL_origfilename (PL_curinterp->Iorigfilename) -#define PL_ors (PL_curinterp->Iors) -#define PL_orslen (PL_curinterp->Iorslen) -#define PL_parsehook (PL_curinterp->Iparsehook) -#define PL_patchlevel (PL_curinterp->Ipatchlevel) -#define PL_pending_ident (PL_curinterp->Ipending_ident) -#define PL_perl_destruct_level (PL_curinterp->Iperl_destruct_level) -#define PL_perldb (PL_curinterp->Iperldb) -#define PL_preambleav (PL_curinterp->Ipreambleav) -#define PL_preambled (PL_curinterp->Ipreambled) -#define PL_preprocess (PL_curinterp->Ipreprocess) -#define PL_profiledata (PL_curinterp->Iprofiledata) -#define PL_replgv (PL_curinterp->Ireplgv) -#define PL_rightgv (PL_curinterp->Irightgv) -#define PL_rsfp (PL_curinterp->Irsfp) -#define PL_rsfp_filters (PL_curinterp->Irsfp_filters) -#define PL_sawampersand (PL_curinterp->Isawampersand) -#define PL_sawstudy (PL_curinterp->Isawstudy) -#define PL_sawvec (PL_curinterp->Isawvec) -#define PL_siggv (PL_curinterp->Isiggv) -#define PL_splitstr (PL_curinterp->Isplitstr) -#define PL_statusvalue (PL_curinterp->Istatusvalue) -#define PL_statusvalue_vms (PL_curinterp->Istatusvalue_vms) -#define PL_stdingv (PL_curinterp->Istdingv) -#define PL_strchop (PL_curinterp->Istrchop) -#define PL_strtab (PL_curinterp->Istrtab) -#define PL_strtab_mutex (PL_curinterp->Istrtab_mutex) -#define PL_sub_generation (PL_curinterp->Isub_generation) -#define PL_sublex_info (PL_curinterp->Isublex_info) -#define PL_sv_arenaroot (PL_curinterp->Isv_arenaroot) -#define PL_sv_count (PL_curinterp->Isv_count) -#define PL_sv_objcount (PL_curinterp->Isv_objcount) -#define PL_sv_root (PL_curinterp->Isv_root) -#define PL_sys_intern (PL_curinterp->Isys_intern) -#define PL_tainting (PL_curinterp->Itainting) -#define PL_threadnum (PL_curinterp->Ithreadnum) -#define PL_thrsv (PL_curinterp->Ithrsv) -#define PL_unsafe (PL_curinterp->Iunsafe) -#define PL_warnhook (PL_curinterp->Iwarnhook) +# if defined(USE_THREADS) +/* case 5 above */ + +#define PL_Argv (PERL_GET_INTERP->IArgv) +#define PL_Cmd (PERL_GET_INTERP->ICmd) +#define PL_DBcv (PERL_GET_INTERP->IDBcv) +#define PL_DBgv (PERL_GET_INTERP->IDBgv) +#define PL_DBline (PERL_GET_INTERP->IDBline) +#define PL_DBsignal (PERL_GET_INTERP->IDBsignal) +#define PL_DBsingle (PERL_GET_INTERP->IDBsingle) +#define PL_DBsub (PERL_GET_INTERP->IDBsub) +#define PL_DBtrace (PERL_GET_INTERP->IDBtrace) +#define PL_Dir (PERL_GET_INTERP->IDir) +#define PL_Env (PERL_GET_INTERP->IEnv) +#define PL_LIO (PERL_GET_INTERP->ILIO) +#define PL_Mem (PERL_GET_INTERP->IMem) +#define PL_MemParse (PERL_GET_INTERP->IMemParse) +#define PL_MemShared (PERL_GET_INTERP->IMemShared) +#define PL_Proc (PERL_GET_INTERP->IProc) +#define PL_Sock (PERL_GET_INTERP->ISock) +#define PL_StdIO (PERL_GET_INTERP->IStdIO) +#define PL_amagic_generation (PERL_GET_INTERP->Iamagic_generation) +#define PL_an (PERL_GET_INTERP->Ian) +#define PL_argvgv (PERL_GET_INTERP->Iargvgv) +#define PL_argvout_stack (PERL_GET_INTERP->Iargvout_stack) +#define PL_argvoutgv (PERL_GET_INTERP->Iargvoutgv) +#define PL_basetime (PERL_GET_INTERP->Ibasetime) +#define PL_beginav (PERL_GET_INTERP->Ibeginav) +#define PL_bitcount (PERL_GET_INTERP->Ibitcount) +#define PL_bufend (PERL_GET_INTERP->Ibufend) +#define PL_bufptr (PERL_GET_INTERP->Ibufptr) +#define PL_checkav (PERL_GET_INTERP->Icheckav) +#define PL_collation_ix (PERL_GET_INTERP->Icollation_ix) +#define PL_collation_name (PERL_GET_INTERP->Icollation_name) +#define PL_collation_standard (PERL_GET_INTERP->Icollation_standard) +#define PL_collxfrm_base (PERL_GET_INTERP->Icollxfrm_base) +#define PL_collxfrm_mult (PERL_GET_INTERP->Icollxfrm_mult) +#define PL_compcv (PERL_GET_INTERP->Icompcv) +#define PL_compiling (PERL_GET_INTERP->Icompiling) +#define PL_comppad (PERL_GET_INTERP->Icomppad) +#define PL_comppad_name (PERL_GET_INTERP->Icomppad_name) +#define PL_comppad_name_fill (PERL_GET_INTERP->Icomppad_name_fill) +#define PL_comppad_name_floor (PERL_GET_INTERP->Icomppad_name_floor) +#define PL_cop_seqmax (PERL_GET_INTERP->Icop_seqmax) +#define PL_copline (PERL_GET_INTERP->Icopline) +#define PL_cred_mutex (PERL_GET_INTERP->Icred_mutex) +#define PL_cryptseen (PERL_GET_INTERP->Icryptseen) +#define PL_cshlen (PERL_GET_INTERP->Icshlen) +#define PL_cshname (PERL_GET_INTERP->Icshname) +#define PL_curcopdb (PERL_GET_INTERP->Icurcopdb) +#define PL_curstname (PERL_GET_INTERP->Icurstname) +#define PL_curthr (PERL_GET_INTERP->Icurthr) +#define PL_dbargs (PERL_GET_INTERP->Idbargs) +#define PL_debstash (PERL_GET_INTERP->Idebstash) +#define PL_debug (PERL_GET_INTERP->Idebug) +#define PL_defgv (PERL_GET_INTERP->Idefgv) +#define PL_diehook (PERL_GET_INTERP->Idiehook) +#define PL_doextract (PERL_GET_INTERP->Idoextract) +#define PL_doswitches (PERL_GET_INTERP->Idoswitches) +#define PL_dowarn (PERL_GET_INTERP->Idowarn) +#define PL_e_script (PERL_GET_INTERP->Ie_script) +#define PL_egid (PERL_GET_INTERP->Iegid) +#define PL_endav (PERL_GET_INTERP->Iendav) +#define PL_envgv (PERL_GET_INTERP->Ienvgv) +#define PL_errgv (PERL_GET_INTERP->Ierrgv) +#define PL_error_count (PERL_GET_INTERP->Ierror_count) +#define PL_euid (PERL_GET_INTERP->Ieuid) +#define PL_eval_cond (PERL_GET_INTERP->Ieval_cond) +#define PL_eval_mutex (PERL_GET_INTERP->Ieval_mutex) +#define PL_eval_owner (PERL_GET_INTERP->Ieval_owner) +#define PL_eval_root (PERL_GET_INTERP->Ieval_root) +#define PL_eval_start (PERL_GET_INTERP->Ieval_start) +#define PL_evalseq (PERL_GET_INTERP->Ievalseq) +#define PL_exit_flags (PERL_GET_INTERP->Iexit_flags) +#define PL_exitlist (PERL_GET_INTERP->Iexitlist) +#define PL_exitlistlen (PERL_GET_INTERP->Iexitlistlen) +#define PL_expect (PERL_GET_INTERP->Iexpect) +#define PL_fdpid (PERL_GET_INTERP->Ifdpid) +#define PL_filemode (PERL_GET_INTERP->Ifilemode) +#define PL_forkprocess (PERL_GET_INTERP->Iforkprocess) +#define PL_formfeed (PERL_GET_INTERP->Iformfeed) +#define PL_generation (PERL_GET_INTERP->Igeneration) +#define PL_gensym (PERL_GET_INTERP->Igensym) +#define PL_gid (PERL_GET_INTERP->Igid) +#define PL_glob_index (PERL_GET_INTERP->Iglob_index) +#define PL_globalstash (PERL_GET_INTERP->Iglobalstash) +#define PL_he_root (PERL_GET_INTERP->Ihe_root) +#define PL_hintgv (PERL_GET_INTERP->Ihintgv) +#define PL_hints (PERL_GET_INTERP->Ihints) +#define PL_in_clean_all (PERL_GET_INTERP->Iin_clean_all) +#define PL_in_clean_objs (PERL_GET_INTERP->Iin_clean_objs) +#define PL_in_my (PERL_GET_INTERP->Iin_my) +#define PL_in_my_stash (PERL_GET_INTERP->Iin_my_stash) +#define PL_incgv (PERL_GET_INTERP->Iincgv) +#define PL_initav (PERL_GET_INTERP->Iinitav) +#define PL_inplace (PERL_GET_INTERP->Iinplace) +#define PL_last_lop (PERL_GET_INTERP->Ilast_lop) +#define PL_last_lop_op (PERL_GET_INTERP->Ilast_lop_op) +#define PL_last_swash_hv (PERL_GET_INTERP->Ilast_swash_hv) +#define PL_last_swash_key (PERL_GET_INTERP->Ilast_swash_key) +#define PL_last_swash_klen (PERL_GET_INTERP->Ilast_swash_klen) +#define PL_last_swash_slen (PERL_GET_INTERP->Ilast_swash_slen) +#define PL_last_swash_tmps (PERL_GET_INTERP->Ilast_swash_tmps) +#define PL_last_uni (PERL_GET_INTERP->Ilast_uni) +#define PL_lastfd (PERL_GET_INTERP->Ilastfd) +#define PL_laststatval (PERL_GET_INTERP->Ilaststatval) +#define PL_laststype (PERL_GET_INTERP->Ilaststype) +#define PL_lex_brackets (PERL_GET_INTERP->Ilex_brackets) +#define PL_lex_brackstack (PERL_GET_INTERP->Ilex_brackstack) +#define PL_lex_casemods (PERL_GET_INTERP->Ilex_casemods) +#define PL_lex_casestack (PERL_GET_INTERP->Ilex_casestack) +#define PL_lex_defer (PERL_GET_INTERP->Ilex_defer) +#define PL_lex_dojoin (PERL_GET_INTERP->Ilex_dojoin) +#define PL_lex_expect (PERL_GET_INTERP->Ilex_expect) +#define PL_lex_formbrack (PERL_GET_INTERP->Ilex_formbrack) +#define PL_lex_inpat (PERL_GET_INTERP->Ilex_inpat) +#define PL_lex_inwhat (PERL_GET_INTERP->Ilex_inwhat) +#define PL_lex_op (PERL_GET_INTERP->Ilex_op) +#define PL_lex_repl (PERL_GET_INTERP->Ilex_repl) +#define PL_lex_starts (PERL_GET_INTERP->Ilex_starts) +#define PL_lex_state (PERL_GET_INTERP->Ilex_state) +#define PL_lex_stuff (PERL_GET_INTERP->Ilex_stuff) +#define PL_lineary (PERL_GET_INTERP->Ilineary) +#define PL_linestart (PERL_GET_INTERP->Ilinestart) +#define PL_linestr (PERL_GET_INTERP->Ilinestr) +#define PL_localpatches (PERL_GET_INTERP->Ilocalpatches) +#define PL_main_cv (PERL_GET_INTERP->Imain_cv) +#define PL_main_root (PERL_GET_INTERP->Imain_root) +#define PL_main_start (PERL_GET_INTERP->Imain_start) +#define PL_max_intro_pending (PERL_GET_INTERP->Imax_intro_pending) +#define PL_maxo (PERL_GET_INTERP->Imaxo) +#define PL_maxsysfd (PERL_GET_INTERP->Imaxsysfd) +#define PL_mess_sv (PERL_GET_INTERP->Imess_sv) +#define PL_min_intro_pending (PERL_GET_INTERP->Imin_intro_pending) +#define PL_minus_F (PERL_GET_INTERP->Iminus_F) +#define PL_minus_a (PERL_GET_INTERP->Iminus_a) +#define PL_minus_c (PERL_GET_INTERP->Iminus_c) +#define PL_minus_l (PERL_GET_INTERP->Iminus_l) +#define PL_minus_n (PERL_GET_INTERP->Iminus_n) +#define PL_minus_p (PERL_GET_INTERP->Iminus_p) +#define PL_modglobal (PERL_GET_INTERP->Imodglobal) +#define PL_multi_close (PERL_GET_INTERP->Imulti_close) +#define PL_multi_end (PERL_GET_INTERP->Imulti_end) +#define PL_multi_open (PERL_GET_INTERP->Imulti_open) +#define PL_multi_start (PERL_GET_INTERP->Imulti_start) +#define PL_multiline (PERL_GET_INTERP->Imultiline) +#define PL_nexttoke (PERL_GET_INTERP->Inexttoke) +#define PL_nexttype (PERL_GET_INTERP->Inexttype) +#define PL_nextval (PERL_GET_INTERP->Inextval) +#define PL_nice_chunk (PERL_GET_INTERP->Inice_chunk) +#define PL_nice_chunk_size (PERL_GET_INTERP->Inice_chunk_size) +#define PL_nomemok (PERL_GET_INTERP->Inomemok) +#define PL_nthreads (PERL_GET_INTERP->Inthreads) +#define PL_nthreads_cond (PERL_GET_INTERP->Inthreads_cond) +#define PL_numeric_local (PERL_GET_INTERP->Inumeric_local) +#define PL_numeric_name (PERL_GET_INTERP->Inumeric_name) +#define PL_numeric_radix (PERL_GET_INTERP->Inumeric_radix) +#define PL_numeric_standard (PERL_GET_INTERP->Inumeric_standard) +#define PL_ofmt (PERL_GET_INTERP->Iofmt) +#define PL_oldbufptr (PERL_GET_INTERP->Ioldbufptr) +#define PL_oldname (PERL_GET_INTERP->Ioldname) +#define PL_oldoldbufptr (PERL_GET_INTERP->Ioldoldbufptr) +#define PL_op_mask (PERL_GET_INTERP->Iop_mask) +#define PL_op_seqmax (PERL_GET_INTERP->Iop_seqmax) +#define PL_origalen (PERL_GET_INTERP->Iorigalen) +#define PL_origargc (PERL_GET_INTERP->Iorigargc) +#define PL_origargv (PERL_GET_INTERP->Iorigargv) +#define PL_origenviron (PERL_GET_INTERP->Iorigenviron) +#define PL_origfilename (PERL_GET_INTERP->Iorigfilename) +#define PL_ors (PERL_GET_INTERP->Iors) +#define PL_orslen (PERL_GET_INTERP->Iorslen) +#define PL_osname (PERL_GET_INTERP->Iosname) +#define PL_pad_reset_pending (PERL_GET_INTERP->Ipad_reset_pending) +#define PL_padix (PERL_GET_INTERP->Ipadix) +#define PL_padix_floor (PERL_GET_INTERP->Ipadix_floor) +#define PL_patchlevel (PERL_GET_INTERP->Ipatchlevel) +#define PL_pending_ident (PERL_GET_INTERP->Ipending_ident) +#define PL_perl_destruct_level (PERL_GET_INTERP->Iperl_destruct_level) +#define PL_perldb (PERL_GET_INTERP->Iperldb) +#define PL_pidstatus (PERL_GET_INTERP->Ipidstatus) +#define PL_preambleav (PERL_GET_INTERP->Ipreambleav) +#define PL_preambled (PERL_GET_INTERP->Ipreambled) +#define PL_preprocess (PERL_GET_INTERP->Ipreprocess) +#define PL_profiledata (PERL_GET_INTERP->Iprofiledata) +#define PL_psig_name (PERL_GET_INTERP->Ipsig_name) +#define PL_psig_ptr (PERL_GET_INTERP->Ipsig_ptr) +#define PL_ptr_table (PERL_GET_INTERP->Iptr_table) +#define PL_replgv (PERL_GET_INTERP->Ireplgv) +#define PL_rsfp (PERL_GET_INTERP->Irsfp) +#define PL_rsfp_filters (PERL_GET_INTERP->Irsfp_filters) +#define PL_runops (PERL_GET_INTERP->Irunops) +#define PL_sawampersand (PERL_GET_INTERP->Isawampersand) +#define PL_sh_path (PERL_GET_INTERP->Ish_path) +#define PL_sighandlerp (PERL_GET_INTERP->Isighandlerp) +#define PL_splitstr (PERL_GET_INTERP->Isplitstr) +#define PL_srand_called (PERL_GET_INTERP->Isrand_called) +#define PL_statusvalue (PERL_GET_INTERP->Istatusvalue) +#define PL_statusvalue_vms (PERL_GET_INTERP->Istatusvalue_vms) +#define PL_stderrgv (PERL_GET_INTERP->Istderrgv) +#define PL_stdingv (PERL_GET_INTERP->Istdingv) +#define PL_strtab (PERL_GET_INTERP->Istrtab) +#define PL_strtab_mutex (PERL_GET_INTERP->Istrtab_mutex) +#define PL_sub_generation (PERL_GET_INTERP->Isub_generation) +#define PL_sublex_info (PERL_GET_INTERP->Isublex_info) +#define PL_subline (PERL_GET_INTERP->Isubline) +#define PL_subname (PERL_GET_INTERP->Isubname) +#define PL_sv_arenaroot (PERL_GET_INTERP->Isv_arenaroot) +#define PL_sv_count (PERL_GET_INTERP->Isv_count) +#define PL_sv_mutex (PERL_GET_INTERP->Isv_mutex) +#define PL_sv_no (PERL_GET_INTERP->Isv_no) +#define PL_sv_objcount (PERL_GET_INTERP->Isv_objcount) +#define PL_sv_root (PERL_GET_INTERP->Isv_root) +#define PL_sv_undef (PERL_GET_INTERP->Isv_undef) +#define PL_sv_yes (PERL_GET_INTERP->Isv_yes) +#define PL_svref_mutex (PERL_GET_INTERP->Isvref_mutex) +#define PL_sys_intern (PERL_GET_INTERP->Isys_intern) +#define PL_tainting (PERL_GET_INTERP->Itainting) +#define PL_threadnum (PERL_GET_INTERP->Ithreadnum) +#define PL_threads_mutex (PERL_GET_INTERP->Ithreads_mutex) +#define PL_threadsv_names (PERL_GET_INTERP->Ithreadsv_names) +#define PL_thrsv (PERL_GET_INTERP->Ithrsv) +#define PL_tokenbuf (PERL_GET_INTERP->Itokenbuf) +#define PL_uid (PERL_GET_INTERP->Iuid) +#define PL_unsafe (PERL_GET_INTERP->Iunsafe) +#define PL_utf8_alnum (PERL_GET_INTERP->Iutf8_alnum) +#define PL_utf8_alnumc (PERL_GET_INTERP->Iutf8_alnumc) +#define PL_utf8_alpha (PERL_GET_INTERP->Iutf8_alpha) +#define PL_utf8_ascii (PERL_GET_INTERP->Iutf8_ascii) +#define PL_utf8_cntrl (PERL_GET_INTERP->Iutf8_cntrl) +#define PL_utf8_digit (PERL_GET_INTERP->Iutf8_digit) +#define PL_utf8_graph (PERL_GET_INTERP->Iutf8_graph) +#define PL_utf8_lower (PERL_GET_INTERP->Iutf8_lower) +#define PL_utf8_mark (PERL_GET_INTERP->Iutf8_mark) +#define PL_utf8_print (PERL_GET_INTERP->Iutf8_print) +#define PL_utf8_punct (PERL_GET_INTERP->Iutf8_punct) +#define PL_utf8_space (PERL_GET_INTERP->Iutf8_space) +#define PL_utf8_tolower (PERL_GET_INTERP->Iutf8_tolower) +#define PL_utf8_totitle (PERL_GET_INTERP->Iutf8_totitle) +#define PL_utf8_toupper (PERL_GET_INTERP->Iutf8_toupper) +#define PL_utf8_upper (PERL_GET_INTERP->Iutf8_upper) +#define PL_utf8_xdigit (PERL_GET_INTERP->Iutf8_xdigit) +#define PL_uudmap (PERL_GET_INTERP->Iuudmap) +#define PL_warnhook (PERL_GET_INTERP->Iwarnhook) +#define PL_widesyscalls (PERL_GET_INTERP->Iwidesyscalls) +#define PL_xiv_arenaroot (PERL_GET_INTERP->Ixiv_arenaroot) +#define PL_xiv_root (PERL_GET_INTERP->Ixiv_root) +#define PL_xnv_root (PERL_GET_INTERP->Ixnv_root) +#define PL_xpv_root (PERL_GET_INTERP->Ixpv_root) +#define PL_xpvav_root (PERL_GET_INTERP->Ixpvav_root) +#define PL_xpvbm_root (PERL_GET_INTERP->Ixpvbm_root) +#define PL_xpvcv_root (PERL_GET_INTERP->Ixpvcv_root) +#define PL_xpvhv_root (PERL_GET_INTERP->Ixpvhv_root) +#define PL_xpviv_root (PERL_GET_INTERP->Ixpviv_root) +#define PL_xpvlv_root (PERL_GET_INTERP->Ixpvlv_root) +#define PL_xpvmg_root (PERL_GET_INTERP->Ixpvmg_root) +#define PL_xpvnv_root (PERL_GET_INTERP->Ixpvnv_root) +#define PL_xrv_root (PERL_GET_INTERP->Ixrv_root) +#define PL_yychar (PERL_GET_INTERP->Iyychar) +#define PL_yydebug (PERL_GET_INTERP->Iyydebug) +#define PL_yyerrflag (PERL_GET_INTERP->Iyyerrflag) +#define PL_yylval (PERL_GET_INTERP->Iyylval) +#define PL_yynerrs (PERL_GET_INTERP->Iyynerrs) +#define PL_yyval (PERL_GET_INTERP->Iyyval) + +# else /* !USE_THREADS */ +/* cases 2 and 3 above */ + +#define PL_Argv (vTHX->IArgv) +#define PL_Cmd (vTHX->ICmd) +#define PL_DBcv (vTHX->IDBcv) +#define PL_DBgv (vTHX->IDBgv) +#define PL_DBline (vTHX->IDBline) +#define PL_DBsignal (vTHX->IDBsignal) +#define PL_DBsingle (vTHX->IDBsingle) +#define PL_DBsub (vTHX->IDBsub) +#define PL_DBtrace (vTHX->IDBtrace) +#define PL_Dir (vTHX->IDir) +#define PL_Env (vTHX->IEnv) +#define PL_LIO (vTHX->ILIO) +#define PL_Mem (vTHX->IMem) +#define PL_MemParse (vTHX->IMemParse) +#define PL_MemShared (vTHX->IMemShared) +#define PL_Proc (vTHX->IProc) +#define PL_Sock (vTHX->ISock) +#define PL_StdIO (vTHX->IStdIO) +#define PL_amagic_generation (vTHX->Iamagic_generation) +#define PL_an (vTHX->Ian) +#define PL_argvgv (vTHX->Iargvgv) +#define PL_argvout_stack (vTHX->Iargvout_stack) +#define PL_argvoutgv (vTHX->Iargvoutgv) +#define PL_basetime (vTHX->Ibasetime) +#define PL_beginav (vTHX->Ibeginav) +#define PL_bitcount (vTHX->Ibitcount) +#define PL_bufend (vTHX->Ibufend) +#define PL_bufptr (vTHX->Ibufptr) +#define PL_checkav (vTHX->Icheckav) +#define PL_collation_ix (vTHX->Icollation_ix) +#define PL_collation_name (vTHX->Icollation_name) +#define PL_collation_standard (vTHX->Icollation_standard) +#define PL_collxfrm_base (vTHX->Icollxfrm_base) +#define PL_collxfrm_mult (vTHX->Icollxfrm_mult) +#define PL_compcv (vTHX->Icompcv) +#define PL_compiling (vTHX->Icompiling) +#define PL_comppad (vTHX->Icomppad) +#define PL_comppad_name (vTHX->Icomppad_name) +#define PL_comppad_name_fill (vTHX->Icomppad_name_fill) +#define PL_comppad_name_floor (vTHX->Icomppad_name_floor) +#define PL_cop_seqmax (vTHX->Icop_seqmax) +#define PL_copline (vTHX->Icopline) +#define PL_cred_mutex (vTHX->Icred_mutex) +#define PL_cryptseen (vTHX->Icryptseen) +#define PL_cshlen (vTHX->Icshlen) +#define PL_cshname (vTHX->Icshname) +#define PL_curcopdb (vTHX->Icurcopdb) +#define PL_curstname (vTHX->Icurstname) +#define PL_curthr (vTHX->Icurthr) +#define PL_dbargs (vTHX->Idbargs) +#define PL_debstash (vTHX->Idebstash) +#define PL_debug (vTHX->Idebug) +#define PL_defgv (vTHX->Idefgv) +#define PL_diehook (vTHX->Idiehook) +#define PL_doextract (vTHX->Idoextract) +#define PL_doswitches (vTHX->Idoswitches) +#define PL_dowarn (vTHX->Idowarn) +#define PL_e_script (vTHX->Ie_script) +#define PL_egid (vTHX->Iegid) +#define PL_endav (vTHX->Iendav) +#define PL_envgv (vTHX->Ienvgv) +#define PL_errgv (vTHX->Ierrgv) +#define PL_error_count (vTHX->Ierror_count) +#define PL_euid (vTHX->Ieuid) +#define PL_eval_cond (vTHX->Ieval_cond) +#define PL_eval_mutex (vTHX->Ieval_mutex) +#define PL_eval_owner (vTHX->Ieval_owner) +#define PL_eval_root (vTHX->Ieval_root) +#define PL_eval_start (vTHX->Ieval_start) +#define PL_evalseq (vTHX->Ievalseq) +#define PL_exit_flags (vTHX->Iexit_flags) +#define PL_exitlist (vTHX->Iexitlist) +#define PL_exitlistlen (vTHX->Iexitlistlen) +#define PL_expect (vTHX->Iexpect) +#define PL_fdpid (vTHX->Ifdpid) +#define PL_filemode (vTHX->Ifilemode) +#define PL_forkprocess (vTHX->Iforkprocess) +#define PL_formfeed (vTHX->Iformfeed) +#define PL_generation (vTHX->Igeneration) +#define PL_gensym (vTHX->Igensym) +#define PL_gid (vTHX->Igid) +#define PL_glob_index (vTHX->Iglob_index) +#define PL_globalstash (vTHX->Iglobalstash) +#define PL_he_root (vTHX->Ihe_root) +#define PL_hintgv (vTHX->Ihintgv) +#define PL_hints (vTHX->Ihints) +#define PL_in_clean_all (vTHX->Iin_clean_all) +#define PL_in_clean_objs (vTHX->Iin_clean_objs) +#define PL_in_my (vTHX->Iin_my) +#define PL_in_my_stash (vTHX->Iin_my_stash) +#define PL_incgv (vTHX->Iincgv) +#define PL_initav (vTHX->Iinitav) +#define PL_inplace (vTHX->Iinplace) +#define PL_last_lop (vTHX->Ilast_lop) +#define PL_last_lop_op (vTHX->Ilast_lop_op) +#define PL_last_swash_hv (vTHX->Ilast_swash_hv) +#define PL_last_swash_key (vTHX->Ilast_swash_key) +#define PL_last_swash_klen (vTHX->Ilast_swash_klen) +#define PL_last_swash_slen (vTHX->Ilast_swash_slen) +#define PL_last_swash_tmps (vTHX->Ilast_swash_tmps) +#define PL_last_uni (vTHX->Ilast_uni) +#define PL_lastfd (vTHX->Ilastfd) +#define PL_laststatval (vTHX->Ilaststatval) +#define PL_laststype (vTHX->Ilaststype) +#define PL_lex_brackets (vTHX->Ilex_brackets) +#define PL_lex_brackstack (vTHX->Ilex_brackstack) +#define PL_lex_casemods (vTHX->Ilex_casemods) +#define PL_lex_casestack (vTHX->Ilex_casestack) +#define PL_lex_defer (vTHX->Ilex_defer) +#define PL_lex_dojoin (vTHX->Ilex_dojoin) +#define PL_lex_expect (vTHX->Ilex_expect) +#define PL_lex_formbrack (vTHX->Ilex_formbrack) +#define PL_lex_inpat (vTHX->Ilex_inpat) +#define PL_lex_inwhat (vTHX->Ilex_inwhat) +#define PL_lex_op (vTHX->Ilex_op) +#define PL_lex_repl (vTHX->Ilex_repl) +#define PL_lex_starts (vTHX->Ilex_starts) +#define PL_lex_state (vTHX->Ilex_state) +#define PL_lex_stuff (vTHX->Ilex_stuff) +#define PL_lineary (vTHX->Ilineary) +#define PL_linestart (vTHX->Ilinestart) +#define PL_linestr (vTHX->Ilinestr) +#define PL_localpatches (vTHX->Ilocalpatches) +#define PL_main_cv (vTHX->Imain_cv) +#define PL_main_root (vTHX->Imain_root) +#define PL_main_start (vTHX->Imain_start) +#define PL_max_intro_pending (vTHX->Imax_intro_pending) +#define PL_maxo (vTHX->Imaxo) +#define PL_maxsysfd (vTHX->Imaxsysfd) +#define PL_mess_sv (vTHX->Imess_sv) +#define PL_min_intro_pending (vTHX->Imin_intro_pending) +#define PL_minus_F (vTHX->Iminus_F) +#define PL_minus_a (vTHX->Iminus_a) +#define PL_minus_c (vTHX->Iminus_c) +#define PL_minus_l (vTHX->Iminus_l) +#define PL_minus_n (vTHX->Iminus_n) +#define PL_minus_p (vTHX->Iminus_p) +#define PL_modglobal (vTHX->Imodglobal) +#define PL_multi_close (vTHX->Imulti_close) +#define PL_multi_end (vTHX->Imulti_end) +#define PL_multi_open (vTHX->Imulti_open) +#define PL_multi_start (vTHX->Imulti_start) +#define PL_multiline (vTHX->Imultiline) +#define PL_nexttoke (vTHX->Inexttoke) +#define PL_nexttype (vTHX->Inexttype) +#define PL_nextval (vTHX->Inextval) +#define PL_nice_chunk (vTHX->Inice_chunk) +#define PL_nice_chunk_size (vTHX->Inice_chunk_size) +#define PL_nomemok (vTHX->Inomemok) +#define PL_nthreads (vTHX->Inthreads) +#define PL_nthreads_cond (vTHX->Inthreads_cond) +#define PL_numeric_local (vTHX->Inumeric_local) +#define PL_numeric_name (vTHX->Inumeric_name) +#define PL_numeric_radix (vTHX->Inumeric_radix) +#define PL_numeric_standard (vTHX->Inumeric_standard) +#define PL_ofmt (vTHX->Iofmt) +#define PL_oldbufptr (vTHX->Ioldbufptr) +#define PL_oldname (vTHX->Ioldname) +#define PL_oldoldbufptr (vTHX->Ioldoldbufptr) +#define PL_op_mask (vTHX->Iop_mask) +#define PL_op_seqmax (vTHX->Iop_seqmax) +#define PL_origalen (vTHX->Iorigalen) +#define PL_origargc (vTHX->Iorigargc) +#define PL_origargv (vTHX->Iorigargv) +#define PL_origenviron (vTHX->Iorigenviron) +#define PL_origfilename (vTHX->Iorigfilename) +#define PL_ors (vTHX->Iors) +#define PL_orslen (vTHX->Iorslen) +#define PL_osname (vTHX->Iosname) +#define PL_pad_reset_pending (vTHX->Ipad_reset_pending) +#define PL_padix (vTHX->Ipadix) +#define PL_padix_floor (vTHX->Ipadix_floor) +#define PL_patchlevel (vTHX->Ipatchlevel) +#define PL_pending_ident (vTHX->Ipending_ident) +#define PL_perl_destruct_level (vTHX->Iperl_destruct_level) +#define PL_perldb (vTHX->Iperldb) +#define PL_pidstatus (vTHX->Ipidstatus) +#define PL_preambleav (vTHX->Ipreambleav) +#define PL_preambled (vTHX->Ipreambled) +#define PL_preprocess (vTHX->Ipreprocess) +#define PL_profiledata (vTHX->Iprofiledata) +#define PL_psig_name (vTHX->Ipsig_name) +#define PL_psig_ptr (vTHX->Ipsig_ptr) +#define PL_ptr_table (vTHX->Iptr_table) +#define PL_replgv (vTHX->Ireplgv) +#define PL_rsfp (vTHX->Irsfp) +#define PL_rsfp_filters (vTHX->Irsfp_filters) +#define PL_runops (vTHX->Irunops) +#define PL_sawampersand (vTHX->Isawampersand) +#define PL_sh_path (vTHX->Ish_path) +#define PL_sighandlerp (vTHX->Isighandlerp) +#define PL_splitstr (vTHX->Isplitstr) +#define PL_srand_called (vTHX->Isrand_called) +#define PL_statusvalue (vTHX->Istatusvalue) +#define PL_statusvalue_vms (vTHX->Istatusvalue_vms) +#define PL_stderrgv (vTHX->Istderrgv) +#define PL_stdingv (vTHX->Istdingv) +#define PL_strtab (vTHX->Istrtab) +#define PL_strtab_mutex (vTHX->Istrtab_mutex) +#define PL_sub_generation (vTHX->Isub_generation) +#define PL_sublex_info (vTHX->Isublex_info) +#define PL_subline (vTHX->Isubline) +#define PL_subname (vTHX->Isubname) +#define PL_sv_arenaroot (vTHX->Isv_arenaroot) +#define PL_sv_count (vTHX->Isv_count) +#define PL_sv_mutex (vTHX->Isv_mutex) +#define PL_sv_no (vTHX->Isv_no) +#define PL_sv_objcount (vTHX->Isv_objcount) +#define PL_sv_root (vTHX->Isv_root) +#define PL_sv_undef (vTHX->Isv_undef) +#define PL_sv_yes (vTHX->Isv_yes) +#define PL_svref_mutex (vTHX->Isvref_mutex) +#define PL_sys_intern (vTHX->Isys_intern) +#define PL_tainting (vTHX->Itainting) +#define PL_threadnum (vTHX->Ithreadnum) +#define PL_threads_mutex (vTHX->Ithreads_mutex) +#define PL_threadsv_names (vTHX->Ithreadsv_names) +#define PL_thrsv (vTHX->Ithrsv) +#define PL_tokenbuf (vTHX->Itokenbuf) +#define PL_uid (vTHX->Iuid) +#define PL_unsafe (vTHX->Iunsafe) +#define PL_utf8_alnum (vTHX->Iutf8_alnum) +#define PL_utf8_alnumc (vTHX->Iutf8_alnumc) +#define PL_utf8_alpha (vTHX->Iutf8_alpha) +#define PL_utf8_ascii (vTHX->Iutf8_ascii) +#define PL_utf8_cntrl (vTHX->Iutf8_cntrl) +#define PL_utf8_digit (vTHX->Iutf8_digit) +#define PL_utf8_graph (vTHX->Iutf8_graph) +#define PL_utf8_lower (vTHX->Iutf8_lower) +#define PL_utf8_mark (vTHX->Iutf8_mark) +#define PL_utf8_print (vTHX->Iutf8_print) +#define PL_utf8_punct (vTHX->Iutf8_punct) +#define PL_utf8_space (vTHX->Iutf8_space) +#define PL_utf8_tolower (vTHX->Iutf8_tolower) +#define PL_utf8_totitle (vTHX->Iutf8_totitle) +#define PL_utf8_toupper (vTHX->Iutf8_toupper) +#define PL_utf8_upper (vTHX->Iutf8_upper) +#define PL_utf8_xdigit (vTHX->Iutf8_xdigit) +#define PL_uudmap (vTHX->Iuudmap) +#define PL_warnhook (vTHX->Iwarnhook) +#define PL_widesyscalls (vTHX->Iwidesyscalls) +#define PL_xiv_arenaroot (vTHX->Ixiv_arenaroot) +#define PL_xiv_root (vTHX->Ixiv_root) +#define PL_xnv_root (vTHX->Ixnv_root) +#define PL_xpv_root (vTHX->Ixpv_root) +#define PL_xpvav_root (vTHX->Ixpvav_root) +#define PL_xpvbm_root (vTHX->Ixpvbm_root) +#define PL_xpvcv_root (vTHX->Ixpvcv_root) +#define PL_xpvhv_root (vTHX->Ixpvhv_root) +#define PL_xpviv_root (vTHX->Ixpviv_root) +#define PL_xpvlv_root (vTHX->Ixpvlv_root) +#define PL_xpvmg_root (vTHX->Ixpvmg_root) +#define PL_xpvnv_root (vTHX->Ixpvnv_root) +#define PL_xrv_root (vTHX->Ixrv_root) +#define PL_yychar (vTHX->Iyychar) +#define PL_yydebug (vTHX->Iyydebug) +#define PL_yyerrflag (vTHX->Iyyerrflag) +#define PL_yylval (vTHX->Iyylval) +#define PL_yynerrs (vTHX->Iyynerrs) +#define PL_yyval (vTHX->Iyyval) + +# endif /* USE_THREADS */ #else /* !MULTIPLICITY */ +# if defined(PERL_OBJECT) +/* case 6 above */ + +#define PL_Sv (aTHXo->interp.TSv) +#define PL_Xpv (aTHXo->interp.TXpv) +#define PL_av_fetch_sv (aTHXo->interp.Tav_fetch_sv) +#define PL_bodytarget (aTHXo->interp.Tbodytarget) +#define PL_bostr (aTHXo->interp.Tbostr) +#define PL_chopset (aTHXo->interp.Tchopset) +#define PL_colors (aTHXo->interp.Tcolors) +#define PL_colorset (aTHXo->interp.Tcolorset) +#define PL_curcop (aTHXo->interp.Tcurcop) +#define PL_curpad (aTHXo->interp.Tcurpad) +#define PL_curpm (aTHXo->interp.Tcurpm) +#define PL_curstack (aTHXo->interp.Tcurstack) +#define PL_curstackinfo (aTHXo->interp.Tcurstackinfo) +#define PL_curstash (aTHXo->interp.Tcurstash) +#define PL_defoutgv (aTHXo->interp.Tdefoutgv) +#define PL_defstash (aTHXo->interp.Tdefstash) +#define PL_delaymagic (aTHXo->interp.Tdelaymagic) +#define PL_dirty (aTHXo->interp.Tdirty) +#define PL_dumpindent (aTHXo->interp.Tdumpindent) +#define PL_efloatbuf (aTHXo->interp.Tefloatbuf) +#define PL_efloatsize (aTHXo->interp.Tefloatsize) +#define PL_errors (aTHXo->interp.Terrors) +#define PL_extralen (aTHXo->interp.Textralen) +#define PL_firstgv (aTHXo->interp.Tfirstgv) +#define PL_formtarget (aTHXo->interp.Tformtarget) +#define PL_hv_fetch_ent_mh (aTHXo->interp.Thv_fetch_ent_mh) +#define PL_hv_fetch_sv (aTHXo->interp.Thv_fetch_sv) +#define PL_in_eval (aTHXo->interp.Tin_eval) +#define PL_last_in_gv (aTHXo->interp.Tlast_in_gv) +#define PL_lastgotoprobe (aTHXo->interp.Tlastgotoprobe) +#define PL_lastscream (aTHXo->interp.Tlastscream) +#define PL_localizing (aTHXo->interp.Tlocalizing) +#define PL_mainstack (aTHXo->interp.Tmainstack) +#define PL_markstack (aTHXo->interp.Tmarkstack) +#define PL_markstack_max (aTHXo->interp.Tmarkstack_max) +#define PL_markstack_ptr (aTHXo->interp.Tmarkstack_ptr) +#define PL_maxscream (aTHXo->interp.Tmaxscream) +#define PL_modcount (aTHXo->interp.Tmodcount) +#define PL_na (aTHXo->interp.Tna) +#define PL_nrs (aTHXo->interp.Tnrs) +#define PL_ofs (aTHXo->interp.Tofs) +#define PL_ofslen (aTHXo->interp.Tofslen) +#define PL_op (aTHXo->interp.Top) +#define PL_opsave (aTHXo->interp.Topsave) +#define PL_protect (aTHXo->interp.Tprotect) +#define PL_reg_call_cc (aTHXo->interp.Treg_call_cc) +#define PL_reg_curpm (aTHXo->interp.Treg_curpm) +#define PL_reg_eval_set (aTHXo->interp.Treg_eval_set) +#define PL_reg_flags (aTHXo->interp.Treg_flags) +#define PL_reg_ganch (aTHXo->interp.Treg_ganch) +#define PL_reg_leftiter (aTHXo->interp.Treg_leftiter) +#define PL_reg_magic (aTHXo->interp.Treg_magic) +#define PL_reg_maxiter (aTHXo->interp.Treg_maxiter) +#define PL_reg_oldcurpm (aTHXo->interp.Treg_oldcurpm) +#define PL_reg_oldpos (aTHXo->interp.Treg_oldpos) +#define PL_reg_oldsaved (aTHXo->interp.Treg_oldsaved) +#define PL_reg_oldsavedlen (aTHXo->interp.Treg_oldsavedlen) +#define PL_reg_poscache (aTHXo->interp.Treg_poscache) +#define PL_reg_poscache_size (aTHXo->interp.Treg_poscache_size) +#define PL_reg_re (aTHXo->interp.Treg_re) +#define PL_reg_start_tmp (aTHXo->interp.Treg_start_tmp) +#define PL_reg_start_tmpl (aTHXo->interp.Treg_start_tmpl) +#define PL_reg_starttry (aTHXo->interp.Treg_starttry) +#define PL_reg_sv (aTHXo->interp.Treg_sv) +#define PL_reg_whilem_seen (aTHXo->interp.Treg_whilem_seen) +#define PL_regbol (aTHXo->interp.Tregbol) +#define PL_regcc (aTHXo->interp.Tregcc) +#define PL_regcode (aTHXo->interp.Tregcode) +#define PL_regcomp_parse (aTHXo->interp.Tregcomp_parse) +#define PL_regcomp_rx (aTHXo->interp.Tregcomp_rx) +#define PL_regcompp (aTHXo->interp.Tregcompp) +#define PL_regdata (aTHXo->interp.Tregdata) +#define PL_regdummy (aTHXo->interp.Tregdummy) +#define PL_regendp (aTHXo->interp.Tregendp) +#define PL_regeol (aTHXo->interp.Tregeol) +#define PL_regexecp (aTHXo->interp.Tregexecp) +#define PL_regflags (aTHXo->interp.Tregflags) +#define PL_regfree (aTHXo->interp.Tregfree) +#define PL_regindent (aTHXo->interp.Tregindent) +#define PL_reginput (aTHXo->interp.Treginput) +#define PL_regint_start (aTHXo->interp.Tregint_start) +#define PL_regint_string (aTHXo->interp.Tregint_string) +#define PL_reginterp_cnt (aTHXo->interp.Treginterp_cnt) +#define PL_reglastparen (aTHXo->interp.Treglastparen) +#define PL_regnarrate (aTHXo->interp.Tregnarrate) +#define PL_regnaughty (aTHXo->interp.Tregnaughty) +#define PL_regnpar (aTHXo->interp.Tregnpar) +#define PL_regprecomp (aTHXo->interp.Tregprecomp) +#define PL_regprev (aTHXo->interp.Tregprev) +#define PL_regprogram (aTHXo->interp.Tregprogram) +#define PL_regsawback (aTHXo->interp.Tregsawback) +#define PL_regseen (aTHXo->interp.Tregseen) +#define PL_regsize (aTHXo->interp.Tregsize) +#define PL_regstartp (aTHXo->interp.Tregstartp) +#define PL_regtill (aTHXo->interp.Tregtill) +#define PL_regxend (aTHXo->interp.Tregxend) +#define PL_restartop (aTHXo->interp.Trestartop) +#define PL_retstack (aTHXo->interp.Tretstack) +#define PL_retstack_ix (aTHXo->interp.Tretstack_ix) +#define PL_retstack_max (aTHXo->interp.Tretstack_max) +#define PL_rs (aTHXo->interp.Trs) +#define PL_savestack (aTHXo->interp.Tsavestack) +#define PL_savestack_ix (aTHXo->interp.Tsavestack_ix) +#define PL_savestack_max (aTHXo->interp.Tsavestack_max) +#define PL_scopestack (aTHXo->interp.Tscopestack) +#define PL_scopestack_ix (aTHXo->interp.Tscopestack_ix) +#define PL_scopestack_max (aTHXo->interp.Tscopestack_max) +#define PL_screamfirst (aTHXo->interp.Tscreamfirst) +#define PL_screamnext (aTHXo->interp.Tscreamnext) +#define PL_secondgv (aTHXo->interp.Tsecondgv) +#define PL_seen_evals (aTHXo->interp.Tseen_evals) +#define PL_seen_zerolen (aTHXo->interp.Tseen_zerolen) +#define PL_sortcop (aTHXo->interp.Tsortcop) +#define PL_sortcxix (aTHXo->interp.Tsortcxix) +#define PL_sortstash (aTHXo->interp.Tsortstash) +#define PL_stack_base (aTHXo->interp.Tstack_base) +#define PL_stack_max (aTHXo->interp.Tstack_max) +#define PL_stack_sp (aTHXo->interp.Tstack_sp) +#define PL_start_env (aTHXo->interp.Tstart_env) +#define PL_statbuf (aTHXo->interp.Tstatbuf) +#define PL_statcache (aTHXo->interp.Tstatcache) +#define PL_statgv (aTHXo->interp.Tstatgv) +#define PL_statname (aTHXo->interp.Tstatname) +#define PL_tainted (aTHXo->interp.Ttainted) +#define PL_timesbuf (aTHXo->interp.Ttimesbuf) +#define PL_tmps_floor (aTHXo->interp.Ttmps_floor) +#define PL_tmps_ix (aTHXo->interp.Ttmps_ix) +#define PL_tmps_max (aTHXo->interp.Ttmps_max) +#define PL_tmps_stack (aTHXo->interp.Ttmps_stack) +#define PL_top_env (aTHXo->interp.Ttop_env) +#define PL_toptarget (aTHXo->interp.Ttoptarget) +#define PL_watchaddr (aTHXo->interp.Twatchaddr) +#define PL_watchok (aTHXo->interp.Twatchok) +#define PL_Argv (aTHXo->interp.IArgv) +#define PL_Cmd (aTHXo->interp.ICmd) +#define PL_DBcv (aTHXo->interp.IDBcv) +#define PL_DBgv (aTHXo->interp.IDBgv) +#define PL_DBline (aTHXo->interp.IDBline) +#define PL_DBsignal (aTHXo->interp.IDBsignal) +#define PL_DBsingle (aTHXo->interp.IDBsingle) +#define PL_DBsub (aTHXo->interp.IDBsub) +#define PL_DBtrace (aTHXo->interp.IDBtrace) +#define PL_Dir (aTHXo->interp.IDir) +#define PL_Env (aTHXo->interp.IEnv) +#define PL_LIO (aTHXo->interp.ILIO) +#define PL_Mem (aTHXo->interp.IMem) +#define PL_MemParse (aTHXo->interp.IMemParse) +#define PL_MemShared (aTHXo->interp.IMemShared) +#define PL_Proc (aTHXo->interp.IProc) +#define PL_Sock (aTHXo->interp.ISock) +#define PL_StdIO (aTHXo->interp.IStdIO) +#define PL_amagic_generation (aTHXo->interp.Iamagic_generation) +#define PL_an (aTHXo->interp.Ian) +#define PL_argvgv (aTHXo->interp.Iargvgv) +#define PL_argvout_stack (aTHXo->interp.Iargvout_stack) +#define PL_argvoutgv (aTHXo->interp.Iargvoutgv) +#define PL_basetime (aTHXo->interp.Ibasetime) +#define PL_beginav (aTHXo->interp.Ibeginav) +#define PL_bitcount (aTHXo->interp.Ibitcount) +#define PL_bufend (aTHXo->interp.Ibufend) +#define PL_bufptr (aTHXo->interp.Ibufptr) +#define PL_checkav (aTHXo->interp.Icheckav) +#define PL_collation_ix (aTHXo->interp.Icollation_ix) +#define PL_collation_name (aTHXo->interp.Icollation_name) +#define PL_collation_standard (aTHXo->interp.Icollation_standard) +#define PL_collxfrm_base (aTHXo->interp.Icollxfrm_base) +#define PL_collxfrm_mult (aTHXo->interp.Icollxfrm_mult) +#define PL_compcv (aTHXo->interp.Icompcv) +#define PL_compiling (aTHXo->interp.Icompiling) +#define PL_comppad (aTHXo->interp.Icomppad) +#define PL_comppad_name (aTHXo->interp.Icomppad_name) +#define PL_comppad_name_fill (aTHXo->interp.Icomppad_name_fill) +#define PL_comppad_name_floor (aTHXo->interp.Icomppad_name_floor) +#define PL_cop_seqmax (aTHXo->interp.Icop_seqmax) +#define PL_copline (aTHXo->interp.Icopline) +#define PL_cred_mutex (aTHXo->interp.Icred_mutex) +#define PL_cryptseen (aTHXo->interp.Icryptseen) +#define PL_cshlen (aTHXo->interp.Icshlen) +#define PL_cshname (aTHXo->interp.Icshname) +#define PL_curcopdb (aTHXo->interp.Icurcopdb) +#define PL_curstname (aTHXo->interp.Icurstname) +#define PL_curthr (aTHXo->interp.Icurthr) +#define PL_dbargs (aTHXo->interp.Idbargs) +#define PL_debstash (aTHXo->interp.Idebstash) +#define PL_debug (aTHXo->interp.Idebug) +#define PL_defgv (aTHXo->interp.Idefgv) +#define PL_diehook (aTHXo->interp.Idiehook) +#define PL_doextract (aTHXo->interp.Idoextract) +#define PL_doswitches (aTHXo->interp.Idoswitches) +#define PL_dowarn (aTHXo->interp.Idowarn) +#define PL_e_script (aTHXo->interp.Ie_script) +#define PL_egid (aTHXo->interp.Iegid) +#define PL_endav (aTHXo->interp.Iendav) +#define PL_envgv (aTHXo->interp.Ienvgv) +#define PL_errgv (aTHXo->interp.Ierrgv) +#define PL_error_count (aTHXo->interp.Ierror_count) +#define PL_euid (aTHXo->interp.Ieuid) +#define PL_eval_cond (aTHXo->interp.Ieval_cond) +#define PL_eval_mutex (aTHXo->interp.Ieval_mutex) +#define PL_eval_owner (aTHXo->interp.Ieval_owner) +#define PL_eval_root (aTHXo->interp.Ieval_root) +#define PL_eval_start (aTHXo->interp.Ieval_start) +#define PL_evalseq (aTHXo->interp.Ievalseq) +#define PL_exit_flags (aTHXo->interp.Iexit_flags) +#define PL_exitlist (aTHXo->interp.Iexitlist) +#define PL_exitlistlen (aTHXo->interp.Iexitlistlen) +#define PL_expect (aTHXo->interp.Iexpect) +#define PL_fdpid (aTHXo->interp.Ifdpid) +#define PL_filemode (aTHXo->interp.Ifilemode) +#define PL_forkprocess (aTHXo->interp.Iforkprocess) +#define PL_formfeed (aTHXo->interp.Iformfeed) +#define PL_generation (aTHXo->interp.Igeneration) +#define PL_gensym (aTHXo->interp.Igensym) +#define PL_gid (aTHXo->interp.Igid) +#define PL_glob_index (aTHXo->interp.Iglob_index) +#define PL_globalstash (aTHXo->interp.Iglobalstash) +#define PL_he_root (aTHXo->interp.Ihe_root) +#define PL_hintgv (aTHXo->interp.Ihintgv) +#define PL_hints (aTHXo->interp.Ihints) +#define PL_in_clean_all (aTHXo->interp.Iin_clean_all) +#define PL_in_clean_objs (aTHXo->interp.Iin_clean_objs) +#define PL_in_my (aTHXo->interp.Iin_my) +#define PL_in_my_stash (aTHXo->interp.Iin_my_stash) +#define PL_incgv (aTHXo->interp.Iincgv) +#define PL_initav (aTHXo->interp.Iinitav) +#define PL_inplace (aTHXo->interp.Iinplace) +#define PL_last_lop (aTHXo->interp.Ilast_lop) +#define PL_last_lop_op (aTHXo->interp.Ilast_lop_op) +#define PL_last_swash_hv (aTHXo->interp.Ilast_swash_hv) +#define PL_last_swash_key (aTHXo->interp.Ilast_swash_key) +#define PL_last_swash_klen (aTHXo->interp.Ilast_swash_klen) +#define PL_last_swash_slen (aTHXo->interp.Ilast_swash_slen) +#define PL_last_swash_tmps (aTHXo->interp.Ilast_swash_tmps) +#define PL_last_uni (aTHXo->interp.Ilast_uni) +#define PL_lastfd (aTHXo->interp.Ilastfd) +#define PL_laststatval (aTHXo->interp.Ilaststatval) +#define PL_laststype (aTHXo->interp.Ilaststype) +#define PL_lex_brackets (aTHXo->interp.Ilex_brackets) +#define PL_lex_brackstack (aTHXo->interp.Ilex_brackstack) +#define PL_lex_casemods (aTHXo->interp.Ilex_casemods) +#define PL_lex_casestack (aTHXo->interp.Ilex_casestack) +#define PL_lex_defer (aTHXo->interp.Ilex_defer) +#define PL_lex_dojoin (aTHXo->interp.Ilex_dojoin) +#define PL_lex_expect (aTHXo->interp.Ilex_expect) +#define PL_lex_formbrack (aTHXo->interp.Ilex_formbrack) +#define PL_lex_inpat (aTHXo->interp.Ilex_inpat) +#define PL_lex_inwhat (aTHXo->interp.Ilex_inwhat) +#define PL_lex_op (aTHXo->interp.Ilex_op) +#define PL_lex_repl (aTHXo->interp.Ilex_repl) +#define PL_lex_starts (aTHXo->interp.Ilex_starts) +#define PL_lex_state (aTHXo->interp.Ilex_state) +#define PL_lex_stuff (aTHXo->interp.Ilex_stuff) +#define PL_lineary (aTHXo->interp.Ilineary) +#define PL_linestart (aTHXo->interp.Ilinestart) +#define PL_linestr (aTHXo->interp.Ilinestr) +#define PL_localpatches (aTHXo->interp.Ilocalpatches) +#define PL_main_cv (aTHXo->interp.Imain_cv) +#define PL_main_root (aTHXo->interp.Imain_root) +#define PL_main_start (aTHXo->interp.Imain_start) +#define PL_max_intro_pending (aTHXo->interp.Imax_intro_pending) +#define PL_maxo (aTHXo->interp.Imaxo) +#define PL_maxsysfd (aTHXo->interp.Imaxsysfd) +#define PL_mess_sv (aTHXo->interp.Imess_sv) +#define PL_min_intro_pending (aTHXo->interp.Imin_intro_pending) +#define PL_minus_F (aTHXo->interp.Iminus_F) +#define PL_minus_a (aTHXo->interp.Iminus_a) +#define PL_minus_c (aTHXo->interp.Iminus_c) +#define PL_minus_l (aTHXo->interp.Iminus_l) +#define PL_minus_n (aTHXo->interp.Iminus_n) +#define PL_minus_p (aTHXo->interp.Iminus_p) +#define PL_modglobal (aTHXo->interp.Imodglobal) +#define PL_multi_close (aTHXo->interp.Imulti_close) +#define PL_multi_end (aTHXo->interp.Imulti_end) +#define PL_multi_open (aTHXo->interp.Imulti_open) +#define PL_multi_start (aTHXo->interp.Imulti_start) +#define PL_multiline (aTHXo->interp.Imultiline) +#define PL_nexttoke (aTHXo->interp.Inexttoke) +#define PL_nexttype (aTHXo->interp.Inexttype) +#define PL_nextval (aTHXo->interp.Inextval) +#define PL_nice_chunk (aTHXo->interp.Inice_chunk) +#define PL_nice_chunk_size (aTHXo->interp.Inice_chunk_size) +#define PL_nomemok (aTHXo->interp.Inomemok) +#define PL_nthreads (aTHXo->interp.Inthreads) +#define PL_nthreads_cond (aTHXo->interp.Inthreads_cond) +#define PL_numeric_local (aTHXo->interp.Inumeric_local) +#define PL_numeric_name (aTHXo->interp.Inumeric_name) +#define PL_numeric_radix (aTHXo->interp.Inumeric_radix) +#define PL_numeric_standard (aTHXo->interp.Inumeric_standard) +#define PL_ofmt (aTHXo->interp.Iofmt) +#define PL_oldbufptr (aTHXo->interp.Ioldbufptr) +#define PL_oldname (aTHXo->interp.Ioldname) +#define PL_oldoldbufptr (aTHXo->interp.Ioldoldbufptr) +#define PL_op_mask (aTHXo->interp.Iop_mask) +#define PL_op_seqmax (aTHXo->interp.Iop_seqmax) +#define PL_origalen (aTHXo->interp.Iorigalen) +#define PL_origargc (aTHXo->interp.Iorigargc) +#define PL_origargv (aTHXo->interp.Iorigargv) +#define PL_origenviron (aTHXo->interp.Iorigenviron) +#define PL_origfilename (aTHXo->interp.Iorigfilename) +#define PL_ors (aTHXo->interp.Iors) +#define PL_orslen (aTHXo->interp.Iorslen) +#define PL_osname (aTHXo->interp.Iosname) +#define PL_pad_reset_pending (aTHXo->interp.Ipad_reset_pending) +#define PL_padix (aTHXo->interp.Ipadix) +#define PL_padix_floor (aTHXo->interp.Ipadix_floor) +#define PL_patchlevel (aTHXo->interp.Ipatchlevel) +#define PL_pending_ident (aTHXo->interp.Ipending_ident) +#define PL_perl_destruct_level (aTHXo->interp.Iperl_destruct_level) +#define PL_perldb (aTHXo->interp.Iperldb) +#define PL_pidstatus (aTHXo->interp.Ipidstatus) +#define PL_preambleav (aTHXo->interp.Ipreambleav) +#define PL_preambled (aTHXo->interp.Ipreambled) +#define PL_preprocess (aTHXo->interp.Ipreprocess) +#define PL_profiledata (aTHXo->interp.Iprofiledata) +#define PL_psig_name (aTHXo->interp.Ipsig_name) +#define PL_psig_ptr (aTHXo->interp.Ipsig_ptr) +#define PL_ptr_table (aTHXo->interp.Iptr_table) +#define PL_replgv (aTHXo->interp.Ireplgv) +#define PL_rsfp (aTHXo->interp.Irsfp) +#define PL_rsfp_filters (aTHXo->interp.Irsfp_filters) +#define PL_runops (aTHXo->interp.Irunops) +#define PL_sawampersand (aTHXo->interp.Isawampersand) +#define PL_sh_path (aTHXo->interp.Ish_path) +#define PL_sighandlerp (aTHXo->interp.Isighandlerp) +#define PL_splitstr (aTHXo->interp.Isplitstr) +#define PL_srand_called (aTHXo->interp.Isrand_called) +#define PL_statusvalue (aTHXo->interp.Istatusvalue) +#define PL_statusvalue_vms (aTHXo->interp.Istatusvalue_vms) +#define PL_stderrgv (aTHXo->interp.Istderrgv) +#define PL_stdingv (aTHXo->interp.Istdingv) +#define PL_strtab (aTHXo->interp.Istrtab) +#define PL_strtab_mutex (aTHXo->interp.Istrtab_mutex) +#define PL_sub_generation (aTHXo->interp.Isub_generation) +#define PL_sublex_info (aTHXo->interp.Isublex_info) +#define PL_subline (aTHXo->interp.Isubline) +#define PL_subname (aTHXo->interp.Isubname) +#define PL_sv_arenaroot (aTHXo->interp.Isv_arenaroot) +#define PL_sv_count (aTHXo->interp.Isv_count) +#define PL_sv_mutex (aTHXo->interp.Isv_mutex) +#define PL_sv_no (aTHXo->interp.Isv_no) +#define PL_sv_objcount (aTHXo->interp.Isv_objcount) +#define PL_sv_root (aTHXo->interp.Isv_root) +#define PL_sv_undef (aTHXo->interp.Isv_undef) +#define PL_sv_yes (aTHXo->interp.Isv_yes) +#define PL_svref_mutex (aTHXo->interp.Isvref_mutex) +#define PL_sys_intern (aTHXo->interp.Isys_intern) +#define PL_tainting (aTHXo->interp.Itainting) +#define PL_threadnum (aTHXo->interp.Ithreadnum) +#define PL_threads_mutex (aTHXo->interp.Ithreads_mutex) +#define PL_threadsv_names (aTHXo->interp.Ithreadsv_names) +#define PL_thrsv (aTHXo->interp.Ithrsv) +#define PL_tokenbuf (aTHXo->interp.Itokenbuf) +#define PL_uid (aTHXo->interp.Iuid) +#define PL_unsafe (aTHXo->interp.Iunsafe) +#define PL_utf8_alnum (aTHXo->interp.Iutf8_alnum) +#define PL_utf8_alnumc (aTHXo->interp.Iutf8_alnumc) +#define PL_utf8_alpha (aTHXo->interp.Iutf8_alpha) +#define PL_utf8_ascii (aTHXo->interp.Iutf8_ascii) +#define PL_utf8_cntrl (aTHXo->interp.Iutf8_cntrl) +#define PL_utf8_digit (aTHXo->interp.Iutf8_digit) +#define PL_utf8_graph (aTHXo->interp.Iutf8_graph) +#define PL_utf8_lower (aTHXo->interp.Iutf8_lower) +#define PL_utf8_mark (aTHXo->interp.Iutf8_mark) +#define PL_utf8_print (aTHXo->interp.Iutf8_print) +#define PL_utf8_punct (aTHXo->interp.Iutf8_punct) +#define PL_utf8_space (aTHXo->interp.Iutf8_space) +#define PL_utf8_tolower (aTHXo->interp.Iutf8_tolower) +#define PL_utf8_totitle (aTHXo->interp.Iutf8_totitle) +#define PL_utf8_toupper (aTHXo->interp.Iutf8_toupper) +#define PL_utf8_upper (aTHXo->interp.Iutf8_upper) +#define PL_utf8_xdigit (aTHXo->interp.Iutf8_xdigit) +#define PL_uudmap (aTHXo->interp.Iuudmap) +#define PL_warnhook (aTHXo->interp.Iwarnhook) +#define PL_widesyscalls (aTHXo->interp.Iwidesyscalls) +#define PL_xiv_arenaroot (aTHXo->interp.Ixiv_arenaroot) +#define PL_xiv_root (aTHXo->interp.Ixiv_root) +#define PL_xnv_root (aTHXo->interp.Ixnv_root) +#define PL_xpv_root (aTHXo->interp.Ixpv_root) +#define PL_xpvav_root (aTHXo->interp.Ixpvav_root) +#define PL_xpvbm_root (aTHXo->interp.Ixpvbm_root) +#define PL_xpvcv_root (aTHXo->interp.Ixpvcv_root) +#define PL_xpvhv_root (aTHXo->interp.Ixpvhv_root) +#define PL_xpviv_root (aTHXo->interp.Ixpviv_root) +#define PL_xpvlv_root (aTHXo->interp.Ixpvlv_root) +#define PL_xpvmg_root (aTHXo->interp.Ixpvmg_root) +#define PL_xpvnv_root (aTHXo->interp.Ixpvnv_root) +#define PL_xrv_root (aTHXo->interp.Ixrv_root) +#define PL_yychar (aTHXo->interp.Iyychar) +#define PL_yydebug (aTHXo->interp.Iyydebug) +#define PL_yyerrflag (aTHXo->interp.Iyyerrflag) +#define PL_yylval (aTHXo->interp.Iyylval) +#define PL_yynerrs (aTHXo->interp.Iyynerrs) +#define PL_yyval (aTHXo->interp.Iyyval) + +# else /* !PERL_OBJECT */ + +/* cases 1 and 4 above */ + #define PL_IArgv PL_Argv #define PL_ICmd PL_Cmd #define PL_IDBcv PL_DBcv @@ -275,75 +1110,128 @@ #define PL_IDBsingle PL_DBsingle #define PL_IDBsub PL_DBsub #define PL_IDBtrace PL_DBtrace -#define PL_Iampergv PL_ampergv -#define PL_Iarchpat_auto PL_archpat_auto +#define PL_IDir PL_Dir +#define PL_IEnv PL_Env +#define PL_ILIO PL_LIO +#define PL_IMem PL_Mem +#define PL_IMemParse PL_MemParse +#define PL_IMemShared PL_MemShared +#define PL_IProc PL_Proc +#define PL_ISock PL_Sock +#define PL_IStdIO PL_StdIO +#define PL_Iamagic_generation PL_amagic_generation +#define PL_Ian PL_an #define PL_Iargvgv PL_argvgv +#define PL_Iargvout_stack PL_argvout_stack #define PL_Iargvoutgv PL_argvoutgv #define PL_Ibasetime PL_basetime #define PL_Ibeginav PL_beginav -#define PL_Ibytecode_iv_overflows PL_bytecode_iv_overflows -#define PL_Ibytecode_obj_list PL_bytecode_obj_list -#define PL_Ibytecode_obj_list_fill PL_bytecode_obj_list_fill -#define PL_Ibytecode_pv PL_bytecode_pv -#define PL_Ibytecode_sv PL_bytecode_sv -#define PL_Icddir PL_cddir +#define PL_Ibitcount PL_bitcount +#define PL_Ibufend PL_bufend +#define PL_Ibufptr PL_bufptr +#define PL_Icheckav PL_checkav +#define PL_Icollation_ix PL_collation_ix +#define PL_Icollation_name PL_collation_name +#define PL_Icollation_standard PL_collation_standard +#define PL_Icollxfrm_base PL_collxfrm_base +#define PL_Icollxfrm_mult PL_collxfrm_mult #define PL_Icompcv PL_compcv #define PL_Icompiling PL_compiling #define PL_Icomppad PL_comppad #define PL_Icomppad_name PL_comppad_name #define PL_Icomppad_name_fill PL_comppad_name_fill #define PL_Icomppad_name_floor PL_comppad_name_floor +#define PL_Icop_seqmax PL_cop_seqmax #define PL_Icopline PL_copline +#define PL_Icred_mutex PL_cred_mutex +#define PL_Icryptseen PL_cryptseen +#define PL_Icshlen PL_cshlen +#define PL_Icshname PL_cshname #define PL_Icurcopdb PL_curcopdb #define PL_Icurstname PL_curstname +#define PL_Icurthr PL_curthr #define PL_Idbargs PL_dbargs -#define PL_Idebdelim PL_debdelim -#define PL_Idebname PL_debname #define PL_Idebstash PL_debstash +#define PL_Idebug PL_debug #define PL_Idefgv PL_defgv #define PL_Idiehook PL_diehook -#define PL_Idlevel PL_dlevel -#define PL_Idlmax PL_dlmax #define PL_Idoextract PL_doextract #define PL_Idoswitches PL_doswitches #define PL_Idowarn PL_dowarn -#define PL_Idumplvl PL_dumplvl #define PL_Ie_script PL_e_script +#define PL_Iegid PL_egid #define PL_Iendav PL_endav #define PL_Ienvgv PL_envgv #define PL_Ierrgv PL_errgv +#define PL_Ierror_count PL_error_count +#define PL_Ieuid PL_euid +#define PL_Ieval_cond PL_eval_cond +#define PL_Ieval_mutex PL_eval_mutex +#define PL_Ieval_owner PL_eval_owner #define PL_Ieval_root PL_eval_root #define PL_Ieval_start PL_eval_start +#define PL_Ievalseq PL_evalseq +#define PL_Iexit_flags PL_exit_flags #define PL_Iexitlist PL_exitlist #define PL_Iexitlistlen PL_exitlistlen +#define PL_Iexpect PL_expect #define PL_Ifdpid PL_fdpid #define PL_Ifilemode PL_filemode #define PL_Iforkprocess PL_forkprocess #define PL_Iformfeed PL_formfeed #define PL_Igeneration PL_generation #define PL_Igensym PL_gensym +#define PL_Igid PL_gid +#define PL_Iglob_index PL_glob_index #define PL_Iglobalstash PL_globalstash +#define PL_Ihe_root PL_he_root #define PL_Ihintgv PL_hintgv +#define PL_Ihints PL_hints #define PL_Iin_clean_all PL_in_clean_all #define PL_Iin_clean_objs PL_in_clean_objs +#define PL_Iin_my PL_in_my +#define PL_Iin_my_stash PL_in_my_stash #define PL_Iincgv PL_incgv #define PL_Iinitav PL_initav #define PL_Iinplace PL_inplace -#define PL_Ilast_proto PL_last_proto +#define PL_Ilast_lop PL_last_lop +#define PL_Ilast_lop_op PL_last_lop_op +#define PL_Ilast_swash_hv PL_last_swash_hv +#define PL_Ilast_swash_key PL_last_swash_key +#define PL_Ilast_swash_klen PL_last_swash_klen +#define PL_Ilast_swash_slen PL_last_swash_slen +#define PL_Ilast_swash_tmps PL_last_swash_tmps +#define PL_Ilast_uni PL_last_uni #define PL_Ilastfd PL_lastfd -#define PL_Ilastsize PL_lastsize -#define PL_Ilastspbase PL_lastspbase #define PL_Ilaststatval PL_laststatval #define PL_Ilaststype PL_laststype -#define PL_Ileftgv PL_leftgv +#define PL_Ilex_brackets PL_lex_brackets +#define PL_Ilex_brackstack PL_lex_brackstack +#define PL_Ilex_casemods PL_lex_casemods +#define PL_Ilex_casestack PL_lex_casestack +#define PL_Ilex_defer PL_lex_defer +#define PL_Ilex_dojoin PL_lex_dojoin +#define PL_Ilex_expect PL_lex_expect +#define PL_Ilex_formbrack PL_lex_formbrack +#define PL_Ilex_inpat PL_lex_inpat +#define PL_Ilex_inwhat PL_lex_inwhat +#define PL_Ilex_op PL_lex_op +#define PL_Ilex_repl PL_lex_repl +#define PL_Ilex_starts PL_lex_starts +#define PL_Ilex_state PL_lex_state +#define PL_Ilex_stuff PL_lex_stuff #define PL_Ilineary PL_lineary #define PL_Ilinestart PL_linestart +#define PL_Ilinestr PL_linestr #define PL_Ilocalpatches PL_localpatches #define PL_Imain_cv PL_main_cv #define PL_Imain_root PL_main_root #define PL_Imain_start PL_main_start +#define PL_Imax_intro_pending PL_max_intro_pending +#define PL_Imaxo PL_maxo #define PL_Imaxsysfd PL_maxsysfd #define PL_Imess_sv PL_mess_sv +#define PL_Imin_intro_pending PL_min_intro_pending #define PL_Iminus_F PL_minus_F #define PL_Iminus_a PL_minus_a #define PL_Iminus_c PL_minus_c @@ -351,55 +1239,268 @@ #define PL_Iminus_n PL_minus_n #define PL_Iminus_p PL_minus_p #define PL_Imodglobal PL_modglobal +#define PL_Imulti_close PL_multi_close +#define PL_Imulti_end PL_multi_end +#define PL_Imulti_open PL_multi_open +#define PL_Imulti_start PL_multi_start #define PL_Imultiline PL_multiline -#define PL_Imystrk PL_mystrk +#define PL_Inexttoke PL_nexttoke +#define PL_Inexttype PL_nexttype +#define PL_Inextval PL_nextval +#define PL_Inice_chunk PL_nice_chunk +#define PL_Inice_chunk_size PL_nice_chunk_size +#define PL_Inomemok PL_nomemok +#define PL_Inthreads PL_nthreads +#define PL_Inthreads_cond PL_nthreads_cond +#define PL_Inumeric_local PL_numeric_local +#define PL_Inumeric_name PL_numeric_name +#define PL_Inumeric_radix PL_numeric_radix +#define PL_Inumeric_standard PL_numeric_standard #define PL_Iofmt PL_ofmt -#define PL_Ioldlastpm PL_oldlastpm +#define PL_Ioldbufptr PL_oldbufptr #define PL_Ioldname PL_oldname +#define PL_Ioldoldbufptr PL_oldoldbufptr #define PL_Iop_mask PL_op_mask +#define PL_Iop_seqmax PL_op_seqmax +#define PL_Iorigalen PL_origalen #define PL_Iorigargc PL_origargc #define PL_Iorigargv PL_origargv +#define PL_Iorigenviron PL_origenviron #define PL_Iorigfilename PL_origfilename #define PL_Iors PL_ors #define PL_Iorslen PL_orslen -#define PL_Iparsehook PL_parsehook +#define PL_Iosname PL_osname +#define PL_Ipad_reset_pending PL_pad_reset_pending +#define PL_Ipadix PL_padix +#define PL_Ipadix_floor PL_padix_floor #define PL_Ipatchlevel PL_patchlevel #define PL_Ipending_ident PL_pending_ident #define PL_Iperl_destruct_level PL_perl_destruct_level #define PL_Iperldb PL_perldb +#define PL_Ipidstatus PL_pidstatus #define PL_Ipreambleav PL_preambleav #define PL_Ipreambled PL_preambled #define PL_Ipreprocess PL_preprocess #define PL_Iprofiledata PL_profiledata +#define PL_Ipsig_name PL_psig_name +#define PL_Ipsig_ptr PL_psig_ptr +#define PL_Iptr_table PL_ptr_table #define PL_Ireplgv PL_replgv -#define PL_Irightgv PL_rightgv #define PL_Irsfp PL_rsfp #define PL_Irsfp_filters PL_rsfp_filters +#define PL_Irunops PL_runops #define PL_Isawampersand PL_sawampersand -#define PL_Isawstudy PL_sawstudy -#define PL_Isawvec PL_sawvec -#define PL_Isiggv PL_siggv +#define PL_Ish_path PL_sh_path +#define PL_Isighandlerp PL_sighandlerp #define PL_Isplitstr PL_splitstr +#define PL_Isrand_called PL_srand_called #define PL_Istatusvalue PL_statusvalue #define PL_Istatusvalue_vms PL_statusvalue_vms +#define PL_Istderrgv PL_stderrgv #define PL_Istdingv PL_stdingv -#define PL_Istrchop PL_strchop #define PL_Istrtab PL_strtab #define PL_Istrtab_mutex PL_strtab_mutex #define PL_Isub_generation PL_sub_generation #define PL_Isublex_info PL_sublex_info +#define PL_Isubline PL_subline +#define PL_Isubname PL_subname #define PL_Isv_arenaroot PL_sv_arenaroot #define PL_Isv_count PL_sv_count +#define PL_Isv_mutex PL_sv_mutex +#define PL_Isv_no PL_sv_no #define PL_Isv_objcount PL_sv_objcount #define PL_Isv_root PL_sv_root +#define PL_Isv_undef PL_sv_undef +#define PL_Isv_yes PL_sv_yes +#define PL_Isvref_mutex PL_svref_mutex #define PL_Isys_intern PL_sys_intern #define PL_Itainting PL_tainting #define PL_Ithreadnum PL_threadnum +#define PL_Ithreads_mutex PL_threads_mutex +#define PL_Ithreadsv_names PL_threadsv_names #define PL_Ithrsv PL_thrsv +#define PL_Itokenbuf PL_tokenbuf +#define PL_Iuid PL_uid #define PL_Iunsafe PL_unsafe +#define PL_Iutf8_alnum PL_utf8_alnum +#define PL_Iutf8_alnumc PL_utf8_alnumc +#define PL_Iutf8_alpha PL_utf8_alpha +#define PL_Iutf8_ascii PL_utf8_ascii +#define PL_Iutf8_cntrl PL_utf8_cntrl +#define PL_Iutf8_digit PL_utf8_digit +#define PL_Iutf8_graph PL_utf8_graph +#define PL_Iutf8_lower PL_utf8_lower +#define PL_Iutf8_mark PL_utf8_mark +#define PL_Iutf8_print PL_utf8_print +#define PL_Iutf8_punct PL_utf8_punct +#define PL_Iutf8_space PL_utf8_space +#define PL_Iutf8_tolower PL_utf8_tolower +#define PL_Iutf8_totitle PL_utf8_totitle +#define PL_Iutf8_toupper PL_utf8_toupper +#define PL_Iutf8_upper PL_utf8_upper +#define PL_Iutf8_xdigit PL_utf8_xdigit +#define PL_Iuudmap PL_uudmap #define PL_Iwarnhook PL_warnhook +#define PL_Iwidesyscalls PL_widesyscalls +#define PL_Ixiv_arenaroot PL_xiv_arenaroot +#define PL_Ixiv_root PL_xiv_root +#define PL_Ixnv_root PL_xnv_root +#define PL_Ixpv_root PL_xpv_root +#define PL_Ixpvav_root PL_xpvav_root +#define PL_Ixpvbm_root PL_xpvbm_root +#define PL_Ixpvcv_root PL_xpvcv_root +#define PL_Ixpvhv_root PL_xpvhv_root +#define PL_Ixpviv_root PL_xpviv_root +#define PL_Ixpvlv_root PL_xpvlv_root +#define PL_Ixpvmg_root PL_xpvmg_root +#define PL_Ixpvnv_root PL_xpvnv_root +#define PL_Ixrv_root PL_xrv_root +#define PL_Iyychar PL_yychar +#define PL_Iyydebug PL_yydebug +#define PL_Iyyerrflag PL_yyerrflag +#define PL_Iyylval PL_yylval +#define PL_Iyynerrs PL_yynerrs +#define PL_Iyyval PL_yyval + +# if defined(USE_THREADS) +/* case 4 above */ + +#define PL_Sv (aTHX->TSv) +#define PL_Xpv (aTHX->TXpv) +#define PL_av_fetch_sv (aTHX->Tav_fetch_sv) +#define PL_bodytarget (aTHX->Tbodytarget) +#define PL_bostr (aTHX->Tbostr) +#define PL_chopset (aTHX->Tchopset) +#define PL_colors (aTHX->Tcolors) +#define PL_colorset (aTHX->Tcolorset) +#define PL_curcop (aTHX->Tcurcop) +#define PL_curpad (aTHX->Tcurpad) +#define PL_curpm (aTHX->Tcurpm) +#define PL_curstack (aTHX->Tcurstack) +#define PL_curstackinfo (aTHX->Tcurstackinfo) +#define PL_curstash (aTHX->Tcurstash) +#define PL_defoutgv (aTHX->Tdefoutgv) +#define PL_defstash (aTHX->Tdefstash) +#define PL_delaymagic (aTHX->Tdelaymagic) +#define PL_dirty (aTHX->Tdirty) +#define PL_dumpindent (aTHX->Tdumpindent) +#define PL_efloatbuf (aTHX->Tefloatbuf) +#define PL_efloatsize (aTHX->Tefloatsize) +#define PL_errors (aTHX->Terrors) +#define PL_extralen (aTHX->Textralen) +#define PL_firstgv (aTHX->Tfirstgv) +#define PL_formtarget (aTHX->Tformtarget) +#define PL_hv_fetch_ent_mh (aTHX->Thv_fetch_ent_mh) +#define PL_hv_fetch_sv (aTHX->Thv_fetch_sv) +#define PL_in_eval (aTHX->Tin_eval) +#define PL_last_in_gv (aTHX->Tlast_in_gv) +#define PL_lastgotoprobe (aTHX->Tlastgotoprobe) +#define PL_lastscream (aTHX->Tlastscream) +#define PL_localizing (aTHX->Tlocalizing) +#define PL_mainstack (aTHX->Tmainstack) +#define PL_markstack (aTHX->Tmarkstack) +#define PL_markstack_max (aTHX->Tmarkstack_max) +#define PL_markstack_ptr (aTHX->Tmarkstack_ptr) +#define PL_maxscream (aTHX->Tmaxscream) +#define PL_modcount (aTHX->Tmodcount) +#define PL_na (aTHX->Tna) +#define PL_nrs (aTHX->Tnrs) +#define PL_ofs (aTHX->Tofs) +#define PL_ofslen (aTHX->Tofslen) +#define PL_op (aTHX->Top) +#define PL_opsave (aTHX->Topsave) +#define PL_protect (aTHX->Tprotect) +#define PL_reg_call_cc (aTHX->Treg_call_cc) +#define PL_reg_curpm (aTHX->Treg_curpm) +#define PL_reg_eval_set (aTHX->Treg_eval_set) +#define PL_reg_flags (aTHX->Treg_flags) +#define PL_reg_ganch (aTHX->Treg_ganch) +#define PL_reg_leftiter (aTHX->Treg_leftiter) +#define PL_reg_magic (aTHX->Treg_magic) +#define PL_reg_maxiter (aTHX->Treg_maxiter) +#define PL_reg_oldcurpm (aTHX->Treg_oldcurpm) +#define PL_reg_oldpos (aTHX->Treg_oldpos) +#define PL_reg_oldsaved (aTHX->Treg_oldsaved) +#define PL_reg_oldsavedlen (aTHX->Treg_oldsavedlen) +#define PL_reg_poscache (aTHX->Treg_poscache) +#define PL_reg_poscache_size (aTHX->Treg_poscache_size) +#define PL_reg_re (aTHX->Treg_re) +#define PL_reg_start_tmp (aTHX->Treg_start_tmp) +#define PL_reg_start_tmpl (aTHX->Treg_start_tmpl) +#define PL_reg_starttry (aTHX->Treg_starttry) +#define PL_reg_sv (aTHX->Treg_sv) +#define PL_reg_whilem_seen (aTHX->Treg_whilem_seen) +#define PL_regbol (aTHX->Tregbol) +#define PL_regcc (aTHX->Tregcc) +#define PL_regcode (aTHX->Tregcode) +#define PL_regcomp_parse (aTHX->Tregcomp_parse) +#define PL_regcomp_rx (aTHX->Tregcomp_rx) +#define PL_regcompp (aTHX->Tregcompp) +#define PL_regdata (aTHX->Tregdata) +#define PL_regdummy (aTHX->Tregdummy) +#define PL_regendp (aTHX->Tregendp) +#define PL_regeol (aTHX->Tregeol) +#define PL_regexecp (aTHX->Tregexecp) +#define PL_regflags (aTHX->Tregflags) +#define PL_regfree (aTHX->Tregfree) +#define PL_regindent (aTHX->Tregindent) +#define PL_reginput (aTHX->Treginput) +#define PL_regint_start (aTHX->Tregint_start) +#define PL_regint_string (aTHX->Tregint_string) +#define PL_reginterp_cnt (aTHX->Treginterp_cnt) +#define PL_reglastparen (aTHX->Treglastparen) +#define PL_regnarrate (aTHX->Tregnarrate) +#define PL_regnaughty (aTHX->Tregnaughty) +#define PL_regnpar (aTHX->Tregnpar) +#define PL_regprecomp (aTHX->Tregprecomp) +#define PL_regprev (aTHX->Tregprev) +#define PL_regprogram (aTHX->Tregprogram) +#define PL_regsawback (aTHX->Tregsawback) +#define PL_regseen (aTHX->Tregseen) +#define PL_regsize (aTHX->Tregsize) +#define PL_regstartp (aTHX->Tregstartp) +#define PL_regtill (aTHX->Tregtill) +#define PL_regxend (aTHX->Tregxend) +#define PL_restartop (aTHX->Trestartop) +#define PL_retstack (aTHX->Tretstack) +#define PL_retstack_ix (aTHX->Tretstack_ix) +#define PL_retstack_max (aTHX->Tretstack_max) +#define PL_rs (aTHX->Trs) +#define PL_savestack (aTHX->Tsavestack) +#define PL_savestack_ix (aTHX->Tsavestack_ix) +#define PL_savestack_max (aTHX->Tsavestack_max) +#define PL_scopestack (aTHX->Tscopestack) +#define PL_scopestack_ix (aTHX->Tscopestack_ix) +#define PL_scopestack_max (aTHX->Tscopestack_max) +#define PL_screamfirst (aTHX->Tscreamfirst) +#define PL_screamnext (aTHX->Tscreamnext) +#define PL_secondgv (aTHX->Tsecondgv) +#define PL_seen_evals (aTHX->Tseen_evals) +#define PL_seen_zerolen (aTHX->Tseen_zerolen) +#define PL_sortcop (aTHX->Tsortcop) +#define PL_sortcxix (aTHX->Tsortcxix) +#define PL_sortstash (aTHX->Tsortstash) +#define PL_stack_base (aTHX->Tstack_base) +#define PL_stack_max (aTHX->Tstack_max) +#define PL_stack_sp (aTHX->Tstack_sp) +#define PL_start_env (aTHX->Tstart_env) +#define PL_statbuf (aTHX->Tstatbuf) +#define PL_statcache (aTHX->Tstatcache) +#define PL_statgv (aTHX->Tstatgv) +#define PL_statname (aTHX->Tstatname) +#define PL_tainted (aTHX->Ttainted) +#define PL_timesbuf (aTHX->Ttimesbuf) +#define PL_tmps_floor (aTHX->Ttmps_floor) +#define PL_tmps_ix (aTHX->Ttmps_ix) +#define PL_tmps_max (aTHX->Ttmps_max) +#define PL_tmps_stack (aTHX->Ttmps_stack) +#define PL_top_env (aTHX->Ttop_env) +#define PL_toptarget (aTHX->Ttoptarget) +#define PL_watchaddr (aTHX->Twatchaddr) +#define PL_watchok (aTHX->Twatchok) -#ifndef USE_THREADS +# else /* !USE_THREADS */ +/* case 1 above */ #define PL_TSv PL_Sv #define PL_TXpv PL_Xpv @@ -419,6 +1520,10 @@ #define PL_Tdefstash PL_defstash #define PL_Tdelaymagic PL_delaymagic #define PL_Tdirty PL_dirty +#define PL_Tdumpindent PL_dumpindent +#define PL_Tefloatbuf PL_efloatbuf +#define PL_Tefloatsize PL_efloatsize +#define PL_Terrors PL_errors #define PL_Textralen PL_extralen #define PL_Tfirstgv PL_firstgv #define PL_Tformtarget PL_formtarget @@ -435,15 +1540,33 @@ #define PL_Tmarkstack_ptr PL_markstack_ptr #define PL_Tmaxscream PL_maxscream #define PL_Tmodcount PL_modcount +#define PL_Tna PL_na #define PL_Tnrs PL_nrs #define PL_Tofs PL_ofs #define PL_Tofslen PL_ofslen #define PL_Top PL_op #define PL_Topsave PL_opsave +#define PL_Tprotect PL_protect +#define PL_Treg_call_cc PL_reg_call_cc +#define PL_Treg_curpm PL_reg_curpm #define PL_Treg_eval_set PL_reg_eval_set #define PL_Treg_flags PL_reg_flags +#define PL_Treg_ganch PL_reg_ganch +#define PL_Treg_leftiter PL_reg_leftiter +#define PL_Treg_magic PL_reg_magic +#define PL_Treg_maxiter PL_reg_maxiter +#define PL_Treg_oldcurpm PL_reg_oldcurpm +#define PL_Treg_oldpos PL_reg_oldpos +#define PL_Treg_oldsaved PL_reg_oldsaved +#define PL_Treg_oldsavedlen PL_reg_oldsavedlen +#define PL_Treg_poscache PL_reg_poscache +#define PL_Treg_poscache_size PL_reg_poscache_size +#define PL_Treg_re PL_reg_re #define PL_Treg_start_tmp PL_reg_start_tmp #define PL_Treg_start_tmpl PL_reg_start_tmpl +#define PL_Treg_starttry PL_reg_starttry +#define PL_Treg_sv PL_reg_sv +#define PL_Treg_whilem_seen PL_reg_whilem_seen #define PL_Tregbol PL_regbol #define PL_Tregcc PL_regcc #define PL_Tregcode PL_regcode @@ -456,8 +1579,11 @@ #define PL_Tregeol PL_regeol #define PL_Tregexecp PL_regexecp #define PL_Tregflags PL_regflags +#define PL_Tregfree PL_regfree #define PL_Tregindent PL_regindent #define PL_Treginput PL_reginput +#define PL_Tregint_start PL_regint_start +#define PL_Tregint_string PL_regint_string #define PL_Treginterp_cnt PL_reginterp_cnt #define PL_Treglastparen PL_reglastparen #define PL_Tregnarrate PL_regnarrate @@ -507,364 +1633,40 @@ #define PL_Ttmps_stack PL_tmps_stack #define PL_Ttop_env PL_top_env #define PL_Ttoptarget PL_toptarget +#define PL_Twatchaddr PL_watchaddr +#define PL_Twatchok PL_watchok -#endif /* USE_THREADS */ - -/* Hide what would have been interpreter-specific symbols? */ - -#ifdef EMBED - - -#ifndef USE_THREADS - - -#endif /* USE_THREADS */ -#endif /* EMBED */ -#endif /* MULTIPLICITY */ - -/* Now same trickey for per-thread variables */ - -#ifdef USE_THREADS - -#define PL_Sv (thr->TSv) -#define PL_Xpv (thr->TXpv) -#define PL_av_fetch_sv (thr->Tav_fetch_sv) -#define PL_bodytarget (thr->Tbodytarget) -#define PL_bostr (thr->Tbostr) -#define PL_chopset (thr->Tchopset) -#define PL_colors (thr->Tcolors) -#define PL_colorset (thr->Tcolorset) -#define PL_curcop (thr->Tcurcop) -#define PL_curpad (thr->Tcurpad) -#define PL_curpm (thr->Tcurpm) -#define PL_curstack (thr->Tcurstack) -#define PL_curstackinfo (thr->Tcurstackinfo) -#define PL_curstash (thr->Tcurstash) -#define PL_defoutgv (thr->Tdefoutgv) -#define PL_defstash (thr->Tdefstash) -#define PL_delaymagic (thr->Tdelaymagic) -#define PL_dirty (thr->Tdirty) -#define PL_extralen (thr->Textralen) -#define PL_firstgv (thr->Tfirstgv) -#define PL_formtarget (thr->Tformtarget) -#define PL_hv_fetch_ent_mh (thr->Thv_fetch_ent_mh) -#define PL_hv_fetch_sv (thr->Thv_fetch_sv) -#define PL_in_eval (thr->Tin_eval) -#define PL_last_in_gv (thr->Tlast_in_gv) -#define PL_lastgotoprobe (thr->Tlastgotoprobe) -#define PL_lastscream (thr->Tlastscream) -#define PL_localizing (thr->Tlocalizing) -#define PL_mainstack (thr->Tmainstack) -#define PL_markstack (thr->Tmarkstack) -#define PL_markstack_max (thr->Tmarkstack_max) -#define PL_markstack_ptr (thr->Tmarkstack_ptr) -#define PL_maxscream (thr->Tmaxscream) -#define PL_modcount (thr->Tmodcount) -#define PL_nrs (thr->Tnrs) -#define PL_ofs (thr->Tofs) -#define PL_ofslen (thr->Tofslen) -#define PL_op (thr->Top) -#define PL_opsave (thr->Topsave) -#define PL_reg_eval_set (thr->Treg_eval_set) -#define PL_reg_flags (thr->Treg_flags) -#define PL_reg_start_tmp (thr->Treg_start_tmp) -#define PL_reg_start_tmpl (thr->Treg_start_tmpl) -#define PL_regbol (thr->Tregbol) -#define PL_regcc (thr->Tregcc) -#define PL_regcode (thr->Tregcode) -#define PL_regcomp_parse (thr->Tregcomp_parse) -#define PL_regcomp_rx (thr->Tregcomp_rx) -#define PL_regcompp (thr->Tregcompp) -#define PL_regdata (thr->Tregdata) -#define PL_regdummy (thr->Tregdummy) -#define PL_regendp (thr->Tregendp) -#define PL_regeol (thr->Tregeol) -#define PL_regexecp (thr->Tregexecp) -#define PL_regflags (thr->Tregflags) -#define PL_regindent (thr->Tregindent) -#define PL_reginput (thr->Treginput) -#define PL_reginterp_cnt (thr->Treginterp_cnt) -#define PL_reglastparen (thr->Treglastparen) -#define PL_regnarrate (thr->Tregnarrate) -#define PL_regnaughty (thr->Tregnaughty) -#define PL_regnpar (thr->Tregnpar) -#define PL_regprecomp (thr->Tregprecomp) -#define PL_regprev (thr->Tregprev) -#define PL_regprogram (thr->Tregprogram) -#define PL_regsawback (thr->Tregsawback) -#define PL_regseen (thr->Tregseen) -#define PL_regsize (thr->Tregsize) -#define PL_regstartp (thr->Tregstartp) -#define PL_regtill (thr->Tregtill) -#define PL_regxend (thr->Tregxend) -#define PL_restartop (thr->Trestartop) -#define PL_retstack (thr->Tretstack) -#define PL_retstack_ix (thr->Tretstack_ix) -#define PL_retstack_max (thr->Tretstack_max) -#define PL_rs (thr->Trs) -#define PL_savestack (thr->Tsavestack) -#define PL_savestack_ix (thr->Tsavestack_ix) -#define PL_savestack_max (thr->Tsavestack_max) -#define PL_scopestack (thr->Tscopestack) -#define PL_scopestack_ix (thr->Tscopestack_ix) -#define PL_scopestack_max (thr->Tscopestack_max) -#define PL_screamfirst (thr->Tscreamfirst) -#define PL_screamnext (thr->Tscreamnext) -#define PL_secondgv (thr->Tsecondgv) -#define PL_seen_evals (thr->Tseen_evals) -#define PL_seen_zerolen (thr->Tseen_zerolen) -#define PL_sortcop (thr->Tsortcop) -#define PL_sortcxix (thr->Tsortcxix) -#define PL_sortstash (thr->Tsortstash) -#define PL_stack_base (thr->Tstack_base) -#define PL_stack_max (thr->Tstack_max) -#define PL_stack_sp (thr->Tstack_sp) -#define PL_start_env (thr->Tstart_env) -#define PL_statbuf (thr->Tstatbuf) -#define PL_statcache (thr->Tstatcache) -#define PL_statgv (thr->Tstatgv) -#define PL_statname (thr->Tstatname) -#define PL_tainted (thr->Ttainted) -#define PL_timesbuf (thr->Ttimesbuf) -#define PL_tmps_floor (thr->Ttmps_floor) -#define PL_tmps_ix (thr->Ttmps_ix) -#define PL_tmps_max (thr->Ttmps_max) -#define PL_tmps_stack (thr->Ttmps_stack) -#define PL_top_env (thr->Ttop_env) -#define PL_toptarget (thr->Ttoptarget) - -#endif /* USE_THREADS */ - -#ifdef PERL_GLOBAL_STRUCT +# endif /* USE_THREADS */ +# endif /* PERL_OBJECT */ +#endif /* MULTIPLICITY */ + +#if defined(PERL_GLOBAL_STRUCT) #define PL_No (PL_Vars.GNo) #define PL_Yes (PL_Vars.GYes) -#define PL_amagic_generation (PL_Vars.Gamagic_generation) -#define PL_an (PL_Vars.Gan) -#define PL_bufend (PL_Vars.Gbufend) -#define PL_bufptr (PL_Vars.Gbufptr) -#define PL_collation_ix (PL_Vars.Gcollation_ix) -#define PL_collation_name (PL_Vars.Gcollation_name) -#define PL_collation_standard (PL_Vars.Gcollation_standard) -#define PL_collxfrm_base (PL_Vars.Gcollxfrm_base) -#define PL_collxfrm_mult (PL_Vars.Gcollxfrm_mult) -#define PL_cop_seqmax (PL_Vars.Gcop_seqmax) -#define PL_cred_mutex (PL_Vars.Gcred_mutex) -#define PL_cryptseen (PL_Vars.Gcryptseen) -#define PL_cshlen (PL_Vars.Gcshlen) -#define PL_cshname (PL_Vars.Gcshname) #define PL_curinterp (PL_Vars.Gcurinterp) -#define PL_curthr (PL_Vars.Gcurthr) -#define PL_debug (PL_Vars.Gdebug) #define PL_do_undump (PL_Vars.Gdo_undump) -#define PL_egid (PL_Vars.Gegid) -#define PL_error_count (PL_Vars.Gerror_count) -#define PL_euid (PL_Vars.Geuid) -#define PL_eval_cond (PL_Vars.Geval_cond) -#define PL_eval_mutex (PL_Vars.Geval_mutex) -#define PL_eval_owner (PL_Vars.Geval_owner) -#define PL_evalseq (PL_Vars.Gevalseq) -#define PL_expect (PL_Vars.Gexpect) -#define PL_gid (PL_Vars.Ggid) -#define PL_he_root (PL_Vars.Ghe_root) #define PL_hexdigit (PL_Vars.Ghexdigit) -#define PL_hints (PL_Vars.Ghints) -#define PL_in_my (PL_Vars.Gin_my) -#define PL_in_my_stash (PL_Vars.Gin_my_stash) -#define PL_last_lop (PL_Vars.Glast_lop) -#define PL_last_lop_op (PL_Vars.Glast_lop_op) -#define PL_last_uni (PL_Vars.Glast_uni) -#define PL_lex_brackets (PL_Vars.Glex_brackets) -#define PL_lex_brackstack (PL_Vars.Glex_brackstack) -#define PL_lex_casemods (PL_Vars.Glex_casemods) -#define PL_lex_casestack (PL_Vars.Glex_casestack) -#define PL_lex_defer (PL_Vars.Glex_defer) -#define PL_lex_dojoin (PL_Vars.Glex_dojoin) -#define PL_lex_expect (PL_Vars.Glex_expect) -#define PL_lex_fakebrack (PL_Vars.Glex_fakebrack) -#define PL_lex_formbrack (PL_Vars.Glex_formbrack) -#define PL_lex_inpat (PL_Vars.Glex_inpat) -#define PL_lex_inwhat (PL_Vars.Glex_inwhat) -#define PL_lex_op (PL_Vars.Glex_op) -#define PL_lex_repl (PL_Vars.Glex_repl) -#define PL_lex_starts (PL_Vars.Glex_starts) -#define PL_lex_state (PL_Vars.Glex_state) -#define PL_lex_stuff (PL_Vars.Glex_stuff) -#define PL_linestr (PL_Vars.Glinestr) #define PL_malloc_mutex (PL_Vars.Gmalloc_mutex) -#define PL_max_intro_pending (PL_Vars.Gmax_intro_pending) -#define PL_maxo (PL_Vars.Gmaxo) -#define PL_min_intro_pending (PL_Vars.Gmin_intro_pending) -#define PL_multi_close (PL_Vars.Gmulti_close) -#define PL_multi_end (PL_Vars.Gmulti_end) -#define PL_multi_open (PL_Vars.Gmulti_open) -#define PL_multi_start (PL_Vars.Gmulti_start) -#define PL_na (PL_Vars.Gna) -#define PL_nexttoke (PL_Vars.Gnexttoke) -#define PL_nexttype (PL_Vars.Gnexttype) -#define PL_nextval (PL_Vars.Gnextval) -#define PL_nice_chunk (PL_Vars.Gnice_chunk) -#define PL_nice_chunk_size (PL_Vars.Gnice_chunk_size) -#define PL_ninterps (PL_Vars.Gninterps) -#define PL_nomemok (PL_Vars.Gnomemok) -#define PL_nthreads (PL_Vars.Gnthreads) -#define PL_nthreads_cond (PL_Vars.Gnthreads_cond) -#define PL_numeric_local (PL_Vars.Gnumeric_local) -#define PL_numeric_name (PL_Vars.Gnumeric_name) -#define PL_numeric_standard (PL_Vars.Gnumeric_standard) -#define PL_oldbufptr (PL_Vars.Goldbufptr) -#define PL_oldoldbufptr (PL_Vars.Goldoldbufptr) -#define PL_op_seqmax (PL_Vars.Gop_seqmax) -#define PL_origalen (PL_Vars.Gorigalen) -#define PL_origenviron (PL_Vars.Gorigenviron) -#define PL_osname (PL_Vars.Gosname) -#define PL_pad_reset_pending (PL_Vars.Gpad_reset_pending) -#define PL_padix (PL_Vars.Gpadix) -#define PL_padix_floor (PL_Vars.Gpadix_floor) +#define PL_op_mutex (PL_Vars.Gop_mutex) #define PL_patleave (PL_Vars.Gpatleave) -#define PL_pidstatus (PL_Vars.Gpidstatus) -#define PL_runops (PL_Vars.Grunops) -#define PL_sh_path (PL_Vars.Gsh_path) -#define PL_sighandlerp (PL_Vars.Gsighandlerp) -#define PL_specialsv_list (PL_Vars.Gspecialsv_list) -#define PL_subline (PL_Vars.Gsubline) -#define PL_subname (PL_Vars.Gsubname) -#define PL_sv_mutex (PL_Vars.Gsv_mutex) -#define PL_sv_no (PL_Vars.Gsv_no) -#define PL_sv_undef (PL_Vars.Gsv_undef) -#define PL_sv_yes (PL_Vars.Gsv_yes) -#define PL_svref_mutex (PL_Vars.Gsvref_mutex) -#define PL_thisexpr (PL_Vars.Gthisexpr) #define PL_thr_key (PL_Vars.Gthr_key) -#define PL_threads_mutex (PL_Vars.Gthreads_mutex) -#define PL_threadsv_names (PL_Vars.Gthreadsv_names) -#define PL_tokenbuf (PL_Vars.Gtokenbuf) -#define PL_uid (PL_Vars.Guid) -#define PL_xiv_arenaroot (PL_Vars.Gxiv_arenaroot) -#define PL_xiv_root (PL_Vars.Gxiv_root) -#define PL_xnv_root (PL_Vars.Gxnv_root) -#define PL_xpv_root (PL_Vars.Gxpv_root) -#define PL_xrv_root (PL_Vars.Gxrv_root) #else /* !PERL_GLOBAL_STRUCT */ #define PL_GNo PL_No #define PL_GYes PL_Yes -#define PL_Gamagic_generation PL_amagic_generation -#define PL_Gan PL_an -#define PL_Gbufend PL_bufend -#define PL_Gbufptr PL_bufptr -#define PL_Gcollation_ix PL_collation_ix -#define PL_Gcollation_name PL_collation_name -#define PL_Gcollation_standard PL_collation_standard -#define PL_Gcollxfrm_base PL_collxfrm_base -#define PL_Gcollxfrm_mult PL_collxfrm_mult -#define PL_Gcop_seqmax PL_cop_seqmax -#define PL_Gcred_mutex PL_cred_mutex -#define PL_Gcryptseen PL_cryptseen -#define PL_Gcshlen PL_cshlen -#define PL_Gcshname PL_cshname #define PL_Gcurinterp PL_curinterp -#define PL_Gcurthr PL_curthr -#define PL_Gdebug PL_debug #define PL_Gdo_undump PL_do_undump -#define PL_Gegid PL_egid -#define PL_Gerror_count PL_error_count -#define PL_Geuid PL_euid -#define PL_Geval_cond PL_eval_cond -#define PL_Geval_mutex PL_eval_mutex -#define PL_Geval_owner PL_eval_owner -#define PL_Gevalseq PL_evalseq -#define PL_Gexpect PL_expect -#define PL_Ggid PL_gid -#define PL_Ghe_root PL_he_root #define PL_Ghexdigit PL_hexdigit -#define PL_Ghints PL_hints -#define PL_Gin_my PL_in_my -#define PL_Gin_my_stash PL_in_my_stash -#define PL_Glast_lop PL_last_lop -#define PL_Glast_lop_op PL_last_lop_op -#define PL_Glast_uni PL_last_uni -#define PL_Glex_brackets PL_lex_brackets -#define PL_Glex_brackstack PL_lex_brackstack -#define PL_Glex_casemods PL_lex_casemods -#define PL_Glex_casestack PL_lex_casestack -#define PL_Glex_defer PL_lex_defer -#define PL_Glex_dojoin PL_lex_dojoin -#define PL_Glex_expect PL_lex_expect -#define PL_Glex_fakebrack PL_lex_fakebrack -#define PL_Glex_formbrack PL_lex_formbrack -#define PL_Glex_inpat PL_lex_inpat -#define PL_Glex_inwhat PL_lex_inwhat -#define PL_Glex_op PL_lex_op -#define PL_Glex_repl PL_lex_repl -#define PL_Glex_starts PL_lex_starts -#define PL_Glex_state PL_lex_state -#define PL_Glex_stuff PL_lex_stuff -#define PL_Glinestr PL_linestr #define PL_Gmalloc_mutex PL_malloc_mutex -#define PL_Gmax_intro_pending PL_max_intro_pending -#define PL_Gmaxo PL_maxo -#define PL_Gmin_intro_pending PL_min_intro_pending -#define PL_Gmulti_close PL_multi_close -#define PL_Gmulti_end PL_multi_end -#define PL_Gmulti_open PL_multi_open -#define PL_Gmulti_start PL_multi_start -#define PL_Gna PL_na -#define PL_Gnexttoke PL_nexttoke -#define PL_Gnexttype PL_nexttype -#define PL_Gnextval PL_nextval -#define PL_Gnice_chunk PL_nice_chunk -#define PL_Gnice_chunk_size PL_nice_chunk_size -#define PL_Gninterps PL_ninterps -#define PL_Gnomemok PL_nomemok -#define PL_Gnthreads PL_nthreads -#define PL_Gnthreads_cond PL_nthreads_cond -#define PL_Gnumeric_local PL_numeric_local -#define PL_Gnumeric_name PL_numeric_name -#define PL_Gnumeric_standard PL_numeric_standard -#define PL_Goldbufptr PL_oldbufptr -#define PL_Goldoldbufptr PL_oldoldbufptr -#define PL_Gop_seqmax PL_op_seqmax -#define PL_Gorigalen PL_origalen -#define PL_Gorigenviron PL_origenviron -#define PL_Gosname PL_osname -#define PL_Gpad_reset_pending PL_pad_reset_pending -#define PL_Gpadix PL_padix -#define PL_Gpadix_floor PL_padix_floor +#define PL_Gop_mutex PL_op_mutex #define PL_Gpatleave PL_patleave -#define PL_Gpidstatus PL_pidstatus -#define PL_Grunops PL_runops -#define PL_Gsh_path PL_sh_path -#define PL_Gsighandlerp PL_sighandlerp -#define PL_Gspecialsv_list PL_specialsv_list -#define PL_Gsubline PL_subline -#define PL_Gsubname PL_subname -#define PL_Gsv_mutex PL_sv_mutex -#define PL_Gsv_no PL_sv_no -#define PL_Gsv_undef PL_sv_undef -#define PL_Gsv_yes PL_sv_yes -#define PL_Gsvref_mutex PL_svref_mutex -#define PL_Gthisexpr PL_thisexpr #define PL_Gthr_key PL_thr_key -#define PL_Gthreads_mutex PL_threads_mutex -#define PL_Gthreadsv_names PL_threadsv_names -#define PL_Gtokenbuf PL_tokenbuf -#define PL_Guid PL_uid -#define PL_Gxiv_arenaroot PL_xiv_arenaroot -#define PL_Gxiv_root PL_xiv_root -#define PL_Gxnv_root PL_xnv_root -#define PL_Gxpv_root PL_xpv_root -#define PL_Gxrv_root PL_xrv_root - -#ifdef EMBED - -#endif /* EMBED */ #endif /* PERL_GLOBAL_STRUCT */ - -#ifndef MIN_PERL_DEFINE +#ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */ #define DBsingle PL_DBsingle #define DBsub PL_DBsub @@ -878,6 +1680,7 @@ #define dowarn PL_dowarn #define errgv PL_errgv #define na PL_na +#define no_modify PL_no_modify #define perl_destruct_level PL_perl_destruct_level #define perldb PL_perldb #define rsfp PL_rsfp @@ -892,4 +1695,4 @@ #define tainted PL_tainted #define tainting PL_tainting -#endif /* MIN_PERL_DEFINE */ +#endif /* PERL_POLLUTE */ diff --git a/gnu/usr.bin/perl/epoc/config.sh b/gnu/usr.bin/perl/epoc/config.sh new file mode 100644 index 00000000000..a60b7a0f085 --- /dev/null +++ b/gnu/usr.bin/perl/epoc/config.sh @@ -0,0 +1,789 @@ +#!/bin/sh +# +# This file is manually maintained. +# +# It is NOT produced by running the Configure script. +# + +# Package name : perl5 +# Source directory : . +# Configuration time: +# Configured by : Olaf Flebbe +# Target system : EPOC + +Author='' +Date='$Date' +Header='' +Id='$Id' +Locker='' +Log='$Log' +Mcc='' +RCSfile='$RCSfile' +Revision='$Revision' +Source='' +State='' +_a='.a' +_exe='.exe' +_o='.o' +afs='false' +alignbytes='8' +ansi2knr='' +aphostname='' +apirevision='' +apisubversion='' +apiversion='' +ar='arm-pe-ar' +archlib='/perl/lib/5.6.0/epoc' +archlibexp='/perl/lib/5.6.0/epoc' +archname64='' +archname='epoc' +archobjs='epoc.o epocish.o epoc_stubs.o' +awk='awk' +baserev='5.0' +bash='' +bin='' +bincompat5005='false' +binexp='' +bison='bison' +byacc='' +byteorder='1234' +c='' +castflags='0' +cat='cat' +cc='arm-pe-gcc -B/usr/local/lib/gcc-lib/arm-pe/cygnus-2.7.2-960323/ -nostdinc -D__SYMBIAN32__ -D__PSISOFT32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__EXE__ -I/usr/local/epoc/include/ -I/usr/local/epoc/include/libc -DEPOC' +cccdlflags='' +ccdlflags='' +ccflags='-Wno-ctor-dtor-privacy -mcpu-arm710 -mapcs-32 -mshort-load-bytes -msoft-float -fcheck-new -fvtable-thunks' +ccsymbols='' +cf_by='olaf' +cf_email='o.flebbe@gmx.de' +cf_time='Dec 1999' +chgrp='' +chmod='' +chown='' +clocktype='' +comm='' +compress='' +contains='grep' +cp='cp' +cpio='' +cpp='arm-pe-cpp' +cpp_stuff='42' +cppccsymbols='EPOC=1' +cppflags=' -nostdinc -D__SYMBIAN32__ -D__PSISOFT32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__EXE__ -I/usr/local/epoc/include/ -I/usr/local/epoc/include/libc' +cpplast='-' +cppminus='-' +cpprun='arm-pe-gcc -E -B/usr/local/lib/gcc-lib/arm-pe/cygnus-2.7.2-960323/' +cppstdin='arm-pe-gcc -E -B/usr/local/lib/gcc-lib/arm-pe/cygnus-2.7.2-960323/' +cppsymbols='' +crosscompile='define' +cryptlib='' +csh='csh' +d_Gconvert='sprintf((b),"%.*g",(n),(x))' +d_PRIEldbl='undef' +d_PRIFldbl='undef' +d_PRIGldbl='undef' +d_PRIX64='undef' +d_PRId64='undef' +d_PRIeldbl='undef' +d_PRIfldbl='define' +d_PRIgldbl='define' +d_PRIi64='undef' +d_PRIo64='undef' +d_PRIu64='undef' +d_PRIx64='undef' +d_access='undef' +d_accessx='undef' +d_alarm='undef' +d_archlib='define' +d_atolf='undef' +d_atoll='undef' +d_attribut='undef' +d_bcmp='define' +d_bcopy='define' +d_bincompat5005='undef' +d_bsd='undef' +d_bsdgetpgrp='undef' +d_bsdsetpgrp='undef' +d_bzero='define' +d_casti32='undef' +d_castneg='undef' +d_charvspr='undef' +d_chown='undef' +d_chroot='undef' +d_chsize='undef' +d_closedir='undef' +d_cmsghdr_s='undef' +d_const='define' +d_crypt='undef' +d_csh='undef' +d_cuserid='undef' +d_dbl_dig='undef' +d_difftime='define' +d_dirnamlen='undef' +d_dlerror='undef' +d_dlopen='undef' +d_dlsymun='undef' +d_dosuid='undef' +d_drand48proto='define' +d_dup2='undef' +d_eaccess='undef' +d_endgrent='undef' +d_endhent='undef' +d_endnent='undef' +d_endpent='undef' +d_endpwent='undef' +d_endsent='undef' +d_endspent='undef' +d_eofnblk='define' +d_eunice='undef' +d_fchmod='undef' +d_fchown='undef' +d_fcntl='undef' +d_fd_macros='undef' +d_fd_set='define' +d_fds_bits='undef' +d_fgetpos='define' +d_flexfnam='define' +d_flock='undef' +d_fork='undef' +d_fpathconf='undef' +d_fpos64_t='undef' +d_fseeko='undef' +d_fsetpos='define' +d_fstatfs='define' +d_fstatvfs='undef' +d_ftello='undef' +d_ftime='undef' +d_getfsstat='undef' +d_getgrent='undef' +d_getgrps='undef' +d_gethbyaddr='define' +d_gethbyname='define' +d_gethent='undef' +d_gethname='undef' +d_gethostprotos='define' +d_getlogin='undef' +d_getmntent='undef' +d_getnbyaddr='undef' +d_getnbyname='undef' +d_getnent='undef' +d_getnetprotos='define' +d_getpbyname='define' +d_getpbynumber='define' +d_getpent='undef' +d_getpgid='undef' +d_getpgrp2='undef' +d_getpgrp='undef' +d_getppid='undef' +d_getprior='undef' +d_getprotoprotos='define' +d_getpwent='undef' +d_getsbyname='undef' +d_getsbyport='undef' +d_getsent='undef' +d_getservprotos='define' +d_getspent='undef' +d_getspnam='undef' +d_gettimeod='define' +d_gnulibc='undef' +d_grpasswd='undef' +d_hasmntopt='undef' +d_htonl='define' +d_iconv='undef' +d_index='undef' +d_inetaton='define' +d_int64t='undef' +d_iovec_s='undef' +d_isascii='define' +d_killpg='undef' +d_lchown='undef' +d_ldbl_dig='undef' +d_link='undef' +d_llseek='undef' +d_locconv='undef' +d_lockf='undef' +d_longdbl='undef' +d_longlong='define' +d_lseekproto='define' +d_lstat='undef' +d_madvise='undef' +d_mblen='undef' +d_mbstowcs='undef' +d_mbtowc='undef' +d_memchr='define' +d_memcmp='define' +d_memcpy='define' +d_memmove='define' +d_memset='define' +d_mkdir='define' +d_mkfifo='undef' +d_mktime='define' +d_mmap='undef' +d_mprotect='undef' +d_msg='undef' +d_msg_ctrunc='undef' +d_msg_dontroute='undef' +d_msg_oob='undef' +d_msg_peek='undef' +d_msg_proxy='undef' +d_msgctl='undef' +d_msgget='undef' +d_msghdr_s='undef' +d_msgrcv='undef' +d_msgsnd='undef' +d_msync='undef' +d_munmap='undef' +d_mymalloc='undef' +d_nice='undef' +d_off64_t='undef' +d_old_pthread_create_joinable='undef' +d_oldpthreads='undef' +d_oldsock='undef' +d_open3='define' +d_pathconf='undef' +d_pause='undef' +d_phostname='undef' +d_pipe='undef' +d_poll='undef' +d_portable='undef' +d_pthread_yield='undef' +d_pwage='undef' +d_pwchange='undef' +d_pwclass='undef' +d_pwcomment='undef' +d_pwexpire='undef' +d_pwgecos='undef' +d_pwpasswd='undef' +d_pwquota='undef' +d_qgcvt='undef' +d_readdir='define' +d_readlink='undef' +d_readv='undef' +d_recvmsg='undef' +d_rename='define' +d_rewinddir='define' +d_rmdir='define' +d_safebcpy='undef' +d_safemcpy='undef' +d_sanemcmp='define' +d_sched_yield='undef' +d_scm_rights='undef' +d_seekdir='define' +d_select='undef' +d_sem='undef' +d_semctl='undef' +d_semctl_semid_ds='define' +d_semctl_semun='define' +d_semget='undef' +d_semop='undef' +d_sendmsg='undef' +d_setegid='undef' +d_seteuid='undef' +d_setgrent='undef' +d_setgrps='undef' +d_sethent='undef' +d_setlinebuf='undef' +d_setlocale='undef' +d_setnent='undef' +d_setpent='undef' +d_setpgid='undef' +d_setpgrp2='undef' +d_setpgrp='undef' +d_setprior='undef' +d_setpwent='undef' +d_setregid='undef' +d_setresgid='undef' +d_setresuid='undef' +d_setreuid='undef' +d_setrgid='undef' +d_setruid='undef' +d_setsent='undef' +d_setsid='undef' +d_setspent='undef' +d_setvbuf='undef' +d_sfio='undef' +d_shm='undef' +d_shmat='undef' +d_shmatprototype='undef' +d_shmctl='undef' +d_shmdt='undef' +d_shmget='undef' +d_sigaction='undef' +d_sigsetjmp='undef' +d_socket='define' +d_sockpair='undef' +d_statblks='define' +d_statfs='undef' +d_statfsflags='define' +d_statvfs='undef' +d_stdio_cnt_lval='define' +d_stdio_ptr_lval='define' +d_stdio_stream_array='undef' +d_stdiobase='undef' +d_stdstdio='undef' +d_strchr='define' +d_strcoll='define' +d_strctcpy='define' +d_strerrm='strerror(e)' +d_strerror='define' +d_strtod='define' +d_strtol='define' +d_strtoul='define' +d_strtoull='undef' +d_strxfrm='define' +d_suidsafe='undef' +d_symlink='undef' +d_syscall='undef' +d_sysconf='define' +d_sysernlst='undef' +d_syserrlst='undef' +d_system='define' +d_tcgetpgrp='undef' +d_tcsetpgrp='undef' +d_telldir='define' +d_telldirproto='define' +d_time='undef' +d_times='undef' +d_truncate='undef' +d_tzname='undef' +d_umask='undef' +d_uname='undef' +d_union_semun='undef' +d_vendorlib='undef' +d_vfork='undef' +d_void_closedir='undef' +d_voidsig='undef' +d_voidtty='undef' +d_volatile='define' +d_vprintf='define' +d_wait4='undef' +d_waitpid='undef' +d_wcstombs='undef' +d_wctomb='undef' +d_writev='undef' +d_xenix='undef' +date='date' +db_hashtype='undef' +db_prefixtype='undef' +defvoidused='15' +direntrytype='struct dirent' +dlext='none' +dlsrc='dl_none.xs' +doublesize='8' +drand01='(rand()/(double)(1U<perl.pkg"; + +print OUT "#{\"perl$VERSION\"},(0x100051d8),$PATCH,$EPOC_VERSION,0\n"; + +print OUT "\"$CROSSREPLACEPATH\\perlmain.exe\"-\"!:\\perl.exe\"\n"; + +find(\&filefound, cwd.'/lib'); +print OUT "@\"G:\\lib\\stdlib.sis\",(0x0100002c3)\n" + + diff --git a/gnu/usr.bin/perl/epoc/epoc.c b/gnu/usr.bin/perl/epoc/epoc.c new file mode 100644 index 00000000000..498036dbc04 --- /dev/null +++ b/gnu/usr.bin/perl/epoc/epoc.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) 1999 Olaf Flebbe o.flebbe@gmx.de + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + +#include +#include +#include +#include + +void +Perl_epoc_init(int *argcp, char ***argvp) { + int i; + int truecount=0; + char **lastcp = (*argvp); + char *ptr; + for (i=0; i< *argcp; i++) { + if ((*argvp)[i]) { + if (*((*argvp)[i]) == '<') { + if (strlen((*argvp)[i]) > 1) { + ptr =((*argvp)[i])+1; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "r", stdin); + } else if (*((*argvp)[i]) == '>') { + if (strlen((*argvp)[i]) > 1) { + ptr =((*argvp)[i])+1; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "w", stdout); + } else if ((*((*argvp)[i]) == '2') && (*(((*argvp)[i])+1) == '>')) { + if (strcmp( (*argvp)[i], "2>&1") == 0) { + dup2( fileno( stdout), fileno( stderr)); + } else { + if (strlen((*argvp)[i]) > 2) { + ptr =((*argvp)[i])+2; + } else { + i++; + ptr = ((*argvp)[i]); + } + freopen( ptr, "w", stderr); + } + } else { + *lastcp++ = (*argvp)[i]; + truecount++; + } + } + } + *argcp=truecount; + + +} + +#ifdef __MARM__ +/* Symbian forgot to include __fixunsdfi into the MARM euser.lib */ +/* This is from libgcc2.c , gcc-2.7.2.3 */ + +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); + +typedef float SFtype __attribute__ ((mode (SF))); +typedef float DFtype __attribute__ ((mode (DF))); + + + +extern DItype __fixunssfdi (SFtype a); +extern DItype __fixunsdfdi (DFtype a); + + +USItype +__fixunsdfsi (a) + DFtype a; +{ + if (a >= - (DFtype) (- 2147483647L -1) ) + return (SItype) (a + (- 2147483647L -1) ) - (- 2147483647L -1) ; + return (SItype) a; +} + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +int +do_aspawn( pTHX_ SV *really,SV **mark,SV **sp) { + return do_spawn( really, mark, sp); +} + +int +do_spawn (pTHX_ SV *really,SV **mark,SV **sp) +{ + dTHR; + int rc; + char **a,*cmd,**ptr, *cmdline, **argv, *p2; + STRLEN n_a; + size_t len = 0; + + if (sp<=mark) + return -1; + + a=argv=ptr=(char**) malloc ((sp-mark+3)*sizeof (char*)); + + while (++mark <= sp) { + if (*mark) + *a = SvPVx(*mark, n_a); + else + *a = ""; + len += strlen( *a) + 1; + a++; + } + *a = Nullch; + + if (!(really && *(cmd = SvPV(really, n_a)))) { + cmd = argv[0]; + argv++; + } + + cmdline = (char * ) malloc( len + 1); + cmdline[ 0] = '\0'; + while (*argv != NULL) { + strcat( cmdline, *argv++); + strcat( cmdline, " "); + } + + for (p2=cmd; *p2 != '\0'; p2++) { + /* Change / to \ */ + if ( *p2 == '/') + *p2 = '\\'; + } + rc = epoc_spawn( cmd, cmdline); + free( ptr); + free( cmdline); + + return rc; +} + + +#endif diff --git a/gnu/usr.bin/perl/epoc/epoc_stubs.c b/gnu/usr.bin/perl/epoc/epoc_stubs.c new file mode 100644 index 00000000000..b11da400d6b --- /dev/null +++ b/gnu/usr.bin/perl/epoc/epoc_stubs.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 1999 Olaf Flebbe o.flebbe@gmx.de + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + +#include + +char *environ = 0; + +int getgid() {return 0;} +int getegid() {return 0;} +int geteuid() {return 0;} +int getuid() {return 0;} +int setgid() {return -1;} +int setuid() {return -1;} + + +int Perl_my_popen( int a, int b) { + return NULL; +} +int Perl_my_pclose( int a) { + return NULL; +} + +int kill() {return -1;} +signal() { } + +int execv() { return -1;} +int execvp() { return -1;} + +void Perl_do_exec() {} + +/*------------------------------------------------------------------*/ +/* Two dummy functions implement getproto* */ +/*------------------------------------------------------------------*/ +#include +#include +#include + + +static struct protoent protos[2] = { + {"tcp", NULL, IPPROTO_TCP} , + {"udp", NULL, IPPROTO_UDP}}; + +struct protoent *getprotobyname (const char *st) { + + if (!strcmp( st, "tcp")) { + return &protos[0]; + } + if (!strcmp( st, "udp")) { + return &protos[1]; + } + return NULL; +} + +struct protoent *getprotobynumber ( int i) { + if (i == IPPROTO_TCP) { + return &protos[0]; + } + if (i == IPPROTO_UDP) { + return &protos[1]; + } + return NULL; +} + + diff --git a/gnu/usr.bin/perl/epoc/epocish.c b/gnu/usr.bin/perl/epoc/epocish.c new file mode 100644 index 00000000000..134eaef0e00 --- /dev/null +++ b/gnu/usr.bin/perl/epoc/epocish.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 1999 Olaf Flebbe o.flebbe@gmx.de + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + +/* This is indeed C++ Code !! */ + +#include + +extern "C" { + +epoc_spawn( char *cmd, char *cmdline) { + RProcess p; + TRequestStatus status; + TInt rc; + + rc = p.Create( _L( cmd), _L( cmdline)); + if (rc != KErrNone) + return -1; + + p.Resume(); + + p.Logon( status); + User::WaitForRequest( status); + if (status!=KErrNone) { + return -1; + } + return 0; +} + +} diff --git a/gnu/usr.bin/perl/epoc/epocish.h b/gnu/usr.bin/perl/epoc/epocish.h new file mode 100644 index 00000000000..f4be0ff677b --- /dev/null +++ b/gnu/usr.bin/perl/epoc/epocish.h @@ -0,0 +1,135 @@ +/* + * The following symbols are defined if your operating system supports + * functions by that name. All Unixes I know of support them, thus they + * are not checked by the configuration script, but are directly defined + * here. + */ + +/* HAS_IOCTL: + * This symbol, if defined, indicates that the ioctl() routine is + * available to set I/O characteristics + */ +#define HAS_IOCTL / **/ + +/* HAS_UTIME: + * This symbol, if defined, indicates that the routine utime() is + * available to update the access and modification times of files. + */ +/* #define HAS_UTIME / **/ + +/* HAS_GROUP + * This symbol, if defined, indicates that the getgrnam() and + * getgrgid() routines are available to get group entries. + * The getgrent() has a separate definition, HAS_GETGRENT. + */ +/* #define HAS_GROUP / **/ + +/* HAS_PASSWD + * This symbol, if defined, indicates that the getpwnam() and + * getpwuid() routines are available to get password entries. + * The getpwent() has a separate definition, HAS_GETPWENT. + */ +/* #define HAS_PASSWD / **/ + +/* #define HAS_KILL */ +#define HAS_WAIT + +/* USEMYBINMODE + * This symbol, if defined, indicates that the program should + * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure + * that a file is in "binary" mode -- that is, that no translation + * of bytes occurs on read or write operations. + */ +#undef USEMYBINMODE + +/* Stat_t: + * This symbol holds the type used to declare buffers for information + * returned by stat(). It's usually just struct stat. It may be necessary + * to include and to get any typedef'ed + * information. + */ +#define Stat_t struct stat + +/* USE_STAT_RDEV: + * This symbol is defined if this system has a stat structure declaring + * st_rdev + */ +#define USE_STAT_RDEV / **/ + +/* ACME_MESS: + * This symbol, if defined, indicates that error messages should be + * should be generated in a format that allows the use of the Acme + * GUI/editor's autofind feature. + */ +#undef ACME_MESS /**/ + +/* UNLINK_ALL_VERSIONS: + * This symbol, if defined, indicates that the program should arrange + * to remove all versions of a file if unlink() is called. This is + * probably only relevant for VMS. + */ +/* #define UNLINK_ALL_VERSIONS / **/ + +/* VMS: + * This symbol, if defined, indicates that the program is running under + * VMS. It is currently automatically set by cpps running under VMS, + * and is included here for completeness only. + */ +/* #define VMS / **/ + +/* ALTERNATE_SHEBANG: + * This symbol, if defined, contains a "magic" string which may be used + * as the first line of a Perl program designed to be executed directly + * by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG + * begins with a character other then #, then Perl will only treat + * it as a command line if if finds the string "perl" in the first + * word; otherwise it's treated as the first line of code in the script. + * (IOW, Perl won't hand off to another interpreter via an alternate + * shebang sequence that might be legal Perl code.) + */ +/* #define ALTERNATE_SHEBANG "#!" / **/ + + +#define ABORT() abort(); + +/* + * fwrite1() should be a routine with the same calling sequence as fwrite(), + * but which outputs all of the bytes requested as a single stream (unlike + * fwrite() itself, which on some systems outputs several distinct records + * if the number_of_items parameter is >1). + */ +#define fwrite1 fwrite + +#define Stat(fname,bufptr) stat((fname),(bufptr)) +#define Fstat(fd,bufptr) fstat((fd),(bufptr)) +#define Fflush(fp) fflush(fp) +#define Mkdir(path,mode) mkdir((path),(mode)) + +/* these should be set in a hint file, not here */ +#ifndef PERL_SYS_INIT +# define PERL_SYS_INIT(c,v) Perl_epoc_init(c,v); MALLOC_INIT +#endif + +#ifndef PERL_SYS_TERM +#define PERL_SYS_TERM() MALLOC_TERM +#endif + +#define BIT_BUCKET "NUL:" + +#define dXSUB_SYS + +/* getsockname returns the size of struct sockaddr_in *without* padding */ +#define BOGUS_GETNAME_RETURN 8 + +/* Yes, size_t is size_t */ +#define Sock_size_t size_t + +/* + read() on a socket blocks until buf is filled completly, + recv() returns each massage +*/ +#define PERL_SOCK_SYSREAD_IS_RECV + +/* No /dev/random available*/ + +#define PERL_NO_DEV_RANDOM diff --git a/gnu/usr.bin/perl/epoc/link.pl b/gnu/usr.bin/perl/epoc/link.pl new file mode 100644 index 00000000000..9da8a356cae --- /dev/null +++ b/gnu/usr.bin/perl/epoc/link.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl -w + +$epoc="/usr/local/epoc"; +@objs=@ARGV; +$basname=$objs[0]; +$basname =~ s/.o//; +$baspe = $basname . "pe"; + + +system("arm-pe-ld -s -e _E32Startup --base-file $basname.bas " . + "-o $baspe.exe $epoc/lib/eexe.o @objs " . + "$epoc/lib/ecrt0.o $epoc/lib/estlib.lib $epoc/lib/euser.lib"); + +system("arm-pe-dlltool --as=arm-pe-as --output-exp $basname.exp " . + "--base-file $basname.bas $epoc/lib/eexe.o @objs " . + "$epoc/lib/ecrt0.o $epoc/lib/estlib.lib $epoc/lib/euser.lib"); + +system("arm-pe-ld -s -e _E32Startup -o $basname.exe $basname.exp " . + "-o $baspe.exe $epoc/lib/eexe.o @objs " . + "$epoc/lib/ecrt0.o $epoc/lib/estlib.lib $epoc/lib/euser.lib"); + +system( "wine \"$epoc/bin/petran.exe $baspe.exe $basname.exe " . + "-nocall -heap 0x00000400 0x00400000 -stack 0x0000c000 " . + "-uid1 0x1000007a -uid2 0x100051d8 -uid3 0x00000000 \" "); + diff --git a/gnu/usr.bin/perl/ext/B/B.pm b/gnu/usr.bin/perl/ext/B/B.pm index 75dcfb3b74d..4512d916e61 100644 --- a/gnu/usr.bin/perl/ext/B/B.pm +++ b/gnu/usr.bin/perl/ext/B/B.pm @@ -6,15 +6,15 @@ # License or the Artistic License, as specified in the README file. # package B; -require DynaLoader; +use XSLoader (); require Exporter; -@ISA = qw(Exporter DynaLoader); -@EXPORT_OK = qw(byteload_fh byteload_string minus_c ppname +@ISA = qw(Exporter); +@EXPORT_OK = qw(minus_c ppname class peekop cast_I32 cstring cchar hash threadsv_names - main_root main_start main_cv svref_2object + main_root main_start main_cv svref_2object opnumber amagic_generation walkoptree walkoptree_slow walkoptree_exec walksymtable parents comppadlist sv_undef compile_stats timing_info init_av); - +sub OPf_KIDS (); use strict; @B::SV::ISA = 'B::OBJECT'; @B::NULL::ISA = 'B::SV'; @@ -38,10 +38,9 @@ use strict; @B::UNOP::ISA = 'B::OP'; @B::BINOP::ISA = 'B::UNOP'; @B::LOGOP::ISA = 'B::UNOP'; -@B::CONDOP::ISA = 'B::UNOP'; @B::LISTOP::ISA = 'B::BINOP'; @B::SVOP::ISA = 'B::OP'; -@B::GVOP::ISA = 'B::OP'; +@B::PADOP::ISA = 'B::OP'; @B::PVOP::ISA = 'B::OP'; @B::CVOP::ISA = 'B::OP'; @B::LOOP::ISA = 'B::LISTOP'; @@ -65,10 +64,6 @@ sub debug { walkoptree_debug($value); } -# sub OPf_KIDS; -# add to .xs for perl5.002 -sub OPf_KIDS () { 4 } - sub class { my $obj = shift; my $name = ref $obj; @@ -81,7 +76,7 @@ sub parents { \@parents } # For debugging sub peekop { my $op = shift; - return sprintf("%s (0x%x) %s", class($op), $$op, $op->ppaddr); + return sprintf("%s (0x%x) %s", class($op), $$op, $op->name); } sub walkoptree_slow { @@ -112,6 +107,11 @@ sub timing_info { } my %symtable; + +sub clearsym { + %symtable = (); +} + sub savesym { my ($obj, $value) = @_; # warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug @@ -135,37 +135,26 @@ sub walkoptree_exec { } savesym($op, sprintf("%s (0x%lx)", class($op), $$op)); $op->$method($level); - $ppname = $op->ppaddr; - if ($ppname =~ /^pp_(or|and|mapwhile|grepwhile|entertry)$/) { + $ppname = $op->name; + if ($ppname =~ + /^(or|and|mapwhile|grepwhile|entertry|range|cond_expr)$/) + { print $prefix, uc($1), " => {\n"; walkoptree_exec($op->other, $method, $level + 1); print $prefix, "}\n"; - } elsif ($ppname eq "pp_match" || $ppname eq "pp_subst") { + } elsif ($ppname eq "match" || $ppname eq "subst") { my $pmreplstart = $op->pmreplstart; if ($$pmreplstart) { print $prefix, "PMREPLSTART => {\n"; walkoptree_exec($pmreplstart, $method, $level + 1); print $prefix, "}\n"; } - } elsif ($ppname eq "pp_substcont") { + } elsif ($ppname eq "substcont") { print $prefix, "SUBSTCONT => {\n"; walkoptree_exec($op->other->pmreplstart, $method, $level + 1); print $prefix, "}\n"; $op = $op->other; - } elsif ($ppname eq "pp_cond_expr") { - # pp_cond_expr never returns op_next - print $prefix, "TRUE => {\n"; - walkoptree_exec($op->true, $method, $level + 1); - print $prefix, "}\n"; - $op = $op->false; - redo; - } elsif ($ppname eq "pp_range") { - print $prefix, "TRUE => {\n"; - walkoptree_exec($op->true, $method, $level + 1); - print $prefix, "}\n", $prefix, "FALSE => {\n"; - walkoptree_exec($op->false, $method, $level + 1); - print $prefix, "}\n"; - } elsif ($ppname eq "pp_enterloop") { + } elsif ($ppname eq "enterloop") { print $prefix, "REDO => {\n"; walkoptree_exec($op->redoop, $method, $level + 1); print $prefix, "}\n", $prefix, "NEXT => {\n"; @@ -173,7 +162,7 @@ sub walkoptree_exec { print $prefix, "}\n", $prefix, "LAST => {\n"; walkoptree_exec($op->lastop, $method, $level + 1); print $prefix, "}\n"; - } elsif ($ppname eq "pp_subst") { + } elsif ($ppname eq "subst") { my $replstart = $op->pmreplstart; if ($$replstart) { print $prefix, "SUBST => {\n"; @@ -187,9 +176,12 @@ sub walkoptree_exec { sub walksymtable { my ($symref, $method, $recurse, $prefix) = @_; my $sym; + my $ref; no strict 'vars'; local(*glob); - while (($sym, *glob) = each %$symref) { + $prefix = '' unless defined $prefix; + while (($sym, $ref) = each %$symref) { + *glob = "*main::".$prefix.$sym; if ($sym =~ /::$/) { $sym = $prefix . $sym; if ($sym ne "main::" && &$recurse($sym)) { @@ -267,7 +259,7 @@ sub walksymtable { } } -bootstrap B; +XSLoader::load 'B'; 1; @@ -428,6 +420,10 @@ C (corresponding to the C function C). =over 4 +=item is_empty + +This method returns TRUE if the GP field of the GV is NULL. + =item NAME =item STASH @@ -450,6 +446,8 @@ C (corresponding to the C function C). =item LINE +=item FILE + =item FILEGV =item GvREFCNT @@ -518,7 +516,7 @@ C (corresponding to the C function C). =item GV -=item FILEGV +=item FILE =item DEPTH @@ -556,8 +554,8 @@ C (corresponding to the C function C). =head2 OP-RELATED CLASSES -B::OP, B::UNOP, B::BINOP, B::LOGOP, B::CONDOP, B::LISTOP, B::PMOP, -B::SVOP, B::GVOP, B::PVOP, B::CVOP, B::LOOP, B::COP. +B::OP, B::UNOP, B::BINOP, B::LOGOP, B::LISTOP, B::PMOP, +B::SVOP, B::PADOP, B::PVOP, B::CVOP, B::LOOP, B::COP. These classes correspond in the obvious way to the underlying C structures of similar names. The inheritance hierarchy mimics the underlying C "inheritance". Access @@ -572,9 +570,14 @@ leading "class indication" prefix removed (op_). =item sibling +=item name + +This returns the op name as a string (e.g. "add", "rv2av"). + =item ppaddr -This returns the function name as a string (e.g. pp_add, pp_rv2av). +This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]", +"PL_ppaddr[OP_RV2AV]"). =item desc @@ -617,16 +620,6 @@ This returns the op description from the global C PL_op_desc array =back -=head2 B::CONDOP METHODS - -=over 4 - -=item true - -=item false - -=back - =head2 B::LISTOP METHOD =over 4 @@ -661,13 +654,15 @@ This returns the op description from the global C PL_op_desc array =item sv +=item gv + =back -=head2 B::GVOP METHOD +=head2 B::PADOP METHOD =over 4 -=item gv +=item padix =back @@ -699,7 +694,7 @@ This returns the op description from the global C PL_op_desc array =item stash -=item filegv +=item file =item cop_seq @@ -751,6 +746,10 @@ Returns the SV object corresponding to the C variable C. Returns the SV object corresponding to the C variable C. +=item amagic_generation + +Returns the SV object corresponding to the C variable C. + =item walkoptree(OP, METHOD) Does a tree-walk of the syntax tree based at OP and calls METHOD on @@ -817,11 +816,6 @@ preceding the first "::". This is used to turn "B::UNOP" into In a perl compiled for threads, this returns a list of the special per-thread threadsv variables. -=item byteload_fh(FILEHANDLE) - -Load the contents of FILEHANDLE as bytecode. See documentation for -the B module in F for how to generate bytecode. - =back =head1 AUTHOR diff --git a/gnu/usr.bin/perl/ext/B/B.xs b/gnu/usr.bin/perl/ext/B/B.xs index 6610ae8d523..9e2985582a1 100644 --- a/gnu/usr.bin/perl/ext/B/B.xs +++ b/gnu/usr.bin/perl/ext/B/B.xs @@ -7,18 +7,18 @@ * */ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" -#include "INTERN.h" #ifdef PERL_OBJECT -#undef op_name -#undef opargs -#undef op_desc -#define op_name (pPerl->Perl_get_op_names()) -#define opargs (pPerl->Perl_get_opargs()) -#define op_desc (pPerl->Perl_get_op_descs()) +#undef PL_op_name +#undef PL_opargs +#undef PL_op_desc +#define PL_op_name (get_op_names()) +#define PL_opargs (get_opargs()) +#define PL_op_desc (get_op_descs()) #endif #ifdef PerlIO @@ -53,15 +53,14 @@ typedef enum { OPc_UNOP, /* 2 */ OPc_BINOP, /* 3 */ OPc_LOGOP, /* 4 */ - OPc_CONDOP, /* 5 */ - OPc_LISTOP, /* 6 */ - OPc_PMOP, /* 7 */ - OPc_SVOP, /* 8 */ - OPc_GVOP, /* 9 */ - OPc_PVOP, /* 10 */ - OPc_CVOP, /* 11 */ - OPc_LOOP, /* 12 */ - OPc_COP /* 13 */ + OPc_LISTOP, /* 5 */ + OPc_PMOP, /* 6 */ + OPc_SVOP, /* 7 */ + OPc_PADOP, /* 8 */ + OPc_PVOP, /* 9 */ + OPc_CVOP, /* 10 */ + OPc_LOOP, /* 11 */ + OPc_COP /* 12 */ } opclass; static char *opclassnames[] = { @@ -70,11 +69,10 @@ static char *opclassnames[] = { "B::UNOP", "B::BINOP", "B::LOGOP", - "B::CONDOP", "B::LISTOP", "B::PMOP", "B::SVOP", - "B::GVOP", + "B::PADOP", "B::PVOP", "B::CVOP", "B::LOOP", @@ -83,8 +81,10 @@ static char *opclassnames[] = { static int walkoptree_debug = 0; /* Flag for walkoptree debug hook */ +static SV *specialsv_list[4]; + static opclass -cc_opclass(OP *o) +cc_opclass(pTHX_ OP *o) { if (!o) return OPc_NULL; @@ -95,7 +95,12 @@ cc_opclass(OP *o) if (o->op_type == OP_SASSIGN) return ((o->op_private & OPpASSIGN_BACKWARDS) ? OPc_UNOP : OPc_BINOP); - switch (opargs[o->op_type] & OA_CLASS_MASK) { +#ifdef USE_ITHREADS + if (o->op_type == OP_GV || o->op_type == OP_GVSV || o->op_type == OP_AELEMFAST) + return OPc_PADOP; +#endif + + switch (PL_opargs[o->op_type] & OA_CLASS_MASK) { case OA_BASEOP: return OPc_BASEOP; @@ -108,9 +113,6 @@ cc_opclass(OP *o) case OA_LOGOP: return OPc_LOGOP; - case OA_CONDOP: - return OPc_CONDOP; - case OA_LISTOP: return OPc_LISTOP; @@ -120,11 +122,19 @@ cc_opclass(OP *o) case OA_SVOP: return OPc_SVOP; - case OA_GVOP: - return OPc_GVOP; + case OA_PADOP: + return OPc_PADOP; - case OA_PVOP: - return OPc_PVOP; + case OA_PVOP_OR_SVOP: + /* + * Character translations (tr///) are usually a PVOP, keeping a + * pointer to a table of shorts used to look up translations. + * Under utf8, however, a simple table isn't practical; instead, + * the OP is an SVOP, and the SV is a reference to a swash + * (i.e., an RV pointing to an HV). + */ + return (o->op_private & (OPpTRANS_TO_UTF|OPpTRANS_FROM_UTF)) + ? OPc_SVOP : OPc_PVOP; case OA_LOOP: return OPc_LOOP; @@ -150,11 +160,14 @@ cc_opclass(OP *o) * return OPc_UNOP so that walkoptree can find our children. If * OPf_KIDS is not set then we check OPf_REF. Without OPf_REF set * (no argument to the operator) it's an OP; with OPf_REF set it's - * a GVOP (and op_gv is the GV for the filehandle argument). + * an SVOP (and op_sv is the GV for the filehandle argument). */ return ((o->op_flags & OPf_KIDS) ? OPc_UNOP : - (o->op_flags & OPf_REF) ? OPc_GVOP : OPc_BASEOP); - +#ifdef USE_ITHREADS + (o->op_flags & OPf_REF) ? OPc_PADOP : OPc_BASEOP); +#else + (o->op_flags & OPf_REF) ? OPc_SVOP : OPc_BASEOP); +#endif case OA_LOOPEXOP: /* * next, last, redo, dump and goto use OPf_SPECIAL to indicate that a @@ -173,47 +186,47 @@ cc_opclass(OP *o) return OPc_PVOP; } warn("can't determine class of operator %s, assuming BASEOP\n", - op_name[o->op_type]); + PL_op_name[o->op_type]); return OPc_BASEOP; } static char * -cc_opclassname(OP *o) +cc_opclassname(pTHX_ OP *o) { - return opclassnames[cc_opclass(o)]; + return opclassnames[cc_opclass(aTHX_ o)]; } static SV * -make_sv_object(SV *arg, SV *sv) +make_sv_object(pTHX_ SV *arg, SV *sv) { char *type = 0; IV iv; - for (iv = 0; iv < sizeof(PL_specialsv_list)/sizeof(SV*); iv++) { - if (sv == PL_specialsv_list[iv]) { + for (iv = 0; iv < sizeof(specialsv_list)/sizeof(SV*); iv++) { + if (sv == specialsv_list[iv]) { type = "B::SPECIAL"; break; } } if (!type) { type = svclassnames[SvTYPE(sv)]; - iv = (IV)sv; + iv = PTR2IV(sv); } sv_setiv(newSVrv(arg, type), iv); return arg; } static SV * -make_mg_object(SV *arg, MAGIC *mg) +make_mg_object(pTHX_ SV *arg, MAGIC *mg) { - sv_setiv(newSVrv(arg, "B::MAGIC"), (IV)mg); + sv_setiv(newSVrv(arg, "B::MAGIC"), PTR2IV(mg)); return arg; } static SV * -cstring(SV *sv) +cstring(pTHX_ SV *sv) { - SV *sstr = newSVpv("", 0); + SV *sstr = newSVpvn("", 0); STRLEN len; char *s; @@ -264,9 +277,9 @@ cstring(SV *sv) } static SV * -cchar(SV *sv) +cchar(pTHX_ SV *sv) { - SV *sstr = newSVpv("'", 0); + SV *sstr = newSVpvn("'", 1); STRLEN n_a; char *s = SvPV(sv, n_a); @@ -303,76 +316,8 @@ cchar(SV *sv) return sstr; } -#ifdef INDIRECT_BGET_MACROS -void freadpv(U32 len, void *data) -{ - New(666, pv.xpv_pv, len, char); - fread(pv.xpv_pv, 1, len, (FILE*)data); - pv.xpv_len = len; - pv.xpv_cur = len - 1; -} - -void byteload_fh(InputStream fp) -{ - struct bytestream bs; - bs.data = fp; - bs.fgetc = (int(*) _((void*)))fgetc; - bs.fread = (int(*) _((char*,size_t,size_t,void*)))fread; - bs.freadpv = freadpv; - byterun(bs); -} - -static int fgetc_fromstring(void *data) -{ - char **strp = (char **)data; - return *(*strp)++; -} - -static int fread_fromstring(char *argp, size_t elemsize, size_t nelem, - void *data) -{ - char **strp = (char **)data; - size_t len = elemsize * nelem; - - memcpy(argp, *strp, len); - *strp += len; - return (int)len; -} - -static void freadpv_fromstring(U32 len, void *data) -{ - char **strp = (char **)data; - - New(666, pv.xpv_pv, len, char); - memcpy(pv.xpv_pv, *strp, len); - pv.xpv_len = len; - pv.xpv_cur = len - 1; - *strp += len; -} - -void byteload_string(char *str) -{ - struct bytestream bs; - bs.data = &str; - bs.fgetc = fgetc_fromstring; - bs.fread = fread_fromstring; - bs.freadpv = freadpv_fromstring; - byterun(bs); -} -#else -void byteload_fh(InputStream fp) -{ - byterun(fp); -} - -void byteload_string(char *str) -{ - croak("Must compile with -DINDIRECT_BGET_MACROS for byteload_string"); -} -#endif /* INDIRECT_BGET_MACROS */ - void -walkoptree(SV *opsv, char *method) +walkoptree(pTHX_ SV *opsv, char *method) { dSP; OP *o; @@ -380,7 +325,7 @@ walkoptree(SV *opsv, char *method) if (!SvROK(opsv)) croak("opsv is not a reference"); opsv = sv_mortalcopy(opsv); - o = (OP*)SvIV((SV*)SvRV(opsv)); + o = INT2PTR(OP*,SvIV((SV*)SvRV(opsv))); if (walkoptree_debug) { PUSHMARK(sp); XPUSHs(opsv); @@ -395,8 +340,8 @@ walkoptree(SV *opsv, char *method) OP *kid; for (kid = ((UNOP*)o)->op_first; kid; kid = kid->op_sibling) { /* Use the same opsv. Rely on methods not to mess it up. */ - sv_setiv(newSVrv(opsv, cc_opclassname(kid)), (IV)kid); - walkoptree(opsv, method); + sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid)); + walkoptree(aTHX_ opsv, method); } } } @@ -405,11 +350,10 @@ typedef OP *B__OP; typedef UNOP *B__UNOP; typedef BINOP *B__BINOP; typedef LOGOP *B__LOGOP; -typedef CONDOP *B__CONDOP; typedef LISTOP *B__LISTOP; typedef PMOP *B__PMOP; typedef SVOP *B__SVOP; -typedef GVOP *B__GVOP; +typedef PADOP *B__PADOP; typedef PVOP *B__PVOP; typedef LOOP *B__LOOP; typedef COP *B__COP; @@ -435,12 +379,21 @@ MODULE = B PACKAGE = B PREFIX = B_ PROTOTYPES: DISABLE BOOT: - INIT_SPECIALSV_LIST; +{ + HV *stash = gv_stashpvn("B", 1, TRUE); + AV *export_ok = perl_get_av("B::EXPORT_OK",TRUE); + specialsv_list[0] = Nullsv; + specialsv_list[1] = &PL_sv_undef; + specialsv_list[2] = &PL_sv_yes; + specialsv_list[3] = &PL_sv_no; +#include "defsubs.h" +} #define B_main_cv() PL_main_cv #define B_init_av() PL_initav #define B_main_root() PL_main_root #define B_main_start() PL_main_start +#define B_amagic_generation() PL_amagic_generation #define B_comppadlist() (PL_main_cv ? CvPADLIST(PL_main_cv) : CvPADLIST(PL_compcv)) #define B_sv_undef() &PL_sv_undef #define B_sv_yes() &PL_sv_yes @@ -458,6 +411,9 @@ B_main_root() B::OP B_main_start() +long +B_amagic_generation() + B::AV B_comppadlist() @@ -477,6 +433,8 @@ void walkoptree(opsv, method) SV * opsv char * method + CODE: + walkoptree(aTHX_ opsv, method); int walkoptree_debug(...) @@ -487,20 +445,7 @@ walkoptree_debug(...) OUTPUT: RETVAL -int -byteload_fh(fp) - InputStream fp - CODE: - byteload_fh(fp); - RETVAL = 1; - OUTPUT: - RETVAL - -void -byteload_string(str) - char * str - -#define address(sv) (IV)sv +#define address(sv) PTR2IV(sv) IV address(sv) @@ -514,7 +459,28 @@ svref_2object(sv) croak("argument is not a reference"); RETVAL = (SV*)SvRV(sv); OUTPUT: - RETVAL + RETVAL + +void +opnumber(name) +char * name +CODE: +{ + int i; + IV result = -1; + ST(0) = sv_newmortal(); + if (strncmp(name,"pp_",3) == 0) + name += 3; + for (i = 0; i < PL_maxo; i++) + { + if (strcmp(name, PL_op_name[i]) == 0) + { + result = i; + break; + } + } + sv_setiv(ST(0),result); +} void ppname(opnum) @@ -523,7 +489,7 @@ ppname(opnum) ST(0) = sv_newmortal(); if (opnum >= 0 && opnum < PL_maxo) { sv_setpvn(ST(0), "pp_", 3); - sv_catpv(ST(0), op_name[opnum]); + sv_catpv(ST(0), PL_op_name[opnum]); } void @@ -533,11 +499,10 @@ hash(sv) char *s; STRLEN len; U32 hash = 0; - char hexhash[11]; /* must fit "0xffffffff" plus trailing \0 */ + char hexhash[19]; /* must fit "0xffffffffffffffff" plus trailing \0 */ s = SvPV(sv, len); - while (len--) - hash = hash * 33 + *s++; - sprintf(hexhash, "0x%x", hash); + PERL_HASH(hash, s, len); + sprintf(hexhash, "0x%"UVxf, (UV)hash); ST(0) = sv_2mortal(newSVpv(hexhash, 0)); #define cast_I32(foo) (I32)foo @@ -553,10 +518,18 @@ minus_c() SV * cstring(sv) SV * sv + CODE: + RETVAL = cstring(aTHX_ sv); + OUTPUT: + RETVAL SV * cchar(sv) SV * sv + CODE: + RETVAL = cchar(aTHX_ sv); + OUTPUT: + RETVAL void threadsv_names() @@ -567,13 +540,13 @@ threadsv_names() EXTEND(sp, len); for (i = 0; i < len; i++) - PUSHs(sv_2mortal(newSVpv(&PL_threadsv_names[i], 1))); + PUSHs(sv_2mortal(newSVpvn(&PL_threadsv_names[i], 1))); #endif #define OP_next(o) o->op_next #define OP_sibling(o) o->op_sibling -#define OP_desc(o) op_desc[o->op_type] +#define OP_desc(o) PL_op_desc[o->op_type] #define OP_targ(o) o->op_targ #define OP_type(o) o->op_type #define OP_seq(o) o->op_seq @@ -591,18 +564,32 @@ OP_sibling(o) B::OP o char * -OP_ppaddr(o) +OP_name(o) B::OP o CODE: ST(0) = sv_newmortal(); - sv_setpvn(ST(0), "pp_", 3); - sv_catpv(ST(0), op_name[o->op_type]); + sv_setpv(ST(0), PL_op_name[o->op_type]); + + +char * +OP_ppaddr(o) + B::OP o + PREINIT: + int i; + SV *sv = sv_newmortal(); + CODE: + sv_setpvn(sv, "PL_ppaddr[OP_", 13); + sv_catpv(sv, PL_op_name[o->op_type]); + for (i=13; iop_true -#define CONDOP_false(o) o->op_false - -MODULE = B PACKAGE = B::CONDOP PREFIX = CONDOP_ - -B::OP -CONDOP_true(o) - B::CONDOP o - -B::OP -CONDOP_false(o) - B::CONDOP o - #define LISTOP_children(o) o->op_children MODULE = B PACKAGE = B::LISTOP PREFIX = LISTOP_ @@ -687,10 +661,10 @@ PMOP_pmreplroot(o) if (o->op_type == OP_PUSHRE) { sv_setiv(newSVrv(ST(0), root ? svclassnames[SvTYPE((SV*)root)] : "B::SV"), - (IV)root); + PTR2IV(root)); } else { - sv_setiv(newSVrv(ST(0), cc_opclassname(root)), (IV)root); + sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root)); } B::OP @@ -719,23 +693,38 @@ PMOP_precomp(o) if (rx) sv_setpvn(ST(0), rx->precomp, rx->prelen); -#define SVOP_sv(o) o->op_sv +#define SVOP_sv(o) cSVOPo->op_sv +#define SVOP_gv(o) ((GV*)cSVOPo->op_sv) MODULE = B PACKAGE = B::SVOP PREFIX = SVOP_ - B::SV SVOP_sv(o) B::SVOP o -#define GVOP_gv(o) o->op_gv +B::GV +SVOP_gv(o) + B::SVOP o + +#define PADOP_padix(o) o->op_padix +#define PADOP_sv(o) (o->op_padix ? PL_curpad[o->op_padix] : Nullsv) +#define PADOP_gv(o) ((o->op_padix \ + && SvTYPE(PL_curpad[o->op_padix]) == SVt_PVGV) \ + ? (GV*)PL_curpad[o->op_padix] : Nullgv) + +MODULE = B PACKAGE = B::PADOP PREFIX = PADOP_ -MODULE = B PACKAGE = B::GVOP PREFIX = GVOP_ +PADOFFSET +PADOP_padix(o) + B::PADOP o +B::SV +PADOP_sv(o) + B::PADOP o B::GV -GVOP_gv(o) - B::GVOP o +PADOP_gv(o) + B::PADOP o MODULE = B PACKAGE = B::PVOP PREFIX = PVOP_ @@ -770,11 +759,13 @@ LOOP_lastop(o) B::LOOP o #define COP_label(o) o->cop_label -#define COP_stash(o) o->cop_stash -#define COP_filegv(o) o->cop_filegv +#define COP_stashpv(o) CopSTASHPV(o) +#define COP_stash(o) CopSTASH(o) +#define COP_file(o) CopFILE(o) #define COP_cop_seq(o) o->cop_seq #define COP_arybase(o) o->cop_arybase -#define COP_line(o) o->cop_line +#define COP_line(o) CopLINE(o) +#define COP_warnings(o) o->cop_warnings MODULE = B PACKAGE = B::COP PREFIX = COP_ @@ -782,12 +773,16 @@ char * COP_label(o) B::COP o +char * +COP_stashpv(o) + B::COP o + B::HV COP_stash(o) B::COP o -B::GV -COP_filegv(o) +char * +COP_file(o) B::COP o U32 @@ -802,6 +797,10 @@ U16 COP_line(o) B::COP o +B::SV +COP_warnings(o) + B::COP o + MODULE = B PACKAGE = B::SV PREFIX = Sv U32 @@ -822,6 +821,11 @@ IV SvIVX(sv) B::IV sv +UV +SvUVX(sv) + B::IV sv + + MODULE = B PACKAGE = B::IV #define needs64bits(sv) ((I32)SvIVX(sv) != SvIVX(sv)) @@ -844,12 +848,16 @@ packiv(sv) * reach this code anyway (unless sizeof(IV) > 8 but then * everything else breaks too so I'm not fussed at the moment). */ - wp[0] = htonl(((U32)iv) >> (sizeof(IV)*4)); +#ifdef UV_IS_QUAD + wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4)); +#else + wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4)); +#endif wp[1] = htonl(iv & 0xffffffff); - ST(0) = sv_2mortal(newSVpv((char *)wp, 8)); + ST(0) = sv_2mortal(newSVpvn((char *)wp, 8)); } else { U32 w = htonl((U32)SvIVX(sv)); - ST(0) = sv_2mortal(newSVpv((char *)&w, 4)); + ST(0) = sv_2mortal(newSVpvn((char *)&w, 4)); } MODULE = B PACKAGE = B::NV PREFIX = Sv @@ -877,6 +885,14 @@ SvPV(sv) ST(0) = sv_newmortal(); sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv)); +STRLEN +SvLEN(sv) + B::PV sv + +STRLEN +SvCUR(sv) + B::PV sv + MODULE = B PACKAGE = B::PVMG PREFIX = Sv void @@ -885,7 +901,7 @@ SvMAGIC(sv) MAGIC * mg = NO_INIT PPCODE: for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) - XPUSHs(make_mg_object(sv_newmortal(), mg)); + XPUSHs(make_mg_object(aTHX_ sv_newmortal(), mg)); MODULE = B PACKAGE = B::PVMG @@ -898,6 +914,7 @@ SvSTASH(sv) #define MgTYPE(mg) mg->mg_type #define MgFLAGS(mg) mg->mg_flags #define MgOBJ(mg) mg->mg_obj +#define MgLENGTH(mg) mg->mg_len MODULE = B PACKAGE = B::MAGIC PREFIX = Mg @@ -921,13 +938,23 @@ B::SV MgOBJ(mg) B::MAGIC mg +I32 +MgLENGTH(mg) + B::MAGIC mg + void MgPTR(mg) B::MAGIC mg CODE: ST(0) = sv_newmortal(); - if (mg->mg_ptr) - sv_setpvn(ST(0), mg->mg_ptr, mg->mg_len); + if (mg->mg_ptr){ + if (mg->mg_len >= 0){ + sv_setpvn(ST(0), mg->mg_ptr, mg->mg_len); + } else { + if (mg->mg_len == HEf_SVKEY) + sv_setsv(ST(0),newRV((SV*)mg->mg_ptr)); + } + } MODULE = B PACKAGE = B::PVLV PREFIX = Lv @@ -969,7 +996,7 @@ BmTABLE(sv) CODE: str = SvPV(sv, len); /* Boyer-Moore table is just after string and its safety-margin \0 */ - ST(0) = sv_2mortal(newSVpv(str + len + 1, 256)); + ST(0) = sv_2mortal(newSVpvn(str + len + 1, 256)); MODULE = B PACKAGE = B::GV PREFIX = Gv @@ -977,7 +1004,15 @@ void GvNAME(gv) B::GV gv CODE: - ST(0) = sv_2mortal(newSVpv(GvNAME(gv), GvNAMELEN(gv))); + ST(0) = sv_2mortal(newSVpvn(GvNAME(gv), GvNAMELEN(gv))); + +bool +is_empty(gv) + B::GV gv + CODE: + RETVAL = GvGP(gv) == Null(GP*); + OUTPUT: + RETVAL B::HV GvSTASH(gv) @@ -1019,6 +1054,10 @@ U16 GvLINE(gv) B::GV gv +char * +GvFILE(gv) + B::GV gv + B::GV GvFILEGV(gv) B::GV gv @@ -1113,7 +1152,7 @@ AvARRAY(av) SV **svp = AvARRAY(av); I32 i; for (i = 0; i <= AvFILL(av); i++) - XPUSHs(make_sv_object(sv_newmortal(), svp[i])); + XPUSHs(make_sv_object(aTHX_ sv_newmortal(), svp[i])); } MODULE = B PACKAGE = B::AV @@ -1140,8 +1179,8 @@ B::GV CvGV(cv) B::CV cv -B::GV -CvFILEGV(cv) +char * +CvFILE(cv) B::CV cv long @@ -1160,7 +1199,7 @@ void CvXSUB(cv) B::CV cv CODE: - ST(0) = sv_2mortal(newSViv((IV)CvXSUB(cv))); + ST(0) = sv_2mortal(newSViv(PTR2IV(CvXSUB(cv)))); void @@ -1213,7 +1252,7 @@ HvARRAY(hv) (void)hv_iterinit(hv); EXTEND(sp, HvKEYS(hv) * 2); while (sv = hv_iternextsv(hv, &key, &len)) { - PUSHs(newSVpv(key, len)); - PUSHs(make_sv_object(sv_newmortal(), sv)); + PUSHs(newSVpvn(key, len)); + PUSHs(make_sv_object(aTHX_ sv_newmortal(), sv)); } } diff --git a/gnu/usr.bin/perl/ext/B/B/Asmdata.pm b/gnu/usr.bin/perl/ext/B/B/Asmdata.pm index f3e57a17d03..bc0eda935b7 100644 --- a/gnu/usr.bin/perl/ext/B/B/Asmdata.pm +++ b/gnu/usr.bin/perl/ext/B/B/Asmdata.pm @@ -1,5 +1,5 @@ # -# Copyright (c) 1996-1998 Malcolm Beattie +# Copyright (c) 1996-1999 Malcolm Beattie # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the README file. @@ -12,9 +12,9 @@ package B::Asmdata; use Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(%insn_data @insn_name @optype @specialsv_name); -use vars qw(%insn_data @insn_name @optype @specialsv_name); +our(%insn_data, @insn_name, @optype, @specialsv_name); -@optype = qw(OP UNOP BINOP LOGOP CONDOP LISTOP PMOP SVOP GVOP PVOP LOOP COP); +@optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP); @specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no); # XXX insn_data is initialised this way because with a large @@ -42,7 +42,7 @@ $insn_data{xrv} = [17, \&PUT_svindex, "GET_svindex"]; $insn_data{xpv} = [18, \&PUT_none, "GET_none"]; $insn_data{xiv32} = [19, \&PUT_I32, "GET_I32"]; $insn_data{xiv64} = [20, \&PUT_IV64, "GET_IV64"]; -$insn_data{xnv} = [21, \&PUT_double, "GET_double"]; +$insn_data{xnv} = [21, \&PUT_NV, "GET_NV"]; $insn_data{xlv_targoff} = [22, \&PUT_U32, "GET_U32"]; $insn_data{xlv_targlen} = [23, \&PUT_U32, "GET_U32"]; $insn_data{xlv_targ} = [24, \&PUT_svindex, "GET_svindex"]; @@ -68,11 +68,11 @@ $insn_data{xcv_stash} = [44, \&PUT_svindex, "GET_svindex"]; $insn_data{xcv_start} = [45, \&PUT_opindex, "GET_opindex"]; $insn_data{xcv_root} = [46, \&PUT_opindex, "GET_opindex"]; $insn_data{xcv_gv} = [47, \&PUT_svindex, "GET_svindex"]; -$insn_data{xcv_filegv} = [48, \&PUT_svindex, "GET_svindex"]; +$insn_data{xcv_file} = [48, \&PUT_pvcontents, "GET_pvcontents"]; $insn_data{xcv_depth} = [49, \&PUT_I32, "GET_I32"]; $insn_data{xcv_padlist} = [50, \&PUT_svindex, "GET_svindex"]; $insn_data{xcv_outside} = [51, \&PUT_svindex, "GET_svindex"]; -$insn_data{xcv_flags} = [52, \&PUT_U8, "GET_U8"]; +$insn_data{xcv_flags} = [52, \&PUT_U16, "GET_U16"]; $insn_data{av_extend} = [53, \&PUT_I32, "GET_I32"]; $insn_data{av_push} = [54, \&PUT_svindex, "GET_svindex"]; $insn_data{xav_fill} = [55, \&PUT_I32, "GET_I32"]; @@ -95,7 +95,7 @@ $insn_data{gp_refcnt_add} = [71, \&PUT_I32, "GET_I32"]; $insn_data{gp_av} = [72, \&PUT_svindex, "GET_svindex"]; $insn_data{gp_hv} = [73, \&PUT_svindex, "GET_svindex"]; $insn_data{gp_cv} = [74, \&PUT_svindex, "GET_svindex"]; -$insn_data{gp_filegv} = [75, \&PUT_svindex, "GET_svindex"]; +$insn_data{gp_file} = [75, \&PUT_pvcontents, "GET_pvcontents"]; $insn_data{gp_io} = [76, \&PUT_svindex, "GET_svindex"]; $insn_data{gp_form} = [77, \&PUT_svindex, "GET_svindex"]; $insn_data{gp_cvgen} = [78, \&PUT_U32, "GET_U32"]; @@ -113,32 +113,31 @@ $insn_data{op_private} = [89, \&PUT_U8, "GET_U8"]; $insn_data{op_first} = [90, \&PUT_opindex, "GET_opindex"]; $insn_data{op_last} = [91, \&PUT_opindex, "GET_opindex"]; $insn_data{op_other} = [92, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_true} = [93, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_false} = [94, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_children} = [95, \&PUT_U32, "GET_U32"]; -$insn_data{op_pmreplroot} = [96, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_pmreplrootgv} = [97, \&PUT_svindex, "GET_svindex"]; -$insn_data{op_pmreplstart} = [98, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_pmnext} = [99, \&PUT_opindex, "GET_opindex"]; -$insn_data{pregcomp} = [100, \&PUT_pvcontents, "GET_pvcontents"]; -$insn_data{op_pmflags} = [101, \&PUT_U16, "GET_U16"]; -$insn_data{op_pmpermflags} = [102, \&PUT_U16, "GET_U16"]; -$insn_data{op_sv} = [103, \&PUT_svindex, "GET_svindex"]; -$insn_data{op_gv} = [104, \&PUT_svindex, "GET_svindex"]; -$insn_data{op_pv} = [105, \&PUT_pvcontents, "GET_pvcontents"]; -$insn_data{op_pv_tr} = [106, \&PUT_op_tr_array, "GET_op_tr_array"]; -$insn_data{op_redoop} = [107, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_nextop} = [108, \&PUT_opindex, "GET_opindex"]; -$insn_data{op_lastop} = [109, \&PUT_opindex, "GET_opindex"]; -$insn_data{cop_label} = [110, \&PUT_pvcontents, "GET_pvcontents"]; -$insn_data{cop_stash} = [111, \&PUT_svindex, "GET_svindex"]; -$insn_data{cop_filegv} = [112, \&PUT_svindex, "GET_svindex"]; -$insn_data{cop_seq} = [113, \&PUT_U32, "GET_U32"]; -$insn_data{cop_arybase} = [114, \&PUT_I32, "GET_I32"]; -$insn_data{cop_line} = [115, \&PUT_U16, "GET_U16"]; -$insn_data{main_start} = [116, \&PUT_opindex, "GET_opindex"]; -$insn_data{main_root} = [117, \&PUT_opindex, "GET_opindex"]; -$insn_data{curpad} = [118, \&PUT_svindex, "GET_svindex"]; +$insn_data{op_children} = [93, \&PUT_U32, "GET_U32"]; +$insn_data{op_pmreplroot} = [94, \&PUT_opindex, "GET_opindex"]; +$insn_data{op_pmreplrootgv} = [95, \&PUT_svindex, "GET_svindex"]; +$insn_data{op_pmreplstart} = [96, \&PUT_opindex, "GET_opindex"]; +$insn_data{op_pmnext} = [97, \&PUT_opindex, "GET_opindex"]; +$insn_data{pregcomp} = [98, \&PUT_pvcontents, "GET_pvcontents"]; +$insn_data{op_pmflags} = [99, \&PUT_U16, "GET_U16"]; +$insn_data{op_pmpermflags} = [100, \&PUT_U16, "GET_U16"]; +$insn_data{op_sv} = [101, \&PUT_svindex, "GET_svindex"]; +$insn_data{op_padix} = [102, \&PUT_U32, "GET_U32"]; +$insn_data{op_pv} = [103, \&PUT_pvcontents, "GET_pvcontents"]; +$insn_data{op_pv_tr} = [104, \&PUT_op_tr_array, "GET_op_tr_array"]; +$insn_data{op_redoop} = [105, \&PUT_opindex, "GET_opindex"]; +$insn_data{op_nextop} = [106, \&PUT_opindex, "GET_opindex"]; +$insn_data{op_lastop} = [107, \&PUT_opindex, "GET_opindex"]; +$insn_data{cop_label} = [108, \&PUT_pvcontents, "GET_pvcontents"]; +$insn_data{cop_stashpv} = [109, \&PUT_pvcontents, "GET_pvcontents"]; +$insn_data{cop_file} = [110, \&PUT_pvcontents, "GET_pvcontents"]; +$insn_data{cop_seq} = [111, \&PUT_U32, "GET_U32"]; +$insn_data{cop_arybase} = [112, \&PUT_I32, "GET_I32"]; +$insn_data{cop_line} = [113, \&PUT_U16, "GET_U16"]; +$insn_data{cop_warnings} = [114, \&PUT_svindex, "GET_svindex"]; +$insn_data{main_start} = [115, \&PUT_opindex, "GET_opindex"]; +$insn_data{main_root} = [116, \&PUT_opindex, "GET_opindex"]; +$insn_data{curpad} = [117, \&PUT_svindex, "GET_svindex"]; my ($insn_name, $insn_data); while (($insn_name, $insn_data) = each %insn_data) { diff --git a/gnu/usr.bin/perl/ext/B/B/Assembler.pm b/gnu/usr.bin/perl/ext/B/B/Assembler.pm index 06e00adeb54..6c51a9ad3e3 100644 --- a/gnu/usr.bin/perl/ext/B/B/Assembler.pm +++ b/gnu/usr.bin/perl/ext/B/B/Assembler.pm @@ -52,6 +52,7 @@ sub B::Asmdata::PUT_U8 { sub B::Asmdata::PUT_U16 { pack("n", $_[0]) } sub B::Asmdata::PUT_U32 { pack("N", $_[0]) } sub B::Asmdata::PUT_I32 { pack("N", $_[0]) } +sub B::Asmdata::PUT_NV { sprintf("%lf\0", $_[0]) } sub B::Asmdata::PUT_objindex { pack("N", $_[0]) } # could allow names here sub B::Asmdata::PUT_svindex { &B::Asmdata::PUT_objindex } sub B::Asmdata::PUT_opindex { &B::Asmdata::PUT_objindex } diff --git a/gnu/usr.bin/perl/ext/B/B/Bblock.pm b/gnu/usr.bin/perl/ext/B/B/Bblock.pm index a54431b4ce7..fe7fc52139c 100644 --- a/gnu/usr.bin/perl/ext/B/B/Bblock.pm +++ b/gnu/usr.bin/perl/ext/B/B/Bblock.pm @@ -4,7 +4,9 @@ use Exporter (); @EXPORT_OK = qw(find_leaders); use B qw(peekop walkoptree walkoptree_exec - main_root main_start svref_2object); + main_root main_start svref_2object + OPf_SPECIAL OPf_STACKED ); + use B::Terse; use strict; @@ -18,11 +20,18 @@ sub mark_leader { } } +sub remove_sortblock{ + foreach (keys %$bblock){ + my $leader=$$bblock{$_}; + delete $$bblock{$_} if( $leader == 0); + } +} sub find_leaders { my ($root, $start) = @_; $bblock = {}; - mark_leader($start); - walkoptree($root, "mark_if_leader"); + mark_leader($start) if ( ref $start ne "B::NULL" ); + walkoptree($root, "mark_if_leader") if ((ref $root) ne "B::NULL") ; + remove_sortblock(); return $bblock; } @@ -81,25 +90,32 @@ sub B::LOOP::mark_if_leader { sub B::LOGOP::mark_if_leader { my $op = shift; - my $ppaddr = $op->ppaddr; + my $opname = $op->name; mark_leader($op->next); - if ($ppaddr eq "pp_entertry") { + if ($opname eq "entertry") { mark_leader($op->other->next); } else { mark_leader($op->other); } } -sub B::CONDOP::mark_if_leader { +sub B::LISTOP::mark_if_leader { my $op = shift; + my $first=$op->first; + $first=$first->next while ($first->name eq "null"); + mark_leader($op->first) unless (exists( $bblock->{$$first})); mark_leader($op->next); - mark_leader($op->true); - mark_leader($op->false); + if ($op->name eq "sort" and $op->flags & OPf_SPECIAL + and $op->flags & OPf_STACKED){ + my $root=$op->first->sibling->first; + my $leader=$root->first; + $bblock->{$$leader} = 0; + } } sub B::PMOP::mark_if_leader { my $op = shift; - if ($op->ppaddr ne "pp_pushre") { + if ($op->name ne "pushre") { my $replroot = $op->pmreplroot; if ($$replroot) { mark_leader($replroot); @@ -113,6 +129,7 @@ sub B::PMOP::mark_if_leader { sub compile { my @options = @_; + B::clearsym(); if (@options) { return sub { my $objname; @@ -134,7 +151,6 @@ sub compile { # The ops pointed at by nextop, redoop and lastop->op_next of a LOOP # The ops pointed at by op_next and op_other of a LOGOP, except # for pp_entertry which has op_next and op_other->op_next -# The ops pointed at by op_true and op_false of a CONDOP # The op pointed at by op_pmreplstart of a PMOP # The op pointed at by op_other->op_pmreplstart of pp_substcont? # [The op after a pp_return] Omit @@ -153,7 +169,9 @@ B::Bblock - Walk basic blocks =head1 DESCRIPTION -See F. +This module is used by the B::CC back end. It walks "basic blocks". +A basic block is a series of operations which is known to execute from +start to finish, with no possiblity of branching or halting. =head1 AUTHOR diff --git a/gnu/usr.bin/perl/ext/B/B/Bytecode.pm b/gnu/usr.bin/perl/ext/B/B/Bytecode.pm index 0c5a58dc542..27003b6bd0b 100644 --- a/gnu/usr.bin/perl/ext/B/B/Bytecode.pm +++ b/gnu/usr.bin/perl/ext/B/B/Bytecode.pm @@ -11,7 +11,9 @@ use Carp; use IO::File; use B qw(minus_c main_cv main_root main_start comppadlist - class peekop walkoptree svref_2object cstring walksymtable); + class peekop walkoptree svref_2object cstring walksymtable + SVf_POK SVp_POK SVf_IOK SVp_IOK + ); use B::Asmdata qw(@optype @specialsv_name); use B::Assembler qw(assemble_fh); @@ -23,11 +25,11 @@ for ($i = 0; $i < @optype; $i++) { # Following is SVf_POK|SVp_POK # XXX Shouldn't be hardwired -sub POK () { 0x04040000 } +sub POK () { SVf_POK|SVp_POK } -# Following is SVf_IOK|SVp_OK +# Following is SVf_IOK|SVp_IOK # XXX Shouldn't be hardwired -sub IOK () { 0x01010000 } +sub IOK () { SVf_IOK|SVp_IOK } my ($verbose, $module_only, $no_assemble, $debug_bc, $debug_cv); my $assembler_pid; @@ -191,7 +193,7 @@ sub B::OP::bytecode { ldop($ix); print "op_next $nextix\n"; print "op_sibling $sibix\n" unless $strip_syntree; - printf "op_type %s\t# %d\n", $op->ppaddr, $type; + printf "op_type %s\t# %d\n", "pp_" . $op->name, $type; printf("op_seq %d\n", $op->seq) unless $omit_seq; if ($type || !$compress_nullops) { printf "op_targ %d\nop_flags 0x%x\nop_private 0x%x\n", @@ -224,13 +226,11 @@ sub B::SVOP::bytecode { $sv->bytecode; } -sub B::GVOP::bytecode { +sub B::PADOP::bytecode { my $op = shift; - my $gv = $op->gv; - my $gvix = $gv->objix; + my $padix = $op->padix; $op->B::OP::bytecode; - print "op_gv $gvix\n"; - $gv->bytecode; + print "op_padix $padix\n"; } sub B::PVOP::bytecode { @@ -241,7 +241,7 @@ sub B::PVOP::bytecode { # This would be easy except that OP_TRANS uses a PVOP to store an # endian-dependent array of 256 shorts instead of a plain string. # - if ($op->ppaddr eq "pp_trans") { + if ($op->name eq "trans") { my @shorts = unpack("s256", $pv); # assembler handles endianness print "op_pv_tr ", join(",", @shorts), "\n"; } else { @@ -258,14 +258,6 @@ sub B::BINOP::bytecode { } } -sub B::CONDOP::bytecode { - my $op = shift; - my $trueix = $op->true->objix; - my $falseix = $op->false->objix; - $op->B::UNOP::bytecode; - print "op_true $trueix\nop_false $falseix\n"; -} - sub B::LISTOP::bytecode { my $op = shift; my $children = $op->children; @@ -286,26 +278,27 @@ sub B::LOOP::bytecode { sub B::COP::bytecode { my $op = shift; - my $stash = $op->stash; - my $stashix = $stash->objix; - my $filegv = $op->filegv; - my $filegvix = $filegv->objix; + my $stashpv = $op->stashpv; + my $file = $op->file; my $line = $op->line; + my $warnings = $op->warnings; + my $warningsix = $warnings->objix; if ($debug_bc) { - printf "# line %s:%d\n", $filegv->SV->PV, $line; + printf "# line %s:%d\n", $file, $line; } $op->B::OP::bytecode; - printf <<"EOT", pvstring($op->label), $op->cop_seq, $op->arybase; + printf <<"EOT", pvstring($op->label), pvstring($stashpv), $op->cop_seq, pvstring($file), $op->arybase; newpv %s cop_label -cop_stash $stashix +newpv %s +cop_stashpv cop_seq %d -cop_filegv $filegvix +newpv %s +cop_file cop_arybase %d cop_line $line +cop_warnings $warningsix EOT - $filegv->bytecode; - $stash->bytecode; } sub B::PMOP::bytecode { @@ -313,7 +306,7 @@ sub B::PMOP::bytecode { my $replroot = $op->pmreplroot; my $replrootix = $replroot->objix; my $replstartix = $op->pmreplstart->objix; - my $ppaddr = $op->ppaddr; + my $opname = $op->name; # pmnext is corrupt in some PMOPs (see misc.t for example) #my $pmnextix = $op->pmnext->objix; @@ -321,14 +314,14 @@ sub B::PMOP::bytecode { # OP_PUSHRE (a mutated version of OP_MATCH for the regexp # argument to a split) stores a GV in op_pmreplroot instead # of a substitution syntax tree. We don't want to walk that... - if ($ppaddr eq "pp_pushre") { + if ($opname eq "pushre") { $replroot->bytecode; } else { walkoptree($replroot, "bytecode"); } } $op->B::LISTOP::bytecode; - if ($ppaddr eq "pp_pushre") { + if ($opname eq "pushre") { printf "op_pmreplrootgv $replrootix\n"; } else { print "op_pmreplroot $replrootix\nop_pmreplstart $replstartix\n"; @@ -395,7 +388,8 @@ sub B::PVIV::bytecode { } sub B::PVNV::bytecode { - my ($sv, $flag) = @_; + my $sv = shift; + my $flag = shift || 0; # The $flag argument is passed through PVMG::bytecode by BM::bytecode # and AV::bytecode and indicates special handling. $flag = 1 is used by # BM::bytecode and means that we should ensure we save the whole B-M @@ -469,18 +463,23 @@ sub B::GV::bytecode { return if saved($gv); my $ix = $gv->objix; mark_saved($gv); - my $gvname = $gv->NAME; - my $name = cstring($gv->STASH->NAME . "::" . $gvname); - my $egv = $gv->EGV; - my $egvix = $egv->objix; ldsv($ix); - printf <<"EOT", $gv->FLAGS, $gv->GvFLAGS, $gv->LINE; + printf <<"EOT", $gv->FLAGS, $gv->GvFLAGS; sv_flags 0x%x xgv_flags 0x%x -gp_line %d EOT my $refcnt = $gv->REFCNT; printf("sv_refcnt_add %d\n", $refcnt - 1) if $refcnt > 1; + return if $gv->is_empty; + printf <<"EOT", $gv->LINE, pvstring($gv->FILE); +gp_line %d +newpv %s +gp_file +EOT + my $gvname = $gv->NAME; + my $name = cstring($gv->STASH->NAME . "::" . $gvname); + my $egv = $gv->EGV; + my $egvix = $egv->objix; my $gvrefcnt = $gv->GvREFCNT; printf("gp_refcnt_add %d\n", $gvrefcnt - 1) if $gvrefcnt > 1; if ($gvrefcnt > 1 && $ix != $egvix) { @@ -488,7 +487,7 @@ EOT } else { if ($gvname !~ /^([^A-Za-z]|STDIN|STDOUT|STDERR|ARGV|SIG|ENV)$/) { my $i; - my @subfield_names = qw(SV AV HV CV FILEGV FORM IO); + my @subfield_names = qw(SV AV HV CV FORM IO); my @subfields = map($gv->$_(), @subfield_names); my @ixes = map($_->objix, @subfields); # Reset sv register for $gv @@ -571,7 +570,7 @@ sub B::CV::bytecode { my $ix = $cv->objix; $cv->B::PVMG::bytecode; my $i; - my @subfield_names = qw(ROOT START STASH GV FILEGV PADLIST OUTSIDE); + my @subfield_names = qw(ROOT START STASH GV PADLIST OUTSIDE); my @subfields = map($cv->$_(), @subfield_names); my @ixes = map($_->objix, @subfields); # Save OP tree from CvROOT (first element of @subfields) @@ -584,7 +583,8 @@ sub B::CV::bytecode { for ($i = 0; $i < @ixes; $i++) { printf "xcv_%s %d\n", lc($subfield_names[$i]), $ixes[$i]; } - printf "xcv_depth %d\nxcv_flags 0x%x\n", $cv->DEPTH, $cv->FLAGS; + printf "xcv_depth %d\nxcv_flags 0x%x\n", $cv->DEPTH, $cv->CvFLAGS; + printf "newpv %s\nxcv_file\n", pvstring($cv->FILE); # Now save all the subfields (except for CvROOT which was handled # above) and CvSTART (now the initial element of @subfields). shift @subfields; # bye-bye CvSTART @@ -653,7 +653,7 @@ sub bytecompile_main { walkoptree(main_root, "bytecode"); warn "done main program, now walking symbol table\n" if $debug_bc; my ($pack, %exclude); - foreach $pack (qw(B O AutoLoader DynaLoader Config DB VMS strict vars + foreach $pack (qw(B O AutoLoader DynaLoader XSLoader Config DB VMS strict vars FileHandle Exporter Carp UNIVERSAL IO Fcntl Symbol SelectSaver blib Cwd)) { @@ -707,6 +707,10 @@ sub compile { $arg ||= shift @options; open(OUT, ">$arg") or return "$arg: $!\n"; binmode OUT; + } elsif ($opt eq "a") { + $arg ||= shift @options; + open(OUT, ">>$arg") or return "$arg: $!\n"; + binmode OUT; } elsif ($opt eq "D") { $arg ||= shift @options; foreach $arg (split(//, $arg)) { @@ -816,6 +820,10 @@ extra arguments, it saves the main program. Output to filename instead of STDOUT. +=item B<-afilename> + +Append output to filename. + =item B<--> Force end of options. @@ -889,13 +897,16 @@ C and C are omitted. =head1 EXAMPLES - perl -MO=Bytecode,-O6,-o,foo.plc foo.pl + perl -MO=Bytecode,-O6,-o,foo.plc foo.pl + + perl -MO=Bytecode,-S foo.pl > foo.S + assemble foo.S > foo.plc - perl -MO=Bytecode,-S foo.pl > foo.S - assemble foo.S > foo.plc - byteperl foo.plc +Note that C lives in the C subdirectory of your perl +library directory. The utility called perlcc may also be used to +help make use of this compiler. - perl -MO=Bytecode,-m,-oFoo.pmc Foo.pm + perl -MO=Bytecode,-m,-oFoo.pmc Foo.pm =head1 BUGS diff --git a/gnu/usr.bin/perl/ext/B/B/C.pm b/gnu/usr.bin/perl/ext/B/B/C.pm index e695cc28767..d0c8159d9f3 100644 --- a/gnu/usr.bin/perl/ext/B/B/C.pm +++ b/gnu/usr.bin/perl/ext/B/B/C.pm @@ -5,34 +5,75 @@ # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the README file. # +package B::C::Section; +use B (); +use base B::Section; + +sub new +{ + my $class = shift; + my $o = $class->SUPER::new(@_); + push(@$o,[]); + return $o; +} + +sub add +{ + my $section = shift; + push(@{$section->[-1]},@_); +} + +sub index +{ + my $section = shift; + return scalar(@{$section->[-1]})-1; +} + +sub output +{ + my ($section, $fh, $format) = @_; + my $sym = $section->symtable || {}; + my $default = $section->default; + foreach (@{$section->[-1]}) + { + s{(s\\_[0-9a-f]+)}{ exists($sym->{$1}) ? $sym->{$1} : $default; }ge; + printf $fh $format, $_; + } +} + package B::C; use Exporter (); @ISA = qw(Exporter); -@EXPORT_OK = qw(output_all output_boilerplate output_main - init_sections set_callback save_unused_subs objsym); +@EXPORT_OK = qw(output_all output_boilerplate output_main mark_unused + init_sections set_callback save_unused_subs objsym save_context); use B qw(minus_c sv_undef walkoptree walksymtable main_root main_start peekop class cstring cchar svref_2object compile_stats comppadlist hash - threadsv_names main_cv init_av); + threadsv_names main_cv init_av opnumber amagic_generation + AVf_REAL HEf_SVKEY); use B::Asmdata qw(@specialsv_name); use FileHandle; use Carp; use strict; +use Config; my $hv_index = 0; my $gv_index = 0; my $re_index = 0; my $pv_index = 0; my $anonsub_index = 0; +my $initsub_index = 0; my %symtable; +my %xsub; my $warn_undefined_syms; my $verbose; -my @unused_sub_packages; +my %unused_sub_packages; my $nullop_count; -my $pv_copy_on_grow; +my $pv_copy_on_grow = 0; my ($debug_cops, $debug_av, $debug_cv, $debug_mg); +my $max_string_len; my @threadsv_names; BEGIN { @@ -40,11 +81,11 @@ BEGIN { } # Code sections -my ($init, $decl, $symsect, $binopsect, $condopsect, $copsect, $cvopsect, - $gvopsect, $listopsect, $logopsect, $loopsect, $opsect, $pmopsect, +my ($init, $decl, $symsect, $binopsect, $condopsect, $copsect, + $padopsect, $listopsect, $logopsect, $loopsect, $opsect, $pmopsect, $pvopsect, $svopsect, $unopsect, $svsect, $xpvsect, $xpvavsect, $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect, $xpvmgsect, $xpvlvsect, - $xrvsect, $xpvbmsect, $xpviosect, $bootstrap); + $xrvsect, $xpvbmsect, $xpviosect ); sub walk_and_save_optree; my $saveoptree_callback = \&walk_and_save_optree; @@ -66,11 +107,9 @@ sub walk_and_save_optree { # to "know" that op_seq is a U16 and use 65535. Ugh. my $op_seq = 65535; -sub AVf_REAL () { 1 } - -# XXX This shouldn't really be hardcoded here but it saves -# looking up the name of every BASEOP in B::OP -sub OP_THREADSV () { 345 } +# Look this up here so we can do just a number compare +# rather than looking up the name of every BASEOP in B::OP +my $OP_THREADSV = opnumber('threadsv'); sub savesym { my ($obj, $value) = @_; @@ -98,10 +137,11 @@ sub getsym { } sub savepv { - my $pv = shift; + my $pv = shift; + $pv = '' unless defined $pv; # Is this sane ? my $pvsym = 0; my $pvmax = 0; - if ($pv_copy_on_grow) { + if ($pv_copy_on_grow) { my $cstring = cstring($pv); if ($cstring ne "0") { # sic $pvsym = sprintf("pv%d", $pv_index++); @@ -115,17 +155,21 @@ sub savepv { sub B::OP::save { my ($op, $level) = @_; + my $sym = objsym($op); + return $sym if defined $sym; my $type = $op->type; $nullop_count++ unless $type; - if ($type == OP_THREADSV) { + if ($type == $OP_THREADSV) { # saves looking up ppaddr but it's a bit naughty to hard code this $init->add(sprintf("(void)find_threadsv(%s);", cstring($threadsv_names[$op->targ]))); } - $opsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, $op->targ, + $opsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x", + ${$op->next}, ${$op->sibling}, $op->targ, $type, $op_seq, $op->flags, $op->private)); - savesym($op, sprintf("&op_list[%d]", $opsect->index)); + my $ix = $opsect->index; + $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "&op_list[$ix]"); } sub B::FAKEOP::new { @@ -135,10 +179,12 @@ sub B::FAKEOP::new { sub B::FAKEOP::save { my ($op, $level) = @_; - $opsect->add(sprintf("%s, %s, %s, %u, %u, %u, 0x%x, 0x%x", - $op->next, $op->sibling, $op->ppaddr, $op->targ, + $opsect->add(sprintf("%s, %s, NULL, %u, %u, %u, 0x%x, 0x%x", + $op->next, $op->sibling, $op->targ, $op->type, $op_seq, $op->flags, $op->private)); - return sprintf("&op_list[%d]", $opsect->index); + my $ix = $opsect->index; + $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + return "&op_list[$ix]"; } sub B::FAKEOP::next { $_[0]->{"next"} || 0 } @@ -151,114 +197,139 @@ sub B::FAKEOP::private { $_[0]->{private} || 0 } sub B::UNOP::save { my ($op, $level) = @_; - $unopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $unopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first})); - savesym($op, sprintf("(OP*)&unop_list[%d]", $unopsect->index)); + my $ix = $unopsect->index; + $init->add(sprintf("unop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&unop_list[$ix]"); } sub B::BINOP::save { my ($op, $level) = @_; - $binopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $binopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first}, ${$op->last})); - savesym($op, sprintf("(OP*)&binop_list[%d]", $binopsect->index)); + my $ix = $binopsect->index; + $init->add(sprintf("binop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&binop_list[$ix]"); } sub B::LISTOP::save { my ($op, $level) = @_; - $listopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $listopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first}, ${$op->last}, $op->children)); - savesym($op, sprintf("(OP*)&listop_list[%d]", $listopsect->index)); + my $ix = $listopsect->index; + $init->add(sprintf("listop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&listop_list[$ix]"); } sub B::LOGOP::save { my ($op, $level) = @_; - $logopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $logopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first}, ${$op->other})); - savesym($op, sprintf("(OP*)&logop_list[%d]", $logopsect->index)); -} - -sub B::CONDOP::save { - my ($op, $level) = @_; - $condopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, s\\_%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, - $op->targ, $op->type, $op_seq, $op->flags, - $op->private, ${$op->first}, ${$op->true}, - ${$op->false})); - savesym($op, sprintf("(OP*)&condop_list[%d]", $condopsect->index)); + my $ix = $logopsect->index; + $init->add(sprintf("logop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&logop_list[$ix]"); } sub B::LOOP::save { my ($op, $level) = @_; + my $sym = objsym($op); + return $sym if defined $sym; #warn sprintf("LOOP: redoop %s, nextop %s, lastop %s\n", # peekop($op->redoop), peekop($op->nextop), # peekop($op->lastop)); # debug - $loopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, s\\_%x, s\\_%x, s\\_%x", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + $loopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, s\\_%x, s\\_%x, s\\_%x", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first}, ${$op->last}, $op->children, ${$op->redoop}, ${$op->nextop}, ${$op->lastop})); - savesym($op, sprintf("(OP*)&loop_list[%d]", $loopsect->index)); + my $ix = $loopsect->index; + $init->add(sprintf("loop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&loop_list[$ix]"); } sub B::PVOP::save { my ($op, $level) = @_; - $pvopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $pvopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, %s", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, cstring($op->pv))); - savesym($op, sprintf("(OP*)&pvop_list[%d]", $pvopsect->index)); + my $ix = $pvopsect->index; + $init->add(sprintf("pvop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + savesym($op, "(OP*)&pvop_list[$ix]"); } sub B::SVOP::save { my ($op, $level) = @_; + my $sym = objsym($op); + return $sym if defined $sym; my $svsym = $op->sv->save; - $svopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + $svopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, Nullsv", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, - $op->private, "(SV*)$svsym")); - savesym($op, sprintf("(OP*)&svop_list[%d]", $svopsect->index)); + $op->private)); + my $ix = $svopsect->index; + $init->add(sprintf("svop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + $init->add("svop_list[$ix].op_sv = (SV*)$svsym;"); + savesym($op, "(OP*)&svop_list[$ix]"); } -sub B::GVOP::save { +sub B::PADOP::save { my ($op, $level) = @_; - my $gvsym = $op->gv->save; - $gvopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, Nullgv", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + my $sym = objsym($op); + return $sym if defined $sym; + $padopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, 0", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private)); - $init->add(sprintf("gvop_list[%d].op_gv = %s;", $gvopsect->index, $gvsym)); - savesym($op, sprintf("(OP*)&gvop_list[%d]", $gvopsect->index)); + $init->add(sprintf("padop_list[%d].op_ppaddr = %s;", $padopsect->index, $op->ppaddr)); + my $ix = $padopsect->index; + $init->add(sprintf("padop_list[$ix].op_padix = %ld;", $op->padix)); + savesym($op, "(OP*)&padop_list[$ix]"); } sub B::COP::save { my ($op, $level) = @_; - my $gvsym = $op->filegv->save; - my $stashsym = $op->stash->save; - warn sprintf("COP: line %d file %s\n", $op->line, $op->filegv->SV->PV) + my $sym = objsym($op); + return $sym if defined $sym; + warn sprintf("COP: line %d file %s\n", $op->line, $op->file) if $debug_cops; - $copsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s, Nullhv, Nullgv, %u, %d, %u", - ${$op->next}, ${$op->sibling}, $op->ppaddr, + $copsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, %s, NULL, NULL, %u, %d, %u", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, cstring($op->label), $op->cop_seq, $op->arybase, $op->line)); - my $copix = $copsect->index; - $init->add(sprintf("cop_list[%d].cop_filegv = %s;", $copix, $gvsym), - sprintf("cop_list[%d].cop_stash = %s;", $copix, $stashsym)); - savesym($op, "(OP*)&cop_list[$copix]"); + my $ix = $copsect->index; + $init->add(sprintf("cop_list[$ix].op_ppaddr = %s;", $op->ppaddr)); + $init->add(sprintf("CopFILE_set(&cop_list[$ix], %s);", cstring($op->file)), + sprintf("CopSTASHPV_set(&cop_list[$ix], %s);", cstring($op->stashpv))); + savesym($op, "(OP*)&cop_list[$ix]"); } sub B::PMOP::save { my ($op, $level) = @_; + my $sym = objsym($op); + return $sym if defined $sym; my $replroot = $op->pmreplroot; my $replstart = $op->pmreplstart; my $replrootfield = sprintf("s\\_%x", $$replroot); @@ -269,7 +340,7 @@ sub B::PMOP::save { # OP_PUSHRE (a mutated version of OP_MATCH for the regexp # argument to a split) stores a GV in op_pmreplroot instead # of a substitution syntax tree. We don't want to walk that... - if ($ppaddr eq "pp_pushre") { + if ($op->name eq "pushre") { $gvsym = $replroot->save; # warn "PMOP::save saving a pp_pushre with GV $gvsym\n"; # debug $replrootfield = 0; @@ -280,13 +351,14 @@ sub B::PMOP::save { # pmnext handling is broken in perl itself, I think. Bad op_pmnext # fields aren't noticed in perl's runtime (unless you try reset) but we # segfault when trying to dereference it to find op->op_pmnext->op_type - $pmopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, %s, %s, 0, 0, 0x%x, 0x%x", - ${$op->next}, ${$op->sibling}, $ppaddr, $op->targ, + $pmopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, %s, %s, 0, 0, 0x%x, 0x%x", + ${$op->next}, ${$op->sibling}, $op->targ, $op->type, $op_seq, $op->flags, $op->private, ${$op->first}, ${$op->last}, $op->children, $replrootfield, $replstartfield, $op->pmflags, $op->pmpermflags,)); my $pm = sprintf("pmop_list[%d]", $pmopsect->index); + $init->add(sprintf("$pm.op_ppaddr = %s;", $ppaddr)); my $re = $op->precomp; if (defined($re)) { my $resym = sprintf("re%d", $re_index++); @@ -297,7 +369,7 @@ sub B::PMOP::save { if ($gvsym) { $init->add("$pm.op_pmreplroot = (OP*)$gvsym;"); } - savesym($op, sprintf("(OP*)&pmop_list[%d]", $pmopsect->index)); + savesym($op, "(OP*)&$pm"); } sub B::SPECIAL::save { @@ -319,10 +391,11 @@ sub B::NULL::save { return $sym if defined $sym; # warn "Saving SVt_NULL SV\n"; # debug # debug - #if ($$sv == 0) { - # warn "NULL::save for sv = 0 called from @{[(caller(1))[3]]}\n"; - #} - $svsect->add(sprintf("0, %u, 0x%x", $sv->REFCNT + 1, $sv->FLAGS)); + if ($$sv == 0) { + warn "NULL::save for sv = 0 called from @{[(caller(1))[3]]}\n"; + return savesym($sv, "Nullsv /* XXX */"); + } + $svsect->add(sprintf("0, %u, 0x%x", $sv->REFCNT , $sv->FLAGS)); return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -332,7 +405,7 @@ sub B::IV::save { return $sym if defined $sym; $xpvivsect->add(sprintf("0, 0, 0, %d", $sv->IVX)); $svsect->add(sprintf("&xpviv_list[%d], %lu, 0x%x", - $xpvivsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvivsect->index, $sv->REFCNT , $sv->FLAGS)); return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -340,12 +413,35 @@ sub B::NV::save { my ($sv) = @_; my $sym = objsym($sv); return $sym if defined $sym; - $xpvnvsect->add(sprintf("0, 0, 0, %d, %s", $sv->IVX, $sv->NVX)); + my $val= $sv->NVX; + $val .= '.00' if $val =~ /^-?\d+$/; + $xpvnvsect->add(sprintf("0, 0, 0, %d, %s", $sv->IVX, $val)); $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x", - $xpvnvsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS)); return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } +sub savepvn { + my ($dest,$pv) = @_; + my @res; + if (defined $max_string_len && length($pv) > $max_string_len) { + push @res, sprintf("New(0,%s,%u,char);", $dest, length($pv)+1); + my $offset = 0; + while (length $pv) { + my $str = substr $pv, 0, $max_string_len, ''; + push @res, sprintf("Copy(%s,$dest+$offset,%u,char);", + cstring($str), length($str)); + $offset += length $str; + } + push @res, sprintf("%s[%u] = '\\0';", $dest, $offset); + } + else { + push @res, sprintf("%s = savepvn(%s, %u);", $dest, + cstring($pv), length($pv)); + } + return @res; +} + sub B::PVLV::save { my ($sv) = @_; my $sym = objsym($sv); @@ -358,10 +454,10 @@ sub B::PVLV::save { $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX, $sv->TARGOFF, $sv->TARGLEN, cchar($sv->TYPE))); $svsect->add(sprintf("&xpvlv_list[%d], %lu, 0x%x", - $xpvlvsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvlvsect->index, $sv->REFCNT , $sv->FLAGS)); if (!$pv_copy_on_grow) { - $init->add(sprintf("xpvlv_list[%d].xpv_pv = savepvn(%s, %u);", - $xpvlvsect->index, cstring($pv), $len)); + $init->add(savepvn(sprintf("xpvlv_list[%d].xpv_pv", + $xpvlvsect->index), $pv)); } $sv->save_magic; return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); @@ -376,10 +472,10 @@ sub B::PVIV::save { my ($pvsym, $pvmax) = savepv($pv); $xpvivsect->add(sprintf("%s, %u, %u, %d", $pvsym, $len, $pvmax, $sv->IVX)); $svsect->add(sprintf("&xpviv_list[%d], %u, 0x%x", - $xpvivsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvivsect->index, $sv->REFCNT , $sv->FLAGS)); if (!$pv_copy_on_grow) { - $init->add(sprintf("xpviv_list[%d].xpv_pv = savepvn(%s, %u);", - $xpvivsect->index, cstring($pv), $len)); + $init->add(savepvn(sprintf("xpviv_list[%d].xpv_pv", + $xpvivsect->index), $pv)); } return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -388,16 +484,19 @@ sub B::PVNV::save { my ($sv) = @_; my $sym = objsym($sv); return $sym if defined $sym; - my $pv = $sv->PV; + my $pv = $sv->PV; + $pv = '' unless defined $pv; my $len = length($pv); my ($pvsym, $pvmax) = savepv($pv); + my $val= $sv->NVX; + $val .= '.00' if $val =~ /^-?\d+$/; $xpvnvsect->add(sprintf("%s, %u, %u, %d, %s", - $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX)); + $pvsym, $len, $pvmax, $sv->IVX, $val)); $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x", - $xpvnvsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS)); if (!$pv_copy_on_grow) { - $init->add(sprintf("xpvnv_list[%d].xpv_pv = savepvn(%s,%u);", - $xpvnvsect->index, cstring($pv), $len)); + $init->add(savepvn(sprintf("xpvnv_list[%d].xpv_pv", + $xpvnvsect->index), $pv)); } return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -412,10 +511,10 @@ sub B::BM::save { $len, $len + 258, $sv->IVX, $sv->NVX, $sv->USEFUL, $sv->PREVIOUS, $sv->RARE)); $svsect->add(sprintf("&xpvbm_list[%d], %lu, 0x%x", - $xpvbmsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvbmsect->index, $sv->REFCNT , $sv->FLAGS)); $sv->save_magic; - $init->add(sprintf("xpvbm_list[%d].xpv_pv = savepvn(%s, %u);", - $xpvbmsect->index, cstring($pv), $len), + $init->add(savepvn(sprintf("xpvbm_list[%d].xpv_pv", + $xpvbmsect->index), $pv), sprintf("xpvbm_list[%d].xpv_cur = %u;", $xpvbmsect->index, $len - 257)); return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); @@ -430,10 +529,10 @@ sub B::PV::save { my ($pvsym, $pvmax) = savepv($pv); $xpvsect->add(sprintf("%s, %u, %u", $pvsym, $len, $pvmax)); $svsect->add(sprintf("&xpv_list[%d], %lu, 0x%x", - $xpvsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvsect->index, $sv->REFCNT , $sv->FLAGS)); if (!$pv_copy_on_grow) { - $init->add(sprintf("xpv_list[%d].xpv_pv = savepvn(%s, %u);", - $xpvsect->index, cstring($pv), $len)); + $init->add(savepvn(sprintf("xpv_list[%d].xpv_pv", + $xpvsect->index), $pv)); } return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -448,10 +547,10 @@ sub B::PVMG::save { $xpvmgsect->add(sprintf("%s, %u, %u, %d, %s, 0, 0", $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX)); $svsect->add(sprintf("&xpvmg_list[%d], %lu, 0x%x", - $xpvmgsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xpvmgsect->index, $sv->REFCNT , $sv->FLAGS)); if (!$pv_copy_on_grow) { - $init->add(sprintf("xpvmg_list[%d].xpv_pv = savepvn(%s, %u);", - $xpvmgsect->index, cstring($pv), $len)); + $init->add(savepvn(sprintf("xpvmg_list[%d].xpv_pv", + $xpvmgsect->index), $pv)); } $sym = savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); $sv->save_magic; @@ -462,6 +561,7 @@ sub B::PVMG::save_magic { my ($sv) = @_; #warn sprintf("saving magic for %s (0x%x)\n", class($sv), $$sv); # debug my $stash = $sv->SvSTASH; + $stash->save; if ($$stash) { warn sprintf("xmg_stash = %s (0x%x)\n", $stash->NAME, $$stash) if $debug_mg; @@ -469,19 +569,27 @@ sub B::PVMG::save_magic { $init->add(sprintf("SvSTASH(s\\_%x) = s\\_%x;", $$sv, $$stash)); } my @mgchain = $sv->MAGIC; - my ($mg, $type, $obj, $ptr); + my ($mg, $type, $obj, $ptr,$len,$ptrsv); foreach $mg (@mgchain) { $type = $mg->TYPE; $obj = $mg->OBJ; $ptr = $mg->PTR; - my $len = defined($ptr) ? length($ptr) : 0; + $len=$mg->LENGTH; if ($debug_mg) { warn sprintf("magic %s (0x%x), obj %s (0x%x), type %s, ptr %s\n", class($sv), $$sv, class($obj), $$obj, cchar($type), cstring($ptr)); } - $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s, %s, %d);", + $obj->save; + if ($len == HEf_SVKEY){ + #The pointer is an SV* + $ptrsv=svref_2object($ptr)->save; + $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s,(char *) %s, %d);", + $$sv, $$obj, cchar($type),$ptrsv,$len)); + }else{ + $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s, %s, %d);", $$sv, $$obj, cchar($type),cstring($ptr),$len)); + } } } @@ -489,9 +597,11 @@ sub B::RV::save { my ($sv) = @_; my $sym = objsym($sv); return $sym if defined $sym; - $xrvsect->add($sv->RV->save); + my $rv = $sv->RV->save; + $rv =~ s/^\([AGHS]V\s*\*\)\s*(\&sv_list.*)$/$1/; + $xrvsect->add($rv); $svsect->add(sprintf("&xrv_list[%d], %lu, 0x%x", - $xrvsect->index, $sv->REFCNT + 1, $sv->FLAGS)); + $xrvsect->index, $sv->REFCNT , $sv->FLAGS)); return savesym($sv, sprintf("&sv_list[%d]", $svsect->index)); } @@ -516,7 +626,7 @@ sub try_autoload { } } } - +sub Dummy_initxs{}; sub B::CV::save { my ($cv) = @_; my $sym = objsym($cv); @@ -525,18 +635,43 @@ sub B::CV::save { return $sym; } # Reserve a place in svsect and xpvcvsect and record indices + my $gv = $cv->GV; + my ($cvname, $cvstashname); + if ($$gv){ + $cvname = $gv->NAME; + $cvstashname = $gv->STASH->NAME; + } + my $root = $cv->ROOT; + my $cvxsub = $cv->XSUB; + #INIT is removed from the symbol table, so this call must come + # from PL_initav->save. Re-bootstrapping will push INIT back in + # so nullop should be sent. + if ($cvxsub && ($cvname ne "INIT")) { + my $egv = $gv->EGV; + my $stashname = $egv->STASH->NAME; + if ($cvname eq "bootstrap") + { + my $file = $gv->FILE; + $decl->add("/* bootstrap $file */"); + warn "Bootstrap $stashname $file\n"; + $xsub{$stashname}='Dynamic'; + # $xsub{$stashname}='Static' unless $xsub{$stashname}; + return qq/NULL/; + } + warn sprintf("stub for XSUB $cvstashname\:\:$cvname CV 0x%x\n", $$cv) if $debug_cv; + return qq/(perl_get_cv("$stashname\:\:$cvname",TRUE))/; + } + if ($cvxsub && $cvname eq "INIT") { + no strict 'refs'; + return svref_2object(\&Dummy_initxs)->save; + } my $sv_ix = $svsect->index + 1; $svsect->add("svix$sv_ix"); my $xpvcv_ix = $xpvcvsect->index + 1; $xpvcvsect->add("xpvcvix$xpvcv_ix"); # Save symbol now so that GvCV() doesn't recurse back to us via CvGV() $sym = savesym($cv, "&sv_list[$sv_ix]"); - warn sprintf("saving CV 0x%x as $sym\n", $$cv) if $debug_cv; - my $gv = $cv->GV; - my $cvstashname = $gv->STASH->NAME; - my $cvname = $gv->NAME; - my $root = $cv->ROOT; - my $cvxsub = $cv->XSUB; + warn sprintf("saving $cvstashname\:\:$cvname CV 0x%x as $sym\n", $$cv) if $debug_cv; if (!$$root && !$cvxsub) { if (try_autoload($cvstashname, $cvname)) { # Recalculate root and xsub @@ -564,6 +699,10 @@ sub B::CV::save { $ppname .= ($stashname eq "main") ? $gvname : "$stashname\::$gvname"; $ppname =~ s/::/__/g; + if ($gvname eq "INIT"){ + $ppname .= "_$initsub_index"; + $initsub_index++; + } } } if (!$ppname) { @@ -581,28 +720,19 @@ sub B::CV::save { $$padlist, $$cv) if $debug_cv; } } - elsif ($cvxsub) { - $xsubany = sprintf("ANYINIT((void*)0x%x)", $cv->XSUBANY); - # Try to find out canonical name of XSUB function from EGV. - # XXX Doesn't work for XSUBs with PREFIX set (or anyone who - # calls newXS() manually with weird arguments). - my $egv = $gv->EGV; - my $stashname = $egv->STASH->NAME; - $stashname =~ s/::/__/g; - $xsub = sprintf("XS_%s_%s", $stashname, $egv->NAME); - $decl->add("void $xsub _((CV*));"); - } else { warn sprintf("No definition for sub %s::%s (unable to autoload)\n", $cvstashname, $cvname); # debug - } - $symsect->add(sprintf("xpvcvix%d\t%s, %u, 0, %d, %s, 0, Nullhv, Nullhv, %s, s\\_%x, $xsub, $xsubany, Nullgv, Nullgv, %d, s\\_%x, (CV*)s\\_%x, 0x%x", + } + $pv = '' unless defined $pv; # Avoid use of undef warnings + $symsect->add(sprintf("xpvcvix%d\t%s, %u, 0, %d, %s, 0, Nullhv, Nullhv, %s, s\\_%x, $xsub, $xsubany, Nullgv, \"\", %d, s\\_%x, (CV*)s\\_%x, 0x%x", $xpvcv_ix, cstring($pv), length($pv), $cv->IVX, $cv->NVX, $startfield, ${$cv->ROOT}, $cv->DEPTH, $$padlist, ${$cv->OUTSIDE}, $cv->CvFLAGS)); if (${$cv->OUTSIDE} == ${main_cv()}){ $init->add(sprintf("CvOUTSIDE(s\\_%x)=PL_main_cv;",$$cv)); + $init->add(sprintf("SvREFCNT_inc(PL_main_cv);")); } if ($$gv) { @@ -611,13 +741,7 @@ sub B::CV::save { warn sprintf("done saving GV 0x%x for CV 0x%x\n", $$gv, $$cv) if $debug_cv; } - my $filegv = $cv->FILEGV; - if ($$filegv) { - $filegv->save; - $init->add(sprintf("CvFILEGV(s\\_%x) = s\\_%x;", $$cv, $$filegv)); - warn sprintf("done saving FILEGV 0x%x for CV 0x%x\n", - $$filegv, $$cv) if $debug_cv; - } + $init->add(sprintf("CvFILE($sym) = %s;", cstring($cv->FILE))); my $stash = $cv->STASH; if ($$stash) { $stash->save; @@ -626,7 +750,7 @@ sub B::CV::save { $$stash, $$cv) if $debug_cv; } $symsect->add(sprintf("svix%d\t(XPVCV*)&xpvcv_list[%u], %lu, 0x%x", - $sv_ix, $xpvcv_ix, $cv->REFCNT + 1, $cv->FLAGS)); + $sv_ix, $xpvcv_ix, $cv->REFCNT +1 , $cv->FLAGS)); return $sym; } @@ -641,24 +765,31 @@ sub B::GV::save { $sym = savesym($gv, "gv_list[$ix]"); #warn sprintf("Saving GV 0x%x as $sym\n", $$gv); # debug } + my $is_empty = $gv->is_empty; my $gvname = $gv->NAME; my $name = cstring($gv->STASH->NAME . "::" . $gvname); #warn "GV name is $name\n"; # debug - my $egv = $gv->EGV; my $egvsym; - if ($$gv != $$egv) { - #warn(sprintf("EGV name is %s, saving it now\n", - # $egv->STASH->NAME . "::" . $egv->NAME)); # debug - $egvsym = $egv->save; + unless ($is_empty) { + my $egv = $gv->EGV; + if ($$gv != $$egv) { + #warn(sprintf("EGV name is %s, saving it now\n", + # $egv->STASH->NAME . "::" . $egv->NAME)); # debug + $egvsym = $egv->save; + } } $init->add(qq[$sym = gv_fetchpv($name, TRUE, SVt_PV);], sprintf("SvFLAGS($sym) = 0x%x;", $gv->FLAGS), - sprintf("GvFLAGS($sym) = 0x%x;", $gv->GvFLAGS), - sprintf("GvLINE($sym) = %u;", $gv->LINE)); + sprintf("GvFLAGS($sym) = 0x%x;", $gv->GvFLAGS)); + $init->add(sprintf("GvLINE($sym) = %u;", $gv->LINE)) unless $is_empty; + # Shouldn't need to do save_magic since gv_fetchpv handles that #$gv->save_magic; my $refcnt = $gv->REFCNT + 1; $init->add(sprintf("SvREFCNT($sym) += %u;", $refcnt - 1)) if $refcnt > 1; + + return $sym if $is_empty; + my $gvrefcnt = $gv->GvREFCNT; if ($gvrefcnt > 1) { $init->add(sprintf("GvREFCNT($sym) += %u;", $gvrefcnt - 1)); @@ -672,45 +803,51 @@ sub B::GV::save { # warn "GV::save saving subfields\n"; # debug my $gvsv = $gv->SV; if ($$gvsv) { + $gvsv->save; $init->add(sprintf("GvSV($sym) = s\\_%x;", $$gvsv)); # warn "GV::save \$$name\n"; # debug - $gvsv->save; } my $gvav = $gv->AV; if ($$gvav) { + $gvav->save; $init->add(sprintf("GvAV($sym) = s\\_%x;", $$gvav)); # warn "GV::save \@$name\n"; # debug - $gvav->save; } my $gvhv = $gv->HV; if ($$gvhv) { + $gvhv->save; $init->add(sprintf("GvHV($sym) = s\\_%x;", $$gvhv)); # warn "GV::save \%$name\n"; # debug - $gvhv->save; } my $gvcv = $gv->CV; - if ($$gvcv) { - $init->add(sprintf("GvCV($sym) = (CV*)s\\_%x;", $$gvcv)); -# warn "GV::save &$name\n"; # debug - $gvcv->save; - } - my $gvfilegv = $gv->FILEGV; - if ($$gvfilegv) { - $init->add(sprintf("GvFILEGV($sym) = (GV*)s\\_%x;",$$gvfilegv)); -# warn "GV::save GvFILEGV(*$name)\n"; # debug - $gvfilegv->save; - } + if ($$gvcv) { + my $origname=cstring($gvcv->GV->EGV->STASH->NAME . + "::" . $gvcv->GV->EGV->NAME); + if (0 && $gvcv->XSUB && $name ne $origname) { #XSUB alias + # must save as a 'stub' so newXS() has a CV to populate + $init->add("{ CV *cv;"); + $init->add("\tcv=perl_get_cv($origname,TRUE);"); + $init->add("\tGvCV($sym)=cv;"); + $init->add("\tSvREFCNT_inc((SV *)cv);"); + $init->add("}"); + } else { + $init->add(sprintf("GvCV($sym) = (CV*)(%s);", $gvcv->save)); +# warn "GV::save &$name\n"; # debug + } + } + $init->add(sprintf("GvFILE($sym) = %s;", cstring($gv->FILE))); +# warn "GV::save GvFILE(*$name)\n"; # debug my $gvform = $gv->FORM; if ($$gvform) { + $gvform->save; $init->add(sprintf("GvFORM($sym) = (CV*)s\\_%x;", $$gvform)); # warn "GV::save GvFORM(*$name)\n"; # debug - $gvform->save; } my $gvio = $gv->IO; if ($$gvio) { + $gvio->save; $init->add(sprintf("GvIOp($sym) = s\\_%x;", $$gvio)); # warn "GV::save GvIO(*$name)\n"; # debug - $gvio->save; } } return $sym; @@ -723,7 +860,7 @@ sub B::AV::save { $xpvavsect->add(sprintf("0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0, 0x%x", $avflags)); $svsect->add(sprintf("&xpvav_list[%d], %lu, 0x%x", - $xpvavsect->index, $av->REFCNT + 1, $av->FLAGS)); + $xpvavsect->index, $av->REFCNT , $av->FLAGS)); my $sv_list_index = $svsect->index; my $fill = $av->FILL; $av->save_magic; @@ -789,7 +926,7 @@ sub B::HV::save { $xpvhvsect->add(sprintf("0, 0, %d, 0, 0.0, 0, Nullhv, %d, 0, 0, 0", $hv->MAX, $hv->RITER)); $svsect->add(sprintf("&xpvhv_list[%d], %lu, 0x%x", - $xpvhvsect->index, $hv->REFCNT + 1, $hv->FLAGS)); + $xpvhvsect->index, $hv->REFCNT , $hv->FLAGS)); my $sv_list_index = $svsect->index; my @contents = $hv->ARRAY; if (@contents) { @@ -802,9 +939,12 @@ sub B::HV::save { my ($key, $value) = splice(@contents, 0, 2); $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);", cstring($key),length($key),$value, hash($key))); +# $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);", +# cstring($key),length($key),$value, 0)); } $init->add("}"); } + $hv->save_magic(); return savesym($hv, "(HV*)&sv_list[$sv_list_index]"); } @@ -813,6 +953,7 @@ sub B::IO::save { my $sym = objsym($io); return $sym if defined $sym; my $pv = $io->PV; + $pv = '' unless defined $pv; my $len = length($pv); $xpviosect->add(sprintf("0, %u, %u, %d, %s, 0, 0, 0, 0, 0, %d, %d, %d, %d, %s, Nullgv, %s, Nullgv, %s, Nullgv, %d, %s, 0x%x", $len, $len+1, $io->IVX, $io->NVX, $io->LINES, @@ -821,7 +962,7 @@ sub B::IO::save { cstring($io->BOTTOM_NAME), $io->SUBPROCESS, cchar($io->IoTYPE), $io->IoFLAGS)); $svsect->add(sprintf("&xpvio_list[%d], %lu, 0x%x", - $xpviosect->index, $io->REFCNT + 1, $io->FLAGS)); + $xpviosect->index, $io->REFCNT , $io->FLAGS)); $sym = savesym($io, sprintf("(IO*)&sv_list[%d]", $svsect->index)); my ($field, $fsym); foreach $field (qw(TOP_GV FMT_GV BOTTOM_GV)) { @@ -848,11 +989,10 @@ sub output_all { my $init_name = shift; my $section; my @sections = ($opsect, $unopsect, $binopsect, $logopsect, $condopsect, - $listopsect, $pmopsect, $svopsect, $gvopsect, $pvopsect, - $cvopsect, $loopsect, $copsect, $svsect, $xpvsect, + $listopsect, $pmopsect, $svopsect, $padopsect, $pvopsect, + $loopsect, $copsect, $svsect, $xpvsect, $xpvavsect, $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect, $xpvmgsect, $xpvlvsect, $xrvsect, $xpvbmsect, $xpviosect); - $bootstrap->output(\*STDOUT, "/* bootstrap %s */\n"); $symsect->output(\*STDOUT, "#define %s\n"); print "\n"; output_declarations(); @@ -881,6 +1021,8 @@ sub output_all { static int $init_name() { dTHR; + dTARG; + djSP; EOT $init->output(\*STDOUT, "\t%s\n"); print "\treturn 0;\n}\n"; @@ -915,18 +1057,18 @@ typedef struct { HV * xcv_stash; OP * xcv_start; OP * xcv_root; - void (*xcv_xsub) _((CV*)); + void (*xcv_xsub) (CV*); void * xcv_xsubany; GV * xcv_gv; - GV * xcv_filegv; - long xcv_depth; /* >= 2 indicates recursive call */ + char * xcv_file; + long xcv_depth; /* >= 2 indicates recursive call */ AV * xcv_padlist; CV * xcv_outside; #ifdef USE_THREADS perl_mutex *xcv_mutexp; struct perl_thread *xcv_owner; /* current owner thread */ #endif /* USE_THREADS */ - U8 xcv_flags; + cv_flags_t xcv_flags; } XPVCV_or_similar; #define ANYINIT(i) i #else @@ -948,15 +1090,16 @@ sub output_boilerplate { print <<'EOT'; #include "EXTERN.h" #include "perl.h" -#ifndef PATCHLEVEL -#include "patchlevel.h" -#endif +#include "XSUB.h" /* Workaround for mapstart: the only op which needs a different ppaddr */ -#undef pp_mapstart -#define pp_mapstart pp_grepstart +#undef Perl_pp_mapstart +#define Perl_pp_mapstart Perl_pp_grepstart +#define XS_DynaLoader_boot_DynaLoader boot_DynaLoader +EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); -static void xs_init _((void)); +static void xs_init (pTHX); +static void dl_init (pTHX); static PerlInterpreter *my_perl; EOT } @@ -964,28 +1107,20 @@ EOT sub output_main { print <<'EOT'; int -#ifndef CAN_PROTOTYPE -main(argc, argv, env) -int argc; -char **argv; -char **env; -#else /* def(CAN_PROTOTYPE) */ main(int argc, char **argv, char **env) -#endif /* def(CAN_PROTOTYPE) */ { int exitstatus; int i; char **fakeargv; - PERL_SYS_INIT(&argc,&argv); + PERL_SYS_INIT3(&argc,&argv,&env); - perl_init_i18nl10n(1); - if (!PL_do_undump) { my_perl = perl_alloc(); if (!my_perl) exit(1); perl_construct( my_perl ); + PL_perl_destruct_level = 0; } #ifdef CSH @@ -1021,22 +1156,84 @@ main(int argc, char **argv, char **env) exitstatus = perl_init(); if (exitstatus) exit( exitstatus ); + dl_init(aTHX); exitstatus = perl_run( my_perl ); perl_destruct( my_perl ); perl_free( my_perl ); + PERL_SYS_TERM(); + exit( exitstatus ); } +/* yanked from perl.c */ static void -xs_init() +xs_init(pTHX) { -} + char *file = __FILE__; + dTARG; + djSP; +EOT + print "\n#ifdef USE_DYNAMIC_LOADING"; + print qq/\n\tnewXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);/; + print "\n#endif\n" ; + # delete $xsub{'DynaLoader'}; + delete $xsub{'UNIVERSAL'}; + print("/* bootstrapping code*/\n\tSAVETMPS;\n"); + print("\ttarg=sv_newmortal();\n"); + print "#ifdef DYNALOADER_BOOTSTRAP\n"; + print "\tPUSHMARK(sp);\n"; + print qq/\tXPUSHp("DynaLoader",strlen("DynaLoader"));\n/; + print qq/\tPUTBACK;\n/; + print "\tboot_DynaLoader(aTHX_ NULL);\n"; + print qq/\tSPAGAIN;\n/; + print "#endif\n"; + foreach my $stashname (keys %xsub){ + if ($xsub{$stashname} ne 'Dynamic') { + my $stashxsub=$stashname; + $stashxsub =~ s/::/__/g; + print "\tPUSHMARK(sp);\n"; + print qq/\tXPUSHp("$stashname",strlen("$stashname"));\n/; + print qq/\tPUTBACK;\n/; + print "\tboot_$stashxsub(aTHX_ NULL);\n"; + print qq/\tSPAGAIN;\n/; + } + } + print("\tFREETMPS;\n/* end bootstrapping code */\n"); + print "}\n"; + +print <<'EOT'; +static void +dl_init(pTHX) +{ + char *file = __FILE__; + dTARG; + djSP; EOT + print("/* Dynamicboot strapping code*/\n\tSAVETMPS;\n"); + print("\ttarg=sv_newmortal();\n"); + foreach my $stashname (@DynaLoader::dl_modules) { + warn "Loaded $stashname\n"; + if (exists($xsub{$stashname}) && $xsub{$stashname} eq 'Dynamic') { + my $stashxsub=$stashname; + $stashxsub =~ s/::/__/g; + print "\tPUSHMARK(sp);\n"; + print qq/\tXPUSHp("$stashname",/,length($stashname),qq/);\n/; + print qq/\tPUTBACK;\n/; + print "#ifdef DYNALOADER_BOOTSTRAP\n"; + warn "bootstrapping $stashname added to xs_init\n"; + print qq/\tperl_call_method("bootstrap",G_DISCARD);\n/; + print "\n#else\n"; + print "\tboot_$stashxsub(aTHX_ NULL);\n"; + print "#endif\n"; + print qq/\tSPAGAIN;\n/; + } + } + print("\tFREETMPS;\n/* end Dynamic bootstrapping code */\n"); + print "}\n"; } - sub dump_symtable { # For debugging my ($sym, $val); @@ -1056,107 +1253,174 @@ sub save_object { sub Dummy_BootStrap { } -sub B::GV::savecv { - my $gv = shift; - my $cv = $gv->CV; - my $name = $gv->NAME; - if ($$cv) { - if ($name eq "bootstrap" && $cv->XSUB) { - my $file = $cv->FILEGV->SV->PV; - $bootstrap->add($file); - my $name = $gv->STASH->NAME.'::'.$name; - no strict 'refs'; - *{$name} = \&Dummy_BootStrap; - $cv = $gv->CV; - } - if ($debug_cv) { - warn sprintf("saving extra CV &%s::%s (0x%x) from GV 0x%x\n", - $gv->STASH->NAME, $name, $$cv, $$gv); - } - my $package=$gv->STASH->NAME; - # This seems to undo all the ->isa and prefix stuff we do below - # so disable again for now - if (0 && ! grep(/^$package$/,@unused_sub_packages)){ - warn sprintf("omitting cv in superclass %s", $gv->STASH->NAME) - if $debug_cv; - return ; +sub B::GV::savecv +{ + my $gv = shift; + my $package=$gv->STASH->NAME; + my $name = $gv->NAME; + my $cv = $gv->CV; + my $sv = $gv->SV; + my $av = $gv->AV; + my $hv = $gv->HV; + + # We may be looking at this package just because it is a branch in the + # symbol table which is on the path to a package which we need to save + # e.g. this is 'Getopt' and we need to save 'Getopt::Long' + # + return unless ($unused_sub_packages{$package}); + return unless ($$cv || $$av || $$sv || $$hv); + $gv->save; +} + +sub mark_package +{ + my $package = shift; + unless ($unused_sub_packages{$package}) + { + no strict 'refs'; + $unused_sub_packages{$package} = 1; + if (defined @{$package.'::ISA'}) + { + foreach my $isa (@{$package.'::ISA'}) + { + if ($isa eq 'DynaLoader') + { + unless (defined(&{$package.'::bootstrap'})) + { + warn "Forcing bootstrap of $package\n"; + eval { $package->bootstrap }; + } + } +# else + { + unless ($unused_sub_packages{$isa}) + { + warn "$isa saved (it is in $package\'s \@ISA)\n"; + mark_package($isa); + } + } } - $gv->save; } - elsif ($name eq 'ISA') - { - $gv->save; - } - + } + return 1; +} + +sub should_save +{ + no strict qw(vars refs); + my $package = shift; + $package =~ s/::$//; + return $unused_sub_packages{$package} = 0 if ($package =~ /::::/); # skip ::::ISA::CACHE etc. + # warn "Considering $package\n";#debug + foreach my $u (grep($unused_sub_packages{$_},keys %unused_sub_packages)) + { + # If this package is a prefix to something we are saving, traverse it + # but do not mark it for saving if it is not already + # e.g. to get to Getopt::Long we need to traverse Getopt but need + # not save Getopt + return 1 if ($u =~ /^$package\:\:/); + } + if (exists $unused_sub_packages{$package}) + { + # warn "Cached $package is ".$unused_sub_packages{$package}."\n"; + delete_unsaved_hashINC($package) unless $unused_sub_packages{$package} ; + return $unused_sub_packages{$package}; + } + # Omit the packages which we use (and which cause grief + # because of fancy "goto &$AUTOLOAD" stuff). + # XXX Surely there must be a nicer way to do this. + if ($package eq "FileHandle" || $package eq "Config" || + $package eq "SelectSaver" || $package =~/^(B|IO)::/) + { + delete_unsaved_hashINC($package); + return $unused_sub_packages{$package} = 0; + } + # Now see if current package looks like an OO class this is probably too strong. + foreach my $m (qw(new DESTROY TIESCALAR TIEARRAY TIEHASH TIEHANDLE)) + { + if ($package->can($m)) + { + warn "$package has method $m: saving package\n";#debug + return mark_package($package); + } + } + delete_unsaved_hashINC($package); + return $unused_sub_packages{$package} = 0; +} +sub delete_unsaved_hashINC{ + my $packname=shift; + $packname =~ s/\:\:/\//g; + $packname .= '.pm'; +# warn "deleting $packname" if $INC{$packname} ;# debug + delete $INC{$packname}; +} +sub walkpackages +{ + my ($symref, $recurse, $prefix) = @_; + my $sym; + my $ref; + no strict 'vars'; + local(*glob); + $prefix = '' unless defined $prefix; + while (($sym, $ref) = each %$symref) + { + *glob = $ref; + if ($sym =~ /::$/) + { + $sym = $prefix . $sym; + if ($sym ne "main::" && &$recurse($sym)) + { + walkpackages(\%glob, $recurse, $sym); + } + } + } } +sub save_unused_subs +{ + no strict qw(refs); + &descend_marked_unused; + warn "Prescan\n"; + walkpackages(\%{"main::"}, sub { should_save($_[0]); return 1 }); + warn "Saving methods\n"; + walksymtable(\%{"main::"}, "savecv", \&should_save); +} -sub save_unused_subs { - my %search_pack; - map { $search_pack{$_} = 1 } @_; - @unused_sub_packages=@_; - no strict qw(vars refs); - walksymtable(\%{"main::"}, "savecv", sub { - my $package = shift; - $package =~ s/::$//; - return 0 if ($package =~ /::::/); # skip ::::ISA::CACHE etc. - #warn "Considering $package\n";#debug - return 1 if exists $search_pack{$package}; - #sub try for a partial match - if (grep(/^$package\:\:/,@unused_sub_packages)){ - return 1; - } - #warn " (nothing explicit)\n";#debug - # Omit the packages which we use (and which cause grief - # because of fancy "goto &$AUTOLOAD" stuff). - # XXX Surely there must be a nicer way to do this. - if ($package eq "FileHandle" - || $package eq "Config" - || $package eq "SelectSaver") { - return 0; - } - foreach my $u (keys %search_pack) { - if ($package =~ /^${u}::/) { - warn "$package starts with $u\n"; - return 1 - } - if ($package->isa($u)) { - warn "$package isa $u\n"; - return 1 - } - return 1 if $package->isa($u); - } - foreach my $m (qw(new DESTROY TIESCALAR TIEARRAY TIEHASH)) { - if (defined(&{$package."::$m"})) { - warn "$package has method $m: -u$package assumed\n";#debug - push @unused_sub_package, $package; - return 1; - } - } - return 0; - }); +sub save_context +{ + my $curpad_nam = (comppadlist->ARRAY)[0]->save; + my $curpad_sym = (comppadlist->ARRAY)[1]->save; + my $inc_hv = svref_2object(\%INC)->save; + my $inc_av = svref_2object(\@INC)->save; + my $amagic_generate= amagic_generation; + $init->add( "PL_curpad = AvARRAY($curpad_sym);", + "GvHV(PL_incgv) = $inc_hv;", + "GvAV(PL_incgv) = $inc_av;", + "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));", + "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));", + "PL_amagic_generation= $amagic_generate;" ); } +sub descend_marked_unused { + foreach my $pack (keys %unused_sub_packages) + { + mark_package($pack); + } +} + sub save_main { + warn "Starting compile\n"; warn "Walking tree\n"; - my $curpad_nam = (comppadlist->ARRAY)[0]->save; - my $curpad_sym = (comppadlist->ARRAY)[1]->save; - my $init_av = init_av->save; - my $inc_hv = svref_2object(\%INC)->save; - my $inc_av = svref_2object(\@INC)->save; + seek(STDOUT,0,0); #exclude print statements in BEGIN{} into output walkoptree(main_root, "save"); warn "done main optree, walking symtable for extras\n" if $debug_cv; - save_unused_subs(@unused_sub_packages); - + save_unused_subs(); + my $init_av = init_av->save; $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}), sprintf("PL_main_start = s\\_%x;", ${main_start()}), - "PL_curpad = AvARRAY($curpad_sym);", - "PL_initav = $init_av;", - "GvHV(PL_incgv) = $inc_hv;", - "GvAV(PL_incgv) = $inc_av;", - "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));", - "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));"); + "PL_initav = (AV *) $init_av;"); + save_context(); warn "Writing output\n"; output_boilerplate(); print "\n"; @@ -1168,7 +1432,7 @@ sub save_main { sub init_sections { my @sections = (init => \$init, decl => \$decl, sym => \$symsect, binop => \$binopsect, condop => \$condopsect, - cop => \$copsect, cvop => \$cvopsect, gvop => \$gvopsect, + cop => \$copsect, padop => \$padopsect, listop => \$listopsect, logop => \$logopsect, loop => \$loopsect, op => \$opsect, pmop => \$pmopsect, pvop => \$pvopsect, svop => \$svopsect, unop => \$unopsect, @@ -1177,11 +1441,17 @@ sub init_sections { xpviv => \$xpvivsect, xpvnv => \$xpvnvsect, xpvmg => \$xpvmgsect, xpvlv => \$xpvlvsect, xrv => \$xrvsect, xpvbm => \$xpvbmsect, - xpvio => \$xpviosect, bootstrap => \$bootstrap); + xpvio => \$xpviosect); my ($name, $sectref); while (($name, $sectref) = splice(@sections, 0, 2)) { - $$sectref = new B::Section $name, \%symtable, 0; + $$sectref = new B::C::Section $name, \%symtable, 0; } +} + +sub mark_unused +{ + my ($arg,$val) = @_; + $unused_sub_packages{$arg} = $val; } sub compile { @@ -1226,7 +1496,7 @@ sub compile { $verbose = 1; } elsif ($opt eq "u") { $arg ||= shift @options; - push(@unused_sub_packages, $arg); + mark_unused($arg,undef); } elsif ($opt eq "f") { $arg ||= shift @options; if ($arg eq "cog") { @@ -1241,6 +1511,8 @@ sub compile { # Optimisations for -O1 $pv_copy_on_grow = 1; } + } elsif ($opt eq "l") { + $max_string_len = $arg; } } init_sections(); @@ -1356,6 +1628,15 @@ No copy-on-grow. Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>. Currently, B<-O1> and higher set B<-fcog>. +=item B<-llimit> + +Some C compilers impose an arbitrary limit on the length of string +constants (e.g. 2048 characters for Microsoft Visual C++). The +B<-llimit> options tells the C backend not to generate string literals +exceeding that limit. + +=back + =head1 EXAMPLES perl -MO=C,-ofoo.c foo.pl @@ -1365,7 +1646,7 @@ Note that C lives in the C subdirectory of your perl library directory. The utility called C may also be used to help make use of this compiler. - perl -MO=C,-v,-DcA bar.pl > /dev/null + perl -MO=C,-v,-DcA,-l2048 bar.pl > /dev/null =head1 BUGS diff --git a/gnu/usr.bin/perl/ext/B/B/CC.pm b/gnu/usr.bin/perl/ext/B/B/CC.pm index d200d70f1ae..c5ca2a3df5b 100644 --- a/gnu/usr.bin/perl/ext/B/B/CC.pm +++ b/gnu/usr.bin/perl/ext/B/B/CC.pm @@ -6,36 +6,22 @@ # License or the Artistic License, as specified in the README file. # package B::CC; +use Config; use strict; use B qw(main_start main_root class comppadlist peekop svref_2object - timing_info); -use B::C qw(save_unused_subs objsym init_sections + timing_info init_av sv_undef amagic_generation + OPf_WANT_LIST OPf_WANT OPf_MOD OPf_STACKED OPf_SPECIAL + OPpASSIGN_BACKWARDS OPpLVAL_INTRO OPpDEREF_AV OPpDEREF_HV + OPpDEREF OPpFLIP_LINENUM G_ARRAY G_SCALAR + CXt_NULL CXt_SUB CXt_EVAL CXt_LOOP CXt_SUBST CXt_BLOCK + ); +use B::C qw(save_unused_subs objsym init_sections mark_unused output_all output_boilerplate output_main); use B::Bblock qw(find_leaders); use B::Stackobj qw(:types :flags); # These should probably be elsewhere # Flags for $op->flags -sub OPf_LIST () { 1 } -sub OPf_KNOW () { 2 } -sub OPf_MOD () { 32 } -sub OPf_STACKED () { 64 } -sub OPf_SPECIAL () { 128 } -# op-specific flags for $op->private -sub OPpASSIGN_BACKWARDS () { 64 } -sub OPpLVAL_INTRO () { 128 } -sub OPpDEREF_AV () { 32 } -sub OPpDEREF_HV () { 64 } -sub OPpDEREF () { OPpDEREF_AV|OPpDEREF_HV } -sub OPpFLIP_LINENUM () { 64 } -sub G_ARRAY () { 1 } -# cop.h -sub CXt_NULL () { 0 } -sub CXt_SUB () { 1 } -sub CXt_EVAL () { 2 } -sub CXt_LOOP () { 3 } -sub CXt_SUBST () { 4 } -sub CXt_BLOCK () { 5 } my $module; # module name (when compiled with -m) my %done; # hash keyed by $$op of leaders of basic blocks @@ -66,6 +52,9 @@ my %skip_stack; # Hash of PP names which don't need write_back_stack my %skip_lexicals; # Hash of PP names which don't need write_back_lexicals my %skip_invalidate; # Hash of PP names which don't need invalidate_lexicals my %ignore_op; # Hash of ops which do nothing except returning op_next +my %need_curcop; # Hash of ops which need PL_curcop + +my %lexstate; #state of padsvs at the start of a bblock BEGIN { foreach (qw(pp_scalar pp_regcmaybe pp_lineseq pp_scope pp_null)) { @@ -73,11 +62,6 @@ BEGIN { } } -my @unused_sub_packages; # list of packages (given by -u options) to search - # explicitly and save every sub we find there, even - # if apparently unused (could be only referenced from - # an eval "" or from a $SIG{FOO} = "bar"). - my ($module_name); my ($debug_op, $debug_stack, $debug_cxstack, $debug_pad, $debug_runtime, $debug_shadow, $debug_queue, $debug_lineno, $debug_timings); @@ -111,12 +95,17 @@ sub init_hash { map { $_ => 1 } @_ } # %skip_lexicals = init_hash qw(pp_enter pp_enterloop); %skip_invalidate = init_hash qw(pp_enter pp_enterloop); +%need_curcop = init_hash qw(pp_rv2gv pp_bless pp_repeat pp_sort pp_caller + pp_reset pp_rv2cv pp_entereval pp_require pp_dofile + pp_entertry pp_enterloop pp_enteriter pp_entersub + pp_enter pp_method); sub debug { if ($debug_runtime) { warn(@_); } else { - runtime(map { chomp; "/* $_ */"} @_); + my @tmp=@_; + runtime(map { chomp; "/* $_ */"} @tmp); } } @@ -139,7 +128,7 @@ sub output_runtime { print qq(#include "cc_runtime.h"\n); foreach $ppdata (@pp_list) { my ($name, $runtime, $declare) = @$ppdata; - print "\nstatic\nPP($name)\n{\n"; + print "\nstatic\nCCPP($name)\n{\n"; my ($type, $varlist, $line); while (($type, $varlist) = each %$declare) { print "\t$type ", join(", ", @$varlist), ";\n"; @@ -167,7 +156,7 @@ sub init_pp { declare("SV", "**svp"); map { declare("SV", "*$_") } qw(sv src dst left right); declare("MAGIC", "*mg"); - $decl->add("static OP * $ppname _((ARGSproto));"); + $decl->add("static OP * $ppname (pTHX);"); debug "init_pp: $ppname\n" if $debug_queue; } @@ -200,7 +189,7 @@ sub top_int { @stack ? $stack[-1]->as_int : "TOPi" } sub top_double { @stack ? $stack[-1]->as_double : "TOPn" } sub top_numeric { @stack ? $stack[-1]->as_numeric : "TOPn" } sub top_sv { @stack ? $stack[-1]->as_sv : "TOPs" } -sub top_bool { @stack ? $stack[-1]->as_numeric : "SvTRUE(TOPs)" } +sub top_bool { @stack ? $stack[-1]->as_bool : "SvTRUE(TOPs)" } sub pop_int { @stack ? (pop @stack)->as_int : "POPi" } sub pop_double { @stack ? (pop @stack)->as_double : "POPn" } @@ -208,7 +197,7 @@ sub pop_numeric { @stack ? (pop @stack)->as_numeric : "POPn" } sub pop_sv { @stack ? (pop @stack)->as_sv : "POPs" } sub pop_bool { if (@stack) { - return ((pop @stack)->as_numeric); + return ((pop @stack)->as_bool); } else { # Careful: POPs has an auto-decrement and SvTRUE evaluates # its argument more than once. @@ -228,6 +217,32 @@ sub write_back_lexicals { } } +sub save_or_restore_lexical_state { + my $bblock=shift; + unless( exists $lexstate{$bblock}){ + foreach my $lex (@pad) { + next unless ref($lex); + ${$lexstate{$bblock}}{$lex->{iv}} = $lex->{flags} ; + } + } + else { + foreach my $lex (@pad) { + next unless ref($lex); + my $old_flags=${$lexstate{$bblock}}{$lex->{iv}} ; + next if ( $old_flags eq $lex->{flags}); + if (($old_flags & VALID_SV) && !($lex->{flags} & VALID_SV)){ + $lex->write_back; + } + if (($old_flags & VALID_DOUBLE) && !($lex->{flags} & VALID_DOUBLE)){ + $lex->load_double; + } + if (($old_flags & VALID_INT) && !($lex->{flags} & VALID_INT)){ + $lex->load_int; + } + } + } +} + sub write_back_stack { my $obj; return unless @stack; @@ -350,8 +365,9 @@ sub dopoptoloop { sub dopoptolabel { my $label = shift; my $cxix = $#cxstack; - while ($cxix >= 0 && $cxstack[$cxix]->{type} != CXt_LOOP - && $cxstack[$cxix]->{label} ne $label) { + while ($cxix >= 0 && + ($cxstack[$cxix]->{type} != CXt_LOOP || + $cxstack[$cxix]->{label} ne $label)) { $cxix--; } debug "dopoptolabel: returning $cxix" if $debug_cxstack; @@ -360,7 +376,7 @@ sub dopoptolabel { sub error { my $format = shift; - my $file = $curcop->[0]->filegv->SV->PV; + my $file = $curcop->[0]->file; my $line = $curcop->[0]->line; $errors++; if (@_) { @@ -416,12 +432,22 @@ sub load_pad { } $pad[$ix] = new B::Stackobj::Padsv ($type, $flags, $ix, "i_$name", "d_$name"); - declare("IV", $type == T_INT ? "i_$name = 0" : "i_$name"); - declare("double", $type == T_DOUBLE ? "d_$name = 0" : "d_$name"); + debug sprintf("PL_curpad[$ix] = %s\n", $pad[$ix]->peek) if $debug_pad; } } +sub declare_pad { + my $ix; + for ($ix = 1; $ix <= $#pad; $ix++) { + my $type = $pad[$ix]->{type}; + declare("IV", $type == T_INT ? + sprintf("%s=0",$pad[$ix]->{iv}):$pad[$ix]->{iv}) if $pad[$ix]->save_int; + declare("double", $type == T_DOUBLE ? + sprintf("%s = 0",$pad[$ix]->{nv}):$pad[$ix]->{nv} )if $pad[$ix]->save_double; + + } +} # # Debugging stuff # @@ -461,7 +487,7 @@ sub doop { sub gimme { my $op = shift; my $flags = $op->flags; - return (($flags & OPf_KNOW) ? ($flags & OPf_LIST) : "dowantarray()"); + return (($flags & OPf_WANT) ? (($flags & OPf_WANT)== OPf_WANT_LIST? G_ARRAY:G_SCALAR) : "dowantarray()"); } # @@ -476,10 +502,12 @@ sub pp_null { sub pp_stub { my $op = shift; my $gimme = gimme($op); - if ($gimme != 1) { + if ($gimme != G_ARRAY) { + my $obj= new B::Stackobj::Const(sv_undef); + push(@stack, $obj); # XXX Change to push a constant sv_undef Stackobj onto @stack - write_back_stack(); - runtime("if ($gimme != G_ARRAY) XPUSHs(&PL_sv_undef);"); + #write_back_stack(); + #runtime("if ($gimme != G_ARRAY) XPUSHs(&PL_sv_undef);"); } return $op->next; } @@ -499,8 +527,10 @@ sub pp_and { if (@stack >= 1) { my $bool = pop_bool(); write_back_stack(); - runtime(sprintf("if (!$bool) goto %s;", label($next))); + save_or_restore_lexical_state($$next); + runtime(sprintf("if (!$bool) {XPUSHs(&PL_sv_no); goto %s;}", label($next))); } else { + save_or_restore_lexical_state($$next); runtime(sprintf("if (!%s) goto %s;", top_bool(), label($next)), "*sp--;"); } @@ -513,11 +543,13 @@ sub pp_or { reload_lexicals(); unshift(@bblock_todo, $next); if (@stack >= 1) { - my $obj = pop @stack; + my $bool = pop_bool @stack; write_back_stack(); - runtime(sprintf("if (%s) { XPUSHs(%s); goto %s; }", - $obj->as_numeric, $obj->as_sv, label($next))); + save_or_restore_lexical_state($$next); + runtime(sprintf("if (%s) { XPUSHs(&PL_sv_yes); goto %s; }", + $bool, label($next))); } else { + save_or_restore_lexical_state($$next); runtime(sprintf("if (%s) goto %s;", top_bool(), label($next)), "*sp--;"); } @@ -526,13 +558,14 @@ sub pp_or { sub pp_cond_expr { my $op = shift; - my $false = $op->false; + my $false = $op->next; unshift(@bblock_todo, $false); reload_lexicals(); my $bool = pop_bool(); write_back_stack(); + save_or_restore_lexical_state($$false); runtime(sprintf("if (!$bool) goto %s;", label($false))); - return $op->true; + return $op->other; } sub pp_padsv { @@ -555,9 +588,16 @@ sub pp_padsv { sub pp_const { my $op = shift; my $sv = $op->sv; - my $obj = $constobj{$$sv}; - if (!defined($obj)) { - $obj = $constobj{$$sv} = new B::Stackobj::Const ($sv); + my $obj; + # constant could be in the pad (under useithreads) + if ($$sv) { + $obj = $constobj{$$sv}; + if (!defined($obj)) { + $obj = $constobj{$$sv} = new B::Stackobj::Const ($sv); + } + } + else { + $obj = $pad[$op->targ]; } push(@stack, $obj); return $op->next; @@ -567,7 +607,7 @@ sub pp_nextstate { my $op = shift; $curcop->load($op); @stack = (); - debug(sprintf("%s:%d\n", $op->filegv->SV->PV, $op->line)) if $debug_lineno; + debug(sprintf("%s:%d\n", $op->file, $op->line)) if $debug_lineno; runtime("TAINT_NOT;") unless $omit_taint; runtime("sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;"); if ($freetmps_each_bblock || $freetmps_each_loop) { @@ -584,18 +624,58 @@ sub pp_dbstate { return default_pp($op); } -sub pp_rv2gv { $curcop->write_back; default_pp(@_) } -sub pp_bless { $curcop->write_back; default_pp(@_) } -sub pp_repeat { $curcop->write_back; default_pp(@_) } +#default_pp will handle this: +#sub pp_bless { $curcop->write_back; default_pp(@_) } +#sub pp_repeat { $curcop->write_back; default_pp(@_) } # The following subs need $curcop->write_back if we decide to support arybase: # pp_pos, pp_substr, pp_index, pp_rindex, pp_aslice, pp_lslice, pp_splice -sub pp_sort { $curcop->write_back; default_pp(@_) } -sub pp_caller { $curcop->write_back; default_pp(@_) } -sub pp_reset { $curcop->write_back; default_pp(@_) } +#sub pp_caller { $curcop->write_back; default_pp(@_) } +#sub pp_reset { $curcop->write_back; default_pp(@_) } + +sub pp_rv2gv{ + my $op =shift; + $curcop->write_back; + write_back_lexicals() unless $skip_lexicals{$ppname}; + write_back_stack() unless $skip_stack{$ppname}; + my $sym=doop($op); + if ($op->private & OPpDEREF) { + $init->add(sprintf("((UNOP *)$sym)->op_first = $sym;")); + $init->add(sprintf("((UNOP *)$sym)->op_type = %d;", + $op->first->type)); + } + return $op->next; +} +sub pp_sort { + my $op = shift; + my $ppname = $op->ppaddr; + if ( $op->flags & OPf_SPECIAL && $op->flags & OPf_STACKED){ + #this indicates the sort BLOCK Array case + #ugly surgery required. + my $root=$op->first->sibling->first; + my $start=$root->first; + $op->first->save; + $op->first->sibling->save; + $root->save; + my $sym=$start->save; + my $fakeop=cc_queue("pp_sort".$$op,$root,$start); + $init->add(sprintf("(%s)->op_next=%s;",$sym,$fakeop)); + } + $curcop->write_back; + write_back_lexicals(); + write_back_stack(); + doop($op); + return $op->next; +} sub pp_gv { my $op = shift; - my $gvsym = $op->gv->save; + my $gvsym; + if ($Config{useithreads}) { + $gvsym = $pad[$op->padix]->as_sv; + } + else { + $gvsym = $op->gv->save; + } write_back_stack(); runtime("XPUSHs((SV*)$gvsym);"); return $op->next; @@ -603,7 +683,13 @@ sub pp_gv { sub pp_gvsv { my $op = shift; - my $gvsym = $op->gv->save; + my $gvsym; + if ($Config{useithreads}) { + $gvsym = $pad[$op->padix]->as_sv; + } + else { + $gvsym = $op->gv->save; + } write_back_stack(); if ($op->private & OPpLVAL_INTRO) { runtime("XPUSHs(save_scalar($gvsym));"); @@ -615,7 +701,13 @@ sub pp_gvsv { sub pp_aelemfast { my $op = shift; - my $gvsym = $op->gv->save; + my $gvsym; + if ($Config{useithreads}) { + $gvsym = $pad[$op->padix]->as_sv; + } + else { + $gvsym = $op->gv->save; + } my $ix = $op->private; my $flag = $op->flags & OPf_MOD; write_back_stack(); @@ -666,11 +758,15 @@ sub numeric_binop { } } else { if ($force_int) { + my $rightruntime = new B::Pseudoreg ("IV", "riv"); + runtime(sprintf("$$rightruntime = %s;",$right)); runtime(sprintf("sv_setiv(TOPs, %s);", - &$operator("TOPi", $right))); + &$operator("TOPi", $$rightruntime))); } else { + my $rightruntime = new B::Pseudoreg ("double", "rnv"); + runtime(sprintf("$$rightruntime = %s;",$right)); runtime(sprintf("sv_setnv(TOPs, %s);", - &$operator("TOPn", $right))); + &$operator("TOPn",$$rightruntime))); } } } else { @@ -694,6 +790,60 @@ sub numeric_binop { return $op->next; } +sub pp_ncmp { + my ($op) = @_; + if ($op->flags & OPf_STACKED) { + my $right = pop_numeric(); + if (@stack >= 1) { + my $left = top_numeric(); + runtime sprintf("if (%s > %s){",$left,$right); + $stack[-1]->set_int(1); + $stack[-1]->write_back(); + runtime sprintf("}else if (%s < %s ) {",$left,$right); + $stack[-1]->set_int(-1); + $stack[-1]->write_back(); + runtime sprintf("}else if (%s == %s) {",$left,$right); + $stack[-1]->set_int(0); + $stack[-1]->write_back(); + runtime sprintf("}else {"); + $stack[-1]->set_sv("&PL_sv_undef"); + runtime "}"; + } else { + my $rightruntime = new B::Pseudoreg ("double", "rnv"); + runtime(sprintf("$$rightruntime = %s;",$right)); + runtime sprintf(qq/if ("TOPn" > %s){/,$rightruntime); + runtime sprintf("sv_setiv(TOPs,1);"); + runtime sprintf(qq/}else if ( "TOPn" < %s ) {/,$$rightruntime); + runtime sprintf("sv_setiv(TOPs,-1);"); + runtime sprintf(qq/} else if ("TOPn" == %s) {/,$$rightruntime); + runtime sprintf("sv_setiv(TOPs,0);"); + runtime sprintf(qq/}else {/); + runtime sprintf("sv_setiv(TOPs,&PL_sv_undef;"); + runtime "}"; + } + } else { + my $targ = $pad[$op->targ]; + my $right = new B::Pseudoreg ("double", "rnv"); + my $left = new B::Pseudoreg ("double", "lnv"); + runtime(sprintf("$$right = %s; $$left = %s;", + pop_numeric(), pop_numeric)); + runtime sprintf("if (%s > %s){",$$left,$$right); + $targ->set_int(1); + $targ->write_back(); + runtime sprintf("}else if (%s < %s ) {",$$left,$$right); + $targ->set_int(-1); + $targ->write_back(); + runtime sprintf("}else if (%s == %s) {",$$left,$$right); + $targ->set_int(0); + $targ->write_back(); + runtime sprintf("}else {"); + $targ->set_sv("&PL_sv_undef"); + runtime "}"; + push(@stack, $targ); + } + return $op->next; +} + sub sv_binop { my ($op, $operator, $flags) = @_; if ($op->flags & OPf_STACKED) { @@ -789,7 +939,6 @@ BEGIN { my $modulo_op = infix_op("%"); my $lshift_op = infix_op("<<"); my $rshift_op = infix_op(">>"); - my $ncmp_op = sub { "($_[0] > $_[1] ? 1 : ($_[0] < $_[1]) ? -1 : 0)" }; my $scmp_op = prefix_op("sv_cmp"); my $seq_op = prefix_op("sv_eq"); my $sne_op = prefix_op("!sv_eq"); @@ -808,12 +957,11 @@ BEGIN { # XXX The standard perl PP code has extra handling for # some special case arguments of these operators. # - sub pp_add { numeric_binop($_[0], $plus_op, INTS_CLOSED) } - sub pp_subtract { numeric_binop($_[0], $minus_op, INTS_CLOSED) } - sub pp_multiply { numeric_binop($_[0], $multiply_op, INTS_CLOSED) } + sub pp_add { numeric_binop($_[0], $plus_op) } + sub pp_subtract { numeric_binop($_[0], $minus_op) } + sub pp_multiply { numeric_binop($_[0], $multiply_op) } sub pp_divide { numeric_binop($_[0], $divide_op) } sub pp_modulo { int_binop($_[0], $modulo_op) } # differs from perl's - sub pp_ncmp { numeric_binop($_[0], $ncmp_op, INT_RESULT) } sub pp_left_shift { int_binop($_[0], $lshift_op) } sub pp_right_shift { int_binop($_[0], $rshift_op) } @@ -857,7 +1005,7 @@ sub pp_sassign { ($src, $dst) = ($dst, $src) if $backwards; my $type = $src->{type}; if ($type == T_INT) { - $dst->set_int($src->as_int); + $dst->set_int($src->as_int,$src->{flags} & VALID_UNSIGNED); } elsif ($type == T_DOUBLE) { $dst->set_numeric($src->as_numeric); } else { @@ -870,7 +1018,11 @@ sub pp_sassign { my $type = $src->{type}; runtime("if (PL_tainting && PL_tainted) TAINT_NOT;"); if ($type == T_INT) { - runtime sprintf("sv_setiv(TOPs, %s);", $src->as_int); + if ($src->{flags} & VALID_UNSIGNED){ + runtime sprintf("sv_setuv(TOPs, %s);", $src->as_int); + }else{ + runtime sprintf("sv_setiv(TOPs, %s);", $src->as_int); + } } elsif ($type == T_DOUBLE) { runtime sprintf("sv_setnv(TOPs, %s);", $src->as_double); } else { @@ -887,7 +1039,7 @@ sub pp_sassign { } elsif ($type == T_DOUBLE) { $dst->set_double("SvNV(sv)"); } else { - runtime("SvSetSV($dst->{sv}, sv);"); + runtime("SvSetMagicSV($dst->{sv}, sv);"); $dst->invalidate; } } @@ -922,6 +1074,7 @@ sub pp_preinc { return $op->next; } + sub pp_pushmark { my $op = shift; write_back_stack(); @@ -933,7 +1086,7 @@ sub pp_list { my $op = shift; write_back_stack(); my $gimme = gimme($op); - if ($gimme == 1) { # sic + if ($gimme == G_ARRAY) { # sic runtime("POPMARK;"); # need this even though not a "full" pp_list } else { runtime("PP_LIST($gimme);"); @@ -943,16 +1096,31 @@ sub pp_list { sub pp_entersub { my $op = shift; + $curcop->write_back; write_back_lexicals(REGISTER|TEMPORARY); write_back_stack(); my $sym = doop($op); runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){"); - runtime("PL_op = (*PL_op->op_ppaddr)(ARGS);"); + runtime("PL_op = (*PL_op->op_ppaddr)(aTHX);"); runtime("SPAGAIN;}"); $know_op = 0; invalidate_lexicals(REGISTER|TEMPORARY); return $op->next; } +sub pp_formline { + my $op = shift; + my $ppname = $op->ppaddr; + write_back_lexicals() unless $skip_lexicals{$ppname}; + write_back_stack() unless $skip_stack{$ppname}; + my $sym=doop($op); + # See comment in pp_grepwhile to see why! + $init->add("((LISTOP*)$sym)->op_first = $sym;"); + runtime("if (PL_op == ((LISTOP*)($sym))->op_first){"); + save_or_restore_lexical_state(${$op->first}); + runtime( sprintf("goto %s;",label($op->first))); + runtime("}"); + return $op->next; +} sub pp_goto{ @@ -969,7 +1137,16 @@ sub pp_enterwrite { my $op = shift; pp_entersub($op); } - +sub pp_leavesub{ + my $op = shift; + write_back_lexicals() unless $skip_lexicals{$ppname}; + write_back_stack() unless $skip_stack{$ppname}; + runtime("if (PL_curstackinfo->si_type == PERLSI_SORT){"); + runtime("\tPUTBACK;return 0;"); + runtime("}"); + doop($op); + return $op->next; +} sub pp_leavewrite { my $op = shift; write_back_lexicals(REGISTER|TEMPORARY); @@ -977,7 +1154,7 @@ sub pp_leavewrite { my $sym = doop($op); # XXX Is this the right way to distinguish between it returning # CvSTART(cv) (via doform) and pop_return()? - runtime("if (PL_op) PL_op = (*PL_op->op_ppaddr)(ARGS);"); + #runtime("if (PL_op) PL_op = (*PL_op->op_ppaddr)(aTHX);"); runtime("SPAGAIN;"); $know_op = 0; invalidate_lexicals(REGISTER|TEMPORARY); @@ -991,6 +1168,7 @@ sub doeval { write_back_stack(); my $sym = loadop($op); my $ppaddr = $op->ppaddr; + #runtime(qq/printf("$ppaddr type eval\n");/); runtime("PP_EVAL($ppaddr, ($sym)->op_next);"); $know_op = 1; invalidate_lexicals(REGISTER|TEMPORARY); @@ -998,9 +1176,24 @@ sub doeval { } sub pp_entereval { doeval(@_) } -sub pp_require { doeval(@_) } sub pp_dofile { doeval(@_) } +#pp_require is protected by pp_entertry, so no protection for it. +sub pp_require { + my $op = shift; + $curcop->write_back; + write_back_lexicals(REGISTER|TEMPORARY); + write_back_stack(); + my $sym = doop($op); + runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){"); + runtime("PL_op = (*PL_op->op_ppaddr)(ARGS);"); + runtime("SPAGAIN;}"); + $know_op = 1; + invalidate_lexicals(REGISTER|TEMPORARY); + return $op->next; +} + + sub pp_entertry { my $op = shift; $curcop->write_back; @@ -1008,12 +1201,19 @@ sub pp_entertry { write_back_stack(); my $sym = doop($op); my $jmpbuf = sprintf("jmpbuf%d", $jmpbuf_ix++); - declare("Sigjmp_buf", $jmpbuf); + declare("JMPENV", $jmpbuf); runtime(sprintf("PP_ENTERTRY(%s,%s);", $jmpbuf, label($op->other->next))); invalidate_lexicals(REGISTER|TEMPORARY); return $op->next; } +sub pp_leavetry{ + my $op=shift; + default_pp($op); + runtime("PP_LEAVETRY;"); + return $op->next; +} + sub pp_grepstart { my $op = shift; if ($need_freetmps && $freetmps_each_loop) { @@ -1021,7 +1221,14 @@ sub pp_grepstart { $need_freetmps = 0; } write_back_stack(); - doop($op); + my $sym= doop($op); + my $next=$op->next; + $next->save; + my $nexttonext=$next->next; + $nexttonext->save; + save_or_restore_lexical_state($$nexttonext); + runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;", + label($nexttonext))); return $op->next->other; } @@ -1032,7 +1239,16 @@ sub pp_mapstart { $need_freetmps = 0; } write_back_stack(); - doop($op); + # pp_mapstart can return either op_next->op_next or op_next->op_other and + # we need to be able to distinguish the two at runtime. + my $sym= doop($op); + my $next=$op->next; + $next->save; + my $nexttonext=$next->next; + $nexttonext->save; + save_or_restore_lexical_state($$nexttonext); + runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;", + label($nexttonext))); return $op->next->other; } @@ -1049,6 +1265,7 @@ sub pp_grepwhile { # around that, we hack op_next to be our own op (purely because we # know it's a non-NULL pointer and can't be the same as op_other). $init->add("((LOGOP*)$sym)->op_next = $sym;"); + save_or_restore_lexical_state($$next); runtime(sprintf("if (PL_op == ($sym)->op_next) goto %s;", label($next))); $know_op = 0; return $op->other; @@ -1063,7 +1280,7 @@ sub pp_return { write_back_lexicals(REGISTER|TEMPORARY); write_back_stack(); doop($op); - runtime("PUTBACK;", "return (PL_op)?PL_op->op_next:0;"); + runtime("PUTBACK;", "return PL_op;"); $know_op = 0; return $op->next; } @@ -1077,30 +1294,31 @@ sub nyi { sub pp_range { my $op = shift; my $flags = $op->flags; - if (!($flags & OPf_KNOW)) { + if (!($flags & OPf_WANT)) { error("context of range unknown at compile-time"); } write_back_lexicals(); write_back_stack(); - if (!($flags & OPf_LIST)) { + unless (($flags & OPf_WANT)== OPf_WANT_LIST) { # We need to save our UNOP structure since pp_flop uses # it to find and adjust out targ. We don't need it ourselves. $op->save; + save_or_restore_lexical_state(${$op->other}); runtime sprintf("if (SvTRUE(PL_curpad[%d])) goto %s;", - $op->targ, label($op->false)); - unshift(@bblock_todo, $op->false); + $op->targ, label($op->other)); + unshift(@bblock_todo, $op->other); } - return $op->true; + return $op->next; } sub pp_flip { my $op = shift; my $flags = $op->flags; - if (!($flags & OPf_KNOW)) { + if (!($flags & OPf_WANT)) { error("context of flip unknown at compile-time"); } - if ($flags & OPf_LIST) { - return $op->first->false; + if (($flags & OPf_WANT)==OPf_WANT_LIST) { + return $op->first->other; } write_back_lexicals(); write_back_stack(); @@ -1116,9 +1334,10 @@ sub pp_flip { if ($op->flags & OPf_SPECIAL) { runtime("sv_setiv(PL_curpad[$ix], 1);"); } else { + save_or_restore_lexical_state(${$op->first->other}); runtime("\tsv_setiv(PL_curpad[$ix], 0);", "\tsp--;", - sprintf("\tgoto %s;", label($op->first->false))); + sprintf("\tgoto %s;", label($op->first->other))); } runtime("}", qq{sv_setpv(PL_curpad[$ix], "");}, @@ -1187,6 +1406,7 @@ sub pp_next { default_pp($op); my $nextop = $cxstack[$cxix]->{nextop}; push(@bblock_todo, $nextop); + save_or_restore_lexical_state($$nextop); runtime(sprintf("goto %s;", label($nextop))); return $op->next; } @@ -1210,6 +1430,7 @@ sub pp_redo { default_pp($op); my $redoop = $cxstack[$cxix]->{redoop}; push(@bblock_todo, $redoop); + save_or_restore_lexical_state($$redoop); runtime(sprintf("goto %s;", label($redoop))); return $op->next; } @@ -1238,6 +1459,7 @@ sub pp_last { default_pp($op); my $lastop = $cxstack[$cxix]->{lastop}->next; push(@bblock_todo, $lastop); + save_or_restore_lexical_state($$lastop); runtime(sprintf("goto %s;", label($lastop))); return $op->next; } @@ -1249,6 +1471,7 @@ sub pp_subst { my $sym = doop($op); my $replroot = $op->pmreplroot; if ($$replroot) { + save_or_restore_lexical_state($$replroot); runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplroot) goto %s;", $sym, label($replroot)); $op->pmreplstart->save; @@ -1264,11 +1487,12 @@ sub pp_substcont { write_back_stack(); doop($op); my $pmop = $op->other; - warn sprintf("substcont: op = %s, pmop = %s\n", - peekop($op), peekop($pmop));#debug -# my $pmopsym = objsym($pmop); + # warn sprintf("substcont: op = %s, pmop = %s\n", + # peekop($op), peekop($pmop));#debug +# my $pmopsym = objsym($pmop); my $pmopsym = $pmop->save; # XXX can this recurse? - warn "pmopsym = $pmopsym\n";#debug +# warn "pmopsym = $pmopsym\n";#debug + save_or_restore_lexical_state(${$pmop->pmreplstart}); runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplstart) goto %s;", $pmopsym, label($pmop->pmreplstart)); invalidate_lexicals(); @@ -1277,7 +1501,10 @@ sub pp_substcont { sub default_pp { my $op = shift; - my $ppname = $op->ppaddr; + my $ppname = "pp_" . $op->name; + if ($curcop and $need_curcop{$ppname}){ + $curcop->write_back; + } write_back_lexicals() unless $skip_lexicals{$ppname}; write_back_stack() unless $skip_stack{$ppname}; doop($op); @@ -1291,7 +1518,7 @@ sub default_pp { sub compile_op { my $op = shift; - my $ppname = $op->ppaddr; + my $ppname = "pp_" . $op->name; if (exists $ignore_op{$ppname}) { return $op->next; } @@ -1313,6 +1540,7 @@ sub compile_op { sub compile_bblock { my $op = shift; #warn "compile_bblock: ", peekop($op), "\n"; # debug + save_or_restore_lexical_state($$op); write_label($op); $know_op = 0; do { @@ -1326,15 +1554,26 @@ sub compile_bblock { sub cc { my ($name, $root, $start, @padlist) = @_; my $op; + if($done{$$start}){ + #warn "repeat=>".ref($start)."$name,\n";#debug + $decl->add(sprintf("#define $name %s",$done{$$start})); + return; + } init_pp($name); load_pad(@padlist); + %lexstate=(); B::Pseudoreg->new_scope; @cxstack = (); if ($debug_timings) { warn sprintf("Basic block analysis at %s\n", timing_info); } $leaders = find_leaders($root, $start); - @bblock_todo = ($start, values %$leaders); + my @leaders= keys %$leaders; + if ($#leaders > -1) { + @bblock_todo = ($start, values %$leaders) ; + } else{ + runtime("return PL_op?PL_op->op_next:0;"); + } if ($debug_timings) { warn sprintf("Compilation at %s\n", timing_info); } @@ -1344,7 +1583,7 @@ sub cc { next if !defined($op) || !$$op || $done{$$op}; #warn "...compiling it\n"; # debug do { - $done{$$op} = 1; + $done{$$op} = $name; $op = compile_bblock($op); if ($need_freetmps && $freetmps_each_bblock) { runtime("FREETMPS;"); @@ -1356,14 +1595,16 @@ sub cc { $need_freetmps = 0; } if (!$$op) { - runtime("PUTBACK;","return (PL_op)?PL_op->op_next:0;"); + runtime("PUTBACK;","return PL_op;"); } elsif ($done{$$op}) { + save_or_restore_lexical_state($$op); runtime(sprintf("goto %s;", label($op))); } } if ($debug_timings) { warn sprintf("Saving runtime at %s\n", timing_info); } + declare_pad(@padlist) ; save_runtime(); } @@ -1387,20 +1628,32 @@ sub cc_obj { sub cc_main { my @comppadlist = comppadlist->ARRAY; - my $curpad_nam = $comppadlist[0]->save; - my $curpad_sym = $comppadlist[1]->save; + my $curpad_nam = $comppadlist[0]->save; + my $curpad_sym = $comppadlist[1]->save; + my $init_av = init_av->save; my $start = cc_recurse("pp_main", main_root, main_start, @comppadlist); - save_unused_subs(@unused_sub_packages); + # Do save_unused_subs before saving inc_hv + save_unused_subs(); cc_recurse(); + my $inc_hv = svref_2object(\%INC)->save; + my $inc_av = svref_2object(\@INC)->save; + my $amagic_generate= amagic_generation; return if $errors; if (!defined($module)) { $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}), "PL_main_start = $start;", "PL_curpad = AvARRAY($curpad_sym);", + "PL_initav = (AV *) $init_av;", + "GvHV(PL_incgv) = $inc_hv;", + "GvAV(PL_incgv) = $inc_av;", "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));", - "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));"); + "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));", + "PL_amagic_generation= $amagic_generate;", + ); + } + seek(STDOUT,0,0); #prevent print statements from BEGIN{} into the output output_boilerplate(); print "\n"; output_all("perl_init"); @@ -1419,11 +1672,11 @@ XS(boot_$cmodule) perl_init(); ENTER; SAVETMPS; - SAVESPTR(PL_curpad); - SAVESPTR(PL_op); + SAVEVPTR(PL_curpad); + SAVEVPTR(PL_op); PL_curpad = AvARRAY($curpad_sym); PL_op = $start; - pp_main(ARGS); + pp_main(aTHX); FREETMPS; LEAVE; ST(0) = &PL_sv_yes; @@ -1459,7 +1712,7 @@ sub compile { $module_name = $arg; } elsif ($opt eq "u") { $arg ||= shift @options; - push(@unused_sub_packages, $arg); + mark_unused($arg,undef); } elsif ($opt eq "f") { $arg ||= shift @options; my $value = $arg !~ s/^no-//; @@ -1485,7 +1738,7 @@ sub compile { } elsif ($opt eq "m") { $arg ||= shift @options; $module = $arg; - push(@unused_sub_packages, $arg); + mark_unused($arg,undef); } elsif ($opt eq "p") { $arg ||= shift @options; $patchlevel = $arg; diff --git a/gnu/usr.bin/perl/ext/B/B/Debug.pm b/gnu/usr.bin/perl/ext/B/B/Debug.pm index 7754a5a8079..ae7a9733bcd 100644 --- a/gnu/usr.bin/perl/ext/B/B/Debug.pm +++ b/gnu/usr.bin/perl/ext/B/B/Debug.pm @@ -39,13 +39,6 @@ sub B::LOGOP::debug { printf "\top_other\t0x%x\n", ${$op->other}; } -sub B::CONDOP::debug { - my ($op) = @_; - $op->B::UNOP::debug(); - printf "\top_true\t0x%x\n", ${$op->true}; - printf "\top_false\t0x%x\n", ${$op->false}; -} - sub B::LISTOP::debug { my ($op) = @_; $op->B::BINOP::debug(); @@ -67,16 +60,15 @@ sub B::PMOP::debug { sub B::COP::debug { my ($op) = @_; $op->B::OP::debug(); - my ($filegv) = $op->filegv; - printf <<'EOT', $op->label, ${$op->stash}, $$filegv, $op->seq, $op->arybase, $op->line; + printf <<'EOT', $op->label, $op->stashpv, $op->file, $op->seq, $op->arybase, $op->line, ${$op->warnings}; cop_label %s - cop_stash 0x%x - cop_filegv 0x%x + cop_stashpv %s + cop_file %s cop_seq %d cop_arybase %d cop_line %d + cop_warnings 0x%x EOT - $filegv->debug; } sub B::SVOP::debug { @@ -92,11 +84,10 @@ sub B::PVOP::debug { printf "\top_pv\t\t0x%x\n", $op->pv; } -sub B::GVOP::debug { +sub B::PADOP::debug { my ($op) = @_; $op->B::OP::debug(); - printf "\top_gv\t\t0x%x\n", ${$op->gv}; - $op->gv->debug; + printf "\top_padix\t\t%ld\n", $op->padix; } sub B::CVOP::debug { @@ -184,14 +175,14 @@ sub B::CV::debug { my ($start) = $sv->START; my ($root) = $sv->ROOT; my ($padlist) = $sv->PADLIST; + my ($file) = $sv->FILE; my ($gv) = $sv->GV; - my ($filegv) = $sv->FILEGV; - printf <<'EOT', $$stash, $$start, $$root, $$gv, $$filegv, $sv->DEPTH, $padlist, ${$sv->OUTSIDE}; + printf <<'EOT', $$stash, $$start, $$root, $$gv, $file, $sv->DEPTH, $padlist, ${$sv->OUTSIDE}; STASH 0x%x START 0x%x ROOT 0x%x GV 0x%x - FILEGV 0x%x + FILE %s DEPTH %d PADLIST 0x%x OUTSIDE 0x%x @@ -199,7 +190,6 @@ EOT $start->debug if $start; $root->debug if $root; $gv->debug if $gv; - $filegv->debug if $filegv; $padlist->debug if $padlist; } @@ -226,7 +216,7 @@ sub B::GV::debug { my ($av) = $gv->AV; my ($cv) = $gv->CV; $gv->B::SV::debug; - printf <<'EOT', $gv->NAME, $gv->STASH->NAME, $gv->STASH, $$sv, $gv->GvREFCNT, $gv->FORM, $$av, ${$gv->HV}, ${$gv->EGV}, $$cv, $gv->CVGEN, $gv->LINE, $gv->FILEGV, $gv->GvFLAGS; + printf <<'EOT', $gv->NAME, $gv->STASH->NAME, $gv->STASH, $$sv, $gv->GvREFCNT, $gv->FORM, $$av, ${$gv->HV}, ${$gv->EGV}, $$cv, $gv->CVGEN, $gv->LINE, $gv->FILE, $gv->GvFLAGS; NAME %s STASH %s (0x%x) SV 0x%x @@ -238,7 +228,7 @@ sub B::GV::debug { CV 0x%x CVGEN %d LINE %d - FILEGV 0x%x + FILE %s GvFLAGS 0x%x EOT $sv->debug if $sv; @@ -253,6 +243,7 @@ sub B::SPECIAL::debug { sub compile { my $order = shift; + B::clearsym(); if ($order eq "exec") { return sub { walkoptree_exec(main_start, "debug") } } else { diff --git a/gnu/usr.bin/perl/ext/B/B/Deparse.pm b/gnu/usr.bin/perl/ext/B/B/Deparse.pm index 5e0bd1d3de7..cd53c112d8c 100644 --- a/gnu/usr.bin/perl/ext/B/B/Deparse.pm +++ b/gnu/usr.bin/perl/ext/B/B/Deparse.pm @@ -1,5 +1,5 @@ # B::Deparse.pm -# Copyright (c) 1998 Stephen McCamant. All rights reserved. +# Copyright (c) 1998, 1999 Stephen McCamant. All rights reserved. # This module is free software; you can redistribute and/or modify # it under the same terms as Perl itself. @@ -7,9 +7,17 @@ # but essentially none of his code remains. package B::Deparse; -use Carp 'cluck'; -use B qw(class main_root main_start main_cv svref_2object); -$VERSION = 0.56; +use Carp 'cluck', 'croak'; +use Config; +use B qw(class main_root main_start main_cv svref_2object opnumber + OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST + OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL + OPpLVAL_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE + OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY + SVf_IOK SVf_NOK SVf_ROK SVf_POK + PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE + PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED); +$VERSION = 0.59; use strict; # Changes between 0.50 and 0.51: @@ -26,17 +34,17 @@ use strict; # Changes between 0.51 and 0.52: # - added pp_threadsv (special variables under USE_THREADS) # - added documentation -# Changes between 0.52 and 0.53 +# Changes between 0.52 and 0.53: # - many changes adding precedence contexts and associativity # - added `-p' and `-s' output style options # - various other minor fixes -# Changes between 0.53 and 0.54 +# Changes between 0.53 and 0.54: # - added support for new `for (1..100)' optimization, # thanks to Gisle Aas -# Changes between 0.54 and 0.55 +# Changes between 0.54 and 0.55: # - added support for new qr// construct # - added support for new pp_regcreset OP -# Changes between 0.55 and 0.56 +# Changes between 0.55 and 0.56: # - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t # - fixed $# on non-lexicals broken in last big rewrite # - added temporary fix for change in opcode of OP_STRINGIFY @@ -50,17 +58,51 @@ use strict; # - print doubled rv2gv (a bug) as `*{*GV}' instead of illegal `**GV' # - added semicolons at the ends of blocks # - added -l `#line' declaration option -- fixes cmd/subval.t 27,28 +# Changes between 0.56 and 0.561: +# - fixed multiply-declared my var in pp_truncate (thanks to Sarathy) +# - used new B.pm symbolic constants (done by Nick Ing-Simmons) +# Changes between 0.561 and 0.57: +# - stylistic changes to symbolic constant stuff +# - handled scope in s///e replacement code +# - added unquote option for expanding "" into concats, etc. +# - split method and proto parts of pp_entersub into separate functions +# - various minor cleanups +# Changes after 0.57: +# - added parens in \&foo (patch by Albert Dvornik) +# Changes between 0.57 and 0.58: +# - fixed `0' statements that weren't being printed +# - added methods for use from other programs +# (based on patches from James Duncan and Hugo van der Sanden) +# - added -si and -sT to control indenting (also based on a patch from Hugo) +# - added -sv to print something else instead of '???' +# - preliminary version of utf8 tr/// handling +# Changes after 0.58: +# - uses of $op->ppaddr changed to new $op->name (done by Sarathy) +# - added support for Hugo's new OP_SETSTATE (like nextstate) +# Changes between 0.58 and 0.59 +# - added support for Chip's OP_METHOD_NAMED +# - added support for Ilya's OPpTARGET_MY optimization +# - elided arrows before `()' subscripts when possible # Todo: +# - finish tr/// changes +# - add option for even more parens (generalize \&foo change) # - {} around variables in strings ("${var}letters") # base/lex.t 25-27 # comp/term.t 11 -# - generate symbolic constants directly from core source # - left/right context +# - recognize `use utf8', `use integer', etc +# - treat top-level block specially for incremental output +# - interpret in high bit chars in string as utf8 \x{...} (when?) +# - copy comments (look at real text with $^P?) # - avoid semis in one-statement blocks # - associativity of &&=, ||=, ?: # - ',' => '=>' (auto-unquote?) # - break long lines ("\r" as discretionary break?) +# - configurable syntax highlighting: ANSI color, HTML, TeX, etc. +# - more style options: brace style, hex vs. octal, quotes, ... +# - print big ints as hex/octal instead of decimal (heuristic?) +# - handle `my $x if 0'? # - include values of variables (e.g. set in BEGIN) # - coordinate with Data::Dumper (both directions? see previous) # - version using op_next instead of op_first/sibling? @@ -103,7 +145,11 @@ use strict; # # parens: -p # linenums: -l +# unquote: -q # cuddle: ` ' or `\n', depending on -sC +# indent_size: -si +# use_tabs: -sT +# ex_const: -sv # A little explanation of how precedence contexts and associativity # work: @@ -182,13 +228,10 @@ sub next_todo { return "format $name =\n" . $self->deparse_format($ent->[1]->FORM). "\n"; } else { - return "sub $name " . - $self->deparse_sub($ent->[1]->CV); + return "sub $name " . $self->deparse_sub($ent->[1]->CV); } } -sub OPf_KIDS () { 4 } - sub walk_tree { my($op, $sub) = @_; $sub->($op); @@ -208,19 +251,20 @@ sub walk_sub { return if !$op or null $op; walk_tree($op, sub { my $op = shift; - if ($op->ppaddr eq "pp_gv") { - if ($op->next->ppaddr eq "pp_entersub") { - next if $self->{'subs_done'}{$ {$op->gv}}++; - next if class($op->gv->CV) eq "SPECIAL"; - $self->todo($op->gv, $op->gv->CV, 0); - $self->walk_sub($op->gv->CV); - } elsif ($op->next->ppaddr eq "pp_enterwrite" - or ($op->next->ppaddr eq "pp_rv2gv" - and $op->next->next->ppaddr eq "pp_enterwrite")) { - next if $self->{'forms_done'}{$ {$op->gv}}++; - next if class($op->gv->FORM) eq "SPECIAL"; - $self->todo($op->gv, $op->gv->FORM, 1); - $self->walk_sub($op->gv->FORM); + if ($op->name eq "gv") { + my $gv = $self->maybe_padgv($op); + if ($op->next->name eq "entersub") { + next if $self->{'subs_done'}{$$gv}++; + next if class($gv->CV) eq "SPECIAL"; + $self->todo($gv, $gv->CV, 0); + $self->walk_sub($gv->CV); + } elsif ($op->next->name eq "enterwrite" + or ($op->next->name eq "rv2gv" + and $op->next->next->name eq "enterwrite")) { + next if $self->{'forms_done'}{$$gv}++; + next if class($gv->FORM) eq "SPECIAL"; + $self->todo($gv, $gv->FORM, 1); + $self->walk_sub($gv->FORM); } } }); @@ -279,37 +323,57 @@ sub style_opts { while (length($opt = substr($opts, 0, 1))) { if ($opt eq "C") { $self->{'cuddle'} = " "; + $opts = substr($opts, 1); + } elsif ($opt eq "i") { + $opts =~ s/^i(\d+)//; + $self->{'indent_size'} = $1; + } elsif ($opt eq "T") { + $self->{'use_tabs'} = 1; + $opts = substr($opts, 1); + } elsif ($opt eq "v") { + $opts =~ s/^v([^.]*)(.|$)//; + $self->{'ex_const'} = $1; } - $opts = substr($opts, 1); } } +sub new { + my $class = shift; + my $self = bless {}, $class; + $self->{'subs_todo'} = []; + $self->{'curstash'} = "main"; + $self->{'cuddle'} = "\n"; + $self->{'indent_size'} = 4; + $self->{'use_tabs'} = 0; + $self->{'ex_const'} = "'???'"; + while (my $arg = shift @_) { + if (substr($arg, 0, 2) eq "-u") { + $self->stash_subs(substr($arg, 2)); + } elsif ($arg eq "-p") { + $self->{'parens'} = 1; + } elsif ($arg eq "-l") { + $self->{'linenums'} = 1; + } elsif ($arg eq "-q") { + $self->{'unquote'} = 1; + } elsif (substr($arg, 0, 2) eq "-s") { + $self->style_opts(substr $arg, 2); + } + } + return $self; +} + sub compile { my(@args) = @_; return sub { - my $self = bless {}; - my $arg; - $self->{'subs_todo'} = []; + my $self = B::Deparse->new(@args); $self->stash_subs("main"); $self->{'curcv'} = main_cv; - $self->{'curstash'} = "main"; - $self->{'cuddle'} = "\n"; - while ($arg = shift @args) { - if (substr($arg, 0, 2) eq "-u") { - $self->stash_subs(substr($arg, 2)); - } elsif ($arg eq "-p") { - $self->{'parens'} = 1; - } elsif ($arg eq "-l") { - $self->{'linenums'} = 1; - } elsif (substr($arg, 0, 2) eq "-s") { - $self->style_opts(substr $arg, 2); - } - } $self->walk_sub(main_cv, main_start); print $self->print_protos; @{$self->{'subs_todo'}} = - sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}; - print indent($self->deparse(main_root, 0)), "\n" unless null main_root; + sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}; + print $self->indent($self->deparse(main_root, 0)), "\n" + unless null main_root; my @text; while (scalar(@{$self->{'subs_todo'}})) { push @text, $self->next_todo; @@ -318,25 +382,38 @@ sub compile { } } +sub coderef2text { + my $self = shift; + my $sub = shift; + croak "Usage: ->coderef2text(CODEREF)" unless ref($sub) eq "CODE"; + return $self->indent($self->deparse_sub(svref_2object($sub))); +} + sub deparse { my $self = shift; my($op, $cx) = @_; # cluck if class($op) eq "NULL"; - my $meth = $op->ppaddr; +# return $self->$ {\("pp_" . $op->name)}($op, $cx); + my $meth = "pp_" . $op->name; return $self->$meth($op, $cx); } sub indent { + my $self = shift; my $txt = shift; my @lines = split(/\n/, $txt); my $leader = ""; + my $level = 0; my $line; for $line (@lines) { - if (substr($line, 0, 1) eq "\t") { - $leader = $leader . " "; - $line = substr($line, 1); - } elsif (substr($line, 0, 1) eq "\b") { - $leader = substr($leader, 0, length($leader) - 4); + my $cmd = substr($line, 0, 1); + if ($cmd eq "\t" or $cmd eq "\b") { + $level += ($cmd eq "\t" ? 1 : -1) * $self->{'indent_size'}; + if ($self->{'use_tabs'}) { + $leader = "\t" x ($level / 8) . " " x ($level % 8); + } else { + $leader = " " x $level; + } $line = substr($line, 1); } if (substr($line, 0, 1) eq "\f") { @@ -349,8 +426,6 @@ sub indent { return join("\n", @lines); } -sub SVf_POK () {0x40000} - sub deparse_sub { my $self = shift; my $cv = shift; @@ -382,7 +457,7 @@ sub deparse_format { $op = $op->sibling; # skip nextstate my @exprs; $kid = $op->first->sibling; # skip pushmark - push @text, $kid->sv->PV; + push @text, $self->const_sv($kid)->PV; $kid = $kid->sibling; for (; not null $kid; $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 0); @@ -393,47 +468,38 @@ sub deparse_format { return join("", @text) . "."; } -# the aassign in-common check messes up SvCUR (always setting it -# to a value >= 100), but it's probably safe to assume there -# won't be any NULs in the names of my() variables. (with -# stash variables, I wouldn't be so sure) -sub padname_fix { - my $str = shift; - $str = substr($str, 0, index($str, "\0")) if index($str, "\0") != -1; - return $str; -} - sub is_scope { my $op = shift; - return $op->ppaddr eq "pp_leave" || $op->ppaddr eq "pp_scope" - || $op->ppaddr eq "pp_lineseq" - || ($op->ppaddr eq "pp_null" && class($op) eq "UNOP" - && (is_scope($op->first) || $op->first->ppaddr eq "pp_enter")); + return $op->name eq "leave" || $op->name eq "scope" + || $op->name eq "lineseq" + || ($op->name eq "null" && class($op) eq "UNOP" + && (is_scope($op->first) || $op->first->name eq "enter")); } sub is_state { - my $name = $_[0]->ppaddr; - return $name eq "pp_nextstate" || $name eq "pp_dbstate"; + my $name = $_[0]->name; + return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate"; } sub is_miniwhile { # check for one-line loop (`foo() while $y--') my $op = shift; return (!null($op) and null($op->sibling) - and $op->ppaddr eq "pp_null" and class($op) eq "UNOP" - and (($op->first->ppaddr =~ /^pp_(and|or)$/ - and $op->first->first->sibling->ppaddr eq "pp_lineseq") - or ($op->first->ppaddr eq "pp_lineseq" + and $op->name eq "null" and class($op) eq "UNOP" + and (($op->first->name =~ /^(and|or)$/ + and $op->first->first->sibling->name eq "lineseq") + or ($op->first->name eq "lineseq" and not null $op->first->first->sibling - and $op->first->first->sibling->ppaddr eq "pp_unstack") + and $op->first->first->sibling->name eq "unstack") )); } sub is_scalar { my $op = shift; - return ($op->ppaddr eq "pp_rv2sv" or - $op->ppaddr eq "pp_padsv" or - $op->ppaddr eq "pp_gv" or # only in array/hash constructs - !null($op->first) && $op->first->ppaddr eq "pp_gvsv"); + return ($op->name eq "rv2sv" or + $op->name eq "padsv" or + $op->name eq "gv" or # only in array/hash constructs + $op->flags & OPf_KIDS && !null($op->first) + && $op->first->name eq "gvsv"); } sub maybe_parens { @@ -483,18 +549,28 @@ sub maybe_parens_func { } } -sub OPp_LVAL_INTRO () { 128 } - sub maybe_local { my $self = shift; my($op, $cx, $text) = @_; - if ($op->private & OPp_LVAL_INTRO and not $self->{'avoid_local'}{$$op}) { + if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) { return $self->maybe_parens_func("local", $text, $cx, 16); } else { return $text; } } +sub maybe_targmy { + my $self = shift; + my($op, $cx, $func, @args) = @_; + if ($op->private & OPpTARGET_MY) { + my $var = $self->padname($op->targ); + my $val = $func->($self, $op, 7, @args); + return $self->maybe_parens("$var = $val", $cx, 7); + } else { + return $func->($self, $op, $cx, @args); + } +} + sub padname_sv { my $self = shift; my $targ = shift; @@ -504,7 +580,7 @@ sub padname_sv { sub maybe_my { my $self = shift; my($op, $cx, $text) = @_; - if ($op->private & OPp_LVAL_INTRO and not $self->{'avoid_local'}{$$op}) { + if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) { return $self->maybe_parens_func("my", $text, $cx, 16); } else { return $text; @@ -606,10 +682,10 @@ sub pp_leave { $kid = $op->first->sibling; # skip enter if (is_miniwhile($kid)) { my $top = $kid->first; - my $name = $top->ppaddr; - if ($name eq "pp_and") { + my $name = $top->name; + if ($name eq "and") { $name = "while"; - } elsif ($name eq "pp_or") { + } elsif ($name eq "or") { $name = "until"; } else { # no conditional -> while 1 or until 0 return $self->deparse($top->first, 1) . " while 1"; @@ -628,7 +704,7 @@ sub pp_leave { last if null $kid; } $expr .= $self->deparse($kid, 0); - push @exprs, $expr if $expr; + push @exprs, $expr if length $expr; } if ($cx > 0) { # inside an expression return "do { " . join(";\n", @exprs) . " }"; @@ -650,7 +726,7 @@ sub pp_scope { last if null $kid; } $expr .= $self->deparse($kid, 0); - push @exprs, $expr if $expr; + push @exprs, $expr if length $expr; } if ($cx > 0) { # inside an expression, (a do {} while for lineseq) return "do { " . join(";\n", @exprs) . " }"; @@ -696,19 +772,20 @@ sub pp_nextstate { and $seq > $self->{'subs_todo'}[0][0]) { push @text, $self->next_todo; } - my $stash = $op->stash->NAME; + my $stash = $op->stashpv; if ($stash ne $self->{'curstash'}) { push @text, "package $stash;\n"; $self->{'curstash'} = $stash; } if ($self->{'linenums'}) { push @text, "\f#line " . $op->line . - ' "' . substr($op->filegv->NAME, 2), qq'"\n'; + ' "' . $op->file, qq'"\n'; } return join("", @text); } sub pp_dbstate { pp_nextstate(@_) } +sub pp_setstate { pp_nextstate(@_) } sub pp_unstack { return "" } # see also leaveloop @@ -721,9 +798,9 @@ sub baseop { sub pp_stub { baseop(@_, "()") } sub pp_wantarray { baseop(@_, "wantarray") } sub pp_fork { baseop(@_, "fork") } -sub pp_wait { baseop(@_, "wait") } -sub pp_getppid { baseop(@_, "getppid") } -sub pp_time { baseop(@_, "time") } +sub pp_wait { maybe_targmy(@_, \&baseop, "wait") } +sub pp_getppid { maybe_targmy(@_, \&baseop, "getppid") } +sub pp_time { maybe_targmy(@_, \&baseop, "time") } sub pp_tms { baseop(@_, "times") } sub pp_ghostent { baseop(@_, "gethostent") } sub pp_gnetent { baseop(@_, "getnetent") } @@ -757,18 +834,19 @@ sub pfixop { sub pp_preinc { pfixop(@_, "++", 23) } sub pp_predec { pfixop(@_, "--", 23) } -sub pp_postinc { pfixop(@_, "++", 23, POSTFIX) } -sub pp_postdec { pfixop(@_, "--", 23, POSTFIX) } +sub pp_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) } +sub pp_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) } sub pp_i_preinc { pfixop(@_, "++", 23) } sub pp_i_predec { pfixop(@_, "--", 23) } -sub pp_i_postinc { pfixop(@_, "++", 23, POSTFIX) } -sub pp_i_postdec { pfixop(@_, "--", 23, POSTFIX) } -sub pp_complement { pfixop(@_, "~", 21) } +sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) } +sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) } +sub pp_complement { maybe_targmy(@_. \&pfixop, "~", 21) } -sub pp_negate { +sub pp_negate { maybe_targmy(@_, \&real_negate) } +sub real_negate { my $self = shift; my($op, $cx) = @_; - if ($op->first->ppaddr =~ /^pp_(i_)?negate$/) { + if ($op->first->name =~ /^(i_)?negate$/) { # avoid --$x $self->pfixop($op, $cx, "-", 21.5); } else { @@ -787,11 +865,9 @@ sub pp_not { } } -sub OPf_SPECIAL () { 128 } - sub unop { my $self = shift; - my($op, $cx, $name, $prec, $flags) = (@_, 0, 0); + my($op, $cx, $name) = @_; my $kid; if ($op->flags & OPf_KIDS) { $kid = $op->first; @@ -801,36 +877,31 @@ sub unop { } } -sub pp_chop { unop(@_, "chop") } -sub pp_chomp { unop(@_, "chomp") } -sub pp_schop { unop(@_, "chop") } -sub pp_schomp { unop(@_, "chomp") } +sub pp_chop { maybe_targmy(@_, \&unop, "chop") } +sub pp_chomp { maybe_targmy(@_, \&unop, "chomp") } +sub pp_schop { maybe_targmy(@_, \&unop, "chop") } +sub pp_schomp { maybe_targmy(@_, \&unop, "chomp") } sub pp_defined { unop(@_, "defined") } sub pp_undef { unop(@_, "undef") } sub pp_study { unop(@_, "study") } sub pp_ref { unop(@_, "ref") } sub pp_pos { maybe_local(@_, unop(@_, "pos")) } -sub pp_sin { unop(@_, "sin") } -sub pp_cos { unop(@_, "cos") } -sub pp_rand { unop(@_, "rand") } +sub pp_sin { maybe_targmy(@_, \&unop, "sin") } +sub pp_cos { maybe_targmy(@_, \&unop, "cos") } +sub pp_rand { maybe_targmy(@_, \&unop, "rand") } sub pp_srand { unop(@_, "srand") } -sub pp_exp { unop(@_, "exp") } -sub pp_log { unop(@_, "log") } -sub pp_sqrt { unop(@_, "sqrt") } -sub pp_int { unop(@_, "int") } -sub pp_hex { unop(@_, "hex") } -sub pp_oct { unop(@_, "oct") } -sub pp_abs { unop(@_, "abs") } - -sub pp_length { unop(@_, "length") } -sub pp_ord { unop(@_, "ord") } -sub pp_chr { unop(@_, "chr") } -sub pp_ucfirst { unop(@_, "ucfirst") } -sub pp_lcfirst { unop(@_, "lcfirst") } -sub pp_uc { unop(@_, "uc") } -sub pp_lc { unop(@_, "lc") } -sub pp_quotemeta { unop(@_, "quotemeta") } +sub pp_exp { maybe_targmy(@_, \&unop, "exp") } +sub pp_log { maybe_targmy(@_, \&unop, "log") } +sub pp_sqrt { maybe_targmy(@_, \&unop, "sqrt") } +sub pp_int { maybe_targmy(@_, \&unop, "int") } +sub pp_hex { maybe_targmy(@_, \&unop, "hex") } +sub pp_oct { maybe_targmy(@_, \&unop, "oct") } +sub pp_abs { maybe_targmy(@_, \&unop, "abs") } + +sub pp_length { maybe_targmy(@_, \&unop, "length") } +sub pp_ord { maybe_targmy(@_, \&unop, "ord") } +sub pp_chr { maybe_targmy(@_, \&unop, "chr") } sub pp_each { unop(@_, "each") } sub pp_values { unop(@_, "values") } @@ -856,19 +927,19 @@ sub pp_tell { unop(@_, "tell") } sub pp_getsockname { unop(@_, "getsockname") } sub pp_getpeername { unop(@_, "getpeername") } -sub pp_chdir { unop(@_, "chdir") } -sub pp_chroot { unop(@_, "chroot") } +sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") } +sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") } sub pp_readlink { unop(@_, "readlink") } -sub pp_rmdir { unop(@_, "rmdir") } +sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") } sub pp_readdir { unop(@_, "readdir") } sub pp_telldir { unop(@_, "telldir") } sub pp_rewinddir { unop(@_, "rewinddir") } sub pp_closedir { unop(@_, "closedir") } -sub pp_getpgrp { unop(@_, "getpgrp") } +sub pp_getpgrp { maybe_targmy(@_, \&unop, "getpgrp") } sub pp_localtime { unop(@_, "localtime") } sub pp_gmtime { unop(@_, "gmtime") } sub pp_alarm { unop(@_, "alarm") } -sub pp_sleep { unop(@_, "sleep") } +sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") } sub pp_dofile { unop(@_, "do") } sub pp_entereval { unop(@_, "eval") } @@ -894,8 +965,6 @@ sub pp_exists { $cx, 16); } -sub OPpSLICE () { 64 } - sub pp_delete { my $self = shift; my($op, $cx) = @_; @@ -911,15 +980,13 @@ sub pp_delete { } } -sub OPp_CONST_BARE () { 64 } - sub pp_require { my $self = shift; my($op, $cx) = @_; - if (class($op) eq "UNOP" and $op->first->ppaddr eq "pp_const" - and $op->first->private & OPp_CONST_BARE) + if (class($op) eq "UNOP" and $op->first->name eq "const" + and $op->first->private & OPpCONST_BARE) { - my $name = $op->first->sv->PV; + my $name = $self->const_sv($op->first)->PV; $name =~ s[/][::]g; $name =~ s/\.pm//g; return "require($name)"; @@ -943,20 +1010,19 @@ sub pp_scalar { sub padval { my $self = shift; my $targ = shift; + #cluck "curcv was undef" unless $self->{curcv}; return (($self->{'curcv'}->PADLIST->ARRAY)[1]->ARRAY)[$targ]; } -sub OPf_REF () { 16 } - sub pp_refgen { my $self = shift; my($op, $cx) = @_; my $kid = $op->first; - if ($kid->ppaddr eq "pp_null") { + if ($kid->name eq "null") { $kid = $kid->first; - if ($kid->ppaddr eq "pp_anonlist" || $kid->ppaddr eq "pp_anonhash") { - my($pre, $post) = @{{"pp_anonlist" => ["[","]"], - "pp_anonhash" => ["{","}"]}->{$kid->ppaddr}}; + if ($kid->name eq "anonlist" || $kid->name eq "anonhash") { + my($pre, $post) = @{{"anonlist" => ["[","]"], + "anonhash" => ["{","}"]}->{$kid->name}}; my($expr, @exprs); $kid = $kid->first->sibling; # skip pushmark for (; !null($kid); $kid = $kid->sibling) { @@ -965,16 +1031,25 @@ sub pp_refgen { } return $pre . join(", ", @exprs) . $post; } elsif (!null($kid->sibling) and - $kid->sibling->ppaddr eq "pp_anoncode") { + $kid->sibling->name eq "anoncode") { return "sub " . $self->deparse_sub($self->padval($kid->sibling->targ)); - } elsif ($kid->ppaddr eq "pp_pushmark" - and $kid->sibling->ppaddr =~ /^pp_(pad|rv2)[ah]v$/ - and not $kid->sibling->flags & OPf_REF) { - # The @a in \(@a) isn't in ref context, but only when the - # parens are there. - return "\\(" . $self->deparse($kid->sibling, 1) . ")"; - } + } elsif ($kid->name eq "pushmark") { + my $sib_name = $kid->sibling->name; + if ($sib_name =~ /^(pad|rv2)[ah]v$/ + and not $kid->sibling->flags & OPf_REF) + { + # The @a in \(@a) isn't in ref context, but only when the + # parens are there. + return "\\(" . $self->deparse($kid->sibling, 1) . ")"; + } elsif ($sib_name eq 'entersub') { + my $text = $self->deparse($kid->sibling, 1); + # Always show parens for \(&func()), but only with -p otherwise + $text = "($text)" if $self->{'parens'} + or $kid->sibling->private & OPpENTERSUB_AMPER; + return "\\$text"; + } + } } $self->pfixop($op, $cx, "\\", 20); } @@ -985,13 +1060,31 @@ sub pp_readline { my $self = shift; my($op, $cx) = @_; my $kid = $op->first; - $kid = $kid->first if $kid->ppaddr eq "pp_rv2gv"; # <$fh> - if ($kid->ppaddr eq "pp_rv2gv") { - $kid = $kid->first; - } + $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh> return "<" . $self->deparse($kid, 1) . ">"; } +# Unary operators that can occur as pseudo-listops inside double quotes +sub dq_unop { + my $self = shift; + my($op, $cx, $name, $prec, $flags) = (@_, 0, 0); + my $kid; + if ($op->flags & OPf_KIDS) { + $kid = $op->first; + # If there's more than one kid, the first is an ex-pushmark. + $kid = $kid->sibling if not null $kid->sibling; + return $self->maybe_parens_unop($name, $kid, $cx); + } else { + return $name . ($op->flags & OPf_SPECIAL ? "()" : ""); + } +} + +sub pp_ucfirst { dq_unop(@_, "ucfirst") } +sub pp_lcfirst { dq_unop(@_, "lcfirst") } +sub pp_uc { dq_unop(@_, "uc") } +sub pp_lc { dq_unop(@_, "lc") } +sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") } + sub loopex { my $self = shift; my ($op, $cx, $name) = @_; @@ -1019,7 +1112,7 @@ sub ftst { # Genuine `-X' filetests are exempt from the LLAFR, but not # l?stat(); for the sake of clarity, give'em all parens return $self->maybe_parens_unop($name, $op->first, $cx); - } elsif (class($op) eq "GVOP") { + } elsif (class($op) eq "SVOP") { return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16); } else { # I don't think baseop filetests ever survive ck_ftst, but... return $name; @@ -1059,19 +1152,17 @@ sub pp_ftbinary { ftst(@_, "-B") } sub SWAP_CHILDREN () { 1 } sub ASSIGN () { 2 } # has OP= variant -sub OPf_STACKED () { 64 } - my(%left, %right); sub assoc_class { my $op = shift; - my $name = $op->ppaddr; - if ($name eq "pp_concat" and $op->first->ppaddr eq "pp_concat") { + my $name = $op->name; + if ($name eq "concat" and $op->first->name eq "concat") { # avoid spurious `=' -- see comment in pp_concat - return "pp_concat"; + return "concat"; } - if ($name eq "pp_null" and class($op) eq "UNOP" - and $op->first->ppaddr =~ /^pp_(and|x?or)$/ + if ($name eq "null" and class($op) eq "UNOP" + and $op->first->name =~ /^(and|x?or)$/ and null $op->first->sibling) { # Like all conditional constructs, OP_ANDs and OP_ORs are topped @@ -1088,25 +1179,25 @@ sub assoc_class { # $a + $b + $c is equivalent to ($a + $b) + $c BEGIN { - %left = ('pp_multiply' => 19, 'pp_i_multiply' => 19, - 'pp_divide' => 19, 'pp_i_divide' => 19, - 'pp_modulo' => 19, 'pp_i_modulo' => 19, - 'pp_repeat' => 19, - 'pp_add' => 18, 'pp_i_add' => 18, - 'pp_subtract' => 18, 'pp_i_subtract' => 18, - 'pp_concat' => 18, - 'pp_left_shift' => 17, 'pp_right_shift' => 17, - 'pp_bit_and' => 13, - 'pp_bit_or' => 12, 'pp_bit_xor' => 12, - 'pp_and' => 3, - 'pp_or' => 2, 'pp_xor' => 2, + %left = ('multiply' => 19, 'i_multiply' => 19, + 'divide' => 19, 'i_divide' => 19, + 'modulo' => 19, 'i_modulo' => 19, + 'repeat' => 19, + 'add' => 18, 'i_add' => 18, + 'subtract' => 18, 'i_subtract' => 18, + 'concat' => 18, + 'left_shift' => 17, 'right_shift' => 17, + 'bit_and' => 13, + 'bit_or' => 12, 'bit_xor' => 12, + 'and' => 3, + 'or' => 2, 'xor' => 2, ); } sub deparse_binop_left { my $self = shift; my($op, $left, $prec) = @_; - if ($left{assoc_class($op)} + if ($left{assoc_class($op)} && $left{assoc_class($left)} and $left{assoc_class($op)} == $left{assoc_class($left)}) { return $self->deparse($left, $prec - .00001); @@ -1119,27 +1210,27 @@ sub deparse_binop_left { # $a = $b = $c is equivalent to $a = ($b = $c) BEGIN { - %right = ('pp_pow' => 22, - 'pp_sassign=' => 7, 'pp_aassign=' => 7, - 'pp_multiply=' => 7, 'pp_i_multiply=' => 7, - 'pp_divide=' => 7, 'pp_i_divide=' => 7, - 'pp_modulo=' => 7, 'pp_i_modulo=' => 7, - 'pp_repeat=' => 7, - 'pp_add=' => 7, 'pp_i_add=' => 7, - 'pp_subtract=' => 7, 'pp_i_subtract=' => 7, - 'pp_concat=' => 7, - 'pp_left_shift=' => 7, 'pp_right_shift=' => 7, - 'pp_bit_and=' => 7, - 'pp_bit_or=' => 7, 'pp_bit_xor=' => 7, - 'pp_andassign' => 7, - 'pp_orassign' => 7, + %right = ('pow' => 22, + 'sassign=' => 7, 'aassign=' => 7, + 'multiply=' => 7, 'i_multiply=' => 7, + 'divide=' => 7, 'i_divide=' => 7, + 'modulo=' => 7, 'i_modulo=' => 7, + 'repeat=' => 7, + 'add=' => 7, 'i_add=' => 7, + 'subtract=' => 7, 'i_subtract=' => 7, + 'concat=' => 7, + 'left_shift=' => 7, 'right_shift=' => 7, + 'bit_and=' => 7, + 'bit_or=' => 7, 'bit_xor=' => 7, + 'andassign' => 7, + 'orassign' => 7, ); } sub deparse_binop_right { my $self = shift; my($op, $right, $prec) = @_; - if ($right{assoc_class($op)} + if ($right{assoc_class($op)} && $right{assoc_class($right)} and $right{assoc_class($op)} == $right{assoc_class($right)}) { return $self->deparse($right, $prec - .00001); @@ -1166,23 +1257,23 @@ sub binop { return $self->maybe_parens("$left $opname$eq $right", $cx, $prec); } -sub pp_add { binop(@_, "+", 18, ASSIGN) } -sub pp_multiply { binop(@_, "*", 19, ASSIGN) } -sub pp_subtract { binop(@_, "-",18, ASSIGN) } -sub pp_divide { binop(@_, "/", 19, ASSIGN) } -sub pp_modulo { binop(@_, "%", 19, ASSIGN) } -sub pp_i_add { binop(@_, "+", 18, ASSIGN) } -sub pp_i_multiply { binop(@_, "*", 19, ASSIGN) } -sub pp_i_subtract { binop(@_, "-", 18, ASSIGN) } -sub pp_i_divide { binop(@_, "/", 19, ASSIGN) } -sub pp_i_modulo { binop(@_, "%", 19, ASSIGN) } -sub pp_pow { binop(@_, "**", 22, ASSIGN) } - -sub pp_left_shift { binop(@_, "<<", 17, ASSIGN) } -sub pp_right_shift { binop(@_, ">>", 17, ASSIGN) } -sub pp_bit_and { binop(@_, "&", 13, ASSIGN) } -sub pp_bit_or { binop(@_, "|", 12, ASSIGN) } -sub pp_bit_xor { binop(@_, "^", 12, ASSIGN) } +sub pp_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) } +sub pp_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) } +sub pp_subtract { maybe_targmy(@_, \&binop, "-",18, ASSIGN) } +sub pp_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) } +sub pp_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) } +sub pp_i_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) } +sub pp_i_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) } +sub pp_i_subtract { maybe_targmy(@_, \&binop, "-", 18, ASSIGN) } +sub pp_i_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) } +sub pp_i_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) } +sub pp_pow { maybe_targmy(@_, \&binop, "**", 22, ASSIGN) } + +sub pp_left_shift { maybe_targmy(@_, \&binop, "<<", 17, ASSIGN) } +sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) } +sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) } +sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) } +sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) } sub pp_eq { binop(@_, "==", 14) } sub pp_ne { binop(@_, "!=", 14) } @@ -1213,14 +1304,15 @@ sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN) } # `.' is special because concats-of-concats are optimized to save copying # by making all but the first concat stacked. The effect is as if the # programmer had written `($a . $b) .= $c', except legal. -sub pp_concat { +sub pp_concat { maybe_targmy(@_, \&real_concat) } +sub real_concat { my $self = shift; my($op, $cx) = @_; my $left = $op->first; my $right = $op->last; my $eq = ""; my $prec = 18; - if ($op->flags & OPf_STACKED and $op->first->ppaddr ne "pp_concat") { + if ($op->flags & OPf_STACKED and $op->first->name ne "concat") { $eq = "="; $prec = 7; } @@ -1301,7 +1393,10 @@ sub logop { } sub pp_and { logop(@_, "and", 3, "&&", 11, "if") } -sub pp_or { logop(@_, "or", 2, "||", 10, "unless") } +sub pp_or { logop(@_, "or", 2, "||", 10, "unless") } + +# xor is syntactically a logop, but it's really a binop (contrary to +# old versions of opcode.pl). Syntax is what matters here. sub pp_xor { logop(@_, "xor", 2, "", 0, "") } sub logassignop { @@ -1339,20 +1434,20 @@ sub listop { } sub pp_bless { listop(@_, "bless") } -sub pp_atan2 { listop(@_, "atan2") } +sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") } sub pp_substr { maybe_local(@_, listop(@_, "substr")) } sub pp_vec { maybe_local(@_, listop(@_, "vec")) } -sub pp_index { listop(@_, "index") } -sub pp_rindex { listop(@_, "rindex") } -sub pp_sprintf { listop(@_, "sprintf") } +sub pp_index { maybe_targmy(@_, \&listop, "index") } +sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") } +sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") } sub pp_formline { listop(@_, "formline") } # see also deparse_format -sub pp_crypt { listop(@_, "crypt") } +sub pp_crypt { maybe_targmy(@_, \&listop, "crypt") } sub pp_unpack { listop(@_, "unpack") } sub pp_pack { listop(@_, "pack") } -sub pp_join { listop(@_, "join") } +sub pp_join { maybe_targmy(@_, \&listop, "join") } sub pp_splice { listop(@_, "splice") } -sub pp_push { listop(@_, "push") } -sub pp_unshift { listop(@_, "unshift") } +sub pp_push { maybe_targmy(@_, \&listop, "push") } +sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") } sub pp_reverse { listop(@_, "reverse") } sub pp_warn { listop(@_, "warn") } sub pp_die { listop(@_, "die") } @@ -1375,7 +1470,7 @@ sub pp_recv { listop(@_, "recv") } sub pp_seek { listop(@_, "seek") } sub pp_fcntl { listop(@_, "fcntl") } sub pp_ioctl { listop(@_, "ioctl") } -sub pp_flock { listop(@_, "flock") } +sub pp_flock { maybe_targmy(@_, \&listop, "flock") } sub pp_socket { listop(@_, "socket") } sub pp_sockpair { listop(@_, "sockpair") } sub pp_bind { listop(@_, "bind") } @@ -1385,23 +1480,23 @@ sub pp_accept { listop(@_, "accept") } sub pp_shutdown { listop(@_, "shutdown") } sub pp_gsockopt { listop(@_, "getsockopt") } sub pp_ssockopt { listop(@_, "setsockopt") } -sub pp_chown { listop(@_, "chown") } -sub pp_unlink { listop(@_, "unlink") } -sub pp_chmod { listop(@_, "chmod") } -sub pp_utime { listop(@_, "utime") } -sub pp_rename { listop(@_, "rename") } -sub pp_link { listop(@_, "link") } -sub pp_symlink { listop(@_, "symlink") } -sub pp_mkdir { listop(@_, "mkdir") } +sub pp_chown { maybe_targmy(@_, \&listop, "chown") } +sub pp_unlink { maybe_targmy(@_, \&listop, "unlink") } +sub pp_chmod { maybe_targmy(@_, \&listop, "chmod") } +sub pp_utime { maybe_targmy(@_, \&listop, "utime") } +sub pp_rename { maybe_targmy(@_, \&listop, "rename") } +sub pp_link { maybe_targmy(@_, \&listop, "link") } +sub pp_symlink { maybe_targmy(@_, \&listop, "symlink") } +sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") } sub pp_open_dir { listop(@_, "opendir") } sub pp_seekdir { listop(@_, "seekdir") } -sub pp_waitpid { listop(@_, "waitpid") } -sub pp_system { listop(@_, "system") } -sub pp_exec { listop(@_, "exec") } -sub pp_kill { listop(@_, "kill") } -sub pp_setpgrp { listop(@_, "setpgrp") } -sub pp_getpriority { listop(@_, "getpriority") } -sub pp_setpriority { listop(@_, "setpriority") } +sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") } +sub pp_system { maybe_targmy(@_, \&listop, "system") } +sub pp_exec { maybe_targmy(@_, \&listop, "exec") } +sub pp_kill { maybe_targmy(@_, \&listop, "kill") } +sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") } +sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") } +sub pp_setpriority { maybe_targmy(@_, \&listop, "setpriority") } sub pp_shmget { listop(@_, "shmget") } sub pp_shmctl { listop(@_, "shmctl") } sub pp_shmread { listop(@_, "shmread") } @@ -1442,10 +1537,10 @@ sub pp_truncate { my(@exprs); my $parens = ($cx >= 5) || $self->{'parens'}; my $kid = $op->first->sibling; - my($fh, $len); + my $fh; if ($op->flags & OPf_SPECIAL) { # $kid is an OP_CONST - $fh = $kid->sv->PV; + $fh = $self->const_sv($kid)->PV; } else { $fh = $self->deparse($kid, 6); $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "("; @@ -1456,7 +1551,6 @@ sub pp_truncate { } else { return "truncate $fh, $len"; } - } sub indirop { @@ -1480,8 +1574,7 @@ sub indirop { $expr = $self->deparse($kid, 6); push @exprs, $expr; } - return $self->maybe_parens_func($name, - $indir . join(", ", @exprs), + return $self->maybe_parens_func($name, $indir . join(", ", @exprs), $cx, 5); } @@ -1497,7 +1590,7 @@ sub mapop { $kid = $kid->first->sibling; # skip a pushmark my $code = $kid->first; # skip a null if (is_scope $code) { - $code = "{" . $self->deparse($code, 1) . "} "; + $code = "{" . $self->deparse($code, 0) . "} "; } else { $code = $self->deparse($code, 24) . ", "; } @@ -1523,15 +1616,15 @@ sub pp_list { # This assumes that no other private flags equal 128, and that # OPs that store things other than flags in their op_private, # like OP_AELEMFAST, won't be immediate children of a list. - unless ($lop->private & OPp_LVAL_INTRO or $lop->ppaddr eq "pp_undef") + unless ($lop->private & OPpLVAL_INTRO or $lop->name eq "undef") { $local = ""; # or not last; } - if ($lop->ppaddr =~ /^pp_pad[ash]v$/) { # my() + if ($lop->name =~ /^pad[ash]v$/) { # my() ($local = "", last) if $local eq "local"; $local = "my"; - } elsif ($lop->ppaddr ne "pp_undef") { # local() + } elsif ($lop->name ne "undef") { # local() ($local = "", last) if $local eq "my"; $local = "local"; } @@ -1540,7 +1633,7 @@ sub pp_list { return $self->deparse($kid, $cx) if null $kid->sibling and not $local; for (; !null($kid); $kid = $kid->sibling) { if ($local) { - if (class($kid) eq "UNOP" and $kid->first->ppaddr eq "pp_gvsv") { + if (class($kid) eq "UNOP" and $kid->first->name eq "gvsv") { $lop = $kid->first; } else { $lop = $kid; @@ -1575,10 +1668,10 @@ sub pp_cond_expr { } $cond = $self->deparse($cond, 1); $true = $self->deparse($true, 0); - if ($false->ppaddr eq "pp_lineseq") { # braces w/o scope => elsif + if ($false->name eq "lineseq") { # braces w/o scope => elsif my $head = "if ($cond) {\n\t$true\n\b}"; my @elsifs; - while (!null($false) and $false->ppaddr eq "pp_lineseq") { + while (!null($false) and $false->name eq "lineseq") { my $newop = $false->first->sibling->first; my $newcond = $newop->first; my $newtrue = $newcond->sibling; @@ -1607,13 +1700,13 @@ sub pp_leaveloop { local($self->{'curstash'}) = $self->{'curstash'}; my $head = ""; my $bare = 0; - if ($kid->ppaddr eq "pp_lineseq") { # bare or infinite loop + if ($kid->name eq "lineseq") { # bare or infinite loop if (is_state $kid->last) { # infinite $head = "for (;;) "; # shorter than while (1) } else { $bare = 1; } - } elsif ($enter->ppaddr eq "pp_enteriter") { # foreach + } elsif ($enter->name eq "enteriter") { # foreach my $ary = $enter->first->sibling; # first was pushmark my $var = $ary->sibling; if ($enter->flags & OPf_STACKED @@ -1638,20 +1731,20 @@ sub pp_leaveloop { $var = "my " . $var; } } - } elsif ($var->ppaddr eq "pp_rv2gv") { + } elsif ($var->name eq "rv2gv") { $var = $self->pp_rv2sv($var, 1); - } elsif ($var->ppaddr eq "pp_gv") { + } elsif ($var->name eq "gv") { $var = "\$" . $self->deparse($var, 1); } $head = "foreach $var ($ary) "; $kid = $kid->first->first->sibling; # skip OP_AND and OP_ITER - } elsif ($kid->ppaddr eq "pp_null") { # while/until + } elsif ($kid->name eq "null") { # while/until $kid = $kid->first; - my $name = {"pp_and" => "while", "pp_or" => "until"} - ->{$kid->ppaddr}; + my $name = {"and" => "while", "or" => "until"} + ->{$kid->name}; $head = "$name (" . $self->deparse($kid->first, 1) . ") "; $kid = $kid->first->sibling; - } elsif ($kid->ppaddr eq "pp_stub") { # bare and empty + } elsif ($kid->name eq "stub") { # bare and empty return "{;}"; # {} could be a hashref } # The third-to-last kid is the continue block if the pointer used @@ -1663,15 +1756,14 @@ sub pp_leaveloop { # (because it's a nulled out nextstate in a scope), in which # case the head's next is advanced past the null but the nextop's # isn't, so we need to try nextop->next. - my($cont, $precont); + my $precont; + my $cont = $kid->first; if ($bare) { - $cont = $kid->first; while (!null($cont->sibling)) { $precont = $cont; $cont = $cont->sibling; } } else { - $cont = $kid->first; while (!null($cont->sibling->sibling->sibling)) { $precont = $cont; $cont = $cont->sibling; @@ -1708,30 +1800,29 @@ sub pp_leavetry { return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}"; } -sub OP_CONST () { 5 } - -# XXX need a better way to do this -sub OP_STRINGIFY () { $] > 5.004_72 ? 67 : 65 } +BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" } +BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" } sub pp_null { my $self = shift; my($op, $cx) = @_; if (class($op) eq "OP") { - return "'???'" if $op->targ == OP_CONST; # old value is lost - } elsif ($op->first->ppaddr eq "pp_pushmark") { + # old value is lost + return $self->{'ex_const'} if $op->targ == OP_CONST; + } elsif ($op->first->name eq "pushmark") { return $self->pp_list($op, $cx); - } elsif ($op->first->ppaddr eq "pp_enter") { + } elsif ($op->first->name eq "enter") { return $self->pp_leave($op, $cx); } elsif ($op->targ == OP_STRINGIFY) { return $self->dquote($op); } elsif (!null($op->first->sibling) and - $op->first->sibling->ppaddr eq "pp_readline" and + $op->first->sibling->name eq "readline" and $op->first->sibling->flags & OPf_STACKED) { return $self->maybe_parens($self->deparse($op->first, 7) . " = " . $self->deparse($op->first->sibling, 7), $cx, 7); } elsif (!null($op->first->sibling) and - $op->first->sibling->ppaddr eq "pp_trans" and + $op->first->sibling->name eq "trans" and $op->first->sibling->flags & OPf_STACKED) { return $self->maybe_parens($self->deparse($op->first, 20) . " =~ " . $self->deparse($op->first->sibling, 20), @@ -1741,6 +1832,16 @@ sub pp_null { } } +# the aassign in-common check messes up SvCUR (always setting it +# to a value >= 100), but it's probably safe to assume there +# won't be any NULs in the names of my() variables. (with +# stash variables, I wouldn't be so sure) +sub padname_fix { + my $str = shift; + $str = substr($str, 0, index($str, "\0")) if index($str, "\0") != -1; + return $str; +} + sub padname { my $self = shift; my $targ = shift; @@ -1778,22 +1879,37 @@ sub pp_threadsv { return $self->maybe_local($op, $cx, "\$" . $threadsv_names[$op->targ]); } +sub maybe_padgv { + my $self = shift; + my $op = shift; + my $gv; + if ($Config{useithreads}) { + $gv = $self->padval($op->padix); + } + else { + $gv = $op->gv; + } + return $gv; +} + sub pp_gvsv { my $self = shift; my($op, $cx) = @_; - return $self->maybe_local($op, $cx, "\$" . $self->gv_name($op->gv)); + my $gv = $self->maybe_padgv($op); + return $self->maybe_local($op, $cx, "\$" . $self->gv_name($gv)); } sub pp_gv { my $self = shift; my($op, $cx) = @_; - return $self->gv_name($op->gv); + my $gv = $self->maybe_padgv($op); + return $self->gv_name($gv); } sub pp_aelemfast { my $self = shift; my($op, $cx) = @_; - my $gv = $op->gv; + my $gv = $self->maybe_padgv($op); return "\$" . $self->gv_name($gv) . "[" . $op->private . "]"; } @@ -1813,7 +1929,7 @@ sub pp_rv2gv { maybe_local(@_, rv2x(@_, "*")) } sub pp_av2arylen { my $self = shift; my($op, $cx) = @_; - if ($op->first->ppaddr eq "pp_padav") { + if ($op->first->name eq "padav") { return $self->maybe_local($op, $cx, '$#' . $self->padany($op->first)); } else { return $self->maybe_local($op, $cx, @@ -1828,23 +1944,41 @@ sub pp_rv2av { my $self = shift; my($op, $cx) = @_; my $kid = $op->first; - if ($kid->ppaddr eq "pp_const") { # constant list - my $av = $kid->sv; + if ($kid->name eq "const") { # constant list + my $av = $self->const_sv($kid); return "(" . join(", ", map(const($_), $av->ARRAY)) . ")"; } else { return $self->maybe_local($op, $cx, $self->rv2x($op, $cx, "\@")); } } +sub is_subscriptable { + my $op = shift; + if ($op->name =~ /^[ahg]elem/) { + return 1; + } elsif ($op->name eq "entersub") { + my $kid = $op->first; + return 0 unless null $kid->sibling; + $kid = $kid->first; + $kid = $kid->sibling until null $kid->sibling; + return 0 if is_scope($kid); + $kid = $kid->first; + return 0 if $kid->name eq "gv"; + return 0 if is_scalar($kid); + return is_subscriptable($kid); + } else { + return 0; + } +} sub elem { my $self = shift; my ($op, $cx, $left, $right, $padname) = @_; my($array, $idx) = ($op->first, $op->first->sibling); - unless ($array->ppaddr eq $padname) { # Maybe this has been fixed + unless ($array->name eq $padname) { # Maybe this has been fixed $array = $array->first; # skip rv2av (or ex-rv2av in _53+) } - if ($array->ppaddr eq $padname) { + if ($array->name eq $padname) { $array = $self->padany($array); } elsif (is_scope($array)) { # ${expr}[0] $array = "{" . $self->deparse($array, 0) . "}"; @@ -1852,8 +1986,7 @@ sub elem { $array = $self->deparse($array, 24); } else { # $x[20][3]{hi} or expr->[20] - my $arrow; - $arrow = "->" if $array->ppaddr !~ /^pp_[ah]elem$/; + my $arrow = is_subscriptable($array) ? "" : "->"; return $self->deparse($array, 24) . $arrow . $left . $self->deparse($idx, 1) . $right; } @@ -1861,15 +1994,15 @@ sub elem { return "\$" . $array . $left . $idx . $right; } -sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "pp_padav")) } -sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "pp_padhv")) } +sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) } +sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) } sub pp_gelem { my $self = shift; my($op, $cx) = @_; my($glob, $part) = ($op->first, $op->last); $glob = $glob->first; # skip rv2gv - $glob = $glob->first if $glob->ppaddr eq "pp_rv2gv"; # this one's a bug + $glob = $glob->first if $glob->name eq "rv2gv"; # this one's a bug my $scope = is_scope($glob); $glob = $self->deparse($glob, 0); $part = $self->deparse($part, 1); @@ -1889,16 +2022,16 @@ sub slice { } $array = $last; $array = $array->first - if $array->ppaddr eq $regname or $array->ppaddr eq "pp_null"; + if $array->name eq $regname or $array->name eq "null"; if (is_scope($array)) { $array = "{" . $self->deparse($array, 0) . "}"; - } elsif ($array->ppaddr eq $padname) { + } elsif ($array->name eq $padname) { $array = $self->padany($array); } else { $array = $self->deparse($array, 24); } $kid = $op->first->sibling; # skip pushmark - if ($kid->ppaddr eq "pp_list") { + if ($kid->name eq "list") { $kid = $kid->first->sibling; # skip list, pushmark for (; !null $kid; $kid = $kid->sibling) { push @elems, $self->deparse($kid, 6); @@ -1910,10 +2043,8 @@ sub slice { return "\@" . $array . $left . $list . $right; } -sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", - "pp_rv2av", "pp_padav")) } -sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", - "pp_rv2hv", "pp_padhv")) } +sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) } +sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) } sub pp_lslice { my $self = shift; @@ -1926,48 +2057,153 @@ sub pp_lslice { return "($list)" . "[$idx]"; } -sub OPpENTERSUB_AMPER () { 8 } - -sub OPf_WANT () { 3 } -sub OPf_WANT_VOID () { 1 } -sub OPf_WANT_SCALAR () { 2 } -sub OPf_WANT_LIST () { 2 } - sub want_scalar { my $op = shift; return ($op->flags & OPf_WANT) == OPf_WANT_SCALAR; } -sub pp_entersub { +sub want_list { + my $op = shift; + return ($op->flags & OPf_WANT) == OPf_WANT_LIST; +} + +sub method { my $self = shift; my($op, $cx) = @_; - my $prefix = ""; - my $amper = ""; - my $proto = undef; - my $simple = 0; - my($kid, $args, @exprs); - if (not null $op->first->sibling) { # method - $kid = $op->first->sibling; # skip pushmark - my $obj = $self->deparse($kid, 24); + my $kid = $op->first->sibling; # skip pushmark + my($meth, $obj, @exprs); + if ($kid->name eq "list" and want_list $kid) { + # When an indirect object isn't a bareword but the args are in + # parens, the parens aren't part of the method syntax (the LLAFR + # doesn't apply), but they make a list with OPf_PARENS set that + # doesn't get flattened by the append_elem that adds the method, + # making a (object, arg1, arg2, ...) list where the object + # usually is. This can be distinguished from + # `($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an + # object) because in the later the list is in scalar context + # as the left side of -> always is, while in the former + # the list is in list context as method arguments always are. + # (Good thing there aren't method prototypes!) + $meth = $kid->sibling; + $kid = $kid->first->sibling; # skip pushmark + $obj = $kid; + $kid = $kid->sibling; + for (; not null $kid; $kid = $kid->sibling) { + push @exprs, $self->deparse($kid, 6); + } + } else { + $obj = $kid; $kid = $kid->sibling; for (; not null $kid->sibling; $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } - my $meth = $kid->first; - if ($meth->ppaddr eq "pp_const") { - $meth = $meth->sv->PV; # needs to be bare + $meth = $kid; + } + $obj = $self->deparse($obj, 24); + if ($meth->name eq "method_named") { + $meth = $self->const_sv($meth)->PV; + } else { + $meth = $meth->first; + if ($meth->name eq "const") { + # As of 5.005_58, this case is probably obsoleted by the + # method_named case above + $meth = $self->const_sv($meth)->PV; # needs to be bare } else { $meth = $self->deparse($meth, 1); } - $args = join(", ", @exprs); - $kid = $obj . "->" . $meth; - if ($args) { - return $kid . "(" . $args . ")"; # parens mandatory + } + my $args = join(", ", @exprs); + $kid = $obj . "->" . $meth; + if ($args) { + return $kid . "(" . $args . ")"; # parens mandatory + } else { + return $kid; + } +} + +# returns "&" if the prototype doesn't match the args, +# or ("", $args_after_prototype_demunging) if it does. +sub check_proto { + my $self = shift; + my($proto, @args) = @_; + my($arg, $real); + my $doneok = 0; + my @reals; + # An unbackslashed @ or % gobbles up the rest of the args + $proto =~ s/([^\\]|^)([@%])(.*)$/$1$2/; + while ($proto) { + $proto =~ s/^ *([\\]?[\$\@&%*]|;)//; + my $chr = $1; + if ($chr eq "") { + return "&" if @args; + } elsif ($chr eq ";") { + $doneok = 1; + } elsif ($chr eq "@" or $chr eq "%") { + push @reals, map($self->deparse($_, 6), @args); + @args = (); } else { - return $kid; # toke.c fakes parens - } + $arg = shift @args; + last unless $arg; + if ($chr eq "\$") { + if (want_scalar $arg) { + push @reals, $self->deparse($arg, 6); + } else { + return "&"; + } + } elsif ($chr eq "&") { + if ($arg->name =~ /^(s?refgen|undef)$/) { + push @reals, $self->deparse($arg, 6); + } else { + return "&"; + } + } elsif ($chr eq "*") { + if ($arg->name =~ /^s?refgen$/ + and $arg->first->first->name eq "rv2gv") + { + $real = $arg->first->first; # skip refgen, null + if ($real->first->name eq "gv") { + push @reals, $self->deparse($real, 6); + } else { + push @reals, $self->deparse($real->first, 6); + } + } else { + return "&"; + } + } elsif (substr($chr, 0, 1) eq "\\") { + $chr = substr($chr, 1); + if ($arg->name =~ /^s?refgen$/ and + !null($real = $arg->first) and + ($chr eq "\$" && is_scalar($real->first) + or ($chr eq "\@" + && $real->first->sibling->name + =~ /^(rv2|pad)av$/) + or ($chr eq "%" + && $real->first->sibling->name + =~ /^(rv2|pad)hv$/) + #or ($chr eq "&" # This doesn't work + # && $real->first->name eq "rv2cv") + or ($chr eq "*" + && $real->first->name eq "rv2gv"))) + { + push @reals, $self->deparse($real, 6); + } else { + return "&"; + } + } + } } - # else, not a method + return "&" if $proto and !$doneok; # too few args and no `;' + return "&" if @args; # too many args + return ("", join ", ", @reals); +} + +sub pp_entersub { + my $self = shift; + my($op, $cx) = @_; + return $self->method($op, $cx) unless null $op->first->sibling; + my $prefix = ""; + my $amper = ""; + my($kid, @exprs); if ($op->flags & OPf_SPECIAL) { $prefix = "do "; } elsif ($op->private & OPpENTERSUB_AMPER) { @@ -1978,97 +2214,30 @@ sub pp_entersub { for (; not null $kid->sibling; $kid = $kid->sibling) { push @exprs, $kid; } + my $simple = 0; + my $proto = undef; if (is_scope($kid)) { $amper = "&"; $kid = "{" . $self->deparse($kid, 0) . "}"; - } elsif ($kid->first->ppaddr eq "pp_gv") { - my $gv = $kid->first->gv; + } elsif ($kid->first->name eq "gv") { + my $gv = $self->maybe_padgv($kid->first); if (class($gv->CV) ne "SPECIAL") { $proto = $gv->CV->PV if $gv->CV->FLAGS & SVf_POK; } - $simple = 1; + $simple = 1; # only calls of named functions can be prototyped $kid = $self->deparse($kid, 24); } elsif (is_scalar $kid->first) { $amper = "&"; $kid = $self->deparse($kid, 24); } else { $prefix = ""; - $kid = $self->deparse($kid, 24) . "->"; + my $arrow = is_subscriptable($kid->first) ? "" : "->"; + $kid = $self->deparse($kid, 24) . $arrow; } + my $args; if (defined $proto and not $amper) { - my($arg, $real); - my $doneok = 0; - my @args = @exprs; - my @reals; - my $p = $proto; - $p =~ s/([^\\]|^)([@%])(.*)$/$1$2/; - while ($p) { - $p =~ s/^ *([\\]?[\$\@&%*]|;)//; - my $chr = $1; - if ($chr eq "") { - undef $proto if @args; - } elsif ($chr eq ";") { - $doneok = 1; - } elsif ($chr eq "@" or $chr eq "%") { - push @reals, map($self->deparse($_, 6), @args); - @args = (); - } else { - $arg = shift @args; - last unless $arg; - if ($chr eq "\$") { - if (want_scalar $arg) { - push @reals, $self->deparse($arg, 6); - } else { - undef $proto; - } - } elsif ($chr eq "&") { - if ($arg->ppaddr =~ /pp_(s?refgen|undef)/) { - push @reals, $self->deparse($arg, 6); - } else { - undef $proto; - } - } elsif ($chr eq "*") { - if ($arg->ppaddr =~ /^pp_s?refgen$/ - and $arg->first->first->ppaddr eq "pp_rv2gv") - { - $real = $arg->first->first; # skip refgen, null - if ($real->first->ppaddr eq "pp_gv") { - push @reals, $self->deparse($real, 6); - } else { - push @reals, $self->deparse($real->first, 6); - } - } else { - undef $proto; - } - } elsif (substr($chr, 0, 1) eq "\\") { - $chr = substr($chr, 1); - if ($arg->ppaddr =~ /^pp_s?refgen$/ and - !null($real = $arg->first) and - ($chr eq "\$" && is_scalar($real->first) - or ($chr eq "\@" - && $real->first->sibling->ppaddr - =~ /^pp_(rv2|pad)av$/) - or ($chr eq "%" - && $real->first->sibling->ppaddr - =~ /^pp_(rv2|pad)hv$/) - #or ($chr eq "&" # This doesn't work - # && $real->first->ppaddr eq "pp_rv2cv") - or ($chr eq "*" - && $real->first->ppaddr eq "pp_rv2gv"))) - { - push @reals, $self->deparse($real, 6); - } else { - undef $proto; - } - } - } - } - undef $proto if $p and !$doneok; - undef $proto if @args; - $args = join(", ", @reals); - $amper = ""; - unless (defined $proto) { - $amper = "&"; + ($amper, $args) = $self->check_proto($proto, @exprs); + if ($amper eq "&") { $args = join(", ", map($self->deparse($_, 6), @exprs)); } } else { @@ -2146,6 +2315,7 @@ sub balanced_delim { } elsif ($c eq $close) { $cnt--; if ($cnt < 0) { + # qq()() isn't ")(" $fail = 1; last; } @@ -2175,14 +2345,10 @@ sub single_delim { } } -sub SVf_IOK () {0x10000} -sub SVf_NOK () {0x20000} -sub SVf_ROK () {0x80000} - sub const { my $sv = shift; if (class($sv) eq "SPECIAL") { - return ('undef', '1', '0')[$$sv-1]; + return ('undef', '1', '0')[$$sv-1]; # sv_undef, sv_yes, sv_no } elsif ($sv->FLAGS & SVf_IOK) { return $sv->IV; } elsif ($sv->FLAGS & SVf_NOK) { @@ -2191,43 +2357,52 @@ sub const { return "\\(" . const($sv->RV) . ")"; # constant folded } else { my $str = $sv->PV; - if ($str =~ /[^ -~]/) { # ASCII + if ($str =~ /[^ -~]/) { # ASCII for non-printing return single_delim("qq", '"', uninterp escape_str unback $str); } else { - $str =~ s/\\/\\\\/g; - return single_delim("q", "'", $str); + return single_delim("q", "'", unback $str); } } } +sub const_sv { + my $self = shift; + my $op = shift; + my $sv = $op->sv; + # the constant could be in the pad (under useithreads) + $sv = $self->padval($op->targ) unless $$sv; + return $sv; +} + sub pp_const { my $self = shift; my($op, $cx) = @_; -# if ($op->private & OPp_CONST_BARE) { # trouble with `=>' autoquoting -# return $op->sv->PV; +# if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting +# return $self->const_sv($op)->PV; # } - return const($op->sv); + my $sv = $self->const_sv($op); + return const($sv); } sub dq { my $self = shift; my $op = shift; - my $type = $op->ppaddr; - if ($type eq "pp_const") { - return uninterp(escape_str(unback($op->sv->PV))); - } elsif ($type eq "pp_concat") { + my $type = $op->name; + if ($type eq "const") { + return uninterp(escape_str(unback($self->const_sv($op)->PV))); + } elsif ($type eq "concat") { return $self->dq($op->first) . $self->dq($op->last); - } elsif ($type eq "pp_uc") { + } elsif ($type eq "uc") { return '\U' . $self->dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_lc") { + } elsif ($type eq "lc") { return '\L' . $self->dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_ucfirst") { + } elsif ($type eq "ucfirst") { return '\u' . $self->dq($op->first->sibling); - } elsif ($type eq "pp_lcfirst") { + } elsif ($type eq "lcfirst") { return '\l' . $self->dq($op->first->sibling); - } elsif ($type eq "pp_quotemeta") { + } elsif ($type eq "quotemeta") { return '\Q' . $self->dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_join") { + } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { return $self->deparse($op, 26); @@ -2243,13 +2418,15 @@ sub pp_backtick { sub dquote { my $self = shift; - my $op = shift; - # skip ex-stringify, pushmark - return single_delim("qq", '"', $self->dq($op->first->sibling)); + my($op, $cx) = shift; + my $kid = $op->first->sibling; # skip ex-stringify, pushmark + return $self->deparse($kid, $cx) if $self->{'unquote'}; + $self->maybe_targmy($kid, $cx, + sub {single_delim("qq", '"', $self->dq($_[1]))}); } -# OP_STRINGIFY is a listop, but it only ever has one arg (?) -sub pp_stringify { dquote(@_) } +# OP_STRINGIFY is a listop, but it only ever has one arg +sub pp_stringify { maybe_targmy(@_, \&dquote) } # tr/// and s/// (and tr[][], tr[]//, tr###, etc) # note that tr(from)/to/ is OK, but not tr/from/(to) @@ -2316,7 +2493,8 @@ sub collapse { if ($c <= $#chars - 2 and $chars[$c + 1] == $tr + 1 and $chars[$c + 2] == $tr + 2) { - for (; $c <= $#chars and $chars[$c + 1] == $chars[$c] + 1; $c++) {} + for (; $c <= $#chars-1 and $chars[$c + 1] == $chars[$c] + 1; $c++) + {} $str .= "-"; $str .= pchr($chars[$c]); } @@ -2324,14 +2502,12 @@ sub collapse { return $str; } -sub OPpTRANS_SQUASH () { 16 } -sub OPpTRANS_DELETE () { 32 } -sub OPpTRANS_COMPLEMENT () { 64 } +# XXX This has trouble with hyphens in the replacement (tr/bac/-AC/), +# and backslashes. -sub pp_trans { - my $self = shift; - my($op, $cx) = @_; - my(@table) = unpack("s256", $op->pv); +sub tr_decode_byte { + my($table, $flags) = @_; + my(@table) = unpack("s256", $table); my($c, $tr, @from, @to, @delfrom, $delhyphen); if ($table[ord "-"] != -1 and $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1) @@ -2353,10 +2529,8 @@ sub pp_trans { push @delfrom, $c; } } - my $flags; @from = (@from, @delfrom); - if ($op->private & OPpTRANS_COMPLEMENT) { - $flags .= "c"; + if ($flags & OPpTRANS_COMPLEMENT) { my @newfrom = (); my %from; @from{@from} = (1) x @from; @@ -2365,16 +2539,136 @@ sub pp_trans { } @from = @newfrom; } - if ($op->private & OPpTRANS_DELETE) { - $flags .= "d"; - } else { + unless ($flags & OPpTRANS_DELETE) { pop @to while $#to and $to[$#to] == $to[$#to -1]; } - $flags .= "s" if $op->private & OPpTRANS_SQUASH; my($from, $to); $from = collapse(@from); $to = collapse(@to); $from .= "-" if $delhyphen; + return ($from, $to); +} + +sub tr_chr { + my $x = shift; + if ($x == ord "-") { + return "\\-"; + } else { + return chr $x; + } +} + +# XXX This doesn't yet handle all cases correctly either + +sub tr_decode_utf8 { + my($swash_hv, $flags) = @_; + my %swash = $swash_hv->ARRAY; + my $final = undef; + $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'}; + my $none = $swash{"NONE"}->IV; + my $extra = $none + 1; + my(@from, @delfrom, @to); + my $line; + foreach $line (split /\n/, $swash{'LIST'}->PV) { + my($min, $max, $result) = split(/\t/, $line); + $min = hex $min; + if (length $max) { + $max = hex $max; + } else { + $max = $min; + } + $result = hex $result; + if ($result == $extra) { + push @delfrom, [$min, $max]; + } else { + push @from, [$min, $max]; + push @to, [$result, $result + $max - $min]; + } + } + for my $i (0 .. $#from) { + if ($from[$i][0] == ord '-') { + unshift @from, splice(@from, $i, 1); + unshift @to, splice(@to, $i, 1); + last; + } elsif ($from[$i][1] == ord '-') { + $from[$i][1]--; + $to[$i][1]--; + unshift @from, ord '-'; + unshift @to, ord '-'; + last; + } + } + for my $i (0 .. $#delfrom) { + if ($delfrom[$i][0] == ord '-') { + push @delfrom, splice(@delfrom, $i, 1); + last; + } elsif ($delfrom[$i][1] == ord '-') { + $delfrom[$i][1]--; + push @delfrom, ord '-'; + last; + } + } + if (defined $final and $to[$#to][1] != $final) { + push @to, [$final, $final]; + } + push @from, @delfrom; + if ($flags & OPpTRANS_COMPLEMENT) { + my @newfrom; + my $next = 0; + for my $i (0 .. $#from) { + push @newfrom, [$next, $from[$i][0] - 1]; + $next = $from[$i][1] + 1; + } + @from = (); + for my $range (@newfrom) { + if ($range->[0] <= $range->[1]) { + push @from, $range; + } + } + } + my($from, $to, $diff); + for my $chunk (@from) { + $diff = $chunk->[1] - $chunk->[0]; + if ($diff > 1) { + $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]); + } elsif ($diff == 1) { + $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]); + } else { + $from .= tr_chr($chunk->[0]); + } + } + for my $chunk (@to) { + $diff = $chunk->[1] - $chunk->[0]; + if ($diff > 1) { + $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]); + } elsif ($diff == 1) { + $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]); + } else { + $to .= tr_chr($chunk->[0]); + } + } + #$final = sprintf("%04x", $final) if defined $final; + #$none = sprintf("%04x", $none) if defined $none; + #$extra = sprintf("%04x", $extra) if defined $extra; + #print STDERR "final: $final\n none: $none\nextra: $extra\n"; + #print STDERR $swash{'LIST'}->PV; + return (escape_str($from), escape_str($to)); +} + +sub pp_trans { + my $self = shift; + my($op, $cx) = @_; + my($from, $to); + if (class($op) eq "PVOP") { + ($from, $to) = tr_decode_byte($op->pv, $op->private); + } else { # class($op) eq "SVOP" + ($from, $to) = tr_decode_utf8($op->sv->RV, $op->private); + } + my $flags = ""; + $flags .= "c" if $op->private & OPpTRANS_COMPLEMENT; + $flags .= "d" if $op->private & OPpTRANS_DELETE; + $to = "" if $from eq $to and $flags eq ""; + $flags .= "s" if $op->private & OPpTRANS_SQUASH; return "tr" . double_delim($from, $to) . $flags; } @@ -2382,22 +2676,22 @@ sub pp_trans { sub re_dq { my $self = shift; my $op = shift; - my $type = $op->ppaddr; - if ($type eq "pp_const") { - return uninterp($op->sv->PV); - } elsif ($type eq "pp_concat") { + my $type = $op->name; + if ($type eq "const") { + return uninterp($self->const_sv($op)->PV); + } elsif ($type eq "concat") { return $self->re_dq($op->first) . $self->re_dq($op->last); - } elsif ($type eq "pp_uc") { + } elsif ($type eq "uc") { return '\U' . $self->re_dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_lc") { + } elsif ($type eq "lc") { return '\L' . $self->re_dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_ucfirst") { + } elsif ($type eq "ucfirst") { return '\u' . $self->re_dq($op->first->sibling); - } elsif ($type eq "pp_lcfirst") { + } elsif ($type eq "lcfirst") { return '\l' . $self->re_dq($op->first->sibling); - } elsif ($type eq "pp_quotemeta") { + } elsif ($type eq "quotemeta") { return '\Q' . $self->re_dq($op->first->sibling) . '\E'; - } elsif ($type eq "pp_join") { + } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { return $self->deparse($op, 26); @@ -2408,26 +2702,11 @@ sub pp_regcomp { my $self = shift; my($op, $cx) = @_; my $kid = $op->first; - $kid = $kid->first if $kid->ppaddr eq "pp_regcmaybe"; - $kid = $kid->first if $kid->ppaddr eq "pp_regcreset"; + $kid = $kid->first if $kid->name eq "regcmaybe"; + $kid = $kid->first if $kid->name eq "regcreset"; return $self->re_dq($kid); } -sub OPp_RUNTIME () { 64 } - -sub PMf_ONCE () { 0x2 } -sub PMf_SKIPWHITE () { 0x10 } -sub PMf_CONST () { 0x40 } -sub PMf_KEEP () { 0x80 } -sub PMf_GLOBAL () { 0x100 } -sub PMf_CONTINUE () { 0x200 } -sub PMf_EVAL () { 0x400 } -sub PMf_LOCALE () { 0x800 } -sub PMf_MULTILINE () { 0x1000 } -sub PMf_SINGLELINE () { 0x2000 } -sub PMf_FOLD () { 0x4000 } -sub PMf_EXTENDED () { 0x8000 } - # osmic acid -- see osmium tetroxide my %matchwords; @@ -2522,11 +2801,15 @@ sub pp_subst { $kid = $kid->sibling; } else { $repl = $op->pmreplroot->first; # skip substcont - while ($repl->ppaddr eq "pp_entereval") { + while ($repl->name eq "entereval") { $repl = $repl->first; $flags .= "e"; } - $repl = $self->dq($repl); + if ($op->pmflags & PMf_EVAL) { + $repl = $self->deparse($repl, 0); + } else { + $repl = $self->dq($repl); + } } if (null $kid) { $re = re_uninterp(escape_str($op->precomp)); @@ -2559,7 +2842,8 @@ B::Deparse - Perl compiler backend to produce perl code =head1 SYNOPSIS -B B<-MO=Deparse>[B<,-u>I][B<,-p>][B<,-l>][B<,-s>I] I +B B<-MO=Deparse>[B<,-u>I][B<,-p>][B<,-q>][B<,-l>][B<,-s>I] + I =head1 DESCRIPTION @@ -2584,6 +2868,11 @@ the '-MO=Deparse', separated by a comma but not any white space. =over 4 +=item B<-l> + +Add '#line' declarations to the output based on the line and file +locations of the original code. + =item B<-p> Print extra parentheses. Without this option, B::Deparse includes @@ -2607,29 +2896,44 @@ C will print which probably isn't what you intended (the C<'???'> is a sign that perl optimized away a constant value). +=item B<-q> + +Expand double-quoted strings into the corresponding combinations of +concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For +instance, print + + print "Hello, $world, @ladies, \u$gentlemen\E, \u\L$me!"; + +as + + print 'Hello, ' . $world . ', ' . join($", @ladies) . ', ' + . ucfirst($gentlemen) . ', ' . ucfirst(lc $me . '!'); + +Note that the expanded form represents the way perl handles such +constructions internally -- this option actually turns off the reverse +translation that B::Deparse usually does. On the other hand, note that +C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value +of $y into a string before doing the assignment. + =item B<-u>I Normally, B::Deparse deparses the main code of a program, all the subs called by the main program (and all the subs called by them, recursively), and any other subs in the main:: package. To include subs in other packages that aren't called directly, such as AUTOLOAD, -DESTROY, other subs called automatically by perl, and methods, which -aren't resolved to subs until runtime, use the B<-u> option. The +DESTROY, other subs called automatically by perl, and methods (which +aren't resolved to subs until runtime), use the B<-u> option. The argument to B<-u> is the name of a package, and should follow directly after the 'u'. Multiple B<-u> options may be given, separated by commas. Note that unlike some other backends, B::Deparse doesn't (yet) try to guess automatically when B<-u> is needed -- you must invoke it yourself. -=item B<-l> - -Add '#line' declarations to the output based on the line and file -locations of the original code. - =item B<-s>I -Tweak the style of B::Deparse's output. At the moment, only one style -option is implemented: +Tweak the style of B::Deparse's output. The letters should follow +directly after the 's', with no space or punctuation. The following +options are available: =over 4 @@ -2654,17 +2958,85 @@ instead of The default is not to cuddle. +=item BI + +Indent lines by multiples of I columns. The default is 4 columns. + +=item B + +Use tabs for each 8 columns of indent. The default is to use only spaces. +For instance, if the style options are B<-si4T>, a line that's indented +3 times will be preceded by one tab and four spaces; if the options were +B<-si8T>, the same line would be preceded by three tabs. + +=item BIB<.> + +Print I for the value of a constant that can't be determined +because it was optimized away (mnemonic: this happens when a constant +is used in Boid context). The end of the string is marked by a period. +The string should be a valid perl expression, generally a constant. +Note that unless it's a number, it probably needs to be quoted, and on +a command line quotes need to be protected from the shell. Some +conventional values include 0, 1, 42, '', 'foo', and +'Useless use of constant omitted' (which may need to be +B<-sv"'Useless use of constant omitted'."> +or something similar depending on your shell). The default is '???'. +If you're using B::Deparse on a module or other file that's require'd, +you shouldn't use a value that evaluates to false, since the customary +true constant at the end of a module will be in void context when the +file is compiled as a main program. + =back =back +=head1 USING B::Deparse AS A MODULE + +=head2 Synopsis + + use B::Deparse; + $deparse = B::Deparse->new("-p", "-sC"); + $body = $deparse->coderef2text(\&func); + eval "sub func $body"; # the inverse operation + +=head2 Description + +B::Deparse can also be used on a sub-by-sub basis from other perl +programs. + +=head2 new + + $deparse = B::Deparse->new(OPTIONS) + +Create an object to store the state of a deparsing operation and any +options. The options are the same as those that can be given on the +command line (see L); options that are separated by commas +after B<-MO=Deparse> should be given as separate strings. Some +options, like B<-u>, don't make sense for a single subroutine, so +don't pass them. + +=head2 coderef2text + + $body = $deparse->coderef2text(\&func) + $body = $deparse->coderef2text(sub ($$) { ... }) + +Return source code for the body of a subroutine (a block, optionally +preceded by a prototype in parens), given a reference to the +sub. Because a subroutine can have no names, or more than one name, +this method doesn't return a complete subroutine definition -- if you +want to eval the result, you should prepend "sub subname ", or "sub " +for an anonymous function constructor. Unless the sub was defined in +the main:: package, the code will include a package declaration. + =head1 BUGS See the 'to do' list at the beginning of the module file. =head1 AUTHOR -Stephen McCamant , based on an earlier version by -Malcolm Beattie . +Stephen McCamant , based on an earlier +version by Malcolm Beattie , with +contributions from Gisle Aas, James Duncan, Albert Dvornik, Hugo van +der Sanden, Gurusamy Sarathy, and Nick Ing-Simmons. =cut diff --git a/gnu/usr.bin/perl/ext/B/B/Disassembler.pm b/gnu/usr.bin/perl/ext/B/B/Disassembler.pm index 4a008a3750c..d054a2d1647 100644 --- a/gnu/usr.bin/perl/ext/B/B/Disassembler.pm +++ b/gnu/usr.bin/perl/ext/B/B/Disassembler.pm @@ -52,6 +52,20 @@ sub GET_objindex { return unpack("N", $str); } +sub GET_opindex { + my $fh = shift; + my $str = $fh->readn(4); + croak "reached EOF while reading opindex" unless length($str) == 4; + return unpack("N", $str); +} + +sub GET_svindex { + my $fh = shift; + my $str = $fh->readn(4); + croak "reached EOF while reading svindex" unless length($str) == 4; + return unpack("N", $str); +} + sub GET_strconst { my $fh = shift; my ($str, $c); diff --git a/gnu/usr.bin/perl/ext/B/B/Lint.pm b/gnu/usr.bin/perl/ext/B/B/Lint.pm index d34bd7792bc..ed0d07dfcbd 100644 --- a/gnu/usr.bin/perl/ext/B/B/Lint.pm +++ b/gnu/usr.bin/perl/ext/B/B/Lint.pm @@ -116,13 +116,9 @@ Malcolm Beattie, mbeattie@sable.ox.ac.uk. =cut use strict; -use B qw(walkoptree_slow main_root walksymtable svref_2object parents); - -# Constants (should probably be elsewhere) -sub G_ARRAY () { 1 } -sub OPf_LIST () { 1 } -sub OPf_KNOW () { 2 } -sub OPf_STACKED () { 64 } +use B qw(walkoptree_slow main_root walksymtable svref_2object parents + OPf_WANT_LIST OPf_WANT OPf_STACKED G_ARRAY + ); my $file = "unknown"; # shadows current filename my $line = 0; # shadows current line number @@ -133,8 +129,8 @@ my %check; my %implies_ok_context; BEGIN { map($implies_ok_context{$_}++, - qw(pp_scalar pp_av2arylen pp_aelem pp_aslice pp_helem pp_hslice - pp_keys pp_values pp_hslice pp_defined pp_undef pp_delete)); + qw(scalar av2arylen aelem aslice helem hslice + keys values hslice defined undef delete)); } # Lint checks turned on by default @@ -165,8 +161,8 @@ sub warning { sub gimme { my $op = shift; my $flags = $op->flags; - if ($flags & OPf_KNOW) { - return(($flags & OPf_LIST) ? 1 : 0); + if ($flags & OPf_WANT) { + return(($flags & OPf_WANT_LIST) ? 1 : 0); } return undef; } @@ -175,8 +171,8 @@ sub B::OP::lint {} sub B::COP::lint { my $op = shift; - if ($op->ppaddr eq "pp_nextstate") { - $file = $op->filegv->SV->PV; + if ($op->name eq "nextstate") { + $file = $op->file; $line = $op->line; $curstash = $op->stash->NAME; } @@ -184,24 +180,24 @@ sub B::COP::lint { sub B::UNOP::lint { my $op = shift; - my $ppaddr = $op->ppaddr; - if ($check{context} && ($ppaddr eq "pp_rv2av" || $ppaddr eq "pp_rv2hv")) { + my $opname = $op->name; + if ($check{context} && ($opname eq "rv2av" || $opname eq "rv2hv")) { my $parent = parents->[0]; - my $pname = $parent->ppaddr; + my $pname = $parent->name; return if gimme($op) || $implies_ok_context{$pname}; # Two special cases to deal with: "foreach (@foo)" and "delete $a{$b}" # null out the parent so we have to check for a parent of pp_null and # a grandparent of pp_enteriter or pp_delete - if ($pname eq "pp_null") { - my $gpname = parents->[1]->ppaddr; - return if $gpname eq "pp_enteriter" || $gpname eq "pp_delete"; + if ($pname eq "null") { + my $gpname = parents->[1]->name; + return if $gpname eq "enteriter" || $gpname eq "delete"; } warning("Implicit scalar context for %s in %s", - $ppaddr eq "pp_rv2av" ? "array" : "hash", $parent->desc); + $opname eq "rv2av" ? "array" : "hash", $parent->desc); } - if ($check{private_names} && $ppaddr eq "pp_method") { + if ($check{private_names} && $opname eq "method") { my $methop = $op->first; - if ($methop->ppaddr eq "pp_const") { + if ($methop->name eq "const") { my $method = $methop->sv->PV; if ($method =~ /^_/ && !defined(&{"$curstash\::$method"})) { warning("Illegal reference to private method name $method"); @@ -213,14 +209,12 @@ sub B::UNOP::lint { sub B::PMOP::lint { my $op = shift; if ($check{implicit_read}) { - my $ppaddr = $op->ppaddr; - if ($ppaddr eq "pp_match" && !($op->flags & OPf_STACKED)) { + if ($op->name eq "match" && !($op->flags & OPf_STACKED)) { warning('Implicit match on $_'); } } if ($check{implicit_write}) { - my $ppaddr = $op->ppaddr; - if ($ppaddr eq "pp_subst" && !($op->flags & OPf_STACKED)) { + if ($op->name eq "subst" && !($op->flags & OPf_STACKED)) { warning('Implicit substitution on $_'); } } @@ -229,34 +223,35 @@ sub B::PMOP::lint { sub B::LOOP::lint { my $op = shift; if ($check{implicit_read} || $check{implicit_write}) { - my $ppaddr = $op->ppaddr; - if ($ppaddr eq "pp_enteriter") { + if ($op->name eq "enteriter") { my $last = $op->last; - if ($last->ppaddr eq "pp_gv" && $last->gv->NAME eq "_") { + if ($last->name eq "gv" && $last->gv->NAME eq "_") { warning('Implicit use of $_ in foreach'); } } } } -sub B::GVOP::lint { +sub B::SVOP::lint { my $op = shift; - if ($check{dollar_underscore} && $op->ppaddr eq "pp_gvsv" + if ($check{dollar_underscore} && $op->name eq "gvsv" && $op->gv->NAME eq "_") { warning('Use of $_'); } if ($check{private_names}) { - my $ppaddr = $op->ppaddr; - my $gv = $op->gv; - if (($ppaddr eq "pp_gv" || $ppaddr eq "pp_gvsv") - && $gv->NAME =~ /^_./ && $gv->STASH->NAME ne $curstash) - { - warning('Illegal reference to private name %s', $gv->NAME); + my $opname = $op->name; + if ($opname eq "gv" || $opname eq "gvsv") { + my $gv = $op->gv; + if ($gv->NAME =~ /^_./ && $gv->STASH->NAME ne $curstash) { + warning('Illegal reference to private name %s', $gv->NAME); + } } } if ($check{undefined_subs}) { - if ($op->ppaddr eq "pp_gv" && $op->next->ppaddr eq "pp_entersub") { + if ($op->name eq "gv" + && $op->next->name eq "entersub") + { my $gv = $op->gv; my $subname = $gv->STASH->NAME . "::" . $gv->NAME; no strict 'refs'; @@ -266,7 +261,7 @@ sub B::GVOP::lint { } } } - if ($check{regexp_variables} && $op->ppaddr eq "pp_gvsv") { + if ($check{regexp_variables} && $op->name eq "gvsv") { my $name = $op->gv->NAME; if ($name =~ /^[&'`]$/) { warning('Use of regexp variable $%s', $name); diff --git a/gnu/usr.bin/perl/ext/B/B/Stackobj.pm b/gnu/usr.bin/perl/ext/B/B/Stackobj.pm index eea966ceb6b..0db3e33de81 100644 --- a/gnu/usr.bin/perl/ext/B/B/Stackobj.pm +++ b/gnu/usr.bin/perl/ext/B/B/Stackobj.pm @@ -5,34 +5,35 @@ # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the README file. # -package B::Stackobj; +package B::Stackobj; use Exporter (); @ISA = qw(Exporter); -@EXPORT_OK = qw(set_callback T_UNKNOWN T_DOUBLE T_INT +@EXPORT_OK = qw(set_callback T_UNKNOWN T_DOUBLE T_INT VALID_UNSIGNED VALID_INT VALID_DOUBLE VALID_SV REGISTER TEMPORARY); %EXPORT_TAGS = (types => [qw(T_UNKNOWN T_DOUBLE T_INT)], flags => [qw(VALID_INT VALID_DOUBLE VALID_SV - REGISTER TEMPORARY)]); + VALID_UNSIGNED REGISTER TEMPORARY)]); use Carp qw(confess); use strict; -use B qw(class); - -# Perl internal constants that I should probably define elsewhere. -sub SVf_IOK () { 0x10000 } -sub SVf_NOK () { 0x20000 } +use B qw(class SVf_IOK SVf_NOK SVf_IVisUV); # Types sub T_UNKNOWN () { 0 } sub T_DOUBLE () { 1 } sub T_INT () { 2 } +sub T_SPECIAL () { 3 } # Flags sub VALID_INT () { 0x01 } -sub VALID_DOUBLE () { 0x02 } -sub VALID_SV () { 0x04 } -sub REGISTER () { 0x08 } # no implicit write-back when calling subs -sub TEMPORARY () { 0x10 } # no implicit write-back needed at all +sub VALID_UNSIGNED () { 0x02 } +sub VALID_DOUBLE () { 0x04 } +sub VALID_SV () { 0x08 } +sub REGISTER () { 0x10 } # no implicit write-back when calling subs +sub TEMPORARY () { 0x20 } # no implicit write-back needed at all +sub SAVE_INT () { 0x40 } #if int part needs to be saved at all +sub SAVE_DOUBLE () { 0x80 } #if double part needs to be saved at all + # # Callback for runtime code generation @@ -47,7 +48,7 @@ sub runtime { &$runtime_callback(@_) } sub write_back { confess "stack object does not implement write_back" } -sub invalidate { shift->{flags} &= ~(VALID_INT | VALID_DOUBLE) } +sub invalidate { shift->{flags} &= ~(VALID_INT |VALID_UNSIGNED | VALID_DOUBLE) } sub as_sv { my $obj = shift; @@ -62,7 +63,7 @@ sub as_int { my $obj = shift; if (!($obj->{flags} & VALID_INT)) { $obj->load_int; - $obj->{flags} |= VALID_INT; + $obj->{flags} |= VALID_INT|SAVE_INT; } return $obj->{iv}; } @@ -71,7 +72,7 @@ sub as_double { my $obj = shift; if (!($obj->{flags} & VALID_DOUBLE)) { $obj->load_double; - $obj->{flags} |= VALID_DOUBLE; + $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE; } return $obj->{nv}; } @@ -81,6 +82,17 @@ sub as_numeric { return $obj->{type} == T_INT ? $obj->as_int : $obj->as_double; } +sub as_bool { + my $obj=shift; + if ($obj->{flags} & VALID_INT ){ + return $obj->{iv}; + } + if ($obj->{flags} & VALID_DOUBLE ){ + return $obj->{nv}; + } + return sprintf("(SvTRUE(%s))", $obj->as_sv) ; +} + # # Debugging methods # @@ -126,17 +138,18 @@ sub minipeek { # set_numeric and set_sv are only invoked on legal lvalues. # sub set_int { - my ($obj, $expr) = @_; + my ($obj, $expr,$unsigned) = @_; runtime("$obj->{iv} = $expr;"); $obj->{flags} &= ~(VALID_SV | VALID_DOUBLE); - $obj->{flags} |= VALID_INT; + $obj->{flags} |= VALID_INT|SAVE_INT; + $obj->{flags} |= VALID_UNSIGNED if $unsigned; } sub set_double { my ($obj, $expr) = @_; runtime("$obj->{nv} = $expr;"); $obj->{flags} &= ~(VALID_SV | VALID_INT); - $obj->{flags} |= VALID_DOUBLE; + $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE; } sub set_numeric { @@ -162,6 +175,8 @@ sub set_sv { @B::Stackobj::Padsv::ISA = 'B::Stackobj'; sub B::Stackobj::Padsv::new { my ($class, $type, $extra_flags, $ix, $iname, $dname) = @_; + $extra_flags |= SAVE_INT if $extra_flags & VALID_INT; + $extra_flags |= SAVE_DOUBLE if $extra_flags & VALID_DOUBLE; bless { type => $type, flags => VALID_SV | $extra_flags, @@ -178,14 +193,23 @@ sub B::Stackobj::Padsv::load_int { } else { runtime("$obj->{iv} = SvIV($obj->{sv});"); } - $obj->{flags} |= VALID_INT; + $obj->{flags} |= VALID_INT|SAVE_INT; } sub B::Stackobj::Padsv::load_double { my $obj = shift; $obj->write_back; runtime("$obj->{nv} = SvNV($obj->{sv});"); - $obj->{flags} |= VALID_DOUBLE; + $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE; +} +sub B::Stackobj::Padsv::save_int { + my $obj = shift; + return $obj->{flags} & SAVE_INT; +} + +sub B::Stackobj::Padsv::save_double { + my $obj = shift; + return $obj->{flags} & SAVE_DOUBLE; } sub B::Stackobj::Padsv::write_back { @@ -193,7 +217,11 @@ sub B::Stackobj::Padsv::write_back { my $flags = $obj->{flags}; return if $flags & VALID_SV; if ($flags & VALID_INT) { - runtime("sv_setiv($obj->{sv}, $obj->{iv});"); + if ($flags & VALID_UNSIGNED ){ + runtime("sv_setuv($obj->{sv}, $obj->{iv});"); + }else{ + runtime("sv_setiv($obj->{sv}, $obj->{iv});"); + } } elsif ($flags & VALID_DOUBLE) { runtime("sv_setnv($obj->{sv}, $obj->{nv});"); } else { @@ -213,17 +241,26 @@ sub B::Stackobj::Const::new { flags => 0, sv => $sv # holds the SV object until write_back happens }, $class; - my $svflags = $sv->FLAGS; - if ($svflags & SVf_IOK) { - $obj->{flags} = VALID_INT|VALID_DOUBLE; - $obj->{type} = T_INT; - $obj->{nv} = $obj->{iv} = $sv->IV; - } elsif ($svflags & SVf_NOK) { - $obj->{flags} = VALID_INT|VALID_DOUBLE; - $obj->{type} = T_DOUBLE; - $obj->{iv} = $obj->{nv} = $sv->NV; - } else { - $obj->{type} = T_UNKNOWN; + if ( ref($sv) eq "B::SPECIAL" ){ + $obj->{type}= T_SPECIAL; + }else{ + my $svflags = $sv->FLAGS; + if ($svflags & SVf_IOK) { + $obj->{flags} = VALID_INT|VALID_DOUBLE; + $obj->{type} = T_INT; + if ($svflags & SVf_IVisUV){ + $obj->{flags} |= VALID_UNSIGNED; + $obj->{nv} = $obj->{iv} = $sv->UVX; + }else{ + $obj->{nv} = $obj->{iv} = $sv->IV; + } + } elsif ($svflags & SVf_NOK) { + $obj->{flags} = VALID_INT|VALID_DOUBLE; + $obj->{type} = T_DOUBLE; + $obj->{iv} = $obj->{nv} = $sv->NV; + } else { + $obj->{type} = T_UNKNOWN; + } } return $obj; } @@ -238,13 +275,21 @@ sub B::Stackobj::Const::write_back { sub B::Stackobj::Const::load_int { my $obj = shift; - $obj->{iv} = int($obj->{sv}->PV); + if (ref($obj->{sv}) eq "B::RV"){ + $obj->{iv} = int($obj->{sv}->RV->PV); + }else{ + $obj->{iv} = int($obj->{sv}->PV); + } $obj->{flags} |= VALID_INT; } sub B::Stackobj::Const::load_double { my $obj = shift; - $obj->{nv} = $obj->{sv}->PV + 0.0; + if (ref($obj->{sv}) eq "B::RV"){ + $obj->{nv} = $obj->{sv}->RV->PV + 0.0; + }else{ + $obj->{nv} = $obj->{sv}->PV + 0.0; + } $obj->{flags} |= VALID_DOUBLE; } diff --git a/gnu/usr.bin/perl/ext/B/B/Stash.pm b/gnu/usr.bin/perl/ext/B/B/Stash.pm new file mode 100644 index 00000000000..0a3543eed41 --- /dev/null +++ b/gnu/usr.bin/perl/ext/B/B/Stash.pm @@ -0,0 +1,42 @@ +# Stash.pm -- show what stashes are loaded +# vishalb@hotmail.com +package B::Stash; + +BEGIN { %Seen = %INC } + +CHECK { + my @arr=scan($main::{"main::"}); + @arr=map{s/\:\:$//;$_;} @arr; + print "-umain,-u", join (",-u",@arr) ,"\n"; +} +sub scan{ + my $start=shift; + my $prefix=shift; + $prefix = '' unless defined $prefix; + my @return; + foreach my $key ( keys %{$start}){ +# print $prefix,$key,"\n"; + if ($key =~ /::$/){ + unless ($start eq ${$start}{$key} or $key eq "B::" ){ + push @return, $key unless omit($prefix.$key); + foreach my $subscan ( scan(${$start}{$key},$prefix.$key)){ + push @return, "$key".$subscan; + } + } + } + } + return @return; +} +sub omit{ + my $module = shift; + my %omit=("DynaLoader::" => 1 , "XSLoader::" => 1, "CORE::" => 1 , + "CORE::GLOBAL::" => 1, "UNIVERSAL::" => 1 ); + return 1 if $omit{$module}; + if ($module eq "IO::" or $module eq "IO::Handle::"){ + $module =~ s/::/\//g; + return 1 unless $INC{$module}; + } + + return 0; +} +1; diff --git a/gnu/usr.bin/perl/ext/B/B/Terse.pm b/gnu/usr.bin/perl/ext/B/B/Terse.pm index 93757f34ce8..66b5cfc2f2f 100644 --- a/gnu/usr.bin/perl/ext/B/B/Terse.pm +++ b/gnu/usr.bin/perl/ext/B/B/Terse.pm @@ -17,6 +17,7 @@ sub terse { sub compile { my $order = shift; my @options = @_; + B::clearsym(); if (@options) { return sub { my $objname; @@ -53,10 +54,9 @@ sub B::SVOP::terse { $op->sv->terse(0); } -sub B::GVOP::terse { +sub B::PADOP::terse { my ($op, $level) = @_; - print indent($level), peekop($op), " "; - $op->gv->terse(0); + print indent($level), peekop($op), " ", $op->padix, "\n"; } sub B::PMOP::terse { @@ -78,7 +78,7 @@ sub B::COP::terse { if ($label) { $label = " label ".cstring($label); } - print indent($level), peekop($op), $label, "\n"; + print indent($level), peekop($op), $label || "", "\n"; } sub B::PV::terse { diff --git a/gnu/usr.bin/perl/ext/B/B/Xref.pm b/gnu/usr.bin/perl/ext/B/B/Xref.pm index 0102856919a..b4078b8bd39 100644 --- a/gnu/usr.bin/perl/ext/B/B/Xref.pm +++ b/gnu/usr.bin/perl/ext/B/B/Xref.pm @@ -85,11 +85,10 @@ Malcolm Beattie, mbeattie@sable.ox.ac.uk. =cut use strict; -use B qw(peekop class comppadlist main_start svref_2object walksymtable); - -# Constants (should probably be elsewhere) -sub OPpLVAL_INTRO () { 128 } -sub SVf_POK () { 0x40000 } +use Config; +use B qw(peekop class comppadlist main_start svref_2object walksymtable + OPpLVAL_INTRO SVf_POK + ); sub UNKNOWN { ["?", "?", "?"] } @@ -135,17 +134,28 @@ sub process { sub load_pad { my $padlist = shift; - my ($namelistav, @namelist, $ix); + my ($namelistav, $vallistav, @namelist, $ix); @pad = (); return if class($padlist) eq "SPECIAL"; - ($namelistav) = $padlist->ARRAY; + ($namelistav,$vallistav) = $padlist->ARRAY; @namelist = $namelistav->ARRAY; for ($ix = 1; $ix < @namelist; $ix++) { my $namesv = $namelist[$ix]; next if class($namesv) eq "SPECIAL"; - my ($type, $name) = $namesv->PV =~ /^(.)(.*)$/; + my ($type, $name) = $namesv->PV =~ /^(.)([^\0]*)(\0.*)?$/; $pad[$ix] = ["(lexical)", $type, $name]; } + if ($Config{useithreads}) { + my (@vallist); + @vallist = $vallistav->ARRAY; + for ($ix = 1; $ix < @vallist; $ix++) { + my $valsv = $vallist[$ix]; + next unless class($valsv) eq "GV"; + # these pad GVs don't have corresponding names, so same @pad + # array can be used without collisions + $pad[$ix] = [$valsv->STASH->NAME, "*", $valsv->NAME]; + } + } } sub xref { @@ -155,28 +165,24 @@ sub xref { last if $done{$$op}++; warn sprintf("top = [%s, %s, %s]\n", @$top) if $debug_top; warn peekop($op), "\n" if $debug_op; - my $ppname = $op->ppaddr; - if ($ppname =~ /^pp_(or|and|mapwhile|grepwhile)$/) { + my $opname = $op->name; + if ($opname =~ /^(or|and|mapwhile|grepwhile|range|cond_expr)$/) { xref($op->other); - } elsif ($ppname eq "pp_match" || $ppname eq "pp_subst") { + } elsif ($opname eq "match" || $opname eq "subst") { xref($op->pmreplstart); - } elsif ($ppname eq "pp_substcont") { + } elsif ($opname eq "substcont") { xref($op->other->pmreplstart); $op = $op->other; redo; - } elsif ($ppname eq "pp_cond_expr") { - # pp_cond_expr never returns op_next - xref($op->true); - $op = $op->false; - redo; - } elsif ($ppname eq "pp_enterloop") { + } elsif ($opname eq "enterloop") { xref($op->redoop); xref($op->nextop); xref($op->lastop); - } elsif ($ppname eq "pp_subst") { + } elsif ($opname eq "subst") { xref($op->pmreplstart); } else { no strict 'refs'; + my $ppname = "pp_$opname"; &$ppname($op) if defined(&$ppname); } } @@ -207,7 +213,7 @@ sub xref_main { sub pp_nextstate { my $op = shift; - $file = $op->filegv->SV->PV; + $file = $op->file; $line = $op->line; $top = UNKNOWN; } @@ -235,23 +241,45 @@ sub pp_rv2gv { deref($top, "*"); } sub pp_gvsv { my $op = shift; - my $gv = $op->gv; - $top = [$gv->STASH->NAME, '$', $gv->NAME]; + my $gv; + if ($Config{useithreads}) { + $top = $pad[$op->padix]; + $top = UNKNOWN unless $top; + $top->[1] = '$'; + } + else { + $gv = $op->gv; + $top = [$gv->STASH->NAME, '$', $gv->NAME]; + } process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used"); } sub pp_gv { my $op = shift; - my $gv = $op->gv; - $top = [$gv->STASH->NAME, "*", $gv->NAME]; + my $gv; + if ($Config{useithreads}) { + $top = $pad[$op->padix]; + $top = UNKNOWN unless $top; + $top->[1] = '*'; + } + else { + $gv = $op->gv; + $top = [$gv->STASH->NAME, "*", $gv->NAME]; + } process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used"); } sub pp_const { my $op = shift; my $sv = $op->sv; - $top = ["?", "", - (class($sv) ne "SPECIAL" && $sv->FLAGS & SVf_POK) ? $sv->PV : "?"]; + # constant could be in the pad (under useithreads) + if ($$sv) { + $top = ["?", "", + (class($sv) ne "SPECIAL" && $sv->FLAGS & SVf_POK) ? $sv->PV : "?"]; + } + else { + $top = $pad[$op->targ]; + } } sub pp_method { @@ -278,7 +306,7 @@ sub B::GV::xref { my $cv = $gv->CV; if ($$cv) { #return if $done{$$cv}++; - $file = $gv->FILEGV->SV->PV; + $file = $gv->FILE; $line = $gv->LINE; process([$gv->STASH->NAME, "&", $gv->NAME], "subdef"); push(@todo, $cv); @@ -286,7 +314,7 @@ sub B::GV::xref { my $form = $gv->FORM; if ($$form) { return if $done{$$form}++; - $file = $gv->FILEGV->SV->PV; + $file = $gv->FILE; $line = $gv->LINE; process([$gv->STASH->NAME, "", $gv->NAME], "formdef"); } @@ -296,7 +324,7 @@ sub xref_definitions { my ($pack, %exclude); return if $nodefs; $subname = "(definitions)"; - foreach $pack (qw(B O AutoLoader DynaLoader Config DB VMS + foreach $pack (qw(B O AutoLoader DynaLoader XSLoader Config DB VMS strict vars FileHandle Exporter Carp)) { $exclude{$pack."::"} = 1; } diff --git a/gnu/usr.bin/perl/ext/B/Makefile.PL b/gnu/usr.bin/perl/ext/B/Makefile.PL index 80e5e1b905d..cb9696bf416 100644 --- a/gnu/usr.bin/perl/ext/B/Makefile.PL +++ b/gnu/usr.bin/perl/ext/B/Makefile.PL @@ -16,31 +16,21 @@ if ($^O eq 'MSWin32') { WriteMakefile( NAME => "B", VERSION => "a5", - MAN3PODS => {}, + PL_FILES => { 'defsubs_h.PL' => 'defsubs.h' }, + MAN3PODS => {}, clean => { - FILES => "perl$e byteperl$e *$o B.c *~" + FILES => "perl$e *$o B.c defsubs.h *~" } -); +); -sub MY::post_constants { - "\nLIBS = $Config{libs}\n" -} +package MY; -# Leave out doing byteperl for now. Probably should be built in the -# core directory or somewhere else rather than here -#sub MY::top_targets { -# my $self = shift; -# my $targets = $self->MM::top_targets(); -# $targets =~ s/^(all ::.*)$/$1 byteperl$e/m; -# return <<"EOT" . $targets; +sub post_constants { + "\nLIBS = $Config::Config{libs}\n" +} -# -# byteperl is *not* a standard perl+XSUB executable. It's a special -# program for running standalone bytecode executables. It isn't an XSUB -# at the moment because a standlone Perl program needs to set up curpad -# which is overwritten on exit from an XSUB. -# -#byteperl$e : byteperl$o B$o \$(PERL_SRC)/byterun$o -# \$(CC) ${exeout_flag}byteperl$e byteperl$o B$o byterun$o \$(LDFLAGS) \$(PERL_ARCHLIB)/CORE/$Config{libperl} \$(LIBS) -#EOT -#} +sub postamble { +' +B$(OBJ_EXT) : defsubs.h +' +} diff --git a/gnu/usr.bin/perl/ext/B/NOTES b/gnu/usr.bin/perl/ext/B/NOTES index ee10ba03e97..89d03ba9a23 100644 --- a/gnu/usr.bin/perl/ext/B/NOTES +++ b/gnu/usr.bin/perl/ext/B/NOTES @@ -161,8 +161,8 @@ O module it should return a sub ref (usually a closure) to perform the actual compilation. When O regains control, it ensures that the "-c" option is forced (so that the program being compiled doesn't - end up running) and registers an END block to call back the sub ref + end up running) and registers a CHECK block to call back the sub ref returned from the backend's compile(). Perl then continues by parsing prog.pl (just as it would with "perl -c prog.pl") and after - doing so, assuming there are no parse-time errors, the END block + doing so, assuming there are no parse-time errors, the CHECK block of O gets called and the actual backend compilation happens. Phew. diff --git a/gnu/usr.bin/perl/ext/B/O.pm b/gnu/usr.bin/perl/ext/B/O.pm index ad391a3f4a4..352f8d42069 100644 --- a/gnu/usr.bin/perl/ext/B/O.pm +++ b/gnu/usr.bin/perl/ext/B/O.pm @@ -11,7 +11,7 @@ sub import { my $compilesub = &{"B::${backend}::compile"}(@options); if (ref($compilesub) eq "CODE") { minus_c; - eval 'END { &$compilesub() }'; + eval 'CHECK { &$compilesub() }'; } else { die $compilesub; } @@ -59,7 +59,7 @@ C module and calls the C function in that package, passing it OPTIONS. That function is expected to return a sub reference which we'll call CALLBACK. Next, the "compile-only" flag is switched on (equivalent to the command-line option C<-c>) -and an END block is registered which calls CALLBACK. Thus the main +and a CHECK block is registered which calls CALLBACK. Thus the main Perl program mentioned on the command-line is read in, parsed and compiled into internal syntax tree form. Since the C<-c> flag is set, the program does not start running (excepting BEGIN blocks of diff --git a/gnu/usr.bin/perl/ext/B/defsubs_h.PL b/gnu/usr.bin/perl/ext/B/defsubs_h.PL new file mode 100644 index 00000000000..80ef936fcec --- /dev/null +++ b/gnu/usr.bin/perl/ext/B/defsubs_h.PL @@ -0,0 +1,35 @@ +# Do not remove the following line; MakeMaker relies on it to identify +# this file as a template for defsubs.h +# Extracting defsubs.h (with variable substitutions) +#!perl +my ($out) = __FILE__ =~ /(^.*)\.PL/i; +$out =~ s/_h$/.h/; +open(OUT,">$out") || die "Cannot open $file:$!"; +print "Extracting $out...\n"; +foreach my $const (qw(AVf_REAL + HEf_SVKEY + SVf_IOK SVf_IVisUV SVf_NOK SVf_POK + SVf_ROK SVp_IOK SVp_POK )) + { + doconst($const); + } +foreach my $file (qw(op.h cop.h)) + { + open(OPH,"../../$file") || die "Cannot open ../../$file:$!"; + while () + { + doconst($1) if (/#define\s+(\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/); + } + close(OPH); + } +close(OUT); + +sub doconst +{ + my $sym = shift; + my $l = length($sym); + print OUT <<"END"; + newCONSTSUB(stash,"$sym",newSViv($sym)); + av_push(export_ok,newSVpvn("$sym",$l)); +END +} diff --git a/gnu/usr.bin/perl/ext/B/ramblings/flip-flop b/gnu/usr.bin/perl/ext/B/ramblings/flip-flop index 183d541b982..e0cb8ff6205 100644 --- a/gnu/usr.bin/perl/ext/B/ramblings/flip-flop +++ b/gnu/usr.bin/perl/ext/B/ramblings/flip-flop @@ -1,21 +1,24 @@ PP(pp_range) { if (GIMME == G_ARRAY) - return cCONDOP->op_true; - return SvTRUEx(PAD_SV(op->op_targ)) ? cCONDOP->op_false : cCONDOP->op_true; + return NORMAL; + if (SvTRUEx(PAD_SV(PL_op->op_targ))) + return cLOGOP->op_other; + else + return NORMAL; } -pp_range is a CONDOP. -In array context, it just returns op_true. +pp_range is a LOGOP. +In array context, it just returns op_next. In scalar context it checks the truth of targ and returns -op_false if true, op_true if false. +op_other if true, op_next if false. flip is an UNOP. -It "looks after" its child which is always a pp_range CONDOP. -In array context, it just returns the child's op_false. +It "looks after" its child which is always a pp_range LOGOP. +In array context, it just returns the child's op_other. In scalar context, there are three possible outcomes: (1) set child's targ to 1, our targ to 1 and return op_next. - (2) set child's targ to 1, our targ to 0, sp-- and return child's op_false. + (2) set child's targ to 1, our targ to 0, sp-- and return child's op_other. (3) Blank targ and TOPs and return op_next. Case 1 happens for a "..." with a matching lineno... or true TOPs. Case 2 happens for a ".." with a matching lineno... or true TOPs. @@ -37,14 +40,14 @@ Case 3 happens for a non-matching lineno or false TOPs. /* range */ if (SvTRUE(curpad[op->op_targ])) - goto label(op_false); -/* op_true */ + goto label(op_other); +/* op_next */ ... /* flip */ -/* For "..." returns op_next. For ".." returns op_next or op_first->op_false */ +/* For "..." returns op_next. For ".." returns op_next or op_first->op_other */ /* end of basic block */ goto out; -label(range op_false): +label(range op_other): ... /* flop */ out: diff --git a/gnu/usr.bin/perl/ext/B/ramblings/runtime.porting b/gnu/usr.bin/perl/ext/B/ramblings/runtime.porting index 4699b255cf4..d58b01105e6 100644 --- a/gnu/usr.bin/perl/ext/B/ramblings/runtime.porting +++ b/gnu/usr.bin/perl/ext/B/ramblings/runtime.porting @@ -33,8 +33,10 @@ glob 5 2 do_readline readline 8 2 do_readline rcatline 8 2 regcmaybe 8 1 +regcreset 8 1 regcomp 8 9 pregcomp match 8 10 +qr 8 1 subst 8 10 substcont 8 7 trans 7 4 do_trans @@ -170,6 +172,7 @@ orassign 7 3 modifies flow of control method 8 5 entersub 10 7 leavesub 10 5 +leavesublv caller 2 8 warn 9 3 die 9 3 @@ -212,6 +215,7 @@ leavewrite 4 5 prtf 4 4 do_sprintf print 8 6 sysopen 8 2 +sysseek 8 2 sysread 8 4 syswrite 8 4 pp_send send 8 4 @@ -347,4 +351,7 @@ sgrent egrent getlogin syscall - \ No newline at end of file +lock 6 1 +threadsv 6 2 unused if not USE_THREADS +setstate 1 1 currently unused anywhere +method_named 10 2 diff --git a/gnu/usr.bin/perl/ext/B/typemap b/gnu/usr.bin/perl/ext/B/typemap index 7206a6a2e11..bafba1c8e4b 100644 --- a/gnu/usr.bin/perl/ext/B/typemap +++ b/gnu/usr.bin/perl/ext/B/typemap @@ -4,11 +4,10 @@ B::OP T_OP_OBJ B::UNOP T_OP_OBJ B::BINOP T_OP_OBJ B::LOGOP T_OP_OBJ -B::CONDOP T_OP_OBJ B::LISTOP T_OP_OBJ B::PMOP T_OP_OBJ B::SVOP T_OP_OBJ -B::GVOP T_OP_OBJ +B::PADOP T_OP_OBJ B::PVOP T_OP_OBJ B::CVOP T_OP_OBJ B::LOOP T_OP_OBJ @@ -31,12 +30,13 @@ B::IO T_SV_OBJ B::MAGIC T_MG_OBJ SSize_t T_IV STRLEN T_IV +PADOFFSET T_UV INPUT T_OP_OBJ if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); - $var = ($type) tmp; + $var = INT2PTR($type,tmp); } else croak(\"$var is not a reference\") @@ -44,7 +44,7 @@ T_OP_OBJ T_SV_OBJ if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); - $var = ($type) tmp; + $var = INT2PTR($type,tmp); } else croak(\"$var is not a reference\") @@ -52,18 +52,18 @@ T_SV_OBJ T_MG_OBJ if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); - $var = ($type) tmp; + $var = INT2PTR($type,tmp); } else croak(\"$var is not a reference\") OUTPUT T_OP_OBJ - sv_setiv(newSVrv($arg, cc_opclassname((OP*)$var)), (IV)$var); + sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), PTR2IV($var)); T_SV_OBJ - make_sv_object(($arg), (SV*)($var)); + make_sv_object(aTHX_ ($arg), (SV*)($var)); T_MG_OBJ - sv_setiv(newSVrv($arg, "B::MAGIC"), (IV)$var); + sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var)); diff --git a/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.pm b/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.pm new file mode 100644 index 00000000000..286d74697ee --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.pm @@ -0,0 +1,40 @@ +package ByteLoader; + +use XSLoader (); + +$VERSION = 0.03; + +XSLoader::load 'ByteLoader', $VERSION; + +# Preloaded methods go here. + +1; +__END__ + +=head1 NAME + +ByteLoader - load byte compiled perl code + +=head1 SYNOPSIS + + use ByteLoader 0.03; + + + use ByteLoader 0.03; + + +=head1 DESCRIPTION + +This module is used to load byte compiled perl code. It uses the source +filter mechanism to read the byte code and insert it into the compiled +code at the appropriate point. + +=head1 AUTHOR + +Tom Hughes based on the ideas of Tim Bunce and others. + +=head1 SEE ALSO + +perl(1). + +=cut diff --git a/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.xs b/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.xs new file mode 100644 index 00000000000..7c3746bba70 --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/ByteLoader.xs @@ -0,0 +1,79 @@ +#define PERL_NO_GET_CONTEXT +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "byterun.h" + +static int +xgetc(PerlIO *io) +{ + dTHX; + return PerlIO_getc(io); +} + +static int +xfread(char *buf, size_t size, size_t n, PerlIO *io) +{ + dTHX; + int i = PerlIO_read(io, buf, n * size); + if (i > 0) + i /= size; + return i; +} + +static void +freadpv(U32 len, void *data, XPV *pv) +{ + dTHX; + New(666, pv->xpv_pv, len, char); + PerlIO_read((PerlIO*)data, (void*)pv->xpv_pv, len); + pv->xpv_len = len; + pv->xpv_cur = len - 1; +} + +static I32 +byteloader_filter(pTHXo_ int idx, SV *buf_sv, int maxlen) +{ + dTHR; + OP *saveroot = PL_main_root; + OP *savestart = PL_main_start; + struct bytestream bs; + + bs.data = PL_rsfp; + bs.pfgetc = (int(*) (void*))xgetc; + bs.pfread = (int(*) (char*,size_t,size_t,void*))xfread; + bs.pfreadpv = freadpv; + + byterun(aTHXo_ bs); + + if (PL_in_eval) { + OP *o; + + PL_eval_start = PL_main_start; + + o = newSVOP(OP_CONST, 0, newSViv(1)); + PL_eval_root = newLISTOP(OP_LINESEQ, 0, PL_main_root, o); + PL_main_root->op_next = o; + PL_eval_root = newUNOP(OP_LEAVEEVAL, 0, PL_eval_root); + o->op_next = PL_eval_root; + + PL_main_root = saveroot; + PL_main_start = savestart; + } + + return 0; +} + +MODULE = ByteLoader PACKAGE = ByteLoader + +PROTOTYPES: ENABLE + +void +import(...) + PPCODE: + filter_add(byteloader_filter, NULL); + +void +unimport(...) + PPCODE: + filter_del(byteloader_filter); diff --git a/gnu/usr.bin/perl/ext/ByteLoader/Makefile.PL b/gnu/usr.bin/perl/ext/ByteLoader/Makefile.PL new file mode 100644 index 00000000000..c3cfcc7c2fe --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/Makefile.PL @@ -0,0 +1,9 @@ +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'ByteLoader', + VERSION_FROM => 'ByteLoader.pm', + XSPROTOARG => '-noprototypes', + MAN3PODS => {}, # Pods will be built by installman. + OBJECT => 'byterun$(OBJ_EXT) ByteLoader$(OBJ_EXT)', +); diff --git a/gnu/usr.bin/perl/ext/ByteLoader/bytecode.h b/gnu/usr.bin/perl/ext/ByteLoader/bytecode.h new file mode 100644 index 00000000000..1621fed4eba --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/bytecode.h @@ -0,0 +1,161 @@ +typedef char *pvcontents; +typedef char *strconst; +typedef U32 PV; +typedef char *op_tr_array; +typedef int comment_t; +typedef SV *svindex; +typedef OP *opindex; +typedef IV IV64; + +#define BGET_FREAD(argp, len, nelem) \ + bs.pfread((char*)(argp),(len),(nelem),bs.data) +#define BGET_FGETC() bs.pfgetc(bs.data) + +#define BGET_U32(arg) \ + BGET_FREAD(&arg, sizeof(U32), 1); arg = PerlSock_ntohl((U32)arg) +#define BGET_I32(arg) \ + BGET_FREAD(&arg, sizeof(I32), 1); arg = (I32)PerlSock_ntohl((U32)arg) +#define BGET_U16(arg) \ + BGET_FREAD(&arg, sizeof(U16), 1); arg = PerlSock_ntohs((U16)arg) +#define BGET_U8(arg) arg = BGET_FGETC() + +#define BGET_PV(arg) STMT_START { \ + BGET_U32(arg); \ + if (arg) \ + bs.pfreadpv(arg, bs.data, &bytecode_pv); \ + else { \ + bytecode_pv.xpv_pv = 0; \ + bytecode_pv.xpv_len = 0; \ + bytecode_pv.xpv_cur = 0; \ + } \ + } STMT_END + +#ifdef BYTELOADER_LOG_COMMENTS +# define BGET_comment_t(arg) \ + STMT_START { \ + char buf[1024]; \ + int i = 0; \ + do { \ + arg = BGET_FGETC(); \ + buf[i++] = (char)arg; \ + } while (arg != '\n' && arg != EOF); \ + buf[i] = '\0'; \ + PerlIO_printf(PerlIO_stderr(), "%s", buf); \ + } STMT_END +#else +# define BGET_comment_t(arg) \ + do { arg = BGET_FGETC(); } while (arg != '\n' && arg != EOF) +#endif + +/* + * In the following, sizeof(IV)*4 is just a way of encoding 32 on 64-bit-IV + * machines such that 32-bit machine compilers don't whine about the shift + * count being too high even though the code is never reached there. + */ +#define BGET_IV64(arg) STMT_START { \ + U32 hi, lo; \ + BGET_U32(hi); \ + BGET_U32(lo); \ + if (sizeof(IV) == 8) \ + arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo); \ + else if (((I32)hi == -1 && (I32)lo < 0) \ + || ((I32)hi == 0 && (I32)lo >= 0)) { \ + arg = (I32)lo; \ + } \ + else { \ + bytecode_iv_overflows++; \ + arg = 0; \ + } \ + } STMT_END + +#define BGET_op_tr_array(arg) do { \ + unsigned short *ary; \ + int i; \ + New(666, ary, 256, unsigned short); \ + BGET_FREAD(ary, 256, 2); \ + for (i = 0; i < 256; i++) \ + ary[i] = PerlSock_ntohs(ary[i]); \ + arg = (char *) ary; \ + } while (0) + +#define BGET_pvcontents(arg) arg = bytecode_pv.xpv_pv +#define BGET_strconst(arg) STMT_START { \ + for (arg = PL_tokenbuf; (*arg = BGET_FGETC()); arg++) /* nothing */; \ + arg = PL_tokenbuf; \ + } STMT_END + +#define BGET_NV(arg) STMT_START { \ + char *str; \ + BGET_strconst(str); \ + arg = Atof(str); \ + } STMT_END + +#define BGET_objindex(arg, type) STMT_START { \ + U32 ix; \ + BGET_U32(ix); \ + arg = (type)bytecode_obj_list[ix]; \ + } STMT_END +#define BGET_svindex(arg) BGET_objindex(arg, svindex) +#define BGET_opindex(arg) BGET_objindex(arg, opindex) + +#define BSET_ldspecsv(sv, arg) sv = specialsv_list[arg] + +#define BSET_sv_refcnt_add(svrefcnt, arg) svrefcnt += arg +#define BSET_gp_refcnt_add(gprefcnt, arg) gprefcnt += arg +#define BSET_gp_share(sv, arg) STMT_START { \ + gp_free((GV*)sv); \ + GvGP(sv) = GvGP(arg); \ + } STMT_END + +#define BSET_gv_fetchpv(sv, arg) sv = (SV*)gv_fetchpv(arg, TRUE, SVt_PV) +#define BSET_gv_stashpv(sv, arg) sv = (SV*)gv_stashpv(arg, TRUE) +#define BSET_sv_magic(sv, arg) sv_magic(sv, Nullsv, arg, 0, 0) +#define BSET_mg_pv(mg, arg) mg->mg_ptr = arg; mg->mg_len = bytecode_pv.xpv_cur +#define BSET_sv_upgrade(sv, arg) (void)SvUPGRADE(sv, arg) +#define BSET_xpv(sv) do { \ + SvPV_set(sv, bytecode_pv.xpv_pv); \ + SvCUR_set(sv, bytecode_pv.xpv_cur); \ + SvLEN_set(sv, bytecode_pv.xpv_len); \ + } while (0) +#define BSET_av_extend(sv, arg) av_extend((AV*)sv, arg) + +#define BSET_av_push(sv, arg) av_push((AV*)sv, arg) +#define BSET_hv_store(sv, arg) \ + hv_store((HV*)sv, bytecode_pv.xpv_pv, bytecode_pv.xpv_cur, arg, 0) +#define BSET_pv_free(pv) Safefree(pv.xpv_pv) +#define BSET_pregcomp(o, arg) \ + ((PMOP*)o)->op_pmregexp = arg ? \ + CALLREGCOMP(aTHX_ arg, arg + bytecode_pv.xpv_cur, ((PMOP*)o)) : 0 +#define BSET_newsv(sv, arg) sv = NEWSV(666,0); SvUPGRADE(sv, arg) +#define BSET_newop(o, arg) ((o = (OP*)safemalloc(optype_size[arg])), \ + memzero((char*)o,optype_size[arg])) +#define BSET_newopn(o, arg) STMT_START { \ + OP *oldop = o; \ + BSET_newop(o, arg); \ + oldop->op_next = o; \ + } STMT_END + +#define BSET_ret(foo) return + +/* + * Kludge special-case workaround for OP_MAPSTART + * which needs the ppaddr for OP_GREPSTART. Blech. + */ +#define BSET_op_type(o, arg) STMT_START { \ + o->op_type = arg; \ + if (arg == OP_MAPSTART) \ + arg = OP_GREPSTART; \ + o->op_ppaddr = PL_ppaddr[arg]; \ + } STMT_END +#define BSET_op_ppaddr(o, arg) Perl_croak(aTHX_ "op_ppaddr not yet implemented") +#define BSET_curpad(pad, arg) STMT_START { \ + PL_comppad = (AV *)arg; \ + pad = AvARRAY(arg); \ + } STMT_END +#define BSET_cop_file(cop, arg) CopFILE_set(cop,arg) +#define BSET_cop_line(cop, arg) CopLINE_set(cop,arg) +#define BSET_cop_stashpv(cop, arg) CopSTASHPV_set(cop,arg) + +#define BSET_OBJ_STORE(obj, ix) \ + (I32)ix > bytecode_obj_list_fill ? \ + bset_obj_store(aTHXo_ obj, (I32)ix) : (bytecode_obj_list[ix] = obj) diff --git a/gnu/usr.bin/perl/ext/ByteLoader/byterun.c b/gnu/usr.bin/perl/ext/ByteLoader/byterun.c new file mode 100644 index 00000000000..a1044ab2c0f --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/byterun.c @@ -0,0 +1,899 @@ +/* + * Copyright (c) 1996-1999 Malcolm Beattie + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ +/* + * This file is autogenerated from bytecode.pl. Changes made here will be lost. + */ + +#define PERL_NO_GET_CONTEXT +#include "EXTERN.h" +#include "perl.h" +#define NO_XSLOCKS +#include "XSUB.h" + +#ifdef PERL_OBJECT +#undef CALL_FPTR +#define CALL_FPTR(fptr) (pPerl->*fptr) +#undef PL_ppaddr +#define PL_ppaddr (*get_ppaddr()) +#endif + +#include "byterun.h" +#include "bytecode.h" + + +static int optype_size[] = { + sizeof(OP), + sizeof(UNOP), + sizeof(BINOP), + sizeof(LOGOP), + sizeof(LISTOP), + sizeof(PMOP), + sizeof(SVOP), + sizeof(PADOP), + sizeof(PVOP), + sizeof(LOOP), + sizeof(COP) +}; + +static SV *specialsv_list[4]; + +static int bytecode_iv_overflows = 0; +static SV *bytecode_sv; +static XPV bytecode_pv; +static void **bytecode_obj_list; +static I32 bytecode_obj_list_fill = -1; + +void * +bset_obj_store(pTHXo_ void *obj, I32 ix) +{ + if (ix > bytecode_obj_list_fill) { + if (bytecode_obj_list_fill == -1) + New(666, bytecode_obj_list, ix + 1, void*); + else + Renew(bytecode_obj_list, ix + 1, void*); + bytecode_obj_list_fill = ix; + } + bytecode_obj_list[ix] = obj; + return obj; +} + +void +byterun(pTHXo_ struct bytestream bs) +{ + dTHR; + int insn; + + specialsv_list[0] = Nullsv; + specialsv_list[1] = &PL_sv_undef; + specialsv_list[2] = &PL_sv_yes; + specialsv_list[3] = &PL_sv_no; + + while ((insn = BGET_FGETC()) != EOF) { + switch (insn) { + case INSN_COMMENT: /* 35 */ + { + comment_t arg; + BGET_comment_t(arg); + arg = arg; + break; + } + case INSN_NOP: /* 10 */ + { + break; + } + case INSN_RET: /* 0 */ + { + BSET_ret(none); + break; + } + case INSN_LDSV: /* 1 */ + { + svindex arg; + BGET_svindex(arg); + bytecode_sv = arg; + break; + } + case INSN_LDOP: /* 2 */ + { + opindex arg; + BGET_opindex(arg); + PL_op = arg; + break; + } + case INSN_STSV: /* 3 */ + { + U32 arg; + BGET_U32(arg); + BSET_OBJ_STORE(bytecode_sv, arg); + break; + } + case INSN_STOP: /* 4 */ + { + U32 arg; + BGET_U32(arg); + BSET_OBJ_STORE(PL_op, arg); + break; + } + case INSN_LDSPECSV: /* 5 */ + { + U8 arg; + BGET_U8(arg); + BSET_ldspecsv(bytecode_sv, arg); + break; + } + case INSN_NEWSV: /* 6 */ + { + U8 arg; + BGET_U8(arg); + BSET_newsv(bytecode_sv, arg); + break; + } + case INSN_NEWOP: /* 7 */ + { + U8 arg; + BGET_U8(arg); + BSET_newop(PL_op, arg); + break; + } + case INSN_NEWOPN: /* 8 */ + { + U8 arg; + BGET_U8(arg); + BSET_newopn(PL_op, arg); + break; + } + case INSN_NEWPV: /* 9 */ + { + PV arg; + BGET_PV(arg); + break; + } + case INSN_PV_CUR: /* 11 */ + { + STRLEN arg; + BGET_U32(arg); + bytecode_pv.xpv_cur = arg; + break; + } + case INSN_PV_FREE: /* 12 */ + { + BSET_pv_free(bytecode_pv); + break; + } + case INSN_SV_UPGRADE: /* 13 */ + { + char arg; + BGET_U8(arg); + BSET_sv_upgrade(bytecode_sv, arg); + break; + } + case INSN_SV_REFCNT: /* 14 */ + { + U32 arg; + BGET_U32(arg); + SvREFCNT(bytecode_sv) = arg; + break; + } + case INSN_SV_REFCNT_ADD: /* 15 */ + { + I32 arg; + BGET_I32(arg); + BSET_sv_refcnt_add(SvREFCNT(bytecode_sv), arg); + break; + } + case INSN_SV_FLAGS: /* 16 */ + { + U32 arg; + BGET_U32(arg); + SvFLAGS(bytecode_sv) = arg; + break; + } + case INSN_XRV: /* 17 */ + { + svindex arg; + BGET_svindex(arg); + SvRV(bytecode_sv) = arg; + break; + } + case INSN_XPV: /* 18 */ + { + BSET_xpv(bytecode_sv); + break; + } + case INSN_XIV32: /* 19 */ + { + I32 arg; + BGET_I32(arg); + SvIVX(bytecode_sv) = arg; + break; + } + case INSN_XIV64: /* 20 */ + { + IV64 arg; + BGET_IV64(arg); + SvIVX(bytecode_sv) = arg; + break; + } + case INSN_XNV: /* 21 */ + { + NV arg; + BGET_NV(arg); + SvNVX(bytecode_sv) = arg; + break; + } + case INSN_XLV_TARGOFF: /* 22 */ + { + STRLEN arg; + BGET_U32(arg); + LvTARGOFF(bytecode_sv) = arg; + break; + } + case INSN_XLV_TARGLEN: /* 23 */ + { + STRLEN arg; + BGET_U32(arg); + LvTARGLEN(bytecode_sv) = arg; + break; + } + case INSN_XLV_TARG: /* 24 */ + { + svindex arg; + BGET_svindex(arg); + LvTARG(bytecode_sv) = arg; + break; + } + case INSN_XLV_TYPE: /* 25 */ + { + char arg; + BGET_U8(arg); + LvTYPE(bytecode_sv) = arg; + break; + } + case INSN_XBM_USEFUL: /* 26 */ + { + I32 arg; + BGET_I32(arg); + BmUSEFUL(bytecode_sv) = arg; + break; + } + case INSN_XBM_PREVIOUS: /* 27 */ + { + U16 arg; + BGET_U16(arg); + BmPREVIOUS(bytecode_sv) = arg; + break; + } + case INSN_XBM_RARE: /* 28 */ + { + U8 arg; + BGET_U8(arg); + BmRARE(bytecode_sv) = arg; + break; + } + case INSN_XFM_LINES: /* 29 */ + { + I32 arg; + BGET_I32(arg); + FmLINES(bytecode_sv) = arg; + break; + } + case INSN_XIO_LINES: /* 30 */ + { + long arg; + BGET_I32(arg); + IoLINES(bytecode_sv) = arg; + break; + } + case INSN_XIO_PAGE: /* 31 */ + { + long arg; + BGET_I32(arg); + IoPAGE(bytecode_sv) = arg; + break; + } + case INSN_XIO_PAGE_LEN: /* 32 */ + { + long arg; + BGET_I32(arg); + IoPAGE_LEN(bytecode_sv) = arg; + break; + } + case INSN_XIO_LINES_LEFT: /* 33 */ + { + long arg; + BGET_I32(arg); + IoLINES_LEFT(bytecode_sv) = arg; + break; + } + case INSN_XIO_TOP_NAME: /* 34 */ + { + pvcontents arg; + BGET_pvcontents(arg); + IoTOP_NAME(bytecode_sv) = arg; + break; + } + case INSN_XIO_TOP_GV: /* 36 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&IoTOP_GV(bytecode_sv) = arg; + break; + } + case INSN_XIO_FMT_NAME: /* 37 */ + { + pvcontents arg; + BGET_pvcontents(arg); + IoFMT_NAME(bytecode_sv) = arg; + break; + } + case INSN_XIO_FMT_GV: /* 38 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&IoFMT_GV(bytecode_sv) = arg; + break; + } + case INSN_XIO_BOTTOM_NAME: /* 39 */ + { + pvcontents arg; + BGET_pvcontents(arg); + IoBOTTOM_NAME(bytecode_sv) = arg; + break; + } + case INSN_XIO_BOTTOM_GV: /* 40 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&IoBOTTOM_GV(bytecode_sv) = arg; + break; + } + case INSN_XIO_SUBPROCESS: /* 41 */ + { + short arg; + BGET_U16(arg); + IoSUBPROCESS(bytecode_sv) = arg; + break; + } + case INSN_XIO_TYPE: /* 42 */ + { + char arg; + BGET_U8(arg); + IoTYPE(bytecode_sv) = arg; + break; + } + case INSN_XIO_FLAGS: /* 43 */ + { + char arg; + BGET_U8(arg); + IoFLAGS(bytecode_sv) = arg; + break; + } + case INSN_XCV_STASH: /* 44 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&CvSTASH(bytecode_sv) = arg; + break; + } + case INSN_XCV_START: /* 45 */ + { + opindex arg; + BGET_opindex(arg); + CvSTART(bytecode_sv) = arg; + break; + } + case INSN_XCV_ROOT: /* 46 */ + { + opindex arg; + BGET_opindex(arg); + CvROOT(bytecode_sv) = arg; + break; + } + case INSN_XCV_GV: /* 47 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&CvGV(bytecode_sv) = arg; + break; + } + case INSN_XCV_FILE: /* 48 */ + { + pvcontents arg; + BGET_pvcontents(arg); + CvFILE(bytecode_sv) = arg; + break; + } + case INSN_XCV_DEPTH: /* 49 */ + { + long arg; + BGET_I32(arg); + CvDEPTH(bytecode_sv) = arg; + break; + } + case INSN_XCV_PADLIST: /* 50 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&CvPADLIST(bytecode_sv) = arg; + break; + } + case INSN_XCV_OUTSIDE: /* 51 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&CvOUTSIDE(bytecode_sv) = arg; + break; + } + case INSN_XCV_FLAGS: /* 52 */ + { + U16 arg; + BGET_U16(arg); + CvFLAGS(bytecode_sv) = arg; + break; + } + case INSN_AV_EXTEND: /* 53 */ + { + SSize_t arg; + BGET_I32(arg); + BSET_av_extend(bytecode_sv, arg); + break; + } + case INSN_AV_PUSH: /* 54 */ + { + svindex arg; + BGET_svindex(arg); + BSET_av_push(bytecode_sv, arg); + break; + } + case INSN_XAV_FILL: /* 55 */ + { + SSize_t arg; + BGET_I32(arg); + AvFILLp(bytecode_sv) = arg; + break; + } + case INSN_XAV_MAX: /* 56 */ + { + SSize_t arg; + BGET_I32(arg); + AvMAX(bytecode_sv) = arg; + break; + } + case INSN_XAV_FLAGS: /* 57 */ + { + U8 arg; + BGET_U8(arg); + AvFLAGS(bytecode_sv) = arg; + break; + } + case INSN_XHV_RITER: /* 58 */ + { + I32 arg; + BGET_I32(arg); + HvRITER(bytecode_sv) = arg; + break; + } + case INSN_XHV_NAME: /* 59 */ + { + pvcontents arg; + BGET_pvcontents(arg); + HvNAME(bytecode_sv) = arg; + break; + } + case INSN_HV_STORE: /* 60 */ + { + svindex arg; + BGET_svindex(arg); + BSET_hv_store(bytecode_sv, arg); + break; + } + case INSN_SV_MAGIC: /* 61 */ + { + char arg; + BGET_U8(arg); + BSET_sv_magic(bytecode_sv, arg); + break; + } + case INSN_MG_OBJ: /* 62 */ + { + svindex arg; + BGET_svindex(arg); + SvMAGIC(bytecode_sv)->mg_obj = arg; + break; + } + case INSN_MG_PRIVATE: /* 63 */ + { + U16 arg; + BGET_U16(arg); + SvMAGIC(bytecode_sv)->mg_private = arg; + break; + } + case INSN_MG_FLAGS: /* 64 */ + { + U8 arg; + BGET_U8(arg); + SvMAGIC(bytecode_sv)->mg_flags = arg; + break; + } + case INSN_MG_PV: /* 65 */ + { + pvcontents arg; + BGET_pvcontents(arg); + BSET_mg_pv(SvMAGIC(bytecode_sv), arg); + break; + } + case INSN_XMG_STASH: /* 66 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&SvSTASH(bytecode_sv) = arg; + break; + } + case INSN_GV_FETCHPV: /* 67 */ + { + strconst arg; + BGET_strconst(arg); + BSET_gv_fetchpv(bytecode_sv, arg); + break; + } + case INSN_GV_STASHPV: /* 68 */ + { + strconst arg; + BGET_strconst(arg); + BSET_gv_stashpv(bytecode_sv, arg); + break; + } + case INSN_GP_SV: /* 69 */ + { + svindex arg; + BGET_svindex(arg); + GvSV(bytecode_sv) = arg; + break; + } + case INSN_GP_REFCNT: /* 70 */ + { + U32 arg; + BGET_U32(arg); + GvREFCNT(bytecode_sv) = arg; + break; + } + case INSN_GP_REFCNT_ADD: /* 71 */ + { + I32 arg; + BGET_I32(arg); + BSET_gp_refcnt_add(GvREFCNT(bytecode_sv), arg); + break; + } + case INSN_GP_AV: /* 72 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&GvAV(bytecode_sv) = arg; + break; + } + case INSN_GP_HV: /* 73 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&GvHV(bytecode_sv) = arg; + break; + } + case INSN_GP_CV: /* 74 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&GvCV(bytecode_sv) = arg; + break; + } + case INSN_GP_FILE: /* 75 */ + { + pvcontents arg; + BGET_pvcontents(arg); + GvFILE(bytecode_sv) = arg; + break; + } + case INSN_GP_IO: /* 76 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&GvIOp(bytecode_sv) = arg; + break; + } + case INSN_GP_FORM: /* 77 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&GvFORM(bytecode_sv) = arg; + break; + } + case INSN_GP_CVGEN: /* 78 */ + { + U32 arg; + BGET_U32(arg); + GvCVGEN(bytecode_sv) = arg; + break; + } + case INSN_GP_LINE: /* 79 */ + { + line_t arg; + BGET_U16(arg); + GvLINE(bytecode_sv) = arg; + break; + } + case INSN_GP_SHARE: /* 80 */ + { + svindex arg; + BGET_svindex(arg); + BSET_gp_share(bytecode_sv, arg); + break; + } + case INSN_XGV_FLAGS: /* 81 */ + { + U8 arg; + BGET_U8(arg); + GvFLAGS(bytecode_sv) = arg; + break; + } + case INSN_OP_NEXT: /* 82 */ + { + opindex arg; + BGET_opindex(arg); + PL_op->op_next = arg; + break; + } + case INSN_OP_SIBLING: /* 83 */ + { + opindex arg; + BGET_opindex(arg); + PL_op->op_sibling = arg; + break; + } + case INSN_OP_PPADDR: /* 84 */ + { + strconst arg; + BGET_strconst(arg); + BSET_op_ppaddr(PL_op->op_ppaddr, arg); + break; + } + case INSN_OP_TARG: /* 85 */ + { + PADOFFSET arg; + BGET_U32(arg); + PL_op->op_targ = arg; + break; + } + case INSN_OP_TYPE: /* 86 */ + { + OPCODE arg; + BGET_U16(arg); + BSET_op_type(PL_op, arg); + break; + } + case INSN_OP_SEQ: /* 87 */ + { + U16 arg; + BGET_U16(arg); + PL_op->op_seq = arg; + break; + } + case INSN_OP_FLAGS: /* 88 */ + { + U8 arg; + BGET_U8(arg); + PL_op->op_flags = arg; + break; + } + case INSN_OP_PRIVATE: /* 89 */ + { + U8 arg; + BGET_U8(arg); + PL_op->op_private = arg; + break; + } + case INSN_OP_FIRST: /* 90 */ + { + opindex arg; + BGET_opindex(arg); + cUNOP->op_first = arg; + break; + } + case INSN_OP_LAST: /* 91 */ + { + opindex arg; + BGET_opindex(arg); + cBINOP->op_last = arg; + break; + } + case INSN_OP_OTHER: /* 92 */ + { + opindex arg; + BGET_opindex(arg); + cLOGOP->op_other = arg; + break; + } + case INSN_OP_CHILDREN: /* 93 */ + { + U32 arg; + BGET_U32(arg); + cLISTOP->op_children = arg; + break; + } + case INSN_OP_PMREPLROOT: /* 94 */ + { + opindex arg; + BGET_opindex(arg); + cPMOP->op_pmreplroot = arg; + break; + } + case INSN_OP_PMREPLROOTGV: /* 95 */ + { + svindex arg; + BGET_svindex(arg); + *(SV**)&cPMOP->op_pmreplroot = arg; + break; + } + case INSN_OP_PMREPLSTART: /* 96 */ + { + opindex arg; + BGET_opindex(arg); + cPMOP->op_pmreplstart = arg; + break; + } + case INSN_OP_PMNEXT: /* 97 */ + { + opindex arg; + BGET_opindex(arg); + *(OP**)&cPMOP->op_pmnext = arg; + break; + } + case INSN_PREGCOMP: /* 98 */ + { + pvcontents arg; + BGET_pvcontents(arg); + BSET_pregcomp(PL_op, arg); + break; + } + case INSN_OP_PMFLAGS: /* 99 */ + { + U16 arg; + BGET_U16(arg); + cPMOP->op_pmflags = arg; + break; + } + case INSN_OP_PMPERMFLAGS: /* 100 */ + { + U16 arg; + BGET_U16(arg); + cPMOP->op_pmpermflags = arg; + break; + } + case INSN_OP_SV: /* 101 */ + { + svindex arg; + BGET_svindex(arg); + cSVOP->op_sv = arg; + break; + } + case INSN_OP_PADIX: /* 102 */ + { + PADOFFSET arg; + BGET_U32(arg); + cPADOP->op_padix = arg; + break; + } + case INSN_OP_PV: /* 103 */ + { + pvcontents arg; + BGET_pvcontents(arg); + cPVOP->op_pv = arg; + break; + } + case INSN_OP_PV_TR: /* 104 */ + { + op_tr_array arg; + BGET_op_tr_array(arg); + cPVOP->op_pv = arg; + break; + } + case INSN_OP_REDOOP: /* 105 */ + { + opindex arg; + BGET_opindex(arg); + cLOOP->op_redoop = arg; + break; + } + case INSN_OP_NEXTOP: /* 106 */ + { + opindex arg; + BGET_opindex(arg); + cLOOP->op_nextop = arg; + break; + } + case INSN_OP_LASTOP: /* 107 */ + { + opindex arg; + BGET_opindex(arg); + cLOOP->op_lastop = arg; + break; + } + case INSN_COP_LABEL: /* 108 */ + { + pvcontents arg; + BGET_pvcontents(arg); + cCOP->cop_label = arg; + break; + } + case INSN_COP_STASHPV: /* 109 */ + { + pvcontents arg; + BGET_pvcontents(arg); + BSET_cop_stashpv(cCOP, arg); + break; + } + case INSN_COP_FILE: /* 110 */ + { + pvcontents arg; + BGET_pvcontents(arg); + BSET_cop_file(cCOP, arg); + break; + } + case INSN_COP_SEQ: /* 111 */ + { + U32 arg; + BGET_U32(arg); + cCOP->cop_seq = arg; + break; + } + case INSN_COP_ARYBASE: /* 112 */ + { + I32 arg; + BGET_I32(arg); + cCOP->cop_arybase = arg; + break; + } + case INSN_COP_LINE: /* 113 */ + { + line_t arg; + BGET_U16(arg); + BSET_cop_line(cCOP, arg); + break; + } + case INSN_COP_WARNINGS: /* 114 */ + { + svindex arg; + BGET_svindex(arg); + cCOP->cop_warnings = arg; + break; + } + case INSN_MAIN_START: /* 115 */ + { + opindex arg; + BGET_opindex(arg); + PL_main_start = arg; + break; + } + case INSN_MAIN_ROOT: /* 116 */ + { + opindex arg; + BGET_opindex(arg); + PL_main_root = arg; + break; + } + case INSN_CURPAD: /* 117 */ + { + svindex arg; + BGET_svindex(arg); + BSET_curpad(PL_curpad, arg); + break; + } + default: + Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn); + /* NOTREACHED */ + } + } +} diff --git a/gnu/usr.bin/perl/ext/ByteLoader/byterun.h b/gnu/usr.bin/perl/ext/ByteLoader/byterun.h new file mode 100644 index 00000000000..f0de6b48204 --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/byterun.h @@ -0,0 +1,161 @@ +/* + * Copyright (c) 1996-1999 Malcolm Beattie + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ +/* + * This file is autogenerated from bytecode.pl. Changes made here will be lost. + */ +struct bytestream { + void *data; + int (*pfgetc)(void *); + int (*pfread)(char *, size_t, size_t, void *); + void (*pfreadpv)(U32, void *, XPV *); +}; + +enum { + INSN_RET, /* 0 */ + INSN_LDSV, /* 1 */ + INSN_LDOP, /* 2 */ + INSN_STSV, /* 3 */ + INSN_STOP, /* 4 */ + INSN_LDSPECSV, /* 5 */ + INSN_NEWSV, /* 6 */ + INSN_NEWOP, /* 7 */ + INSN_NEWOPN, /* 8 */ + INSN_NEWPV, /* 9 */ + INSN_NOP, /* 10 */ + INSN_PV_CUR, /* 11 */ + INSN_PV_FREE, /* 12 */ + INSN_SV_UPGRADE, /* 13 */ + INSN_SV_REFCNT, /* 14 */ + INSN_SV_REFCNT_ADD, /* 15 */ + INSN_SV_FLAGS, /* 16 */ + INSN_XRV, /* 17 */ + INSN_XPV, /* 18 */ + INSN_XIV32, /* 19 */ + INSN_XIV64, /* 20 */ + INSN_XNV, /* 21 */ + INSN_XLV_TARGOFF, /* 22 */ + INSN_XLV_TARGLEN, /* 23 */ + INSN_XLV_TARG, /* 24 */ + INSN_XLV_TYPE, /* 25 */ + INSN_XBM_USEFUL, /* 26 */ + INSN_XBM_PREVIOUS, /* 27 */ + INSN_XBM_RARE, /* 28 */ + INSN_XFM_LINES, /* 29 */ + INSN_XIO_LINES, /* 30 */ + INSN_XIO_PAGE, /* 31 */ + INSN_XIO_PAGE_LEN, /* 32 */ + INSN_XIO_LINES_LEFT, /* 33 */ + INSN_XIO_TOP_NAME, /* 34 */ + INSN_COMMENT, /* 35 */ + INSN_XIO_TOP_GV, /* 36 */ + INSN_XIO_FMT_NAME, /* 37 */ + INSN_XIO_FMT_GV, /* 38 */ + INSN_XIO_BOTTOM_NAME, /* 39 */ + INSN_XIO_BOTTOM_GV, /* 40 */ + INSN_XIO_SUBPROCESS, /* 41 */ + INSN_XIO_TYPE, /* 42 */ + INSN_XIO_FLAGS, /* 43 */ + INSN_XCV_STASH, /* 44 */ + INSN_XCV_START, /* 45 */ + INSN_XCV_ROOT, /* 46 */ + INSN_XCV_GV, /* 47 */ + INSN_XCV_FILE, /* 48 */ + INSN_XCV_DEPTH, /* 49 */ + INSN_XCV_PADLIST, /* 50 */ + INSN_XCV_OUTSIDE, /* 51 */ + INSN_XCV_FLAGS, /* 52 */ + INSN_AV_EXTEND, /* 53 */ + INSN_AV_PUSH, /* 54 */ + INSN_XAV_FILL, /* 55 */ + INSN_XAV_MAX, /* 56 */ + INSN_XAV_FLAGS, /* 57 */ + INSN_XHV_RITER, /* 58 */ + INSN_XHV_NAME, /* 59 */ + INSN_HV_STORE, /* 60 */ + INSN_SV_MAGIC, /* 61 */ + INSN_MG_OBJ, /* 62 */ + INSN_MG_PRIVATE, /* 63 */ + INSN_MG_FLAGS, /* 64 */ + INSN_MG_PV, /* 65 */ + INSN_XMG_STASH, /* 66 */ + INSN_GV_FETCHPV, /* 67 */ + INSN_GV_STASHPV, /* 68 */ + INSN_GP_SV, /* 69 */ + INSN_GP_REFCNT, /* 70 */ + INSN_GP_REFCNT_ADD, /* 71 */ + INSN_GP_AV, /* 72 */ + INSN_GP_HV, /* 73 */ + INSN_GP_CV, /* 74 */ + INSN_GP_FILE, /* 75 */ + INSN_GP_IO, /* 76 */ + INSN_GP_FORM, /* 77 */ + INSN_GP_CVGEN, /* 78 */ + INSN_GP_LINE, /* 79 */ + INSN_GP_SHARE, /* 80 */ + INSN_XGV_FLAGS, /* 81 */ + INSN_OP_NEXT, /* 82 */ + INSN_OP_SIBLING, /* 83 */ + INSN_OP_PPADDR, /* 84 */ + INSN_OP_TARG, /* 85 */ + INSN_OP_TYPE, /* 86 */ + INSN_OP_SEQ, /* 87 */ + INSN_OP_FLAGS, /* 88 */ + INSN_OP_PRIVATE, /* 89 */ + INSN_OP_FIRST, /* 90 */ + INSN_OP_LAST, /* 91 */ + INSN_OP_OTHER, /* 92 */ + INSN_OP_CHILDREN, /* 93 */ + INSN_OP_PMREPLROOT, /* 94 */ + INSN_OP_PMREPLROOTGV, /* 95 */ + INSN_OP_PMREPLSTART, /* 96 */ + INSN_OP_PMNEXT, /* 97 */ + INSN_PREGCOMP, /* 98 */ + INSN_OP_PMFLAGS, /* 99 */ + INSN_OP_PMPERMFLAGS, /* 100 */ + INSN_OP_SV, /* 101 */ + INSN_OP_PADIX, /* 102 */ + INSN_OP_PV, /* 103 */ + INSN_OP_PV_TR, /* 104 */ + INSN_OP_REDOOP, /* 105 */ + INSN_OP_NEXTOP, /* 106 */ + INSN_OP_LASTOP, /* 107 */ + INSN_COP_LABEL, /* 108 */ + INSN_COP_STASHPV, /* 109 */ + INSN_COP_FILE, /* 110 */ + INSN_COP_SEQ, /* 111 */ + INSN_COP_ARYBASE, /* 112 */ + INSN_COP_LINE, /* 113 */ + INSN_COP_WARNINGS, /* 114 */ + INSN_MAIN_START, /* 115 */ + INSN_MAIN_ROOT, /* 116 */ + INSN_CURPAD, /* 117 */ + MAX_INSN = 117 +}; + +enum { + OPt_OP, /* 0 */ + OPt_UNOP, /* 1 */ + OPt_BINOP, /* 2 */ + OPt_LOGOP, /* 3 */ + OPt_LISTOP, /* 4 */ + OPt_PMOP, /* 5 */ + OPt_SVOP, /* 6 */ + OPt_PADOP, /* 7 */ + OPt_PVOP, /* 8 */ + OPt_LOOP, /* 9 */ + OPt_COP /* 10 */ +}; + +extern void byterun(pTHXo_ struct bytestream bs); + +#define INIT_SPECIALSV_LIST STMT_START { \ + PL_specialsv_list[0] = Nullsv; \ + PL_specialsv_list[1] = &PL_sv_undef; \ + PL_specialsv_list[2] = &PL_sv_yes; \ + PL_specialsv_list[3] = &PL_sv_no; \ + } STMT_END diff --git a/gnu/usr.bin/perl/ext/ByteLoader/hints/sunos.pl b/gnu/usr.bin/perl/ext/ByteLoader/hints/sunos.pl new file mode 100644 index 00000000000..3faf498ecc6 --- /dev/null +++ b/gnu/usr.bin/perl/ext/ByteLoader/hints/sunos.pl @@ -0,0 +1,2 @@ +$self->{CCFLAGS} = $Config{ccflags} . ' -DNEED_FGETC_PROTOTYPE -DNEED_FREAD_PROTOTYPE'; + diff --git a/gnu/usr.bin/perl/ext/DB_File/Changes b/gnu/usr.bin/perl/ext/DB_File/Changes index 2fab9192290..95eb487e565 100644 --- a/gnu/usr.bin/perl/ext/DB_File/Changes +++ b/gnu/usr.bin/perl/ext/DB_File/Changes @@ -230,5 +230,64 @@ * Updated the message that db-recno.t prints when tests 51, 53 or 55 fail. 1.65 6th March 1999 + * Fixed a bug in the recno PUSH logic. * The BOOT version check now needs 2.3.4 when using Berkeley DB version 2 + +1.66 15th March 1999 + + * Added DBM Filter code + +1.67 6th June 1999 + + * Added DBM Filter documentation to DB_File.pm + + * Fixed DBM Filter code to work with 5.004 + + * A few instances of newSVpvn were used in 1.66. This isn't available in + Perl 5.004_04 or earlier. Replaced with newSVpv. + +1.68 22nd July 1999 + + * Merged changes from 5.005_58 + + * Fixed a bug in R_IBEFORE & R_IAFTER procesing in Berkeley DB + 2 databases. + + * Added some of the examples in the POD into the test harness. + +1.69 3rd August 1999 + + * fixed a bug in push -- DB_APPEND wasn't working properly. + + * Fixed the R_SETCURSOR bug introduced in 1.68 + + * Added a new Perl variable $DB_File::db_ver + +1.70 4th August 1999 + + * Initialise $DB_File::db_ver and $DB_File::db_version with + GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons. + + * Added a BOOT check to test for equivalent versions of db.h & + libdb.a/so. + +1.71 7th September 1999 + + * Fixed a bug that prevented 1.70 from compiling under win32 + + * Updated to support Berkeley DB 3.x + + * Updated dbinfo for Berkeley DB 3.x file formats. + +1.72 16th January 2000 + + * Added hints/sco.pl + + * The module will now use XSLoader when it is available. When it + isn't it will use DynaLoader. + + * The locking section in DB_File.pm has been discredited. Many thanks + to David Harris for spotting the underlying problem, contributing + the updates to the documentation and writing DB_File::Lock (available + on CPAN). diff --git a/gnu/usr.bin/perl/ext/DB_File/dbinfo b/gnu/usr.bin/perl/ext/DB_File/dbinfo index 24a794448f8..701ac612b62 100644 --- a/gnu/usr.bin/perl/ext/DB_File/dbinfo +++ b/gnu/usr.bin/perl/ext/DB_File/dbinfo @@ -4,8 +4,8 @@ # a database file # # Author: Paul Marquess -# Version: 1.01 -# Date 16th April 1998 +# Version: 1.02 +# Date 20th August 1999 # # Copyright (c) 1998 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ use strict ; my %Data = ( 0x053162 => { - Type => "Btree", + Type => "Btree", Versions => { 1 => "Unknown (older than 1.71)", @@ -27,18 +27,27 @@ my %Data = 3 => "1.71 -> 1.85, 1.86", 4 => "Unknown", 5 => "2.0.0 -> 2.3.0", - 6 => "2.3.1 or greater", + 6 => "2.3.1 -> 2.7.7", + 7 => "3.0.0 or greater", } }, 0x061561 => { - Type => "Hash", + Type => "Hash", Versions => { 1 => "Unknown (older than 1.71)", 2 => "1.71 -> 1.85", 3 => "1.86", 4 => "2.0.0 -> 2.1.0", - 5 => "2.2.6 or greater", + 5 => "2.2.6 -> 2.7.7", + 6 => "3.0.0 or greater", + } + }, + 0x042253 => { + Type => "Queue", + Versions => + { + 1 => "3.0.0 or greater", } }, ) ; diff --git a/gnu/usr.bin/perl/ext/DB_File/hints/sco.pl b/gnu/usr.bin/perl/ext/DB_File/hints/sco.pl new file mode 100644 index 00000000000..ff604409496 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DB_File/hints/sco.pl @@ -0,0 +1,2 @@ +# osr5 needs to explicitly link against libc to pull in some static symbols +$self->{LIBS} = ['-ldb -lc'] if $Config{'osvers'} =~ '3\.2v5\.0\..' ; diff --git a/gnu/usr.bin/perl/ext/DB_File/version.c b/gnu/usr.bin/perl/ext/DB_File/version.c new file mode 100644 index 00000000000..f8c6cac9af7 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DB_File/version.c @@ -0,0 +1,71 @@ +/* + + version.c -- Perl 5 interface to Berkeley DB + + written by Paul Marquess + last modified 16th January 2000 + version 1.72 + + All comments/suggestions/problems are welcome + + Copyright (c) 1995-2000 Paul Marquess. All rights reserved. + This program is free software; you can redistribute it and/or + modify it under the same terms as Perl itself. + + Changes: + 1.71 - Support for Berkeley DB version 3. + Support for Berkeley DB 2/3's backward compatability mode. + 1.72 - No change. + +*/ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include + +void +__getBerkeleyDBInfo() +{ + SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ; + SV * ver_sv = perl_get_sv("DB_File::db_ver", GV_ADD|GV_ADDMULTI) ; + SV * compat_sv = perl_get_sv("DB_File::db_185_compat", GV_ADD|GV_ADDMULTI) ; + +#ifdef DB_VERSION_MAJOR + int Major, Minor, Patch ; + + (void)db_version(&Major, &Minor, &Patch) ; + + /* Check that the versions of db.h and libdb.a are the same */ + if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR + || Patch != DB_VERSION_PATCH) + croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n", + DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, + Major, Minor, Patch) ; + + /* check that libdb is recent enough -- we need 2.3.4 or greater */ + if (Major == 2 && (Minor < 3 || (Minor == 3 && Patch < 4))) + croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n", + Major, Minor, Patch) ; + + { + char buffer[40] ; + sprintf(buffer, "%d.%d", Major, Minor) ; + sv_setpv(version_sv, buffer) ; + sprintf(buffer, "%d.%03d%03d", Major, Minor, Patch) ; + sv_setpv(ver_sv, buffer) ; + } + +#else /* ! DB_VERSION_MAJOR */ + sv_setiv(version_sv, 1) ; + sv_setiv(ver_sv, 1) ; +#endif /* ! DB_VERSION_MAJOR */ + +#ifdef COMPAT185 + sv_setiv(compat_sv, 1) ; +#else /* ! COMPAT185 */ + sv_setiv(compat_sv, 0) ; +#endif /* ! COMPAT185 */ + +} diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/Changes b/gnu/usr.bin/perl/ext/Data/Dumper/Changes index 9a96edab8dd..161aba940b6 100644 --- a/gnu/usr.bin/perl/ext/Data/Dumper/Changes +++ b/gnu/usr.bin/perl/ext/Data/Dumper/Changes @@ -6,6 +6,21 @@ HISTORY - public release history for Data::Dumper =over 8 +=item 2.11 (unreleased) + +C<0> is now dumped as such, not as C<'0'>. + +qr// objects are now dumped correctly (provided a post-5.005_58) +overload.pm exists). + +Implemented $Data::Dumper::Maxdepth, which was on the Todo list. +Thanks to John Nolan . + +=item 2.101 (30 Apr 1999) + +Minor release to sync with version in 5.005_03. Fixes dump of +dummy coderefs. + =item 2.10 (31 Oct 1998) Bugfixes for dumping related undef values, globs, and better double diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.pm b/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.pm index b1fd2b790ae..93b87f9aba9 100644 --- a/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.pm +++ b/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.pm @@ -9,22 +9,22 @@ package Data::Dumper; -$VERSION = $VERSION = '2.101'; +$VERSION = '2.101'; #$| = 1; -require 5.004; +require 5.005_64; require Exporter; -require DynaLoader; +use XSLoader (); require overload; use Carp; -@ISA = qw(Exporter DynaLoader); +@ISA = qw(Exporter); @EXPORT = qw(Dumper); @EXPORT_OK = qw(DumperX); -bootstrap Data::Dumper; +XSLoader::load 'Data::Dumper'; # module vars and their defaults $Indent = 2 unless defined $Indent; @@ -39,7 +39,7 @@ $Deepcopy = 0 unless defined $Deepcopy; $Quotekeys = 1 unless defined $Quotekeys; $Bless = "bless" unless defined $Bless; #$Expdepth = 0 unless defined $Expdepth; -#$Maxdepth = 0 unless defined $Maxdepth; +$Maxdepth = 0 unless defined $Maxdepth; # # expects an arrayref of values to be dumped. @@ -74,7 +74,7 @@ sub new { quotekeys => $Quotekeys, # quote hash keys 'bless' => $Bless, # keyword to use for "bless" # expdepth => $Expdepth, # cutoff depth for explicit dumping -# maxdepth => $Maxdepth, # depth beyond which we give up + maxdepth => $Maxdepth, # depth beyond which we give up }; if ($Indent > 0) { @@ -146,11 +146,17 @@ sub Names { sub DESTROY {} +sub Dump { + return &Dumpxs + unless $Data::Dumper::Useqq || (ref($_[0]) && $_[0]->{useqq}); + return &Dumpperl; +} + # # dump the refs in the current dumper object. # expects same args as new() if called via package name. # -sub Dump { +sub Dumpperl { my($s) = shift; my(@out, $val, $name); my($i) = 0; @@ -214,14 +220,13 @@ sub _dump { if ($type) { # prep it, if it looks like an object - if ($type =~ /[a-z_:]/) { - my $freezer = $s->{freezer}; - $val->$freezer() if $freezer && UNIVERSAL::can($val, $freezer); + if (my $freezer = $s->{freezer}) { + $val->$freezer() if UNIVERSAL::can($val, $freezer); } ($realpack, $realtype, $id) = (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/); - + # if it has a name, we need to either look it up, or keep a tab # on it so we know when we hit it later if (defined($name) and length($name)) { @@ -231,7 +236,7 @@ sub _dump { if ($s->{purity} and $s->{level} > 0) { $out = ($realtype eq 'HASH') ? '{}' : ($realtype eq 'ARRAY') ? '[]' : - "''" ; + 'do{my $o}' ; push @post, $name . " = " . $s->{seen}{$id}[0]; } else { @@ -259,14 +264,33 @@ sub _dump { } } - $s->{level}++; - $ipad = $s->{xpad} x $s->{level}; + if ($realpack and $realpack eq 'Regexp') { + $out = "$val"; + $out =~ s,/,\\/,g; + return "qr/$out/"; + } + + # If purity is not set and maxdepth is set, then check depth: + # if we have reached maximum depth, return the string + # representation of the thing we are currently examining + # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)'). + if (!$s->{purity} + and $s->{maxdepth} > 0 + and $s->{level} >= $s->{maxdepth}) + { + return qq['$val']; + } - if ($realpack) { # we have a blessed ref + # we have a blessed ref + if ($realpack) { $out = $s->{'bless'} . '( '; $blesspad = $s->{apad}; $s->{apad} .= ' ' if ($s->{indent} >= 2); } + + $s->{level}++; + $ipad = $s->{xpad} x $s->{level}; + if ($realtype eq 'SCALAR') { if ($realpack) { @@ -389,7 +413,7 @@ sub _dump { elsif (!defined($val)) { $out .= "undef"; } - elsif ($val =~ /^-?[1-9]\d{0,8}$/) { # safe decimal number + elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})$/) { # safe decimal number $out .= $val; } else { # string @@ -422,9 +446,7 @@ sub Dumper { return Data::Dumper->Dump([@_]); } -# -# same, only calls the XS version -# +# compat stub sub DumperX { return Data::Dumper->Dumpxs([@_], []); } @@ -511,6 +533,12 @@ sub Bless { defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'}; } +sub Maxdepth { + my($s, $v) = @_; + defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'}; +} + + # used by qquote below my %esc = ( "\a" => "\\a", @@ -526,25 +554,35 @@ my %esc = ( sub qquote { local($_) = shift; s/([\\\"\@\$])/\\$1/g; - return qq("$_") unless /[^\040-\176]/; # fast exit + return qq("$_") unless + /[^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/; # fast exit my $high = shift || ""; s/([\a\b\t\n\f\r\e])/$esc{$1}/g; - # no need for 3 digits in escape for these - s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg; - - s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg; - if ($high eq "iso8859") { - s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg; - } elsif ($high eq "utf8") { -# use utf8; -# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge; - } elsif ($high eq "8bit") { - # leave it as it is - } else { - s/([\0-\037\177-\377])/'\\'.sprintf('%03o',ord($1))/eg; + if (ord('^')==94) { # ascii + # no need for 3 digits in escape for these + s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg; + s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg; + # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE-- + if ($high eq "iso8859") { + s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg; + } elsif ($high eq "utf8") { +# use utf8; +# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge; + } elsif ($high eq "8bit") { + # leave it as it is + } else { + s/([\200-\377])/'\\'.sprintf('%03o',ord($1))/eg; + } } + else { # ebcdic + s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])(?!\d)} + {my $v = ord($1); '\\'.sprintf(($v <= 037 ? '%o' : '%03o'), $v)}eg; + s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])} + {'\\'.sprintf('%03o',ord($1))}eg; + } + return qq("$_"); } @@ -653,12 +691,6 @@ of strings corresponding to the supplied values. The second form, for convenience, simply calls the C method on its arguments before dumping the object immediately. -=item I<$OBJ>->Dumpxs I I->Dumpxs(I, I) - -This method is available if you were able to compile and install the XSUB -extension to C. It is exactly identical to the C method -above, only about 4 to 5 times faster, since it is written entirely in C. - =item I<$OBJ>->Seen(I<[HASHREF]>) Queries or adds to the internal table of already encountered references. @@ -702,12 +734,6 @@ configuration options below. The values will be named C<$VAR>I in the output, where I is a numeric suffix. Will return a list of strings in an array context. -=item DumperX(I) - -Identical to the C function above, but this calls the XSUB -implementation. Only available if you were able to compile and install -the XSUB extensions in C. - =back =head2 Configuration Variables or Methods @@ -763,8 +789,8 @@ When set, enables the use of double quotes for representing string values. Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe" characters will be backslashed, and unprintable characters will be output as quoted octal integers. Since setting this variable imposes a performance -penalty, the default is 0. The C method does not honor this -flag yet. +penalty, the default is 0. C will run slower if this flag is set, +since the fast XSUB implementation doesn't support it yet. =item $Data::Dumper::Terse I I<$OBJ>->Terse(I<[NEWVAL]>) @@ -814,6 +840,14 @@ builtin operator used to create objects. A function with the specified name should exist, and should accept the same arguments as the builtin. Default is C. +=item $Data::Dumper::Maxdepth I $I->Maxdepth(I<[NEWVAL]>) + +Can be set to a positive integer that specifies the depth beyond which +which we don't venture into a structure. Has no effect when +C is set. (Useful in debugger when we often don't +want to see more than enough). Default is 0, which means there is +no maximum depth. + =back =head2 Exports @@ -847,7 +881,7 @@ distribution for more examples.) $boo = [ 1, [], "abcd", \*foo, {1 => 'a', 023 => 'b', 0x45 => 'c'}, \\"p\q\'r", $foo, $fuz]; - + ######## # simple usage ######## @@ -868,12 +902,12 @@ distribution for more examples.) $Data::Dumper::Useqq = 1; # print strings in double quotes print Dumper($boo); - - + + ######## # recursive structures ######## - + @c = ('c'); $c = \@c; $b = {}; @@ -882,37 +916,52 @@ distribution for more examples.) $b->{b} = $a->[1]; $b->{c} = $a->[2]; print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]); - - + + $Data::Dumper::Purity = 1; # fill in the holes for eval print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b - - + + $Data::Dumper::Deepcopy = 1; # avoid cross-refs print Data::Dumper->Dump([$b, $a], [qw(*b a)]); - - + + $Data::Dumper::Purity = 0; # avoid cross-refs print Data::Dumper->Dump([$b, $a], [qw(*b a)]); - - + + ######## + # deep structures + ######## + + $a = "pearl"; + $b = [ $a ]; + $c = { 'b' => $b }; + $d = [ $c ]; + $e = { 'd' => $d }; + $f = { 'e' => $e }; + print Data::Dumper->Dump([$f], [qw(f)]); + + $Data::Dumper::Maxdepth = 3; # no deeper than 3 refs down + print Data::Dumper->Dump([$f], [qw(f)]); + + ######## # object-oriented usage ######## - + $d = Data::Dumper->new([$a,$b], [qw(a b)]); $d->Seen({'*c' => $c}); # stash a ref without printing it $d->Indent(3); print $d->Dump; $d->Reset->Purity(0); # empty the seen cache print join "----\n", $d->Dump; - - + + ######## # persistence ######## - + package Foo; sub new { bless { state => 'awake' }, shift } sub Freeze { @@ -921,7 +970,7 @@ distribution for more examples.) $s->{state} = 'asleep'; return bless $s, 'Foo::ZZZ'; } - + package Foo::ZZZ; sub Thaw { my $s = shift; @@ -929,7 +978,7 @@ distribution for more examples.) $s->{state} = 'awake'; return bless $s, 'Foo'; } - + package Foo; use Data::Dumper; $a = Foo->new; @@ -940,12 +989,12 @@ distribution for more examples.) print $c; $d = eval $c; print Data::Dumper->Dump([$d], ['d']); - - + + ######## # symbol substitution (useful for recreating CODE refs) ######## - + sub foo { print "foo speaking\n" } *other = \&foo; $bar = [ \&other ]; @@ -974,15 +1023,15 @@ to have, you can use the C method to pre-seed the internal reference table and make the dumped output point to them, instead. See L above. -The C flag is not honored by C (it always outputs -strings in single quotes). +The C flag makes Dump() run slower, since the XSUB implementation +does not support it. SCALAR objects have the weirdest looking C workaround. =head1 AUTHOR -Gurusamy Sarathy gsar@umich.edu +Gurusamy Sarathy gsar@activestate.com Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved. This program is free software; you can redistribute it and/or @@ -991,7 +1040,7 @@ modify it under the same terms as Perl itself. =head1 VERSION -Version 2.10 (31 Oct 1998) +Version 2.11 (unreleased) =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.xs b/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.xs index a3da110453d..990ea746993 100644 --- a/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.xs +++ b/gnu/usr.bin/perl/ext/Data/Dumper/Dumper.xs @@ -1,10 +1,14 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" +#ifndef PERL_VERSION #include "patchlevel.h" +#define PERL_VERSION PATCHLEVEL +#endif -#if PATCHLEVEL < 5 +#if PERL_VERSION < 5 # ifndef PL_sv_undef # define PL_sv_undef sv_undef # endif @@ -16,14 +20,15 @@ # endif #endif -static I32 num_q _((char *s, STRLEN slen)); -static I32 esc_q _((char *dest, char *src, STRLEN slen)); -static SV *sv_x _((SV *sv, char *str, STRLEN len, I32 n)); -static I32 DD_dump _((SV *val, char *name, STRLEN namelen, SV *retval, - HV *seenhv, AV *postav, I32 *levelp, I32 indent, - SV *pad, SV *xpad, SV *apad, SV *sep, - SV *freezer, SV *toaster, - I32 purity, I32 deepcopy, I32 quotekeys, SV *bless)); +static I32 num_q (char *s, STRLEN slen); +static I32 esc_q (char *dest, char *src, STRLEN slen); +static SV *sv_x (pTHX_ SV *sv, char *str, STRLEN len, I32 n); +static I32 DD_dump (pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, + HV *seenhv, AV *postav, I32 *levelp, I32 indent, + SV *pad, SV *xpad, SV *apad, SV *sep, + SV *freezer, SV *toaster, + I32 purity, I32 deepcopy, I32 quotekeys, SV *bless, + I32 maxdepth); /* does a string need to be protected? */ static I32 @@ -40,11 +45,12 @@ TOP: } if (isIDFIRST(*s)) { while (*++s) - if (!isALNUM(*s)) + if (!isALNUM(*s)) { if (*s == ':') goto TOP; else return 1; + } } else return 1; @@ -92,7 +98,7 @@ esc_q(register char *d, register char *s, register STRLEN slen) /* append a repeated string to an SV */ static SV * -sv_x(SV *sv, register char *str, STRLEN len, I32 n) +sv_x(pTHX_ SV *sv, register char *str, STRLEN len, I32 n) { if (sv == Nullsv) sv = newSVpvn("", 0); @@ -123,10 +129,10 @@ sv_x(SV *sv, register char *str, STRLEN len, I32 n) * efficiency raisins.) Ugggh! */ static I32 -DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, +DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, AV *postav, I32 *levelp, I32 indent, SV *pad, SV *xpad, SV *apad, SV *sep, SV *freezer, SV *toaster, I32 purity, - I32 deepcopy, I32 quotekeys, SV *bless) + I32 deepcopy, I32 quotekeys, SV *bless, I32 maxdepth) { char tmpbuf[128]; U32 i; @@ -196,7 +202,7 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, else if (realtype == SVt_PVAV) sv_catpvn(retval, "[]", 2); else - sv_catpvn(retval, "''", 2); + sv_catpvn(retval, "do{my $o}", 9); postentry = newSVpvn(name, namelen); sv_catpvn(postentry, " = ", 3); sv_catsv(postentry, othername); @@ -248,11 +254,39 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, SvREFCNT_dec(seenentry); } } - - (*levelp)++; - ipad = sv_x(Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp); - if (realpack) { /* we have a blessed ref */ + if (realpack && *realpack == 'R' && strEQ(realpack, "Regexp")) { + STRLEN rlen; + char *rval = SvPV(val, rlen); + char *slash = strchr(rval, '/'); + sv_catpvn(retval, "qr/", 3); + while (slash) { + sv_catpvn(retval, rval, slash-rval); + sv_catpvn(retval, "\\/", 2); + rlen -= slash-rval+1; + rval = slash+1; + slash = strchr(rval, '/'); + } + sv_catpvn(retval, rval, rlen); + sv_catpvn(retval, "/", 1); + return 1; + } + + /* If purity is not set and maxdepth is set, then check depth: + * if we have reached maximum depth, return the string + * representation of the thing we are currently examining + * at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)'). + */ + if (!purity && maxdepth > 0 && *levelp >= maxdepth) { + STRLEN vallen; + char *valstr = SvPV(val,vallen); + sv_catpvn(retval, "'", 1); + sv_catpvn(retval, valstr, vallen); + sv_catpvn(retval, "'", 1); + return 1; + } + + if (realpack) { /* we have a blessed ref */ STRLEN blesslen; char *blessstr = SvPV(bless, blesslen); sv_catpvn(retval, blessstr, blesslen); @@ -260,26 +294,31 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, if (indent >= 2) { blesspad = apad; apad = newSVsv(apad); - sv_x(apad, " ", 1, blesslen+2); + sv_x(aTHX_ apad, " ", 1, blesslen+2); } } + (*levelp)++; + ipad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp); + if (realtype <= SVt_PVBM) { /* scalar ref */ SV *namesv = newSVpvn("${", 2); sv_catpvn(namesv, name, namelen); sv_catpvn(namesv, "}", 1); if (realpack) { /* blessed */ sv_catpvn(retval, "do{\\(my $o = ", 13); - DD_dump(ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, - freezer, toaster, purity, deepcopy, quotekeys, bless); + freezer, toaster, purity, deepcopy, quotekeys, bless, + maxdepth); sv_catpvn(retval, ")}", 2); } /* plain */ else { sv_catpvn(retval, "\\", 1); - DD_dump(ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, - freezer, toaster, purity, deepcopy, quotekeys, bless); + freezer, toaster, purity, deepcopy, quotekeys, bless, + maxdepth); } SvREFCNT_dec(namesv); } @@ -288,9 +327,10 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, sv_catpvn(namesv, name, namelen); sv_catpvn(namesv, "}", 1); sv_catpvn(retval, "\\", 1); - DD_dump(ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, + DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, - freezer, toaster, purity, deepcopy, quotekeys, bless); + freezer, toaster, purity, deepcopy, quotekeys, bless, + maxdepth); SvREFCNT_dec(namesv); } else if (realtype == SVt_PVAV) { @@ -345,7 +385,7 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, ilen = inamelen; sv_setiv(ixsv, ix); - (void) sprintf(iname+ilen, "%ld", ix); + (void) sprintf(iname+ilen, "%"IVdf, (IV)ix); ilen = strlen(iname); iname[ilen++] = ']'; iname[ilen] = '\0'; if (indent >= 3) { @@ -356,14 +396,15 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, } sv_catsv(retval, totpad); sv_catsv(retval, ipad); - DD_dump(elem, iname, ilen, retval, seenhv, postav, + DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav, levelp, indent, pad, xpad, apad, sep, - freezer, toaster, purity, deepcopy, quotekeys, bless); + freezer, toaster, purity, deepcopy, quotekeys, bless, + maxdepth); if (ix < ixmax) sv_catpvn(retval, ",", 1); } if (ixmax >= 0) { - SV *opad = sv_x(Nullsv, SvPVX(xpad), SvCUR(xpad), (*levelp)-1); + SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), (*levelp)-1); sv_catsv(retval, totpad); sv_catsv(retval, opad); SvREFCNT_dec(opad); @@ -462,16 +503,17 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, else newapad = apad; - DD_dump(hval, SvPVX(sname), SvCUR(sname), retval, seenhv, + DD_dump(aTHX_ hval, SvPVX(sname), SvCUR(sname), retval, seenhv, postav, levelp, indent, pad, xpad, newapad, sep, - freezer, toaster, purity, deepcopy, quotekeys, bless); + freezer, toaster, purity, deepcopy, quotekeys, bless, + maxdepth); SvREFCNT_dec(sname); Safefree(nkey); if (indent >= 2) SvREFCNT_dec(newapad); } if (i) { - SV *opad = sv_x(Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp-1); + SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp-1); sv_catsv(retval, totpad); sv_catsv(retval, opad); SvREFCNT_dec(opad); @@ -543,7 +585,7 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, if (SvIOK(val)) { STRLEN len; i = SvIV(val); - (void) sprintf(tmpbuf, "%d", i); + (void) sprintf(tmpbuf, "%"IVdf, (IV)i); len = strlen(tmpbuf); sv_catpvn(retval, tmpbuf, len); } @@ -599,12 +641,12 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv, SvCUR(newapad) = 0; if (indent >= 2) - (void)sv_x(newapad, " ", 1, SvCUR(postentry)); + (void)sv_x(aTHX_ newapad, " ", 1, SvCUR(postentry)); - DD_dump(e, SvPVX(nname), SvCUR(nname), postentry, + DD_dump(aTHX_ e, SvPVX(nname), SvCUR(nname), postentry, seenhv, postav, &nlevel, indent, pad, xpad, newapad, sep, freezer, toaster, purity, - deepcopy, quotekeys, bless); + deepcopy, quotekeys, bless, maxdepth); SvREFCNT_dec(e); } } @@ -664,28 +706,22 @@ Data_Dumper_Dumpxs(href, ...) SV **svp; SV *val, *name, *pad, *xpad, *apad, *sep, *tmp, *varname; SV *freezer, *toaster, *bless; - I32 purity, deepcopy, quotekeys; + I32 purity, deepcopy, quotekeys, maxdepth = 0; char tmpbuf[1024]; I32 gimme = GIMME; if (!SvROK(href)) { /* call new to get an object first */ - SV *valarray; - SV *namearray; - - if (items == 3) { - valarray = ST(1); - namearray = ST(2); - } - else - croak("Usage: Data::Dumper::Dumpxs(PACKAGE, VAL_ARY_REF, NAME_ARY_REF)"); + if (items < 2) + croak("Usage: Data::Dumper::Dumpxs(PACKAGE, VAL_ARY_REF, [NAME_ARY_REF])"); ENTER; SAVETMPS; PUSHMARK(sp); XPUSHs(href); - XPUSHs(sv_2mortal(newSVsv(valarray))); - XPUSHs(sv_2mortal(newSVsv(namearray))); + XPUSHs(sv_2mortal(newSVsv(ST(1)))); + if (items >= 3) + XPUSHs(sv_2mortal(newSVsv(ST(2)))); PUTBACK; i = perl_call_method("new", G_SCALAR); SPAGAIN; @@ -747,6 +783,8 @@ Data_Dumper_Dumpxs(href, ...) quotekeys = SvTRUE(*svp); if ((svp = hv_fetch(hv, "bless", 5, FALSE))) bless = *svp; + if ((svp = hv_fetch(hv, "maxdepth", 8, FALSE))) + maxdepth = SvIV(*svp); postav = newAV(); if (todumpav) @@ -795,13 +833,13 @@ Data_Dumper_Dumpxs(href, ...) STRLEN nchars = 0; sv_setpvn(name, "$", 1); sv_catsv(name, varname); - (void) sprintf(tmpbuf, "%ld", i+1); + (void) sprintf(tmpbuf, "%"IVdf, (IV)(i+1)); nchars = strlen(tmpbuf); sv_catpvn(name, tmpbuf, nchars); } if (indent >= 2) { - SV *tmpsv = sv_x(Nullsv, " ", 1, SvCUR(name)+3); + SV *tmpsv = sv_x(aTHX_ Nullsv, " ", 1, SvCUR(name)+3); newapad = newSVsv(apad); sv_catsv(newapad, tmpsv); SvREFCNT_dec(tmpsv); @@ -809,10 +847,10 @@ Data_Dumper_Dumpxs(href, ...) else newapad = apad; - DD_dump(val, SvPVX(name), SvCUR(name), valstr, seenhv, + DD_dump(aTHX_ val, SvPVX(name), SvCUR(name), valstr, seenhv, postav, &level, indent, pad, xpad, newapad, sep, freezer, toaster, purity, deepcopy, quotekeys, - bless); + bless, maxdepth); if (indent >= 2) SvREFCNT_dec(newapad); diff --git a/gnu/usr.bin/perl/ext/Data/Dumper/Todo b/gnu/usr.bin/perl/ext/Data/Dumper/Todo index 7dcd40b8e3e..bd76e65b038 100644 --- a/gnu/usr.bin/perl/ext/Data/Dumper/Todo +++ b/gnu/usr.bin/perl/ext/Data/Dumper/Todo @@ -8,12 +8,6 @@ The following functionality will be supported in the next few releases. =over 4 -=item $Data::Dumper::Maxdepth I $I->Maxdepth(I) - -Depth beyond which we don't venture into a structure. Has no effect when -C is set. (useful in debugger when we often don't -want to see more than enough). - =item $Data::Dumper::Expdepth I $I->Expdepth(I) Dump contents explicitly up to a certain depth and then use names for diff --git a/gnu/usr.bin/perl/ext/Devel/DProf/Changes b/gnu/usr.bin/perl/ext/Devel/DProf/Changes new file mode 100644 index 00000000000..216498ba62e --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/DProf/Changes @@ -0,0 +1,176 @@ +1999 Jan 8 + + Ilya Zakharevich: + Newer perls: Add PERL_POLLUTE and dTHR. + +1998 Nov 10 +This version of DProf should work with older Perls too, but to get +full benefits some patches to 5.004_55 are needed. Patches take effect +after new version of Perl is installed, and DProf recompiled. + +Without these patches the overhead of DProf is too big, thus the statistic +may be very skewed. + +Oct 98: + Ilya Zakharevich: + DProf.xs + - correct defstash to PL_defstash + - nonlocal exits work + dprofpp + - nonlocal exits work + DProf.pm + - documentation updated + t/test6.* + - added + +Nov-Dec 97: + Jason E. Holt and Ilya Zakharevich: + DProf.xs + - will not wait until completion to write the output, size of buffer + regulated by PERL_DPROF_BUFFER, default 2**14 words; + + Ilya Zakharevich: + dprofpp + - smarter in fixing garbled profiles; + - subtracts DProf output overhead, and suggested profiler overhead; + - new options -A, -R, -g subroutine, -S; + - handles 'goto' too; + DProf.xs + - 7x denser output (time separated from name, ids for subs); + - outputs report-write overhead; + - optional higher-resolution (currently OS/2 only, cannot grok VMS code); + - outputs suggested profiler overhead; + - handles 'goto' too; + - handles PERL_DPROF_TICKS (on OS/2, VMS may be easily modified too) + +Jun 14, 97 andreas koenig adds the compatibility notes to the README +and lets the Makefile.PL die on $] < 5.004. + +Jun 06, 97 andreas koenig applies a patch by gurusamy sarathy because +Dean is not available for comments at that time. The patch is available +from CPAN in the authors/id/GSAR directory for inspection. + +Sep 30, 96 dmr + DProf.xs + - added Ilya's patches to fix "&bar as &bar(@_)" bug. This also fixes + the coredumps people have seen when using this with 5.003+. + DProf.pm + - updated manpage + t/bug.t + - moved to test5 + Makefile.PL + - remove special case for bug.t + +Jun 26, 96 dmr + dprofpp.PL + - smarter r.e. to find VERSION in Makefile (for MM5.27). + DProf.pm + - updated manpage + DProf.xs + - keep pid of profiled process, if process forks then only the + parent is profiled. Added test4 for this. + +Mar 2, 96 dmr + README + - updated + dprofpp + - updated manpage, point to DProf for raw profile description. + DProf.pm + - update manpage, update raw profile description with XS_VERSION. + - update manpage for AUTOLOAD changes. + DProf.xs + - smart handling of &AUTOLOAD--looks in $AUTOLOAD for the sub name. + this fixes one problem with corrupt profiles. + +Feb 5, 96 dmr + dprofpp + - updated manpage + - added -E/-I for exclusive/inclusive times + - added DPROFPP_OPTS -- lazily + - added -p/-Q for profile-then-analyze + - added version check + dprofpp.PL + - pull dprofpp's version id from the makefile + DProf.pm + - added version to bootstrap + - updated doc + - updated doc, DProf and -w are now friendly to each other + DProf.xs + - using savepv + - added Tim's patch to check for DBsub, avoids -MDevel::DProf coredump + - turn off warnings during newXS("DB::sub") + tests + - added Tim's patch to ignore Loader::import in results + - added Tim's patch to aid readability of test?.v output + + +-- from those days when I kept a unique changelog for each module -- + +# Devel::DProf - a Perl code profiler +# 31oct95 +# +# changes/bugs fixed since 5apr95 version -dmr: +# -added VMS patches from CharlesB. +# -now open ./tmon.out in BOOT. +# changes/bugs fixed since 2apr95 version -dmr: +# -now mallocing an extra byte for the \0 :) +# changes/bugs fixed since 01mar95 version -dmr: +# -stringified code ref is used for name of anonymous sub. +# -include stash name with stringified code ref. +# -use perl.c's DBsingle and DBsub. +# -now using croak() and warn(). +# -print "timer is on" before turning timer on. +# -use safefree() instead of free(). +# -rely on PM to provide full path name to tmon.out. +# -print errno if unable to write tmon.out. +# changes/bugs fixed since 03feb95 version -dmr: +# -comments +# changes/bugs fixed since 31dec94 version -dmr: +# -added patches from AndyD. +# + +# Devel::DProf - a Perl code profiler +# 31oct95 +# +# changes/bugs fixed since 05apr95 version -dmr: +# - VMS-related prob; now let tmon.out name be handled in XS. +# changes/bugs fixed since 01mar95 version -dmr: +# - record $pwd and build pathname for tmon.out +# changes/bugs fixed since 03feb95 version -dmr: +# - fixed some doc bugs +# - added require 5.000 +# - added -w note to bugs section of pod +# changes/bugs fixed since 31dec94 version -dmr: +# - podified +# + + +# dprofpp - display perl profile data +# 31oct95 +# +# changes/bugs fixed since 7oct95 version -dmr: +# - PL'd +# changes/bugs fixed since 5apr95 version -dmr: +# - touch up handling of exit timestamps. +# - suggests -F when exit timestamps are missing. +# - added compressed execution tree patches from AchimB, put under -t. +# now -z is the default action; user+system time. +# - doc changes. +# changes/bugs fixed since 10feb95 version -dmr: +# - summary info is printed by default, opt_c is gone. +# - fixed some doc bugs +# - changed name to dprofpp +# changes/bugs fixed since 03feb95 version -dmr: +# - fixed division by zero. +# - replace many local()s with my(). +# - now prints user+system times by default +# now -u prints user time, -U prints unsorted. +# - fixed documentation +# - fixed output, to clarify that times are given in seconds. +# - can now fake exit timestamps if the profile is garbled. +# changes/bugs fixed since 17jun94 version -dmr: +# - podified. +# - correct old documentation flaws. +# - added AndyD's patches. +# + diff --git a/gnu/usr.bin/perl/ext/Devel/DProf/DProf.pm b/gnu/usr.bin/perl/ext/Devel/DProf/DProf.pm new file mode 100644 index 00000000000..38082fce512 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/DProf/DProf.pm @@ -0,0 +1,196 @@ +require 5.005_64; + +=head1 NAME + +Devel::DProf - a Perl code profiler + +=head1 SYNOPSIS + + perl5 -d:DProf test.pl + +=head1 DESCRIPTION + +The Devel::DProf package is a Perl code profiler. This will collect +information on the execution time of a Perl script and of the subs in that +script. This information can be used to determine which subroutines are +using the most time and which subroutines are being called most often. This +information can also be used to create an execution graph of the script, +showing subroutine relationships. + +To profile a Perl script run the perl interpreter with the B<-d> debugging +switch. The profiler uses the debugging hooks. So to profile script +F the following command should be used: + + perl5 -d:DProf test.pl + +When the script terminates (or when the output buffer is filled) the +profiler will dump the profile information to a file called +F. A tool like I can be used to interpret the +information which is in that profile. The following command will +print the top 15 subroutines which used the most time: + + dprofpp + +To print an execution graph of the subroutines in the script use the +following command: + + dprofpp -T + +Consult L for other options. + +=head1 PROFILE FORMAT + +The old profile is a text file which looks like this: + + #fOrTyTwO + $hz=100; + $XS_VERSION='DProf 19970606'; + # All values are given in HZ + $rrun_utime=2; $rrun_stime=0; $rrun_rtime=7 + PART2 + + 26 28 566822884 DynaLoader::import + - 26 28 566822884 DynaLoader::import + + 27 28 566822885 main::bar + - 27 28 566822886 main::bar + + 27 28 566822886 main::baz + + 27 28 566822887 main::bar + - 27 28 566822888 main::bar + [....] + +The first line is the magic number. The second line is the hertz value, or +clock ticks, of the machine where the profile was collected. The third line +is the name and version identifier of the tool which created the profile. +The fourth line is a comment. The fifth line contains three variables +holding the user time, system time, and realtime of the process while it was +being profiled. The sixth line indicates the beginning of the sub +entry/exit profile section. + +The columns in B are: + + sub entry(+)/exit(-) mark + app's user time at sub entry/exit mark, in ticks + app's system time at sub entry/exit mark, in ticks + app's realtime at sub entry/exit mark, in ticks + fully-qualified sub name, when possible + +With newer perls another format is used, which may look like this: + + #fOrTyTwO + $hz=10000; + $XS_VERSION='DProf 19971213'; + # All values are given in HZ + $over_utime=5917; $over_stime=0; $over_rtime=5917; + $over_tests=10000; + $rrun_utime=1284; $rrun_stime=0; $rrun_rtime=1284; + $total_marks=6; + + PART2 + @ 406 0 406 + & 2 main bar + + 2 + @ 456 0 456 + - 2 + @ 1 0 1 + & 3 main baz + + 3 + @ 141 0 141 + + 2 + @ 141 0 141 + - 2 + @ 1 0 1 + & 4 main foo + + 4 + @ 142 0 142 + + & Devel::DProf::write + @ 5 0 5 + - & Devel::DProf::write + +(with high value of $ENV{PERL_DPROF_TICKS}). + +New C<$over_*> values show the measured overhead of making $over_tests +calls to the profiler These values are used by the profiler to +subtract the overhead from the runtimes. + +The lines starting with C<@> mark time passed from the previous C<@> +line. The lines starting with C<&> introduce new subroutine I and +show the package and the subroutine name of this id. Lines starting +with C<+>, C<-> and C<*> mark entering and exit of subroutines by +Is, and C. + +The I C<+>- and C<->-lines are used to mark the overhead +related to writing to profiler-output file. + +=head1 AUTOLOAD + +When Devel::DProf finds a call to an C<&AUTOLOAD> subroutine it looks at the +C<$AUTOLOAD> variable to find the real name of the sub being called. See +L. + +=head1 ENVIRONMENT + +C sets size of output buffer in words. Defaults to 2**14. + +C sets number of ticks per second on some systems where +a replacement for times() is used. Defaults to the value of C macro. + +C sets the name of the output file. If not set, +defaults to tmon.out. + +=head1 BUGS + +Builtin functions cannot be measured by Devel::DProf. + +With a newer Perl DProf relies on the fact that the numeric slot of +$DB::sub contains an address of a subroutine. Excessive manipulation +of this variable may overwrite this slot, as in + + $DB::sub = 'current_sub'; + ... + $addr = $DB::sub + 0; + +will set this numeric slot to numeric value of the string +C, i.e., to C<0>. This will cause a segfault on the exit +from this subroutine. Note that the first assignment above does not +change the numeric slot (it will I it as invalid, but will not +write over it). + +Mail bug reports and feature requests to the perl5-porters mailing list at +Fperl5-porters@perl.orgE>. + +=head1 SEE ALSO + +L, L, times(2) + +=cut + +# This sub is needed for calibration. +package Devel::DProf; + +sub NONESUCH_noxs { + return $Devel::DProf::VERSION; +} + +package DB; + +# +# As of perl5.003_20, &DB::sub stub is not needed (some versions +# even had problems if stub was redefined with XS version). +# + +# disable DB single-stepping +BEGIN { $single = 0; } + +# This sub is needed during startup. +sub DB { +# print "nonXS DBDB\n"; +} + +use XSLoader (); + +# Underscore to allow older Perls to access older version from CPAN +$Devel::DProf::VERSION = '20000000.00_00'; # this version not authorized by + # Dean Roehrich. See "Changes" file. + +XSLoader::load 'Devel::DProf', $Devel::DProf::VERSION; + +1; diff --git a/gnu/usr.bin/perl/ext/Devel/DProf/DProf.xs b/gnu/usr.bin/perl/ext/Devel/DProf/DProf.xs new file mode 100644 index 00000000000..31e984f929b --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/DProf/DProf.xs @@ -0,0 +1,689 @@ +#define PERL_NO_GET_CONTEXT +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +/* For older Perls */ +#ifndef dTHR +# define dTHR int dummy_thr +#endif /* dTHR */ + +/*#define DBG_SUB 1 */ +/*#define DBG_TIMER 1 */ + +#ifdef DBG_SUB +# define DBG_SUB_NOTIFY(A,B) warn(A, B) +#else +# define DBG_SUB_NOTIFY(A,B) /* nothing */ +#endif + +#ifdef DBG_TIMER +# define DBG_TIMER_NOTIFY(A) warn(A) +#else +# define DBG_TIMER_NOTIFY(A) /* nothing */ +#endif + +/* HZ == clock ticks per second */ +#ifdef VMS +# define HZ ((I32)CLK_TCK) +# define DPROF_HZ HZ +# include /* prototype for sys$gettim() */ +# define Times(ptr) (dprof_times(aTHX_ ptr)) +#else +# ifndef HZ +# ifdef CLK_TCK +# define HZ ((I32)CLK_TCK) +# else +# define HZ 60 +# endif +# endif +# ifdef OS2 /* times() has significant overhead */ +# define Times(ptr) (dprof_times(aTHX_ ptr)) +# define INCL_DOSPROFILE +# define INCL_DOSERRORS +# include +# define toLongLong(arg) (*(long long*)&(arg)) +# define DPROF_HZ g_dprof_ticks +# else +# define Times(ptr) (times(ptr)) +# define DPROF_HZ HZ +# endif +#endif + +XS(XS_Devel__DProf_END); /* used by prof_mark() */ + +/* Everything is built on times(2). See its manpage for a description + * of the timings. + */ + +union prof_any { + clock_t tms_utime; /* cpu time spent in user space */ + clock_t tms_stime; /* cpu time spent in system */ + clock_t realtime; /* elapsed real time, in ticks */ + char *name; + U32 id; + opcode ptype; +}; + +typedef union prof_any PROFANY; + +typedef struct { + U32 dprof_ticks; + char* out_file_name; /* output file (defaults to tmon.out) */ + PerlIO* fp; /* pointer to tmon.out file */ + long TIMES_LOCATION; /* Where in the file to store the time totals */ + int SAVE_STACK; /* How much data to buffer until end of run */ + int prof_pid; /* pid of profiled process */ + struct tms prof_start; + struct tms prof_end; + clock_t rprof_start; /* elapsed real time ticks */ + clock_t rprof_end; + clock_t wprof_u; + clock_t wprof_s; + clock_t wprof_r; + clock_t otms_utime; + clock_t otms_stime; + clock_t orealtime; + PROFANY* profstack; + int profstack_max; + int profstack_ix; + HV* cv_hash; + U32 total; + U32 lastid; + U32 default_perldb; + U32 depth; +#ifdef OS2 + ULONG frequ; + long long start_cnt; +#endif +#ifdef PERL_IMPLICIT_CONTEXT +# define register + pTHX; +# undef register +#endif +} prof_state_t; + +prof_state_t g_prof_state; + +#define g_dprof_ticks g_prof_state.dprof_ticks +#define g_out_file_name g_prof_state.out_file_name +#define g_fp g_prof_state.fp +#define g_TIMES_LOCATION g_prof_state.TIMES_LOCATION +#define g_SAVE_STACK g_prof_state.SAVE_STACK +#define g_prof_pid g_prof_state.prof_pid +#define g_prof_start g_prof_state.prof_start +#define g_prof_end g_prof_state.prof_end +#define g_rprof_start g_prof_state.rprof_start +#define g_rprof_end g_prof_state.rprof_end +#define g_wprof_u g_prof_state.wprof_u +#define g_wprof_s g_prof_state.wprof_s +#define g_wprof_r g_prof_state.wprof_r +#define g_otms_utime g_prof_state.otms_utime +#define g_otms_stime g_prof_state.otms_stime +#define g_orealtime g_prof_state.orealtime +#define g_profstack g_prof_state.profstack +#define g_profstack_max g_prof_state.profstack_max +#define g_profstack_ix g_prof_state.profstack_ix +#define g_cv_hash g_prof_state.cv_hash +#define g_total g_prof_state.total +#define g_lastid g_prof_state.lastid +#define g_default_perldb g_prof_state.default_perldb +#define g_depth g_prof_state.depth +#ifdef PERL_IMPLICIT_CONTEXT +# define g_THX g_prof_state.aTHX +#endif +#ifdef OS2 +# define g_frequ g_prof_state.frequ +# define g_start_cnt g_prof_state.start_cnt +#endif + +clock_t +dprof_times(pTHX_ struct tms *t) +{ +#ifdef OS2 + ULONG rc; + QWORD cnt; + STRLEN n_a; + + if (!g_frequ) { + if (CheckOSError(DosTmrQueryFreq(&g_frequ))) + croak("DosTmrQueryFreq: %s", SvPV(perl_get_sv("!",TRUE),n_a)); + else + g_frequ = g_frequ/DPROF_HZ; /* count per tick */ + if (CheckOSError(DosTmrQueryTime(&cnt))) + croak("DosTmrQueryTime: %s", + SvPV(perl_get_sv("!",TRUE), n_a)); + g_start_cnt = toLongLong(cnt); + } + + if (CheckOSError(DosTmrQueryTime(&cnt))) + croak("DosTmrQueryTime: %s", SvPV(perl_get_sv("!",TRUE), n_a)); + t->tms_stime = 0; + return (t->tms_utime = (toLongLong(cnt) - g_start_cnt)/g_frequ); +#else /* !OS2 */ +# ifdef VMS + clock_t retval; + /* Get wall time and convert to 10 ms intervals to + * produce the return value dprof expects */ +# if defined(__DECC) && defined (__ALPHA) +# include + uint64 vmstime; + _ckvmssts(sys$gettim(&vmstime)); + vmstime /= 100000; + retval = vmstime & 0x7fffffff; +# else + /* (Older hw or ccs don't have an atomic 64-bit type, so we + * juggle 32-bit ints (and a float) to produce a time_t result + * with minimal loss of information.) */ + long int vmstime[2],remainder,divisor = 100000; + _ckvmssts(sys$gettim((unsigned long int *)vmstime)); + vmstime[1] &= 0x7fff; /* prevent overflow in EDIV */ + _ckvmssts(lib$ediv(&divisor,vmstime,(long int *)&retval,&remainder)); +# endif + /* Fill in the struct tms using the CRTL routine . . .*/ + times((tbuffer_t *)t); + return (clock_t) retval; +# else /* !VMS && !OS2 */ + return times(t); +# endif +#endif +} + +static void +prof_dumpa(pTHX_ opcode ptype, U32 id) +{ + if (ptype == OP_LEAVESUB) { + PerlIO_printf(g_fp,"- %"UVxf"\n", (UV)id); + } + else if(ptype == OP_ENTERSUB) { + PerlIO_printf(g_fp,"+ %"UVxf"\n", (UV)id); + } + else if(ptype == OP_GOTO) { + PerlIO_printf(g_fp,"* %"UVxf"\n", (UV)id); + } + else if(ptype == OP_DIE) { + PerlIO_printf(g_fp,"/ %"UVxf"\n", (UV)id); + } + else { + PerlIO_printf(g_fp,"Profiler unknown prof code %d\n", ptype); + } +} + +static void +prof_dumps(pTHX_ U32 id, char *pname, char *gname) +{ + PerlIO_printf(g_fp,"& %"UVxf" %s %s\n", (UV)id, pname, gname); +} + +static void +prof_dumpt(pTHX_ long tms_utime, long tms_stime, long realtime) +{ + PerlIO_printf(g_fp,"@ %ld %ld %ld\n", tms_utime, tms_stime, realtime); +} + +static void +prof_dump_until(pTHX_ long ix) +{ + long base = 0; + struct tms t1, t2; + clock_t realtime1, realtime2; + + realtime1 = Times(&t1); + + while (base < ix) { + opcode ptype = g_profstack[base++].ptype; + if (ptype == OP_TIME) { + long tms_utime = g_profstack[base++].tms_utime; + long tms_stime = g_profstack[base++].tms_stime; + long realtime = g_profstack[base++].realtime; + + prof_dumpt(aTHX_ tms_utime, tms_stime, realtime); + } + else if (ptype == OP_GV) { + U32 id = g_profstack[base++].id; + char *pname = g_profstack[base++].name; + char *gname = g_profstack[base++].name; + + prof_dumps(aTHX_ id, pname, gname); + } + else { + U32 id = g_profstack[base++].id; + prof_dumpa(aTHX_ ptype, id); + } + } + PerlIO_flush(g_fp); + realtime2 = Times(&t2); + if (realtime2 != realtime1 || t1.tms_utime != t2.tms_utime + || t1.tms_stime != t2.tms_stime) { + g_wprof_r += realtime2 - realtime1; + g_wprof_u += t2.tms_utime - t1.tms_utime; + g_wprof_s += t2.tms_stime - t1.tms_stime; + + PerlIO_printf(g_fp,"+ & Devel::DProf::write\n"); + PerlIO_printf(g_fp,"@ %"IVdf" %"IVdf" %"IVdf"\n", + /* The (IV) casts are one possibility: + * the Painfully Correct Way would be to + * have Clock_t_f. */ + (IV)(t2.tms_utime - t1.tms_utime), + (IV)(t2.tms_stime - t1.tms_stime), + (IV)(realtime2 - realtime1)); + PerlIO_printf(g_fp,"- & Devel::DProf::write\n"); + g_otms_utime = t2.tms_utime; + g_otms_stime = t2.tms_stime; + g_orealtime = realtime2; + PerlIO_flush(g_fp); + } +} + +static void +prof_mark(pTHX_ opcode ptype) +{ + struct tms t; + clock_t realtime, rdelta, udelta, sdelta; + char *name, *pv; + char *hvname; + STRLEN len; + SV *sv; + U32 id; + SV *Sub = GvSV(PL_DBsub); /* name of current sub */ + + if (g_SAVE_STACK) { + if (g_profstack_ix + 5 > g_profstack_max) { + g_profstack_max = g_profstack_max * 3 / 2; + Renew(g_profstack, g_profstack_max, PROFANY); + } + } + + realtime = Times(&t); + rdelta = realtime - g_orealtime; + udelta = t.tms_utime - g_otms_utime; + sdelta = t.tms_stime - g_otms_stime; + if (rdelta || udelta || sdelta) { + if (g_SAVE_STACK) { + g_profstack[g_profstack_ix++].ptype = OP_TIME; + g_profstack[g_profstack_ix++].tms_utime = udelta; + g_profstack[g_profstack_ix++].tms_stime = sdelta; + g_profstack[g_profstack_ix++].realtime = rdelta; + } + else { /* Write it to disk now so's not to eat up core */ + if (g_prof_pid == (int)getpid()) { + prof_dumpt(aTHX_ udelta, sdelta, rdelta); + PerlIO_flush(g_fp); + } + } + g_orealtime = realtime; + g_otms_stime = t.tms_stime; + g_otms_utime = t.tms_utime; + } + + { + SV **svp; + char *gname, *pname; + CV *cv; + + cv = INT2PTR(CV*,SvIVX(Sub)); + svp = hv_fetch(g_cv_hash, (char*)&cv, sizeof(CV*), TRUE); + if (!SvOK(*svp)) { + GV *gv = CvGV(cv); + + sv_setiv(*svp, id = ++g_lastid); + pname = ((GvSTASH(gv) && HvNAME(GvSTASH(gv))) + ? HvNAME(GvSTASH(gv)) + : "(null)"); + gname = GvNAME(gv); + if (CvXSUB(cv) == XS_Devel__DProf_END) + return; + if (g_SAVE_STACK) { /* Store it for later recording -JH */ + g_profstack[g_profstack_ix++].ptype = OP_GV; + g_profstack[g_profstack_ix++].id = id; + g_profstack[g_profstack_ix++].name = pname; + g_profstack[g_profstack_ix++].name = gname; + } + else { /* Write it to disk now so's not to eat up core */ + /* Only record the parent's info */ + if (g_prof_pid == (int)getpid()) { + prof_dumps(aTHX_ id, pname, gname); + PerlIO_flush(g_fp); + } + else + PL_perldb = 0; /* Do not debug the kid. */ + } + } + else { + id = SvIV(*svp); + } + } + + g_total++; + if (g_SAVE_STACK) { /* Store it for later recording -JH */ + g_profstack[g_profstack_ix++].ptype = ptype; + g_profstack[g_profstack_ix++].id = id; + + /* Only record the parent's info */ + if (g_SAVE_STACK < g_profstack_ix) { + if (g_prof_pid == (int)getpid()) + prof_dump_until(aTHX_ g_profstack_ix); + else + PL_perldb = 0; /* Do not debug the kid. */ + g_profstack_ix = 0; + } + } + else { /* Write it to disk now so's not to eat up core */ + + /* Only record the parent's info */ + if (g_prof_pid == (int)getpid()) { + prof_dumpa(aTHX_ ptype, id); + PerlIO_flush(g_fp); + } + else + PL_perldb = 0; /* Do not debug the kid. */ + } +} + +#ifdef PL_NEEDED +# define defstash PL_defstash +#endif + +/* Counts overhead of prof_mark and extra XS call. */ +static void +test_time(pTHX_ clock_t *r, clock_t *u, clock_t *s) +{ + dTHR; + CV *cv = perl_get_cv("Devel::DProf::NONESUCH_noxs", FALSE); + int i, j, k = 0; + HV *oldstash = PL_curstash; + struct tms t1, t2; + clock_t realtime1, realtime2; + U32 ototal = g_total; + U32 ostack = g_SAVE_STACK; + U32 operldb = PL_perldb; + + g_SAVE_STACK = 1000000; + realtime1 = Times(&t1); + + while (k < 2) { + i = 0; + /* Disable debugging of perl_call_sv on second pass: */ + PL_curstash = (k == 0 ? PL_defstash : PL_debstash); + PL_perldb = g_default_perldb; + while (++i <= 100) { + j = 0; + g_profstack_ix = 0; /* Do not let the stack grow */ + while (++j <= 100) { +/* prof_mark(aTHX_ OP_ENTERSUB); */ + + PUSHMARK(PL_stack_sp); + perl_call_sv((SV*)cv, G_SCALAR); + PL_stack_sp--; +/* prof_mark(aTHX_ OP_LEAVESUB); */ + } + } + PL_curstash = oldstash; + if (k == 0) { /* Put time with debugging */ + realtime2 = Times(&t2); + *r = realtime2 - realtime1; + *u = t2.tms_utime - t1.tms_utime; + *s = t2.tms_stime - t1.tms_stime; + } + else { /* Subtract time without debug */ + realtime1 = Times(&t1); + *r -= realtime1 - realtime2; + *u -= t1.tms_utime - t2.tms_utime; + *s -= t1.tms_stime - t2.tms_stime; + } + k++; + } + g_total = ototal; + g_SAVE_STACK = ostack; + PL_perldb = operldb; +} + +static void +prof_recordheader(pTHX) +{ + clock_t r, u, s; + + /* g_fp is opened in the BOOT section */ + PerlIO_printf(g_fp, "#fOrTyTwO\n"); + PerlIO_printf(g_fp, "$hz=%"IVdf";\n", (IV)DPROF_HZ); + PerlIO_printf(g_fp, "$XS_VERSION='DProf %s';\n", XS_VERSION); + PerlIO_printf(g_fp, "# All values are given in HZ\n"); + test_time(aTHX_ &r, &u, &s); + PerlIO_printf(g_fp, + "$over_utime=%"IVdf"; $over_stime=%"IVdf"; $over_rtime=%"IVdf";\n", + /* The (IV) casts are one possibility: + * the Painfully Correct Way would be to + * have Clock_t_f. */ + (IV)u, (IV)s, (IV)r); + PerlIO_printf(g_fp, "$over_tests=10000;\n"); + + g_TIMES_LOCATION = PerlIO_tell(g_fp); + + /* Pad with whitespace. */ + /* This should be enough even for very large numbers. */ + PerlIO_printf(g_fp, "%*s\n", 240 , ""); + + PerlIO_printf(g_fp, "\n"); + PerlIO_printf(g_fp, "PART2\n"); + + PerlIO_flush(g_fp); +} + +static void +prof_record(pTHX) +{ + /* g_fp is opened in the BOOT section */ + + /* Now that we know the runtimes, fill them in at the recorded + location -JH */ + + clock_t r, u, s; + + if (g_SAVE_STACK) { + prof_dump_until(aTHX_ g_profstack_ix); + } + PerlIO_seek(g_fp, g_TIMES_LOCATION, SEEK_SET); + /* Write into reserved 240 bytes: */ + PerlIO_printf(g_fp, + "$rrun_utime=%"IVdf"; $rrun_stime=%"IVdf"; $rrun_rtime=%"IVdf";", + /* The (IV) casts are one possibility: + * the Painfully Correct Way would be to + * have Clock_t_f. */ + (IV)(g_prof_end.tms_utime-g_prof_start.tms_utime-g_wprof_u), + (IV)(g_prof_end.tms_stime-g_prof_start.tms_stime-g_wprof_s), + (IV)(g_rprof_end-g_rprof_start-g_wprof_r)); + PerlIO_printf(g_fp, "\n$total_marks=%"IVdf, (IV)g_total); + + PerlIO_close(g_fp); +} + +#define NONESUCH() + +static void +check_depth(pTHX_ void *foo) +{ + U32 need_depth = (U32)foo; + if (need_depth != g_depth) { + if (need_depth > g_depth) { + warn("garbled call depth when profiling"); + } + else { + I32 marks = g_depth - need_depth; + +/* warn("Check_depth: got %d, expected %d\n", g_depth, need_depth); */ + while (marks--) { + prof_mark(aTHX_ OP_DIE); + } + g_depth = need_depth; + } + } +} + +#define for_real +#ifdef for_real + +XS(XS_DB_sub) +{ + dXSARGS; + dORIGMARK; + SV *Sub = GvSV(PL_DBsub); /* name of current sub */ + +#ifdef PERL_IMPLICIT_CONTEXT + /* profile only the interpreter that loaded us */ + if (g_THX != aTHX) { + PUSHMARK(ORIGMARK); + perl_call_sv(INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG); + } + else +#endif + { + HV *oldstash = PL_curstash; + + DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub)); + + SAVEDESTRUCTOR_X(check_depth, (void*)g_depth); + g_depth++; + + prof_mark(aTHX_ OP_ENTERSUB); + PUSHMARK(ORIGMARK); + perl_call_sv(INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG); + prof_mark(aTHX_ OP_LEAVESUB); + g_depth--; + } + return; +} + +XS(XS_DB_goto) +{ +#ifdef PERL_IMPLICIT_CONTEXT + if (g_THX == aTHX) +#endif + { + prof_mark(aTHX_ OP_GOTO); + return; + } +} + +#endif /* for_real */ + +#ifdef testing + + MODULE = Devel::DProf PACKAGE = DB + + void + sub(...) + PPCODE: + { + dORIGMARK; + HV *oldstash = PL_curstash; + SV *Sub = GvSV(PL_DBsub); /* name of current sub */ + /* SP -= items; added by xsubpp */ + DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub)); + + sv_setiv(PL_DBsingle, 0); /* disable DB single-stepping */ + + prof_mark(aTHX_ OP_ENTERSUB); + PUSHMARK(ORIGMARK); + + PL_curstash = PL_debstash; /* To disable debugging of perl_call_sv */ + perl_call_sv(Sub, GIMME); + PL_curstash = oldstash; + + prof_mark(aTHX_ OP_LEAVESUB); + SPAGAIN; + /* PUTBACK; added by xsubpp */ + } + +#endif /* testing */ + +MODULE = Devel::DProf PACKAGE = Devel::DProf + +void +END() +PPCODE: + { + if (PL_DBsub) { + /* maybe the process forked--we want only + * the parent's profile. + */ + if ( +#ifdef PERL_IMPLICIT_CONTEXT + g_THX == aTHX && +#endif + g_prof_pid == (int)getpid()) + { + g_rprof_end = Times(&g_prof_end); + DBG_TIMER_NOTIFY("Profiler timer is off.\n"); + prof_record(aTHX); + } + } + } + +void +NONESUCH() + +BOOT: + { + g_TIMES_LOCATION = 42; + g_SAVE_STACK = 1<<14; + g_profstack_max = 128; +#ifdef PERL_IMPLICIT_CONTEXT + g_THX = aTHX; +#endif + + /* Before we go anywhere make sure we were invoked + * properly, else we'll dump core. + */ + if (!PL_DBsub) + croak("DProf: run perl with -d to use DProf.\n"); + + /* When we hook up the XS DB::sub we'll be redefining + * the DB::sub from the PM file. Turn off warnings + * while we do this. + */ + { + I32 warn_tmp = PL_dowarn; + PL_dowarn = 0; + newXS("DB::sub", XS_DB_sub, file); + newXS("DB::goto", XS_DB_goto, file); + PL_dowarn = warn_tmp; + } + + sv_setiv(PL_DBsingle, 0); /* disable DB single-stepping */ + + { + char *buffer = getenv("PERL_DPROF_BUFFER"); + + if (buffer) { + g_SAVE_STACK = atoi(buffer); + } + + buffer = getenv("PERL_DPROF_TICKS"); + + if (buffer) { + g_dprof_ticks = atoi(buffer); /* Used under OS/2 only */ + } + else { + g_dprof_ticks = HZ; + } + + buffer = getenv("PERL_DPROF_OUT_FILE_NAME"); + g_out_file_name = savepv(buffer ? buffer : "tmon.out"); + } + + if ((g_fp = PerlIO_open(g_out_file_name, "w")) == NULL) + croak("DProf: unable to write '%s', errno = %d\n", + g_out_file_name, errno); + + g_default_perldb = PERLDBf_NONAME | PERLDBf_SUB | PERLDBf_GOTO; + g_cv_hash = newHV(); + g_prof_pid = (int)getpid(); + + New(0, g_profstack, g_profstack_max, PROFANY); + prof_recordheader(aTHX); + DBG_TIMER_NOTIFY("Profiler timer is on.\n"); + g_orealtime = g_rprof_start = Times(&g_prof_start); + g_otms_utime = g_prof_start.tms_utime; + g_otms_stime = g_prof_start.tms_stime; + PL_perldb = g_default_perldb; + } diff --git a/gnu/usr.bin/perl/ext/Devel/DProf/Makefile.PL b/gnu/usr.bin/perl/ext/Devel/DProf/Makefile.PL new file mode 100644 index 00000000000..667cc529137 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/DProf/Makefile.PL @@ -0,0 +1,17 @@ +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'Devel::DProf', + DISTNAME => 'DProf', + VERSION_FROM => 'DProf.pm', + clean => { 'FILES' => 'tmon.out t/tmon.out t/err'}, + XSPROTOARG => '-noprototypes', + DEFINE => '-DPERLDBf_NONAME=0x40 -DPERLDBf_GOTO=0x80 ' + .'-DG_NODEBUG=32 -DPL_NEEDED', + dist => { + COMPRESS => 'gzip -9f', + SUFFIX => 'gz', + DIST_DEFAULT => 'all tardist', + }, + MAN3PODS => {}, +); diff --git a/gnu/usr.bin/perl/ext/Devel/DProf/Todo b/gnu/usr.bin/perl/ext/Devel/DProf/Todo new file mode 100644 index 00000000000..0e003471d63 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/DProf/Todo @@ -0,0 +1,13 @@ +- work on test suite. +- localize the depth to guard against non-local exits. +Current overhead (with PERLDBf_NONAME) wrt non-debugging run (estimates): + 8% extra call frame on DB::sub + 7% output of subroutine data + 70% output of timing data (on OS/2, 35% with custom dprof_times()) +(Additional 17% are spent to write the output, but they are counted + and subtracted.) + +With compensation for DProf overhead all but some odd 12% are subtracted ?! + +- Calculate overhead/count for XS calls and Perl calls separately. +- goto &XSUB in pp_ctl.c; diff --git a/gnu/usr.bin/perl/ext/Devel/Peek/Changes b/gnu/usr.bin/perl/ext/Devel/Peek/Changes new file mode 100644 index 00000000000..e143f878cf3 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/Peek/Changes @@ -0,0 +1,64 @@ +0.3: Some functions return SV * now. +0.4: Hashes dumped recursively. + Additional fields for CV added. +0.5: Prototypes for functions supported. + Strings are consostently in quotes now. + Name changed to Devel::Peek (former ExtUtils::Peek). +0.7: + New function mstat added. + Docs added (thanks to Dean Roehrich). + +0.8: + Exports Dump and mstat. + Docs list more details. + Arrays print addresses of SV. + CV: STASH renamed to COMP_STASH. The package of GV is printed now. + Updated for newer overloading implementation (but will not report + packages with overloading). +0.81: + Implements and exports DeadCode(). + Buglet in the definition of mstat for malloc-less perl corrected. +0.82: + New style PADless CV allowed. +0.83: + DumpArray added. + Compatible with PerlIO. + When calculating junk inside subs, divide by refcount. +0.84: + Indented output. +0.85: + By Gisle Aas: format SvPVX, print magic (but not unrefcounted mg_obj); + A lot of new fields stolen from sv_dump(); +0.86: + By Gisle Aas: + - Updated the documentation. + - Move string printer to it's own function: fprintpv() + - Use it to print PVs, HV keys, MG_PTR + - Don't print IV for hashes as KEY is the same field + - Tag GvSTASH as "GvSTASH" in order to not confuse it with + the other STASH field, e.g. Dump(bless \*foo, "bar") +0.87: + Extra indentation of SvRV. + AMAGIC removed. + Head of OOK data printed too. +0.88: + PADLIST and OUTSIDE of CVs itemized. + Prints the value of the hash of HV keys. + Changes by Gisle: do not print both if AvARRAY == AvALLOC; + print hash fill statistics. +0.89: + Changes by Gisle: optree dump. +0.90: + DumpWithOP, DumpProg exported. + Better indent for AV, HV elts. + Address of SV printed. + Corrected Zero code which was causing segfaults. +0.91: + Compiles, runs test under 5.005beta2. + Update DEBUGGING_MSTATS-less MSTATS. +0.92: + Should compile without MYMALLOC too. +0.94: + Had problems with HEf_SVKEY magic. +0.95: + Added "hash quality" output to estimate Perl's hash functions. diff --git a/gnu/usr.bin/perl/ext/Devel/Peek/Makefile.PL b/gnu/usr.bin/perl/ext/Devel/Peek/Makefile.PL new file mode 100644 index 00000000000..3c6dbf545d1 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/Peek/Makefile.PL @@ -0,0 +1,11 @@ +use ExtUtils::MakeMaker; +WriteMakefile( + NAME => "Devel::Peek", + VERSION_FROM => 'Peek.pm', + 'dist' => { + COMPRESS => 'gzip -9f', + SUFFIX => 'gz', + DIST_DEFAULT => 'all tardist', + }, + MAN3PODS => {}, +); diff --git a/gnu/usr.bin/perl/ext/Devel/Peek/Peek.pm b/gnu/usr.bin/perl/ext/Devel/Peek/Peek.pm new file mode 100644 index 00000000000..080251bb5e8 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/Peek/Peek.pm @@ -0,0 +1,432 @@ +# Devel::Peek - A data debugging tool for the XS programmer +# The documentation is after the __END__ + +package Devel::Peek; + +# Underscore to allow older Perls to access older version from CPAN +$VERSION = '1.00_01'; + +require Exporter; +use XSLoader (); + +@ISA = qw(Exporter); +@EXPORT = qw(Dump mstat DeadCode DumpArray DumpWithOP DumpProg); +@EXPORT_OK = qw(SvREFCNT SvREFCNT_inc SvREFCNT_dec CvGV); +%EXPORT_TAGS = ('ALL' => [@EXPORT, @EXPORT_OK]); + +XSLoader::load 'Devel::Peek'; + +sub DumpWithOP ($;$) { + local($Devel::Peek::dump_ops)=1; + my $depth = @_ > 1 ? $_[1] : 4 ; + Dump($_[0],$depth); +} + +1; +__END__ + +=head1 NAME + +Devel::Peek - A data debugging tool for the XS programmer + +=head1 SYNOPSIS + + use Devel::Peek; + Dump( $a ); + Dump( $a, 5 ); + DumpArray( 5, $a, $b, ... ); + mstat "Point 5"; + +=head1 DESCRIPTION + +Devel::Peek contains functions which allows raw Perl datatypes to be +manipulated from a Perl script. This is used by those who do XS programming +to check that the data they are sending from C to Perl looks as they think +it should look. The trick, then, is to know what the raw datatype is +supposed to look like when it gets to Perl. This document offers some tips +and hints to describe good and bad raw data. + +It is very possible that this document will fall far short of being useful +to the casual reader. The reader is expected to understand the material in +the first few sections of L. + +Devel::Peek supplies a C function which can dump a raw Perl +datatype, and C function to report on memory usage +(if perl is compiled with corresponding option). The function +DeadCode() provides statistics on the data "frozen" into inactive +C. Devel::Peek also supplies C, C, and +C which can query, increment, and decrement reference +counts on SVs. This document will take a passive, and safe, approach +to data debugging and for that it will describe only the C +function. For format of output of mstats() see +L>. + +Function C allows dumping of multiple values (useful when you +need to analize returns of functions). + +The global variable $Devel::Peek::pv_limit can be set to limit the +number of character printed in various string values. Setting it to 0 +means no limit. + +=head1 EXAMPLES + +The following examples don't attempt to show everything as that would be a +monumental task, and, frankly, we don't want this manpage to be an internals +document for Perl. The examples do demonstrate some basics of the raw Perl +datatypes, and should suffice to get most determined people on their way. +There are no guidewires or safety nets, nor blazed trails, so be prepared to +travel alone from this point and on and, if at all possible, don't fall into +the quicksand (it's bad for business). + +Oh, one final bit of advice: take L with you. When you return we +expect to see it well-thumbed. + +=head2 A simple scalar string + +Let's begin by looking a simple scalar which is holding a string. + + use Devel::Peek; + $a = "hello"; + Dump $a; + +The output: + + SV = PVIV(0xbc288) + REFCNT = 1 + FLAGS = (POK,pPOK) + IV = 0 + PV = 0xb2048 "hello"\0 + CUR = 5 + LEN = 6 + +This says C<$a> is an SV, a scalar. The scalar is a PVIV, a string. +Its reference count is 1. It has the C flag set, meaning its +current PV field is valid. Because POK is set we look at the PV item +to see what is in the scalar. The \0 at the end indicate that this +PV is properly NUL-terminated. +If the FLAGS had been IOK we would look +at the IV item. CUR indicates the number of characters in the PV. +LEN indicates the number of bytes requested for the PV (one more than +CUR, in this case, because LEN includes an extra byte for the +end-of-string marker). + +=head2 A simple scalar number + +If the scalar contains a number the raw SV will be leaner. + + use Devel::Peek; + $a = 42; + Dump $a; + +The output: + + SV = IV(0xbc818) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 42 + +This says C<$a> is an SV, a scalar. The scalar is an IV, a number. Its +reference count is 1. It has the C flag set, meaning it is currently +being evaluated as a number. Because IOK is set we look at the IV item to +see what is in the scalar. + +=head2 A simple scalar with an extra reference + +If the scalar from the previous example had an extra reference: + + use Devel::Peek; + $a = 42; + $b = \$a; + Dump $a; + +The output: + + SV = IV(0xbe860) + REFCNT = 2 + FLAGS = (IOK,pIOK) + IV = 42 + +Notice that this example differs from the previous example only in its +reference count. Compare this to the next example, where we dump C<$b> +instead of C<$a>. + +=head2 A reference to a simple scalar + +This shows what a reference looks like when it references a simple scalar. + + use Devel::Peek; + $a = 42; + $b = \$a; + Dump $b; + +The output: + + SV = RV(0xf041c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xbab08 + SV = IV(0xbe860) + REFCNT = 2 + FLAGS = (IOK,pIOK) + IV = 42 + +Starting from the top, this says C<$b> is an SV. The scalar is an RV, a +reference. It has the C flag set, meaning it is a reference. Because +ROK is set we have an RV item rather than an IV or PV. Notice that Dump +follows the reference and shows us what C<$b> was referencing. We see the +same C<$a> that we found in the previous example. + +Note that the value of C coincides with the numbers we see when we +stringify $b. The addresses inside RV() and IV() are addresses of +C structure which holds the current state of an C. This +address may change during lifetime of an SV. + +=head2 A reference to an array + +This shows what a reference to an array looks like. + + use Devel::Peek; + $a = [42]; + Dump $a; + +The output: + + SV = RV(0xf041c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xb2850 + SV = PVAV(0xbd448) + REFCNT = 1 + FLAGS = () + IV = 0 + NV = 0 + ARRAY = 0xb2048 + ALLOC = 0xb2048 + FILL = 0 + MAX = 0 + ARYLEN = 0x0 + FLAGS = (REAL) + Elt No. 0 0xb5658 + SV = IV(0xbe860) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 42 + +This says C<$a> is an SV and that it is an RV. That RV points to +another SV which is a PVAV, an array. The array has one element, +element zero, which is another SV. The field C above indicates +the last element in the array, similar to C<$#$a>. + +If C<$a> pointed to an array of two elements then we would see the +following. + + use Devel::Peek 'Dump'; + $a = [42,24]; + Dump $a; + +The output: + + SV = RV(0xf041c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xb2850 + SV = PVAV(0xbd448) + REFCNT = 1 + FLAGS = () + IV = 0 + NV = 0 + ARRAY = 0xb2048 + ALLOC = 0xb2048 + FILL = 0 + MAX = 0 + ARYLEN = 0x0 + FLAGS = (REAL) + Elt No. 0 0xb5658 + SV = IV(0xbe860) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 42 + Elt No. 1 0xb5680 + SV = IV(0xbe818) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 24 + +Note that C will not report I the elements in the array, +only several first (depending on how deep it already went into the +report tree). + +=head2 A reference to a hash + +The following shows the raw form of a reference to a hash. + + use Devel::Peek; + $a = {hello=>42}; + Dump $a; + +The output: + + SV = RV(0xf041c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xb2850 + SV = PVHV(0xbd448) + REFCNT = 1 + FLAGS = () + NV = 0 + ARRAY = 0xbd748 + KEYS = 1 + FILL = 1 + MAX = 7 + RITER = -1 + EITER = 0x0 + Elt "hello" => 0xbaaf0 + SV = IV(0xbe860) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 42 + +This shows C<$a> is a reference pointing to an SV. That SV is a PVHV, a +hash. Fields RITER and EITER are used by C>. + +=head2 Dumping a large array or hash + +The C function, by default, dumps up to 4 elements from a +toplevel array or hash. This number can be increased by supplying a +second argument to the function. + + use Devel::Peek; + $a = [10,11,12,13,14]; + Dump $a; + +Notice that C prints only elements 10 through 13 in the above code. +The following code will print all of the elements. + + use Devel::Peek 'Dump'; + $a = [10,11,12,13,14]; + Dump $a, 5; + +=head2 A reference to an SV which holds a C pointer + +This is what you really need to know as an XS programmer, of course. When +an XSUB returns a pointer to a C structure that pointer is stored in an SV +and a reference to that SV is placed on the XSUB stack. So the output from +an XSUB which uses something like the T_PTROBJ map might look something like +this: + + SV = RV(0xf381c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xb8ad8 + SV = PVMG(0xbb3c8) + REFCNT = 1 + FLAGS = (OBJECT,IOK,pIOK) + IV = 729160 + NV = 0 + PV = 0 + STASH = 0xc1d10 "CookBookB::Opaque" + +This shows that we have an SV which is an RV. That RV points at another +SV. In this case that second SV is a PVMG, a blessed scalar. Because it is +blessed it has the C flag set. Note that an SV which holds a C +pointer also has the C flag set. The C is set to the package +name which this SV was blessed into. + +The output from an XSUB which uses something like the T_PTRREF map, which +doesn't bless the object, might look something like this: + + SV = RV(0xf381c) + REFCNT = 1 + FLAGS = (ROK) + RV = 0xb8ad8 + SV = PVMG(0xbb3c8) + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 729160 + NV = 0 + PV = 0 + +=head2 A reference to a subroutine + +Looks like this: + + SV = RV(0x798ec) + REFCNT = 1 + FLAGS = (TEMP,ROK) + RV = 0x1d453c + SV = PVCV(0x1c768c) + REFCNT = 2 + FLAGS = () + IV = 0 + NV = 0 + COMP_STASH = 0x31068 "main" + START = 0xb20e0 + ROOT = 0xbece0 + XSUB = 0x0 + XSUBANY = 0 + GVGV::GV = 0x1d44e8 "MY" :: "top_targets" + FILE = "(eval 5)" + DEPTH = 0 + PADLIST = 0x1c9338 + +This shows that + +=over + +=item * + +the subroutine is not an XSUB (since C and C are +non-zero, and C is zero); + +=item * + +that it was compiled in the package C
; + +=item * + +under the name C; + +=item * + +inside a 5th eval in the program; + +=item * + +it is not currently executed (see C); + +=item * + +it has no prototype (C field is missing). + +=back + +=head1 EXPORTS + +C, C, C, C, C and +C by default. Additionally available C, +C and C. + +=head1 BUGS + +Readers have been known to skip important parts of L, causing much +frustration for all. + +=head1 AUTHOR + +Ilya Zakharevich ilya@math.ohio-state.edu + +Copyright (c) 1995-98 Ilya Zakharevich. All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +Author of this software makes no claim whatsoever about suitability, +reliability, edability, editability or usability of this product, and +should not be kept liable for any damage resulting from the use of +it. If you can use it, you are in luck, if not, I should not be kept +responsible. Keep a handy copy of your backup tape at hand. + +=head1 SEE ALSO + +L, and L, again. + +=cut diff --git a/gnu/usr.bin/perl/ext/Devel/Peek/Peek.xs b/gnu/usr.bin/perl/ext/Devel/Peek/Peek.xs new file mode 100644 index 00000000000..9837e9ceb21 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Devel/Peek/Peek.xs @@ -0,0 +1,218 @@ +#define PERL_NO_GET_CONTEXT +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +SV * +DeadCode(pTHX) +{ +#ifdef PURIFY + return Nullsv; +#else + SV* sva; + SV* sv, *dbg; + SV* ret = newRV_noinc((SV*)newAV()); + register SV* svend; + int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0; + + for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) { + svend = &sva[SvREFCNT(sva)]; + for (sv = sva + 1; sv < svend; ++sv) { + if (SvTYPE(sv) == SVt_PVCV) { + CV *cv = (CV*)sv; + AV* padlist = CvPADLIST(cv), *argav; + SV** svp; + SV** pad; + int i = 0, j, levelm, totm = 0, levelref, totref = 0; + int levels, tots = 0, levela, tota = 0, levelas, totas = 0; + int dumpit = 0; + + if (CvXSUB(sv)) { + continue; /* XSUB */ + } + if (!CvGV(sv)) { + continue; /* file-level scope. */ + } + if (!CvROOT(cv)) { + /* PerlIO_printf(Perl_debug_log, " no root?!\n"); */ + continue; /* autoloading stub. */ + } + do_gvgv_dump(0, Perl_debug_log, "GVGV::GV", CvGV(sv)); + if (CvDEPTH(cv)) { + PerlIO_printf(Perl_debug_log, " busy\n"); + continue; + } + svp = AvARRAY(padlist); + while (++i <= AvFILL(padlist)) { /* Depth. */ + SV **args; + + pad = AvARRAY((AV*)svp[i]); + argav = (AV*)pad[0]; + if (!argav || (SV*)argav == &PL_sv_undef) { + PerlIO_printf(Perl_debug_log, " closure-template\n"); + continue; + } + args = AvARRAY(argav); + levelm = levels = levelref = levelas = 0; + levela = sizeof(SV*) * (AvMAX(argav) + 1); + if (AvREAL(argav)) { + for (j = 0; j < AvFILL(argav); j++) { + if (SvROK(args[j])) { + PerlIO_printf(Perl_debug_log, " ref in args!\n"); + levelref++; + } + /* else if (SvPOK(args[j]) && SvPVX(args[j])) { */ + else if (SvTYPE(args[j]) >= SVt_PV && SvLEN(args[j])) { + levelas += SvLEN(args[j])/SvREFCNT(args[j]); + } + } + } + for (j = 1; j < AvFILL((AV*)svp[1]); j++) { /* Vars. */ + if (SvROK(pad[j])) { + levelref++; + do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0); + dumpit = 1; + } + /* else if (SvPOK(pad[j]) && SvPVX(pad[j])) { */ + else if (SvTYPE(pad[j]) >= SVt_PVAV) { + if (!SvPADMY(pad[j])) { + levelref++; + do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0); + dumpit = 1; + } + } + else if (SvTYPE(pad[j]) >= SVt_PV && SvLEN(pad[j])) { + int db_len = SvLEN(pad[j]); + SV *db_sv = pad[j]; + levels++; + levelm += SvLEN(pad[j])/SvREFCNT(pad[j]); + /* Dump(pad[j],4); */ + } + } + PerlIO_printf(Perl_debug_log, " level %i: refs: %i, strings: %i in %i,\targsarray: %i, argsstrings: %i\n", + i, levelref, levelm, levels, levela, levelas); + totm += levelm; + tota += levela; + totas += levelas; + tots += levels; + totref += levelref; + if (dumpit) + do_sv_dump(0, Perl_debug_log, (SV*)cv, 0, 2, 0, 0); + } + if (AvFILL(padlist) > 1) { + PerlIO_printf(Perl_debug_log, " total: refs: %i, strings: %i in %i,\targsarrays: %i, argsstrings: %i\n", + totref, totm, tots, tota, totas); + } + tref += totref; + tm += totm; + ts += tots; + ta += tota; + tas += totas; + } + } + } + PerlIO_printf(Perl_debug_log, "total: refs: %i, strings: %i in %i\targsarray: %i, argsstrings: %i\n", tref, tm, ts, ta, tas); + + return ret; +#endif /* !PURIFY */ +} + +#if defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS) \ + || (defined(MYMALLOC) && !defined(PLAIN_MALLOC)) +# define mstat(str) dump_mstats(str) +#else +# define mstat(str) \ + PerlIO_printf(Perl_debug_log, "%s: perl not compiled with DEBUGGING_MSTATS\n",str); +#endif + +#define _CvGV(cv) \ + (SvROK(cv) && (SvTYPE(SvRV(cv))==SVt_PVCV) \ + ? SvREFCNT_inc(CvGV((CV*)SvRV(cv))) : &PL_sv_undef) + +MODULE = Devel::Peek PACKAGE = Devel::Peek + +void +mstat(str="Devel::Peek::mstat: ") +char *str + +void +Dump(sv,lim=4) +SV * sv +I32 lim +PPCODE: +{ + SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE); + STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0; + SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE); + I32 save_dumpindent = PL_dumpindent; + PL_dumpindent = 2; + do_sv_dump(0, Perl_debug_log, sv, 0, lim, dumpop && SvTRUE(dumpop), pv_lim); + PL_dumpindent = save_dumpindent; +} + +void +DumpArray(lim,...) +I32 lim +PPCODE: +{ + long i; + SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE); + STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0; + SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE); + I32 save_dumpindent = PL_dumpindent; + PL_dumpindent = 2; + + for (i=1; idl_load_flags) or - croak("Can't load '$file' for module $module: ".dl_error()."\n"); + croak("Can't load '$file' for module $module: ".dl_error()); push(@dl_librefs,$libref); # record loaded object @@ -251,6 +282,12 @@ print OUT <<'EOT'; last arg unless wantarray; next; } + elsif ($Is_MacOS) { + if (m/:/ && -f $_) { + push(@found,$_); + last arg unless wantarray; + } + } elsif (m:/: && -f $_ && !$do_expand) { push(@found,$_); last arg unless wantarray; @@ -261,6 +298,30 @@ print OUT <<'EOT'; # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:) { s/^-L//; push(@dirs, $_); next; } + if ($Is_MacOS) { + # Otherwise we try to try to spot directories by a heuristic + # (this is a more complicated issue than it first appears) + if (m/:/ && -d $_) { push(@dirs, $_); next; } + # Only files should get this far... + my(@names, $name); # what filenames to look for + s/^-l//; + push(@names, $_); + foreach $dir (@dirs, @dl_library_path) { + next unless -d $dir; + $dir =~ s/^([^:]+)$/:$1/; + $dir =~ s/:$//; + foreach $name (@names) { + my($file) = "$dir:$name"; + print STDERR " checking in $dir for $name\n" if $dl_debug; + if (-f $file) { + push(@found, $file); + next arg; # no need to look any further + } + } + } + next; + } + # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_) { push(@dirs, $_); next; } @@ -350,7 +411,7 @@ sub dl_find_symbol_anywhere DynaLoader - Dynamically load C libraries into Perl code -dl_error(), dl_findfile(), dl_expandspec(), dl_load_file(), dl_find_symbol(), dl_find_symbol_anywhere(), dl_undef_symbols(), dl_install_xsub(), dl_load_flags(), bootstrap() - routines used by DynaLoader modules +dl_error(), dl_findfile(), dl_expandspec(), dl_load_file(), dl_unload_file(), dl_find_symbol(), dl_find_symbol_anywhere(), dl_undef_symbols(), dl_install_xsub(), dl_load_flags(), bootstrap() - routines used by DynaLoader modules =head1 SYNOPSIS @@ -402,6 +463,7 @@ DynaLoader Interface Summary $symref = dl_find_symbol_anywhere($symbol) Perl $libref = dl_load_file($filename, $flags) C + $status = dl_unload_file($libref) C $symref = dl_find_symbol($libref, $symbol) C @symbols = dl_undef_symbols() C dl_install_xsub($name, $symref [, $filename]) C @@ -579,6 +641,42 @@ current values of @dl_require_symbols and @dl_resolve_using if required. Linux, and is a common choice when providing a "wrapper" on other mechanisms as is done in the OS/2 port.) +=item dl_unload_file() + +Syntax: + + $status = dl_unload_file($libref) + +Dynamically unload $libref, which must be an opaque 'library reference' as +returned from dl_load_file. Returns one on success and zero on failure. + +This function is optional and may not necessarily be provided on all platforms. +If it is defined, it is called automatically when the interpreter exits for +every shared object or library loaded by DynaLoader::bootstrap. All such +library references are stored in @dl_librefs by DynaLoader::Bootstrap as it +loads the libraries. The files are unloaded in last-in, first-out order. + +This unloading is usually necessary when embedding a shared-object perl (e.g. +one configured with -Duseshrplib) within a larger application, and the perl +interpreter is created and destroyed several times within the lifetime of the +application. In this case it is possible that the system dynamic linker will +unload and then subsequently reload the shared libperl without relocating any +references to it from any files DynaLoaded by the previous incarnation of the +interpreter. As a result, any shared objects opened by DynaLoader may point to +a now invalid 'ghost' of the libperl shared object, causing apparently random +memory corruption and crashes. This behaviour is most commonly seen when using +Apache and mod_perl built with the APXS mechanism. + + SunOS: dlclose($libref) + HP-UX: ??? + Linux: ??? + NeXT: ??? + VMS: ??? + +(The dlclose() function is also used by Solaris and some versions of +Linux, and is a common choice when providing a "wrapper" on other +mechanisms as is done in the OS/2 port.) + =item dl_loadflags() Syntax: diff --git a/gnu/usr.bin/perl/ext/DynaLoader/XSLoader_pm.PL b/gnu/usr.bin/perl/ext/DynaLoader/XSLoader_pm.PL new file mode 100644 index 00000000000..8cdfd634255 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/XSLoader_pm.PL @@ -0,0 +1,158 @@ +use Config; + +sub to_string { + my ($value) = @_; + $value =~ s/\\/\\\\/g; + $value =~ s/'/\\'/g; + return "'$value'"; +} + +unlink "XSLoader.pm" if -f "XSLoader.pm"; +open OUT, ">XSLoader.pm" or die $!; +print OUT <<'EOT'; +# Generated from XSLoader.pm.PL (resolved %Config::Config value) + +package XSLoader; + +# And Gandalf said: 'Many folk like to know beforehand what is to +# be set on the table; but those who have laboured to prepare the +# feast like to keep their secret; for wonder makes the words of +# praise louder.' + +# (Quote from Tolkien sugested by Anno Siegel.) +# +# See pod text at end of file for documentation. +# See also ext/DynaLoader/README in source tree for other information. +# +# Tim.Bunce@ig.co.uk, August 1994 + +$VERSION = "0.01"; # avoid typo warning + +# enable debug/trace messages from DynaLoader perl code +# $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug; + +EOT + +print OUT ' my $dl_dlext = ', to_string($Config::Config{'dlext'}), ";\n" ; + +print OUT <<'EOT'; + +# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. +package DynaLoader; +boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && + !defined(&dl_load_file); +package XSLoader; + +1; # End of main code + +# The bootstrap function cannot be autoloaded (without complications) +# so we define it here: + +sub load { + package DynaLoader; + + my($module) = $_[0]; + + # work with static linking too + my $b = "$module\::bootstrap"; + goto &$b if defined &$b; + + goto retry unless $module and defined &dl_load_file; + + my @modparts = split(/::/,$module); + my $modfname = $modparts[-1]; + +EOT + +print OUT <<'EOT' if defined &DynaLoader::mod2fname; + # Some systems have restrictions on files names for DLL's etc. + # mod2fname returns appropriate file base name (typically truncated) + # It may also edit @modparts if required. + $modfname = &mod2fname(\@modparts) if defined &mod2fname; + +EOT + +print OUT <<'EOT'; + my $modpname = join('/',@modparts); + my $modlibname = (caller())[1]; + my $c = @modparts; + $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename + my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext"; + +# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug; + + my $bs = $file; + $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library + + goto retry if not -f $file or -s $bs; + + my $bootname = "boot_$module"; + $bootname =~ s/\W/_/g; + @dl_require_symbols = ($bootname); + + # Many dynamic extension loading problems will appear to come from + # this section of code: XYZ failed at line 123 of DynaLoader.pm. + # Often these errors are actually occurring in the initialisation + # C code of the extension XS file. Perl reports the error as being + # in this perl code simply because this was the last perl code + # it executed. + + my $libref = dl_load_file($file, 0) or do { + require Carp; + Carp::croak("Can't load '$file' for module $module: " . dl_error()); + }; + push(@dl_librefs,$libref); # record loaded object + + my @unresolved = dl_undef_symbols(); + if (@unresolved) { + require Carp; + Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); + } + + my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do { + require Carp; + Carp::croak("Can't find '$bootname' symbol in $file\n"); + }; + + my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); + + push(@dl_modules, $module); # record loaded module + + # See comment block above + return &$xs(@_); + + retry: + require DynaLoader; + goto &DynaLoader::bootstrap_inherit; +} + +__END__ + +=head1 NAME + +XSLoader - Dynamically load C libraries into Perl code + +=head1 SYNOPSIS + + package YourPackage; + use XSLoader; + + XSLoader::load 'YourPackage', @args; + +=head1 DESCRIPTION + +This module defines a standard I interface to the dynamic +linking mechanisms available on many platforms. Its primary purpose is +to implement cheap automatic dynamic loading of Perl modules. + +For more complicated interface see L. + +=head1 AUTHOR + +Ilya Zakharevich: extraction from DynaLoader. + +=cut +EOT + +close OUT or die $!; + diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs new file mode 100644 index 00000000000..688e4745f8e --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_dyld.xs @@ -0,0 +1,226 @@ +/* dl_dyld.xs + * + * Platform: Darwin (Mac OS) + * Author: Wilfredo Sanchez + * Based on: dl_next.xs by Paul Marquess + * Based on: dl_dlopen.xs by Anno Siegel + * Created: Aug 15th, 1994 + * + */ + +/* + And Gandalf said: 'Many folk like to know beforehand what is to + be set on the table; but those who have laboured to prepare the + feast like to keep their secret; for wonder makes the words of + praise louder.' +*/ + +/* Porting notes: + +dl_dyld.xs is based on dl_next.xs by Anno Siegel. + +dl_next.xs is in turn a port from dl_dlopen.xs by Paul Marquess. It +should not be used as a base for further ports though it may be used +as an example for how dl_dlopen.xs can be ported to other platforms. + +The method used here is just to supply the sun style dlopen etc. +functions in terms of NeXT's/Apple's dyld. The xs code proper is +unchanged from Paul's original. + +The port could use some streamlining. For one, error handling could +be simplified. + +This should be useable as a replacement for dl_next.xs, but it has not +been tested on NeXT platforms. + + Wilfredo Sanchez + +*/ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#define DL_LOADONCEONLY + +#include "dlutils.c" /* SaveError() etc */ + +#undef environ +#undef bool +#import + +static char * dl_last_error = (char *) 0; +static AV *dl_resolve_using = Nullav; + +static char *dlerror() +{ + return dl_last_error; +} + +int dlclose(handle) /* stub only */ +void *handle; +{ + return 0; +} + +enum dyldErrorSource +{ + OFImage, +}; + +static void TranslateError + (const char *path, enum dyldErrorSource type, int number) +{ + dTHX; + char *error; + unsigned int index; + static char *OFIErrorStrings[] = + { + "%s(%d): Object Image Load Failure\n", + "%s(%d): Object Image Load Success\n", + "%s(%d): Not an recognisable object file\n", + "%s(%d): No valid architecture\n", + "%s(%d): Object image has an invalid format\n", + "%s(%d): Invalid access (permissions?)\n", + "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n", + }; +#define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0])) + + switch (type) + { + case OFImage: + index = number; + if (index > NUM_OFI_ERRORS - 1) + index = NUM_OFI_ERRORS - 1; + error = Perl_form_nocontext(OFIErrorStrings[index], path, number); + break; + + default: + error = Perl_form_nocontext("%s(%d): Totally unknown error type %d\n", + path, number, type); + break; + } + safefree(dl_last_error); + dl_last_error = savepv(error); +} + +static char *dlopen(char *path, int mode /* mode is ignored */) +{ + int dyld_result; + NSObjectFileImage ofile; + NSModule handle = NULL; + + dyld_result = NSCreateObjectFileImageFromFile(path, &ofile); + if (dyld_result != NSObjectFileImageSuccess) + TranslateError(path, OFImage, dyld_result); + else + { + // NSLinkModule will cause the run to abort on any link error's + // not very friendly but the error recovery functionality is limited. + handle = NSLinkModule(ofile, path, TRUE); + } + + return handle; +} + +void * +dlsym(handle, symbol) +void *handle; +char *symbol; +{ + void *addr; + + if (NSIsSymbolNameDefined(symbol)) + addr = NSAddressOfSymbol(NSLookupAndBindSymbol(symbol)); + else + addr = NULL; + + return addr; +} + + + +/* ----- code from dl_dlopen.xs below here ----- */ + + +static void +dl_private_init(pTHX) +{ + (void)dl_generic_private_init(aTHX); + dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI); +} + +MODULE = DynaLoader PACKAGE = DynaLoader + +BOOT: + (void)dl_private_init(aTHX); + + + +void * +dl_load_file(filename, flags=0) + char * filename + int flags + PREINIT: + int mode = 1; + CODE: + DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); + if (flags & 0x01) + Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); + RETVAL = dlopen(filename, mode) ; + DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL)); + ST(0) = sv_newmortal() ; + if (RETVAL == NULL) + SaveError(aTHX_ "%s",dlerror()) ; + else + sv_setiv( ST(0), PTR2IV(RETVAL) ); + + +void * +dl_find_symbol(libhandle, symbolname) + void * libhandle + char * symbolname + CODE: + symbolname = Perl_form_nocontext("_%s", symbolname); + DLDEBUG(2, PerlIO_printf(Perl_debug_log, + "dl_find_symbol(handle=%lx, symbol=%s)\n", + (unsigned long) libhandle, symbolname)); + RETVAL = dlsym(libhandle, symbolname); + DLDEBUG(2, PerlIO_printf(Perl_debug_log, + " symbolref = %lx\n", (unsigned long) RETVAL)); + ST(0) = sv_newmortal() ; + if (RETVAL == NULL) + SaveError(aTHX_ "%s",dlerror()) ; + else + sv_setiv( ST(0), PTR2IV(RETVAL) ); + + +void +dl_undef_symbols() + PPCODE: + + + +# These functions should not need changing on any platform: + +void +dl_install_xsub(perl_name, symref, filename="$Package") + char * perl_name + void * symref + char * filename + CODE: + DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n", + perl_name, symref)); + ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, + (void(*)(pTHX_ CV *))symref, + filename))); + + +char * +dl_error() + CODE: + RETVAL = LastError ; + OUTPUT: + RETVAL + +# end. diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_mpeix.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_mpeix.xs index 4cc07ec4c3c..7d27901e657 100644 --- a/gnu/usr.bin/perl/ext/DynaLoader/dl_mpeix.xs +++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_mpeix.xs @@ -33,16 +33,16 @@ typedef struct { static AV *dl_resolve_using = Nullav; static void -dl_private_init() +dl_private_init(pTHX) { - (void)dl_generic_private_init(); - dl_resolve_using = perl_get_av("DynaLoader::dl_resolve_using", 0x4); + (void)dl_generic_private_init(aTHX); + dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI); } MODULE = DynaLoader PACKAGE = DynaLoader BOOT: - (void)dl_private_init(); + (void)dl_private_init(aTHX); void * dl_load_file(filename, flags=0) @@ -53,10 +53,10 @@ dl_load_file(filename, flags=0) p_mpe_dld obj = NULL; int i; CODE: - DLDEBUG(1,PerlIO_printf(PerlIO_stderr(), "dl_load_file(%s,%x):\n", filename, + DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename, flags)); if (flags & 0x01) - warn("Can't make loaded symbols global on this platform while loading %s + Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s ",filename); obj = (p_mpe_dld) safemalloc(sizeof(t_mpe_dld)); memzero(obj, sizeof(t_mpe_dld)); @@ -68,13 +68,13 @@ flags)); else sprintf(obj->filename," %s ",filename); - DLDEBUG(2,PerlIO_printf(PerlIO_stderr()," libref=%x\n", obj)); + DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", obj)); ST(0) = sv_newmortal() ; if (obj == NULL) - SaveError("%s",Strerror(errno)); + SaveError(aTHX_"%s",Strerror(errno)); else - sv_setiv( ST(0), (IV)obj); + sv_setiv( ST(0), PTR2IV(obj) ); void * dl_find_symbol(libhandle, symbolname) @@ -86,7 +86,7 @@ dl_find_symbol(libhandle, symbolname) char symname[PATH_MAX + 3]; void * symaddr = NULL; int status; - DLDEBUG(2,PerlIO_printf(PerlIO_stderr(),"dl_find_symbol(handle=%x, symbol=%s)\n", + DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%s)\n", libhandle, symbolname)); ST(0) = sv_newmortal() ; errno = 0; @@ -95,12 +95,12 @@ dl_find_symbol(libhandle, symbolname) HPGETPROCPLABEL(8, symname, &symaddr, &status, obj->filename, 1, 0, &datalen, 1, 0, 0); - DLDEBUG(2,PerlIO_printf(PerlIO_stderr()," symbolref(PROCEDURE) = %x, status=%x\n", symaddr, status)); + DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref(PROCEDURE) = %x, status=%x\n", symaddr, status)); if (status != 0) { - SaveError("%s",(errno) ? Strerror(errno) : "Symbol not found") ; + SaveError(aTHX_"%s",(errno) ? Strerror(errno) : "Symbol not found") ; } else { - sv_setiv( ST(0), (IV)symaddr); + sv_setiv( ST(0), PTR2IV(symaddr) ); } void @@ -115,9 +115,11 @@ dl_install_xsub(perl_name, symref, filename="$Package") void * symref char * filename CODE: - DLDEBUG(2,PerlIO_printf(PerlIO_stderr(),"dl_install_xsub(name=%s, symref=%x)\n", + DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n", perl_name, symref)); - ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename))); + ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, + (void(*)(pTHX_ CV *))symref, + filename))); char * dl_error() diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_vmesa.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_vmesa.xs new file mode 100644 index 00000000000..8595e440a69 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_vmesa.xs @@ -0,0 +1,175 @@ +/* dl_vmesa.xs + * + * Platform: VM/ESA, possibly others which use dllload etc. + * Author: Neale Ferguson (neale@mailbox.tabnsw.com.au) + * Created: 23rd Septemer, 1998 + * + * + */ + +/* Porting notes: + + + Definition of VM/ESA dynamic Linking functions + ============================================== + In order to make this implementation easier to understand here is a + quick definition of the VM/ESA Dynamic Linking functions which are + used here. + + dlopen + ------ + void * + dlopen(const char *path) + + This function takes the name of a dynamic object file and returns + a descriptor which can be used by dlsym later. It returns NULL on + error. + + + dllsym + ------ + void * + dlsym(void *handle, char *symbol) + + Takes the handle returned from dlopen and the name of a symbol to + get the address of. If the symbol was found a pointer is + returned. It returns NULL on error. + + dlerror + ------- + char * dlerror() + + Returns a null-terminated string which describes the last error + that occurred with the other dll functions. After each call to + dlerror the error message will be reset to a null pointer. The + SaveError function is used to save the error as soo as it happens. + + + Return Types + ============ + In this implementation the two functions, dl_load_file & + dl_find_symbol, return void *. This is because the underlying SunOS + dynamic linker calls also return void *. This is not necessarily + the case for all architectures. For example, some implementation + will want to return a char * for dl_load_file. + + If void * is not appropriate for your architecture, you will have to + change the void * to whatever you require. If you are not certain of + how Perl handles C data types, I suggest you start by consulting + Dean Roerich's Perl 5 API document. Also, have a look in the typemap + file (in the ext directory) for a fairly comprehensive list of types + that are already supported. If you are completely stuck, I suggest you + post a message to perl5-porters, comp.lang.perl.misc or if you are really + desperate to me. + + Remember when you are making any changes that the return value from + dl_load_file is used as a parameter in the dl_find_symbol + function. Also the return value from find_symbol is used as a parameter + to install_xsub. + + + Dealing with Error Messages + ============================ + In order to make the handling of dynamic linking errors as generic as + possible you should store any error messages associated with your + implementation with the StoreError function. + + In the case of VM/ESA the function dlerror returns the error message + associated with the last dynamic link error. As the VM/ESA dynamic + linker functions return NULL on error every call to a VM/ESA dynamic + dynamic link routine is coded like this + + RETVAL = dlopen(filename) ; + if (RETVAL == NULL) + SaveError(aTHX_ "%s",dlerror()) ; + + Note that SaveError() takes a printf format string. Use a "%s" as + the first parameter if the error may contain and % characters. + +*/ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include + + +#include "dlutils.c" /* SaveError() etc */ + + +static void +dl_private_init(pTHX) +{ + (void)dl_generic_private_init(aTHX); +} + +MODULE = DynaLoader PACKAGE = DynaLoader + +BOOT: + (void)dl_private_init(aTHX); + + +void * +dl_load_file(filename, flags=0) + char * filename + int flags + CODE: + if (flags & 0x01) + Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); + DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); + RETVAL = dlopen(filename) ; + DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL)); + ST(0) = sv_newmortal() ; + if (RETVAL == NULL) + SaveError(aTHX_ "%s",dlerror()) ; + else + sv_setiv( ST(0), PTR2IV(RETVAL) ); + + +void * +dl_find_symbol(libhandle, symbolname) + void * libhandle + char * symbolname + CODE: + DLDEBUG(2, PerlIO_printf(Perl_debug_log, + "dl_find_symbol(handle=%lx, symbol=%s)\n", + (unsigned long) libhandle, symbolname)); + RETVAL = dlsym(libhandle, symbolname); + DLDEBUG(2, PerlIO_printf(Perl_debug_log, + " symbolref = %lx\n", (unsigned long) RETVAL)); + ST(0) = sv_newmortal() ; + if (RETVAL == NULL) + SaveError(aTHX_ "%s",dlerror()) ; + else + sv_setiv( ST(0), PTR2IV(RETVAL) ); + + +void +dl_undef_symbols() + PPCODE: + + + +# These functions should not need changing on any platform: + +void +dl_install_xsub(perl_name, symref, filename="$Package") + char * perl_name + void * symref + char * filename + CODE: + DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n", + perl_name, (unsigned long) symref)); + ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, + (void(*)(pTHX_ CV *))symref, + filename))); + + +char * +dl_error() + CODE: + RETVAL = LastError ; + OUTPUT: + RETVAL + +# end. diff --git a/gnu/usr.bin/perl/ext/DynaLoader/hints/aix.pl b/gnu/usr.bin/perl/ext/DynaLoader/hints/aix.pl new file mode 100644 index 00000000000..7dde941b43d --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/hints/aix.pl @@ -0,0 +1,10 @@ +# See dl_aix.xs for details. +use Config; +if ($Config{libs} =~ /-lC/ && -f '/lib/libC.a') { + $self->{CCFLAGS} = $Config{ccflags} . ' -DUSE_libC'; + if (-f '/usr/ibmcxx/include/load.h') { + $self->{CCFLAGS} .= ' -DUSE_ibmcxx_load_h'; + } elsif (-f '/usr/lpp/xlC/include/load.h') { + $self->{CCFLAGS} .= ' -DUSE_xlC_load_h'; + } +} diff --git a/gnu/usr.bin/perl/ext/DynaLoader/hints/linux.pl b/gnu/usr.bin/perl/ext/DynaLoader/hints/linux.pl new file mode 100644 index 00000000000..06f4f4c1f82 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/hints/linux.pl @@ -0,0 +1,4 @@ +# XXX Configure test needed. +# Some Linux releases like to hide their +$self->{CCFLAGS} = $Config{ccflags} . ' -I/usr/include/libelf' + if -f "/usr/include/libelf/nlist.h"; diff --git a/gnu/usr.bin/perl/ext/DynaLoader/hints/openbsd.pl b/gnu/usr.bin/perl/ext/DynaLoader/hints/openbsd.pl new file mode 100644 index 00000000000..aeaa92c5a52 --- /dev/null +++ b/gnu/usr.bin/perl/ext/DynaLoader/hints/openbsd.pl @@ -0,0 +1,3 @@ +# XXX Configure test needed? +# Some OpenBSDs seem to have a dlopen() that won't accept relative paths +$self->{CCFLAGS} = $Config{ccflags} . ' -DDLOPEN_WONT_DO_RELATIVE_PATHS'; diff --git a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL index c1f26fc1c7e..df68dc3bda6 100644 --- a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL +++ b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL @@ -180,8 +180,9 @@ use Exporter (); use Config; use strict; -\$Config{'myarchname'} eq "$Config{'myarchname'}" or - die "Errno architecture ($Config{'myarchname'}) does not match executable architecture (\$Config{'myarchname'})"; +"\$Config{'archname'}-\$Config{'osvers'}" eq +"$Config{'archname'}-$Config{'osvers'}" or + die "Errno architecture ($Config{'archname'}-$Config{'osvers'}) does not match executable architecture (\$Config{'archname'}-\$Config{'osvers'})"; \$VERSION = "$VERSION"; \@ISA = qw(Exporter); @@ -230,13 +231,14 @@ sub TIEHASH { bless [] } sub FETCH { my ($self, $errname) = @_; my $proto = prototype("Errno::$errname"); + my $errno = ""; if (defined($proto) && $proto eq "") { no strict 'refs'; - return $! == &$errname; + $errno = &$errname; + $errno = 0 unless $! == $errno; } - require Carp; - Carp::confess("No errno $errname"); -} + return $errno; +} sub STORE { require Carp; @@ -251,13 +253,12 @@ sub NEXTKEY { while(($k,$v) = each %Errno::) { my $proto = prototype("Errno::$k"); last if (defined($proto) && $proto eq ""); - } $k } sub FIRSTKEY { - my $s = scalar keys %Errno::; + my $s = scalar keys %Errno::; # initialize iterator goto &NEXTKEY; } @@ -286,11 +287,11 @@ C defines and conditionally exports all the error constants defined in your system C include file. It has a single export tag, C<:POSIX>, which will export all POSIX defined error numbers. -C also makes C<%!> magic such that each element of C<%!> has a non-zero -value only if C<$!> is set to that value, eg +C also makes C<%!> magic such that each element of C<%!> has a +non-zero value only if C<$!> is set to that value. For example: use Errno; - + unless (open(FH, "/fangorn/spouse")) { if ($!{ENOENT}) { warn "Get a wife!\n"; @@ -299,6 +300,20 @@ value only if C<$!> is set to that value, eg } } +If a specified constant C does not exist on the system, C<$!{EFOO}> +returns C<"">. You may use C to check whether the +constant is available on the system. + +=head1 CAVEATS + +Importing a particular constant may not be very portable, because the +import will fail on platforms that do not have that constant. A more +portable way to set C<$!> to a valid value is to use: + + if (exists &Errno::EFOO) { + $! = &Errno::EFOO; + } + =head1 AUTHOR Graham Barr diff --git a/gnu/usr.bin/perl/ext/File/Glob/Changes b/gnu/usr.bin/perl/ext/File/Glob/Changes new file mode 100644 index 00000000000..e246c6d6840 --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/Changes @@ -0,0 +1,47 @@ +Revision history for Perl extension File::Glob + +0.00 Tue Dec 17 10:51:33 1996 + - original version; created by h2xs 1.16 + +0.90 Tue Dec 17 13:58:32 MST 1996 + - implemented first pass access to glob(3), + but it's clumsy and it looks like it leaks + memory. + +0.91 Thu Sep 4 08:43:55 CDT 1997 + - included CORE/config.h portability macros + - s/glob/bsd_glob/ to avoid calling and including the + system's glob stuff + - added GLOB_DEBUG for (surprise!) glob debugging + - tainted all filenames returned from &Glob::BSD::glob + +0.92 Tue Sep 30 08:31:57 CDT 1997 + - only use lstat if HAS_LSTAT is defined + - renamed the glob flags to GLOB_* + - added GLOB_CSH convenience macro for csh(1) globbing + These changes thanks to Hans Mulder + - fixed an incompatibility with csh(1) globbing where a + pattern like {A*,b,c} wouldn't expand properly + - various compatibility changes + - fixed and added tests + +0.93 Wed Jul 1 10:39:47 CDT 1998 + - renamed module to File::BSDGlob + - enabled 'globally' import directive to override the core + glob + - added Sarathy's tests for File::DosGlob +0.99 Tue Oct 12 06:42:02 PDT 1999 + - renamed module to File::Glob for incorporation into the + Perl source distribution + - ansified prototypes + - s/struct stat/Stat_t/ + - split on spaces to make <*.c *.h> work (for compatibility) +0.991 Tue Oct 26 09:48:00 BST 1999 + - Add case-insensitive matching (GLOB_NOCASE) + - Make glob_csh case insensitive by default on Win32, VMS, + OS/2, DOS, RISC OS, and Mac OS + - Add support for :case and :nocase tags + - Hack to make patterns like C:* work on DOSISH systems + - Add support for either \ or / as separators on DOSISH systems + - Limit effect of \ as a quoting operator on DOSISH systems to + when it precedes one of []{}-~\ (to minimise backslashitis). diff --git a/gnu/usr.bin/perl/ext/File/Glob/Glob.pm b/gnu/usr.bin/perl/ext/File/Glob/Glob.pm new file mode 100644 index 00000000000..4b7e54b9e3e --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/Glob.pm @@ -0,0 +1,378 @@ +package File::Glob; + +use strict; +use Carp; +our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, + $AUTOLOAD, $DEFAULT_FLAGS); + +require Exporter; +use XSLoader (); +require AutoLoader; + +@ISA = qw(Exporter AutoLoader); + +@EXPORT_OK = qw( + csh_glob + glob + GLOB_ABEND + GLOB_ALTDIRFUNC + GLOB_BRACE + GLOB_CSH + GLOB_ERR + GLOB_ERROR + GLOB_MARK + GLOB_NOCASE + GLOB_NOCHECK + GLOB_NOMAGIC + GLOB_NOSORT + GLOB_NOSPACE + GLOB_QUOTE + GLOB_TILDE +); + +%EXPORT_TAGS = ( + 'glob' => [ qw( + GLOB_ABEND + GLOB_ALTDIRFUNC + GLOB_BRACE + GLOB_CSH + GLOB_ERR + GLOB_ERROR + GLOB_MARK + GLOB_NOCASE + GLOB_NOCHECK + GLOB_NOMAGIC + GLOB_NOSORT + GLOB_NOSPACE + GLOB_QUOTE + GLOB_TILDE + glob + ) ], +); + +$VERSION = '0.991'; + +sub import { + my $i = 1; + while ($i < @_) { + if ($_[$i] =~ /^:(case|nocase|globally)$/) { + splice(@_, $i, 1); + $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case'; + $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase'; + if ($1 eq 'globally') { + no warnings; + *CORE::GLOBAL::glob = \&File::Glob::csh_glob; + } + next; + } + ++$i; + } + goto &Exporter::import; +} + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. If a constant is not found then control is passed + # to the AUTOLOAD in AutoLoader. + + my $constname; + ($constname = $AUTOLOAD) =~ s/.*:://; + my $val = constant($constname, @_ ? $_[0] : 0); + if ($! != 0) { + if ($! =~ /Invalid/) { + $AutoLoader::AUTOLOAD = $AUTOLOAD; + goto &AutoLoader::AUTOLOAD; + } + else { + croak "Your vendor has not defined File::Glob macro $constname"; + } + } + eval "sub $AUTOLOAD { $val }"; + goto &$AUTOLOAD; +} + +XSLoader::load 'File::Glob', $VERSION; + +# Preloaded methods go here. + +sub GLOB_ERROR { + return constant('GLOB_ERROR', 0); +} + +sub GLOB_CSH () { GLOB_BRACE() | GLOB_NOMAGIC() | GLOB_QUOTE() | GLOB_TILDE() } + +$DEFAULT_FLAGS = GLOB_CSH(); +if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) { + $DEFAULT_FLAGS |= GLOB_NOCASE(); +} + +# Autoload methods go after =cut, and are processed by the autosplit program. + +sub glob { + my ($pat,$flags) = @_; + $flags = $DEFAULT_FLAGS if @_ < 2; + return doglob($pat,$flags); +} + +## borrowed heavily from gsar's File::DosGlob +my %iter; +my %entries; + +sub csh_glob { + my $pat = shift; + my $cxix = shift; + my @pat; + + # glob without args defaults to $_ + $pat = $_ unless defined $pat; + + # extract patterns + if ($pat =~ /\s/) { + # XXX this is needed for compatibility with the csh + # implementation in Perl. Need to support a flag + # to disable this behavior. + require Text::ParseWords; + @pat = Text::ParseWords::parse_line('\s+',0,$pat); + } + + # assume global context if not provided one + $cxix = '_G_' unless defined $cxix; + $iter{$cxix} = 0 unless exists $iter{$cxix}; + + # if we're just beginning, do it all first + if ($iter{$cxix} == 0) { + if (@pat) { + $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ]; + } + else { + $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ]; + } + } + + # chuck it all out, quick or slow + if (wantarray) { + delete $iter{$cxix}; + return @{delete $entries{$cxix}}; + } + else { + if ($iter{$cxix} = scalar @{$entries{$cxix}}) { + return shift @{$entries{$cxix}}; + } + else { + # return undef for EOL + delete $iter{$cxix}; + delete $entries{$cxix}; + return undef; + } + } +} + +1; +__END__ + +=head1 NAME + +File::Glob - Perl extension for BSD glob routine + +=head1 SYNOPSIS + + use File::Glob ':glob'; + @list = glob('*.[ch]'); + $homedir = glob('~gnat', GLOB_TILDE | GLOB_ERR); + if (GLOB_ERROR) { + # an error occurred reading $homedir + } + + ## override the core glob (core glob() does this automatically + ## by default anyway, since v5.6.0) + use File::Glob ':globally'; + my @sources = <*.{c,h,y}> + + ## override the core glob, forcing case sensitivity + use File::Glob qw(:globally :case); + my @sources = <*.{c,h,y}> + + ## override the core glob forcing case insensitivity + use File::Glob qw(:globally :nocase); + my @sources = <*.{c,h,y}> + +=head1 DESCRIPTION + +File::Glob implements the FreeBSD glob(3) routine, which is a superset +of the POSIX glob() (described in IEEE Std 1003.2 "POSIX.2"). The +glob() routine takes a mandatory C argument, and an optional +C argument, and returns a list of filenames matching the +pattern, with interpretation of the pattern modified by the C +variable. The POSIX defined flags are: + +=over 4 + +=item C + +Force glob() to return an error when it encounters a directory it +cannot open or read. Ordinarily glob() continues to find matches. + +=item C + +Each pathname that is a directory that matches the pattern has a slash +appended. + +=item C + +By default, file names are assumed to be case sensitive; this flag +makes glob() treat case differences as not significant. + +=item C + +If the pattern does not match any pathname, then glob() returns a list +consisting of only the pattern. If C is set, its effect +is present in the pattern returned. + +=item C + +By default, the pathnames are sorted in ascending ASCII order; this +flag prevents that sorting (speeding up glob()). + +=back + +The FreeBSD extensions to the POSIX standard are the following flags: + +=over 4 + +=item C + +Pre-process the string to expand C<{pat,pat,...}> strings like csh(1). +The pattern '{}' is left unexpanded for historical reasons (and csh(1) +does the same thing to ease typing of find(1) patterns). + +=item C + +Same as C but it only returns the pattern if it does not +contain any of the special characters "*", "?" or "[". C is +provided to simplify implementing the historic csh(1) globbing +behaviour and should probably not be used anywhere else. + +=item C + +Use the backslash ('\') character for quoting: every occurrence of a +backslash followed by a character in the pattern is replaced by that +character, avoiding any special interpretation of the character. +(But see below for exceptions on DOSISH systems). + +=item C + +Expand patterns that start with '~' to user name home directories. + +=item C + +For convenience, C is a synonym for +C. + +=back + +The POSIX provided C, C, and the FreeBSD +extensions C, and C flags have not been +implemented in the Perl version because they involve more complex +interaction with the underlying C structures. + +=head1 DIAGNOSTICS + +glob() returns a list of matching paths, possibly zero length. If an +error occurred, &File::Glob::GLOB_ERROR will be non-zero and C<$!> will be +set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred, +or one of the following values otherwise: + +=over 4 + +=item C + +An attempt to allocate memory failed. + +=item C + +The glob was stopped because an error was encountered. + +=back + +In the case where glob() has found some matching paths, but is +interrupted by an error, glob() will return a list of filenames B +set &File::Glob::ERROR. + +Note that glob() deviates from POSIX and FreeBSD glob(3) behaviour by +not considering C and C as errors - glob() will +continue processing despite those errors, unless the C flag is +set. + +Be aware that all filenames returned from File::Glob are tainted. + +=head1 NOTES + +=over 4 + +=item * + +If you want to use multiple patterns, e.g. C, you should +probably throw them in a set as in C. This is because +the argument to glob isn't subjected to parsing by the C shell. Remember +that you can use a backslash to escape things. + +=item * + +On DOSISH systems, backslash is a valid directory separator character. +In this case, use of backslash as a quoting character (via GLOB_QUOTE) +interferes with the use of backslash as a directory separator. The +best (simplest, most portable) solution is to use forward slashes for +directory separators, and backslashes for quoting. However, this does +not match "normal practice" on these systems. As a concession to user +expectation, therefore, backslashes (under GLOB_QUOTE) only quote the +glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself. +All other backslashes are passed through unchanged. + +=item * + +Win32 users should use the real slash. If you really want to use +backslashes, consider using Sarathy's File::DosGlob, which comes with +the standard Perl distribution. + +=back + +=head1 AUTHOR + +The Perl interface was written by Nathan Torkington Egnat@frii.comE, +and is released under the artistic license. Further modifications were +made by Greg Bacon Egbacon@cs.uah.eduE and Gurusamy Sarathy +Egsar@activestate.comE. The C glob code has the +following copyright: + + Copyright (c) 1989, 1993 The Regents of the University of California. + All rights reserved. + + This code is derived from software contributed to Berkeley by + Guido van Rossum. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +=cut diff --git a/gnu/usr.bin/perl/ext/File/Glob/Glob.xs b/gnu/usr.bin/perl/ext/File/Glob/Glob.xs new file mode 100644 index 00000000000..e01ae7e85a9 --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/Glob.xs @@ -0,0 +1,209 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include "bsd_glob.h" + +static int GLOB_ERROR = 0; + +static int +not_here(char *s) +{ + croak("%s not implemented on this architecture", s); + return -1; +} + + +static double +constant(char *name, int arg) +{ + errno = 0; + if (strlen(name) <= 5) + goto not_there; + switch (*(name+5)) { + case 'A': + if (strEQ(name, "GLOB_ABEND")) +#ifdef GLOB_ABEND + return GLOB_ABEND; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_ALTDIRFUNC")) +#ifdef GLOB_ALTDIRFUNC + return GLOB_ALTDIRFUNC; +#else + goto not_there; +#endif + break; + case 'B': + if (strEQ(name, "GLOB_BRACE")) +#ifdef GLOB_BRACE + return GLOB_BRACE; +#else + goto not_there; +#endif + break; + case 'C': + break; + case 'D': + break; + case 'E': + if (strEQ(name, "GLOB_ERR")) +#ifdef GLOB_ERR + return GLOB_ERR; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_ERROR")) + return GLOB_ERROR; + break; + case 'F': + break; + case 'G': + break; + case 'H': + break; + case 'I': + break; + case 'J': + break; + case 'K': + break; + case 'L': + break; + case 'M': + if (strEQ(name, "GLOB_MARK")) +#ifdef GLOB_MARK + return GLOB_MARK; +#else + goto not_there; +#endif + break; + case 'N': + if (strEQ(name, "GLOB_NOCASE")) +#ifdef GLOB_NOCASE + return GLOB_NOCASE; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_NOCHECK")) +#ifdef GLOB_NOCHECK + return GLOB_NOCHECK; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_NOMAGIC")) +#ifdef GLOB_NOMAGIC + return GLOB_NOMAGIC; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_NOSORT")) +#ifdef GLOB_NOSORT + return GLOB_NOSORT; +#else + goto not_there; +#endif + if (strEQ(name, "GLOB_NOSPACE")) +#ifdef GLOB_NOSPACE + return GLOB_NOSPACE; +#else + goto not_there; +#endif + break; + case 'O': + break; + case 'P': + break; + case 'Q': + if (strEQ(name, "GLOB_QUOTE")) +#ifdef GLOB_QUOTE + return GLOB_QUOTE; +#else + goto not_there; +#endif + break; + case 'R': + break; + case 'S': + break; + case 'T': + if (strEQ(name, "GLOB_TILDE")) +#ifdef GLOB_TILDE + return GLOB_TILDE; +#else + goto not_there; +#endif + break; + case 'U': + break; + case 'V': + break; + case 'W': + break; + case 'X': + break; + case 'Y': + break; + case 'Z': + break; + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +#ifdef WIN32 +#define errfunc NULL +#else +int +errfunc(const char *foo, int bar) { + return !(bar == ENOENT || bar == ENOTDIR); +} +#endif + +MODULE = File::Glob PACKAGE = File::Glob + +void +doglob(pattern,...) + char *pattern +PROTOTYPE: $;$ +PREINIT: + glob_t pglob; + int i; + int retval; + int flags = 0; + SV *tmp; +PPCODE: + { + /* allow for optional flags argument */ + if (items > 1) { + flags = (int) SvIV(ST(1)); + } + + /* call glob */ + retval = bsd_glob(pattern, flags, errfunc, &pglob); + GLOB_ERROR = retval; + + /* return any matches found */ + EXTEND(sp, pglob.gl_pathc); + for (i = 0; i < pglob.gl_pathc; i++) { + /* printf("# bsd_glob: %s\n", pglob.gl_pathv[i]); */ + tmp = sv_2mortal(newSVpvn(pglob.gl_pathv[i], + strlen(pglob.gl_pathv[i]))); + TAINT; + SvTAINT(tmp); + PUSHs(tmp); + } + + bsd_globfree(&pglob); + } + +double +constant(name,arg) + char *name + int arg +PROTOTYPE: $$ diff --git a/gnu/usr.bin/perl/ext/File/Glob/Makefile.PL b/gnu/usr.bin/perl/ext/File/Glob/Makefile.PL new file mode 100644 index 00000000000..98781c98e7b --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/Makefile.PL @@ -0,0 +1,21 @@ +use ExtUtils::MakeMaker; +WriteMakefile( + NAME => 'File::Glob', + VERSION_FROM => 'Glob.pm', + MAN3PODS => {}, # Pods will be built by installman. + OBJECT => 'bsd_glob$(OBJ_EXT) Glob$(OBJ_EXT)', + +## uncomment for glob debugging (will cause make test to fail) +# DEFINE => '-DGLOB_DEBUG', +# OPTIMIZE => '-g', +); +use Config; +sub MY::cflags { + package MY; + my $inherited = shift->SUPER::cflags(@_); + if ($Config::Config{archname} =~ /^aix/ and + $Config::Config{use64bitall} eq 'define') { + $inherited =~ s/\s-O\d?//m; + } + $inherited; +} diff --git a/gnu/usr.bin/perl/ext/File/Glob/TODO b/gnu/usr.bin/perl/ext/File/Glob/TODO new file mode 100644 index 00000000000..ef2547fa411 --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/TODO @@ -0,0 +1,21 @@ +Some issues left to take care of: + + o sane ~ handling on non-Unix platforms + + Currently on non-Unix, when the glob code encounters a tilde glob + (.e.g ~user/foo or ~/.cshrc), it simply returns that pattern + without doing any expansion (meaning perl will weed it out since a + file of that name isn't likely to exist). + + Please, if you have strong feelings about how tilde expansion + should be done on your favorite non-Unix platform(s), submit a + patch. + + o path separator handling + + Guido's code contains the assumption that the path separator is one + character (byte, probably) in length. Win32 doesn't object to the + true slash as a separator. I imagine MacPerl could change the SEP + cpp #define to ":". I have no idea what it is for VMS. Again, if + you have ideas and especially patches, please feel free to share + them. diff --git a/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.c b/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.c new file mode 100644 index 00000000000..62bfe4f80c8 --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.c @@ -0,0 +1,945 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93"; +#endif /* LIBC_SCCS and not lint */ + +/* + * glob(3) -- a superset of the one defined in POSIX 1003.2. + * + * The [!...] convention to negate a range is supported (SysV, Posix, ksh). + * + * Optional extra services, controlled by flags not defined by POSIX: + * + * GLOB_QUOTE: + * Escaping convention: \ inhibits any special meaning the following + * character might have (except \ at end of string is retained). + * GLOB_MAGCHAR: + * Set in gl_flags if pattern contained a globbing character. + * GLOB_NOMAGIC: + * Same as GLOB_NOCHECK, but it will only append pattern if it did + * not contain any magic characters. [Used in csh style globbing] + * GLOB_ALTDIRFUNC: + * Use alternately specified directory access functions. + * GLOB_TILDE: + * expand ~user/foo to the /home/dir/of/user/foo + * GLOB_BRACE: + * expand {1,2}{a,b} to 1a 1b 2a 2b + * gl_matchc: + * Number of matches in the current invocation of glob. + */ + +#include +#include +#include + +#include "bsd_glob.h" +#ifdef I_PWD +# include +#else +#ifdef HAS_PASSWD + struct passwd *getpwnam(char *); + struct passwd *getpwuid(Uid_t); +#endif +#endif + +#ifndef MAXPATHLEN +# ifdef PATH_MAX +# define MAXPATHLEN PATH_MAX +# else +# define MAXPATHLEN 1024 +# endif +#endif + +#define BG_DOLLAR '$' +#define BG_DOT '.' +#define BG_EOS '\0' +#define BG_LBRACKET '[' +#define BG_NOT '!' +#define BG_QUESTION '?' +#define BG_QUOTE '\\' +#define BG_RANGE '-' +#define BG_RBRACKET ']' +#define BG_SEP '/' +#ifdef DOSISH +#define BG_SEP2 '\\' +#endif +#define BG_STAR '*' +#define BG_TILDE '~' +#define BG_UNDERSCORE '_' +#define BG_LBRACE '{' +#define BG_RBRACE '}' +#define BG_SLASH '/' +#define BG_COMMA ',' + +#ifndef GLOB_DEBUG + +#define M_QUOTE 0x8000 +#define M_PROTECT 0x4000 +#define M_MASK 0xffff +#define M_ASCII 0x00ff + +typedef U16 Char; + +#else + +#define M_QUOTE 0x80 +#define M_PROTECT 0x40 +#define M_MASK 0xff +#define M_ASCII 0x7f + +typedef U8 Char; + +#endif /* !GLOB_DEBUG */ + + +#define CHAR(c) ((Char)((c)&M_ASCII)) +#define META(c) ((Char)((c)|M_QUOTE)) +#define M_ALL META('*') +#define M_END META(']') +#define M_NOT META('!') +#define M_ONE META('?') +#define M_RNG META('-') +#define M_SET META('[') +#define ismeta(c) (((c)&M_QUOTE) != 0) + + +static int compare(const void *, const void *); +static int ci_compare(const void *, const void *); +static void g_Ctoc(const Char *, char *); +static int g_lstat(Char *, Stat_t *, glob_t *); +static DIR *g_opendir(Char *, glob_t *); +static Char *g_strchr(Char *, int); +#ifdef notdef +static Char *g_strcat(Char *, const Char *); +#endif +static int g_stat(Char *, Stat_t *, glob_t *); +static int glob0(const Char *, glob_t *); +static int glob1(Char *, glob_t *); +static int glob2(Char *, Char *, Char *, glob_t *); +static int glob3(Char *, Char *, Char *, Char *, glob_t *); +static int globextend(const Char *, glob_t *); +static const Char * globtilde(const Char *, Char *, glob_t *); +static int globexp1(const Char *, glob_t *); +static int globexp2(const Char *, const Char *, glob_t *, int *); +static int match(Char *, Char *, Char *, int); +#ifdef GLOB_DEBUG +static void qprintf(const char *, Char *); +#endif /* GLOB_DEBUG */ + +#ifdef PERL_IMPLICIT_CONTEXT +static Direntry_t * my_readdir(DIR*); + +static Direntry_t * +my_readdir(DIR *d) +{ + return PerlDir_read(d); +} +#else +#define my_readdir readdir +#endif + +int +bsd_glob(const char *pattern, int flags, + int (*errfunc)(const char *, int), glob_t *pglob) +{ + const U8 *patnext; + int c; + Char *bufnext, *bufend, patbuf[MAXPATHLEN+1]; + + patnext = (U8 *) pattern; + if (!(flags & GLOB_APPEND)) { + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + if (!(flags & GLOB_DOOFFS)) + pglob->gl_offs = 0; + } + pglob->gl_flags = flags & ~GLOB_MAGCHAR; + pglob->gl_errfunc = errfunc; + pglob->gl_matchc = 0; + + bufnext = patbuf; + bufend = bufnext + MAXPATHLEN; +#ifdef DOSISH + /* Nasty hack to treat patterns like "C:*" correctly. In this + * case, the * should match any file in the current directory + * on the C: drive. However, the glob code does not treat the + * colon specially, so it looks for files beginning "C:" in + * the current directory. To fix this, change the pattern to + * add an explicit "./" at the start (just after the drive + * letter and colon - ie change to "C:./*"). + */ + if (isalpha(pattern[0]) && pattern[1] == ':' && + pattern[2] != BG_SEP && pattern[2] != BG_SEP2 && + bufend - bufnext > 4) { + *bufnext++ = pattern[0]; + *bufnext++ = ':'; + *bufnext++ = '.'; + *bufnext++ = BG_SEP; + patnext += 2; + } +#endif + if (flags & GLOB_QUOTE) { + /* Protect the quoted characters. */ + while (bufnext < bufend && (c = *patnext++) != BG_EOS) + if (c == BG_QUOTE) { +#ifdef DOSISH + /* To avoid backslashitis on Win32, + * we only treat \ as a quoting character + * if it precedes one of the + * metacharacters []-{}~\ + */ + if ((c = *patnext++) != '[' && c != ']' && + c != '-' && c != '{' && c != '}' && + c != '~' && c != '\\') { +#else + if ((c = *patnext++) == BG_EOS) { +#endif + c = BG_QUOTE; + --patnext; + } + *bufnext++ = c | M_PROTECT; + } + else + *bufnext++ = c; + } + else + while (bufnext < bufend && (c = *patnext++) != BG_EOS) + *bufnext++ = c; + *bufnext = BG_EOS; + + if (flags & GLOB_BRACE) + return globexp1(patbuf, pglob); + else + return glob0(patbuf, pglob); +} + +/* + * Expand recursively a glob {} pattern. When there is no more expansion + * invoke the standard globbing routine to glob the rest of the magic + * characters + */ +static int globexp1(const Char *pattern, glob_t *pglob) +{ + const Char* ptr = pattern; + int rv; + + /* Protect a single {}, for find(1), like csh */ + if (pattern[0] == BG_LBRACE && pattern[1] == BG_RBRACE && pattern[2] == BG_EOS) + return glob0(pattern, pglob); + + while ((ptr = (const Char *) g_strchr((Char *) ptr, BG_LBRACE)) != NULL) + if (!globexp2(ptr, pattern, pglob, &rv)) + return rv; + + return glob0(pattern, pglob); +} + + +/* + * Recursive brace globbing helper. Tries to expand a single brace. + * If it succeeds then it invokes globexp1 with the new pattern. + * If it fails then it tries to glob the rest of the pattern and returns. + */ +static int globexp2(const Char *ptr, const Char *pattern, + glob_t *pglob, int *rv) +{ + int i; + Char *lm, *ls; + const Char *pe, *pm, *pl; + Char patbuf[MAXPATHLEN + 1]; + + /* copy part up to the brace */ + for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) + continue; + ls = lm; + + /* Find the balanced brace */ + for (i = 0, pe = ++ptr; *pe; pe++) + if (*pe == BG_LBRACKET) { + /* Ignore everything between [] */ + for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++) + continue; + if (*pe == BG_EOS) { + /* + * We could not find a matching BG_RBRACKET. + * Ignore and just look for BG_RBRACE + */ + pe = pm; + } + } + else if (*pe == BG_LBRACE) + i++; + else if (*pe == BG_RBRACE) { + if (i == 0) + break; + i--; + } + + /* Non matching braces; just glob the pattern */ + if (i != 0 || *pe == BG_EOS) { + *rv = glob0(patbuf, pglob); + return 0; + } + + for (i = 0, pl = pm = ptr; pm <= pe; pm++) + switch (*pm) { + case BG_LBRACKET: + /* Ignore everything between [] */ + for (pl = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++) + continue; + if (*pm == BG_EOS) { + /* + * We could not find a matching BG_RBRACKET. + * Ignore and just look for BG_RBRACE + */ + pm = pl; + } + break; + + case BG_LBRACE: + i++; + break; + + case BG_RBRACE: + if (i) { + i--; + break; + } + /* FALLTHROUGH */ + case BG_COMMA: + if (i && *pm == BG_COMMA) + break; + else { + /* Append the current string */ + for (lm = ls; (pl < pm); *lm++ = *pl++) + continue; + /* + * Append the rest of the pattern after the + * closing brace + */ + for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS;) + continue; + + /* Expand the current pattern */ +#ifdef GLOB_DEBUG + qprintf("globexp2:", patbuf); +#endif /* GLOB_DEBUG */ + *rv = globexp1(patbuf, pglob); + + /* move after the comma, to the next string */ + pl = pm + 1; + } + break; + + default: + break; + } + *rv = 0; + return 0; +} + + + +/* + * expand tilde from the passwd file. + */ +static const Char * +globtilde(const Char *pattern, Char *patbuf, glob_t *pglob) +{ + struct passwd *pwd; + char *h; + const Char *p; + Char *b; + + if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE)) + return pattern; + + /* Copy up to the end of the string or / */ + for (p = pattern + 1, h = (char *) patbuf; *p && *p != BG_SLASH; + *h++ = *p++) + continue; + + *h = BG_EOS; + + if (((char *) patbuf)[0] == BG_EOS) { + /* + * handle a plain ~ or ~/ by expanding $HOME + * first and then trying the password file + */ + if ((h = getenv("HOME")) == NULL) { +#ifdef HAS_PASSWD + if ((pwd = getpwuid(getuid())) == NULL) + return pattern; + else + h = pwd->pw_dir; +#else + return pattern; +#endif + } + } + else { + /* + * Expand a ~user + */ +#ifdef HAS_PASSWD + if ((pwd = getpwnam((char*) patbuf)) == NULL) + return pattern; + else + h = pwd->pw_dir; +#else + return pattern; +#endif + } + + /* Copy the home directory */ + for (b = patbuf; *h; *b++ = *h++) + continue; + + /* Append the rest of the pattern */ + while ((*b++ = *p++) != BG_EOS) + continue; + + return patbuf; +} + + +/* + * The main glob() routine: compiles the pattern (optionally processing + * quotes), calls glob1() to do the real pattern matching, and finally + * sorts the list (unless unsorted operation is requested). Returns 0 + * if things went well, nonzero if errors occurred. It is not an error + * to find no matches. + */ +static int +glob0(const Char *pattern, glob_t *pglob) +{ + const Char *qpat, *qpatnext; + int c, err, oldflags, oldpathc; + Char *bufnext, patbuf[MAXPATHLEN+1]; + + qpat = globtilde(pattern, patbuf, pglob); + qpatnext = qpat; + oldflags = pglob->gl_flags; + oldpathc = pglob->gl_pathc; + bufnext = patbuf; + + /* We don't need to check for buffer overflow any more. */ + while ((c = *qpatnext++) != BG_EOS) { + switch (c) { + case BG_LBRACKET: + c = *qpatnext; + if (c == BG_NOT) + ++qpatnext; + if (*qpatnext == BG_EOS || + g_strchr((Char *) qpatnext+1, BG_RBRACKET) == NULL) { + *bufnext++ = BG_LBRACKET; + if (c == BG_NOT) + --qpatnext; + break; + } + *bufnext++ = M_SET; + if (c == BG_NOT) + *bufnext++ = M_NOT; + c = *qpatnext++; + do { + *bufnext++ = CHAR(c); + if (*qpatnext == BG_RANGE && + (c = qpatnext[1]) != BG_RBRACKET) { + *bufnext++ = M_RNG; + *bufnext++ = CHAR(c); + qpatnext += 2; + } + } while ((c = *qpatnext++) != BG_RBRACKET); + pglob->gl_flags |= GLOB_MAGCHAR; + *bufnext++ = M_END; + break; + case BG_QUESTION: + pglob->gl_flags |= GLOB_MAGCHAR; + *bufnext++ = M_ONE; + break; + case BG_STAR: + pglob->gl_flags |= GLOB_MAGCHAR; + /* collapse adjacent stars to one, + * to avoid exponential behavior + */ + if (bufnext == patbuf || bufnext[-1] != M_ALL) + *bufnext++ = M_ALL; + break; + default: + *bufnext++ = CHAR(c); + break; + } + } + *bufnext = BG_EOS; +#ifdef GLOB_DEBUG + qprintf("glob0:", patbuf); +#endif /* GLOB_DEBUG */ + + if ((err = glob1(patbuf, pglob)) != 0) { + pglob->gl_flags = oldflags; + return(err); + } + + /* + * If there was no match we are going to append the pattern + * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified + * and the pattern did not contain any magic characters + * GLOB_NOMAGIC is there just for compatibility with csh. + */ + if (pglob->gl_pathc == oldpathc && + ((pglob->gl_flags & GLOB_NOCHECK) || + ((pglob->gl_flags & GLOB_NOMAGIC) && + !(pglob->gl_flags & GLOB_MAGCHAR)))) + { +#ifdef GLOB_DEBUG + printf("calling globextend from glob0\n"); +#endif /* GLOB_DEBUG */ + pglob->gl_flags = oldflags; + return(globextend(qpat, pglob)); + } + else if (!(pglob->gl_flags & GLOB_NOSORT)) + qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, + pglob->gl_pathc - oldpathc, sizeof(char *), + (pglob->gl_flags & GLOB_NOCASE) ? ci_compare : compare); + pglob->gl_flags = oldflags; + return(0); +} + +static int +ci_compare(const void *p, const void *q) +{ + const char *pp = *(const char **)p; + const char *qq = *(const char **)q; + while (*pp && *qq) { + if (tolower(*pp) != tolower(*qq)) + break; + ++pp; + ++qq; + } + return (tolower(*pp) - tolower(*qq)); +} + +static int +compare(const void *p, const void *q) +{ + return(strcmp(*(char **)p, *(char **)q)); +} + +static int +glob1(Char *pattern, glob_t *pglob) +{ + Char pathbuf[MAXPATHLEN+1]; + + /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ + if (*pattern == BG_EOS) + return(0); + return(glob2(pathbuf, pathbuf, pattern, pglob)); +} + +/* + * The functions glob2 and glob3 are mutually recursive; there is one level + * of recursion for each segment in the pattern that contains one or more + * meta characters. + */ +static int +glob2(Char *pathbuf, Char *pathend, Char *pattern, glob_t *pglob) +{ + Stat_t sb; + Char *p, *q; + int anymeta; + + /* + * Loop over pattern segments until end of pattern or until + * segment with meta character found. + */ + for (anymeta = 0;;) { + if (*pattern == BG_EOS) { /* End of pattern? */ + *pathend = BG_EOS; + + if (g_lstat(pathbuf, &sb, pglob)) + return(0); + + if (((pglob->gl_flags & GLOB_MARK) && + pathend[-1] != BG_SEP +#ifdef DOSISH + && pathend[-1] != BG_SEP2 +#endif + ) && (S_ISDIR(sb.st_mode) + || (S_ISLNK(sb.st_mode) && + (g_stat(pathbuf, &sb, pglob) == 0) && + S_ISDIR(sb.st_mode)))) { + *pathend++ = BG_SEP; + *pathend = BG_EOS; + } + ++pglob->gl_matchc; +#ifdef GLOB_DEBUG + printf("calling globextend from glob2\n"); +#endif /* GLOB_DEBUG */ + return(globextend(pathbuf, pglob)); + } + + /* Find end of next segment, copy tentatively to pathend. */ + q = pathend; + p = pattern; + while (*p != BG_EOS && *p != BG_SEP +#ifdef DOSISH + && *p != BG_SEP2 +#endif + ) { + if (ismeta(*p)) + anymeta = 1; + *q++ = *p++; + } + + if (!anymeta) { /* No expansion, do next segment. */ + pathend = q; + pattern = p; + while (*pattern == BG_SEP +#ifdef DOSISH + || *pattern == BG_SEP2 +#endif + ) + *pathend++ = *pattern++; + } else /* Need expansion, recurse. */ + return(glob3(pathbuf, pathend, pattern, p, pglob)); + } + /* NOTREACHED */ +} + +static int +glob3(Char *pathbuf, Char *pathend, Char *pattern, + Char *restpattern, glob_t *pglob) +{ + register Direntry_t *dp; + DIR *dirp; + int err; + int nocase; + char buf[MAXPATHLEN]; + + /* + * The readdirfunc declaration can't be prototyped, because it is + * assigned, below, to two functions which are prototyped in glob.h + * and dirent.h as taking pointers to differently typed opaque + * structures. + */ + Direntry_t *(*readdirfunc)(); + + *pathend = BG_EOS; + errno = 0; + +#ifdef VMS + { + Char *q = pathend; + if (q - pathbuf > 5) { + q -= 5; + if (q[0] == '.' && tolower(q[1]) == 'd' && tolower(q[2]) == 'i' + && tolower(q[3]) == 'r' && q[4] == '/') + { + q[0] = '/'; + q[1] = BG_EOS; + pathend = q+1; + } + } + } +#endif + if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { + /* TODO: don't call for ENOENT or ENOTDIR? */ + if (pglob->gl_errfunc) { + g_Ctoc(pathbuf, buf); + if (pglob->gl_errfunc(buf, errno) || + (pglob->gl_flags & GLOB_ERR)) + return (GLOB_ABEND); + } + return(0); + } + + err = 0; + nocase = ((pglob->gl_flags & GLOB_NOCASE) != 0); + + /* Search directory for matching names. */ + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + readdirfunc = pglob->gl_readdir; + else + readdirfunc = my_readdir; + while ((dp = (*readdirfunc)(dirp))) { + register U8 *sc; + register Char *dc; + + /* Initial BG_DOT must be matched literally. */ + if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT) + continue; + for (sc = (U8 *) dp->d_name, dc = pathend; + (*dc++ = *sc++) != BG_EOS;) + continue; + if (!match(pathend, pattern, restpattern, nocase)) { + *pathend = BG_EOS; + continue; + } + err = glob2(pathbuf, --dc, restpattern, pglob); + if (err) + break; + } + + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir)(dirp); + else + PerlDir_close(dirp); + return(err); +} + + +/* + * Extend the gl_pathv member of a glob_t structure to accomodate a new item, + * add the new item, and update gl_pathc. + * + * This assumes the BSD realloc, which only copies the block when its size + * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic + * behavior. + * + * Return 0 if new item added, error code if memory couldn't be allocated. + * + * Invariant of the glob_t structure: + * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and + * gl_pathv points to (gl_offs + gl_pathc + 1) items. + */ +static int +globextend(const Char *path, glob_t *pglob) +{ + register char **pathv; + register int i; + char *copy; + const Char *p; + +#ifdef GLOB_DEBUG + printf("Adding "); + for (p = path; *p; p++) + (void)printf("%c", CHAR(*p)); + printf("\n"); +#endif /* GLOB_DEBUG */ + + if (pglob->gl_pathv) + pathv = Renew(pglob->gl_pathv, + (2 + pglob->gl_pathc + pglob->gl_offs),char*); + else + New(0,pathv,(2 + pglob->gl_pathc + pglob->gl_offs),char*); + if (pathv == NULL) + return(GLOB_NOSPACE); + + if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { + /* first time around -- clear initial gl_offs items */ + pathv += pglob->gl_offs; + for (i = pglob->gl_offs; --i >= 0; ) + *--pathv = NULL; + } + pglob->gl_pathv = pathv; + + for (p = path; *p++;) + continue; + New(0, copy, p-path, char); + if (copy != NULL) { + g_Ctoc(path, copy); + pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; + } + pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; + return(copy == NULL ? GLOB_NOSPACE : 0); +} + + +/* + * pattern matching function for filenames. Each occurrence of the * + * pattern causes a recursion level. + */ +static int +match(register Char *name, register Char *pat, register Char *patend, int nocase) +{ + int ok, negate_range; + Char c, k; + + while (pat < patend) { + c = *pat++; + switch (c & M_MASK) { + case M_ALL: + if (pat == patend) + return(1); + do + if (match(name, pat, patend, nocase)) + return(1); + while (*name++ != BG_EOS); + return(0); + case M_ONE: + if (*name++ == BG_EOS) + return(0); + break; + case M_SET: + ok = 0; + if ((k = *name++) == BG_EOS) + return(0); + if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS) + ++pat; + while (((c = *pat++) & M_MASK) != M_END) + if ((*pat & M_MASK) == M_RNG) { + if (nocase) { + if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1])) + ok = 1; + } else { + if (c <= k && k <= pat[1]) + ok = 1; + } + pat += 2; + } else if (nocase ? (tolower(c) == tolower(k)) : (c == k)) + ok = 1; + if (ok == negate_range) + return(0); + break; + default: + k = *name++; + if (nocase ? (tolower(k) != tolower(c)) : (k != c)) + return(0); + break; + } + } + return(*name == BG_EOS); +} + +/* Free allocated data belonging to a glob_t structure. */ +void +bsd_globfree(glob_t *pglob) +{ + register int i; + register char **pp; + + if (pglob->gl_pathv != NULL) { + pp = pglob->gl_pathv + pglob->gl_offs; + for (i = pglob->gl_pathc; i--; ++pp) + if (*pp) + Safefree(*pp); + Safefree(pglob->gl_pathv); + } +} + +static DIR * +g_opendir(register Char *str, glob_t *pglob) +{ + char buf[MAXPATHLEN]; + + if (!*str) + strcpy(buf, "."); + else + g_Ctoc(str, buf); + + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((*pglob->gl_opendir)(buf)); + else + return(PerlDir_open(buf)); +} + +static int +g_lstat(register Char *fn, Stat_t *sb, glob_t *pglob) +{ + char buf[MAXPATHLEN]; + + g_Ctoc(fn, buf); + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((*pglob->gl_lstat)(buf, sb)); +#ifdef HAS_LSTAT + return(PerlLIO_lstat(buf, sb)); +#else + return(PerlLIO_stat(buf, sb)); +#endif /* HAS_LSTAT */ +} + +static int +g_stat(register Char *fn, Stat_t *sb, glob_t *pglob) +{ + char buf[MAXPATHLEN]; + + g_Ctoc(fn, buf); + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((*pglob->gl_stat)(buf, sb)); + return(PerlLIO_stat(buf, sb)); +} + +static Char * +g_strchr(Char *str, int ch) +{ + do { + if (*str == ch) + return (str); + } while (*str++); + return (NULL); +} + +#ifdef notdef +static Char * +g_strcat(Char *dst, const Char *src) +{ + Char *sdst = dst; + + while (*dst++) + continue; + --dst; + while((*dst++ = *src++) != BG_EOS) + continue; + + return (sdst); +} +#endif + +static void +g_Ctoc(register const Char *str, char *buf) +{ + register char *dc; + + for (dc = buf; (*dc++ = *str++) != BG_EOS;) + continue; +} + +#ifdef GLOB_DEBUG +static void +qprintf(const char *str, register Char *s) +{ + register Char *p; + + (void)printf("%s:\n", str); + for (p = s; *p; p++) + (void)printf("%c", CHAR(*p)); + (void)printf("\n"); + for (p = s; *p; p++) + (void)printf("%c", *p & M_PROTECT ? '"' : ' '); + (void)printf("\n"); + for (p = s; *p; p++) + (void)printf("%c", ismeta(*p) ? '_' : ' '); + (void)printf("\n"); +} +#endif /* GLOB_DEBUG */ diff --git a/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.h b/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.h new file mode 100644 index 00000000000..10d1de534c6 --- /dev/null +++ b/gnu/usr.bin/perl/ext/File/Glob/bsd_glob.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)glob.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef _BSD_GLOB_H_ +#define _BSD_GLOB_H_ + +/* #include */ + +typedef struct { + int gl_pathc; /* Count of total paths so far. */ + int gl_matchc; /* Count of paths matching pattern. */ + int gl_offs; /* Reserved at beginning of gl_pathv. */ + int gl_flags; /* Copy of flags parameter to glob. */ + char **gl_pathv; /* List of paths matching pattern. */ + /* Copy of errfunc parameter to glob. */ + int (*gl_errfunc)(const char *, int); + + /* + * Alternate filesystem access methods for glob; replacement + * versions of closedir(3), readdir(3), opendir(3), stat(2) + * and lstat(2). + */ + void (*gl_closedir)(void *); + Direntry_t *(*gl_readdir)(void *); + void *(*gl_opendir)(const char *); + int (*gl_lstat)(const char *, Stat_t *); + int (*gl_stat)(const char *, Stat_t *); +} glob_t; + +#define GLOB_APPEND 0x0001 /* Append to output from previous call. */ +#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */ +#define GLOB_ERR 0x0004 /* Return on error. */ +#define GLOB_MARK 0x0008 /* Append / to matching directories. */ +#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */ +#define GLOB_NOSORT 0x0020 /* Don't sort. */ + +#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */ +#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */ +#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */ +#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */ +#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ +#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ +#define GLOB_NOCASE 0x1000 /* Treat filenames without regard for case. */ + +#define GLOB_NOSPACE (-1) /* Malloc call failed. */ +#define GLOB_ABEND (-2) /* Unignored error. */ + +int bsd_glob(const char *, int, int (*)(const char *, int), glob_t *); +void bsd_globfree(glob_t *); + +#endif /* !_BSD_GLOB_H_ */ diff --git a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs index ac1ca8c68d9..870f056c9bf 100644 --- a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs +++ b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs @@ -5,20 +5,40 @@ #include #include -typedef GDBM_FILE GDBM_File; +typedef struct { + GDBM_FILE dbp ; + SV * filter_fetch_key ; + SV * filter_store_key ; + SV * filter_fetch_value ; + SV * filter_store_value ; + int filtering ; + } GDBM_File_type; + +typedef GDBM_File_type * GDBM_File ; +typedef datum datum_key ; +typedef datum datum_value ; + +#define ckFilter(arg,type,name) \ + if (db->type) { \ + SV * save_defsv ; \ + /* printf("filtering %s\n", name) ;*/ \ + if (db->filtering) \ + croak("recursion detected in %s", name) ; \ + db->filtering = TRUE ; \ + save_defsv = newSVsv(DEFSV) ; \ + sv_setsv(DEFSV, arg) ; \ + PUSHMARK(sp) ; \ + (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \ + sv_setsv(arg, DEFSV) ; \ + sv_setsv(DEFSV, save_defsv) ; \ + SvREFCNT_dec(save_defsv) ; \ + db->filtering = FALSE ; \ + /*printf("end of filtering %s\n", name) ;*/ \ + } -#define GDBM_BLOCKSIZE 0 /* gdbm defaults to stat blocksize */ -#define gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func) \ - gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func) -#define gdbm_FETCH(db,key) gdbm_fetch(db,key) -#define gdbm_STORE(db,key,value,flags) gdbm_store(db,key,value,flags) -#define gdbm_DELETE(db,key) gdbm_delete(db,key) -#define gdbm_FIRSTKEY(db) gdbm_firstkey(db) -#define gdbm_NEXTKEY(db,key) gdbm_nextkey(db,key) -#define gdbm_EXISTS(db,key) gdbm_exists(db,key) -typedef datum gdatum; +#define GDBM_BLOCKSIZE 0 /* gdbm defaults to stat blocksize */ typedef void (*FATALFUNC)(); @@ -29,6 +49,21 @@ not_here(char *s) return -1; } +/* GDBM allocates the datum with system malloc() and expects the user + * to free() it. So we either have to free() it immediately, or have + * perl free() it when it deallocates the SV, depending on whether + * perl uses malloc()/free() or not. */ +static void +output_datum(pTHX_ SV *arg, char *str, int size) +{ +#if !defined(MYMALLOC) || (defined(MYMALLOC) && defined(PERL_POLLUTE_MALLOC)) + sv_usepvn(arg, str, size); +#else + sv_setpvn(arg, str, size); + safesysfree(str); +#endif +} + /* Versions of gdbm prior to 1.7x might not have the gdbm_sync, gdbm_exists, and gdbm_setopt functions. Apparently Slackware (Linux) 2.1 contains gdbm-1.5 (which dates back to 1991). @@ -174,7 +209,23 @@ gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak) int read_write int mode FATALFUNC fatal_func + CODE: + { + GDBM_FILE dbp ; + RETVAL = NULL ; + if (dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func)) { + RETVAL = (GDBM_File)safemalloc(sizeof(GDBM_File_type)) ; + Zero(RETVAL, 1, GDBM_File_type) ; + RETVAL->dbp = dbp ; + } + + } + OUTPUT: + RETVAL + + +#define gdbm_close(db) gdbm_close(db->dbp) void gdbm_close(db) GDBM_File db @@ -185,17 +236,20 @@ gdbm_DESTROY(db) GDBM_File db CODE: gdbm_close(db); + safefree(db); -gdatum +#define gdbm_FETCH(db,key) gdbm_fetch(db->dbp,key) +datum_value gdbm_FETCH(db, key) GDBM_File db - datum key + datum_key key +#define gdbm_STORE(db,key,value,flags) gdbm_store(db->dbp,key,value,flags) int gdbm_STORE(db, key, value, flags = GDBM_REPLACE) GDBM_File db - datum key - datum value + datum_key key + datum_value value int flags CLEANUP: if (RETVAL) { @@ -203,37 +257,43 @@ gdbm_STORE(db, key, value, flags = GDBM_REPLACE) croak("No write permission to gdbm file"); croak("gdbm store returned %d, errno %d, key \"%.*s\"", RETVAL,errno,key.dsize,key.dptr); - /* gdbm_clearerr(db); */ } +#define gdbm_DELETE(db,key) gdbm_delete(db->dbp,key) int gdbm_DELETE(db, key) GDBM_File db - datum key + datum_key key -gdatum +#define gdbm_FIRSTKEY(db) gdbm_firstkey(db->dbp) +datum_key gdbm_FIRSTKEY(db) GDBM_File db -gdatum +#define gdbm_NEXTKEY(db,key) gdbm_nextkey(db->dbp,key) +datum_key gdbm_NEXTKEY(db, key) GDBM_File db - datum key + datum_key key +#define gdbm_reorganize(db) gdbm_reorganize(db->dbp) int gdbm_reorganize(db) GDBM_File db +#define gdbm_sync(db) gdbm_sync(db->dbp) void gdbm_sync(db) GDBM_File db +#define gdbm_EXISTS(db,key) gdbm_exists(db->dbp,key) int gdbm_EXISTS(db, key) GDBM_File db - datum key + datum_key key +#define gdbm_setopt(db,optflag, optval, optlen) gdbm_setopt(db->dbp,optflag, optval, optlen) int gdbm_setopt (db, optflag, optval, optlen) GDBM_File db @@ -241,3 +301,55 @@ gdbm_setopt (db, optflag, optval, optlen) int &optval int optlen + +#define setFilter(type) \ + { \ + if (db->type) \ + RETVAL = sv_mortalcopy(db->type) ; \ + ST(0) = RETVAL ; \ + if (db->type && (code == &PL_sv_undef)) { \ + SvREFCNT_dec(db->type) ; \ + db->type = NULL ; \ + } \ + else if (code) { \ + if (db->type) \ + sv_setsv(db->type, code) ; \ + else \ + db->type = newSVsv(code) ; \ + } \ + } + + + +SV * +filter_fetch_key(db, code) + GDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_key) ; + +SV * +filter_store_key(db, code) + GDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_key) ; + +SV * +filter_fetch_value(db, code) + GDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_value) ; + +SV * +filter_store_value(db, code) + GDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_value) ; + diff --git a/gnu/usr.bin/perl/ext/IO/ChangeLog b/gnu/usr.bin/perl/ext/IO/ChangeLog new file mode 100644 index 00000000000..c45e7853264 --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/ChangeLog @@ -0,0 +1,318 @@ +For more recent changes, see the Perl Changes* file(s). + +Change 173 on 1998/07/14 by (Graham Barr) + + IO::Socket + - Added method connected + + IO.xs + - Added check that file * is not null + + t/io_udp.t + - Added check for connected + - Made change to catch recv not returning the address, and added a fix to + ensure test does not hang + + t/io_sock.t + - Added check for connected. + +Change 137 on 1998/05/21 by (Graham Barr) + + IO::Socket::INET + - Added checks to all peer* and host* methods for undef + +Change 134 on 1998/05/09 by (Graham Barr) + + t/io_sock.t + - fix race condition on Solaris & SunOS + + IO::Handle + - Applied patch from Gisle Aas for + documentation update + - Applied patch from Kuma + changed input_line_number to be on a per-handle basis. + + IO::File + - Applied patch from Gisle Aas for + documentation update + + IO::Seekable + - Applied patch from Gisle Aas for + documentation update + added sysseek + + IO, IO::Socket::INET + - documentation update + + IO.xs + - Applied patch from Gisle Aas for + blocking + +Change 133 on 1998/05/09 by (Graham Barr) + + t/io_sock.t + - Added checks for blocking() + +Sun Apr 12 1998 (Graham Barr) + + IO.xs + - enclosed newCONSTSUB in #ifdef as _64 now defines it. + +Thu Mar 19 1998 (Graham Barr) + + All + - Changed copyright/distribution policy back to be the same as perl + +Sun Feb 15 1998 (Graham Barr) + + IO::Socket + - Fix to ->accept, accept() returns false on error not undef. + +*** Release 1.19 + +Thu Feb 5 1998 (Graham Barr) + + All + - change copyright notice + + IO::Socket::INET + - changed configure to accept PeerHost and LocalHost as well as the + PeerAddr and LocalAddr arguments. + +Mon Feb 2 1998 (Graham Barr) + + IO::Handle + - Added printflush so that flush.pl can be depreciated + + IO::Socket + - Remove C statement as it was not needed + +Tue Jan 27 1998 (Graham Barr) + + IO::Socket::INET + - removed carp if $^W + +*** Patch 1.1804 + +Sat Jan 17 1998 (Graham Barr) + + t/io_sock.t + - Replaced C 0> with C 'localhost'> + + IO/Socket/INET.pm + - Modified the MultiHomed code. Now each address for a given host has + a timeout of C. + - added _get_addr method for doing hostname lookups. Now Net::DNS can be + use by sub-classing IO::Socket::INET, Thanks Gisle Aas + + t/io_multihomed.t + - new test added. Thanks Gisle Aas. + +*** Patch 1.1803 + +Mon Nov 17 1997 (Graham Barr) + + poll.c + - Added #ifdef I_* tests + + IO::Socket + - Changed initialization of @domain2pkg to fix problem of Domain option + not working + - Added patch for multi-homed hosts, Thanks to Gisle Aas + + IO::Socket::INET + - Change default proto to getprotobyname instead of 'tcp' constant string + - Added patch for multi-homed hosts, Thanks to Gisle Aas + + t/io_sock.t + - Change to test fix for Domain problem fixed in IO::Socket and be + more comprehensive, Thanks to Gisle Aas + + t/io_unix.t + - New test, Thanks to Gisle Aas + +*** Patch 1.1802 + +Wed Nov 12 1997 (Graham Barr) + + t/io_poll.t + - test 4 made an assumption that was not portable, fixed. + +*** Patch 1.1801 + +Wed Oct 22 1997 (Graham Barr) + + IO.xs + - change #ifdef's to allow compilation with 5.002 + + IO::Socket + - Fix to ensure that socket is not returned as non-blocking + unless the user asks for it + + t/io_udp.t + - Fix to stop endless loop + +*** Release 1.18 + +Mon Oct 13 1997 (Graham Barr) + + IO.xs, IO::Handle + - 1.17 broke compatability with 5.003, small tweaks to restore + compatability + + t/io_const.t + - Added new test to ensure backwards compatability with constants + is not broken + +Wed Oct 8 1997 (Graham Barr) + + IO.xs + - Added #define's to cope with argument changes to start_subparse + from 5.003_22, _23 and _24 + + IO::Select + - Renamed has_error to be has_exception which is more correct, + has_error is a wrapper around has_exception with a warning if + $^W is set. + + Makefile.PL + - Remove 'linkext' option to WriteMakefile so that static linking + should work properly, cannot remember why I added it. + +Sun Oct 5 1997 (Graham Barr) + + IO::Pipe + - GLOB assignment does not copy the fileno while under -T + added checks for undefined fileno, and added fdopen + - reader and write can now be called as static methods + + Makefile.PL + - Attempt to locate and define I_POLL if found + +*** Release 1.17 + +Fri Sep 26 1997 (Graham Barr) + + IO.xs + - Fix bug in _poll for ANSI C compilers + + IO::Socket + - Split IO::Socket::INET and IO::Socket::UNIX into separate files + + IO::File + - Patch to open() for when file is in current directory. + +*** Release 1.16 + +Mon 15 Sep 1997 Graham Barr + + o New modules + - IO::Dir + - IO::Poll + + o IO::Socket + - Changed new to call autoflush on the new socket + - IO::Socket::INET->new now accepts a single argument + - IO::Socket::INET default to protocol 'tcp' + + o IO::File + - Added doc for new_tmpfile + + o IO::Handle + - Removed use of AutoLoader for constants, constants are + now defined as constant XS subs + - Added fsync, but will not be avaliable for use + unless HAS_FSYNC is defined, perls configure does not define + this yet. + - Moved bootstrap of IO.xs to IO.pm. IO::Handle no longer + contains an AUTOLOAD sub in it's ISA hier + + o IO::Seekable + - Remove clearerr, as it is defined in IO.xs + + o IO.xs + - Patched IO.xs with patch from Chip for setvbuf warning + - Added XS sub "constant" for backwards compatability + + o Misc + - Fixed IO::Socket::configure, it was not passing $arg to domain + specific package + - Changed all $fh variables in IO::Handle to $io and all $fh + variables in IO::Socket to $sock as Chip suggested + - Fixed usage messages to be consistant + +*** Release 1.15 + +Sun 19 Jan 1997 Graham Barr + + o Updated PODs for IO::Handle and IO::File + o Modified IO.xs so that DESTROY gets called on IO::File + objects that were created with IO::File->new_tmpfile + o Modified the domain2pkg code in IO::Socket so that it + does not use blessd refs + o Created a new package IO::Pipe::End so that pipe specific + stuff can be moved out of IO::Handle. + o Added Ilya's OS/2 changes to Pipe.pm and io_pipe.t + + o These changes happened somtime before the release of 1.15 + - added shutdown to IO::Socket + - modified connect to not use alarm + - modified accept and connect to use IO::Select + +*** Release 1.14 + +Tue 24 Dec 1996 Graham Barr + + o Updated to patches in perl core dist. + o Added C to all modules + o Modified t/io_sock.t, hopefully the race condition has gone + o Added close statements to reader/writer in IO::Pipe + o IO::Handle::syswrite was calling sysread, fixed :-) + +*** Release 1.12 + +Thu 19 Sep 1996 Graham Barr + + o Modified IO.xs so that it will compile with pre perlio version + of perl (ie pre perl5.003_02) + o Modified IO::Socket::send so not to pass 4 arguments to send + if the socket is connected + +*** Release 1.10 + +Mon 11 Sep 1996 Graham Barr + + o Fixed a bug in IO::Socket which caused DESTROY to be called + on a partly initialised connection + o Changed IO.xs to use Perlio + o Modified usage message to report correct package + o Added IO::File::new changes from Chip, to allow PERM to be passed + o Added sysread and syswrite methods to IO::Handle + o Updated documentation + o Fixed a bug in IO::Select that caused a hang if the last handle + was removed. + o Added count method to IO::Select + o Renamed and modified tests so that they can be copied into the + perl distribution + o Added fcntl and ioctl methods to IO::Handle + +Thu 25 Jul 1996 Graham Barr + + o It is now not necessary to call the domain sub-classes of + IO::Socket. when connect is called it notes the domain. + Domain specific methods, which are normally non-critical, are + called via this note-ing. + o Added methods to IO::Socket to retrieve the domain, type and + protocol of a given socket + +Tue 23 Jul 1996 Graham Barr + + o IO::Socket::connect changed how we do timeouts, as it did not work + + o IO::Handle::new_from_fd removed method call to _ref_fd, which was + a leftover from FileHandle + +Fri 28 Jun 1996 Graham Barr + + o Modified IO::Socket::UNIX::configure to default to using a socket + type of SOCK_STREAM if no type is specified. diff --git a/gnu/usr.bin/perl/ext/IO/README b/gnu/usr.bin/perl/ext/IO/README index e855afade40..191d5504bc1 100644 --- a/gnu/usr.bin/perl/ext/IO/README +++ b/gnu/usr.bin/perl/ext/IO/README @@ -1,4 +1,5 @@ -This directory contains files from the IO distribution maintained by -Graham Barr . If you find that you have to modify -any files in this directory then please forward him a patch for only -the files in this directory. +This directory contains files from the IO distribution created by +Graham Barr. It is currently maintained by the Perl Porters as part +of the Perl source distribution. If you find that you have to modify +any files in this directory then please forward them a patch at +. diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/Dir.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/Dir.pm new file mode 100644 index 00000000000..1fa07ed6b8b --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/Dir.pm @@ -0,0 +1,239 @@ +# IO::Dir.pm +# +# Copyright (c) 1997-8 Graham Barr . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package IO::Dir; + +use 5.003_26; + +use strict; +use Carp; +use Symbol; +use Exporter; +use IO::File; +our(@ISA, $VERSION, @EXPORT_OK); +use Tie::Hash; +use File::stat; + +@ISA = qw(Tie::Hash Exporter); +$VERSION = "1.03"; +@EXPORT_OK = qw(DIR_UNLINK); + +sub DIR_UNLINK () { 1 } + +sub new { + @_ >= 1 && @_ <= 2 or croak 'usage: new IO::Dir [DIRNAME]'; + my $class = shift; + my $dh = gensym; + if (@_) { + IO::Dir::open($dh, $_[0]) + or return undef; + } + bless $dh, $class; +} + +sub DESTROY { + my ($dh) = @_; + closedir($dh); +} + +sub open { + @_ == 2 or croak 'usage: $dh->open(DIRNAME)'; + my ($dh, $dirname) = @_; + return undef + unless opendir($dh, $dirname); + ${*$dh}{io_dir_path} = $dirname; + 1; +} + +sub close { + @_ == 1 or croak 'usage: $dh->close()'; + my ($dh) = @_; + closedir($dh); +} + +sub read { + @_ == 1 or croak 'usage: $dh->read()'; + my ($dh) = @_; + readdir($dh); +} + +sub seek { + @_ == 2 or croak 'usage: $dh->seek(POS)'; + my ($dh,$pos) = @_; + seekdir($dh,$pos); +} + +sub tell { + @_ == 1 or croak 'usage: $dh->tell()'; + my ($dh) = @_; + telldir($dh); +} + +sub rewind { + @_ == 1 or croak 'usage: $dh->rewind()'; + my ($dh) = @_; + rewinddir($dh); +} + +sub TIEHASH { + my($class,$dir,$options) = @_; + + my $dh = $class->new($dir) + or return undef; + + $options ||= 0; + + ${*$dh}{io_dir_unlink} = $options & DIR_UNLINK; + $dh; +} + +sub FIRSTKEY { + my($dh) = @_; + $dh->rewind; + scalar $dh->read; +} + +sub NEXTKEY { + my($dh) = @_; + scalar $dh->read; +} + +sub EXISTS { + my($dh,$key) = @_; + -e ${*$dh}{io_dir_path} . "/" . $key; +} + +sub FETCH { + my($dh,$key) = @_; + &lstat(${*$dh}{io_dir_path} . "/" . $key); +} + +sub STORE { + my($dh,$key,$data) = @_; + my($atime,$mtime) = ref($data) ? @$data : ($data,$data); + my $file = ${*$dh}{io_dir_path} . "/" . $key; + unless(-e $file) { + my $io = IO::File->new($file,O_CREAT | O_RDWR); + $io->close if $io; + } + utime($atime,$mtime, $file); +} + +sub DELETE { + my($dh,$key) = @_; + # Only unlink if unlink-ing is enabled + my $file = ${*$dh}{io_dir_path} . "/" . $key; + + return 0 + unless ${*$dh}{io_dir_unlink}; + + -d $file + ? rmdir($file) + : unlink($file); +} + +1; + +__END__ + +=head1 NAME + +IO::Dir - supply object methods for directory handles + +=head1 SYNOPSIS + + use IO::Dir; + $d = new IO::Dir "."; + if (defined $d) { + while (defined($_ = $d->read)) { something($_); } + $d->rewind; + while (defined($_ = $d->read)) { something_else($_); } + undef $d; + } + + tie %dir, IO::Dir, "."; + foreach (keys %dir) { + print $_, " " , $dir{$_}->size,"\n"; + } + +=head1 DESCRIPTION + +The C package provides two interfaces to perl's directory reading +routines. + +The first interface is an object approach. C provides an object +constructor and methods, which are just wrappers around perl's built in +directory reading routines. + +=over 4 + +=item new ( [ DIRNAME ] ) + +C is the constuctor for C objects. It accepts one optional +argument which, if given, C will pass to C + +=back + +The following methods are wrappers for the directory related functions built +into perl (the trailing `dir' has been removed from the names). See L +for details of these functions. + +=over 4 + +=item open ( DIRNAME ) + +=item read () + +=item seek ( POS ) + +=item tell () + +=item rewind () + +=item close () + +=back + +C also provides a interface to reading directories via a tied +HASH. The tied HASH extends the interface beyond just the directory +reading routines by the use of C, from the C package, +C, C and C. + +=over 4 + +=item tie %hash, IO::Dir, DIRNAME [, OPTIONS ] + +=back + +The keys of the HASH will be the names of the entries in the directory. +Reading a value from the hash will be the result of calling +C. Deleting an element from the hash will call C +providing that C is passed in the C. + +Assigning to an entry in the HASH will cause the time stamps of the file +to be modified. If the file does not exist then it will be created. Assigning +a single integer to a HASH element will cause both the access and +modification times to be changed to that value. Alternatively a reference to +an array of two values can be passed. The first array element will be used to +set the access time and the second element will be used to set the modification +time. + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Graham Barr. Currently maintained by the Perl Porters. Please report all +bugs to . + +=head1 COPYRIGHT + +Copyright (c) 1997-8 Graham Barr . All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/File.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/File.pm index de7fabc6f25..569c2800f80 100644 --- a/gnu/usr.bin/perl/ext/IO/lib/IO/File.pm +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/File.pm @@ -49,7 +49,7 @@ these classes with methods that are specific to file handles. =over 4 -=item new ([ ARGS ] ) +=item new ( FILENAME [,MODE [,PERMS]] ) Creates a C. If it receives any parameters, they are passed to the method C; if the open fails, the object is destroyed. Otherwise, @@ -72,20 +72,21 @@ Otherwise, it is returned to the caller. =item open( FILENAME [,MODE [,PERMS]] ) C accepts one, two or three parameters. With one parameter, -it is just a front end for the built-in C function. With two +it is just a front end for the built-in C function. With two or three parameters, the first parameter is a filename that may include whitespace or other special characters, and the second parameter is the open mode, optionally followed by a file permission value. If C receives a Perl mode string ("E", "+E", etc.) -or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic -Perl C operator. +or a ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic +Perl C operator (but protects any special characters). If C is given a numeric mode, it passes that mode and the optional permissions value to the Perl C operator. -For convenience, C tries to import the O_XXX -constants from the Fcntl module. If dynamic loading is not available, -this may fail, but the rest of IO::File will still work. +The permissions default to 0666. + +For convenience, C exports the O_XXX constants from the +Fcntl module, if this module is available. =back @@ -98,24 +99,24 @@ L =head1 HISTORY -Derived from FileHandle.pm by Graham Barr EFE. +Derived from FileHandle.pm by Graham Barr EFE. =cut -require 5.000; +require 5.005_64; use strict; -use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA); +our($VERSION, @EXPORT, @EXPORT_OK, @ISA); use Carp; use Symbol; use SelectSaver; use IO::Seekable; +use File::Spec; require Exporter; -require DynaLoader; -@ISA = qw(IO::Handle IO::Seekable Exporter DynaLoader); +@ISA = qw(IO::Handle IO::Seekable Exporter); -$VERSION = "1.06021"; +$VERSION = "1.08"; @EXPORT = @IO::Seekable::EXPORT; @@ -127,7 +128,6 @@ eval { push(@EXPORT, @O); }; - ################################################ ## Constructor ## @@ -158,7 +158,9 @@ sub open { defined $perms or $perms = 0666; return sysopen($fh, $file, $mode, $perms); } - $file = './' . $file if $file =~ m{\A[^\\/\w]}; + if (! File::Spec->file_name_is_absolute($file)) { + $file = File::Spec->catfile(File::Spec->curdir(),$file); + } $file = IO::Handle::_open_mode_string($mode) . " $file\0"; } open($fh, $file); diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/Poll.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/Poll.pm new file mode 100644 index 00000000000..687664b9abf --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/Poll.pm @@ -0,0 +1,205 @@ +# IO::Poll.pm +# +# Copyright (c) 1997-8 Graham Barr . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package IO::Poll; + +use strict; +use IO::Handle; +use Exporter (); +our(@ISA, @EXPORT_OK, @EXPORT, $VERSION); + +@ISA = qw(Exporter); +$VERSION = "0.01"; + +@EXPORT = qw(poll); + +@EXPORT_OK = qw( + POLLIN + POLLPRI + POLLOUT + POLLRDNORM + POLLWRNORM + POLLRDBAND + POLLWRBAND + POLLNORM + POLLERR + POLLHUP + POLLNVAL +); + +sub new { + my $class = shift; + + my $self = bless [{},{}], $class; + + $self; +} + +sub mask { + my $self = shift; + my $io = shift; + my $fd = fileno($io); + if(@_) { + my $mask = shift; + $self->[0]{$fd} ||= {}; + if($mask) { + $self->[0]{$fd}{$io} = $mask; + } + else { + delete $self->[0]{$fd}{$io}; + } + } + elsif(exists $self->[0]{$fd}{$io}) { + return $self->[0]{$fd}{$io}; + } + return; +} + + +sub poll { + my($self,$timeout) = @_; + + $self->[1] = {}; + + my($fd,$ref); + my @poll = (); + + while(($fd,$ref) = each %{$self->[0]}) { + my $events = 0; + map { $events |= $_ } values %{$ref}; + push(@poll,$fd, $events); + } + + my $ret = @poll ? _poll(defined($timeout) ? $timeout * 1000 : -1,@poll) : 0; + + return $ret + unless $ret > 0; + + while(@poll) { + my($fd,$got) = splice(@poll,0,2); + $self->[1]{$fd} = $got + if $got; + } + + return $ret; +} + +sub events { + my $self = shift; + my $io = shift; + my $fd = fileno($io); + + exists $self->[1]{$fd} && exists $self->[0]{$fd}{$io} + ? $self->[1]{$fd} & $self->[0]{$fd}{$io} + : 0; +} + +sub remove { + my $self = shift; + my $io = shift; + $self->mask($io,0); +} + +sub handles { + my $self = shift; + + return map { keys %$_ } values %{$self->[0]} + unless(@_); + + my $events = shift || 0; + my($fd,$ev,$io,$mask); + my @handles = (); + + while(($fd,$ev) = each %{$self->[1]}) { + if($ev & $events) { + while(($io,$mask) = each %{$self->[0][$fd]}) { + push(@handles, $io) + if $events & $mask; + } + } + } + return @handles; +} + +1; + +__END__ + +=head1 NAME + +IO::Poll - Object interface to system poll call + +=head1 SYNOPSIS + + use IO::Poll qw(POLLRDNORM POLLWRNORM POLLIN POLLHUP); + + $poll = new IO::Poll; + + $poll->mask($input_handle => POLLRDNORM | POLLIN | POLLHUP); + $poll->mask($output_handle => POLLWRNORM); + + $poll->poll($timeout); + + $ev = $poll->events($input); + +=head1 DESCRIPTION + +C is a simple interface to the system level poll routine. + +=head1 METHODS + +=over 4 + +=item mask ( IO [, EVENT_MASK ] ) + +If EVENT_MASK is given, then, if EVENT_MASK is non-zero, IO is added to the +list of file descriptors and the next call to poll will check for +any event specified in EVENT_MASK. If EVENT_MASK is zero then IO will be +removed from the list of file descriptors. + +If EVENT_MASK is not given then the return value will be the current +event mask value for IO. + +=item poll ( [ TIMEOUT ] ) + +Call the system level poll routine. If TIMEOUT is not specified then the +call will block. Returns the number of handles which had events +happen, or -1 on error. + +=item events ( IO ) + +Returns the event mask which represents the events that happend on IO +during the last call to C. + +=item remove ( IO ) + +Remove IO from the list of file descriptors for the next poll. + +=item handles( [ EVENT_MASK ] ) + +Returns a list of handles. If EVENT_MASK is not given then a list of all +handles known will be returned. If EVENT_MASK is given then a list +of handles will be returned which had one of the events specified by +EVENT_MASK happen during the last call ti C + +=back + +=head1 SEE ALSO + +L, L, L + +=head1 AUTHOR + +Graham Barr. Currently maintained by the Perl Porters. Please report all +bugs to . + +=head1 COPYRIGHT + +Copyright (c) 1997-8 Graham Barr . All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/Select.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/Select.pm index dea684a62ed..df92b04b74f 100644 --- a/gnu/usr.bin/perl/ext/IO/lib/IO/Select.pm +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/Select.pm @@ -1,163 +1,17 @@ # IO::Select.pm # -# Copyright (c) 1995 Graham Barr. All rights reserved. This program is free -# software; you can redistribute it and/or modify it under the same terms -# as Perl itself. +# Copyright (c) 1997-8 Graham Barr . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. package IO::Select; -=head1 NAME - -IO::Select - OO interface to the select system call - -=head1 SYNOPSIS - - use IO::Select; - - $s = IO::Select->new(); - - $s->add(\*STDIN); - $s->add($some_handle); - - @ready = $s->can_read($timeout); - - @ready = IO::Select->new(@handles)->read(0); - -=head1 DESCRIPTION - -The C package implements an object approach to the system C static method. - -=item bits() - -Return the bit string suitable as argument to the core select() call. - -=item bits() - -Return the bit string suitable as argument to the core select() call. - -=item select ( READ, WRITE, ERROR [, TIMEOUT ] ) - -C +function call. It allows the user to see what IO handles, see L, +are ready for reading, writing or have an error condition pending. + +=head1 CONSTRUCTOR + +=over 4 + +=item new ( [ HANDLES ] ) + +The constructor creates a new object and optionally initialises it with a set +of handles. + +=back + +=head1 METHODS + +=over 4 + +=item add ( HANDLES ) + +Add the list of handles to the C object. It is these values that +will be returned when an event occurs. C keeps these values in a +cache which is indexed by the C of the handle, so if more than one +handle with the same C is specified then only the last one is cached. + +Each handle can be an C object, an integer or an array +reference where the first element is a C or an integer. + +=item remove ( HANDLES ) + +Remove all the given handles from the object. This method also works +by the C of the handles. So the exact handles that were added +need not be passed, just handles that have an equivalent C + +=item exists ( HANDLE ) + +Returns a true value (actually the handle itself) if it is present. +Returns undef otherwise. + +=item handles + +Return an array of all registered handles. + +=item can_read ( [ TIMEOUT ] ) + +Return an array of handles that are ready for reading. C is +the maximum amount of time to wait before returning an empty list. If +C is not given and any handles are registered then the call +will block. + +=item can_write ( [ TIMEOUT ] ) + +Same as C except check for handles that can be written to. + +=item has_exception ( [ TIMEOUT ] ) + +Same as C except check for handles that have an exception +condition, for example pending out-of-band data. + +=item count () + +Returns the number of handles that the object will check for when +one of the C methods is called or the object is passed to +the C is a static method, that is you call it with the package +name like C. C, C and C are either C +or C objects. C is optional and has the same +effect as for the core select call. + +The result will be an array of 3 elements, each a reference to an array +which will hold the handles that are ready for reading, writing and have +error conditions respectively. Upon error an empty array is returned. + +=back + +=head1 EXAMPLE + +Here is a short example which shows how C could be used +to write a server which communicates with several sockets while also +listening for more connections on a listen socket + + use IO::Select; + use IO::Socket; + + $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080); + $sel = new IO::Select( $lsn ); + + while(@ready = $sel->can_read) { + foreach $fh (@ready) { + if($fh == $lsn) { + # Create a new socket + $new = $lsn->accept; + $sel->add($new); + } + else { + # Process socket + + # Maybe we have finished with the socket + $sel->remove($fh); + $fh->close; + } + } + } + +=head1 AUTHOR + +Graham Barr. Currently maintained by the Perl Porters. Please report all +bugs to . + +=head1 COPYRIGHT + +Copyright (c) 1997-8 Graham Barr . All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/INET.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/INET.pm new file mode 100644 index 00000000000..27a3d4d847e --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/INET.pm @@ -0,0 +1,406 @@ +# IO::Socket::INET.pm +# +# Copyright (c) 1997-8 Graham Barr . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package IO::Socket::INET; + +use strict; +our(@ISA, $VERSION); +use IO::Socket; +use Socket; +use Carp; +use Exporter; +use Errno; + +@ISA = qw(IO::Socket); +$VERSION = "1.25"; + +my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1; + +IO::Socket::INET->register_domain( AF_INET ); + +my %socket_type = ( tcp => SOCK_STREAM, + udp => SOCK_DGRAM, + icmp => SOCK_RAW + ); + +sub new { + my $class = shift; + unshift(@_, "PeerAddr") if @_ == 1; + return $class->SUPER::new(@_); +} + +sub _sock_info { + my($addr,$port,$proto) = @_; + my @proto = (); + my @serv = (); + + $port = $1 + if(defined $addr && $addr =~ s,:([\w\(\)/]+)$,,); + + if(defined $proto) { + if (@proto = ( $proto =~ m,\D, + ? getprotobyname($proto) + : getprotobynumber($proto)) + ) { + $proto = $proto[2] || undef; + } + else { + $@ = "Bad protocol '$proto'"; + return; + } + } + + if(defined $port) { + $port =~ s,\((\d+)\)$,,; + + my $defport = $1 || undef; + my $pnum = ($port =~ m,^(\d+)$,)[0]; + + if ($port =~ m,\D,) { + unless (@serv = getservbyname($port, $proto[0] || "")) { + $@ = "Bad service '$port'"; + return; + } + } + + $port = $pnum || $serv[2] || $defport || undef; + + $proto = (getprotobyname($serv[3]))[2] || undef + if @serv && !$proto; + } + + return ($addr || undef, + $port || undef, + $proto || undef + ); +} + +sub _error { + my $sock = shift; + my $err = shift; + { + local($!); + $@ = join("",ref($sock),": ",@_); + close($sock) + if(defined fileno($sock)); + } + $! = $err; + return undef; +} + +sub _get_addr { + my($sock,$addr_str, $multi) = @_; + my @addr; + if ($multi && $addr_str !~ /^\d+(?:\.\d+){3}$/) { + (undef, undef, undef, undef, @addr) = gethostbyname($addr_str); + } else { + my $h = inet_aton($addr_str); + push(@addr, $h) if defined $h; + } + @addr; +} + +sub configure { + my($sock,$arg) = @_; + my($lport,$rport,$laddr,$raddr,$proto,$type); + + + $arg->{LocalAddr} = $arg->{LocalHost} + if exists $arg->{LocalHost} && !exists $arg->{LocalAddr}; + + ($laddr,$lport,$proto) = _sock_info($arg->{LocalAddr}, + $arg->{LocalPort}, + $arg->{Proto}) + or return _error($sock, $!, $@); + + $laddr = defined $laddr ? inet_aton($laddr) + : INADDR_ANY; + + return _error($sock, $EINVAL, "Bad hostname '",$arg->{LocalAddr},"'") + unless(defined $laddr); + + $arg->{PeerAddr} = $arg->{PeerHost} + if exists $arg->{PeerHost} && !exists $arg->{PeerAddr}; + + unless(exists $arg->{Listen}) { + ($raddr,$rport,$proto) = _sock_info($arg->{PeerAddr}, + $arg->{PeerPort}, + $proto) + or return _error($sock, $!, $@); + } + + $proto ||= (getprotobyname('tcp'))[2]; + + my $pname = (getprotobynumber($proto))[0]; + $type = $arg->{Type} || $socket_type{$pname}; + + my @raddr = (); + + if(defined $raddr) { + @raddr = $sock->_get_addr($raddr, $arg->{MultiHomed}); + return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'") + unless @raddr; + } + + while(1) { + + $sock->socket(AF_INET, $type, $proto) or + return _error($sock, $!, "$!"); + + if ($arg->{Reuse}) { + $sock->sockopt(SO_REUSEADDR,1) or + return _error($sock, $!, "$!"); + } + + if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) { + $sock->bind($lport || 0, $laddr) or + return _error($sock, $!, "$!"); + } + + if(exists $arg->{Listen}) { + $sock->listen($arg->{Listen} || 5) or + return _error($sock, $!, "$!"); + last; + } + + # don't try to connect unless we're given a PeerAddr + last unless exists($arg->{PeerAddr}); + + $raddr = shift @raddr; + + return _error($sock, $EINVAL, 'Cannot determine remote port') + unless($rport || $type == SOCK_DGRAM || $type == SOCK_RAW); + + last + unless($type == SOCK_STREAM || defined $raddr); + + return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'") + unless defined $raddr; + +# my $timeout = ${*$sock}{'io_socket_timeout'}; +# my $before = time() if $timeout; + + if ($sock->connect(pack_sockaddr_in($rport, $raddr))) { +# ${*$sock}{'io_socket_timeout'} = $timeout; + return $sock; + } + + return _error($sock, $!, "Timeout") + unless @raddr; + +# if ($timeout) { +# my $new_timeout = $timeout - (time() - $before); +# return _error($sock, +# (exists(&Errno::ETIMEDOUT) ? Errno::ETIMEDOUT() : $EINVAL), +# "Timeout") if $new_timeout <= 0; +# ${*$sock}{'io_socket_timeout'} = $new_timeout; +# } + + } + + $sock; +} + +sub connect { + @_ == 2 || @_ == 3 or + croak 'usage: $sock->connect(NAME) or $sock->connect(PORT, ADDR)'; + my $sock = shift; + return $sock->SUPER::connect(@_ == 1 ? shift : pack_sockaddr_in(@_)); +} + +sub bind { + @_ == 2 || @_ == 3 or + croak 'usage: $sock->bind(NAME) or $sock->bind(PORT, ADDR)'; + my $sock = shift; + return $sock->SUPER::bind(@_ == 1 ? shift : pack_sockaddr_in(@_)) +} + +sub sockaddr { + @_ == 1 or croak 'usage: $sock->sockaddr()'; + my($sock) = @_; + my $name = $sock->sockname; + $name ? (sockaddr_in($name))[1] : undef; +} + +sub sockport { + @_ == 1 or croak 'usage: $sock->sockport()'; + my($sock) = @_; + my $name = $sock->sockname; + $name ? (sockaddr_in($name))[0] : undef; +} + +sub sockhost { + @_ == 1 or croak 'usage: $sock->sockhost()'; + my($sock) = @_; + my $addr = $sock->sockaddr; + $addr ? inet_ntoa($addr) : undef; +} + +sub peeraddr { + @_ == 1 or croak 'usage: $sock->peeraddr()'; + my($sock) = @_; + my $name = $sock->peername; + $name ? (sockaddr_in($name))[1] : undef; +} + +sub peerport { + @_ == 1 or croak 'usage: $sock->peerport()'; + my($sock) = @_; + my $name = $sock->peername; + $name ? (sockaddr_in($name))[0] : undef; +} + +sub peerhost { + @_ == 1 or croak 'usage: $sock->peerhost()'; + my($sock) = @_; + my $addr = $sock->peeraddr; + $addr ? inet_ntoa($addr) : undef; +} + +1; + +__END__ + +=head1 NAME + +IO::Socket::INET - Object interface for AF_INET domain sockets + +=head1 SYNOPSIS + + use IO::Socket::INET; + +=head1 DESCRIPTION + +C provides an object interface to creating and using sockets +in the AF_INET domain. It is built upon the L interface and +inherits all the methods defined by L. + +=head1 CONSTRUCTOR + +=over 4 + +=item new ( [ARGS] ) + +Creates an C object, which is a reference to a +newly created symbol (see the C package). C +optionally takes arguments, these arguments are in key-value pairs. + +In addition to the key-value pairs accepted by L, +C provides. + + + PeerAddr Remote host address [:] + PeerHost Synonym for PeerAddr + PeerPort Remote port or service [()] | + LocalAddr Local host bind address hostname[:port] + LocalHost Synonym for LocalAddr + LocalPort Local host bind port [()] | + Proto Protocol name (or number) "tcp" | "udp" | ... + Type Socket type SOCK_STREAM | SOCK_DGRAM | ... + Listen Queue size for listen + Reuse Set SO_REUSEADDR before binding + Timeout Timeout value for various operations + MultiHomed Try all adresses for multi-homed hosts + + +If C is defined then a listen socket is created, else if the +socket type, which is derived from the protocol, is SOCK_STREAM then +connect() is called. + +Although it is not illegal, the use of C on a socket +which is in non-blocking mode is of little use. This is because the +first connect will never fail with a timeout as the connaect call +will not block. + +The C can be a hostname or the IP-address on the +"xx.xx.xx.xx" form. The C can be a number or a symbolic +service name. The service name might be followed by a number in +parenthesis which is used if the service is not known by the system. +The C specification can also be embedded in the C +by preceding it with a ":". + +If C is not given and you specify a symbolic C port, +then the constructor will try to derive C from the service +name. As a last resort C "tcp" is assumed. The C +parameter will be deduced from C if not specified. + +If the constructor is only passed a single argument, it is assumed to +be a C specification. + +Examples: + + $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org', + PeerPort => 'http(80)', + Proto => 'tcp'); + + $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)'); + + $sock = IO::Socket::INET->new(Listen => 5, + LocalAddr => 'localhost', + LocalPort => 9000, + Proto => 'tcp'); + + $sock = IO::Socket::INET->new('127.0.0.1:25'); + + + NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE + +As of VERSION 1.18 all IO::Socket objects have autoflush turned on +by default. This was not the case with earlier releases. + + NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE + +=back + +=head2 METHODS + +=over 4 + +=item sockaddr () + +Return the address part of the sockaddr structure for the socket + +=item sockport () + +Return the port number that the socket is using on the local host + +=item sockhost () + +Return the address part of the sockaddr structure for the socket in a +text form xx.xx.xx.xx + +=item peeraddr () + +Return the address part of the sockaddr structure for the socket on +the peer host + +=item peerport () + +Return the port number for the socket on the peer host. + +=item peerhost () + +Return the address part of the sockaddr structure for the socket on the +peer host in a text form xx.xx.xx.xx + +=back + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Graham Barr. Currently maintained by the Perl Porters. Please report all +bugs to . + +=head1 COPYRIGHT + +Copyright (c) 1996-8 Graham Barr . All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut diff --git a/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/UNIX.pm b/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/UNIX.pm new file mode 100644 index 00000000000..d083f48b78f --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/lib/IO/Socket/UNIX.pm @@ -0,0 +1,143 @@ +# IO::Socket::UNIX.pm +# +# Copyright (c) 1997-8 Graham Barr . All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package IO::Socket::UNIX; + +use strict; +our(@ISA, $VERSION); +use IO::Socket; +use Socket; +use Carp; + +@ISA = qw(IO::Socket); +$VERSION = "1.20"; + +IO::Socket::UNIX->register_domain( AF_UNIX ); + +sub new { + my $class = shift; + unshift(@_, "Peer") if @_ == 1; + return $class->SUPER::new(@_); +} + +sub configure { + my($sock,$arg) = @_; + my($bport,$cport); + + my $type = $arg->{Type} || SOCK_STREAM; + + $sock->socket(AF_UNIX, $type, 0) or + return undef; + + if(exists $arg->{Local}) { + my $addr = sockaddr_un($arg->{Local}); + $sock->bind($addr) or + return undef; + } + if(exists $arg->{Listen}) { + $sock->listen($arg->{Listen} || 5) or + return undef; + } + elsif(exists $arg->{Peer}) { + my $addr = sockaddr_un($arg->{Peer}); + $sock->connect($addr) or + return undef; + } + + $sock; +} + +sub hostpath { + @_ == 1 or croak 'usage: $sock->hostpath()'; + my $n = $_[0]->sockname || return undef; + (sockaddr_un($n))[0]; +} + +sub peerpath { + @_ == 1 or croak 'usage: $sock->peerpath()'; + my $n = $_[0]->peername || return undef; + (sockaddr_un($n))[0]; +} + +1; # Keep require happy + +__END__ + +=head1 NAME + +IO::Socket::UNIX - Object interface for AF_UNIX domain sockets + +=head1 SYNOPSIS + + use IO::Socket::UNIX; + +=head1 DESCRIPTION + +C provides an object interface to creating and using sockets +in the AF_UNIX domain. It is built upon the L interface and +inherits all the methods defined by L. + +=head1 CONSTRUCTOR + +=over 4 + +=item new ( [ARGS] ) + +Creates an C object, which is a reference to a +newly created symbol (see the C package). C +optionally takes arguments, these arguments are in key-value pairs. + +In addition to the key-value pairs accepted by L, +C provides. + + Type Type of socket (eg SOCK_STREAM or SOCK_DGRAM) + Local Path to local fifo + Peer Path to peer fifo + Listen Create a listen socket + +If the constructor is only passed a single argument, it is assumed to +be a C specification. + + + NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE + +As of VERSION 1.18 all IO::Socket objects have autoflush turned on +by default. This was not the case with earlier releases. + + NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE + +=back + +=head1 METHODS + +=over 4 + +=item hostpath() + +Returns the pathname to the fifo at the local end + +=item peerpath() + +Returns the pathanme to the fifo at the peer end + +=back + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Graham Barr. Currently maintained by the Perl Porters. Please report all +bugs to . + +=head1 COPYRIGHT + +Copyright (c) 1996-8 Graham Barr . All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut diff --git a/gnu/usr.bin/perl/ext/IO/poll.c b/gnu/usr.bin/perl/ext/IO/poll.c new file mode 100644 index 00000000000..024c52ff9f4 --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/poll.c @@ -0,0 +1,135 @@ +/* + * poll.c + * + * Copyright (c) 1997-8 Graham Barr . All rights reserved. + * This program is free software; you can redistribute it and/or + * modify it under the same terms as Perl itself. + * + * For systems that do not have the poll() system call (for example Linux + * kernels < v2.1.23) try to emulate it as closely as possible using select() + * + */ + +#include "EXTERN.h" +#include "perl.h" +#include "poll.h" +#ifdef I_SYS_TIME +# include +#endif +#ifdef I_TIME +# include +#endif +#include +#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */ +# include +#endif +#include +#include + +#ifdef HAS_SELECT +#ifdef I_SYS_SELECT +#include +#endif +#endif + +#ifdef EMULATE_POLL_WITH_SELECT + +# define POLL_CAN_READ (POLLIN | POLLRDNORM ) +# define POLL_CAN_WRITE (POLLOUT | POLLWRNORM | POLLWRBAND ) +# define POLL_HAS_EXCP (POLLRDBAND | POLLPRI ) + +# define POLL_EVENTS_MASK (POLL_CAN_READ | POLL_CAN_WRITE | POLL_HAS_EXCP) + +int +poll(struct pollfd *fds, unsigned long nfds, int timeout) +{ + int i,err; + fd_set rfd,wfd,efd,ifd; + struct timeval timebuf; + struct timeval *tbuf = (struct timeval *)0; + int n = 0; + int count; + + FD_ZERO(&ifd); + +again: + + FD_ZERO(&rfd); + FD_ZERO(&wfd); + FD_ZERO(&efd); + + for(i = 0 ; i < nfds ; i++) { + int events = fds[i].events; + int fd = fds[i].fd; + + fds[i].revents = 0; + + if(fd < 0 || FD_ISSET(fd, &ifd)) + continue; + + if(fd > n) + n = fd; + + if(events & POLL_CAN_READ) + FD_SET(fd, &rfd); + + if(events & POLL_CAN_WRITE) + FD_SET(fd, &wfd); + + if(events & POLL_HAS_EXCP) + FD_SET(fd, &efd); + } + + if(timeout >= 0) { + timebuf.tv_sec = timeout / 1000; + timebuf.tv_usec = (timeout % 1000) * 1000; + tbuf = &timebuf; + } + + err = select(n+1,&rfd,&wfd,&efd,tbuf); + + if(err < 0) { +#ifdef HAS_FSTAT + if(errno == EBADF) { + for(i = 0 ; i < nfds ; i++) { + struct stat buf; + if((fstat(fds[i].fd,&buf) < 0) && (errno == EBADF)) { + FD_SET(fds[i].fd, &ifd); + goto again; + } + } + } +#endif /* HAS_FSTAT */ + return err; + } + + count = 0; + + for(i = 0 ; i < nfds ; i++) { + int revents = (fds[i].events & POLL_EVENTS_MASK); + int fd = fds[i].fd; + + if(fd < 0) + continue; + + if(FD_ISSET(fd, &ifd)) + revents = POLLNVAL; + else { + if(!FD_ISSET(fd, &rfd)) + revents &= ~POLL_CAN_READ; + + if(!FD_ISSET(fd, &wfd)) + revents &= ~POLL_CAN_WRITE; + + if(!FD_ISSET(fd, &efd)) + revents &= ~POLL_HAS_EXCP; + } + + if((fds[i].revents = revents) != 0) + count++; + } + + return count; +} + +#endif /* EMULATE_POLL_WITH_SELECT */ diff --git a/gnu/usr.bin/perl/ext/IO/poll.h b/gnu/usr.bin/perl/ext/IO/poll.h new file mode 100644 index 00000000000..4055b496248 --- /dev/null +++ b/gnu/usr.bin/perl/ext/IO/poll.h @@ -0,0 +1,55 @@ +/* + * poll.h + * + * Copyright (c) 1997-8 Graham Barr . All rights reserved. + * This program is free software; you can redistribute it and/or + * modify it under the same terms as Perl itself. + * + */ + +#ifndef POLL_H +# define POLL_H + +#if (defined(HAS_POLL) && defined(I_POLL)) || defined(POLLWRBAND) +# include +#else +#ifdef HAS_SELECT + + +/* We shall emulate poll using select */ + +#define EMULATE_POLL_WITH_SELECT + +typedef struct pollfd { + int fd; + short events; + short revents; +} pollfd_t; + +#define POLLIN 0x0001 +#define POLLPRI 0x0002 +#define POLLOUT 0x0004 +#define POLLRDNORM 0x0040 +#define POLLWRNORM POLLOUT +#define POLLRDBAND 0x0080 +#define POLLWRBAND 0x0100 +#define POLLNORM POLLRDNORM + +/* Return ONLY events (NON testable) */ + +#define POLLERR 0x0008 +#define POLLHUP 0x0010 +#define POLLNVAL 0x0020 + +int poll (struct pollfd *, unsigned long, int); + +#ifndef HAS_POLL +# define HAS_POLL +#endif + +#endif /* HAS_SELECT */ + +#endif /* I_POLL */ + +#endif /* POLL_H */ + diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/Msg.pm b/gnu/usr.bin/perl/ext/IPC/SysV/Msg.pm index a739ca23679..120a5b2d3a9 100644 --- a/gnu/usr.bin/perl/ext/IPC/SysV/Msg.pm +++ b/gnu/usr.bin/perl/ext/IPC/SysV/Msg.pm @@ -90,14 +90,14 @@ sub rcv { msgrcv($$self,$buf,$_[1],$_[2] || 0, $_[3] || 0) or return; my $type; - ($type,$_[0]) = unpack("L a*",$buf); + ($type,$_[0]) = unpack("l! a*",$buf); $type; } sub snd { @_ <= 4 && @_ >= 3 or croak '$msg->snd( TYPE, BUF, FLAGS )'; my $self = shift; - msgsnd($$self,pack("L a*",$_[0],$_[1]), $_[2] || 0); + msgsnd($$self,pack("l! a*",$_[0],$_[1]), $_[2] || 0); } @@ -111,17 +111,17 @@ IPC::Msg - SysV Msg IPC object class =head1 SYNOPSIS - use IPC::SysV qw(IPC_PRIVATE S_IRWXU S_IRWXG S_IRWXO); + use IPC::SysV qw(IPC_PRIVATE S_IRWXU); use IPC::Msg; - - $msg = new IPC::Msg(IPC_PRIVATE, S_IRWXU | S_IRWXG | S_IRWXO); - - $msg->snd(pack("L a*",$msgtype,$msg)); - + + $msg = new IPC::Msg(IPC_PRIVATE, S_IRWXU); + + $msg->snd(pack("l! a*",$msgtype,$msg)); + $msg->rcv($buf,256); - + $ds = $msg->stat; - + $msg->remove; =head1 DESCRIPTION @@ -157,8 +157,8 @@ Returns the system message queue identifier. =item rcv ( BUF, LEN [, TYPE [, FLAGS ]] ) -Read a message from the queue. Returns the type of the message read. See -L +Read a message from the queue. Returns the type of the message read. +See L. The BUF becomes tainted. =item remove diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/Semaphore.pm b/gnu/usr.bin/perl/ext/IPC/SysV/Semaphore.pm index 464eb0bc192..faf7411950b 100644 --- a/gnu/usr.bin/perl/ext/IPC/SysV/Semaphore.pm +++ b/gnu/usr.bin/perl/ext/IPC/SysV/Semaphore.pm @@ -155,19 +155,19 @@ IPC::Semaphore - SysV Semaphore IPC object class use IPC::SysV qw(IPC_PRIVATE S_IRWXU IPC_CREAT); use IPC::Semaphore; - + $sem = new IPC::Semaphore(IPC_PRIVATE, 10, S_IRWXU | IPC_CREAT); - + $sem->setall( (0) x 10); - + @sem = $sem->getall; - + $ncnt = $sem->getncnt; - + $zcnt = $sem->getzcnt; - + $ds = $sem->stat; - + $sem->remove; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/SysV.pm b/gnu/usr.bin/perl/ext/IPC/SysV/SysV.pm index eb245937aa4..bebb8fd81bd 100644 --- a/gnu/usr.bin/perl/ext/IPC/SysV/SysV.pm +++ b/gnu/usr.bin/perl/ext/IPC/SysV/SysV.pm @@ -74,11 +74,15 @@ C defines and conditionally exports all the constants defined in your system include files which are needed by the SysV IPC calls. +=over + =item ftok( PATH, ID ) Return a key based on PATH and ID, which can be used as a key for C, C and C. See L +=back + =head1 SEE ALSO L, L, L diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/SysV.xs b/gnu/usr.bin/perl/ext/IPC/SysV/SysV.xs index ecd52702222..38062e028b5 100644 --- a/gnu/usr.bin/perl/ext/IPC/SysV/SysV.xs +++ b/gnu/usr.bin/perl/ext/IPC/SysV/SysV.xs @@ -19,7 +19,7 @@ # endif # include # ifndef HAS_SHMAT_PROTOTYPE - extern Shmat_t shmat _((int, char *, int)); + extern Shmat_t shmat (int, char *, int); # endif # if defined(__sparc__) && (defined(__NetBSD__) || defined(__OpenBSD__)) # undef SHMLBA /* not static: determined at boot time */ @@ -30,7 +30,7 @@ /* Required to get 'struct pte' for SHMLBA on ULTRIX. */ #if defined(__ultrix) || defined(__ultrix__) || defined(ultrix) -# include +#include #endif /* Required in BSDI to get PAGE_SIZE definition for SHMLBA. @@ -69,7 +69,7 @@ PPCODE: sv = *av_fetch(list,1,TRUE); ds.msg_perm.gid = SvIV(sv); sv = *av_fetch(list,4,TRUE); ds.msg_perm.mode = SvIV(sv); sv = *av_fetch(list,6,TRUE); ds.msg_qbytes = SvIV(sv); - ST(0) = sv_2mortal(newSVpv((char *)&ds,sizeof(ds))); + ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds))); XSRETURN(1); #else croak("System V msgxxx is not implemented on this machine"); @@ -185,7 +185,7 @@ PPCODE: ds.sem_otime = SvIV(*sv_ptr); if((sv_ptr = av_fetch(list,7,TRUE)) && (sv = *sv_ptr)) ds.sem_nsems = SvIV(*sv_ptr); - ST(0) = sv_2mortal(newSVpv((char *)&ds,sizeof(ds))); + ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds))); XSRETURN(1); #else croak("System V semxxx is not implemented on this machine"); @@ -203,7 +203,7 @@ ftok(path, id) key_t k = ftok(path, id); ST(0) = k == (key_t) -1 ? &PL_sv_undef : sv_2mortal(newSViv(k)); #else - DIE(no_func, "ftok"); + DIE(PL_no_func, "ftok"); #endif int diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/hints/cygwin.pl b/gnu/usr.bin/perl/ext/IPC/SysV/hints/cygwin.pl new file mode 100644 index 00000000000..e1a1dea217e --- /dev/null +++ b/gnu/usr.bin/perl/ext/IPC/SysV/hints/cygwin.pl @@ -0,0 +1,2 @@ +# SysV IPC is an optional Cygwin package +$self->{LIBS} = ['-lcygipc'] diff --git a/gnu/usr.bin/perl/ext/IPC/SysV/hints/next_3.pl b/gnu/usr.bin/perl/ext/IPC/SysV/hints/next_3.pl new file mode 100644 index 00000000000..2290ac7400d --- /dev/null +++ b/gnu/usr.bin/perl/ext/IPC/SysV/hints/next_3.pl @@ -0,0 +1 @@ +$self->{CCFLAGS} = $Config{ccflags} . ' -D_POSIX_SOURCE' ; diff --git a/gnu/usr.bin/perl/ext/NDBM_File/NDBM_File.xs b/gnu/usr.bin/perl/ext/NDBM_File/NDBM_File.xs index d129a9c4905..49a1db5e565 100644 --- a/gnu/usr.bin/perl/ext/NDBM_File/NDBM_File.xs +++ b/gnu/usr.bin/perl/ext/NDBM_File/NDBM_File.xs @@ -3,39 +3,80 @@ #include "XSUB.h" #include -typedef DBM* NDBM_File; -#define dbm_TIEHASH(dbtype,filename,flags,mode) dbm_open(filename,flags,mode) -#define dbm_FETCH(db,key) dbm_fetch(db,key) -#define dbm_STORE(db,key,value,flags) dbm_store(db,key,value,flags) -#define dbm_DELETE(db,key) dbm_delete(db,key) -#define dbm_FIRSTKEY(db) dbm_firstkey(db) -#define dbm_NEXTKEY(db,key) dbm_nextkey(db) +typedef struct { + DBM * dbp ; + SV * filter_fetch_key ; + SV * filter_store_key ; + SV * filter_fetch_value ; + SV * filter_store_value ; + int filtering ; + } NDBM_File_type; -MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = dbm_ +typedef NDBM_File_type * NDBM_File ; +typedef datum datum_key ; +typedef datum datum_value ; + +#define ckFilter(arg,type,name) \ + if (db->type) { \ + SV * save_defsv ; \ + /* printf("filtering %s\n", name) ;*/ \ + if (db->filtering) \ + croak("recursion detected in %s", name) ; \ + db->filtering = TRUE ; \ + save_defsv = newSVsv(DEFSV) ; \ + sv_setsv(DEFSV, arg) ; \ + PUSHMARK(sp) ; \ + (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \ + sv_setsv(arg, DEFSV) ; \ + sv_setsv(DEFSV, save_defsv) ; \ + SvREFCNT_dec(save_defsv) ; \ + db->filtering = FALSE ; \ + /*printf("end of filtering %s\n", name) ;*/ \ + } + + +MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_ NDBM_File -dbm_TIEHASH(dbtype, filename, flags, mode) +ndbm_TIEHASH(dbtype, filename, flags, mode) char * dbtype char * filename int flags int mode + CODE: + { + DBM * dbp ; + + RETVAL = NULL ; + if (dbp = dbm_open(filename, flags, mode)) { + RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ; + Zero(RETVAL, 1, NDBM_File_type) ; + RETVAL->dbp = dbp ; + } + + } + OUTPUT: + RETVAL void -dbm_DESTROY(db) +ndbm_DESTROY(db) NDBM_File db CODE: - dbm_close(db); + dbm_close(db->dbp); + safefree(db); -datum -dbm_FETCH(db, key) +#define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key) +datum_value +ndbm_FETCH(db, key) NDBM_File db - datum key + datum_key key +#define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags) int -dbm_STORE(db, key, value, flags = DBM_REPLACE) +ndbm_STORE(db, key, value, flags = DBM_REPLACE) NDBM_File db - datum key - datum value + datum_key key + datum_value value int flags CLEANUP: if (RETVAL) { @@ -43,28 +84,85 @@ dbm_STORE(db, key, value, flags = DBM_REPLACE) croak("No write permission to ndbm file"); croak("ndbm store returned %d, errno %d, key \"%s\"", RETVAL,errno,key.dptr); - dbm_clearerr(db); + dbm_clearerr(db->dbp); } +#define ndbm_DELETE(db,key) dbm_delete(db->dbp,key) int -dbm_DELETE(db, key) +ndbm_DELETE(db, key) NDBM_File db - datum key + datum_key key -datum -dbm_FIRSTKEY(db) +#define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp) +datum_key +ndbm_FIRSTKEY(db) NDBM_File db -datum -dbm_NEXTKEY(db, key) +#define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp) +datum_key +ndbm_NEXTKEY(db, key) NDBM_File db - datum key + datum_key key +#define ndbm_error(db) dbm_error(db->dbp) int -dbm_error(db) +ndbm_error(db) NDBM_File db +#define ndbm_clearerr(db) dbm_clearerr(db->dbp) void -dbm_clearerr(db) +ndbm_clearerr(db) + NDBM_File db + + +#define setFilter(type) \ + { \ + if (db->type) \ + RETVAL = sv_mortalcopy(db->type) ; \ + ST(0) = RETVAL ; \ + if (db->type && (code == &PL_sv_undef)) { \ + SvREFCNT_dec(db->type) ; \ + db->type = NULL ; \ + } \ + else if (code) { \ + if (db->type) \ + sv_setsv(db->type, code) ; \ + else \ + db->type = newSVsv(code) ; \ + } \ + } + + + +SV * +filter_fetch_key(db, code) + NDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_key) ; + +SV * +filter_store_key(db, code) + NDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_key) ; + +SV * +filter_fetch_value(db, code) + NDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_value) ; + +SV * +filter_store_value(db, code) NDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_value) ; diff --git a/gnu/usr.bin/perl/ext/NDBM_File/hints/cygwin.pl b/gnu/usr.bin/perl/ext/NDBM_File/hints/cygwin.pl new file mode 100644 index 00000000000..0a4b7628a49 --- /dev/null +++ b/gnu/usr.bin/perl/ext/NDBM_File/hints/cygwin.pl @@ -0,0 +1,2 @@ +# uses GDBM ndbm compatibility feature +$self->{LIBS} = ['-lgdbm']; diff --git a/gnu/usr.bin/perl/ext/NDBM_File/hints/sco.pl b/gnu/usr.bin/perl/ext/NDBM_File/hints/sco.pl new file mode 100644 index 00000000000..f551578197d --- /dev/null +++ b/gnu/usr.bin/perl/ext/NDBM_File/hints/sco.pl @@ -0,0 +1,4 @@ +# SCO ODT 3.2v4.2 has a -ldbm library that is missing dbmclose. +# This system should have a complete library installed as -ldbm.nfs which +# should be used instead (Probably need the networking product add-on) +$self->{LIBS} = ['-lndbm',-e "/usr/lib/libdbm.nfs.a"?'-ldbm.nfs':'-ldbm']; diff --git a/gnu/usr.bin/perl/ext/ODBM_File/hints/cygwin.pl b/gnu/usr.bin/perl/ext/ODBM_File/hints/cygwin.pl new file mode 100644 index 00000000000..a0d33c88076 --- /dev/null +++ b/gnu/usr.bin/perl/ext/ODBM_File/hints/cygwin.pl @@ -0,0 +1,2 @@ +# uses GDBM dbm compatibility feature +$self->{LIBS} = ['-lgdbm']; diff --git a/gnu/usr.bin/perl/ext/ODBM_File/hints/sco.pl b/gnu/usr.bin/perl/ext/ODBM_File/hints/sco.pl index 4664f2bee0f..f551578197d 100644 --- a/gnu/usr.bin/perl/ext/ODBM_File/hints/sco.pl +++ b/gnu/usr.bin/perl/ext/ODBM_File/hints/sco.pl @@ -1,4 +1,4 @@ -# Some versions of SCO contain a broken -ldbm library that is missing -# dbmclose. Some of those might have a fixed library installed as -# -ldbm.nfs. -$self->{LIBS} = ['-ldbm.nfs', '-ldbm']; +# SCO ODT 3.2v4.2 has a -ldbm library that is missing dbmclose. +# This system should have a complete library installed as -ldbm.nfs which +# should be used instead (Probably need the networking product add-on) +$self->{LIBS} = ['-lndbm',-e "/usr/lib/libdbm.nfs.a"?'-ldbm.nfs':'-ldbm']; diff --git a/gnu/usr.bin/perl/ext/ODBM_File/typemap b/gnu/usr.bin/perl/ext/ODBM_File/typemap index 5e12e739338..7c23815ec75 100644 --- a/gnu/usr.bin/perl/ext/ODBM_File/typemap +++ b/gnu/usr.bin/perl/ext/ODBM_File/typemap @@ -2,7 +2,8 @@ #################################### DBM SECTION # -datum T_DATUM +datum_key T_DATUM_K +datum_value T_DATUM_V gdatum T_GDATUM NDBM_File T_PTROBJ GDBM_File T_PTROBJ @@ -13,13 +14,22 @@ DBZ_File T_PTROBJ FATALFUNC T_OPAQUEPTR INPUT -T_DATUM +T_DATUM_K + ckFilter($arg, filter_store_key, \"filter_store_key\"); + $var.dptr = SvPV($arg, PL_na); + $var.dsize = (int)PL_na; +T_DATUM_V + ckFilter($arg, filter_store_value, \"filter_store_value\"); $var.dptr = SvPV($arg, PL_na); $var.dsize = (int)PL_na; T_GDATUM UNIMPLEMENTED OUTPUT -T_DATUM +T_DATUM_K + sv_setpvn($arg, $var.dptr, $var.dsize); + ckFilter($arg, filter_fetch_key,\"filter_fetch_key\"); +T_DATUM_V sv_setpvn($arg, $var.dptr, $var.dsize); + ckFilter($arg, filter_fetch_value,\"filter_fetch_value\"); T_GDATUM sv_usepvn($arg, $var.dptr, $var.dsize); diff --git a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL index d379fdb908e..55c5c1fbf3f 100644 --- a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL +++ b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL @@ -1,7 +1,17 @@ use ExtUtils::MakeMaker; +use Config; +my @libs; +if ($^O ne 'MSWin32') { + if ($Config{archname} =~ /RM\d\d\d-svr4/) { + @libs = ('LIBS' => ["-lm -lc -lposix -lcposix"]); + } + else { + @libs = ('LIBS' => ["-lm -lposix -lcposix"]); + } +} WriteMakefile( NAME => 'POSIX', - ($^O eq 'MSWin32' ? () : (LIBS => ["-lm -lposix -lcposix"])), + @libs, MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'POSIX.pm', diff --git a/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs b/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs index 38eaebf5c5e..a4b90451a9b 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs +++ b/gnu/usr.bin/perl/ext/SDBM_File/SDBM_File.xs @@ -1,15 +1,47 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "sdbm/sdbm.h" -typedef DBM* SDBM_File; +typedef struct { + DBM * dbp ; + SV * filter_fetch_key ; + SV * filter_store_key ; + SV * filter_fetch_value ; + SV * filter_store_value ; + int filtering ; + } SDBM_File_type; + +typedef SDBM_File_type * SDBM_File ; +typedef datum datum_key ; +typedef datum datum_value ; + +#define ckFilter(arg,type,name) \ + if (db->type) { \ + SV * save_defsv ; \ + /* printf("filtering %s\n", name) ;*/ \ + if (db->filtering) \ + croak("recursion detected in %s", name) ; \ + db->filtering = TRUE ; \ + save_defsv = newSVsv(DEFSV) ; \ + sv_setsv(DEFSV, arg) ; \ + PUSHMARK(sp) ; \ + (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \ + sv_setsv(arg, DEFSV) ; \ + sv_setsv(DEFSV, save_defsv) ; \ + SvREFCNT_dec(save_defsv) ; \ + db->filtering = FALSE ; \ + /*printf("end of filtering %s\n", name) ;*/ \ + } + #define sdbm_TIEHASH(dbtype,filename,flags,mode) sdbm_open(filename,flags,mode) -#define sdbm_FETCH(db,key) sdbm_fetch(db,key) -#define sdbm_STORE(db,key,value,flags) sdbm_store(db,key,value,flags) -#define sdbm_DELETE(db,key) sdbm_delete(db,key) -#define sdbm_FIRSTKEY(db) sdbm_firstkey(db) -#define sdbm_NEXTKEY(db,key) sdbm_nextkey(db) +#define sdbm_FETCH(db,key) sdbm_fetch(db->dbp,key) +#define sdbm_STORE(db,key,value,flags) sdbm_store(db->dbp,key,value,flags) +#define sdbm_DELETE(db,key) sdbm_delete(db->dbp,key) +#define sdbm_EXISTS(db,key) sdbm_exists(db->dbp,key) +#define sdbm_FIRSTKEY(db) sdbm_firstkey(db->dbp) +#define sdbm_NEXTKEY(db,key) sdbm_nextkey(db->dbp) MODULE = SDBM_File PACKAGE = SDBM_File PREFIX = sdbm_ @@ -20,23 +52,46 @@ sdbm_TIEHASH(dbtype, filename, flags, mode) char * filename int flags int mode + CODE: + { + DBM * dbp ; + + RETVAL = NULL ; + if (dbp = sdbm_open(filename,flags,mode) ) { + RETVAL = (SDBM_File)safemalloc(sizeof(SDBM_File_type)) ; + Zero(RETVAL, 1, SDBM_File_type) ; + RETVAL->dbp = dbp ; + } + + } + OUTPUT: + RETVAL void sdbm_DESTROY(db) SDBM_File db CODE: - sdbm_close(db); + sdbm_close(db->dbp); + if (db->filter_fetch_key) + SvREFCNT_dec(db->filter_fetch_key) ; + if (db->filter_store_key) + SvREFCNT_dec(db->filter_store_key) ; + if (db->filter_fetch_value) + SvREFCNT_dec(db->filter_fetch_value) ; + if (db->filter_store_value) + SvREFCNT_dec(db->filter_store_value) ; + safefree(db) ; -datum +datum_value sdbm_FETCH(db, key) SDBM_File db - datum key + datum_key key int sdbm_STORE(db, key, value, flags = DBM_REPLACE) SDBM_File db - datum key - datum value + datum_key key + datum_value value int flags CLEANUP: if (RETVAL) { @@ -44,28 +99,93 @@ sdbm_STORE(db, key, value, flags = DBM_REPLACE) croak("No write permission to sdbm file"); croak("sdbm store returned %d, errno %d, key \"%s\"", RETVAL,errno,key.dptr); - sdbm_clearerr(db); + sdbm_clearerr(db->dbp); } int sdbm_DELETE(db, key) SDBM_File db - datum key + datum_key key -datum +int +sdbm_EXISTS(db,key) + SDBM_File db + datum_key key + +datum_key sdbm_FIRSTKEY(db) SDBM_File db -datum +datum_key sdbm_NEXTKEY(db, key) SDBM_File db - datum key + datum_key key int sdbm_error(db) SDBM_File db + CODE: + RETVAL = sdbm_error(db->dbp) ; + OUTPUT: + RETVAL int sdbm_clearerr(db) SDBM_File db + CODE: + RETVAL = sdbm_clearerr(db->dbp) ; + OUTPUT: + RETVAL + + +#define setFilter(type) \ + { \ + if (db->type) \ + RETVAL = sv_mortalcopy(db->type) ; \ + ST(0) = RETVAL ; \ + if (db->type && (code == &PL_sv_undef)) { \ + SvREFCNT_dec(db->type) ; \ + db->type = NULL ; \ + } \ + else if (code) { \ + if (db->type) \ + sv_setsv(db->type, code) ; \ + else \ + db->type = newSVsv(code) ; \ + } \ + } + + + +SV * +filter_fetch_key(db, code) + SDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_key) ; + +SV * +filter_store_key(db, code) + SDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_key) ; + +SV * +filter_fetch_value(db, code) + SDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_fetch_value) ; + +SV * +filter_store_value(db, code) + SDBM_File db + SV * code + SV * RETVAL = &PL_sv_undef ; + CODE: + setFilter(filter_store_value) ; diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/README.too b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/README.too index c2d095944da..1fec3156ddc 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/README.too +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/README.too @@ -7,3 +7,8 @@ Fri Apr 15 10:15:30 EDT 1994. Additional portability/configuration changes for libsdbm by Andy Dougherty doughera@lafcol.lafayette.edu. + + +Mon Mar 22 03:24:47 PST 1999. + +sdbm_exists added to the library by Russ Allbery . diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dba.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dba.c index 05e70c8961c..74067763985 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dba.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dba.c @@ -11,8 +11,7 @@ char *progname; extern void oops(); int -main(argc, argv) -char **argv; +main(int argc, char **argv) { int n; char *p; @@ -23,6 +22,9 @@ char **argv; if (p = argv[1]) { name = (char *) malloc((n = strlen(p)) + 5); + if (!name) + oops("cannot get memory"); + strcpy(name, p); strcpy(name + n, ".pag"); @@ -37,8 +39,8 @@ char **argv; return 0; } -sdump(pagf) -int pagf; +void +sdump(int pagf) { register b; register n = 0; @@ -67,8 +69,8 @@ int pagf; oops("read failed: block %d", n); } -pagestat(pag) -char *pag; +int +pagestat(char *pag) { register n; register free; diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbd.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbd.c index 04ab842e2d6..0a58d9a0f43 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbd.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbd.c @@ -14,8 +14,7 @@ extern void oops(); #define empty(page) (((short *) page)[0] == 0) int -main(argc, argv) -char **argv; +main(int argc, char **argv) { int n; char *p; @@ -26,6 +25,9 @@ char **argv; if (p = argv[1]) { name = (char *) malloc((n = strlen(p)) + 5); + if (!name) + oops("cannot get memory"); + strcpy(name, p); strcpy(name + n, ".pag"); @@ -39,8 +41,8 @@ char **argv; return 0; } -sdump(pagf) -int pagf; +void +sdump(int pagf) { register r; register n = 0; @@ -65,8 +67,8 @@ int pagf; #ifdef OLD -dispage(pag) -char *pag; +int +dispage(char *pag) { register i, n; register off; @@ -87,8 +89,8 @@ char *pag; } } #else -dispage(pag) -char *pag; +void +dispage(char *pag) { register i, n; register off; diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbe.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbe.c index 2a306f276ec..166e64efdf2 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbe.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbe.c @@ -52,10 +52,7 @@ char *optarg; /* Global argument pointer. */ #endif char -getopt(argc, argv, optstring) -int argc; -char **argv; -char *optstring; +getopt(int argc, char **argv, char *optstring) { register int c; register char *place; @@ -131,14 +128,13 @@ char *optstring; void -print_datum(db) -datum db; +print_datum(datum db) { int i; putchar('"'); for (i = 0; i < db.dsize; i++) { - if (isprint(db.dptr[i])) + if (isprint((unsigned char)db.dptr[i])) putchar(db.dptr[i]); else { putchar('\\'); @@ -152,8 +148,7 @@ datum db; datum -read_datum(s) -char *s; +read_datum(char *s) { datum db; char *p; @@ -161,6 +156,9 @@ char *s; db.dsize = 0; db.dptr = (char *) malloc(strlen(s) * sizeof(char)); + if (!db.dptr) + oops("cannot get memory"); + for (p = db.dptr; *s != '\0'; p++, db.dsize++, s++) { if (*s == '\\') { if (*++s == 'n') @@ -171,7 +169,10 @@ char *s; *p = '\f'; else if (*s == 't') *p = '\t'; - else if (isdigit(*s) && isdigit(*(s + 1)) && isdigit(*(s + 2))) { + else if (isdigit((unsigned char)*s) + && isdigit((unsigned char)*(s + 1)) + && isdigit((unsigned char)*(s + 2))) + { i = (*s++ - '0') << 6; i |= (*s++ - '0') << 3; i |= *s - '0'; @@ -191,22 +192,21 @@ char *s; char * -key2s(db) -datum db; +key2s(datum db) { char *buf; char *p1, *p2; buf = (char *) malloc((db.dsize + 1) * sizeof(char)); + if (!buf) + oops("cannot get memory"); for (p1 = buf, p2 = db.dptr; *p2 != '\0'; *p1++ = *p2++); *p1 = '\0'; return buf; } - -main(argc, argv) -int argc; -char **argv; +int +main(int argc, char **argv) { typedef enum { YOW, FETCH, STORE, DELETE, SCAN, REGEXP @@ -285,7 +285,7 @@ char **argv; } } - if (giveusage | what == YOW | argn < 1) { + if (giveusage || what == YOW || argn < 1) { fprintf(stderr, "Usage: %s databse [-m r|w|rw] [-crtx] -a|-d|-f|-F|-s [key [content]]\n", argv[0]); exit(-1); } diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbm.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbm.c index 1388230e2d3..dc47d7001de 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbm.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbm.c @@ -27,8 +27,8 @@ static DBM *cur_db = NODB; static char no_db[] = "dbm: no open database\n"; -dbminit(file) - char *file; +int +dbminit(char *file) { if (cur_db != NODB) dbm_close(cur_db); @@ -43,8 +43,7 @@ dbminit(file) } long -forder(key) -datum key; +forder(datum key) { if (cur_db == NODB) { printf(no_db); @@ -54,8 +53,7 @@ datum key; } datum -fetch(key) -datum key; +fetch(datum key) { datum item; @@ -67,8 +65,8 @@ datum key; return (dbm_fetch(cur_db, key)); } -delete(key) -datum key; +int +delete(datum key) { if (cur_db == NODB) { printf(no_db); @@ -79,8 +77,8 @@ datum key; return (dbm_delete(cur_db, key)); } -store(key, dat) -datum key, dat; +int +store(datum key, datum dat) { if (cur_db == NODB) { printf(no_db); @@ -93,7 +91,7 @@ datum key, dat; } datum -firstkey() +firstkey(void) { datum item; @@ -106,8 +104,7 @@ firstkey() } datum -nextkey(key) -datum key; +nextkey(datum key) { datum item; diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbu.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbu.c index a3c0004da9f..e68b78de44e 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbu.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm/dbu.c @@ -65,9 +65,7 @@ static cmd *parse(); static void badk(), doit(), prdatum(); int -main(argc, argv) -int argc; -char *argv[]; +main(int argc, char **argv) { int c; register cmd *act; @@ -98,9 +96,7 @@ char *argv[]; } static void -doit(act, file) -register cmd *act; -char *file; +doit(register cmd *act, char *file) { datum key; datum val; @@ -197,8 +193,7 @@ char *file; } static void -badk(word) -char *word; +badk(char *word) { register int i; @@ -214,8 +209,7 @@ char *word; } static cmd * -parse(str) -register char *str; +parse(register char *str) { register int i = CTABSIZ; register cmd *p; @@ -227,9 +221,7 @@ register char *str; } static void -prdatum(stream, d) -FILE *stream; -datum d; +prdatum(FILE *stream, datum d) { register int c; register char *p = d.dptr; diff --git a/gnu/usr.bin/perl/ext/Socket/Makefile.PL b/gnu/usr.bin/perl/ext/Socket/Makefile.PL index 3819143ac0e..339c45a0a1a 100644 --- a/gnu/usr.bin/perl/ext/Socket/Makefile.PL +++ b/gnu/usr.bin/perl/ext/Socket/Makefile.PL @@ -1,7 +1,9 @@ use ExtUtils::MakeMaker; +use Config; WriteMakefile( - NAME => 'Socket', + NAME => 'Socket', VERSION_FROM => 'Socket.pm', - MAN3PODS => {}, # Pods will be built by installman. - XSPROTOARG => '-noprototypes', # XXX remove later? + ($Config{libs} =~ /(-lsocks\S*)/ ? (LIBS => [ "$1" ] ) : ()), + MAN3PODS => {}, # Pods will be built by installman. + XSPROTOARG => '-noprototypes', # XXX remove later? ); diff --git a/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.pm b/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.pm new file mode 100644 index 00000000000..1efc897c3b9 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.pm @@ -0,0 +1,153 @@ +package Sys::Hostname; + +use strict; + +use Carp; + +require Exporter; +use XSLoader (); +require AutoLoader; + +our @ISA = qw/ Exporter AutoLoader /; +our @EXPORT = qw/ hostname /; + +our $VERSION = '1.1'; + +our $host; + +XSLoader::load 'Sys::Hostname', $VERSION; + +sub hostname { + + # method 1 - we already know it + return $host if defined $host; + + # method 1' - try to ask the system + $host = ghname(); + return $host if defined $host; + + if ($^O eq 'VMS') { + + # method 2 - no sockets ==> return DECnet node name + eval { local $SIG{__DIE__}; $host = (gethostbyname('me'))[0] }; + if ($@) { return $host = $ENV{'SYS$NODE'}; } + + # method 3 - has someone else done the job already? It's common for the + # TCP/IP stack to advertise the hostname via a logical name. (Are + # there any other logicals which TCP/IP stacks use for the host name?) + $host = $ENV{'ARPANET_HOST_NAME'} || $ENV{'INTERNET_HOST_NAME'} || + $ENV{'MULTINET_HOST_NAME'} || $ENV{'UCX$INET_HOST'} || + $ENV{'TCPWARE_DOMAINNAME'} || $ENV{'NEWS_ADDRESS'}; + return $host if $host; + + # method 4 - does hostname happen to work? + my($rslt) = `hostname`; + if ($rslt !~ /IVVERB/) { ($host) = $rslt =~ /^(\S+)/; } + return $host if $host; + + # rats! + $host = ''; + Carp::croak "Cannot get host name of local machine"; + + } + elsif ($^O eq 'MSWin32') { + ($host) = gethostbyname('localhost'); + chomp($host = `hostname 2> NUL`) unless defined $host; + return $host; + } + elsif ($^O eq 'epoc') { + $host = 'localhost'; + return $host; + } + else { # Unix + # is anyone going to make it here? + + # method 2 - syscall is preferred since it avoids tainting problems + # XXX: is it such a good idea to return hostname untainted? + eval { + local $SIG{__DIE__}; + require "syscall.ph"; + $host = "\0" x 65; ## preload scalar + syscall(&SYS_gethostname, $host, 65) == 0; + } + + # method 2a - syscall using systeminfo instead of gethostname + # -- needed on systems like Solaris + || eval { + local $SIG{__DIE__}; + require "sys/syscall.ph"; + require "sys/systeminfo.ph"; + $host = "\0" x 65; ## preload scalar + syscall(&SYS_systeminfo, &SI_HOSTNAME, $host, 65) != -1; + } + + # method 3 - trusty old hostname command + || eval { + local $SIG{__DIE__}; + local $SIG{CHLD}; + $host = `(hostname) 2>/dev/null`; # bsdish + } + + # method 4 - use POSIX::uname(), which strictly can't be expected to be + # correct + || eval { + local $SIG{__DIE__}; + require POSIX; + $host = (POSIX::uname())[1]; + } + + # method 5 - sysV uname command (may truncate) + || eval { + local $SIG{__DIE__}; + $host = `uname -n 2>/dev/null`; ## sysVish + } + + # method 6 - Apollo pre-SR10 + || eval { + local $SIG{__DIE__}; + my($a,$b,$c,$d); + ($host,$a,$b,$c,$d)=split(/[:\. ]/,`/com/host`,6); + } + + # bummer + || Carp::croak "Cannot get host name of local machine"; + + # remove garbage + $host =~ tr/\0\r\n//d; + $host; + } +} + +1; + +__END__ + +=head1 NAME + +Sys::Hostname - Try every conceivable way to get hostname + +=head1 SYNOPSIS + + use Sys::Hostname; + $host = hostname; + +=head1 DESCRIPTION + +Attempts several methods of getting the system hostname and +then caches the result. It tries the first available of the C +library's gethostname(), C<`$Config{aphostname}`>, uname(2), +C, C<`hostname`>, C<`uname -n`>, +and the file F. If all that fails it Cs. + +All NULs, returns, and newlines are removed from the result. + +=head1 AUTHOR + +David Sundstrom EFE + +Texas Instruments + +XS code added by Greg Bacon EFE + +=cut + diff --git a/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.xs b/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.xs new file mode 100644 index 00000000000..f1043837e9f --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Hostname/Hostname.xs @@ -0,0 +1,76 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#if defined(I_UNISTD) && defined(HAS_GETHOSTNAME) +# include +#endif + +/* a reasonable default */ +#ifndef MAXHOSTNAMELEN +# define MAXHOSTNAMELEN 256 +#endif + +/* swiped from POSIX.xs */ +#if defined(__VMS) && !defined(__POSIX_SOURCE) +# if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000) +# include +# endif +#endif + +#ifdef I_SYSUTSNAME +# include +#endif + +MODULE = Sys::Hostname PACKAGE = Sys::Hostname + +void +ghname() + PREINIT: + IV retval = -1; + SV *sv; + PPCODE: + EXTEND(SP, 1); +#ifdef HAS_GETHOSTNAME + { + char tmps[MAXHOSTNAMELEN]; + retval = PerlSock_gethostname(tmps, sizeof(tmps)); + sv = newSVpvn(tmps, strlen(tmps)); + } +#else +# ifdef HAS_PHOSTNAME + { + PerlIO *io; + char tmps[MAXHOSTNAMELEN]; + char *p = tmps; + char c; + io = PerlProc_popen(PHOSTNAME, "r"); + if (!io) + goto check_out; + while (PerlIO_read(io, &c, sizeof(c)) == 1) { + if (isSPACE(c) || p - tmps >= sizeof(tmps)) + break; + *p++ = c; + } + PerlProc_pclose(io); + *p = '\0'; + retval = 0; + sv = newSVpvn(tmps, strlen(tmps)); + } +# else +# ifdef HAS_UNAME + { + struct utsname u; + if (PerlEnv_uname(&u) == -1) + goto check_out; + sv = newSVpvn(u.nodename, strlen(u.nodename)); + retval = 0; + } +# endif +# endif +#endif + check_out: + if (retval == -1) + XSRETURN_UNDEF; + else + PUSHs(sv_2mortal(sv)); diff --git a/gnu/usr.bin/perl/ext/Sys/Hostname/Makefile.PL b/gnu/usr.bin/perl/ext/Sys/Hostname/Makefile.PL new file mode 100644 index 00000000000..a0892f643e5 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Hostname/Makefile.PL @@ -0,0 +1,8 @@ +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'Sys::Hostname', + VERSION_FROM => 'Hostname.pm', + MAN3PODS => {}, # Pods will be built by installman. + XSPROTOARG => '-noprototypes', +); diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/Makefile.PL b/gnu/usr.bin/perl/ext/Sys/Syslog/Makefile.PL new file mode 100644 index 00000000000..e5edf3e1ba7 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Syslog/Makefile.PL @@ -0,0 +1,8 @@ +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'Sys::Syslog', + VERSION_FROM => 'Syslog.pm', + MAN3PODS => {}, # Pods will be built by installman. + XSPROTOARG => '-noprototypes', +); diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.pm b/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.pm new file mode 100644 index 00000000000..2a91354e879 --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.pm @@ -0,0 +1,294 @@ +package Sys::Syslog; +require 5.000; +require Exporter; +require DynaLoader; +use Carp; + +@ISA = qw(Exporter DynaLoader); +@EXPORT = qw(openlog closelog setlogmask syslog); +@EXPORT_OK = qw(setlogsock); +$VERSION = '0.01'; + +use Socket; +use Sys::Hostname; + +# adapted from syslog.pl +# +# Tom Christiansen +# modified to use sockets by Larry Wall +# NOTE: openlog now takes three arguments, just like openlog(3) +# Modified to add UNIX domain sockets by Sean Robinson +# with support from Tim Bunce and the perl5-porters mailing list +# Modified to use an XS backend instead of syslog.ph by Tom Hughes + +# Todo: enable connect to try all three types before failing (auto setlogsock)? + +=head1 NAME + +Sys::Syslog, openlog, closelog, setlogmask, syslog - Perl interface to the UNIX syslog(3) calls + +=head1 SYNOPSIS + + use Sys::Syslog; # all except setlogsock, or: + use Sys::Syslog qw(:DEFAULT setlogsock); # default set, plus setlogsock + + setlogsock $sock_type; + openlog $ident, $logopt, $facility; + syslog $priority, $format, @args; + $oldmask = setlogmask $mask_priority; + closelog; + +=head1 DESCRIPTION + +Sys::Syslog is an interface to the UNIX C program. +Call C with a string priority and a list of C args +just like C. + +Syslog provides the functions: + +=over + +=item openlog $ident, $logopt, $facility + +I<$ident> is prepended to every message. +I<$logopt> contains zero or more of the words I, I, I, I. +I<$facility> specifies the part of the system + +=item syslog $priority, $format, @args + +If I<$priority> permits, logs I<($format, @args)> +printed as by C, with the addition that I<%m> +is replaced with C<"$!"> (the latest error message). + +=item setlogmask $mask_priority + +Sets log mask I<$mask_priority> and returns the old mask. + +=item setlogsock $sock_type (added in 5.004_02) + +Sets the socket type to be used for the next call to +C or C and returns TRUE on success, +undef on failure. + +A value of 'unix' will connect to the UNIX domain socket returned by +C<_PATH_LOG> in F. A value of 'inet' will connect to an +INET socket returned by getservbyname(). Any other value croaks. + +The default is for the INET socket to be used. + +=item closelog + +Closes the log file. + +=back + +Note that C now takes three arguments, just like C. + +=head1 EXAMPLES + + openlog($program, 'cons,pid', 'user'); + syslog('info', 'this is another test'); + syslog('mail|warning', 'this is a better test: %d', time); + closelog(); + + syslog('debug', 'this is the last test'); + + setlogsock('unix'); + openlog("$program $$", 'ndelay', 'user'); + syslog('notice', 'fooprogram: this is really done'); + + setlogsock('inet'); + $! = 55; + syslog('info', 'problem was %m'); # %m == $! in syslog(3) + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Tom Christiansen EFE and Larry Wall EFE. +UNIX domain sockets added by Sean Robinson EFE +with support from Tim Bunce and the perl5-porters mailing list. +Dependency on F replaced with XS code bu Tom Hughes EFE. + +=cut + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. + + my $constname; + our $AUTOLOAD; + ($constname = $AUTOLOAD) =~ s/.*:://; + croak "& not defined" if $constname eq 'constant'; + my $val = constant($constname); + if ($! != 0) { + croak "Your vendor has not defined Sys::Syslog macro $constname"; + } + *$AUTOLOAD = sub { $val }; + goto &$AUTOLOAD; +} + +bootstrap Sys::Syslog $VERSION; + +$maskpri = &LOG_UPTO(&LOG_DEBUG); + +sub openlog { + ($ident, $logopt, $facility) = @_; # package vars + $lo_pid = $logopt =~ /\bpid\b/; + $lo_ndelay = $logopt =~ /\bndelay\b/; + $lo_cons = $logopt =~ /\bcons\b/; + $lo_nowait = $logopt =~ /\bnowait\b/; + return 1 unless $lo_ndelay; + &connect; +} + +sub closelog { + $facility = $ident = ''; + &disconnect; +} + +sub setlogmask { + local($oldmask) = $maskpri; + $maskpri = shift; + $oldmask; +} + +sub setlogsock { + local($setsock) = shift; + &disconnect if $connected; + if (lc($setsock) eq 'unix') { + if (defined &_PATH_LOG) { + $sock_type = 1; + } else { + return undef; + } + } elsif (lc($setsock) eq 'inet') { + if (getservbyname('syslog','udp')) { + undef($sock_type); + } else { + return undef; + } + } else { + croak "Invalid argument passed to setlogsock; must be 'unix' or 'inet'"; + } + return 1; +} + +sub syslog { + local($priority) = shift; + local($mask) = shift; + local($message, $whoami); + local(@words, $num, $numpri, $numfac, $sum); + local($facility) = $facility; # may need to change temporarily. + + croak "syslog: expected both priority and mask" unless $mask && $priority; + + @words = split(/\W+/, $priority, 2);# Allow "level" or "level|facility". + undef $numpri; + undef $numfac; + foreach (@words) { + $num = &xlate($_); # Translate word to number. + if (/^kern$/ || $num < 0) { + croak "syslog: invalid level/facility: $_"; + } + elsif ($num <= &LOG_PRIMASK) { + croak "syslog: too many levels given: $_" if defined($numpri); + $numpri = $num; + return 0 unless &LOG_MASK($numpri) & $maskpri; + } + else { + croak "syslog: too many facilities given: $_" if defined($numfac); + $facility = $_; + $numfac = $num; + } + } + + croak "syslog: level must be given" unless defined($numpri); + + if (!defined($numfac)) { # Facility not specified in this call. + $facility = 'user' unless $facility; + $numfac = &xlate($facility); + } + + &connect unless $connected; + + $whoami = $ident; + + if (!$whoami && $mask =~ /^(\S.*?):\s?(.*)/) { + $whoami = $1; + $mask = $2; + } + + unless ($whoami) { + ($whoami = getlogin) || + ($whoami = getpwuid($<)) || + ($whoami = 'syslog'); + } + + $whoami .= "[$$]" if $lo_pid; + + $mask =~ s/%m/$!/g; + $mask .= "\n" unless $mask =~ /\n$/; + $message = sprintf ($mask, @_); + + $sum = $numpri + $numfac; + unless (send(SYSLOG,"<$sum>$whoami: $message\0",0)) { + if ($lo_cons) { + if ($pid = fork) { + unless ($lo_nowait) { + $died = waitpid($pid, 0); + } + } + else { + if (open(CONS,">/dev/console")) { + print CONS "<$facility.$priority>$whoami: $message\r"; + exit if defined $pid; # if fork failed, we're parent + close CONS; + } + } + } + } +} + +sub xlate { + local($name) = @_; + $name = uc $name; + $name = "LOG_$name" unless $name =~ /^LOG_/; + $name = "Sys::Syslog::$name"; + eval { &$name } || -1; +} + +sub connect { + unless ($host) { + require Sys::Hostname; + my($host_uniq) = Sys::Hostname::hostname(); + ($host) = $host_uniq =~ /([A-Za-z0-9_.-]+)/; # allow FQDN (inc _) + } + unless ( $sock_type ) { + my $udp = getprotobyname('udp'); + my $syslog = getservbyname('syslog','udp'); + my $this = sockaddr_in($syslog, INADDR_ANY); + my $that = sockaddr_in($syslog, inet_aton($host) || croak "Can't lookup $host"); + socket(SYSLOG,AF_INET,SOCK_DGRAM,$udp) || croak "socket: $!"; + connect(SYSLOG,$that) || croak "connect: $!"; + } else { + my $syslog = &_PATH_LOG || croak "_PATH_LOG not found in syslog.ph"; + my $that = sockaddr_un($syslog) || croak "Can't locate $syslog"; + socket(SYSLOG,AF_UNIX,SOCK_STREAM,0) || croak "socket: $!"; + if (!connect(SYSLOG,$that)) { + socket(SYSLOG,AF_UNIX,SOCK_DGRAM,0) || croak "socket: $!"; + connect(SYSLOG,$that) || croak "connect: $! (SOCK_DGRAM after trying SOCK_STREAM)"; + } + } + local($old) = select(SYSLOG); $| = 1; select($old); + $connected = 1; +} + +sub disconnect { + close SYSLOG; + $connected = 0; +} + +1; diff --git a/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.xs b/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.xs new file mode 100644 index 00000000000..f0573b8109a --- /dev/null +++ b/gnu/usr.bin/perl/ext/Sys/Syslog/Syslog.xs @@ -0,0 +1,642 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#ifdef I_SYSLOG +#include +#endif + +static double +constant_LOG_NO(char *name, int len) +{ + switch (name[6 + 0]) { + case 'T': + if (strEQ(name + 6, "TICE")) { /* LOG_NO removed */ +#ifdef LOG_NOTICE + return LOG_NOTICE; +#else + goto not_there; +#endif + } + case 'W': + if (strEQ(name + 6, "WAIT")) { /* LOG_NO removed */ +#ifdef LOG_NOWAIT + return LOG_NOWAIT; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_N(char *name, int len) +{ + switch (name[5 + 0]) { + case 'D': + if (strEQ(name + 5, "DELAY")) { /* LOG_N removed */ +#ifdef LOG_NDELAY + return LOG_NDELAY; +#else + goto not_there; +#endif + } + case 'E': + if (strEQ(name + 5, "EWS")) { /* LOG_N removed */ +#ifdef LOG_NEWS + return LOG_NEWS; +#else + goto not_there; +#endif + } + case 'F': + if (strEQ(name + 5, "FACILITIES")) { /* LOG_N removed */ +#ifdef LOG_NFACILITIES + return LOG_NFACILITIES; +#else + goto not_there; +#endif + } + case 'O': + return constant_LOG_NO(name, len); + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_P(char *name, int len) +{ + switch (name[5 + 0]) { + case 'I': + if (strEQ(name + 5, "ID")) { /* LOG_P removed */ +#ifdef LOG_PID + return LOG_PID; +#else + goto not_there; +#endif + } + case 'R': + if (strEQ(name + 5, "RIMASK")) { /* LOG_P removed */ +#ifdef LOG_PRIMASK + return LOG_PRIMASK; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_AU(char *name, int len) +{ + if (6 + 2 >= len ) { + errno = EINVAL; + return 0; + } + switch (name[6 + 2]) { + case '\0': + if (strEQ(name + 6, "TH")) { /* LOG_AU removed */ +#ifdef LOG_AUTH + return LOG_AUTH; +#else + goto not_there; +#endif + } + case 'P': + if (strEQ(name + 6, "THPRIV")) { /* LOG_AU removed */ +#ifdef LOG_AUTHPRIV + return LOG_AUTHPRIV; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_A(char *name, int len) +{ + switch (name[5 + 0]) { + case 'L': + if (strEQ(name + 5, "LERT")) { /* LOG_A removed */ +#ifdef LOG_ALERT + return LOG_ALERT; +#else + goto not_there; +#endif + } + case 'U': + return constant_LOG_AU(name, len); + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_CR(char *name, int len) +{ + switch (name[6 + 0]) { + case 'I': + if (strEQ(name + 6, "IT")) { /* LOG_CR removed */ +#ifdef LOG_CRIT + return LOG_CRIT; +#else + goto not_there; +#endif + } + case 'O': + if (strEQ(name + 6, "ON")) { /* LOG_CR removed */ +#ifdef LOG_CRON + return LOG_CRON; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_C(char *name, int len) +{ + switch (name[5 + 0]) { + case 'O': + if (strEQ(name + 5, "ONS")) { /* LOG_C removed */ +#ifdef LOG_CONS + return LOG_CONS; +#else + goto not_there; +#endif + } + case 'R': + return constant_LOG_CR(name, len); + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_D(char *name, int len) +{ + switch (name[5 + 0]) { + case 'A': + if (strEQ(name + 5, "AEMON")) { /* LOG_D removed */ +#ifdef LOG_DAEMON + return LOG_DAEMON; +#else + goto not_there; +#endif + } + case 'E': + if (strEQ(name + 5, "EBUG")) { /* LOG_D removed */ +#ifdef LOG_DEBUG + return LOG_DEBUG; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_U(char *name, int len) +{ + switch (name[5 + 0]) { + case 'S': + if (strEQ(name + 5, "SER")) { /* LOG_U removed */ +#ifdef LOG_USER + return LOG_USER; +#else + goto not_there; +#endif + } + case 'U': + if (strEQ(name + 5, "UCP")) { /* LOG_U removed */ +#ifdef LOG_UUCP + return LOG_UUCP; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_E(char *name, int len) +{ + switch (name[5 + 0]) { + case 'M': + if (strEQ(name + 5, "MERG")) { /* LOG_E removed */ +#ifdef LOG_EMERG + return LOG_EMERG; +#else + goto not_there; +#endif + } + case 'R': + if (strEQ(name + 5, "RR")) { /* LOG_E removed */ +#ifdef LOG_ERR + return LOG_ERR; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_F(char *name, int len) +{ + switch (name[5 + 0]) { + case 'A': + if (strEQ(name + 5, "ACMASK")) { /* LOG_F removed */ +#ifdef LOG_FACMASK + return LOG_FACMASK; +#else + goto not_there; +#endif + } + case 'T': + if (strEQ(name + 5, "TP")) { /* LOG_F removed */ +#ifdef LOG_FTP + return LOG_FTP; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_LO(char *name, int len) +{ + if (6 + 3 >= len ) { + errno = EINVAL; + return 0; + } + switch (name[6 + 3]) { + case '0': + if (strEQ(name + 6, "CAL0")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL0 + return LOG_LOCAL0; +#else + goto not_there; +#endif + } + case '1': + if (strEQ(name + 6, "CAL1")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL1 + return LOG_LOCAL1; +#else + goto not_there; +#endif + } + case '2': + if (strEQ(name + 6, "CAL2")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL2 + return LOG_LOCAL2; +#else + goto not_there; +#endif + } + case '3': + if (strEQ(name + 6, "CAL3")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL3 + return LOG_LOCAL3; +#else + goto not_there; +#endif + } + case '4': + if (strEQ(name + 6, "CAL4")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL4 + return LOG_LOCAL4; +#else + goto not_there; +#endif + } + case '5': + if (strEQ(name + 6, "CAL5")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL5 + return LOG_LOCAL5; +#else + goto not_there; +#endif + } + case '6': + if (strEQ(name + 6, "CAL6")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL6 + return LOG_LOCAL6; +#else + goto not_there; +#endif + } + case '7': + if (strEQ(name + 6, "CAL7")) { /* LOG_LO removed */ +#ifdef LOG_LOCAL7 + return LOG_LOCAL7; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant_LOG_L(char *name, int len) +{ + switch (name[5 + 0]) { + case 'F': + if (strEQ(name + 5, "FMT")) { /* LOG_L removed */ +#ifdef LOG_LFMT + return LOG_LFMT; +#else + goto not_there; +#endif + } + case 'O': + return constant_LOG_LO(name, len); + case 'P': + if (strEQ(name + 5, "PR")) { /* LOG_L removed */ +#ifdef LOG_LPR + return LOG_LPR; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +static double +constant(char *name, int len) +{ + errno = 0; + if (0 + 4 >= len ) { + errno = EINVAL; + return 0; + } + switch (name[0 + 4]) { + case 'A': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_A(name, len); + case 'C': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_C(name, len); + case 'D': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_D(name, len); + case 'E': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_E(name, len); + case 'F': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_F(name, len); + case 'I': + if (strEQ(name + 0, "LOG_INFO")) { /* removed */ +#ifdef LOG_INFO + return LOG_INFO; +#else + goto not_there; +#endif + } + case 'K': + if (strEQ(name + 0, "LOG_KERN")) { /* removed */ +#ifdef LOG_KERN + return LOG_KERN; +#else + goto not_there; +#endif + } + case 'L': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_L(name, len); + case 'M': + if (strEQ(name + 0, "LOG_MAIL")) { /* removed */ +#ifdef LOG_MAIL + return LOG_MAIL; +#else + goto not_there; +#endif + } + case 'N': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_N(name, len); + case 'O': + if (strEQ(name + 0, "LOG_ODELAY")) { /* removed */ +#ifdef LOG_ODELAY + return LOG_ODELAY; +#else + goto not_there; +#endif + } + case 'P': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_P(name, len); + case 'S': + if (strEQ(name + 0, "LOG_SYSLOG")) { /* removed */ +#ifdef LOG_SYSLOG + return LOG_SYSLOG; +#else + goto not_there; +#endif + } + case 'U': + if (!strnEQ(name + 0,"LOG_", 4)) + break; + return constant_LOG_U(name, len); + case 'W': + if (strEQ(name + 0, "LOG_WARNING")) { /* removed */ +#ifdef LOG_WARNING + return LOG_WARNING; +#else + goto not_there; +#endif + } + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + + +MODULE = Sys::Syslog PACKAGE = Sys::Syslog + +char * +_PATH_LOG() + CODE: +#ifdef _PATH_LOG + RETVAL = _PATH_LOG; +#else + croak("Your vendor has not defined the Sys::Syslog macro _PATH_LOG"); + RETVAL = NULL; +#endif + OUTPUT: + RETVAL + +int +LOG_FAC(p) + INPUT: + int p + CODE: +#ifdef LOG_FAC + RETVAL = LOG_FAC(p); +#else + croak("Your vendor has not defined the Sys::Syslog macro LOG_FAC"); + RETVAL = -1; +#endif + OUTPUT: + RETVAL + +int +LOG_PRI(p) + INPUT: + int p + CODE: +#ifdef LOG_PRI + RETVAL = LOG_PRI(p); +#else + croak("Your vendor has not defined the Sys::Syslog macro LOG_PRI"); + RETVAL = -1; +#endif + OUTPUT: + RETVAL + +int +LOG_MAKEPRI(fac,pri) + INPUT: + int fac + int pri + CODE: +#ifdef LOG_MAKEPRI + RETVAL = LOG_MAKEPRI(fac,pri); +#else + croak("Your vendor has not defined the Sys::Syslog macro LOG_MAKEPRI"); + RETVAL = -1; +#endif + OUTPUT: + RETVAL + +int +LOG_MASK(pri) + INPUT: + int pri + CODE: +#ifdef LOG_MASK + RETVAL = LOG_MASK(pri); +#else + croak("Your vendor has not defined the Sys::Syslog macro LOG_MASK"); + RETVAL = -1; +#endif + OUTPUT: + RETVAL + +int +LOG_UPTO(pri) + INPUT: + int pri + CODE: +#ifdef LOG_UPTO + RETVAL = LOG_UPTO(pri); +#else + croak("Your vendor has not defined the Sys::Syslog macro LOG_UPTO"); + RETVAL = -1; +#endif + OUTPUT: + RETVAL + + +double +constant(sv) + PREINIT: + STRLEN len; + INPUT: + SV * sv + char * s = SvPV(sv, len); + CODE: + RETVAL = constant(s,len); + OUTPUT: + RETVAL + diff --git a/gnu/usr.bin/perl/ext/Thread/Thread.pm b/gnu/usr.bin/perl/ext/Thread/Thread.pm index c8bca0db713..00cba8af673 100644 --- a/gnu/usr.bin/perl/ext/Thread/Thread.pm +++ b/gnu/usr.bin/perl/ext/Thread/Thread.pm @@ -1,16 +1,16 @@ package Thread; require Exporter; -require DynaLoader; -use vars qw($VERSION @ISA @EXPORT); +use XSLoader (); +our($VERSION, @ISA, @EXPORT); $VERSION = "1.0"; -@ISA = qw(Exporter DynaLoader); +@ISA = qw(Exporter); @EXPORT_OK = qw(yield cond_signal cond_broadcast cond_wait async); =head1 NAME -Thread - multithreading +Thread - manipulate threads in Perl (EXPERIMENTAL, subject to change) =head1 SYNOPSIS @@ -18,20 +18,32 @@ Thread - multithreading my $t = new Thread \&start_sub, @start_args; - $t->join; + $result = $t->join; + $result = $t->eval; + $t->detach; - my $tid = Thread->self->tid; + if($t->equal($another_thread)) { + # ... + } + my $tid = Thread->self->tid; my $tlist = Thread->list; lock($scalar); + yield(); use Thread 'async'; - use Thread 'eval'; - =head1 DESCRIPTION + WARNING: Threading is an experimental feature. Both the interface + and implementation are subject to change drastically. In fact, this + documentation describes the flavor of threads that was in version + 5.005. Perl 5.6.0 and later have the beginnings of support for + interpreter threads, which (when finished) is expected to be + significantly different from what is described here. The information + contained here may therefore soon be obsolete. Use at your own risk! + The C module provides multithreading support for perl. =head1 FUNCTIONS @@ -70,8 +82,8 @@ of that container are not locked. For example, if a thread does a C a sub, using C. Any calls to that sub from another thread will block until the lock is released. This behaviour is not -equvalent to C in the sub. C -serializes access to a subroutine, but allows different threads +equivalent to declaring the sub with the C attribute. The C +attribute serializes access to a subroutine, but allows different threads non-simultaneous access. C, on the other hand, will not allow I other thread access for the duration of the lock. @@ -122,6 +134,11 @@ The C function works similarly to C. C, though, will unblock B the threads that are blocked in a C on the locked variable, rather than only one. +=item yield + +The C function allows another thread to take control of the +CPU. The exact results are implementation-dependent. + =back =head1 METHODS @@ -145,6 +162,18 @@ The C method wraps an C around a C, and so waits for a thread to exit, passing along any values the thread might have returned. Errors, of course, get placed into C<$@>. +=item detach + +C tells a thread that it is never going to be joined i.e. +that all traces of its existence can be removed once it stops running. +Errors in detached threads will not be visible anywhere - if you want +to catch them, you should use $SIG{__DIE__} or something like that. + +=item equal + +C tests whether two thread objects represent the same thread and +returns true if they do. + =item tid The C method returns the tid of a thread. The tid is a monotonically @@ -152,6 +181,8 @@ increasing integer assigned when a thread is created. The main thread of a program will have a tid of zero, while subsequent threads will have tids assigned starting with one. +=back + =head1 LIMITATIONS The sequence number used to assign tids is a simple integer, and no @@ -161,7 +192,7 @@ duplicate tids. This limitation may be lifted in a future version of Perl. =head1 SEE ALSO -L, L, L, L. +L, L, L, L. =cut @@ -180,6 +211,6 @@ sub eval { return eval { shift->join; }; } -bootstrap Thread; +XSLoader::load 'Thread'; 1; diff --git a/gnu/usr.bin/perl/ext/Thread/Thread.xs b/gnu/usr.bin/perl/ext/Thread/Thread.xs index 2337e8c3881..4b5e6db9f86 100644 --- a/gnu/usr.bin/perl/ext/Thread/Thread.xs +++ b/gnu/usr.bin/perl/ext/Thread/Thread.xs @@ -1,3 +1,4 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" @@ -20,16 +21,17 @@ static int sig_pipe[2]; #endif static void -remove_thread(struct perl_thread *t) +remove_thread(pTHX_ struct perl_thread *t) { #ifdef USE_THREADS - DEBUG_S(WITH_THR(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(WITH_THR(PerlIO_printf(Perl_debug_log, "%p: remove_thread %p\n", thr, t))); MUTEX_LOCK(&PL_threads_mutex); MUTEX_DESTROY(&t->mutex); PL_nthreads--; t->prev->next = t->next; t->next->prev = t->prev; + SvREFCNT_dec(t->oursv); COND_BROADCAST(&PL_nthreads_cond); MUTEX_UNLOCK(&PL_threads_mutex); #endif @@ -48,7 +50,7 @@ threadstart(void *arg) AV *av; int i; - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "new thread %p starting at %s\n", + DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p starting at %s\n", thr, SvPEEK(TOPs))); thr = (Thread) arg; savemark = TOPMARK; @@ -68,7 +70,7 @@ threadstart(void *arg) myop.op_flags |= OPf_WANT_LIST; PL_op = pp_entersub(ARGS); DEBUG_S(if (!PL_op) - PerlIO_printf(PerlIO_stderr(), "thread starts at Nullop\n")); + PerlIO_printf(Perl_debug_log, "thread starts at Nullop\n")); /* * When this thread is next scheduled, we start in the right * place. When the thread runs off the end of the sub, perl.c @@ -85,13 +87,18 @@ threadstart(void *arg) I32 oldscope = PL_scopestack_ix; I32 retval; SV *sv; - AV *av = newAV(); + AV *av; int i, ret; dJMPENV; - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "new thread %p waiting to start\n", + +#if defined(MULTIPLICITY) + PERL_SET_INTERP(thr->interp); +#endif + + DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p waiting to start\n", thr)); - /* Don't call *anything* requiring dTHR until after SET_THR() */ + /* Don't call *anything* requiring dTHR until after PERL_SET_THX() */ /* * Wait until our creator releases us. If we didn't do this, then * it would be potentially possible for out thread to carry on and @@ -107,12 +114,13 @@ threadstart(void *arg) * from our pthread_t structure to our struct perl_thread, since * we're the only thread who can get at it anyway. */ - SET_THR(thr); + PERL_SET_THX(thr); /* Only now can we use SvPEEK (which calls sv_newmortal which does dTHR) */ - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "new thread %p starting at %s\n", + DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p starting at %s\n", thr, SvPEEK(TOPs))); + av = newAV(); sv = POPs; PUTBACK; ENTER; @@ -122,18 +130,18 @@ threadstart(void *arg) retval = SP - (PL_stack_base + oldmark); SP = PL_stack_base + oldmark + 1; if (SvCUR(thr->errsv)) { - STRLEN n_a; MUTEX_LOCK(&thr->mutex); thr->flags |= THRf_DID_DIE; MUTEX_UNLOCK(&thr->mutex); av_store(av, 0, &PL_sv_no); av_store(av, 1, newSVsv(thr->errsv)); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p died: %s\n", - thr, SvPV(thr->errsv, n_a))); - } else { + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p died: %s\n", + thr, SvPV(thr->errsv, PL_na))); + } + else { DEBUG_S(STMT_START { for (i = 1; i <= retval; i++) { - PerlIO_printf(PerlIO_stderr(), "%p return[%d] = %s\n", + PerlIO_printf(Perl_debug_log, "%p return[%d] = %s\n", thr, i, SvPEEK(SP[i - 1])); } } STMT_END); @@ -153,7 +161,6 @@ threadstart(void *arg) SvREFCNT_dec(thr->threadsv); SvREFCNT_dec(thr->specific); SvREFCNT_dec(thr->errsv); - SvREFCNT_dec(thr->errhv); /*Safefree(cxstack);*/ while (PL_curstackinfo->si_next) @@ -175,37 +182,39 @@ threadstart(void *arg) SvREFCNT_dec(PL_rs); SvREFCNT_dec(PL_nrs); SvREFCNT_dec(PL_statname); + SvREFCNT_dec(PL_errors); Safefree(PL_screamfirst); Safefree(PL_screamnext); Safefree(PL_reg_start_tmp); SvREFCNT_dec(PL_lastscream); SvREFCNT_dec(PL_defoutgv); + Safefree(PL_reg_poscache); MUTEX_LOCK(&thr->mutex); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: threadstart finishing: state is %u\n", thr, ThrSTATE(thr))); switch (ThrSTATE(thr)) { case THRf_R_JOINABLE: ThrSETSTATE(thr, THRf_ZOMBIE); MUTEX_UNLOCK(&thr->mutex); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: R_JOINABLE thread finished\n", thr)); break; case THRf_R_JOINED: ThrSETSTATE(thr, THRf_DEAD); MUTEX_UNLOCK(&thr->mutex); - remove_thread(thr); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + remove_thread(aTHX_ thr); + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: R_JOINED thread finished\n", thr)); break; case THRf_R_DETACHED: ThrSETSTATE(thr, THRf_DEAD); MUTEX_UNLOCK(&thr->mutex); SvREFCNT_dec(av); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: DETACHED thread finished\n", thr)); - remove_thread(thr); /* This might trigger main thread to finish */ + remove_thread(aTHX_ thr); /* This might trigger main thread to finish */ break; default: MUTEX_UNLOCK(&thr->mutex); @@ -222,7 +231,7 @@ threadstart(void *arg) } static SV * -newthread (SV *startsv, AV *initargs, char *classname) +newthread (pTHX_ SV *startsv, AV *initargs, char *classname) { #ifdef USE_THREADS dSP; @@ -234,17 +243,18 @@ newthread (SV *startsv, AV *initargs, char *classname) static pthread_attr_t attr; static int attr_inited = 0; sigset_t fullmask, oldmask; + static int attr_joinable = PTHREAD_CREATE_JOINABLE; #endif - + savethread = thr; thr = new_struct_thread(thr); /* temporarily pretend to be the child thread in case the * XPUSHs() below want to grow the child's stack. This is * safe, since the other thread is not yet created, and we * are the only ones who know about it */ - SET_THR(thr); + PERL_SET_THX(thr); SPAGAIN; - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: newthread (%p), tid is %u, preparing stack\n", savethread, thr, thr->tid)); /* The following pushes the arg list and startsv onto the *new* stack */ @@ -256,7 +266,7 @@ newthread (SV *startsv, AV *initargs, char *classname) PUTBACK; /* On your marks... */ - SET_THR(savethread); + PERL_SET_THX(savethread); MUTEX_LOCK(&thr->mutex); #ifdef THREAD_CREATE @@ -269,39 +279,27 @@ newthread (SV *startsv, AV *initargs, char *classname) err = 0; if (!attr_inited) { attr_inited = 1; -#ifdef OLD_PTHREADS_API - err = pthread_attr_create(&attr); -#else err = pthread_attr_init(&attr); -#endif -#ifdef OLD_PTHREADS_API -#ifdef VMS -/* This is available with the old pthreads API, but only with */ -/* DecThreads (VMS and Digital Unix) */ - if (err == 0) - err = pthread_attr_setdetach_np(&attr, ATTR_JOINABLE); -#endif -#else +# ifdef PTHREAD_ATTR_SETDETACHSTATE if (err == 0) - err = pthread_attr_setdetachstate(&attr, ATTR_JOINABLE); -#endif + err = PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable); + +# else + croak("panic: can't pthread_attr_setdetachstate"); +# endif } if (err == 0) -#ifdef OLD_PTHREADS_API - err = pthread_create(&thr->self, attr, threadstart, (void*) thr); -#else - err = pthread_create(&thr->self, &attr, threadstart, (void*) thr); -#endif + err = PTHREAD_CREATE(&thr->self, attr, threadstart, (void*) thr); #endif + if (err) { MUTEX_UNLOCK(&thr->mutex); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: create of %p failed %d\n", savethread, thr, err)); /* Thread creation failed--clean up */ SvREFCNT_dec(thr->cvcache); - remove_thread(thr); - MUTEX_DESTROY(&thr->mutex); + remove_thread(aTHX_ thr); for (i = 0; i <= AvFILL(initargs); i++) SvREFCNT_dec(*av_fetch(initargs, i, FALSE)); SvREFCNT_dec(startsv); @@ -330,18 +328,19 @@ newthread (SV *startsv, AV *initargs, char *classname) #endif } -static Signal_t handle_thread_signal _((int sig)); +static Signal_t handle_thread_signal (int sig); static Signal_t handle_thread_signal(int sig) { + dTHXo; unsigned char c = (unsigned char) sig; /* * We're not really allowed to call fprintf in a signal handler * so don't be surprised if this isn't robust while debugging * with -DL. */ - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "handle_thread_signal: got signal %d\n", sig);); write(sig_pipe[1], &c, 1); } @@ -355,7 +354,7 @@ new(classname, startsv, ...) SV * startsv AV * av = av_make(items - 2, &ST(2)); PPCODE: - XPUSHs(sv_2mortal(newthread(startsv, av, classname))); + XPUSHs(sv_2mortal(newthread(aTHX_ startsv, av, classname))); void join(t) @@ -364,7 +363,9 @@ join(t) int i = NO_INIT PPCODE: #ifdef USE_THREADS - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p: joining %p (state %u)\n", + if (t == thr) + croak("Attempt to join self"); + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: joining %p (state %u)\n", thr, t, ThrSTATE(t));); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { @@ -376,7 +377,7 @@ join(t) case THRf_ZOMBIE: ThrSETSTATE(t, THRf_DEAD); MUTEX_UNLOCK(&t->mutex); - remove_thread(t); + remove_thread(aTHX_ t); break; default: MUTEX_UNLOCK(&t->mutex); @@ -385,14 +386,17 @@ join(t) } JOIN(t, &av); + sv_2mortal((SV*)av); + if (SvTRUE(*av_fetch(av, 0, FALSE))) { /* Could easily speed up the following if necessary */ for (i = 1; i <= AvFILL(av); i++) - XPUSHs(sv_2mortal(*av_fetch(av, i, FALSE))); - } else { + XPUSHs(*av_fetch(av, i, FALSE)); + } + else { STRLEN n_a; char *mess = SvPV(*av_fetch(av, 1, FALSE), n_a); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: join propagating die message: %s\n", thr, mess)); croak(mess); @@ -404,7 +408,7 @@ detach(t) Thread t CODE: #ifdef USE_THREADS - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p: detaching %p (state %u)\n", + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: detaching %p (state %u)\n", thr, t, ThrSTATE(t));); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { @@ -419,7 +423,7 @@ detach(t) ThrSETSTATE(t, THRf_DEAD); DETACH(t); MUTEX_UNLOCK(&t->mutex); - remove_thread(t); + remove_thread(aTHX_ t); break; default: MUTEX_UNLOCK(&t->mutex); @@ -496,7 +500,7 @@ CODE: sv = SvRV(sv); mg = condpair_magic(sv); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p: cond_wait %p\n", thr, sv)); + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_wait %p\n", thr, sv)); MUTEX_LOCK(MgMUTEXP(mg)); if (MgOWNER(mg) != thr) { MUTEX_UNLOCK(MgMUTEXP(mg)); @@ -521,7 +525,7 @@ CODE: sv = SvRV(sv); mg = condpair_magic(sv); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p: cond_signal %p\n",thr,sv)); + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_signal %p\n",thr,sv)); MUTEX_LOCK(MgMUTEXP(mg)); if (MgOWNER(mg) != thr) { MUTEX_UNLOCK(MgMUTEXP(mg)); @@ -541,7 +545,7 @@ CODE: sv = SvRV(sv); mg = condpair_magic(sv); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), "%p: cond_broadcast %p\n", + DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_broadcast %p\n", thr, sv)); MUTEX_LOCK(MgMUTEXP(mg)); if (MgOWNER(mg) != thr) { @@ -643,8 +647,8 @@ await_signal() croak("panic: await_signal"); ST(0) = sv_newmortal(); if (ret) - sv_setsv(ST(0), c ? psig_ptr[c] : &PL_sv_no); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + sv_setsv(ST(0), c ? PL_psig_ptr[c] : &PL_sv_no); + DEBUG_S(PerlIO_printf(Perl_debug_log, "await_signal returning %s\n", SvPEEK(ST(0)));); MODULE = Thread PACKAGE = Thread::Specific diff --git a/gnu/usr.bin/perl/ext/Thread/Thread/Queue.pm b/gnu/usr.bin/perl/ext/Thread/Thread/Queue.pm index 6d5f82be344..831573c7265 100644 --- a/gnu/usr.bin/perl/ext/Thread/Thread/Queue.pm +++ b/gnu/usr.bin/perl/ext/Thread/Thread/Queue.pm @@ -67,15 +67,13 @@ sub new { return bless [@_], $class; } -sub dequeue { - use attrs qw(locked method); +sub dequeue : locked : method { my $q = shift; cond_wait $q until @$q; return shift @$q; } -sub dequeue_nb { - use attrs qw(locked method); +sub dequeue_nb : locked : method { my $q = shift; if (@$q) { return shift @$q; @@ -84,14 +82,12 @@ sub dequeue_nb { } } -sub enqueue { - use attrs qw(locked method); +sub enqueue : locked : method { my $q = shift; push(@$q, @_) and cond_broadcast $q; } -sub pending { - use attrs qw(locked method); +sub pending : locked : method { my $q = shift; return scalar(@$q); } diff --git a/gnu/usr.bin/perl/ext/Thread/Thread/Semaphore.pm b/gnu/usr.bin/perl/ext/Thread/Thread/Semaphore.pm index 915808cbed7..3cd6338d4df 100644 --- a/gnu/usr.bin/perl/ext/Thread/Thread/Semaphore.pm +++ b/gnu/usr.bin/perl/ext/Thread/Thread/Semaphore.pm @@ -69,16 +69,14 @@ sub new { bless \$val, $class; } -sub down { - use attrs qw(locked method); +sub down : locked : method { my $s = shift; my $inc = @_ ? shift : 1; cond_wait $s until $$s >= $inc; $$s -= $inc; } -sub up { - use attrs qw(locked method); +sub up : locked : method { my $s = shift; my $inc = @_ ? shift : 1; ($$s += $inc) > 0 and cond_broadcast $s; diff --git a/gnu/usr.bin/perl/ext/Thread/Thread/Specific.pm b/gnu/usr.bin/perl/ext/Thread/Thread/Specific.pm index 9c8a66a9e6a..a6271a4ae4d 100644 --- a/gnu/usr.bin/perl/ext/Thread/Thread/Specific.pm +++ b/gnu/usr.bin/perl/ext/Thread/Thread/Specific.pm @@ -15,14 +15,13 @@ C returns a unique thread-specific key. =cut -sub import { - use attrs qw(locked method); +sub import : locked : method { require fields; - fields->import(@_); + fields::->import(@_); } -sub key_create { - use attrs qw(locked method); +sub key_create : locked : method { + our %FIELDS; # suppress "used only once" return ++$FIELDS{__MAX__}; } diff --git a/gnu/usr.bin/perl/ext/Thread/sync.t b/gnu/usr.bin/perl/ext/Thread/sync.t index 9c2e5897da5..6445b5579c5 100644 --- a/gnu/usr.bin/perl/ext/Thread/sync.t +++ b/gnu/usr.bin/perl/ext/Thread/sync.t @@ -2,8 +2,7 @@ use Thread; $level = 0; -sub single_file { - use attrs 'locked'; +sub single_file : locked { my $arg = shift; $level++; print "Level $level for $arg\n"; diff --git a/gnu/usr.bin/perl/ext/Thread/sync2.t b/gnu/usr.bin/perl/ext/Thread/sync2.t index 0901da46a0a..ffc74b4ec18 100644 --- a/gnu/usr.bin/perl/ext/Thread/sync2.t +++ b/gnu/usr.bin/perl/ext/Thread/sync2.t @@ -2,8 +2,7 @@ use Thread; $global = undef; -sub single_file { - use attrs 'locked'; +sub single_file : locked { my $who = shift; my $i; diff --git a/gnu/usr.bin/perl/ext/Thread/typemap b/gnu/usr.bin/perl/ext/Thread/typemap index 21eb6c32409..7ce7d5cce3e 100644 --- a/gnu/usr.bin/perl/ext/Thread/typemap +++ b/gnu/usr.bin/perl/ext/Thread/typemap @@ -13,7 +13,7 @@ T_XSCPTR || mg->mg_private != ${ntype}_MAGIC_SIGNATURE) croak(\"XSUB ${func_name}: $var is a forged ${ntype} object\"); $var = ($type) SvPVX(mg->mg_obj); - DEBUG_S(PerlIO_printf(PerlIO_stderr(), + DEBUG_S(PerlIO_printf(Perl_debug_log, \"XSUB ${func_name}: %p\\n\", $var);) } STMT_END T_IVREF diff --git a/gnu/usr.bin/perl/ext/attrs/attrs.pm b/gnu/usr.bin/perl/ext/attrs/attrs.pm index fe2bf356e4f..2070632558f 100644 --- a/gnu/usr.bin/perl/ext/attrs/attrs.pm +++ b/gnu/usr.bin/perl/ext/attrs/attrs.pm @@ -1,14 +1,11 @@ package attrs; -require DynaLoader; -use vars '@ISA'; -@ISA = 'DynaLoader'; +use XSLoader (); -use vars qw($VERSION); $VERSION = "1.0"; =head1 NAME -attrs - set/get attributes of a subroutine +attrs - set/get attributes of a subroutine (deprecated) =head1 SYNOPSIS @@ -21,11 +18,17 @@ attrs - set/get attributes of a subroutine =head1 DESCRIPTION -This module lets you set and get attributes for subroutines. +NOTE: Use of this pragma is deprecated. Use the syntax + + sub foo : locked method { } + +to declare attributes instead. See also L. + +This pragma lets you set and get attributes for subroutines. Setting attributes takes place at compile time; trying to set invalid attribute names causes a compile-time error. Calling -C on a subroutine reference or name returns its list -of attribute names. Notice that C is not exported. +C on a subroutine reference or name returns its list +of attribute names. Notice that C is not exported. Valid attributes are as follows. =over @@ -50,6 +53,6 @@ subroutine is entered. =cut -bootstrap attrs $VERSION; +XSLoader::load 'attrs', $VERSION; 1; diff --git a/gnu/usr.bin/perl/ext/attrs/attrs.xs b/gnu/usr.bin/perl/ext/attrs/attrs.xs index 7f7970d207d..4c00cd7cb26 100644 --- a/gnu/usr.bin/perl/ext/attrs/attrs.xs +++ b/gnu/usr.bin/perl/ext/attrs/attrs.xs @@ -1,3 +1,4 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" @@ -26,6 +27,10 @@ char * Class PPCODE: if (!PL_compcv || !(cv = CvOUTSIDE(PL_compcv))) croak("can't set attributes outside a subroutine scope"); + if (ckWARN(WARN_DEPRECATED)) + Perl_warner(aTHX_ WARN_DEPRECATED, + "pragma \"attrs\" is deprecated, " + "use \"sub NAME : ATTRS\" instead"); for (i = 1; i < items; i++) { STRLEN n_a; char *attr = SvPV(ST(i), n_a); @@ -55,7 +60,7 @@ SV * sub if (!sub) croak("invalid subroutine reference or name"); if (CvFLAGS(sub) & CVf_METHOD) - XPUSHs(sv_2mortal(newSVpv("method", 0))); + XPUSHs(sv_2mortal(newSVpvn("method", 6))); if (CvFLAGS(sub) & CVf_LOCKED) - XPUSHs(sv_2mortal(newSVpv("locked", 0))); + XPUSHs(sv_2mortal(newSVpvn("locked", 6))); diff --git a/gnu/usr.bin/perl/ext/re/Makefile.PL b/gnu/usr.bin/perl/ext/re/Makefile.PL index 040b085f4fa..bd0f1f741c1 100644 --- a/gnu/usr.bin/perl/ext/re/Makefile.PL +++ b/gnu/usr.bin/perl/ext/re/Makefile.PL @@ -5,7 +5,7 @@ WriteMakefile( MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', OBJECT => 're_exec$(OBJ_EXT) re_comp$(OBJ_EXT) re$(OBJ_EXT)', - DEFINE => '-DPERL_EXT_RE_BUILD', + DEFINE => '-DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG', clean => { FILES => '*$(OBJ_EXT) *.c ../../lib/re.pm' }, ); diff --git a/gnu/usr.bin/perl/ext/re/re.pm b/gnu/usr.bin/perl/ext/re/re.pm index 83e7dbafe56..3f142d9de48 100644 --- a/gnu/usr.bin/perl/ext/re/re.pm +++ b/gnu/usr.bin/perl/ext/re/re.pm @@ -41,11 +41,11 @@ on tainted data aren't meant to extract safe substrings, but to perform other transformations. When C is in effect, a regex is allowed to contain -C<(?{ ... })> zero-width assertions even if the regex contains -variable interpolation. This is normally disallowed, since it is a +C<(?{ ... })> zero-width assertions even if regular expression contains +variable interpolation. That is normally disallowed, since it is a potential security risk. Note that this pragma is ignored when the regular expression is obtained from tainted data, i.e. evaluation is always -disallowed with tainted regular expressions. See L. +disallowed with tainted regular expresssions. See L. For the purpose of this pragma, interpolation of precompiled regular expressions (i.e., the result of C) is I considered variable @@ -74,6 +74,8 @@ See L. =cut +# N.B. File::Basename contains a literal for 'taint' as a fallback. If +# taint is changed here, File::Basename must be updated as well. my %bitmask = ( taint => 0x00100000, eval => 0x00200000, @@ -84,16 +86,13 @@ sub setcolor { require Term::Cap; my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning. - my $props = $ENV{PERL_RE_TC} || 'md,me,so,se'; # can use us/ue later + my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue'; my @props = split /,/, $props; + my $colors = join "\t", map {$terminal->Tputs($_,1)} @props; - - $ENV{TERMCAP_COLORS} = join "\t", map {$terminal->Tputs($_,1)} @props; + $colors =~ s/\0//g; + $ENV{PERL_RE_COLORS} = $colors; }; - - not defined $ENV{TERMCAP_COLORS} or ($ENV{TERMCAP_COLORS} =~ tr/\t/\t/) >= 4 - or not defined $ENV{PERL_RE_TC} - or die "Not enough fields in \$ENV{PERL_RE_TC}=`$ENV{PERL_RE_TC}'"; } sub bits { @@ -106,9 +105,8 @@ sub bits { foreach my $s (@_){ if ($s eq 'debug' or $s eq 'debugcolor') { setcolor() if $s eq 'debugcolor'; - require DynaLoader; - @ISA = ('DynaLoader'); - bootstrap re; + require XSLoader; + XSLoader::load('re'); install() if $on; uninstall() unless $on; next; diff --git a/gnu/usr.bin/perl/ext/re/re.xs b/gnu/usr.bin/perl/ext/re/re.xs index 7230d626dc2..04a5fdc7420 100644 --- a/gnu/usr.bin/perl/ext/re/re.xs +++ b/gnu/usr.bin/perl/ext/re/re.xs @@ -3,36 +3,49 @@ # define DEBUGGING #endif +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" -extern regexp* my_regcomp _((char* exp, char* xend, PMOP* pm)); -extern I32 my_regexec _((regexp* prog, char* stringarg, char* strend, - char* strbeg, I32 minend, SV* screamer, - void* data, U32 flags)); +extern regexp* my_regcomp (pTHX_ char* exp, char* xend, PMOP* pm); +extern I32 my_regexec (pTHX_ regexp* prog, char* stringarg, char* strend, + char* strbeg, I32 minend, SV* screamer, + void* data, U32 flags); +extern void my_regfree (pTHX_ struct regexp* r); +extern char* my_re_intuit_start (pTHX_ regexp *prog, SV *sv, char *strpos, + char *strend, U32 flags, + struct re_scream_pos_data_s *data); +extern SV* my_re_intuit_string (pTHX_ regexp *prog); static int oldfl; #define R_DB 512 static void -deinstall(void) +deinstall(pTHX) { dTHR; - PL_regexecp = ®exec_flags; - PL_regcompp = &pregcomp; + PL_regexecp = Perl_regexec_flags; + PL_regcompp = Perl_pregcomp; + PL_regint_start = Perl_re_intuit_start; + PL_regint_string = Perl_re_intuit_string; + PL_regfree = Perl_pregfree; + if (!oldfl) PL_debug &= ~R_DB; } static void -install(void) +install(pTHX) { dTHR; PL_colorset = 0; /* Allow reinspection of ENV. */ PL_regexecp = &my_regexec; PL_regcompp = &my_regcomp; + PL_regint_start = &my_re_intuit_start; + PL_regint_string = &my_re_intuit_string; + PL_regfree = &my_regfree; oldfl = PL_debug & R_DB; PL_debug |= R_DB; } @@ -41,6 +54,10 @@ MODULE = re PACKAGE = re void install() + CODE: + install(aTHX); void deinstall() + CODE: + deinstall(aTHX); diff --git a/gnu/usr.bin/perl/globals.c b/gnu/usr.bin/perl/globals.c index 1d8ef9272d2..0782eba226f 100644 --- a/gnu/usr.bin/perl/globals.c +++ b/gnu/usr.bin/perl/globals.c @@ -1,1471 +1,82 @@ #include "INTERN.h" +#define PERL_IN_GLOBALS_C #include "perl.h" #ifdef PERL_OBJECT -#undef pp_null -#define pp_null CPerlObj::Perl_pp_null -#undef pp_stub -#define pp_stub CPerlObj::Perl_pp_stub -#undef pp_scalar -#define pp_scalar CPerlObj::Perl_pp_scalar -#undef pp_pushmark -#define pp_pushmark CPerlObj::Perl_pp_pushmark -#undef pp_wantarray -#define pp_wantarray CPerlObj::Perl_pp_wantarray -#undef pp_const -#define pp_const CPerlObj::Perl_pp_const -#undef pp_gvsv -#define pp_gvsv CPerlObj::Perl_pp_gvsv -#undef pp_gv -#define pp_gv CPerlObj::Perl_pp_gv -#undef pp_gelem -#define pp_gelem CPerlObj::Perl_pp_gelem -#undef pp_padsv -#define pp_padsv CPerlObj::Perl_pp_padsv -#undef pp_padav -#define pp_padav CPerlObj::Perl_pp_padav -#undef pp_padhv -#define pp_padhv CPerlObj::Perl_pp_padhv -#undef pp_padany -#define pp_padany CPerlObj::Perl_pp_padany -#undef pp_pushre -#define pp_pushre CPerlObj::Perl_pp_pushre -#undef pp_rv2gv -#define pp_rv2gv CPerlObj::Perl_pp_rv2gv -#undef pp_rv2sv -#define pp_rv2sv CPerlObj::Perl_pp_rv2sv -#undef pp_av2arylen -#define pp_av2arylen CPerlObj::Perl_pp_av2arylen -#undef pp_rv2cv -#define pp_rv2cv CPerlObj::Perl_pp_rv2cv -#undef pp_anoncode -#define pp_anoncode CPerlObj::Perl_pp_anoncode -#undef pp_prototype -#define pp_prototype CPerlObj::Perl_pp_prototype -#undef pp_refgen -#define pp_refgen CPerlObj::Perl_pp_refgen -#undef pp_srefgen -#define pp_srefgen CPerlObj::Perl_pp_srefgen -#undef pp_ref -#define pp_ref CPerlObj::Perl_pp_ref -#undef pp_bless -#define pp_bless CPerlObj::Perl_pp_bless -#undef pp_backtick -#define pp_backtick CPerlObj::Perl_pp_backtick -#undef pp_glob -#define pp_glob CPerlObj::Perl_pp_glob -#undef pp_readline -#define pp_readline CPerlObj::Perl_pp_readline -#undef pp_rcatline -#define pp_rcatline CPerlObj::Perl_pp_rcatline -#undef pp_regcmaybe -#define pp_regcmaybe CPerlObj::Perl_pp_regcmaybe -#undef pp_regcreset -#define pp_regcreset CPerlObj::Perl_pp_regcreset -#undef pp_regcomp -#define pp_regcomp CPerlObj::Perl_pp_regcomp -#undef pp_match -#define pp_match CPerlObj::Perl_pp_match -#undef pp_qr -#define pp_qr CPerlObj::Perl_pp_qr -#undef pp_subst -#define pp_subst CPerlObj::Perl_pp_subst -#undef pp_substcont -#define pp_substcont CPerlObj::Perl_pp_substcont -#undef pp_trans -#define pp_trans CPerlObj::Perl_pp_trans -#undef pp_sassign -#define pp_sassign CPerlObj::Perl_pp_sassign -#undef pp_aassign -#define pp_aassign CPerlObj::Perl_pp_aassign -#undef pp_chop -#define pp_chop CPerlObj::Perl_pp_chop -#undef pp_schop -#define pp_schop CPerlObj::Perl_pp_schop -#undef pp_chomp -#define pp_chomp CPerlObj::Perl_pp_chomp -#undef pp_schomp -#define pp_schomp CPerlObj::Perl_pp_schomp -#undef pp_defined -#define pp_defined CPerlObj::Perl_pp_defined -#undef pp_undef -#define pp_undef CPerlObj::Perl_pp_undef -#undef pp_study -#define pp_study CPerlObj::Perl_pp_study -#undef pp_pos -#define pp_pos CPerlObj::Perl_pp_pos -#undef pp_preinc -#define pp_preinc CPerlObj::Perl_pp_preinc -#undef pp_i_preinc -#define pp_i_preinc CPerlObj::Perl_pp_preinc -#undef pp_predec -#define pp_predec CPerlObj::Perl_pp_predec -#undef pp_i_predec -#define pp_i_predec CPerlObj::Perl_pp_predec -#undef pp_postinc -#define pp_postinc CPerlObj::Perl_pp_postinc -#undef pp_i_postinc -#define pp_i_postinc CPerlObj::Perl_pp_postinc -#undef pp_postdec -#define pp_postdec CPerlObj::Perl_pp_postdec -#undef pp_i_postdec -#define pp_i_postdec CPerlObj::Perl_pp_postdec -#undef pp_pow -#define pp_pow CPerlObj::Perl_pp_pow -#undef pp_multiply -#define pp_multiply CPerlObj::Perl_pp_multiply -#undef pp_i_multiply -#define pp_i_multiply CPerlObj::Perl_pp_i_multiply -#undef pp_divide -#define pp_divide CPerlObj::Perl_pp_divide -#undef pp_i_divide -#define pp_i_divide CPerlObj::Perl_pp_i_divide -#undef pp_modulo -#define pp_modulo CPerlObj::Perl_pp_modulo -#undef pp_i_modulo -#define pp_i_modulo CPerlObj::Perl_pp_i_modulo -#undef pp_repeat -#define pp_repeat CPerlObj::Perl_pp_repeat -#undef pp_add -#define pp_add CPerlObj::Perl_pp_add -#undef pp_i_add -#define pp_i_add CPerlObj::Perl_pp_i_add -#undef pp_subtract -#define pp_subtract CPerlObj::Perl_pp_subtract -#undef pp_i_subtract -#define pp_i_subtract CPerlObj::Perl_pp_i_subtract -#undef pp_concat -#define pp_concat CPerlObj::Perl_pp_concat -#undef pp_stringify -#define pp_stringify CPerlObj::Perl_pp_stringify -#undef pp_left_shift -#define pp_left_shift CPerlObj::Perl_pp_left_shift -#undef pp_right_shift -#define pp_right_shift CPerlObj::Perl_pp_right_shift -#undef pp_lt -#define pp_lt CPerlObj::Perl_pp_lt -#undef pp_i_lt -#define pp_i_lt CPerlObj::Perl_pp_i_lt -#undef pp_gt -#define pp_gt CPerlObj::Perl_pp_gt -#undef pp_i_gt -#define pp_i_gt CPerlObj::Perl_pp_i_gt -#undef pp_le -#define pp_le CPerlObj::Perl_pp_le -#undef pp_i_le -#define pp_i_le CPerlObj::Perl_pp_i_le -#undef pp_ge -#define pp_ge CPerlObj::Perl_pp_ge -#undef pp_i_ge -#define pp_i_ge CPerlObj::Perl_pp_i_ge -#undef pp_eq -#define pp_eq CPerlObj::Perl_pp_eq -#undef pp_i_eq -#define pp_i_eq CPerlObj::Perl_pp_i_eq -#undef pp_ne -#define pp_ne CPerlObj::Perl_pp_ne -#undef pp_i_ne -#define pp_i_ne CPerlObj::Perl_pp_i_ne -#undef pp_ncmp -#define pp_ncmp CPerlObj::Perl_pp_ncmp -#undef pp_i_ncmp -#define pp_i_ncmp CPerlObj::Perl_pp_i_ncmp -#undef pp_slt -#define pp_slt CPerlObj::Perl_pp_slt -#undef pp_sgt -#define pp_sgt CPerlObj::Perl_pp_sgt -#undef pp_sle -#define pp_sle CPerlObj::Perl_pp_sle -#undef pp_sge -#define pp_sge CPerlObj::Perl_pp_sge -#undef pp_seq -#define pp_seq CPerlObj::Perl_pp_seq -#undef pp_sne -#define pp_sne CPerlObj::Perl_pp_sne -#undef pp_scmp -#define pp_scmp CPerlObj::Perl_pp_scmp -#undef pp_bit_and -#define pp_bit_and CPerlObj::Perl_pp_bit_and -#undef pp_bit_xor -#define pp_bit_xor CPerlObj::Perl_pp_bit_xor -#undef pp_bit_or -#define pp_bit_or CPerlObj::Perl_pp_bit_or -#undef pp_negate -#define pp_negate CPerlObj::Perl_pp_negate -#undef pp_i_negate -#define pp_i_negate CPerlObj::Perl_pp_i_negate -#undef pp_not -#define pp_not CPerlObj::Perl_pp_not -#undef pp_complement -#define pp_complement CPerlObj::Perl_pp_complement -#undef pp_atan2 -#define pp_atan2 CPerlObj::Perl_pp_atan2 -#undef pp_sin -#define pp_sin CPerlObj::Perl_pp_sin -#undef pp_cos -#define pp_cos CPerlObj::Perl_pp_cos -#undef pp_rand -#define pp_rand CPerlObj::Perl_pp_rand -#undef pp_srand -#define pp_srand CPerlObj::Perl_pp_srand -#undef pp_exp -#define pp_exp CPerlObj::Perl_pp_exp -#undef pp_log -#define pp_log CPerlObj::Perl_pp_log -#undef pp_sqrt -#define pp_sqrt CPerlObj::Perl_pp_sqrt -#undef pp_int -#define pp_int CPerlObj::Perl_pp_int -#undef pp_hex -#define pp_hex CPerlObj::Perl_pp_hex -#undef pp_oct -#define pp_oct CPerlObj::Perl_pp_oct -#undef pp_abs -#define pp_abs CPerlObj::Perl_pp_abs -#undef pp_length -#define pp_length CPerlObj::Perl_pp_length -#undef pp_substr -#define pp_substr CPerlObj::Perl_pp_substr -#undef pp_vec -#define pp_vec CPerlObj::Perl_pp_vec -#undef pp_index -#define pp_index CPerlObj::Perl_pp_index -#undef pp_rindex -#define pp_rindex CPerlObj::Perl_pp_rindex -#undef pp_sprintf -#define pp_sprintf CPerlObj::Perl_pp_sprintf -#undef pp_formline -#define pp_formline CPerlObj::Perl_pp_formline -#undef pp_ord -#define pp_ord CPerlObj::Perl_pp_ord -#undef pp_chr -#define pp_chr CPerlObj::Perl_pp_chr -#undef pp_crypt -#define pp_crypt CPerlObj::Perl_pp_crypt -#undef pp_ucfirst -#define pp_ucfirst CPerlObj::Perl_pp_ucfirst -#undef pp_lcfirst -#define pp_lcfirst CPerlObj::Perl_pp_lcfirst -#undef pp_uc -#define pp_uc CPerlObj::Perl_pp_uc -#undef pp_lc -#define pp_lc CPerlObj::Perl_pp_lc -#undef pp_quotemeta -#define pp_quotemeta CPerlObj::Perl_pp_quotemeta -#undef pp_rv2av -#define pp_rv2av CPerlObj::Perl_pp_rv2av -#undef pp_aelemfast -#define pp_aelemfast CPerlObj::Perl_pp_aelemfast -#undef pp_aelem -#define pp_aelem CPerlObj::Perl_pp_aelem -#undef pp_aslice -#define pp_aslice CPerlObj::Perl_pp_aslice -#undef pp_each -#define pp_each CPerlObj::Perl_pp_each -#undef pp_values -#define pp_values CPerlObj::Perl_pp_values -#undef pp_keys -#define pp_keys CPerlObj::Perl_pp_keys -#undef pp_delete -#define pp_delete CPerlObj::Perl_pp_delete -#undef pp_exists -#define pp_exists CPerlObj::Perl_pp_exists -#undef pp_rv2hv -#define pp_rv2hv CPerlObj::Perl_pp_rv2hv -#undef pp_helem -#define pp_helem CPerlObj::Perl_pp_helem -#undef pp_hslice -#define pp_hslice CPerlObj::Perl_pp_hslice -#undef pp_unpack -#define pp_unpack CPerlObj::Perl_pp_unpack -#undef pp_pack -#define pp_pack CPerlObj::Perl_pp_pack -#undef pp_split -#define pp_split CPerlObj::Perl_pp_split -#undef pp_join -#define pp_join CPerlObj::Perl_pp_join -#undef pp_list -#define pp_list CPerlObj::Perl_pp_list -#undef pp_lslice -#define pp_lslice CPerlObj::Perl_pp_lslice -#undef pp_anonlist -#define pp_anonlist CPerlObj::Perl_pp_anonlist -#undef pp_anonhash -#define pp_anonhash CPerlObj::Perl_pp_anonhash -#undef pp_splice -#define pp_splice CPerlObj::Perl_pp_splice -#undef pp_push -#define pp_push CPerlObj::Perl_pp_push -#undef pp_pop -#define pp_pop CPerlObj::Perl_pp_pop -#undef pp_shift -#define pp_shift CPerlObj::Perl_pp_shift -#undef pp_unshift -#define pp_unshift CPerlObj::Perl_pp_unshift -#undef pp_sort -#define pp_sort CPerlObj::Perl_pp_sort -#undef pp_reverse -#define pp_reverse CPerlObj::Perl_pp_reverse -#undef pp_grepstart -#define pp_grepstart CPerlObj::Perl_pp_grepstart -#undef pp_grepwhile -#define pp_grepwhile CPerlObj::Perl_pp_grepwhile -#undef pp_mapstart -#define pp_mapstart CPerlObj::Perl_pp_mapstart -#undef pp_mapwhile -#define pp_mapwhile CPerlObj::Perl_pp_mapwhile -#undef pp_range -#define pp_range CPerlObj::Perl_pp_range -#undef pp_flip -#define pp_flip CPerlObj::Perl_pp_flip -#undef pp_flop -#define pp_flop CPerlObj::Perl_pp_flop -#undef pp_and -#define pp_and CPerlObj::Perl_pp_and -#undef pp_or -#define pp_or CPerlObj::Perl_pp_or -#undef pp_xor -#define pp_xor CPerlObj::Perl_pp_xor -#undef pp_cond_expr -#define pp_cond_expr CPerlObj::Perl_pp_cond_expr -#undef pp_andassign -#define pp_andassign CPerlObj::Perl_pp_andassign -#undef pp_orassign -#define pp_orassign CPerlObj::Perl_pp_orassign -#undef pp_method -#define pp_method CPerlObj::Perl_pp_method -#undef pp_entersub -#define pp_entersub CPerlObj::Perl_pp_entersub -#undef pp_leavesub -#define pp_leavesub CPerlObj::Perl_pp_leavesub -#undef pp_caller -#define pp_caller CPerlObj::Perl_pp_caller -#undef pp_warn -#define pp_warn CPerlObj::Perl_pp_warn -#undef pp_die -#define pp_die CPerlObj::Perl_pp_die -#undef pp_reset -#define pp_reset CPerlObj::Perl_pp_reset -#undef pp_lineseq -#define pp_lineseq CPerlObj::Perl_pp_lineseq -#undef pp_nextstate -#define pp_nextstate CPerlObj::Perl_pp_nextstate -#undef pp_dbstate -#define pp_dbstate CPerlObj::Perl_pp_dbstate -#undef pp_unstack -#define pp_unstack CPerlObj::Perl_pp_unstack -#undef pp_enter -#define pp_enter CPerlObj::Perl_pp_enter -#undef pp_leave -#define pp_leave CPerlObj::Perl_pp_leave -#undef pp_scope -#define pp_scope CPerlObj::Perl_pp_scope -#undef pp_enteriter -#define pp_enteriter CPerlObj::Perl_pp_enteriter -#undef pp_iter -#define pp_iter CPerlObj::Perl_pp_iter -#undef pp_enterloop -#define pp_enterloop CPerlObj::Perl_pp_enterloop -#undef pp_leaveloop -#define pp_leaveloop CPerlObj::Perl_pp_leaveloop -#undef pp_return -#define pp_return CPerlObj::Perl_pp_return -#undef pp_last -#define pp_last CPerlObj::Perl_pp_last -#undef pp_next -#define pp_next CPerlObj::Perl_pp_next -#undef pp_redo -#define pp_redo CPerlObj::Perl_pp_redo -#undef pp_dump -#define pp_dump CPerlObj::Perl_pp_dump -#undef pp_goto -#define pp_goto CPerlObj::Perl_pp_goto -#undef pp_exit -#define pp_exit CPerlObj::Perl_pp_exit -#undef pp_open -#define pp_open CPerlObj::Perl_pp_open -#undef pp_close -#define pp_close CPerlObj::Perl_pp_close -#undef pp_pipe_op -#define pp_pipe_op CPerlObj::Perl_pp_pipe_op -#undef pp_fileno -#define pp_fileno CPerlObj::Perl_pp_fileno -#undef pp_umask -#define pp_umask CPerlObj::Perl_pp_umask -#undef pp_binmode -#define pp_binmode CPerlObj::Perl_pp_binmode -#undef pp_tie -#define pp_tie CPerlObj::Perl_pp_tie -#undef pp_untie -#define pp_untie CPerlObj::Perl_pp_untie -#undef pp_tied -#define pp_tied CPerlObj::Perl_pp_tied -#undef pp_dbmopen -#define pp_dbmopen CPerlObj::Perl_pp_dbmopen -#undef pp_dbmclose -#define pp_dbmclose CPerlObj::Perl_pp_dbmclose -#undef pp_sselect -#define pp_sselect CPerlObj::Perl_pp_sselect -#undef pp_select -#define pp_select CPerlObj::Perl_pp_select -#undef pp_getc -#define pp_getc CPerlObj::Perl_pp_getc -#undef pp_read -#define pp_read CPerlObj::Perl_pp_read -#undef pp_enterwrite -#define pp_enterwrite CPerlObj::Perl_pp_enterwrite -#undef pp_leavewrite -#define pp_leavewrite CPerlObj::Perl_pp_leavewrite -#undef pp_prtf -#define pp_prtf CPerlObj::Perl_pp_prtf -#undef pp_print -#define pp_print CPerlObj::Perl_pp_print -#undef pp_sysopen -#define pp_sysopen CPerlObj::Perl_pp_sysopen -#undef pp_sysseek -#define pp_sysseek CPerlObj::Perl_pp_sysseek -#undef pp_sysread -#define pp_sysread CPerlObj::Perl_pp_sysread -#undef pp_syswrite -#define pp_syswrite CPerlObj::Perl_pp_syswrite -#undef pp_send -#define pp_send CPerlObj::Perl_pp_send -#undef pp_recv -#define pp_recv CPerlObj::Perl_pp_recv -#undef pp_eof -#define pp_eof CPerlObj::Perl_pp_eof -#undef pp_tell -#define pp_tell CPerlObj::Perl_pp_tell -#undef pp_seek -#define pp_seek CPerlObj::Perl_pp_seek -#undef pp_truncate -#define pp_truncate CPerlObj::Perl_pp_truncate -#undef pp_fcntl -#define pp_fcntl CPerlObj::Perl_pp_fcntl -#undef pp_ioctl -#define pp_ioctl CPerlObj::Perl_pp_ioctl -#undef pp_flock -#define pp_flock CPerlObj::Perl_pp_flock -#undef pp_socket -#define pp_socket CPerlObj::Perl_pp_socket -#undef pp_sockpair -#define pp_sockpair CPerlObj::Perl_pp_sockpair -#undef pp_bind -#define pp_bind CPerlObj::Perl_pp_bind -#undef pp_connect -#define pp_connect CPerlObj::Perl_pp_connect -#undef pp_listen -#define pp_listen CPerlObj::Perl_pp_listen -#undef pp_accept -#define pp_accept CPerlObj::Perl_pp_accept -#undef pp_shutdown -#define pp_shutdown CPerlObj::Perl_pp_shutdown -#undef pp_gsockopt -#define pp_gsockopt CPerlObj::Perl_pp_gsockopt -#undef pp_ssockopt -#define pp_ssockopt CPerlObj::Perl_pp_ssockopt -#undef pp_getsockname -#define pp_getsockname CPerlObj::Perl_pp_getsockname -#undef pp_getpeername -#define pp_getpeername CPerlObj::Perl_pp_getpeername -#undef pp_lstat -#define pp_lstat CPerlObj::Perl_pp_lstat -#undef pp_stat -#define pp_stat CPerlObj::Perl_pp_stat -#undef pp_ftrread -#define pp_ftrread CPerlObj::Perl_pp_ftrread -#undef pp_ftrwrite -#define pp_ftrwrite CPerlObj::Perl_pp_ftrwrite -#undef pp_ftrexec -#define pp_ftrexec CPerlObj::Perl_pp_ftrexec -#undef pp_fteread -#define pp_fteread CPerlObj::Perl_pp_fteread -#undef pp_ftewrite -#define pp_ftewrite CPerlObj::Perl_pp_ftewrite -#undef pp_fteexec -#define pp_fteexec CPerlObj::Perl_pp_fteexec -#undef pp_ftis -#define pp_ftis CPerlObj::Perl_pp_ftis -#undef pp_fteowned -#define pp_fteowned CPerlObj::Perl_pp_fteowned -#undef pp_ftrowned -#define pp_ftrowned CPerlObj::Perl_pp_ftrowned -#undef pp_ftzero -#define pp_ftzero CPerlObj::Perl_pp_ftzero -#undef pp_ftsize -#define pp_ftsize CPerlObj::Perl_pp_ftsize -#undef pp_ftmtime -#define pp_ftmtime CPerlObj::Perl_pp_ftmtime -#undef pp_ftatime -#define pp_ftatime CPerlObj::Perl_pp_ftatime -#undef pp_ftctime -#define pp_ftctime CPerlObj::Perl_pp_ftctime -#undef pp_ftsock -#define pp_ftsock CPerlObj::Perl_pp_ftsock -#undef pp_ftchr -#define pp_ftchr CPerlObj::Perl_pp_ftchr -#undef pp_ftblk -#define pp_ftblk CPerlObj::Perl_pp_ftblk -#undef pp_ftfile -#define pp_ftfile CPerlObj::Perl_pp_ftfile -#undef pp_ftdir -#define pp_ftdir CPerlObj::Perl_pp_ftdir -#undef pp_ftpipe -#define pp_ftpipe CPerlObj::Perl_pp_ftpipe -#undef pp_ftlink -#define pp_ftlink CPerlObj::Perl_pp_ftlink -#undef pp_ftsuid -#define pp_ftsuid CPerlObj::Perl_pp_ftsuid -#undef pp_ftsgid -#define pp_ftsgid CPerlObj::Perl_pp_ftsgid -#undef pp_ftsvtx -#define pp_ftsvtx CPerlObj::Perl_pp_ftsvtx -#undef pp_fttty -#define pp_fttty CPerlObj::Perl_pp_fttty -#undef pp_fttext -#define pp_fttext CPerlObj::Perl_pp_fttext -#undef pp_ftbinary -#define pp_ftbinary CPerlObj::Perl_pp_ftbinary -#undef pp_chdir -#define pp_chdir CPerlObj::Perl_pp_chdir -#undef pp_chown -#define pp_chown CPerlObj::Perl_pp_chown -#undef pp_chroot -#define pp_chroot CPerlObj::Perl_pp_chroot -#undef pp_unlink -#define pp_unlink CPerlObj::Perl_pp_unlink -#undef pp_chmod -#define pp_chmod CPerlObj::Perl_pp_chmod -#undef pp_utime -#define pp_utime CPerlObj::Perl_pp_utime -#undef pp_rename -#define pp_rename CPerlObj::Perl_pp_rename -#undef pp_link -#define pp_link CPerlObj::Perl_pp_link -#undef pp_symlink -#define pp_symlink CPerlObj::Perl_pp_symlink -#undef pp_readlink -#define pp_readlink CPerlObj::Perl_pp_readlink -#undef pp_mkdir -#define pp_mkdir CPerlObj::Perl_pp_mkdir -#undef pp_rmdir -#define pp_rmdir CPerlObj::Perl_pp_rmdir -#undef pp_open_dir -#define pp_open_dir CPerlObj::Perl_pp_open_dir -#undef pp_readdir -#define pp_readdir CPerlObj::Perl_pp_readdir -#undef pp_telldir -#define pp_telldir CPerlObj::Perl_pp_telldir -#undef pp_seekdir -#define pp_seekdir CPerlObj::Perl_pp_seekdir -#undef pp_rewinddir -#define pp_rewinddir CPerlObj::Perl_pp_rewinddir -#undef pp_closedir -#define pp_closedir CPerlObj::Perl_pp_closedir -#undef pp_fork -#define pp_fork CPerlObj::Perl_pp_fork -#undef pp_wait -#define pp_wait CPerlObj::Perl_pp_wait -#undef pp_waitpid -#define pp_waitpid CPerlObj::Perl_pp_waitpid -#undef pp_system -#define pp_system CPerlObj::Perl_pp_system -#undef pp_exec -#define pp_exec CPerlObj::Perl_pp_exec -#undef pp_kill -#define pp_kill CPerlObj::Perl_pp_kill -#undef pp_getppid -#define pp_getppid CPerlObj::Perl_pp_getppid -#undef pp_getpgrp -#define pp_getpgrp CPerlObj::Perl_pp_getpgrp -#undef pp_setpgrp -#define pp_setpgrp CPerlObj::Perl_pp_setpgrp -#undef pp_getpriority -#define pp_getpriority CPerlObj::Perl_pp_getpriority -#undef pp_setpriority -#define pp_setpriority CPerlObj::Perl_pp_setpriority -#undef pp_time -#define pp_time CPerlObj::Perl_pp_time -#undef pp_tms -#define pp_tms CPerlObj::Perl_pp_tms -#undef pp_localtime -#define pp_localtime CPerlObj::Perl_pp_localtime -#undef pp_gmtime -#define pp_gmtime CPerlObj::Perl_pp_gmtime -#undef pp_alarm -#define pp_alarm CPerlObj::Perl_pp_alarm -#undef pp_sleep -#define pp_sleep CPerlObj::Perl_pp_sleep -#undef pp_shmget -#define pp_shmget CPerlObj::Perl_pp_shmget -#undef pp_shmctl -#define pp_shmctl CPerlObj::Perl_pp_shmctl -#undef pp_shmread -#define pp_shmread CPerlObj::Perl_pp_shmread -#undef pp_shmwrite -#define pp_shmwrite CPerlObj::Perl_pp_shmwrite -#undef pp_msgget -#define pp_msgget CPerlObj::Perl_pp_msgget -#undef pp_msgctl -#define pp_msgctl CPerlObj::Perl_pp_msgctl -#undef pp_msgsnd -#define pp_msgsnd CPerlObj::Perl_pp_msgsnd -#undef pp_msgrcv -#define pp_msgrcv CPerlObj::Perl_pp_msgrcv -#undef pp_semget -#define pp_semget CPerlObj::Perl_pp_semget -#undef pp_semctl -#define pp_semctl CPerlObj::Perl_pp_semctl -#undef pp_semop -#define pp_semop CPerlObj::Perl_pp_semop -#undef pp_require -#define pp_require CPerlObj::Perl_pp_require -#undef pp_dofile -#define pp_dofile CPerlObj::Perl_pp_dofile -#undef pp_entereval -#define pp_entereval CPerlObj::Perl_pp_entereval -#undef pp_leaveeval -#define pp_leaveeval CPerlObj::Perl_pp_leaveeval -#undef pp_entertry -#define pp_entertry CPerlObj::Perl_pp_entertry -#undef pp_leavetry -#define pp_leavetry CPerlObj::Perl_pp_leavetry -#undef pp_ghbyname -#define pp_ghbyname CPerlObj::Perl_pp_ghbyname -#undef pp_ghbyaddr -#define pp_ghbyaddr CPerlObj::Perl_pp_ghbyaddr -#undef pp_ghostent -#define pp_ghostent CPerlObj::Perl_pp_ghostent -#undef pp_gnbyname -#define pp_gnbyname CPerlObj::Perl_pp_gnbyname -#undef pp_gnbyaddr -#define pp_gnbyaddr CPerlObj::Perl_pp_gnbyaddr -#undef pp_gnetent -#define pp_gnetent CPerlObj::Perl_pp_gnetent -#undef pp_gpbyname -#define pp_gpbyname CPerlObj::Perl_pp_gpbyname -#undef pp_gpbynumber -#define pp_gpbynumber CPerlObj::Perl_pp_gpbynumber -#undef pp_gprotoent -#define pp_gprotoent CPerlObj::Perl_pp_gprotoent -#undef pp_gsbyname -#define pp_gsbyname CPerlObj::Perl_pp_gsbyname -#undef pp_gsbyport -#define pp_gsbyport CPerlObj::Perl_pp_gsbyport -#undef pp_gservent -#define pp_gservent CPerlObj::Perl_pp_gservent -#undef pp_shostent -#define pp_shostent CPerlObj::Perl_pp_shostent -#undef pp_snetent -#define pp_snetent CPerlObj::Perl_pp_snetent -#undef pp_sprotoent -#define pp_sprotoent CPerlObj::Perl_pp_sprotoent -#undef pp_sservent -#define pp_sservent CPerlObj::Perl_pp_sservent -#undef pp_ehostent -#define pp_ehostent CPerlObj::Perl_pp_ehostent -#undef pp_enetent -#define pp_enetent CPerlObj::Perl_pp_enetent -#undef pp_eprotoent -#define pp_eprotoent CPerlObj::Perl_pp_eprotoent -#undef pp_eservent -#define pp_eservent CPerlObj::Perl_pp_eservent -#undef pp_gpwnam -#define pp_gpwnam CPerlObj::Perl_pp_gpwnam -#undef pp_gpwuid -#define pp_gpwuid CPerlObj::Perl_pp_gpwuid -#undef pp_gpwent -#define pp_gpwent CPerlObj::Perl_pp_gpwent -#undef pp_spwent -#define pp_spwent CPerlObj::Perl_pp_spwent -#undef pp_epwent -#define pp_epwent CPerlObj::Perl_pp_epwent -#undef pp_ggrnam -#define pp_ggrnam CPerlObj::Perl_pp_ggrnam -#undef pp_ggrgid -#define pp_ggrgid CPerlObj::Perl_pp_ggrgid -#undef pp_ggrent -#define pp_ggrent CPerlObj::Perl_pp_ggrent -#undef pp_sgrent -#define pp_sgrent CPerlObj::Perl_pp_sgrent -#undef pp_egrent -#define pp_egrent CPerlObj::Perl_pp_egrent -#undef pp_getlogin -#define pp_getlogin CPerlObj::Perl_pp_getlogin -#undef pp_syscall -#define pp_syscall CPerlObj::Perl_pp_syscall -#undef pp_lock -#define pp_lock CPerlObj::Perl_pp_lock -#undef pp_threadsv -#define pp_threadsv CPerlObj::Perl_pp_threadsv - -OP * (CPERLscope(*check)[]) _((OP *op)) = { - ck_null, /* null */ - ck_null, /* stub */ - ck_fun, /* scalar */ - ck_null, /* pushmark */ - ck_null, /* wantarray */ - ck_svconst, /* const */ - ck_null, /* gvsv */ - ck_null, /* gv */ - ck_null, /* gelem */ - ck_null, /* padsv */ - ck_null, /* padav */ - ck_null, /* padhv */ - ck_null, /* padany */ - ck_null, /* pushre */ - ck_rvconst, /* rv2gv */ - ck_rvconst, /* rv2sv */ - ck_null, /* av2arylen */ - ck_rvconst, /* rv2cv */ - ck_anoncode, /* anoncode */ - ck_null, /* prototype */ - ck_spair, /* refgen */ - ck_null, /* srefgen */ - ck_fun, /* ref */ - ck_fun, /* bless */ - ck_null, /* backtick */ - ck_glob, /* glob */ - ck_null, /* readline */ - ck_null, /* rcatline */ - ck_fun, /* regcmaybe */ - ck_fun, /* regcreset */ - ck_null, /* regcomp */ - ck_match, /* match */ - ck_match, /* qr */ - ck_null, /* subst */ - ck_null, /* substcont */ - ck_null, /* trans */ - ck_null, /* sassign */ - ck_null, /* aassign */ - ck_spair, /* chop */ - ck_null, /* schop */ - ck_spair, /* chomp */ - ck_null, /* schomp */ - ck_rfun, /* defined */ - ck_lfun, /* undef */ - ck_fun, /* study */ - ck_lfun, /* pos */ - ck_lfun, /* preinc */ - ck_lfun, /* i_preinc */ - ck_lfun, /* predec */ - ck_lfun, /* i_predec */ - ck_lfun, /* postinc */ - ck_lfun, /* i_postinc */ - ck_lfun, /* postdec */ - ck_lfun, /* i_postdec */ - ck_null, /* pow */ - ck_null, /* multiply */ - ck_null, /* i_multiply */ - ck_null, /* divide */ - ck_null, /* i_divide */ - ck_null, /* modulo */ - ck_null, /* i_modulo */ - ck_repeat, /* repeat */ - ck_null, /* add */ - ck_null, /* i_add */ - ck_null, /* subtract */ - ck_null, /* i_subtract */ - ck_concat, /* concat */ - ck_fun, /* stringify */ - ck_bitop, /* left_shift */ - ck_bitop, /* right_shift */ - ck_null, /* lt */ - ck_null, /* i_lt */ - ck_null, /* gt */ - ck_null, /* i_gt */ - ck_null, /* le */ - ck_null, /* i_le */ - ck_null, /* ge */ - ck_null, /* i_ge */ - ck_null, /* eq */ - ck_null, /* i_eq */ - ck_null, /* ne */ - ck_null, /* i_ne */ - ck_null, /* ncmp */ - ck_null, /* i_ncmp */ - ck_scmp, /* slt */ - ck_scmp, /* sgt */ - ck_scmp, /* sle */ - ck_scmp, /* sge */ - ck_null, /* seq */ - ck_null, /* sne */ - ck_scmp, /* scmp */ - ck_bitop, /* bit_and */ - ck_bitop, /* bit_xor */ - ck_bitop, /* bit_or */ - ck_null, /* negate */ - ck_null, /* i_negate */ - ck_null, /* not */ - ck_bitop, /* complement */ - ck_fun, /* atan2 */ - ck_fun, /* sin */ - ck_fun, /* cos */ - ck_fun, /* rand */ - ck_fun, /* srand */ - ck_fun, /* exp */ - ck_fun, /* log */ - ck_fun, /* sqrt */ - ck_fun, /* int */ - ck_fun, /* hex */ - ck_fun, /* oct */ - ck_fun, /* abs */ - ck_lengthconst, /* length */ - ck_fun, /* substr */ - ck_fun, /* vec */ - ck_index, /* index */ - ck_index, /* rindex */ - ck_fun_locale, /* sprintf */ - ck_fun, /* formline */ - ck_fun, /* ord */ - ck_fun, /* chr */ - ck_fun, /* crypt */ - ck_fun_locale, /* ucfirst */ - ck_fun_locale, /* lcfirst */ - ck_fun_locale, /* uc */ - ck_fun_locale, /* lc */ - ck_fun, /* quotemeta */ - ck_rvconst, /* rv2av */ - ck_null, /* aelemfast */ - ck_null, /* aelem */ - ck_null, /* aslice */ - ck_fun, /* each */ - ck_fun, /* values */ - ck_fun, /* keys */ - ck_delete, /* delete */ - ck_exists, /* exists */ - ck_rvconst, /* rv2hv */ - ck_null, /* helem */ - ck_null, /* hslice */ - ck_fun, /* unpack */ - ck_fun, /* pack */ - ck_split, /* split */ - ck_fun, /* join */ - ck_null, /* list */ - ck_null, /* lslice */ - ck_fun, /* anonlist */ - ck_fun, /* anonhash */ - ck_fun, /* splice */ - ck_fun, /* push */ - ck_shift, /* pop */ - ck_shift, /* shift */ - ck_fun, /* unshift */ - ck_sort, /* sort */ - ck_fun, /* reverse */ - ck_grep, /* grepstart */ - ck_null, /* grepwhile */ - ck_grep, /* mapstart */ - ck_null, /* mapwhile */ - ck_null, /* range */ - ck_null, /* flip */ - ck_null, /* flop */ - ck_null, /* and */ - ck_null, /* or */ - ck_null, /* xor */ - ck_null, /* cond_expr */ - ck_null, /* andassign */ - ck_null, /* orassign */ - ck_null, /* method */ - ck_subr, /* entersub */ - ck_null, /* leavesub */ - ck_fun, /* caller */ - ck_fun, /* warn */ - ck_fun, /* die */ - ck_fun, /* reset */ - ck_null, /* lineseq */ - ck_null, /* nextstate */ - ck_null, /* dbstate */ - ck_null, /* unstack */ - ck_null, /* enter */ - ck_null, /* leave */ - ck_null, /* scope */ - ck_null, /* enteriter */ - ck_null, /* iter */ - ck_null, /* enterloop */ - ck_null, /* leaveloop */ - ck_null, /* return */ - ck_null, /* last */ - ck_null, /* next */ - ck_null, /* redo */ - ck_null, /* dump */ - ck_null, /* goto */ - ck_fun, /* exit */ - ck_fun, /* open */ - ck_fun, /* close */ - ck_fun, /* pipe_op */ - ck_fun, /* fileno */ - ck_fun, /* umask */ - ck_fun, /* binmode */ - ck_fun, /* tie */ - ck_fun, /* untie */ - ck_fun, /* tied */ - ck_fun, /* dbmopen */ - ck_fun, /* dbmclose */ - ck_select, /* sselect */ - ck_select, /* select */ - ck_eof, /* getc */ - ck_fun, /* read */ - ck_fun, /* enterwrite */ - ck_null, /* leavewrite */ - ck_listiob, /* prtf */ - ck_listiob, /* print */ - ck_fun, /* sysopen */ - ck_fun, /* sysseek */ - ck_fun, /* sysread */ - ck_fun, /* syswrite */ - ck_fun, /* send */ - ck_fun, /* recv */ - ck_eof, /* eof */ - ck_fun, /* tell */ - ck_fun, /* seek */ - ck_trunc, /* truncate */ - ck_fun, /* fcntl */ - ck_fun, /* ioctl */ - ck_fun, /* flock */ - ck_fun, /* socket */ - ck_fun, /* sockpair */ - ck_fun, /* bind */ - ck_fun, /* connect */ - ck_fun, /* listen */ - ck_fun, /* accept */ - ck_fun, /* shutdown */ - ck_fun, /* gsockopt */ - ck_fun, /* ssockopt */ - ck_fun, /* getsockname */ - ck_fun, /* getpeername */ - ck_ftst, /* lstat */ - ck_ftst, /* stat */ - ck_ftst, /* ftrread */ - ck_ftst, /* ftrwrite */ - ck_ftst, /* ftrexec */ - ck_ftst, /* fteread */ - ck_ftst, /* ftewrite */ - ck_ftst, /* fteexec */ - ck_ftst, /* ftis */ - ck_ftst, /* fteowned */ - ck_ftst, /* ftrowned */ - ck_ftst, /* ftzero */ - ck_ftst, /* ftsize */ - ck_ftst, /* ftmtime */ - ck_ftst, /* ftatime */ - ck_ftst, /* ftctime */ - ck_ftst, /* ftsock */ - ck_ftst, /* ftchr */ - ck_ftst, /* ftblk */ - ck_ftst, /* ftfile */ - ck_ftst, /* ftdir */ - ck_ftst, /* ftpipe */ - ck_ftst, /* ftlink */ - ck_ftst, /* ftsuid */ - ck_ftst, /* ftsgid */ - ck_ftst, /* ftsvtx */ - ck_ftst, /* fttty */ - ck_ftst, /* fttext */ - ck_ftst, /* ftbinary */ - ck_fun, /* chdir */ - ck_fun, /* chown */ - ck_fun, /* chroot */ - ck_fun, /* unlink */ - ck_fun, /* chmod */ - ck_fun, /* utime */ - ck_fun, /* rename */ - ck_fun, /* link */ - ck_fun, /* symlink */ - ck_fun, /* readlink */ - ck_fun, /* mkdir */ - ck_fun, /* rmdir */ - ck_fun, /* open_dir */ - ck_fun, /* readdir */ - ck_fun, /* telldir */ - ck_fun, /* seekdir */ - ck_fun, /* rewinddir */ - ck_fun, /* closedir */ - ck_null, /* fork */ - ck_null, /* wait */ - ck_fun, /* waitpid */ - ck_exec, /* system */ - ck_exec, /* exec */ - ck_fun, /* kill */ - ck_null, /* getppid */ - ck_fun, /* getpgrp */ - ck_fun, /* setpgrp */ - ck_fun, /* getpriority */ - ck_fun, /* setpriority */ - ck_null, /* time */ - ck_null, /* tms */ - ck_fun, /* localtime */ - ck_fun, /* gmtime */ - ck_fun, /* alarm */ - ck_fun, /* sleep */ - ck_fun, /* shmget */ - ck_fun, /* shmctl */ - ck_fun, /* shmread */ - ck_fun, /* shmwrite */ - ck_fun, /* msgget */ - ck_fun, /* msgctl */ - ck_fun, /* msgsnd */ - ck_fun, /* msgrcv */ - ck_fun, /* semget */ - ck_fun, /* semctl */ - ck_fun, /* semop */ - ck_require, /* require */ - ck_fun, /* dofile */ - ck_eval, /* entereval */ - ck_null, /* leaveeval */ - ck_null, /* entertry */ - ck_null, /* leavetry */ - ck_fun, /* ghbyname */ - ck_fun, /* ghbyaddr */ - ck_null, /* ghostent */ - ck_fun, /* gnbyname */ - ck_fun, /* gnbyaddr */ - ck_null, /* gnetent */ - ck_fun, /* gpbyname */ - ck_fun, /* gpbynumber */ - ck_null, /* gprotoent */ - ck_fun, /* gsbyname */ - ck_fun, /* gsbyport */ - ck_null, /* gservent */ - ck_fun, /* shostent */ - ck_fun, /* snetent */ - ck_fun, /* sprotoent */ - ck_fun, /* sservent */ - ck_null, /* ehostent */ - ck_null, /* enetent */ - ck_null, /* eprotoent */ - ck_null, /* eservent */ - ck_fun, /* gpwnam */ - ck_fun, /* gpwuid */ - ck_null, /* gpwent */ - ck_null, /* spwent */ - ck_null, /* epwent */ - ck_fun, /* ggrnam */ - ck_fun, /* ggrgid */ - ck_null, /* ggrent */ - ck_null, /* sgrent */ - ck_null, /* egrent */ - ck_null, /* getlogin */ - ck_fun, /* syscall */ - ck_rfun, /* lock */ - ck_null, /* threadsv */ -}; - -OP * (CPERLscope(*ppaddr)[])(ARGSproto) = { - pp_null, - pp_stub, - pp_scalar, - pp_pushmark, - pp_wantarray, - pp_const, - pp_gvsv, - pp_gv, - pp_gelem, - pp_padsv, - pp_padav, - pp_padhv, - pp_padany, - pp_pushre, - pp_rv2gv, - pp_rv2sv, - pp_av2arylen, - pp_rv2cv, - pp_anoncode, - pp_prototype, - pp_refgen, - pp_srefgen, - pp_ref, - pp_bless, - pp_backtick, - pp_glob, - pp_readline, - pp_rcatline, - pp_regcmaybe, - pp_regcreset, - pp_regcomp, - pp_match, - pp_qr, - pp_subst, - pp_substcont, - pp_trans, - pp_sassign, - pp_aassign, - pp_chop, - pp_schop, - pp_chomp, - pp_schomp, - pp_defined, - pp_undef, - pp_study, - pp_pos, - pp_preinc, - pp_i_preinc, - pp_predec, - pp_i_predec, - pp_postinc, - pp_i_postinc, - pp_postdec, - pp_i_postdec, - pp_pow, - pp_multiply, - pp_i_multiply, - pp_divide, - pp_i_divide, - pp_modulo, - pp_i_modulo, - pp_repeat, - pp_add, - pp_i_add, - pp_subtract, - pp_i_subtract, - pp_concat, - pp_stringify, - pp_left_shift, - pp_right_shift, - pp_lt, - pp_i_lt, - pp_gt, - pp_i_gt, - pp_le, - pp_i_le, - pp_ge, - pp_i_ge, - pp_eq, - pp_i_eq, - pp_ne, - pp_i_ne, - pp_ncmp, - pp_i_ncmp, - pp_slt, - pp_sgt, - pp_sle, - pp_sge, - pp_seq, - pp_sne, - pp_scmp, - pp_bit_and, - pp_bit_xor, - pp_bit_or, - pp_negate, - pp_i_negate, - pp_not, - pp_complement, - pp_atan2, - pp_sin, - pp_cos, - pp_rand, - pp_srand, - pp_exp, - pp_log, - pp_sqrt, - pp_int, - pp_hex, - pp_oct, - pp_abs, - pp_length, - pp_substr, - pp_vec, - pp_index, - pp_rindex, - pp_sprintf, - pp_formline, - pp_ord, - pp_chr, - pp_crypt, - pp_ucfirst, - pp_lcfirst, - pp_uc, - pp_lc, - pp_quotemeta, - pp_rv2av, - pp_aelemfast, - pp_aelem, - pp_aslice, - pp_each, - pp_values, - pp_keys, - pp_delete, - pp_exists, - pp_rv2hv, - pp_helem, - pp_hslice, - pp_unpack, - pp_pack, - pp_split, - pp_join, - pp_list, - pp_lslice, - pp_anonlist, - pp_anonhash, - pp_splice, - pp_push, - pp_pop, - pp_shift, - pp_unshift, - pp_sort, - pp_reverse, - pp_grepstart, - pp_grepwhile, - pp_mapstart, - pp_mapwhile, - pp_range, - pp_flip, - pp_flop, - pp_and, - pp_or, - pp_xor, - pp_cond_expr, - pp_andassign, - pp_orassign, - pp_method, - pp_entersub, - pp_leavesub, - pp_caller, - pp_warn, - pp_die, - pp_reset, - pp_lineseq, - pp_nextstate, - pp_dbstate, - pp_unstack, - pp_enter, - pp_leave, - pp_scope, - pp_enteriter, - pp_iter, - pp_enterloop, - pp_leaveloop, - pp_return, - pp_last, - pp_next, - pp_redo, - pp_dump, - pp_goto, - pp_exit, - pp_open, - pp_close, - pp_pipe_op, - pp_fileno, - pp_umask, - pp_binmode, - pp_tie, - pp_untie, - pp_tied, - pp_dbmopen, - pp_dbmclose, - pp_sselect, - pp_select, - pp_getc, - pp_read, - pp_enterwrite, - pp_leavewrite, - pp_prtf, - pp_print, - pp_sysopen, - pp_sysseek, - pp_sysread, - pp_syswrite, - pp_send, - pp_recv, - pp_eof, - pp_tell, - pp_seek, - pp_truncate, - pp_fcntl, - pp_ioctl, - pp_flock, - pp_socket, - pp_sockpair, - pp_bind, - pp_connect, - pp_listen, - pp_accept, - pp_shutdown, - pp_gsockopt, - pp_ssockopt, - pp_getsockname, - pp_getpeername, - pp_lstat, - pp_stat, - pp_ftrread, - pp_ftrwrite, - pp_ftrexec, - pp_fteread, - pp_ftewrite, - pp_fteexec, - pp_ftis, - pp_fteowned, - pp_ftrowned, - pp_ftzero, - pp_ftsize, - pp_ftmtime, - pp_ftatime, - pp_ftctime, - pp_ftsock, - pp_ftchr, - pp_ftblk, - pp_ftfile, - pp_ftdir, - pp_ftpipe, - pp_ftlink, - pp_ftsuid, - pp_ftsgid, - pp_ftsvtx, - pp_fttty, - pp_fttext, - pp_ftbinary, - pp_chdir, - pp_chown, - pp_chroot, - pp_unlink, - pp_chmod, - pp_utime, - pp_rename, - pp_link, - pp_symlink, - pp_readlink, - pp_mkdir, - pp_rmdir, - pp_open_dir, - pp_readdir, - pp_telldir, - pp_seekdir, - pp_rewinddir, - pp_closedir, - pp_fork, - pp_wait, - pp_waitpid, - pp_system, - pp_exec, - pp_kill, - pp_getppid, - pp_getpgrp, - pp_setpgrp, - pp_getpriority, - pp_setpriority, - pp_time, - pp_tms, - pp_localtime, - pp_gmtime, - pp_alarm, - pp_sleep, - pp_shmget, - pp_shmctl, - pp_shmread, - pp_shmwrite, - pp_msgget, - pp_msgctl, - pp_msgsnd, - pp_msgrcv, - pp_semget, - pp_semctl, - pp_semop, - pp_require, - pp_dofile, - pp_entereval, - pp_leaveeval, - pp_entertry, - pp_leavetry, - pp_ghbyname, - pp_ghbyaddr, - pp_ghostent, - pp_gnbyname, - pp_gnbyaddr, - pp_gnetent, - pp_gpbyname, - pp_gpbynumber, - pp_gprotoent, - pp_gsbyname, - pp_gsbyport, - pp_gservent, - pp_shostent, - pp_snetent, - pp_sprotoent, - pp_sservent, - pp_ehostent, - pp_enetent, - pp_eprotoent, - pp_eservent, - pp_gpwnam, - pp_gpwuid, - pp_gpwent, - pp_spwent, - pp_epwent, - pp_ggrnam, - pp_ggrgid, - pp_ggrent, - pp_sgrent, - pp_egrent, - pp_getlogin, - pp_syscall, - pp_lock, - pp_threadsv, -}; - -int -fprintf(PerlIO *stream, const char *format, ...) -{ - va_list(arglist); - va_start(arglist, format); - return PerlIO_vprintf(stream, format, arglist); -} #undef PERLVAR #define PERLVAR(x, y) +#undef PERLVARA +#define PERLVARA(x, n, y) #undef PERLVARI -#define PERLVARI(x, y, z) PL_##x = z; +#define PERLVARI(x, y, z) interp.x = z; #undef PERLVARIC -#define PERLVARIC(x, y, z) PL_##x = z; +#define PERLVARIC(x, y, z) interp.x = z; -CPerlObj::CPerlObj(IPerlMem* ipM, IPerlEnv* ipE, IPerlStdIO* ipStd, - IPerlLIO* ipLIO, IPerlDir* ipD, IPerlSock* ipS, IPerlProc* ipP) +CPerlObj::CPerlObj(IPerlMem* ipM, IPerlMem* ipMS, IPerlMem* ipMP, + IPerlEnv* ipE, IPerlStdIO* ipStd, + IPerlLIO* ipLIO, IPerlDir* ipD, IPerlSock* ipS, + IPerlProc* ipP) { memset(((char*)this)+sizeof(void*), 0, sizeof(CPerlObj)-sizeof(void*)); #include "thrdvar.h" #include "intrpvar.h" -#include "perlvars.h" - PL_piMem = ipM; - PL_piENV = ipE; - PL_piStdIO = ipStd; - PL_piLIO = ipLIO; - PL_piDir = ipD; - PL_piSock = ipS; - PL_piProc = ipP; + PL_Mem = ipM; + PL_MemShared = ipMS; + PL_MemParse = ipMP; + PL_Env = ipE; + PL_StdIO = ipStd; + PL_LIO = ipLIO; + PL_Dir = ipD; + PL_Sock = ipS; + PL_Proc = ipP; } void* CPerlObj::operator new(size_t nSize, IPerlMem *pvtbl) { - if(pvtbl != NULL) - return pvtbl->Malloc(nSize); - + if(pvtbl) + return pvtbl->pMalloc(pvtbl, nSize); +#ifndef __MINGW32__ + /* operator new is supposed to throw std::bad_alloc */ return NULL; +#endif } -int& -CPerlObj::ErrorNo(void) -{ - return errno; -} - +#ifndef __BORLANDC__ void -CPerlObj::Init(void) +CPerlObj::operator delete(void *pPerl, IPerlMem *pvtbl) { + if(pvtbl) + pvtbl->pFree(pvtbl, pPerl); } +#endif #ifdef WIN32 /* XXX why are these needed? */ bool -do_exec(char *cmd) +Perl_do_exec(char *cmd) { return PerlProc_Cmd(cmd); } int -do_aspawn(void *vreally, void **vmark, void **vsp) +CPerlObj::do_aspawn(void *vreally, void **vmark, void **vsp) { return PerlProc_aspawn(vreally, vmark, vsp); } #endif /* WIN32 */ #endif /* PERL_OBJECT */ + +int +Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) +{ + dTHX; + va_list(arglist); + va_start(arglist, format); + return PerlIO_vprintf(stream, format, arglist); +} + +#include "perlapi.h" /* bring in PL_force_link_funcs */ diff --git a/gnu/usr.bin/perl/globvar.sym b/gnu/usr.bin/perl/globvar.sym new file mode 100644 index 00000000000..0d768889a85 --- /dev/null +++ b/gnu/usr.bin/perl/globvar.sym @@ -0,0 +1,68 @@ +# Global variables that must be exported for embedded applications. + +# *** Only structures/arrays with constant initializers should go here. +# *** Usual globals initialized at runtime should be added in *var*.h. +# *** Do NOT add functions here, those go in global.sym. + +AMG_names +block_type +fold +fold_locale +freq +warn_uninit +warn_nosemi +warn_reserved +warn_nl +no_wrongref +no_symref +no_usym +no_aelem +no_helem +no_modify +no_mem +no_security +no_sock_func +no_dir_func +no_func +no_myglob +check +op_desc +op_name +opargs +ppaddr +sig_name +sig_num +regkind +simple +utf8skip +uuemap +varies +vtbl_sv +vtbl_env +vtbl_envelem +vtbl_sig +vtbl_sigelem +vtbl_pack +vtbl_packelem +vtbl_dbline +vtbl_isa +vtbl_isaelem +vtbl_arylen +vtbl_glob +vtbl_mglob +vtbl_nkeys +vtbl_taint +vtbl_substr +vtbl_vec +vtbl_pos +vtbl_bm +vtbl_fm +vtbl_uvar +vtbl_mutex +vtbl_defelem +vtbl_regexp +vtbl_regdata +vtbl_regdatum +vtbl_collxfrm +vtbl_amagic +vtbl_amagicelem diff --git a/gnu/usr.bin/perl/hints/cygwin.sh b/gnu/usr.bin/perl/hints/cygwin.sh new file mode 100644 index 00000000000..42114c249f0 --- /dev/null +++ b/gnu/usr.bin/perl/hints/cygwin.sh @@ -0,0 +1,48 @@ +#! /bin/sh +# cygwin.sh - hints for building perl using the Cygwin environment for Win32 +# + +# not otherwise settable +exe_ext='.exe' +firstmakefile='GNUmakefile' +case "$ldlibpthname" in +'') ldlibpthname=PATH ;; +esac +archobjs='cygwin.o' + +# mandatory (overrides incorrect defaults) +test -z "$cc" && cc='gcc' +if test -z "$plibpth" +then + plibpth=`gcc -print-file-name=libc.a` + plibpth=`dirname $plibpth` + plibpth=`cd $plibpth && pwd` +fi +so='dll' +# - eliminate -lc, implied by gcc +libswanted=`echo " $libswanted " | sed -e 's/ c / /g'` +libswanted="$libswanted cygipc cygwin kernel32" +# - otherwise i686-cygwin +archname='cygwin' + +# dynamic loading +# - otherwise -fpic +cccdlflags=' ' +ld='ld2' + +# optional(ish) +# - perl malloc needs to be unpolluted +bincompat5005='undef' + +# stubs (ENOSYS, not implemented) +d_chroot='undef' +d_seteuid='undef' +d_setegid='undef' + +# Win9x problem with non-blocking read from a closed pipe +d_eofnblk='define' + +# strip exe's and dll's +#ldflags="$ldflags -s" +#ccdlflags="$ccdlflags -s" +#lddlflags="$lddlflags -s" diff --git a/gnu/usr.bin/perl/hints/darwin.sh b/gnu/usr.bin/perl/hints/darwin.sh new file mode 100644 index 00000000000..fd61e424b03 --- /dev/null +++ b/gnu/usr.bin/perl/hints/darwin.sh @@ -0,0 +1,63 @@ +## +# Darwin (Mac OS) hints +# Wilfredo Sanchez +## + +## +# Paths +## + +# BSD paths +prefix='/usr'; +siteprefix='/usr/local'; +vendorprefix='/usr/local'; usevendorprefix='define'; + +# 4BSD uses /usr/share/man, not /usr/man. +# Don't put man pages in /usr/lib; that's goofy. +man1dir='/usr/share/man/man1'; +man3dir='/usr/share/man/man3'; + +# Where to put modules. +privlib='/System/Library/Perl'; +sitelib='/Local/Library/Perl'; +vendorlib='/Network/Library/Perl'; + +## +# Tool chain settings +## + +# Since we can build fat, the archname doesn't need the processor type +archname='darwin'; + +# nm works. +usenm='true'; + +# Libc is in libsystem. +libc='/System/Library/Frameworks/System.framework/System'; + +# Optimize. +optimize='-O3'; + +# We have a prototype for telldir. +ccflags="${ccflags} -pipe -fno-common -DHAS_TELLDIR_PROTOTYPE"; + +# Shared library extension is .dylib. +# Bundle extension is .bundle. +ld='cc'; +so='dylib'; +dlext='bundle'; +dlsrc='dl_dyld.xs'; usedl='define'; +cccdlflags=''; +lddlflags="${ldflags} -bundle -undefined suppress"; +ldlibpthname='DYLD_LIBRARY_PATH'; +useshrplib='true'; + +## +# System libraries +## + +# vfork works +usevfork='true'; + +# malloc works +usemymalloc='n'; diff --git a/gnu/usr.bin/perl/hints/dos_djgpp.sh b/gnu/usr.bin/perl/hints/dos_djgpp.sh index 7c59428c7e4..d50bca4b25e 100644 --- a/gnu/usr.bin/perl/hints/dos_djgpp.sh +++ b/gnu/usr.bin/perl/hints/dos_djgpp.sh @@ -3,6 +3,7 @@ # 971015 - archname changed from 'djgpp' to 'dos-djgpp' # 971210 - threads support +# 000222 - added -DPERL_EXTERNAL_GLOB to ccflags archname='dos-djgpp' archobjs='djgpp.o' @@ -27,6 +28,9 @@ lns='cp' usenm='true' +# this reportedly causes compile errors in system includes +i_ieeefp='undef' + d_link='undef' # these are empty functions in libc.a d_symlink='undef' d_fork='undef' @@ -39,6 +43,7 @@ case "X$optimize" in optimize="-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2" ;; esac +ccflags="$ccflags -DPERL_EXTERNAL_GLOB" ldflags='-s' usemymalloc='n' timetype='time_t' diff --git a/gnu/usr.bin/perl/hints/lynxos.sh b/gnu/usr.bin/perl/hints/lynxos.sh index ddffcbe3cc7..0023e831b0b 100644 --- a/gnu/usr.bin/perl/hints/lynxos.sh +++ b/gnu/usr.bin/perl/hints/lynxos.sh @@ -4,8 +4,16 @@ # These hints were submitted by: # Greg Seibert # seibert@Lynx.COM +# and +# Ed Mooring +# mooring@lynx.com # cc='gcc' so='none' usemymalloc='n' +d_union_semun='define' +ccflags="$ccflags -DEXTRA_F_IN_SEMUN_BUF -D__NO_INCLUDE_WARN__" + +# When LynxOS runs a script with "#!" it sets argv[0] to the script name +toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"' diff --git a/gnu/usr.bin/perl/hints/mint.sh b/gnu/usr.bin/perl/hints/mint.sh index 22d854c397c..ab55e612e10 100644 --- a/gnu/usr.bin/perl/hints/mint.sh +++ b/gnu/usr.bin/perl/hints/mint.sh @@ -18,7 +18,7 @@ cc='gcc' # The weird include path is really to work around some bugs in # broken system header files. -ccflags="-D__MINT__ -Uatarist -DDEBUGGING -I$here/../mint" +ccflags="$ccflags -D__MINT__ -Uatarist -DDEBUGGING -I$here/../mint" # libs @@ -44,6 +44,7 @@ util_cflags='ccflags="$ccflags -DLOCALE_ENVIRON_REQUIRED"' # # Some good answers to the questions in Configure: +# Does Configure really get all these wrong? usenm='true' d_suidsafe='true' clocktype='long' diff --git a/gnu/usr.bin/perl/hints/newsos4.sh b/gnu/usr.bin/perl/hints/newsos4.sh index a33cb3154a3..3e447a55692 100644 --- a/gnu/usr.bin/perl/hints/newsos4.sh +++ b/gnu/usr.bin/perl/hints/newsos4.sh @@ -6,11 +6,10 @@ echo echo 'Compiling Tips:' echo 'When you have found that ld complains "multiple defined" error' echo 'on linking /lib/libdbm.a, do following instructions.' -echo ' cd /tmp (working on /tmp)' echo ' cp /lib/libdbm.a dbm.o (copy current libdbm.a)' echo ' ar cr libdbm.a dbm.o (make archive)' echo ' mv /lib/libdbm.a /lib/libdbm.a.backup (backup original library)' -echo ' cp /tmp/libdbm.a /lib (copy newer one)' +echo ' cp libdbm.a /lib (copy newer one)' echo ' ranlib /lib/libdbm.a (ranlib for later use)' echo diff --git a/gnu/usr.bin/perl/hints/posix-bc.sh b/gnu/usr.bin/perl/hints/posix-bc.sh new file mode 100644 index 00000000000..ec21bc327e4 --- /dev/null +++ b/gnu/usr.bin/perl/hints/posix-bc.sh @@ -0,0 +1,42 @@ +#! /usr/bin/bash -norc +# hints/posix-bc.sh +# +# BS2000 (Posix Subsystem) hints by Thomas Dorner +# +# thanks to the authors of the os390.sh +# + +# To get ANSI C, we need to use c89, and ld doesn't exist +cc='c89' +ld='c89' + +# C-Flags: +ccflags='-DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' + +# Flags on a RISC-Host (SUNRISE): +if [ -n "`bs2cmd SHOW-SYSTEM-INFO | egrep 'HSI-ATT.*TYPE.*SR'`" ]; then + echo + echo "Congratulations, you are running a machine with Sunrise CPUs." + echo "Let's hope you have the matching RISC compiler as well." + ccflags='-K risc_4000 -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' + ldflags='-K risc_4000' +fi + +# Turning on optimization breaks perl (CORE-DUMP): +optimize='none' + +# we don''t use dynamic memorys (yet): +so='none' +usedl='no' +dlext='none' + +# On BS2000/Posix, libc.a doesn't really hold anything at all, +# so running nm on it is pretty useless. +usenm='no' + +# other Options: + +usemymalloc='no' + +archobjs=ebcdic.o + diff --git a/gnu/usr.bin/perl/hints/rhapsody.sh b/gnu/usr.bin/perl/hints/rhapsody.sh new file mode 100644 index 00000000000..933081ba090 --- /dev/null +++ b/gnu/usr.bin/perl/hints/rhapsody.sh @@ -0,0 +1,67 @@ +## +# Rhapsody (Mac OS X Server) hints +# Wilfredo Sanchez +## + +## +# Paths +## + +# BSD paths +prefix='/usr'; +siteprefix='/usr/local'; +vendorprefix='/usr/local'; usevendorprefix='define'; + +# 4BSD uses /usr/share/man, not /usr/man. +# Don't put man pages in /usr/lib; that's goofy. +man1dir='/usr/share/man/man1'; +man3dir='/usr/share/man/man3'; + +# Where to put modules. +privlib='/System/Library/Perl'; +sitelib='/Local/Library/Perl'; +vendorlib='/Network/Library/Perl'; + +## +# Tool chain settings +## + +# Since we can build fat, the archname doesn't need the processor type +archname='rhapsody'; + +# nm works. +usenm='true'; + +# Libc is in libsystem. +libc='/System/Library/Frameworks/System.framework/System'; + +# Optimize. +optimize='-O3'; + +# We have a prototype for telldir. +ccflags="${ccflags} -pipe -fno-common -DHAS_TELLDIR_PROTOTYPE"; + +# Shared library extension is .dylib. +# Bundle extension is .bundle. +ld='cc'; +so='dylib'; +dlext='bundle'; +dlsrc='dl_dyld.xs'; +usedl='define'; +cccdlflags=''; +lddlflags="${ldflags} -bundle -undefined suppress"; +ldlibpthname='DYLD_LIBRARY_PATH'; +useshrplib='true'; +base_address='0x4be00000'; + +## +# System libraries +## + +# vfork works +usevfork='true'; + +# malloc works +usemymalloc='n'; + + diff --git a/gnu/usr.bin/perl/hints/svr5.sh b/gnu/usr.bin/perl/hints/svr5.sh new file mode 100644 index 00000000000..f73689507a2 --- /dev/null +++ b/gnu/usr.bin/perl/hints/svr5.sh @@ -0,0 +1,221 @@ +# svr5 hints, System V Release 5.x (UnixWare 7) +# mods after mail fm Andy Dougherty +# Reworked by hops@sco.com Sept/Oct 1999 for UW7.1 platform support +# Boyd Gerber, gerberb@zenez.com 1999/09/21 for threads support. +# Originally taken from svr4 hints.sh 21-Sep-98 hops@sco.com +# which was version of 1996/10/25 by Tye McQueen, tye@metronet.com + +# Use Configure -Dusethreads to enable threads. +# Use Configure -Dcc=gcc to use gcc. +case "$cc" in +*gcc*) + # "$gccversion" not set yet + vers=`gcc -v 2>&1 | sed -n -e 's@.*version \([^ ][^ ]*\) .*@\1@p'` + case $vers in + *2.95*) + ccflags='-fno-strict-aliasing' + # More optimisation provided in gcc-2.95 causes miniperl to segv. + # -fno-strict-aliasing is supposed to correct this but + # if it doesn't and you get segv when the build runs miniperl then + # disable optimisation as below + # optimize=' ' + ;; + esac + ;; +esac + +# Hardwire the processor to 586 for consistancy with autoconf +# archname='i586-svr5' +# -- seems this is generally disliked by perl porters so leave it to float + +# Our default setup excludes anything from /usr/ucblib (and consequently dbm) +# as later modules assume symbols found are available in shared libs +# On svr5 these are static archives which causes problems for +# dynamic modules loaded later (and ucblib is a bad dream anyway) +# +# However there is a dbm library built from the ucb sources outside ucblib +# at http://www.sco.com/skunkware (installing into /usr/local) so if we +# detect this we'll use it. You can change the default +# (to allow ucblib and its dbm or disallowing non ucb dbm) by +# changing 'want_*' config values below to '' to disable or otherwise to enable + +# Leave leading tabs so Configure doesn't propagate variables to config.sh + + want_ucb='' # don't use anything from /usr/ucblib - icky + want_dbm='yes' # use dbm if can find library in /usr/local/lib + want_gdbm='yes' # use gdbm if can find library in /usr/local/lib + want_udk70='' # link with old static libc pieces + # link with udk70 if building on 7.1 abd want resulting binary + # to run on uw7.0* - it will link in referenced static symbols + # of libc that are (now) in the shared libc.so on 7.1 but were + # not there in 7.0. + # There are still scenarios where this is still insufficient so + # overall it is preferable to get ptf7051e + # ftp://ftp.sco.com/SLS/ptf7051e.Z + # installed on any/all 7.0 systems and leave the above unset. + +if [ "$want_ucb" ] ; then + ldflags= '-L/usr/ucblib' + ccflags='-I/usr/ucbinclude' + # /usr/ccs/include and /usr/ccs/lib are used implicitly by cc as reqd +else + libswanted=`echo " $libswanted " | sed -e 's/ ucb / /'` + glibpth=`echo " $glibpth " | sed -e 's/ \/usr\/ucblib / /'` + + # If see libdbm in /usr/local and not overidden assume its the + # non ucblib rebuild from skunkware and use it + if [ ! -f /usr/local/lib/libdbm.so -o ! "$want_dbm" ] ; then + i_dbm='undef' + libswanted=`echo " $libswanted " | sed -e 's/ dbm / /'` + fi +fi + +if [ ! "$want_gdbm" ] ; then + i_gdbm='undef' + libswanted=`echo " $libswanted " | sed -e 's/ gdbm / /'` +fi + + +# Don't use problematic libraries: +# libmalloc.a - Probably using Perl's malloc() anyway. +# libc: on UW7 don't want -lc explicitly as native cc gives warnings/errors +libswanted=`echo " $libswanted " | sed -e 's/ malloc / /' -e 's/ c / /'` + +# remove /shlib and /lib from library search path as both symlink to /usr/lib +# where runtime shared libc is +glibpth=`echo " $glibpth " | sed -e 's/ \/shlib / /' -e 's/ \/lib / /` + +# Don't use BSD emulation pieces (/usr/ucblib) regardless +# these would probably be autonondetected anyway but ... +d_Gconvert='gcvt((x),(n),(b))' # Try gcvt() before gconvert(). +d_bcopy='undef' d_bcmp='undef' d_bzero='undef' d_safebcpy='undef' +d_index='undef' d_killpg='undef' d_getprior='undef' d_setprior='undef' +d_setlinebuf='undef' +d_setregid='undef' d_setreuid='undef' # -- in /usr/lib/libc.so.1 + + +# Broken C-Shell tests (Thanks to Tye McQueen): +# The OS-specific checks may be obsoleted by the this generic test. + sh_cnt=`sh -c 'echo /*' | wc -c` + csh_cnt=`csh -f -c 'glob /*' 2>/dev/null | wc -c` + csh_cnt=`expr 1 + $csh_cnt` +if [ "$sh_cnt" -ne "$csh_cnt" ]; then + echo "You're csh has a broken 'glob', disabling..." >&2 + d_csh='undef' +fi + +# Unixware-specific problems. UW7 give correctname with uname -s +# UnixWare has a broken csh. (This might already be detected above). +# Configure can't detect memcpy or memset on Unixware 2 or 7 +# +# Leave leading tabs on the next two lines so Configure doesn't +# propagate these variables to config.sh + uw_ver=`uname -v` + uw_isuw=`uname -s 2>&1` + +if [ "$uw_isuw" = "UnixWare" ]; then + case $uw_ver in + 7.1*) + d_csh='undef' + d_memcpy='define' + d_memset='define' + stdio_cnt='((fp)->__cnt)' + d_stdio_cnt_lval='define' + stdio_ptr='((fp)->__ptr)' + d_stdio_ptr_lval='define' + + d_bcopy='define' # In /usr/lib/libc.so.1 + d_setregid='define' # " + d_setreuid='define' # " + + if [ -f /usr/ccs/lib/libcudk70.a -a "$want_udk70" ] ; then + libswanted=" $libswanted cudk70" + fi + ;; + 7*) + d_csh='undef' + d_memcpy='define' + d_memset='define' + stdio_cnt='((fp)->__cnt)' + d_stdio_cnt_lval='define' + stdio_ptr='((fp)->__ptr)' + d_stdio_ptr_lval='define' + ;; + esac +fi +# End of Unixware-specific tests. + +############################################################### +# Dynamic loading section: Is default so it should just happen. +# set below to explicitly force. +# usedl='define' +# dlext='so' +# dlsrc='dl_dlopen.xs' +# +# ccdlflags : must tell the linker to export all global symbols +# cccdlflags: must tell the compiler to generate relocatable code +# lddlflags : must tell the linker to output a shared library + +# use shared perl lib +useshrplib='true' + +case "$cc" in + *gcc*) + ccdlflags='-Xlinker -Bexport ' + cccdlflags='-fpic' + lddlflags='-G ' + ;; + + *) + ccdlflags='-Wl,-Bexport' + cccdlflags='-Kpic' + lddlflags='-G -Wl,-Bexport' + ;; +esac + +############################################################################ +# Thread support +# use Configure -Dusethreads to enable +# This script UU/usethreads.cbu will get 'called-back' by Configure +# after it has prompted the user for whether to use threads. +cat > UU/usethreads.cbu <<'EOCBU' +case "$usethreads" in +$define|true|[yY]*) + ccflags="$ccflags" + shift + libswanted="$*" + case "$cc" in + *gcc*) + ccflags="-D_REENTRANT $ccflags -fpic -pthread" + cccdlflags='-fpic' + lddlflags='-pthread -G ' + ;; + *) + ccflags="-D_REENTRANT $ccflags -KPIC -Kthread" + ccdlflags='-Kthread -Wl,-Bexport' + cccdlflags='-KPIC -Kthread' + lddlflags='-G -Kthread -Wl,-Bexport ' + ldflags='-Kthread' + ;; + esac +esac +EOCBU + + +d_suidsafe='define' # "./Configure -d" can't figure this out easily + +################## final caveat msgs to builder ############### +cat <<'EOM' >&4 + +If you wish to use dynamic linking, you must use + LD_LIBRARY_PATH=`pwd`; export LD_LIBRARY_PATH +or + setenv LD_LIBRARY_PATH `pwd` +before running make. + +If you are using shared libraries from /usr/local/lib +for libdbm or libgdbm you may need to set + LD_RUN_PATH=/usr/local/lib; export LD_RUN_PATH +in order for Configure to compile the simple test program + +EOM diff --git a/gnu/usr.bin/perl/hints/vmesa.sh b/gnu/usr.bin/perl/hints/vmesa.sh new file mode 100644 index 00000000000..bc033878229 --- /dev/null +++ b/gnu/usr.bin/perl/hints/vmesa.sh @@ -0,0 +1,338 @@ +# hints/vmesa.sh +# +# VM/ESA hints by Neale Ferguson (neale@mailbox.tabnsw.com.au) +# +# Currently (1999-Jan-09) Configure cannot be used in VM/ESA because +# too many things are done differently in the C compiler environment. +# Therefore the hints file is hand-crafted. --jhi@iki.fi +# + +case "$archname" in +'') archname="$osname" ;; +esac +bin='/usr/local/bin' +binexp='/usr/local/bin' +byacc='byacc' +c='\c' +cc='c89' +ccflags="-D_OE_SOCKETS -DOLD_PTHREADS_API -DYYDYNAMIC -DDEBUGGING -I.." \ + "-I/usr/local/include -W c,hwopts\\\(string\\\),langlvl\\\(ansi\\\)" +clocktype='clock_t' +cryptlib="n" +d_Gconvert='gcvt((x),(n),(b))' +d_access='define' +d_alarm='define' +d_archlib='define' +# randbits='15' +archobjs="ebcdic.o vmesa.o" +d_attribut='undef' +d_bcmp='define' +d_bcopy='define' +d_bsd='undef' +d_bsdgetpgrp='undef' +d_bsdsetpgrp='undef' +d_bzero='define' +d_casti32='define' +d_castneg='define' +d_charvspr='undef' +d_chown='define' +d_chroot='undef' +d_chsize='undef' +d_closedir='define' +d_const='define' +d_crypt='undef' +d_csh='undef' +d_cuserid='define' +d_dbl_dig='define' +d_difftime='define' +d_dirnamlen='undef' +d_dlerror='define' +d_dlopen='define' +d_dlsymun='define' +d_dosuid='undef' +d_dup2='define' +d_endgrent='undef' +d_endpwent='undef' +d_eofnblk='define' +d_eunice='undef' +d_fchmod='define' +d_fchown='define' +d_fcntl='define' +d_fd_macros='define' +d_fd_set='define' +d_fds_bits='define' +d_fgetpos='define' +d_flexfnam='define' +d_flock='undef' +d_fork='undef' +d_fpathconf='define' +d_fsetpos='define' +d_ftime='undef' +d_getgrent='undef' +d_gethent='define' +d_gethname='undef' +d_getlogin='define' +d_getpgid='undef' +d_getpgrp='define' +d_getpgrp2='undef' +d_getppid='define' +d_getprior='undef' +d_getpwent='undef' +d_gettimeod='define' +d_gnulibc='undef' +d_htonl='define' +d_index='define' +d_inetaton='undef' +d_isascii='define' +d_killpg='define' +d_link='define' +d_locconv='define' +d_lockf='define' +d_longdbl='undef' +d_longllong='undef' +d_lstat='define' +d_mblen='define' +d_mbstowcs='define' +d_mbtowc='define' +d_memcmp='define' +d_memcpy='define' +d_memmove='define' +d_memset='define' +d_mkdir='define' +d_mkfifo='define' +d_mktime='define' +d_msg='define' +d_msgctl='define' +d_msgget='define' +d_msgrcv='define' +d_msgsnd='define' +d_mymalloc='undef' +d_nice='undef' +d_oldsock='undef' +d_open3='define' +d_pathconf='define' +d_pause='define' +d_phostname='undef' +d_pipe='define' +d_poll='undef' +d_portable='define' +d_pwage='undef' +d_pwchange='undef' +d_pwclass='undef' +d_pwcomment='undef' +d_pwexpire='undef' +d_pwquota='undef' +d_readdir='define' +d_readlink='define' +d_rename='define' +d_rewinddir='define' +d_rmdir='define' +d_safebcpy='define' +d_safemcpy='undef' +d_sanemcmp='define' +d_sched_yield='undef' +d_seekdir='undef' +d_select='define' +d_sem='define' +d_semctl='define' +d_semctl_semid_ds='define' +d_semget='define' +d_semop='define' +d_setegid='define' +d_seteuid='define' +d_setgrent='undef' +d_setgrps='undef' +d_setlinebuf='undef' +d_setlocale='define' +d_setpgid='define' +d_setpgrp='define' +d_setpgrp2='undef' +d_setprior='undef' +d_setpwent='undef' +d_setregid='undef' +d_setresgid='undef' +d_setresuid='undef' +d_setreuid='undef' +d_setrgid='undef' +d_setruid='undef' +d_setsid='define' +d_sfio='undef' +d_shm='define' +d_shmat='define' +d_shmatprototype='define' +d_shmctl='define' +d_shmdt='define' +d_shmget='define' +d_sigaction='define' +d_sigsetjmp='define' +d_socket='define' +d_sockpair='undef' +d_statblks='undef' +d_stdio_cnt_lval='undef' +d_stdio_ptr_lval='undef' +d_stdiobase='undef' +d_stdstdio='undef' +d_strchr='define' +d_strcoll='define' +d_strctcpy='undef' +d_strerrm='strerror(e)' +d_strerror='define' +d_strtod='define' +d_strtol='define' +d_strtoul='define' +d_strxfrm='define' +d_suidsafe='undef' +d_symlink='define' +d_syscall='undef' +d_sysconf='define' +d_sysernlst="n" +d_syserrlst='undef' +d_system='define' +d_tcgetpgrp='define' +d_tcsetpgrp='define' +d_telldir='undef' +d_time='define' +d_times='define' +d_truncate='define' +d_tzname='define' +d_umask='define' +d_uname='define' +d_union_semun='undef' +d_vfork='define' +d_void_closedir='undef' +d_voidsig='define' +d_voidtty="n" +d_volatile='define' +d_vprintf='define' +d_waitpid='define' +d_wait4='undef' +d_wcstombs='define' +d_wctomb='define' +d_xenix='undef' +db_hashtype='u_int32_t' +db_prefixtype='size_t' +direntrytype='struct dirent' +dlext='none' +dlsrc='dl_vmesa.xs' +dynamic_ext='' +eagain='EAGAIN' +ebcdic='define' +exe_ext='' +extensions='Fcntl GDBM_File IO NDBM_File Opcode POSIX Socket IPC/SysV Errno Thread attrs re Data/dumper' +fpostype='fpos_t' +freetype='void' +groupstype='gid_t' +h_fcntl='false' +h_sysfile='true' +hint='recommended' +i_arpainet="define" +i_bsdioctl="n" +i_db='undef' +i_dbm='define' +i_dirent='define' +i_dld='define' +i_dlfcn='define' +i_fcntl='undef' +i_float='define' +i_gdbm='define' +i_grp='define' +i_limits='define' +i_locale='define' +i_malloc='undef' +i_math='define' +i_memory='define' +i_ndbm='define' +i_neterrno='undef' +i_niin='define' +i_pwd='define' +i_rpcsvcdbm='undef' +i_sfio='undef' +i_sgtty='undef' +i_stdarg='define' +i_stddef='define' +i_stdlib='define' +i_string='define' +i_sysdir='define' +i_sysfile='define' +i_sysfilio='undef' +i_sysin='undef' +i_sysioctl='define' +i_sysndir='undef' +i_sysparam='undef' +i_sysresrc='define' +i_sysselct='undef' +i_syssockio="n" +i_sysstat='define' +i_systime='define' +i_systimek='undef' +i_systimes='define' +i_systypes='define' +i_sysun='define' +i_syswait='define' +i_termio='undef' +i_termios='define' +i_time='undef' +i_unistd='define' +i_utime='define' +i_values='undef' +i_varargs='undef' +i_varhdr='stdarg.h' +i_vfork='undef' +ld='c89' +ldflags='-L/usr/local/lib -L.' +lib_ext='.a' +libc='' +libperl='libperl.a' +libpth='/usr/local/lib /lib /usr/lib' +libs='-l//posxsock -l//vmmtlib -lgdbm -lxpg4' +libswanted='gdbm' +lint="n" +locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' +loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' +make_set_make='#' +make='gnumake' +mallocobj='' +mallocsrc='' +malloctype='void *' +models='none' +netdb_hlen_type='size_t' +netdb_host_type='char *' +netdb_name_type='const char *' +netdb_net_type='in_addr_t' +o_nonblock='O_NONBLOCK' +obj_ext='.o' +optimize='undef' +prefix='/usr/local' +prefixexp='/usr/local' +prototype='define' +ranlib=':' +rd_nodata='-1' +scriptdir='/usr/local/bin' +scriptdirexp='/usr/local/bin' +selecttype='fd_set *' +shmattype='void *' +shrpenv='' +signal_t='void' +sig_name_init='"ZERO","HUP","INT","ABRT","ILL","POLL","URG","STOP","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","NUM18","CONT","CHLD","TTIN","TTOU","IO","QUIT","TSTP","TRAP","NUM27","WINCH","XCPU","XFSZ","VTALRM","PROF","NUM33","NUM34","NUM35","NUM36","NUM3","NUM38","NUM39","NUM40","NUM41","NUM42","NUM43","NUM44","NUM45","NUM46","NUM47","NUM48","NUM49","CLD"' +sig_num_init='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,20 ' +sizetype='size_t' +so='.a' +ssizetype='ssize_t' +static_ext='Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File Opcode POSIX Socket Thread attrs re' +stdchar='char' +stdio_cnt='(fp)->__countIn' +stdio_ptr='(fp)->__bufPtr' +timeincl='sys/time.h ' +timetype='time_t' +uidtype='uid_t' +usedl='define' +usemymalloc='n' +usenm='false' +useopcode='true' +useperlio='undef' +useposix='true' +usesfio='false' +useshrplib='false' +usethreads='y' +usevfork='true' +vi='x' diff --git a/gnu/usr.bin/perl/intrpvar.h b/gnu/usr.bin/perl/intrpvar.h index 1f6244d557a..39d14c985e4 100644 --- a/gnu/usr.bin/perl/intrpvar.h +++ b/gnu/usr.bin/perl/intrpvar.h @@ -8,25 +8,21 @@ * generated when built with or without MULTIPLICITY. It is also used * to generate the appropriate export list for win32. * - * When building without MULTIPLICITY, these variables will be truly global. - * - * Avoid build-specific #ifdefs here, like DEBUGGING. That way, - * we can keep binary compatibility of the curinterp structure */ + * When building without MULTIPLICITY, these variables will be truly global. */ /* pseudo environmental stuff */ PERLVAR(Iorigargc, int) PERLVAR(Iorigargv, char **) PERLVAR(Ienvgv, GV *) -PERLVAR(Isiggv, GV *) PERLVAR(Iincgv, GV *) PERLVAR(Ihintgv, GV *) PERLVAR(Iorigfilename, char *) PERLVAR(Idiehook, SV *) PERLVAR(Iwarnhook, SV *) -PERLVAR(Iparsehook, SV *) -PERLVAR(Icddir, char *) /* switches */ + +/* switches */ PERLVAR(Iminus_c, bool) -PERLVAR(Ipatchlevel[10],char) +PERLVAR(Ipatchlevel, SV *) PERLVAR(Ilocalpatches, char **) PERLVARI(Isplitstr, char *, " ") PERLVAR(Ipreprocess, bool) @@ -36,17 +32,25 @@ PERLVAR(Iminus_l, bool) PERLVAR(Iminus_a, bool) PERLVAR(Iminus_F, bool) PERLVAR(Idoswitches, bool) -PERLVAR(Idowarn, bool) + +/* +=for apidoc Amn|bool|PL_dowarn + +The C variable which corresponds to Perl's $^W warning variable. + +=cut +*/ + +PERLVAR(Idowarn, U8) +PERLVAR(Iwidesyscalls, bool) /* wide system calls */ PERLVAR(Idoextract, bool) PERLVAR(Isawampersand, bool) /* must save all match strings */ -PERLVAR(Isawstudy, bool) /* do fbm_instr on all strings */ -PERLVAR(Isawvec, bool) PERLVAR(Iunsafe, bool) PERLVAR(Iinplace, char *) PERLVAR(Ie_script, SV *) PERLVAR(Iperldb, U32) -/* This value may be raised by extensions for testing purposes */ +/* This value may be set when embedding for full cleanup */ /* 0=none, 1=full, 2=full with checks */ PERLVARI(Iperl_destruct_level, int, 0) @@ -59,22 +63,20 @@ PERLVARI(Imaxsysfd, I32, MAXSYSFD) /* top fd to pass to subprocesses */ PERLVAR(Imultiline, int) /* $*--do strings hold >1 line? */ PERLVAR(Istatusvalue, I32) /* $? */ +PERLVAR(Iexit_flags, U8) /* was exit() unexpected, etc. */ #ifdef VMS PERLVAR(Istatusvalue_vms,U32) #endif /* shortcuts to various I/O objects */ PERLVAR(Istdingv, GV *) +PERLVAR(Istderrgv, GV *) PERLVAR(Idefgv, GV *) PERLVAR(Iargvgv, GV *) PERLVAR(Iargvoutgv, GV *) +PERLVAR(Iargvout_stack, AV *) /* shortcuts to regexp stuff */ -/* XXX these three aren't used anywhere */ -PERLVAR(Ileftgv, GV *) -PERLVAR(Iampergv, GV *) -PERLVAR(Irightgv, GV *) - /* this one needs to be moved to thrdvar.h and accessed via * find_threadsv() when USE_THREADS */ PERLVAR(Ireplgv, GV *) @@ -85,6 +87,29 @@ PERLVAR(Ierrgv, GV *) /* shortcuts to debugging objects */ PERLVAR(IDBgv, GV *) PERLVAR(IDBline, GV *) + +/* +=for apidoc Amn|GV *|PL_DBsub +When Perl is run in debugging mode, with the B<-d> switch, this GV contains +the SV which holds the name of the sub being debugged. This is the C +variable which corresponds to Perl's $DB::sub variable. See +C. + +=for apidoc Amn|SV *|PL_DBsingle +When Perl is run in debugging mode, with the B<-d> switch, this SV is a +boolean which indicates whether subs are being single-stepped. +Single-stepping is automatically turned on after every step. This is the C +variable which corresponds to Perl's $DB::single variable. See +C. + +=for apidoc Amn|SV *|PL_DBtrace +Trace variable used when Perl is run in debugging mode, with the B<-d> +switch. This is the C variable which corresponds to Perl's $DB::trace +variable. See C. + +=cut +*/ + PERLVAR(IDBsub, GV *) PERLVAR(IDBsingle, SV *) PERLVAR(IDBtrace, SV *) @@ -98,6 +123,7 @@ PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */ PERLVAR(Icurstname, SV *) /* name of current package */ PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */ PERLVAR(Iendav, AV *) /* names of END subroutines */ +PERLVAR(Icheckav, AV *) /* names of CHECK subroutines */ PERLVAR(Iinitav, AV *) /* names of INIT subroutines */ PERLVAR(Istrtab, HV *) /* shared string table */ PERLVARI(Isub_generation,U32,1) /* incr to invalidate method cache */ @@ -109,8 +135,6 @@ PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */ PERLVAR(Isv_arenaroot, SV*) /* list of areas for garbage collection */ /* funky return mechanisms */ -PERLVAR(Ilastspbase, I32) -PERLVAR(Ilastsize, I32) PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */ /* subprocess state */ @@ -119,13 +143,6 @@ PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */ /* internal state */ PERLVAR(Itainting, bool) /* doing taint checks */ PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */ -PERLVAR(Ilast_proto, char *) /* Prototype of last sub seen. */ - -/* trace state */ -PERLVAR(Idlevel, I32) -PERLVARI(Idlmax, I32, 128) -PERLVAR(Idebname, char *) -PERLVAR(Idebdelim, char *) /* current interpreter roots */ PERLVAR(Imain_cv, CV *) @@ -139,15 +156,11 @@ PERLVARI(Icurcopdb, COP *, NULL) PERLVARI(Icopline, line_t, NOLINE) /* statics moved here for shared library purposes */ -PERLVAR(Istrchop, SV) /* return value from chop */ PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */ PERLVAR(Ilastfd, int) /* what to preserve mode on */ PERLVAR(Ioldname, char *) /* what to preserve mode on */ PERLVAR(IArgv, char **) /* stuff to free from do_aexec, vfork safe */ PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */ -PERLVAR(Imystrk, SV *) /* temp key string for do_each() */ -PERLVAR(Idumplvl, I32) /* indentation level on syntax tree dump */ -PERLVAR(Ioldlastpm, PMOP *) /* for saving regexp context in debugger */ PERLVAR(Igensym, I32) /* next symbol for getsym() to define */ PERLVAR(Ipreambled, bool) PERLVAR(Ipreambleav, AV *) @@ -164,6 +177,19 @@ PERLVAR(Iofmt, char *) /* output format for numbers $# */ PERLVARI(Iexitlist, PerlExitListEntry *, NULL) /* list of exit functions */ PERLVARI(Iexitlistlen, I32, 0) /* length of same */ + +/* +=for apidoc Amn|HV*|PL_modglobal + +C is a general purpose, interpreter global HV for use by +extensions that need to keep information on a per-interpreter basis. +In a pinch, it can also be used as a symbol table for extensions +to share data among each other. It is a good idea to use keys +prefixed by the package name of the extension that owns the data. + +=cut +*/ + PERLVAR(Imodglobal, HV *) /* per-interp module data */ /* these used to be in global before 5.004_68 */ @@ -187,7 +213,6 @@ PERLVAR(Isys_intern, struct interp_intern) /* more statics moved here */ PERLVARI(Igeneration, int, 100) /* from op.c */ PERLVAR(IDBcv, CV *) /* from perl.c */ -PERLVAR(Iarchpat_auto, char*) /* from perl.c */ PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */ PERLVARI(Iin_clean_all, bool, FALSE) /* from sv.c */ @@ -202,18 +227,219 @@ PERLVARI(Ithreadnum, U32, 0) /* incremented each thread creation */ PERLVAR(Istrtab_mutex, perl_mutex) /* Mutex for string table access */ #endif /* USE_THREADS */ -PERLVARI(Ibytecode_iv_overflows,int, 0) /* from bytecode.h */ -PERLVAR(Ibytecode_sv, SV *) -PERLVAR(Ibytecode_pv, XPV) -PERLVAR(Ibytecode_obj_list, void **) -PERLVARI(Ibytecode_obj_list_fill, I32, -1) - -#ifdef PERL_OBJECT -PERLVARI(piMem, IPerlMem*, NULL) -PERLVARI(piENV, IPerlEnv*, NULL) -PERLVARI(piStdIO, IPerlStdIO*, NULL) -PERLVARI(piLIO, IPerlLIO*, NULL) -PERLVARI(piDir, IPerlDir*, NULL) -PERLVARI(piSock, IPerlSock*, NULL) -PERLVARI(piProc, IPerlProc*, NULL) +PERLVAR(Iuid, Uid_t) /* current real user id */ +PERLVAR(Ieuid, Uid_t) /* current effective user id */ +PERLVAR(Igid, Gid_t) /* current real group id */ +PERLVAR(Iegid, Gid_t) /* current effective group id */ +PERLVAR(Inomemok, bool) /* let malloc context handle nomem */ +PERLVAR(Ian, U32) /* malloc sequence number */ +PERLVAR(Icop_seqmax, U32) /* statement sequence number */ +PERLVAR(Iop_seqmax, U16) /* op sequence number */ +PERLVAR(Ievalseq, U32) /* eval sequence number */ +PERLVAR(Iorigenviron, char **) +PERLVAR(Iorigalen, U32) +PERLVAR(Ipidstatus, HV *) /* pid-to-status mappings for waitpid */ +PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */ +PERLVAR(Iosname, char *) /* operating system */ +PERLVARI(Ish_path, char *, SH_PATH)/* full path of shell */ +PERLVAR(Isighandlerp, Sighandler_t) + +PERLVAR(Ixiv_arenaroot, XPV*) /* list of allocated xiv areas */ +PERLVAR(Ixiv_root, IV *) /* free xiv list--shared by interpreters */ +PERLVAR(Ixnv_root, NV *) /* free xnv list--shared by interpreters */ +PERLVAR(Ixrv_root, XRV *) /* free xrv list--shared by interpreters */ +PERLVAR(Ixpv_root, XPV *) /* free xpv list--shared by interpreters */ +PERLVAR(Ixpviv_root, XPVIV *) /* free xpviv list--shared by interpreters */ +PERLVAR(Ixpvnv_root, XPVNV *) /* free xpvnv list--shared by interpreters */ +PERLVAR(Ixpvcv_root, XPVCV *) /* free xpvcv list--shared by interpreters */ +PERLVAR(Ixpvav_root, XPVAV *) /* free xpvav list--shared by interpreters */ +PERLVAR(Ixpvhv_root, XPVHV *) /* free xpvhv list--shared by interpreters */ +PERLVAR(Ixpvmg_root, XPVMG *) /* free xpvmg list--shared by interpreters */ +PERLVAR(Ixpvlv_root, XPVLV *) /* free xpvlv list--shared by interpreters */ +PERLVAR(Ixpvbm_root, XPVBM *) /* free xpvbm list--shared by interpreters */ +PERLVAR(Ihe_root, HE *) /* free he list--shared by interpreters */ +PERLVAR(Inice_chunk, char *) /* a nice chunk of memory to reuse */ +PERLVAR(Inice_chunk_size, U32) /* how nice the chunk of memory is */ + +PERLVARI(Irunops, runops_proc_t, MEMBER_TO_FPTR(RUNOPS_DEFAULT)) + +PERLVARA(Itokenbuf,256, char) + +/* +=for apidoc Amn|SV|PL_sv_undef +This is the C SV. Always refer to this as C<&PL_sv_undef>. + +=for apidoc Amn|SV|PL_sv_no +This is the C SV. See C. Always refer to this as +C<&PL_sv_no>. + +=for apidoc Amn|SV|PL_sv_yes +This is the C SV. See C. Always refer to this as +C<&PL_sv_yes>. + +=cut +*/ + +PERLVAR(Isv_undef, SV) +PERLVAR(Isv_no, SV) +PERLVAR(Isv_yes, SV) + +#ifdef CSH +PERLVARI(Icshname, char *, CSH) +PERLVAR(Icshlen, I32) +#endif + +PERLVAR(Ilex_state, U32) /* next token is determined */ +PERLVAR(Ilex_defer, U32) /* state after determined token */ +PERLVAR(Ilex_expect, int) /* expect after determined token */ +PERLVAR(Ilex_brackets, I32) /* bracket count */ +PERLVAR(Ilex_formbrack, I32) /* bracket count at outer format level */ +PERLVAR(Ilex_casemods, I32) /* casemod count */ +PERLVAR(Ilex_dojoin, I32) /* doing an array interpolation */ +PERLVAR(Ilex_starts, I32) /* how many interps done on level */ +PERLVAR(Ilex_stuff, SV *) /* runtime pattern from m// or s/// */ +PERLVAR(Ilex_repl, SV *) /* runtime replacement from s/// */ +PERLVAR(Ilex_op, OP *) /* extra info to pass back on op */ +PERLVAR(Ilex_inpat, OP *) /* in pattern $) and $| are special */ +PERLVAR(Ilex_inwhat, I32) /* what kind of quoting are we in */ +PERLVAR(Ilex_brackstack,char *) /* what kind of brackets to pop */ +PERLVAR(Ilex_casestack, char *) /* what kind of case mods in effect */ + +/* What we know when we're in LEX_KNOWNEXT state. */ +PERLVARA(Inextval,5, YYSTYPE) /* value of next token, if any */ +PERLVARA(Inexttype,5, I32) /* type of next token */ +PERLVAR(Inexttoke, I32) + +PERLVAR(Ilinestr, SV *) +PERLVAR(Ibufptr, char *) +PERLVAR(Ioldbufptr, char *) +PERLVAR(Ioldoldbufptr, char *) +PERLVAR(Ibufend, char *) +PERLVARI(Iexpect,int, XSTATE) /* how to interpret ambiguous tokens */ + +PERLVAR(Imulti_start, I32) /* 1st line of multi-line string */ +PERLVAR(Imulti_end, I32) /* last line of multi-line string */ +PERLVAR(Imulti_open, I32) /* delimiter of said string */ +PERLVAR(Imulti_close, I32) /* delimiter of said string */ + +PERLVAR(Ierror_count, I32) /* how many errors so far, max 10 */ +PERLVAR(Isubline, I32) /* line this subroutine began on */ +PERLVAR(Isubname, SV *) /* name of current subroutine */ + +PERLVAR(Imin_intro_pending, I32) /* start of vars to introduce */ +PERLVAR(Imax_intro_pending, I32) /* end of vars to introduce */ +PERLVAR(Ipadix, I32) /* max used index in current "register" pad */ +PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */ +PERLVAR(Ipad_reset_pending, I32) /* reset pad on next attempted alloc */ + +PERLVAR(Ilast_uni, char *) /* position of last named-unary op */ +PERLVAR(Ilast_lop, char *) /* position of last list operator */ +PERLVAR(Ilast_lop_op, OPCODE) /* last list operator */ +PERLVAR(Iin_my, I32) /* we're compiling a "my" (or "our") declaration */ +PERLVAR(Iin_my_stash, HV *) /* declared class of this "my" declaration */ +#ifdef FCRYPT +PERLVAR(Icryptseen, bool) /* has fast crypt() been initialized? */ +#endif + +PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */ + +PERLVAR(Idebug, VOL U32) /* flags given to -D switch */ + +PERLVAR(Iamagic_generation, long) + +#ifdef USE_LOCALE_COLLATE +PERLVAR(Icollation_ix, U32) /* Collation generation index */ +PERLVAR(Icollation_name,char *) /* Name of current collation */ +PERLVARI(Icollation_standard, bool, TRUE) + /* Assume simple collation */ +PERLVAR(Icollxfrm_base, Size_t) /* Basic overhead in *xfrm() */ +PERLVARI(Icollxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */ +#endif /* USE_LOCALE_COLLATE */ + +#ifdef USE_LOCALE_NUMERIC + +PERLVAR(Inumeric_name, char *) /* Name of current numeric locale */ +PERLVARI(Inumeric_standard, bool, TRUE) + /* Assume simple numerics */ +PERLVARI(Inumeric_local, bool, TRUE) + /* Assume local numerics */ +PERLVAR(Inumeric_radix, char) + /* The radix character if not '.' */ + +#endif /* !USE_LOCALE_NUMERIC */ + +/* utf8 character classes */ +PERLVAR(Iutf8_alnum, SV *) +PERLVAR(Iutf8_alnumc, SV *) +PERLVAR(Iutf8_ascii, SV *) +PERLVAR(Iutf8_alpha, SV *) +PERLVAR(Iutf8_space, SV *) +PERLVAR(Iutf8_cntrl, SV *) +PERLVAR(Iutf8_graph, SV *) +PERLVAR(Iutf8_digit, SV *) +PERLVAR(Iutf8_upper, SV *) +PERLVAR(Iutf8_lower, SV *) +PERLVAR(Iutf8_print, SV *) +PERLVAR(Iutf8_punct, SV *) +PERLVAR(Iutf8_xdigit, SV *) +PERLVAR(Iutf8_mark, SV *) +PERLVAR(Iutf8_toupper, SV *) +PERLVAR(Iutf8_totitle, SV *) +PERLVAR(Iutf8_tolower, SV *) +PERLVAR(Ilast_swash_hv, HV *) +PERLVAR(Ilast_swash_klen, U32) +PERLVARA(Ilast_swash_key,10, U8) +PERLVAR(Ilast_swash_tmps, U8 *) +PERLVAR(Ilast_swash_slen, STRLEN) + +/* perly.c globals */ +PERLVAR(Iyydebug, int) +PERLVAR(Iyynerrs, int) +PERLVAR(Iyyerrflag, int) +PERLVAR(Iyychar, int) +PERLVAR(Iyyval, YYSTYPE) +PERLVAR(Iyylval, YYSTYPE) + +PERLVAR(Iglob_index, int) +PERLVAR(Isrand_called, bool) +PERLVARA(Iuudmap,256, char) +PERLVAR(Ibitcount, char *) + +#ifdef USE_THREADS +PERLVAR(Isv_mutex, perl_mutex) /* Mutex for allocating SVs in sv.c */ +PERLVAR(Ieval_mutex, perl_mutex) /* Mutex for doeval */ +PERLVAR(Ieval_cond, perl_cond) /* Condition variable for doeval */ +PERLVAR(Ieval_owner, struct perl_thread *) + /* Owner thread for doeval */ +PERLVAR(Inthreads, int) /* Number of threads currently */ +PERLVAR(Ithreads_mutex, perl_mutex) /* Mutex for nthreads and thread list */ +PERLVAR(Inthreads_cond, perl_cond) /* Condition variable for nthreads */ +PERLVAR(Isvref_mutex, perl_mutex) /* Mutex for SvREFCNT_{inc,dec} */ +PERLVARI(Ithreadsv_names,char *, THREADSV_NAMES) +#ifdef FAKE_THREADS +PERLVAR(Icurthr, struct perl_thread *) + /* Currently executing (fake) thread */ +#endif + +PERLVAR(Icred_mutex, perl_mutex) /* altered credentials in effect */ + +#endif /* USE_THREADS */ + +PERLVAR(Ipsig_ptr, SV**) +PERLVAR(Ipsig_name, SV**) + +#if defined(PERL_IMPLICIT_SYS) +PERLVAR(IMem, struct IPerlMem*) +PERLVAR(IMemShared, struct IPerlMem*) +PERLVAR(IMemParse, struct IPerlMem*) +PERLVAR(IEnv, struct IPerlEnv*) +PERLVAR(IStdIO, struct IPerlStdIO*) +PERLVAR(ILIO, struct IPerlLIO*) +PERLVAR(IDir, struct IPerlDir*) +PERLVAR(ISock, struct IPerlSock*) +PERLVAR(IProc, struct IPerlProc*) +#endif + +#if defined(USE_ITHREADS) +PERLVAR(Iptr_table, PTR_TBL_t*) #endif diff --git a/gnu/usr.bin/perl/iperlsys.h b/gnu/usr.bin/perl/iperlsys.h index da8c5d6ac93..f36dcd5f32a 100644 --- a/gnu/usr.bin/perl/iperlsys.h +++ b/gnu/usr.bin/perl/iperlsys.h @@ -71,63 +71,118 @@ # define PERLIO_IS_STDIO # endif #else -extern void PerlIO_init _((void)); +extern void PerlIO_init (void); #endif -#ifdef PERL_OBJECT +#ifndef Sighandler_t +typedef Signal_t (*Sighandler_t) (int); +#endif + +#if defined(PERL_IMPLICIT_SYS) #ifndef PerlIO typedef struct _PerlIO PerlIO; #endif -class IPerlStdIO +/* IPerlStdIO */ +struct IPerlStdIO; +struct IPerlStdIOInfo; +typedef PerlIO* (*LPStdin)(struct IPerlStdIO*); +typedef PerlIO* (*LPStdout)(struct IPerlStdIO*); +typedef PerlIO* (*LPStderr)(struct IPerlStdIO*); +typedef PerlIO* (*LPOpen)(struct IPerlStdIO*, const char*, + const char*); +typedef int (*LPClose)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPEof)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPError)(struct IPerlStdIO*, PerlIO*); +typedef void (*LPClearerr)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPGetc)(struct IPerlStdIO*, PerlIO*); +typedef char* (*LPGetBase)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPGetBufsiz)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPGetCnt)(struct IPerlStdIO*, PerlIO*); +typedef char* (*LPGetPtr)(struct IPerlStdIO*, PerlIO*); +typedef char* (*LPGets)(struct IPerlStdIO*, PerlIO*, char*, int); +typedef int (*LPPutc)(struct IPerlStdIO*, PerlIO*, int); +typedef int (*LPPuts)(struct IPerlStdIO*, PerlIO*, const char*); +typedef int (*LPFlush)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPUngetc)(struct IPerlStdIO*, PerlIO*,int); +typedef int (*LPFileno)(struct IPerlStdIO*, PerlIO*); +typedef PerlIO* (*LPFdopen)(struct IPerlStdIO*, int, const char*); +typedef PerlIO* (*LPReopen)(struct IPerlStdIO*, const char*, + const char*, PerlIO*); +typedef SSize_t (*LPRead)(struct IPerlStdIO*, PerlIO*, void*, Size_t); +typedef SSize_t (*LPWrite)(struct IPerlStdIO*, PerlIO*, const void*, + Size_t); +typedef void (*LPSetBuf)(struct IPerlStdIO*, PerlIO*, char*); +typedef int (*LPSetVBuf)(struct IPerlStdIO*, PerlIO*, char*, int, + Size_t); +typedef void (*LPSetCnt)(struct IPerlStdIO*, PerlIO*, int); +typedef void (*LPSetPtrCnt)(struct IPerlStdIO*, PerlIO*, char*, + int); +typedef void (*LPSetlinebuf)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPPrintf)(struct IPerlStdIO*, PerlIO*, const char*, + ...); +typedef int (*LPVprintf)(struct IPerlStdIO*, PerlIO*, const char*, + va_list); +typedef long (*LPTell)(struct IPerlStdIO*, PerlIO*); +typedef int (*LPSeek)(struct IPerlStdIO*, PerlIO*, Off_t, int); +typedef void (*LPRewind)(struct IPerlStdIO*, PerlIO*); +typedef PerlIO* (*LPTmpfile)(struct IPerlStdIO*); +typedef int (*LPGetpos)(struct IPerlStdIO*, PerlIO*, Fpos_t*); +typedef int (*LPSetpos)(struct IPerlStdIO*, PerlIO*, + const Fpos_t*); +typedef void (*LPInit)(struct IPerlStdIO*); +typedef void (*LPInitOSExtras)(struct IPerlStdIO*); +typedef PerlIO* (*LPFdupopen)(struct IPerlStdIO*, PerlIO*); + +struct IPerlStdIO { -public: - virtual PerlIO * Stdin(void) = 0; - virtual PerlIO * Stdout(void) = 0; - virtual PerlIO * Stderr(void) = 0; - virtual PerlIO * Open(const char *, const char *, int &err) = 0; - virtual int Close(PerlIO*, int &err) = 0; - virtual int Eof(PerlIO*, int &err) = 0; - virtual int Error(PerlIO*, int &err) = 0; - virtual void Clearerr(PerlIO*, int &err) = 0; - virtual int Getc(PerlIO*, int &err) = 0; - virtual char * GetBase(PerlIO *, int &err) = 0; - virtual int GetBufsiz(PerlIO *, int &err) = 0; - virtual int GetCnt(PerlIO *, int &err) = 0; - virtual char * GetPtr(PerlIO *, int &err) = 0; - virtual char * Gets(PerlIO*, char*, int, int& err) = 0; - virtual int Putc(PerlIO*, int, int &err) = 0; - virtual int Puts(PerlIO*, const char *, int &err) = 0; - virtual int Flush(PerlIO*, int &err) = 0; - virtual int Ungetc(PerlIO*,int, int &err) = 0; - virtual int Fileno(PerlIO*, int &err) = 0; - virtual PerlIO * Fdopen(int, const char *, int &err) = 0; - virtual PerlIO * Reopen(const char*, const char*, PerlIO*, int &err) = 0; - virtual SSize_t Read(PerlIO*,void *,Size_t, int &err) = 0; - virtual SSize_t Write(PerlIO*,const void *,Size_t, int &err) = 0; - virtual void SetBuf(PerlIO *, char*, int &err) = 0; - virtual int SetVBuf(PerlIO *, char*, int, Size_t, int &err) = 0; - virtual void SetCnt(PerlIO *, int, int &err) = 0; - virtual void SetPtrCnt(PerlIO *, char *, int, int& err) = 0; - virtual void Setlinebuf(PerlIO*, int &err) = 0; - virtual int Printf(PerlIO*, int &err, const char *,...) = 0; - virtual int Vprintf(PerlIO*, int &err, const char *, va_list) = 0; - virtual long Tell(PerlIO*, int &err) = 0; - virtual int Seek(PerlIO*, Off_t, int, int &err) = 0; - virtual void Rewind(PerlIO*, int &err) = 0; - virtual PerlIO * Tmpfile(int &err) = 0; - virtual int Getpos(PerlIO*, Fpos_t *, int &err) = 0; - virtual int Setpos(PerlIO*, const Fpos_t *, int &err) = 0; - virtual void Init(int &err) = 0; - virtual void InitOSExtras(void* p) = 0; -#ifdef WIN32 - virtual int OpenOSfhandle(long osfhandle, int flags) = 0; - virtual int GetOSfhandle(int filenum) = 0; -#endif + LPStdin pStdin; + LPStdout pStdout; + LPStderr pStderr; + LPOpen pOpen; + LPClose pClose; + LPEof pEof; + LPError pError; + LPClearerr pClearerr; + LPGetc pGetc; + LPGetBase pGetBase; + LPGetBufsiz pGetBufsiz; + LPGetCnt pGetCnt; + LPGetPtr pGetPtr; + LPGets pGets; + LPPutc pPutc; + LPPuts pPuts; + LPFlush pFlush; + LPUngetc pUngetc; + LPFileno pFileno; + LPFdopen pFdopen; + LPReopen pReopen; + LPRead pRead; + LPWrite pWrite; + LPSetBuf pSetBuf; + LPSetVBuf pSetVBuf; + LPSetCnt pSetCnt; + LPSetPtrCnt pSetPtrCnt; + LPSetlinebuf pSetlinebuf; + LPPrintf pPrintf; + LPVprintf pVprintf; + LPTell pTell; + LPSeek pSeek; + LPRewind pRewind; + LPTmpfile pTmpfile; + LPGetpos pGetpos; + LPSetpos pSetpos; + LPInit pInit; + LPInitOSExtras pInitOSExtras; + LPFdupopen pFdupopen; }; - +struct IPerlStdIOInfo +{ + unsigned long nCount; /* number of entries expected */ + struct IPerlStdIO perlStdIOList; +}; #ifdef USE_STDIO_PTR # define PerlIO_has_cntptr(f) 1 @@ -154,55 +209,93 @@ public: #define PerlIO_has_base(f) 0 #endif -#define PerlIO_stdin() PL_piStdIO->Stdin() -#define PerlIO_stdout() PL_piStdIO->Stdout() -#define PerlIO_stderr() PL_piStdIO->Stderr() -#define PerlIO_open(x,y) PL_piStdIO->Open((x),(y), ErrorNo()) -#define PerlIO_close(f) PL_piStdIO->Close((f), ErrorNo()) -#define PerlIO_eof(f) PL_piStdIO->Eof((f), ErrorNo()) -#define PerlIO_error(f) PL_piStdIO->Error((f), ErrorNo()) -#define PerlIO_clearerr(f) PL_piStdIO->Clearerr((f), ErrorNo()) -#define PerlIO_getc(f) PL_piStdIO->Getc((f), ErrorNo()) -#define PerlIO_get_base(f) PL_piStdIO->GetBase((f), ErrorNo()) -#define PerlIO_get_bufsiz(f) PL_piStdIO->GetBufsiz((f), ErrorNo()) -#define PerlIO_get_cnt(f) PL_piStdIO->GetCnt((f), ErrorNo()) -#define PerlIO_get_ptr(f) PL_piStdIO->GetPtr((f), ErrorNo()) -#define PerlIO_putc(f,c) PL_piStdIO->Putc((f),(c), ErrorNo()) -#define PerlIO_puts(f,s) PL_piStdIO->Puts((f),(s), ErrorNo()) -#define PerlIO_flush(f) PL_piStdIO->Flush((f), ErrorNo()) -#define PerlIO_gets(s, n, fp) PL_piStdIO->Gets((fp), s, n, ErrorNo()) -#define PerlIO_ungetc(f,c) PL_piStdIO->Ungetc((f),(c), ErrorNo()) -#define PerlIO_fileno(f) PL_piStdIO->Fileno((f), ErrorNo()) -#define PerlIO_fdopen(f, s) PL_piStdIO->Fdopen((f),(s), ErrorNo()) -#define PerlIO_reopen(p, m, f) PL_piStdIO->Reopen((p), (m), (f), ErrorNo()) +#define PerlIO_stdin() \ + (*PL_StdIO->pStdin)(PL_StdIO) +#define PerlIO_stdout() \ + (*PL_StdIO->pStdout)(PL_StdIO) +#define PerlIO_stderr() \ + (*PL_StdIO->pStderr)(PL_StdIO) +#define PerlIO_open(x,y) \ + (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) +#define PerlIO_close(f) \ + (*PL_StdIO->pClose)(PL_StdIO, (f)) +#define PerlIO_eof(f) \ + (*PL_StdIO->pEof)(PL_StdIO, (f)) +#define PerlIO_error(f) \ + (*PL_StdIO->pError)(PL_StdIO, (f)) +#define PerlIO_clearerr(f) \ + (*PL_StdIO->pClearerr)(PL_StdIO, (f)) +#define PerlIO_getc(f) \ + (*PL_StdIO->pGetc)(PL_StdIO, (f)) +#define PerlIO_get_base(f) \ + (*PL_StdIO->pGetBase)(PL_StdIO, (f)) +#define PerlIO_get_bufsiz(f) \ + (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) +#define PerlIO_get_cnt(f) \ + (*PL_StdIO->pGetCnt)(PL_StdIO, (f)) +#define PerlIO_get_ptr(f) \ + (*PL_StdIO->pGetPtr)(PL_StdIO, (f)) +#define PerlIO_putc(f,c) \ + (*PL_StdIO->pPutc)(PL_StdIO, (f),(c)) +#define PerlIO_puts(f,s) \ + (*PL_StdIO->pPuts)(PL_StdIO, (f),(s)) +#define PerlIO_flush(f) \ + (*PL_StdIO->pFlush)(PL_StdIO, (f)) +#define PerlIO_gets(s, n, fp) \ + (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n) +#define PerlIO_ungetc(f,c) \ + (*PL_StdIO->pUngetc)(PL_StdIO, (f),(c)) +#define PerlIO_fileno(f) \ + (*PL_StdIO->pFileno)(PL_StdIO, (f)) +#define PerlIO_fdopen(f, s) \ + (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) +#define PerlIO_reopen(p, m, f) \ + (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) #define PerlIO_read(f,buf,count) \ - (SSize_t)PL_piStdIO->Read((f), (buf), (count), ErrorNo()) + (SSize_t)(*PL_StdIO->pRead)(PL_StdIO, (f), (buf), (count)) #define PerlIO_write(f,buf,count) \ - PL_piStdIO->Write((f), (buf), (count), ErrorNo()) -#define PerlIO_setbuf(f,b) PL_piStdIO->SetBuf((f), (b), ErrorNo()) -#define PerlIO_setvbuf(f,b,t,s) PL_piStdIO->SetVBuf((f), (b), (t), (s), ErrorNo()) -#define PerlIO_set_cnt(f,c) PL_piStdIO->SetCnt((f), (c), ErrorNo()) + (*PL_StdIO->pWrite)(PL_StdIO, (f), (buf), (count)) +#define PerlIO_setbuf(f,b) \ + (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b)) +#define PerlIO_setvbuf(f,b,t,s) \ + (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s)) +#define PerlIO_set_cnt(f,c) \ + (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c)) #define PerlIO_set_ptrcnt(f,p,c) \ - PL_piStdIO->SetPtrCnt((f), (p), (c), ErrorNo()) -#define PerlIO_setlinebuf(f) PL_piStdIO->Setlinebuf((f), ErrorNo()) -#define PerlIO_printf fprintf -#define PerlIO_stdoutf PL_piStdIO->Printf -#define PerlIO_vprintf(f,fmt,a) PL_piStdIO->Vprintf((f), ErrorNo(), (fmt),a) -#define PerlIO_tell(f) PL_piStdIO->Tell((f), ErrorNo()) -#define PerlIO_seek(f,o,w) PL_piStdIO->Seek((f),(o),(w), ErrorNo()) -#define PerlIO_getpos(f,p) PL_piStdIO->Getpos((f),(p), ErrorNo()) -#define PerlIO_setpos(f,p) PL_piStdIO->Setpos((f),(p), ErrorNo()) -#define PerlIO_rewind(f) PL_piStdIO->Rewind((f), ErrorNo()) -#define PerlIO_tmpfile() PL_piStdIO->Tmpfile(ErrorNo()) -#define PerlIO_init() PL_piStdIO->Init(ErrorNo()) + (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c)) +#define PerlIO_setlinebuf(f) \ + (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) +#define PerlIO_printf Perl_fprintf_nocontext +#define PerlIO_stdoutf *PL_StdIO->pPrintf +#define PerlIO_vprintf(f,fmt,a) \ + (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) +#define PerlIO_tell(f) \ + (*PL_StdIO->pTell)(PL_StdIO, (f)) +#define PerlIO_seek(f,o,w) \ + (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) +#define PerlIO_getpos(f,p) \ + (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p)) +#define PerlIO_setpos(f,p) \ + (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p)) +#define PerlIO_rewind(f) \ + (*PL_StdIO->pRewind)(PL_StdIO, (f)) +#define PerlIO_tmpfile() \ + (*PL_StdIO->pTmpfile)(PL_StdIO) +#define PerlIO_init() \ + (*PL_StdIO->pInit)(PL_StdIO) #undef init_os_extras -#define init_os_extras() PL_piStdIO->InitOSExtras(this) +#define init_os_extras() \ + (*PL_StdIO->pInitOSExtras)(PL_StdIO) +#define PerlIO_fdupopen(f) \ + (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) -#else /* PERL_OBJECT */ +#else /* PERL_IMPLICIT_SYS */ #include "perlsdio.h" +#include "perl.h" +#define PerlIO_fdupopen(f) (f) -#endif /* PERL_OBJECT */ +#endif /* PERL_IMPLICIT_SYS */ #ifndef PERLIO_IS_STDIO #ifdef USE_SFIO @@ -250,133 +343,136 @@ struct _PerlIO; #endif #ifndef PerlIO_stdoutf -extern int PerlIO_stdoutf _((const char *,...)) - __attribute__((format (printf, 1, 2))); +extern int PerlIO_stdoutf (const char *,...) + __attribute__((__format__ (__printf__, 1, 2))); #endif #ifndef PerlIO_puts -extern int PerlIO_puts _((PerlIO *,const char *)); +extern int PerlIO_puts (PerlIO *,const char *); #endif #ifndef PerlIO_open -extern PerlIO * PerlIO_open _((const char *,const char *)); +extern PerlIO * PerlIO_open (const char *,const char *); #endif #ifndef PerlIO_close -extern int PerlIO_close _((PerlIO *)); +extern int PerlIO_close (PerlIO *); #endif #ifndef PerlIO_eof -extern int PerlIO_eof _((PerlIO *)); +extern int PerlIO_eof (PerlIO *); #endif #ifndef PerlIO_error -extern int PerlIO_error _((PerlIO *)); +extern int PerlIO_error (PerlIO *); #endif #ifndef PerlIO_clearerr -extern void PerlIO_clearerr _((PerlIO *)); +extern void PerlIO_clearerr (PerlIO *); #endif #ifndef PerlIO_getc -extern int PerlIO_getc _((PerlIO *)); +extern int PerlIO_getc (PerlIO *); #endif #ifndef PerlIO_putc -extern int PerlIO_putc _((PerlIO *,int)); +extern int PerlIO_putc (PerlIO *,int); #endif #ifndef PerlIO_flush -extern int PerlIO_flush _((PerlIO *)); +extern int PerlIO_flush (PerlIO *); #endif #ifndef PerlIO_ungetc -extern int PerlIO_ungetc _((PerlIO *,int)); +extern int PerlIO_ungetc (PerlIO *,int); #endif #ifndef PerlIO_fileno -extern int PerlIO_fileno _((PerlIO *)); +extern int PerlIO_fileno (PerlIO *); #endif #ifndef PerlIO_fdopen -extern PerlIO * PerlIO_fdopen _((int, const char *)); +extern PerlIO * PerlIO_fdopen (int, const char *); #endif #ifndef PerlIO_importFILE -extern PerlIO * PerlIO_importFILE _((FILE *,int)); +extern PerlIO * PerlIO_importFILE (FILE *,int); #endif #ifndef PerlIO_exportFILE -extern FILE * PerlIO_exportFILE _((PerlIO *,int)); +extern FILE * PerlIO_exportFILE (PerlIO *,int); #endif #ifndef PerlIO_findFILE -extern FILE * PerlIO_findFILE _((PerlIO *)); +extern FILE * PerlIO_findFILE (PerlIO *); #endif #ifndef PerlIO_releaseFILE -extern void PerlIO_releaseFILE _((PerlIO *,FILE *)); +extern void PerlIO_releaseFILE (PerlIO *,FILE *); #endif #ifndef PerlIO_read -extern SSize_t PerlIO_read _((PerlIO *,void *,Size_t)); +extern SSize_t PerlIO_read (PerlIO *,void *,Size_t); #endif #ifndef PerlIO_write -extern SSize_t PerlIO_write _((PerlIO *,const void *,Size_t)); +extern SSize_t PerlIO_write (PerlIO *,const void *,Size_t); #endif #ifndef PerlIO_setlinebuf -extern void PerlIO_setlinebuf _((PerlIO *)); +extern void PerlIO_setlinebuf (PerlIO *); #endif #ifndef PerlIO_printf -extern int PerlIO_printf _((PerlIO *, const char *,...)) - __attribute__((format (printf, 2, 3))); +extern int PerlIO_printf (PerlIO *, const char *,...) + __attribute__((__format__ (__printf__, 2, 3))); #endif #ifndef PerlIO_sprintf -extern int PerlIO_sprintf _((char *, int, const char *,...)) - __attribute__((format (printf, 3, 4))); +extern int PerlIO_sprintf (char *, int, const char *,...) + __attribute__((__format__ (__printf__, 3, 4))); #endif #ifndef PerlIO_vprintf -extern int PerlIO_vprintf _((PerlIO *, const char *, va_list)); +extern int PerlIO_vprintf (PerlIO *, const char *, va_list); #endif #ifndef PerlIO_tell -extern Off_t PerlIO_tell _((PerlIO *)); +extern Off_t PerlIO_tell (PerlIO *); #endif #ifndef PerlIO_seek -extern int PerlIO_seek _((PerlIO *, Off_t, int)); +extern int PerlIO_seek (PerlIO *, Off_t, int); #endif #ifndef PerlIO_rewind -extern void PerlIO_rewind _((PerlIO *)); +extern void PerlIO_rewind (PerlIO *); #endif #ifndef PerlIO_has_base -extern int PerlIO_has_base _((PerlIO *)); +extern int PerlIO_has_base (PerlIO *); #endif #ifndef PerlIO_has_cntptr -extern int PerlIO_has_cntptr _((PerlIO *)); +extern int PerlIO_has_cntptr (PerlIO *); #endif #ifndef PerlIO_fast_gets -extern int PerlIO_fast_gets _((PerlIO *)); +extern int PerlIO_fast_gets (PerlIO *); #endif #ifndef PerlIO_canset_cnt -extern int PerlIO_canset_cnt _((PerlIO *)); +extern int PerlIO_canset_cnt (PerlIO *); #endif #ifndef PerlIO_get_ptr -extern STDCHAR * PerlIO_get_ptr _((PerlIO *)); +extern STDCHAR * PerlIO_get_ptr (PerlIO *); #endif #ifndef PerlIO_get_cnt -extern int PerlIO_get_cnt _((PerlIO *)); +extern int PerlIO_get_cnt (PerlIO *); #endif #ifndef PerlIO_set_cnt -extern void PerlIO_set_cnt _((PerlIO *,int)); +extern void PerlIO_set_cnt (PerlIO *,int); #endif #ifndef PerlIO_set_ptrcnt -extern void PerlIO_set_ptrcnt _((PerlIO *,STDCHAR *,int)); +extern void PerlIO_set_ptrcnt (PerlIO *,STDCHAR *,int); #endif #ifndef PerlIO_get_base -extern STDCHAR * PerlIO_get_base _((PerlIO *)); +extern STDCHAR * PerlIO_get_base (PerlIO *); #endif #ifndef PerlIO_get_bufsiz -extern int PerlIO_get_bufsiz _((PerlIO *)); +extern int PerlIO_get_bufsiz (PerlIO *); #endif #ifndef PerlIO_tmpfile -extern PerlIO * PerlIO_tmpfile _((void)); +extern PerlIO * PerlIO_tmpfile (void); #endif #ifndef PerlIO_stdin -extern PerlIO * PerlIO_stdin _((void)); +extern PerlIO * PerlIO_stdin (void); #endif #ifndef PerlIO_stdout -extern PerlIO * PerlIO_stdout _((void)); +extern PerlIO * PerlIO_stdout (void); #endif #ifndef PerlIO_stderr -extern PerlIO * PerlIO_stderr _((void)); +extern PerlIO * PerlIO_stderr (void); #endif #ifndef PerlIO_getpos -extern int PerlIO_getpos _((PerlIO *,Fpos_t *)); +extern int PerlIO_getpos (PerlIO *,Fpos_t *); #endif #ifndef PerlIO_setpos -extern int PerlIO_setpos _((PerlIO *,const Fpos_t *)); +extern int PerlIO_setpos (PerlIO *,const Fpos_t *); +#endif +#ifndef PerlIO_fdupopen +extern PerlIO * PerlIO_fdupopen (PerlIO *); #endif @@ -384,42 +480,74 @@ extern int PerlIO_setpos _((PerlIO *,const Fpos_t *)); * Interface for directory functions */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) + +/* IPerlDir */ +struct IPerlDir; +struct IPerlDirInfo; +typedef int (*LPMakedir)(struct IPerlDir*, const char*, int); +typedef int (*LPChdir)(struct IPerlDir*, const char*); +typedef int (*LPRmdir)(struct IPerlDir*, const char*); +typedef int (*LPDirClose)(struct IPerlDir*, DIR*); +typedef DIR* (*LPDirOpen)(struct IPerlDir*, char*); +typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*); +typedef void (*LPDirRewind)(struct IPerlDir*, DIR*); +typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long); +typedef long (*LPDirTell)(struct IPerlDir*, DIR*); +#ifdef WIN32 +typedef char* (*LPDirMapPathA)(struct IPerlDir*, const char*); +typedef WCHAR* (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*); +#endif -class IPerlDir +struct IPerlDir { -public: - virtual int Makedir(const char *dirname, int mode, int &err) = 0; - virtual int Chdir(const char *dirname, int &err) = 0; - virtual int Rmdir(const char *dirname, int &err) = 0; - virtual int Close(DIR *dirp, int &err) = 0; - virtual DIR * Open(char *filename, int &err) = 0; - virtual struct direct *Read(DIR *dirp, int &err) = 0; - virtual void Rewind(DIR *dirp, int &err) = 0; - virtual void Seek(DIR *dirp, long loc, int &err) = 0; - virtual long Tell(DIR *dirp, int &err) = 0; + LPMakedir pMakedir; + LPChdir pChdir; + LPRmdir pRmdir; + LPDirClose pClose; + LPDirOpen pOpen; + LPDirRead pRead; + LPDirRewind pRewind; + LPDirSeek pSeek; + LPDirTell pTell; +#ifdef WIN32 + LPDirMapPathA pMapPathA; + LPDirMapPathW pMapPathW; +#endif +}; + +struct IPerlDirInfo +{ + unsigned long nCount; /* number of entries expected */ + struct IPerlDir perlDirList; }; #define PerlDir_mkdir(name, mode) \ - PL_piDir->Makedir((name), (mode), ErrorNo()) + (*PL_Dir->pMakedir)(PL_Dir, (name), (mode)) #define PerlDir_chdir(name) \ - PL_piDir->Chdir((name), ErrorNo()) + (*PL_Dir->pChdir)(PL_Dir, (name)) #define PerlDir_rmdir(name) \ - PL_piDir->Rmdir((name), ErrorNo()) + (*PL_Dir->pRmdir)(PL_Dir, (name)) #define PerlDir_close(dir) \ - PL_piDir->Close((dir), ErrorNo()) + (*PL_Dir->pClose)(PL_Dir, (dir)) #define PerlDir_open(name) \ - PL_piDir->Open((name), ErrorNo()) + (*PL_Dir->pOpen)(PL_Dir, (name)) #define PerlDir_read(dir) \ - PL_piDir->Read((dir), ErrorNo()) + (*PL_Dir->pRead)(PL_Dir, (dir)) #define PerlDir_rewind(dir) \ - PL_piDir->Rewind((dir), ErrorNo()) + (*PL_Dir->pRewind)(PL_Dir, (dir)) #define PerlDir_seek(dir, loc) \ - PL_piDir->Seek((dir), (loc), ErrorNo()) + (*PL_Dir->pSeek)(PL_Dir, (dir), (loc)) #define PerlDir_tell(dir) \ - PL_piDir->Tell((dir), ErrorNo()) + (*PL_Dir->pTell)(PL_Dir, (dir)) +#ifdef WIN32 +#define PerlDir_mapA(dir) \ + (*PL_Dir->pMapPathA)(PL_Dir, (dir)) +#define PerlDir_mapW(dir) \ + (*PL_Dir->pMapPathW)(PL_Dir, (dir)) +#endif -#else /* PERL_OBJECT */ +#else /* PERL_IMPLICIT_SYS */ #define PerlDir_mkdir(name, mode) Mkdir((name), (mode)) #ifdef VMS @@ -434,132 +562,279 @@ public: #define PerlDir_rewind(dir) rewinddir((dir)) #define PerlDir_seek(dir, loc) seekdir((dir), (loc)) #define PerlDir_tell(dir) telldir((dir)) +#ifdef WIN32 +#define PerlDir_mapA(dir) dir +#define PerlDir_mapW(dir) dir +#endif -#endif /* PERL_OBJECT */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl environment functions */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) + +/* IPerlEnv */ +struct IPerlEnv; +struct IPerlEnvInfo; +typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*); +typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*); +typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*, + const char *varname, unsigned long *len); +typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name); +typedef void (*LPEnvClearenv)(struct IPerlEnv*); +typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*); +typedef void (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env); +typedef char* (*LPEnvGetChilddir)(struct IPerlEnv*); +typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir); +#ifdef HAS_ENVGETENV +typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname); +typedef char* (*LPENVGetenv_len)(struct IPerlEnv*, + const char *varname, unsigned long *len); +#endif +#ifdef WIN32 +typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*); +typedef char* (*LPEnvLibPath)(struct IPerlEnv*, const char*); +typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*); +typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*); +typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*); +#endif + +struct IPerlEnv +{ + LPEnvGetenv pGetenv; + LPEnvPutenv pPutenv; + LPEnvGetenv_len pGetenv_len; + LPEnvUname pEnvUname; + LPEnvClearenv pClearenv; + LPEnvGetChildenv pGetChildenv; + LPEnvFreeChildenv pFreeChildenv; + LPEnvGetChilddir pGetChilddir; + LPEnvFreeChilddir pFreeChilddir; +#ifdef HAS_ENVGETENV + LPENVGetenv pENVGetenv; + LPENVGetenv_len pENVGetenv_len; +#endif +#ifdef WIN32 + LPEnvOsID pEnvOsID; + LPEnvLibPath pLibPath; + LPEnvSiteLibPath pSiteLibPath; + LPEnvVendorLibPath pVendorLibPath; + LPEnvGetChildIO pGetChildIO; +#endif +}; -class IPerlEnv +struct IPerlEnvInfo { -public: - virtual char * Getenv(const char *varname, int &err) = 0; - virtual int Putenv(const char *envstring, int &err) = 0; - virtual char * LibPath(char *patchlevel) =0; - virtual char * SiteLibPath(char *patchlevel) =0; + unsigned long nCount; /* number of entries expected */ + struct IPerlEnv perlEnvList; }; -#define PerlEnv_putenv(str) PL_piENV->Putenv((str), ErrorNo()) -#define PerlEnv_getenv(str) PL_piENV->Getenv((str), ErrorNo()) +#define PerlEnv_putenv(str) \ + (*PL_Env->pPutenv)(PL_Env,(str)) +#define PerlEnv_getenv(str) \ + (*PL_Env->pGetenv)(PL_Env,(str)) +#define PerlEnv_getenv_len(str,l) \ + (*PL_Env->pGetenv_len)(PL_Env,(str), (l)) +#define PerlEnv_clearenv() \ + (*PL_Env->pClearenv)(PL_Env) +#define PerlEnv_get_childenv() \ + (*PL_Env->pGetChildenv)(PL_Env) +#define PerlEnv_free_childenv(e) \ + (*PL_Env->pFreeChildenv)(PL_Env, (e)) +#define PerlEnv_get_childdir() \ + (*PL_Env->pGetChilddir)(PL_Env) +#define PerlEnv_free_childdir(d) \ + (*PL_Env->pFreeChilddir)(PL_Env, (d)) +#ifdef HAS_ENVGETENV +# define PerlEnv_ENVgetenv(str) \ + (*PL_Env->pENVGetenv)(PL_Env,(str)) +# define PerlEnv_ENVgetenv_len(str,l) \ + (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l)) +#else +# define PerlEnv_ENVgetenv(str) \ + PerlEnv_getenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) \ + PerlEnv_getenv_len((str),(l)) +#endif +#define PerlEnv_uname(name) \ + (*PL_Env->pEnvUname)(PL_Env,(name)) #ifdef WIN32 -#define PerlEnv_lib_path(str) PL_piENV->LibPath((str)) -#define PerlEnv_sitelib_path(str) PL_piENV->SiteLibPath((str)) +#define PerlEnv_os_id() \ + (*PL_Env->pEnvOsID)(PL_Env) +#define PerlEnv_lib_path(str) \ + (*PL_Env->pLibPath)(PL_Env,(str)) +#define PerlEnv_sitelib_path(str) \ + (*PL_Env->pSiteLibPath)(PL_Env,(str)) +#define PerlEnv_vendorlib_path(str) \ + (*PL_Env->pVendorLibPath)(PL_Env,(str)) +#define PerlEnv_get_child_IO(ptr) \ + (*PL_Env->pGetChildIO)(PL_Env, ptr) #endif -#else /* PERL_OBJECT */ +#else /* PERL_IMPLICIT_SYS */ #define PerlEnv_putenv(str) putenv((str)) #define PerlEnv_getenv(str) getenv((str)) +#define PerlEnv_getenv_len(str,l) getenv_len((str), (l)) +#define PerlEnv_clearenv() clearenv() +#define PerlEnv_get_childenv() get_childenv() +#define PerlEnv_free_childenv(e) free_childenv((e)) +#define PerlEnv_get_childdir() get_childdir() +#define PerlEnv_free_childdir(d) free_childdir((d)) +#ifdef HAS_ENVGETENV +# define PerlEnv_ENVgetenv(str) ENVgetenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l)) +#else +# define PerlEnv_ENVgetenv(str) PerlEnv_getenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) PerlEnv_getenv_len((str), (l)) +#endif +#define PerlEnv_uname(name) uname((name)) + +#ifdef WIN32 +#define PerlEnv_os_id() win32_os_id() +#define PerlEnv_lib_path(str) win32_get_privlib(str) +#define PerlEnv_sitelib_path(str) win32_get_sitelib(str) +#define PerlEnv_vendorlib_path(str) win32_get_vendorlib(str) +#define PerlEnv_get_child_IO(ptr) win32_get_child_IO(ptr) +#endif -#endif /* PERL_OBJECT */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl low-level IO functions */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) + +/* IPerlLIO */ +struct IPerlLIO; +struct IPerlLIOInfo; +typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t, + gid_t); +typedef int (*LPLIOChsize)(struct IPerlLIO*, int, long); +typedef int (*LPLIOClose)(struct IPerlLIO*, int); +typedef int (*LPLIODup)(struct IPerlLIO*, int); +typedef int (*LPLIODup2)(struct IPerlLIO*, int, int); +typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int); +typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, struct stat*); +typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int, + char*); +typedef int (*LPLIOIsatty)(struct IPerlLIO*, int); +typedef int (*LPLIOLink)(struct IPerlLIO*, const char*, + const char *); +typedef long (*LPLIOLseek)(struct IPerlLIO*, int, long, int); +typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*, + struct stat*); +typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*); +typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int); +typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int); +typedef int (*LPLIORename)(struct IPerlLIO*, const char*, + const char*); +typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int); +typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*, + struct stat*); +typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*); +typedef int (*LPLIOUmask)(struct IPerlLIO*, int); +typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*); +typedef int (*LPLIOUtime)(struct IPerlLIO*, char*, struct utimbuf*); +typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*, + unsigned int); + +struct IPerlLIO +{ + LPLIOAccess pAccess; + LPLIOChmod pChmod; + LPLIOChown pChown; + LPLIOChsize pChsize; + LPLIOClose pClose; + LPLIODup pDup; + LPLIODup2 pDup2; + LPLIOFlock pFlock; + LPLIOFileStat pFileStat; + LPLIOIOCtl pIOCtl; + LPLIOIsatty pIsatty; + LPLIOLink pLink; + LPLIOLseek pLseek; + LPLIOLstat pLstat; + LPLIOMktemp pMktemp; + LPLIOOpen pOpen; + LPLIOOpen3 pOpen3; + LPLIORead pRead; + LPLIORename pRename; + LPLIOSetmode pSetmode; + LPLIONameStat pNameStat; + LPLIOTmpnam pTmpnam; + LPLIOUmask pUmask; + LPLIOUnlink pUnlink; + LPLIOUtime pUtime; + LPLIOWrite pWrite; +}; -class IPerlLIO +struct IPerlLIOInfo { -public: - virtual int Access(const char *path, int mode, int &err) = 0; - virtual int Chmod(const char *filename, int pmode, int &err) = 0; - virtual int Chown(const char *filename, uid_t owner, - gid_t group, int &err) = 0; - virtual int Chsize(int handle, long size, int &err) = 0; - virtual int Close(int handle, int &err) = 0; - virtual int Dup(int handle, int &err) = 0; - virtual int Dup2(int handle1, int handle2, int &err) = 0; - virtual int Flock(int fd, int oper, int &err) = 0; - virtual int FileStat(int handle, struct stat *buffer, int &err) = 0; - virtual int IOCtl(int i, unsigned int u, char *data, int &err) = 0; - virtual int Isatty(int handle, int &err) = 0; - virtual long Lseek(int handle, long offset, int origin, int &err) = 0; - virtual int Lstat(const char *path, struct stat *buffer, int &err) = 0; - virtual char * Mktemp(char *Template, int &err) = 0; - virtual int Open(const char *filename, int oflag, int &err) = 0; - virtual int Open(const char *filename, int oflag, - int pmode, int &err) = 0; - virtual int Read(int handle, void *buffer, - unsigned int count, int &err) = 0; - virtual int Rename(const char *oname, - const char *newname, int &err) = 0; - virtual int Setmode(int handle, int mode, int &err) = 0; - virtual int NameStat(const char *path, - struct stat *buffer, int &err) = 0; - virtual char * Tmpnam(char *string, int &err) = 0; - virtual int Umask(int pmode, int &err) = 0; - virtual int Unlink(const char *filename, int &err) = 0; - virtual int Utime(char *filename, struct utimbuf *times, int &err) = 0; - virtual int Write(int handle, const void *buffer, - unsigned int count, int &err) = 0; + unsigned long nCount; /* number of entries expected */ + struct IPerlLIO perlLIOList; }; #define PerlLIO_access(file, mode) \ - PL_piLIO->Access((file), (mode), ErrorNo()) + (*PL_LIO->pAccess)(PL_LIO, (file), (mode)) #define PerlLIO_chmod(file, mode) \ - PL_piLIO->Chmod((file), (mode), ErrorNo()) + (*PL_LIO->pChmod)(PL_LIO, (file), (mode)) #define PerlLIO_chown(file, owner, group) \ - PL_piLIO->Chown((file), (owner), (group), ErrorNo()) + (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group)) #define PerlLIO_chsize(fd, size) \ - PL_piLIO->Chsize((fd), (size), ErrorNo()) + (*PL_LIO->pChsize)(PL_LIO, (fd), (size)) #define PerlLIO_close(fd) \ - PL_piLIO->Close((fd), ErrorNo()) + (*PL_LIO->pClose)(PL_LIO, (fd)) #define PerlLIO_dup(fd) \ - PL_piLIO->Dup((fd), ErrorNo()) + (*PL_LIO->pDup)(PL_LIO, (fd)) #define PerlLIO_dup2(fd1, fd2) \ - PL_piLIO->Dup2((fd1), (fd2), ErrorNo()) + (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2)) #define PerlLIO_flock(fd, op) \ - PL_piLIO->Flock((fd), (op), ErrorNo()) + (*PL_LIO->pFlock)(PL_LIO, (fd), (op)) #define PerlLIO_fstat(fd, buf) \ - PL_piLIO->FileStat((fd), (buf), ErrorNo()) + (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf)) #define PerlLIO_ioctl(fd, u, buf) \ - PL_piLIO->IOCtl((fd), (u), (buf), ErrorNo()) + (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf)) #define PerlLIO_isatty(fd) \ - PL_piLIO->Isatty((fd), ErrorNo()) + (*PL_LIO->pIsatty)(PL_LIO, (fd)) +#define PerlLIO_link(oldname, newname) \ + (*PL_LIO->pLink)(PL_LIO, (oldname), (newname)) #define PerlLIO_lseek(fd, offset, mode) \ - PL_piLIO->Lseek((fd), (offset), (mode), ErrorNo()) + (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode)) #define PerlLIO_lstat(name, buf) \ - PL_piLIO->Lstat((name), (buf), ErrorNo()) + (*PL_LIO->pLstat)(PL_LIO, (name), (buf)) #define PerlLIO_mktemp(file) \ - PL_piLIO->Mktemp((file), ErrorNo()) + (*PL_LIO->pMktemp)(PL_LIO, (file)) #define PerlLIO_open(file, flag) \ - PL_piLIO->Open((file), (flag), ErrorNo()) + (*PL_LIO->pOpen)(PL_LIO, (file), (flag)) #define PerlLIO_open3(file, flag, perm) \ - PL_piLIO->Open((file), (flag), (perm), ErrorNo()) + (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm)) #define PerlLIO_read(fd, buf, count) \ - PL_piLIO->Read((fd), (buf), (count), ErrorNo()) + (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count)) #define PerlLIO_rename(oname, newname) \ - PL_piLIO->Rename((oname), (newname), ErrorNo()) + (*PL_LIO->pRename)(PL_LIO, (oname), (newname)) #define PerlLIO_setmode(fd, mode) \ - PL_piLIO->Setmode((fd), (mode), ErrorNo()) + (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode)) #define PerlLIO_stat(name, buf) \ - PL_piLIO->NameStat((name), (buf), ErrorNo()) + (*PL_LIO->pNameStat)(PL_LIO, (name), (buf)) #define PerlLIO_tmpnam(str) \ - PL_piLIO->Tmpnam((str), ErrorNo()) + (*PL_LIO->pTmpnam)(PL_LIO, (str)) #define PerlLIO_umask(mode) \ - PL_piLIO->Umask((mode), ErrorNo()) + (*PL_LIO->pUmask)(PL_LIO, (mode)) #define PerlLIO_unlink(file) \ - PL_piLIO->Unlink((file), ErrorNo()) + (*PL_LIO->pUnlink)(PL_LIO, (file)) #define PerlLIO_utime(file, time) \ - PL_piLIO->Utime((file), (time), ErrorNo()) + (*PL_LIO->pUtime)(PL_LIO, (file), (time)) #define PerlLIO_write(fd, buf, count) \ - PL_piLIO->Write((fd), (buf), (count), ErrorNo()) + (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count)) -#else /* PERL_OBJECT */ +#else /* PERL_IMPLICIT_SYS */ #define PerlLIO_access(file, mode) access((file), (mode)) #define PerlLIO_chmod(file, mode) chmod((file), (mode)) @@ -572,8 +847,14 @@ public: #define PerlLIO_fstat(fd, buf) Fstat((fd), (buf)) #define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf)) #define PerlLIO_isatty(fd) isatty((fd)) +#define PerlLIO_link(oldname, newname) link((oldname), (newname)) #define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode)) -#define PerlLIO_lstat(name, buf) lstat((name), (buf)) +#define PerlLIO_stat(name, buf) Stat((name), (buf)) +#ifdef HAS_LSTAT +# define PerlLIO_lstat(name, buf) lstat((name), (buf)) +#else +# define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf)) +#endif #define PerlLIO_mktemp(file) mktemp((file)) #define PerlLIO_mkstemp(file) mkstemp((file)) #define PerlLIO_open(file, flag) open((file), (flag)) @@ -581,138 +862,306 @@ public: #define PerlLIO_read(fd, buf, count) read((fd), (buf), (count)) #define PerlLIO_rename(old, new) rename((old), (new)) #define PerlLIO_setmode(fd, mode) setmode((fd), (mode)) -#define PerlLIO_stat(name, buf) Stat((name), (buf)) #define PerlLIO_tmpnam(str) tmpnam((str)) #define PerlLIO_umask(mode) umask((mode)) #define PerlLIO_unlink(file) unlink((file)) #define PerlLIO_utime(file, time) utime((file), (time)) #define PerlLIO_write(fd, buf, count) write((fd), (buf), (count)) -#endif /* PERL_OBJECT */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl memory allocation */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) + +/* IPerlMem */ +struct IPerlMem; +struct IPerlMemInfo; +typedef void* (*LPMemMalloc)(struct IPerlMem*, size_t); +typedef void* (*LPMemRealloc)(struct IPerlMem*, void*, size_t); +typedef void (*LPMemFree)(struct IPerlMem*, void*); +typedef void* (*LPMemCalloc)(struct IPerlMem*, size_t, size_t); +typedef void (*LPMemGetLock)(struct IPerlMem*); +typedef void (*LPMemFreeLock)(struct IPerlMem*); +typedef int (*LPMemIsLocked)(struct IPerlMem*); -class IPerlMem +struct IPerlMem { -public: - virtual void * Malloc(size_t) = 0; - virtual void * Realloc(void*, size_t) = 0; - virtual void Free(void*) = 0; + LPMemMalloc pMalloc; + LPMemRealloc pRealloc; + LPMemFree pFree; + LPMemCalloc pCalloc; + LPMemGetLock pGetLock; + LPMemFreeLock pFreeLock; + LPMemIsLocked pIsLocked; }; -#define PerlMem_malloc(size) PL_piMem->Malloc((size)) -#define PerlMem_realloc(buf, size) PL_piMem->Realloc((buf), (size)) -#define PerlMem_free(buf) PL_piMem->Free((buf)) - -#else /* PERL_OBJECT */ +struct IPerlMemInfo +{ + unsigned long nCount; /* number of entries expected */ + struct IPerlMem perlMemList; +}; +/* Interpreter specific memory macros */ +#define PerlMem_malloc(size) \ + (*PL_Mem->pMalloc)(PL_Mem, (size)) +#define PerlMem_realloc(buf, size) \ + (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) +#define PerlMem_free(buf) \ + (*PL_Mem->pFree)(PL_Mem, (buf)) +#define PerlMem_calloc(num, size) \ + (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) +#define PerlMem_get_lock() \ + (*PL_Mem->pGetLock)(PL_Mem) +#define PerlMem_free_lock() \ + (*PL_Mem->pFreeLock)(PL_Mem) +#define PerlMem_is_locked() \ + (*PL_Mem->pIsLocked)(PL_Mem) + +/* Shared memory macros */ +#define PerlMemShared_malloc(size) \ + (*PL_MemShared->pMalloc)(PL_Mem, (size)) +#define PerlMemShared_realloc(buf, size) \ + (*PL_MemShared->pRealloc)(PL_Mem, (buf), (size)) +#define PerlMemShared_free(buf) \ + (*PL_MemShared->pFree)(PL_Mem, (buf)) +#define PerlMemShared_calloc(num, size) \ + (*PL_MemShared->pCalloc)(PL_Mem, (num), (size)) +#define PerlMemShared_get_lock() \ + (*PL_MemShared->pGetLock)(PL_Mem) +#define PerlMemShared_free_lock() \ + (*PL_MemShared->pFreeLock)(PL_Mem) +#define PerlMemShared_is_locked() \ + (*PL_MemShared->pIsLocked)(PL_Mem) + + +/* Parse tree memory macros */ +#define PerlMemParse_malloc(size) \ + (*PL_MemParse->pMalloc)(PL_Mem, (size)) +#define PerlMemParse_realloc(buf, size) \ + (*PL_MemParse->pRealloc)(PL_Mem, (buf), (size)) +#define PerlMemParse_free(buf) \ + (*PL_MemParse->pFree)(PL_Mem, (buf)) +#define PerlMemParse_calloc(num, size) \ + (*PL_MemParse->pCalloc)(PL_Mem, (num), (size)) +#define PerlMemParse_get_lock() \ + (*PL_MemParse->pGetLock)(PL_Mem) +#define PerlMemParse_free_lock() \ + (*PL_MemParse->pFreeLock)(PL_Mem) +#define PerlMemParse_is_locked() \ + (*PL_MemParse->pIsLocked)(PL_Mem) + + +#else /* PERL_IMPLICIT_SYS */ + +/* Interpreter specific memory macros */ #define PerlMem_malloc(size) malloc((size)) #define PerlMem_realloc(buf, size) realloc((buf), (size)) #define PerlMem_free(buf) free((buf)) - -#endif /* PERL_OBJECT */ +#define PerlMem_calloc(num, size) calloc((num), (size)) +#define PerlMem_get_lock() +#define PerlMem_free_lock() +#define PerlMem_is_locked() 0 + +/* Shared memory macros */ +#define PerlMemShared_malloc(size) malloc((size)) +#define PerlMemShared_realloc(buf, size) realloc((buf), (size)) +#define PerlMemShared_free(buf) free((buf)) +#define PerlMemShared_calloc(num, size) calloc((num), (size)) +#define PerlMemShared_get_lock() +#define PerlMemShared_free_lock() +#define PerlMemShared_is_locked() 0 + +/* Parse tree memory macros */ +#define PerlMemParse_malloc(size) malloc((size)) +#define PerlMemParse_realloc(buf, size) realloc((buf), (size)) +#define PerlMemParse_free(buf) free((buf)) +#define PerlMemParse_calloc(num, size) calloc((num), (size)) +#define PerlMemParse_get_lock() +#define PerlMemParse_free_lock() +#define PerlMemParse_is_locked() 0 + +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl process functions */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) -#ifndef Sighandler_t -typedef Signal_t (*Sighandler_t) _((int)); -#endif #ifndef jmp_buf #include #endif -class IPerlProc +/* IPerlProc */ +struct IPerlProc; +struct IPerlProcInfo; +typedef void (*LPProcAbort)(struct IPerlProc*); +typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*, + const char*); +typedef void (*LPProcExit)(struct IPerlProc*, int); +typedef void (*LPProc_Exit)(struct IPerlProc*, int); +typedef int (*LPProcExecl)(struct IPerlProc*, const char*, + const char*, const char*, const char*, + const char*); +typedef int (*LPProcExecv)(struct IPerlProc*, const char*, + const char*const*); +typedef int (*LPProcExecvp)(struct IPerlProc*, const char*, + const char*const*); +typedef uid_t (*LPProcGetuid)(struct IPerlProc*); +typedef uid_t (*LPProcGeteuid)(struct IPerlProc*); +typedef gid_t (*LPProcGetgid)(struct IPerlProc*); +typedef gid_t (*LPProcGetegid)(struct IPerlProc*); +typedef char* (*LPProcGetlogin)(struct IPerlProc*); +typedef int (*LPProcKill)(struct IPerlProc*, int, int); +typedef int (*LPProcKillpg)(struct IPerlProc*, int, int); +typedef int (*LPProcPauseProc)(struct IPerlProc*); +typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*, + const char*); +typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*); +typedef int (*LPProcPipe)(struct IPerlProc*, int*); +typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t); +typedef int (*LPProcSetgid)(struct IPerlProc*, gid_t); +typedef int (*LPProcSleep)(struct IPerlProc*, unsigned int); +typedef int (*LPProcTimes)(struct IPerlProc*, struct tms*); +typedef int (*LPProcWait)(struct IPerlProc*, int*); +typedef int (*LPProcWaitpid)(struct IPerlProc*, int, int*, int); +typedef Sighandler_t (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t); +typedef int (*LPProcFork)(struct IPerlProc*); +typedef int (*LPProcGetpid)(struct IPerlProc*); +#ifdef WIN32 +typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*); +typedef void (*LPProcGetOSError)(struct IPerlProc*, + SV* sv, DWORD dwErr); +typedef void (*LPProcFreeBuf)(struct IPerlProc*, char*); +typedef BOOL (*LPProcDoCmd)(struct IPerlProc*, char*); +typedef int (*LPProcSpawn)(struct IPerlProc*, char*); +typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*, + const char*const*); +typedef int (*LPProcASpawn)(struct IPerlProc*, void*, void**, void**); +#endif + +struct IPerlProc { -public: - virtual void Abort(void) = 0; - virtual char * Crypt(const char* clear, const char* salt) = 0; - virtual void Exit(int status) = 0; - virtual void _Exit(int status) = 0; - virtual int Execl(const char *cmdname, const char *arg0, - const char *arg1, const char *arg2, - const char *arg3) = 0; - virtual int Execv(const char *cmdname, const char *const *argv) = 0; - virtual int Execvp(const char *cmdname, const char *const *argv) = 0; - virtual uid_t Getuid(void) = 0; - virtual uid_t Geteuid(void) = 0; - virtual gid_t Getgid(void) = 0; - virtual gid_t Getegid(void) = 0; - virtual char * Getlogin(void) = 0; - virtual int Kill(int pid, int sig) = 0; - virtual int Killpg(int pid, int sig) = 0; - virtual int PauseProc(void) = 0; - virtual PerlIO * Popen(const char *command, const char *mode) = 0; - virtual int Pclose(PerlIO *stream) = 0; - virtual int Pipe(int *phandles) = 0; - virtual int Setuid(uid_t uid) = 0; - virtual int Setgid(gid_t gid) = 0; - virtual int Sleep(unsigned int) = 0; - virtual int Times(struct tms *timebuf) = 0; - virtual int Wait(int *status) = 0; - virtual int Waitpid(int pid, int *status, int flags) = 0; - virtual Sighandler_t Signal(int sig, Sighandler_t subcode) = 0; + LPProcAbort pAbort; + LPProcCrypt pCrypt; + LPProcExit pExit; + LPProc_Exit p_Exit; + LPProcExecl pExecl; + LPProcExecv pExecv; + LPProcExecvp pExecvp; + LPProcGetuid pGetuid; + LPProcGeteuid pGeteuid; + LPProcGetgid pGetgid; + LPProcGetegid pGetegid; + LPProcGetlogin pGetlogin; + LPProcKill pKill; + LPProcKillpg pKillpg; + LPProcPauseProc pPauseProc; + LPProcPopen pPopen; + LPProcPclose pPclose; + LPProcPipe pPipe; + LPProcSetuid pSetuid; + LPProcSetgid pSetgid; + LPProcSleep pSleep; + LPProcTimes pTimes; + LPProcWait pWait; + LPProcWaitpid pWaitpid; + LPProcSignal pSignal; + LPProcFork pFork; + LPProcGetpid pGetpid; #ifdef WIN32 - virtual void GetSysMsg(char*& msg, DWORD& dwLen, DWORD dwErr) = 0; - virtual void FreeBuf(char* msg) = 0; - virtual BOOL DoCmd(char *cmd) = 0; - virtual int Spawn(char*cmds) = 0; - virtual int Spawnvp(int mode, const char *cmdname, - const char *const *argv) = 0; - virtual int ASpawn(void *vreally, void **vmark, void **vsp) = 0; + LPProcDynaLoader pDynaLoader; + LPProcGetOSError pGetOSError; + LPProcDoCmd pDoCmd; + LPProcSpawn pSpawn; + LPProcSpawnvp pSpawnvp; + LPProcASpawn pASpawn; #endif }; -#define PerlProc_abort() PL_piProc->Abort() -#define PerlProc_crypt(c,s) PL_piProc->Crypt((c), (s)) -#define PerlProc_exit(s) PL_piProc->Exit((s)) -#define PerlProc__exit(s) PL_piProc->_Exit((s)) +struct IPerlProcInfo +{ + unsigned long nCount; /* number of entries expected */ + struct IPerlProc perlProcList; +}; + +#define PerlProc_abort() \ + (*PL_Proc->pAbort)(PL_Proc) +#define PerlProc_crypt(c,s) \ + (*PL_Proc->pCrypt)(PL_Proc, (c), (s)) +#define PerlProc_exit(s) \ + (*PL_Proc->pExit)(PL_Proc, (s)) +#define PerlProc__exit(s) \ + (*PL_Proc->p_Exit)(PL_Proc, (s)) #define PerlProc_execl(c, w, x, y, z) \ - PL_piProc->Execl((c), (w), (x), (y), (z)) - -#define PerlProc_execv(c, a) PL_piProc->Execv((c), (a)) -#define PerlProc_execvp(c, a) PL_piProc->Execvp((c), (a)) -#define PerlProc_getuid() PL_piProc->Getuid() -#define PerlProc_geteuid() PL_piProc->Geteuid() -#define PerlProc_getgid() PL_piProc->Getgid() -#define PerlProc_getegid() PL_piProc->Getegid() -#define PerlProc_getlogin() PL_piProc->Getlogin() -#define PerlProc_kill(i, a) PL_piProc->Kill((i), (a)) -#define PerlProc_killpg(i, a) PL_piProc->Killpg((i), (a)) -#define PerlProc_pause() PL_piProc->PauseProc() -#define PerlProc_popen(c, m) PL_piProc->Popen((c), (m)) -#define PerlProc_pclose(f) PL_piProc->Pclose((f)) -#define PerlProc_pipe(fd) PL_piProc->Pipe((fd)) -#define PerlProc_setuid(u) PL_piProc->Setuid((u)) -#define PerlProc_setgid(g) PL_piProc->Setgid((g)) -#define PerlProc_sleep(t) PL_piProc->Sleep((t)) -#define PerlProc_times(t) PL_piProc->Times((t)) -#define PerlProc_wait(t) PL_piProc->Wait((t)) -#define PerlProc_waitpid(p,s,f) PL_piProc->Waitpid((p), (s), (f)) -#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) -#define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) -#define PerlProc_signal(n, h) PL_piProc->Signal((n), (h)) + (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z)) +#define PerlProc_execv(c, a) \ + (*PL_Proc->pExecv)(PL_Proc, (c), (a)) +#define PerlProc_execvp(c, a) \ + (*PL_Proc->pExecvp)(PL_Proc, (c), (a)) +#define PerlProc_getuid() \ + (*PL_Proc->pGetuid)(PL_Proc) +#define PerlProc_geteuid() \ + (*PL_Proc->pGeteuid)(PL_Proc) +#define PerlProc_getgid() \ + (*PL_Proc->pGetgid)(PL_Proc) +#define PerlProc_getegid() \ + (*PL_Proc->pGetegid)(PL_Proc) +#define PerlProc_getlogin() \ + (*PL_Proc->pGetlogin)(PL_Proc) +#define PerlProc_kill(i, a) \ + (*PL_Proc->pKill)(PL_Proc, (i), (a)) +#define PerlProc_killpg(i, a) \ + (*PL_Proc->pKillpg)(PL_Proc, (i), (a)) +#define PerlProc_pause() \ + (*PL_Proc->pPauseProc)(PL_Proc) +#define PerlProc_popen(c, m) \ + (*PL_Proc->pPopen)(PL_Proc, (c), (m)) +#define PerlProc_pclose(f) \ + (*PL_Proc->pPclose)(PL_Proc, (f)) +#define PerlProc_pipe(fd) \ + (*PL_Proc->pPipe)(PL_Proc, (fd)) +#define PerlProc_setuid(u) \ + (*PL_Proc->pSetuid)(PL_Proc, (u)) +#define PerlProc_setgid(g) \ + (*PL_Proc->pSetgid)(PL_Proc, (g)) +#define PerlProc_sleep(t) \ + (*PL_Proc->pSleep)(PL_Proc, (t)) +#define PerlProc_times(t) \ + (*PL_Proc->pTimes)(PL_Proc, (t)) +#define PerlProc_wait(t) \ + (*PL_Proc->pWait)(PL_Proc, (t)) +#define PerlProc_waitpid(p,s,f) \ + (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f)) +#define PerlProc_signal(n, h) \ + (*PL_Proc->pSignal)(PL_Proc, (n), (h)) +#define PerlProc_fork() \ + (*PL_Proc->pFork)(PL_Proc) +#define PerlProc_getpid() \ + (*PL_Proc->pGetpid)(PL_Proc) +#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) +#define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) #ifdef WIN32 -#define PerlProc_GetSysMsg(s,l,e) \ - PL_piProc->GetSysMsg((s), (l), (e)) - -#define PerlProc_FreeBuf(s) PL_piProc->FreeBuf((s)) -#define PerlProc_Cmd(s) PL_piProc->DoCmd((s)) -#define do_spawn(s) PL_piProc->Spawn((s)) -#define do_spawnvp(m, c, a) PL_piProc->Spawnvp((m), (c), (a)) -#define PerlProc_aspawn(m,c,a) PL_piProc->ASpawn((m), (c), (a)) -#endif - -#else /* PERL_OBJECT */ +#define PerlProc_DynaLoad(f) \ + (*PL_Proc->pDynaLoader)(PL_Proc, (f)) +#define PerlProc_GetOSError(s,e) \ + (*PL_Proc->pGetOSError)(PL_Proc, (s), (e)) +#define PerlProc_Cmd(s) \ + (*PL_Proc->pDoCmd)(PL_Proc, (s)) +#define do_spawn(s) \ + (*PL_Proc->pSpawn)(PL_Proc, (s)) +#define do_spawnvp(m, c, a) \ + (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a)) +#define PerlProc_aspawn(m,c,a) \ + (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a)) +#endif + +#else /* PERL_IMPLICIT_SYS */ #define PerlProc_abort() abort() #define PerlProc_crypt(c,s) crypt((c), (s)) @@ -742,135 +1191,237 @@ public: #define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) #define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) #define PerlProc_signal(n, h) signal((n), (h)) +#define PerlProc_fork() fork() +#define PerlProc_getpid() getpid() - -#endif /* PERL_OBJECT */ +#ifdef WIN32 +#define PerlProc_DynaLoad(f) \ + win32_dynaload((f)) +#define PerlProc_GetOSError(s,e) \ + win32_str_os_error((s), (e)) +#endif +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl socket functions */ -#ifdef PERL_OBJECT +#if defined(PERL_IMPLICIT_SYS) + +/* PerlSock */ +struct IPerlSock; +struct IPerlSockInfo; +typedef u_long (*LPHtonl)(struct IPerlSock*, u_long); +typedef u_short (*LPHtons)(struct IPerlSock*, u_short); +typedef u_long (*LPNtohl)(struct IPerlSock*, u_long); +typedef u_short (*LPNtohs)(struct IPerlSock*, u_short); +typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef int (*LPBind)(struct IPerlSock*, SOCKET, + const struct sockaddr*, int); +typedef int (*LPConnect)(struct IPerlSock*, SOCKET, + const struct sockaddr*, int); +typedef void (*LPEndhostent)(struct IPerlSock*); +typedef void (*LPEndnetent)(struct IPerlSock*); +typedef void (*LPEndprotoent)(struct IPerlSock*); +typedef void (*LPEndservent)(struct IPerlSock*); +typedef int (*LPGethostname)(struct IPerlSock*, char*, int); +typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*, + int, int); +typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*); +typedef struct hostent* (*LPGethostent)(struct IPerlSock*); +typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int); +typedef struct netent* (*LPGetnetbyname)(struct IPerlSock*, const char*); +typedef struct netent* (*LPGetnetent)(struct IPerlSock*); +typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*); +typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int); +typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*); +typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*, + const char*); +typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int, + const char*); +typedef struct servent* (*LPGetservent)(struct IPerlSock*); +typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int, + char*, int*); +typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*); +typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr); +typedef int (*LPListen)(struct IPerlSock*, SOCKET, int); +typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int); +typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int, + int, struct sockaddr*, int*); +typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*, + char*, const struct timeval*); +typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int, + int); +typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*, + int, int, const struct sockaddr*, int); +typedef void (*LPSethostent)(struct IPerlSock*, int); +typedef void (*LPSetnetent)(struct IPerlSock*, int); +typedef void (*LPSetprotoent)(struct IPerlSock*, int); +typedef void (*LPSetservent)(struct IPerlSock*, int); +typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int, + const char*, int); +typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int); +typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int); +typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int, + int*); +#ifdef WIN32 +typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s); +#endif -class IPerlSock +struct IPerlSock { -public: - virtual u_long Htonl(u_long hostlong) = 0; - virtual u_short Htons(u_short hostshort) = 0; - virtual u_long Ntohl(u_long netlong) = 0; - virtual u_short Ntohs(u_short netshort) = 0; - virtual SOCKET Accept(SOCKET s, struct sockaddr* addr, - int* addrlen, int &err) = 0; - virtual int Bind(SOCKET s, const struct sockaddr* name, - int namelen, int &err) = 0; - virtual int Connect(SOCKET s, const struct sockaddr* name, - int namelen, int &err) = 0; - virtual void Endhostent(int &err) = 0; - virtual void Endnetent(int &err) = 0; - virtual void Endprotoent(int &err) = 0; - virtual void Endservent(int &err) = 0; - virtual int Gethostname(char* name, int namelen, int &err) = 0; - virtual int Getpeername(SOCKET s, struct sockaddr* name, - int* namelen, int &err) = 0; - virtual struct hostent * Gethostbyaddr(const char* addr, int len, - int type, int &err) = 0; - virtual struct hostent * Gethostbyname(const char* name, int &err) = 0; - virtual struct hostent * Gethostent(int &err) = 0; - virtual struct netent * Getnetbyaddr(long net, int type, int &err) = 0; - virtual struct netent * Getnetbyname(const char *, int &err) = 0; - virtual struct netent * Getnetent(int &err) = 0; - virtual struct protoent * Getprotobyname(const char* name, int &err) = 0; - virtual struct protoent * Getprotobynumber(int number, int &err) = 0; - virtual struct protoent * Getprotoent(int &err) = 0; - virtual struct servent * Getservbyname(const char* name, - const char* proto, int &err) = 0; - virtual struct servent * Getservbyport(int port, const char* proto, - int &err) = 0; - virtual struct servent * Getservent(int &err) = 0; - virtual int Getsockname(SOCKET s, struct sockaddr* name, - int* namelen, int &err) = 0; - virtual int Getsockopt(SOCKET s, int level, int optname, - char* optval, int* optlen, int &err) = 0; - virtual unsigned long InetAddr(const char* cp, int &err) = 0; - virtual char * InetNtoa(struct in_addr in, int &err) = 0; - virtual int Listen(SOCKET s, int backlog, int &err) = 0; - virtual int Recv(SOCKET s, char* buf, int len, - int flags, int &err) = 0; - virtual int Recvfrom(SOCKET s, char* buf, int len, int flags, - struct sockaddr* from, int* fromlen, int &err) = 0; - virtual int Select(int nfds, char* readfds, char* writefds, - char* exceptfds, const struct timeval* timeout, - int &err) = 0; - virtual int Send(SOCKET s, const char* buf, int len, - int flags, int &err) = 0; - virtual int Sendto(SOCKET s, const char* buf, int len, int flags, - const struct sockaddr* to, int tolen, int &err) = 0; - virtual void Sethostent(int stayopen, int &err) = 0; - virtual void Setnetent(int stayopen, int &err) = 0; - virtual void Setprotoent(int stayopen, int &err) = 0; - virtual void Setservent(int stayopen, int &err) = 0; - virtual int Setsockopt(SOCKET s, int level, int optname, - const char* optval, int optlen, int &err) = 0; - virtual int Shutdown(SOCKET s, int how, int &err) = 0; - virtual SOCKET Socket(int af, int type, int protocol, int &err) = 0; - virtual int Socketpair(int domain, int type, int protocol, - int* fds, int &err) = 0; + LPHtonl pHtonl; + LPHtons pHtons; + LPNtohl pNtohl; + LPNtohs pNtohs; + LPAccept pAccept; + LPBind pBind; + LPConnect pConnect; + LPEndhostent pEndhostent; + LPEndnetent pEndnetent; + LPEndprotoent pEndprotoent; + LPEndservent pEndservent; + LPGethostname pGethostname; + LPGetpeername pGetpeername; + LPGethostbyaddr pGethostbyaddr; + LPGethostbyname pGethostbyname; + LPGethostent pGethostent; + LPGetnetbyaddr pGetnetbyaddr; + LPGetnetbyname pGetnetbyname; + LPGetnetent pGetnetent; + LPGetprotobyname pGetprotobyname; + LPGetprotobynumber pGetprotobynumber; + LPGetprotoent pGetprotoent; + LPGetservbyname pGetservbyname; + LPGetservbyport pGetservbyport; + LPGetservent pGetservent; + LPGetsockname pGetsockname; + LPGetsockopt pGetsockopt; + LPInetAddr pInetAddr; + LPInetNtoa pInetNtoa; + LPListen pListen; + LPRecv pRecv; + LPRecvfrom pRecvfrom; + LPSelect pSelect; + LPSend pSend; + LPSendto pSendto; + LPSethostent pSethostent; + LPSetnetent pSetnetent; + LPSetprotoent pSetprotoent; + LPSetservent pSetservent; + LPSetsockopt pSetsockopt; + LPShutdown pShutdown; + LPSocket pSocket; + LPSocketpair pSocketpair; #ifdef WIN32 - virtual int Closesocket(SOCKET s, int& err) = 0; - virtual int Ioctlsocket(SOCKET s, long cmd, u_long *argp, - int& err) = 0; + LPClosesocket pClosesocket; #endif }; -#define PerlSock_htonl(x) PL_piSock->Htonl(x) -#define PerlSock_htons(x) PL_piSock->Htons(x) -#define PerlSock_ntohl(x) PL_piSock->Ntohl(x) -#define PerlSock_ntohs(x) PL_piSock->Ntohs(x) -#define PerlSock_accept(s, a, l) PL_piSock->Accept(s, a, l, ErrorNo()) -#define PerlSock_bind(s, n, l) PL_piSock->Bind(s, n, l, ErrorNo()) -#define PerlSock_connect(s, n, l) PL_piSock->Connect(s, n, l, ErrorNo()) -#define PerlSock_endhostent() PL_piSock->Endhostent(ErrorNo()) -#define PerlSock_endnetent() PL_piSock->Endnetent(ErrorNo()) -#define PerlSock_endprotoent() PL_piSock->Endprotoent(ErrorNo()) -#define PerlSock_endservent() PL_piSock->Endservent(ErrorNo()) -#define PerlSock_gethostbyaddr(a, l, t) PL_piSock->Gethostbyaddr(a, l, t, ErrorNo()) -#define PerlSock_gethostbyname(n) PL_piSock->Gethostbyname(n, ErrorNo()) -#define PerlSock_gethostent() PL_piSock->Gethostent(ErrorNo()) -#define PerlSock_gethostname(n, l) PL_piSock->Gethostname(n, l, ErrorNo()) -#define PerlSock_getnetbyaddr(n, t) PL_piSock->Getnetbyaddr(n, t, ErrorNo()) -#define PerlSock_getnetbyname(c) PL_piSock->Getnetbyname(c, ErrorNo()) -#define PerlSock_getnetent() PL_piSock->Getnetent(ErrorNo()) -#define PerlSock_getpeername(s, n, l) PL_piSock->Getpeername(s, n, l, ErrorNo()) -#define PerlSock_getprotobyname(n) PL_piSock->Getprotobyname(n, ErrorNo()) -#define PerlSock_getprotobynumber(n) PL_piSock->Getprotobynumber(n, ErrorNo()) -#define PerlSock_getprotoent() PL_piSock->Getprotoent(ErrorNo()) -#define PerlSock_getservbyname(n, p) PL_piSock->Getservbyname(n, p, ErrorNo()) -#define PerlSock_getservbyport(port, p) PL_piSock->Getservbyport(port, p, ErrorNo()) -#define PerlSock_getservent() PL_piSock->Getservent(ErrorNo()) -#define PerlSock_getsockname(s, n, l) PL_piSock->Getsockname(s, n, l, ErrorNo()) -#define PerlSock_getsockopt(s,l,n,v,i) PL_piSock->Getsockopt(s, l, n, v, i, ErrorNo()) -#define PerlSock_inet_addr(c) PL_piSock->InetAddr(c, ErrorNo()) -#define PerlSock_inet_ntoa(i) PL_piSock->InetNtoa(i, ErrorNo()) -#define PerlSock_listen(s, b) PL_piSock->Listen(s, b, ErrorNo()) -#define PerlSock_recv(s, b, l, f) PL_piSock->Recv(s, b, l, f, ErrorNo()) +struct IPerlSockInfo +{ + unsigned long nCount; /* number of entries expected */ + struct IPerlSock perlSockList; +}; + +#define PerlSock_htonl(x) \ + (*PL_Sock->pHtonl)(PL_Sock, x) +#define PerlSock_htons(x) \ + (*PL_Sock->pHtons)(PL_Sock, x) +#define PerlSock_ntohl(x) \ + (*PL_Sock->pNtohl)(PL_Sock, x) +#define PerlSock_ntohs(x) \ + (*PL_Sock->pNtohs)(PL_Sock, x) +#define PerlSock_accept(s, a, l) \ + (*PL_Sock->pAccept)(PL_Sock, s, a, l) +#define PerlSock_bind(s, n, l) \ + (*PL_Sock->pBind)(PL_Sock, s, n, l) +#define PerlSock_connect(s, n, l) \ + (*PL_Sock->pConnect)(PL_Sock, s, n, l) +#define PerlSock_endhostent() \ + (*PL_Sock->pEndhostent)(PL_Sock) +#define PerlSock_endnetent() \ + (*PL_Sock->pEndnetent)(PL_Sock) +#define PerlSock_endprotoent() \ + (*PL_Sock->pEndprotoent)(PL_Sock) +#define PerlSock_endservent() \ + (*PL_Sock->pEndservent)(PL_Sock) +#define PerlSock_gethostbyaddr(a, l, t) \ + (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t) +#define PerlSock_gethostbyname(n) \ + (*PL_Sock->pGethostbyname)(PL_Sock, n) +#define PerlSock_gethostent() \ + (*PL_Sock->pGethostent)(PL_Sock) +#define PerlSock_gethostname(n, l) \ + (*PL_Sock->pGethostname)(PL_Sock, n, l) +#define PerlSock_getnetbyaddr(n, t) \ + (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t) +#define PerlSock_getnetbyname(c) \ + (*PL_Sock->pGetnetbyname)(PL_Sock, c) +#define PerlSock_getnetent() \ + (*PL_Sock->pGetnetent)(PL_Sock) +#define PerlSock_getpeername(s, n, l) \ + (*PL_Sock->pGetpeername)(PL_Sock, s, n, l) +#define PerlSock_getprotobyname(n) \ + (*PL_Sock->pGetprotobyname)(PL_Sock, n) +#define PerlSock_getprotobynumber(n) \ + (*PL_Sock->pGetprotobynumber)(PL_Sock, n) +#define PerlSock_getprotoent() \ + (*PL_Sock->pGetprotoent)(PL_Sock) +#define PerlSock_getservbyname(n, p) \ + (*PL_Sock->pGetservbyname)(PL_Sock, n, p) +#define PerlSock_getservbyport(port, p) \ + (*PL_Sock->pGetservbyport)(PL_Sock, port, p) +#define PerlSock_getservent() \ + (*PL_Sock->pGetservent)(PL_Sock) +#define PerlSock_getsockname(s, n, l) \ + (*PL_Sock->pGetsockname)(PL_Sock, s, n, l) +#define PerlSock_getsockopt(s,l,n,v,i) \ + (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i) +#define PerlSock_inet_addr(c) \ + (*PL_Sock->pInetAddr)(PL_Sock, c) +#define PerlSock_inet_ntoa(i) \ + (*PL_Sock->pInetNtoa)(PL_Sock, i) +#define PerlSock_listen(s, b) \ + (*PL_Sock->pListen)(PL_Sock, s, b) +#define PerlSock_recv(s, b, l, f) \ + (*PL_Sock->pRecv)(PL_Sock, s, b, l, f) #define PerlSock_recvfrom(s,b,l,f,from,fromlen) \ - PL_piSock->Recvfrom(s, b, l, f, from, fromlen, ErrorNo()) + (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen) #define PerlSock_select(n, r, w, e, t) \ - PL_piSock->Select(n, (char*)r, (char*)w, (char*)e, t, ErrorNo()) -#define PerlSock_send(s, b, l, f) PL_piSock->Send(s, b, l, f, ErrorNo()) + (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t) +#define PerlSock_send(s, b, l, f) \ + (*PL_Sock->pSend)(PL_Sock, s, b, l, f) #define PerlSock_sendto(s, b, l, f, t, tlen) \ - PL_piSock->Sendto(s, b, l, f, t, tlen, ErrorNo()) -#define PerlSock_sethostent(f) PL_piSock->Sethostent(f, ErrorNo()) -#define PerlSock_setnetent(f) PL_piSock->Setnetent(f, ErrorNo()) -#define PerlSock_setprotoent(f) PL_piSock->Setprotoent(f, ErrorNo()) -#define PerlSock_setservent(f) PL_piSock->Setservent(f, ErrorNo()) + (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen) +#define PerlSock_sethostent(f) \ + (*PL_Sock->pSethostent)(PL_Sock, f) +#define PerlSock_setnetent(f) \ + (*PL_Sock->pSetnetent)(PL_Sock, f) +#define PerlSock_setprotoent(f) \ + (*PL_Sock->pSetprotoent)(PL_Sock, f) +#define PerlSock_setservent(f) \ + (*PL_Sock->pSetservent)(PL_Sock, f) #define PerlSock_setsockopt(s, l, n, v, len) \ - PL_piSock->Setsockopt(s, l, n, v, len, ErrorNo()) -#define PerlSock_shutdown(s, h) PL_piSock->Shutdown(s, h, ErrorNo()) -#define PerlSock_socket(a, t, p) PL_piSock->Socket(a, t, p, ErrorNo()) -#define PerlSock_socketpair(a, t, p, f) PL_piSock->Socketpair(a, t, p, f, ErrorNo()) + (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len) +#define PerlSock_shutdown(s, h) \ + (*PL_Sock->pShutdown)(PL_Sock, s, h) +#define PerlSock_socket(a, t, p) \ + (*PL_Sock->pSocket)(PL_Sock, a, t, p) +#define PerlSock_socketpair(a, t, p, f) \ + (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f) + +#ifdef WIN32 +#define PerlSock_closesocket(s) \ + (*PL_Sock->pClosesocket)(PL_Sock, s) +#endif -#else /* PERL_OBJECT */ +#else /* PERL_IMPLICIT_SYS */ #define PerlSock_htonl(x) htonl(x) #define PerlSock_htons(x) htons(x) @@ -924,8 +1475,11 @@ public: #define PerlSock_socket(a, t, p) socket(a, t, p) #define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f) +#ifdef WIN32 +#define PerlSock_closesocket(s) closesocket(s) +#endif -#endif /* PERL_OBJECT */ +#endif /* PERL_IMPLICIT_SYS */ #endif /* __Inc__IPerl___ */ diff --git a/gnu/usr.bin/perl/jpl/JNI/Changes b/gnu/usr.bin/perl/jpl/JNI/Changes new file mode 100644 index 00000000000..dd2edf7c0c8 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/Changes @@ -0,0 +1,5 @@ +Revision history for Perl extension JNI. + +0.01 Wed Jun 4 13:16:03 1997 + - original version; created by h2xs 1.18 + diff --git a/gnu/usr.bin/perl/jpl/JNI/Closer.java b/gnu/usr.bin/perl/jpl/JNI/Closer.java new file mode 100644 index 00000000000..934405571d6 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/Closer.java @@ -0,0 +1,9 @@ +import java.awt.event.*; +import java.awt.*; +public class Closer extends WindowAdapter { + + public void windowClosing(WindowEvent e) { + Window w = e.getWindow(); + w.dispose(); + } +} diff --git a/gnu/usr.bin/perl/jpl/JNI/JNI.pm b/gnu/usr.bin/perl/jpl/JNI/JNI.pm new file mode 100644 index 00000000000..edbc1e6067c --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNI.pm @@ -0,0 +1,293 @@ +package JNI; + +use strict; +use Carp; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $JVM @JVM_ARGS $JAVALIB); + +require Exporter; +require DynaLoader; +require AutoLoader; + +@ISA = qw(Exporter DynaLoader); + +@EXPORT = qw( + JNI_ABORT + JNI_COMMIT + JNI_ERR + JNI_FALSE + JNI_H + JNI_OK + JNI_TRUE + GetVersion + DefineClass + FindClass + GetSuperclass + IsAssignableFrom + Throw + ThrowNew + ExceptionOccurred + ExceptionDescribe + ExceptionClear + FatalError + NewGlobalRef + DeleteGlobalRef + DeleteLocalRef + IsSameObject + AllocObject + NewObject + NewObjectA + GetObjectClass + IsInstanceOf + GetMethodID + CallObjectMethod + CallObjectMethodA + CallBooleanMethod + CallBooleanMethodA + CallByteMethod + CallByteMethodA + CallCharMethod + CallCharMethodA + CallShortMethod + CallShortMethodA + CallIntMethod + CallIntMethodA + CallLongMethod + CallLongMethodA + CallFloatMethod + CallFloatMethodA + CallDoubleMethod + CallDoubleMethodA + CallVoidMethod + CallVoidMethodA + CallNonvirtualObjectMethod + CallNonvirtualObjectMethodA + CallNonvirtualBooleanMethod + CallNonvirtualBooleanMethodA + CallNonvirtualByteMethod + CallNonvirtualByteMethodA + CallNonvirtualCharMethod + CallNonvirtualCharMethodA + CallNonvirtualShortMethod + CallNonvirtualShortMethodA + CallNonvirtualIntMethod + CallNonvirtualIntMethodA + CallNonvirtualLongMethod + CallNonvirtualLongMethodA + CallNonvirtualFloatMethod + CallNonvirtualFloatMethodA + CallNonvirtualDoubleMethod + CallNonvirtualDoubleMethodA + CallNonvirtualVoidMethod + CallNonvirtualVoidMethodA + GetFieldID + GetObjectField + GetBooleanField + GetByteField + GetCharField + GetShortField + GetIntField + GetLongField + GetFloatField + GetDoubleField + SetObjectField + SetBooleanField + SetByteField + SetCharField + SetShortField + SetIntField + SetLongField + SetFloatField + SetDoubleField + GetStaticMethodID + CallStaticObjectMethod + CallStaticObjectMethodA + CallStaticBooleanMethod + CallStaticBooleanMethodA + CallStaticByteMethod + CallStaticByteMethodA + CallStaticCharMethod + CallStaticCharMethodA + CallStaticShortMethod + CallStaticShortMethodA + CallStaticIntMethod + CallStaticIntMethodA + CallStaticLongMethod + CallStaticLongMethodA + CallStaticFloatMethod + CallStaticFloatMethodA + CallStaticDoubleMethod + CallStaticDoubleMethodA + CallStaticVoidMethod + CallStaticVoidMethodA + GetStaticFieldID + GetStaticObjectField + GetStaticBooleanField + GetStaticByteField + GetStaticCharField + GetStaticShortField + GetStaticIntField + GetStaticLongField + GetStaticFloatField + GetStaticDoubleField + SetStaticObjectField + SetStaticBooleanField + SetStaticByteField + SetStaticCharField + SetStaticShortField + SetStaticIntField + SetStaticLongField + SetStaticFloatField + SetStaticDoubleField + NewString + GetStringLength + GetStringChars + NewStringUTF + GetStringUTFLength + GetStringUTFChars + GetArrayLength + NewObjectArray + GetObjectArrayElement + SetObjectArrayElement + NewBooleanArray + NewByteArray + NewCharArray + NewShortArray + NewIntArray + NewLongArray + NewFloatArray + NewDoubleArray + GetBooleanArrayElements + GetByteArrayElements + GetCharArrayElements + GetShortArrayElements + GetIntArrayElements + GetLongArrayElements + GetFloatArrayElements + GetDoubleArrayElements + GetBooleanArrayRegion + GetByteArrayRegion + GetCharArrayRegion + GetShortArrayRegion + GetIntArrayRegion + GetLongArrayRegion + GetFloatArrayRegion + GetDoubleArrayRegion + SetBooleanArrayRegion + SetByteArrayRegion + SetCharArrayRegion + SetShortArrayRegion + SetIntArrayRegion + SetLongArrayRegion + SetFloatArrayRegion + SetDoubleArrayRegion + RegisterNatives + UnregisterNatives + MonitorEnter + MonitorExit + GetJavaVM +); + +$VERSION = '0.01'; + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. If a constant is not found then control is passed + # to the AUTOLOAD in AutoLoader. + + my $constname; + ($constname = $AUTOLOAD) =~ s/.*:://; + my $val = constant($constname, @_ ? $_[0] : 0); + if ($! != 0) { + if ($! =~ /Invalid/) { + $AutoLoader::AUTOLOAD = $AUTOLOAD; + goto &AutoLoader::AUTOLOAD; + } + else { + croak "Your vendor has not defined JNI macro $constname"; + } + } + eval "sub $AUTOLOAD { $val }"; + goto &$AUTOLOAD; +} + +bootstrap JNI $VERSION; + +if (not $JPL::_env_) { + $ENV{JAVA_HOME} ||= "/usr/local/java"; + + my ($arch, @CLASSPATH); + if ($^O eq 'MSWin32') { + + $arch = 'MSWin32' unless -d "$ENV{JAVA_HOME}/lib/$arch"; + @CLASSPATH = split(/;/, $ENV{CLASSPATH}); + @CLASSPATH = "." unless @CLASSPATH; + push @CLASSPATH, + "$ENV{JAVA_HOME}\\classes", + "$ENV{JAVA_HOME}\\lib\\classes.zip"; + + $ENV{CLASSPATH} = join(';', @CLASSPATH); + $ENV{THREADS_TYPE} ||= "green_threads"; + + $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}"; + $ENV{LD_LIBRARY_PATH} .= ":$JAVALIB"; + + push @JVM_ARGS, "classpath", $ENV{CLASSPATH}; + print "JVM_ARGS=@JVM_ARGS!\n"; + $JVM = GetJavaVM("$JAVALIB/javai.dll",@JVM_ARGS); + + } else { + chop($arch = `uname -p`); + chop($arch = `uname -m`) unless -d "$ENV{JAVA_HOME}/lib/$arch"; + + @CLASSPATH = split(/:/, $ENV{CLASSPATH}); + @CLASSPATH = "." unless @CLASSPATH; + push @CLASSPATH, + "$ENV{JAVA_HOME}/classes", + "$ENV{JAVA_HOME}/lib/classes.zip"; + $ENV{CLASSPATH} = join(':', @CLASSPATH); + + $ENV{THREADS_TYPE} ||= "green_threads"; + + $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}"; + $ENV{LD_LIBRARY_PATH} .= ":$JAVALIB"; + push @JVM_ARGS, "classpath", $ENV{CLASSPATH}; + print "JVM_ARGS=@JVM_ARGS!\n"; + $JVM = GetJavaVM("$JAVALIB/libjava.so",@JVM_ARGS); + } +} + +1; +__END__ + +=head1 NAME + +JNI - Perl encapsulation of the Java Native Interface + +=head1 SYNOPSIS + + use JNI; + +=head1 DESCRIPTION + +=head1 Exported constants + + JNI_ABORT + JNI_COMMIT + JNI_ERR + JNI_FALSE + JNI_H + JNI_OK + JNI_TRUE + + +=head1 AUTHOR + +Copyright 1998, O'Reilly & Associates, Inc. + +This package may be copied under the same terms as Perl itself. + +=head1 SEE ALSO + +perl(1). + +=cut diff --git a/gnu/usr.bin/perl/jpl/JNI/JNI.xs b/gnu/usr.bin/perl/jpl/JNI/JNI.xs new file mode 100644 index 00000000000..e5e0af3b535 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNI.xs @@ -0,0 +1,4141 @@ +/* + * Copyright 1997, O'Reilly & Associate, Inc. + * + * This package may be copied under the same terms as Perl itself. + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include + +#ifndef PERL_VERSION +# include +# define PERL_REVISION 5 +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION +#endif + +#if PERL_REVISION == 5 && (PERL_VERSION < 4 || \ + (PERL_VERSION == 4 && PERL_SUBVERSION <= 75)) +# define PL_na na +# define PL_sv_no sv_no +# define PL_sv_undef sv_undef +# define PL_dowarn dowarn +#endif + +#ifndef newSVpvn +# define newSVpvn(a,b) newSVpv(a,b) +#endif + +#ifndef pTHX +# define pTHX void +# define pTHX_ +# define aTHX +# define aTHX_ +# define dTHX extern int JNI___notused +#endif + +#ifndef WIN32 +# include +#endif + +#ifdef EMBEDDEDPERL +extern JNIEnv* jplcurenv; +extern int jpldebug; +#else +JNIEnv* jplcurenv; +int jpldebug = 1; +#endif + +#define SysRet jint + +#ifdef WIN32 +static void JNICALL call_my_exit(jint status) +{ + my_exit(status); +} +#else +static void call_my_exit(jint status) +{ + my_exit(status); +} +#endif + +jvalue* +makeargs(char *sig, SV** svp, int items) +{ + jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items); + int ix = 0; + char *s = sig; + JNIEnv* env = jplcurenv; + char *start; + STRLEN n_a; + + if (jpldebug) + fprintf(stderr, "sig = %s, items = %d\n", sig, items); + if (*s++ != '(') + goto cleanup; + + while (items--) { + SV *sv = *svp++; + start = s; + switch (*s++) { + case 'Z': + jv[ix++].z = (jboolean)(SvIV(sv) != 0); + break; + case 'B': + jv[ix++].b = (jbyte)SvIV(sv); + break; + case 'C': + jv[ix++].c = (jchar)SvIV(sv); + break; + case 'S': + jv[ix++].s = (jshort)SvIV(sv); + break; + case 'I': + jv[ix++].i = (jint)SvIV(sv); + break; + case 'J': + jv[ix++].j = (jlong)SvNV(sv); + break; + case 'F': + jv[ix++].f = (jfloat)SvNV(sv); + break; + case 'D': + jv[ix++].d = (jdouble)SvNV(sv); + break; + case '[': + switch (*s++) { + case 'Z': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jboolean* buf = (jboolean*)malloc(len * sizeof(jboolean)); + int i; + SV** esv; + +#ifdef WIN32 + jbooleanArray ja = env->NewBooleanArray(len); +#else + jbooleanArray ja = (*env)->NewBooleanArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jboolean)SvIV(*esv); +#ifdef WIN32 + env->SetBooleanArrayRegion(ja, 0, len, buf); +#else + (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jboolean); + +#ifdef WIN32 + jbooleanArray ja = env->NewBooleanArray(len); +#else + jbooleanArray ja = (*env)->NewBooleanArray(env, len); +#endif +#ifdef WIN32 + env->SetBooleanArrayRegion(ja, 0, len, (jboolean*)SvPV(sv,n_a)); +#else + (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'B': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jbyte* buf = (jbyte*)malloc(len * sizeof(jbyte)); + int i; + SV** esv; + +#ifdef WIN32 + jbyteArray ja = env->NewByteArray(len); +#else + jbyteArray ja = (*env)->NewByteArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jbyte)SvIV(*esv); +#ifdef WIN32 + env->SetByteArrayRegion(ja, 0, len, buf); +#else + (*env)->SetByteArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jbyte); + +#ifdef WIN32 + jbyteArray ja = env->NewByteArray(len); +#else + jbyteArray ja = (*env)->NewByteArray(env, len); +#endif +#ifdef WIN32 + env->SetByteArrayRegion(ja, 0, len, (jbyte*)SvPV(sv,n_a)); +#else + (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'C': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jchar* buf = (jchar*)malloc(len * sizeof(jchar)); + int i; + SV** esv; + +#ifdef WIN32 + jcharArray ja = env->NewCharArray(len); +#else + jcharArray ja = (*env)->NewCharArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jchar)SvIV(*esv); +#ifdef WIN32 + env->SetCharArrayRegion(ja, 0, len, buf); +#else + (*env)->SetCharArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jchar); + +#ifdef WIN32 + jcharArray ja = env->NewCharArray(len); +#else + jcharArray ja = (*env)->NewCharArray(env, len); +#endif +#ifdef WIN32 + env->SetCharArrayRegion(ja, 0, len, (jchar*)SvPV(sv,n_a)); +#else + (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'S': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jshort* buf = (jshort*)malloc(len * sizeof(jshort)); + int i; + SV** esv; + +#ifdef WIN32 + jshortArray ja = env->NewShortArray(len); +#else + jshortArray ja = (*env)->NewShortArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jshort)SvIV(*esv); +#ifdef WIN32 + env->SetShortArrayRegion(ja, 0, len, buf); +#else + (*env)->SetShortArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jshort); + +#ifdef WIN32 + jshortArray ja = env->NewShortArray(len); +#else + jshortArray ja = (*env)->NewShortArray(env, len); +#endif +#ifdef WIN32 + env->SetShortArrayRegion(ja, 0, len, (jshort*)SvPV(sv,n_a)); +#else + (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'I': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jint* buf = (jint*)malloc(len * sizeof(jint)); + int i; + SV** esv; + +#ifdef WIN32 + jintArray ja = env->NewIntArray(len); +#else + jintArray ja = (*env)->NewIntArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jint)SvIV(*esv); +#ifdef WIN32 + env->SetIntArrayRegion(ja, 0, len, buf); +#else + (*env)->SetIntArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jint); + +#ifdef WIN32 + jintArray ja = env->NewIntArray(len); +#else + jintArray ja = (*env)->NewIntArray(env, len); +#endif +#ifdef WIN32 + env->SetIntArrayRegion(ja, 0, len, (jint*)SvPV(sv,n_a)); +#else + (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'J': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jlong* buf = (jlong*)malloc(len * sizeof(jlong)); + int i; + SV** esv; + +#ifdef WIN32 + jlongArray ja = env->NewLongArray(len); +#else + jlongArray ja = (*env)->NewLongArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jlong)SvNV(*esv); +#ifdef WIN32 + env->SetLongArrayRegion(ja, 0, len, buf); +#else + (*env)->SetLongArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jlong); + +#ifdef WIN32 + jlongArray ja = env->NewLongArray(len); +#else + jlongArray ja = (*env)->NewLongArray(env, len); +#endif +#ifdef WIN32 + env->SetLongArrayRegion(ja, 0, len, (jlong*)SvPV(sv,n_a)); +#else + (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'F': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jfloat* buf = (jfloat*)malloc(len * sizeof(jfloat)); + int i; + SV** esv; + +#ifdef WIN32 + jfloatArray ja = env->NewFloatArray(len); +#else + jfloatArray ja = (*env)->NewFloatArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jfloat)SvNV(*esv); +#ifdef WIN32 + env->SetFloatArrayRegion(ja, 0, len, buf); +#else + (*env)->SetFloatArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jfloat); + +#ifdef WIN32 + jfloatArray ja = env->NewFloatArray(len); +#else + jfloatArray ja = (*env)->NewFloatArray(env, len); +#endif +#ifdef WIN32 + env->SetFloatArrayRegion(ja, 0, len, (jfloat*)SvPV(sv,n_a)); +#else + (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'D': + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + jdouble* buf = (jdouble*)malloc(len * sizeof(jdouble)); + int i; + SV** esv; + +#ifdef WIN32 + jdoubleArray ja = env->NewDoubleArray(len); +#else + jdoubleArray ja = (*env)->NewDoubleArray(env, len); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) + buf[i] = (jdouble)SvNV(*esv); +#ifdef WIN32 + env->SetDoubleArrayRegion(ja, 0, len, buf); +#else + (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf); +#endif + free((void*)buf); + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else if (SvPOK(sv)) { + jsize len = sv_len(sv) / sizeof(jdouble); + +#ifdef WIN32 + jdoubleArray ja = env->NewDoubleArray(len); +#else + jdoubleArray ja = (*env)->NewDoubleArray(env, len); +#endif +#ifdef WIN32 + env->SetDoubleArrayRegion(ja, 0, len, (jdouble*)SvPV(sv,n_a)); +#else + (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a)); +#endif + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + case 'L': + while (*s != ';') s++; + s++; + if (strnEQ(start, "[Ljava/lang/String;", 19)) { + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + int i; + SV** esv; + static jclass jcl = 0; + jobjectArray ja; + + if (!jcl) +#ifdef WIN32 + jcl = env->FindClass("java/lang/String"); +#else + jcl = (*env)->FindClass(env, "java/lang/String"); +#endif +#ifdef WIN32 + ja = env->NewObjectArray(len, jcl, 0); +#else + ja = (*env)->NewObjectArray(env, len, jcl, 0); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { +#ifdef WIN32 + jobject str = (jobject)env->NewStringUTF(SvPV(*esv,n_a)); +#else + jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); +#endif +#ifdef WIN32 + env->SetObjectArrayElement(ja, i, str); +#else + (*env)->SetObjectArrayElement(env, ja, i, str); +#endif + } + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + } + /* FALL THROUGH */ + default: + if (SvROK(sv)) { + SV* rv = (SV*)SvRV(sv); + if (SvOBJECT(rv)) + jv[ix++].l = (jobject)(void*)SvIV(rv); + else if (SvTYPE(rv) == SVt_PVAV) { + jsize len = av_len((AV*)rv) + 1; + int i; + SV** esv; + static jclass jcl = 0; + jobjectArray ja; + + if (!jcl) +#ifdef WIN32 + jcl = env->FindClass("java/lang/Object"); +#else + jcl = (*env)->FindClass(env, "java/lang/Object"); +#endif +#ifdef WIN32 + ja = env->NewObjectArray(len, jcl, 0); +#else + ja = (*env)->NewObjectArray(env, len, jcl, 0); +#endif + for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { + if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) { +#ifdef WIN32 + env->SetObjectArrayElement(ja, i, (jobject)(void*)SvIV(rv)); +#else + (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv)); +#endif + } + else { +#ifdef WIN32 + jobject str = (jobject)env->NewStringUTF(SvPV(*esv,n_a)); +#else + jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a)); +#endif +#ifdef WIN32 + env->SetObjectArrayElement(ja, i, str); +#else + (*env)->SetObjectArrayElement(env, ja, i, str); +#endif + } + } + jv[ix++].l = (jobject)ja; + } + else + jv[ix++].l = (jobject)(void*)0; + } + else + jv[ix++].l = (jobject)(void*)0; + break; + } + break; + case 'L': + if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) { + s += 17; +#ifdef WIN32 + jv[ix++].l = (jobject)env->NewStringUTF((char*) SvPV(sv,n_a)); +#else + jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a)); +#endif + break; + } + while (*s != ';') s++; + s++; + if (SvROK(sv)) { + SV* rv = SvRV(sv); + jv[ix++].l = (jobject)(void*)SvIV(rv); + } + break; + case ')': + croak("too many arguments, signature: %s", sig); + goto cleanup; + default: + croak("panic: malformed signature: %s", s-1); + goto cleanup; + } + + } + if (*s != ')') { + croak("not enough arguments, signature: %s", sig); + goto cleanup; + } + return jv; + +cleanup: + safefree((char*)jv); + return 0; +} + +static int +not_here(char *s) +{ + croak("%s not implemented on this architecture", s); + return -1; +} + +static double +constant(char *name, int arg) +{ + errno = 0; + switch (*name) { + case 'A': + break; + case 'B': + break; + case 'C': + break; + case 'D': + break; + case 'E': + break; + case 'F': + break; + case 'G': + break; + case 'H': + break; + case 'I': + break; + case 'J': + if (strEQ(name, "JNI_ABORT")) +#ifdef JNI_ABORT + return JNI_ABORT; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_COMMIT")) +#ifdef JNI_COMMIT + return JNI_COMMIT; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_ERR")) +#ifdef JNI_ERR + return JNI_ERR; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_FALSE")) +#ifdef JNI_FALSE + return JNI_FALSE; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_H")) +#ifdef JNI_H +#ifdef WIN32 + return 1; +#else + return JNI_H; +#endif +#else + goto not_there; +#endif + if (strEQ(name, "JNI_OK")) +#ifdef JNI_OK + return JNI_OK; +#else + goto not_there; +#endif + if (strEQ(name, "JNI_TRUE")) +#ifdef JNI_TRUE + return JNI_TRUE; +#else + goto not_there; +#endif + break; + case 'K': + break; + case 'L': + break; + case 'M': + break; + case 'N': + break; + case 'O': + break; + case 'P': + break; + case 'Q': + break; + case 'R': + break; + case 'S': + break; + case 'T': + break; + case 'U': + break; + case 'V': + break; + case 'W': + break; + case 'X': + break; + case 'Y': + break; + case 'Z': + break; + } + errno = EINVAL; + return 0; + +not_there: + errno = ENOENT; + return 0; +} + +#define FETCHENV jplcurenv +#define RESTOREENV jplcurenv = env + +MODULE = JNI PACKAGE = JNI + +PROTOTYPES: ENABLE + +double +constant(name,arg) + char * name + int arg + +jint +GetVersion() + JNIEnv * env = FETCHENV; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetVersion(); +#else + RETVAL = (*env)->GetVersion(env); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +DefineClass(name, loader, buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jsize buf_len_ = NO_INIT; + const char * name + jobject loader + const jbyte * buf + CODE: + { +#ifdef KAFFE +#ifdef WIN32 + RETVAL = env->DefineClass( loader, buf, (jsize)buf_len_); +#else + RETVAL = (*env)->DefineClass(env, loader, buf, (jsize)buf_len_); +#endif +#else +#ifdef WIN32 + RETVAL = env->DefineClass( name, loader, buf, (jsize)buf_len_); +#else + RETVAL = (*env)->DefineClass(env, name, loader, buf, (jsize)buf_len_); +#endif +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +FindClass(name) + JNIEnv * env = FETCHENV; + const char * name + CODE: + { +#ifdef WIN32 + RETVAL = env->FindClass( name); +#else + RETVAL = (*env)->FindClass(env, name); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +GetSuperclass(sub) + JNIEnv * env = FETCHENV; + jclass sub + CODE: + { +#ifdef WIN32 + RETVAL = env->GetSuperclass( sub); +#else + RETVAL = (*env)->GetSuperclass(env, sub); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +IsAssignableFrom(sub, sup) + JNIEnv * env = FETCHENV; + jclass sub + jclass sup + CODE: + { +#ifdef WIN32 + RETVAL = env->IsAssignableFrom( sub, sup); +#else + RETVAL = (*env)->IsAssignableFrom(env, sub, sup); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +Throw(obj) + JNIEnv * env = FETCHENV; + jthrowable obj + CODE: + { +#ifdef WIN32 + RETVAL = env->Throw( obj); +#else + RETVAL = (*env)->Throw(env, obj); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +ThrowNew(clazz, msg) + JNIEnv * env = FETCHENV; + jclass clazz + const char * msg + CODE: + { +#ifdef WIN32 + RETVAL = env->ThrowNew( clazz, msg); +#else + RETVAL = (*env)->ThrowNew(env, clazz, msg); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jthrowable +ExceptionOccurred() + JNIEnv * env = FETCHENV; + CODE: + { +#ifdef WIN32 + RETVAL = env->ExceptionOccurred(); +#else + RETVAL = (*env)->ExceptionOccurred(env); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +ExceptionDescribe() + JNIEnv * env = FETCHENV; + CODE: + { +#ifdef WIN32 + env->ExceptionDescribe(); +#else + (*env)->ExceptionDescribe(env); +#endif + RESTOREENV; + } + +void +ExceptionClear() + JNIEnv * env = FETCHENV; + CODE: + { +#ifdef WIN32 + env->ExceptionClear(); +#else + (*env)->ExceptionClear(env); +#endif + RESTOREENV; + } + +void +FatalError(msg) + JNIEnv * env = FETCHENV; + const char * msg + CODE: + { +#ifdef WIN32 + env->FatalError( msg); +#else + (*env)->FatalError(env, msg); +#endif + RESTOREENV; + } + +jobject +NewGlobalRef(lobj) + JNIEnv * env = FETCHENV; + jobject lobj + CODE: + { +#ifdef WIN32 + RETVAL = env->NewGlobalRef(lobj); +#else + RETVAL = (*env)->NewGlobalRef(env, lobj); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +DeleteGlobalRef(gref) + JNIEnv * env = FETCHENV; + jobject gref + CODE: + { +#ifdef WIN32 + env->DeleteGlobalRef(gref); +#else + (*env)->DeleteGlobalRef(env, gref); +#endif + RESTOREENV; + } + +void +DeleteLocalRef(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { +#ifdef WIN32 + env->DeleteLocalRef( obj); +#else + (*env)->DeleteLocalRef(env, obj); +#endif + RESTOREENV; + } + +jboolean +IsSameObject(obj1,obj2) + JNIEnv * env = FETCHENV; + jobject obj1 + jobject obj2 + CODE: + { +#ifdef WIN32 + RETVAL = env->IsSameObject(obj1,obj2); +#else + RETVAL = (*env)->IsSameObject(env, obj1,obj2); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +AllocObject(clazz) + JNIEnv * env = FETCHENV; + jclass clazz + CODE: + { +#ifdef WIN32 + RETVAL = env->AllocObject(clazz); +#else + RETVAL = (*env)->AllocObject(env, clazz); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +NewObject(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->NewObjectA(clazz,methodID,args); +#else + RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +NewObjectA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->NewObjectA(clazz,methodID,args); +#else + RETVAL = (*env)->NewObjectA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jclass +GetObjectClass(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { +#ifdef WIN32 + RETVAL = env->GetObjectClass(obj); +#else + RETVAL = (*env)->GetObjectClass(env, obj); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +IsInstanceOf(obj,clazz) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + CODE: + { +#ifdef WIN32 + RETVAL = env->IsInstanceOf(obj,clazz); +#else + RETVAL = (*env)->IsInstanceOf(env, obj,clazz); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jmethodID +GetMethodID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { +#ifdef WIN32 + RETVAL = env->GetMethodID(clazz,name,sig); +#else + RETVAL = (*env)->GetMethodID(env, clazz,name,sig); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallObjectMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallObjectMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallObjectMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallObjectMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallBooleanMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallBooleanMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallBooleanMethodA(obj,methodID, args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallBooleanMethodA(obj,methodID, args); +#else + RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallByteMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallByteMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallByteMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallByteMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallCharMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallCharMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallCharMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallCharMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallShortMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallShortMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallShortMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallShortMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallIntMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallIntMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallIntMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallIntMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallLongMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallLongMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallLongMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallLongMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallFloatMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallFloatMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallFloatMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallFloatMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallDoubleMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallDoubleMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallDoubleMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallDoubleMethodA(obj,methodID,args); +#else + RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallVoidMethod(obj,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + env->CallVoidMethodA(obj,methodID,args); +#else + (*env)->CallVoidMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + +void +CallVoidMethodA(obj,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + env->CallVoidMethodA(obj,methodID,args); +#else + (*env)->CallVoidMethodA(env, obj,methodID,args); +#endif + RESTOREENV; + } + +jobject +CallNonvirtualObjectMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualObjectMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallNonvirtualObjectMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualObjectMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallNonvirtualBooleanMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualBooleanMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallNonvirtualBooleanMethodA(obj,clazz,methodID, args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualBooleanMethodA(obj,clazz,methodID, args); +#else + RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallNonvirtualByteMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualByteMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallNonvirtualByteMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualByteMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallNonvirtualCharMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualCharMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallNonvirtualCharMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualCharMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallNonvirtualShortMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualShortMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallNonvirtualShortMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualShortMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallNonvirtualIntMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualIntMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallNonvirtualIntMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualIntMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallNonvirtualLongMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualLongMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallNonvirtualLongMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualLongMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallNonvirtualFloatMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualFloatMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallNonvirtualFloatMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualFloatMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallNonvirtualDoubleMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallNonvirtualDoubleMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallNonvirtualDoubleMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallNonvirtualDoubleMethodA(obj,clazz,methodID,args); +#else + RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallNonvirtualVoidMethod(obj,clazz,methodID,...) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + env->CallNonvirtualVoidMethodA(obj,clazz,methodID,args); +#else + (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + +void +CallNonvirtualVoidMethodA(obj,clazz,methodID,args) + JNIEnv * env = FETCHENV; + jobject obj + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + env->CallNonvirtualVoidMethodA(obj,clazz,methodID,args); +#else + (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args); +#endif + RESTOREENV; + } + +jfieldID +GetFieldID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { +#ifdef WIN32 + RETVAL = env->GetFieldID(clazz,name,sig); +#else + RETVAL = (*env)->GetFieldID(env, clazz,name,sig); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetObjectField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetObjectField(obj,fieldID); +#else + RETVAL = (*env)->GetObjectField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +GetBooleanField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetBooleanField(obj,fieldID); +#else + RETVAL = (*env)->GetBooleanField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +GetByteField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetByteField(obj,fieldID); +#else + RETVAL = (*env)->GetByteField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +GetCharField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetCharField(obj,fieldID); +#else + RETVAL = (*env)->GetCharField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +GetShortField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetShortField(obj,fieldID); +#else + RETVAL = (*env)->GetShortField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +GetIntField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetIntField(obj,fieldID); +#else + RETVAL = (*env)->GetIntField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +GetLongField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetLongField(obj,fieldID); +#else + RETVAL = (*env)->GetLongField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +GetFloatField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetFloatField(obj,fieldID); +#else + RETVAL = (*env)->GetFloatField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +GetDoubleField(obj,fieldID) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetDoubleField(obj,fieldID); +#else + RETVAL = (*env)->GetDoubleField(env, obj,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetObjectField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jobject val + CODE: + { +#ifdef WIN32 + env->SetObjectField(obj,fieldID,val); +#else + (*env)->SetObjectField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetBooleanField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jboolean val + CODE: + { +#ifdef WIN32 + env->SetBooleanField(obj,fieldID,val); +#else + (*env)->SetBooleanField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetByteField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jbyte val + CODE: + { +#ifdef WIN32 + env->SetByteField(obj,fieldID,val); +#else + (*env)->SetByteField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetCharField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jchar val + CODE: + { +#ifdef WIN32 + env->SetCharField(obj,fieldID,val); +#else + (*env)->SetCharField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetShortField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jshort val + CODE: + { +#ifdef WIN32 + env->SetShortField(obj,fieldID,val); +#else + (*env)->SetShortField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetIntField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jint val + CODE: + { +#ifdef WIN32 + env->SetIntField(obj,fieldID,val); +#else + (*env)->SetIntField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetLongField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jlong val + CODE: + { +#ifdef WIN32 + env->SetLongField(obj,fieldID,val); +#else + (*env)->SetLongField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetFloatField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jfloat val + CODE: + { +#ifdef WIN32 + env->SetFloatField(obj,fieldID,val); +#else + (*env)->SetFloatField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +void +SetDoubleField(obj,fieldID,val) + JNIEnv * env = FETCHENV; + jobject obj + jfieldID fieldID + char * sig = 0; + jdouble val + CODE: + { +#ifdef WIN32 + env->SetDoubleField(obj,fieldID,val); +#else + (*env)->SetDoubleField(env, obj,fieldID,val); +#endif + RESTOREENV; + } + +jmethodID +GetStaticMethodID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticMethodID(clazz,name,sig); +#else + RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallStaticObjectMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticObjectMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +CallStaticObjectMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticObjectMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallStaticBooleanMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticBooleanMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +CallStaticBooleanMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticBooleanMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallStaticByteMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticByteMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +CallStaticByteMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticByteMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallStaticCharMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticCharMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +CallStaticCharMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticCharMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallStaticShortMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticShortMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +CallStaticShortMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticShortMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallStaticIntMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticIntMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +CallStaticIntMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticIntMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallStaticLongMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticLongMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +CallStaticLongMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticLongMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallStaticFloatMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticFloatMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +CallStaticFloatMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticFloatMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallStaticDoubleMethod(clazz,methodID,...) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + RETVAL = env->CallStaticDoubleMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +CallStaticDoubleMethodA(clazz,methodID,args) + JNIEnv * env = FETCHENV; + jclass clazz + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + RETVAL = env->CallStaticDoubleMethodA(clazz,methodID,args); +#else + RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +CallStaticVoidMethod(cls,methodID,...) + JNIEnv * env = FETCHENV; + jclass cls + jmethodID methodID + char * sig = 0; + int argoff = $min_args; + CODE: + { + jvalue * args = makeargs(sig, &ST(argoff), items - argoff); +#ifdef WIN32 + env->CallStaticVoidMethodA(cls,methodID,args); +#else + (*env)->CallStaticVoidMethodA(env, cls,methodID,args); +#endif + RESTOREENV; + } + +void +CallStaticVoidMethodA(cls,methodID,args) + JNIEnv * env = FETCHENV; + jclass cls + jmethodID methodID + char * sig = 0; + jvalue * args + CODE: + { +#ifdef WIN32 + env->CallStaticVoidMethodA(cls,methodID,args); +#else + (*env)->CallStaticVoidMethodA(env, cls,methodID,args); +#endif + RESTOREENV; + } + +jfieldID +GetStaticFieldID(clazz,name,sig) + JNIEnv * env = FETCHENV; + jclass clazz + const char * name + const char * sig + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticFieldID(clazz,name,sig); +#else + RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetStaticObjectField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticObjectField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean +GetStaticBooleanField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticBooleanField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyte +GetStaticByteField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticByteField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jchar +GetStaticCharField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticCharField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshort +GetStaticShortField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticShortField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jint +GetStaticIntField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticIntField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlong +GetStaticLongField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticLongField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloat +GetStaticFloatField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticFloatField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdouble +GetStaticDoubleField(clazz,fieldID) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStaticDoubleField(clazz,fieldID); +#else + RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetStaticObjectField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jobject value + CODE: + { +#ifdef WIN32 + env->SetStaticObjectField(clazz,fieldID,value); +#else + (*env)->SetStaticObjectField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticBooleanField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jboolean value + CODE: + { +#ifdef WIN32 + env->SetStaticBooleanField(clazz,fieldID,value); +#else + (*env)->SetStaticBooleanField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticByteField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jbyte value + CODE: + { +#ifdef WIN32 + env->SetStaticByteField(clazz,fieldID,value); +#else + (*env)->SetStaticByteField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticCharField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jchar value + CODE: + { +#ifdef WIN32 + env->SetStaticCharField(clazz,fieldID,value); +#else + (*env)->SetStaticCharField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticShortField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jshort value + CODE: + { +#ifdef WIN32 + env->SetStaticShortField(clazz,fieldID,value); +#else + (*env)->SetStaticShortField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticIntField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jint value + CODE: + { +#ifdef WIN32 + env->SetStaticIntField(clazz,fieldID,value); +#else + (*env)->SetStaticIntField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticLongField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jlong value + CODE: + { +#ifdef WIN32 + env->SetStaticLongField(clazz,fieldID,value); +#else + (*env)->SetStaticLongField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticFloatField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jfloat value + CODE: + { +#ifdef WIN32 + env->SetStaticFloatField(clazz,fieldID,value); +#else + (*env)->SetStaticFloatField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +void +SetStaticDoubleField(clazz,fieldID,value) + JNIEnv * env = FETCHENV; + jclass clazz + jfieldID fieldID + char * sig = 0; + jdouble value + CODE: + { +#ifdef WIN32 + env->SetStaticDoubleField(clazz,fieldID,value); +#else + (*env)->SetStaticDoubleField(env, clazz,fieldID,value); +#endif + RESTOREENV; + } + +jstring +NewString(unicode) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jsize unicode_len_ = NO_INIT; + const jchar * unicode + CODE: + { +#ifdef WIN32 + RETVAL = env->NewString(unicode, unicode_len_); +#else + RETVAL = (*env)->NewString(env, unicode, unicode_len_); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jsize +GetStringLength(str) + JNIEnv * env = FETCHENV; + jstring str + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStringLength(str); +#else + RETVAL = (*env)->GetStringLength(env, str); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +const jchar * +GetStringChars(str) + JNIEnv * env = FETCHENV; + jstring str + jboolean isCopy = NO_INIT; + jsize RETVAL_len_ = NO_INIT; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStringChars(str,&isCopy); +#else + RETVAL = (*env)->GetStringChars(env, str,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetStringLength(str); +#else + RETVAL_len_ = (*env)->GetStringLength(env, str); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + CLEANUP: +#ifdef WIN32 + env->ReleaseStringChars(str,RETVAL); +#else + (*env)->ReleaseStringChars(env, str,RETVAL); +#endif + +jstring +NewStringUTF(utf) + JNIEnv * env = FETCHENV; + const char * utf + CODE: + { +#ifdef WIN32 + RETVAL = env->NewStringUTF(utf); +#else + RETVAL = (*env)->NewStringUTF(env, utf); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jsize +GetStringUTFLength(str) + JNIEnv * env = FETCHENV; + jstring str + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStringUTFLength(str); +#else + RETVAL = (*env)->GetStringUTFLength(env, str); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +const char * +GetStringUTFChars(str) + JNIEnv * env = FETCHENV; + jstring str + jboolean isCopy = NO_INIT; + CODE: + { +#ifdef WIN32 + RETVAL = env->GetStringUTFChars(str,&isCopy); +#else + RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + CLEANUP: +#ifdef WIN32 + env->ReleaseStringUTFChars(str, RETVAL); +#else + (*env)->ReleaseStringUTFChars(env, str, RETVAL); +#endif + + +jsize +GetArrayLength(array) + JNIEnv * env = FETCHENV; + jarray array + CODE: + { +#ifdef WIN32 + RETVAL = env->GetArrayLength(array); +#else + RETVAL = (*env)->GetArrayLength(env, array); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobjectArray +NewObjectArray(len,clazz,init) + JNIEnv * env = FETCHENV; + jsize len + jclass clazz + jobject init + CODE: + { +#ifdef WIN32 + RETVAL = env->NewObjectArray(len,clazz,init); +#else + RETVAL = (*env)->NewObjectArray(env, len,clazz,init); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jobject +GetObjectArrayElement(array,index) + JNIEnv * env = FETCHENV; + jobjectArray array + jsize index + CODE: + { +#ifdef WIN32 + RETVAL = env->GetObjectArrayElement(array,index); +#else + RETVAL = (*env)->GetObjectArrayElement(env, array,index); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +void +SetObjectArrayElement(array,index,val) + JNIEnv * env = FETCHENV; + jobjectArray array + jsize index + jobject val + CODE: + { +#ifdef WIN32 + env->SetObjectArrayElement(array,index,val); +#else + (*env)->SetObjectArrayElement(env, array,index,val); +#endif + RESTOREENV; + } + +jbooleanArray +NewBooleanArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewBooleanArray(len); +#else + RETVAL = (*env)->NewBooleanArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jbyteArray +NewByteArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewByteArray(len); +#else + RETVAL = (*env)->NewByteArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jcharArray +NewCharArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewCharArray(len); +#else + RETVAL = (*env)->NewCharArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jshortArray +NewShortArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewShortArray(len); +#else + RETVAL = (*env)->NewShortArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jintArray +NewIntArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewIntArray(len); +#else + RETVAL = (*env)->NewIntArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jlongArray +NewLongArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewLongArray(len); +#else + RETVAL = (*env)->NewLongArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jfloatArray +NewFloatArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewFloatArray(len); +#else + RETVAL = (*env)->NewFloatArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jdoubleArray +NewDoubleArray(len) + JNIEnv * env = FETCHENV; + jsize len + CODE: + { +#ifdef WIN32 + RETVAL = env->NewDoubleArray(len); +#else + RETVAL = (*env)->NewDoubleArray(env, len); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +jboolean * +GetBooleanArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jbooleanArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetBooleanArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jboolean* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jboolean)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseBooleanArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jbyte * +GetByteArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jbyteArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetByteArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jbyte* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jbyte)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseByteArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jchar * +GetCharArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jcharArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetCharArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jchar* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jchar)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseCharArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jshort * +GetShortArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jshortArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetShortArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jshort* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jshort)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseShortArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jint * +GetIntArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jintArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetIntArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jint* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jint)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseIntArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jlong * +GetLongArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jlongArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetLongArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jlong* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSViv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jlong)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseLongArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jfloat * +GetFloatArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jfloatArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetFloatArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jfloat* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSVnv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jfloat)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseFloatArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +jdouble * +GetDoubleArrayElements(array) + JNIEnv * env = FETCHENV; + jsize RETVAL_len_ = NO_INIT; + jdoubleArray array + jboolean isCopy = NO_INIT; + PPCODE: + { +#ifdef WIN32 + RETVAL = env->GetDoubleArrayElements(array,&isCopy); +#else + RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy); +#endif +#ifdef WIN32 + RETVAL_len_ = env->GetArrayLength(array); +#else + RETVAL_len_ = (*env)->GetArrayLength(env, array); +#endif + if (GIMME == G_ARRAY) { + int i; + jdouble* r = RETVAL; + EXTEND(sp, RETVAL_len_); + for (i = RETVAL_len_; i; --i) { + PUSHs(sv_2mortal(newSVnv(*r++))); + } + } + else { + if (RETVAL_len_) { + PUSHs(sv_2mortal(newSVpvn((char*)RETVAL, + (STRLEN)RETVAL_len_ * sizeof(jdouble)))); + } + else + PUSHs(&PL_sv_no); + } +#ifdef WIN32 + env->ReleaseDoubleArrayElements(array,RETVAL,JNI_ABORT); +#else + (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT); +#endif + RESTOREENV; + } + +void +GetBooleanArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jbooleanArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jboolean * buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1); + CODE: + { +#ifdef WIN32 + env->GetBooleanArrayRegion(array,start,len,buf); +#else + (*env)->GetBooleanArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jboolean)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetByteArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jbyteArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jbyte * buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1); + CODE: + { +#ifdef WIN32 + env->GetByteArrayRegion(array,start,len,buf); +#else + (*env)->GetByteArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jbyte)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetCharArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jcharArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jchar * buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1); + CODE: + { +#ifdef WIN32 + env->GetCharArrayRegion(array,start,len,buf); +#else + (*env)->GetCharArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jchar)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetShortArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jshortArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jshort * buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1); + CODE: + { +#ifdef WIN32 + env->GetShortArrayRegion(array,start,len,buf); +#else + (*env)->GetShortArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jshort)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetIntArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jintArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jint * buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1); + CODE: + { +#ifdef WIN32 + env->GetIntArrayRegion(array,start,len,buf); +#else + (*env)->GetIntArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jint)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetLongArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jlongArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jlong * buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1); + CODE: + { +#ifdef WIN32 + env->GetLongArrayRegion(array,start,len,buf); +#else + (*env)->GetLongArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jlong)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetFloatArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jfloatArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jfloat * buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1); + CODE: + { +#ifdef WIN32 + env->GetFloatArrayRegion(array,start,len,buf); +#else + (*env)->GetFloatArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jfloat)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +GetDoubleArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + jdoubleArray array + jsize start + jsize len + STRLEN tmplen = len * sizeof(jboolean) + 1; + char * tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen); + jdouble * buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1); + CODE: + { +#ifdef WIN32 + env->GetDoubleArrayRegion(array,start,len,buf); +#else + (*env)->GetDoubleArrayRegion(env, array,start,len,buf); +#endif + SvCUR_set(ST(3), len * sizeof(jdouble)); + *SvEND(ST(3)) = '\0'; + RESTOREENV; + } + +void +SetBooleanArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jbooleanArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jboolean * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetBooleanArrayRegion(array,start,len,buf); +#else + (*env)->SetBooleanArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetByteArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jbyteArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jbyte * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetByteArrayRegion(array,start,len,buf); +#else + (*env)->SetByteArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetCharArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jcharArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jchar * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetCharArrayRegion(array,start,len,buf); +#else + (*env)->SetCharArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetShortArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jshortArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jshort * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetShortArrayRegion(array,start,len,buf); +#else + (*env)->SetShortArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetIntArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jintArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jint * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetIntArrayRegion(array,start,len,buf); +#else + (*env)->SetIntArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetLongArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jlongArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jlong * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetLongArrayRegion(array,start,len,buf); +#else + (*env)->SetLongArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetFloatArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jfloatArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jfloat * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetFloatArrayRegion(array,start,len,buf); +#else + (*env)->SetFloatArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +void +SetDoubleArrayRegion(array,start,len,buf) + JNIEnv * env = FETCHENV; + STRLEN tmplen = NO_INIT; + jdoubleArray array + jsize start + jsize len + jsize buf_len_ = NO_INIT; + jdouble * buf + CODE: + { + if (buf_len_ < len) + croak("string is too short"); + else if (buf_len_ > len && PL_dowarn) + warn("string is too long"); +#ifdef WIN32 + env->SetDoubleArrayRegion(array,start,len,buf); +#else + (*env)->SetDoubleArrayRegion(env, array,start,len,buf); +#endif + RESTOREENV; + } + +SysRet +RegisterNatives(clazz,methods,nMethods) + JNIEnv * env = FETCHENV; + jclass clazz + JNINativeMethod * methods + jint nMethods + CODE: + { +#ifdef WIN32 + RETVAL = env->RegisterNatives(clazz,methods,nMethods); +#else + RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods); +#endif + } + +SysRet +UnregisterNatives(clazz) + JNIEnv * env = FETCHENV; + jclass clazz + CODE: + { +#ifdef WIN32 + RETVAL = env->UnregisterNatives(clazz); +#else + RETVAL = (*env)->UnregisterNatives(env, clazz); +#endif + } + OUTPUT: + RETVAL + +SysRet +MonitorEnter(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { +#ifdef WIN32 + RETVAL = env->MonitorEnter(obj); +#else + RETVAL = (*env)->MonitorEnter(env, obj); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +SysRet +MonitorExit(obj) + JNIEnv * env = FETCHENV; + jobject obj + CODE: + { +#ifdef WIN32 + RETVAL = env->MonitorExit(obj); +#else + RETVAL = (*env)->MonitorExit(env, obj); +#endif + RESTOREENV; + } + OUTPUT: + RETVAL + +JavaVM * +GetJavaVM(...) + JNIEnv * env = FETCHENV; + CODE: + { + if (env) { /* We're embedded. */ +#ifdef WIN32 + if (env->GetJavaVM(&RETVAL) < 0) +#else + if ((*env)->GetJavaVM(env, &RETVAL) < 0) +#endif + RETVAL = 0; + } + else { /* We're embedding. */ +#ifdef KAFFE + JavaVMInitArgs vm_args; +#else + JDK1_1InitArgs vm_args; +#endif + char *lib; + if (jpldebug) { + fprintf(stderr, "We're embedding Java in Perl.\n"); + } + + if (items--) { + ++mark; + lib = SvPV(*mark, PL_na); + } + else + lib = 0; + if (jpldebug) { + fprintf(stderr, "lib is %s.\n", lib); + } +#ifdef WIN32 + if (!LoadLibrary("javai.dll")) { + if (lib && !LoadLibrary(lib)) + croak("Can't load javai.dll"); + } +#else + if (jpldebug) { + fprintf(stderr, "Opening Java shared library.\n"); + } +#ifdef KAFFE + if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) { +#else + if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) { +#endif + if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL)) + croak("Can't load Java shared library."); + } +#endif + + JNI_GetDefaultJavaVMInitArgs(&vm_args); + vm_args.exit = &call_my_exit; + if (jpldebug) { + fprintf(stderr, "items = %d\n", items); + fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na)); + } + ++mark; + while (items > 1) { + char *s = SvPV(*mark,PL_na); + ++mark; + if (jpldebug) { + fprintf(stderr, "*s = %s\n", s); + fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na)); + } + items -= 2; + if (strEQ(s, "checkSource")) + vm_args.checkSource = (jint)SvIV(*mark); + else if (strEQ(s, "nativeStackSize")) + vm_args.nativeStackSize = (jint)SvIV(*mark); + else if (strEQ(s, "javaStackSize")) + vm_args.javaStackSize = (jint)SvIV(*mark); + else if (strEQ(s, "minHeapSize")) + vm_args.minHeapSize = (jint)SvIV(*mark); + else if (strEQ(s, "maxHeapSize")) + vm_args.maxHeapSize = (jint)SvIV(*mark); + else if (strEQ(s, "verifyMode")) + vm_args.verifyMode = (jint)SvIV(*mark); + else if (strEQ(s, "classpath")) + vm_args.classpath = savepv(SvPV(*mark,PL_na)); + else if (strEQ(s, "enableClassGC")) + vm_args.enableClassGC = (jint)SvIV(*mark); + else if (strEQ(s, "enableVerboseGC")) + vm_args.enableVerboseGC = (jint)SvIV(*mark); + else if (strEQ(s, "disableAsyncGC")) + vm_args.disableAsyncGC = (jint)SvIV(*mark); +#ifndef KAFFE + else if (strEQ(s, "verbose")) + vm_args.verbose = (jint)SvIV(*mark); + else if (strEQ(s, "debugging")) + vm_args.debugging = (jboolean)SvIV(*mark); + else if (strEQ(s, "debugPort")) + vm_args.debugPort = (jint)SvIV(*mark); +#endif + else + croak("unrecognized option: %s", s); + } + + if (jpldebug) { + fprintf(stderr, "Creating Java VM...\n"); + fprintf(stderr, "Working CLASSPATH: %s\n", + vm_args.classpath); + } + JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args); + if (jpldebug) { + fprintf(stderr, "Created Java VM.\n"); + } + } + } + diff --git a/gnu/usr.bin/perl/jpl/JNI/JNIConfig b/gnu/usr.bin/perl/jpl/JNI/JNIConfig new file mode 100644 index 00000000000..494de138887 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNIConfig @@ -0,0 +1,13 @@ +eval `$JPL_SRC/setvars -perl`; +$java = $ENV{JAVA_HOME}; +$jpl = $ENV{JPL_HOME}; + +# Where are the Java includes? +# +@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix"); + +# Are we embedding Perl in Java? +# +$EMBEDDEDPERL = 1; + +1; diff --git a/gnu/usr.bin/perl/jpl/JNI/JNIConfig.Win32 b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.Win32 new file mode 100644 index 00000000000..000566ae4c6 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.Win32 @@ -0,0 +1,21 @@ +# Are we using Kaffe? +# +$KAFFE = 0; + +# Where are the Java includes? +# +@INCLUDE = ("C:\\jdk1.1.8\\include", "C:\\jdk1.1.8\\include\\win32"); + +# Are we embedding Perl in Java? +# +$EMBEDDEDPERL = 0; + +# Extra C flags +# +$CCFLAGS=" -Z7 -D_DEBUG"; + +$MYEXTLIB = "C:\\jdk1.1.8\\lib\\javai.lib " . + "$Config{installarchlib}\\CORE\\perlcore.lib " . + "$Config{installarchlib}\\CORE\\perlcapi.lib"; + +1; diff --git a/gnu/usr.bin/perl/jpl/JNI/JNIConfig.kaffe b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.kaffe new file mode 100644 index 00000000000..9b2fa874142 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.kaffe @@ -0,0 +1,26 @@ +eval `$JPL_SRC/setvars -perl`; +$java = $ENV{JAVA_HOME}; +$jpl = $ENV{JPL_HOME}; + +# Are we using Kaffe? +# +$KAFFE = 1; + +# What is the name of the JVM library? +# +$LIBJVM="kaffevm"; + +# Where is the JVM library? +# +$LIBLOC="/usr/local/lib"; + +# Where are the Java includes? +# +#@INCLUDE = ('$java/include', '$java/include/$^O' '$java/include/genunix'); +@INCLUDE = ( '/usr/local/include/kaffe'); + +# Are we embedding Perl in Java? +# +$EMBEDDEDPERL = 0; + +1; diff --git a/gnu/usr.bin/perl/jpl/JNI/JNIConfig.noembed b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.noembed new file mode 100644 index 00000000000..ae03b2c2250 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.noembed @@ -0,0 +1,25 @@ +eval `$JPL_SRC/setvars -perl`; +$java = $ENV{JAVA_HOME}; +$jpl = $ENV{JPL_HOME}; + +# Are we using Kaffe? +# +$KAFFE = 0; + +# What is the name of the JVM library? +# +$LIBJVM="java"; + +# Where is the JVM library? +# +$LIBLOC="/usr/local/java/lib/i686/green_threads/"; + +# Where are the Java includes? +# +@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix"); + +# Are we embedding Perl in Java? +# +$EMBEDDEDPERL = 0; + +1; diff --git a/gnu/usr.bin/perl/jpl/JNI/JNIConfig.standard b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.standard new file mode 100644 index 00000000000..494de138887 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/JNIConfig.standard @@ -0,0 +1,13 @@ +eval `$JPL_SRC/setvars -perl`; +$java = $ENV{JAVA_HOME}; +$jpl = $ENV{JPL_HOME}; + +# Where are the Java includes? +# +@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix"); + +# Are we embedding Perl in Java? +# +$EMBEDDEDPERL = 1; + +1; diff --git a/gnu/usr.bin/perl/jpl/JNI/Makefile.PL b/gnu/usr.bin/perl/jpl/JNI/Makefile.PL new file mode 100644 index 00000000000..1a54b9d82cb --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/Makefile.PL @@ -0,0 +1,189 @@ +#!/usr/bin/perl +use ExtUtils::MakeMaker; +use Getopt::Std; +use Config; +$ARCHNAME = $Config{archname}; +use File::Basename; + +getopts('e'); # embedding? + +#require "JNIConfig"; + +if ($^O eq 'solaris') { + $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE"; +} elsif ($^O eq 'MSWin32') { + $LIBPATH = " -L$Config{archlib}\\CORE"; +} else { + $LIBPATH = " -L$Config{archlib}/CORE"; +} +#$LIBS = " -lperl"; + +# Figure out where Java might live +# +my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3 + /usr/local/lib/kaffe C:\\JDK1.1.8 + C:\\JDK1.2.1 ); +if (! defined $ENV{JAVA_HOME}) { + print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n"; + print "If this fails, you might want to try setting JAVA_HOME and\n"; + print "running me again.\n"; +} else { + @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} ); +} + +# Let's find out where jni.h lives +# +my @INCLUDE = find_includes(); +$INC = join(" -I", ("", @INCLUDE)); + +# Let's find out the name of the Java shared library +# +my @JAVALIBS = find_libs(); + +# Find out some defines based on the library we are linking to +# +foreach (@JAVALIBS) { + if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32 + $INC =~ s#/#\\#g; + $INC =~ s#\\$##; + $CCFLAGS .= "-DWIN32 -Z7 -D_DEBUG"; + $MYEXTLIB = $libjava; + } elsif (/libkaffevm.so$/) { + $CCFLAGS .= "-DKAFFE"; + } +} + +# Let's find out the path of the library we need to link against. +# +foreach (@JAVALIBS) { + if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32 + $_ =~ s#/#\\\\#g; + } + my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib")); + $libname =~ s/^lib//; + if ($^O eq 'solaris') { + $LIBPATH .= " -R$libpath -L$libpath" + } else { + $LIBPATH .= " -L$libpath" + } + $LIBS .= " -l$libname"; +} + +# Do we need -D_REENTRANT? +if ($LIBPATH =~ /native/) { + print "Looks like native threads...\n"; + $CCFLAGS .= " -D_REENTRANT"; +} + +if ($opt_e) { + print "We're embedding Perl in Java via libPerlInterpreter.so.\n"; + eval `../setvars -perl`; + $CCFLAGS .= " -DEMBEDDEDPERL"; + $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME"; + $LIBS .= " -lPerlInterpreter"; +} + +# Needed for JNI. +if ($^O eq 'solaris') { + $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!! + $CCFLAGS .= " -D_REENTRANT"; +} + +my %Makefile = ( + NAME => 'JNI', + VERSION_FROM => 'JNI.pm', + DEFINE => '', + LINKTYPE => 'dynamic', + INC => $INC, + CCFLAGS => "$Config{ccflags} $CCFLAGS", + ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()), +); + +$Makefile{LIBS} = ["$LIBPATH $LIBS"]; +if ($MYEXTLIB) { + $Makefile{MYEXTLIB} = $MYEXTLIB; +} + +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +# +WriteMakefile(%Makefile); + +# subroutine to find a library +# +sub find_stuff { + + my ($candidates, $locations) = @_; + + my $lib; + $wanted = sub { + foreach my $name (@$candidates) { + if (/$name$/ and ! /green_threads/ and !/include-old/) { + $lib = $File::Find::name; + } + } + }; + + use File::Find; + foreach my $guess (@$locations) { + next unless -d $guess; + find (\&$wanted, $guess); + } + if (! $lib) { + print "Could not find @$candidates\n"; + } else { + print "Found @$candidates as $lib\n\n"; + } + return $lib; +} + +# Extra lib for Java 1.2 +# +sub find_libs { + + my $libjava = find_stuff(['libjava.so', 'libkaffevm.so', 'javai.lib', 'jvm.lib'], + \@JAVA_HOME_GUESSES); + my $libjvm = find_stuff(['libjvm.so'], \@JAVA_HOME_GUESSES); + if ($libjvm) { # JDK 1.2 + my $libhpi = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES); + my $libawt = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES); + return($libjava, $libjvm, $libhpi, $libawt); + } else { + return($libjava); + } + +} + +# We need to find jni.h and jni_md.h +# +sub find_includes { + + my @CANDIDATES = qw(jni.h jni_md.h); + my @includes; + + sub find_inc { + foreach my $name (@CANDIDATES) { + if (/$name$/) { + my ($hname, $hpath, $hsuffix) = + fileparse($File::Find::name, ("\.h", "\.H")); + unless ($hpath =~ /include-old/) { + print "Found $hname$hsuffix in $hpath\n"; + push @includes, $hpath; + } + } + } + } + + use File::Find; + foreach my $guess (@JAVA_HOME_GUESSES) { + next unless -d $guess; + find (\&find_inc, $guess); + } + if (! @includes) { + die "Could not find Java includes!"; + } else { + print join("\n", @includes), "\n"; + } + return @includes; +} + diff --git a/gnu/usr.bin/perl/jpl/JNI/test.pl b/gnu/usr.bin/perl/jpl/JNI/test.pl new file mode 100644 index 00000000000..9c5238eb9fd --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/test.pl @@ -0,0 +1,58 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..3\n"; } +END {print "not ok 1\n" unless $loaded;} +use JNI; +$loaded = 1; +print "ok 1\n"; + +######################### End of black magic. + +# Insert your test code below (better if it prints "ok 13" +# (correspondingly "not ok 13") depending on the success of chunk 13 +# of the test code): + +# Simple StringBuffer test. +# +use JPL::AutoLoader; +use JPL::Class 'java::lang::StringBuffer'; +$sb = java::lang::StringBuffer->new__s("TEST"); +if ($sb->toString____s() eq "TEST") { + print "ok 2\n"; +} else { + print "not ok 2\n"; +} + +# Put up a frame and let the user close it. +# +use JPL::AutoLoader; +use JPL::Class 'java::awt::Frame'; +use JPL::Class 'Closer'; + +$f = java::awt::Frame->new__s("Close Me, Please!"); +my $setSize = getmeth("setSize", ["int", "int"], []); +my $addWindowListener = getmeth("addWindowListener", + ["java.awt.event.WindowListener"], []); + +$f->$addWindowListener( new Closer ); +$f->$setSize(200,200); +$f->show(); + +while (1) { + + if (!$f->isVisible____Z) { + last; + } + + # Sleep a bit. + # + sleep 1; +} + +print "ok 3\n"; diff --git a/gnu/usr.bin/perl/jpl/JNI/typemap b/gnu/usr.bin/perl/jpl/JNI/typemap new file mode 100644 index 00000000000..9bd0691be2a --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/typemap @@ -0,0 +1,386 @@ +JavaVM * T_JPTROBJ +JNINativeMethod * T_JPTROBJ +const char * T_PV +const jbyte * T_JMEM +const jchar * T_JMEM +jarray T_JPTROBJ +jboolean T_IV +jboolean * T_JMEM +jbooleanArray T_JPTROBJ +jbyte T_IV +jbyte * T_JMEM +jbyteArray T_JPTROBJ +jchar T_IV +jchar * T_JMEM +jcharArray T_JPTROBJ +jclass T_JPTROBJ +jdouble T_NV +jdouble * T_JMEM +jdoubleArray T_JPTROBJ +jfieldID T_JIDSIG +jfloat T_NV +jfloat * T_JMEM +jfloatArray T_JPTROBJ +jint T_IV +jint * T_JMEM +jintArray T_JPTROBJ +jlong T_NV +jlong * T_JMEM +jlongArray T_JPTROBJ +jmethodID T_JIDSIG +jobject T_JPTROBJ +jobjectArray T_JPTROBJ +jshort T_IV +jshort * T_JMEM +jshortArray T_JPTROBJ +jsize T_IV +jstring T_JSTRING +jthrowable T_JPTROBJ +jvalue * T_JVALUELIST + +INPUT +T_JMEM + { + $var = ($type)SvPV($arg,tmplen); + ${var}_len_ = (jsize) tmplen / sizeof(${subtype}); + } +T_JSTRING + if (SvROK($arg)) { + $var = ($type)(void*)SvIV(SvRV($arg)); + } + else + $var = ($type)(*env)->NewStringUTF(env, (char *) SvPV($arg,PL_na)) +T_JVALUELIST + if (SvROK($arg)) { + AV* av = (AV*)SvRV($arg); + if (SvTYPE(av) == SVt_PVAV) { + I32 maxarg = AvFILL(av) + 1; + $var = makeargs(sig, AvARRAY(av), maxarg); + } + else + croak(\"$var is not an array reference\"); + } + else + croak(\"$var is not a reference\") +T_JIDSIG + { + $var = ($type)SvIV($arg); + sig = (char*)SvPV($arg,PL_na); + } +T_JPTROBJ + if (SvROK($arg) && SvOBJECT(SvRV($arg))) { + IV tmp = SvIV((SV*)SvRV($arg)); + $var = ($type) tmp; + } + else + croak(\"$var is not of type ${ntype}\") + +OUTPUT +T_JMEM + sv_setpvn((SV*)$arg, (char*)$var, (STRLEN)${var}_len_ * sizeof(${subtype})); +T_JSTRING + { + static HV* ${var}_stashhv_ = 0; + if (!${var}_stashhv_) + ${var}_stashhv_ = gv_stashpv("java::lang::String", TRUE); + + sv_bless( + sv_setref_iv($arg, Nullch, (IV)(void*)${var}), + ${var}_stashhv_); + + } +T_JIDSIG + sv_setiv($arg, (IV)(void*)$var); + sv_setpv($arg, (char*)sig); + SvIOK_on($arg); +T_JPTROBJ + sv_setref_pv($arg, \"${ntype}\", (void*)$var); + +# basic C types +# int T_IV +# unsigned T_IV +# unsigned int T_IV +# long T_IV +# unsigned long T_IV +# short T_IV +# unsigned short T_IV +# char T_CHAR +# unsigned char T_U_CHAR +# char * T_PV +# unsigned char * T_PV +# caddr_t T_PV +# wchar_t * T_PV +# wchar_t T_IV +# bool_t T_IV +# size_t T_IV +# ssize_t T_IV +# time_t T_NV +# unsigned long * T_OPAQUEPTR +# char ** T_PACKED +# void * T_PTR +# Time_t * T_PV +# SV * T_SV +# SVREF T_SVREF +# AV * T_AVREF +# HV * T_HVREF +# CV * T_CVREF +# +# IV T_IV +# I32 T_IV +# I16 T_IV +# I8 T_IV +# U32 T_U_LONG +# U16 T_U_SHORT +# U8 T_IV +# Result T_U_CHAR +# Boolean T_IV +# double T_DOUBLE +# SysRet T_SYSRET +# SysRetLong T_SYSRET +# FILE * T_IN +# FileHandle T_PTROBJ +# InputStream T_IN +# InOutStream T_INOUT +# OutputStream T_OUT +# bool T_BOOL +# +############################################################################# +# INPUT +# T_SV +# $var = $arg +# T_SVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (SV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_AVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (AV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_HVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (HV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_CVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (CV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_SYSRET +# $var NOT IMPLEMENTED +# T_IV +# $var = ($type)SvIV($arg) +# T_INT +# $var = (int)SvIV($arg) +# T_ENUM +# $var = ($type)SvIV($arg) +# T_BOOL +# $var = (int)SvIV($arg) +# T_U_INT +# $var = (unsigned int)SvIV($arg) +# T_SHORT +# $var = (short)SvIV($arg) +# T_U_SHORT +# $var = (unsigned short)SvIV($arg) +# T_LONG +# $var = (long)SvIV($arg) +# T_U_LONG +# $var = (unsigned long)SvIV($arg) +# T_CHAR +# $var = (char)*SvPV($arg,PL_na) +# T_U_CHAR +# $var = (unsigned char)SvIV($arg) +# T_FLOAT +# $var = (float)SvNV($arg) +# T_NV +# $var = ($type)SvNV($arg) +# T_DOUBLE +# $var = (double)SvNV($arg) +# T_PV +# $var = ($type)SvPV($arg,PL_na) +# T_PTR +# $var = ($type)SvIV($arg) +# T_PTRREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REF_IV_REF +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type *) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REF_IV_PTR +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTROBJ +# if (sv_derived_from($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTRDESC +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# ${type}_desc = (\U${type}_DESC\E*) tmp; +# $var = ${type}_desc->ptr; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REFREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REFOBJ +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_OPAQUE +# $var NOT IMPLEMENTED +# T_OPAQUEPTR +# $var = ($type)SvPV($arg,PL_na) +# T_PACKED +# $var = XS_unpack_$ntype($arg) +# T_PACKEDARRAY +# $var = XS_unpack_$ntype($arg) +# T_CALLBACK +# $var = make_perl_cb_$type($arg) +# T_ARRAY +# $var = $ntype(items -= $argoff); +# U32 ix_$var = $argoff; +# while (items--) { +# DO_ARRAY_ELEM; +# } +# T_IN +# $var = IoIFP(sv_2io($arg)) +# T_INOUT +# $var = IoIFP(sv_2io($arg)) +# T_OUT +# $var = IoOFP(sv_2io($arg)) +############################################################################## +# OUTPUT +# T_SV +# $arg = $var; +# T_SVREF +# $arg = newRV((SV*)$var); +# T_AVREF +# $arg = newRV((SV*)$var); +# T_HVREF +# $arg = newRV((SV*)$var); +# T_CVREF +# $arg = newRV((SV*)$var); +# T_IV +# sv_setiv($arg, (IV)$var); +# T_INT +# sv_setiv($arg, (IV)$var); +# T_SYSRET +# if ($var != -1) { +# if ($var == 0) +# sv_setpvn($arg, "0 but true", 10); +# else +# sv_setiv($arg, (IV)$var); +# } +# T_ENUM +# sv_setiv($arg, (IV)$var); +# T_BOOL +# $arg = boolSV($var); +# T_U_INT +# sv_setiv($arg, (IV)$var); +# T_SHORT +# sv_setiv($arg, (IV)$var); +# T_U_SHORT +# sv_setiv($arg, (IV)$var); +# T_LONG +# sv_setiv($arg, (IV)$var); +# T_U_LONG +# sv_setiv($arg, (IV)$var); +# T_CHAR +# sv_setpvn($arg, (char *)&$var, 1); +# T_U_CHAR +# sv_setiv($arg, (IV)$var); +# T_FLOAT +# sv_setnv($arg, (double)$var); +# T_NV +# sv_setnv($arg, (double)$var); +# T_DOUBLE +# sv_setnv($arg, (double)$var); +# T_PV +# sv_setpv((SV*)$arg, $var); +# T_PTR +# sv_setiv($arg, (IV)$var); +# T_PTRREF +# sv_setref_pv($arg, Nullch, (void*)$var); +# T_REF_IV_REF +# sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var)); +# T_REF_IV_PTR +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTROBJ +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTRDESC +# sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var)); +# T_REFREF +# sv_setrefref($arg, \"${ntype}\", XS_service_$ntype, +# ($var ? (void*)new $ntype($var) : 0)); +# T_REFOBJ +# NOT IMPLEMENTED +# T_OPAQUE +# sv_setpvn($arg, (char *)&$var, sizeof($var)); +# T_OPAQUEPTR +# sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var); +# T_PACKED +# XS_pack_$ntype($arg, $var); +# T_PACKEDARRAY +# XS_pack_$ntype($arg, $var, count_$ntype); +# T_DATAUNIT +# sv_setpvn($arg, $var.chp(), $var.size()); +# T_CALLBACK +# sv_setpvn($arg, $var.context.value().chp(), +# $var.context.value().size()); +# T_ARRAY +# ST_EXTEND($var.size); +# for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) { +# ST(ix_$var) = sv_newmortal(); +# DO_ARRAY_ELEM +# } +# sp += $var.size - 1; +# T_IN +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_INOUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_OUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } diff --git a/gnu/usr.bin/perl/jpl/JNI/typemap.gcc b/gnu/usr.bin/perl/jpl/JNI/typemap.gcc new file mode 100644 index 00000000000..9bd0691be2a --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/typemap.gcc @@ -0,0 +1,386 @@ +JavaVM * T_JPTROBJ +JNINativeMethod * T_JPTROBJ +const char * T_PV +const jbyte * T_JMEM +const jchar * T_JMEM +jarray T_JPTROBJ +jboolean T_IV +jboolean * T_JMEM +jbooleanArray T_JPTROBJ +jbyte T_IV +jbyte * T_JMEM +jbyteArray T_JPTROBJ +jchar T_IV +jchar * T_JMEM +jcharArray T_JPTROBJ +jclass T_JPTROBJ +jdouble T_NV +jdouble * T_JMEM +jdoubleArray T_JPTROBJ +jfieldID T_JIDSIG +jfloat T_NV +jfloat * T_JMEM +jfloatArray T_JPTROBJ +jint T_IV +jint * T_JMEM +jintArray T_JPTROBJ +jlong T_NV +jlong * T_JMEM +jlongArray T_JPTROBJ +jmethodID T_JIDSIG +jobject T_JPTROBJ +jobjectArray T_JPTROBJ +jshort T_IV +jshort * T_JMEM +jshortArray T_JPTROBJ +jsize T_IV +jstring T_JSTRING +jthrowable T_JPTROBJ +jvalue * T_JVALUELIST + +INPUT +T_JMEM + { + $var = ($type)SvPV($arg,tmplen); + ${var}_len_ = (jsize) tmplen / sizeof(${subtype}); + } +T_JSTRING + if (SvROK($arg)) { + $var = ($type)(void*)SvIV(SvRV($arg)); + } + else + $var = ($type)(*env)->NewStringUTF(env, (char *) SvPV($arg,PL_na)) +T_JVALUELIST + if (SvROK($arg)) { + AV* av = (AV*)SvRV($arg); + if (SvTYPE(av) == SVt_PVAV) { + I32 maxarg = AvFILL(av) + 1; + $var = makeargs(sig, AvARRAY(av), maxarg); + } + else + croak(\"$var is not an array reference\"); + } + else + croak(\"$var is not a reference\") +T_JIDSIG + { + $var = ($type)SvIV($arg); + sig = (char*)SvPV($arg,PL_na); + } +T_JPTROBJ + if (SvROK($arg) && SvOBJECT(SvRV($arg))) { + IV tmp = SvIV((SV*)SvRV($arg)); + $var = ($type) tmp; + } + else + croak(\"$var is not of type ${ntype}\") + +OUTPUT +T_JMEM + sv_setpvn((SV*)$arg, (char*)$var, (STRLEN)${var}_len_ * sizeof(${subtype})); +T_JSTRING + { + static HV* ${var}_stashhv_ = 0; + if (!${var}_stashhv_) + ${var}_stashhv_ = gv_stashpv("java::lang::String", TRUE); + + sv_bless( + sv_setref_iv($arg, Nullch, (IV)(void*)${var}), + ${var}_stashhv_); + + } +T_JIDSIG + sv_setiv($arg, (IV)(void*)$var); + sv_setpv($arg, (char*)sig); + SvIOK_on($arg); +T_JPTROBJ + sv_setref_pv($arg, \"${ntype}\", (void*)$var); + +# basic C types +# int T_IV +# unsigned T_IV +# unsigned int T_IV +# long T_IV +# unsigned long T_IV +# short T_IV +# unsigned short T_IV +# char T_CHAR +# unsigned char T_U_CHAR +# char * T_PV +# unsigned char * T_PV +# caddr_t T_PV +# wchar_t * T_PV +# wchar_t T_IV +# bool_t T_IV +# size_t T_IV +# ssize_t T_IV +# time_t T_NV +# unsigned long * T_OPAQUEPTR +# char ** T_PACKED +# void * T_PTR +# Time_t * T_PV +# SV * T_SV +# SVREF T_SVREF +# AV * T_AVREF +# HV * T_HVREF +# CV * T_CVREF +# +# IV T_IV +# I32 T_IV +# I16 T_IV +# I8 T_IV +# U32 T_U_LONG +# U16 T_U_SHORT +# U8 T_IV +# Result T_U_CHAR +# Boolean T_IV +# double T_DOUBLE +# SysRet T_SYSRET +# SysRetLong T_SYSRET +# FILE * T_IN +# FileHandle T_PTROBJ +# InputStream T_IN +# InOutStream T_INOUT +# OutputStream T_OUT +# bool T_BOOL +# +############################################################################# +# INPUT +# T_SV +# $var = $arg +# T_SVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (SV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_AVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (AV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_HVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (HV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_CVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (CV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_SYSRET +# $var NOT IMPLEMENTED +# T_IV +# $var = ($type)SvIV($arg) +# T_INT +# $var = (int)SvIV($arg) +# T_ENUM +# $var = ($type)SvIV($arg) +# T_BOOL +# $var = (int)SvIV($arg) +# T_U_INT +# $var = (unsigned int)SvIV($arg) +# T_SHORT +# $var = (short)SvIV($arg) +# T_U_SHORT +# $var = (unsigned short)SvIV($arg) +# T_LONG +# $var = (long)SvIV($arg) +# T_U_LONG +# $var = (unsigned long)SvIV($arg) +# T_CHAR +# $var = (char)*SvPV($arg,PL_na) +# T_U_CHAR +# $var = (unsigned char)SvIV($arg) +# T_FLOAT +# $var = (float)SvNV($arg) +# T_NV +# $var = ($type)SvNV($arg) +# T_DOUBLE +# $var = (double)SvNV($arg) +# T_PV +# $var = ($type)SvPV($arg,PL_na) +# T_PTR +# $var = ($type)SvIV($arg) +# T_PTRREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REF_IV_REF +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type *) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REF_IV_PTR +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTROBJ +# if (sv_derived_from($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTRDESC +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# ${type}_desc = (\U${type}_DESC\E*) tmp; +# $var = ${type}_desc->ptr; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REFREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REFOBJ +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_OPAQUE +# $var NOT IMPLEMENTED +# T_OPAQUEPTR +# $var = ($type)SvPV($arg,PL_na) +# T_PACKED +# $var = XS_unpack_$ntype($arg) +# T_PACKEDARRAY +# $var = XS_unpack_$ntype($arg) +# T_CALLBACK +# $var = make_perl_cb_$type($arg) +# T_ARRAY +# $var = $ntype(items -= $argoff); +# U32 ix_$var = $argoff; +# while (items--) { +# DO_ARRAY_ELEM; +# } +# T_IN +# $var = IoIFP(sv_2io($arg)) +# T_INOUT +# $var = IoIFP(sv_2io($arg)) +# T_OUT +# $var = IoOFP(sv_2io($arg)) +############################################################################## +# OUTPUT +# T_SV +# $arg = $var; +# T_SVREF +# $arg = newRV((SV*)$var); +# T_AVREF +# $arg = newRV((SV*)$var); +# T_HVREF +# $arg = newRV((SV*)$var); +# T_CVREF +# $arg = newRV((SV*)$var); +# T_IV +# sv_setiv($arg, (IV)$var); +# T_INT +# sv_setiv($arg, (IV)$var); +# T_SYSRET +# if ($var != -1) { +# if ($var == 0) +# sv_setpvn($arg, "0 but true", 10); +# else +# sv_setiv($arg, (IV)$var); +# } +# T_ENUM +# sv_setiv($arg, (IV)$var); +# T_BOOL +# $arg = boolSV($var); +# T_U_INT +# sv_setiv($arg, (IV)$var); +# T_SHORT +# sv_setiv($arg, (IV)$var); +# T_U_SHORT +# sv_setiv($arg, (IV)$var); +# T_LONG +# sv_setiv($arg, (IV)$var); +# T_U_LONG +# sv_setiv($arg, (IV)$var); +# T_CHAR +# sv_setpvn($arg, (char *)&$var, 1); +# T_U_CHAR +# sv_setiv($arg, (IV)$var); +# T_FLOAT +# sv_setnv($arg, (double)$var); +# T_NV +# sv_setnv($arg, (double)$var); +# T_DOUBLE +# sv_setnv($arg, (double)$var); +# T_PV +# sv_setpv((SV*)$arg, $var); +# T_PTR +# sv_setiv($arg, (IV)$var); +# T_PTRREF +# sv_setref_pv($arg, Nullch, (void*)$var); +# T_REF_IV_REF +# sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var)); +# T_REF_IV_PTR +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTROBJ +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTRDESC +# sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var)); +# T_REFREF +# sv_setrefref($arg, \"${ntype}\", XS_service_$ntype, +# ($var ? (void*)new $ntype($var) : 0)); +# T_REFOBJ +# NOT IMPLEMENTED +# T_OPAQUE +# sv_setpvn($arg, (char *)&$var, sizeof($var)); +# T_OPAQUEPTR +# sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var); +# T_PACKED +# XS_pack_$ntype($arg, $var); +# T_PACKEDARRAY +# XS_pack_$ntype($arg, $var, count_$ntype); +# T_DATAUNIT +# sv_setpvn($arg, $var.chp(), $var.size()); +# T_CALLBACK +# sv_setpvn($arg, $var.context.value().chp(), +# $var.context.value().size()); +# T_ARRAY +# ST_EXTEND($var.size); +# for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) { +# ST(ix_$var) = sv_newmortal(); +# DO_ARRAY_ELEM +# } +# sp += $var.size - 1; +# T_IN +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_INOUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_OUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } diff --git a/gnu/usr.bin/perl/jpl/JNI/typemap.win32 b/gnu/usr.bin/perl/jpl/JNI/typemap.win32 new file mode 100644 index 00000000000..89eb8df5df4 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JNI/typemap.win32 @@ -0,0 +1,386 @@ +JavaVM * T_JPTROBJ +JNINativeMethod * T_JPTROBJ +const char * T_PV +const jbyte * T_JMEM +const jchar * T_JMEM +jarray T_JPTROBJ +jboolean T_IV +jboolean * T_JMEM +jbooleanArray T_JPTROBJ +jbyte T_IV +jbyte * T_JMEM +jbyteArray T_JPTROBJ +jchar T_IV +jchar * T_JMEM +jcharArray T_JPTROBJ +jclass T_JPTROBJ +jdouble T_NV +jdouble * T_JMEM +jdoubleArray T_JPTROBJ +jfieldID T_JIDSIG +jfloat T_NV +jfloat * T_JMEM +jfloatArray T_JPTROBJ +jint T_IV +jint * T_JMEM +jintArray T_JPTROBJ +jlong T_NV +jlong * T_JMEM +jlongArray T_JPTROBJ +jmethodID T_JIDSIG +jobject T_JPTROBJ +jobjectArray T_JPTROBJ +jshort T_IV +jshort * T_JMEM +jshortArray T_JPTROBJ +jsize T_IV +jstring T_JSTRING +jthrowable T_JPTROBJ +jvalue * T_JVALUELIST + +INPUT +T_JMEM + { + $var = ($type)SvPV($arg,tmplen); + ${var}_len_ = (jsize) tmplen / sizeof(${subtype}); + } +T_JSTRING + if (SvROK($arg)) { + $var = ($type)(void*)SvIV(SvRV($arg)); + } + else + $var = ($type)env->NewStringUTF((char *) SvPV($arg,PL_na)) +T_JVALUELIST + if (SvROK($arg)) { + AV* av = (AV*)SvRV($arg); + if (SvTYPE(av) == SVt_PVAV) { + I32 maxarg = AvFILL(av) + 1; + $var = makeargs(sig, AvARRAY(av), maxarg); + } + else + croak(\"$var is not an array reference\"); + } + else + croak(\"$var is not a reference\") +T_JIDSIG + { + $var = ($type)SvIV($arg); + sig = (char*)SvPV($arg,PL_na); + } +T_JPTROBJ + if (SvROK($arg) && SvOBJECT(SvRV($arg))) { + IV tmp = SvIV((SV*)SvRV($arg)); + $var = ($type) tmp; + } + else + croak(\"$var is not of type ${ntype}\") + +OUTPUT +T_JMEM + sv_setpvn((SV*)$arg, (char*)$var, (STRLEN)${var}_len_ * sizeof(${subtype})); +T_JSTRING + { + static HV* ${var}_stashhv_ = 0; + if (!${var}_stashhv_) + ${var}_stashhv_ = gv_stashpv("java::lang::String", TRUE); + + sv_bless( + sv_setref_iv($arg, Nullch, (IV)(void*)${var}), + ${var}_stashhv_); + + } +T_JIDSIG + sv_setiv($arg, (IV)(void*)$var); + sv_setpv($arg, (char*)sig); + SvIOK_on($arg); +T_JPTROBJ + sv_setref_pv($arg, \"${ntype}\", (void*)$var); + +# basic C types +# int T_IV +# unsigned T_IV +# unsigned int T_IV +# long T_IV +# unsigned long T_IV +# short T_IV +# unsigned short T_IV +# char T_CHAR +# unsigned char T_U_CHAR +# char * T_PV +# unsigned char * T_PV +# caddr_t T_PV +# wchar_t * T_PV +# wchar_t T_IV +# bool_t T_IV +# size_t T_IV +# ssize_t T_IV +# time_t T_NV +# unsigned long * T_OPAQUEPTR +# char ** T_PACKED +# void * T_PTR +# Time_t * T_PV +# SV * T_SV +# SVREF T_SVREF +# AV * T_AVREF +# HV * T_HVREF +# CV * T_CVREF +# +# IV T_IV +# I32 T_IV +# I16 T_IV +# I8 T_IV +# U32 T_U_LONG +# U16 T_U_SHORT +# U8 T_IV +# Result T_U_CHAR +# Boolean T_IV +# double T_DOUBLE +# SysRet T_SYSRET +# SysRetLong T_SYSRET +# FILE * T_IN +# FileHandle T_PTROBJ +# InputStream T_IN +# InOutStream T_INOUT +# OutputStream T_OUT +# bool T_BOOL +# +############################################################################# +# INPUT +# T_SV +# $var = $arg +# T_SVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (SV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_AVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (AV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_HVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (HV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_CVREF +# if (sv_isa($arg, \"${ntype}\")) +# $var = (CV*)SvRV($arg); +# else +# croak(\"$var is not of type ${ntype}\") +# T_SYSRET +# $var NOT IMPLEMENTED +# T_IV +# $var = ($type)SvIV($arg) +# T_INT +# $var = (int)SvIV($arg) +# T_ENUM +# $var = ($type)SvIV($arg) +# T_BOOL +# $var = (int)SvIV($arg) +# T_U_INT +# $var = (unsigned int)SvIV($arg) +# T_SHORT +# $var = (short)SvIV($arg) +# T_U_SHORT +# $var = (unsigned short)SvIV($arg) +# T_LONG +# $var = (long)SvIV($arg) +# T_U_LONG +# $var = (unsigned long)SvIV($arg) +# T_CHAR +# $var = (char)*SvPV($arg,PL_na) +# T_U_CHAR +# $var = (unsigned char)SvIV($arg) +# T_FLOAT +# $var = (float)SvNV($arg) +# T_NV +# $var = ($type)SvNV($arg) +# T_DOUBLE +# $var = (double)SvNV($arg) +# T_PV +# $var = ($type)SvPV($arg,PL_na) +# T_PTR +# $var = ($type)SvIV($arg) +# T_PTRREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REF_IV_REF +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type *) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REF_IV_PTR +# if (sv_isa($arg, \"${type}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTROBJ +# if (sv_derived_from($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = ($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_PTRDESC +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# ${type}_desc = (\U${type}_DESC\E*) tmp; +# $var = ${type}_desc->ptr; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_REFREF +# if (SvROK($arg)) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not a reference\") +# T_REFOBJ +# if (sv_isa($arg, \"${ntype}\")) { +# IV tmp = SvIV((SV*)SvRV($arg)); +# $var = *($type) tmp; +# } +# else +# croak(\"$var is not of type ${ntype}\") +# T_OPAQUE +# $var NOT IMPLEMENTED +# T_OPAQUEPTR +# $var = ($type)SvPV($arg,PL_na) +# T_PACKED +# $var = XS_unpack_$ntype($arg) +# T_PACKEDARRAY +# $var = XS_unpack_$ntype($arg) +# T_CALLBACK +# $var = make_perl_cb_$type($arg) +# T_ARRAY +# $var = $ntype(items -= $argoff); +# U32 ix_$var = $argoff; +# while (items--) { +# DO_ARRAY_ELEM; +# } +# T_IN +# $var = IoIFP(sv_2io($arg)) +# T_INOUT +# $var = IoIFP(sv_2io($arg)) +# T_OUT +# $var = IoOFP(sv_2io($arg)) +############################################################################## +# OUTPUT +# T_SV +# $arg = $var; +# T_SVREF +# $arg = newRV((SV*)$var); +# T_AVREF +# $arg = newRV((SV*)$var); +# T_HVREF +# $arg = newRV((SV*)$var); +# T_CVREF +# $arg = newRV((SV*)$var); +# T_IV +# sv_setiv($arg, (IV)$var); +# T_INT +# sv_setiv($arg, (IV)$var); +# T_SYSRET +# if ($var != -1) { +# if ($var == 0) +# sv_setpvn($arg, "0 but true", 10); +# else +# sv_setiv($arg, (IV)$var); +# } +# T_ENUM +# sv_setiv($arg, (IV)$var); +# T_BOOL +# $arg = boolSV($var); +# T_U_INT +# sv_setiv($arg, (IV)$var); +# T_SHORT +# sv_setiv($arg, (IV)$var); +# T_U_SHORT +# sv_setiv($arg, (IV)$var); +# T_LONG +# sv_setiv($arg, (IV)$var); +# T_U_LONG +# sv_setiv($arg, (IV)$var); +# T_CHAR +# sv_setpvn($arg, (char *)&$var, 1); +# T_U_CHAR +# sv_setiv($arg, (IV)$var); +# T_FLOAT +# sv_setnv($arg, (double)$var); +# T_NV +# sv_setnv($arg, (double)$var); +# T_DOUBLE +# sv_setnv($arg, (double)$var); +# T_PV +# sv_setpv((SV*)$arg, $var); +# T_PTR +# sv_setiv($arg, (IV)$var); +# T_PTRREF +# sv_setref_pv($arg, Nullch, (void*)$var); +# T_REF_IV_REF +# sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var)); +# T_REF_IV_PTR +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTROBJ +# sv_setref_pv($arg, \"${ntype}\", (void*)$var); +# T_PTRDESC +# sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var)); +# T_REFREF +# sv_setrefref($arg, \"${ntype}\", XS_service_$ntype, +# ($var ? (void*)new $ntype($var) : 0)); +# T_REFOBJ +# NOT IMPLEMENTED +# T_OPAQUE +# sv_setpvn($arg, (char *)&$var, sizeof($var)); +# T_OPAQUEPTR +# sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var); +# T_PACKED +# XS_pack_$ntype($arg, $var); +# T_PACKEDARRAY +# XS_pack_$ntype($arg, $var, count_$ntype); +# T_DATAUNIT +# sv_setpvn($arg, $var.chp(), $var.size()); +# T_CALLBACK +# sv_setpvn($arg, $var.context.value().chp(), +# $var.context.value().size()); +# T_ARRAY +# ST_EXTEND($var.size); +# for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) { +# ST(ix_$var) = sv_newmortal(); +# DO_ARRAY_ELEM +# } +# sp += $var.size - 1; +# T_IN +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_INOUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } +# T_OUT +# { +# GV *gv = newGVgen("$Package"); +# if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) +# sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); +# else +# $arg = &PL_sv_undef; +# } diff --git a/gnu/usr.bin/perl/jpl/JPL/AutoLoader.pm b/gnu/usr.bin/perl/jpl/JPL/AutoLoader.pm new file mode 100644 index 00000000000..94d98563fd3 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL/AutoLoader.pm @@ -0,0 +1,352 @@ +package JPL::AutoLoader; + +use strict; + +use vars qw(@ISA @EXPORT $AUTOLOAD); + +use Exporter; +@ISA = "Exporter"; +@EXPORT = ("AUTOLOAD", "getmeth"); + +my %callmethod = ( + V => 'Void', + Z => 'Boolean', + B => 'Byte', + C => 'Char', + S => 'Short', + I => 'Int', + J => 'Long', + F => 'Float', + D => 'Double', +); + +# A lookup table to convert the data types that Java +# developers are used to seeing into the JNI-mangled +# versions. +# +# bjepson 13 August 1997 +# +my %type_table = ( + 'void' => 'V', + 'boolean' => 'Z', + 'byte' => 'B', + 'char' => 'C', + 'short' => 'S', + 'int' => 'I', + 'long' => 'J', + 'float' => 'F', + 'double' => 'D' +); + +# A cache for method ids. +# +# bjepson 13 August 1997 +# +my %MID_CACHE; + +# A cache for methods. +# +# bjepson 13 August 1997 +# +my %METHOD_CACHE; + +use JNI; + +# XXX We're assuming for the moment that method ids are persistent... + +sub AUTOLOAD { + + print "AUTOLOAD $AUTOLOAD(@_)\n" if $JPL::DEBUG; + my ($classname, $methodsig) = $AUTOLOAD =~ /^(.*)::(.*)/; + print "class = $classname, method = $methodsig\n" if $JPL::DEBUG; + + if ($methodsig eq "DESTROY") { + print "sub $AUTOLOAD {}\n" if $JPL::DEBUG; + eval "sub $AUTOLOAD {}"; + return; + } + + (my $jclassname = $classname) =~ s/^JPL:://; + $jclassname =~ s{::}{/}g; + my $class = JNI::FindClass($jclassname) + or die "Can't find Java class $jclassname\n"; + + # This method lookup allows the user to pass in + # references to two array that contain the input and + # output data types of the method. + # + # bjepson 13 August 1997 + # + my ($methodname, $sig, $retsig, $slow_way); + if (ref $_[1] eq 'ARRAY' && ref $_[2] eq 'ARRAY') { + + $slow_way = 1; + + # First we strip out the input and output args. + # + my ($in,$out) = splice(@_, 1, 2); + + # let's mangle up the input argument types. + # + my @in = jni_mangle($in); + + # if they didn't hand us any output values types, make + # them void by default. + # + unless (@{ $out }) { + $out = ['void']; + } + + # mangle the output types + # + my @out = jni_mangle($out); + + $methodname = $methodsig; + $retsig = join("", @out); + $sig = "(" . join("", @in) . ")" . $retsig; + + } else { + + ($methodname, $sig) = split /__/, $methodsig, 2; + $sig ||= "__V"; # default is void return + + # Now demangle the signature. + + $sig =~ s/_3/[/g; + $sig =~ s/_2/;/g; + my $tmp; + $sig =~ s{ + (s|L[^;]*;) + }{ + $1 eq 's' + ? "Ljava/lang/String;" + : (($tmp = $1) =~ tr[_][/], $tmp) + }egx; + if ($sig =~ s/(.*)__(.*)/($1)$2/) { + $retsig = $2; + } + else { # void return is assumed + $sig = "($sig)V"; + $retsig = "V"; + } + $sig =~ s/_1/_/g; + } + print "sig = $sig\n" if $JPL::DEBUG; + + # Now look up the method's ID somehow or other. + # + $methodname = "" if $methodname eq 'new'; + my $mid; + + # Added a method id cache to compensate for avoiding + # Perl's method cache... + # + if ($MID_CACHE{qq[$classname:$methodname:$sig]}) { + + $mid = $MID_CACHE{qq[$classname:$methodname:$sig]}; + print "got method " . ($mid + 0) . " from cache.\n" if $JPL::DEBUG; + + } elsif (ref $_[0] or $methodname eq '') { + + # Look up an instance method or a constructor + # + $mid = JNI::GetMethodID($class, $methodname, $sig); + + } else { + + # Look up a static method + # + $mid = JNI::GetStaticMethodID($class, $methodname, $sig); + + } + + # Add this method to the cache. + # + # bjepson 13 August 1997 + # + $MID_CACHE{qq[$classname:$methodname:$sig]} = $mid if $slow_way; + + if ($mid == 0) { + + JNI::ExceptionClear(); + # Could do some guessing here on return type... + die "Can't get method id for $AUTOLOAD($sig)\n"; + + } + + print "mid = ", $mid + 0, ", $mid\n" if $JPL::DEBUG; + my $rettype = $callmethod{$retsig} || "Object"; + print "*** rettype = $rettype\n" if $JPL::DEBUG; + + my $blesspack; + no strict 'refs'; + if ($rettype eq "Object") { + $blesspack = $retsig; + $blesspack =~ s/^L//; + $blesspack =~ s/;$//; + $blesspack =~ s#/#::#g; + print "*** Some sort of wizardry...\n" if $JPL::DEBUG; + print %{$blesspack . "::"}, "\n" if $JPL::DEBUG; + print defined %{$blesspack . "::"}, "\n" if $JPL::DEBUG; + if (not defined %{$blesspack . "::"}) { + #if ($blesspack eq "java::lang::String") { + if ($blesspack =~ /java::/) { + eval <<"END" . <<'ENDQ'; +package $blesspack; +END +use JPL::AutoLoader; +use overload + '""' => sub { JNI::GetStringUTFChars($_[0]) }, + '0+' => sub { 0 + "$_[0]" }, + fallback => 1; +ENDQ + } + else { + eval <<"END"; +package $blesspack; +use JPL::AutoLoader; +END + } + } + } + + # Finally, call the method. Er, somehow... + # + my $METHOD; + + my $real_mid = $mid + 0; # weird overloading that I + # don't understand ?! + if (ref ${$METHOD_CACHE{qq[$real_mid]}} eq 'CODE') { + + $METHOD = ${$METHOD_CACHE{qq[$real_mid]}}; + print qq[Pulled $classname, $methodname, $sig from cache.\n] if $JPL::DEBUG; + + } elsif ($methodname eq "") { + $METHOD = sub { + my $self = shift; + my $class = JNI::FindClass($jclassname); + bless $class->JNI::NewObjectA($mid, \@_), $classname; + }; + } + elsif (ref $_[0]) { + if ($blesspack) { + $METHOD = sub { + my $self = shift; + if (ref $self eq $classname) { + my $callmethod = "JNI::Call${rettype}MethodA"; + bless $self->$callmethod($mid, \@_), $blesspack; + } + else { + my $callmethod = "JNI::CallNonvirtual${rettype}MethodA"; + bless $self->$callmethod($class, $mid, \@_), $blesspack; + } + }; + } + else { + $METHOD = sub { + my $self = shift; + if (ref $self eq $classname) { + my $callmethod = "JNI::Call${rettype}MethodA"; + $self->$callmethod($mid, \@_); + } + else { + my $callmethod = "JNI::CallNonvirtual${rettype}MethodA"; + $self->$callmethod($class, $mid, \@_); + } + }; + } + } + else { + my $callmethod = "JNI::CallStatic${rettype}MethodA"; + if ($blesspack) { + $METHOD = sub { + my $self = shift; + bless $class->$callmethod($mid, \@_), $blesspack; + }; + } + else { + $METHOD = sub { + my $self = shift; + $class->$callmethod($mid, \@_); + }; + } + } + if ($slow_way) { + $METHOD_CACHE{qq[$real_mid]} = \$METHOD; + &$METHOD; + } + else { + *$AUTOLOAD = $METHOD; + goto &$AUTOLOAD; + } +} + +sub jni_mangle { + + my $arr = shift; + my @ret; + + foreach my $arg (@{ $arr }) { + + my $ret; + + # Count the dangling []s. + # + $ret = '[' x $arg =~ s/\[\]//g; + + # Is it a primitive type? + # + if ($type_table{$arg}) { + $ret .= $type_table{$arg}; + } else { + # some sort of class + # + $arg =~ s#\.#/#g; + $ret .= "L$arg;"; + } + push @ret, $ret; + + } + + return @ret; + +} + +sub getmeth { + my ($meth, $in, $out) = @_; + my @in = jni_mangle($in); + + # if they didn't hand us any output values types, make + # them void by default. + # + unless ($out and @$out) { + $out = ['void']; + } + + # mangle the output types + # + my @out = jni_mangle($out); + + my $sig = join("", '#', @in, '#', @out); + $sig =~ s/_/_1/g; + my $tmp; + $sig =~ s{ + (L[^;]*;) + }{ + ($tmp = $1) =~ tr[/][_], $tmp + }egx; + $sig =~ s{Ljava/lang/String;}{s}g; + $sig =~ s/;/_2/g; + $sig =~ s/\[/_3/g; + $sig =~ s/#/__/g; + $meth . $sig; +} + +{ + package java::lang::String; + use overload + '""' => sub { JNI::GetStringUTFChars($_[0]) }, + '0+' => sub { 0 + "$_[0]" }, + fallback => 1; +} +1; diff --git a/gnu/usr.bin/perl/jpl/JPL/Class.pm b/gnu/usr.bin/perl/jpl/JPL/Class.pm new file mode 100644 index 00000000000..1bc97688a8e --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL/Class.pm @@ -0,0 +1,13 @@ +package JPL::Class; +use JPL::AutoLoader (); + +sub DESTROY {} + +sub import { + my $class = shift; + foreach $class (@_) { + *{$class . "::AUTOLOAD"} = *JPL::AutoLoader::AUTOLOAD; + *{$class . "::DESTROY"} = \&DESTROY; + } +} +1; diff --git a/gnu/usr.bin/perl/jpl/JPL/Compile.pm b/gnu/usr.bin/perl/jpl/JPL/Compile.pm new file mode 100644 index 00000000000..6d9511245e7 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL/Compile.pm @@ -0,0 +1,769 @@ +#!/usr/bin/perl -w + +# Copyright 1997, O'Reilly & Associate, Inc. +# +# This package may be copied under the same terms as Perl itself. + +package JPL::Compile; +use Exporter (); +@ISA = qw(Exporter); +@EXPORT = qw(files file); + +use strict; + + +warn "You don't have a recent JDK kit your PATH, so this may fail.\n" + unless $ENV{PATH} =~ /(java|jdk1.[1-9])/; + +sub emit; + +my $PERL = ""; +my $LASTCLASS = ""; +my $PERLLINE = 0; +my $PROTO; + +my @protos; + +my $plfile; +my $jpfile; +my $hfile; +my $h_file; +my $cfile; +my $jfile; +my $classfile; + +my $DEBUG = $ENV{JPLDEBUG}; + +my %ptype = qw( + Z boolean + B byte + C char + S short + I int + J long + F float + D double +); + +$ENV{CLASSPATH} =~ s/^/.:/ unless $ENV{CLASSPATH} =~ /^\.(?::|$)/; + +unless (caller) { + files(@ARGV); +} + +####################################################################### + +sub files { + foreach my $jpfile (@_) { + file($jpfile); + } + print "make\n"; + system "make"; +} + +sub file { + my $jpfile = shift; + my $JAVA = ""; + my $lastpos = 0; + my $linenum = 2; + my %classseen; + my %fieldsig; + my %staticfield; + + (my $file = $jpfile) =~ s/\.jpl$//; + $jpfile = "$file.jpl"; + $jfile = "$file.java"; + $hfile = "$file.h"; + $cfile = "$file.c"; + $plfile = "$file.pl"; + $classfile = "$file.class"; + + ($h_file = $hfile) =~ s/_/_0005f/g; + + emit_c_header(); + + # Extract out arg names from .java file, since .class doesn't have 'em. + + open(JPFILE, $jpfile) or die "Can't open $jpfile: $!\n"; + undef $/; + $_ = ; + close JPFILE; + + die "$jpfile doesn't seem to define class $file!\n" + unless /class\s+\b$file\b[\w\s.,]*{/; + + @protos = (); + open(JFILE, ">$jfile") or die "Can't create $jfile: $!\n"; + + while (m/\bperl\b([^\n]*?\b(\w+)\s*\(\s*(.*?)\s*\)[\s\w.,]*)\{\{(.*?)\}\}/sg) { + $JAVA = substr($`, $lastpos); + $lastpos = pos $_; + $JAVA .= "native"; + $JAVA .= $1; + + my $method = $2; + + my $proto = $3; + + my $perl = $4; + (my $repl = $4) =~ tr/\n//cd; + $JAVA .= ';'; + $linenum += $JAVA =~ tr/\n/\n/; + $JAVA .= $repl; + print JFILE $JAVA; + + $proto =~ s/\s+/ /g; + $perl =~ s/^[ \t]+\Z//m; + $perl =~ s/^[ \t]*\n//; + push(@protos, [$method, $proto, $perl, $linenum]); + + $linenum += $repl =~ tr/\n/\n/; + } + + print JFILE <<"END"; + static { + System.loadLibrary("$file"); + PerlInterpreter pi = new PerlInterpreter().fetch(); + // pi.eval("\$JPL::DEBUG = \$ENV{JPLDEBUG};"); + pi.eval("warn qq{loading $file\\n} if \$JPL::DEBUG"); + pi.eval("eval {require '$plfile'}; print \$@ if \$@;"); + } +END + + print JFILE substr($_, $lastpos); + + close JFILE; + + # Produce the corresponding .h file. Should really use make... + + if (not -s $hfile or -M $hfile > -M $jfile) { + if (not -s $classfile or -M $classfile > -M $jfile) { + unlink $classfile; + print "javac $jfile\n"; + system "javac $jfile" and die "Couldn't run javac: exit $?\n"; + if (not -s $classfile or -M $classfile > -M $jfile) { + die "Couldn't produce $classfile from $jfile!"; + } + } + unlink $hfile; + print "javah -jni $file\n"; + system "javah -jni $file" and die "Couldn't run javah: exit $?\n"; + if (not -s $hfile and -s $h_file) { + rename $h_file, $hfile; + } + if (not -s $hfile or -M $hfile > -M $jfile) { + die "Couldn't produce $hfile from $classfile!"; + } + } + + # Easiest place to get fields is from javap. + + print "javap -s $file\n"; + open(JP, "javap -s $file|"); + $/ = "\n"; + while () { + if (/^\s+([A-Za-z_].*) (\w+)[\[\d\]]*;/) { + my $jtype = $1; + my $name = $2; + $_ = ; + s!^\s*/\*\s*!!; + s!\s*\*/\s*!!; + print "Field $jtype $name $_\n" if $DEBUG; + $fieldsig{$name} = $_; + $staticfield{$name} = $jtype =~ /\bstatic\b/; + } + while (m/L([^;]*);/g) { + my $pclass = j2p_class($1); + $classseen{$pclass}++; + } + } + close JP; + + open(HFILE, $hfile) or die "Couldn't open $hfile: $!\n"; + undef $/; + $_ = ; + close HFILE; + + die "panic: native method mismatch" if @protos != s/^JNIEXPORT/JNIEXPORT/gm; + + $PROTO = 0; + while (m{ + \*\s*Class:\s*(\w+)\s* + \*\s*Method:\s*(\w+)\s* + \*\s*Signature:\s*(\S+)\s*\*/\s* + JNIEXPORT\s*(.*?)\s*JNICALL\s*(\w+)\s*\((.*?)\) + }gx) { + my $class = $1; + my $method = $2; + my $signature = $3; + my $rettype = $4; + my $cname = $5; + my $ctypes = $6; + $class =~ s/_0005f/_/g; + if ($method ne $protos[$PROTO][0]) { + die "Method name mismatch: $method vs $protos[$PROTO][0]\n"; + } + print "$class.$method($protos[$PROTO][1]) => + $signature + $rettype $cname($ctypes)\n" if $DEBUG; + + # Insert argument names into parameter list. + + my $env = "env"; + my $obj = "obj"; + my @jargs = split(/\s*,\s*/, $protos[$PROTO][1]); + foreach my $arg (@jargs) { + $arg =~ s/^.*\b(\w+).*$/${1}/; + } + my @tmpargs = @jargs; + unshift(@tmpargs, $env, $obj); + print "\t@tmpargs\n" if $DEBUG; + $ctypes .= ","; + $ctypes =~ s/,/' ' . shift(@tmpargs) . '_,'/eg; + $ctypes =~ s/,$//; + $ctypes =~ s/env_/env/; + $ctypes =~ s/obj_/obj/; + print "\t$ctypes\n" if $DEBUG; + + my $jlen = @jargs + 1; + + (my $mangclass = $class) =~ s/_/_1/g; + (my $mangmethod = $method) =~ s/_/_1/g; + my $plname = $cname; + $plname =~ s/^Java_${mangclass}_${mangmethod}/JPL::${class}::${method}/; + $plname =~ s/Ljava_lang_String_2/s/g; + + # Make glue code for each argument. + + (my $sig = $signature) =~ s/^\(//; + + my $decls = ""; + my $glue = ""; + + foreach my $jarg (@jargs) { + if ($sig =~ s/^[ZBCSI]//) { + $glue .= <<""; +! /* $jarg */ +! PUSHs(sv_2mortal(newSViv(${jarg}_))); +! + + } + elsif ($sig =~ s/^[JFD]//) { + $glue .= <<""; +! /* $jarg */ +! PUSHs(sv_2mortal(newSVnv(${jarg}_))); +! + + } + elsif ($sig =~ s#^Ljava/lang/String;##) { + $glue .= <<""; +! /* $jarg */ +! tmpjb = (jbyte*)(*env)->GetStringUTFChars(env,${jarg}_,0); +! PUSHs(sv_2mortal(newSVpv((char*)tmpjb,0))); +! (*env)->ReleaseStringUTFChars(env,${jarg}_,tmpjb); +! + + } + elsif ($sig =~ s/^L([^;]*);//) { + my $pclass = j2p_class($1); + $classseen{$pclass}++; + $glue .= <<""; +! /* $jarg */ +! if (!${jarg}_stashhv_) +! ${jarg}_stashhv_ = gv_stashpv("$pclass", TRUE); +! +! PUSHs(sv_bless( +! sv_setref_iv(sv_newmortal(), Nullch, (IV)(void*)${jarg}_), +! ${jarg}_stashhv_)); +! if (jpldebug) +! fprintf(stderr, "Done with $jarg\\n"); +! + + $decls .= <<""; +! static HV* ${jarg}_stashhv_ = 0; + + + } + elsif ($sig =~ s/^\[+([ZBCSIJFD]|L[^;]*;)//) { + my $pclass = "jarray"; + $classseen{$pclass}++; + $glue .= <<""; +! /* $jarg */ +! if (!${jarg}_stashhv_) +! ${jarg}_stashhv_ = gv_stashpv("$pclass", TRUE); +! +! PUSHs(sv_bless( +! sv_setref_iv(sv_newmortal(), Nullch, (IV)(void*)${jarg}_), +! ${jarg}_stashhv_)); +! if (jpldebug) +! fprintf(stderr, "Done with $jarg\\n"); +! + + $decls .= <<""; +! static HV* ${jarg}_stashhv_ = 0; + + } + else { + die "Short signature: $signature\n" if $sig eq ""; + die "Unrecognized letter '" . substr($sig, 0, 1) . "' in signature $signature\n"; + } + } + + $sig =~ s/^\)// or die "Argument mismatch in signature: $method$signature\n"; + + my $void = $signature =~ /\)V$/; + + $decls .= <<"" if $signature =~ m#java/lang/String#; +! jbyte* tmpjb; + + $decls .= <<"" unless $void; +! SV* retsv; +! $rettype retval; +! +! if (jpldebug) +! fprintf(stderr, "Got to $cname\\n"); +! ENTER; +! SAVETMPS; + + emit <<""; +!JNIEXPORT $rettype JNICALL +!$cname($ctypes) +!{ +! static SV* methodsv = 0; +! static HV* stashhv = 0; +! dSP; +$decls +! PUSHMARK(sp); +! EXTEND(sp,$jlen); +! +! sv_setiv(perl_get_sv("JPL::_env_", 1), (IV)(void*)env); +! jplcurenv = env; +! +! if (jpldebug) +! fprintf(stderr, "env = %lx\\n", (long)$env); +! +! if (!methodsv) +! methodsv = (SV*)perl_get_cv("$plname", TRUE); +! if (!stashhv) +! stashhv = gv_stashpv("JPL::$class", TRUE); +! +! if (jpldebug) +! fprintf(stderr, "blessing obj = %lx\\n", obj); +! PUSHs(sv_bless( +! sv_setref_iv(sv_newmortal(), Nullch, (IV)(void*)obj), +! stashhv)); +! +$glue + + # Finally, call the subroutine. + + my $mod; + $mod = "|G_DISCARD" if $void; + + if ($void) { + emit <<""; +! PUTBACK; +! perl_call_sv(methodsv, G_EVAL|G_KEEPERR|G_DISCARD); +! + + } + else { + emit <<""; +! PUTBACK; +! if (perl_call_sv(methodsv, G_EVAL|G_KEEPERR)) +! retsv = *PL_stack_sp--; +! else +! retsv = &PL_sv_undef; +! + + } + + emit <<""; +! if (SvTRUE(ERRSV)) { +! jthrowable newExcCls; +! +! (*env)->ExceptionDescribe(env); +! (*env)->ExceptionClear(env); +! +! newExcCls = (*env)->FindClass(env, "java/lang/RuntimeException"); +! if (newExcCls) +! (*env)->ThrowNew(env, newExcCls, SvPV(ERRSV,PL_na)); +! } +! + + # Fix up the return value, if any. + + if ($sig =~ s/^V//) { + emit <<""; +! return; + + } + elsif ($sig =~ s/^[ZBCSI]//) { + emit <<""; +! retval = ($rettype)SvIV(retsv); +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s/^[JFD]//) { + emit <<""; +! retval = ($rettype)SvNV(retsv); +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s#^Ljava/lang/String;##) { + emit <<""; +! retval = (*env)->NewStringUTF(env, SvPV(retsv,PL_na)); +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s/^L[^;]*;//) { + emit <<""; +! if (SvROK(retsv)) { +! SV* rv = (SV*)SvRV(retsv); +! if (SvOBJECT(rv)) +! retval = ($rettype)(void*)SvIV(rv); +! else +! retval = ($rettype)(void*)0; +! } +! else +! retval = ($rettype)(void*)0; +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s/^\[([ZBCSIJFD])//) { + my $elemtype = $1; + my $ptype = "\u$ptype{$elemtype}"; + my $ntype = "j$ptype{$elemtype}"; + my $in = $elemtype =~ /^[JFD]/ ? "N" : "I"; + emit <<""; +! if (SvROK(retsv)) { +! SV* rv = (SV*)SvRV(retsv); +! if (SvOBJECT(rv)) +! retval = ($rettype)(void*)SvIV(rv); +! else if (SvTYPE(rv) == SVt_PVAV) { +! jsize len = av_len((AV*)rv) + 1; +! $ntype* buf = ($ntype*)malloc(len * sizeof($ntype)); +! int i; +! SV** esv; +! +! ${ntype}Array ja = (*env)->New${ptype}Array(env, len); +! for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) +! buf[i] = ($ntype)Sv${in}V(*esv); +! (*env)->Set${ptype}ArrayRegion(env, ja, 0, len, buf); +! free((void*)buf); +! retval = ($rettype)ja; +! } +! else +! retval = ($rettype)(void*)0; +! } +! else if (SvPOK(retsv)) { +! jsize len = sv_len(retsv) / sizeof($ntype); +! +! ${ntype}Array ja = (*env)->New${ptype}Array(env, len); +! (*env)->Set${ptype}ArrayRegion(env, ja, 0, len, ($ntype*)SvPV(retsv,PL_na)); +! retval = ($rettype)ja; +! } +! else +! retval = ($rettype)(void*)0; +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s!^\[Ljava/lang/String;!!) { + emit <<""; +! if (SvROK(retsv)) { +! SV* rv = (SV*)SvRV(retsv); +! if (SvOBJECT(rv)) +! retval = ($rettype)(void*)SvIV(rv); +! else if (SvTYPE(rv) == SVt_PVAV) { +! jsize len = av_len((AV*)rv) + 1; +! int i; +! SV** esv; +! static jclass jcl = 0; +! jarray ja; +! +! if (!jcl) +! jcl = (*env)->FindClass(env, "java/lang/String"); +! ja = (*env)->NewObjectArray(env, len, jcl, 0); +! for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { +! jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,PL_na)); +! (*env)->SetObjectArrayElement(env, ja, i, str); +! } +! retval = ($rettype)ja; +! } +! else +! retval = ($rettype)(void*)0; +! } +! else +! retval = ($rettype)(void*)0; +! FREETMPS; +! LEAVE; +! return retval; + + } + elsif ($sig =~ s/^(\[+)([ZBCSIJFD]|L[^;]*;)//) { + my $arity = length $1; + my $elemtype = $2; + emit <<""; +! if (SvROK(retsv)) { +! SV* rv = (SV*)SvRV(retsv); +! if (SvOBJECT(rv)) +! retval = ($rettype)(void*)SvIV(rv); +! else if (SvTYPE(rv) == SVt_PVAV) { +! jsize len = av_len((AV*)rv) + 1; +! int i; +! SV** esv; +! static jclass jcl = 0; +! jarray ja; +! +! if (!jcl) +! jcl = (*env)->FindClass(env, "java/lang/Object"); +! ja = (*env)->NewObjectArray(env, len, jcl, 0); +! for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) { +! if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) { +! (*env)->SetObjectArrayElement(env, ja, i, +! (jobject)(void*)SvIV(rv)); +! } +! else { +! jobject str = (jobject)(*env)->NewStringUTF(env, +! SvPV(*esv,PL_na)); +! (*env)->SetObjectArrayElement(env, ja, i, str); +! } +! } +! retval = ($rettype)ja; +! } +! else +! retval = ($rettype)(void*)0; +! } +! else +! retval = ($rettype)(void*)0; +! FREETMPS; +! LEAVE; +! return retval; + + } + else { + die "No return type: $signature\n" if $sig eq ""; + die "Unrecognized return type '" . substr($sig, 0, 1) . "' in signature $signature\n"; + } + + emit <<""; +!} +! + + my $perl = ""; + + if ($class ne $LASTCLASS) { + $LASTCLASS = $class; + $perl .= <<""; +package JPL::${class}; +use JNI; +use JPL::AutoLoader; +\@ISA = qw(jobject); +\$clazz = JNI::FindClass("$file");\n + + foreach my $field (sort keys %fieldsig) { + my $sig = $fieldsig{$field}; + my $ptype = $ptype{$sig}; + if ($ptype) { + $ptype = "\u$ptype"; + if ($staticfield{$field}) { + $perl .= <<""; +\$${field}_FieldID = JNI::GetStaticFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::SetStatic${ptype}Field(\$clazz, \$${field}_FieldID, \$_[0]); + } + else { + JNI::GetStatic${ptype}Field(\$clazz, \$${field}_FieldID); + } +}\n + + } + else { + $perl .= <<""; +\$${field}_FieldID = JNI::GetFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::Set${ptype}Field(\$self, \$${field}_FieldID, \$_[0]); + } + else { + JNI::Get${ptype}Field(\$self, \$${field}_FieldID); + } +}\n + + } + } + else { + my $pltype = $sig; + if ($pltype =~ s/^L(.*);/$1/) { + $pltype =~ s!/!::!g; + } + else { + $pltype = 'jarray'; + } + if ($pltype eq "java::lang::String") { + if ($staticfield{$field}) { + $perl .= <<""; +\$${field}_FieldID = JNI::GetStaticFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::SetStaticObjectField(\$clazz, \$${field}_FieldID, + ref \$_[0] ? \$_[0] : JNI::NewStringUTF(\$_[0])); + } + else { + JNI::GetStringUTFChars(JNI::GetStaticObjectField(\$clazz, \$${field}_FieldID)); + } +}\n + + } + else { + $perl .= <<""; +\$${field}_FieldID = JNI::GetFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::SetObjectField(\$self, \$${field}_FieldID, + ref \$_[0] ? \$_[0] : JNI::NewStringUTF(\$_[0])); + } + else { + JNI::GetStringUTFChars(JNI::GetObjectField(\$self, \$${field}_FieldID)); + } +}\n + + } + } + else { + if ($staticfield{$field}) { + $perl .= <<""; +\$${field}_FieldID = JNI::GetStaticFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::SetStaticObjectField(\$clazz, \$${field}_FieldID, \$_[0]); + } + else { + bless JNI::GetStaticObjectField(\$clazz, \$${field}_FieldID), "$pltype"; + } +}\n + + } + else { + $perl .= <<""; +\$${field}_FieldID = JNI::GetFieldID(\$clazz, "$field", "$sig"); +sub $field (\$;\$) { + my \$self = shift; + if (\@_) { + JNI::SetObjectField(\$self, \$${field}_FieldID, \$_[0]); + } + else { + bless JNI::GetObjectField(\$self, \$${field}_FieldID), "$pltype"; + } +}\n + + } + } + } + } + } + + $plname =~ s/^JPL::${class}:://; + + my $proto = '$' x (@jargs + 1); + $perl .= "sub $plname ($proto) {\n"; + $perl .= ' my ($self, '; + foreach my $jarg (@jargs) { + $perl .= "\$$jarg, "; + } + $perl =~ s/, $/) = \@_;\n/; + $perl .= <<"END"; + warn "JPL::${class}::$plname(\@_)\\n" if \$JPL::DEBUG; +#line $protos[$PROTO][3] "$jpfile" +$protos[$PROTO][2]} + +END + + $PERLLINE += $perl =~ tr/\n/\n/ + 2; + $perl .= <<"END"; +#line $PERLLINE "" +END + $PERLLINE--; + + $PERL .= $perl; + } + continue { + $PROTO++; + print "\n" if $DEBUG; + } + + emit_c_footer(); + + rename $cfile, "$cfile.old"; + rename "$cfile.new", $cfile; + + open(PLFILE, ">$plfile") or die "Can't create $plfile: $!\n"; + print PLFILE "BEGIN { \$JPL::_env_ ||= 1; } # suppress bogus embedding\n\n"; + if (%classseen) { + my @classes = sort keys %classseen; + print PLFILE "use JPL::Class qw(@classes);\n\n"; + } + print PLFILE $PERL; + print PLFILE "1;\n"; + close PLFILE; + + print "perl -c $plfile\n"; + system "perl -c $plfile" and die "jpl stopped\n"; +} + +sub emit_c_header { + open(CFILE, ">$cfile.new") or die "Can't create $cfile.new: $!\n"; + emit <<""; +!/* This file is automatically generated. Do not modify! */ +! +!#include "$hfile" +! +!#include "EXTERN.h" +!#include "perl.h" +! +!#ifndef EXTERN_C +!# ifdef __cplusplus +!# define EXTERN_C extern "C" +!# else +!# define EXTERN_C extern +!# endif +!#endif +! +!extern int jpldebug; +!extern JNIEnv* jplcurenv; +! + +} + + +sub emit_c_footer { + close CFILE; +} + +sub emit { + my $string = shift; + $string =~ s/^!//mg; + print CFILE $string; +} + +sub j2p_class { + my $jclass = shift; + $jclass =~ s#/#::#g; + $jclass; +} diff --git a/gnu/usr.bin/perl/jpl/JPL/Makefile.PL b/gnu/usr.bin/perl/jpl/JPL/Makefile.PL new file mode 100644 index 00000000000..02e5b4597a3 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL/Makefile.PL @@ -0,0 +1,6 @@ +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +WriteMakefile( + 'NAME' => 'JPL::Class', +); diff --git a/gnu/usr.bin/perl/jpl/JPL_Rolo/JPL_Rolo.jpl b/gnu/usr.bin/perl/jpl/JPL_Rolo/JPL_Rolo.jpl new file mode 100644 index 00000000000..9c019c84fa5 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL_Rolo/JPL_Rolo.jpl @@ -0,0 +1,557 @@ +import java.awt.*; +import java.awt.event.*; +import java.lang.*; +import java.util.*; + +public class JPL_Rolo extends Frame { + + // The primary key of the row that is current onscreen. + // + int current_row = 0; + + // TextField objects for each column. + // + TextField fld_name, fld_address, fld_city, fld_state, fld_zip, fld_id; + + // Add or Edit mode. + // + String edit_status; + + // a layout manager for the Frame + // + GridBagLayout gb = new GridBagLayout(); + + // Action buttons. + // + Button next, previous, quit, save, newrow, edit, cancel, delete; + + // A Panel for the action buttons. + // + Panel actionbuttons; + + /** + * Construct a new instance of JPL_Rolo. + */ + public JPL_Rolo(String[] argv) { + CreateForm(); + addWindowListener(new WinEventHandler() ); + } + + public void CreateForm() { + + // set the layout for the frame + // + this.setLayout(gb); + + // this is the offset within the GridBagLayout. If + // I want the next object on a different line, I + // postincrement. If not, I don't. + // + int i = 0; + + // Add a text field for the name. + // + AddToFrame(new Label("Name:"), 0, i); + fld_name = new TextField(20); + fld_name.setEditable(false); + AddToFrame(fld_name, 1, i++); + + // The address. + // + AddToFrame(new Label("Address:"), 0, i); + fld_address = new TextField(35); + fld_address.setEditable(false); + AddToFrame(fld_address, 1, i++); + + // The City. I'm not going to increment i, so the + // next field will show up on the same line. + // + AddToFrame(new Label("City:"), 0, i); + fld_city = new TextField(20); + fld_city.setEditable(false); + AddToFrame(fld_city, 1, i); + + // The State. + // + AddToFrame(new Label("State:"), 2, i); + fld_state = new TextField(2); + fld_state.setEditable(false); + AddToFrame(fld_state, 3, i++); + + // The Zip Code. + // + AddToFrame(new Label("Zip:"), 0, i); + fld_zip = new TextField(11); + fld_zip.setEditable(false); + AddToFrame(fld_zip, 1, i++); + + // The id - this is always read-only. + // + AddToFrame(new Label("Id:"), 0, i); + fld_id = new TextField(4); + fld_id.setEditable(false); + AddToFrame(fld_id, 1, i++); + + // create the button panel and give it a FlowLayout + // + actionbuttons = new Panel(); + actionbuttons.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); + + // Add the button panel to the Frame. The AddToFrame + // method isn't really set up to handle this sort of + // panel, so we will go through the tedious process + // of managing the GridBagConstraints... + // + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = 3; c.gridheight = 1; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.CENTER; + c.weightx = 0.0; c.weighty = 0.0; + c.gridx = 0; c.gridy = i; + ((GridBagLayout)this.getLayout()).setConstraints(actionbuttons, c); + this.add(actionbuttons); + + // instantiate and add each of the buttons + // + previous = new Button("Previous"); + actionbuttons.add(previous); + previous.addActionListener( new PrevRowHandler() ); + + next = new Button("Next"); + actionbuttons.add(next); + next.addActionListener( new NextRowHandler() ); + + quit = new Button("Quit"); + actionbuttons.add(quit); + quit.addActionListener( new QuitHandler() ); + + newrow = new Button("New"); + actionbuttons.add(newrow); + newrow.addActionListener( new NewRowHandler() ); + + edit = new Button("Edit"); + actionbuttons.add(edit); + edit.addActionListener( new EditRowHandler() ); + + delete = new Button("Delete"); + actionbuttons.add(delete); + delete.addActionListener( new DeleteRowHandler() ); + + // save and cancel are disabled until the user + // is adding or editing. + // + save = new Button("Save"); + actionbuttons.add(save); + save.setEnabled(false); + save.addActionListener( new SaveHandler() ); + + cancel = new Button("Cancel"); + actionbuttons.add(cancel); + cancel.setEnabled(false); + cancel.addActionListener( new CancelHandler() ); + + // Invoke getRow() to display the first row in the table. + // + getRow(0); + + } + + /** + * Return the id of the current row. + */ + public int getCurrentRowVal() { + return current_row; + } + + public void setCols(String name, String address, String city, String state, String zip, String id) { + + clearForm(); + + fld_name.setText(name); + fld_address.setText(address); + fld_city.setText(city); + fld_state.setText(state); + fld_zip.setText(zip); + fld_id.setText(id); + current_row = Integer.parseInt(id); + + } + + + public void setCurrentRow(int r) { + current_row = r; + } + + public String getName() { return fld_name.getText(); } + public String getAddress() { return fld_address.getText(); } + public String getCity() { return fld_city.getText(); } + public String getState() { return fld_state.getText(); } + public String getZip() { return fld_zip.getText(); } + public String getId() { return fld_id.getText(); } + + /** + * This eventhandler will move to the previous row. + */ + class PrevRowHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + getRow(-1); + } + } + + /** + * This eventhandler will move to the next row. + */ + class NextRowHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + getRow(1); + } + } + + /** + * This eventhandler will terminate the application. + */ + class QuitHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + System.exit(0); + } + } + + /** + * This eventhandler will display a blank record and put + * this application in new record mode. + */ + class NewRowHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + clearForm(); + edit_status = "new"; + setEdit(); + } + } + + /** + * This eventhandler will put the application in edit + * mode (for the current row). + */ + class EditRowHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + edit_status = "edit"; + setEdit(); + } + } + /** + * This eventhandler will delete the current row. + */ + class DeleteRowHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + delRow(); + } + } + + /** + * This eventhandler will save (update or insert) the + * current record. + */ + class SaveHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + + if (edit_status.equals("new")) { + saveIt(); + } + if (edit_status.equals("edit")) { + updateRow(); + } + + // set the edit_status to "browse", and call setBrowse() + // + edit_status = "browse"; + setBrowse(); + } + } + + /** + * This eventhandler cancels any pending edit. + */ + class CancelHandler implements ActionListener { + public void actionPerformed( ActionEvent e) { + // if it was new, make sure that they can't edit the + // id field... + + if (edit_status.equals("new")) { + fld_id.setEditable(false); + } + + // return the edit_status to browse, call getRow() + // to retrieve the row they were looking at + // before editing or adding, and call setBrowse() + // + edit_status = "browse"; + getRow(0); + setBrowse(); + } + } + + // This is the event handler to deal with cases where + // the user closes the window with a window control. + // + class WinEventHandler extends WindowAdapter { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + } + + /** + * clearForm() + */ + protected void clearForm () { + fld_name.setText(""); + fld_address.setText(""); + fld_city.setText(""); + fld_state.setText(""); + fld_zip.setText(""); + fld_id.setText(""); + } + + /** + * AddToFrame() + * A convenience method to wrap the living hell + * that is GridBagConstraints() + */ + protected void AddToFrame (Component item, int x, int y) { + + // some sane layout defaults. + // + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = 1; c.gridheight = 1; + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.NORTHWEST; + c.weightx = 0.0; c.weighty = 0.0; + + // set the grid coordinates + // + c.gridx = x; c.gridy = y; + + // set the constraints, and add the item to the layout + // + + ((GridBagLayout)this.getLayout()).setConstraints(item, c); + this.add(item); + } + + /** + * setEdit() + * + * prepare the form for editing/adding + */ + protected void setEdit () { + + // disable all these buttons + // + next.setEnabled(false); + previous.setEnabled(false); + newrow.setEnabled(false); + edit.setEnabled(false); + delete.setEnabled(false); + + // set everything except the id to be editable + // + fld_name.setEditable(true); + fld_address.setEditable(true); + fld_city.setEditable(true); + fld_state.setEditable(true); + fld_zip.setEditable(true); + + // enable these two buttons + // + save.setEnabled(true); + cancel.setEnabled(true); + } + + /** + * setBrowse() + * + * prepare the form for viewing + * + */ + protected void setBrowse() { + + // enable all these buttons + // + next.setEnabled(true); + previous.setEnabled(true); + newrow.setEnabled(true); + edit.setEnabled(true); + delete.setEnabled(true); + + // disable the fields + // + fld_name.setEditable(false); + fld_address.setEditable(false); + fld_city.setEditable(false); + fld_state.setEditable(false); + fld_zip.setEditable(false); + fld_id.setEditable(false); + + // disable these two buttons + // + save.setEnabled(false); + cancel.setEnabled(false); + } + + perl void delRow() {{ + + my $id = $self->getId____s(); + + $sql = qq[delete from cardfile ] . + qq[where (id = $id)]; + + use Sprite; + my $rdb = new Sprite(); + my @data = $rdb->sql($sql); + $rdb->close("cardfile"); + my $status = shift @data; + if (!$status) { + print STDERR "Bummer - couldn't execute query!\n"; + die; + } + $self->setCurrentRow__I(0); + $self->getRow__I(0); + + }} + + perl void updateRow() {{ + + my $name = $self->getName____s(); + my $address = $self->getAddress____s(); + my $city = $self->getCity____s(); + my $state = $self->getState____s(); + my $zip = $self->getZip____s(); + my $id = $self->getId____s(); + + $sql = qq[update cardfile ] . + qq[set name = ('$name'), ] . + qq[set address = ('$address'), ] . + qq[set city = ('$city'), ] . + qq[set state = ('$state'), ] . + qq[set zip = ('$zip') ] . + qq[where (id = $id)]; + + use Sprite; + my $rdb = new Sprite(); + my @data = $rdb->sql($sql); + $rdb->close("cardfile"); + my $status = shift @data; + if (!$status) { + print STDERR "Bummer - couldn't execute query!\n"; + die; + } + + }} + + + /** + * getRow() + * + * This method is used to either fetch this current row, + * in which case it is given an argument of zero, or it + * can be used to move relative to the current row, in + * which case it must be given an argument of 1 or -1. + * + */ + + + perl void getRow(int direction) {{ + + use Sprite; + my $rdb = new Sprite(); + + my $nextid = $self->getCurrentRowVal____I() + $direction; + my $op; + if ($direction == -1) { + $op = "<="; + } else { + $op = ">="; + } + my $sql = "select name, address, city, " . + "state, zip, id from cardfile " . + "where id $op $nextid"; + + my @data = $rdb->sql($sql); + $rdb->close("cardfile"); + + my $status = shift @data; + if (!$status) { + print STDERR "Bummer - couldn't execute query!\n"; + die; + } + + my $numrows = scalar(@data); + + if (!$numrows) { + print STDERR "End of file reached.\n"; + return; + } + + my $index; + if ($direction == -1) { + $index = $#data; + } else { + $index = 0; + } + my($name, $address, $city, $state, $zip, $id) = @{$data[$index]}; + $self->setCols__ssssss($name, $address, $city, $state, $zip, $id); + + }} + + perl void saveIt() {{ + + use Sprite; + my $rdb = new Sprite(); + + my @data = $rdb->sql("select id, name from cardfile"); + + my $status = shift @data; + if (!$status) { + print STDERR "Bummer - couldn't execute query!\n"; + die; + } + + my @ids; + foreach $record (@data) { + my ($id, $name) = split (/\0/, $record, 2); + push @ids, $id; + } + @ids = sort @ids; + my $newid = $ids[$#ids] + 1; + + my $name = $self->getName____s(); + my $address = $self->getAddress____s(); + my $city = $self->getCity____s(); + my $state = $self->getState____s(); + my $zip = $self->getZip____s(); + + my $sql = "insert into cardfile (name, address, city, state, zip, id) values ('$name', '$address', '$city', '$state', '$zip', $newid)"; + @data = $rdb->sql($sql); + $rdb->close("cardfile"); + + $status = shift @data; + if (!$status) { + print STDERR "Bummer - couldn't execute insert!\n"; + die; + } + + $self->setCurrentRow__I($newid); + + }} + + public static void main(String[] args) { + + // make a new JPL_Rolo, pack() it and show() it. + JPL_Rolo cardfile = new JPL_Rolo(args); + cardfile.pack(); + cardfile.show(); + + } + +} + + diff --git a/gnu/usr.bin/perl/jpl/JPL_Rolo/Makefile.PL b/gnu/usr.bin/perl/jpl/JPL_Rolo/Makefile.PL new file mode 100644 index 00000000000..3dd1f844112 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL_Rolo/Makefile.PL @@ -0,0 +1,84 @@ +#!/usr/bin/perl + +$JPL_HOME = $ENV{JPL_HOME} + or die "You have not run setvars to set your environment variables.\n" . + "See the JPL README file for more information.\n"; + +use Config; + +eval `$JPL_HOME/setvars -perl`; + +chop($WHAT = `pwd`); +$WHAT =~ s#.*/##; + +if ($^O eq 'linux') { + $flags = "-Dbool=char"; # avoid builtin bool altogether + $libs = "-lc -lm -ldl"; +} +else { + $flags = ""; + $libs = "-lc -lm -ldl"; +} +chop($cwd = `pwd`); +($jpldir = $cwd) =~ s#/[^/]*$##; + +open(MAKEFILE, ">Makefile"); + +print MAKEFILE <<"SUBS"; +CC = $Config{cc} +WHAT = $WHAT +PERL = perl$] +ARCHNAME = $Config{archname} +JAVA_HOME = $ENV{JAVA_HOME} +JPL_HOME = $ENV{JPL_HOME} +PERLARCHDIR = $Config{archlib} +FLAGS = $Config{cccdlflags} $Config{ccdlflags} $Config{lddlflags} $flags +INCL = -I\$(PERLARCHDIR)/CORE \\ + -I\$(JAVA_HOME)/include \\ + -I\$(JAVA_HOME)/include/$^O \\ + -I\$(JAVA_HOME)/include/genunix +LIBS = $libs + +SUBS + +print MAKEFILE <<'NOSUBS'; +.SUFFIXES: .jpl .class + +.jpl.class: + $(PERL) -MJPL::Compile -e "file('$*.jpl')" + +all: $(WHAT).class lib$(WHAT).so + +debug: $(WHAT)_g.class lib$(WHAT)_g.so + +lib$(WHAT).so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so + $(CC) $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so \ + $(LIBS) \ + -o lib$(WHAT).so + +lib$(WHAT)_g.so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so + $(CC) -g $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so \ + $(LIBS) \ + -o lib$(WHAT)_g.so + +test: + +install: all + cp $(WHAT).class $(JPL_HOME)/lib + cp lib$(WHAT).so $(JPL_HOME)/lib/$(ARCHNAME) + cp $(WHAT).pl $(JPL_HOME)/perl + +clean: + rm -f $(WHAT).c $(WHAT).h \ + $(WHAT)*.class $(WHAT)*.pl lib$(WHAT).so $(WHAT)*.java + +distclean: clean + rm -f Makefile + +NOSUBS + +close MAKEFILE; diff --git a/gnu/usr.bin/perl/jpl/JPL_Rolo/README b/gnu/usr.bin/perl/jpl/JPL_Rolo/README new file mode 100644 index 00000000000..6d4b14b3fe4 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL_Rolo/README @@ -0,0 +1,27 @@ +Welcome to the Sprite sample application for Larry Wall's JPL. This +application showcases a merging of Java and Perl in which Java is employed +to generate a user interface, and Perl is used for data access. +Specifically, Perl is used with Shishir Gundavaram's Sprite module to offer +permanent storage through SQL manipulation of text files. This application +is a Rolodex(tm)-style address file, offering the ability to add, edit or +delete names and addresses. You may also navigate through the address list. + +To use this example, you will need to install the Sprite module from CPAN. + +To install the sample, you must first have JPL installed and working. +Please ensure that you have set environment variables as directed in the +JPL README and that the JPL Sample program works. Once this has been +accomplished, you can build the files in this directory with the following +commmands: + + perl Makefile.PL + make + make install + +You can run this by typing: + + java JPL_Rolo + +The application should appear with some sample data, and you can mess +around with it and put all your friends in the address book. Far out! + diff --git a/gnu/usr.bin/perl/jpl/JPL_Rolo/cardfile b/gnu/usr.bin/perl/jpl/JPL_Rolo/cardfile new file mode 100644 index 00000000000..eecc8067ba9 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/JPL_Rolo/cardfile @@ -0,0 +1,7 @@ +name,address,city,state,zip,id +Brian Jepson,50 Hudson Street,Providence,RI,02909,100 +Elvis Presley,50 Hudson Street,Providence,RI,02909,101 +AS220,115 Empire Street,Providence,RI,02909,600 +Mr. Jones,100 Loudermilk Drive,Springfield,??,,602 +George Maciunas,Canal Street,New York,NY,????,603 +Emmett Williams,Broome Street,New York,NY,?????,605 diff --git a/gnu/usr.bin/perl/jpl/PerlInterpreter/Makefile.PL b/gnu/usr.bin/perl/jpl/PerlInterpreter/Makefile.PL new file mode 100644 index 00000000000..b8b20f1e692 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/PerlInterpreter/Makefile.PL @@ -0,0 +1,74 @@ +#!/usr/bin/perl + +$JPL_SRC = ".."; + +use Config; + +eval `$JPL_SRC/setvars -perl`; + +if ($^O eq 'linux') { + $flags = "-Dbool=char"; # avoid builtin bool altogether + $libs = "-lc -lm -ldl"; +} else { + $flags = ""; + $libs = "-lc -lm -ldl"; +} + +# Needed for JNI. +if ($^O eq 'solaris') { + $libs .= " -lthread"; +} + +open(MAKEFILE, ">Makefile"); + +print MAKEFILE <<"SUBS"; +WHAT = PerlInterpreter +JAVA_HOME = $ENV{JAVA_HOME} +JPL_HOME = $ENV{JPL_HOME} +ARCHNAME = $Config{archname} +PERLARCHDIR = $Config{archlib} +CC = $Config{cc} +FLAGS = $Config{cccdlflags} $Config{ccdlflags} $Config{lddlflags} $flags +INCL = -I\$(PERLARCHDIR)/CORE \\ + -I\$(JAVA_HOME)/include \\ + -I\$(JAVA_HOME)/include/$^O \\ + -I\$(JAVA_HOME)/include/genunix +LIBS = $libs + +SUBS + + +print MAKEFILE <<'NOSUBS'; +.SUFFIXES: .java .class + +.java.class: + javac $*.java + +.class.h: + javah -jni $* + +all: PerlInterpreter.class libPerlInterpreter.so + +PerlInterpreter.class: PerlInterpreter.java + +PerlInterpreter.h: PerlInterpreter.class + +libPerlInterpreter.so: PerlInterpreter.c PerlInterpreter.h + $(CC) $(FLAGS) $(INCL) PerlInterpreter.c \ + $(PERLARCHDIR)/auto/DynaLoader/DynaLoader.a \ + $(LIBS) \ + -o libPerlInterpreter.so + +test: + +install: all + mkdir -p $(JPL_HOME)/lib/$(ARCHNAME) + cp libPerlInterpreter.so $(JPL_HOME)/lib/$(ARCHNAME) + cp $(WHAT).class $(JPL_HOME)/lib + +clean: + rm -f libPerlInterpreter.so + rm -f PerlInterpreter.class +NOSUBS + +close MAKEFILE; diff --git a/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.c b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.c new file mode 100644 index 00000000000..8134f0c9f5f --- /dev/null +++ b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.c @@ -0,0 +1,160 @@ +/* + * "The Road goes ever on and on, down from the door where it began." + */ + +#include "PerlInterpreter.h" +#include + +#include "EXTERN.h" +#include "perl.h" + +#ifndef PERL_VERSION +# include +# define PERL_REVISION 5 +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION +#endif + +#if PERL_REVISION == 5 && (PERL_VERSION < 4 || \ + (PERL_VERSION == 4 && PERL_SUBVERSION <= 75)) +# define PL_na na +# define PL_sv_no sv_no +# define PL_sv_undef sv_undef +# define PL_dowarn dowarn +# define PL_curinterp curinterp +# define PL_do_undump do_undump +# define PL_perl_destruct_level perl_destruct_level +# define ERRSV GvSV(errgv) +#endif + +#ifndef newSVpvn +# define newSVpvn(a,b) newSVpv(a,b) +#endif + +#ifndef pTHX +# define pTHX void +# define pTHX_ +# define aTHX +# define aTHX_ +# define dTHX extern int JNI___notused +#endif + +#ifndef EXTERN_C +# ifdef __cplusplus +# define EXTERN_C extern "C" +# else +# define EXTERN_C extern +# endif +#endif + +static void xs_init (pTHX); +static PerlInterpreter *my_perl; + +int jpldebug = 0; +JNIEnv *jplcurenv; + +JNIEXPORT void JNICALL +Java_PerlInterpreter_init(JNIEnv *env, jobject obj, jstring js) +{ + int exitstatus; + int argc = 3; + SV* envsv; + SV* objsv; + + static char *argv[] = {"perl", "-e", "1", 0}; + + if (getenv("JPLDEBUG")) + jpldebug = atoi(getenv("JPLDEBUG")); + + if (jpldebug) + fprintf(stderr, "init\n"); + + if (!dlopen("libperl.so", RTLD_LAZY|RTLD_GLOBAL)) { + fprintf(stderr, "%s\n", dlerror()); + exit(1); + } + + if (PL_curinterp) + return; + + perl_init_i18nl10n(1); + + if (!PL_do_undump) { + my_perl = perl_alloc(); + if (!my_perl) + exit(1); + perl_construct( my_perl ); + PL_perl_destruct_level = 0; + } + + exitstatus = perl_parse( my_perl, xs_init, argc, argv, (char **) NULL ); + + if (!exitstatus) + Java_PerlInterpreter_eval(env, obj, js); + +} + +JNIEXPORT void JNICALL +Java_PerlInterpreter_eval(JNIEnv *env, jobject obj, jstring js) +{ + SV* envsv; + SV* objsv; + dSP; + jbyte* jb; + + ENTER; + SAVETMPS; + + jplcurenv = env; + envsv = perl_get_sv("JPL::_env_", 1); + sv_setiv(envsv, (IV)(void*)env); + objsv = perl_get_sv("JPL::_obj_", 1); + sv_setiv(objsv, (IV)(void*)obj); + + jb = (jbyte*)(*env)->GetStringUTFChars(env,js,0); + + if (jpldebug) + fprintf(stderr, "eval %s\n", (char*)jb); + + perl_eval_pv( (char*)jb, 0 ); + + if (SvTRUE(ERRSV)) { + jthrowable newExcCls; + + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + + newExcCls = (*env)->FindClass(env, "java/lang/RuntimeException"); + if (newExcCls) + (*env)->ThrowNew(env, newExcCls, SvPV(ERRSV,PL_na)); + } + + (*env)->ReleaseStringUTFChars(env,js,jb); + FREETMPS; + LEAVE; + +} + +/* +JNIEXPORT jint JNICALL +Java_PerlInterpreter_eval(JNIEnv *env, jobject obj, jint ji) +{ + op = (OP*)(void*)ji; + op = (*op->op_ppaddr)(pTHX); + return (jint)(void*)op; +} +*/ + +/* Register any extra external extensions */ + +/* Do not delete this line--writemain depends on it */ +EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); +EXTERN_C void boot_JNI (pTHX_ CV* cv); + +static void +xs_init(pTHX) +{ + char *file = __FILE__; + dXSUB_SYS; + newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); +} diff --git a/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.h b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.h new file mode 100644 index 00000000000..22fdf526dca --- /dev/null +++ b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class PerlInterpreter */ + +#ifndef _Included_PerlInterpreter +#define _Included_PerlInterpreter +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: PerlInterpreter + * Method: init + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_PerlInterpreter_init + (JNIEnv *, jobject, jstring); + +/* + * Class: PerlInterpreter + * Method: eval + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_PerlInterpreter_eval + (JNIEnv *, jobject, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.java b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.java new file mode 100644 index 00000000000..c26a4f2ba44 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/PerlInterpreter/PerlInterpreter.java @@ -0,0 +1,21 @@ +class PerlInterpreter { + static boolean initted = false; + + public native void init(String s); + public native void eval(String s); + +// public native long op(long i); + + public PerlInterpreter fetch () { + if (!initted) { + init("$JPL::DEBUG = $ENV{JPLDEBUG}"); + initted = true; + } + return this; + } + + static { + System.loadLibrary("PerlInterpreter"); + } +} + diff --git a/gnu/usr.bin/perl/jpl/README b/gnu/usr.bin/perl/jpl/README new file mode 100644 index 00000000000..57f52c4f717 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/README @@ -0,0 +1,236 @@ +Copyright 1998, O'Reilly & Associates, Inc. + +This package may be copied under the same terms as Perl itself. + +Disclaimers +----------- +This is a work in progress, and relies on bleeding-edge technology +from the network. Don't expect not to be surprised occasionally. + +Requirements +------------ +Under Solaris and Linux (and other Unix-like systems), Perl 5.005 (or later) +must be compiled and installed as a shared library (libperl.so). I had to use +the system's malloc. JPL was originally built and tested with 5.004_04 and +early Java 1.1 development kits. This version has not been well tested under +other versions, so you can expect some rough edges. + +You need JDK 1.1. On Solaris, 1.1.5 has been verified to work. Linux +users can try the latest version (1.1.3 or later) available from (for +example): + + ftp://ftp.blackdown.org/pub/Linux/JDK/1.1.3/updates/libjava-1.1.3v2-1.tar.gz + +The get_jdk directory contains a script that will download JDK (but not +the patch file above) off of the net for you. (This presumes you've +already installed the modules mentioned in ../README.) + +You may need to ensure that all files under the ../jpl directory are writable. +install-jpl expects to be run with super-user privileges so that it can +put things in the right places. + +Microsoft Windows +----------------- +Only a subset of JPL works under Microsoft Windows. This subset includes +the JNI extension and the JPL module. This is enough for you to embed +Java in Perl, but not Perl in Java. + +This has only been tested with the Sun JDK 1.1.8. I haven't tested it +with JDK 1.2 (aka Java 2) or any Microsoft implementation of Java. + +Kaffe +----- +You might notice some mention of Kaffe (www.kaffe.org) in the source files. +This is because some preliminary work is being done in this area, but JPL +doesn't yet work with Kaffe. + +What the heck is JPL? +--------------------- +JPL is a hybrid (to use the polite term) language. It's basically Java +in which the methods can optionally be implemented by Perl code. A +preprocessor called "JPL::Compile" looks at your .jpl file and spits +out the appropriate .java, .c, .h, .pl, and .so files to accomplish the +desired task. Hopefully a lot of those files can go away in the future +as jpl mutates into a Perl-to-Java compiler. The long-term goal is for +jpl to be able to take a pure Perl file and spit out a java .class +file. This initial version of JPL is an attempt to begin to mesh the +semantics of Java and Perl. Some people may find it useful in its +current form, but you should know right up front that we've still got a +ways to go with it. A journey of a thousand miles continues with the +second step... + +JPL Syntax +---------- +JPL syntax is trivial, given that you know Java and Perl. Pretend like +you're writing a native Java method, but say "perl" instead of +"native", and then instead of omitting the body of the method, put your +Perl code in double curlies. (See Sample.jpl for an example.) + +Calling back from Perl to Java is done through the JNI (Java Native +Interface). No weird transmogrifications are done by the preprocessor +to your Perl code--it's all normal Perl. The preprocessor just wraps +it up into funny subroutines you don't see unless you peek at the .pl +file it generates. + +Installation +------------ +There are two ways to install JPL. + +The first way gives you the ability to embed Perl in Java programs. You +can also call back into Java from your embedded Perl programs. This should +work well with most JDKs, and is the only option for people using a JDK +that uses green threads (see your JDK documentation). + +The second way lets you embed Java in Perl, but doesn't provide support +for the other direction. This is good, in theory, if you need to work with +a lot of Java classes from within Perl. I say "in theory," because this +doesn't actually work a lot of the time. To use this second way, you +must be using a JDK with native threads. + +At this point, the second way is the only way to use JPL under Microsoft +Windows. Oddly enough, this is the only platform under which the second +way works! + +Installation the First Way (All of JPL) +--------------------------------------- +Run "install-jpl". You have to tell it whether you want to use the +current directory for JPL_HOME or some other directory. Everything +else should take care of itself, except that after install-jpl +writes the setvars program, you are responsible to invoke it properly +before any JPL applications can be compiled under the current shell. + + sh: eval `setvars -sh` + csh: eval `setvars -csh` + perl: eval `setvars -perl`; + +install-jpl has been tested under: + + Solaris 2.5.1 SPARC, GCC 2.8.0, Perl 5.005_03, JDK 1.1.7 + Debian 2.1 x86, Perl 5.005_60, JDK 1.1.7v3 + +******************** +Solaris 2.5.1 Users: +******************** + +NOTE: Under Solaris 2.5.1, you may get an error message when install-jpl +builds Sample.jpl: + + You must install a Solaris patch to run this version of the Java + runtime. Please see the README and release notes for more + information. + Exiting. + + This is apparently a spurious message, and it has been reported to + Sun. Although this message aborts the installation, all of JPL is + installed by the time this message is reached. To recover and continue, + run setvars as described above, cd to the Sample directory, and type + 'make' to continue building. You can then run 'java Sample' to test the + example. + + Unfortunately, each time you use 'make' to build a JPL application, + it will abort when it tries to run 'perl -c' on the generated .pl + file. However, you can continue building by typing 'make' again. + +Just-JNI (call into Java from Perl only) +---------------------------------------- + +This has been tested with: + + Debian 2.1 SPARC, Perl 5.005_60, JDK 1.2 beta (crashes with AWT, though) + Windows NT 4.0 SP4, ActivePerl 519, JDK 1.1.8, Visual C++ + Solaris 7, Perl 5.005_03, JDK 1.1.6, GCC 2.8.1 + +Solaris 7 Note (this probably applies to all native thread situations): + + Native threads were tricky. I had to build my own Perl, configured with: + + sh Configure -Dprefix=/opt/perl5.005 -Duseshrplib -Doptimize=-g \ + -Uusemymalloc -D cc=gcc -Dusethreads -d + + When Configure let me edit config.sh, I changed libs to: + + libs='-lthread -lsocket -lnsl -ldl -lm -lposix4 -lpthread -lc -lcrypt' + + The leading -lthread is the only thing I had to add. + +How do I do this crazy thing? + +1) Cd into the JPL directory. Type the following: + + perl Makefile.PL + make + make install + + Under windows, that's: + + perl Makefile.PL + nmake + nmake install + +3) cd into the JNI directory (cd ../JNI or cd ..\JNI) + +4) We now need to compile and make the Closer.class available to your + JPL program. Closer is a WindowListener that closes the Frame we + make in the test program. + + It seems that we've managed to fix the problem with CLASSPATH not + getting propagated to the JVM, so if '.' is in your CLASSPATH, you + should be able to compile Closer.java and leave it in the current + directory: + + javac Closer.java + +5) Make the demo: + + a) If you are on Windows, copy typemap.win32: + + copy typemap.win32 typemap + + (this step will probably go away when we clean up some of the + WIN32 #defines) + + b) type the following: + + perl Makefile.PL + make + make test + + Under Windows: + + perl Makefile.PL + nmake + nmake test + + + c) if all went well, type: + + make install + + or, under Windows: + + nmake install + +Mailing List +------------ +To subscribe to the jpl mailing list, send an email message to +jpl-subscribe@perl.org. + +CVS Access +---------- +Information on accessing the bleeding edge JPL via CVS can be found at: + + http://users.ids.net/~bjepson/jpl/cvs.html + +More Info +--------- + +You can look at the Sample and Test directories, as well as the ../eg +directory for examples. + +Perhaps the most important bit of advice we can give you is to watch + + http://perl.oreilly.com + +for further information on how to get further information. + +Have the appropriate amount of fun. diff --git a/gnu/usr.bin/perl/jpl/SETVARS.PL b/gnu/usr.bin/perl/jpl/SETVARS.PL new file mode 100644 index 00000000000..d3d85b42b4c --- /dev/null +++ b/gnu/usr.bin/perl/jpl/SETVARS.PL @@ -0,0 +1,11 @@ +# Your JDK top-level directory. +# +$ENV{JAVA_HOME} = 'c:\jdk1.1.8'; + +# The location where you extracted JPL. +# +$ENV{JPL_HOME} = 'D:\jpl'; + +# The executeable name of Perl +# +$ENV{JPLPERL} = 'perl'; diff --git a/gnu/usr.bin/perl/jpl/Sample/Makefile.PL b/gnu/usr.bin/perl/jpl/Sample/Makefile.PL new file mode 100644 index 00000000000..cd6b09360fc --- /dev/null +++ b/gnu/usr.bin/perl/jpl/Sample/Makefile.PL @@ -0,0 +1,90 @@ +#!/usr/bin/perl + +$JPL_HOME = $ENV{JPL_HOME} + or die "You have not run setvars to set your environment variables.\n" . + "See the JPL README file for more information.\n"; + +use Config; + +eval `$JPL_HOME/setvars -perl`; + +chop($WHAT = `pwd`); +$WHAT =~ s#.*/##; + +if ($^O eq 'linux') { + $flags = "-Dbool=char"; # avoid builtin bool altogether + $libs = "-lc -lm -ldl"; +} else { + $flags = ""; + $libs = "-lc -lm -ldl"; +} + +# Needed for JNI +if ($^O eq 'solaris') { + $libs .= " -lthread"; +} + +chop($cwd = `pwd`); +($jpldir = $cwd) =~ s#/[^/]*$##; + +open(MAKEFILE, ">Makefile"); + +print MAKEFILE <<"SUBS"; +CC = $Config{cc} +WHAT = $WHAT +PERL = perl$] +ARCHNAME = $Config{archname} +JAVA_HOME = $ENV{JAVA_HOME} +JPL_HOME = $ENV{JPL_HOME} +PERLARCHDIR = $Config{archlib} +FLAGS = $Config{cccdlflags} $Config{ccdlflags} $Config{lddlflags} $flags +INCL = -I\$(PERLARCHDIR)/CORE \\ + -I\$(JAVA_HOME)/include \\ + -I\$(JAVA_HOME)/include/$^O \\ + -I\$(JAVA_HOME)/include/genunix +LIBS = $libs + +SUBS + +print MAKEFILE <<'NOSUBS'; +.SUFFIXES: .jpl .class + +.jpl.class: + $(PERL) -MJPL::Compile -e "file('$*.jpl')" + +all: $(WHAT).class lib$(WHAT).so + +debug: $(WHAT)_g.class lib$(WHAT)_g.so + +lib$(WHAT).so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so + $(CC) $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so \ + $(LIBS) \ + -o lib$(WHAT).so + +lib$(WHAT)_g.so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so + $(CC) -g $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so \ + $(LIBS) \ + -o lib$(WHAT)_g.so + +test: all + java $(WHAT) + +install: all + cp *.class $(JPL_HOME)/lib + cp lib$(WHAT).so $(JPL_HOME)/lib/$(ARCHNAME) + cp $(WHAT).pl $(JPL_HOME)/perl + +clean: + rm -f $(WHAT).c $(WHAT).h \ + $(WHAT)*.class $(WHAT)*.pl lib$(WHAT).so $(WHAT)*.java + +distclean: clean + rm -f Makefile + +NOSUBS + +close MAKEFILE; diff --git a/gnu/usr.bin/perl/jpl/Sample/Sample.jpl b/gnu/usr.bin/perl/jpl/Sample/Sample.jpl new file mode 100644 index 00000000000..a09520141fb --- /dev/null +++ b/gnu/usr.bin/perl/jpl/Sample/Sample.jpl @@ -0,0 +1,48 @@ +class Sample { + public static void main(String[] args) { + Sample sam = new Sample(); + System.out.println(sam.foo("manny","moe","jack")); + System.out.println(sam.foo(1)); + System.out.println(sam.foo(3.0)); + sam.foo(); + } + + public static int thrice(int i) { + return i * 3; + } + + perl void foo() {{ + use POSIX; + print "TZ = ", POSIX::tzname(), "\n"; + print "Got to ${self}->foo() method\n"; + print "foo__I(2) = ", $self->foo__I__I(2),"\n"; + print "thrice(123) = ", JPL::Sample->thrice__I__I(123), "\n"; + print "thrice(12) = ", JPL::Sample->thrice__I__I(12), "\n"; + print $self->foo__sss__s("MANNY", "MOE", "JACK"), "\n"; + print 41 + $self->foo__sss__s("1", "2", "3"), "\n"; + print "Perl version is $]\n"; + }} + + perl int foo(int a) {{ + $a + $a; + }} + + perl double foo(double a) {{ + use JPL::Class 'java::util::Random'; + $rng = java::util::Random->new(); + print "RNG = $rng\n"; + print $rng->nextDouble____D(), "\n"; + print $rng->nextDouble____D(), "\n"; + print $rng->nextDouble____D(), "\n"; + print $rng->nextDouble____D(), "\n"; + return $a * $a; + }} + + perl String foo( String a, + String b, + String c ) {{ + print "a = $a, b = $b, c = $c\n"; + join "+", $a, $b, $c; + }} + +} diff --git a/gnu/usr.bin/perl/jpl/Test/Makefile.PL b/gnu/usr.bin/perl/jpl/Test/Makefile.PL new file mode 100644 index 00000000000..3dd1f844112 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/Test/Makefile.PL @@ -0,0 +1,84 @@ +#!/usr/bin/perl + +$JPL_HOME = $ENV{JPL_HOME} + or die "You have not run setvars to set your environment variables.\n" . + "See the JPL README file for more information.\n"; + +use Config; + +eval `$JPL_HOME/setvars -perl`; + +chop($WHAT = `pwd`); +$WHAT =~ s#.*/##; + +if ($^O eq 'linux') { + $flags = "-Dbool=char"; # avoid builtin bool altogether + $libs = "-lc -lm -ldl"; +} +else { + $flags = ""; + $libs = "-lc -lm -ldl"; +} +chop($cwd = `pwd`); +($jpldir = $cwd) =~ s#/[^/]*$##; + +open(MAKEFILE, ">Makefile"); + +print MAKEFILE <<"SUBS"; +CC = $Config{cc} +WHAT = $WHAT +PERL = perl$] +ARCHNAME = $Config{archname} +JAVA_HOME = $ENV{JAVA_HOME} +JPL_HOME = $ENV{JPL_HOME} +PERLARCHDIR = $Config{archlib} +FLAGS = $Config{cccdlflags} $Config{ccdlflags} $Config{lddlflags} $flags +INCL = -I\$(PERLARCHDIR)/CORE \\ + -I\$(JAVA_HOME)/include \\ + -I\$(JAVA_HOME)/include/$^O \\ + -I\$(JAVA_HOME)/include/genunix +LIBS = $libs + +SUBS + +print MAKEFILE <<'NOSUBS'; +.SUFFIXES: .jpl .class + +.jpl.class: + $(PERL) -MJPL::Compile -e "file('$*.jpl')" + +all: $(WHAT).class lib$(WHAT).so + +debug: $(WHAT)_g.class lib$(WHAT)_g.so + +lib$(WHAT).so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so + $(CC) $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter.so \ + $(LIBS) \ + -o lib$(WHAT).so + +lib$(WHAT)_g.so: $(WHAT).c $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so + $(CC) -g $(FLAGS) $(INCL) $(WHAT).c \ + $(PERLARCHDIR)/CORE/libperl.so \ + $(JPL_HOME)/lib/$(ARCHNAME)/libPerlInterpreter_g.so \ + $(LIBS) \ + -o lib$(WHAT)_g.so + +test: + +install: all + cp $(WHAT).class $(JPL_HOME)/lib + cp lib$(WHAT).so $(JPL_HOME)/lib/$(ARCHNAME) + cp $(WHAT).pl $(JPL_HOME)/perl + +clean: + rm -f $(WHAT).c $(WHAT).h \ + $(WHAT)*.class $(WHAT)*.pl lib$(WHAT).so $(WHAT)*.java + +distclean: clean + rm -f Makefile + +NOSUBS + +close MAKEFILE; diff --git a/gnu/usr.bin/perl/jpl/Test/Test.jpl b/gnu/usr.bin/perl/jpl/Test/Test.jpl new file mode 100644 index 00000000000..ab6a1ce56d5 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/Test/Test.jpl @@ -0,0 +1,122 @@ +import java.util.*; + +public class Test { + + int myint = 123; + double mydouble = 3.14159265; + String mystring = "my string"; + static String ourstring = "our string"; + static boolean embedded = false; + int array[] = {1,2,3}; + Vector v; + + public Test() { + + + v = new Vector(); + v.addElement("Hello"); + printfields(); + Vector x = perlTryVec(v); + x.addElement("World"); + Vector y = perlTryVec(x); + if (!embedded) System.err.println("Thank you, perlTryVec!"); + + if (!embedded) System.err.println(retchars()); + if (!embedded) System.err.println("Thank you, retchars!"); + + String[] s = retstrings(); + if (!embedded) System.err.println(s[0] + s[1] + s[2] + s[3]); + if (!embedded) System.err.println("Thank you, retstrings!"); + + Object[] o = retobjects(v, x, y); + if (!embedded) System.err.println(o[1]); + if (!embedded) System.err.println(o[3]); + if (!embedded) System.err.println(o[4]); + if (!embedded) System.err.println("Thank you, retobjects!"); + + passarray(s); + + if (!embedded) System.err.println(s[0] + s[1] + s[2] + s[3]); + if (!embedded) System.err.println("Thank you, passarray!"); + + printfields(); + if (!embedded) System.err.println("Thank you, printfields!"); + setfields(); + if (!embedded) System.err.println("Thank you, setfields!"); + printfields(); + if (!embedded) System.err.println("Thank you, printfields!"); + } + + perl Vector perlTryVec(Vector v) throws RuntimeException {{ + print "v is: $v\n"; + print "v isa: ", ref $v,"\n"; + + print "In perlTryVec() - Vector size is: ", $v->size([],['int']), "\n"; + @foo = times; + $size ||= getmeth('size', [], ['int']); + for ($i = 10000; $i; --$i) { + $x = $v->$size(); + } + @bar = times; + printf "%5.2fu %5.2fs\n", $bar[0] - $foo[0], $bar[1] - $foo[1]; + return $v; + }} + + perl char[] retchars() {{ + print "In retchars()\n"; + return [65,66,67]; + }} + + perl String[] retstrings() {{ + print "In retstrings()\n"; + return [1,2,3,"many"]; + }} + + perl Object[] retobjects(Vector v, Vector x, Vector y) {{ + print "In retstrings()\n"; + return [$v, $x, $y, "this is only a test", 123]; + }} + + perl void passarray(String[] s) {{ + print "In passarray()\n"; + print "s = $s\n"; + $t = GetObjectArrayElement($s,3); + print "t = $t\n"; + $x = GetStringUTFChars($t); + print "$x\n"; + $t = SetObjectArrayElement($s,3,NewStringUTF("infinity")); + }} + + perl void printfields() {{ + + $| = 1; + eval {print $self->v->toString____s(), "\n";}; + print $@ if $@; + + print $self->myint, "\n"; + print $self->mydouble, "\n"; + print $self->mystring, "\n"; + print JPL::Test->ourstring, "\n"; + + @nums = GetIntArrayElements($self->array()); + print "@nums\n"; + + @nums = unpack("i*", scalar GetIntArrayElements($self->array())); + print "@nums\n"; + }} + + perl void setfields() {{ + $self->myint(321); + $self->mydouble(2.7182918); + $self->mystring("MY STRING!!!"); + JPL::Test->ourstring("OUR STRING!!!"); + }} + + public static void main(String[] argv) { + if (java.lang.reflect.Array.getLength(argv) > 0 && + argv[0].equals("-nothanks")) + embedded = true; + Test f = new Test(); + if (!embedded) System.err.println("Thank you, Test!"); + } +} diff --git a/gnu/usr.bin/perl/jpl/bin/jpl b/gnu/usr.bin/perl/jpl/bin/jpl new file mode 100644 index 00000000000..ba39ce1985d --- /dev/null +++ b/gnu/usr.bin/perl/jpl/bin/jpl @@ -0,0 +1,8 @@ +#!/usr/bin/perl -w + +# Copyright 1997, O'Reilly & Associate, Inc. +# +# This package may be copied under the same terms as Perl itself. + +use JPL::Compile qw(files); +files(@ARGV); diff --git a/gnu/usr.bin/perl/jpl/get_jdk/README b/gnu/usr.bin/perl/jpl/get_jdk/README new file mode 100644 index 00000000000..0c38ccf7fd9 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/get_jdk/README @@ -0,0 +1,74 @@ + +This archive contains the following files: +README - the README file which explains how to use this program (this file) +get_jdk.pl - the program to download JDK +jdk_hosts - the descriptor file required by the program + +Nate Patwardhan (nvp@oreilly.com) wrote get_jdk.pl to automate the +download of JDK (Java Development Kit) from a distribution site based +on your Unix flavor. This program is based on some of the examples +found in the LWP cookbook that was included with your LWP distribution. + +Current Unix flavors that appear in the descriptor file (more +suggestions from Beta testers will be welcomed): + Solaris + Linux + FreeBSD + +To use get_jdk.pl properly, you *must* have LWP (libwww) and its +dependencies installed. Once you've installed LWP, you should be able +to use this module without any problems on any Unix flavor. + +By default, get_jdk.pl uses #!/usr/local/bin/perl in its shebang path, +so you may have to execute get_jdk.pl like: + + perl get_jdk.pl + +-OR- + + perl5 get_jdk.pl + +based on your site's Perl installation. + +get_jdk.pl reads the $^O to determine what Unix flavor you're using, +and compares the value of $^O to the first field shown in the +descriptor file, jdk_hosts. For example, $^O for Solaris versions of +Perl is: 'solaris'; Solaris is represented in the descriptor file +like: + + solaris=>ftp://ftp.javasoft.com/pub/jdk1.1/jdk1.1.3-solaris2-sparc.bin + +When get_jdk.pl reads the descriptor file, it splits the fields on +'=>', and reads them into a hash, %HOSTS. get_jdk.pl then compares +the value of $^O to $HOSTS{'osname'}, and returns the address of the +JDK distribution site if $^O eq $HOSTS{'osname'}. If there is not a +match, get_jdk.pl fails. + +get_jdk.pl represents the hostname of distribution sites in URL +format: protocol://hostname.some.com/path/filename.extension +When a URL is found, get_jdk.pl parses out the filename; this is +significant, because the output from the remote host is directed to +the file parsed from the URL. + +When you execute get_jdk.pl, you'll know it's working correctly if it +outputs something like: + + A JDK port for your OS has been found. + Contacting: + ftp://ftp.javasoft.com/pub/jdk1.1/jdk1.1.3-solaris2-sparc.bin + Attempting to download: jdk1.1.3-solaris2-sparc.bin + 0% - 1460 bytes received + 0% - 4380 bytes received + 0% - 7300 bytes received + 0% - 8192 bytes received + [etc etc etc until you reach 100%] + +Future (PRK release) versions of get_jdk.pl will allow the user to +update the descriptor file from the ora.com (oreilly.com) FTP/WWW +site. This version does not support the -update flag. + +Happy JDK'ing! :-) + +-- +Nate Patwardhan +nvp@oreilly.com diff --git a/gnu/usr.bin/perl/jpl/get_jdk/get_jdk.pl b/gnu/usr.bin/perl/jpl/get_jdk/get_jdk.pl new file mode 100644 index 00000000000..d6d399d6691 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/get_jdk/get_jdk.pl @@ -0,0 +1,71 @@ +#!/usr/bin/perl -w + +# Based on an ftp client found in the LWP Cookbook and +# revised by Nathan V. Patwardhan . + +# Copyright 1997 O'Reilly and Associates +# This package may be copied under the same terms as Perl itself. +# +# Code appears in the Unix version of the Perl Resource Kit + +use LWP::UserAgent; +use URI::URL; + +my $ua = new LWP::UserAgent; + +# check to see if a JDK port exists for the OS. i'd say +# that we should use solaris by default, but a 9meg tarfile +# is a hard pill to swallow if it won't work for somebody. :-) +my $os_type = $^O; my $URL = lookup_jdk_port($os_type); +die("No JDK port found. Contact your vendor for details. Exiting.\n") + if $URL eq ''; + +print "A JDK port for your OS has been found.\nContacting: ".$URL."\n"; + +# Now, parse the URL using URI::URL +my($jdk_file) = (url($URL)->crack)[5]; +$jdk_file =~ /(.+)\/(.+)/; $jdk_file = $2; + +print "Attempting to download: $jdk_file\n"; + +my $expected_length; +my $bytes_received = 0; + +open(OUT, ">".$jdk_file) or die("Can't open $jdk_file: $!"); +$ua->request(HTTP::Request->new('GET', $URL), + sub { + my($chunk, $res) = @_; + + $bytes_received += length($chunk); + unless (defined $expected_length) { + $expected_length = $res->content_length || 0; + } + if ($expected_length) { + printf STDERR "%d%% - ", + 100 * $bytes_received / $expected_length; + } + print STDERR "$bytes_received bytes received\n"; + + print OUT $chunk; + } +); +close(OUT); + +sub lookup_jdk_port { + my($port_os) = @_; + my $jdk_hosts = 'jdk_hosts'; + my %HOSTS = (); + + open(CFG, $jdk_hosts) or die("hosts error: $!"); + while() { + chop; + ($os, $host) = split(/\s*=>\s*/, $_); + next unless $os eq $port_os; + push(@HOSTS, $host); + } + close(CFG); + + return "" unless @HOSTS; + return $HOSTS[rand @HOSTS]; # Pick one at random. +} + diff --git a/gnu/usr.bin/perl/jpl/get_jdk/jdk_hosts b/gnu/usr.bin/perl/jpl/get_jdk/jdk_hosts new file mode 100644 index 00000000000..fa50b511ebd --- /dev/null +++ b/gnu/usr.bin/perl/jpl/get_jdk/jdk_hosts @@ -0,0 +1,4 @@ +solaris => ftp://ftp.javasoft.com/pub/jdk1.1/jdk1.1.3-solaris2-sparc.bin +linux => ftp://ftp.infomagic.com/pub/mirrors/linux/Java/JDK-1.1.3/linux-jdk.1.1.3-v2.tar.gz +linux => ftp://ftp.connectnet.com/pub/java/JDK-1.1.3/linux-jdk.1.1.3-v2.tar.gz +freebsd => http://www.csi.uottawa.ca/~kwhite/jdkbinaries/jdk1.1-FreeBSD.tar.gz diff --git a/gnu/usr.bin/perl/jpl/install-jpl b/gnu/usr.bin/perl/jpl/install-jpl new file mode 100644 index 00000000000..f19e226e488 --- /dev/null +++ b/gnu/usr.bin/perl/jpl/install-jpl @@ -0,0 +1,229 @@ +#!/usr/bin/perl + +print <<'END' if $>; +NOTE: Since you're not running as root, the installation will su at +the appropriate time later. You will need to supply the root password +for the su program. + +END + +# Gather data. + +# JPL_SRC + +chop($JPL_SRC = `pwd`); +print "JPL_SRC = $JPL_SRC\n"; + +# JAVA_HOME + +foreach $dir ( + $ENV{JAVA_HOME}, + "/usr/java", + "/usr/local/java", + "/usr/lib/java", + "/usr/local/lib/java", +) { + $JAVA_HOME = $dir, last if $dir and -d "$dir/bin"; +} +die "You must set the \$JAVA_HOME environment variable first.\n" + unless $JAVA_HOME; +print "JAVA_HOME = $JAVA_HOME\n"; + +# JPL_HOME + +($likelyjpl = $JAVA_HOME) =~ s#(.*)/.*#$1/jpl#; + +print <<"END"; + +You need to decide which directory JPL files are to be installed in. +Applications will look in subdirectories of this directory for any JPL +related files. + +You may use the current directory ($JPL_SRC) +or you may use a directory such as $likelyjpl. + +END + +$| = 1; +until (-d $JPL_HOME) { + print "Install JPL files where: [$JPL_SRC] "; + chop($JPL_HOME = ); + $JPL_HOME ||= $JPL_SRC; + unless (-d $JPL_HOME) { + print "Warning: $JPL_HOME doesn't exist yet!\n\n"; + print "Do you want to create it? [y] "; + chop($ans = ); + $ans ||= 'y'; + next unless $ans =~ /^y/i; + + system "mkdir -p $JPL_HOME"; + if ($> and not -d $JPL_HOME) { + warn "Couldn't create $JPL_HOME!\nTrying again as root...running su...\n"; + system "set -x +su root -c 'mkdir -p $JPL_HOME && chown $> $JPL_HOME && chmod 0755 $JPL_HOME'"; + warn "Couldn't create $JPL_HOME!\n" unless -d $JPL_HOME; + } + } +} +print "JPL_HOME = $JPL_HOME\n"; + +######################################################################### +# Spit out setvars. + +print "Writing setvars...\n"; + +unlink "$JPL_SRC/setvars"; +open(SETVARS, ">$JPL_HOME/setvars") or die "Can't create setvars: $!\n"; +while () { + s/^JPL_SRC=.*/JPL_SRC='$JPL_SRC'/; + s/^JAVA_HOME=.*/JAVA_HOME='$JAVA_HOME'/; + s/^JPL_HOME=.*/JPL_HOME='$JPL_HOME'/; + print SETVARS $_; +} +close SETVARS; +chmod 0755, "$JPL_HOME/setvars"; +symlink "$JPL_HOME/setvars", "$JPL_SRC/setvars" if $JPL_HOME ne $JPL_SRC; + +######################################################################### +# Pretend we're make. + +eval `./setvars -perl`; # Take our own medicine. + +print "\n\nStarting install...\n"; + +system <<'END' and die "Couldn't install JPL\n"; +set -x +cd JPL +perl Makefile.PL +make clean +perl Makefile.PL +make install +END + +print "\nInstalling PerlInterpreter class\n"; + +system <<'END' and die "Couldn't install PerlInterpreter\n"; +set -x +cd PerlInterpreter +perl Makefile.PL +make clean +perl Makefile.PL +make install +END + +print "\nInstalling JNI module\n"; + +system <<'END' and die "Couldn't install JNI\n"; +set -x +cd JNI +perl Makefile.PL -e +make clean +perl Makefile.PL -e +make +echo 'Attempting to install JNI as root' +su root -c "make install" +END + +#touch Makefile +#make -f makefile.jv +## These should be executed as root +#rm -rf /usr/lib/perl5/site_perl/i586-linux/auto/JNI +#rm -rf /usr/lib/perl5/site_perl/auto/JNI +#rm -f /usr/lib/perl5/site_perl/JNI.pm +#make -f makefile.jv install UNINST=1 + +print "\nInstalling Sample JPL program\n"; + +system <<'END' and die "Couldn't install Sample\n"; +set -x +cd Sample +perl Makefile.PL +make clean +perl Makefile.PL +make install +END + +# Test +print "\n\nTesting Sample...\n"; +system <<'END' and die "Couldn't run Sample\n"; +set -x +cd Sample +JPLDEBUG=1 +export JPLDEBUG +java Sample +END + +__END__ +#!/bin/sh + +# You can edit this, but your changes will only last until the next +# time you run install-jpl. + +# Where jpl is currently installed + +cd `dirname $0` +JPL_SRC=`pwd` + +# Where java is installed + +JAVA_HOME=/usr/local/java +export JAVA_HOME + +# Where jpl will be installed + +JPL_HOME="$JPL_SRC" +export JPL_HOME + +# Which perl to run + +JPLPERL=perl`perl -e "print $]"` +#JPLPERL=perl5.00404 +export JPLPERL + +# Some derivative variables +archname=`$JPLPERL -MConfig -e 'print $Config{archname}'` + archlib=`$JPLPERL -MConfig -e 'print $Config{archlib}'` + +CLASSPATH=".:$JPL_HOME/lib${CLASSPATH:+:$CLASSPATH}" +export CLASSPATH + +LD_LIBRARY_PATH=".:$JPL_HOME/lib/$archname:$archlib/CORE${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" +export LD_LIBRARY_PATH + +PERL5LIB="$JPL_HOME/perl${PERL5LIB:+:$PERL5LIB}" +export PERL5LIB + +# Make sure the right java programs are selected. +PATH="$JAVA_HOME/bin:$PATH" +export PATH + +case "$1" in +-perl) + cat < \&as_string, 'cmp' => \&compare, 'fallback'=>1; @@ -100,10 +96,13 @@ sub new { 'value'=>[@values], },$class; - # IE requires the path to be present for some reason. - ($path = $ENV{'SCRIPT_NAME'})=~s![^/]+$!! unless $path; + # IE requires the path and domain to be present for some reason. + $path = CGI::url(-absolute=>1) unless defined $path; +# however, this breaks networks which use host tables without fully qualified +# names, so we comment it out. +# $domain = CGI::virtual_host() unless defined $domain; - $self->path($path) if defined $path; + $self->path($path) if defined $path; $self->domain($domain) if defined $domain; $self->secure($secure) if defined $secure; $self->expires($expires) if defined $expires; @@ -251,10 +250,10 @@ cookie originated from. If you provide a cookie path attribute, the browser will check it against your script's URL before returning the cookie. For example, if you specify the path "/cgi-bin", then the cookie will be returned -to each of the scripts "/cgi-bin/tally.pl", "/cgi-bin/order.pl", -and "/cgi-bin/customer_service/complain.pl", but not to the script -"/cgi-private/site_admin.pl". By default, path is set to "/", which -causes the cookie to be sent to any CGI script on your site. +to each of the scripts "/cgi-bin/tally.pl", "/cgi-bin/order.pl", and +"/cgi-bin/customer_service/complain.pl", but not to the script +"/cgi-private/site_admin.pl". By default, the path is set to your +script, so that only it will receive the cookie. =item B<4. secure flag> @@ -344,7 +343,7 @@ can iterate through the cookies this way: In a scalar context, fetch() returns a hash reference, which may be more efficient if you are manipulating multiple cookies. - + CGI.pm uses the URL escaping methods to save and restore reserved characters in its cookies. If you are trying to retrieve a cookie set by a foreign server, this escaping method may trip you up. Use raw_fetch() instead, which has the @@ -415,5 +414,5 @@ This section intentionally left blank. =head1 SEE ALSO L, L - + =cut diff --git a/gnu/usr.bin/perl/lib/CGI/Pretty.pm b/gnu/usr.bin/perl/lib/CGI/Pretty.pm new file mode 100644 index 00000000000..4f2eed4ce9c --- /dev/null +++ b/gnu/usr.bin/perl/lib/CGI/Pretty.pm @@ -0,0 +1,236 @@ +package CGI::Pretty; + +# See the bottom of this file for the POD documentation. Search for the +# string '=head'. + +# You can run this file through either pod2man or pod2html to produce pretty +# documentation in manual or html file format (these utilities are part of the +# Perl 5 distribution). + +use strict; +use CGI (); + +$CGI::Pretty::VERSION = '1.03'; +$CGI::DefaultClass = __PACKAGE__; +$CGI::Pretty::AutoloadClass = 'CGI'; +@CGI::Pretty::ISA = qw( CGI ); + +initialize_globals(); + +sub _prettyPrint { + my $input = shift; + + foreach my $i ( @CGI::Pretty::AS_IS ) { + if ( $$input =~ /<\/$i>/si ) { + my ( $a, $b, $c, $d, $e ) = $$input =~ /(.*)<$i(\s?)(.*?)>(.*?)<\/$i>(.*)/si; + _prettyPrint( \$a ); + _prettyPrint( \$e ); + + $$input = "$a<$i$b$c>$d$e"; + return; + } + } + $$input =~ s/$CGI::Pretty::LINEBREAK/$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT/g; +} + +sub comment { + my($self,@p) = CGI::self_or_CGI(@_); + + my $s = "@p"; + $s =~ s/$CGI::Pretty::LINEBREAK/$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT/g; + + return $self->SUPER::comment( "$CGI::Pretty::LINEBREAK$CGI::Pretty::INDENT$s$CGI::Pretty::LINEBREAK" ) . $CGI::Pretty::LINEBREAK; +} + +sub _make_tag_func { + my ($self,$tagname) = @_; + return $self->SUPER::_make_tag_func($tagname) if $tagname=~/^(start|end)_/; + + # As Lincoln as noted, the last else clause is VERY hairy, and it + # took me a while to figure out what I was trying to do. + # What it does is look for tags that shouldn't be indented (e.g. PRE) + # and makes sure that when we nest tags, those tags don't get + # indented. + # For an example, try print td( pre( "hello\nworld" ) ); + # If we didn't care about stuff like that, the code would be + # MUCH simpler. BTW: I won't claim to be a regular expression + # guru, so if anybody wants to contribute something that would + # be quicker, easier to read, etc, I would be more than + # willing to put it in - Brian + + return qq{ + sub $tagname { + # handle various cases in which we're called + # most of this bizarre stuff is to avoid -w errors + shift if \$_[0] && + (!ref(\$_[0]) && \$_[0] eq \$CGI::DefaultClass) || + (ref(\$_[0]) && + (substr(ref(\$_[0]),0,3) eq 'CGI' || + UNIVERSAL::isa(\$_[0],'CGI'))); + + my(\$attr) = ''; + if (ref(\$_[0]) && ref(\$_[0]) eq 'HASH') { + my(\@attr) = make_attributes('',shift); + \$attr = " \@attr" if \@attr; + } + + my(\$tag,\$untag) = ("\U<$tagname\E\$attr>","\U\E"); + return \$tag unless \@_; + + my \@result; + my \$NON_PRETTIFY_ENDTAGS = join "", map { "" } \@CGI::Pretty::AS_IS; + + if ( \$NON_PRETTIFY_ENDTAGS =~ /\$untag/ ) { + \@result = map { "\$tag\$_\$untag\$CGI::Pretty::LINEBREAK" } + (ref(\$_[0]) eq 'ARRAY') ? \@{\$_[0]} : "\@_"; + } + else { + \@result = map { + chomp; + if ( \$_ !~ /<\\// ) { + s/\$CGI::Pretty::LINEBREAK/\$CGI::Pretty::LINEBREAK\$CGI::Pretty::INDENT/g; + } + else { + my \$tmp = \$_; + CGI::Pretty::_prettyPrint( \\\$tmp ); + \$_ = \$tmp; + } + "\$tag\$CGI::Pretty::LINEBREAK\$CGI::Pretty::INDENT\$_\$CGI::Pretty::LINEBREAK\$untag\$CGI::Pretty::LINEBREAK" } + (ref(\$_[0]) eq 'ARRAY') ? \@{\$_[0]} : "\@_"; + } + local \$" = ""; + return "\@result"; + } + }; +} + +sub start_html { + return CGI::start_html( @_ ) . $CGI::Pretty::LINEBREAK; +} + +sub end_html { + return CGI::end_html( @_ ) . $CGI::Pretty::LINEBREAK; +} + +sub new { + my $class = shift; + my $this = $class->SUPER::new( @_ ); + + Apache->request->register_cleanup(\&CGI::Pretty::_reset_globals) if ($CGI::MOD_PERL); + $class->_reset_globals if $CGI::PERLEX; + + return bless $this, $class; +} + +sub initialize_globals { + # This is the string used for indentation of tags + $CGI::Pretty::INDENT = "\t"; + + # This is the string used for seperation between tags + $CGI::Pretty::LINEBREAK = "\n"; + + # These tags are not prettify'd. + @CGI::Pretty::AS_IS = qw( A PRE CODE SCRIPT TEXTAREA ); + + 1; +} +sub _reset_globals { initialize_globals(); } + +1; + +=head1 NAME + +CGI::Pretty - module to produce nicely formatted HTML code + +=head1 SYNOPSIS + + use CGI::Pretty qw( :html3 ); + + # Print a table with a single data element + print table( TR( td( "foo" ) ) ); + +=head1 DESCRIPTION + +CGI::Pretty is a module that derives from CGI. It's sole function is to +allow users of CGI to output nicely formatted HTML code. + +When using the CGI module, the following code: + print table( TR( td( "foo" ) ) ); + +produces the following output: +
foo
+ +If a user were to create a table consisting of many rows and many columns, +the resultant HTML code would be quite difficult to read since it has no +carriage returns or indentation. + +CGI::Pretty fixes this problem. What it does is add a carriage +return and indentation to the HTML code so that one can easily read +it. + + print table( TR( td( "foo" ) ) ); + +now produces the following output: + + + + +
+ foo +
+ + +=head2 Tags that won't be formatted + +The and
 tags are not formatted.  If these tags were formatted, the
+user would see the extra indentation on the web browser causing the page to
+look different than what would be expected.  If you wish to add more tags to
+the list of tags that are not to be touched, push them onto the C<@AS_IS> array:
+
+    push @CGI::Pretty::AS_IS,qw(CODE XMP);
+
+=head2 Customizing the Indenting
+
+If you wish to have your own personal style of indenting, you can change the
+C<$INDENT> variable:
+
+    $CGI::Pretty::INDENT = "\t\t";
+
+would cause the indents to be two tabs.
+
+Similarly, if you wish to have more space between lines, you may change the
+C<$LINEBREAK> variable:
+
+    $CGI::Pretty::LINEBREAK = "\n\n";
+
+would create two carriage returns between lines.
+
+If you decide you want to use the regular CGI indenting, you can easily do 
+the following:
+
+    $CGI::Pretty::INDENT = $CGI::Pretty::LINEBREAK = "";
+
+=head1 BUGS
+
+This section intentionally left blank.
+
+=head1 AUTHOR
+
+Brian Paulsen , with minor modifications by
+Lincoln Stein  for incorporation into the CGI.pm
+distribution.
+
+Copyright 1999, Brian Paulsen.  All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+Bug reports and comments to Brian@ThePaulsens.com.  You can also write
+to lstein@cshl.org, but this code looks pretty hairy to me and I'm not
+sure I understand it!
+
+=head1 SEE ALSO
+
+L
+
+=cut
diff --git a/gnu/usr.bin/perl/lib/Carp/Heavy.pm b/gnu/usr.bin/perl/lib/Carp/Heavy.pm
new file mode 100644
index 00000000000..5e3de49418b
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Carp/Heavy.pm
@@ -0,0 +1,253 @@
+package Carp;
+
+=head1 NAME
+
+Carp::Heavy - Carp guts
+
+=head1 SYNOPIS
+
+(internal use only)
+
+=head1 DESCRIPTION
+
+No user-serviceable parts inside.
+
+=cut
+
+# This package is heavily used. Be small. Be fast. Be good.
+
+# Comments added by Andy Wardley  09-Apr-98, based on an
+# _almost_ complete understanding of the package.  Corrections and
+# comments are welcome.
+
+# longmess() crawls all the way up the stack reporting on all the function
+# calls made.  The error string, $error, is originally constructed from the
+# arguments passed into longmess() via confess(), cluck() or shortmess().
+# This gets appended with the stack trace messages which are generated for
+# each function call on the stack.
+
+sub longmess_heavy {
+    return @_ if ref $_[0];
+    my $error = join '', @_;
+    my $mess = "";
+    my $i = 1 + $CarpLevel;
+    my ($pack,$file,$line,$sub,$hargs,$eval,$require);
+    my (@a);
+    #
+    # crawl up the stack....
+    #
+    while (do { { package DB; @a = caller($i++) } } ) {
+	# get copies of the variables returned from caller()
+	($pack,$file,$line,$sub,$hargs,undef,$eval,$require) = @a;
+	#
+	# if the $error error string is newline terminated then it
+	# is copied into $mess.  Otherwise, $mess gets set (at the end of
+	# the 'else {' section below) to one of two things.  The first time
+	# through, it is set to the "$error at $file line $line" message.
+	# $error is then set to 'called' which triggers subsequent loop
+	# iterations to append $sub to $mess before appending the "$error
+	# at $file line $line" which now actually reads "called at $file line
+	# $line".  Thus, the stack trace message is constructed:
+	#
+	#        first time: $mess  = $error at $file line $line
+	#  subsequent times: $mess .= $sub $error at $file line $line
+	#                                  ^^^^^^
+	#                                 "called"
+	if ($error =~ m/\n$/) {
+	    $mess .= $error;
+	} else {
+	    # Build a string, $sub, which names the sub-routine called.
+	    # This may also be "require ...", "eval '...' or "eval {...}"
+	    if (defined $eval) {
+		if ($require) {
+		    $sub = "require $eval";
+		} else {
+		    $eval =~ s/([\\\'])/\\$1/g;
+		    if ($MaxEvalLen && length($eval) > $MaxEvalLen) {
+			substr($eval,$MaxEvalLen) = '...';
+		    }
+		    $sub = "eval '$eval'";
+		}
+	    } elsif ($sub eq '(eval)') {
+		$sub = 'eval {...}';
+	    }
+	    # if there are any arguments in the sub-routine call, format
+	    # them according to the format variables defined earlier in
+	    # this file and join them onto the $sub sub-routine string
+	    if ($hargs) {
+		# we may trash some of the args so we take a copy
+		@a = @DB::args;	# must get local copy of args
+		# don't print any more than $MaxArgNums
+		if ($MaxArgNums and @a > $MaxArgNums) {
+		    # cap the length of $#a and set the last element to '...'
+		    $#a = $MaxArgNums;
+		    $a[$#a] = "...";
+		}
+		for (@a) {
+		    # set args to the string "undef" if undefined
+		    $_ = "undef", next unless defined $_;
+		    if (ref $_) {
+			# force reference to string representation
+			$_ .= '';
+			s/'/\\'/g;
+		    }
+		    else {
+			s/'/\\'/g;
+			# terminate the string early with '...' if too long
+			substr($_,$MaxArgLen) = '...'
+			    if $MaxArgLen and $MaxArgLen < length;
+		    }
+		    # 'quote' arg unless it looks like a number
+		    $_ = "'$_'" unless /^-?[\d.]+$/;
+		    # print high-end chars as 'M-'
+		    s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
+		    # print remaining control chars as ^
+		    s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
+		}
+		# append ('all', 'the', 'arguments') to the $sub string
+		$sub .= '(' . join(', ', @a) . ')';
+	    }
+	    # here's where the error message, $mess, gets constructed
+	    $mess .= "\t$sub " if $error eq "called";
+	    $mess .= "$error at $file line $line";
+	    if (defined &Thread::tid) {
+		my $tid = Thread->self->tid;
+		$mess .= " thread $tid" if $tid;
+	    }
+	    $mess .= "\n";
+	}
+	# we don't need to print the actual error message again so we can
+	# change this to "called" so that the string "$error at $file line
+	# $line" makes sense as "called at $file line $line".
+	$error = "called";
+    }
+    # this kludge circumvents die's incorrect handling of NUL
+    my $msg = \($mess || $error);
+    $$msg =~ tr/\0//d;
+    $$msg;
+}
+
+
+# ancestors() returns the complete set of ancestors of a module
+
+sub ancestors($$);
+
+sub ancestors($$){
+    my( $pack, $href ) = @_;
+    if( @{"${pack}::ISA"} ){
+	my $risa = \@{"${pack}::ISA"};
+	my %tree  = ();
+	@tree{@$risa} = ();
+	foreach my $mod ( @$risa ){
+	    # visit ancestors - if not already in the gallery
+	    if( ! defined( $$href{$mod} ) ){
+		my @ancs = ancestors( $mod, $href );
+		@tree{@ancs} = ();
+	    }
+	}
+	return ( keys( %tree ) );
+    } else {
+	return ();
+    }
+}
+
+
+# shortmess() is called by carp() and croak() to skip all the way up to
+# the top-level caller's package and report the error from there.  confess()
+# and cluck() generate a full stack trace so they call longmess() to
+# generate that.  In verbose mode shortmess() calls longmess() so
+# you always get a stack trace
+
+sub shortmess_heavy {	# Short-circuit &longmess if called via multiple packages
+    goto &longmess_heavy if $Verbose;
+    return @_ if ref $_[0];
+    my $error = join '', @_;
+    my ($prevpack) = caller(1);
+    my $extra = $CarpLevel;
+
+    my @Clans = ( $prevpack );
+    my $i = 2;
+    my ($pack,$file,$line);
+    # when reporting an error, we want to report it from the context of the
+    # calling package.  So what is the calling package?  Within a module,
+    # there may be many calls between methods and perhaps between sub-classes
+    # and super-classes, but the user isn't interested in what happens
+    # inside the package.  We start by building a hash array which keeps
+    # track of all the packages to which the calling package belongs.  We
+    # do this by examining its @ISA variable.  Any call from a base class
+    # method (one of our caller's @ISA packages) can be ignored
+    my %isa;
+
+    # merge all the caller's @ISA packages and ancestors into %isa.
+    my @pars = ancestors( $prevpack, \%isa );
+    @isa{@pars} = () if @pars;
+    $isa{$prevpack} = 1;
+
+    # now we crawl up the calling stack and look at all the packages in
+    # there.  For each package, we look to see if it has an @ISA and then
+    # we see if our caller features in that list.  That would imply that
+    # our caller is a derived class of that package and its calls can also
+    # be ignored
+CALLER:
+    while (($pack,$file,$line) = caller($i++)) {
+
+        # Chances are, the caller's caller (or its caller...) is already
+        # in the gallery - if so, ignore this caller.
+        next if exists( $isa{$pack} );
+
+        # no: collect this module's ancestors.
+        my @i = ancestors( $pack, \%isa );
+        my %i;
+        if( @i ){
+ 	    @i{@i} = ();
+            # check whether our representative of one of the clans is
+            # in this family tree.
+	    foreach my $cl (@Clans){
+                if( exists( $i{$cl} ) ){
+    	            # yes: merge all of the family tree into %isa
+	            @isa{@i,$pack} = ();
+		    # and here's where we do some more ignoring...
+		    # if the package in question is one of our caller's
+		    # base or derived packages then we can ignore it (skip it)
+		    # and go onto the next.
+		    next CALLER if exists( $isa{$pack} );
+		    last;
+		}
+            }
+	}
+
+	# Hey!  We've found a package that isn't one of our caller's
+	# clan....but wait, $extra refers to the number of 'extra' levels
+	# we should skip up.  If $extra > 0 then this is a false alarm.
+	# We must merge the package into the %isa hash (so we can ignore it
+	# if it pops up again), decrement $extra, and continue.
+	if ($extra-- > 0) {
+	    push( @Clans, $pack );
+	    @isa{@i,$pack} = ();
+	}
+	else {
+	    # OK!  We've got a candidate package.  Time to construct the
+	    # relevant error message and return it.   die() doesn't like
+	    # to be given NUL characters (which $msg may contain) so we
+	    # remove them first.
+	    my $msg;
+	    $msg = "$error at $file line $line";
+	    if (defined &Thread::tid) {
+		my $tid = Thread->self->tid;
+		$mess .= " thread $tid" if $tid;
+	    }
+	    $msg .= "\n";
+	    $msg =~ tr/\0//d;
+	    return $msg;
+	}
+    }
+
+    # uh-oh!  It looks like we crawled all the way up the stack and
+    # never found a candidate package.  Oh well, let's call longmess
+    # to generate a full stack trace.  We use the magical form of 'goto'
+    # so that this shortmess() function doesn't appear on the stack
+    # to further confuse longmess() about it's calling package.
+    goto &longmess_heavy;
+}
+
+1;
diff --git a/gnu/usr.bin/perl/lib/DB.pm b/gnu/usr.bin/perl/lib/DB.pm
new file mode 100644
index 00000000000..711acc085d1
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/DB.pm
@@ -0,0 +1,802 @@
+#
+# Documentation is at the __END__
+#
+
+package DB;
+
+# "private" globals
+
+my ($running, $ready, $deep, $usrctxt, $evalarg, 
+    @stack, @saved, @skippkg, @clients);
+my $preeval = {};
+my $posteval = {};
+my $ineval = {};
+
+####
+#
+# Globals - must be defined at startup so that clients can refer to 
+# them right after a C
+#
+####
+
+BEGIN {
+
+  # these are hardcoded in perl source (some are magical)
+
+  $DB::sub = '';        # name of current subroutine
+  %DB::sub = ();        # "filename:fromline-toline" for every known sub
+  $DB::single = 0;      # single-step flag (set it to 1 to enable stops in BEGIN/use)
+  $DB::signal = 0;      # signal flag (will cause a stop at the next line)
+  $DB::trace = 0;       # are we tracing through subroutine calls?
+  @DB::args = ();       # arguments of current subroutine or @ARGV array
+  @DB::dbline = ();     # list of lines in currently loaded file
+  %DB::dbline = ();     # actions in current file (keyed by line number)
+  @DB::ret = ();        # return value of last sub executed in list context
+  $DB::ret = '';        # return value of last sub executed in scalar context
+
+  # other "public" globals  
+
+  $DB::package = '';    # current package space
+  $DB::filename = '';   # current filename
+  $DB::subname = '';    # currently executing sub (fullly qualified name)
+  $DB::lineno = '';     # current line number
+
+  $DB::VERSION = $DB::VERSION = '1.0';
+
+  # initialize private globals to avoid warnings
+
+  $running = 1;         # are we running, or are we stopped?
+  @stack = (0);
+  @clients = ();
+  $deep = 100;
+  $ready = 0;
+  @saved = ();
+  @skippkg = ();
+  $usrctxt = '';
+  $evalarg = '';
+}
+
+####
+# entry point for all subroutine calls
+#
+sub sub {
+  push(@stack, $DB::single);
+  $DB::single &= 1;
+  $DB::single |= 4 if $#stack == $deep;
+#  print $DB::sub, "\n";
+  if ($DB::sub =~ /(?:^|::)DESTROY$/ or not defined wantarray) {
+    &$DB::sub;
+    $DB::single |= pop(@stack);
+    $DB::ret = undef;
+  }
+  elsif (wantarray) {
+    @DB::ret = &$DB::sub;
+    $DB::single |= pop(@stack);
+    @DB::ret;
+  }
+  else {
+    $DB::ret = &$DB::sub;
+    $DB::single |= pop(@stack);
+    $DB::ret;
+  }
+}
+
+####
+# this is called by perl for every statement
+#
+sub DB {
+  return unless $ready;
+  &save;
+  ($DB::package, $DB::filename, $DB::lineno) = caller;
+
+  return if @skippkg and grep { $_ eq $DB::package } @skippkg;
+
+  $usrctxt = "package $DB::package;";		# this won't let them modify, alas
+  local(*DB::dbline) = "::_<$DB::filename";
+  my ($stop, $action);
+  if (($stop,$action) = split(/\0/,$DB::dbline{$DB::lineno})) {
+    if ($stop eq '1') {
+      $DB::signal |= 1;
+    }
+    else {
+      $stop = 0 unless $stop;			# avoid un_init warning
+      $evalarg = "\$DB::signal |= do { $stop; }"; &eval;
+      $DB::dbline{$DB::lineno} =~ s/;9($|\0)/$1/;    # clear any temp breakpt
+    }
+  }
+  if ($DB::single || $DB::trace || $DB::signal) {
+    $DB::subname = ($DB::sub =~ /\'|::/) ? $DB::sub : "${DB::package}::$DB::sub"; #';
+    DB->loadfile($DB::filename, $DB::lineno);
+  }
+  $evalarg = $action, &eval if $action;
+  if ($DB::single || $DB::signal) {
+    _outputall($#stack . " levels deep in subroutine calls.\n") if $DB::single & 4;
+    $DB::single = 0;
+    $DB::signal = 0;
+    $running = 0;
+    
+    &eval if ($evalarg = DB->prestop);
+    my $c;
+    for $c (@clients) {
+      # perform any client-specific prestop actions
+      &eval if ($evalarg = $c->cprestop);
+      
+      # Now sit in an event loop until something sets $running
+      do {
+	$c->idle;                     # call client event loop; must not block
+	if ($running == 2) {          # client wants something eval-ed
+	  &eval if ($evalarg = $c->evalcode);
+	  $running = 0;
+	}
+      } until $running;
+      
+      # perform any client-specific poststop actions
+      &eval if ($evalarg = $c->cpoststop);
+    }
+    &eval if ($evalarg = DB->poststop);
+  }
+  ($@, $!, $,, $/, $\, $^W) = @saved;
+  ();
+}
+  
+####
+# this takes its argument via $evalarg to preserve current @_
+#    
+sub eval {
+  ($@, $!, $,, $/, $\, $^W) = @saved;
+  eval "$usrctxt $evalarg; &DB::save";
+  _outputall($@) if $@;
+}
+
+###############################################################################
+#         no compile-time subroutine call allowed before this point           #
+###############################################################################
+
+use strict;                # this can run only after DB() and sub() are defined
+
+sub save {
+  @saved = ($@, $!, $,, $/, $\, $^W);
+  $, = ""; $/ = "\n"; $\ = ""; $^W = 0;
+}
+
+sub catch {
+  for (@clients) { $_->awaken; }
+  $DB::signal = 1;
+  $ready = 1;
+}
+
+####
+#
+# Client callable (read inheritable) methods defined after this point
+#
+####
+
+sub register {
+  my $s = shift;
+  $s = _clientname($s) if ref($s);
+  push @clients, $s;
+}
+
+sub done {
+  my $s = shift;
+  $s = _clientname($s) if ref($s);
+  @clients = grep {$_ ne $s} @clients;
+  $s->cleanup;
+#  $running = 3 unless @clients;
+  exit(0) unless @clients;
+}
+
+sub _clientname {
+  my $name = shift;
+  "$name" =~ /^(.+)=[A-Z]+\(.+\)$/;
+  return $1;
+}
+
+sub next {
+  my $s = shift;
+  $DB::single = 2;
+  $running = 1;
+}
+
+sub step {
+  my $s = shift;
+  $DB::single = 1;
+  $running = 1;
+}
+
+sub cont {
+  my $s = shift;
+  my $i = shift;
+  $s->set_tbreak($i) if $i;
+  for ($i = 0; $i <= $#stack;) {
+	$stack[$i++] &= ~1;
+  }
+  $DB::single = 0;
+  $running = 1;
+}
+
+####
+# XXX caller must experimentally determine $i (since it depends
+# on how many client call frames are between this call and the DB call).
+# Such is life.
+#
+sub ret {
+  my $s = shift;
+  my $i = shift;      # how many levels to get to DB sub
+  $i = 0 unless defined $i;
+  $stack[$#stack-$i] |= 1;
+  $DB::single = 0;
+  $running = 1;
+}
+
+####
+# XXX caller must experimentally determine $start (since it depends
+# on how many client call frames are between this call and the DB call).
+# Such is life.
+#
+sub backtrace {
+  my $self = shift;
+  my $start = shift;
+  my($p,$f,$l,$s,$h,$w,$e,$r,$a, @a, @ret,$i);
+  $start = 1 unless $start;
+  for ($i = $start; ($p,$f,$l,$s,$h,$w,$e,$r) = caller($i); $i++) {
+    @a = @DB::args;
+    for (@a) {
+      s/'/\\'/g;
+      s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/;
+      s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
+      s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
+    }
+    $w = $w ? '@ = ' : '$ = ';
+    $a = $h ? '(' . join(', ', @a) . ')' : '';
+    $e =~ s/\n\s*\;\s*\Z// if $e;
+    $e =~ s/[\\\']/\\$1/g if $e;
+    if ($r) {
+      $s = "require '$e'";
+    } elsif (defined $r) {
+      $s = "eval '$e'";
+    } elsif ($s eq '(eval)') {
+      $s = "eval {...}";
+    }
+    $f = "file `$f'" unless $f eq '-e';
+    push @ret, "$w&$s$a from $f line $l";
+    last if $DB::signal;
+  }
+  return @ret;
+}
+
+sub _outputall {
+  my $c;
+  for $c (@clients) {
+    $c->output(@_);
+  }
+}
+
+sub trace_toggle {
+  my $s = shift;
+  $DB::trace = !$DB::trace;
+}
+
+
+####
+# without args: returns all defined subroutine names
+# with subname args: returns a listref [file, start, end]
+#
+sub subs {
+  my $s = shift;
+  if (@_) {
+    my(@ret) = ();
+    while (@_) {
+      my $name = shift;
+      push @ret, [$DB::sub{$name} =~ /^(.*)\:(\d+)-(\d+)$/] 
+	if exists $DB::sub{$name};
+    }
+    return @ret;
+  }
+  return keys %DB::sub;
+}
+
+####
+# first argument is a filename whose subs will be returned
+# if a filename is not supplied, all subs in the current
+# filename are returned.
+#
+sub filesubs {
+  my $s = shift;
+  my $fname = shift;
+  $fname = $DB::filename unless $fname;
+  return grep { $DB::sub{$_} =~ /^$fname/ } keys %DB::sub;
+}
+
+####
+# returns a list of all filenames that DB knows about
+#
+sub files {
+  my $s = shift;
+  my(@f) = grep(m|^_<|, keys %main::);
+  return map { substr($_,2) } @f;
+}
+
+####
+# returns reference to an array holding the lines in currently
+# loaded file
+#
+sub lines {
+  my $s = shift;
+  return \@DB::dbline;
+}
+
+####
+# loadfile($file, $line)
+#
+sub loadfile {
+  my $s = shift;
+  my($file, $line) = @_;
+  if (!defined $main::{'_<' . $file}) {
+    my $try;
+    if (($try) = grep(m|^_<.*$file|, keys %main::)) {  
+      $file = substr($try,2);
+    }
+  }
+  if (defined($main::{'_<' . $file})) {
+    my $c;
+#    _outputall("Loading file $file..");
+    *DB::dbline = "::_<$file";
+    $DB::filename = $file;
+    for $c (@clients) {
+#      print "2 ", $file, '|', $line, "\n";
+      $c->showfile($file, $line);
+    }
+    return $file;
+  }
+  return undef;
+}
+
+sub lineevents {
+  my $s = shift;
+  my $fname = shift;
+  my(%ret) = ();
+  my $i;
+  $fname = $DB::filename unless $fname;
+  local(*DB::dbline) = "::_<$fname";
+  for ($i = 1; $i <= $#DB::dbline; $i++) {
+    $ret{$i} = [$DB::dbline[$i], split(/\0/, $DB::dbline{$i})] 
+      if defined $DB::dbline{$i};
+  }
+  return %ret;
+}
+
+sub set_break {
+  my $s = shift;
+  my $i = shift;
+  my $cond = shift;
+  $i ||= $DB::lineno;
+  $cond ||= '1';
+  $i = _find_subline($i) if ($i =~ /\D/);
+  $s->output("Subroutine not found.\n") unless $i;
+  if ($i) {
+    if ($DB::dbline[$i] == 0) {
+      $s->output("Line $i not breakable.\n");
+    }
+    else {
+      $DB::dbline{$i} =~ s/^[^\0]*/$cond/;
+    }
+  }
+}
+
+sub set_tbreak {
+  my $s = shift;
+  my $i = shift;
+  $i = _find_subline($i) if ($i =~ /\D/);
+  $s->output("Subroutine not found.\n") unless $i;
+  if ($i) {
+    if ($DB::dbline[$i] == 0) {
+      $s->output("Line $i not breakable.\n");
+    }
+    else {
+      $DB::dbline{$i} =~ s/($|\0)/;9$1/; # add one-time-only b.p.
+    }
+  }
+}
+
+sub _find_subline {
+  my $name = shift;
+  $name =~ s/\'/::/;
+  $name = "${DB::package}\:\:" . $name if $name !~ /::/;
+  $name = "main" . $name if substr($name,0,2) eq "::";
+  my($fname, $from, $to) = ($DB::sub{$name} =~ /^(.*):(\d+)-(\d+)$/);
+  if ($from) {
+    # XXX this needs local()-ization of some sort
+    *DB::dbline = "::_<$fname";
+    ++$from while $DB::dbline[$from] == 0 && $from < $to;
+    return $from;
+  }
+  return undef;
+}
+
+sub clr_breaks {
+  my $s = shift;
+  my $i;
+  if (@_) {
+    while (@_) {
+      $i = shift;
+      $i = _find_subline($i) if ($i =~ /\D/);
+      $s->output("Subroutine not found.\n") unless $i;
+      if (defined $DB::dbline{$i}) {
+        $DB::dbline{$i} =~ s/^[^\0]+//;
+        if ($DB::dbline{$i} =~ s/^\0?$//) {
+          delete $DB::dbline{$i};
+        }
+      }
+    }
+  }
+  else {
+    for ($i = 1; $i <= $#DB::dbline ; $i++) {
+      if (defined $DB::dbline{$i}) {
+        $DB::dbline{$i} =~ s/^[^\0]+//;
+        if ($DB::dbline{$i} =~ s/^\0?$//) {
+          delete $DB::dbline{$i};
+        }
+      }
+    }
+  }
+}
+
+sub set_action {
+  my $s = shift;
+  my $i = shift;
+  my $act = shift;
+  $i = _find_subline($i) if ($i =~ /\D/);
+  $s->output("Subroutine not found.\n") unless $i;
+  if ($i) {
+    if ($DB::dbline[$i] == 0) {
+      $s->output("Line $i not actionable.\n");
+    }
+    else {
+      $DB::dbline{$i} =~ s/\0[^\0]*//;
+      $DB::dbline{$i} .= "\0" . $act;
+    }
+  }
+}
+
+sub clr_actions {
+  my $s = shift;
+  my $i;
+  if (@_) {
+    while (@_) {
+      my $i = shift;
+      $i = _find_subline($i) if ($i =~ /\D/);
+      $s->output("Subroutine not found.\n") unless $i;
+      if ($i && $DB::dbline[$i] != 0) {
+	$DB::dbline{$i} =~ s/\0[^\0]*//;
+	delete $DB::dbline{$i} if $DB::dbline{$i} =~ s/^\0?$//;
+      }
+    }
+  }
+  else {
+    for ($i = 1; $i <= $#DB::dbline ; $i++) {
+      if (defined $DB::dbline{$i}) {
+	$DB::dbline{$i} =~ s/\0[^\0]*//;
+	delete $DB::dbline{$i} if $DB::dbline{$i} =~ s/^\0?$//;
+      }
+    }
+  }
+}
+
+sub prestop {
+  my ($client, $val) = @_;
+  return defined($val) ? $preeval->{$client} = $val : $preeval->{$client};
+}
+
+sub poststop {
+  my ($client, $val) = @_;
+  return defined($val) ? $posteval->{$client} = $val : $posteval->{$client};
+}
+
+#
+# "pure virtual" methods
+#
+
+# client-specific pre/post-stop actions.
+sub cprestop {}
+sub cpoststop {}
+
+# client complete startup
+sub awaken {}
+
+sub skippkg {
+  my $s = shift;
+  push @skippkg, @_ if @_;
+}
+
+sub evalcode {
+  my ($client, $val) = @_;
+  if (defined $val) {
+    $running = 2;    # hand over to DB() to evaluate in its context
+    $ineval->{$client} = $val;
+  }
+  return $ineval->{$client};
+}
+
+sub ready {
+  my $s = shift;
+  return $ready = 1;
+}
+
+# stubs
+    
+sub init {}
+sub stop {}
+sub idle {}
+sub cleanup {}
+sub output {}
+
+#
+# client init
+#
+for (@clients) { $_->init }
+
+$SIG{'INT'} = \&DB::catch;
+
+# disable this if stepping through END blocks is desired
+# (looks scary and deconstructivist with Swat)
+END { $ready = 0 }
+
+1;
+__END__
+
+=head1 NAME
+
+DB - programmatic interface to the Perl debugging API (draft, subject to
+change)
+
+=head1 SYNOPSIS
+
+    package CLIENT;
+    use DB;
+    @ISA = qw(DB);
+
+    # these (inherited) methods can be called by the client
+
+    CLIENT->register()      # register a client package name
+    CLIENT->done()          # de-register from the debugging API
+    CLIENT->skippkg('hide::hide')  # ask DB not to stop in this package
+    CLIENT->cont([WHERE])       # run some more (until BREAK or another breakpt)
+    CLIENT->step()              # single step
+    CLIENT->next()              # step over
+    CLIENT->ret()               # return from current subroutine
+    CLIENT->backtrace()         # return the call stack description
+    CLIENT->ready()             # call when client setup is done
+    CLIENT->trace_toggle()      # toggle subroutine call trace mode
+    CLIENT->subs([SUBS])        # return subroutine information
+    CLIENT->files()             # return list of all files known to DB
+    CLIENT->lines()             # return lines in currently loaded file
+    CLIENT->loadfile(FILE,LINE) # load a file and let other clients know
+    CLIENT->lineevents()        # return info on lines with actions
+    CLIENT->set_break([WHERE],[COND])
+    CLIENT->set_tbreak([WHERE])
+    CLIENT->clr_breaks([LIST])
+    CLIENT->set_action(WHERE,ACTION)
+    CLIENT->clr_actions([LIST])
+    CLIENT->evalcode(STRING)  # eval STRING in executing code's context
+    CLIENT->prestop([STRING]) # execute in code context before stopping
+    CLIENT->poststop([STRING])# execute in code context before resuming
+
+    # These methods will be called at the appropriate times.
+    # Stub versions provided do nothing.
+    # None of these can block.
+
+    CLIENT->init()          # called when debug API inits itself
+    CLIENT->stop(FILE,LINE) # when execution stops
+    CLIENT->idle()          # while stopped (can be a client event loop)
+    CLIENT->cleanup()       # just before exit
+    CLIENT->output(LIST)    # called to print any output that API must show
+
+=head1 DESCRIPTION
+
+Perl debug information is frequently required not just by debuggers,
+but also by modules that need some "special" information to do their
+job properly, like profilers.
+
+This module abstracts and provides all of the hooks into Perl internal
+debugging functionality, so that various implementations of Perl debuggers
+(or packages that want to simply get at the "privileged" debugging data)
+can all benefit from the development of this common code.  Currently used
+by Swat, the perl/Tk GUI debugger.
+
+Note that multiple "front-ends" can latch into this debugging API
+simultaneously.  This is intended to facilitate things like
+debugging with a command line and GUI at the same time, debugging 
+debuggers etc.  [Sounds nice, but this needs some serious support -- GSAR]
+
+In particular, this API does B provide the following functions:
+
+=over 4
+
+=item *
+
+data display
+
+=item *
+
+command processing
+
+=item *
+
+command alias management
+
+=item *
+
+user interface (tty or graphical)
+
+=back
+
+These are intended to be services performed by the clients of this API.
+
+This module attempts to be squeaky clean w.r.t C and when
+warnings are enabled.
+
+
+=head2 Global Variables
+
+The following "public" global names can be read by clients of this API.
+Beware that these should be considered "readonly".
+
+=over 8
+
+=item  $DB::sub
+
+Name of current executing subroutine.
+
+=item  %DB::sub
+
+The keys of this hash are the names of all the known subroutines.  Each value
+is an encoded string that has the sprintf(3) format 
+C<("%s:%d-%d", filename, fromline, toline)>.
+
+=item  $DB::single
+
+Single-step flag.  Will be true if the API will stop at the next statement.
+
+=item  $DB::signal
+
+Signal flag. Will be set to a true value if a signal was caught.  Clients may
+check for this flag to abort time-consuming operations.
+
+=item  $DB::trace
+
+This flag is set to true if the API is tracing through subroutine calls.
+
+=item  @DB::args
+
+Contains the arguments of current subroutine, or the C<@ARGV> array if in the 
+toplevel context.
+
+=item  @DB::dbline
+
+List of lines in currently loaded file.
+
+=item  %DB::dbline
+
+Actions in current file (keys are line numbers).  The values are strings that
+have the sprintf(3) format C<("%s\000%s", breakcondition, actioncode)>. 
+
+=item  $DB::package
+
+Package namespace of currently executing code.
+
+=item  $DB::filename
+
+Currently loaded filename.
+
+=item  $DB::subname
+
+Fully qualified name of currently executing subroutine.
+
+=item  $DB::lineno
+
+Line number that will be executed next.
+
+=back
+
+=head2 API Methods
+
+The following are methods in the DB base class.  A client must
+access these methods by inheritance (*not* by calling them directly),
+since the API keeps track of clients through the inheritance
+mechanism.
+
+=over 8
+
+=item CLIENT->register()
+
+register a client object/package
+
+=item CLIENT->evalcode(STRING)
+
+eval STRING in executing code context
+
+=item CLIENT->skippkg('D::hide')
+
+ask DB not to stop in these packages
+
+=item CLIENT->run()
+
+run some more (until a breakpt is reached)
+
+=item CLIENT->step()
+
+single step
+
+=item CLIENT->next()
+
+step over
+
+=item CLIENT->done()
+
+de-register from the debugging API
+
+=back
+
+=head2 Client Callback Methods
+
+The following "virtual" methods can be defined by the client.  They will
+be called by the API at appropriate points.  Note that unless specified
+otherwise, the debug API only defines empty, non-functional default versions
+of these methods.
+
+=over 8
+
+=item CLIENT->init()
+
+Called after debug API inits itself.
+
+=item CLIENT->prestop([STRING])
+
+Usually inherited from DB package.  If no arguments are passed,
+returns the prestop action string.
+
+=item CLIENT->stop()
+
+Called when execution stops (w/ args file, line).
+
+=item CLIENT->idle()
+
+Called while stopped (can be a client event loop).
+
+=item CLIENT->poststop([STRING])
+
+Usually inherited from DB package.  If no arguments are passed,
+returns the poststop action string.
+
+=item CLIENT->evalcode(STRING)
+
+Usually inherited from DB package.  Ask for a STRING to be C-ed
+in executing code context.
+
+=item CLIENT->cleanup()
+
+Called just before exit.
+
+=item CLIENT->output(LIST)
+
+Called when API must show a message (warnings, errors etc.).
+
+
+=back
+
+
+=head1 BUGS
+
+The interface defined by this module is missing some of the later additions
+to perl's debugging functionality.  As such, this interface should be considered
+highly experimental and subject to change.
+
+=head1 AUTHOR
+
+Gurusamy Sarathy	gsar@activestate.com
+
+This code heavily adapted from an early version of perl5db.pl attributable
+to Larry Wall and the Perl Porters.
+
+=cut
diff --git a/gnu/usr.bin/perl/lib/Dumpvalue.pm b/gnu/usr.bin/perl/lib/Dumpvalue.pm
index 5bcd58f4fba..475f4ff7259 100644
--- a/gnu/usr.bin/perl/lib/Dumpvalue.pm
+++ b/gnu/usr.bin/perl/lib/Dumpvalue.pm
@@ -1,7 +1,7 @@
-require 5.005;			# For (defined ref) and $#$v
+use 5.005_64;			# for (defined ref) and $#$v and our
 package Dumpvalue;
 use strict;
-use vars qw(%address *stab %subs);
+our(%address, $stab, @stab, %stab, %subs);
 
 # translate control chars to ^X - Randal Schwartz
 # Modifications to print types by Peter Gordon v1.0
@@ -91,7 +91,7 @@ sub stringify {
   { no strict 'refs';
     $_ = &{'overload::StrVal'}($_)
       if $self->{bareStringify} and ref $_
-	and defined %overload:: and defined &{'overload::StrVal'};
+	and %overload:: and defined &{'overload::StrVal'};
   }
 
   if ($tick eq 'auto') {
@@ -162,7 +162,7 @@ sub unwrap {
     my $val = $v;
     { no strict 'refs';
       $val = &{'overload::StrVal'}($v)
-	if defined %overload:: and defined &{'overload::StrVal'};
+	if %overload:: and defined &{'overload::StrVal'};
     }
     ($address) = $val =~ /(0x[0-9a-f]+)\)$/ ;
     if (!$self->{dumpReused} && defined $address) {
@@ -181,6 +181,13 @@ sub unwrap {
     }
   }
 
+  if (ref $v eq 'Regexp') {
+    my $re = "$v";
+    $re =~ s,/,\\/,g;
+    print "$sp-> qr/$re/\n";
+    return;
+  }
+
   if ( UNIVERSAL::isa($v, 'HASH') ) {
     my @sortKeys = sort keys(%$v) ;
     my $more;
@@ -220,9 +227,9 @@ sub unwrap {
     if ($self->{compactDump} && !grep(ref $_, @{$v})) {
       if ($#$v >= 0) {
 	$short = $sp . "0..$#{$v}  " .
-	  join(" ",
-	       map {$self->stringify($_)} @{$v}[0..$tArrayDepth])
-	    . "$shortmore";
+	  join(" ", 
+	       map {exists $v->[$_] ? $self->stringify($v->[$_]) : "empty"} ($[..$tArrayDepth)
+	      ) . "$shortmore";
       } else {
 	$short = $sp . "empty array";
       }
@@ -231,7 +238,11 @@ sub unwrap {
     for my $num ($[ .. $tArrayDepth) {
       return if $DB::signal and $self->{stopDbSignal};
       print "$sp$num  ";
-      $self->DumpElem($v->[$num], $s);
+      if (exists $v->[$num]) {
+        $self->DumpElem($v->[$num], $s);
+      } else {
+	print "empty slot\n";
+      }
     }
     print "$sp  empty array\n" unless @$v;
     print "$sp$more" if defined $more ;
@@ -317,12 +328,12 @@ sub dumpglob {
     print( (' ' x $off) . "\$", &unctrl($key), " = " );
     $self->DumpElem($stab, 3+$off);
   }
-  if (($key !~ /^_{dumpDBFiles}) and defined @stab) {
+  if (($key !~ /^_{dumpDBFiles}) and @stab) {
     print( (' ' x $off) . "\@$key = (\n" );
     $self->unwrap(\@stab,3+$off) ;
     print( (' ' x $off) .  ")\n" );
   }
-  if ($key ne "main::" && $key ne "DB::" && defined %stab
+  if ($key ne "main::" && $key ne "DB::" && %stab
       && ($self->{dumpPackages} or $key !~ /::$/)
       && ($key !~ /^_{dumpDBFiles})
       && !($package eq "Dumpvalue" and $key eq "stab")) {
@@ -340,21 +351,35 @@ sub dumpglob {
   }
 }
 
+sub CvGV_name {
+  my $self = shift;
+  my $in = shift;
+  return if $self->{skipCvGV};	# Backdoor to avoid problems if XS broken...
+  $in = \&$in;			# Hard reference...
+  eval {require Devel::Peek; 1} or return;
+  my $gv = Devel::Peek::CvGV($in) or return;
+  *$gv{PACKAGE} . '::' . *$gv{NAME};
+}
+
 sub dumpsub {
   my $self = shift;
   my ($off,$sub) = @_;
+  my $ini = $sub;
+  my $s;
   $sub = $1 if $sub =~ /^\{\*(.*)\}$/;
-  my $subref = \&$sub;
-  my $place = $DB::sub{$sub} || (($sub = $subs{"$subref"}) && $DB::sub{$sub})
-    || ($self->{subdump} && ($sub = $self->findsubs("$subref"))
-	&& $DB::sub{$sub});
+  my $subref = defined $1 ? \&$sub : \&$ini;
+  my $place = $DB::sub{$sub} || (($s = $subs{"$subref"}) && $DB::sub{$s})
+    || (($s = $self->CvGV_name($subref)) && $DB::sub{$s})
+    || ($self->{subdump} && ($s = $self->findsubs("$subref"))
+	&& $DB::sub{$s});
+  $s = $sub unless defined $s;
   $place = '???' unless defined $place;
-  print( (' ' x $off) .  "&$sub in $place\n" );
+  print( (' ' x $off) .  "&$s in $place\n" );
 }
 
 sub findsubs {
   my $self = shift;
-  return undef unless defined %DB::sub;
+  return undef unless %DB::sub;
   my ($addr, $name, $loc);
   while (($name, $loc) = each %DB::sub) {
     $addr = \&$name;
@@ -383,7 +408,8 @@ sub dumpvars {
     next if @vars && !grep( matchvar($key, $_), @vars );
     if ($self->{usageOnly}) {
       $self->globUsage(\$val, $key)
-	unless $package eq 'Dumpvalue' and $key eq 'stab';
+	if ($package ne 'Dumpvalue' or $key ne 'stab')
+	   and ref(\$val) eq 'GLOB';
     } else {
       $self->dumpglob($package, 0,$key, $val);
     }
@@ -437,9 +463,9 @@ sub globUsage {			# glob ref, name
   local *stab = *{$_[0]};
   my $total = 0;
   $total += $self->scalarUsage($stab) if defined $stab;
-  $total += $self->arrayUsage(\@stab, $_[1]) if defined @stab;
+  $total += $self->arrayUsage(\@stab, $_[1]) if @stab;
   $total += $self->hashUsage(\%stab, $_[1]) 
-    if defined %stab and $_[1] ne "main::" and $_[1] ne "DB::";	
+    if %stab and $_[1] ne "main::" and $_[1] ne "DB::";	
   #and !($package eq "Dumpvalue" and $key eq "stab"));
   $total;
 }
@@ -450,7 +476,7 @@ sub globUsage {			# glob ref, name
 
 Dumpvalue - provides screen dump of Perl data.
 
-=head1 SYNOPSYS
+=head1 SYNOPSIS
 
   use Dumpvalue;
   my $dumper = new Dumpvalue;
diff --git a/gnu/usr.bin/perl/lib/Exporter/Heavy.pm b/gnu/usr.bin/perl/lib/Exporter/Heavy.pm
new file mode 100644
index 00000000000..6647f7075cb
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Exporter/Heavy.pm
@@ -0,0 +1,225 @@
+package Exporter;
+
+=head1 NAME
+
+Exporter::Heavy - Exporter guts
+
+=head1 SYNOPIS
+
+(internal use only)
+
+=head1 DESCRIPTION
+
+No user-serviceable parts inside.
+
+=cut
+#
+# We go to a lot of trouble not to 'require Carp' at file scope,
+#  because Carp requires Exporter, and something has to give.
+#
+
+sub heavy_export {
+
+    # First make import warnings look like they're coming from the "use".
+    local $SIG{__WARN__} = sub {
+	my $text = shift;
+	if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
+	    require Carp;
+	    local $Carp::CarpLevel = 1;	# ignore package calling us too.
+	    Carp::carp($text);
+	}
+	else {
+	    warn $text;
+	}
+    };
+    local $SIG{__DIE__} = sub {
+	require Carp;
+	local $Carp::CarpLevel = 1;	# ignore package calling us too.
+	Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
+	    if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
+    };
+
+    my($pkg, $callpkg, @imports) = @_;
+    my($type, $sym, $oops);
+    *exports = *{"${pkg}::EXPORT"};
+
+    if (@imports) {
+	if (!%exports) {
+	    grep(s/^&//, @exports);
+	    @exports{@exports} = (1) x @exports;
+	    my $ok = \@{"${pkg}::EXPORT_OK"};
+	    if (@$ok) {
+		grep(s/^&//, @$ok);
+		@exports{@$ok} = (1) x @$ok;
+	    }
+	}
+
+	if ($imports[0] =~ m#^[/!:]#){
+	    my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
+	    my $tagdata;
+	    my %imports;
+	    my($remove, $spec, @names, @allexports);
+	    # negated first item implies starting with default set:
+	    unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
+	    foreach $spec (@imports){
+		$remove = $spec =~ s/^!//;
+
+		if ($spec =~ s/^://){
+		    if ($spec eq 'DEFAULT'){
+			@names = @exports;
+		    }
+		    elsif ($tagdata = $tagsref->{$spec}) {
+			@names = @$tagdata;
+		    }
+		    else {
+			warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
+			++$oops;
+			next;
+		    }
+		}
+		elsif ($spec =~ m:^/(.*)/$:){
+		    my $patn = $1;
+		    @allexports = keys %exports unless @allexports; # only do keys once
+		    @names = grep(/$patn/, @allexports); # not anchored by default
+		}
+		else {
+		    @names = ($spec); # is a normal symbol name
+		}
+
+		warn "Import ".($remove ? "del":"add").": @names "
+		    if $Verbose;
+
+		if ($remove) {
+		   foreach $sym (@names) { delete $imports{$sym} } 
+		}
+		else {
+		    @imports{@names} = (1) x @names;
+		}
+	    }
+	    @imports = keys %imports;
+	}
+
+	foreach $sym (@imports) {
+	    if (!$exports{$sym}) {
+		if ($sym =~ m/^\d/) {
+		    $pkg->require_version($sym);
+		    # If the version number was the only thing specified
+		    # then we should act as if nothing was specified:
+		    if (@imports == 1) {
+			@imports = @exports;
+			last;
+		    }
+		    # We need a way to emulate 'use Foo ()' but still
+		    # allow an easy version check: "use Foo 1.23, ''";
+		    if (@imports == 2 and !$imports[1]) {
+			@imports = ();
+			last;
+		    }
+		} elsif ($sym !~ s/^&// || !$exports{$sym}) {
+                    require Carp;
+		    Carp::carp(qq["$sym" is not exported by the $pkg module]);
+		    $oops++;
+		}
+	    }
+	}
+	if ($oops) {
+	    require Carp;
+	    Carp::croak("Can't continue after import errors");
+	}
+    }
+    else {
+	@imports = @exports;
+    }
+
+    *fail = *{"${pkg}::EXPORT_FAIL"};
+    if (@fail) {
+	if (!%fail) {
+	    # Build cache of symbols. Optimise the lookup by adding
+	    # barewords twice... both with and without a leading &.
+	    # (Technique could be applied to %exports cache at cost of memory)
+	    my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @fail;
+	    warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Verbose;
+	    @fail{@expanded} = (1) x @expanded;
+	}
+	my @failed;
+	foreach $sym (@imports) { push(@failed, $sym) if $fail{$sym} }
+	if (@failed) {
+	    @failed = $pkg->export_fail(@failed);
+	    foreach $sym (@failed) {
+                require Carp;
+		Carp::carp(qq["$sym" is not implemented by the $pkg module ],
+			"on this architecture");
+	    }
+	    if (@failed) {
+		require Carp;
+		Carp::croak("Can't continue after import errors");
+	    }
+	}
+    }
+
+    warn "Importing into $callpkg from $pkg: ",
+		join(", ",sort @imports) if $Verbose;
+
+    foreach $sym (@imports) {
+	# shortcut for the common case of no type character
+	(*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
+	    unless $sym =~ s/^(\W)//;
+	$type = $1;
+	*{"${callpkg}::$sym"} =
+	    $type eq '&' ? \&{"${pkg}::$sym"} :
+	    $type eq '$' ? \${"${pkg}::$sym"} :
+	    $type eq '@' ? \@{"${pkg}::$sym"} :
+	    $type eq '%' ? \%{"${pkg}::$sym"} :
+	    $type eq '*' ?  *{"${pkg}::$sym"} :
+	    do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
+    }
+}
+
+sub heavy_export_to_level
+{
+      my $pkg = shift;
+      my $level = shift;
+      (undef) = shift;			# XXX redundant arg
+      my $callpkg = caller($level);
+      $pkg->export($callpkg, @_);
+}
+
+# Utility functions
+
+sub _push_tags {
+    my($pkg, $var, $syms) = @_;
+    my $nontag;
+    *export_tags = \%{"${pkg}::EXPORT_TAGS"};
+    push(@{"${pkg}::$var"},
+	map { $export_tags{$_} ? @{$export_tags{$_}} : scalar(++$nontag,$_) }
+		(@$syms) ? @$syms : keys %export_tags);
+    if ($nontag and $^W) {
+	# This may change to a die one day
+	require Carp;
+	Carp::carp("Some names are not tags");
+    }
+}
+
+# Default methods
+
+sub export_fail {
+    my $self = shift;
+    @_;
+}
+
+sub require_version {
+    my($self, $wanted) = @_;
+    my $pkg = ref $self || $self;
+    my $version = ${"${pkg}::VERSION"};
+    if (!$version or $version < $wanted) {
+	$version ||= "(undef)";
+	    # %INC contains slashes, but $pkg contains double-colons.
+	my $file = (map {s,::,/,g; $INC{$_}} "$pkg.pm")[0];
+	$file &&= " ($file)";
+	require Carp;
+	Carp::croak("$pkg $wanted required--this is only version $version$file")
+    }
+    $version;
+}
+
+1;
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/Installed.pm b/gnu/usr.bin/perl/lib/ExtUtils/Installed.pm
index dda594e7843..6961c6fdd47 100644
--- a/gnu/usr.bin/perl/lib/ExtUtils/Installed.pm
+++ b/gnu/usr.bin/perl/lib/ExtUtils/Installed.pm
@@ -1,4 +1,6 @@
 package ExtUtils::Installed;
+
+use 5.005_64;
 use strict;
 use Carp qw();
 use ExtUtils::Packlist;
@@ -6,8 +8,7 @@ use ExtUtils::MakeMaker;
 use Config;
 use File::Find;
 use File::Basename;
-use vars qw($VERSION);
-$VERSION = '0.02';
+our $VERSION = '0.02';
 
 sub _is_type($$$)
 {
@@ -56,7 +57,7 @@ my $self = {};
 # Read the core packlist
 $self->{Perl}{packlist} =
    ExtUtils::Packlist->new("$Config{installarchlib}/.packlist");
-$self->{Perl}{version} = $];
+$self->{Perl}{version} = $Config{version};
 
 # Read the module packlists
 my $sub = sub
@@ -66,8 +67,8 @@ my $sub = sub
 
    # Hack of the leading bits of the paths & convert to a module name
    my $module = $File::Find::name;
-   $module =~ s!$Config{archlib}/auto/(.*)/.packlist!$1!;
-   $module =~ s!$Config{sitearch}/auto/(.*)/.packlist!$1!;
+   $module =~ s!$Config{archlib}/auto/(.*)/.packlist!$1!s;
+   $module =~ s!$Config{sitearch}/auto/(.*)/.packlist!$1!s;
    my $modfile = "$module.pm";
    $module =~ s!/!::!g;
 
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/MM_Cygwin.pm b/gnu/usr.bin/perl/lib/ExtUtils/MM_Cygwin.pm
new file mode 100644
index 00000000000..a5ba410fdc0
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/ExtUtils/MM_Cygwin.pm
@@ -0,0 +1,121 @@
+package ExtUtils::MM_Cygwin;
+
+use Config;
+#use Cwd;
+#use File::Basename;
+require Exporter;
+
+Exporter::import('ExtUtils::MakeMaker',
+       qw( $Verbose &neatvalue));
+
+unshift @MM::ISA, 'ExtUtils::MM_Cygwin';
+
+sub canonpath {
+    my($self,$path) = @_;
+    $path =~ s|\\|/|g;
+    return $self->ExtUtils::MM_Unix::canonpath($path);
+}
+
+sub cflags {
+    my($self,$libperl)=@_;
+    return $self->{CFLAGS} if $self->{CFLAGS};
+    my $base =$self->ExtUtils::MM_Unix::cflags($libperl);
+    foreach (split /\n/, $base) {
+      / *= */ and $self->{$`} = $';
+    };
+    $self->{CCFLAGS} .= " -DUSEIMPORTLIB" if ($Config{useshrplib} eq 'true');
+
+    return $self->{CFLAGS} = qq{
+CCFLAGS = $self->{CCFLAGS}
+OPTIMIZE = $self->{OPTIMIZE}
+PERLTYPE = $self->{PERLTYPE}
+LARGE = $self->{LARGE}
+SPLIT = $self->{SPLIT}
+};
+
+}
+
+sub manifypods {
+    my($self, %attribs) = @_;
+    return "\nmanifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
+        %{$self->{MAN3PODS}} or %{$self->{MAN1PODS}};
+    my($dist);
+    my($pod2man_exe);
+    if (defined $self->{PERL_SRC}) {
+        $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
+    } else {
+        $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
+    }
+    unless ($self->perl_script($pod2man_exe)) {
+        # No pod2man but some MAN3PODS to be installed
+        print <{MAKEFILE}, q[";' \\
+-e 'print "Manifying $$m{$$_}\n"; $$m{$$_} =~ s/::/./g;' \\
+-e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
+-e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
+];
+    push @m, "\nmanifypods : pure_all ";
+    push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
+
+    push(@m,"\n");
+    if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
+        push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";
+        push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
+    }
+    join('', @m);
+}
+
+sub perl_archive
+{
+ return '$(PERL_INC)' .'/'. ("$Config{libperl}" or "libperl.a");
+}
+
+1;
+__END__
+
+=head1 NAME
+
+ExtUtils::MM_Cygwin - methods to override UN*X behaviour in ExtUtils::MakeMaker
+
+=head1 SYNOPSIS
+
+ use ExtUtils::MM_Cygwin; # Done internally by ExtUtils::MakeMaker if needed
+
+=head1 DESCRIPTION
+
+See ExtUtils::MM_Unix for a documentation of the methods provided there.
+
+=over
+
+=item canonpath
+
+replaces backslashes with forward ones.  then acts as *nixish.
+
+=item cflags
+
+if configured for dynamic loading, triggers #define EXT in EXTERN.h
+
+=item manifypods
+
+replaces strings '::' with '.' in man page names
+
+=item perl_archive
+
+points to libperl.a
+
+=back
+
+=cut
+
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/Packlist.pm b/gnu/usr.bin/perl/lib/ExtUtils/Packlist.pm
index eeb0a5b0c1c..88ea206196e 100644
--- a/gnu/usr.bin/perl/lib/ExtUtils/Packlist.pm
+++ b/gnu/usr.bin/perl/lib/ExtUtils/Packlist.pm
@@ -1,8 +1,9 @@
 package ExtUtils::Packlist;
+
+use 5.005_64;
 use strict;
 use Carp qw();
-use vars qw($VERSION);
-$VERSION = '0.03';
+our $VERSION = '0.03';
 
 # Used for generating filehandle globs.  IO::File might not be available!
 my $fhname = "FH1";
diff --git a/gnu/usr.bin/perl/lib/Fatal.pm b/gnu/usr.bin/perl/lib/Fatal.pm
index d1d95af8848..1496117c898 100644
--- a/gnu/usr.bin/perl/lib/Fatal.pm
+++ b/gnu/usr.bin/perl/lib/Fatal.pm
@@ -1,8 +1,9 @@
 package Fatal;
 
+use 5.005_64;
 use Carp;
 use strict;
-use vars qw( $AUTOLOAD $Debug $VERSION);
+our($AUTOLOAD, $Debug, $VERSION);
 
 $VERSION = 1.02;
 
@@ -11,9 +12,15 @@ $Debug = 0 unless defined $Debug;
 sub import {
     my $self = shift(@_);
     my($sym, $pkg);
+    my $void = 0;
     $pkg = (caller)[0];
     foreach $sym (@_) {
-	&_make_fatal($sym, $pkg);
+	if ($sym eq ":void") {
+	    $void = 1;
+	}
+	else {
+	    &_make_fatal($sym, $pkg, $void);
+	}
     }
 };
 
@@ -41,11 +48,11 @@ sub fill_protos {
 }
 
 sub write_invocation {
-  my ($core, $call, $name, @argvs) = @_;
+  my ($core, $call, $name, $void, @argvs) = @_;
   if (@argvs == 1) {		# No optional arguments
     my @argv = @{$argvs[0]};
     shift @argv;
-    return "\t" . one_invocation($core, $call, $name, @argv) . ";\n";
+    return "\t" . one_invocation($core, $call, $name, $void, @argv) . ";\n";
   } else {
     my $else = "\t";
     my (@out, @argv, $n);
@@ -55,7 +62,7 @@ sub write_invocation {
       push @out, "$ {else}if (\@_ == $n) {\n";
       $else = "\t} els";
       push @out, 
-          "\t\treturn " . one_invocation($core, $call, $name, @argv) . ";\n";
+          "\t\treturn " . one_invocation($core, $call, $name, $void, @argv) . ";\n";
     }
     push @out, < provides a way to conveniently replace functions which normally
-return a false value when they fail with equivalents which halt execution
+return a false value when they fail with equivalents which raise exceptions
 if they are not successful.  This lets you use these functions without
-having to test their return values explicitly on each call.   Errors are
-reported via C, so you can trap them using C<$SIG{__DIE__}> if you
-wish to take some action before the program exits.
+having to test their return values explicitly on each call.  Exceptions
+can be caught using C.  See L and L for details.
 
 The do-or-die equivalents are set up simply by calling Fatal's
 C routine, passing it the names of the functions to be
@@ -150,6 +162,21 @@ replaced.  You may wrap both user-defined functions and overridable
 CORE operators (except C, C which cannot be expressed
 via prototypes) in this way.
 
+If the symbol C<:void> appears in the import list, then functions
+named later in that import list raise an exception only when
+these are called in void context--that is, when their return
+values are ignored.  For example
+
+	use Fatal qw/:void open close/;
+
+	# properly checked, so no exception raised on error
+	if(open(FH, "< /bogotic") {
+		warn "bogo file, dude: $!";
+	}
+
+	# not checked, so error raises an exception
+	close FH;
+
 =head1 AUTHOR
 
 Lionel.Cons@cern.ch
diff --git a/gnu/usr.bin/perl/lib/File/Compare.pm b/gnu/usr.bin/perl/lib/File/Compare.pm
index 2f9c45c4c60..667e7cb8831 100644
--- a/gnu/usr.bin/perl/lib/File/Compare.pm
+++ b/gnu/usr.bin/perl/lib/File/Compare.pm
@@ -1,15 +1,16 @@
 package File::Compare;
 
+use 5.005_64;
 use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $Too_Big *FROM *TO);
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
 
 require Exporter;
 use Carp;
 
-$VERSION = '1.1001';
+$VERSION = '1.1002';
 @ISA = qw(Exporter);
 @EXPORT = qw(compare);
-@EXPORT_OK = qw(cmp);
+@EXPORT_OK = qw(cmp compare_text);
 
 $Too_Big = 1024 * 1024 * 2;
 
@@ -22,13 +23,11 @@ sub compare {
     croak("Usage: compare( file1, file2 [, buffersize]) ")
       unless(@_ == 2 || @_ == 3);
 
-    my $from = shift;
-    my $to = shift;
-    my $closefrom=0;
-    my $closeto=0;
-    my ($size, $fromsize, $status, $fr, $tr, $fbuf, $tbuf);
-    local(*FROM, *TO);
-    local($\) = '';
+    my ($from,$to,$size) = @_;
+    my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
+
+    my ($fromsize,$closefrom,$closeto);
+    local (*FROM, *TO);
 
     croak("from undefined") unless (defined $from);
     croak("to undefined") unless (defined $to);
@@ -40,9 +39,11 @@ sub compare {
 	*FROM = $from;
     } else {
 	open(FROM,"<$from") or goto fail_open1;
-	binmode FROM;
+	unless ($text_mode) {
+	    binmode FROM;
+	    $fromsize = -s FROM;
+	}
 	$closefrom = 1;
-	$fromsize = -s FROM;
     }
 
     if (ref($to) &&
@@ -52,32 +53,45 @@ sub compare {
 	*TO = $to;
     } else {
 	open(TO,"<$to") or goto fail_open2;
-	binmode TO;
+	binmode TO unless $text_mode;
 	$closeto = 1;
     }
 
-    if ($closefrom && $closeto) {
+    if (!$text_mode && $closefrom && $closeto) {
 	# If both are opened files we know they differ if their size differ
 	goto fail_inner if $fromsize != -s TO;
     }
 
-    if (@_) {
-	$size = shift(@_) + 0;
-	croak("Bad buffer size for compare: $size\n") unless ($size > 0);
-    } else {
-	$size = $fromsize;
-	$size = 1024 if ($size < 512);
-	$size = $Too_Big if ($size > $Too_Big);
+    if ($text_mode) {
+	local $/ = "\n";
+	my ($fline,$tline);
+	while (defined($fline = )) {
+	    goto fail_inner unless defined($tline = );
+	    if (ref $size) {
+		# $size contains ref to comparison function
+		goto fail_inner if &$size($fline, $tline);
+	    } else {
+		goto fail_inner if $fline ne $tline;
+	    }
+	}
+	goto fail_inner if defined($tline = );
     }
+    else {
+	unless (defined($size) && $size > 0) {
+	    $size = $fromsize || -s TO || 0;
+	    $size = 1024 if $size < 512;
+	    $size = $Too_Big if $size > $Too_Big;
+	}
 
-    $fbuf = '';
-    $tbuf = '';
-    while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
-	unless (defined($tr = read(TO,$tbuf,$fr)) and $tbuf eq $fbuf) {
-            goto fail_inner;
+	my ($fr,$tr,$fbuf,$tbuf);
+	$fbuf = $tbuf = '';
+	while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
+	    unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
+		goto fail_inner;
+	    }
 	}
+	goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
     }
-    goto fail_inner if (defined($tr = read(TO,$tbuf,$size)) && $tr > 0);
 
     close(TO) || goto fail_open2 if $closeto;
     close(FROM) || goto fail_open1 if $closefrom;
@@ -93,7 +107,7 @@ sub compare {
 
   fail_open2:
     if ($closefrom) {
-	$status = $!;
+	my $status = $!;
 	$! = 0;
 	close FROM;
 	$! = $status unless $!;
@@ -102,8 +116,21 @@ sub compare {
     return -1;
 }
 
+sub cmp;
 *cmp = \&compare;
 
+sub compare_text {
+    my ($from,$to,$cmp) = @_;
+    croak("Usage: compare_text( file1, file2 [, cmp-function])")
+	unless @_ == 2 || @_ == 3;
+    croak("Third arg to compare_text() function must be a code reference")
+	if @_ == 3 && ref($cmp) ne 'CODE';
+
+    # Using a negative buffer size puts compare into text_mode too
+    $cmp = -1 unless defined $cmp;
+    compare($from, $to, $cmp);
+}
+
 1;
 
 __END__
@@ -129,6 +156,18 @@ from File::Compare by default.
 File::Compare::cmp is a synonym for File::Compare::compare.  It is
 exported from File::Compare only by request.
 
+File::Compare::compare_text does a line by line comparison of the two
+files. It stops as soon as a difference is detected. compare_text()
+accepts an optional third argument: This must be a CODE reference to
+a line comparison function, which returns 0 when both lines are considered
+equal. For example:
+
+    compare_text($file1, $file2)
+
+is basically equivalent to
+
+    compare_text($file1, $file2, sub {$_[0] ne $_[1]} )
+
 =head1 RETURN
 
 File::Compare::compare return 0 if the files are equal, 1 if the
diff --git a/gnu/usr.bin/perl/lib/File/Spec.pm b/gnu/usr.bin/perl/lib/File/Spec.pm
index 616dcbcb7a0..40f5345140c 100644
--- a/gnu/usr.bin/perl/lib/File/Spec.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec.pm
@@ -1,47 +1,18 @@
 package File::Spec;
 
-require Exporter;
-
-@ISA = qw(Exporter);
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-@EXPORT = qw(
-	
-);
-@EXPORT_OK = qw($Verbose);
-
 use strict;
-use vars qw(@ISA $VERSION $Verbose);
-
-$VERSION = '0.6';
-
-$Verbose = 0;
+use vars qw(@ISA $VERSION);
 
-require File::Spec::Unix;
+$VERSION = '0.8';
 
+my %module = (MacOS   => 'Mac',
+	      MSWin32 => 'Win32',
+	      os2     => 'OS2',
+	      VMS     => 'VMS');
 
-sub load {
-	my($class,$OS) = @_;
-	if ($OS eq 'VMS') {
-		require File::Spec::VMS;
-		require VMS::Filespec;
-		'File::Spec::VMS'
-	} elsif ($OS eq 'os2') {
-		require File::Spec::OS2;
-		'File::Spec::OS2'
-	} elsif ($OS eq 'MacOS') {
-		require File::Spec::Mac;
-		'File::Spec::Mac'
-	} elsif ($OS eq 'MSWin32') {
-		require File::Spec::Win32;
-		'File::Spec::Win32'
-	} else {
-		'File::Spec::Unix'
-	}
-}
-
-@ISA = load('File::Spec', $^O);
+my $module = $module{$^O} || 'Unix';
+require "File/Spec/$module.pm";
+@ISA = ("File::Spec::$module");
 
 1;
 __END__
@@ -52,11 +23,15 @@ File::Spec - portably perform operations on file names
 
 =head1 SYNOPSIS
 
-C
+	use File::Spec;
+
+	$x=File::Spec->catfile('a', 'b', 'c');
+
+which returns 'a/b/c' under Unix. Or:
 
-C<$x=File::Spec-Ecatfile('a','b','c');>
+	use File::Spec::Functions;
 
-which returns 'a/b/c' under Unix.
+	$x = catfile('a', 'b', 'c');
 
 =head1 DESCRIPTION
 
@@ -78,28 +53,31 @@ OS specific routines is available in a separate module, including:
 	File::Spec::VMS
 
 The module appropriate for the current OS is automatically loaded by
-File::Spec. Since some modules (like VMS) make use of OS specific
-facilities, it may not be possible to load all modules under all operating
-systems.
+File::Spec. Since some modules (like VMS) make use of facilities available
+only under that OS, it may not be possible to load all modules under all
+operating systems.
 
 Since File::Spec is object oriented, subroutines should not called directly,
 as in:
 
 	File::Spec::catfile('a','b');
-	
+
 but rather as class methods:
 
 	File::Spec->catfile('a','b');
 
-For a reference of available functions, please consult L,
-which contains the entire set, and inherited by the modules for other
-platforms. For further information, please see L,
+For simple uses, L provides convenient functional
+forms of these methods.
+
+For a list of available methods, please consult L,
+which contains the entire set, and which is inherited by the modules for
+other platforms. For further information, please see L,
 L, L, or L.
 
 =head1 SEE ALSO
 
 File::Spec::Unix, File::Spec::Mac, File::Spec::OS2, File::Spec::Win32,
-File::Spec::VMS, ExtUtils::MakeMaker
+File::Spec::VMS, File::Spec::Functions, ExtUtils::MakeMaker
 
 =head1 AUTHORS
 
@@ -108,9 +86,7 @@ Kenneth Albanowski >, Andy Dougherty
 >, Tim Bunce >. VMS
 support by Charles Bailey >.  OS/2 support by
 Ilya Zakharevich >. Mac support by Paul Schinder
->.
-
-=cut
-
-
-1;
+>.  abs2rel() and rel2abs() written by
+Shigio Yamaguchi >, modified by Barrie Slaymaker
+>.  splitpath(), splitdir(), catpath() and catdir()
+by Barrie Slaymaker.
diff --git a/gnu/usr.bin/perl/lib/File/Spec/Functions.pm b/gnu/usr.bin/perl/lib/File/Spec/Functions.pm
new file mode 100644
index 00000000000..140738f4439
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/File/Spec/Functions.pm
@@ -0,0 +1,95 @@
+package File::Spec::Functions;
+
+use File::Spec;
+use strict;
+
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+require Exporter;
+
+@ISA = qw(Exporter);
+
+@EXPORT = qw(
+	canonpath
+	catdir
+	catfile
+	curdir
+	rootdir
+	updir
+	no_upwards
+	file_name_is_absolute
+	path
+);
+
+@EXPORT_OK = qw(
+	devnull
+	tmpdir
+	splitpath
+	splitdir
+	catpath
+	abs2rel
+	rel2abs
+);
+
+%EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] );
+
+foreach my $meth (@EXPORT, @EXPORT_OK) {
+    my $sub = File::Spec->can($meth);
+    no strict 'refs';
+    *{$meth} = sub {&$sub('File::Spec', @_)};
+}
+
+
+1;
+__END__
+
+=head1 NAME
+
+File::Spec::Functions - portably perform operations on file names
+
+=head1 SYNOPSIS
+
+	use File::Spec::Functions;
+	$x = catfile('a','b');
+
+=head1 DESCRIPTION
+
+This module exports convenience functions for all of the class methods
+provided by File::Spec.
+
+For a reference of available functions, please consult L,
+which contains the entire set, and which is inherited by the modules for
+other platforms. For further information, please see L,
+L, L, or L.
+
+=head2 Exports
+
+The following functions are exported by default.
+
+	canonpath
+	catdir
+	catfile
+	curdir
+	rootdir
+	updir
+	no_upwards
+	file_name_is_absolute
+	path
+
+
+The following functions are exported only by request.
+
+	devnull
+	tmpdir
+	splitpath
+	splitdir
+	catpath
+	abs2rel
+	rel2abs
+
+All the functions may be imported using the C<:ALL> tag.
+
+=head1 SEE ALSO
+
+File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2,
+File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker
diff --git a/gnu/usr.bin/perl/lib/File/Spec/Mac.pm b/gnu/usr.bin/perl/lib/File/Spec/Mac.pm
index 63a9e1283e0..959e33d0cf3 100644
--- a/gnu/usr.bin/perl/lib/File/Spec/Mac.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec/Mac.pm
@@ -1,18 +1,9 @@
 package File::Spec::Mac;
 
-use Exporter ();
-use Config;
 use strict;
-use File::Spec;
-use vars qw(@ISA $VERSION $Is_Mac);
-
-$VERSION = '1.0';
-
+use vars qw(@ISA);
+require File::Spec::Unix;
 @ISA = qw(File::Spec::Unix);
-$Is_Mac = $^O eq 'MacOS';
-
-Exporter::import('File::Spec', '$Verbose');
-
 
 =head1 NAME
 
@@ -20,7 +11,7 @@ File::Spec::Mac - File::Spec for MacOS
 
 =head1 SYNOPSIS
 
-C
+ require File::Spec::Mac; # Done internally by File::Spec if needed
 
 =head1 DESCRIPTION
 
@@ -37,8 +28,8 @@ On MacOS, there's nothing to be done.  Returns what it's given.
 =cut
 
 sub canonpath {
-    my($self,$path) = @_;
-    $path;
+    my ($self,$path) = @_;
+    return $path;
 }
 
 =item catdir
@@ -84,20 +75,17 @@ aren't done here. This routine will treat this as absolute.
 
 =cut
 
-# ';
-
 sub catdir {
     shift;
     my @args = @_;
-	$args[0] =~ s/:$//;
-	my $result = shift @args;
-	for (@args) {
-		s/:$//;
-		s/^://;
-		$result .= ":$_";
+    my $result = shift @args;
+    $result =~ s/:\z//;
+    foreach (@args) {
+	s/:\z//;
+	s/^://s;
+	$result .= ":$_";
     }
-    $result .= ":";
-	$result;
+    return "$result:";
 }
 
 =item catfile
@@ -118,50 +106,69 @@ give the same answer, as one might expect.
 =cut
 
 sub catfile {
-    my $self = shift @_;
+    my $self = shift;
     my $file = pop @_;
     return $file unless @_;
     my $dir = $self->catdir(@_);
-	$file =~ s/^://;
+    $file =~ s/^://s;
     return $dir.$file;
 }
 
 =item curdir
 
-Returns a string representing of the current directory.
+Returns a string representing the current directory.
 
 =cut
 
 sub curdir {
-    return ":" ;
+    return ":";
+}
+
+=item devnull
+
+Returns a string representing the null device.
+
+=cut
+
+sub devnull {
+    return "Dev:Null";
 }
 
 =item rootdir
 
 Returns a string representing the root directory.  Under MacPerl,
 returns the name of the startup volume, since that's the closest in
-concept, although other volumes aren't rooted there.  On any other
-platform returns '', since there's no common way to indicate "root
-directory" across all Macs.
+concept, although other volumes aren't rooted there.
 
 =cut
 
 sub rootdir {
 #
-#  There's no real root directory on MacOS.  If you're using MacPerl,
-#  the name of the startup volume is returned, since that's the closest in
-#  concept.  On other platforms, simply return '', because nothing better
-#  can be done.
+#  There's no real root directory on MacOS.  The name of the startup
+#  volume is returned, since that's the closest in concept.
 #
-	if($Is_Mac) {
-        require Mac::Files;
-		my $system =  Mac::Files::FindFolder(&Mac::Files::kOnSystemDisk,
-		        &Mac::Files::kSystemFolderType);
-		$system =~ s/:.*$/:/;
-		return $system;
-	} else {
-		return '';
-    }
+    require Mac::Files;
+    my $system =  Mac::Files::FindFolder(&Mac::Files::kOnSystemDisk,
+					 &Mac::Files::kSystemFolderType);
+    $system =~ s/:.*\z/:/s;
+    return $system;
+}
+
+=item tmpdir
+
+Returns a string representation of the first existing directory
+from the following list or '' if none exist:
+
+    $ENV{TMPDIR}
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+    return $tmpdir if defined $tmpdir;
+    $tmpdir = $ENV{TMPDIR} if -d $ENV{TMPDIR};
+    $tmpdir = '' unless defined $tmpdir;
+    return $tmpdir;
 }
 
 =item updir
@@ -185,11 +192,11 @@ distinguish unambiguously.
 =cut
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-	if ($file =~ /:/) {
-		return ($file !~ m/^:/);
-	} else {
-		return (! -e ":$file");
+    my ($self,$file) = @_;
+    if ($file =~ /:/) {
+	return ($file !~ m/^:/s);
+    } else {
+	return (! -e ":$file");
     }
 }
 
@@ -207,16 +214,178 @@ sub path {
 #  The concept is meaningless under the MacPerl application.
 #  Under MPW, it has a meaning.
 #
-    my($self) = @_;
-	my @path;
-	if(exists $ENV{Commands}) {
-		@path = split /,/,$ENV{Commands};
-	} else {
-	    @path = ();
-	}
-    @path;
+    return unless exists $ENV{Commands};
+    return split(/,/, $ENV{Commands});
+}
+
+=item splitpath
+
+=cut
+
+sub splitpath {
+    my ($self,$path, $nofile) = @_;
+
+    my ($volume,$directory,$file) = ('','','');
+
+    if ( $nofile ) {
+        ( $volume, $directory ) = $path =~ m@((?:[^:]+(?::|\z))?)(.*)@s;
+    }
+    else {
+        $path =~ 
+            m@^( (?: [^:]+: )? ) 
+                ( (?: .*: )? )
+                ( .* )
+             @xs;
+        $volume    = $1;
+        $directory = $2;
+        $file      = $3;
+    }
+
+    # Make sure non-empty volumes and directories end in ':'
+    $volume    .= ':' if $volume    =~ m@[^:]\z@ ;
+    $directory .= ':' if $directory =~ m@[^:]\z@ ;
+    return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+=cut
+
+sub splitdir {
+    my ($self,$directories) = @_ ;
+    #
+    # split() likes to forget about trailing null fields, so here we
+    # check to be sure that there will not be any before handling the
+    # simple case.
+    #
+    if ( $directories !~ m@:\z@ ) {
+        return split( m@:@, $directories );
+    }
+    else {
+        #
+        # since there was a trailing separator, add a file name to the end, 
+        # then do the split, then replace it with ''.
+        #
+        my( @directories )= split( m@:@, "${directories}dummy" ) ;
+        $directories[ $#directories ]= '' ;
+        return @directories ;
+    }
+}
+
+
+=item catpath
+
+=cut
+
+sub catpath {
+    my $self = shift ;
+
+    my $result = shift ;
+    $result =~ s@^([^/])@/$1@s ;
+
+    my $segment ;
+    for $segment ( @_ ) {
+        if ( $result =~ m@[^/]\z@ && $segment =~ m@^[^/]@s ) {
+            $result .= "/$segment" ;
+        }
+        elsif ( $result =~ m@/\z@ && $segment =~ m@^/@s ) {
+            $result  =~ s@/+\z@/@;
+            $segment =~ s@^/+@@s;
+            $result  .= "$segment" ;
+        }
+        else {
+            $result  .= $segment ;
+        }
+    }
+
+    return $result ;
 }
 
+=item abs2rel
+
+=cut
+
+sub abs2rel {
+    my($self,$path,$base) = @_;
+
+    # Clean up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        $path = $self->rel2abs( $path ) ;
+    }
+
+    # Figure out the effective $base and clean it up.
+    if ( !defined( $base ) || $base eq '' ) {
+        $base = cwd() ;
+    }
+    elsif ( ! $self->file_name_is_absolute( $base ) ) {
+        $base = $self->rel2abs( $base ) ;
+    }
+
+    # Now, remove all leading components that are the same
+    my @pathchunks = $self->splitdir( $path );
+    my @basechunks = $self->splitdir( $base );
+
+    while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
+        shift @pathchunks ;
+        shift @basechunks ;
+    }
+
+    $path = join( ':', @pathchunks );
+
+    # @basechunks now contains the number of directories to climb out of.
+    $base = ':' x @basechunks ;
+
+    return "$base:$path" ;
+}
+
+=item rel2abs
+
+Converts a relative path to an absolute path. 
+
+    $abs_path = File::Spec->rel2abs( $destination ) ;
+    $abs_path = File::Spec->rel2abs( $destination, $base ) ;
+
+If $base is not present or '', then L is used. If $base is relative, 
+then it is converted to absolute form using L. This means that it
+is taken to be relative to L.
+
+On systems with the concept of a volume, this assumes that both paths 
+are on the $base volume, and ignores the $destination volume. 
+
+On systems that have a grammar that indicates filenames, this ignores the 
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L.
+
+Based on code written by Shigio Yamaguchi.
+
+No checks against the filesystem are made. 
+
+=cut
+
+sub rel2abs($;$;) {
+    my ($self,$path,$base ) = @_;
+
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        if ( !defined( $base ) || $base eq '' ) {
+            $base = cwd() ;
+        }
+        elsif ( ! $self->file_name_is_absolute( $base ) ) {
+            $base = $self->rel2abs( $base ) ;
+        }
+        else {
+            $base = $self->canonpath( $base ) ;
+        }
+
+        $path = $self->canonpath("$base$path") ;
+    }
+
+    return $path ;
+}
+
+
 =back
 
 =head1 SEE ALSO
@@ -226,5 +395,3 @@ L
 =cut
 
 1;
-__END__
-
diff --git a/gnu/usr.bin/perl/lib/File/Spec/OS2.pm b/gnu/usr.bin/perl/lib/File/Spec/OS2.pm
index d6026177028..33370f06c19 100644
--- a/gnu/usr.bin/perl/lib/File/Spec/OS2.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec/OS2.pm
@@ -1,34 +1,44 @@
 package File::Spec::OS2;
 
-#use Config;
-#use Cwd;
-#use File::Basename;
 use strict;
-require Exporter;
-
-use File::Spec;
 use vars qw(@ISA);
-
-Exporter::import('File::Spec',
-       qw( $Verbose));
-
+require File::Spec::Unix;
 @ISA = qw(File::Spec::Unix);
 
-$ENV{EMXSHELL} = 'sh'; # to run `commands`
+sub devnull {
+    return "/dev/nul";
+}
+
+sub case_tolerant {
+    return 1;
+}
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m{^([a-z]:)?[\\/]}i ;
+    my ($self,$file) = @_;
+    return scalar($file =~ m{^([a-z]:)?[\\/]}is);
 }
 
 sub path {
-    my($self) = @_;
-    my $path_sep = ";";
     my $path = $ENV{PATH};
     $path =~ s:\\:/:g;
-    my @path = split $path_sep, $path;
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    my @path = split(';',$path);
+    foreach (@path) { $_ = '.' if $_ eq '' }
+    return @path;
+}
+
+my $tmpdir;
+sub tmpdir {
+    return $tmpdir if defined $tmpdir;
+    my $self = shift;
+    foreach (@ENV{qw(TMPDIR TEMP TMP)}, qw(/tmp /)) {
+	next unless defined && -d;
+	$tmpdir = $_;
+	last;
+    }
+    $tmpdir = '' unless defined $tmpdir;
+    $tmpdir =~ s:\\:/:g;
+    $tmpdir = $self->canonpath($tmpdir);
+    return $tmpdir;
 }
 
 1;
@@ -40,12 +50,10 @@ File::Spec::OS2 - methods for OS/2 file specs
 
 =head1 SYNOPSIS
 
- use File::Spec::OS2; # Done internally by File::Spec if needed
+ require File::Spec::OS2; # Done internally by File::Spec if needed
 
 =head1 DESCRIPTION
 
 See File::Spec::Unix for a documentation of the methods provided
 there. This package overrides the implementation of these methods, not
 the semantics.
-
-=cut
diff --git a/gnu/usr.bin/perl/lib/File/Spec/Unix.pm b/gnu/usr.bin/perl/lib/File/Spec/Unix.pm
index 77de73a216a..2305b75b761 100644
--- a/gnu/usr.bin/perl/lib/File/Spec/Unix.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec/Unix.pm
@@ -1,23 +1,8 @@
 package File::Spec::Unix;
 
-use Exporter ();
-use Config;
-use File::Basename qw(basename dirname fileparse);
-use DirHandle;
 use strict;
-use vars qw(@ISA $Is_Mac $Is_OS2 $Is_VMS $Is_Win32);
-use File::Spec;
 
-Exporter::import('File::Spec', '$Verbose');
-
-$Is_OS2 = $^O eq 'os2';
-$Is_Mac = $^O eq 'MacOS';
-$Is_Win32 = $^O eq 'MSWin32';
-
-if ($Is_VMS = $^O eq 'VMS') {
-    require VMS::Filespec;
-    import VMS::Filespec qw( &vmsify );
-}
+use Cwd;
 
 =head1 NAME
 
@@ -25,7 +10,7 @@ File::Spec::Unix - methods used by File::Spec
 
 =head1 SYNOPSIS
 
-C
+ require File::Spec::Unix; # Done automatically by File::Spec
 
 =head1 DESCRIPTION
 
@@ -40,15 +25,18 @@ Methods for manipulating file specifications.
 No physical check on the filesystem, but a logical cleanup of a
 path. On UNIX eliminated successive slashes and successive "/.".
 
+    $cpath = File::Spec->canonpath( $path ) ;
+
 =cut
 
 sub canonpath {
-    my($self,$path) = @_;
-    $path =~ s|/+|/|g ;                            # xx////xx  -> xx/xx
-    $path =~ s|(/\.)+/|/|g ;                       # xx/././xx -> xx/xx
-    $path =~ s|^(\./)+|| unless $path eq "./";     # ./xx      -> xx
-    $path =~ s|/$|| unless $path eq "/";           # xx/       -> xx
-    $path;
+    my ($self,$path) = @_;
+    $path =~ s|/+|/|g unless($^O eq 'cygwin');     # xx////xx  -> xx/xx
+    $path =~ s|(/\.)+/|/|g;                        # xx/././xx -> xx/xx
+    $path =~ s|^(\./)+||s unless $path eq "./";    # ./xx      -> xx
+    $path =~ s|^/(\.\./)+|/|s;                     # /../../xx -> xx
+    $path =~ s|/\z|| unless $path eq "/";          # xx/       -> xx
+    return $path;
 }
 
 =item catdir
@@ -61,20 +49,14 @@ trailing slash :-)
 
 =cut
 
-# ';
-
 sub catdir {
-    shift;
+    my $self = shift;
     my @args = @_;
-    for (@args) {
+    foreach (@args) {
 	# append a slash to each argument unless it has one there
-	$_ .= "/" if $_ eq '' or substr($_,-1) ne "/";
+	$_ .= "/" if $_ eq '' || substr($_,-1) ne "/";
     }
-    my $result = join('', @args);
-    # remove a trailing slash unless we are root
-    substr($result,-1) = ""
-	if length($result) > 1 && substr($result,-1) eq "/";
-    $result;
+    return $self->canonpath(join('', @args));
 }
 
 =item catfile
@@ -85,29 +67,37 @@ complete path ending with a filename
 =cut
 
 sub catfile {
-    my $self = shift @_;
+    my $self = shift;
     my $file = pop @_;
     return $file unless @_;
     my $dir = $self->catdir(@_);
-    for ($dir) {
-	$_ .= "/" unless substr($_,length($_)-1,1) eq "/";
-    }
+    $dir .= "/" unless substr($dir,-1) eq "/";
     return $dir.$file;
 }
 
 =item curdir
 
-Returns a string representing of the current directory.  "." on UNIX.
+Returns a string representation of the current directory.  "." on UNIX.
 
 =cut
 
 sub curdir {
-    return "." ;
+    return ".";
+}
+
+=item devnull
+
+Returns a string representation of the null device. "/dev/null" on UNIX.
+
+=cut
+
+sub devnull {
+    return "/dev/null";
 }
 
 =item rootdir
 
-Returns a string representing of the root directory.  "/" on UNIX.
+Returns a string representation of the root directory.  "/" on UNIX.
 
 =cut
 
@@ -115,9 +105,31 @@ sub rootdir {
     return "/";
 }
 
+=item tmpdir
+
+Returns a string representation of the first writable directory
+from the following list or "" if none are writable:
+
+    $ENV{TMPDIR}
+    /tmp
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+    return $tmpdir if defined $tmpdir;
+    foreach ($ENV{TMPDIR}, "/tmp") {
+	next unless defined && -d && -w _;
+	$tmpdir = $_;
+	last;
+    }
+    $tmpdir = '' unless defined $tmpdir;
+    return $tmpdir;
+}
+
 =item updir
 
-Returns a string representing of the parent directory.  ".." on UNIX.
+Returns a string representation of the parent directory.  ".." on UNIX.
 
 =cut
 
@@ -133,8 +145,19 @@ directory. (Does not strip symlinks, only '.', '..', and equivalents.)
 =cut
 
 sub no_upwards {
-    my($self) = shift;
-    return grep(!/^\.{1,2}$/, @_);
+    my $self = shift;
+    return grep(!/^\.{1,2}\z/s, @_);
+}
+
+=item case_tolerant
+
+Returns a true or false value indicating, respectively, that alphabetic
+is not or is significant when comparing file specifications.
+
+=cut
+
+sub case_tolerant {
+    return 0;
 }
 
 =item file_name_is_absolute
@@ -144,8 +167,8 @@ Takes as argument a path and returns true, if it is an absolute path.
 =cut
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m:^/: ;
+    my ($self,$file) = @_;
+    return scalar($file =~ m:^/:s);
 }
 
 =item path
@@ -155,12 +178,9 @@ Takes no argument, returns the environment variable PATH as an array.
 =cut
 
 sub path {
-    my($self) = @_;
-    my $path_sep = ":";
-    my $path = $ENV{PATH};
-    my @path = split $path_sep, $path;
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    my @path = split(':', $ENV{PATH});
+    foreach (@path) { $_ = '.' if $_ eq '' }
+    return @path;
 }
 
 =item join
@@ -170,21 +190,247 @@ join is the same as catfile.
 =cut
 
 sub join {
-	my($self) = shift @_;
-	$self->catfile(@_);
+    my $self = shift;
+    return $self->catfile(@_);
+}
+
+=item splitpath
+
+    ($volume,$directories,$file) = File::Spec->splitpath( $path );
+    ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path in to volume, directory, and filename portions. On systems
+with no concept of volume, returns undef for volume. 
+
+For systems with no syntax differentiating filenames from directories, 
+assumes that the last file is a path unless $no_file is true or a 
+trailing separator or /. or /.. is present. On Unix this means that $no_file
+true makes this return ( '', $path, '' ).
+
+The directory portion may or may not be returned with a trailing '/'.
+
+The results can be passed to L to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+    my ($self,$path, $nofile) = @_;
+
+    my ($volume,$directory,$file) = ('','','');
+
+    if ( $nofile ) {
+        $directory = $path;
+    }
+    else {
+        $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
+        $directory = $1;
+        $file      = $2;
+    }
+
+    return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L.
+
+    @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems 
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, empty
+directory names (C<''>) can be returned, because these are significant
+on some OSs (e.g. MacOS).
+
+On Unix,
+
+    File::Spec->splitdir( "/a/b//c/" );
+
+Yields:
+
+    ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+    my ($self,$directories) = @_ ;
+    #
+    # split() likes to forget about trailing null fields, so here we
+    # check to be sure that there will not be any before handling the
+    # simple case.
+    #
+    if ( $directories !~ m|/\z| ) {
+        return split( m|/|, $directories );
+    }
+    else {
+        #
+        # since there was a trailing separator, add a file name to the end, 
+        # then do the split, then replace it with ''.
+        #
+        my( @directories )= split( m|/|, "${directories}dummy" ) ;
+        $directories[ $#directories ]= '' ;
+        return @directories ;
+    }
 }
 
-=item nativename
 
-TBW.
+=item catpath
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and directory and file are catenated.  A '/' is
+inserted if need be.  On other OSs, $volume is significant.
 
 =cut
 
-sub nativename {
-	my($self,$name) = shift @_;
-	$name;
+sub catpath {
+    my ($self,$volume,$directory,$file) = @_;
+
+    if ( $directory ne ''                && 
+         $file ne ''                     && 
+         substr( $directory, -1 ) ne '/' && 
+         substr( $file, 0, 1 ) ne '/' 
+    ) {
+        $directory .= "/$file" ;
+    }
+    else {
+        $directory .= $file ;
+    }
+
+    return $directory ;
 }
 
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+    $rel_path = File::Spec->abs2rel( $destination ) ;
+    $rel_path = File::Spec->abs2rel( $destination, $base ) ;
+
+If $base is not present or '', then L is used. If $base is relative, 
+then it is converted to absolute form using L. This means that it
+is taken to be relative to L.
+
+On systems with the concept of a volume, this assumes that both paths 
+are on the $destination volume, and ignores the $base volume. 
+
+On systems that have a grammar that indicates filenames, this ignores the 
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is relative, it is converted to absolute form using L.
+This means that it is taken to be relative to L.
+
+Based on code written by Shigio Yamaguchi.
+
+No checks against the filesystem are made. 
+
+=cut
+
+sub abs2rel {
+    my($self,$path,$base) = @_;
+
+    # Clean up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        $path = $self->rel2abs( $path ) ;
+    }
+    else {
+        $path = $self->canonpath( $path ) ;
+    }
+
+    # Figure out the effective $base and clean it up.
+    if ( !defined( $base ) || $base eq '' ) {
+        $base = cwd() ;
+    }
+    elsif ( ! $self->file_name_is_absolute( $base ) ) {
+        $base = $self->rel2abs( $base ) ;
+    }
+    else {
+        $base = $self->canonpath( $base ) ;
+    }
+
+    # Now, remove all leading components that are the same
+    my @pathchunks = $self->splitdir( $path);
+    my @basechunks = $self->splitdir( $base);
+
+    while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
+        shift @pathchunks ;
+        shift @basechunks ;
+    }
+
+    $path = CORE::join( '/', @pathchunks );
+    $base = CORE::join( '/', @basechunks );
+
+    # $base now contains the directories the resulting relative path 
+    # must ascend out of before it can descend to $path_directory.  So, 
+    # replace all names with $parentDir
+    $base =~ s|[^/]+|..|g ;
+
+    # Glue the two together, using a separator if necessary, and preventing an
+    # empty result.
+    if ( $path ne '' && $base ne '' ) {
+        $path = "$base/$path" ;
+    } else {
+        $path = "$base$path" ;
+    }
+
+    return $self->canonpath( $path ) ;
+}
+
+=item rel2abs
+
+Converts a relative path to an absolute path. 
+
+    $abs_path = File::Spec->rel2abs( $destination ) ;
+    $abs_path = File::Spec->rel2abs( $destination, $base ) ;
+
+If $base is not present or '', then L is used. If $base is relative, 
+then it is converted to absolute form using L. This means that it
+is taken to be relative to L.
+
+On systems with the concept of a volume, this assumes that both paths 
+are on the $base volume, and ignores the $destination volume. 
+
+On systems that have a grammar that indicates filenames, this ignores the 
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L.
+
+Based on code written by Shigio Yamaguchi.
+
+No checks against the filesystem are made. 
+
+=cut
+
+sub rel2abs($;$;) {
+    my ($self,$path,$base ) = @_;
+
+    # Clean up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        # Figure out the effective $base and clean it up.
+        if ( !defined( $base ) || $base eq '' ) {
+            $base = cwd() ;
+        }
+        elsif ( ! $self->file_name_is_absolute( $base ) ) {
+            $base = $self->rel2abs( $base ) ;
+        }
+        else {
+            $base = $self->canonpath( $base ) ;
+        }
+
+        # Glom them together
+        $path = $self->catdir( $base, $path ) ;
+    }
+
+    return $self->canonpath( $path ) ;
+}
+
+
 =back
 
 =head1 SEE ALSO
@@ -194,4 +440,3 @@ L
 =cut
 
 1;
-__END__
diff --git a/gnu/usr.bin/perl/lib/File/Spec/VMS.pm b/gnu/usr.bin/perl/lib/File/Spec/VMS.pm
index c5269fd10c7..a2ac8cac0bb 100644
--- a/gnu/usr.bin/perl/lib/File/Spec/VMS.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec/VMS.pm
@@ -1,19 +1,13 @@
-
 package File::Spec::VMS;
 
-use Carp qw( &carp );
-use Config;
-require Exporter;
-use VMS::Filespec;
-use File::Basename;
-
-use File::Spec;
-use vars qw($Revision);
-$Revision = '5.3901 (6-Mar-1997)';
-
+use strict;
+use vars qw(@ISA);
+require File::Spec::Unix;
 @ISA = qw(File::Spec::Unix);
 
-Exporter::import('File::Spec', '$Verbose');
+use Cwd;
+use File::Basename;
+use VMS::Filespec;
 
 =head1 NAME
 
@@ -21,7 +15,7 @@ File::Spec::VMS - methods for VMS file specs
 
 =head1 SYNOPSIS
 
- use File::Spec::VMS; # Done internally by File::Spec if needed
+ require File::Spec::VMS; # Done internally by File::Spec if needed
 
 =head1 DESCRIPTION
 
@@ -29,67 +23,202 @@ See File::Spec::Unix for a documentation of the methods provided
 there. This package overrides the implementation of these methods, not
 the semantics.
 
+=over
+
+=item eliminate_macros
+
+Expands MM[KS]/Make macros in a text string, using the contents of
+identically named elements of C<%$self>, and returns the result
+as a file specification in Unix syntax.
+
+=cut
+
+sub eliminate_macros {
+    my($self,$path) = @_;
+    return '' unless $path;
+    $self = {} unless ref $self;
+    my($npath) = unixify($path);
+    my($complex) = 0;
+    my($head,$macro,$tail);
+
+    # perform m##g in scalar context so it acts as an iterator
+    while ($npath =~ m#(.*?)\$\((\S+?)\)(.*)#gs) { 
+        if ($self->{$2}) {
+            ($head,$macro,$tail) = ($1,$2,$3);
+            if (ref $self->{$macro}) {
+                if (ref $self->{$macro} eq 'ARRAY') {
+                    $macro = join ' ', @{$self->{$macro}};
+                }
+                else {
+                    print "Note: can't expand macro \$($macro) containing ",ref($self->{$macro}),
+                          "\n\t(using MMK-specific deferred substitutuon; MMS will break)\n";
+                    $macro = "\cB$macro\cB";
+                    $complex = 1;
+                }
+            }
+            else { ($macro = unixify($self->{$macro})) =~ s#/\z##; }
+            $npath = "$head$macro$tail";
+        }
+    }
+    if ($complex) { $npath =~ s#\cB(.*?)\cB#\${$1}#gs; }
+    $npath;
+}
+
+=item fixpath
+
+Catchall routine to clean up problem MM[SK]/Make macros.  Expands macros
+in any directory specification, in order to avoid juxtaposing two
+VMS-syntax directories when MM[SK] is run.  Also expands expressions which
+are all macro, so that we can tell how long the expansion is, and avoid
+overrunning DCL's command buffer when MM[KS] is running.
+
+If optional second argument has a TRUE value, then the return string is
+a VMS-syntax directory specification, if it is FALSE, the return string
+is a VMS-syntax file specification, and if it is not specified, fixpath()
+checks to see whether it matches the name of a directory in the current
+default directory, and returns a directory or file specification accordingly.
+
+=cut
+
+sub fixpath {
+    my($self,$path,$force_path) = @_;
+    return '' unless $path;
+    $self = bless {} unless ref $self;
+    my($fixedpath,$prefix,$name);
+
+    if ($path =~ m#^\$\([^\)]+\)\z#s || $path =~ m#[/:>\]]#) { 
+        if ($force_path or $path =~ /(?:DIR\)|\])\z/) {
+            $fixedpath = vmspath($self->eliminate_macros($path));
+        }
+        else {
+            $fixedpath = vmsify($self->eliminate_macros($path));
+        }
+    }
+    elsif ((($prefix,$name) = ($path =~ m#^\$\(([^\)]+)\)(.+)#s)) && $self->{$prefix}) {
+        my($vmspre) = $self->eliminate_macros("\$($prefix)");
+        # is it a dir or just a name?
+        $vmspre = ($vmspre =~ m|/| or $prefix =~ /DIR\z/) ? vmspath($vmspre) : '';
+        $fixedpath = ($vmspre ? $vmspre : $self->{$prefix}) . $name;
+        $fixedpath = vmspath($fixedpath) if $force_path;
+    }
+    else {
+        $fixedpath = $path;
+        $fixedpath = vmspath($fixedpath) if $force_path;
+    }
+    # No hints, so we try to guess
+    if (!defined($force_path) and $fixedpath !~ /[:>(.\]]/) {
+        $fixedpath = vmspath($fixedpath) if -d $fixedpath;
+    }
+
+    # Trim off root dirname if it's had other dirs inserted in front of it.
+    $fixedpath =~ s/\.000000([\]>])/$1/;
+    # Special case for VMS absolute directory specs: these will have had device
+    # prepended during trip through Unix syntax in eliminate_macros(), since
+    # Unix syntax has no way to express "absolute from the top of this device's
+    # directory tree".
+    if ($path =~ /^[\[>][^.\-]/) { $fixedpath =~ s/^[^\[<]+//; }
+    $fixedpath;
+}
+
+=back
+
 =head2 Methods always loaded
 
 =over
 
+=item canonpath (override)
+
+Removes redundant portions of file specifications according to VMS syntax.
+
+=cut
+
+sub canonpath {
+    my($self,$path) = @_;
+
+    if ($path =~ m|/|) { # Fake Unix
+      my $pathify = $path =~ m|/\z|;
+      $path = $self->SUPER::canonpath($path);
+      if ($pathify) { return vmspath($path); }
+      else          { return vmsify($path);  }
+    }
+    else {
+      $path =~ s-\]\[--g;  $path =~ s/> foo.bar
+      $path =~ s/([\[<])000000\./$1/;                   # [000000.foo     ==> foo
+      1 while $path =~ s{([\[<-])\.-}{$1-};             # [.-.-           ==> [--
+      $path =~ s/\.[^\[<\.]+\.-([\]\>])/$1/;            # bar.foo.-]      ==> bar]
+      $path =~ s/([\[<])(-+)/$1 . "\cx" x length($2)/e; # encode leading '-'s
+      $path =~ s/([\[<\.])([^\[<\.\cx]+)\.-\.?/$1/g;    # bar.-.foo       ==> foo
+      $path =~ s/([\[<])(\cx+)/$1 . '-' x length($2)/e; # then decode
+      return $path;
+    }
+}
+
 =item catdir
 
 Concatenates a list of file specifications, and returns the result as a
-VMS-syntax directory specification.
+VMS-syntax directory specification.  No check is made for "impossible"
+cases (e.g. elements other than the first being absolute filespecs).
 
 =cut
 
 sub catdir {
-    my($self,@dirs) = @_;
-    my($dir) = pop @dirs;
+    my ($self,@dirs) = @_;
+    my $dir = pop @dirs;
     @dirs = grep($_,@dirs);
-    my($rslt);
+    my $rslt;
     if (@dirs) {
-      my($path) = (@dirs == 1 ? $dirs[0] : $self->catdir(@dirs));
-      my($spath,$sdir) = ($path,$dir);
-      $spath =~ s/.dir$//; $sdir =~ s/.dir$//; 
-      $sdir = $self->eliminate_macros($sdir) unless $sdir =~ /^[\w\-]+$/;
-      $rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1);
+	my $path = (@dirs == 1 ? $dirs[0] : $self->catdir(@dirs));
+	my ($spath,$sdir) = ($path,$dir);
+	$spath =~ s/\.dir\z//; $sdir =~ s/\.dir\z//; 
+	$sdir = $self->eliminate_macros($sdir) unless $sdir =~ /^[\w\-]+\z/s;
+	$rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1);
+
+	# Special case for VMS absolute directory specs: these will have had device
+	# prepended during trip through Unix syntax in eliminate_macros(), since
+	# Unix syntax has no way to express "absolute from the top of this device's
+	# directory tree".
+	if ($spath =~ /^[\[<][^.\-]/s) { $rslt =~ s/^[^\[<]+//s; }
     }
-    else { 
-      if ($dir =~ /^\$\([^\)]+\)$/) { $rslt = $dir; }
-      else                          { $rslt = vmspath($dir); }
+    else {
+	if    (not defined $dir or not length $dir) { $rslt = ''; }
+	elsif ($dir =~ /^\$\([^\)]+\)\z/s)          { $rslt = $dir; }
+	else                                        { $rslt = vmspath($dir); }
     }
-    print "catdir(",join(',',@_[1..$#_]),") = |$rslt|\n" if $Verbose >= 3;
-    $rslt;
+    return $self->canonpath($rslt);
 }
 
 =item catfile
 
 Concatenates a list of file specifications, and returns the result as a
-VMS-syntax directory specification.
+VMS-syntax file specification.
 
 =cut
 
 sub catfile {
-    my($self,@files) = @_;
-    my($file) = pop @files;
+    my ($self,@files) = @_;
+    my $file = pop @files;
     @files = grep($_,@files);
-    my($rslt);
+    my $rslt;
     if (@files) {
-      my($path) = (@files == 1 ? $files[0] : $self->catdir(@files));
-      my($spath) = $path;
-      $spath =~ s/.dir$//;
-      if ( $spath =~ /^[^\)\]\/:>]+\)$/ && basename($file) eq $file) { $rslt = "$spath$file"; }
-      else {
-          $rslt = $self->eliminate_macros($spath);
-          $rslt = vmsify($rslt.($rslt ? '/' : '').unixify($file));
-      }
+	my $path = (@files == 1 ? $files[0] : $self->catdir(@files));
+	my $spath = $path;
+	$spath =~ s/\.dir\z//;
+	if ($spath =~ /^[^\)\]\/:>]+\)\z/s && basename($file) eq $file) {
+	    $rslt = "$spath$file";
+	}
+	else {
+	    $rslt = $self->eliminate_macros($spath);
+	    $rslt = vmsify($rslt.($rslt ? '/' : '').unixify($file));
+	}
     }
-    else { $rslt = vmsify($file); }
-    print "catfile(",join(',',@_[1..$#_]),") = |$rslt|\n" if $Verbose >= 3;
-    $rslt;
+    else { $rslt = (defined($file) && length($file)) ? vmsify($file) : ''; }
+    return $self->canonpath($rslt);
 }
 
+
 =item curdir (override)
 
-Returns a string representing of the current directory.
+Returns a string representation of the current directory: '[]'
 
 =cut
 
@@ -97,19 +226,51 @@ sub curdir {
     return '[]';
 }
 
+=item devnull (override)
+
+Returns a string representation of the null device: '_NLA0:'
+
+=cut
+
+sub devnull {
+    return "_NLA0:";
+}
+
 =item rootdir (override)
 
-Returns a string representing of the root directory.
+Returns a string representation of the root directory: 'SYS$DISK:[000000]'
 
 =cut
 
 sub rootdir {
-    return '';
+    return 'SYS$DISK:[000000]';
+}
+
+=item tmpdir (override)
+
+Returns a string representation of the first writable directory
+from the following list or '' if none are writable:
+
+    sys$scratch
+    $ENV{TMPDIR}
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+    return $tmpdir if defined $tmpdir;
+    foreach ('sys$scratch', $ENV{TMPDIR}) {
+	next unless defined && -d && -w _;
+	$tmpdir = $_;
+	last;
+    }
+    $tmpdir = '' unless defined $tmpdir;
+    return $tmpdir;
 }
 
 =item updir (override)
 
-Returns a string representing of the parent directory.
+Returns a string representation of the parent directory: '[-]'
 
 =cut
 
@@ -117,6 +278,16 @@ sub updir {
     return '[-]';
 }
 
+=item case_tolerant (override)
+
+VMS file specification syntax is case-tolerant.
+
+=cut
+
+sub case_tolerant {
+    return 1;
+}
+
 =item path (override)
 
 Translate logical name DCL$PATH as a searchlist, rather than trying
@@ -125,9 +296,9 @@ to C string value of C<$ENV{'PATH'}>.
 =cut
 
 sub path {
-    my(@dirs,$dir,$i);
+    my (@dirs,$dir,$i);
     while ($dir = $ENV{'DCL$PATH;' . $i++}) { push(@dirs,$dir); }
-    @dirs;
+    return @dirs;
 }
 
 =item file_name_is_absolute (override)
@@ -137,12 +308,185 @@ Checks for VMS directory spec as well as Unix separators.
 =cut
 
 sub file_name_is_absolute {
-    my($self,$file) = @_;
+    my ($self,$file) = @_;
     # If it's a logical name, expand it.
-    $file = $ENV{$file} while $file =~ /^[\w\$\-]+$/ and $ENV{$file};
-    $file =~ m!^/! or $file =~ m![<\[][^.\-\]>]! or $file =~ /:[^<\[]/;
+    $file = $ENV{$file} while $file =~ /^[\w\$\-]+\z/s && $ENV{$file};
+    return scalar($file =~ m!^/!s             ||
+		  $file =~ m![<\[][^.\-\]>]!  ||
+		  $file =~ /:[^<\[]/);
 }
 
-1;
-__END__
+=item splitpath (override)
+
+Splits using VMS syntax.
+
+=cut
+
+sub splitpath {
+    my($self,$path) = @_;
+    my($dev,$dir,$file) = ('','','');
+
+    vmsify($path) =~ /(.+:)?([\[<].*[\]>])?(.*)/s;
+    return ($1 || '',$2 || '',$3);
+}
+
+=item splitdir (override)
+
+Split dirspec using VMS syntax.
+
+=cut
+
+sub splitdir {
+    my($self,$dirspec) = @_;
+    $dirspec =~ s/\]\[//g;  $dirspec =~ s/\-\-/-.-/g;
+    $dirspec = "[$dirspec]" unless $dirspec =~ /[\[<]/; # make legal
+    my(@dirs) = split('\.', vmspath($dirspec));
+    $dirs[0] =~ s/^[\[<]//s;  $dirs[-1] =~ s/[\]>]\z//s;
+    @dirs;
+}
+
+
+=item catpath (override)
+
+Construct a complete filespec using VMS syntax
+
+=cut
+
+sub catpath {
+    my($self,$dev,$dir,$file) = @_;
+    if ($dev =~ m|^/+([^/]+)|) { $dev = "$1:"; }
+    else { $dev .= ':' unless $dev eq '' or $dev =~ /:\z/; }
+    if (length($dev) or length($dir)) {
+      $dir = "[$dir]" unless $dir =~ /[\[<\/]/;
+      $dir = vmspath($dir);
+    }
+    "$dev$dir$file";
+}
+
+=item abs2rel (override)
+
+Use VMS syntax when converting filespecs.
+
+=cut
+
+sub abs2rel {
+    my $self = shift;
+
+    return vmspath(File::Spec::Unix::abs2rel( $self, @_ ))
+        if ( join( '', @_ ) =~ m{/} ) ;
+
+    my($path,$base) = @_;
+
+    # Note: we use '/' to glue things together here, then let canonpath()
+    # clean them up at the end.
 
+    # Clean up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        $path = $self->rel2abs( $path ) ;
+    }
+    else {
+        $path = $self->canonpath( $path ) ;
+    }
+
+    # Figure out the effective $base and clean it up.
+    if ( !defined( $base ) || $base eq '' ) {
+        $base = cwd() ;
+    }
+    elsif ( ! $self->file_name_is_absolute( $base ) ) {
+        $base = $self->rel2abs( $base ) ;
+    }
+    else {
+        $base = $self->canonpath( $base ) ;
+    }
+
+    # Split up paths
+    my ( undef, $path_directories, $path_file ) =
+        $self->splitpath( $path, 1 ) ;
+
+    $path_directories = $1
+        if $path_directories =~ /^\[(.*)\]\z/s ;
+
+    my ( undef, $base_directories, undef ) =
+        $self->splitpath( $base, 1 ) ;
+
+    $base_directories = $1
+        if $base_directories =~ /^\[(.*)\]\z/s ;
+
+    # Now, remove all leading components that are the same
+    my @pathchunks = $self->splitdir( $path_directories );
+    my @basechunks = $self->splitdir( $base_directories );
+
+    while ( @pathchunks && 
+            @basechunks && 
+            lc( $pathchunks[0] ) eq lc( $basechunks[0] ) 
+          ) {
+        shift @pathchunks ;
+        shift @basechunks ;
+    }
+
+    # @basechunks now contains the directories to climb out of,
+    # @pathchunks now has the directories to descend in to.
+    $path_directories = '-.' x @basechunks . join( '.', @pathchunks ) ;
+    $path_directories =~ s{\.\z}{} ;
+    return $self->canonpath( $self->catpath( '', $path_directories, $path_file ) ) ;
+}
+
+
+=item rel2abs (override)
+
+Use VMS syntax when converting filespecs.
+
+=cut
+
+sub rel2abs($;$;) {
+    my $self = shift ;
+    return vmspath(File::Spec::Unix::rel2abs( $self, @_ ))
+        if ( join( '', @_ ) =~ m{/} ) ;
+
+    my ($path,$base ) = @_;
+    # Clean up and split up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        # Figure out the effective $base and clean it up.
+        if ( !defined( $base ) || $base eq '' ) {
+            $base = cwd() ;
+        }
+        elsif ( ! $self->file_name_is_absolute( $base ) ) {
+            $base = $self->rel2abs( $base ) ;
+        }
+        else {
+            $base = $self->canonpath( $base ) ;
+        }
+
+        # Split up paths
+        my ( undef, $path_directories, $path_file ) =
+            $self->splitpath( $path ) ;
+
+        my ( $base_volume, $base_directories, undef ) =
+            $self->splitpath( $base ) ;
+
+        $path_directories = '' if $path_directories eq '[]' ||
+                                  $path_directories eq '<>';
+        my $sep = '' ;
+        $sep = '.'
+            if ( $base_directories =~ m{[^.\]>]\z} &&
+                 $path_directories =~ m{^[^.\[<]}s
+            ) ;
+        $base_directories = "$base_directories$sep$path_directories";
+        $base_directories =~ s{\.?[\]>][\[<]\.?}{.};
+
+        $path = $self->catpath( $base_volume, $base_directories, $path_file );
+   }
+
+    return $self->canonpath( $path ) ;
+}
+
+
+=back
+
+=head1 SEE ALSO
+
+L
+
+=cut
+
+1;
diff --git a/gnu/usr.bin/perl/lib/File/Spec/Win32.pm b/gnu/usr.bin/perl/lib/File/Spec/Win32.pm
index 034a0cbc2e6..aa95fbde363 100644
--- a/gnu/usr.bin/perl/lib/File/Spec/Win32.pm
+++ b/gnu/usr.bin/perl/lib/File/Spec/Win32.pm
@@ -1,12 +1,18 @@
 package File::Spec::Win32;
 
+use strict;
+use Cwd;
+use vars qw(@ISA);
+require File::Spec::Unix;
+@ISA = qw(File::Spec::Unix);
+
 =head1 NAME
 
 File::Spec::Win32 - methods for Win32 file specs
 
 =head1 SYNOPSIS
 
- use File::Spec::Win32; # Done internally by File::Spec if needed
+ require File::Spec::Win32; # Done internally by File::Spec if needed
 
 =head1 DESCRIPTION
 
@@ -16,37 +22,50 @@ the semantics.
 
 =over
 
-=cut 
+=item devnull
 
-#use Config;
-#use Cwd;
-use File::Basename;
-require Exporter;
-use strict;
+Returns a string representation of the null device.
 
-use vars qw(@ISA);
+=cut
 
-use File::Spec;
-Exporter::import('File::Spec', qw( $Verbose));
+sub devnull {
+    return "nul";
+}
 
-@ISA = qw(File::Spec::Unix);
+=item tmpdir
 
-$ENV{EMXSHELL} = 'sh'; # to run `commands`
+Returns a string representation of the first existing directory
+from the following list:
 
-sub file_name_is_absolute {
-    my($self,$file) = @_;
-    $file =~ m{^([a-z]:)?[\\/]}i ;
-}
+    $ENV{TMPDIR}
+    $ENV{TEMP}
+    $ENV{TMP}
+    /tmp
+    /
 
-sub catdir {
+=cut
+
+my $tmpdir;
+sub tmpdir {
+    return $tmpdir if defined $tmpdir;
     my $self = shift;
-    my @args = @_;
-    for (@args) {
-	# append a slash to each argument unless it has one there
-	$_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
+    foreach (@ENV{qw(TMPDIR TEMP TMP)}, qw(/tmp /)) {
+	next unless defined && -d;
+	$tmpdir = $_;
+	last;
     }
-    my $result = $self->canonpath(join('', @args));
-    $result;
+    $tmpdir = '' unless defined $tmpdir;
+    $tmpdir = $self->canonpath($tmpdir);
+    return $tmpdir;
+}
+
+sub case_tolerant {
+    return 1;
+}
+
+sub file_name_is_absolute {
+    my ($self,$file) = @_;
+    return scalar($file =~ m{^([a-z]:)?[\\/]}is);
 }
 
 =item catfile
@@ -57,22 +76,19 @@ complete path ending with a filename
 =cut
 
 sub catfile {
-    my $self = shift @_;
+    my $self = shift;
     my $file = pop @_;
     return $file unless @_;
     my $dir = $self->catdir(@_);
-    $dir =~ s/(\\\.)$//;
-    $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
+    $dir .= "\\" unless substr($dir,-1) eq "\\";
     return $dir.$file;
 }
 
 sub path {
-    local $^W = 1;
-    my($self) = @_;
     my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
     my @path = split(';',$path);
-    foreach(@path) { $_ = '.' if $_ eq '' }
-    @path;
+    foreach (@path) { $_ = '.' if $_ eq '' }
+    return @path;
 }
 
 =item canonpath
@@ -83,22 +99,307 @@ path. On UNIX eliminated successive slashes and successive "/.".
 =cut
 
 sub canonpath {
-    my($self,$path) = @_;
-    $path =~ s/^([a-z]:)/\u$1/;
+    my ($self,$path) = @_;
+    $path =~ s/^([a-z]:)/\u$1/s;
     $path =~ s|/|\\|g;
-    $path =~ s|\\+|\\|g ;                          # xx////xx  -> xx/xx
-    $path =~ s|(\\\.)+\\|\\|g ;                    # xx/././xx -> xx/xx
-    $path =~ s|^(\.\\)+|| unless $path eq ".\\";   # ./xx      -> xx
-    $path =~ s|\\$|| 
-             unless $path =~ m#^([a-z]:)?\\#;      # xx/       -> xx
-    $path .= '.' if $path =~ m#\\$#;
-    $path;
+    $path =~ s|([^\\])\\+|$1\\|g;                  # xx////xx  -> xx/xx
+    $path =~ s|(\\\.)+\\|\\|g;                     # xx/././xx -> xx/xx
+    $path =~ s|^(\.\\)+||s unless $path eq ".\\";  # ./xx      -> xx
+    $path =~ s|\\\z||
+             unless $path =~ m#^([A-Z]:)?\\\z#s;   # xx/       -> xx
+    return $path;
 }
 
-1;
-__END__
+=item splitpath
+
+    ($volume,$directories,$file) = File::Spec->splitpath( $path );
+    ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path in to volume, directory, and filename portions. Assumes that 
+the last file is a path unless the path ends in '\\', '\\.', '\\..'
+or $no_file is true.  On Win32 this means that $no_file true makes this return 
+( $volume, $path, undef ).
+
+Separators accepted are \ and /.
+
+Volumes can be drive letters or UNC sharenames (\\server\share).
+
+The results can be passed to L to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+    my ($self,$path, $nofile) = @_;
+    my ($volume,$directory,$file) = ('','','');
+    if ( $nofile ) {
+        $path =~ 
+            m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? ) 
+                 (.*)
+             }xs;
+        $volume    = $1;
+        $directory = $2;
+    }
+    else {
+        $path =~ 
+            m{^ ( (?: [a-zA-Z]: |
+                      (?:\\\\|//)[^\\/]+[\\/][^\\/]+
+                  )?
+                )
+                ( (?:.*[\\\\/](?:\.\.?\z)?)? )
+                (.*)
+             }xs;
+        $volume    = $1;
+        $directory = $2;
+        $file      = $3;
+    }
+
+    return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L.
+
+    @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems 
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, leading empty and 
+trailing directory entries can be returned, because these are significant
+on some OSs. So,
+
+    File::Spec->splitdir( "/a/b/c" );
+
+Yields:
+
+    ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+    my ($self,$directories) = @_ ;
+    #
+    # split() likes to forget about trailing null fields, so here we
+    # check to be sure that there will not be any before handling the
+    # simple case.
+    #
+    if ( $directories !~ m|[\\/]\z| ) {
+        return split( m|[\\/]|, $directories );
+    }
+    else {
+        #
+        # since there was a trailing separator, add a file name to the end, 
+        # then do the split, then replace it with ''.
+        #
+        my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
+        $directories[ $#directories ]= '' ;
+        return @directories ;
+    }
+}
+
+
+=item catpath
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and this is just like catfile(). On other OSs,
+the $volume become significant.
+
+=cut
+
+sub catpath {
+    my ($self,$volume,$directory,$file) = @_;
+
+    # If it's UNC, make sure the glue separator is there, reusing
+    # whatever separator is first in the $volume
+    $volume .= $1
+        if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\z@s &&
+             $directory =~ m@^[^\\/]@s
+           ) ;
+
+    $volume .= $directory ;
+
+    # If the volume is not just A:, make sure the glue separator is 
+    # there, reusing whatever separator is first in the $volume if possible.
+    if ( $volume !~ m@^[a-zA-Z]:\z@s &&
+         $volume =~ m@[^\\/]\z@      &&
+         $file   =~ m@[^\\/]@
+       ) {
+        $volume =~ m@([\\/])@ ;
+        my $sep = $1 ? $1 : '\\' ;
+        $volume .= $sep ;
+    }
+
+    $volume .= $file ;
+
+    return $volume ;
+}
+
+
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+    $rel_path = File::Spec->abs2rel( $destination ) ;
+    $rel_path = File::Spec->abs2rel( $destination, $base ) ;
+
+If $base is not present or '', then L is used. If $base is relative, 
+then it is converted to absolute form using L. This means that it
+is taken to be relative to L.
+
+On systems with the concept of a volume, this assumes that both paths 
+are on the $destination volume, and ignores the $base volume.
+
+On systems that have a grammar that indicates filenames, this ignores the 
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is relative, it is converted to absolute form using L.
+This means that it is taken to be relative to L.
+
+Based on code written by Shigio Yamaguchi.
+
+No checks against the filesystem are made. 
+
+=cut
+
+sub abs2rel {
+    my($self,$path,$base) = @_;
+
+    # Clean up $path
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+        $path = $self->rel2abs( $path ) ;
+    }
+    else {
+        $path = $self->canonpath( $path ) ;
+    }
+
+    # Figure out the effective $base and clean it up.
+    if ( ! $self->file_name_is_absolute( $base ) ) {
+        $base = $self->rel2abs( $base ) ;
+    }
+    elsif ( !defined( $base ) || $base eq '' ) {
+        $base = cwd() ;
+    }
+    else {
+        $base = $self->canonpath( $base ) ;
+    }
+
+    # Split up paths
+    my ( $path_volume, $path_directories, $path_file ) =
+        $self->splitpath( $path, 1 ) ;
+
+    my ( undef, $base_directories, undef ) =
+        $self->splitpath( $base, 1 ) ;
+
+    # Now, remove all leading components that are the same
+    my @pathchunks = $self->splitdir( $path_directories );
+    my @basechunks = $self->splitdir( $base_directories );
+
+    while ( @pathchunks && 
+            @basechunks && 
+            lc( $pathchunks[0] ) eq lc( $basechunks[0] ) 
+          ) {
+        shift @pathchunks ;
+        shift @basechunks ;
+    }
+
+    # No need to catdir, we know these are well formed.
+    $path_directories = CORE::join( '\\', @pathchunks );
+    $base_directories = CORE::join( '\\', @basechunks );
+
+    # $base_directories now contains the directories the resulting relative
+    # path must ascend out of before it can descend to $path_directory.  So, 
+    # replace all names with $parentDir
+
+    #FA Need to replace between backslashes...
+    $base_directories =~ s|[^\\]+|..|g ;
+
+    # Glue the two together, using a separator if necessary, and preventing an
+    # empty result.
+
+    #FA Must check that new directories are not empty.
+    if ( $path_directories ne '' && $base_directories ne '' ) {
+        $path_directories = "$base_directories\\$path_directories" ;
+    } else {
+        $path_directories = "$base_directories$path_directories" ;
+    }
+
+    # It makes no sense to add a relative path to a UNC volume
+    $path_volume = '' unless $path_volume =~ m{^[A-Z]:}is ;
+
+    return $self->canonpath( 
+        $self->catpath($path_volume, $path_directories, $path_file ) 
+    ) ;
+}
+
+=item rel2abs
+
+Converts a relative path to an absolute path. 
+
+    $abs_path = File::Spec->rel2abs( $destination ) ;
+    $abs_path = File::Spec->rel2abs( $destination, $base ) ;
+
+If $base is not present or '', then L is used. If $base is relative, 
+then it is converted to absolute form using L. This means that it
+is taken to be relative to L.
+
+Assumes that both paths are on the $base volume, and ignores the 
+$destination volume. 
+
+On systems that have a grammar that indicates filenames, this ignores the 
+$base filename as well. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L.
+
+Based on code written by Shigio Yamaguchi.
+
+No checks against the filesystem are made. 
+
+=cut
+
+sub rel2abs($;$;) {
+    my ($self,$path,$base ) = @_;
+
+    if ( ! $self->file_name_is_absolute( $path ) ) {
+
+        if ( !defined( $base ) || $base eq '' ) {
+            $base = cwd() ;
+        }
+        elsif ( ! $self->file_name_is_absolute( $base ) ) {
+            $base = $self->rel2abs( $base ) ;
+        }
+        else {
+            $base = $self->canonpath( $base ) ;
+        }
+
+        my ( undef, $path_directories, $path_file ) =
+            $self->splitpath( $path, 1 ) ;
+
+        my ( $base_volume, $base_directories, undef ) =
+            $self->splitpath( $base, 1 ) ;
+
+        $path = $self->catpath( 
+            $base_volume, 
+            $self->catdir( $base_directories, $path_directories ), 
+            $path_file
+        ) ;
+    }
+
+    return $self->canonpath( $path ) ;
+}
 
 =back
 
-=cut 
+=head1 SEE ALSO
+
+L
 
+=cut
+
+1;
diff --git a/gnu/usr.bin/perl/lib/File/stat.pm b/gnu/usr.bin/perl/lib/File/stat.pm
index f5d17f7da44..0cf7a0b7aa8 100644
--- a/gnu/usr.bin/perl/lib/File/stat.pm
+++ b/gnu/usr.bin/perl/lib/File/stat.pm
@@ -1,9 +1,11 @@
 package File::stat;
 use strict;
 
+use 5.005_64;
+our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+
 BEGIN { 
     use Exporter   ();
-    use vars       qw(@EXPORT @EXPORT_OK %EXPORT_TAGS);
     @EXPORT      = qw(stat lstat);
     @EXPORT_OK   = qw( $st_dev	   $st_ino    $st_mode 
 		       $st_nlink   $st_uid    $st_gid 
@@ -13,7 +15,7 @@ BEGIN {
 		    );
     %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
 }
-use vars      @EXPORT_OK;
+use vars @EXPORT_OK;
 
 # Class::Struct forbids use of @ISA
 sub import { goto &Exporter::import }
diff --git a/gnu/usr.bin/perl/lib/Math/BigFloat.pm b/gnu/usr.bin/perl/lib/Math/BigFloat.pm
index 03bc2f4e271..d8d643ca3e3 100644
--- a/gnu/usr.bin/perl/lib/Math/BigFloat.pm
+++ b/gnu/usr.bin/perl/lib/Math/BigFloat.pm
@@ -9,10 +9,8 @@ use overload
 '+'	=>	sub {new Math::BigFloat &fadd},
 '-'	=>	sub {new Math::BigFloat
 		       $_[2]? fsub($_[1],${$_[0]}) : fsub(${$_[0]},$_[1])},
-'<=>'	=>	sub {new Math::BigFloat
-		       $_[2]? fcmp($_[1],${$_[0]}) : fcmp(${$_[0]},$_[1])},
-'cmp'	=>	sub {new Math::BigFloat
-		       $_[2]? ($_[1] cmp ${$_[0]}) : (${$_[0]} cmp $_[1])},
+'<=>'	=>	sub {$_[2]? fcmp($_[1],${$_[0]}) : fcmp(${$_[0]},$_[1])},
+'cmp'	=>	sub {$_[2]? ($_[1] cmp ${$_[0]}) : (${$_[0]} cmp $_[1])},
 '*'	=>	sub {new Math::BigFloat &fmul},
 '/'	=>	sub {new Math::BigFloat 
 		       $_[2]? scalar fdiv($_[1],${$_[0]}) :
@@ -28,9 +26,9 @@ qw(
 sub new {
   my ($class) = shift;
   my ($foo) = fnorm(shift);
-  panic("Not a number initialized to Math::BigFloat") if $foo eq "NaN";
   bless \$foo, $class;
 }
+
 sub numify { 0 + "${$_[0]}" }	# Not needed, additional overhead
 				# comparing to direct compilation based on
 				# stringify
@@ -76,6 +74,7 @@ sub fnorm; sub fsqrt;
 sub fnorm { #(string) return fnum_str
     local($_) = @_;
     s/\s+//g;                               # strip white space
+    no warnings;	# $4 and $5 below might legitimately be undefined
     if (/^([+-]?)(\d*)(\.(\d*))?([Ee]([+-]?\d+))?$/ && "$2$4" ne '') {
 	&norm(($1 ? "$1$2$4" : "+$2$4"),(($4 ne '') ? $6-length($4) : $6));
     } else {
@@ -159,7 +158,8 @@ sub fdiv #(fnum_str, fnum_str[,scale]) return fnum_str
 	$scale = length($xm)-1 if (length($xm)-1 > $scale);
 	$scale = length($ym)-1 if (length($ym)-1 > $scale);
 	$scale = $scale + length($ym) - length($xm);
-	&norm(&round(Math::BigInt::bdiv($xm.('0' x $scale),$ym),$ym),
+	&norm(&round(Math::BigInt::bdiv($xm.('0' x $scale),$ym),
+		    Math::BigInt::babs($ym)),
 	    $xe-$ye-$scale);
     }
 }
@@ -219,7 +219,11 @@ sub ffround { #(fnum_str, scale) return fnum_str
 	    if ($xe < 1) {
 		'+0E+0';
 	    } elsif ($xe == 1) {
-		&norm(&round('+0',"+0".substr($xm,$[+1,1),"+10"), $scale);
+		# The first substr preserves the sign, passing a non-
+		# normalized "-0" to &round when rounding -0.006 (for
+		# example), purely so &round won't lose the sign.
+		&norm(&round(substr($xm,$[,1).'0',
+		      "+0".substr($xm,$[+1,1),"+10"), $scale);
 	    } else {
 		&norm(&round(substr($xm,$[,$xe),
 		      "+0".substr($xm,$[+$xe,1),"+10"), $scale);
@@ -236,12 +240,13 @@ sub fcmp #(fnum_str, fnum_str) return cond_code
     if ($x eq "NaN" || $y eq "NaN") {
 	undef;
     } else {
+	local($xm,$xe,$ym,$ye) = split('E', $x."E$y");
+	if ($xm eq '+0' || $ym eq '+0') {
+	    return $xm <=> $ym;
+	}
 	ord($y) <=> ord($x)
-	||
-	(  local($xm,$xe,$ym,$ye) = split('E', $x."E$y"),
-	     (($xe <=> $ye) * (substr($x,$[,1).'1')
-             || Math::BigInt::cmp($xm,$ym))
-	);
+	|| ($xe <=> $ye) * (substr($x,$[,1).'1')
+	|| Math::BigInt::cmp($xm,$ym);
     }
 }
 
@@ -301,7 +306,7 @@ floats as
 =item number format
 
 canonical strings have the form /[+-]\d+E[+-]\d+/ .  Input values can
-have imbedded whitespace.
+have embedded whitespace.
 
 =item Error returns 'NaN'
 
@@ -310,9 +315,24 @@ negative number.
 
 =item Division is computed to 
 
-C digits by default.
+C
+digits by default.
 Also used for default sqrt scale.
 
+=item Rounding is performed
+
+according to the value of
+C<$Math::BigFloat::rnd_mode>:
+
+  trunc     truncate the value
+  zero      round towards 0
+  +inf      round towards +infinity (round up)
+  -inf      round towards -infinity (round down)
+  even      round to the nearest, .5 to the even digit
+  odd       round to the nearest, .5 to the odd digit
+
+The default is C rounding.
+
 =back
 
 =head1 BUGS
@@ -320,6 +340,15 @@ Also used for default sqrt scale.
 The current version of this module is a preliminary version of the
 real thing that is currently (as of perl5.002) under development.
 
+The printf subroutine does not use the value of
+C<$Math::BigFloat::rnd_mode> when rounding values for printing.
+Consequently, the way to print rounded values is
+to specify the number of digits both as an
+argument to C and in the C<%f> printf string,
+as follows:
+
+  printf "%.3f\n", $bigfloat->ffround(-3);
+
 =head1 AUTHOR
 
 Mark Biggar
diff --git a/gnu/usr.bin/perl/lib/Net/protoent.pm b/gnu/usr.bin/perl/lib/Net/protoent.pm
index 737ff5a33bc..334af789149 100644
--- a/gnu/usr.bin/perl/lib/Net/protoent.pm
+++ b/gnu/usr.bin/perl/lib/Net/protoent.pm
@@ -1,9 +1,10 @@
 package Net::protoent;
 use strict;
 
+use 5.005_64;
+our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 BEGIN { 
     use Exporter   ();
-    use vars       qw(@EXPORT @EXPORT_OK %EXPORT_TAGS);
     @EXPORT      = qw(getprotobyname getprotobynumber getprotoent);
     @EXPORT_OK   = qw( $p_name @p_aliases $p_proto );
     %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
diff --git a/gnu/usr.bin/perl/lib/Net/servent.pm b/gnu/usr.bin/perl/lib/Net/servent.pm
index fb85dd04bfa..c892af0bbea 100644
--- a/gnu/usr.bin/perl/lib/Net/servent.pm
+++ b/gnu/usr.bin/perl/lib/Net/servent.pm
@@ -1,9 +1,10 @@
 package Net::servent;
 use strict;
 
+use 5.005_64;
+our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 BEGIN {
     use Exporter   ();
-    use vars       qw(@EXPORT @EXPORT_OK %EXPORT_TAGS);
     @EXPORT      = qw(getservbyname getservbyport getservent getserv);
     @EXPORT_OK   = qw( $s_name @s_aliases $s_port $s_proto );
     %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
diff --git a/gnu/usr.bin/perl/lib/Pod/Checker.pm b/gnu/usr.bin/perl/lib/Pod/Checker.pm
new file mode 100644
index 00000000000..ae32677db1a
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/Checker.pm
@@ -0,0 +1,1195 @@
+#############################################################################
+# Pod/Checker.pm -- check pod documents for syntax errors
+#
+# Copyright (C) 1994-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::Checker;
+
+use vars qw($VERSION);
+$VERSION = 1.098;  ## Current version of this package
+require  5.005;    ## requires this Perl version or later
+
+use Pod::ParseUtils; ## for hyperlinks and lists
+
+=head1 NAME
+
+Pod::Checker, podchecker() - check pod documents for syntax errors
+
+=head1 SYNOPSIS
+
+  use Pod::Checker;
+
+  $syntax_okay = podchecker($filepath, $outputpath, %options);
+
+  my $checker = new Pod::Checker %options;
+  $checker->parse_from_file($filepath, \*STDERR);
+
+=head1 OPTIONS/ARGUMENTS
+
+C<$filepath> is the input POD to read and C<$outputpath> is
+where to write POD syntax error messages. Either argument may be a scalar
+indicating a file-path, or else a reference to an open filehandle.
+If unspecified, the input-file it defaults to C<\*STDIN>, and
+the output-file defaults to C<\*STDERR>.
+
+=head2 podchecker()
+
+This function can take a hash of options:
+
+=over 4
+
+=item B<-warnings> =E I
+
+Turn warnings on/off. See L<"Warnings">.
+
+=back
+
+=head1 DESCRIPTION
+
+B will perform syntax checking of Perl5 POD format documentation.
+
+I
+
+It is hoped that curious/ambitious user will help flesh out and add the
+additional features they wish to see in B and B
+and verify that the checks are consistent with L.
+
+The following checks are currently preformed:
+
+=over 4
+
+=item *
+
+Unknown '=xxxx' commands, unknown 'XE...E' interior-sequences,
+and unterminated interior sequences.
+
+=item *
+
+Check for proper balancing of C<=begin> and C<=end>. The contents of such
+a block are generally ignored, i.e. no syntax checks are performed.
+
+=item *
+
+Check for proper nesting and balancing of C<=over>, C<=item> and C<=back>.
+
+=item *
+
+Check for same nested interior-sequences (e.g. 
+C...LE...E...E>).
+
+=item *
+
+Check for malformed or nonexisting entities C...E>.
+
+=item *
+
+Check for correct syntax of hyperlinks C...E>. See L
+for details.
+
+=item *
+
+Check for unresolved document-internal links. This check may also reveal
+misspelled links that seem to be internal links but should be links
+to something else.
+
+=back
+
+=head1 DIAGNOSTICS
+
+=head2 Errors
+
+=over 4
+
+=item * empty =headn
+
+A heading (C<=head1> or C<=head2>) without any text? That ain't no
+heading!
+
+=item * =over on line I without closing =back
+
+The C<=over> command does not have a corresponding C<=back> before the
+next heading (C<=head1> or C<=head2>) or the end of the file.
+
+=item * =item without previous =over
+
+=item * =back without previous =over
+
+An C<=item> or C<=back> command has been found outside a
+C<=over>/C<=back> block.
+
+=item * No argument for =begin
+
+A C<=begin> command was found that is not followed by the formatter
+specification.
+
+=item * =end without =begin
+
+A standalone C<=end> command was found.
+
+=item * Nested =begin's
+
+There were at least two consecutive C<=begin> commands without
+the corresponding C<=end>. Only one C<=begin> may be active at
+a time.
+
+=item * =for without formatter specification
+
+There is no specification of the formatter after the C<=for> command.
+
+=item * unresolved internal link I
+
+The given link to I does not have a matching node in the current
+POD. This also happend when a single word node name is not enclosed in
+C<"">.
+
+=item * Unknown command "I"
+
+An invalid POD command has been found. Valid are C<=head1>, C<=head2>,
+C<=over>, C<=item>, C<=back>, C<=begin>, C<=end>, C<=for>, C<=pod>,
+C<=cut>
+
+=item * Unknown interior-sequence "I"
+
+An invalid markup command has been encountered. Valid are:
+CE>, CE>, CE>, CE>, 
+CE>, CE>, CE>, CE>, 
+CE>
+
+=item * nested commands IE...IE...E...E
+
+Two nested identical markup commands have been found. Generally this
+does not make sense.
+
+=item * garbled entity I
+
+The I found cannot be interpreted as a character entity.
+
+=item * Entity number out of range
+
+An entity specified by number (dec, hex, oct) is out of range (1-255).
+
+=item * malformed link LEE
+
+The link found cannot be parsed because it does not conform to the
+syntax described in L.
+
+=item * nonempty ZEE
+
+The CE> sequence is supposed to be empty.
+
+=item * empty XEE
+
+The index entry specified contains nothing but whitespace.
+
+=item * Spurious text after =pod / =cut
+
+The commands C<=pod> and C<=cut> do not take any arguments.
+
+=item * Spurious character(s) after =back
+
+The C<=back> command does not take any arguments.
+
+=back
+
+=head2 Warnings
+
+These may not necessarily cause trouble, but indicate mediocre style.
+
+=over 4
+
+=item * multiple occurence of link target I
+
+The POD file has some C<=item> and/or C<=head> commands that have
+the same text. Potential hyperlinks to such a text cannot be unique then.
+
+=item * line containing nothing but whitespace in paragraph
+
+There is some whitespace on a seemingly empty line. POD is very sensitive
+to such things, so this is flagged. B users switch on the B
+option to avoid this problem.
+
+=item * file does not start with =head
+
+The file starts with a different POD directive than head.
+This is most probably something you do not want.
+
+=item * No numeric argument for =over
+
+The C<=over> command is supposed to have a numeric argument (the
+indentation).
+
+=item * previous =item has no contents
+
+There is a list C<=item> right above the flagged line that has no
+text contents. You probably want to delete empty items.
+
+=item * preceding non-item paragraph(s)
+
+A list introduced by C<=over> starts with a text or verbatim paragraph,
+but continues with C<=item>s. Move the non-item paragraph out of the
+C<=over>/C<=back> block.
+
+=item * =item type mismatch (I vs. I)
+
+A list started with e.g. a bulletted C<=item> and continued with a
+numbered one. This is obviously inconsistent. For most translators the
+type of the I C<=item> determines the type of the list.
+
+=item * I unescaped CE> in paragraph
+
+Angle brackets not written as CltE> and CgtE>
+can potentially cause errors as they could be misinterpreted as
+markup commands.
+
+=item * Unknown entity
+
+A character entity was found that does not belong to the standard
+ISO set or the POD specials C and C.
+
+=item * No items in =over
+
+The list opened with C<=over> does not contain any items.
+
+=item * No argument for =item
+
+C<=item> without any parameters is deprecated. It should either be followed
+by C<*> to indicate an unordered list, by a number (optionally followed
+by a dot) to indicate an ordered (numbered) list or simple text for a
+definition list.
+
+=item * empty section in previous paragraph
+
+The previous section (introduced by a C<=head> command) does not contain
+any text. This usually indicates that something is missing. Note: A 
+C<=head1> followed immediately by C<=head2> does not trigger this warning.
+
+=item * Verbatim paragraph in NAME section
+
+The NAME section (C<=head1 NAME>) should consist of a single paragraph
+with the script/module name, followed by a dash `-' and a very short
+description of what the thing is good for.
+
+=item * Hyperlinks
+
+There are some warnings wrt. hyperlinks:
+Leading/trailing whitespace, newlines in hyperlinks,
+brackets C<()>.
+
+=back
+
+=head1 RETURN VALUE
+
+B returns the number of POD syntax errors found or -1 if
+there were no POD commands at all found in the file.
+
+=head1 EXAMPLES
+
+I<[T.B.D.]>
+
+=head1 INTERFACE
+
+While checking, this module collects document properties, e.g. the nodes
+for hyperlinks (C<=headX>, C<=item>) and index entries (CE>).
+POD translators can use this feature to syntax-check and get the nodes in
+a first pass before actually starting to convert. This is expensive in terms
+of execution time, but allows for very robust conversions.
+
+=cut
+
+#############################################################################
+
+use strict;
+#use diagnostics;
+use Carp;
+use Exporter;
+use Pod::Parser;
+require VMS::Filespec if $^O eq 'VMS';
+
+use vars qw(@ISA @EXPORT);
+@ISA = qw(Pod::Parser);
+@EXPORT = qw(&podchecker);
+
+use vars qw(%VALID_COMMANDS %VALID_SEQUENCES);
+
+my %VALID_COMMANDS = (
+    'pod'    =>  1,
+    'cut'    =>  1,
+    'head1'  =>  1,
+    'head2'  =>  1,
+    'over'   =>  1,
+    'back'   =>  1,
+    'item'   =>  1,
+    'for'    =>  1,
+    'begin'  =>  1,
+    'end'    =>  1,
+);
+
+my %VALID_SEQUENCES = (
+    'I'  =>  1,
+    'B'  =>  1,
+    'S'  =>  1,
+    'C'  =>  1,
+    'L'  =>  1,
+    'F'  =>  1,
+    'X'  =>  1,
+    'Z'  =>  1,
+    'E'  =>  1,
+);
+
+# stolen from HTML::Entities
+my %ENTITIES = (
+ # Some normal chars that have special meaning in SGML context
+ amp    => '&',  # ampersand 
+'gt'    => '>',  # greater than
+'lt'    => '<',  # less than
+ quot   => '"',  # double quote
+
+ # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
+ AElig	=> 'Æ',  # capital AE diphthong (ligature)
+ Aacute	=> 'Á',  # capital A, acute accent
+ Acirc	=> 'Â',  # capital A, circumflex accent
+ Agrave	=> 'À',  # capital A, grave accent
+ Aring	=> 'Å',  # capital A, ring
+ Atilde	=> 'Ã',  # capital A, tilde
+ Auml	=> 'Ä',  # capital A, dieresis or umlaut mark
+ Ccedil	=> 'Ç',  # capital C, cedilla
+ ETH	=> 'Ð',  # capital Eth, Icelandic
+ Eacute	=> 'É',  # capital E, acute accent
+ Ecirc	=> 'Ê',  # capital E, circumflex accent
+ Egrave	=> 'È',  # capital E, grave accent
+ Euml	=> 'Ë',  # capital E, dieresis or umlaut mark
+ Iacute	=> 'Í',  # capital I, acute accent
+ Icirc	=> 'Î',  # capital I, circumflex accent
+ Igrave	=> 'Ì',  # capital I, grave accent
+ Iuml	=> 'Ï',  # capital I, dieresis or umlaut mark
+ Ntilde	=> 'Ñ',  # capital N, tilde
+ Oacute	=> 'Ó',  # capital O, acute accent
+ Ocirc	=> 'Ô',  # capital O, circumflex accent
+ Ograve	=> 'Ò',  # capital O, grave accent
+ Oslash	=> 'Ø',  # capital O, slash
+ Otilde	=> 'Õ',  # capital O, tilde
+ Ouml	=> 'Ö',  # capital O, dieresis or umlaut mark
+ THORN	=> 'Þ',  # capital THORN, Icelandic
+ Uacute	=> 'Ú',  # capital U, acute accent
+ Ucirc	=> 'Û',  # capital U, circumflex accent
+ Ugrave	=> 'Ù',  # capital U, grave accent
+ Uuml	=> 'Ü',  # capital U, dieresis or umlaut mark
+ Yacute	=> 'Ý',  # capital Y, acute accent
+ aacute	=> 'á',  # small a, acute accent
+ acirc	=> 'â',  # small a, circumflex accent
+ aelig	=> 'æ',  # small ae diphthong (ligature)
+ agrave	=> 'à',  # small a, grave accent
+ aring	=> 'å',  # small a, ring
+ atilde	=> 'ã',  # small a, tilde
+ auml	=> 'ä',  # small a, dieresis or umlaut mark
+ ccedil	=> 'ç',  # small c, cedilla
+ eacute	=> 'é',  # small e, acute accent
+ ecirc	=> 'ê',  # small e, circumflex accent
+ egrave	=> 'è',  # small e, grave accent
+ eth	=> 'ð',  # small eth, Icelandic
+ euml	=> 'ë',  # small e, dieresis or umlaut mark
+ iacute	=> 'í',  # small i, acute accent
+ icirc	=> 'î',  # small i, circumflex accent
+ igrave	=> 'ì',  # small i, grave accent
+ iuml	=> 'ï',  # small i, dieresis or umlaut mark
+ ntilde	=> 'ñ',  # small n, tilde
+ oacute	=> 'ó',  # small o, acute accent
+ ocirc	=> 'ô',  # small o, circumflex accent
+ ograve	=> 'ò',  # small o, grave accent
+ oslash	=> 'ø',  # small o, slash
+ otilde	=> 'õ',  # small o, tilde
+ ouml	=> 'ö',  # small o, dieresis or umlaut mark
+ szlig	=> 'ß',  # small sharp s, German (sz ligature)
+ thorn	=> 'þ',  # small thorn, Icelandic
+ uacute	=> 'ú',  # small u, acute accent
+ ucirc	=> 'û',  # small u, circumflex accent
+ ugrave	=> 'ù',  # small u, grave accent
+ uuml	=> 'ü',  # small u, dieresis or umlaut mark
+ yacute	=> 'ý',  # small y, acute accent
+ yuml	=> 'ÿ',  # small y, dieresis or umlaut mark
+
+ # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
+ copy   => '©',  # copyright sign
+ reg    => '®',  # registered sign
+ nbsp   => "\240", # non breaking space
+
+ # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
+ iexcl  => '¡',
+ cent   => '¢',
+ pound  => '£',
+ curren => '¤',
+ yen    => '¥',
+ brvbar => '¦',
+ sect   => '§',
+ uml    => '¨',
+ ordf   => 'ª',
+ laquo  => '«',
+'not'   => '¬',    # not is a keyword in perl
+ shy    => '­',
+ macr   => '¯',
+ deg    => '°',
+ plusmn => '±',
+ sup1   => '¹',
+ sup2   => '²',
+ sup3   => '³',
+ acute  => '´',
+ micro  => 'µ',
+ para   => '¶',
+ middot => '·',
+ cedil  => '¸',
+ ordm   => 'º',
+ raquo  => '»',
+ frac14 => '¼',
+ frac12 => '½',
+ frac34 => '¾',
+ iquest => '¿',
+'times' => '×',    # times is a keyword in perl
+ divide => '÷',
+
+# some POD special entities
+ verbar => '|',
+ sol => '/'
+);
+
+##---------------------------------------------------------------------------
+
+##---------------------------------
+## Function definitions begin here
+##---------------------------------
+
+sub podchecker( $ ; $ % ) {
+    my ($infile, $outfile, %options) = @_;
+    local $_;
+
+    ## Set defaults
+    $infile  ||= \*STDIN;
+    $outfile ||= \*STDERR;
+
+    ## Now create a pod checker
+    my $checker = new Pod::Checker(%options);
+    $checker->parseopts(-process_cut_cmd => 1, -warnings => 1);
+
+    ## Now check the pod document for errors
+    $checker->parse_from_file($infile, $outfile);
+
+    ## Return the number of errors found
+    return $checker->num_errors();
+}
+
+##---------------------------------------------------------------------------
+
+##-------------------------------
+## Method definitions begin here
+##-------------------------------
+
+## sub new {
+##     my $this = shift;
+##     my $class = ref($this) || $this;
+##     my %params = @_;
+##     my $self = {%params};
+##     bless $self, $class;
+##     $self->initialize();
+##     return $self;
+## }
+
+sub initialize {
+    my $self = shift;
+    ## Initialize number of errors, and setup an error function to
+    ## increment this number and then print to the designated output.
+    $self->{_NUM_ERRORS} = 0;
+    $self->errorsub('poderror'); # set the error handling subroutine
+    $self->{_commands} = 0; # total number of POD commands encountered
+    $self->{_list_stack} = []; # stack for nested lists
+    $self->{_have_begin} = ''; # stores =begin
+    $self->{_links} = []; # stack for internal hyperlinks
+    $self->{_nodes} = []; # stack for =head/=item nodes
+    $self->{_index} = []; # text in X<>
+    # print warnings?
+    $self->{-warnings} = 1 unless(defined $self->{-warnings});
+    $self->{_current_head1} = ''; # the current =head1 block
+}
+
+##################################
+
+=over 4
+
+=item C<$checker-Epoderror( @args )>
+
+=item C<$checker-Epoderror( {%opts}, @args )>
+
+Internal method for printing errors and warnings. If no options are
+given, simply prints "@_". The following options are recognized and used
+to form the output:
+
+  -msg
+
+A message to print prior to C<@args>.
+
+  -line
+
+The line number the error occurred in.
+
+  -file
+
+The file (name) the error occurred in.
+
+  -severity
+
+The error level, should be 'WARNING' or 'ERROR'.
+
+=cut
+
+# Invoked as $self->poderror( @args ), or $self->poderror( {%opts}, @args )
+sub poderror {
+    my $self = shift;
+    my %opts = (ref $_[0]) ? %{shift()} : ();
+    $opts{-file} = VMS::Filespec::unixify($opts{-file}) if (exists($opts{-file}) && $^O eq 'VMS');
+
+    ## Retrieve options
+    chomp( my $msg  = ($opts{-msg} || "")."@_" );
+    my $line = (exists $opts{-line}) ? " at line $opts{-line}" : "";
+    my $file = (exists $opts{-file}) ? " in file $opts{-file}" : "";
+    unless (exists $opts{-severity}) {
+       ## See if can find severity in message prefix
+       $opts{-severity} = $1  if ( $msg =~ s/^\**\s*([A-Z]{3,}):\s+// );
+    }
+    my $severity = (exists $opts{-severity}) ? "*** $opts{-severity}: " : "";
+
+    ## Increment error count and print message "
+    ++($self->{_NUM_ERRORS}) 
+        if(!%opts || ($opts{-severity} && $opts{-severity} eq 'ERROR'));
+    my $out_fh = $self->output_handle();
+    print $out_fh ($severity, $msg, $line, $file, "\n")
+      if($self->{-warnings} || !%opts || $opts{-severity} ne 'WARNING');
+}
+
+##################################
+
+=item C<$checker-Enum_errors()>
+
+Set (if argument specified) and retrieve the number of errors found.
+
+=cut
+
+sub num_errors {
+   return (@_ > 1) ? ($_[0]->{_NUM_ERRORS} = $_[1]) : $_[0]->{_NUM_ERRORS};
+}
+
+##################################
+
+=item C<$checker-Ename()>
+
+Set (if argument specified) and retrieve the canonical name of POD as
+found in the C<=head1 NAME> section.
+
+=cut
+
+sub name {
+    return (@_ > 1 && $_[1]) ?
+        ($_[0]->{-name} = $_[1]) : $_[0]->{-name};  
+}
+
+##################################
+
+=item C<$checker-Enode()>
+
+Add (if argument specified) and retrieve the nodes (as defined by C<=headX>
+and C<=item>) of the current POD. The nodes are returned in the order of
+their occurence. They consist of plain text, each piece of whitespace is
+collapsed to a single blank.
+
+=cut
+
+sub node {
+    my ($self,$text) = @_;
+    if(defined $text) {
+        $text =~ s/\s+$//s; # strip trailing whitespace
+        $text =~ s/\s+/ /gs; # collapse whitespace
+        # add node, order important!
+        push(@{$self->{_nodes}}, $text);
+        # keep also a uniqueness counter
+        $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
+        return $text;
+    }
+    @{$self->{_nodes}};
+}
+
+##################################
+
+=item C<$checker-Eidx()>
+
+Add (if argument specified) and retrieve the index entries (as defined by
+CE>) of the current POD. They consist of plain text, each piece
+of whitespace is collapsed to a single blank.
+
+=cut
+
+# set/return index entries of current POD
+sub idx {
+    my ($self,$text) = @_;
+    if(defined $text) {
+        $text =~ s/\s+$//s; # strip trailing whitespace
+        $text =~ s/\s+/ /gs; # collapse whitespace
+        # add node, order important!
+        push(@{$self->{_index}}, $text);
+        # keep also a uniqueness counter
+        $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
+        return $text;
+    }
+    @{$self->{_index}};
+}
+
+##################################
+
+=item C<$checker-Ehyperlink()>
+
+Add (if argument specified) and retrieve the hyperlinks (as defined by
+CE>) of the current POD. They consist of an 2-item array: line
+number and C object.
+
+=back
+
+=cut
+
+# set/return hyperlinks of the current POD
+sub hyperlink {
+    my $self = shift;
+    if($_[0]) {
+        push(@{$self->{_links}}, $_[0]);
+        return $_[0];
+    }
+    @{$self->{_links}};
+}
+
+## overrides for Pod::Parser
+
+sub end_pod {
+    ## Do some final checks and
+    ## print the number of errors found
+    my $self   = shift;
+    my $infile = $self->input_file();
+    $infile = VMS::Filespec::unixify($infile) if $^O eq 'VMS';
+    my $out_fh = $self->output_handle();
+
+    if(@{$self->{_list_stack}}) {
+        # _TODO_ display, but don't count them for now
+        my $list;
+        while(($list = $self->_close_list('EOF',$infile)) &&
+          $list->indent() ne 'auto') {
+            $self->poderror({ -line => 'EOF', -file => $infile,
+                -severity => 'ERROR', -msg => "=over on line " .
+                $list->start() . " without closing =back" }); #"
+        }
+    }
+
+    # check validity of document internal hyperlinks
+    # first build the node names from the paragraph text
+    my %nodes;
+    foreach($self->node()) {
+        $nodes{$_} = 1;
+        if(/^(\S+)\s+/) {
+            # we have more than one word. Use the first as a node, too.
+            # This is used heavily in perlfunc.pod
+            $nodes{$1} ||= 2; # derived node
+        }
+    }
+    foreach($self->hyperlink()) {
+        my ($line,$link) = @$_;
+        # _TODO_ what if there is a link to the page itself by the name,
+        # e.g. in Tk::Pod : L
+        if($link->node() && !$link->page() && $link->type() ne 'hyperlink') {
+            my $node = $self->_check_ptree($self->parse_text($link->node(),
+                $line), $line, $infile, 'L');
+            if($node && !$nodes{$node}) {
+                $self->poderror({ -line => $line || '', -file => $infile,
+                    -severity => 'ERROR',
+                    -msg => "unresolved internal link '$node'"});
+            }
+        }
+    }
+
+    # check the internal nodes for uniqueness. This pertains to
+    # =headX, =item and X<...>
+    foreach(grep($self->{_unique_nodes}->{$_} > 1,
+      keys %{$self->{_unique_nodes}})) {
+        $self->poderror({ -line => '-', -file => $infile,
+            -severity => 'WARNING',
+            -msg => "multiple occurence of link target '$_'"});
+    }
+
+    ## Print the number of errors found
+    my $num_errors = $self->num_errors();
+    if ($num_errors > 0) {
+        printf $out_fh ("$infile has $num_errors pod syntax %s.\n",
+                      ($num_errors == 1) ? "error" : "errors");
+    }
+    elsif($self->{_commands} == 0) {
+        print $out_fh "$infile does not contain any pod commands.\n";
+        $self->num_errors(-1);
+    }
+    else {
+        print $out_fh "$infile pod syntax OK.\n";
+    }
+}
+
+# check a POD command directive
+sub command { 
+    my ($self, $cmd, $paragraph, $line_num, $pod_para) = @_;
+    my ($file, $line) = $pod_para->file_line;
+    ## Check the command syntax
+    my $arg; # this will hold the command argument
+    if (! $VALID_COMMANDS{$cmd}) {
+       $self->poderror({ -line => $line, -file => $file, -severity => 'ERROR',
+                         -msg => "Unknown command '$cmd'" });
+    }
+    else {
+        # found a valid command
+        if(!$self->{_commands}++ && $cmd !~ /^head/) {
+            $self->poderror({ -line => $line, -file => $file,
+                 -severity => 'WARNING', 
+                 -msg => "file does not start with =head" });
+        }
+        ## check syntax of particular command
+        if($cmd eq 'over') {
+            # check for argument
+            $arg = $self->interpolate_and_check($paragraph, $line,$file);
+            my $indent = 4; # default
+            if($arg && $arg =~ /^\s*(\d+)\s*$/) {
+                $indent = $1;
+            } else {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "No numeric argument for =over"});
+            }
+            # start a new list
+            $self->_open_list($indent,$line,$file);
+        }
+        elsif($cmd eq 'item') {
+            # are we in a list?
+            unless(@{$self->{_list_stack}}) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'ERROR', 
+                     -msg => "=item without previous =over" });
+                # auto-open in case we encounter many more
+                $self->_open_list('auto',$line,$file);
+            }
+            my $list = $self->{_list_stack}->[0];
+            # check whether the previous item had some contents
+            if(defined $self->{_list_item_contents} &&
+              $self->{_list_item_contents} == 0) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "previous =item has no contents" });
+            }
+            if($list->{_has_par}) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "preceding non-item paragraph(s)" });
+                delete $list->{_has_par};
+            }
+            # check for argument
+            $arg = $self->interpolate_and_check($paragraph, $line, $file);
+            if($arg && $arg =~ /(\S+)/) {
+                $arg =~ s/[\s\n]+$//;
+                my $type;
+                if($arg =~ /^[*]\s*(\S*.*)/) {
+                  $type = 'bullet';
+                  $self->{_list_item_contents} = $1 ? 1 : 0;
+                  $arg = $1;
+                }
+                elsif($arg =~ /^\d+\.?\s*(\S*)/) {
+                  $type = 'number';
+                  $self->{_list_item_contents} = $1 ? 1 : 0;
+                  $arg = $1;
+                }
+                else {
+                  $type = 'definition';
+                  $self->{_list_item_contents} = 1;
+                }
+                my $first = $list->type();
+                if($first && $first ne $type) {
+                    $self->poderror({ -line => $line, -file => $file,
+                       -severity => 'WARNING', 
+                       -msg => "=item type mismatch ('$first' vs. '$type')"});
+                }
+                else { # first item
+                    $list->type($type);
+                }
+            }
+            else {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "No argument for =item" });
+		$arg = ' '; # empty
+                $self->{_list_item_contents} = 0;
+            }
+            # add this item
+            $list->item($arg);
+            # remember this node
+            $self->node($arg);
+        }
+        elsif($cmd eq 'back') {
+            # check if we have an open list
+            unless(@{$self->{_list_stack}}) {
+                $self->poderror({ -line => $line, -file => $file,
+                         -severity => 'ERROR', 
+                         -msg => "=back without previous =over" });
+            }
+            else {
+                # check for spurious characters
+                $arg = $self->interpolate_and_check($paragraph, $line,$file);
+                if($arg && $arg =~ /\S/) {
+                    $self->poderror({ -line => $line, -file => $file,
+                         -severity => 'ERROR', 
+                         -msg => "Spurious character(s) after =back" });
+                }
+                # close list
+                my $list = $self->_close_list($line,$file);
+                # check for empty lists
+                if(!$list->item() && $self->{-warnings}) {
+                    $self->poderror({ -line => $line, -file => $file,
+                         -severity => 'WARNING', 
+                         -msg => "No items in =over (at line " .
+                         $list->start() . ") / =back list"}); #"
+                }
+            }
+        }
+        elsif($cmd =~ /^head(\d+)/) {
+            # check whether the previous =head section had some contents
+            if(defined $self->{_commands_in_head} &&
+              $self->{_commands_in_head} == 0 &&
+              defined $self->{_last_head} &&
+              $self->{_last_head} >= $1) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "empty section in previous paragraph"});
+            }
+            $self->{_commands_in_head} = -1;
+            $self->{_last_head} = $1;
+            # check if there is an open list
+            if(@{$self->{_list_stack}}) {
+                my $list;
+                while(($list = $self->_close_list($line,$file)) &&
+                  $list->indent() ne 'auto') {
+                    $self->poderror({ -line => $line, -file => $file,
+                         -severity => 'ERROR', 
+                         -msg => "=over on line ". $list->start() .
+                         " without closing =back (at $cmd)" });
+                }
+            }
+            # remember this node
+            $arg = $self->interpolate_and_check($paragraph, $line,$file);
+            $arg =~ s/[\s\n]+$//s;
+            $self->node($arg);
+            unless(length($arg)) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'ERROR', 
+                     -msg => "empty =$cmd"});
+            }
+            if($cmd eq 'head1') {
+                $self->{_current_head1} = $arg;
+            } else {
+                $self->{_current_head1} = '';
+            }
+        }
+        elsif($cmd eq 'begin') {
+            if($self->{_have_begin}) {
+                # already have a begin
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'ERROR', 
+                     -msg => "Nested =begin's (first at line " .
+                     $self->{_have_begin} . ")"});
+            }
+            else {
+                # check for argument
+                $arg = $self->interpolate_and_check($paragraph, $line,$file);
+                unless($arg && $arg =~ /(\S+)/) {
+                    $self->poderror({ -line => $line, -file => $file,
+                         -severity => 'ERROR', 
+                         -msg => "No argument for =begin"});
+                }
+                # remember the =begin
+                $self->{_have_begin} = "$line:$1";
+            }
+        }
+        elsif($cmd eq 'end') {
+            if($self->{_have_begin}) {
+                # close the existing =begin
+                $self->{_have_begin} = '';
+                # check for spurious characters
+                $arg = $self->interpolate_and_check($paragraph, $line,$file);
+                # the closing argument is optional
+                #if($arg && $arg =~ /\S/) {
+                #    $self->poderror({ -line => $line, -file => $file,
+                #         -severity => 'WARNING', 
+                #         -msg => "Spurious character(s) after =end" });
+                #}
+            }
+            else {
+                # don't have a matching =begin
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'ERROR', 
+                     -msg => "=end without =begin" });
+            }
+        }
+        elsif($cmd eq 'for') {
+            unless($paragraph =~ /\s*(\S+)\s*/) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'ERROR', 
+                     -msg => "=for without formatter specification" });
+            }
+            $arg = ''; # do not expand paragraph below
+        }
+        elsif($cmd =~ /^(pod|cut)$/) {
+            # check for argument
+            $arg = $self->interpolate_and_check($paragraph, $line,$file);
+            if($arg && $arg =~ /(\S+)/) {
+                $self->poderror({ -line => $line, -file => $file,
+                      -severity => 'ERROR', 
+                      -msg => "Spurious text after =$cmd"});
+            }
+        }
+    $self->{_commands_in_head}++;
+    ## Check the interior sequences in the command-text
+    $self->interpolate_and_check($paragraph, $line,$file)
+        unless(defined $arg);
+    }
+}
+
+sub _open_list
+{
+    my ($self,$indent,$line,$file) = @_;
+    my $list = Pod::List->new(
+           -indent => $indent,
+           -start => $line,
+           -file => $file);
+    unshift(@{$self->{_list_stack}}, $list);
+    undef $self->{_list_item_contents};
+    $list;
+}
+
+sub _close_list
+{
+    my ($self,$line,$file) = @_;
+    my $list = shift(@{$self->{_list_stack}});
+    if(defined $self->{_list_item_contents} &&
+      $self->{_list_item_contents} == 0) {
+        $self->poderror({ -line => $line, -file => $file,
+            -severity => 'WARNING', 
+            -msg => "previous =item has no contents" });
+    }
+    undef $self->{_list_item_contents};
+    $list;
+}
+
+# process a block of some text
+sub interpolate_and_check {
+    my ($self, $paragraph, $line, $file) = @_;
+    ## Check the interior sequences in the command-text
+    # and return the text
+    $self->_check_ptree(
+        $self->parse_text($paragraph,$line), $line, $file, '');
+}
+
+sub _check_ptree {
+    my ($self,$ptree,$line,$file,$nestlist) = @_;
+    local($_);
+    my $text = '';
+    # process each node in the parse tree
+    foreach(@$ptree) {
+        # regular text chunk
+        unless(ref) {
+            my $count;
+            # count the unescaped angle brackets
+            my $i = $_;
+            if($count = $i =~ tr/<>/<>/) {
+                $self->poderror({ -line => $line, -file => $file,
+                     -severity => 'WARNING', 
+                     -msg => "$count unescaped <> in paragraph" })
+                if($self->{-warnings});
+            }
+            $text .= $i;
+            next;
+        }
+        # have an interior sequence
+        my $cmd = $_->cmd_name();
+        my $contents = $_->parse_tree();
+        ($file,$line) = $_->file_line();
+        # check for valid tag
+        if (! $VALID_SEQUENCES{$cmd}) {
+            $self->poderror({ -line => $line, -file => $file,
+                 -severity => 'ERROR', 
+                 -msg => qq(Unknown interior-sequence '$cmd')});
+            # expand it anyway
+            $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+            next;
+        }
+        if($nestlist =~ /$cmd/) {
+            $self->poderror({ -line => $line, -file => $file,
+                 -severity => 'ERROR', 
+                 -msg => "nested commands $cmd<...$cmd<...>...>"});
+            # _TODO_ should we add the contents anyway?
+            # expand it anyway, see below
+        }
+        if($cmd eq 'E') {
+            # preserve entities
+            if(@$contents > 1 || ref $$contents[0] || $$contents[0] !~ /^\w+$/) {
+                $self->poderror({ -line => $line, -file => $file,
+                    -severity => 'ERROR', 
+                    -msg => "garbled entity " . $_->raw_text()});
+                next;
+            }
+            my $ent = $$contents[0];
+            my $val;
+            if($ent =~ /^0x[0-9a-f]+$/i) {
+                # hexadec entity
+                $val = hex($ent);
+            }
+            elsif($ent =~ /^0\d+$/) {
+                # octal
+                $val = oct($ent);
+            }
+            elsif($ent =~ /^\d+$/) {
+                # numeric entity
+                $val = $ent;
+            }
+            if(defined $val) {
+                if($val>0 && $val<256) {
+                    $text .= chr($val);
+                }
+                else {
+                    $self->poderror({ -line => $line, -file => $file,
+                        -severity => 'ERROR', 
+                        -msg => "Entity number out of range " . $_->raw_text()});
+                }
+            }
+            elsif($ENTITIES{$ent}) {
+                # known ISO entity
+                $text .= $ENTITIES{$ent};
+            }
+            else {
+                $self->poderror({ -line => $line, -file => $file,
+                    -severity => 'WARNING', 
+                    -msg => "Unknown entity " . $_->raw_text()});
+                $text .= "E<$ent>";
+            }
+        }
+        elsif($cmd eq 'L') {
+            # try to parse the hyperlink
+            my $link = Pod::Hyperlink->new($contents->raw_text());
+            unless(defined $link) {
+                $self->poderror({ -line => $line, -file => $file,
+                    -severity => 'ERROR', 
+                    -msg => "malformed link " . $_->raw_text() ." : $@"});
+                next;
+            }
+            $link->line($line); # remember line
+            if($self->{-warnings}) {
+                foreach my $w ($link->warning()) {
+                    $self->poderror({ -line => $line, -file => $file,
+                        -severity => 'WARNING', 
+                        -msg => $w });
+                }
+            }
+            # check the link text
+            $text .= $self->_check_ptree($self->parse_text($link->text(),
+                $line), $line, $file, "$nestlist$cmd");
+            # remember link
+            $self->hyperlink([$line,$link]);
+        }
+        elsif($cmd =~ /[BCFIS]/) {
+            # add the guts
+            $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+        }
+        elsif($cmd eq 'Z') {
+            if(length($contents->raw_text())) {
+                $self->poderror({ -line => $line, -file => $file,
+                    -severity => 'ERROR', 
+                    -msg => "Nonempty Z<>"});
+            }
+        }
+        elsif($cmd eq 'X') {
+            my $idx = $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
+            if($idx =~ /^\s*$/s) {
+                $self->poderror({ -line => $line, -file => $file,
+                    -severity => 'ERROR', 
+                    -msg => "Empty X<>"});
+            }
+            else {
+                # remember this node
+                $self->idx($idx);
+            }
+        }
+        else {
+            # not reached
+            die "internal error";
+        }
+    }
+    $text;
+}
+
+# process a block of verbatim text
+sub verbatim { 
+    ## Nothing particular to check
+    my ($self, $paragraph, $line_num, $pod_para) = @_;
+
+    $self->_preproc_par($paragraph);
+
+    if($self->{_current_head1} eq 'NAME') {
+        my ($file, $line) = $pod_para->file_line;
+        $self->poderror({ -line => $line, -file => $file,
+            -severity => 'WARNING',
+            -msg => 'Verbatim paragraph in NAME section' });
+    }
+}
+
+# process a block of regular text
+sub textblock { 
+    my ($self, $paragraph, $line_num, $pod_para) = @_;
+    my ($file, $line) = $pod_para->file_line;
+
+    $self->_preproc_par($paragraph);
+
+    # skip this paragraph if in a =begin block
+    unless($self->{_have_begin}) {
+        my $block = $self->interpolate_and_check($paragraph, $line,$file);
+        if($self->{_current_head1} eq 'NAME') {
+            if($block =~ /^\s*(\S+?)\s*[,-]/) {
+                # this is the canonical name
+                $self->{-name} = $1 unless(defined $self->{-name});
+            }
+        }
+    }
+}
+
+sub _preproc_par
+{
+    my $self = shift;
+    $_[0] =~ s/[\s\n]+$//;
+    if($_[0]) {
+        $self->{_commands_in_head}++;
+        $self->{_list_item_contents}++ if(defined $self->{_list_item_contents});
+        if(@{$self->{_list_stack}} && !$self->{_list_stack}->[0]->item()) {
+            $self->{_list_stack}->[0]->{_has_par} = 1;
+        }
+    }
+}
+
+1;
+
+__END__
+
+=head1 AUTHOR
+
+Brad Appleton Ebradapp@enteract.comE (initial version),
+Marek Rouchal Emarek@saftsack.fs.uni-bayreuth.deE
+
+Based on code for B written by
+Tom Christiansen Etchrist@mox.perl.comE
+
+=cut
+
diff --git a/gnu/usr.bin/perl/lib/Pod/Find.pm b/gnu/usr.bin/perl/lib/Pod/Find.pm
new file mode 100644
index 00000000000..8de197b71da
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/Find.pm
@@ -0,0 +1,278 @@
+#############################################################################  
+# Pod/Find.pm -- finds files containing POD documentation
+#
+# Author: Marek Rouchal 
+# 
+# Copyright (C) 1999-2000 by Marek Rouchal (and borrowing code
+# from Nick Ing-Simmon's PodToHtml). All rights reserved.
+# This file is part of "PodParser". Pod::Find is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::Find;
+
+use vars qw($VERSION);
+$VERSION = 0.12;   ## Current version of this package
+require  5.005;    ## requires this Perl version or later
+
+#############################################################################
+
+=head1 NAME
+
+Pod::Find - find POD documents in directory trees
+
+=head1 SYNOPSIS
+
+  use Pod::Find qw(pod_find simplify_name);
+  my %pods = pod_find({ -verbose => 1, -inc => 1 });
+  foreach(keys %pods) {
+     print "found library POD `$pods{$_}' in $_\n";
+  }
+
+  print "podname=",simplify_name('a/b/c/mymodule.pod'),"\n";
+
+=head1 DESCRIPTION
+
+B provides a function B that searches for POD
+documents in a given set of files and directories. It returns a hash
+with the file names as keys and the POD name as value. The POD name
+is derived from the file name and its position in the directory tree.
+
+E.g. when searching in F<$HOME/perl5lib>, the file
+F<$HOME/perl5lib/MyModule.pm> would get the POD name I,
+whereas F<$HOME/perl5lib/Myclass/Subclass.pm> would be
+I. The name information can be used for POD
+translators.
+
+Only text files containing at least one valid POD command are found.
+
+A warning is printed if more than one POD file with the same POD name
+is found, e.g. F in different directories. This usually
+indicates duplicate occurrences of modules in the I<@INC> search path.
+
+The function B is equivalent to B, but also
+strips Perl-like extensions (.pm, .pl, .pod) and extensions like
+F<.bat>, F<.cmd> on Win32 and OS/2, respectively.
+
+Note that neither B nor B are exported by
+default so be sure to specify them in the B statement if you need
+them:
+
+  use Pod::Find qw(pod_find simplify_name);
+
+=head1 OPTIONS
+
+The first argument for B may be a hash reference with options.
+The rest are either directories that are searched recursively or files.
+The POD names of files are the plain basenames with any Perl-like extension
+(.pm, .pl, .pod) stripped.
+
+=over 4
+
+=item B<-verbose>
+
+Print progress information while scanning.
+
+=item B<-perl>
+
+Apply Perl-specific heuristics to find the correct PODs. This includes
+stripping Perl-like extensions, omitting subdirectories that are numeric
+but do I match the current Perl interpreter's version id, suppressing
+F as a module hierarchy name etc.
+
+=item B<-script>
+
+Search for PODs in the current Perl interpreter's installation 
+B. This is taken from the local L module.
+
+=item B<-inc>
+
+Search for PODs in the current Perl interpreter's I<@INC> paths. This
+automatically considers paths specified in the C environment.
+
+=back
+
+=head1 AUTHOR
+
+Marek Rouchal Emarek@saftsack.fs.uni-bayreuth.deE,
+heavily borrowing code from Nick Ing-Simmons' PodToHtml.
+
+=head1 SEE ALSO
+
+L, L
+
+=cut
+
+use strict;
+#use diagnostics;
+use Exporter;
+use File::Spec;
+use File::Find;
+use Cwd;
+
+use vars qw(@ISA @EXPORT_OK $VERSION);
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(&pod_find &simplify_name);
+
+# package global variables
+my $SIMPLIFY_RX;
+
+# return a hash of the POD files found
+# first argument may be a hashref (options),
+# rest is a list of directories to search recursively
+sub pod_find
+{
+    my %opts;
+    if(ref $_[0]) {
+        %opts = %{shift()};
+    }
+
+    $opts{-verbose} ||= 0;
+    $opts{-perl}    ||= 0;
+
+    my (@search) = @_;
+
+    if($opts{-script}) {
+        require Config;
+        push(@search, $Config::Config{scriptdir});
+        $opts{-perl} = 1;
+    }
+
+    if($opts{-inc}) {
+        push(@search, grep($_ ne '.',@INC));
+        $opts{-perl} = 1;
+    }
+
+    if($opts{-perl}) {
+        require Config;
+        # this code simplifies the POD name for Perl modules:
+        # * remove "site_perl"
+        # * remove e.g. "i586-linux" (from 'archname')
+        # * remove e.g. 5.00503
+        # * remove pod/ if followed by *.pod (e.g. in pod/perlfunc.pod)
+        $SIMPLIFY_RX =
+          qq!^(?i:site_perl/|\Q$Config::Config{archname}\E/|\\d+\\.\\d+([_.]?\\d+)?/|pod/(?=.*?\\.pod\\z))*!;
+
+    }
+
+    my %dirs_visited;
+    my %pods;
+    my %names;
+    my $pwd = cwd();
+
+    foreach my $try (@search) {
+        unless(File::Spec->file_name_is_absolute($try)) {
+            # make path absolute
+            $try = File::Spec->catfile($pwd,$try);
+        }
+        # simplify path
+        $try = File::Spec->canonpath($try);
+        my $name;
+        if(-f $try) {
+            if($name = _check_and_extract_name($try, $opts{-verbose})) {
+                _check_for_duplicates($try, $name, \%names, \%pods);
+            }
+            next;
+        }
+        my $root_rx = qq!^\Q$try\E/!;
+        File::Find::find( sub {
+            my $item = $File::Find::name;
+            if(-d) {
+                if($dirs_visited{$item}) {
+                    warn "Directory '$item' already seen, skipping.\n"
+                        if($opts{-verbose});
+                    $File::Find::prune = 1;
+                    return;
+                }
+                else {
+                    $dirs_visited{$item} = 1;
+                }
+                if($opts{-perl} && /^(\d+\.[\d_]+)\z/s && eval "$1" != $]) {
+                    $File::Find::prune = 1;
+                    warn "Perl $] version mismatch on $_, skipping.\n"
+                        if($opts{-verbose});
+                }
+                return;
+            }
+            if($name = _check_and_extract_name($item, $opts{-verbose}, $root_rx)) {
+                _check_for_duplicates($item, $name, \%names, \%pods);
+            }
+        }, $try); # end of File::Find::find
+    }
+    chdir $pwd;
+    %pods;
+}
+
+sub _check_for_duplicates {
+    my ($file, $name, $names_ref, $pods_ref) = @_;
+    if($$names_ref{$name}) {
+        warn "Duplicate POD found (shadowing?): $name ($file)\n";
+        warn "    Already seen in ",
+            join(' ', grep($$pods_ref{$_} eq $name, keys %$pods_ref)),"\n";
+    }
+    else {
+        $$names_ref{$name} = 1;
+    }
+    $$pods_ref{$file} = $name;
+}
+
+sub _check_and_extract_name {
+    my ($file, $verbose, $root_rx) = @_;
+
+    # check extension or executable flag
+    # this involves testing the .bat extension on Win32!
+    unless($file =~ /\.(pod|pm|plx?)\z/i || (-f $file && -x _ && -T _)) {
+        return undef;
+    }
+
+    # check for one line of POD
+    unless(open(POD,"<$file")) {
+        warn "Error: $file is unreadable: $!\n";
+        return undef;
+    }
+    local $/ = undef;
+    my $pod = ;
+    close(POD);
+    unless($pod =~ /\n=(head\d|pod|over|item)\b/) {
+        warn "No POD in $file, skipping.\n"
+            if($verbose);
+        return;
+    }
+    undef $pod;
+
+    # strip non-significant path components
+    # _TODO_ what happens on e.g. Win32?
+    my $name = $file;
+    if(defined $root_rx) {
+        $name =~ s!$root_rx!!s;
+        $name =~ s!$SIMPLIFY_RX!!os if(defined $SIMPLIFY_RX);
+    }
+    else {
+        $name =~ s:^.*/::s;
+    }
+    _simplify($name);
+    $name =~ s!/+!::!g; #/
+    $name;
+}
+
+# basic simplification of the POD name:
+# basename & strip extension
+sub simplify_name {
+    my ($str) = @_;
+    # remove all path components
+    $str =~ s:^.*/::s;
+    _simplify($str);
+    $str;
+}
+
+# internal sub only
+sub _simplify {
+    # strip Perl's own extensions
+    $_[0] =~ s/\.(pod|pm|plx?)\z//i;
+    # strip meaningless extensions on Win32 and OS/2
+    $_[0] =~ s/\.(bat|exe|cmd)\z//i if($^O =~ /win|os2/i);
+}
+
+1;
+
diff --git a/gnu/usr.bin/perl/lib/Pod/InputObjects.pm b/gnu/usr.bin/perl/lib/Pod/InputObjects.pm
new file mode 100644
index 00000000000..849182bf371
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/InputObjects.pm
@@ -0,0 +1,933 @@
+#############################################################################
+# Pod/InputObjects.pm -- package which defines objects for input streams
+# and paragraphs and commands when parsing POD docs.
+#
+# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::InputObjects;
+
+use vars qw($VERSION);
+$VERSION = 1.12;  ## Current version of this package
+require  5.005;    ## requires this Perl version or later
+
+#############################################################################
+
+=head1 NAME
+
+Pod::InputObjects - objects representing POD input paragraphs, commands, etc.
+
+=head1 SYNOPSIS
+
+    use Pod::InputObjects;
+
+=head1 REQUIRES
+
+perl5.004, Carp
+
+=head1 EXPORTS
+
+Nothing.
+
+=head1 DESCRIPTION
+
+This module defines some basic input objects used by B when
+reading and parsing POD text from an input source. The following objects
+are defined:
+
+=over 4
+
+=begin __PRIVATE__
+
+=item B
+
+An object corresponding to a source of POD input text. It is mostly a
+wrapper around a filehandle or C-type object (or anything
+that implements the C method) which keeps track of some
+additional information relevant to the parsing of PODs.
+
+=end __PRIVATE__
+
+=item B
+
+An object corresponding to a paragraph of POD input text. It may be a
+plain paragraph, a verbatim paragraph, or a command paragraph (see
+L).
+
+=item B
+
+An object corresponding to an interior sequence command from the POD
+input text (see L).
+
+=item B
+
+An object corresponding to a tree of parsed POD text. Each "node" in
+a parse-tree (or I) is either a text-string or a reference to
+a B object. The nodes appear in the parse-tree
+in they order in which they were parsed from  left-to-right.
+
+=back
+
+Each of these input objects are described in further detail in the
+sections which follow.
+
+=cut
+
+#############################################################################
+
+use strict;
+#use diagnostics;
+#use Carp;
+
+#############################################################################
+
+package Pod::InputSource;
+
+##---------------------------------------------------------------------------
+
+=begin __PRIVATE__
+
+=head1 B
+
+This object corresponds to an input source or stream of POD
+documentation. When parsing PODs, it is necessary to associate and store
+certain context information with each input source. All of this
+information is kept together with the stream itself in one of these
+C objects. Each such object is merely a wrapper around
+an C object of some kind (or at least something that
+implements the C method). They have the following
+methods/attributes:
+
+=end __PRIVATE__
+
+=cut
+
+##---------------------------------------------------------------------------
+
+=begin __PRIVATE__
+
+=head2 B
+
+        my $pod_input1 = Pod::InputSource->new(-handle => $filehandle);
+        my $pod_input2 = new Pod::InputSource(-handle => $filehandle,
+                                              -name   => $name);
+        my $pod_input3 = new Pod::InputSource(-handle => \*STDIN);
+        my $pod_input4 = Pod::InputSource->new(-handle => \*STDIN,
+                                               -name => "(STDIN)");
+
+This is a class method that constructs a C object and
+returns a reference to the new input source object. It takes one or more
+keyword arguments in the form of a hash. The keyword C<-handle> is
+required and designates the corresponding input handle. The keyword
+C<-name> is optional and specifies the name associated with the input
+handle (typically a file name).
+
+=end __PRIVATE__
+
+=cut
+
+sub new {
+    ## Determine if we were called via an object-ref or a classname
+    my $this = shift;
+    my $class = ref($this) || $this;
+
+    ## Any remaining arguments are treated as initial values for the
+    ## hash that is used to represent this object. Note that we default
+    ## certain values by specifying them *before* the arguments passed.
+    ## If they are in the argument list, they will override the defaults.
+    my $self = { -name        => '(unknown)',
+                 -handle      => undef,
+                 -was_cutting => 0,
+                 @_ };
+
+    ## Bless ourselves into the desired class and perform any initialization
+    bless $self, $class;
+    return $self;
+}
+
+##---------------------------------------------------------------------------
+
+=begin __PRIVATE__
+
+=head2 B
+
+        my $filename = $pod_input->name();
+        $pod_input->name($new_filename_to_use);
+
+This method gets/sets the name of the input source (usually a filename).
+If no argument is given, it returns a string containing the name of
+the input source; otherwise it sets the name of the input source to the
+contents of the given argument.
+
+=end __PRIVATE__
+
+=cut
+
+sub name {
+   (@_ > 1)  and  $_[0]->{'-name'} = $_[1];
+   return $_[0]->{'-name'};
+}
+
+## allow 'filename' as an alias for 'name'
+*filename = \&name;
+
+##---------------------------------------------------------------------------
+
+=begin __PRIVATE__
+
+=head2 B
+
+        my $handle = $pod_input->handle();
+
+Returns a reference to the handle object from which input is read (the
+one used to contructed this input source object).
+
+=end __PRIVATE__
+
+=cut
+
+sub handle {
+   return $_[0]->{'-handle'};
+}
+
+##---------------------------------------------------------------------------
+
+=begin __PRIVATE__
+
+=head2 B
+
+        print "Yes.\n" if ($pod_input->was_cutting());
+
+The value of the C state (that the B method would
+have returned) immediately before any input was read from this input
+stream. After all input from this stream has been read, the C
+state is restored to this value.
+
+=end __PRIVATE__
+
+=cut
+
+sub was_cutting {
+   (@_ > 1)  and  $_[0]->{-was_cutting} = $_[1];
+   return $_[0]->{-was_cutting};
+}
+
+##---------------------------------------------------------------------------
+
+#############################################################################
+
+package Pod::Paragraph;
+
+##---------------------------------------------------------------------------
+
+=head1 B
+
+An object representing a paragraph of POD input text.
+It has the following methods/attributes:
+
+=cut
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $pod_para1 = Pod::Paragraph->new(-text => $text);
+        my $pod_para2 = Pod::Paragraph->new(-name => $cmd,
+                                            -text => $text);
+        my $pod_para3 = new Pod::Paragraph(-text => $text);
+        my $pod_para4 = new Pod::Paragraph(-name => $cmd,
+                                           -text => $text);
+        my $pod_para5 = Pod::Paragraph->new(-name => $cmd,
+                                            -text => $text,
+                                            -file => $filename,
+                                            -line => $line_number);
+
+This is a class method that constructs a C object and
+returns a reference to the new paragraph object. It may be given one or
+two keyword arguments. The C<-text> keyword indicates the corresponding
+text of the POD paragraph. The C<-name> keyword indicates the name of
+the corresponding POD command, such as C or C (it should
+I contain the C<=> prefix); this is needed only if the POD
+paragraph corresponds to a command paragraph. The C<-file> and C<-line>
+keywords indicate the filename and line number corresponding to the
+beginning of the paragraph 
+
+=cut
+
+sub new {
+    ## Determine if we were called via an object-ref or a classname
+    my $this = shift;
+    my $class = ref($this) || $this;
+
+    ## Any remaining arguments are treated as initial values for the
+    ## hash that is used to represent this object. Note that we default
+    ## certain values by specifying them *before* the arguments passed.
+    ## If they are in the argument list, they will override the defaults.
+    my $self = {
+          -name       => undef,
+          -text       => (@_ == 1) ? $_[0] : undef,
+          -file       => '',
+          -line       => 0,
+          -prefix     => '=',
+          -separator  => ' ',
+          -ptree => [],
+          @_
+    };
+
+    ## Bless ourselves into the desired class and perform any initialization
+    bless $self, $class;
+    return $self;
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $para_cmd = $pod_para->cmd_name();
+
+If this paragraph is a command paragraph, then this method will return 
+the name of the command (I any leading C<=> prefix).
+
+=cut
+
+sub cmd_name {
+   (@_ > 1)  and  $_[0]->{'-name'} = $_[1];
+   return $_[0]->{'-name'};
+}
+
+## let name() be an alias for cmd_name()
+*name = \&cmd_name;
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $para_text = $pod_para->text();
+
+This method will return the corresponding text of the paragraph.
+
+=cut
+
+sub text {
+   (@_ > 1)  and  $_[0]->{'-text'} = $_[1];
+   return $_[0]->{'-text'};
+}       
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $raw_pod_para = $pod_para->raw_text();
+
+This method will return the I text of the POD paragraph, exactly
+as it appeared in the input.
+
+=cut
+
+sub raw_text {
+   return $_[0]->{'-text'}  unless (defined $_[0]->{'-name'});
+   return $_[0]->{'-prefix'} . $_[0]->{'-name'} . 
+          $_[0]->{'-separator'} . $_[0]->{'-text'};
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $prefix = $pod_para->cmd_prefix();
+
+If this paragraph is a command paragraph, then this method will return 
+the prefix used to denote the command (which should be the string "="
+or "==").
+
+=cut
+
+sub cmd_prefix {
+   return $_[0]->{'-prefix'};
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $separator = $pod_para->cmd_separator();
+
+If this paragraph is a command paragraph, then this method will return
+the text used to separate the command name from the rest of the
+paragraph (if any).
+
+=cut
+
+sub cmd_separator {
+   return $_[0]->{'-separator'};
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $ptree = $pod_parser->parse_text( $pod_para->text() );
+        $pod_para->parse_tree( $ptree );
+        $ptree = $pod_para->parse_tree();
+
+This method will get/set the corresponding parse-tree of the paragraph's text.
+
+=cut
+
+sub parse_tree {
+   (@_ > 1)  and  $_[0]->{'-ptree'} = $_[1];
+   return $_[0]->{'-ptree'};
+}       
+
+## let ptree() be an alias for parse_tree()
+*ptree = \&parse_tree;
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my ($filename, $line_number) = $pod_para->file_line();
+        my $position = $pod_para->file_line();
+
+Returns the current filename and line number for the paragraph
+object.  If called in an array context, it returns a list of two
+elements: first the filename, then the line number. If called in
+a scalar context, it returns a string containing the filename, followed
+by a colon (':'), followed by the line number.
+
+=cut
+
+sub file_line {
+   my @loc = ($_[0]->{'-file'} || '',
+              $_[0]->{'-line'} || 0);
+   return (wantarray) ? @loc : join(':', @loc);
+}
+
+##---------------------------------------------------------------------------
+
+#############################################################################
+
+package Pod::InteriorSequence;
+
+##---------------------------------------------------------------------------
+
+=head1 B
+
+An object representing a POD interior sequence command.
+It has the following methods/attributes:
+
+=cut
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $pod_seq1 = Pod::InteriorSequence->new(-name => $cmd
+                                                  -ldelim => $delimiter);
+        my $pod_seq2 = new Pod::InteriorSequence(-name => $cmd,
+                                                 -ldelim => $delimiter);
+        my $pod_seq3 = new Pod::InteriorSequence(-name => $cmd,
+                                                 -ldelim => $delimiter,
+                                                 -file => $filename,
+                                                 -line => $line_number);
+
+        my $pod_seq4 = new Pod::InteriorSequence(-name => $cmd, $ptree);
+        my $pod_seq5 = new Pod::InteriorSequence($cmd, $ptree);
+
+This is a class method that constructs a C object
+and returns a reference to the new interior sequence object. It should
+be given two keyword arguments.  The C<-ldelim> keyword indicates the
+corresponding left-delimiter of the interior sequence (e.g. 'E').
+The C<-name> keyword indicates the name of the corresponding interior
+sequence command, such as C or C or C. The C<-file> and
+C<-line> keywords indicate the filename and line number corresponding
+to the beginning of the interior sequence. If the C<$ptree> argument is
+given, it must be the last argument, and it must be either string, or
+else an array-ref suitable for passing to B (or
+it may be a reference to an Pod::ParseTree object).
+
+=cut
+
+sub new {
+    ## Determine if we were called via an object-ref or a classname
+    my $this = shift;
+    my $class = ref($this) || $this;
+
+    ## See if first argument has no keyword
+    if (((@_ <= 2) or (@_ % 2)) and $_[0] !~ /^-\w/) {
+       ## Yup - need an implicit '-name' before first parameter
+       unshift @_, '-name';
+    }
+
+    ## See if odd number of args
+    if ((@_ % 2) != 0) {
+       ## Yup - need an implicit '-ptree' before the last parameter
+       splice @_, $#_, 0, '-ptree';
+    }
+
+    ## Any remaining arguments are treated as initial values for the
+    ## hash that is used to represent this object. Note that we default
+    ## certain values by specifying them *before* the arguments passed.
+    ## If they are in the argument list, they will override the defaults.
+    my $self = {
+          -name       => (@_ == 1) ? $_[0] : undef,
+          -file       => '',
+          -line       => 0,
+          -ldelim     => '<',
+          -rdelim     => '>',
+          @_
+    };
+
+    ## Initialize contents if they havent been already
+    my $ptree = $self->{'-ptree'} || new Pod::ParseTree();
+    if ( ref $ptree =~ /^(ARRAY)?$/ ) {
+        ## We have an array-ref, or a normal scalar. Pass it as an
+        ## an argument to the ptree-constructor
+        $ptree = new Pod::ParseTree($1 ? [$ptree] : $ptree);
+    }
+    $self->{'-ptree'} = $ptree;
+
+    ## Bless ourselves into the desired class and perform any initialization
+    bless $self, $class;
+    return $self;
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $seq_cmd = $pod_seq->cmd_name();
+
+The name of the interior sequence command.
+
+=cut
+
+sub cmd_name {
+   (@_ > 1)  and  $_[0]->{'-name'} = $_[1];
+   return $_[0]->{'-name'};
+}
+
+## let name() be an alias for cmd_name()
+*name = \&cmd_name;
+
+##---------------------------------------------------------------------------
+
+## Private subroutine to set the parent pointer of all the given
+## children that are interior-sequences to be $self
+
+sub _set_child2parent_links {
+   my ($self, @children) = @_;
+   ## Make sure any sequences know who their parent is
+   for (@children) {
+      next  unless (length  and  ref  and  ref ne 'SCALAR');
+      if (UNIVERSAL::isa($_, 'Pod::InteriorSequence') or
+          UNIVERSAL::can($_, 'nested'))
+      {
+          $_->nested($self);
+      }
+   }
+}
+
+## Private subroutine to unset child->parent links
+
+sub _unset_child2parent_links {
+   my $self = shift;
+   $self->{'-parent_sequence'} = undef;
+   my $ptree = $self->{'-ptree'};
+   for (@$ptree) {
+      next  unless (length  and  ref  and  ref ne 'SCALAR');
+      $_->_unset_child2parent_links()
+          if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
+   }
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        $pod_seq->prepend($text);
+        $pod_seq1->prepend($pod_seq2);
+
+Prepends the given string or parse-tree or sequence object to the parse-tree
+of this interior sequence.
+
+=cut
+
+sub prepend {
+   my $self  = shift;
+   $self->{'-ptree'}->prepend(@_);
+   _set_child2parent_links($self, @_);
+   return $self;
+}       
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        $pod_seq->append($text);
+        $pod_seq1->append($pod_seq2);
+
+Appends the given string or parse-tree or sequence object to the parse-tree
+of this interior sequence.
+
+=cut
+
+sub append {
+   my $self = shift;
+   $self->{'-ptree'}->append(@_);
+   _set_child2parent_links($self, @_);
+   return $self;
+}       
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        $outer_seq = $pod_seq->nested || print "not nested";
+
+If this interior sequence is nested inside of another interior
+sequence, then the outer/parent sequence that contains it is
+returned. Otherwise C is returned.
+
+=cut
+
+sub nested {
+   my $self = shift;
+  (@_ == 1)  and  $self->{'-parent_sequence'} = shift;
+   return  $self->{'-parent_sequence'} || undef;
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $seq_raw_text = $pod_seq->raw_text();
+
+This method will return the I text of the POD interior sequence,
+exactly as it appeared in the input.
+
+=cut
+
+sub raw_text {
+   my $self = shift;
+   my $text = $self->{'-name'} . $self->{'-ldelim'};
+   for ( $self->{'-ptree'}->children ) {
+      $text .= (ref $_) ? $_->raw_text : $_;
+   }
+   $text .= $self->{'-rdelim'};
+   return $text;
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $ldelim = $pod_seq->left_delimiter();
+
+The leftmost delimiter beginning the argument text to the interior
+sequence (should be "<").
+
+=cut
+
+sub left_delimiter {
+   (@_ > 1)  and  $_[0]->{'-ldelim'} = $_[1];
+   return $_[0]->{'-ldelim'};
+}
+
+## let ldelim() be an alias for left_delimiter()
+*ldelim = \&left_delimiter;
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+The rightmost delimiter beginning the argument text to the interior
+sequence (should be ">").
+
+=cut
+
+sub right_delimiter {
+   (@_ > 1)  and  $_[0]->{'-rdelim'} = $_[1];
+   return $_[0]->{'-rdelim'};
+}
+
+## let rdelim() be an alias for right_delimiter()
+*rdelim = \&right_delimiter;
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $ptree = $pod_parser->parse_text($paragraph_text);
+        $pod_seq->parse_tree( $ptree );
+        $ptree = $pod_seq->parse_tree();
+
+This method will get/set the corresponding parse-tree of the interior
+sequence's text.
+
+=cut
+
+sub parse_tree {
+   (@_ > 1)  and  $_[0]->{'-ptree'} = $_[1];
+   return $_[0]->{'-ptree'};
+}       
+
+## let ptree() be an alias for parse_tree()
+*ptree = \&parse_tree;
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my ($filename, $line_number) = $pod_seq->file_line();
+        my $position = $pod_seq->file_line();
+
+Returns the current filename and line number for the interior sequence
+object.  If called in an array context, it returns a list of two
+elements: first the filename, then the line number. If called in
+a scalar context, it returns a string containing the filename, followed
+by a colon (':'), followed by the line number.
+
+=cut
+
+sub file_line {
+   my @loc = ($_[0]->{'-file'}  || '',
+              $_[0]->{'-line'}  || 0);
+   return (wantarray) ? @loc : join(':', @loc);
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+This method performs any necessary cleanup for the interior-sequence.
+If you override this method then it is B that you invoke
+the parent method from within your own method, otherwise
+I
+
+=cut
+
+sub DESTROY {
+   ## We need to get rid of all child->parent pointers throughout the
+   ## tree so their reference counts will go to zero and they can be
+   ## garbage-collected
+   _unset_child2parent_links(@_);
+}
+
+##---------------------------------------------------------------------------
+
+#############################################################################
+
+package Pod::ParseTree;
+
+##---------------------------------------------------------------------------
+
+=head1 B
+
+This object corresponds to a tree of parsed POD text. As POD text is
+scanned from left to right, it is parsed into an ordered list of
+text-strings and B objects (in order of
+appearance). A B object corresponds to this list of
+strings and sequences. Each interior sequence in the parse-tree may
+itself contain a parse-tree (since interior sequences may be nested).
+
+=cut
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $ptree1 = Pod::ParseTree->new;
+        my $ptree2 = new Pod::ParseTree;
+        my $ptree4 = Pod::ParseTree->new($array_ref);
+        my $ptree3 = new Pod::ParseTree($array_ref);
+
+This is a class method that constructs a C object and
+returns a reference to the new parse-tree. If a single-argument is given,
+it must be a reference to an array, and is used to initialize the root
+(top) of the parse tree.
+
+=cut
+
+sub new {
+    ## Determine if we were called via an object-ref or a classname
+    my $this = shift;
+    my $class = ref($this) || $this;
+
+    my $self = (@_ == 1  and  ref $_[0]) ? $_[0] : [];
+
+    ## Bless ourselves into the desired class and perform any initialization
+    bless $self, $class;
+    return $self;
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+        my $top_node = $ptree->top();
+        $ptree->top( $top_node );
+        $ptree->top( @children );
+
+This method gets/sets the top node of the parse-tree. If no arguments are
+given, it returns the topmost node in the tree (the root), which is also
+a B. If it is given a single argument that is a reference,
+then the reference is assumed to a parse-tree and becomes the new top node.
+Otherwise, if arguments are given, they are treated as the new list of
+children for the top node.
+
+=cut
+
+sub top {
+   my $self = shift;
+   if (@_ > 0) {
+      @{ $self } = (@_ == 1  and  ref $_[0]) ? ${ @_ } : @_;
+   }
+   return $self;
+}
+
+## let parse_tree() & ptree() be aliases for the 'top' method
+*parse_tree = *ptree = \⊤
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+This method gets/sets the children of the top node in the parse-tree.
+If no arguments are given, it returns the list (array) of children
+(each of which should be either a string or a B.
+Otherwise, if arguments are given, they are treated as the new list of
+children for the top node.
+
+=cut
+
+sub children {
+   my $self = shift;
+   if (@_ > 0) {
+      @{ $self } = (@_ == 1  and  ref $_[0]) ? ${ @_ } : @_;
+   }
+   return @{ $self };
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+This method prepends the given text or parse-tree to the current parse-tree.
+If the first item on the parse-tree is text and the argument is also text,
+then the text is prepended to the first item (not added as a separate string).
+Otherwise the argument is added as a new string or parse-tree I
+the current one.
+
+=cut
+
+use vars qw(@ptree);  ## an alias used for performance reasons
+
+sub prepend {
+   my $self = shift;
+   local *ptree = $self;
+   for (@_) {
+      next  unless length;
+      if (@ptree  and  !(ref $ptree[0])  and  !(ref $_)) {
+         $ptree[0] = $_ . $ptree[0];
+      }
+      else {
+         unshift @ptree, $_;
+      }
+   }
+}
+
+##---------------------------------------------------------------------------
+
+=head2 B
+
+This method appends the given text or parse-tree to the current parse-tree.
+If the last item on the parse-tree is text and the argument is also text,
+then the text is appended to the last item (not added as a separate string).
+Otherwise the argument is added as a new string or parse-tree I
+the current one.
+
+=cut
+
+sub append {
+   my $self = shift;
+   local *ptree = $self;
+   for (@_) {
+      next  unless length;
+      if (@ptree  and  !(ref $ptree[-1])  and  !(ref $_)) {
+         $ptree[-1] .= $_;
+      }
+      else {
+         push @ptree, $_;
+      }
+   }
+}
+
+=head2 B
+
+        my $ptree_raw_text = $ptree->raw_text();
+
+This method will return the I text of the POD parse-tree
+exactly as it appeared in the input.
+
+=cut
+
+sub raw_text {
+   my $self = shift;
+   my $text = "";
+   for ( @$self ) {
+      $text .= (ref $_) ? $_->raw_text : $_;
+   }
+   return $text;
+}
+
+##---------------------------------------------------------------------------
+
+## Private routines to set/unset child->parent links
+
+sub _unset_child2parent_links {
+   my $self = shift;
+   local *ptree = $self;
+   for (@ptree) {
+       next  unless (length  and  ref  and  ref ne 'SCALAR');
+       $_->_unset_child2parent_links()
+           if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
+   }
+}
+
+sub _set_child2parent_links {
+    ## nothing to do, Pod::ParseTrees cant have parent pointers
+}
+
+=head2 B
+
+This method performs any necessary cleanup for the parse-tree.
+If you override this method then it is B
+that you invoke the parent method from within your own method,
+otherwise I
+
+=cut
+
+sub DESTROY {
+   ## We need to get rid of all child->parent pointers throughout the
+   ## tree so their reference counts will go to zero and they can be
+   ## garbage-collected
+   _unset_child2parent_links(@_);
+}
+
+#############################################################################
+
+=head1 SEE ALSO
+
+See L, L
+
+=head1 AUTHOR
+
+Brad Appleton Ebradapp@enteract.comE
+
+=cut
+
+1;
diff --git a/gnu/usr.bin/perl/lib/Pod/Man.pm b/gnu/usr.bin/perl/lib/Pod/Man.pm
new file mode 100644
index 00000000000..b23e8480835
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/Man.pm
@@ -0,0 +1,1217 @@
+# Pod::Man -- Convert POD data to formatted *roff input.
+# $Id: Man.pm,v 1.1.1.1 2000/04/06 16:09:47 millert Exp $
+#
+# Copyright 1999, 2000 by Russ Allbery 
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# This module is intended to be a replacement for the pod2man script
+# distributed with versions of Perl prior to 5.6, and attempts to match its
+# output except for some specific circumstances where other decisions seemed
+# to produce better output.  It uses Pod::Parser and is designed to be easy
+# to subclass.
+#
+# Perl core hackers, please note that this module is also separately
+# maintained outside of the Perl core as part of the podlators.  Please send
+# me any patches at the address above in addition to sending them to the
+# standard Perl mailing lists.
+
+############################################################################
+# Modules and declarations
+############################################################################
+
+package Pod::Man;
+
+require 5.004;
+
+use Carp qw(carp croak);
+use Pod::Parser ();
+
+use strict;
+use subs qw(makespace);
+use vars qw(@ISA %ESCAPES $PREAMBLE $VERSION);
+
+@ISA = qw(Pod::Parser);
+
+# Don't use the CVS revision as the version, since this module is also in
+# Perl core and too many things could munge CVS magic revision strings.
+# This number should ideally be the same as the CVS revision in podlators,
+# however.
+$VERSION = 1.02;
+
+
+############################################################################
+# Preamble and *roff output tables
+############################################################################
+
+# The following is the static preamble which starts all *roff output we
+# generate.  It's completely static except for the font to use as a
+# fixed-width font, which is designed by @CFONT@.  $PREAMBLE should
+# therefore be run through s/\@CFONT\@//g before output.
+$PREAMBLE = <<'----END OF PREAMBLE----';
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.de Vb \" Begin verbatim text
+.ft @CFONT@
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
+.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
+.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` `
+.    ds C' '
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr
+.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
+.\" index entries marked with X<> in POD.  Of course, you'll have to process
+.\" the output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+.    .
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it
+.\" makes way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.bd B 3
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+----END OF PREAMBLE----
+                                   
+# This table is taken nearly verbatim from Tom Christiansen's pod2man.  It
+# assumes that the standard preamble has already been printed, since that's
+# what defines all of the accent marks.  Note that some of these are quoted
+# with double quotes since they contain embedded single quotes, so use \\
+# uniformly for backslash for readability.
+%ESCAPES = (
+    'amp'       =>    '&',      # ampersand
+    'lt'        =>    '<',      # left chevron, less-than
+    'gt'        =>    '>',      # right chevron, greater-than
+    'quot'      =>    '"',      # double quote
+
+    'Aacute'    =>    "A\\*'",  # capital A, acute accent
+    'aacute'    =>    "a\\*'",  # small a, acute accent
+    'Acirc'     =>    'A\\*^',  # capital A, circumflex accent
+    'acirc'     =>    'a\\*^',  # small a, circumflex accent
+    'AElig'     =>    '\*(AE',  # capital AE diphthong (ligature)
+    'aelig'     =>    '\*(ae',  # small ae diphthong (ligature)
+    'Agrave'    =>    "A\\*`",  # capital A, grave accent
+    'agrave'    =>    "A\\*`",  # small a, grave accent
+    'Aring'     =>    'A\\*o',  # capital A, ring
+    'aring'     =>    'a\\*o',  # small a, ring
+    'Atilde'    =>    'A\\*~',  # capital A, tilde
+    'atilde'    =>    'a\\*~',  # small a, tilde
+    'Auml'      =>    'A\\*:',  # capital A, dieresis or umlaut mark
+    'auml'      =>    'a\\*:',  # small a, dieresis or umlaut mark
+    'Ccedil'    =>    'C\\*,',  # capital C, cedilla
+    'ccedil'    =>    'c\\*,',  # small c, cedilla
+    'Eacute'    =>    "E\\*'",  # capital E, acute accent
+    'eacute'    =>    "e\\*'",  # small e, acute accent
+    'Ecirc'     =>    'E\\*^',  # capital E, circumflex accent
+    'ecirc'     =>    'e\\*^',  # small e, circumflex accent
+    'Egrave'    =>    'E\\*`',  # capital E, grave accent
+    'egrave'    =>    'e\\*`',  # small e, grave accent
+    'ETH'       =>    '\\*(D-', # capital Eth, Icelandic
+    'eth'       =>    '\\*(d-', # small eth, Icelandic
+    'Euml'      =>    'E\\*:',  # capital E, dieresis or umlaut mark
+    'euml'      =>    'e\\*:',  # small e, dieresis or umlaut mark
+    'Iacute'    =>    "I\\*'",  # capital I, acute accent
+    'iacute'    =>    "i\\*'",  # small i, acute accent
+    'Icirc'     =>    'I\\*^',  # capital I, circumflex accent
+    'icirc'     =>    'i\\*^',  # small i, circumflex accent
+    'Igrave'    =>    'I\\*`',  # capital I, grave accent
+    'igrave'    =>    'i\\*`',  # small i, grave accent
+    'Iuml'      =>    'I\\*:',  # capital I, dieresis or umlaut mark
+    'iuml'      =>    'i\\*:',  # small i, dieresis or umlaut mark
+    'Ntilde'    =>    'N\*~',   # capital N, tilde
+    'ntilde'    =>    'n\*~',   # small n, tilde
+    'Oacute'    =>    "O\\*'",  # capital O, acute accent
+    'oacute'    =>    "o\\*'",  # small o, acute accent
+    'Ocirc'     =>    'O\\*^',  # capital O, circumflex accent
+    'ocirc'     =>    'o\\*^',  # small o, circumflex accent
+    'Ograve'    =>    'O\\*`',  # capital O, grave accent
+    'ograve'    =>    'o\\*`',  # small o, grave accent
+    'Oslash'    =>    'O\\*/',  # capital O, slash
+    'oslash'    =>    'o\\*/',  # small o, slash
+    'Otilde'    =>    'O\\*~',  # capital O, tilde
+    'otilde'    =>    'o\\*~',  # small o, tilde
+    'Ouml'      =>    'O\\*:',  # capital O, dieresis or umlaut mark
+    'ouml'      =>    'o\\*:',  # small o, dieresis or umlaut mark
+    'szlig'     =>    '\*8',    # small sharp s, German (sz ligature)
+    'THORN'     =>    '\\*(Th', # capital THORN, Icelandic
+    'thorn'     =>    '\\*(th', # small thorn, Icelandic
+    'Uacute'    =>    "U\\*'",  # capital U, acute accent
+    'uacute'    =>    "u\\*'",  # small u, acute accent
+    'Ucirc'     =>    'U\\*^',  # capital U, circumflex accent
+    'ucirc'     =>    'u\\*^',  # small u, circumflex accent
+    'Ugrave'    =>    'U\\*`',  # capital U, grave accent
+    'ugrave'    =>    'u\\*`',  # small u, grave accent
+    'Uuml'      =>    'U\\*:',  # capital U, dieresis or umlaut mark
+    'uuml'      =>    'u\\*:',  # small u, dieresis or umlaut mark
+    'Yacute'    =>    "Y\\*'",  # capital Y, acute accent
+    'yacute'    =>    "y\\*'",  # small y, acute accent
+    'yuml'      =>    'y\\*:',  # small y, dieresis or umlaut mark
+);
+
+
+############################################################################
+# Static helper functions
+############################################################################
+
+# Protect leading quotes and periods against interpretation as commands.
+# Also protect anything starting with a backslash, since it could expand
+# or hide something that *roff would interpret as a command.  This is
+# overkill, but it's much simpler than trying to parse *roff here.
+sub protect {
+    local $_ = shift;
+    s/^([.\'\\])/\\&$1/mg;
+    $_;
+}
+                    
+# Given a command and a single argument that may or may not contain double
+# quotes, handle double-quote formatting for it.  If there are no double
+# quotes, just return the command followed by the argument in double quotes.
+# If there are double quotes, use an if statement to test for nroff, and for
+# nroff output the command followed by the argument in double quotes with
+# embedded double quotes doubled.  For other formatters, remap paired double
+# quotes to `` and ''.
+sub switchquotes {
+    my $command = shift;
+    local $_ = shift;
+    my $extra = shift;
+    s/\\\*\([LR]\"/\"/g;
+    if (/\"/) {
+        s/\"/\"\"/g;
+        my $troff = $_;
+        $troff =~ s/\"\"([^\"]*)\"\"/\`\`$1\'\'/g;
+        s/\"/\"\"/g if $extra;
+        $troff =~ s/\"/\"\"/g if $extra;
+        $_ = qq("$_") . ($extra ? " $extra" : '');
+        $troff = qq("$troff") . ($extra ? " $extra" : '');
+        return ".if n $command $_\n.el $command $troff\n";
+    } else {
+        $_ = qq("$_") . ($extra ? " $extra" : '');
+        return "$command $_\n";
+    }
+}
+
+# Translate a font string into an escape.
+sub toescape { (length ($_[0]) > 1 ? '\f(' : '\f') . $_[0] }
+
+                    
+############################################################################
+# Initialization
+############################################################################
+
+# Initialize the object.  Here, we also process any additional options
+# passed to the constructor or set up defaults if none were given.  center
+# is the centered title, release is the version number, and date is the date
+# for the documentation.  Note that we can't know what file name we're
+# processing due to the architecture of Pod::Parser, so that *has* to either
+# be passed to the constructor or set separately with Pod::Man::name().
+sub initialize {
+    my $self = shift;
+
+    # Figure out the fixed-width font.  If user-supplied, make sure that
+    # they are the right length.
+    for (qw/fixed fixedbold fixeditalic fixedbolditalic/) {
+        if (defined $$self{$_}) {
+            if (length ($$self{$_}) < 1 || length ($$self{$_}) > 2) {
+                croak "roff font should be 1 or 2 chars, not `$$self{$_}'";
+            }
+        } else {
+            $$self{$_} = '';
+        }
+    }
+
+    # Set the default fonts.  We can't be sure what fixed bold-italic is
+    # going to be called, so default to just bold.
+    $$self{fixed}           ||= 'CW';
+    $$self{fixedbold}       ||= 'CB';
+    $$self{fixeditalic}     ||= 'CI';
+    $$self{fixedbolditalic} ||= 'CB';
+
+    # Set up a table of font escapes.  First number is fixed-width, second
+    # is bold, third is italic.
+    $$self{FONTS} = { '000' => '\fR', '001' => '\fI',
+                      '010' => '\fB', '011' => '\f(BI',
+                      '100' => toescape ($$self{fixed}),
+                      '101' => toescape ($$self{fixeditalic}),
+                      '110' => toescape ($$self{fixedbold}),
+                      '111' => toescape ($$self{fixedbolditalic})};
+
+    # Extra stuff for page titles.
+    $$self{center} = 'User Contributed Perl Documentation'
+        unless defined $$self{center};
+    $$self{indent}  = 4 unless defined $$self{indent};
+
+    # We used to try first to get the version number from a local binary,
+    # but we shouldn't need that any more.  Get the version from the running
+    # Perl.  Work a little magic to handle subversions correctly under both
+    # the pre-5.6 and the post-5.6 version numbering schemes.
+    if (!defined $$self{release}) {
+        my @version = ($] =~ /^(\d+)\.(\d{3})(\d{0,3})$/);
+        $version[2] ||= 0;
+        $version[2] *= 10 ** (3 - length $version[2]);
+        for (@version) { $_ += 0 }
+        $$self{release} = 'perl v' . join ('.', @version);
+    }
+
+    # Double quotes in things that will be quoted.
+    for (qw/center date release/) {
+        $$self{$_} =~ s/\"/\"\"/g if $$self{$_};
+    }
+
+    $$self{INDENT}  = 0;        # Current indentation level.
+    $$self{INDENTS} = [];       # Stack of indentations.
+    $$self{INDEX}   = [];       # Index keys waiting to be printed.
+
+    $self->SUPER::initialize;
+}
+
+# For each document we process, output the preamble first.  Note that the
+# fixed width font is a global default; once we interpolate it into the
+# PREAMBLE, it ain't ever changing.  Maybe fix this later.
+sub begin_pod {
+    my $self = shift;
+
+    # Try to figure out the name and section from the file name.
+    my $section = $$self{section} || 1;
+    my $name = $$self{name};
+    if (!defined $name) {
+        $name = $self->input_file;
+        $section = 3 if (!$$self{section} && $name =~ /\.pm\z/i);
+        $name =~ s/\.p(od|[lm])\z//i;
+        if ($section =~ /^1/) {
+            require File::Basename;
+            $name = uc File::Basename::basename ($name);
+        } else {
+            # Lose everything up to the first of
+            #     */lib/*perl*      standard or site_perl module
+            #     */*perl*/lib      from -D prefix=/opt/perl
+            #     */*perl*/         random module hierarchy
+            # which works.  Should be fixed to use File::Spec.  Also handle
+            # a leading lib/ since that's what ExtUtils::MakeMaker creates.
+            for ($name) {
+                s%//+%/%g;
+                if (     s%^.*?/lib/[^/]*perl[^/]*/%%si
+                      or s%^.*?/[^/]*perl[^/]*/(?:lib/)?%%si) {
+                    s%^site(_perl)?/%%s;      # site and site_perl
+                    s%^(.*-$^O|$^O-.*)/%%so;  # arch
+                    s%^\d+\.\d+%%s;           # version
+                }
+                s%^lib/%%;
+                s%/%::%g;
+            }
+        }
+    }
+
+    # Modification date header.  Try to use the modification time of our
+    # input.
+    if (!defined $$self{date}) {
+        my $time = (stat $self->input_file)[9] || time;
+        my ($day, $month, $year) = (localtime $time)[3,4,5];
+        $month++;
+        $year += 1900;
+        $$self{date} = sprintf ('%4d-%02d-%02d', $year, $month, $day);
+    }
+
+    # Now, print out the preamble and the title.
+    $PREAMBLE =~ s/\@CFONT\@/$$self{fixed}/;
+    chomp $PREAMBLE;
+    print { $self->output_handle } <<"----END OF HEADER----";
+.\\" Automatically generated by Pod::Man version $VERSION
+.\\" @{[ scalar localtime ]}
+.\\"
+.\\" Standard preamble:
+.\\" ======================================================================
+$PREAMBLE
+.\\" ======================================================================
+.\\"
+.IX Title "$name $section"
+.TH $name $section "$$self{release}" "$$self{date}" "$$self{center}"
+.UC
+----END OF HEADER----
+#"# for cperl-mode
+
+    # Initialize a few per-file variables.
+    $$self{INDENT} = 0;
+    $$self{NEEDSPACE} = 0;
+}
+
+
+############################################################################
+# Core overrides
+############################################################################
+
+# Called for each command paragraph.  Gets the command, the associated
+# paragraph, the line number, and a Pod::Paragraph object.  Just dispatches
+# the command to a method named the same as the command.  =cut is handled
+# internally by Pod::Parser.
+sub command {
+    my $self = shift;
+    my $command = shift;
+    return if $command eq 'pod';
+    return if ($$self{EXCLUDE} && $command ne 'end');
+    $command = 'cmd_' . $command;
+    $self->$command (@_);
+}
+
+# Called for a verbatim paragraph.  Gets the paragraph, the line number, and
+# a Pod::Paragraph object.  Rofficate backslashes, untabify, put a
+# zero-width character at the beginning of each line to protect against
+# commands, and wrap in .Vb/.Ve.
+sub verbatim {
+    my $self = shift;
+    return if $$self{EXCLUDE};
+    local $_ = shift;
+    return if /^\s+$/;
+    s/\s+$/\n/;
+    my $lines = tr/\n/\n/;
+    1 while s/^(.*?)(\t+)/$1 . ' ' x (length ($2) * 8 - length ($1) % 8)/me;
+    s/\\/\\e/g;
+    s/^(\s*\S)/'\&' . $1/gme;
+    $self->makespace if $$self{NEEDSPACE};
+    $self->output (".Vb $lines\n$_.Ve\n");
+    $$self{NEEDSPACE} = 0;
+}
+
+# Called for a regular text block.  Gets the paragraph, the line number, and
+# a Pod::Paragraph object.  Perform interpolation and output the results.
+sub textblock {
+    my $self = shift;
+    return if $$self{EXCLUDE};
+    $self->output ($_[0]), return if $$self{VERBATIM};
+
+    # Perform a little magic to collapse multiple L<> references.  We'll
+    # just rewrite the whole thing into actual text at this part, bypassing
+    # the whole internal sequence parsing thing.
+    my $text = shift;
+    $text =~ s{
+        (L<                     # A link of the form L.
+              /
+              (
+                  [:\w]+        # The item has to be a simple word...
+                  (\(\))?       # ...or simple function.
+              )
+          >
+          (
+              ,?\s+(and\s+)?    # Allow lots of them, conjuncted.
+              L<  
+                  /
+                  ( [:\w]+ ( \(\) )? )
+              >
+          )+
+        )
+    } {
+        local $_ = $1;
+        s{ L< / ( [^>]+ ) > } {$1}xg;
+        my @items = split /(?:,?\s+(?:and\s+)?)/;
+        my $string = 'the ';
+        my $i;
+        for ($i = 0; $i < @items; $i++) {
+            $string .= $items[$i];
+            $string .= ', ' if @items > 2 && $i != $#items;
+            $string .= ' ' if @items == 2 && $i == 2;
+            $string .= 'and ' if ($i == $#items - 1);
+        }
+        $string .= ' entries elsewhere in this document';
+        $string;
+    }gex;
+
+    # Parse the tree and output it.  collapse knows about references to
+    # scalars as well as scalars and does the right thing with them.
+    $text = $self->parse ($text, @_);
+    $text =~ s/\n\s*$/\n/;
+    $self->makespace if $$self{NEEDSPACE};
+    $self->output (protect $self->mapfonts ($text));
+    $self->outindex;
+    $$self{NEEDSPACE} = 1;
+}
+
+# Called for an interior sequence.  Takes a Pod::InteriorSequence object and
+# returns a reference to a scalar.  This scalar is the final formatted text.
+# It's returned as a reference so that other interior sequences above us
+# know that the text has already been processed.
+sub sequence {
+    my ($self, $seq) = @_;
+    my $command = $seq->cmd_name;
+
+    # Zero-width characters.
+    if ($command eq 'Z') {
+        # Workaround to generate a blessable reference, needed by 5.005.
+        my $tmp = '\&';
+        return bless \ "$tmp", 'Pod::Man::String';
+    }
+
+    # C<>, L<>, X<>, and E<> don't apply guesswork to their contents.
+    local $_ = $self->collapse ($seq->parse_tree, $command =~ /^[CELX]$/);
+
+    # Handle E<> escapes.
+    if ($command eq 'E') {
+        if (/^\d+$/) {
+            return bless \ chr ($_), 'Pod::Man::String';
+        } elsif (exists $ESCAPES{$_}) {
+            return bless \ "$ESCAPES{$_}", 'Pod::Man::String';
+        } else {
+            carp "Unknown escape E<$1>";
+            return bless \ "E<$_>", 'Pod::Man::String';
+        }
+    }
+
+    # For all the other sequences, empty content produces no output.
+    return '' if $_ eq '';
+
+    # Handle formatting sequences.
+    if ($command eq 'B') {
+        return bless \ ('\f(BS' . $_ . '\f(BE'), 'Pod::Man::String';
+    } elsif ($command eq 'F') {
+        return bless \ ('\f(IS' . $_ . '\f(IE'), 'Pod::Man::String';
+    } elsif ($command eq 'I') {
+        return bless \ ('\f(IS' . $_ . '\f(IE'), 'Pod::Man::String';
+    } elsif ($command eq 'C') {
+        s/-/\\-/g;
+        s/__/_\\|_/g;
+        return bless \ ('\f(FS\*(C`' . $_ . "\\*(C'\\f(FE"),
+            'Pod::Man::String';
+    }
+
+    # Handle links.
+    if ($command eq 'L') {
+        # A bug in lvalue subs in 5.6 requires the temporary variable.
+        my $tmp = $self->buildlink ($_);
+        return bless \ "$tmp", 'Pod::Man::String';
+    }
+                         
+    # Whitespace protection replaces whitespace with "\ ".
+    if ($command eq 'S') {
+        s/\s+/\\ /g;
+        return bless \ "$_", 'Pod::Man::String';
+    }
+
+    # Add an index entry to the list of ones waiting to be output.
+    if ($command eq 'X') { push (@{ $$self{INDEX} }, $_); return '' }
+
+    # Anything else is unknown.
+    carp "Unknown sequence $command<$_>";
+}
+
+
+############################################################################
+# Command paragraphs
+############################################################################
+
+# All command paragraphs take the paragraph and the line number.
+
+# First level heading.  We can't output .IX in the NAME section due to a bug
+# in some versions of catman, so don't output a .IX for that section.  .SH
+# already uses small caps, so remove any E<> sequences that would cause
+# them.
+sub cmd_head1 {
+    my $self = shift;
+    local $_ = $self->parse (@_);
+    s/\s+$//;
+    s/\\s-?\d//g;
+    $self->output (switchquotes ('.SH', $self->mapfonts ($_)));
+    $self->outindex (($_ eq 'NAME') ? () : ('Header', $_));
+    $$self{NEEDSPACE} = 0;
+}
+
+# Second level heading.
+sub cmd_head2 {
+    my $self = shift;
+    local $_ = $self->parse (@_);
+    s/\s+$//;
+    $self->output (switchquotes ('.Sh', $self->mapfonts ($_)));
+    $self->outindex ('Subsection', $_);
+    $$self{NEEDSPACE} = 0;
+}
+
+# Start a list.  For indents after the first, wrap the outside indent in .RS
+# so that hanging paragraph tags will be correct.
+sub cmd_over {
+    my $self = shift;
+    local $_ = shift;
+    unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} }
+    if (@{ $$self{INDENTS} } > 0) {
+        $self->output (".RS $$self{INDENT}\n");
+    }
+    push (@{ $$self{INDENTS} }, $$self{INDENT});
+    $$self{INDENT} = ($_ + 0);
+}
+
+# End a list.  If we've closed an embedded indent, we've mangled the hanging
+# paragraph indent, so temporarily replace it with .RS and set WEIRDINDENT.
+# We'll close that .RS at the next =back or =item.
+sub cmd_back {
+    my $self = shift;
+    $$self{INDENT} = pop @{ $$self{INDENTS} };
+    unless (defined $$self{INDENT}) {
+        carp "Unmatched =back";
+        $$self{INDENT} = 0;
+    }
+    if ($$self{WEIRDINDENT}) {
+        $self->output (".RE\n");
+        $$self{WEIRDINDENT} = 0;
+    }
+    if (@{ $$self{INDENTS} } > 0) {
+        $self->output (".RE\n");
+        $self->output (".RS $$self{INDENT}\n");
+        $$self{WEIRDINDENT} = 1;
+    }
+    $$self{NEEDSPACE} = 1;
+}
+
+# An individual list item.  Emit an index entry for anything that's
+# interesting, but don't emit index entries for things like bullets and
+# numbers.  rofficate bullets too while we're at it (so for nice output, use
+# * for your lists rather than o or . or - or some other thing).  Newlines
+# in an item title are turned into spaces since *roff can't handle them
+# embedded.
+sub cmd_item {
+    my $self = shift;
+    local $_ = $self->parse (@_);
+    s/\s+$//;
+    s/\s*\n\s*/ /g;
+    my $index;
+    if (/\w/ && !/^\w[.\)]\s*$/) {
+        $index = $_;
+        $index =~ s/^\s*[-*+o.]?\s*//;
+    }
+    s/^\*(\s|\Z)/\\\(bu$1/;
+    if ($$self{WEIRDINDENT}) {
+        $self->output (".RE\n");
+        $$self{WEIRDINDENT} = 0;
+    }
+    $_ = $self->mapfonts ($_);
+    $self->output (switchquotes ('.Ip', $_, $$self{INDENT}));
+    $self->outindex ($index ? ('Item', $index) : ());
+    $$self{NEEDSPACE} = 0;
+}
+
+# Begin a block for a particular translator.  Setting VERBATIM triggers
+# special handling in textblock().
+sub cmd_begin {
+    my $self = shift;
+    local $_ = shift;
+    my ($kind) = /^(\S+)/ or return;
+    if ($kind eq 'man' || $kind eq 'roff') {
+        $$self{VERBATIM} = 1;
+    } else {
+        $$self{EXCLUDE} = 1;
+    }
+}
+
+# End a block for a particular translator.  We assume that all =begin/=end
+# pairs are properly closed.
+sub cmd_end {
+    my $self = shift;
+    $$self{EXCLUDE} = 0;
+    $$self{VERBATIM} = 0;
+}
+
+# One paragraph for a particular translator.  Ignore it unless it's intended
+# for man or roff, in which case we output it verbatim.
+sub cmd_for {
+    my $self = shift;
+    local $_ = shift;
+    return unless s/^(?:man|roff)\b[ \t]*\n?//;
+    $self->output ($_);
+}
+
+
+############################################################################
+# Link handling
+############################################################################
+
+# Handle links.  We can't actually make real hyperlinks, so this is all to
+# figure out what text and formatting we print out.
+sub buildlink {
+    my $self = shift;
+    local $_ = shift;
+
+    # Smash whitespace in case we were split across multiple lines.
+    s/\s+/ /g;
+
+    # If we were given any explicit text, just output it.
+    if (m{ ^ ([^|]+) \| }x) { return $1 }
+
+    # Okay, leading and trailing whitespace isn't important.
+    s/^\s+//;
+    s/\s+$//;
+
+    # Default to using the whole content of the link entry as a section
+    # name.  Note that L forces a manpage interpretation, as does
+    # something looking like L.  Do the same thing to
+    # L as we would to manpage(section) without the L<>;
+    # see guesswork().  If we've added italics, don't add the "manpage"
+    # text; markup is sufficient.
+    my ($manpage, $section) = ('', $_);
+    if (/^"\s*(.*?)\s*"$/) {
+        $section = '"' . $1 . '"';
+    } elsif (m{ ^ [-:.\w]+ (?: \( \S+ \) )? $ }x) {
+        ($manpage, $section) = ($_, '');
+        $manpage =~ s/^([^\(]+)\(/'\f(IS' . $1 . '\f(IE\|('/e;
+    } elsif (m%/%) {
+        ($manpage, $section) = split (/\s*\/\s*/, $_, 2);
+        if ($manpage =~ /^[-:.\w]+(?:\(\S+\))?$/) {
+            $manpage =~ s/^([^\(]+)\(/'\f(IS' . $1 . '\f(IE\|'/e;
+        }
+        $section =~ s/^\"\s*//;
+        $section =~ s/\s*\"$//;
+    }
+    if ($manpage && $manpage !~ /\\f\(IS/) {
+        $manpage = "the $manpage manpage";
+    }
+
+    # Now build the actual output text.
+    my $text = '';
+    if (!length ($section) && !length ($manpage)) {
+        carp "Invalid link $_";
+    } elsif (!length ($section)) {
+        $text = $manpage;
+    } elsif ($section =~ /^[:\w]+(?:\(\))?/) {
+        $text .= 'the ' . $section . ' entry';
+        $text .= (length $manpage) ? " in $manpage"
+                                   : " elsewhere in this document";
+    } else {
+        if ($section !~ /^".*"$/) { $section = '"' . $section . '"' }
+        $text .= 'the section on ' . $section;
+        $text .= " in $manpage" if length $manpage;
+    }
+    $text;
+}
+
+
+############################################################################
+# Escaping and fontification
+############################################################################
+
+# At this point, we'll have embedded font codes of the form \f([SE]
+# where  is one of B, I, or F.  Turn those into the right font start
+# or end codes.  B else> should map to \fBsome\f(BIthing\fB
+# else\fR.  The old pod2man didn't get this right; the second \fB was \fR,
+# so nested sequences didn't work right.  We take care of this by using
+# variables as a combined pointer to our current font sequence, and set each
+# to the number of current nestings of start tags for that font.  Use them
+# as a vector to look up what font sequence to use.
+sub mapfonts {
+    my $self = shift;
+    local $_ = shift;
+
+    my ($fixed, $bold, $italic) = (0, 0, 0);
+    my %magic = (F => \$fixed, B => \$bold, I => \$italic);
+    s { \\f\((.)(.) } {
+        ${ $magic{$1} } += ($2 eq 'S') ? 1 : -1;
+        $$self{FONTS}{($fixed && 1) . ($bold && 1) . ($italic && 1)};
+    }gxe;
+    $_;
+}
+
+
+############################################################################
+# *roff-specific parsing
+############################################################################
+
+# Called instead of parse_text, calls parse_text with the right flags.
+sub parse {
+    my $self = shift;
+    $self->parse_text ({ -expand_seq   => 'sequence',
+                         -expand_ptree => 'collapse' }, @_);
+}
+    
+# Takes a parse tree and a flag saying whether or not to treat it as literal
+# text (not call guesswork on it), and returns the concatenation of all of
+# the text strings in that parse tree.  If the literal flag isn't true,
+# guesswork() will be called on all plain scalars in the parse tree.
+# Assumes that everything in the parse tree is either a scalar or a
+# reference to a scalar.
+sub collapse {
+    my ($self, $ptree, $literal) = @_;
+    if ($literal) {
+        return join ('', map {
+            if (ref $_) {
+                $$_;
+            } else {
+                s/\\/\\e/g;
+                $_;
+            }
+        } $ptree->children);
+    } else {
+        return join ('', map {
+            ref ($_) ? $$_ : $self->guesswork ($_)
+        } $ptree->children);
+    }
+}
+
+# Takes a text block to perform guesswork on; this is guaranteed not to
+# contain any interior sequences.  Returns the text block with remapping
+# done.
+sub guesswork {
+    my $self = shift;
+    local $_ = shift;
+
+    # rofficate backslashes.
+    s/\\/\\e/g;
+
+    # Ensure double underbars have a tiny space between them.
+    s/__/_\\|_/g;
+
+    # Make all caps a little smaller.  Be careful here, since we don't want
+    # to make @ARGV into small caps, nor do we want to fix the MIME in
+    # MIME-Version, since it looks weird with the full-height V.
+    s{
+        ( ^ | [\s\(\"\'\`\[\{<>] )
+        ( [A-Z] [A-Z] [/A-Z+:\d_\$&-]* )
+        (?: (?= [\s>\}\]\)\'\".?!,;:] | -- ) | $ )
+    } { $1 . '\s-1' . $2 . '\s0' }egx;
+
+    # Turn PI into a pretty pi.
+    s{ (?: \\s-1 | \b ) PI (?: \\s0 | \b ) } {\\*\(PI}gx;
+
+    # Italize functions in the form func().
+    s{
+        \b
+        (
+            [:\w]+ (?:\\s-1)? \(\)
+        )
+    } { '\f(IS' . $1 . '\f(IE' }egx;
+
+    # func(n) is a reference to a manual page.  Make it \fIfunc\fR\|(n).
+    s{
+        \b
+        (\w[-:.\w]+ (?:\\s-1)?)
+        (
+            \( [^\)] \)
+        )
+    } { '\f(IS' . $1 . '\f(IE\|' . $2 }egx;
+
+    # Convert simple Perl variable references to a fixed-width font.
+    s{
+        ( \s+ )
+        ( [\$\@%] [\w:]+ )
+        (?! \( )
+    } { $1 . '\f(FS' . $2 . '\f(FE'}egx;
+
+    # Translate -- into a real em dash if it's used like one and fix up
+    # dashes, but keep hyphens hyphens.
+    s{ (\G|^|.) (-+) (\b|.) } {
+        my ($pre, $dash, $post) = ($1, $2, $3);
+        if (length ($dash) == 1) {
+            ($pre =~ /[a-zA-Z]/) ? "$pre-$post" : "$pre\\-$post";
+        } elsif (length ($dash) == 2
+                 && ((!$pre && !$post)
+                     || ($pre =~ /\w/ && !$post)
+                     || ($pre eq ' ' && $post eq ' ')
+                     || ($pre eq '=' && $post ne '=')
+                     || ($pre ne '=' && $post eq '='))) {
+            "$pre\\*(--$post";
+        } else {
+            $pre . ('\-' x length $dash) . $post;
+        }
+    }egxs;
+
+    # Fix up double quotes.
+    s{ \" ([^\"]+) \" } { '\*(L"' . $1 . '\*(R"' }egx;
+
+    # Make C++ into \*(C+, which is a squinched version.
+    s{ \b C\+\+ } {\\*\(C+}gx;
+
+    # All done.
+    $_;
+}
+
+
+############################################################################
+# Output formatting
+############################################################################
+
+# Make vertical whitespace.
+sub makespace {
+    my $self = shift;
+    $self->output ($$self{INDENT} > 0 ? ".Sp\n" : ".PP\n");
+}
+
+# Output any pending index entries, and optionally an index entry given as
+# an argument.  Support multiple index entries in X<> separated by slashes,
+# and strip special escapes from index entries.
+sub outindex {
+    my ($self, $section, $index) = @_;
+    my @entries = map { split m%\s*/\s*% } @{ $$self{INDEX} };
+    return unless ($section || @entries);
+    $$self{INDEX} = [];
+    my $output;
+    if (@entries) {
+        my $output = '.IX Xref "'
+            . join (' ', map { s/\"/\"\"/; $_ } @entries)
+            . '"' . "\n";
+    }
+    if ($section) {
+        $index =~ s/\"/\"\"/;
+        $index =~ s/\\-/-/g;
+        $index =~ s/\\(?:s-?\d|.\(..|.)//g;
+        $output .= ".IX $section " . '"' . $index . '"' . "\n";
+    }
+    $self->output ($output);
+}
+
+# Output text to the output device.
+sub output { print { $_[0]->output_handle } $_[1] }
+
+__END__
+
+.\" These are some extra bits of roff that I don't want to lose track of
+.\" but that have been removed from the preamble to make it a bit shorter
+.\" since they're not currently being used.  They're accents and special
+.\" characters we don't currently have escapes for.
+.if n \{\
+.    ds ? ?
+.    ds ! !
+.    ds q
+.\}
+.if t \{\
+.    ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+.    ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+.    ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+.\}
+.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+.ds oe o\h'-(\w'o'u*4/10)'e
+.ds Oe O\h'-(\w'O'u*4/10)'E
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds v \h'-1'\o'\(aa\(ga'
+.    ds _ \h'-1'^
+.    ds . \h'-1'.
+.    ds 3 3
+.    ds oe oe
+.    ds Oe OE
+.\}
+
+############################################################################
+# Documentation
+############################################################################
+
+=head1 NAME
+
+Pod::Man - Convert POD data to formatted *roff input
+
+=head1 SYNOPSIS
+
+    use Pod::Man;
+    my $parser = Pod::Man->new (release => $VERSION, section => 8);
+
+    # Read POD from STDIN and write to STDOUT.
+    $parser->parse_from_filehandle;
+
+    # Read POD from file.pod and write to file.1.
+    $parser->parse_from_file ('file.pod', 'file.1');
+
+=head1 DESCRIPTION
+
+Pod::Man is a module to convert documentation in the POD format (the
+preferred language for documenting Perl) into *roff input using the man
+macro set.  The resulting *roff code is suitable for display on a terminal
+using nroff(1), normally via man(1), or printing using troff(1).  It is
+conventionally invoked using the driver script B, but it can also
+be used directly.
+
+As a derived class from Pod::Parser, Pod::Man supports the same methods and
+interfaces.  See L for all the details; briefly, one creates a
+new parser with Cnew()> and then calls either
+parse_from_filehandle() or parse_from_file().
+
+new() can take options, in the form of key/value pairs that control the
+behavior of the parser.  See below for details.
+
+If no options are given, Pod::Man uses the name of the input file with any
+trailing C<.pod>, C<.pm>, or C<.pl> stripped as the man page title, to
+section 1 unless the file ended in C<.pm> in which case it defaults to
+section 3, to a centered title of "User Contributed Perl Documentation", to
+a centered footer of the Perl version it is run with, and to a left-hand
+footer of the modification date of its input (or the current date if given
+STDIN for input).
+
+Pod::Man assumes that your *roff formatters have a fixed-width font named
+CW.  If yours is called something else (like CR), use the C option to
+specify it.  This generally only matters for troff output for printing.
+Similarly, you can set the fonts used for bold, italic, and bold italic
+fixed-width output.
+
+Besides the obvious pod conversions, Pod::Man also takes care of formatting
+func(), func(n), and simple variable references like $foo or @bar so you
+don't have to use code escapes for them; complex expressions like
+C<$fred{'stuff'}> will still need to be escaped, though.  It also translates
+dashes that aren't used as hyphens into en dashes, makes long dashes--like
+this--into proper em dashes, fixes "paired quotes," makes C++ and PI look
+right, puts a little space between double underbars, makes ALLCAPS a teeny
+bit smaller in troff(1), and escapes stuff that *roff treats as special so
+that you don't have to.
+
+The recognized options to new() are as follows.  All options take a single
+argument.
+
+=over 4
+
+=item center
+
+Sets the centered page header to use instead of "User Contributed Perl
+Documentation".
+
+=item date
+
+Sets the left-hand footer.  By default, the modification date of the input
+file will be used, or the current date if stat() can't find that file (the
+case if the input is from STDIN), and the date will be formatted as
+YYYY-MM-DD.
+
+=item fixed
+
+The fixed-width font to use for vertabim text and code.  Defaults to CW.
+Some systems may want CR instead.  Only matters for troff(1) output.
+
+=item fixedbold
+
+Bold version of the fixed-width font.  Defaults to CB.  Only matters for
+troff(1) output.
+
+=item fixeditalic
+
+Italic version of the fixed-width font (actually, something of a misnomer,
+since most fixed-width fonts only have an oblique version, not an italic
+version).  Defaults to CI.  Only matters for troff(1) output.
+
+=item fixedbolditalic
+
+Bold italic (probably actually oblique) version of the fixed-width font.
+Pod::Man doesn't assume you have this, and defaults to CB.  Some systems
+(such as Solaris) have this font available as CX.  Only matters for troff(1)
+output.
+
+=item release
+
+Set the centered footer.  By default, this is the version of Perl you run
+Pod::Man under.  Note that some system an macro sets assume that the
+centered footer will be a modification date and will prepend something like
+"Last modified: "; if this is the case, you may want to set C to
+the last modified date and C to the version number.
+
+=item section
+
+Set the section for the C<.TH> macro.  The standard section numbering
+convention is to use 1 for user commands, 2 for system calls, 3 for
+functions, 4 for devices, 5 for file formats, 6 for games, 7 for
+miscellaneous information, and 8 for administrator commands.  There is a lot
+of variation here, however; some systems (like Solaris) use 4 for file
+formats, 5 for miscellaneous information, and 7 for devices.  Still others
+use 1m instead of 8, or some mix of both.  About the only section numbers
+that are reliably consistent are 1, 2, and 3.
+
+By default, section 1 will be used unless the file ends in .pm in which case
+section 3 will be selected.
+
+=back
+
+The standard Pod::Parser method parse_from_filehandle() takes up to two
+arguments, the first being the file handle to read POD from and the second
+being the file handle to write the formatted output to.  The first defaults
+to STDIN if not given, and the second defaults to STDOUT.  The method
+parse_from_file() is almost identical, except that its two arguments are the
+input and output disk files instead.  See L for the specific
+details.
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=item roff font should be 1 or 2 chars, not `%s'
+
+(F) You specified a *roff font (using C, C, etc.) that
+wasn't either one or two characters.  Pod::Man doesn't support *roff fonts
+longer than two characters, although some *roff extensions do (the canonical
+versions of nroff(1) and troff(1) don't either).
+
+=item Invalid link %s
+
+(W) The POD source contained a CE> sequence that Pod::Man was
+unable to parse.  You should never see this error message; it probably
+indicates a bug in Pod::Man.
+
+=item Unknown escape EE%sE
+
+(W) The POD source contained an CE> escape that Pod::Man didn't
+know about.  C%sE> was printed verbatim in the output.
+
+=item Unknown sequence %s
+
+(W) The POD source contained a non-standard interior sequence (something of
+the form CE>) that Pod::Man didn't know about.  It was ignored.
+
+=item Unmatched =back
+
+(W) Pod::Man encountered a C<=back> command that didn't correspond to an
+C<=over> command.
+
+=back
+
+=head1 BUGS
+
+The lint-like features and strict POD format checking done by B are
+not yet implemented and should be, along with the corresponding C
+option.
+
+The NAME section should be recognized specially and index entries emitted
+for everything in that section.  This would have to be deferred until the
+next section, since extraneous things in NAME tends to confuse various man
+page processors.
+
+The handling of hyphens, en dashes, and em dashes is somewhat fragile, and
+one may get the wrong one under some circumstances.  This should only matter
+for troff(1) output.
+
+When and whether to use small caps is somewhat tricky, and Pod::Man doesn't
+necessarily get it right.
+
+Pod::Man doesn't handle font names longer than two characters.  Neither do
+most troff(1) implementations, but GNU troff does as an extension.  It would
+be nice to support as an option for those who want to use it.
+
+The preamble added to each output file is rather verbose, and most of it is
+only necessary in the presence of EEE escapes for non-ASCII
+characters.  It would ideally be nice if all of those definitions were only
+output if needed, perhaps on the fly as the characters are used.
+
+Some of the automagic applied to file names assumes Unix directory
+separators.
+
+Pod::Man is excessively slow.
+
+=head1 SEE ALSO
+
+L, perlpod(1), pod2man(1), nroff(1), troff(1),
+man(1), man(7)
+
+Ossanna, Joseph F., and Brian W. Kernighan.  "Troff User's Manual,"
+Computing Science Technical Report No. 54, AT&T Bell Laboratories.  This is
+the best documentation of standard nroff(1) and troff(1).  At the time of
+this writing, it's available at http://www.cs.bell-labs.com/cm/cs/cstr.html.
+
+The man page documenting the man macro set may be man(5) instead of man(7)
+on your system.  Also, please see pod2man(1) for extensive documentation on
+writing manual pages if you've not done it before and aren't familiar with
+the conventions.
+
+=head1 AUTHOR
+
+Russ Allbery Erra@stanford.eduE, based I heavily on the
+original B by Tom Christiansen Etchrist@mox.perl.comE.
+
+=cut
diff --git a/gnu/usr.bin/perl/lib/Pod/ParseUtils.pm b/gnu/usr.bin/perl/lib/Pod/ParseUtils.pm
new file mode 100644
index 00000000000..2cb8cdcd3bc
--- /dev/null
+++ b/gnu/usr.bin/perl/lib/Pod/ParseUtils.pm
@@ -0,0 +1,837 @@
+#############################################################################
+# Pod/ParseUtils.pm -- helpers for POD parsing and conversion
+#
+# Copyright (C) 1999-2000 by Marek Rouchal. All rights reserved.
+# This file is part of "PodParser". PodParser is free software;
+# you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+#############################################################################
+
+package Pod::ParseUtils;
+
+use vars qw($VERSION);
+$VERSION = 0.2;    ## Current version of this package
+require  5.005;    ## requires this Perl version or later
+
+=head1 NAME
+
+Pod::ParseUtils - helpers for POD parsing and conversion
+
+=head1 SYNOPSIS
+
+  use Pod::ParseUtils;
+
+  my $list = new Pod::List;
+  my $link = Pod::Hyperlink->new('Pod::Parser');
+
+=head1 DESCRIPTION
+
+B contains a few object-oriented helper packages for
+POD parsing and processing (i.e. in POD formatters and translators).
+
+=cut
+
+#-----------------------------------------------------------------------------
+# Pod::List
+#
+# class to hold POD list info (=over, =item, =back)
+#-----------------------------------------------------------------------------
+
+package Pod::List;
+
+use Carp;
+
+=head2 Pod::List
+
+B can be used to hold information about POD lists
+(written as =over ... =item ... =back) for further processing.
+The following methods are available:
+
+=over 4
+
+=item new()
+
+Create a new list object. Properties may be specified through a hash
+reference like this:
+
+  my $list = Pod::List->new({ -start => $., -indent => 4 });
+
+See the individual methods/properties for details.
+
+=cut
+
+sub new {
+    my $this = shift;
+    my $class = ref($this) || $this;
+    my %params = @_;
+    my $self = {%params};
+    bless $self, $class;
+    $self->initialize();
+    return $self;
+}
+
+sub initialize {
+    my $self = shift;
+    $self->{-file} ||= 'unknown';
+    $self->{-start} ||= 'unknown';
+    $self->{-indent} ||= 4; # perlpod: "should be the default"
+    $self->{_items} = [];
+    $self->{-type} ||= '';
+}
+
+=item file()
+
+Without argument, retrieves the file name the list is in. This must
+have been set before by either specifying B<-file> in the B
+method or by calling the B method with a scalar argument.
+
+=cut
+
+# The POD file name the list appears in
+sub file {
+   return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
+}
+
+=item start()
+
+Without argument, retrieves the line number where the list started.
+This must have been set before by either specifying B<-start> in the
+B method or by calling the B method with a scalar
+argument.
+
+=cut
+
+# The line in the file the node appears
+sub start {
+   return (@_ > 1) ? ($_[0]->{-start} = $_[1]) : $_[0]->{-start};
+}
+
+=item indent()
+
+Without argument, retrieves the indent level of the list as specified
+in C<=over n>. This must have been set before by either specifying
+B<-indent> in the B method or by calling the B method
+with a scalar argument.
+
+=cut
+
+# indent level
+sub indent {
+   return (@_ > 1) ? ($_[0]->{-indent} = $_[1]) : $_[0]->{-indent};
+}
+
+=item type()
+
+Without argument, retrieves the list type, which can be an arbitrary value,
+e.g. C
    , C
      , ... when thinking the HTML way. +This must have been set before by either specifying +B<-type> in the B method or by calling the B method +with a scalar argument. + +=cut + +# The type of the list (UL, OL, ...) +sub type { + return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type}; +} + +=item rx() + +Without argument, retrieves a regular expression for simplifying the +individual item strings once the list type has been determined. Usage: +E.g. when converting to HTML, one might strip the leading number in +an ordered list as COLE> already prints numbers itself. +This must have been set before by either specifying +B<-rx> in the B method or by calling the B method +with a scalar argument. + +=cut + +# The regular expression to simplify the items +sub rx { + return (@_ > 1) ? ($_[0]->{-rx} = $_[1]) : $_[0]->{-rx}; +} + +=item item() + +Without argument, retrieves the array of the items in this list. +The items may be represented by any scalar. +If an argument has been given, it is pushed on the list of items. + +=cut + +# The individual =items of this list +sub item { + my ($self,$item) = @_; + if(defined $item) { + push(@{$self->{_items}}, $item); + return $item; + } + else { + return @{$self->{_items}}; + } +} + +=item parent() + +Without argument, retrieves information about the parent holding this +list, which is represented as an arbitrary scalar. +This must have been set before by either specifying +B<-parent> in the B method or by calling the B method +with a scalar argument. + +=cut + +# possibility for parsers/translators to store information about the +# lists's parent object +sub parent { + return (@_ > 1) ? ($_[0]->{-parent} = $_[1]) : $_[0]->{-parent}; +} + +=item tag() + +Without argument, retrieves information about the list tag, which can be +any scalar. +This must have been set before by either specifying +B<-tag> in the B method or by calling the B method +with a scalar argument. + +=back + +=cut + +# possibility for parsers/translators to store information about the +# list's object +sub tag { + return (@_ > 1) ? ($_[0]->{-tag} = $_[1]) : $_[0]->{-tag}; +} + +#----------------------------------------------------------------------------- +# Pod::Hyperlink +# +# class to manipulate POD hyperlinks (L<>) +#----------------------------------------------------------------------------- + +package Pod::Hyperlink; + +=head2 Pod::Hyperlink + +B is a class for manipulation of POD hyperlinks. Usage: + + my $link = Pod::Hyperlink->new('alternative text|page/"section in page"'); + +The B class is mainly designed to parse the contents of the +C...E> sequence, providing a simple interface for accessing the +different parts of a POD hyperlink for further processing. It can also be +used to construct hyperlinks. + +=over 4 + +=item new() + +The B method can either be passed a set of key/value pairs or a single +scalar value, namely the contents of a C...E> sequence. An object +of the class C is returned. The value C indicates a +failure, the error message is stored in C<$@>. + +=cut + +use Carp; + +sub new { + my $this = shift; + my $class = ref($this) || $this; + my $self = +{}; + bless $self, $class; + $self->initialize(); + if(defined $_[0]) { + if(ref($_[0])) { + # called with a list of parameters + %$self = %{$_[0]}; + $self->_construct_text(); + } + else { + # called with L<> contents + return undef unless($self->parse($_[0])); + } + } + return $self; +} + +sub initialize { + my $self = shift; + $self->{-line} ||= 'undef'; + $self->{-file} ||= 'undef'; + $self->{-page} ||= ''; + $self->{-node} ||= ''; + $self->{-alttext} ||= ''; + $self->{-type} ||= 'undef'; + $self->{_warnings} = []; +} + +=item parse($string) + +This method can be used to (re)parse a (new) hyperlink, i.e. the contents +of a C...E> sequence. The result is stored in the current object. + +=cut + +sub parse { + my $self = shift; + local($_) = $_[0]; + # syntax check the link and extract destination + my ($alttext,$page,$node,$type) = ('','','',''); + + $self->{_warnings} = []; + + # collapse newlines with whitespace + if(s/\s*\n+\s*/ /g) { + $self->warning("collapsing newlines to blanks"); + } + # strip leading/trailing whitespace + if(s/^[\s\n]+//) { + $self->warning("ignoring leading whitespace in link"); + } + if(s/[\s\n]+$//) { + $self->warning("ignoring trailing whitespace in link"); + } + unless(length($_)) { + _invalid_link("empty link"); + return undef; + } + + ## Check for different possibilities. This is tedious and error-prone + # we match all possibilities (alttext, page, section/item) + #warn "DEBUG: link=$_\n"; + + # only page + # problem: a lot of people use (), or (1) or the like to indicate + # man page sections. But this collides with L that is supposed + # to point to an internal funtion... + # I would like the following better, here and below: + #if(m!^(\w+(?:::\w+)*)$!) { + my $page_rx = '[\w.]+(?:::[\w.]+)*'; + if(m!^($page_rx)$!o) { + $page = $1; + $type = 'page'; + } + # alttext, page and "section" + elsif(m!^(.+?)\s*[|]\s*($page_rx)\s*/\s*"(.+)"$!o) { + ($alttext, $page, $node) = ($1, $2, $3); + $type = 'section'; + } + # alttext and page + elsif(m!^(.+?)\s*[|]\s*($page_rx)$!o) { + ($alttext, $page) = ($1, $2); + $type = 'page'; + } + # alttext and "section" + elsif(m!^(.+?)\s*[|]\s*(?:/\s*|)"(.+)"$!) { + ($alttext, $node) = ($1,$2); + $type = 'section'; + } + # page and "section" + elsif(m!^($page_rx)\s*/\s*"(.+)"$!o) { + ($page, $node) = ($1, $2); + $type = 'section'; + } + # page and item + elsif(m!^($page_rx)\s*/\s*(.+)$!o) { + ($page, $node) = ($1, $2); + $type = 'item'; + } + # only "section" + elsif(m!^/?"(.+)"$!) { + $node = $1; + $type = 'section'; + } + # only item + elsif(m!^\s*/(.+)$!) { + $node = $1; + $type = 'item'; + } + # non-standard: Hyperlink + elsif(m!^((?:http|ftp|mailto|news):.+)$!i) { + $node = $1; + $type = 'hyperlink'; + } + # alttext, page and item + elsif(m!^(.+?)\s*[|]\s*($page_rx)\s*/\s*(.+)$!o) { + ($alttext, $page, $node) = ($1, $2, $3); + $type = 'item'; + } + # alttext and item + elsif(m!^(.+?)\s*[|]\s*/(.+)$!) { + ($alttext, $node) = ($1,$2); + } + # nonstandard: alttext and hyperlink + elsif(m!^(.+?)\s*[|]\s*((?:http|ftp|mailto|news):.+)$!) { + ($alttext, $node) = ($1,$2); + $type = 'hyperlink'; + } + # must be an item or a "malformed" section (without "") + else { + $node = $_; + $type = 'item'; + } + # collapse whitespace in nodes + $node =~ s/\s+/ /gs; + + #if($page =~ /[(]\w*[)]$/) { + # $self->warning("section in '$page' deprecated"); + #} + if($node =~ m:[|/]:) { + $self->warning("node '$node' contains non-escaped | or /"); + } + if($alttext =~ m:[|/]:) { + $self->warning("alternative text '$node' contains non-escaped | or /"); + } + $self->{-page} = $page; + $self->{-node} = $node; + $self->{-alttext} = $alttext; + #warn "DEBUG: page=$page section=$section item=$item alttext=$alttext\n"; + $self->{-type} = $type; + $self->_construct_text(); + 1; +} + +sub _construct_text { + my $self = shift; + my $alttext = $self->alttext(); + my $type = $self->type(); + my $section = $self->node(); + my $page = $self->page(); + my $page_ext = ''; + $page =~ s/([(]\w*[)])$// && ($page_ext = $1); + if($alttext) { + $self->{_text} = $alttext; + } + elsif($type eq 'hyperlink') { + $self->{_text} = $section; + } + else { + $self->{_text} = (!$section ? '' : + $type eq 'item' ? "the $section entry" : + "the section on $section" ) . + ($page ? ($section ? ' in ':'') . "the $page$page_ext manpage" : + ' elsewhere in this document'); + } + # for being marked up later + # use the non-standard markers P<> and Q<>, so that the resulting + # text can be parsed by the translators. It's their job to put + # the correct hypertext around the linktext + if($alttext) { + $self->{_markup} = "Q<$alttext>"; + } + elsif($type eq 'hyperlink') { + $self->{_markup} = "Q<$section>"; + } + else { + $self->{_markup} = (!$section ? '' : + $type eq 'item' ? "the Q<$section> entry" : + "the section on Q<$section>" ) . + ($page ? ($section ? ' in ':'') . "the P<$page>$page_ext manpage" : + ' elsewhere in this document'); + } +} + +=item markup($string) + +Set/retrieve the textual value of the link. This string contains special +markers CE> and CE> that should be expanded by the +translator's interior sequence expansion engine to the +formatter-specific code to highlight/activate the hyperlink. The details +have to be implemented in the translator. + +=cut + +#' retrieve/set markuped text +sub markup { + return (@_ > 1) ? ($_[0]->{_markup} = $_[1]) : $_[0]->{_markup}; +} + +=item text() + +This method returns the textual representation of the hyperlink as above, +but without markers (read only). Depending on the link type this is one of +the following alternatives (the + and * denote the portions of the text +that are marked up): + + the +perl+ manpage + the *$|* entry in the +perlvar+ manpage + the section on *OPTIONS* in the +perldoc+ manpage + the section on *DESCRIPTION* elsewhere in this document + +=cut + +# The complete link's text +sub text { + $_[0]->{_text}; +} + +=item warning() + +After parsing, this method returns any warnings encountered during the +parsing process. + +=cut + +# Set/retrieve warnings +sub warning { + my $self = shift; + if(@_) { + push(@{$self->{_warnings}}, @_); + return @_; + } + return @{$self->{_warnings}}; +} + +=item line(), file() + +Just simple slots for storing information about the line and the file +the link was encountered in. Has to be filled in manually. + +=cut + +# The line in the file the link appears +sub line { + return (@_ > 1) ? ($_[0]->{-line} = $_[1]) : $_[0]->{-line}; +} + +# The POD file name the link appears in +sub file { + return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file}; +} + +=item page() + +This method sets or returns the POD page this link points to. + +=cut + +# The POD page the link appears on +sub page { + if (@_ > 1) { + $_[0]->{-page} = $_[1]; + $_[0]->_construct_text(); + } + $_[0]->{-page}; +} + +=item node() + +As above, but the destination node text of the link. + +=cut + +# The link destination +sub node { + if (@_ > 1) { + $_[0]->{-node} = $_[1]; + $_[0]->_construct_text(); + } + $_[0]->{-node}; +} + +=item alttext() + +Sets or returns an alternative text specified in the link. + +=cut + +# Potential alternative text +sub alttext { + if (@_ > 1) { + $_[0]->{-alttext} = $_[1]; + $_[0]->_construct_text(); + } + $_[0]->{-alttext}; +} + +=item type() + +The node type, either C
      or C. As an unofficial type, +there is also C, derived from e.g. Chttp://perl.comE> + +=cut + +# The type: item or headn +sub type { + return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type}; +} + +=item link() + +Returns the link as contents of CE>. Reciprocal to B. + +=back + +=cut + +# The link itself +sub link { + my $self = shift; + my $link = $self->page() || ''; + if($self->node()) { + my $node = $self->node(); + $text =~ s/\|/E/g; + $text =~ s:/:E:g; + if($self->type() eq 'section') { + $link .= ($link ? '/' : '') . '"' . $node . '"'; + } + elsif($self->type() eq 'hyperlink') { + $link = $self->node(); + } + else { # item + $link .= '/' . $node; + } + } + if($self->alttext()) { + my $text = $self->alttext(); + $text =~ s/\|/E/g; + $text =~ s:/:E:g; + $link = "$text|$link"; + } + $link; +} + +sub _invalid_link { + my ($msg) = @_; + # this sets @_ + #eval { die "$msg\n" }; + #chomp $@; + $@ = $msg; # this seems to work, too! + undef; +} + +#----------------------------------------------------------------------------- +# Pod::Cache +# +# class to hold POD page details +#----------------------------------------------------------------------------- + +package Pod::Cache; + +=head2 Pod::Cache + +B holds information about a set of POD documents, +especially the nodes for hyperlinks. +The following methods are available: + +=over 4 + +=item new() + +Create a new cache object. This object can hold an arbitrary number of +POD documents of class Pod::Cache::Item. + +=cut + +sub new { + my $this = shift; + my $class = ref($this) || $this; + my $self = []; + bless $self, $class; + return $self; +} + +=item item() + +Add a new item to the cache. Without arguments, this method returns a +list of all cache elements. + +=cut + +sub item { + my ($self,%param) = @_; + if(%param) { + my $item = Pod::Cache::Item->new(%param); + push(@$self, $item); + return $item; + } + else { + return @{$self}; + } +} + +=item find_page($name) + +Look for a POD document named C<$name> in the cache. Returns the +reference to the corresponding Pod::Cache::Item object or undef if +not found. + +=back + +=cut + +sub find_page { + my ($self,$page) = @_; + foreach(@$self) { + if($_->page() eq $page) { + return $_; + } + } + undef; +} + +package Pod::Cache::Item; + +=head2 Pod::Cache::Item + +B holds information about individual POD documents, +that can be grouped in a Pod::Cache object. +It is intended to hold information about the hyperlink nodes of POD +documents. +The following methods are available: + +=over 4 + +=item new() + +Create a new object. + +=cut + +sub new { + my $this = shift; + my $class = ref($this) || $this; + my %params = @_; + my $self = {%params}; + bless $self, $class; + $self->initialize(); + return $self; +} + +sub initialize { + my $self = shift; + $self->{-nodes} = [] unless(defined $self->{-nodes}); +} + +=item page() + +Set/retrieve the POD document name (e.g. "Pod::Parser"). + +=cut + +# The POD page +sub page { + return (@_ > 1) ? ($_[0]->{-page} = $_[1]) : $_[0]->{-page}; +} + +=item description() + +Set/retrieve the POD short description as found in the C<=head1 NAME> +section. + +=cut + +# The POD description, taken out of NAME if present +sub description { + return (@_ > 1) ? ($_[0]->{-description} = $_[1]) : $_[0]->{-description}; +} + +=item path() + +Set/retrieve the POD file storage path. + +=cut + +# The file path +sub path { + return (@_ > 1) ? ($_[0]->{-path} = $_[1]) : $_[0]->{-path}; +} + +=item file() + +Set/retrieve the POD file name. + +=cut + +# The POD file name +sub file { + return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file}; +} + +=item nodes() + +Add a node (or a list of nodes) to the document's node list. Note that +the order is kept, i.e. start with the first node and end with the last. +If no argument is given, the current list of nodes is returned in the +same order the nodes have been added. +A node can be any scalar, but usually is a pair of node string and +unique id for the C method to work correctly. + +=cut + +# The POD nodes +sub nodes { + my ($self,@nodes) = @_; + if(@nodes) { + push(@{$self->{-nodes}}, @nodes); + return @nodes; + } + else { + return @{$self->{-nodes}}; + } +} + +=item find_node($name) + +Look for a node or index entry named C<$name> in the object. +Returns the unique id of the node (i.e. the second element of the array +stored in the node arry) or undef if not found. + +=back + +=cut + +sub find_node { + my ($self,$node) = @_; + my @search; + push(@search, @{$self->{-nodes}}) if($self->{-nodes}); + push(@search, @{$self->{-idx}}) if($self->{-idx}); + foreach(@search) { + if($_->[0] eq $node) { + return $_->[1]; # id + } + } + undef; +} + +=item idx() + +Add an index entry (or a list of them) to the document's index list. Note that +the order is kept, i.e. start with the first node and end with the last. +If no argument is given, the current list of index entries is returned in the +same order the entries have been added. +An index entry can be any scalar, but usually is a pair of string and +unique id. + +=cut + +# The POD index entries +sub idx { + my ($self,@idx) = @_; + if(@idx) { + push(@{$self->{-idx}}, @idx); + return @idx; + } + else { + return @{$self->{-idx}}; + } +} + +=head1 AUTHOR + +Marek Rouchal Emarek@saftsack.fs.uni-bayreuth.deE, borrowing +a lot of things from L and L as well as other POD +processing tools by Tom Christiansen, Brad Appleton and Russ Allbery. + +=head1 SEE ALSO + +L, L, L, L, +L + +=cut + +1; diff --git a/gnu/usr.bin/perl/lib/Pod/Parser.pm b/gnu/usr.bin/perl/lib/Pod/Parser.pm new file mode 100644 index 00000000000..48fc198ded7 --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Parser.pm @@ -0,0 +1,1771 @@ +############################################################################# +# Pod/Parser.pm -- package which defines a base class for parsing POD docs. +# +# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved. +# This file is part of "PodParser". PodParser is free software; +# you can redistribute it and/or modify it under the same terms +# as Perl itself. +############################################################################# + +package Pod::Parser; + +use vars qw($VERSION); +$VERSION = 1.12; ## Current version of this package +require 5.005; ## requires this Perl version or later + +############################################################################# + +=head1 NAME + +Pod::Parser - base class for creating POD filters and translators + +=head1 SYNOPSIS + + use Pod::Parser; + + package MyParser; + @ISA = qw(Pod::Parser); + + sub command { + my ($parser, $command, $paragraph, $line_num) = @_; + ## Interpret the command and its text; sample actions might be: + if ($command eq 'head1') { ... } + elsif ($command eq 'head2') { ... } + ## ... other commands and their actions + my $out_fh = $parser->output_handle(); + my $expansion = $parser->interpolate($paragraph, $line_num); + print $out_fh $expansion; + } + + sub verbatim { + my ($parser, $paragraph, $line_num) = @_; + ## Format verbatim paragraph; sample actions might be: + my $out_fh = $parser->output_handle(); + print $out_fh $paragraph; + } + + sub textblock { + my ($parser, $paragraph, $line_num) = @_; + ## Translate/Format this block of text; sample actions might be: + my $out_fh = $parser->output_handle(); + my $expansion = $parser->interpolate($paragraph, $line_num); + print $out_fh $expansion; + } + + sub interior_sequence { + my ($parser, $seq_command, $seq_argument) = @_; + ## Expand an interior sequence; sample actions might be: + return "*$seq_argument*" if ($seq_command eq 'B'); + return "`$seq_argument'" if ($seq_command eq 'C'); + return "_${seq_argument}_'" if ($seq_command eq 'I'); + ## ... other sequence commands and their resulting text + } + + package main; + + ## Create a parser object and have it parse file whose name was + ## given on the command-line (use STDIN if no files were given). + $parser = new MyParser(); + $parser->parse_from_filehandle(\*STDIN) if (@ARGV == 0); + for (@ARGV) { $parser->parse_from_file($_); } + +=head1 REQUIRES + +perl5.005, Pod::InputObjects, Exporter, Symbol, Carp + +=head1 EXPORTS + +Nothing. + +=head1 DESCRIPTION + +B is a base class for creating POD filters and translators. +It handles most of the effort involved with parsing the POD sections +from an input stream, leaving subclasses free to be concerned only with +performing the actual translation of text. + +B parses PODs, and makes method calls to handle the various +components of the POD. Subclasses of B override these methods +to translate the POD into whatever output format they desire. + +=head1 QUICK OVERVIEW + +To create a POD filter for translating POD documentation into some other +format, you create a subclass of B which typically overrides +just the base class implementation for the following methods: + +=over 2 + +=item * + +B + +=item * + +B + +=item * + +B + +=item * + +B + +=back + +You may also want to override the B and B +methods for your subclass (to perform any needed per-file and/or +per-document initialization or cleanup). + +If you need to perform any preprocesssing of input before it is parsed +you may want to override one or more of B and/or +B. + +Sometimes it may be necessary to make more than one pass over the input +files. If this is the case you have several options. You can make the +first pass using B and override your methods to store the +intermediate results in memory somewhere for the B method to +process. You could use B for several passes with an +appropriate state variable to control the operation for each pass. If +your input source can't be reset to start at the beginning, you can +store it in some other structure as a string or an array and have that +structure implement a B method (which is all that +B uses to read input). + +Feel free to add any member data fields you need to keep track of things +like current font, indentation, horizontal or vertical position, or +whatever else you like. Be sure to read L<"PRIVATE METHODS AND DATA"> +to avoid name collisions. + +For the most part, the B base class should be able to +do most of the input parsing for you and leave you free to worry about +how to intepret the commands and translate the result. + +Note that all we have described here in this quick overview is the +simplest most straightforward use of B to do stream-based +parsing. It is also possible to use the B function +to do more sophisticated tree-based parsing. See L<"TREE-BASED PARSING">. + +=head1 PARSING OPTIONS + +A I is simply a named option of B with a +value that corresponds to a certain specified behavior. These various +behaviors of B may be enabled/disabled by setting or +or unsetting one or more I using the B method. +The set of currently accepted parse-options is as follows: + +=over 3 + +=item B<-want_nonPODs> (default: unset) + +Normally (by default) B will only provide access to +the POD sections of the input. Input paragraphs that are not part +of the POD-format documentation are not made available to the caller +(not even using B). Setting this option to a +non-empty, non-zero value will allow B to see +non-POD sections of the input as well as POD sections. The B +method can be used to determine if the corresponding paragraph is a POD +paragraph, or some other input paragraph. + +=item B<-process_cut_cmd> (default: unset) + +Normally (by default) B handles the C<=cut> POD directive +by itself and does not pass it on to the caller for processing. Setting +this option to a non-empty, non-zero value will cause B to +pass the C<=cut> directive to the caller just like any other POD command +(and hence it may be processed by the B method). + +B will still interpret the C<=cut> directive to mean that +"cutting mode" has been (re)entered, but the caller will get a chance +to capture the actual C<=cut> paragraph itself for whatever purpose +it desires. + +=item B<-warnings> (default: unset) + +Normally (by default) B recognizes a bare minimum of +pod syntax errors and warnings and issues diagnostic messages +for errors, but not for warnings. (Use B to do more +thorough checking of POD syntax.) Setting this option to a non-empty, +non-zero value will cause B to issue diagnostics for +the few warnings it recognizes as well as the errors. + +=back + +Please see L<"parseopts()"> for a complete description of the interface +for the setting and unsetting of parse-options. + +=cut + +############################################################################# + +use vars qw(@ISA); +use strict; +#use diagnostics; +use Pod::InputObjects; +use Carp; +use Exporter; +require VMS::Filespec if $^O eq 'VMS'; +BEGIN { + if ($] < 5.6) { + require Symbol; + import Symbol; + } +} +@ISA = qw(Exporter); + +## These "variables" are used as local "glob aliases" for performance +use vars qw(%myData %myOpts @input_stack); + +############################################################################# + +=head1 RECOMMENDED SUBROUTINE/METHOD OVERRIDES + +B provides several methods which most subclasses will probably +want to override. These methods are as follows: + +=cut + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->command($cmd,$text,$line_num,$pod_para); + +This method should be overridden by subclasses to take the appropriate +action when a POD command paragraph (denoted by a line beginning with +"=") is encountered. When such a POD directive is seen in the input, +this method is called and is passed: + +=over 3 + +=item C<$cmd> + +the name of the command for this POD paragraph + +=item C<$text> + +the paragraph text for the given POD paragraph command. + +=item C<$line_num> + +the line-number of the beginning of the paragraph + +=item C<$pod_para> + +a reference to a C object which contains further +information about the paragraph command (see L +for details). + +=back + +B that this method I called for C<=pod> paragraphs. + +The base class implementation of this method simply treats the raw POD +command as normal block of paragraph text (invoking the B +method with the command paragraph). + +=cut + +sub command { + my ($self, $cmd, $text, $line_num, $pod_para) = @_; + ## Just treat this like a textblock + $self->textblock($pod_para->raw_text(), $line_num, $pod_para); +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->verbatim($text,$line_num,$pod_para); + +This method may be overridden by subclasses to take the appropriate +action when a block of verbatim text is encountered. It is passed the +following parameters: + +=over 3 + +=item C<$text> + +the block of text for the verbatim paragraph + +=item C<$line_num> + +the line-number of the beginning of the paragraph + +=item C<$pod_para> + +a reference to a C object which contains further +information about the paragraph (see L +for details). + +=back + +The base class implementation of this method simply prints the textblock +(unmodified) to the output filehandle. + +=cut + +sub verbatim { + my ($self, $text, $line_num, $pod_para) = @_; + my $out_fh = $self->{_OUTPUT}; + print $out_fh $text; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->textblock($text,$line_num,$pod_para); + +This method may be overridden by subclasses to take the appropriate +action when a normal block of POD text is encountered (although the base +class method will usually do what you want). It is passed the following +parameters: + +=over 3 + +=item C<$text> + +the block of text for the a POD paragraph + +=item C<$line_num> + +the line-number of the beginning of the paragraph + +=item C<$pod_para> + +a reference to a C object which contains further +information about the paragraph (see L +for details). + +=back + +In order to process interior sequences, subclasses implementations of +this method will probably want to invoke either B or +B, passing it the text block C<$text>, and the corresponding +line number in C<$line_num>, and then perform any desired processing upon +the returned result. + +The base class implementation of this method simply prints the text block +as it occurred in the input stream). + +=cut + +sub textblock { + my ($self, $text, $line_num, $pod_para) = @_; + my $out_fh = $self->{_OUTPUT}; + print $out_fh $self->interpolate($text, $line_num); +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->interior_sequence($seq_cmd,$seq_arg,$pod_seq); + +This method should be overridden by subclasses to take the appropriate +action when an interior sequence is encountered. An interior sequence is +an embedded command within a block of text which appears as a command +name (usually a single uppercase character) followed immediately by a +string of text which is enclosed in angle brackets. This method is +passed the sequence command C<$seq_cmd> and the corresponding text +C<$seq_arg>. It is invoked by the B method for each interior +sequence that occurs in the string that it is passed. It should return +the desired text string to be used in place of the interior sequence. +The C<$pod_seq> argument is a reference to a C +object which contains further information about the interior sequence. +Please see L for details if you need to access this +additional information. + +Subclass implementations of this method may wish to invoke the +B method of C<$pod_seq> to see if it is nested inside +some other interior-sequence (and if so, which kind). + +The base class implementation of the B method +simply returns the raw text of the interior sequence (as it occurred +in the input) to the caller. + +=cut + +sub interior_sequence { + my ($self, $seq_cmd, $seq_arg, $pod_seq) = @_; + ## Just return the raw text of the interior sequence + return $pod_seq->raw_text(); +} + +############################################################################# + +=head1 OPTIONAL SUBROUTINE/METHOD OVERRIDES + +B provides several methods which subclasses may want to override +to perform any special pre/post-processing. These methods do I have to +be overridden, but it may be useful for subclasses to take advantage of them. + +=cut + +##--------------------------------------------------------------------------- + +=head1 B + + my $parser = Pod::Parser->new(); + +This is the constructor for B and its subclasses. You +I need to override this method! It is capable of constructing +subclass objects as well as base class objects, provided you use +any of the following constructor invocation styles: + + my $parser1 = MyParser->new(); + my $parser2 = new MyParser(); + my $parser3 = $parser2->new(); + +where C is some subclass of B. + +Using the syntax C to invoke the constructor is I +recommended, but if you insist on being able to do this, then the +subclass I need to override the B constructor method. If +you do override the constructor, you I be sure to invoke the +B method of the newly blessed object. + +Using any of the above invocations, the first argument to the +constructor is always the corresponding package name (or object +reference). No other arguments are required, but if desired, an +associative array (or hash-table) my be passed to the B +constructor, as in: + + my $parser1 = MyParser->new( MYDATA => $value1, MOREDATA => $value2 ); + my $parser2 = new MyParser( -myflag => 1 ); + +All arguments passed to the B constructor will be treated as +key/value pairs in a hash-table. The newly constructed object will be +initialized by copying the contents of the given hash-table (which may +have been empty). The B constructor for this class and all of its +subclasses returns a blessed reference to the initialized object (hash-table). + +=cut + +sub new { + ## Determine if we were called via an object-ref or a classname + my $this = shift; + my $class = ref($this) || $this; + ## Any remaining arguments are treated as initial values for the + ## hash that is used to represent this object. + my %params = @_; + my $self = { %params }; + ## Bless ourselves into the desired class and perform any initialization + bless $self, $class; + $self->initialize(); + return $self; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->initialize(); + +This method performs any necessary object initialization. It takes no +arguments (other than the object instance of course, which is typically +copied to a local variable named C<$self>). If subclasses override this +method then they I be sure to invoke C<$self-ESUPER::initialize()>. + +=cut + +sub initialize { + #my $self = shift; + #return; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->begin_pod(); + +This method is invoked at the beginning of processing for each POD +document that is encountered in the input. Subclasses should override +this method to perform any per-document initialization. + +=cut + +sub begin_pod { + #my $self = shift; + #return; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->begin_input(); + +This method is invoked by B immediately I +processing input from a filehandle. The base class implementation does +nothing, however, subclasses may override it to perform any per-file +initializations. + +Note that if multiple files are parsed for a single POD document +(perhaps the result of some future C<=include> directive) this method +is invoked for every file that is parsed. If you wish to perform certain +initializations once per document, then you should use B. + +=cut + +sub begin_input { + #my $self = shift; + #return; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->end_input(); + +This method is invoked by B immediately I +processing input from a filehandle. The base class implementation does +nothing, however, subclasses may override it to perform any per-file +cleanup actions. + +Please note that if multiple files are parsed for a single POD document +(perhaps the result of some kind of C<=include> directive) this method +is invoked for every file that is parsed. If you wish to perform certain +cleanup actions once per document, then you should use B. + +=cut + +sub end_input { + #my $self = shift; + #return; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->end_pod(); + +This method is invoked at the end of processing for each POD document +that is encountered in the input. Subclasses should override this method +to perform any per-document finalization. + +=cut + +sub end_pod { + #my $self = shift; + #return; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $textline = $parser->preprocess_line($text, $line_num); + +This method should be overridden by subclasses that wish to perform +any kind of preprocessing for each I of input (I it has +been determined whether or not it is part of a POD paragraph). The +parameter C<$text> is the input line; and the parameter C<$line_num> is +the line number of the corresponding text line. + +The value returned should correspond to the new text to use in its +place. If the empty string or an undefined value is returned then no +further processing will be performed for this line. + +Please note that the B method is invoked I +the B method. After all (possibly preprocessed) +lines in a paragraph have been assembled together and it has been +determined that the paragraph is part of the POD documentation from one +of the selected sections, then B is invoked. + +The base class implementation of this method returns the given text. + +=cut + +sub preprocess_line { + my ($self, $text, $line_num) = @_; + return $text; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $textblock = $parser->preprocess_paragraph($text, $line_num); + +This method should be overridden by subclasses that wish to perform any +kind of preprocessing for each block (paragraph) of POD documentation +that appears in the input stream. The parameter C<$text> is the POD +paragraph from the input file; and the parameter C<$line_num> is the +line number for the beginning of the corresponding paragraph. + +The value returned should correspond to the new text to use in its +place If the empty string is returned or an undefined value is +returned, then the given C<$text> is ignored (not processed). + +This method is invoked after gathering up all the lines in a paragraph +and after determining the cutting state of the paragraph, +but before trying to further parse or interpret them. After +B returns, the current cutting state (which +is returned by C<$self-Ecutting()>) is examined. If it evaluates +to true then input text (including the given C<$text>) is cut (not +processed) until the next POD directive is encountered. + +Please note that the B method is invoked I +the B method. After all (possibly preprocessed) +lines in a paragraph have been assembled together and either it has been +determined that the paragraph is part of the POD documentation from one +of the selected sections or the C<-want_nonPODs> option is true, +then B is invoked. + +The base class implementation of this method returns the given text. + +=cut + +sub preprocess_paragraph { + my ($self, $text, $line_num) = @_; + return $text; +} + +############################################################################# + +=head1 METHODS FOR PARSING AND PROCESSING + +B provides several methods to process input text. These +methods typically won't need to be overridden (and in some cases they +can't be overridden), but subclasses may want to invoke them to exploit +their functionality. + +=cut + +##--------------------------------------------------------------------------- + +=head1 B + + $ptree1 = $parser->parse_text($text, $line_num); + $ptree2 = $parser->parse_text({%opts}, $text, $line_num); + $ptree3 = $parser->parse_text(\%opts, $text, $line_num); + +This method is useful if you need to perform your own interpolation +of interior sequences and can't rely upon B to expand +them in simple bottom-up order order. + +The parameter C<$text> is a string or block of text to be parsed +for interior sequences; and the parameter C<$line_num> is the +line number curresponding to the beginning of C<$text>. + +B will parse the given text into a parse-tree of "nodes." +and interior-sequences. Each "node" in the parse tree is either a +text-string, or a B. The result returned is a +parse-tree of type B. Please see L +for more information about B and B. + +If desired, an optional hash-ref may be specified as the first argument +to customize certain aspects of the parse-tree that is created and +returned. The set of recognized option keywords are: + +=over 3 + +=item B<-expand_seq> =E I|I + +Normally, the parse-tree returned by B will contain an +unexpanded C object for each interior-sequence +encountered. Specifying B<-expand_seq> tells B to "expand" +every interior-sequence it sees by invoking the referenced function +(or named method of the parser object) and using the return value as the +expanded result. + +If a subroutine reference was given, it is invoked as: + + &$code_ref( $parser, $sequence ) + +and if a method-name was given, it is invoked as: + + $parser->method_name( $sequence ) + +where C<$parser> is a reference to the parser object, and C<$sequence> +is a reference to the interior-sequence object. +[I: If the B method is specified, then it is +invoked according to the interface specified in L<"interior_sequence()">]. + +=item B<-expand_text> =E I|I + +Normally, the parse-tree returned by B will contain a +text-string for each contiguous sequence of characters outside of an +interior-sequence. Specifying B<-expand_text> tells B to +"preprocess" every such text-string it sees by invoking the referenced +function (or named method of the parser object) and using the return value +as the preprocessed (or "expanded") result. [Note that if the result is +an interior-sequence, then it will I be expanded as specified by the +B<-expand_seq> option; Any such recursive expansion needs to be handled by +the specified callback routine.] + +If a subroutine reference was given, it is invoked as: + + &$code_ref( $parser, $text, $ptree_node ) + +and if a method-name was given, it is invoked as: + + $parser->method_name( $text, $ptree_node ) + +where C<$parser> is a reference to the parser object, C<$text> is the +text-string encountered, and C<$ptree_node> is a reference to the current +node in the parse-tree (usually an interior-sequence object or else the +top-level node of the parse-tree). + +=item B<-expand_ptree> =E I|I + +Rather than returning a C, pass the parse-tree as an +argument to the referenced subroutine (or named method of the parser +object) and return the result instead of the parse-tree object. + +If a subroutine reference was given, it is invoked as: + + &$code_ref( $parser, $ptree ) + +and if a method-name was given, it is invoked as: + + $parser->method_name( $ptree ) + +where C<$parser> is a reference to the parser object, and C<$ptree> +is a reference to the parse-tree object. + +=back + +=cut + +sub parse_text { + my $self = shift; + local $_ = ''; + + ## Get options and set any defaults + my %opts = (ref $_[0]) ? %{ shift() } : (); + my $expand_seq = $opts{'-expand_seq'} || undef; + my $expand_text = $opts{'-expand_text'} || undef; + my $expand_ptree = $opts{'-expand_ptree'} || undef; + + my $text = shift; + my $line = shift; + my $file = $self->input_file(); + my $cmd = ""; + + ## Convert method calls into closures, for our convenience + my $xseq_sub = $expand_seq; + my $xtext_sub = $expand_text; + my $xptree_sub = $expand_ptree; + if (defined $expand_seq and $expand_seq eq 'interior_sequence') { + ## If 'interior_sequence' is the method to use, we have to pass + ## more than just the sequence object, we also need to pass the + ## sequence name and text. + $xseq_sub = sub { + my ($self, $iseq) = @_; + my $args = join("", $iseq->parse_tree->children); + return $self->interior_sequence($iseq->name, $args, $iseq); + }; + } + ref $xseq_sub or $xseq_sub = sub { shift()->$expand_seq(@_) }; + ref $xtext_sub or $xtext_sub = sub { shift()->$expand_text(@_) }; + ref $xptree_sub or $xptree_sub = sub { shift()->$expand_ptree(@_) }; + + ## Keep track of the "current" interior sequence, and maintain a stack + ## of "in progress" sequences. + ## + ## NOTE that we push our own "accumulator" at the very beginning of the + ## stack. It's really a parse-tree, not a sequence; but it implements + ## the methods we need so we can use it to gather-up all the sequences + ## and strings we parse. Thus, by the end of our parsing, it should be + ## the only thing left on our stack and all we have to do is return it! + ## + my $seq = Pod::ParseTree->new(); + my @seq_stack = ($seq); + my ($ldelim, $rdelim) = ('', ''); + + ## Iterate over all sequence starts text (NOTE: split with + ## capturing parens keeps the delimiters) + $_ = $text; + my @tokens = split /([A-Z]<(?:<+\s+)?)/; + while ( @tokens ) { + $_ = shift @tokens; + ## Look for the beginning of a sequence + if ( /^([A-Z])(<(?:<+\s+)?)$/ ) { + ## Push a new sequence onto the stack of those "in-progress" + ($cmd, $ldelim) = ($1, $2); + $seq = Pod::InteriorSequence->new( + -name => $cmd, + -ldelim => $ldelim, -rdelim => '', + -file => $file, -line => $line + ); + $ldelim =~ s/\s+$//, ($rdelim = $ldelim) =~ tr//; + (@seq_stack > 1) and $seq->nested($seq_stack[-1]); + push @seq_stack, $seq; + } + ## Look for sequence ending + elsif ( @seq_stack > 1 ) { + ## Make sure we match the right kind of closing delimiter + my ($seq_end, $post_seq) = ("", ""); + if ( ($ldelim eq '<' and /\A(.*?)(>)/s) + or /\A(.*?)(\s+$rdelim)/s ) + { + ## Found end-of-sequence, capture the interior and the + ## closing the delimiter, and put the rest back on the + ## token-list + $post_seq = substr($_, length($1) + length($2)); + ($_, $seq_end) = ($1, $2); + (length $post_seq) and unshift @tokens, $post_seq; + } + if (length) { + ## In the middle of a sequence, append this text to it, and + ## dont forget to "expand" it if that's what the caller wanted + $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_); + $_ .= $seq_end; + } + if (length $seq_end) { + ## End of current sequence, record terminating delimiter + $seq->rdelim($seq_end); + ## Pop it off the stack of "in progress" sequences + pop @seq_stack; + ## Append result to its parent in current parse tree + $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq) + : $seq); + ## Remember the current cmd-name and left-delimiter + $cmd = (@seq_stack > 1) ? $seq_stack[-1]->name : ''; + $ldelim = (@seq_stack > 1) ? $seq_stack[-1]->ldelim : ''; + $ldelim =~ s/\s+$//, ($rdelim = $ldelim) =~ tr//; + } + } + elsif (length) { + ## In the middle of a sequence, append this text to it, and + ## dont forget to "expand" it if that's what the caller wanted + $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_); + } + ## Keep track of line count + $line += tr/\n//; + ## Remember the "current" sequence + $seq = $seq_stack[-1]; + } + + ## Handle unterminated sequences + my $errorsub = (@seq_stack > 1) ? $self->errorsub() : undef; + while (@seq_stack > 1) { + ($cmd, $file, $line) = ($seq->name, $seq->file_line); + $file = VMS::Filespec::unixify($file) if $^O eq 'VMS'; + $ldelim = $seq->ldelim; + ($rdelim = $ldelim) =~ tr//; + $rdelim =~ s/^(\S+)(\s*)$/$2$1/; + pop @seq_stack; + my $errmsg = "*** ERROR: unterminated ${cmd}${ldelim}...${rdelim}". + " at line $line in file $file\n"; + (ref $errorsub) and &{$errorsub}($errmsg) + or (defined $errorsub) and $self->$errorsub($errmsg) + or warn($errmsg); + $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq) : $seq); + $seq = $seq_stack[-1]; + } + + ## Return the resulting parse-tree + my $ptree = (pop @seq_stack)->parse_tree; + return $expand_ptree ? &$xptree_sub($self, $ptree) : $ptree; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $textblock = $parser->interpolate($text, $line_num); + +This method translates all text (including any embedded interior sequences) +in the given text string C<$text> and returns the interpolated result. The +parameter C<$line_num> is the line number corresponding to the beginning +of C<$text>. + +B merely invokes a private method to recursively expand +nested interior sequences in bottom-up order (innermost sequences are +expanded first). If there is a need to expand nested sequences in +some alternate order, use B instead. + +=cut + +sub interpolate { + my($self, $text, $line_num) = @_; + my %parse_opts = ( -expand_seq => 'interior_sequence' ); + my $ptree = $self->parse_text( \%parse_opts, $text, $line_num ); + return join "", $ptree->children(); +} + +##--------------------------------------------------------------------------- + +=begin __PRIVATE__ + +=head1 B + + $parser->parse_paragraph($text, $line_num); + +This method takes the text of a POD paragraph to be processed, along +with its corresponding line number, and invokes the appropriate method +(one of B, B, or B). + +For performance reasons, this method is invoked directly without any +dynamic lookup; Hence subclasses may I override it! + +=end __PRIVATE__ + +=cut + +sub parse_paragraph { + my ($self, $text, $line_num) = @_; + local *myData = $self; ## alias to avoid deref-ing overhead + local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options + local $_; + + ## See if we want to preprocess nonPOD paragraphs as well as POD ones. + my $wantNonPods = $myOpts{'-want_nonPODs'}; + + ## Update cutting status + $myData{_CUTTING} = 0 if $text =~ /^={1,2}\S/; + + ## Perform any desired preprocessing if we wanted it this early + $wantNonPods and $text = $self->preprocess_paragraph($text, $line_num); + + ## Ignore up until next POD directive if we are cutting + return if $myData{_CUTTING}; + + ## Now we know this is block of text in a POD section! + + ##----------------------------------------------------------------- + ## This is a hook (hack ;-) for Pod::Select to do its thing without + ## having to override methods, but also without Pod::Parser assuming + ## $self is an instance of Pod::Select (if the _SELECTED_SECTIONS + ## field exists then we assume there is an is_selected() method for + ## us to invoke (calling $self->can('is_selected') could verify this + ## but that is more overhead than I want to incur) + ##----------------------------------------------------------------- + + ## Ignore this block if it isnt in one of the selected sections + if (exists $myData{_SELECTED_SECTIONS}) { + $self->is_selected($text) or return ($myData{_CUTTING} = 1); + } + + ## If we havent already, perform any desired preprocessing and + ## then re-check the "cutting" state + unless ($wantNonPods) { + $text = $self->preprocess_paragraph($text, $line_num); + return 1 unless ((defined $text) and (length $text)); + return 1 if ($myData{_CUTTING}); + } + + ## Look for one of the three types of paragraphs + my ($pfx, $cmd, $arg, $sep) = ('', '', '', ''); + my $pod_para = undef; + if ($text =~ /^(={1,2})(?=\S)/) { + ## Looks like a command paragraph. Capture the command prefix used + ## ("=" or "=="), as well as the command-name, its paragraph text, + ## and whatever sequence of characters was used to separate them + $pfx = $1; + $_ = substr($text, length $pfx); + ($cmd, $sep, $text) = split /(\s+)/, $_, 2; + ## If this is a "cut" directive then we dont need to do anything + ## except return to "cutting" mode. + if ($cmd eq 'cut') { + $myData{_CUTTING} = 1; + return unless $myOpts{'-process_cut_cmd'}; + } + } + ## Save the attributes indicating how the command was specified. + $pod_para = new Pod::Paragraph( + -name => $cmd, + -text => $text, + -prefix => $pfx, + -separator => $sep, + -file => $myData{_INFILE}, + -line => $line_num + ); + # ## Invoke appropriate callbacks + # if (exists $myData{_CALLBACKS}) { + # ## Look through the callback list, invoke callbacks, + # ## then see if we need to do the default actions + # ## (invoke_callbacks will return true if we do). + # return 1 unless $self->invoke_callbacks($cmd, $text, $line_num, $pod_para); + # } + if (length $cmd) { + ## A command paragraph + $self->command($cmd, $text, $line_num, $pod_para); + } + elsif ($text =~ /^\s+/) { + ## Indented text - must be a verbatim paragraph + $self->verbatim($text, $line_num, $pod_para); + } + else { + ## Looks like an ordinary block of text + $self->textblock($text, $line_num, $pod_para); + } + return 1; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->parse_from_filehandle($in_fh,$out_fh); + +This method takes an input filehandle (which is assumed to already be +opened for reading) and reads the entire input stream looking for blocks +(paragraphs) of POD documentation to be processed. If no first argument +is given the default input filehandle C is used. + +The C<$in_fh> parameter may be any object that provides a B +method to retrieve a single line of input text (hence, an appropriate +wrapper object could be used to parse PODs from a single string or an +array of strings). + +Using C<$in_fh-Egetline()>, input is read line-by-line and assembled +into paragraphs or "blocks" (which are separated by lines containing +nothing but whitespace). For each block of POD documentation +encountered it will invoke a method to parse the given paragraph. + +If a second argument is given then it should correspond to a filehandle where +output should be sent (otherwise the default output filehandle is +C if no output filehandle is currently in use). + +B For performance reasons, this method caches the input stream at +the top of the stack in a local variable. Any attempts by clients to +change the stack contents during processing when in the midst executing +of this method I the input stream used by the current +invocation of this method. + +This method does I usually need to be overridden by subclasses. + +=cut + +sub parse_from_filehandle { + my $self = shift; + my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : (); + my ($in_fh, $out_fh) = @_; + $in_fh = \*STDIN unless ($in_fh); + local *myData = $self; ## alias to avoid deref-ing overhead + local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options + local $_; + + ## Put this stream at the top of the stack and do beginning-of-input + ## processing. NOTE that $in_fh might be reset during this process. + my $topstream = $self->_push_input_stream($in_fh, $out_fh); + (exists $opts{-cutting}) and $self->cutting( $opts{-cutting} ); + + ## Initialize line/paragraph + my ($textline, $paragraph) = ('', ''); + my ($nlines, $plines) = (0, 0); + + ## Use <$fh> instead of $fh->getline where possible (for speed) + $_ = ref $in_fh; + my $tied_fh = (/^(?:GLOB|FileHandle|IO::\w+)$/ or tied $in_fh); + + ## Read paragraphs line-by-line + while (defined ($textline = $tied_fh ? <$in_fh> : $in_fh->getline)) { + $textline = $self->preprocess_line($textline, ++$nlines); + next unless ((defined $textline) && (length $textline)); + $_ = $paragraph; ## save previous contents + + if ((! length $paragraph) && ($textline =~ /^==/)) { + ## '==' denotes a one-line command paragraph + $paragraph = $textline; + $plines = 1; + $textline = ''; + } else { + ## Append this line to the current paragraph + $paragraph .= $textline; + ++$plines; + } + + ## See if this line is blank and ends the current paragraph. + ## If it isnt, then keep iterating until it is. + next unless (($textline =~ /^([^\S\r\n]*)[\r\n]*$/) + && (length $paragraph)); + + ## Issue a warning about any non-empty blank lines + if (length($1) > 1 and $myOpts{'-warnings'} and ! $myData{_CUTTING}) { + my $errorsub = $self->errorsub(); + my $file = $self->input_file(); + $file = VMS::Filespec::unixify($file) if $^O eq 'VMS'; + my $errmsg = "*** WARNING: line containing nothing but whitespace". + " in paragraph at line $nlines in file $file\n"; + (ref $errorsub) and &{$errorsub}($errmsg) + or (defined $errorsub) and $self->$errorsub($errmsg) + or warn($errmsg); + } + + ## Now process the paragraph + parse_paragraph($self, $paragraph, ($nlines - $plines) + 1); + $paragraph = ''; + $plines = 0; + } + ## Dont forget about the last paragraph in the file + if (length $paragraph) { + parse_paragraph($self, $paragraph, ($nlines - $plines) + 1) + } + + ## Now pop the input stream off the top of the input stack. + $self->_pop_input_stream(); +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->parse_from_file($filename,$outfile); + +This method takes a filename and does the following: + +=over 2 + +=item * + +opens the input and output files for reading +(creating the appropriate filehandles) + +=item * + +invokes the B method passing it the +corresponding input and output filehandles. + +=item * + +closes the input and output files. + +=back + +If the special input filename "-" or "<&STDIN" is given then the STDIN +filehandle is used for input (and no open or close is performed). If no +input filename is specified then "-" is implied. + +If a second argument is given then it should be the name of the desired +output file. If the special output filename "-" or ">&STDOUT" is given +then the STDOUT filehandle is used for output (and no open or close is +performed). If the special output filename ">&STDERR" is given then the +STDERR filehandle is used for output (and no open or close is +performed). If no output filehandle is currently in use and no output +filename is specified, then "-" is implied. + +This method does I usually need to be overridden by subclasses. + +=cut + +sub parse_from_file { + my $self = shift; + my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : (); + my ($infile, $outfile) = @_; + my ($in_fh, $out_fh) = (gensym, gensym) if ($] < 5.6); + my ($close_input, $close_output) = (0, 0); + local *myData = $self; + local $_; + + ## Is $infile a filename or a (possibly implied) filehandle + $infile = '-' unless ((defined $infile) && (length $infile)); + if (($infile eq '-') || ($infile =~ /^<&(STDIN|0)$/i)) { + ## Not a filename, just a string implying STDIN + $myData{_INFILE} = ""; + $in_fh = \*STDIN; + } + elsif (ref $infile) { + ## Must be a filehandle-ref (or else assume its a ref to an object + ## that supports the common IO read operations). + $myData{_INFILE} = ${$infile}; + $in_fh = $infile; + } + else { + ## We have a filename, open it for reading + $myData{_INFILE} = $infile; + open($in_fh, "< $infile") or + croak "Can't open $infile for reading: $!\n"; + $close_input = 1; + } + + ## NOTE: we need to be *very* careful when "defaulting" the output + ## file. We only want to use a default if this is the beginning of + ## the entire document (but *not* if this is an included file). We + ## determine this by seeing if the input stream stack has been set-up + ## already + ## + unless ((defined $outfile) && (length $outfile)) { + (defined $myData{_TOP_STREAM}) && ($out_fh = $myData{_OUTPUT}) + || ($outfile = '-'); + } + ## Is $outfile a filename or a (possibly implied) filehandle + if ((defined $outfile) && (length $outfile)) { + if (($outfile eq '-') || ($outfile =~ /^>&?(?:STDOUT|1)$/i)) { + ## Not a filename, just a string implying STDOUT + $myData{_OUTFILE} = ""; + $out_fh = \*STDOUT; + } + elsif ($outfile =~ /^>&(STDERR|2)$/i) { + ## Not a filename, just a string implying STDERR + $myData{_OUTFILE} = ""; + $out_fh = \*STDERR; + } + elsif (ref $outfile) { + ## Must be a filehandle-ref (or else assume its a ref to an + ## object that supports the common IO write operations). + $myData{_OUTFILE} = ${$outfile}; + $out_fh = $outfile; + } + else { + ## We have a filename, open it for writing + $myData{_OUTFILE} = $outfile; + (-d $outfile) and croak "$outfile is a directory, not POD input!\n"; + open($out_fh, "> $outfile") or + croak "Can't open $outfile for writing: $!\n"; + $close_output = 1; + } + } + + ## Whew! That was a lot of work to set up reasonably/robust behavior + ## in the case of a non-filename for reading and writing. Now we just + ## have to parse the input and close the handles when we're finished. + $self->parse_from_filehandle(\%opts, $in_fh, $out_fh); + + $close_input and + close($in_fh) || croak "Can't close $infile after reading: $!\n"; + $close_output and + close($out_fh) || croak "Can't close $outfile after writing: $!\n"; +} + +############################################################################# + +=head1 ACCESSOR METHODS + +Clients of B should use the following methods to access +instance data fields: + +=cut + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->errorsub("method_name"); + $parser->errorsub(\&warn_user); + $parser->errorsub(sub { print STDERR, @_ }); + +Specifies the method or subroutine to use when printing error messages +about POD syntax. The supplied method/subroutine I return TRUE upon +successful printing of the message. If C is given, then the B +builtin is used to issue error messages (this is the default behavior). + + my $errorsub = $parser->errorsub() + my $errmsg = "This is an error message!\n" + (ref $errorsub) and &{$errorsub}($errmsg) + or (defined $errorsub) and $parser->$errorsub($errmsg) + or warn($errmsg); + +Returns a method name, or else a reference to the user-supplied subroutine +used to print error messages. Returns C if the B builtin +is used to issue error messages (this is the default behavior). + +=cut + +sub errorsub { + return (@_ > 1) ? ($_[0]->{_ERRORSUB} = $_[1]) : $_[0]->{_ERRORSUB}; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $boolean = $parser->cutting(); + +Returns the current C state: a boolean-valued scalar which +evaluates to true if text from the input file is currently being "cut" +(meaning it is I considered part of the POD document). + + $parser->cutting($boolean); + +Sets the current C state to the given value and returns the +result. + +=cut + +sub cutting { + return (@_ > 1) ? ($_[0]->{_CUTTING} = $_[1]) : $_[0]->{_CUTTING}; +} + +##--------------------------------------------------------------------------- + +##--------------------------------------------------------------------------- + +=head1 B + +When invoked with no additional arguments, B returns a hashtable +of all the current parsing options. + + ## See if we are parsing non-POD sections as well as POD ones + my %opts = $parser->parseopts(); + $opts{'-want_nonPODs}' and print "-want_nonPODs\n"; + +When invoked using a single string, B treats the string as the +name of a parse-option and returns its corresponding value if it exists +(returns C if it doesn't). + + ## Did we ask to see '=cut' paragraphs? + my $want_cut = $parser->parseopts('-process_cut_cmd'); + $want_cut and print "-process_cut_cmd\n"; + +When invoked with multiple arguments, B treats them as +key/value pairs and the specified parse-option names are set to the +given values. Any unspecified parse-options are unaffected. + + ## Set them back to the default + $parser->parseopts(-warnings => 0); + +When passed a single hash-ref, B uses that hash to completely +reset the existing parse-options, all previous parse-option values +are lost. + + ## Reset all options to default + $parser->parseopts( { } ); + +See L<"PARSING OPTIONS"> for more information on the name and meaning of each +parse-option currently recognized. + +=cut + +sub parseopts { + local *myData = shift; + local *myOpts = ($myData{_PARSEOPTS} ||= {}); + return %myOpts if (@_ == 0); + if (@_ == 1) { + local $_ = shift; + return ref($_) ? $myData{_PARSEOPTS} = $_ : $myOpts{$_}; + } + my @newOpts = (%myOpts, @_); + $myData{_PARSEOPTS} = { @newOpts }; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $fname = $parser->output_file(); + +Returns the name of the output file being written. + +=cut + +sub output_file { + return $_[0]->{_OUTFILE}; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $fhandle = $parser->output_handle(); + +Returns the output filehandle object. + +=cut + +sub output_handle { + return $_[0]->{_OUTPUT}; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $fname = $parser->input_file(); + +Returns the name of the input file being read. + +=cut + +sub input_file { + return $_[0]->{_INFILE}; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $fhandle = $parser->input_handle(); + +Returns the current input filehandle object. + +=cut + +sub input_handle { + return $_[0]->{_INPUT}; +} + +##--------------------------------------------------------------------------- + +=begin __PRIVATE__ + +=head1 B + + $listref = $parser->input_streams(); + +Returns a reference to an array which corresponds to the stack of all +the input streams that are currently in the middle of being parsed. + +While parsing an input stream, it is possible to invoke +B or B to parse a new input +stream and then return to parsing the previous input stream. Each input +stream to be parsed is pushed onto the end of this input stack +before any of its input is read. The input stream that is currently +being parsed is always at the end (or top) of the input stack. When an +input stream has been exhausted, it is popped off the end of the +input stack. + +Each element on this input stack is a reference to C +object. Please see L for more details. + +This method might be invoked when printing diagnostic messages, for example, +to obtain the name and line number of the all input files that are currently +being processed. + +=end __PRIVATE__ + +=cut + +sub input_streams { + return $_[0]->{_INPUT_STREAMS}; +} + +##--------------------------------------------------------------------------- + +=begin __PRIVATE__ + +=head1 B + + $hashref = $parser->top_stream(); + +Returns a reference to the hash-table that represents the element +that is currently at the top (end) of the input stream stack +(see L<"input_streams()">). The return value will be the C +if the input stack is empty. + +This method might be used when printing diagnostic messages, for example, +to obtain the name and line number of the current input file. + +=end __PRIVATE__ + +=cut + +sub top_stream { + return $_[0]->{_TOP_STREAM} || undef; +} + +############################################################################# + +=head1 PRIVATE METHODS AND DATA + +B makes use of several internal methods and data fields +which clients should not need to see or use. For the sake of avoiding +name collisions for client data and methods, these methods and fields +are briefly discussed here. Determined hackers may obtain further +information about them by reading the B source code. + +Private data fields are stored in the hash-object whose reference is +returned by the B constructor for this class. The names of all +private methods and data-fields used by B begin with a +prefix of "_" and match the regular expression C. + +=cut + +##--------------------------------------------------------------------------- + +=begin _PRIVATE_ + +=head1 B<_push_input_stream()> + + $hashref = $parser->_push_input_stream($in_fh,$out_fh); + +This method will push the given input stream on the input stack and +perform any necessary beginning-of-document or beginning-of-file +processing. The argument C<$in_fh> is the input stream filehandle to +push, and C<$out_fh> is the corresponding output filehandle to use (if +it is not given or is undefined, then the current output stream is used, +which defaults to standard output if it doesnt exist yet). + +The value returned will be reference to the hash-table that represents +the new top of the input stream stack. I that it is +possible for this method to use default values for the input and output +file handles. If this happens, you will need to look at the C +and C instance data members to determine their new values. + +=end _PRIVATE_ + +=cut + +sub _push_input_stream { + my ($self, $in_fh, $out_fh) = @_; + local *myData = $self; + + ## Initialize stuff for the entire document if this is *not* + ## an included file. + ## + ## NOTE: we need to be *very* careful when "defaulting" the output + ## filehandle. We only want to use a default value if this is the + ## beginning of the entire document (but *not* if this is an included + ## file). + unless (defined $myData{_TOP_STREAM}) { + $out_fh = \*STDOUT unless (defined $out_fh); + $myData{_CUTTING} = 1; ## current "cutting" state + $myData{_INPUT_STREAMS} = []; ## stack of all input streams + } + + ## Initialize input indicators + $myData{_OUTFILE} = '(unknown)' unless (defined $myData{_OUTFILE}); + $myData{_OUTPUT} = $out_fh if (defined $out_fh); + $in_fh = \*STDIN unless (defined $in_fh); + $myData{_INFILE} = '(unknown)' unless (defined $myData{_INFILE}); + $myData{_INPUT} = $in_fh; + my $input_top = $myData{_TOP_STREAM} + = new Pod::InputSource( + -name => $myData{_INFILE}, + -handle => $in_fh, + -was_cutting => $myData{_CUTTING} + ); + local *input_stack = $myData{_INPUT_STREAMS}; + push(@input_stack, $input_top); + + ## Perform beginning-of-document and/or beginning-of-input processing + $self->begin_pod() if (@input_stack == 1); + $self->begin_input(); + + return $input_top; +} + +##--------------------------------------------------------------------------- + +=begin _PRIVATE_ + +=head1 B<_pop_input_stream()> + + $hashref = $parser->_pop_input_stream(); + +This takes no arguments. It will perform any necessary end-of-file or +end-of-document processing and then pop the current input stream from +the top of the input stack. + +The value returned will be reference to the hash-table that represents +the new top of the input stream stack. + +=end _PRIVATE_ + +=cut + +sub _pop_input_stream { + my ($self) = @_; + local *myData = $self; + local *input_stack = $myData{_INPUT_STREAMS}; + + ## Perform end-of-input and/or end-of-document processing + $self->end_input() if (@input_stack > 0); + $self->end_pod() if (@input_stack == 1); + + ## Restore cutting state to whatever it was before we started + ## parsing this file. + my $old_top = pop(@input_stack); + $myData{_CUTTING} = $old_top->was_cutting(); + + ## Dont forget to reset the input indicators + my $input_top = undef; + if (@input_stack > 0) { + $input_top = $myData{_TOP_STREAM} = $input_stack[-1]; + $myData{_INFILE} = $input_top->name(); + $myData{_INPUT} = $input_top->handle(); + } else { + delete $myData{_TOP_STREAM}; + delete $myData{_INPUT_STREAMS}; + } + + return $input_top; +} + +############################################################################# + +=head1 TREE-BASED PARSING + +If straightforward stream-based parsing wont meet your needs (as is +likely the case for tasks such as translating PODs into structured +markup languages like HTML and XML) then you may need to take the +tree-based approach. Rather than doing everything in one pass and +calling the B method to expand sequences into text, it +may be desirable to instead create a parse-tree using the B +method to return a tree-like structure which may contain an ordered list +list of children (each of which may be a text-string, or a similar +tree-like structure). + +Pay special attention to L<"METHODS FOR PARSING AND PROCESSING"> and +to the objects described in L. The former describes +the gory details and parameters for how to customize and extend the +parsing behavior of B. B provides +several objects that may all be used interchangeably as parse-trees. The +most obvious one is the B object. It defines the basic +interface and functionality that all things trying to be a POD parse-tree +should do. A B is defined such that each "node" may be a +text-string, or a reference to another parse-tree. Each B +object and each B object also supports the basic +parse-tree interface. + +The B method takes a given paragraph of text, and +returns a parse-tree that contains one or more children, each of which +may be a text-string, or an InteriorSequence object. There are also +callback-options that may be passed to B to customize +the way it expands or transforms interior-sequences, as well as the +returned result. These callbacks can be used to create a parse-tree +with custom-made objects (which may or may not support the parse-tree +interface, depending on how you choose to do it). + +If you wish to turn an entire POD document into a parse-tree, that process +is fairly straightforward. The B method is the key to doing +this successfully. Every paragraph-callback (i.e. the polymorphic methods +for B, B, and B paragraphs) takes +a B object as an argument. Each paragraph object has a +B method that can be used to get or set a corresponding +parse-tree. So for each of those paragraph-callback methods, simply call +B with the options you desire, and then use the returned +parse-tree to assign to the given paragraph object. + +That gives you a parse-tree for each paragraph - so now all you need is +an ordered list of paragraphs. You can maintain that yourself as a data +element in the object/hash. The most straightforward way would be simply +to use an array-ref, with the desired set of custom "options" for each +invocation of B. Let's assume the desired option-set is +given by the hash C<%options>. Then we might do something like the +following: + + package MyPodParserTree; + + @ISA = qw( Pod::Parser ); + + ... + + sub begin_pod { + my $self = shift; + $self->{'-paragraphs'} = []; ## initialize paragraph list + } + + sub command { + my ($parser, $command, $paragraph, $line_num, $pod_para) = @_; + my $ptree = $parser->parse_text({%options}, $paragraph, ...); + $pod_para->parse_tree( $ptree ); + push @{ $self->{'-paragraphs'} }, $pod_para; + } + + sub verbatim { + my ($parser, $paragraph, $line_num, $pod_para) = @_; + push @{ $self->{'-paragraphs'} }, $pod_para; + } + + sub textblock { + my ($parser, $paragraph, $line_num, $pod_para) = @_; + my $ptree = $parser->parse_text({%options}, $paragraph, ...); + $pod_para->parse_tree( $ptree ); + push @{ $self->{'-paragraphs'} }, $pod_para; + } + + ... + + package main; + ... + my $parser = new MyPodParserTree(...); + $parser->parse_from_file(...); + my $paragraphs_ref = $parser->{'-paragraphs'}; + +Of course, in this module-author's humble opinion, I'd be more inclined to +use the existing B object than a simple array. That way +everything in it, paragraphs and sequences, all respond to the same core +interface for all parse-tree nodes. The result would look something like: + + package MyPodParserTree2; + + ... + + sub begin_pod { + my $self = shift; + $self->{'-ptree'} = new Pod::ParseTree; ## initialize parse-tree + } + + sub parse_tree { + ## convenience method to get/set the parse-tree for the entire POD + (@_ > 1) and $_[0]->{'-ptree'} = $_[1]; + return $_[0]->{'-ptree'}; + } + + sub command { + my ($parser, $command, $paragraph, $line_num, $pod_para) = @_; + my $ptree = $parser->parse_text({<>}, $paragraph, ...); + $pod_para->parse_tree( $ptree ); + $parser->parse_tree()->append( $pod_para ); + } + + sub verbatim { + my ($parser, $paragraph, $line_num, $pod_para) = @_; + $parser->parse_tree()->append( $pod_para ); + } + + sub textblock { + my ($parser, $paragraph, $line_num, $pod_para) = @_; + my $ptree = $parser->parse_text({<>}, $paragraph, ...); + $pod_para->parse_tree( $ptree ); + $parser->parse_tree()->append( $pod_para ); + } + + ... + + package main; + ... + my $parser = new MyPodParserTree2(...); + $parser->parse_from_file(...); + my $ptree = $parser->parse_tree; + ... + +Now you have the entire POD document as one great big parse-tree. You +can even use the B<-expand_seq> option to B to insert +whole different kinds of objects. Just don't expect B +to know what to do with them after that. That will need to be in your +code. Or, alternatively, you can insert any object you like so long as +it conforms to the B interface. + +One could use this to create subclasses of B and +B for specific commands (or to create your own +custom node-types in the parse-tree) and add some kind of B +method to each custom node/subclass object in the tree. Then all you'd +need to do is recursively walk the tree in the desired order, processing +the children (most likely from left to right) by formatting them if +they are text-strings, or by calling their B method if they +are objects/references. + +=head1 SEE ALSO + +L, L + +B defines POD input objects corresponding to +command paragraphs, parse-trees, and interior-sequences. + +B is a subclass of B which provides the ability +to selectively include and/or exclude sections of a POD document from being +translated based upon the current heading, subheading, subsubheading, etc. + +=for __PRIVATE__ +B is a subclass of B which gives its users +the ability the employ I instead of, or in addition +to, overriding methods of the base class. + +=for __PRIVATE__ +B and B do not override any +methods nor do they define any new methods with the same name. Because +of this, they may I be used (in combination) as a base class of +the same subclass in order to combine their functionality without +causing any namespace clashes due to multiple inheritance. + +=head1 AUTHOR + +Brad Appleton Ebradapp@enteract.comE + +Based on code for B written by +Tom Christiansen Etchrist@mox.perl.comE + +=cut + +1; diff --git a/gnu/usr.bin/perl/lib/Pod/Plainer.pm b/gnu/usr.bin/perl/lib/Pod/Plainer.pm new file mode 100644 index 00000000000..373e8d090af --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Plainer.pm @@ -0,0 +1,69 @@ +package Pod::Plainer; +use strict; +use Pod::Parser; +our @ISA = qw(Pod::Parser); +our $VERSION = '0.01'; + +our %E = qw( < lt > gt ); + +sub escape_ltgt { + (undef, my $text) = @_; + $text =~ s/([<>])/E<$E{$1}>/g; + $text +} + +sub simple_delimiters { + (undef, my $seq) = @_; + $seq -> left_delimiter( '<' ); + $seq -> right_delimiter( '>' ); + $seq; +} + +sub textblock { + my($parser,$text,$line) = @_; + print {$parser->output_handle()} + $parser->parse_text( + { -expand_text => q(escape_ltgt), + -expand_seq => q(simple_delimiters) }, + $text, $line ) -> raw_text(); +} + +1; + +__END__ + +=head1 NAME + +Pod::Plainer - Perl extension for converting Pod to old style Pod. + +=head1 SYNOPSIS + + use Pod::Plainer; + + my $parser = Pod::Plainer -> new (); + $parser -> parse_from_filehandle(\*STDIN); + +=head1 DESCRIPTION + +Pod::Plainer uses Pod::Parser which takes Pod with the (new) +'CEE .. EE' constructs +and returns the old(er) style with just 'CEE'; +'<' and '>' are replaced by 'EEltE' and 'EEgtE'. + +This can be used to pre-process Pod before using tools which do not +recognise the new style Pods. + +=head2 EXPORT + +None by default. + +=head1 AUTHOR + +Robin Barker, rmb1@cise.npl.co.uk + +=head1 SEE ALSO + +See L. + +=cut + diff --git a/gnu/usr.bin/perl/lib/Pod/Select.pm b/gnu/usr.bin/perl/lib/Pod/Select.pm new file mode 100644 index 00000000000..5dd1595107e --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Select.pm @@ -0,0 +1,745 @@ +############################################################################# +# Pod/Select.pm -- function to select portions of POD docs +# +# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved. +# This file is part of "PodParser". PodParser is free software; +# you can redistribute it and/or modify it under the same terms +# as Perl itself. +############################################################################# + +package Pod::Select; + +use vars qw($VERSION); +$VERSION = 1.12; ## Current version of this package +require 5.005; ## requires this Perl version or later + +############################################################################# + +=head1 NAME + +Pod::Select, podselect() - extract selected sections of POD from input + +=head1 SYNOPSIS + + use Pod::Select; + + ## Select all the POD sections for each file in @filelist + ## and print the result on standard output. + podselect(@filelist); + + ## Same as above, but write to tmp.out + podselect({-output => "tmp.out"}, @filelist): + + ## Select from the given filelist, only those POD sections that are + ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS. + podselect({-sections => ["NAME|SYNOPSIS", "OPTIONS"]}, @filelist): + + ## Select the "DESCRIPTION" section of the PODs from STDIN and write + ## the result to STDERR. + podselect({-output => ">&STDERR", -sections => ["DESCRIPTION"]}, \*STDIN); + +or + + use Pod::Select; + + ## Create a parser object for selecting POD sections from the input + $parser = new Pod::Select(); + + ## Select all the POD sections for each file in @filelist + ## and print the result to tmp.out. + $parser->parse_from_file("<&STDIN", "tmp.out"); + + ## Select from the given filelist, only those POD sections that are + ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS. + $parser->select("NAME|SYNOPSIS", "OPTIONS"); + for (@filelist) { $parser->parse_from_file($_); } + + ## Select the "DESCRIPTION" and "SEE ALSO" sections of the PODs from + ## STDIN and write the result to STDERR. + $parser->select("DESCRIPTION"); + $parser->add_selection("SEE ALSO"); + $parser->parse_from_filehandle(\*STDIN, \*STDERR); + +=head1 REQUIRES + +perl5.005, Pod::Parser, Exporter, Carp + +=head1 EXPORTS + +podselect() + +=head1 DESCRIPTION + +B is a function which will extract specified sections of +pod documentation from an input stream. This ability is provided by the +B module which is a subclass of B. +B provides a method named B to specify the set of +POD sections to select for processing/printing. B merely +creates a B object and then invokes the B +followed by B. + +=head1 SECTION SPECIFICATIONS + +B and B may be given one or more +"section specifications" to restrict the text processed to only the +desired set of sections and their corresponding subsections. A section +specification is a string containing one or more Perl-style regular +expressions separated by forward slashes ("/"). If you need to use a +forward slash literally within a section title you can escape it with a +backslash ("\/"). + +The formal syntax of a section specification is: + +=over 4 + +=item + +I/I/... + +=back + +Any omitted or empty regular expressions will default to ".*". +Please note that each regular expression given is implicitly +anchored by adding "^" and "$" to the beginning and end. Also, if a +given regular expression starts with a "!" character, then the +expression is I (so C would match anything I +C). + +Some example section specifications follow. + +=over 4 + +=item +Match the C and C sections and all of their subsections: + +C + +=item +Match only the C and C subsections of the C +section: + +C + +=item +Match the C subsection of I sections: + +C + +=item +Match all subsections of C I for C: + +C + +=item +Match the C section but do I match any of its subsections: + +C + +=item +Match all top level sections but none of their subsections: + +C + +=back + +=begin _NOT_IMPLEMENTED_ + +=head1 RANGE SPECIFICATIONS + +B and B may be given one or more +"range specifications" to restrict the text processed to only the +desired ranges of paragraphs in the desired set of sections. A range +specification is a string containing a single Perl-style regular +expression (a regex), or else two Perl-style regular expressions +(regexs) separated by a ".." (Perl's "range" operator is ".."). +The regexs in a range specification are delimited by forward slashes +("/"). If you need to use a forward slash literally within a regex you +can escape it with a backslash ("\/"). + +The formal syntax of a range specification is: + +=over 4 + +=item + +/I/[../I/] + +=back + +Where each the item inside square brackets (the ".." followed by the +end-range-regex) is optional. Each "range-regex" is of the form: + + =cmd-expr text-expr + +Where I is intended to match the name of one or more POD +commands, and I is intended to match the paragraph text for +the command. If a range-regex is supposed to match a POD command, then +the first character of the regex (the one after the initial '/') +absolutely I be an single '=' character; it may not be anything +else (not even a regex meta-character) if it is supposed to match +against the name of a POD command. + +If no I<=cmd-expr> is given then the text-expr will be matched against +plain textblocks unless it is preceded by a space, in which case it is +matched against verbatim text-blocks. If no I is given then +only the command-portion of the paragraph is matched against. + +Note that these two expressions are each implicitly anchored. This +means that when matching against the command-name, there will be an +implicit '^' and '$' around the given I<=cmd-expr>; and when matching +against the paragraph text there will be an implicit '\A' and '\Z' +around the given I. + +Unlike with section-specs, the '!' character does I have any special +meaning (negation or otherwise) at the beginning of a range-spec! + +Some example range specifications follow. + +=over 4 + +=item +Match all C<=for html> paragraphs: + +C + +=item +Match all paragraphs between C<=begin html> and C<=end html> +(note that this will I work correctly if such sections +are nested): + +C + +=item +Match all paragraphs between the given C<=item> name until the end of the +current section: + +C + +=item +Match all paragraphs between the given C<=item> until the next item, or +until the end of the itemized list (note that this will I work as +desired if the item contains an itemized list nested within it): + +C + +=back + +=end _NOT_IMPLEMENTED_ + +=cut + +############################################################################# + +use strict; +#use diagnostics; +use Carp; +use Pod::Parser 1.04; +use vars qw(@ISA @EXPORT $MAX_HEADING_LEVEL); + +@ISA = qw(Pod::Parser); +@EXPORT = qw(&podselect); + +## Maximum number of heading levels supported for '=headN' directives +*MAX_HEADING_LEVEL = \3; + +############################################################################# + +=head1 OBJECT METHODS + +The following methods are provided in this module. Each one takes a +reference to the object itself as an implicit first parameter. + +=cut + +##--------------------------------------------------------------------------- + +## =begin _PRIVATE_ +## +## =head1 B<_init_headings()> +## +## Initialize the current set of active section headings. +## +## =cut +## +## =end _PRIVATE_ + +use vars qw(%myData @section_headings); + +sub _init_headings { + my $self = shift; + local *myData = $self; + + ## Initialize current section heading titles if necessary + unless (defined $myData{_SECTION_HEADINGS}) { + local *section_headings = $myData{_SECTION_HEADINGS} = []; + for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) { + $section_headings[$i] = ''; + } + } +} + +##--------------------------------------------------------------------------- + +=head1 B + + ($head1, $head2, $head3, ...) = $parser->curr_headings(); + $head1 = $parser->curr_headings(1); + +This method returns a list of the currently active section headings and +subheadings in the document being parsed. The list of headings returned +corresponds to the most recently parsed paragraph of the input. + +If an argument is given, it must correspond to the desired section +heading number, in which case only the specified section heading is +returned. If there is no current section heading at the specified +level, then C is returned. + +=cut + +sub curr_headings { + my $self = shift; + $self->_init_headings() unless (defined $self->{_SECTION_HEADINGS}); + my @headings = @{ $self->{_SECTION_HEADINGS} }; + return (@_ > 0 and $_[0] =~ /^\d+$/) ? $headings[$_[0] - 1] : @headings; +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->select($section_spec1,$section_spec2,...); + +This method is used to select the particular sections and subsections of +POD documentation that are to be printed and/or processed. The existing +set of selected sections is I with the given set of sections. +See B for adding to the current set of selected +sections. + +Each of the C<$section_spec> arguments should be a section specification +as described in L<"SECTION SPECIFICATIONS">. The section specifications +are parsed by this method and the resulting regular expressions are +stored in the invoking object. + +If no C<$section_spec> arguments are given, then the existing set of +selected sections is cleared out (which means C sections will be +processed). + +This method should I normally be overridden by subclasses. + +=cut + +use vars qw(@selected_sections); + +sub select { + my $self = shift; + my @sections = @_; + local *myData = $self; + local $_; + +### NEED TO DISCERN A SECTION-SPEC FROM A RANGE-SPEC (look for m{^/.+/$}?) + + ##--------------------------------------------------------------------- + ## The following is a blatant hack for backward compatibility, and for + ## implementing add_selection(). If the *first* *argument* is the + ## string "+", then the remaining section specifications are *added* + ## to the current set of selections; otherwise the given section + ## specifications will *replace* the current set of selections. + ## + ## This should probably be fixed someday, but for the present time, + ## it seems incredibly unlikely that "+" would ever correspond to + ## a legitimate section heading + ##--------------------------------------------------------------------- + my $add = ($sections[0] eq "+") ? shift(@sections) : ""; + + ## Reset the set of sections to use + unless (@sections > 0) { + delete $myData{_SELECTED_SECTIONS} unless ($add); + return; + } + $myData{_SELECTED_SECTIONS} = [] + unless ($add && exists $myData{_SELECTED_SECTIONS}); + local *selected_sections = $myData{_SELECTED_SECTIONS}; + + ## Compile each spec + my $spec; + for $spec (@sections) { + if ( defined($_ = &_compile_section_spec($spec)) ) { + ## Store them in our sections array + push(@selected_sections, $_); + } + else { + carp "Ignoring section spec \"$spec\"!\n"; + } + } +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->add_selection($section_spec1,$section_spec2,...); + +This method is used to add to the currently selected sections and +subsections of POD documentation that are to be printed and/or +processed. See for replacing the currently selected sections. + +Each of the C<$section_spec> arguments should be a section specification +as described in L<"SECTION SPECIFICATIONS">. The section specifications +are parsed by this method and the resulting regular expressions are +stored in the invoking object. + +This method should I normally be overridden by subclasses. + +=cut + +sub add_selection { + my $self = shift; + $self->select("+", @_); +} + +##--------------------------------------------------------------------------- + +=head1 B + + $parser->clear_selections(); + +This method takes no arguments, it has the exact same effect as invoking + with no arguments. + +=cut + +sub clear_selections { + my $self = shift; + $self->select(); +} + +##--------------------------------------------------------------------------- + +=head1 B + + $boolean = $parser->match_section($heading1,$heading2,...); + +Returns a value of true if the given section and subsection heading +titles match any of the currently selected section specifications in +effect from prior calls to B and B (or if +there are no explictly selected/deselected sections). + +The arguments C<$heading1>, C<$heading2>, etc. are the heading titles of +the corresponding sections, subsections, etc. to try and match. If +C<$headingN> is omitted then it defaults to the current corresponding +section heading title in the input. + +This method should I normally be overridden by subclasses. + +=cut + +sub match_section { + my $self = shift; + my (@headings) = @_; + local *myData = $self; + + ## Return true if no restrictions were explicitly specified + my $selections = (exists $myData{_SELECTED_SECTIONS}) + ? $myData{_SELECTED_SECTIONS} : undef; + return 1 unless ((defined $selections) && (@{$selections} > 0)); + + ## Default any unspecified sections to the current one + my @current_headings = $self->curr_headings(); + for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) { + (defined $headings[$i]) or $headings[$i] = $current_headings[$i]; + } + + ## Look for a match against the specified section expressions + my ($section_spec, $regex, $negated, $match); + for $section_spec ( @{$selections} ) { + ##------------------------------------------------------ + ## Each portion of this spec must match in order for + ## the spec to be matched. So we will start with a + ## match-value of 'true' and logically 'and' it with + ## the results of matching a given element of the spec. + ##------------------------------------------------------ + $match = 1; + for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) { + $regex = $section_spec->[$i]; + $negated = ($regex =~ s/^\!//); + $match &= ($negated ? ($headings[$i] !~ /${regex}/) + : ($headings[$i] =~ /${regex}/)); + last unless ($match); + } + return 1 if ($match); + } + return 0; ## no match +} + +##--------------------------------------------------------------------------- + +=head1 B + + $boolean = $parser->is_selected($paragraph); + +This method is used to determine if the block of text given in +C<$paragraph> falls within the currently selected set of POD sections +and subsections to be printed or processed. This method is also +responsible for keeping track of the current input section and +subsections. It is assumed that C<$paragraph> is the most recently read +(but not yet processed) input paragraph. + +The value returned will be true if the C<$paragraph> and the rest of the +text in the same section as C<$paragraph> should be selected (included) +for processing; otherwise a false value is returned. + +=cut + +sub is_selected { + my ($self, $paragraph) = @_; + local $_; + local *myData = $self; + + $self->_init_headings() unless (defined $myData{_SECTION_HEADINGS}); + + ## Keep track of current sections levels and headings + $_ = $paragraph; + if (/^=((?:sub)*)(?:head(?:ing)?|sec(?:tion)?)(\d*)\s+(.*)\s*$/) { + ## This is a section heading command + my ($level, $heading) = ($2, $3); + $level = 1 + (length($1) / 3) if ((! length $level) || (length $1)); + ## Reset the current section heading at this level + $myData{_SECTION_HEADINGS}->[$level - 1] = $heading; + ## Reset subsection headings of this one to empty + for (my $i = $level; $i < $MAX_HEADING_LEVEL; ++$i) { + $myData{_SECTION_HEADINGS}->[$i] = ''; + } + } + + return $self->match_section(); +} + +############################################################################# + +=head1 EXPORTED FUNCTIONS + +The following functions are exported by this module. Please note that +these are functions (not methods) and therefore C take an +implicit first argument. + +=cut + +##--------------------------------------------------------------------------- + +=head1 B + + podselect(\%options,@filelist); + +B will print the raw (untranslated) POD paragraphs of all +POD sections in the given input files specified by C<@filelist> +according to the given options. + +If any argument to B is a reference to a hash +(associative array) then the values with the following keys are +processed as follows: + +=over 4 + +=item B<-output> + +A string corresponding to the desired output file (or ">&STDOUT" +or ">&STDERR"). The default is to use standard output. + +=item B<-sections> + +A reference to an array of sections specifications (as described in +L<"SECTION SPECIFICATIONS">) which indicate the desired set of POD +sections and subsections to be selected from input. If no section +specifications are given, then all sections of the PODs are used. + +=begin _NOT_IMPLEMENTED_ + +=item B<-ranges> + +A reference to an array of range specifications (as described in +L<"RANGE SPECIFICATIONS">) which indicate the desired range of POD +paragraphs to be selected from the desired input sections. If no range +specifications are given, then all paragraphs of the desired sections +are used. + +=end _NOT_IMPLEMENTED_ + +=back + +All other arguments should correspond to the names of input files +containing POD sections. A file name of "-" or "<&STDIN" will +be interpeted to mean standard input (which is the default if no +filenames are given). + +=cut + +sub podselect { + my(@argv) = @_; + my %defaults = (); + my $pod_parser = new Pod::Select(%defaults); + my $num_inputs = 0; + my $output = ">&STDOUT"; + my %opts = (); + local $_; + for (@argv) { + if (ref($_)) { + next unless (ref($_) eq 'HASH'); + %opts = (%defaults, %{$_}); + + ##------------------------------------------------------------- + ## Need this for backward compatibility since we formerly used + ## options that were all uppercase words rather than ones that + ## looked like Unix command-line options. + ## to be uppercase keywords) + ##------------------------------------------------------------- + %opts = map { + my ($key, $val) = (lc $_, $opts{$_}); + $key =~ s/^(?=\w)/-/; + $key =~ /^-se[cl]/ and $key = '-sections'; + #! $key eq '-range' and $key .= 's'; + ($key => $val); + } (keys %opts); + + ## Process the options + (exists $opts{'-output'}) and $output = $opts{'-output'}; + + ## Select the desired sections + $pod_parser->select(@{ $opts{'-sections'} }) + if ( (defined $opts{'-sections'}) + && ((ref $opts{'-sections'}) eq 'ARRAY') ); + + #! ## Select the desired paragraph ranges + #! $pod_parser->select(@{ $opts{'-ranges'} }) + #! if ( (defined $opts{'-ranges'}) + #! && ((ref $opts{'-ranges'}) eq 'ARRAY') ); + } + else { + $pod_parser->parse_from_file($_, $output); + ++$num_inputs; + } + } + $pod_parser->parse_from_file("-") unless ($num_inputs > 0); +} + +############################################################################# + +=head1 PRIVATE METHODS AND DATA + +B makes uses a number of internal methods and data fields +which clients should not need to see or use. For the sake of avoiding +name collisions with client data and methods, these methods and fields +are briefly discussed here. Determined hackers may obtain further +information about them by reading the B source code. + +Private data fields are stored in the hash-object whose reference is +returned by the B constructor for this class. The names of all +private methods and data-fields used by B begin with a +prefix of "_" and match the regular expression C. + +=cut + +##--------------------------------------------------------------------------- + +=begin _PRIVATE_ + +=head1 B<_compile_section_spec()> + + $listref = $parser->_compile_section_spec($section_spec); + +This function (note it is a function and I a method) takes a +section specification (as described in L<"SECTION SPECIFICATIONS">) +given in C<$section_sepc>, and compiles it into a list of regular +expressions. If C<$section_spec> has no syntax errors, then a reference +to the list (array) of corresponding regular expressions is returned; +otherwise C is returned and an error message is printed (using +B) for each invalid regex. + +=end _PRIVATE_ + +=cut + +sub _compile_section_spec { + my ($section_spec) = @_; + my (@regexs, $negated); + + ## Compile the spec into a list of regexs + local $_ = $section_spec; + s|\\\\|\001|g; ## handle escaped backward slashes + s|\\/|\002|g; ## handle escaped forward slashes + + ## Parse the regexs for the heading titles + @regexs = split('/', $_, $MAX_HEADING_LEVEL); + + ## Set default regex for ommitted levels + for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) { + $regexs[$i] = '.*' unless ((defined $regexs[$i]) + && (length $regexs[$i])); + } + ## Modify the regexs as needed and validate their syntax + my $bad_regexs = 0; + for (@regexs) { + $_ .= '.+' if ($_ eq '!'); + s|\001|\\\\|g; ## restore escaped backward slashes + s|\002|\\/|g; ## restore escaped forward slashes + $negated = s/^\!//; ## check for negation + eval "/$_/"; ## check regex syntax + if ($@) { + ++$bad_regexs; + carp "Bad regular expression /$_/ in \"$section_spec\": $@\n"; + } + else { + ## Add the forward and rear anchors (and put the negator back) + $_ = '^' . $_ unless (/^\^/); + $_ = $_ . '$' unless (/\$$/); + $_ = '!' . $_ if ($negated); + } + } + return (! $bad_regexs) ? [ @regexs ] : undef; +} + +##--------------------------------------------------------------------------- + +=begin _PRIVATE_ + +=head2 $self->{_SECTION_HEADINGS} + +A reference to an array of the current section heading titles for each +heading level (note that the first heading level title is at index 0). + +=end _PRIVATE_ + +=cut + +##--------------------------------------------------------------------------- + +=begin _PRIVATE_ + +=head2 $self->{_SELECTED_SECTIONS} + +A reference to an array of references to arrays. Each subarray is a list +of anchored regular expressions (preceded by a "!" if the expression is to +be negated). The index of the expression in the subarray should correspond +to the index of the heading title in C<$self-E{_SECTION_HEADINGS}> +that it is to be matched against. + +=end _PRIVATE_ + +=cut + +############################################################################# + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Brad Appleton Ebradapp@enteract.comE + +Based on code for B written by +Tom Christiansen Etchrist@mox.perl.comE + +=cut + +1; + diff --git a/gnu/usr.bin/perl/lib/Pod/Text/Color.pm b/gnu/usr.bin/perl/lib/Pod/Text/Color.pm new file mode 100644 index 00000000000..2672fe77002 --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Text/Color.pm @@ -0,0 +1,125 @@ +# Pod::Text::Color -- Convert POD data to formatted color ASCII text +# $Id: Color.pm,v 1.1.1.1 2000/04/06 16:09:48 millert Exp $ +# +# Copyright 1999 by Russ Allbery +# +# This program is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. +# +# This is just a basic proof of concept. It should later be modified to +# make better use of color, take options changing what colors are used for +# what text, and the like. + +############################################################################ +# Modules and declarations +############################################################################ + +package Pod::Text::Color; + +require 5.004; + +use Pod::Text (); +use Term::ANSIColor qw(colored); + +use strict; +use vars qw(@ISA $VERSION); + +@ISA = qw(Pod::Text); + +# Use the CVS revision of this file as its version number. +($VERSION = (split (' ', q$Revision: 1.1.1.1 $ ))[1]) =~ s/\.(\d)$/.0$1/; + + +############################################################################ +# Overrides +############################################################################ + +# Make level one headings bold. +sub cmd_head1 { + my $self = shift; + local $_ = shift; + s/\s+$//; + $self->SUPER::cmd_head1 (colored ($_, 'bold')); +} + +# Make level two headings bold. +sub cmd_head2 { + my $self = shift; + local $_ = shift; + s/\s+$//; + $self->SUPER::cmd_head2 (colored ($_, 'bold')); +} + +# Fix the various interior sequences. +sub seq_b { return colored ($_[1], 'bold') } +sub seq_f { return colored ($_[1], 'cyan') } +sub seq_i { return colored ($_[1], 'yellow') } + +# We unfortunately have to override the wrapping code here, since the normal +# wrapping code gets really confused by all the escape sequences. +sub wrap { + my $self = shift; + local $_ = shift; + my $output = ''; + my $spaces = ' ' x $$self{MARGIN}; + my $width = $$self{width} - $$self{MARGIN}; + while (length > $width) { + if (s/^((?:(?:\e\[[\d;]+m)?[^\n]){0,$width})\s+// + || s/^((?:(?:\e\[[\d;]+m)?[^\n]){$width})//) { + $output .= $spaces . $1 . "\n"; + } else { + last; + } + } + $output .= $spaces . $_; + $output =~ s/\s+$/\n\n/; + $output; +} + +############################################################################ +# Module return value and documentation +############################################################################ + +1; +__END__ + +=head1 NAME + +Pod::Text::Color - Convert POD data to formatted color ASCII text + +=head1 SYNOPSIS + + use Pod::Text::Color; + my $parser = Pod::Text::Color->new (sentence => 0, width => 78); + + # Read POD from STDIN and write to STDOUT. + $parser->parse_from_filehandle; + + # Read POD from file.pod and write to file.txt. + $parser->parse_from_file ('file.pod', 'file.txt'); + +=head1 DESCRIPTION + +Pod::Text::Color is a simple subclass of Pod::Text that highlights output +text using ANSI color escape sequences. Apart from the color, it in all +ways functions like Pod::Text. See L for details and available +options. + +Term::ANSIColor is used to get colors and therefore must be installed to use +this module. + +=head1 BUGS + +This is just a basic proof of concept. It should be seriously expanded to +support configurable coloration via options passed to the constructor, and +B should be taught about those. + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Russ Allbery Erra@stanford.eduE. + +=cut diff --git a/gnu/usr.bin/perl/lib/Pod/Text/Termcap.pm b/gnu/usr.bin/perl/lib/Pod/Text/Termcap.pm new file mode 100644 index 00000000000..d5432d180a1 --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Text/Termcap.pm @@ -0,0 +1,142 @@ +# Pod::Text::Termcap -- Convert POD data to ASCII text with format escapes. +# $Id: Termcap.pm,v 1.1.1.1 2000/04/06 16:09:48 millert Exp $ +# +# Copyright 1999 by Russ Allbery +# +# This program is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. +# +# This is a simple subclass of Pod::Text that overrides a few key methods to +# output the right termcap escape sequences for formatted text on the +# current terminal type. + +############################################################################ +# Modules and declarations +############################################################################ + +package Pod::Text::Termcap; + +require 5.004; + +use Pod::Text (); +use POSIX (); +use Term::Cap; + +use strict; +use vars qw(@ISA $VERSION); + +@ISA = qw(Pod::Text); + +# Use the CVS revision of this file as its version number. +($VERSION = (split (' ', q$Revision: 1.1.1.1 $ ))[1]) =~ s/\.(\d)$/.0$1/; + + +############################################################################ +# Overrides +############################################################################ + +# In the initialization method, grab our terminal characteristics as well as +# do all the stuff we normally do. +sub initialize { + my $self = shift; + + # The default Term::Cap path won't work on Solaris. + $ENV{TERMPATH} = "$ENV{HOME}/.termcap:/etc/termcap" + . ":/usr/share/misc/termcap:/usr/share/lib/termcap"; + + my $termios = POSIX::Termios->new; + $termios->getattr; + my $ospeed = $termios->getospeed; + my $term = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed }; + $$self{BOLD} = $$term{_md} or die 'BOLD'; + $$self{UNDL} = $$term{_us} or die 'UNDL'; + $$self{NORM} = $$term{_me} or die 'NORM'; + + unless (defined $$self{width}) { + $$self{width} = $ENV{COLUMNS} || $$term{_co} || 78; + $$self{width} -= 2; + } + + $self->SUPER::initialize; +} + +# Make level one headings bold. +sub cmd_head1 { + my $self = shift; + local $_ = shift; + s/\s+$//; + $self->SUPER::cmd_head1 ("$$self{BOLD}$_$$self{NORM}"); +} + +# Make level two headings bold. +sub cmd_head2 { + my $self = shift; + local $_ = shift; + s/\s+$//; + $self->SUPER::cmd_head2 ("$$self{BOLD}$_$$self{NORM}"); +} + +# Fix up B<> and I<>. Note that we intentionally don't do F<>. +sub seq_b { my $self = shift; return "$$self{BOLD}$_[0]$$self{NORM}" } +sub seq_i { my $self = shift; return "$$self{UNDL}$_[0]$$self{NORM}" } + +# Override the wrapping code to igore the special sequences. +sub wrap { + my $self = shift; + local $_ = shift; + my $output = ''; + my $spaces = ' ' x $$self{MARGIN}; + my $width = $$self{width} - $$self{MARGIN}; + my $code = "(?:\Q$$self{BOLD}\E|\Q$$self{UNDL}\E|\Q$$self{NORM}\E)"; + while (length > $width) { + if (s/^((?:$code?[^\n]){0,$width})\s+// + || s/^((?:$code?[^\n]){$width})//) { + $output .= $spaces . $1 . "\n"; + } else { + last; + } + } + $output .= $spaces . $_; + $output =~ s/\s+$/\n\n/; + $output; +} + + +############################################################################ +# Module return value and documentation +############################################################################ + +1; +__END__ + +=head1 NAME + +Pod::Text::Color - Convert POD data to ASCII text with format escapes + +=head1 SYNOPSIS + + use Pod::Text::Termcap; + my $parser = Pod::Text::Termcap->new (sentence => 0, width => 78); + + # Read POD from STDIN and write to STDOUT. + $parser->parse_from_filehandle; + + # Read POD from file.pod and write to file.txt. + $parser->parse_from_file ('file.pod', 'file.txt'); + +=head1 DESCRIPTION + +Pod::Text::Termcap is a simple subclass of Pod::Text that highlights output +text using the correct termcap escape sequences for the current terminal. +Apart from the format codes, it in all ways functions like Pod::Text. See +L for details and available options. + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Russ Allbery Erra@stanford.eduE. + +=cut diff --git a/gnu/usr.bin/perl/lib/Pod/Usage.pm b/gnu/usr.bin/perl/lib/Pod/Usage.pm new file mode 100644 index 00000000000..aa8f712dcf5 --- /dev/null +++ b/gnu/usr.bin/perl/lib/Pod/Usage.pm @@ -0,0 +1,544 @@ +############################################################################# +# Pod/Usage.pm -- print usage messages for the running script. +# +# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved. +# This file is part of "PodParser". PodParser is free software; +# you can redistribute it and/or modify it under the same terms +# as Perl itself. +############################################################################# + +package Pod::Usage; + +use vars qw($VERSION); +$VERSION = 1.12; ## Current version of this package +require 5.005; ## requires this Perl version or later + +=head1 NAME + +Pod::Usage, pod2usage() - print a usage message from embedded pod documentation + +=head1 SYNOPSIS + + use Pod::Usage + + my $message_text = "This text precedes the usage message."; + my $exit_status = 2; ## The exit status to use + my $verbose_level = 0; ## The verbose level to use + my $filehandle = \*STDERR; ## The filehandle to write to + + pod2usage($message_text); + + pod2usage($exit_status); + + pod2usage( { -message => $message_text , + -exitval => $exit_status , + -verbose => $verbose_level, + -output => $filehandle } ); + + pod2usage( -msg => $message_text , + -exitval => $exit_status , + -verbose => $verbose_level, + -output => $filehandle ); + +=head1 ARGUMENTS + +B should be given either a single argument, or a list of +arguments corresponding to an associative array (a "hash"). When a single +argument is given, it should correspond to exactly one of the following: + +=over + +=item * + +A string containing the text of a message to print I printing +the usage message + +=item * + +A numeric value corresponding to the desired exit status + +=item * + +A reference to a hash + +=back + +If more than one argument is given then the entire argument list is +assumed to be a hash. If a hash is supplied (either as a reference or +as a list) it should contain one or more elements with the following +keys: + +=over + +=item C<-message> + +=item C<-msg> + +The text of a message to print immediately prior to printing the +program's usage message. + +=item C<-exitval> + +The desired exit status to pass to the B function. + +=item C<-verbose> + +The desired level of "verboseness" to use when printing the usage +message. If the corresponding value is 0, then only the "SYNOPSIS" +section of the pod documentation is printed. If the corresponding value +is 1, then the "SYNOPSIS" section, along with any section entitled +"OPTIONS", "ARGUMENTS", or "OPTIONS AND ARGUMENTS" is printed. If the +corresponding value is 2 or more then the entire manpage is printed. + +=item C<-output> + +A reference to a filehandle, or the pathname of a file to which the +usage message should be written. The default is C<\*STDERR> unless the +exit value is less than 2 (in which case the default is C<\*STDOUT>). + +=item C<-input> + +A reference to a filehandle, or the pathname of a file from which the +invoking script's pod documentation should be read. It defaults to the +file indicated by C<$0> (C<$PROGRAM_NAME> for users of F). + +=item C<-pathlist> + +A list of directory paths. If the input file does not exist, then it +will be searched for in the given directory list (in the order the +directories appear in the list). It defaults to the list of directories +implied by C<$ENV{PATH}>. The list may be specified either by a reference +to an array, or by a string of directory paths which use the same path +separator as C<$ENV{PATH}> on your system (e.g., C<:> for Unix, C<;> for +MSWin32 and DOS). + +=back + +=head1 DESCRIPTION + +B will print a usage message for the invoking script (using +its embedded pod documentation) and then exit the script with the +desired exit status. The usage message printed may have any one of three +levels of "verboseness": If the verbose level is 0, then only a synopsis +is printed. If the verbose level is 1, then the synopsis is printed +along with a description (if present) of the command line options and +arguments. If the verbose level is 2, then the entire manual page is +printed. + +Unless they are explicitly specified, the default values for the exit +status, verbose level, and output stream to use are determined as +follows: + +=over + +=item * + +If neither the exit status nor the verbose level is specified, then the +default is to use an exit status of 2 with a verbose level of 0. + +=item * + +If an exit status I specified but the verbose level is I, then the +verbose level will default to 1 if the exit status is less than 2 and +will default to 0 otherwise. + +=item * + +If an exit status is I specified but verbose level I given, then +the exit status will default to 2 if the verbose level is 0 and will +default to 1 otherwise. + +=item * + +If the exit status used is less than 2, then output is printed on +C. Otherwise output is printed on C. + +=back + +Although the above may seem a bit confusing at first, it generally does +"the right thing" in most situations. This determination of the default +values to use is based upon the following typical Unix conventions: + +=over + +=item * + +An exit status of 0 implies "success". For example, B exits +with a status of 0 if the two files have the same contents. + +=item * + +An exit status of 1 implies possibly abnormal, but non-defective, program +termination. For example, B exits with a status of 1 if +it did I find a matching line for the given regular expression. + +=item * + +An exit status of 2 or more implies a fatal error. For example, B +exits with a status of 2 if you specify an illegal (unknown) option on +the command line. + +=item * + +Usage messages issued as a result of bad command-line syntax should go +to C. However, usage messages issued due to an explicit request +to print usage (like specifying B<-help> on the command line) should go +to C, just in case the user wants to pipe the output to a pager +(such as B). + +=item * + +If program usage has been explicitly requested by the user, it is often +desireable to exit with a status of 1 (as opposed to 0) after issuing +the user-requested usage message. It is also desireable to give a +more verbose description of program usage in this case. + +=back + +B doesn't force the above conventions upon you, but it will +use them by default if you don't expressly tell it to do otherwise. The +ability of B to accept a single number or a string makes it +convenient to use as an innocent looking error message handling function: + + use Pod::Usage; + use Getopt::Long; + + ## Parse options + GetOptions("help", "man", "flag1") || pod2usage(2); + pod2usage(1) if ($opt_help); + pod2usage(-verbose => 2) if ($opt_man); + + ## Check for too many filenames + pod2usage("$0: Too many files given.\n") if (@ARGV > 1); + +Some user's however may feel that the above "economy of expression" is +not particularly readable nor consistent and may instead choose to do +something more like the following: + + use Pod::Usage; + use Getopt::Long; + + ## Parse options + GetOptions("help", "man", "flag1") || pod2usage(-verbose => 0); + pod2usage(-verbose => 1) if ($opt_help); + pod2usage(-verbose => 2) if ($opt_man); + + ## Check for too many filenames + pod2usage(-verbose => 2, -message => "$0: Too many files given.\n") + if (@ARGV > 1); + +As with all things in Perl, I, and +B adheres to this philosophy. If you are interested in +seeing a number of different ways to invoke B (although by no +means exhaustive), please refer to L<"EXAMPLES">. + +=head1 EXAMPLES + +Each of the following invocations of C will print just the +"SYNOPSIS" section to C and will exit with a status of 2: + + pod2usage(); + + pod2usage(2); + + pod2usage(-verbose => 0); + + pod2usage(-exitval => 2); + + pod2usage({-exitval => 2, -output => \*STDERR}); + + pod2usage({-verbose => 0, -output => \*STDERR}); + + pod2usage(-exitval => 2, -verbose => 0); + + pod2usage(-exitval => 2, -verbose => 0, -output => \*STDERR); + +Each of the following invocations of C will print a message +of "Syntax error." (followed by a newline) to C, immediately +followed by just the "SYNOPSIS" section (also printed to C) and +will exit with a status of 2: + + pod2usage("Syntax error."); + + pod2usage(-message => "Syntax error.", -verbose => 0); + + pod2usage(-msg => "Syntax error.", -exitval => 2); + + pod2usage({-msg => "Syntax error.", -exitval => 2, -output => \*STDERR}); + + pod2usage({-msg => "Syntax error.", -verbose => 0, -output => \*STDERR}); + + pod2usage(-msg => "Syntax error.", -exitval => 2, -verbose => 0); + + pod2usage(-message => "Syntax error.", + -exitval => 2, + -verbose => 0, + -output => \*STDERR); + +Each of the following invocations of C will print the +"SYNOPSIS" section and any "OPTIONS" and/or "ARGUMENTS" sections to +C and will exit with a status of 1: + + pod2usage(1); + + pod2usage(-verbose => 1); + + pod2usage(-exitval => 1); + + pod2usage({-exitval => 1, -output => \*STDOUT}); + + pod2usage({-verbose => 1, -output => \*STDOUT}); + + pod2usage(-exitval => 1, -verbose => 1); + + pod2usage(-exitval => 1, -verbose => 1, -output => \*STDOUT}); + +Each of the following invocations of C will print the +entire manual page to C and will exit with a status of 1: + + pod2usage(-verbose => 2); + + pod2usage({-verbose => 2, -output => \*STDOUT}); + + pod2usage(-exitval => 1, -verbose => 2); + + pod2usage({-exitval => 1, -verbose => 2, -output => \*STDOUT}); + +=head2 Recommended Use + +Most scripts should print some type of usage message to C when a +command line syntax error is detected. They should also provide an +option (usually C<-H> or C<-help>) to print a (possibly more verbose) +usage message to C. Some scripts may even wish to go so far as to +provide a means of printing their complete documentation to C +(perhaps by allowing a C<-man> option). The following complete example +uses B in combination with B to do all of these +things: + + use Getopt::Long; + use Pod::Usage; + + my $man = 0; + my $help = 0; + ## Parse options and print usage if there is a syntax error, + ## or if usage was explicitly requested. + GetOptions('help|?' => \$help, man => \$man) or pod2usage(2); + pod2usage(1) if $help; + pod2usage(-verbose => 2) if $man; + + ## If no arguments were given, then allow STDIN to be used only + ## if it's not connected to a terminal (otherwise print usage) + pod2usage("$0: No files given.") if ((@ARGV == 0) && (-t STDIN)); + __END__ + + =head1 NAME + + sample - Using GetOpt::Long and Pod::Usage + + =head1 SYNOPSIS + + sample [options] [file ...] + + Options: + -help brief help message + -man full documentation + + =head1 OPTIONS + + =over 8 + + =item B<-help> + + Print a brief help message and exits. + + =item B<-man> + + Prints the manual page and exits. + + =back + + =head1 DESCRIPTION + + B will read the given input file(s) and do something + useful with the contents thereof. + + =cut + +=head1 CAVEATS + +By default, B will use C<$0> as the path to the pod input +file. Unfortunately, not all systems on which Perl runs will set C<$0> +properly (although if C<$0> isn't found, B will search +C<$ENV{PATH}> or else the list specified by the C<-pathlist> option). +If this is the case for your system, you may need to explicitly specify +the path to the pod docs for the invoking script using something +similar to the following: + + pod2usage(-exitval => 2, -input => "/path/to/your/pod/docs"); + +=head1 AUTHOR + +Brad Appleton Ebradapp@enteract.comE + +Based on code for B written by +Tom Christiansen Etchrist@mox.perl.comE + +=head1 ACKNOWLEDGEMENTS + +Steven McDougall Eswmcd@world.std.comE for his help and patience +with re-writing this manpage. + +=cut + +############################################################################# + +use strict; +#use diagnostics; +use Carp; +use Exporter; +use File::Spec; + +use vars qw(@ISA @EXPORT); +@EXPORT = qw(&pod2usage); +BEGIN { + if ( $] >= 5.005_58 ) { + require Pod::Text; + @ISA = qw( Pod::Text ); + } + else { + require Pod::PlainText; + @ISA = qw( Pod::PlainText ); + } +} + + +##--------------------------------------------------------------------------- + +##--------------------------------- +## Function definitions begin here +##--------------------------------- + +sub pod2usage { + local($_) = shift || ""; + my %opts; + ## Collect arguments + if (@_ > 0) { + ## Too many arguments - assume that this is a hash and + ## the user forgot to pass a reference to it. + %opts = ($_, @_); + } + elsif (ref $_) { + ## User passed a ref to a hash + %opts = %{$_} if (ref($_) eq 'HASH'); + } + elsif (/^[-+]?\d+$/) { + ## User passed in the exit value to use + $opts{"-exitval"} = $_; + } + else { + ## User passed in a message to print before issuing usage. + $_ and $opts{"-message"} = $_; + } + + ## Need this for backward compatibility since we formerly used + ## options that were all uppercase words rather than ones that + ## looked like Unix command-line options. + ## to be uppercase keywords) + %opts = map { + my $val = $opts{$_}; + s/^(?=\w)/-/; + /^-msg/i and $_ = '-message'; + /^-exit/i and $_ = '-exitval'; + lc($_) => $val; + } (keys %opts); + + ## Now determine default -exitval and -verbose values to use + if ((! defined $opts{"-exitval"}) && (! defined $opts{"-verbose"})) { + $opts{"-exitval"} = 2; + $opts{"-verbose"} = 0; + } + elsif (! defined $opts{"-exitval"}) { + $opts{"-exitval"} = ($opts{"-verbose"} > 0) ? 1 : 2; + } + elsif (! defined $opts{"-verbose"}) { + $opts{"-verbose"} = ($opts{"-exitval"} < 2); + } + + ## Default the output file + $opts{"-output"} = ($opts{"-exitval"} < 2) ? \*STDOUT : \*STDERR + unless (defined $opts{"-output"}); + ## Default the input file + $opts{"-input"} = $0 unless (defined $opts{"-input"}); + + ## Look up input file in path if it doesnt exist. + unless ((ref $opts{"-input"}) || (-e $opts{"-input"})) { + my ($dirname, $basename) = ('', $opts{"-input"}); + my $pathsep = ($^O =~ /^(?:dos|os2|MSWin32)$/) ? ";" + : (($^O eq 'MacOS') ? ',' : ":"); + my $pathspec = $opts{"-pathlist"} || $ENV{PATH} || $ENV{PERL5LIB}; + + my @paths = (ref $pathspec) ? @$pathspec : split($pathsep, $pathspec); + for $dirname (@paths) { + $_ = File::Spec->catfile($dirname, $basename) if length; + last if (-e $_) && ($opts{"-input"} = $_); + } + } + + ## Now create a pod reader and constrain it to the desired sections. + my $parser = new Pod::Usage(USAGE_OPTIONS => \%opts); + if ($opts{"-verbose"} == 0) { + $parser->select("SYNOPSIS"); + } + elsif ($opts{"-verbose"} == 1) { + my $opt_re = '(?i)' . + '(?:OPTIONS|ARGUMENTS)' . + '(?:\s*(?:AND|\/)\s*(?:OPTIONS|ARGUMENTS))?'; + $parser->select( 'SYNOPSIS', $opt_re, "DESCRIPTION/$opt_re" ); + } + + ## Now translate the pod document and then exit with the desired status + $parser->parse_from_file($opts{"-input"}, $opts{"-output"}); + exit($opts{"-exitval"}); +} + +##--------------------------------------------------------------------------- + +##------------------------------- +## Method definitions begin here +##------------------------------- + +sub new { + my $this = shift; + my $class = ref($this) || $this; + my %params = @_; + my $self = {%params}; + bless $self, $class; + $self->initialize(); + return $self; +} + +sub begin_pod { + my $self = shift; + $self->SUPER::begin_pod(); ## Have to call superclass + my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1; + my $out_fh = $self->output_handle(); + print $out_fh "$msg\n"; +} + +sub preprocess_paragraph { + my $self = shift; + local $_ = shift; + my $line = shift; + ## See if this is a heading and we arent printing the entire manpage. + if (($self->{USAGE_OPTIONS}->{-verbose} < 2) && /^=head/) { + ## Change the title of the SYNOPSIS section to USAGE + s/^=head1\s+SYNOPSIS\s*$/=head1 USAGE/; + ## Try to do some lowercasing instead of all-caps in headings + s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge; + ## Use a colon to end all headings + s/\s*$/:/ unless (/:\s*$/); + $_ .= "\n"; + } + return $self->SUPER::preprocess_paragraph($_); +} + diff --git a/gnu/usr.bin/perl/lib/Term/ANSIColor.pm b/gnu/usr.bin/perl/lib/Term/ANSIColor.pm new file mode 100644 index 00000000000..cf122184dc2 --- /dev/null +++ b/gnu/usr.bin/perl/lib/Term/ANSIColor.pm @@ -0,0 +1,307 @@ +# Term::ANSIColor -- Color screen output using ANSI escape sequences. +# $Id: ANSIColor.pm,v 1.1.1.1 2000/04/06 16:09:49 millert Exp $ +# +# Copyright 1996, 1997 by Russ Allbery +# and Zenin +# +# This program is free software; you can redistribute it and/or modify it +# under the same terms as Perl itself. + +############################################################################ +# Modules and declarations +############################################################################ + +package Term::ANSIColor; +require 5.001; + +use strict; +use vars qw(@ISA @EXPORT %EXPORT_TAGS $VERSION $AUTOLOAD %attributes + $AUTORESET $EACHLINE); + +use Exporter (); +@ISA = qw(Exporter); +@EXPORT = qw(color colored); +%EXPORT_TAGS = (constants => [qw(CLEAR RESET BOLD UNDERLINE UNDERSCORE BLINK + REVERSE CONCEALED BLACK RED GREEN YELLOW + BLUE MAGENTA CYAN WHITE ON_BLACK ON_RED + ON_GREEN ON_YELLOW ON_BLUE ON_MAGENTA + ON_CYAN ON_WHITE)]); +Exporter::export_ok_tags ('constants'); + +($VERSION = (split (' ', q$Revision: 1.1.1.1 $ ))[1]) =~ s/\.(\d)$/.0$1/; + + +############################################################################ +# Internal data structures +############################################################################ + +%attributes = ('clear' => 0, + 'reset' => 0, + 'bold' => 1, + 'underline' => 4, + 'underscore' => 4, + 'blink' => 5, + 'reverse' => 7, + 'concealed' => 8, + + 'black' => 30, 'on_black' => 40, + 'red' => 31, 'on_red' => 41, + 'green' => 32, 'on_green' => 42, + 'yellow' => 33, 'on_yellow' => 43, + 'blue' => 34, 'on_blue' => 44, + 'magenta' => 35, 'on_magenta' => 45, + 'cyan' => 36, 'on_cyan' => 46, + 'white' => 37, 'on_white' => 47); + + +############################################################################ +# Implementation (constant form) +############################################################################ + +# Time to have fun! We now want to define the constant subs, which are +# named the same as the attributes above but in all caps. Each constant sub +# needs to act differently depending on whether $AUTORESET is set. Without +# autoreset: +# +# BLUE "text\n" ==> "\e[34mtext\n" +# +# If $AUTORESET is set, we should instead get: +# +# BLUE "text\n" ==> "\e[34mtext\n\e[0m" +# +# The sub also needs to handle the case where it has no arguments correctly. +# Maintaining all of this as separate subs would be a major nightmare, as +# well as duplicate the %attributes hash, so instead we define an AUTOLOAD +# sub to define the constant subs on demand. To do that, we check the name +# of the called sub against the list of attributes, and if it's an all-caps +# version of one of them, we define the sub on the fly and then run it. +sub AUTOLOAD { + my $sub; + ($sub = $AUTOLOAD) =~ s/^.*:://; + my $attr = $attributes{lc $sub}; + if ($sub =~ /^[A-Z_]+$/ && defined $attr) { + $attr = "\e[" . $attr . 'm'; + eval qq { + sub $AUTOLOAD { + if (\$AUTORESET && \@_) { + '$attr' . "\@_" . "\e[0m"; + } else { + ('$attr' . "\@_"); + } + } + }; + goto &$AUTOLOAD; + } else { + die "undefined subroutine &$AUTOLOAD called"; + } +} + + +############################################################################ +# Implementation (attribute string form) +############################################################################ + +# Return the escape code for a given set of color attributes. +sub color { + my @codes = map { split } @_; + my $attribute = ''; + foreach (@codes) { + $_ = lc $_; + unless (defined $attributes{$_}) { + require Carp; + Carp::croak ("Invalid attribute name $_"); + } + $attribute .= $attributes{$_} . ';'; + } + chop $attribute; + ($attribute ne '') ? "\e[${attribute}m" : undef; +} + +# Given a string and a set of attributes, returns the string surrounded by +# escape codes to set those attributes and then clear them at the end of the +# string. If $EACHLINE is set, insert a reset before each occurrence of the +# string $EACHLINE and the starting attribute code after the string +# $EACHLINE, so that no attribute crosses line delimiters (this is often +# desirable if the output is to be piped to a pager or some other program). +sub colored { + my $string = shift; + if (defined $EACHLINE) { + my $attr = color (@_); + join '', + map { $_ && $_ ne $EACHLINE ? $attr . $_ . "\e[0m" : $_ } + split (/(\Q$EACHLINE\E)/, $string); + } else { + color (@_) . $string . "\e[0m"; + } +} + + +############################################################################ +# Module return value and documentation +############################################################################ + +# Ensure we evaluate to true. +1; +__END__ + +=head1 NAME + +Term::ANSIColor - Color screen output using ANSI escape sequences + +=head1 SYNOPSIS + + use Term::ANSIColor; + print color 'bold blue'; + print "This text is bold blue.\n"; + print color 'reset'; + print "This text is normal.\n"; + print colored ("Yellow on magenta.\n", 'yellow on_magenta'); + print "This text is normal.\n"; + + use Term::ANSIColor qw(:constants); + print BOLD, BLUE, "This text is in bold blue.\n", RESET; + + use Term::ANSIColor qw(:constants); + $Term::ANSIColor::AUTORESET = 1; + print BOLD BLUE "This text is in bold blue.\n"; + print "This text is normal.\n"; + +=head1 DESCRIPTION + +This module has two interfaces, one through color() and colored() and the +other through constants. + +color() takes any number of strings as arguments and considers them to be +space-separated lists of attributes. It then forms and returns the escape +sequence to set those attributes. It doesn't print it out, just returns +it, so you'll have to print it yourself if you want to (this is so that +you can save it as a string, pass it to something else, send it to a file +handle, or do anything else with it that you might care to). + +The recognized attributes (all of which should be fairly intuitive) are +clear, reset, bold, underline, underscore, blink, reverse, concealed, +black, red, green, yellow, blue, magenta, on_black, on_red, on_green, +on_yellow, on_blue, on_magenta, on_cyan, and on_white. Case is not +significant. Underline and underscore are equivalent, as are clear and +reset, so use whichever is the most intuitive to you. The color alone +sets the foreground color, and on_color sets the background color. + +Note that attributes, once set, last until they are unset (by sending the +attribute "reset"). Be careful to do this, or otherwise your attribute will +last after your script is done running, and people get very annoyed at +having their prompt and typing changed to weird colors. + +As an aid to help with this, colored() takes a scalar as the first +argument and any number of attribute strings as the second argument and +returns the scalar wrapped in escape codes so that the attributes will be +set as requested before the string and reset to normal after the string. +Normally, colored() just puts attribute codes at the beginning and end of +the string, but if you set $Term::ANSIColor::EACHLINE to some string, +that string will be considered the line delimiter and the attribute will +be set at the beginning of each line of the passed string and reset at the +end of each line. This is often desirable if the output is being sent to +a program like a pager that can be confused by attributes that span lines. +Normally you'll want to set $Term::ANSIColor::EACHLINE to C<"\n"> to use +this feature. + +Alternately, if you import C<:constants>, you can use the constants CLEAR, +RESET, BOLD, UNDERLINE, UNDERSCORE, BLINK, REVERSE, CONCEALED, BLACK, RED, +GREEN, YELLOW, BLUE, MAGENTA, ON_BLACK, ON_RED, ON_GREEN, ON_YELLOW, +ON_BLUE, ON_MAGENTA, ON_CYAN, and ON_WHITE directly. These are the same +as color('attribute') and can be used if you prefer typing: + + print BOLD BLUE ON_WHITE "Text\n", RESET; + +to + + print colored ("Text\n", 'bold blue on_white'); + +When using the constants, if you don't want to have to remember to add the +C<, RESET> at the end of each print line, you can set +$Term::ANSIColor::AUTORESET to a true value. Then, the display mode will +automatically be reset if there is no comma after the constant. In other +words, with that variable set: + + print BOLD BLUE "Text\n"; + +will reset the display mode afterwards, whereas: + + print BOLD, BLUE, "Text\n"; + +will not. + +The subroutine interface has the advantage over the constants interface in +that only 2 soubrutines are exported into your namespace, verses 22 in the +constants interface. On the flip side, the constants interface has the +advantage of better compile time error checking, since misspelled names of +colors or attributes in calls to color() and colored() won't be caught +until runtime whereas misspelled names of constants will be caught at +compile time. So, polute your namespace with almost two dozen subrutines +that you may not even use that oftin, or risk a silly bug by mistyping an +attribute. Your choice, TMTOWTDI after all. + +=head1 DIAGNOSTICS + +=over 4 + +=item Invalid attribute name %s + +You passed an invalid attribute name to either color() or colored(). + +=item Identifier %s used only once: possible typo + +You probably mistyped a constant color name such as: + + print FOOBAR "This text is color FOOBAR\n"; + +It's probably better to always use commas after constant names in order to +force the next error. + +=item No comma allowed after filehandle + +You probably mistyped a constant color name such as: + + print FOOBAR, "This text is color FOOBAR\n"; + +Generating this fatal compile error is one of the main advantages of using +the constants interface, since you'll immediately know if you mistype a +color name. + +=item Bareword %s not allowed while "strict subs" in use + +You probably mistyped a constant color name such as: + + $Foobar = FOOBAR . "This line should be blue\n"; + +or: + + @Foobar = FOOBAR, "This line should be blue\n"; + +This will only show up under use strict (another good reason to run under +use strict). + +=back + +=head1 RESTRICTIONS + +It would be nice if one could leave off the commas around the constants +entirely and just say: + + print BOLD BLUE ON_WHITE "Text\n" RESET; + +but the syntax of Perl doesn't allow this. You need a comma after the +string. (Of course, you may consider it a bug that commas between all the +constants aren't required, in which case you may feel free to insert +commas unless you're using $Term::ANSIColor::AUTORESET.) + +For easier debuging, you may prefer to always use the commas when not +setting $Term::ANSIColor::AUTORESET so that you'll get a fatal compile +error rather than a warning. + +=head1 AUTHORS + +Original idea (using constants) by Zenin (zenin@best.com), reimplemented +using subs by Russ Allbery (rra@stanford.edu), and then combined with the +original idea by Russ with input from Zenin. + +=cut diff --git a/gnu/usr.bin/perl/lib/Test.pm b/gnu/usr.bin/perl/lib/Test.pm index 7a0e59b855f..c708f57a050 100644 --- a/gnu/usr.bin/perl/lib/Test.pm +++ b/gnu/usr.bin/perl/lib/Test.pm @@ -1,10 +1,11 @@ use strict; package Test; +use 5.005_64; use Test::Harness 1.1601 (); use Carp; -use vars (qw($VERSION @ISA @EXPORT @EXPORT_OK $ntest $TestLevel), #public-ish - qw($TESTOUT $ONFAIL %todo %history $planned @FAILDETAIL)); #private-ish -$VERSION = '1.122'; +our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $ntest, $TestLevel); #public-ish +our($TESTOUT, $ONFAIL, %todo, %history, $planned, @FAILDETAIL); #private-ish +$VERSION = '1.13'; require Exporter; @ISA=('Exporter'); @EXPORT=qw(&plan &ok &skip); @@ -63,7 +64,11 @@ sub ok ($;$$) { } else { $expected = to_value(shift); my ($regex,$ignore); - if ((ref($expected)||'') eq 'Regexp') { + if (!defined $expected) { + $ok = !defined $result; + } elsif (!defined $result) { + $ok = 0; + } elsif ((ref($expected)||'') eq 'Regexp') { $ok = $result =~ /$expected/; } elsif (($regex) = ($expected =~ m,^ / (.+) / $,sx) or ($ignore, $regex) = ($expected =~ m,^ m([^\w\s]) (.+) \1 $,sx)) { @@ -94,7 +99,8 @@ sub ok ($;$$) { } } else { my $prefix = "Test $ntest"; - print $TESTOUT "# $prefix got: '$result' ($context)\n"; + print $TESTOUT "# $prefix got: ". + (defined $result? "'$result'":'')." ($context)\n"; $prefix = ' ' x (length($prefix) - 5); if ((ref($expected)||'') eq 'Regexp') { $expected = 'qr/'.$expected.'/' @@ -220,7 +226,7 @@ triggered at the end of a test run. C is passed an array ref of hash refs that describe each test failure. Each hash will contain at least the following fields: C, C, and C. (The file, line, and test number are not included because -their correspondance to a particular test is tenuous.) If the test +their correspondence to a particular test is tenuous.) If the test had an expected value or a diagnostic string, these will also be included. @@ -239,7 +245,7 @@ L and, perhaps, test coverage analysis tools. =head1 AUTHOR -Copyright (c) 1998 Joshua Nathaniel Pritikin. All rights reserved. +Copyright (c) 1998-1999 Joshua Nathaniel Pritikin. All rights reserved. This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified diff --git a/gnu/usr.bin/perl/lib/Tie/Array.pm b/gnu/usr.bin/perl/lib/Tie/Array.pm index 3f34c3b81ff..eb83aaee17a 100644 --- a/gnu/usr.bin/perl/lib/Tie/Array.pm +++ b/gnu/usr.bin/perl/lib/Tie/Array.pm @@ -1,7 +1,9 @@ package Tie::Array; -use vars qw($VERSION); + +use 5.005_64; use strict; -$VERSION = '1.00'; +use Carp; +our $VERSION = '1.01'; # Pod documentation after __END__ below. @@ -74,6 +76,16 @@ sub SPLICE return @result; } +sub EXISTS { + my $pkg = ref $_[0]; + croak "$pkg dosn't define an EXISTS method"; +} + +sub DELETE { + my $pkg = ref $_[0]; + croak "$pkg dosn't define a DELETE method"; +} + package Tie::StdArray; use vars qw(@ISA); @ISA = 'Tie::Array'; @@ -88,6 +100,8 @@ sub POP { pop(@{$_[0]}) } sub PUSH { my $o = shift; push(@$o,@_) } sub SHIFT { shift(@{$_[0]}) } sub UNSHIFT { my $o = shift; unshift(@$o,@_) } +sub EXISTS { exists $_[0]->[$_[1]] } +sub DELETE { delete $_[0]->[$_[1]] } sub SPLICE { @@ -112,15 +126,17 @@ Tie::Array - base class for tied arrays package NewArray; use Tie::Array; @ISA = ('Tie::Array'); - + # mandatory methods sub TIEARRAY { ... } sub FETCH { ... } sub FETCHSIZE { ... } - + sub STORE { ... } # mandatory if elements writeable sub STORESIZE { ... } # mandatory if elements can be added/deleted - + sub EXISTS { ... } # mandatory if exists() expected to work + sub DELETE { ... } # mandatory if delete() expected to work + # optional methods - for efficiency sub CLEAR { ... } sub PUSH { ... } @@ -133,7 +149,7 @@ Tie::Array - base class for tied arrays package NewStdArray; use Tie::Array; - + @ISA = ('Tie::StdArray'); # all methods provided by default @@ -150,9 +166,11 @@ Tie::Array - base class for tied arrays This module provides methods for array-tying classes. See L for a list of the functions required in order to tie an array -to a package. The basic B package provides stub C -and C methods, and implementations of C, C, C, -C, C and C in terms of basic C, C, +to a package. The basic B package provides stub C, +and C methods that do nothing, stub C and C +methods that croak() if the delete() or exists() builtins are ever called +on the tied array, and implementations of C, C, C, +C, C and C in terms of basic C, C, C, C. The B package provides efficient methods required for tied arrays @@ -203,6 +221,18 @@ deleted. Informative call that array is likely to grow to have I entries. Can be used to optimize allocation. This method need do nothing. +=item EXISTS this, key + +Verify that the element at index I exists in the tied array I. + +The B implementation is a stub that simply croaks. + +=item DELETE this, key + +Delete the element at index I from the tied array I. + +The B implementation is a stub that simply croaks. + =item CLEAR this Clear (remove, delete, ...) all values from the tied array associated with diff --git a/gnu/usr.bin/perl/lib/Tie/Handle.pm b/gnu/usr.bin/perl/lib/Tie/Handle.pm index c7550530b87..588ecead899 100644 --- a/gnu/usr.bin/perl/lib/Tie/Handle.pm +++ b/gnu/usr.bin/perl/lib/Tie/Handle.pm @@ -1,22 +1,25 @@ package Tie::Handle; +use 5.005_64; +our $VERSION = '1.0'; + =head1 NAME -Tie::Handle - base class definitions for tied handles +Tie::Handle, Tie::StdHandle - base class definitions for tied handles =head1 SYNOPSIS package NewHandle; require Tie::Handle; - + @ISA = (Tie::Handle); - + sub READ { ... } # Provide a needed method sub TIEHANDLE { ... } # Overrides inherited method - - + + package main; - + tie *FH, 'NewHandle'; =head1 DESCRIPTION @@ -24,9 +27,7 @@ Tie::Handle - base class definitions for tied handles This module provides some skeletal methods for handle-tying classes. See L for a list of the functions required in tying a handle to a package. The basic B package provides a C method, as well as methods -C, C and C. The C method is provided as a means -of grandfathering, for classes that forget to provide their own C -method. +C, C, C and C. For developers wishing to write their own tied-handle classes, the methods are summarized below. The L section not only documents these, but @@ -65,6 +66,32 @@ Read a single line Get a single character +=item CLOSE this + +Close the handle + +=item OPEN this, filename + +(Re-)open the handle + +=item BINMODE this + +Specify content is binary + +=item EOF this + +Test for end of file. + +=item TELL this + +Return position in the file. + +=item SEEK this, offset, whence + +Position the file. + +Test for end of file. + =item DESTROY this Free the storage associated with the tied handle referenced by I. @@ -81,6 +108,7 @@ The L section contains an example of tying handles. =cut use Carp; +use warnings::register; sub new { my $pkg = shift; @@ -92,8 +120,8 @@ sub new { sub TIEHANDLE { my $pkg = shift; if (defined &{"{$pkg}::new"}) { - carp "WARNING: calling ${pkg}->new since ${pkg}->TIEHANDLE is missing" - if $^W; + warnings::warn "WARNING: calling ${pkg}->new since ${pkg}->TIEHANDLE is missing" + if warnings::enabled(); $pkg->new(@_); } else { @@ -117,7 +145,7 @@ sub PRINTF { my $self = shift; if($self->can('WRITE') != \&WRITE) { - my $buf = sprintf(@_); + my $buf = sprintf(shift,@_); $self->WRITE($buf,length($buf),0); } else { @@ -156,6 +184,43 @@ sub WRITE { sub CLOSE { my $pkg = ref $_[0]; croak "$pkg doesn't define a CLOSE method"; +} + +package Tie::StdHandle; +our @ISA = 'Tie::Handle'; +use Carp; + +sub TIEHANDLE +{ + my $class = shift; + my $fh = do { \local *HANDLE}; + bless $fh,$class; + $fh->OPEN(@_) if (@_); + return $fh; +} + +sub EOF { eof($_[0]) } +sub TELL { tell($_[0]) } +sub FILENO { fileno($_[0]) } +sub SEEK { seek($_[0],$_[1],$_[2]) } +sub CLOSE { close($_[0]) } +sub BINMODE { binmode($_[0]) } + +sub OPEN +{ + $_[0]->CLOSE if defined($_[0]->FILENO); + open($_[0],$_[1]); +} + +sub READ { read($_[0],$_[1],$_[2]) } +sub READLINE { my $fh = $_[0]; <$fh> } +sub GETC { getc($_[0]) } + +sub WRITE +{ + my $fh = $_[0]; + print $fh substr($_[1],0,$_[2]) } + 1; diff --git a/gnu/usr.bin/perl/lib/Tie/RefHash.pm b/gnu/usr.bin/perl/lib/Tie/RefHash.pm index 66de2572fcd..ffa9eb20a00 100644 --- a/gnu/usr.bin/perl/lib/Tie/RefHash.pm +++ b/gnu/usr.bin/perl/lib/Tie/RefHash.pm @@ -39,11 +39,11 @@ see the C entry in perlfunc(1) and perltie(1) for more information. =head1 AUTHOR -Gurusamy Sarathy gsar@umich.edu +Gurusamy Sarathy gsar@activestate.com =head1 VERSION -Version 1.2 15 Dec 1996 +Version 1.21 22 Jun 1999 =head1 SEE ALSO @@ -94,7 +94,8 @@ sub EXISTS { sub FIRSTKEY { my $s = shift; - my $a = scalar(keys %{$s->[0]}) + scalar(keys %{$s->[1]}); + keys %{$s->[0]}; # reset iterator + keys %{$s->[1]}; # reset iterator $s->[2] = 0; $s->NEXTKEY; } diff --git a/gnu/usr.bin/perl/lib/UNIVERSAL.pm b/gnu/usr.bin/perl/lib/UNIVERSAL.pm index dc02423029e..f2f1fe9e7ad 100644 --- a/gnu/usr.bin/perl/lib/UNIVERSAL.pm +++ b/gnu/usr.bin/perl/lib/UNIVERSAL.pm @@ -62,19 +62,23 @@ The C and C methods can also be called as subroutines =item UNIVERSAL::isa ( VAL, TYPE ) -C returns I if the first argument is a reference and either -of the following statements is true. +C returns I if one of the following statements is true. =over 8 -=item +=item * -C is a blessed reference and is blessed into package C -or inherits from package C +C is a reference blessed into either package C or a package +which inherits from package C. -=item +=item * -C is a reference to a C of perl variable (er 'HASH') +C is a reference to a C of Perl variable (e.g. 'HASH'). + +=item * + +C is the name of a package that inherits from (or is itself) +package C. =back diff --git a/gnu/usr.bin/perl/lib/attributes.pm b/gnu/usr.bin/perl/lib/attributes.pm new file mode 100644 index 00000000000..f111645ae15 --- /dev/null +++ b/gnu/usr.bin/perl/lib/attributes.pm @@ -0,0 +1,399 @@ +package attributes; + +$VERSION = 0.03; + +@EXPORT_OK = qw(get reftype); +@EXPORT = (); +%EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]); + +use strict; + +sub croak { + require Carp; + goto &Carp::croak; +} + +sub carp { + require Carp; + goto &Carp::carp; +} + +## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{} +#sub reftype ($) ; +#sub _fetch_attrs ($) ; +#sub _guess_stash ($) ; +#sub _modify_attrs ; +#sub _warn_reserved () ; +# +# The extra trips through newATTRSUB in the interpreter wipe out any savings +# from avoiding the BEGIN block. Just do the bootstrap now. +BEGIN { bootstrap } + +sub import { + @_ > 2 && ref $_[2] or do { + require Exporter; + goto &Exporter::import; + }; + my (undef,$home_stash,$svref,@attrs) = @_; + + my $svtype = uc reftype($svref); + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES") + if defined $home_stash && $home_stash ne ''; + my @badattrs; + if ($pkgmeth) { + my @pkgattrs = _modify_attrs($svref, @attrs); + @badattrs = $pkgmeth->($home_stash, $svref, @attrs); + if (!@badattrs && @pkgattrs) { + return unless _warn_reserved; + @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs; + if (@pkgattrs) { + for my $attr (@pkgattrs) { + $attr =~ s/\(.+\z//s; + } + my $s = ((@pkgattrs == 1) ? '' : 's'); + carp "$svtype package attribute$s " . + "may clash with future reserved word$s: " . + join(' : ' , @pkgattrs); + } + } + } + else { + @badattrs = _modify_attrs($svref, @attrs); + } + if (@badattrs) { + croak "Invalid $svtype attribute" . + (( @badattrs == 1 ) ? '' : 's') . + ": " . + join(' : ', @badattrs); + } +} + +sub get ($) { + @_ == 1 && ref $_[0] or + croak 'Usage: '.__PACKAGE__.'::get $ref'; + my $svref = shift; + my $svtype = uc reftype $svref; + my $stash = _guess_stash $svref; + $stash = caller unless defined $stash; + my $pkgmeth; + $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES") + if defined $stash && $stash ne ''; + return $pkgmeth ? + (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) : + (_fetch_attrs($svref)) + ; +} + +sub require_version { goto &UNIVERSAL::VERSION } + +1; +__END__ +#The POD goes here + +=head1 NAME + +attributes - get/set subroutine or variable attributes + +=head1 SYNOPSIS + + sub foo : method ; + my ($x,@y,%z) : Bent ; + my $s = sub : method { ... }; + + use attributes (); # optional, to get subroutine declarations + my @attrlist = attributes::get(\&foo); + + use attributes 'get'; # import the attributes::get subroutine + my @attrlist = get \&foo; + +=head1 DESCRIPTION + +Subroutine declarations and definitions may optionally have attribute lists +associated with them. (Variable C declarations also may, but see the +warning below.) Perl handles these declarations by passing some information +about the call site and the thing being declared along with the attribute +list to this module. In particular, the first example above is equivalent to +the following: + + use attributes __PACKAGE__, \&foo, 'method'; + +The second example in the synopsis does something equivalent to this: + + use attributes __PACKAGE__, \$x, 'Bent'; + use attributes __PACKAGE__, \@y, 'Bent'; + use attributes __PACKAGE__, \%z, 'Bent'; + +Yes, that's three invocations. + +B: attribute declarations for variables are an I +feature. The semantics of such declarations could change or be removed +in future versions. They are present for purposes of experimentation +with what the semantics ought to be. Do not rely on the current +implementation of this feature. + +There are only a few attributes currently handled by Perl itself (or +directly by this module, depending on how you look at it.) However, +package-specific attributes are allowed by an extension mechanism. +(See L<"Package-specific Attribute Handling"> below.) + +The setting of attributes happens at compile time. An attempt to set +an unrecognized attribute is a fatal error. (The error is trappable, but +it still stops the compilation within that C.) Setting an attribute +with a name that's all lowercase letters that's not a built-in attribute +(such as "foo") +will result in a warning with B<-w> or C. + +=head2 Built-in Attributes + +The following are the built-in attributes for subroutines: + +=over 4 + +=item locked + +Setting this attribute is only meaningful when the subroutine or +method is to be called by multiple threads. When set on a method +subroutine (i.e., one marked with the B attribute below), +Perl ensures that any invocation of it implicitly locks its first +argument before execution. When set on a non-method subroutine, +Perl ensures that a lock is taken on the subroutine itself before +execution. The semantics of the lock are exactly those of one +explicitly taken with the C operator immediately after the +subroutine is entered. + +=item method + +Indicates that the referenced subroutine is a method. +This has a meaning when taken together with the B attribute, +as described there. It also means that a subroutine so marked +will not trigger the "Ambiguous call resolved as CORE::%s" warning. + +=item lvalue + +Indicates that the referenced subroutine is a valid lvalue and can +be assigned to. The subroutine must return a modifiable value such +as a scalar variable, as described in L. + +=back + +There are no built-in attributes for anything other than subroutines. + +=head2 Available Subroutines + +The following subroutines are available for general use once this module +has been loaded: + +=over 4 + +=item get + +This routine expects a single parameter--a reference to a +subroutine or variable. It returns a list of attributes, which may be +empty. If passed invalid arguments, it uses die() (via L) +to raise a fatal exception. If it can find an appropriate package name +for a class method lookup, it will include the results from a +C_ATTRIBUTES> call in its return list, as described in +L<"Package-specific Attribute Handling"> below. +Otherwise, only L will be returned. + +=item reftype + +This routine expects a single parameter--a reference to a subroutine or +variable. It returns the built-in type of the referenced variable, +ignoring any package into which it might have been blessed. +This can be useful for determining the I value which forms part of +the method names described in L<"Package-specific Attribute Handling"> below. + +=back + +Note that these routines are I exported by default. + +=head2 Package-specific Attribute Handling + +B: the mechanisms described here are still experimental. Do not +rely on the current implementation. In particular, there is no provision +for applying package attributes to 'cloned' copies of subroutines used as +closures. (See L for information on closures.) +Package-specific attribute handling may change incompatibly in a future +release. + +When an attribute list is present in a declaration, a check is made to see +whether an attribute 'modify' handler is present in the appropriate package +(or its @ISA inheritance tree). Similarly, when C is +called on a valid reference, a check is made for an appropriate attribute +'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package" +determination works. + +The handler names are based on the underlying type of the variable being +declared or of the reference passed. Because these attributes are +associated with subroutine or variable declarations, this deliberately +ignores any possibility of being blessed into some package. Thus, a +subroutine declaration uses "CODE" as its I, and even a blessed +hash reference uses "HASH" as its I. + +The class methods invoked for modifying and fetching are these: + +=over 4 + +=item FETCH_I_ATTRIBUTES + +This method receives a single argument, which is a reference to the +variable or subroutine for which package-defined attributes are desired. +The expected return value is a list of associated attributes. +This list may be empty. + +=item MODIFY_I_ATTRIBUTES + +This method is called with two fixed arguments, followed by the list of +attributes from the relevant declaration. The two fixed arguments are +the relevant package name and a reference to the declared subroutine or +variable. The expected return value as a list of attributes which were +not recognized by this handler. Note that this allows for a derived class +to delegate a call to its base class, and then only examine the attributes +which the base class didn't already handle for it. + +The call to this method is currently made I the processing of the +declaration. In particular, this means that a subroutine reference will +probably be for an undefined subroutine, even if this declaration is +actually part of the definition. + +=back + +Calling C from within the scope of a null package +declaration C for an unblessed variable reference will +not provide any starting package name for the 'fetch' method lookup. +Thus, this circumstance will not result in a method call for package-defined +attributes. A named subroutine knows to which symbol table entry it belongs +(or originally belonged), and it will use the corresponding package. +An anonymous subroutine knows the package name into which it was compiled +(unless it was also compiled with a null package declaration), and so it +will use that package name. + +=head2 Syntax of Attribute Lists + +An attribute list is a sequence of attribute specifications, separated by +whitespace or a colon (with optional whitespace). +Each attribute specification is a simple +name, optionally followed by a parenthesised parameter list. +If such a parameter list is present, it is scanned past as for the rules +for the C operator. (See L.) +The parameter list is passed as it was found, however, and not as per C. + +Some examples of syntactically valid attribute lists: + + switch(10,foo(7,3)) : expensive + Ugly('\(") :Bad + _5x5 + locked method + +Some examples of syntactically invalid attribute lists (with annotation): + + switch(10,foo() # ()-string not balanced + Ugly('(') # ()-string not balanced + 5x5 # "5x5" not a valid identifier + Y2::north # "Y2::north" not a simple identifier + foo + bar # "+" neither a colon nor whitespace + +=head1 EXPORTS + +=head2 Default exports + +None. + +=head2 Available exports + +The routines C and C are exportable. + +=head2 Export tags defined + +The C<:ALL> tag will get all of the above exports. + +=head1 EXAMPLES + +Here are some samples of syntactically valid declarations, with annotation +as to how they resolve internally into C invocations by +perl. These examples are primarily useful to see how the "appropriate +package" is found for the possible method lookups for package-defined +attributes. + +=over 4 + +=item 1. + +Code: + + package Canine; + package Dog; + my Canine $spot : Watchful ; + +Effect: + + use attributes Canine => \$spot, "Watchful"; + +=item 2. + +Code: + + package Felis; + my $cat : Nervous; + +Effect: + + use attributes Felis => \$cat, "Nervous"; + +=item 3. + +Code: + + package X; + sub foo : locked ; + +Effect: + + use attributes X => \&foo, "locked"; + +=item 4. + +Code: + + package X; + sub Y::x : locked { 1 } + +Effect: + + use attributes Y => \&Y::x, "locked"; + +=item 5. + +Code: + + package X; + sub foo { 1 } + + package Y; + BEGIN { *bar = \&X::foo; } + + package Z; + sub Y::bar : locked ; + +Effect: + + use attributes X => \&X::foo, "locked"; + +=back + +This last example is purely for purposes of completeness. You should not +be trying to mess with the attributes of something in a package that's +not your own. + +=head1 SEE ALSO + +L and +L for details on the basic declarations; +L for the obsolescent form of subroutine attribute specification +which this module replaces; +L for details on the normal invocation mechanism. + +=cut + diff --git a/gnu/usr.bin/perl/lib/bigrat.pl b/gnu/usr.bin/perl/lib/bigrat.pl index fb436ce5708..2d3738f805b 100644 --- a/gnu/usr.bin/perl/lib/bigrat.pl +++ b/gnu/usr.bin/perl/lib/bigrat.pl @@ -1,6 +1,12 @@ package bigrat; require "bigint.pl"; - +# +# This library is no longer being maintained, and is included for backward +# compatibility with Perl 4 programs which may require it. +# +# In particular, this should not be used as an example of modern Perl +# programming techniques. +# # Arbitrary size rational math package # # by Mark Biggar diff --git a/gnu/usr.bin/perl/lib/bytes.pm b/gnu/usr.bin/perl/lib/bytes.pm new file mode 100644 index 00000000000..f93d6158d9f --- /dev/null +++ b/gnu/usr.bin/perl/lib/bytes.pm @@ -0,0 +1,52 @@ +package bytes; + +$bytes::hint_bits = 0x00000008; + +sub import { + $^H |= $bytes::hint_bits; +} + +sub unimport { + $^H &= ~$bytes::hint_bits; +} + +sub AUTOLOAD { + require "bytes_heavy.pl"; + goto &$AUTOLOAD; +} + +sub length ($); + +1; +__END__ + +=head1 NAME + +bytes - Perl pragma to force byte semantics rather than character semantics + +=head1 SYNOPSIS + + use bytes; + no bytes; + +=head1 DESCRIPTION + +WARNING: The implementation of Unicode support in Perl is incomplete. +See L for the exact details. + +The C pragma disables character semantics for the rest of the +lexical scope in which it appears. C can be used to reverse +the effect of C within the current lexical scope. + +Perl normally assumes character semantics in the presence of +character data (i.e. data that has come from a source that has +been marked as being of a particular character encoding). + +To understand the implications and differences between character +semantics and byte semantics, see L. + +=head1 SEE ALSO + +L, L + +=cut diff --git a/gnu/usr.bin/perl/lib/bytes_heavy.pl b/gnu/usr.bin/perl/lib/bytes_heavy.pl new file mode 100644 index 00000000000..47bdbf91b0d --- /dev/null +++ b/gnu/usr.bin/perl/lib/bytes_heavy.pl @@ -0,0 +1,8 @@ +package bytes; + +sub length ($) { + BEGIN { bytes::import() } + return CORE::length($_[0]); +} + +1; diff --git a/gnu/usr.bin/perl/lib/charnames.pm b/gnu/usr.bin/perl/lib/charnames.pm new file mode 100644 index 00000000000..7c2209b9f09 --- /dev/null +++ b/gnu/usr.bin/perl/lib/charnames.pm @@ -0,0 +1,135 @@ +package charnames; +use bytes (); # for $bytes::hint_bits +$charnames::hint_bits = 0x20000; + +my $txt; + +# This is not optimized in any way yet +sub charnames { + $name = shift; + $txt = do "unicode/Name.pl" unless $txt; + my @off; + if ($^H{charnames_full} and $txt =~ /\t\t$name$/m) { + @off = ($-[0], $+[0]); + } + unless (@off) { + if ($^H{charnames_short} and $name =~ /^(.*?):(.*)/s) { + my ($script, $cname) = ($1,$2); + my $case = ( $cname =~ /[[:upper:]]/ ? "CAPITAL" : "SMALL"); + if ($txt =~ m/\t\t\U$script\E (?:$case )?LETTER \U$cname$/m) { + @off = ($-[0], $+[0]); + } + } + } + unless (@off) { + my $case = ( $name =~ /[[:upper:]]/ ? "CAPITAL" : "SMALL"); + for ( @{$^H{charnames_scripts}} ) { + (@off = ($-[0], $+[0])), last + if $txt =~ m/\t\t$_ (?:$case )?LETTER \U$name$/m; + } + } + die "Unknown charname '$name'" unless @off; + + my $ord = hex substr $txt, $off[0] - 4, 4; + if ($^H & $bytes::hint_bits) { # "use bytes" in effect? + use bytes; + return chr $ord if $ord <= 255; + my $hex = sprintf '%X=0%o', $ord, $ord; + my $fname = substr $txt, $off[0] + 2, $off[1] - $off[0] - 2; + die "Character 0x$hex with name '$fname' is above 0xFF"; + } + return chr $ord; +} + +sub import { + shift; + die "`use charnames' needs explicit imports list" unless @_; + $^H |= $charnames::hint_bits; + $^H{charnames} = \&charnames ; + my %h; + @h{@_} = (1) x @_; + $^H{charnames_full} = delete $h{':full'}; + $^H{charnames_short} = delete $h{':short'}; + $^H{charnames_scripts} = [map uc, keys %h]; +} + + +1; +__END__ + +=head1 NAME + +charnames - define character names for C<\N{named}> string literal escape. + +=head1 SYNOPSIS + + use charnames ':full'; + print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n"; + + use charnames ':short'; + print "\N{greek:Sigma} is an upper-case sigma.\n"; + + use charnames qw(cyrillic greek); + print "\N{sigma} is Greek sigma, and \N{be} is Cyrillic b.\n"; + +=head1 DESCRIPTION + +Pragma C supports arguments C<:full>, C<:short> and +script names. If C<:full> is present, for expansion of +C<\N{CHARNAME}}> string C is first looked in the list of +standard Unicode names of chars. If C<:short> is present, and +C has the form C, then C is looked up +as a letter in script C