diff options
107 files changed, 5328 insertions, 3473 deletions
@@ -20,7 +20,7 @@ # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # -# Generated on Wed Feb 25 16:44:06 EST 1998 [metaconfig 3.0 PL70] +# Generated on Tue Mar 3 11:16:26 EST 1998 [metaconfig 3.0 PL70] cat >/tmp/c1$$ <<EOF ARGGGHHHH!!!!! @@ -194,6 +194,7 @@ make='' mkdir='' more='' mv='' +nm='' nroff='' perl='' pg='' @@ -211,6 +212,7 @@ submit='' tail='' tar='' tbl='' +tee='' test='' touch='' tr='' @@ -330,12 +332,17 @@ d_phostname='' d_uname='' d_getlogin='' d_getnbyaddr='' +d_getnbyname='' d_getpgid='' d_getpgrp2='' d_bsdgetpgrp='' d_getpgrp='' d_getppid='' d_getprior='' +d_getpbyname='' +d_getpbynumber='' +d_getsbyname='' +d_getsbyport='' d_gnulibc='' d_htonl='' d_inetaton='' @@ -389,6 +396,7 @@ d_semop='' d_setegid='' d_seteuid='' d_setgrps='' +d_sethent='' d_setlinebuf='' d_setlocale='' d_setpgid='' @@ -472,6 +480,7 @@ dlsrc='' ld='' lddlflags='' usedl='' +doublesize='' fpostype='' gidtype='' groupstype='' @@ -612,6 +621,7 @@ installprivlib='' privlib='' privlibexp='' prototype='' +ptrsize='' randbits='' installscript='' scriptdir='' @@ -644,6 +654,7 @@ nm_so_opt='' runnm='' usenm='' useperlio='' +d_oldpthreads='' usethreads='' incpath='' mips='' @@ -775,7 +786,8 @@ useposix=true useopcode=true : set usethreads on the Configure command line to enable threads. : List of libraries we want. -libswanted='sfio net socket inet nsl nm ndbm gdbm dbm db malloc dl' +: If anyone needs -lnet, put it in a hint file. +libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl' libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt" libswanted="$libswanted ucb bsd BSD PW x" : We probably want to search /usr/shlib before most other libraries. @@ -1566,10 +1578,12 @@ less line ln more +nm nroff perl pg sendmail +tee test uname zip @@ -2250,6 +2264,19 @@ y|Y) val="$define" ;; esac set usethreads eval $setvar +: Look for a hint-file generated 'call-back-unit'. Now that the +: user has specified the compiler, we may need to set or change some +: other defaults. +if $test -f usethreads.cbu; then + . ./usethreads.cbu +fi +case "$d_oldpthreads" in +'') : Configure tests would be welcome here. For now, assume undef. + val="$undef" ;; +*) val="$d_oldpthreads" ;; +esac +set d_oldpthreads +eval $setvar : determine the architecture name echo " " @@ -3000,8 +3027,8 @@ fi : Binary compatibility with 5.003 is not possible with 5.004_50 and later. -if test $patchlevel -ge 4 -o $subversion -ge 50; then - val=$undef +if test $patchlevel -gt 4 -o $subversion -ge 50; then + d_bincompat3=$undef else $cat <<EOM @@ -3023,13 +3050,13 @@ EOM y*) val="$define" ;; *) val="$undef" ;; esac + set d_bincompat3 + eval $setvar + case "$d_bincompat3" in + "$define") bincompat3=y ;; + *) bincompat3=n ;; + esac fi -set d_bincompat3 -eval $setvar -case "$d_bincompat3" in -"$define") bincompat3=y ;; -*) bincompat3=n ;; -esac : determine where manual pages are on this system echo " " @@ -3483,6 +3510,8 @@ put the appropriate flags later when it asks you for other cc and ld flags. Venix systems may wish to put "none" and let the compiler figure things out. (In the following question multiple model names should be space separated.) +The default for most systems is "none". + EOM rp="Which memory models are supported?" . ./myread @@ -3601,8 +3630,9 @@ if ./usg; then esac;; *) dflt="$cc";; esac - $cat <<'EOM' -On some systems the default C compiler will not resolve multiple global + case "$dflt" in + *M*) $cat <<'EOM' +On some older systems the default C compiler will not resolve multiple global references that happen to have the same name. On some such systems the "Mcc" command may be used to force these to be resolved. On other systems a "cc -M" command is required. (Note that the -M flag on other systems indicates a @@ -3610,7 +3640,9 @@ memory model to use!) If you have the Gnu C compiler, you might wish to use that instead. EOM - rp="What command will force resolution on this system?" + ;; + esac + rp="Use which C compiler?" . ./myread cc="$ans" else @@ -3622,6 +3654,12 @@ else . ./myread cc="$ans" fi +: Look for a hint-file generated 'call-back-unit'. Now that the +: user has specified the compiler, we may need to set or change some +: other defaults. +if $test -f cc.cbu; then + . ./cc.cbu +fi echo " " echo "Checking for GNU cc in disguise and/or its version number..." >&4 $cat >gccvers.c <<EOM @@ -4374,7 +4412,7 @@ case "$usenm" in esac $cat <<EOM -I can use 'nm' to extract the symbols from your C libraries. This is a time +I can use '$nm' to extract the symbols from your C libraries. This is a time consuming task which may generate huge output on the disk (up to 3 megabytes) but that should make the symbols extraction faster. The alternative is to skip the 'nm' extraction part and to compile a small test program instead to @@ -4383,7 +4421,7 @@ if your 'nm' output cannot be parsed, this may be the best solution. You shouldn't let me use 'nm' if you have the GNU C Library. EOM -rp='Shall I use nm to extract C symbols from the libraries?' +rp="Shall I use $nm to extract C symbols from the libraries?" . ./myread case "$ans" in n|N) usenm=false;; @@ -4415,7 +4453,7 @@ esac case "$nm_so_opt" in '') case "$myuname" in *linux*) - if nm --help | $grep 'dynamic' > /dev/null 2>&1; then + if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then nm_so_opt='--dynamic' fi ;; @@ -4574,8 +4612,8 @@ $echo $n "This may take a while...$c" >&4 for file in $*; do case $file in - *$so*) nm $nm_so_opt $nm_opt $file 2>/dev/null;; - *) nm $nm_opt $file 2>/dev/null;; + *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;; + *) $nm $nm_opt $file 2>/dev/null;; esac done >libc.tmp @@ -4638,7 +4676,7 @@ elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun else - nm -p $* 2>/dev/null >libc.tmp + $nm -p $* 2>/dev/null >libc.tmp $grep fprintf libc.tmp > libc.ptf if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1 @@ -4647,7 +4685,7 @@ else eval $xrun else echo " " - echo "nm didn't seem to work right. Trying ar instead..." >&4 + echo "$nm didn't seem to work right. Trying ar instead..." >&4 com='' if ar t $libc > libc.tmp; then for thisname in $libnames; do @@ -5120,10 +5158,10 @@ EOM next4*) xxx='DYLD_LIBRARY_PATH' ;; *) xxx='LD_LIBRARY_PATH' ;; esac - $cat <<EOM >&4 + $cat <<EOM | $tee -a ../config.msg >&4 To build perl, you must add the current working directory to your -$xxx environtment variable before running make. You can do +$xxx environment variable before running make. You can do this with $xxx=\`pwd\`; export $xxx for Bourne-style shells, or @@ -6803,6 +6841,14 @@ eval $inlibc set fsetpos d_fsetpos eval $inlibc +: see if gethostbyaddr exists +set gethostbyaddr d_gethbyaddr +eval $inlibc + +: see if gethostbyname exists +set gethostbyname d_gethbyname +eval $inlibc + : see if gethostent exists set gethostent d_gethent eval $inlibc @@ -6811,6 +6857,22 @@ eval $inlibc set getlogin d_getlogin eval $inlibc +: see if getnetbyaddr exists +set getnetbyaddr d_getnbyaddr +eval $inlibc + +: see if getnetbyname exists +set getnetbyname d_getnbyname +eval $inlibc + + +: see if getprotobyname exists +set getprotobyname d_getpbyname +eval $inlibc + +: see if getprotobynumber exists +set getprotobynumber d_getpbynumber +eval $inlibc : see if getpgid exists set getpgid d_getpgid eval $inlibc @@ -6827,6 +6889,14 @@ eval $inlibc set getpriority d_getprior eval $inlibc + +: see if getservbyname exists +set getservbyname d_getsbyname +eval $inlibc + +: see if getservbyport exists +set getservbyport d_getsbyport +eval $inlibc : see if gettimeofday or ftime exists set gettimeofday d_gettimeod eval $inlibc @@ -7602,6 +7672,10 @@ eval $inlibc set seteuid d_seteuid eval $inlibc +: see if sethostent exists +set sethostent d_sethent +eval $inlibc + : see if setlinebuf exists set setlinebuf d_setlinebuf eval $inlibc @@ -8601,12 +8675,11 @@ main() printf("db.h and libdb are compatible\n") ; Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000 - + DB_VERSION_PATCH ; + + DB_VERSION_PATCH ; /* needs to be >= 2.3.4 */ if (Version < 2003004) { - /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH -< 5) { */ + /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */ printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ; exit(2); } @@ -8783,6 +8856,32 @@ case "$voidflags" in esac $rm -f try.* .out +: check for length of double +echo " " +case "$doublesize" in +'') + echo "Checking to see how big your double precision numbers are..." >&4 + $cat >try.c <<'EOCP' +#include <stdio.h> +main() +{ + printf("%d\n", sizeof(double)); +} +EOCP + set try + if eval $compile; then + doublesize=`./try` + else + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + rp="What is the size of a double precision number (in bytes)?" + . ./myread + doublesize="$ans" + fi + ;; +esac +$rm -f try.c try + : see what type file positions are declared as in the library set fpos_t fpostype long stdio.h sys/types.h eval $typedef @@ -8940,18 +9039,6 @@ EOSH chmod +x protochk $eunicefix protochk -: see if gethostbyaddr exists -set gethostbyaddr d_gethbyaddr -eval $inlibc - -: see if gethostbyname exists -set gethostbyname d_gethbyname -eval $inlibc - -: see if getnetbyaddr exists -set getnetbyaddr d_getnbyaddr -eval $inlibc - : see if this is a netdb.h system set netdb.h i_netdb eval $inhdr @@ -9126,6 +9213,38 @@ rp="What type are process ids on this system declared as?" . ./myread pidtype="$ans" +: check for length of pointer +echo " " +case "$ptrsize" in +'') + echo "Checking to see how big your pointers are..." >&4 + if test "$voidflags" -gt 7; then + echo '#define VOID_PTR char *' > try.c + else + echo '#define VOID_PTR void *' > try.c + fi + $cat >>try.c <<'EOCP' +#include <stdio.h> +main() +{ + printf("%d\n", sizeof(VOID_PTR)); + exit(0); +} +EOCP + set try + if eval $compile; then + ptrsize=`./try` + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" >&4 + rp="What is the size of a pointer (in bytes)?" + . ./myread + ptrsize="$ans" + fi + ;; +esac +$rm -f try.c try + : check for size of random number generator echo " " case "$randbits" in @@ -10205,22 +10324,23 @@ known_extensions='' : some additional extensions into the source tree and expect them : to be built. for xxx in * ; do - case "$xxx" in - DynaLoader) ;; - *) if $test -f $xxx/$xxx.xs; then - known_extensions="$known_extensions $xxx" - else - if $test -d $xxx; then - cd $xxx - for yyy in * ; do - if $test -f $yyy/$yyy.xs; then - known_extensions="$known_extensions $xxx/$yyy" - fi - done - cd .. - fi - fi ;; - esac + case "$xxx" in + DynaLoader) ;; + *) if $test -f $xxx/$xxx.xs; then + known_extensions="$known_extensions $xxx" + else + if $test -d $xxx; then + cd $xxx + for yyy in * ; do + if $test -f $yyy/$yyy.xs; then + known_extensions="$known_extensions $xxx/$yyy" + fi + done + cd .. + fi + fi + ;; + esac done set X $known_extensions shift @@ -10230,42 +10350,50 @@ cd ../UU : Now see which are supported on this system. avail_ext='' for xxx in $known_extensions ; do - case "$xxx" in - DB_File|db_file) case "$i_db" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - GDBM_File|gdbm_fil) case "$i_gdbm" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - NDBM_File|ndbm_fil) case "$i_ndbm" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - ODBM_File|odbm_fil) case "${i_dbm}${i_rpcsvcdbm}" in - *"${define}"*) avail_ext="$avail_ext $xxx" ;; - esac - ;; - POSIX|posix) case "$useposix" in - true|define|y) avail_ext="$avail_ext $xxx" ;; - esac - ;; - Opcode|opcode) case "$useopcode" in - true|define|y) avail_ext="$avail_ext $xxx" ;; - esac - ;; - Socket|socket) case "$d_socket" in - true|$define|y) avail_ext="$avail_ext $xxx" ;; - esac - ;; - Thread|thread) case "$usethreads" in - true|$define|y) avail_ext="$avail_ext $xxx" ;; - esac - ;; - *) avail_ext="$avail_ext $xxx" - ;; - esac + case "$xxx" in + DB_File|db_file) + case "$i_db" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + GDBM_File|gdbm_fil) + case "$i_gdbm" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + NDBM_File|ndbm_fil) + case "$i_ndbm" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + ODBM_File|odbm_fil) + case "${i_dbm}${i_rpcsvcdbm}" in + *"${define}"*) avail_ext="$avail_ext $xxx" ;; + esac + ;; + POSIX|posix) + case "$useposix" in + true|define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Opcode|opcode) + case "$useopcode" in + true|define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Socket|socket) + case "$d_socket" in + true|$define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Thread|thread) + case "$usethreads" in + true|$define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + *) avail_ext="$avail_ext $xxx" + ;; + esac done set X $avail_ext @@ -10279,11 +10407,28 @@ A number of extensions are supplied with $package. You may choose to compile these extensions for dynamic loading (the default), compile them into the $package executable (static loading), or not include them at all. Answer "none" to include no extensions. +Note that DynaLoader is always built and need not be mentioned here. EOM case "$dynamic_ext" in '') dflt="$avail_ext" ;; - *) dflt="$dynamic_ext" ;; + *) dflt="$dynamic_ext" + # Perhaps we are reusing an old out-of-date config.sh. + case "$hint" in + previous) + if test X"$dynamic_ext" != X$"avail_ext"; then + $cat <<EOM +NOTICE: Your previous config.sh list may be incorrect. +The extensions now available to you are + ${avail_ext} +but the default list from your previous config.sh is + ${dynamic_ext} + +EOM + fi + ;; + esac + ;; esac case "$dflt" in '') dflt=none;; @@ -10327,13 +10472,29 @@ EOM $cat <<EOM A number of extensions are supplied with $package. Answer "none" to include no extensions. +Note that DynaLoader is always built and need not be mentioned here. EOM case "$static_ext" in '') dflt="$avail_ext" ;; - *) dflt="$static_ext" ;; - esac + *) dflt="$static_ext" + # Perhaps we are reusing an old out-of-date config.sh. + case "$hint" in + previous) + if test X"$static_ext" != X$"avail_ext"; then + $cat <<EOM +NOTICE: Your previous config.sh list may be incorrect. +The extensions now available to you are + ${avail_ext} +but the default list from your previous config.sh is + ${static_ext} +EOM + fi + ;; + esac + ;; + esac case "$dflt" in '') dflt=none;; esac @@ -10528,11 +10689,16 @@ d_gethent='$d_gethent' d_gethname='$d_gethname' d_getlogin='$d_getlogin' d_getnbyaddr='$d_getnbyaddr' +d_getnbyname='$d_getnbyname' +d_getpbyname='$d_getpbyname' +d_getpbynumber='$d_getpbynumber' d_getpgid='$d_getpgid' d_getpgrp2='$d_getpgrp2' d_getpgrp='$d_getpgrp' d_getppid='$d_getppid' d_getprior='$d_getprior' +d_getsbyname='$d_getsbyname' +d_getsbyport='$d_getsbyport' d_gettimeod='$d_gettimeod' d_gnulibc='$d_gnulibc' d_htonl='$d_htonl' @@ -10561,6 +10727,7 @@ d_msgrcv='$d_msgrcv' d_msgsnd='$d_msgsnd' d_mymalloc='$d_mymalloc' d_nice='$d_nice' +d_oldpthreads='$d_oldpthreads' d_oldsock='$d_oldsock' d_open3='$d_open3' d_pathconf='$d_pathconf' @@ -10595,6 +10762,7 @@ d_semop='$d_semop' d_setegid='$d_setegid' d_seteuid='$d_seteuid' d_setgrps='$d_setgrps' +d_sethent='$d_sethent' d_setlinebuf='$d_setlinebuf' d_setlocale='$d_setlocale' d_setpgid='$d_setpgid' @@ -10667,6 +10835,7 @@ defvoidused='$defvoidused' direntrytype='$direntrytype' dlext='$dlext' dlsrc='$dlsrc' +doublesize='$doublesize' dynamic_ext='$dynamic_ext' eagain='$eagain' echo='$echo' @@ -10815,6 +10984,7 @@ netdb_hlen_type='$netdb_hlen_type' netdb_host_type='$netdb_host_type' netdb_name_type='$netdb_name_type' netdb_net_type='$netdb_net_type' +nm='$nm' nm_opt='$nm_opt' nm_so_opt='$nm_so_opt' nroff='$nroff' @@ -10843,6 +11013,7 @@ prefixexp='$prefixexp' privlib='$privlib' privlibexp='$privlibexp' prototype='$prototype' +ptrsize='$ptrsize' randbits='$randbits' ranlib='$ranlib' rd_nodata='$rd_nodata' @@ -10898,6 +11069,7 @@ sysman='$sysman' tail='$tail' tar='$tar' tbl='$tbl' +tee='$tee' test='$test' timeincl='$timeincl' timetype='$timetype' @@ -11032,7 +11204,12 @@ the policy defaults. EOM fi - +if $test -f config.msg; then + echo "Hmm. I also noted the following information while running:" + echo " " + $cat config.msg >&4 + $rm -f config.msg +fi $rm -f kit*isdone ark*isdone $rm -rf UU @@ -48,6 +48,26 @@ If there is a hint file for your system (in the hints/ directory) you should also read that hint file for specific information for your system. (Unixware users should use the svr4.sh hint file.) +=head1 NOTE: This version is not binary compatible with Perl 5.004. + +For Perl 5.004 it was possible to be binary compatible with 5.003. +Starting from Perl 5.004_50 this is no longer possible because there were +many deep and far-reaching changes to the language internals. + +If you have dynamically loaded extensions that you built under perl +5.003 or 5.004 and the so-called 'bincompat3' mode (the default mode) +and that you wish to continue to use with perl 5.005, you may need to +reinstall the extensions. If you wish to continue to support both 5.004 +and 5.005 on your system, you will have to move the 5.004 extensions +over to the 5.004 architecture-dependent library. See the discussion +below on L<"Coexistence with earlier versions of perl5."> + +The standard extensions supplied with Perl will be handled automatically. + +In a related issue, old extensions may possibly be affected by the +changes in the Perl language in the current release. Please see +pod/perldelta.pod for a description of what's changed. + =head1 Space Requirements The complete perl5 source tree takes up about 7 MB of disk space. The @@ -149,32 +169,31 @@ For my Solaris system, I usually use If you prefer the GNU-style configure command line interface, you can use the supplied configure command, e.g. - CC=gcc ./configure + CC=gcc ./configure.gnu The configure script emulates a few of the more common configure options. Try - ./configure --help + ./configure.gnu --help for a listing. Cross compiling is not supported. -For systems that do not distinguish the files "Configure" and -"configure", Perl includes a copy of configure named -configure.gnu. +(The file is called configugre.gnu to avoid problems on systems +that would not distinguish the files "Configure" and "configure".) =head2 Extensions By default, Configure will offer to build every extension which appears to be supported. For example, Configure will offer to build GDBM_File only if it is able to find the gdbm library. (See examples below.) -DynaLoader, Fcntl, and IO are always built by default. Configure does -not contain code to test for POSIX compliance, so POSIX is always built -by default as well. If you wish to skip POSIX, you can set the -Configure variable useposix=false either in a hint file or from the -Configure command line. Similarly, the Opcode extension is always built -by default, but you can skip it by setting the Configure variable +B, DynaLoader, Fcntl, IO, and attrs are always built by default. +Configure does not contain code to test for POSIX compliance, so POSIX +is always built by default as well. If you wish to skip POSIX, you can +set the Configure variable useposix=false either in a hint file or from +the Configure command line. Similarly, the Opcode extension is always +built by default, but you can skip it by setting the Configure variable useopcode=false either in a hint file for from the command line. You can learn more about each of these extensions by consulting the @@ -188,6 +207,7 @@ version. (Configure will suggest this as the default.) In summary, here are the Configure command-line variables you can set to turn off each extension: + B (Always included by default) DB_File i_db DynaLoader (Must always be included as a static extension) Fcntl (Always included by default) @@ -199,6 +219,8 @@ to turn off each extension: SDBM_File (Always included by default) Opcode useopcode Socket d_socket + Threads usethreads + attrs (Always included by default) Thus to skip the NDBM_File extension, you can use @@ -210,10 +232,9 @@ library. Of course, you may always run Configure interactively and select only the extensions you want. -Note: The DB_File module will only work with version 1.x of -Berkeley DB. Once Berkeley DB version 2 is released, DB_File will be -upgraded to work with it. Configure will automatically detect this -for you and refuse to try to build DB_File with version 2. +Note: The DB_File module will only work with version 1.x of Berkeley +DB or newer releases of version 2. Configure will automatically detect +this for you and refuse to try to build DB_File with version 2. Finally, if you have dynamic loading (most modern Unix systems do) remember that these extensions do not increase the size of your perl @@ -363,12 +384,12 @@ above. The directories site_perl and site_perl/archname are empty, but are intended to be used for installing local or site-wide extensions. Perl -will automatically look in these directories. +will automatically look in these directories. In order to support using things like #!/usr/local/bin/perl5.004 after a later version is released, architecture-dependent libraries are stored in a version-specific directory, such as -/usr/local/lib/perl5/archname/5.004/. +/usr/local/lib/perl5/archname/5.004/. Again, these are just the defaults, and can be changed as you run Configure. @@ -410,6 +431,11 @@ Then, you can Configure and install in the usual way: make test make install +Beware, though, that if you go to try to install new add-on +extensions, they too will get installed in under '/tmp/perl5' if you +follow this example. The next section shows one way of dealing with +that problem. + =head2 Creating an installable tar archive If you need to install perl on many identical systems, it is @@ -431,6 +457,15 @@ installed on multiple systems. Here's one way to do that: cd /usr/local # Or wherever you specified as $prefix tar xvf perl5-archive.tar +=head2 Site-wide "Policy" settings + +After Configure runs, it stores a number of common site-wide "policy" +answers (such as installation directories and the local perl contact +person) in the Policy.sh file. If you want to build perl on another +system using the same policy defaults, simply copy the Policy.sh file +to the new system and Configure will use it along with the appropriate +hint file for your system. + =head2 Configure-time Options There are several different ways to Configure and build perl for your @@ -438,30 +473,17 @@ system. For most users, the defaults are sensible and will work. Some users, however, may wish to further customize perl. Here are some of the main things you can change. -=head2 Binary Compatibility With Earlier Versions of Perl 5 +=head2 Threads -For Perl 5.004 it was possible to be binary compatible with 5.003. -Starting from Perl 5.005 this is no more possible because there were -many deep and far-reaching changes to the language internals. +On some platforms, perl5.005 can be compiled to use threads. To +enable this, read the file README.threads, and then try -If you have dynamically loaded extensions that you built under perl -5.003 or 5.004 and the so-called 'bincompat3' mode (the default mode) -and that you wish to continue to use with perl 5.005, you may need to -reinstall the extensions. - -Background: starting with Perl 5.003, all functions in the Perl C -source code have been protected by default by the prefix Perl_ (or -perl_) so that you may link with third-party libraries without fear of -namespace collisions. This change broke compatibility with version -5.002, so installing 5.003 or 5.004 over 5.002 or earlier will force -you to re-build and install all of your dynamically loadable -extensions. (The standard extensions supplied with Perl are handled -automatically). You can turn off this namespace protection by adding --DNO_EMBED to your ccflags variable in config.sh. + sh Configure -Dusethreads -In a related issue, old extensions may possibly be affected by the -changes in the Perl language in the current release. Please see -pod/perldelta.pod for a description of what's changed. +Currently, you need to specify -Dusethreads on the Configure command +line so that the hint files can make appropriate adjustments. + +The default is to compile without thread support. =head2 Selecting File IO mechanisms @@ -633,7 +655,7 @@ the malloc function on your system. The perl source is shipped with a version of malloc that is very fast but somewhat wasteful of space. On the other hand, your system's -malloc() function is probably a bit slower but also a bit more frugal. +malloc() function may be a bit slower but also a bit more frugal. For many uses, speed is probably the most important consideration, so the default behavior (for most systems) is to use the malloc supplied @@ -1270,37 +1292,63 @@ program even if the Perl source is no longer available. =head1 Coexistence with earlier versions of perl5 -You can safely install the current version of perl5 and still run scripts -under the old binaries for versions 5.003 and later ONLY. Instead of -starting your script with #!/usr/local/bin/perl, just start it with -#!/usr/local/bin/perl5.003 (or whatever version you want to run.) -If you want to retain a version of Perl 5 prior to 5.003, you'll -need to install the current version in a separate directory tree, -since some of the architecture-independent library files have changed -in incompatible ways. - -The old architecture-dependent files are stored in a version-specific -directory (such as /usr/local/lib/perl5/sun4-sunos/5.003) so that they -will still be accessible even after a later version is installed. -(Note: Perl 5.000 and 5.001 did not put their architecture-dependent -libraries in a version-specific directory. They are simply in -/usr/local/lib/perl5/$archname. If you will not be using 5.000 or -5.001, you may safely remove those files.) - -In general, the standard library files in /usr/local/lib/perl5 should -be usable by all versions of perl5. However, the diagnostics.pm module -uses the /usr/local/lib/perl5/pod/perldiag.pod documentation file, so -the C<use diagnostics;> pragma and the splain script will only identify -and explain any warnings or errors that the most recently-installed -version of perl can generate. - -Most extensions will probably not need to be recompiled to use with a newer -version of perl. If you do run into problems, and you want to continue -to use the old version of perl along with your extension, simply move +WARNING: The upgrade from 5.004_0x to 5.005 is going to be a bit +tricky. See L<"Upgrading from 5.004 to 5.005"> below. + +In general, you can usually safely upgrade from one version of Perl (e.g. +5.004_04) to another similar version (e.g. 5.004_05) without re-compiling +all of your add-on extensions. You can also safely leave the old version +around in case the new version causes you problems for some reason. +For example, if you want to be sure that your script continues to run +with 5.004_04, simplly replace the '#!/usr/local/bin/perl' line at the +top of the script with the particular version you want to run, e.g. +#!/usr/local/bin/perl5.00404. + +(If you are upgrading from 5.002 or earlier, beware that some of the +standard library files have changed in incompatible ways, so you are +probably better off starting with a fresh installation.) + +The standard library files in /usr/local/lib/perl5 should be usable by +all versions of perl5 after 5.002. An exception is the diagnostics.pm +module. Since that module uses the /usr/local/lib/perl5/pod/perldiag.pod +documentation file, the C<use diagnostics;> pragma and the splain script +will only identify and explain any warnings or errors that the most +recently-installed version of perl can generate. Usually, this is not +a problem. + +Most extensions will probably not need to be recompiled to use +with a newer version of perl. Here is how it is supposed to work. +(These examples assume you accept all the Configure defaults.) + +The directories searched by version 5.004_05 will be + + /usr/local/lib/perl5/archname/5.00405 + /usr/local/lib/perl5/ + /usr/local/lib/perl5/site_perl/archname + /usr/local/lib/perl5/site_perl + +while the directories searched by version 5.004_04 are + + /usr/local/lib/perl5/archname/5.00404 + /usr/local/lib/perl5/ + /usr/local/lib/perl5/site_perl/archname + /usr/local/lib/perl5/site_perl + +When you install an add-on extension, it gets installed into +/usr/local/lib/perl5/site_perl/archname (if it is architecture-specific.) +This directory is deliberately NOT version-specific so that both 5.004_04 +and 5.004_05 can use the extension. + +However, if you do run into problems, and you want to continue to +use the old version of perl along with your extension, simply move those extension files to the appropriate version directory, such as -/usr/local/lib/perl/archname/5.003. Then Perl 5.003 will find your -files in the 5.003 directory, and newer versions of perl will find your -newer extension in the site_perl directory. +/usr/local/lib/perl5/archname/5.00404. Then use your newer version of +perl to rebuild and re-install the extension into site_perl. This way, +Perl 5.004_04 will find your files in the 5.00404 directory, and +newer versions of perl will find your newer extension in the site_perl +directory. + +=head2 Maintaining completely separate versions Many users prefer to keep all versions of perl in completely separate directories. One convenient way to do this is by @@ -1312,11 +1360,36 @@ and adding /opt/perl5.004/bin to the shell PATH variable. Such users may also wish to add a symbolic link /usr/local/bin/perl so that scripts can still start with #!/usr/local/bin/perl. +Others might share a common directory for maintenance sub-versions +(e.g. 5.004 for all 5.004_0x versions), but change directory with +each major version. + If you are installing a development subversion, you probably ought to seriously consider using a separate directory, since development subversions may not have all the compatibility wrinkles ironed out yet. +=head2 Upgrading from 5.004 to 5.005 + +Extensions compiled with versions of perl prior to 5.004_50 will need +to be recompiled to be used with 5.004_50 and later. + +If you wish to continue using those extensions under 5.004_04, for +example, then you need to move those extensions from their current +direcotries, which are something like + + /usr/local/lib/perl5/site_perl/ + /usr/local/lib/perl5/site_perl/archname + +to the version-specific directory such as + + /usr/local/lib/perl5/archname/5.00404 + +as described above. + +Once you have moved the 5.00404 versions of the extensions out of the +way, you may recompile and reinstall with 5.005. + =head1 Coexistence with perl4 You can safely install perl5 even if you want to keep perl4 around. @@ -1436,4 +1509,4 @@ above. =head1 LAST MODIFIED -$Id: INSTALL,v 1.28 1997/10/10 16:50:59 doughera Released $ +$Id: INSTALL,v 1.31 1998/03/03 18:08:52 doughera Released $ diff --git a/Makefile.SH b/Makefile.SH index ebbdbe97cc..c1689cd11d 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -405,7 +405,8 @@ perly.c: perly.y perly.h: perly.y -@sh -c true -SYM = global.sym interp.sym compat3.sym +# No compat3.sym here since and including the 5.004_50. +SYM = global.sym interp.sym perlio.sym thread.sym SYMH = perlvars.h thrdvar.h @@ -545,7 +546,7 @@ minitest: miniperl # installed perlbug. We don't re-run the tests here - we trust the user. # Please *don't* use this unless all tests pass. # If you want to report test failures, just use "perlbug -Ilib". -ok: +ok: utilities ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' clist: $(c) diff --git a/Policy_sh.SH b/Policy_sh.SH index 831585422a..1f84d7a332 100644 --- a/Policy_sh.SH +++ b/Policy_sh.SH @@ -7,7 +7,9 @@ $startsh # # This file was produced by running the Policy_sh.SH script, which # gets its values from config.sh, which is generally produced by -# running Configure. +# running Configure. The Policy.sh file gets overwritten each time +# Configure is run. Any variables you add to Policy.sh will be lost +# unless you copy Policy.sh somewhere else before running Configure. # # The idea here is to distill in one place the common site-wide # "policy" answers (such as installation directories) that are @@ -38,8 +40,6 @@ perladmin='$perladmin' # 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. -# A full Glossary of all these config.sh variables is in the -# Porting/Glossary file. # Installation Prefix. prefix='$prefix' @@ -53,12 +53,6 @@ installscript='$installscript' privlib='$privlib' installprivlib='$installprivlib' -archlib='$archlib' -installarchlib='$installarchlib' - -sitearch='$sitearch' -installsitearch='$installsitearch' - sitelib='$sitelib' installsitelib='$installsitelib' @@ -70,8 +64,56 @@ man3dir='$man3dir' man3ext='$man3ext' installman3dir='$installman3dir' -# You may add additional items here, for example, to set the pager -# to your local favorite value, uncomment -# #pager='$pager' +# NOTE: Be careful about architecture-dependent names. If you have +# accepted the default, the following definitions will be commented out. +# That way you can carry this file to another architecture and this file +# won't mistakenly set architecture-dependent names to the wrong value. +# +# If you have not accepted the default, then be sure to check the +# following lines before copying this file to another system. + +!GROK!THIS! + +if test 0 -eq "$subversion"; then + version=`LC_ALL=C; export LC_ALL; \ + echo $baserev $patchlevel | + $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'` +else + version=`LC_ALL=C; export LC_ALL; \ + echo $baserev $patchlevel $subversion | \ + $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'` +fi + +dflt="$privlib/$archname/$version" +if test X"$archlib" = X"$dflt"; then + echo "# archlib='$archlib'" + echo "# installarchlib='$installarchlib'" +else + echo '# NOTE: Preserving your custom archlib.' + echo "archlib='$archlib'" + echo "installarchlib='$installarchlib'" +fi >> Policy.sh +echo >> Policy.sh + +# Now consider sitearch. +dflt="$sitelib/$archname" +if test X"$sitearch" = X"$dflt"; then + echo "# sitearch='$sitearch'" + echo "# installsitearch='$installsitearch'" +else + echo '# NOTE: Preserving your custom sitearch.' + echo "sitearch='$sitearch'" + echo "installsitearch='$installsitearch'" +fi >> Policy.sh + +$spitshell <<!GROK!THIS! >>Policy.sh + +# Lastly, you may add additional items here. For example, to set the +# pager to your local favorite value, uncomment the following line in +# the original Policy_sh.SH file and re-run sh Policy_sh.SH. +# $pager='$pager' +# +# A full Glossary of all the config.sh variables is in the file +# Porting/Glossary. !GROK!THIS! diff --git a/Porting/Glossary b/Porting/Glossary index 88c12cd48a..fe7e630ee9 100644 --- a/Porting/Glossary +++ b/Porting/Glossary @@ -380,7 +380,7 @@ d_gethbyaddr (d_gethbyad.U): d_gethent (d_gethent.U): This variable conditionally defines HAS_GETHOSTENT if gethostent() is - available to dup file descriptors. + available to look up host names in some data base or another. d_gethname (d_gethname.U): This variable conditionally defines the HAS_GETHOSTNAME symbol, which @@ -397,6 +397,23 @@ d_getnbyaddr (d_getnbyad.U): indicates to the C program that the getnetbyaddr() routine is available to look up networks by their IP addresses. +d_getnbyname (d_getnbynm.U): + This variable conditionally defines the HAS_GETNETBYNAME symbol, which + indicates to the C program that the getnetbyname() routine is available + to look up networks by their names. + +d_getpbyname (d_getprotby.U): + This variable conditionally defines the HAS_GETPROTOBYNAME + symbol, which indicates to the C program that the + getprotobyname() routine is available to look up protocols + by their name. + +d_getpbynumber (d_getprotby.U): + This variable conditionally defines the HAS_GETPROTOBYNUMBER + symbol, which indicates to the C program that the + getprotobynumber() routine is available to look up protocols + by their number. + d_getpgid (d_getpgid.U): This variable conditionally defines the HAS_GETPGID symbol, which indicates to the C program that the getpgid(pid) function @@ -420,6 +437,18 @@ d_getprior (d_getprior.U): This variable conditionally defines HAS_GETPRIORITY if getpriority() is available to get a process's priority. +d_getsbyname (d_getsrvby.U): + This variable conditionally defines the HAS_GETSERVBYNAME + symbol, which indicates to the C program that the + getservbyname() routine is available to look up services + by their name. + +d_getsbyport (d_getsrvby.U): + This variable conditionally defines the HAS_GETSERVBYPORT + symbol, which indicates to the C program that the + getservbyport() routine is available to look up services + by their port. + d_gettimeod (d_ftime.U): This variable conditionally defines the HAS_GETTIMEOFDAY symbol, which indicates that the gettimeofday() system call exists (to obtain a @@ -543,6 +572,12 @@ d_nice (d_nice.U): This variable conditionally defines the HAS_NICE symbol, which indicates to the C program that the nice() routine is available. +d_oldpthreads (usethreads.U): + This variable conditionally defines the OLD_PTHREADS_API symbol, + and indicates that Perl should be built to use the old + draft POSIX threads API. This is only potneially meaningful if + usethreads is set. + d_oldsock (d_socket.U): This variable conditionally defines the OLDSOCKET symbol, which indicates that the BSD socket interface is based on 4.1c and not 4.2. @@ -697,6 +732,10 @@ d_setgrps (d_setgrps.U): indicates to the C program that the setgroups() routine is available to set the list of process groups. +d_sethent (d_sethent.U): + This variable conditionally defines HAS_SETHOSTENT if sethostent() is + available. + d_setlinebuf (d_setlnbuf.U): This variable conditionally defines the HAS_SETLINEBUF symbol, which indicates to the C program that the setlinebuf() routine is available @@ -1014,6 +1053,10 @@ dlsrc (dlsrc.U): This variable contains the name of the dynamic loading file that will be used with the package. +doublesize (doublesize.U): + This variable contains the value of the DOUBLESIZE symbol, which + indicates to the C program how many bytes there are in a double. + dynamic_ext (Extensions.U): This variable holds a list of extension files we want to link dynamically into the package. It is used by Makefile. @@ -1696,6 +1739,10 @@ prototype (prototype.U): This variable holds the eventual value of CAN_PROTOTYPE, which indicates the C compiler can handle funciton prototypes. +ptrsize (ptrsize.U): + This variable contains the value of the PTRSIZE symbol, which + indicates to the C program how many bytes there are in a pointer. + randbits (randbits.U): This variable contains the eventual value of the RANDBITS symbol, which indicates to the C program how many bits of random number diff --git a/Porting/config.sh b/Porting/config.sh index 59663d958f..4fb150ef9d 100644 --- a/Porting/config.sh +++ b/Porting/config.sh @@ -8,7 +8,7 @@ # Package name : perl5 # Source directory : . -# Configuration time: Tue Feb 24 12:39:16 EST 1998 +# Configuration time: Tue Mar 3 11:39:44 EST 1998 # Configured by : doughera # Target system : linux fractal 2.0.33 #1 tue feb 3 10:11:46 est 1998 i686 unknown @@ -30,15 +30,15 @@ afs='false' alignbytes='4' aphostname='' ar='ar' -archlib='/opt/perl/lib/i686-linux-thread/5.00460' -archlibexp='/opt/perl/lib/i686-linux-thread/5.00460' +archlib='/opt/perl/lib/i686-linux-thread/5.00461' +archlibexp='/opt/perl/lib/i686-linux-thread/5.00461' archname='i686-linux-thread' archobjs='' awk='awk' baserev='5.0' bash='' bin='/opt/perl/bin' -bincompat3='n' +bincompat3='' binexp='/opt/perl/bin' bison='' byacc='byacc' @@ -52,7 +52,7 @@ ccdlflags='-rdynamic' ccflags='-D_REENTRANT -Dbool=char -DHAS_BOOL -I/usr/local/include' cf_by='doughera' cf_email='yourname@yourhost.yourplace.com' -cf_time='Tue Feb 24 12:39:16 EST 1998' +cf_time='Tue Mar 3 11:39:44 EST 1998' chgrp='' chmod='' chown='' @@ -124,11 +124,16 @@ d_gethent='define' d_gethname='undef' d_getlogin='define' d_getnbyaddr='define' +d_getnbyname='define' +d_getpbyname='define' +d_getpbynumber='define' d_getpgid='define' d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' +d_getsbyname='define' +d_getsbyport='define' d_gettimeod='define' d_gnulibc='define' d_htonl='define' @@ -157,6 +162,7 @@ d_msgrcv='define' d_msgsnd='define' d_mymalloc='undef' d_nice='define' +d_oldpthreads='undef' d_oldsock='undef' d_open3='define' d_pathconf='define' @@ -191,6 +197,7 @@ d_semop='define' d_setegid='define' d_seteuid='define' d_setgrps='define' +d_sethent='define' d_setlinebuf='define' d_setlocale='define' d_setpgid='define' @@ -263,6 +270,7 @@ defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' +doublesize='8' dynamic_ext='B DB_File Fcntl GDBM_File IO NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs' eagain='EAGAIN' echo='echo' @@ -347,7 +355,7 @@ i_varhdr='stdarg.h' i_vfork='undef' incpath='' inews='' -installarchlib='/opt/perl/lib/i686-linux-thread/5.00460' +installarchlib='/opt/perl/lib/i686-linux-thread/5.00461' installbin='/opt/perl/bin' installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' @@ -368,7 +376,7 @@ 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 net 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' +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' lint='' lkflags='' @@ -411,6 +419,7 @@ netdb_hlen_type='int' netdb_host_type='const char *' netdb_name_type='const char *' netdb_net_type='unsigned long' +nm='nm' nm_opt='' nm_so_opt='--dynamic' nroff='nroff' @@ -439,6 +448,7 @@ prefixexp='/opt/perl' privlib='/opt/perl/lib' privlibexp='/opt/perl/lib' prototype='define' +ptrsize='4' randbits='31' ranlib=':' rd_nodata='-1' @@ -489,11 +499,12 @@ stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' strings='/usr/include/string.h' submit='' -subversion='60' +subversion='61' sysman='/usr/man/man1' tail='' tar='' tbl='' +tee='tee' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' @@ -521,5 +532,5 @@ xlibpth='/usr/lib/386 /lib/386' zcat='' zip='zip' PATCHLEVEL=4 -SUBVERSION=60 +SUBVERSION=61 CONFIG=true diff --git a/Porting/config_H b/Porting/config_H index ec3fbdba18..8079a38331 100644 --- a/Porting/config_H +++ b/Porting/config_H @@ -17,7 +17,7 @@ /* * Package name : perl5 * Source directory : . - * Configuration time: Tue Feb 24 12:39:16 EST 1998 + * Configuration time: Tue Mar 3 11:39:44 EST 1998 * Configured by : doughera * Target system : linux fractal 2.0.33 #1 tue feb 3 10:11:46 est 1998 i686 unknown */ @@ -243,12 +243,6 @@ */ #define HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent routine is - * available to lookup host names in some data base or other. - */ -#define HAS_GETHOSTENT /**/ - /* HAS_UNAME: * This symbol, if defined, indicates that the C program may use the * uname() routine to derive the host name. See also HAS_GETHOSTNAME @@ -1471,6 +1465,12 @@ #define HAS_VPRINTF /**/ /*#define USE_CHAR_VSPRINTF / **/ +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + /* I_TIME: * This symbol, if defined, indicates to the C program that it should * include <time.h>. @@ -1530,6 +1530,14 @@ #define RD_NODATA -1 #define EOF_NONBLOCK +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + /* RANDBITS: * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. @@ -1566,8 +1574,8 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "/opt/perl/lib/i686-linux-thread/5.00460" /**/ -#define ARCHLIB_EXP "/opt/perl/lib/i686-linux-thread/5.00460" /**/ +#define ARCHLIB "/opt/perl/lib/i686-linux-thread/5.00461" /**/ +#define ARCHLIB_EXP "/opt/perl/lib/i686-linux-thread/5.00461" /**/ /* CAT2: * This macro catenates 2 tokens together. @@ -1595,6 +1603,58 @@ */ #define CSH "/bin/csh" /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#define HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#define HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +#define HAS_GETHOSTENT /**/ + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +#define HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +#define HAS_GETNETBYNAME /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#define HAS_GETPROTOBYNAME /**/ +#define HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#define HAS_GETSERVBYNAME /**/ +#define HAS_GETSERVBYPORT /**/ + /* HAS_SETGROUPS: * This symbol, if defined, indicates that the setgroups() routine is * available to set the list of process groups. If unavailable, multiple @@ -1602,6 +1662,12 @@ */ #define HAS_SETGROUPS /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +#define HAS_SETHOSTENT /**/ + /* Signal_t: * This symbol's value is either "void" or "int", corresponding to the * appropriate return type of a signal handler. Thus, you can declare @@ -1806,6 +1872,11 @@ * This symbol, if defined, indicates that Perl should * be built to use threads. */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ #define USE_THREADS /**/ +/*#define OLD_PTHREADS_API / **/ #endif diff --git a/Porting/pumpkin.pod b/Porting/pumpkin.pod index 885c813dfa..28d428bea4 100644 --- a/Porting/pumpkin.pod +++ b/Porting/pumpkin.pod @@ -357,21 +357,41 @@ permissions for system files; something like that might be appropriate. =head2 Run Configure This will build a config.sh and config.h. You can skip this if you haven't -changed Configure or config_h.SH at all. +changed Configure or config_h.SH at all. I use the following command -=head2 Update Porting/config_H + sh Configure -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' \ + -des -[This section needs revision. We're currently working on easing -the task of keeping the vms, win32, and plan9 config.sh info -up-to-date.] +=head2 Update Porting/config.sh and Porting/config_H -The Porting/config_H file is provided to help those folks who can't -run Configure. It is important to keep it up-to-date. If you have -changed config_h.SH, those changes must be reflected in config_H as well. -(The name config_H was chosen to distinguish the file from config.h even -on case-insensitive file systems.) Simply edit the existing config_H -file; keep the first few explanatory lines and then copy your new -config.h below. +[XXX +This section needs revision. We're currently working on easing +the task of keeping the vms, win32, and plan9 config.sh info +up-to-date. The plan is to use keep up-to-date 'canned' config.sh +files in the appropriate subdirectories and then generate 'canned' +config.h files for vms, win32, etc. from the generic config.sh file. +This is to ease maintenance. When Configure gets updated, the parts +sometimes get scrambled around, and the changes in config_H can +sometimes be very hard to follow. config.sh, on the other hand, can +safely be sorted, so it's easy to track (typically very small) changes +to config.sh and then propoagate them to a canned 'config.h' by any +number of means, including a perl script in win32/ or carrying +config.sh and config_h.SH to a Unix system and running sh +config_h.SH.) +XXX] + +The Porting/config.sh and Porting/config_H files are provided to +help those folks who can't run Configure. It is important to keep +them up-to-date. If you have changed config_h.SH, those changes must +be reflected in config_H as well. (The name config_H was chosen to +distinguish the file from config.h even on case-insensitive file systems.) +Simply edit the existing config_H file; keep the first few explanatory +lines and then copy your new config.h below. It may also be necessary to update vms/config.vms and plan9/config.plan9, though you should be quite careful in doing so if @@ -1184,4 +1204,4 @@ All opinions expressed herein are those of the authorZ<>(s). =head1 LAST MODIFIED -$Id: pumpkin.pod,v 1.13 1997/08/28 18:26:40 doughera Released $ +$Id: pumpkin.pod,v 1.14 1998/03/03 17:14:47 doughera Released $ @@ -10,13 +10,6 @@ #define XS(name) void name(cv) CV* cv; #endif -#if 0 /*defined(WIN32) && defined(__GNUC__)*/ /* this bug is gone in mingw32/gcc-2.8.0*/ -#define STRINGIFY_THINGY(x) #x -#define FORCE_ARG_STRING(x) STRINGIFY_THINGY(x) -#else -#define FORCE_ARG_STRING(x) x -#endif - #define dXSARGS \ dSP; dMARK; \ I32 ax = mark - stack_base + 1; \ @@ -54,8 +47,7 @@ #ifdef XS_VERSION # define XS_VERSION_BOOTCHECK \ STMT_START { \ - char *xs_version = FORCE_ARG_STRING(XS_VERSION); \ - char *vn = "", *module = SvPV(ST(0),na); \ + char *vn = Nullch, *module = SvPV(ST(0),na); \ if (items >= 2) /* version supplied as bootstrap arg */ \ Sv = ST(1); \ else { \ @@ -66,9 +58,11 @@ Sv = perl_get_sv(form("%s::%s", module, \ vn = "VERSION"), FALSE); \ } \ - if (Sv && (!SvOK(Sv) || strNE(xs_version, SvPV(Sv, na)))) \ - croak("%s object version %s does not match $%s::%s %_", \ - module, xs_version, module, vn, Sv); \ + if (Sv && (!SvOK(Sv) || strNE(XS_VERSION, SvPV(Sv, na)))) \ + croak("%s object version %s does not match %s%s%s%s %_", \ + module, XS_VERSION, \ + vn ? "$" : "", vn ? module : "", vn ? "::" : "", \ + vn ? vn : "bootstrap parameter", Sv); \ } STMT_END #else # define XS_VERSION_BOOTCHECK @@ -77,6 +77,8 @@ extern __inline__ int atomic_sub_return(int i, atomic_t *v) #define atomic_inc(v) atomic_add(1,(v)) #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) /* Add further gcc architectures here */ +# else +# define EMULATE_ATOMIC_REFCOUNTS # endif /* sparc64 */ #endif /* i386 */ #else @@ -53,8 +53,8 @@ av_extend(AV *av, I32 key) dSP; ENTER; SAVETMPS; - PUSHMARK(sp); - EXTEND(sp,2); + PUSHMARK(SP); + EXTEND(SP,2); PUSHs(mg->mg_obj); PUSHs(sv_2mortal(newSViv(key+1))); PUTBACK; @@ -388,8 +388,8 @@ av_push(register AV *av, SV *val) if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) { dSP; - PUSHMARK(sp); - EXTEND(sp,2); + PUSHMARK(SP); + EXTEND(SP,2); PUSHs(mg->mg_obj); PUSHs(val); PUTBACK; @@ -413,7 +413,7 @@ av_pop(register AV *av) croak(no_modify); if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(mg->mg_obj); PUTBACK; ENTER; @@ -446,8 +446,8 @@ av_unshift(register AV *av, register I32 num) if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) { dSP; - PUSHMARK(sp); - EXTEND(sp,1+num); + PUSHMARK(SP); + EXTEND(SP,1+num); PUSHs(mg->mg_obj); while (num-- > 0) { PUSHs(&sv_undef); @@ -495,7 +495,7 @@ av_shift(register AV *av) croak(no_modify); if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(mg->mg_obj); PUTBACK; ENTER; @@ -536,8 +536,8 @@ av_fill(register AV *av, I32 fill) dSP; ENTER; SAVETMPS; - PUSHMARK(sp); - EXTEND(sp,2); + PUSHMARK(SP); + EXTEND(SP,2); PUSHs(mg->mg_obj); PUSHs(sv_2mortal(newSViv(fill+1))); PUTBACK; diff --git a/bytecode.h b/bytecode.h index f605e27e55..e86c146505 100644 --- a/bytecode.h +++ b/bytecode.h @@ -23,8 +23,8 @@ EXT I32 obj_list_fill INIT(-1); bs.fread((char*)(argp),(len),(nelem),bs.data) #define BGET_FGETC() bs.fgetc(bs.data) #else -#define BGET_FREAD(argp, len, nelem) fread((argp), (len), (nelem), fp) -#define BGET_FGETC() getc(fp) +#define BGET_FREAD(argp, len, nelem) PerlIO_read(fp, (argp), (len)*(nelem)) +#define BGET_FGETC() PerlIO_getc(fp) #endif /* INDIRECT_BGET_MACROS */ #define BGET_U32(arg) \ @@ -36,7 +36,7 @@ EXT I32 obj_list_fill INIT(-1); #define BGET_U8(arg) arg = BGET_FGETC() #if INDIRECT_BGET_MACROS -#define BGET_PV(arg) do { \ +#define BGET_PV(arg) STMT_START { \ BGET_U32(arg); \ if (arg) \ bs.freadpv(arg, bs.data); \ @@ -45,13 +45,13 @@ EXT I32 obj_list_fill INIT(-1); pv.xpv_len = 0; \ pv.xpv_cur = 0; \ } \ - } while (0) + } STMT_END #else -#define BGET_PV(arg) do { \ +#define BGET_PV(arg) STMT_START { \ BGET_U32(arg); \ if (arg) { \ New(666, pv.xpv_pv, arg, char); \ - fread(pv.xpv_pv, 1, arg, fp); \ + PerlIO_read(fp, pv.xpv_pv, arg); \ pv.xpv_len = arg; \ pv.xpv_cur = arg - 1; \ } else { \ @@ -59,7 +59,7 @@ EXT I32 obj_list_fill INIT(-1); pv.xpv_len = 0; \ pv.xpv_cur = 0; \ } \ - } while (0) + } STMT_END #endif /* INDIRECT_BGET_MACROS */ #define BGET_comment(arg) \ @@ -70,7 +70,7 @@ EXT I32 obj_list_fill INIT(-1); * 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) do { \ +#define BGET_IV64(arg) STMT_START { \ U32 hi, lo; \ BGET_U32(hi); \ BGET_U32(lo); \ @@ -84,7 +84,7 @@ EXT I32 obj_list_fill INIT(-1); iv_overflows++; \ arg = 0; \ } \ - } while (0) + } STMT_END #define BGET_op_tr_array(arg) do { \ unsigned short *ary; \ @@ -97,31 +97,31 @@ EXT I32 obj_list_fill INIT(-1); } while (0) #define BGET_pvcontents(arg) arg = pv.xpv_pv -#define BGET_strconst(arg) do { \ +#define BGET_strconst(arg) STMT_START { \ for (arg = tokenbuf; (*arg = BGET_FGETC()); arg++) /* nothing */; \ arg = tokenbuf; \ - } while (0) + } STMT_END -#define BGET_double(arg) do { \ +#define BGET_double(arg) STMT_START { \ char *str; \ BGET_strconst(str); \ arg = atof(str); \ - } while (0) + } STMT_END -#define BGET_objindex(arg) do { \ - U32 ix; \ - BGET_U32(ix); \ - arg = obj_list[ix]; \ - } while (0) +#define BGET_objindex(arg) STMT_START { \ + U32 ix; \ + BGET_U32(ix); \ + arg = obj_list[ix]; \ + } STMT_END #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) do { \ - gp_free((GV*)sv); \ - GvGP(sv) = GvGP(arg); \ - } while (0) +#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) @@ -144,11 +144,11 @@ EXT I32 obj_list_fill INIT(-1); pregcomp(arg, arg + 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]) -#define BSET_newopn(o, arg) do { \ - OP *oldop = o; \ - BSET_newop(o, arg); \ - oldop->op_next = o; \ - } while (0) +#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 @@ -156,12 +156,12 @@ EXT I32 obj_list_fill INIT(-1); * Kludge special-case workaround for OP_MAPSTART * which needs the ppaddr for OP_GREPSTART. Blech. */ -#define BSET_op_type(o, arg) do { \ - o->op_type = arg; \ - if (arg == OP_MAPSTART) \ - arg = OP_GREPSTART; \ - o->op_ppaddr = ppaddr[arg]; \ - } while (0) +#define BSET_op_type(o, arg) STMT_START { \ + o->op_type = arg; \ + if (arg == OP_MAPSTART) \ + arg = OP_GREPSTART; \ + o->op_ppaddr = ppaddr[arg]; \ + } STMT_END #define BSET_op_ppaddr(o, arg) croak("op_ppaddr not yet implemented") #define BSET_curpad(pad, arg) pad = AvARRAY(arg) diff --git a/bytecode.pl b/bytecode.pl index 4553edf9bc..2e3f9c6086 100644 --- a/bytecode.pl +++ b/bytecode.pl @@ -83,7 +83,7 @@ bset_obj_store(void *obj, I32 ix) #ifdef INDIRECT_BGET_MACROS void byterun(struct bytestream bs) #else -void byterun(FILE *fp) +void byterun(PerlIO *fp) #endif /* INDIRECT_BGET_MACROS */ { dTHR; @@ -167,7 +167,7 @@ struct bytestream { }; void byterun _((struct bytestream)); #else -void byterun _((FILE *)); +void byterun _((PerlIO *)); #endif /* INDIRECT_BGET_MACROS */ void *bset_obj_store _((void *, I32)); @@ -29,7 +29,7 @@ bset_obj_store(void *obj, I32 ix) #ifdef INDIRECT_BGET_MACROS void byterun(struct bytestream bs) #else -void byterun(FILE *fp) +void byterun(PerlIO *fp) #endif /* INDIRECT_BGET_MACROS */ { dTHR; @@ -17,7 +17,7 @@ struct bytestream { }; void byterun _((struct bytestream)); #else -void byterun _((FILE *)); +void byterun _((PerlIO *)); #endif /* INDIRECT_BGET_MACROS */ void *bset_obj_store _((void *, I32)); @@ -88,6 +88,7 @@ for file do POSIX) ;; SDBM_File) ;; av) ;; + byterun) ;; deb) ;; dl) ;; doio) ;; diff --git a/config_h.SH b/config_h.SH index f74da6286c..138e08a642 100644 --- a/config_h.SH +++ b/config_h.SH @@ -257,12 +257,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- */ #$d_getgrps HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent routine is - * available to lookup host names in some data base or other. - */ -#$d_gethent HAS_GETHOSTENT /**/ - /* HAS_UNAME: * This symbol, if defined, indicates that the C program may use the * uname() routine to derive the host name. See also HAS_GETHOSTNAME @@ -1485,6 +1479,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- #$d_vprintf HAS_VPRINTF /**/ #$d_charvspr USE_CHAR_VSPRINTF /**/ +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE $doublesize /**/ + /* I_TIME: * This symbol, if defined, indicates to the C program that it should * include <time.h>. @@ -1544,6 +1544,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- #define RD_NODATA $rd_nodata #$d_eofnblk EOF_NONBLOCK +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE $ptrsize /**/ + /* RANDBITS: * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. @@ -1609,6 +1617,58 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- */ #$d_csh CSH "$full_csh" /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#$d_gethbyaddr HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#$d_gethbyname HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +#$d_gethent HAS_GETHOSTENT /**/ + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +#$d_getnbyaddr HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +#$d_getnbyname HAS_GETNETBYNAME /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#$d_getpbyname HAS_GETPROTOBYNAME /**/ +#$d_getpbynumber HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#$d_getsbyname HAS_GETSERVBYNAME /**/ +#$d_getsbyport HAS_GETSERVBYPORT /**/ + /* HAS_SETGROUPS: * This symbol, if defined, indicates that the setgroups() routine is * available to set the list of process groups. If unavailable, multiple @@ -1616,6 +1676,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- */ #$d_setgrps HAS_SETGROUPS /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +#$d_sethent HAS_SETHOSTENT /**/ + /* Signal_t: * This symbol's value is either "void" or "int", corresponding to the * appropriate return type of a signal handler. Thus, you can declare @@ -1820,7 +1886,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un- * This symbol, if defined, indicates that Perl should * be built to use threads. */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ #$usethreads USE_THREADS /**/ +#$d_oldpthreads OLD_PTHREADS_API /**/ #endif !GROK!THIS! @@ -92,6 +92,7 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe PerlIO *fp; int fd; int result; + bool was_fdopen = FALSE; forkprocess = 1; /* assume true if no fork */ @@ -221,6 +222,8 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe } if (dodup) fd = PerlLIO_dup(fd); + else + was_fdopen = TRUE; if (!(fp = PerlIO_fdopen(fd,mode))) { if (dodup) PerlLIO_close(fd); @@ -330,7 +333,8 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe sv = *av_fetch(fdpid,fd,TRUE); (void)SvUPGRADE(sv, SVt_IV); SvIVX(sv) = pid; - PerlIO_close(fp); + if (!was_fdopen) + PerlIO_close(fp); } fp = saveifp; @@ -812,7 +816,7 @@ my_stat(ARGSproto) GV* tmpgv; if (op->op_flags & OPf_REF) { - EXTEND(sp,1); + EXTEND(SP,1); tmpgv = cGVOP->op_gv; do_fstat: io = GvIO(tmpgv); @@ -835,6 +839,7 @@ my_stat(ARGSproto) } else { SV* sv = POPs; + char *s; PUTBACK; if (SvTYPE(sv) == SVt_PVGV) { tmpgv = (GV*)sv; @@ -845,11 +850,12 @@ my_stat(ARGSproto) goto do_fstat; } + s = SvPV(sv, na); statgv = Nullgv; - sv_setpv(statname,SvPV(sv, na)); + sv_setpv(statname, s); laststype = OP_STAT; - laststatval = PerlLIO_stat(SvPV(sv, na),&statcache); - if (laststatval < 0 && dowarn && strchr(SvPV(sv, na), '\n')) + laststatval = PerlLIO_stat(s, &statcache); + if (laststatval < 0 && dowarn && strchr(s, '\n')) warn(warn_nl, "stat"); return laststatval; } @@ -861,7 +867,7 @@ my_lstat(ARGSproto) djSP; SV *sv; if (op->op_flags & OPf_REF) { - EXTEND(sp,1); + EXTEND(SP,1); if (cGVOP->op_gv == defgv) { if (laststype != OP_LSTAT) croak("The stat preceding -l _ wasn't an lstat"); @@ -29,6 +29,7 @@ do_trans(SV *sv, OP *arg) register I32 ch; register I32 matches = 0; register I32 squash = op->op_private & OPpTRANS_SQUASH; + register U8 *p; STRLEN len; if (SvREADONLY(sv) && !(op->op_private & OPpTRANS_COUNTONLY)) @@ -63,14 +64,16 @@ do_trans(SV *sv, OP *arg) } else { d = s; + p = send; while (s < send) { if ((ch = tbl[*s]) >= 0) { *d = ch; - if (matches++ && squash) { - if (d[-1] == *d) + matches++; + if (squash) { + if (p == d - 1 && *p == *d) matches--; else - d++; + p = d++; } else d++; @@ -499,7 +502,7 @@ do_kv(ARGSproto) } /* Guess how much room we need. hv_max may be a few too many. Oh well. */ - EXTEND(sp, HvMAX(hv) * (dokeys + dovalues)); + EXTEND(SP, HvMAX(hv) * (dokeys + dovalues)); PUTBACK; /* hv_iternext and hv_iterval might clobber stack_sp */ while (entry = realhv ? hv_iternext(hv) : avhv_iternext((AV*)hv)) { @@ -846,6 +846,7 @@ #define same_dirent Perl_same_dirent #define save_I16 Perl_save_I16 #define save_I32 Perl_save_I32 +#define save_aelem Perl_save_aelem #define save_aptr Perl_save_aptr #define save_ary Perl_save_ary #define save_clearsv Perl_save_clearsv @@ -856,6 +857,7 @@ #define save_freesv Perl_save_freesv #define save_gp Perl_save_gp #define save_hash Perl_save_hash +#define save_helem Perl_save_helem #define save_hptr Perl_save_hptr #define save_int Perl_save_int #define save_item Perl_save_item diff --git a/ext/B/Makefile.PL b/ext/B/Makefile.PL index 92f01e24c4..cdcc4ed71b 100644 --- a/ext/B/Makefile.PL +++ b/ext/B/Makefile.PL @@ -16,6 +16,7 @@ if ($^O eq 'MSWin32') { WriteMakefile( NAME => "B", VERSION => "a5", + MAN3PODS => ' ', clean => { FILES => "perl$e byteperl$e *$o B.c *~" } diff --git a/ext/B/byteperl.c b/ext/B/byteperl.c index c4bf6d7dd8..a42edfb8d5 100644 --- a/ext/B/byteperl.c +++ b/ext/B/byteperl.c @@ -3,7 +3,6 @@ #ifndef PATCHLEVEL #include "patchlevel.h" #endif -#include "byterun.h" static void xs_init _((void)); static PerlInterpreter *my_perl; diff --git a/ext/DB_File/DB_File.xs b/ext/DB_File/DB_File.xs index 91b4dc2ad5..4f70a2df73 100644 --- a/ext/DB_File/DB_File.xs +++ b/ext/DB_File/DB_File.xs @@ -356,8 +356,8 @@ const DBT * key2 ; ENTER ; SAVETMPS; - PUSHMARK(sp) ; - EXTEND(sp,2) ; + PUSHMARK(SP) ; + EXTEND(SP,2) ; PUSHs(sv_2mortal(newSVpv(data1,key1->size))); PUSHs(sv_2mortal(newSVpv(data2,key2->size))); PUTBACK ; @@ -403,8 +403,8 @@ const DBT * key2 ; ENTER ; SAVETMPS; - PUSHMARK(sp) ; - EXTEND(sp,2) ; + PUSHMARK(SP) ; + EXTEND(SP,2) ; PUSHs(sv_2mortal(newSVpv(data1,key1->size))); PUSHs(sv_2mortal(newSVpv(data2,key2->size))); PUTBACK ; @@ -441,7 +441,7 @@ size_t size ; ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSVpv((char*)data,size))); PUTBACK ; diff --git a/ext/DynaLoader/dl_dld.xs b/ext/DynaLoader/dl_dld.xs index 44933ec92c..a0bdcc8de1 100644 --- a/ext/DynaLoader/dl_dld.xs +++ b/ext/DynaLoader/dl_dld.xs @@ -144,7 +144,7 @@ dl_undef_symbols() if (dld_undefined_sym_count) { int x; char **undef_syms = dld_list_undefined_sym(); - EXTEND(sp, dld_undefined_sym_count); + EXTEND(SP, dld_undefined_sym_count); for (x=0; x < dld_undefined_sym_count; x++) PUSHs(sv_2mortal(newSVpv(undef_syms[x]+1, 0))); free(undef_syms); diff --git a/ext/Opcode/Opcode.xs b/ext/Opcode/Opcode.xs index 22d424d936..a7b9c6d9a1 100644 --- a/ext/Opcode/Opcode.xs +++ b/ext/Opcode/Opcode.xs @@ -252,7 +252,7 @@ _safe_call_sv(Package, mask, codesv) sv_free((SV*)GvHV(gv)); GvHV(gv) = (HV*)SvREFCNT_inc(defstash); - PUSHMARK(sp); + PUSHMARK(SP); perl_call_sv(codesv, GIMME|G_EVAL|G_KEEPERR); /* use callers context */ SPAGAIN; /* for the PUTBACK added by xsubpp */ LEAVE; diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index 31439b2365..8807d68189 100644 --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@ -3213,7 +3213,7 @@ pipe() PPCODE: int fds[2]; if (pipe(fds) != -1) { - EXTEND(sp,2); + EXTEND(SP,2); PUSHs(sv_2mortal(newSViv(fds[0]))); PUSHs(sv_2mortal(newSViv(fds[1]))); } @@ -3257,7 +3257,7 @@ uname() #ifdef HAS_UNAME struct utsname buf; if (uname(&buf) >= 0) { - EXTEND(sp, 5); + EXTEND(SP, 5); PUSHs(sv_2mortal(newSVpv(buf.sysname, 0))); PUSHs(sv_2mortal(newSVpv(buf.nodename, 0))); PUSHs(sv_2mortal(newSVpv(buf.release, 0))); @@ -3325,7 +3325,7 @@ strtod(str) num = strtod(str, &unparsed); PUSHs(sv_2mortal(newSVnv(num))); if (GIMME == G_ARRAY) { - EXTEND(sp, 1); + EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); else @@ -3346,7 +3346,7 @@ strtol(str, base = 0) else PUSHs(sv_2mortal(newSVnv((double)num))); if (GIMME == G_ARRAY) { - EXTEND(sp, 1); + EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); else @@ -3367,7 +3367,7 @@ strtoul(str, base = 0) else PUSHs(sv_2mortal(newSVnv((double)num))); if (GIMME == G_ARRAY) { - EXTEND(sp, 1); + EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); else @@ -3468,7 +3468,7 @@ times() struct tms tms; clock_t realtime; realtime = times( &tms ); - EXTEND(sp,5); + EXTEND(SP,5); PUSHs( sv_2mortal( newSViv( (IV) realtime ) ) ); PUSHs( sv_2mortal( newSViv( (IV) tms.tms_utime ) ) ); PUSHs( sv_2mortal( newSViv( (IV) tms.tms_stime ) ) ); @@ -3546,7 +3546,7 @@ tzset() void tzname() PPCODE: - EXTEND(sp,2); + EXTEND(SP,2); PUSHs(sv_2mortal(newSVpv(tzname[0],strlen(tzname[0])))); PUSHs(sv_2mortal(newSVpv(tzname[1],strlen(tzname[1])))); diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm index 51dce5939e..327ef31b56 100644 --- a/ext/Socket/Socket.pm +++ b/ext/Socket/Socket.pm @@ -20,7 +20,7 @@ Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C socket.h def $proto = getprotobyname('tcp'); socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto); - $port = getservbyname('smtp'); + $port = getservbyname('smtp', 'tcp'); $sin = sockaddr_in($port,inet_aton("127.1")); $sin = sockaddr_in(7,inet_aton("localhost")); $sin = sockaddr_in(7,INADDR_LOOPBACK); diff --git a/ext/Socket/Socket.xs b/ext/Socket/Socket.xs index d37208f012..3664368cab 100644 --- a/ext/Socket/Socket.xs +++ b/ext/Socket/Socket.xs @@ -742,9 +742,10 @@ pack_sockaddr_un(pathname) { #ifdef I_SYS_UN struct sockaddr_un sun_ad; /* fear using sun */ + STRLEN len; Zero( &sun_ad, sizeof sun_ad, char ); sun_ad.sun_family = AF_UNIX; - Copy( pathname, sun_ad.sun_path, sizeof sun_ad.sun_path, char ); + strncpy(sun_ad.sun_path, pathname, sizeof sun_ad.sun_path); ST(0) = sv_2mortal(newSVpv((char *)&sun_ad, sizeof sun_ad)); #else ST(0) = (SV *) not_here("pack_sockaddr_un"); @@ -758,9 +759,10 @@ unpack_sockaddr_un(sun_sv) CODE: { #ifdef I_SYS_UN - STRLEN sockaddrlen; struct sockaddr_un addr; - char * sun_ad = SvPV(sun_sv,sockaddrlen); + STRLEN sockaddrlen; + char * sun_ad = SvPV(sun_sv,sockaddrlen); + char * e; if (sockaddrlen != sizeof(addr)) { croak("Bad arg length for %s, length is %d, should be %d", @@ -775,8 +777,11 @@ unpack_sockaddr_un(sun_sv) "Socket::unpack_sockaddr_un", addr.sun_family, AF_UNIX); - } - ST(0) = sv_2mortal(newSVpv(addr.sun_path, strlen(addr.sun_path))); + } + e = addr.sun_path; + while (*e && e < addr.sun_path + sizeof addr.sun_path) + ++e; + ST(0) = sv_2mortal(newSVpvn(addr.sun_path, e - addr.sun_path)); #else ST(0) = (SV *) not_here("unpack_sockaddr_un"); #endif @@ -823,7 +828,7 @@ unpack_sockaddr_in(sin_sv) port = ntohs(addr.sin_port); ip_address = addr.sin_addr; - EXTEND(sp, 2); + EXTEND(SP, 2); PUSHs(sv_2mortal(newSViv((IV) port))); PUSHs(sv_2mortal(newSVpv((char *)&ip_address,sizeof ip_address))); } diff --git a/ext/Thread/Makefile.PL b/ext/Thread/Makefile.PL index bed0db43d7..e252d4e6c3 100644 --- a/ext/Thread/Makefile.PL +++ b/ext/Thread/Makefile.PL @@ -1,6 +1,7 @@ use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Thread', - VERSION_FROM => 'Thread.pm' + VERSION_FROM => 'Thread.pm', + MAN3PODS => ' ' ); diff --git a/ext/Thread/Thread.xs b/ext/Thread/Thread.xs index 3b49dbecb2..aea72f4a46 100644 --- a/ext/Thread/Thread.xs +++ b/ext/Thread/Thread.xs @@ -117,8 +117,8 @@ threadstart(void *arg) PUTBACK; perl_call_sv(sv, G_ARRAY|G_EVAL); SPAGAIN; - retval = sp - (stack_base + oldmark); - sp = stack_base + oldmark + 1; + retval = SP - (stack_base + oldmark); + SP = stack_base + oldmark + 1; if (SvCUR(thr->errsv)) { MUTEX_LOCK(&thr->mutex); thr->flags |= THRf_DID_DIE; @@ -131,12 +131,12 @@ threadstart(void *arg) DEBUG_L(STMT_START { for (i = 1; i <= retval; i++) { PerlIO_printf(PerlIO_stderr(), "%p return[%d] = %s\n", - thr, i, SvPEEK(sp[i - 1])); + thr, i, SvPEEK(SP[i - 1])); } } STMT_END); av_store(av, 0, &sv_yes); - for (i = 1; i <= retval; i++, sp++) - sv_setsv(*av_fetch(av, i, TRUE), SvREFCNT_inc(*sp)); + for (i = 1; i <= retval; i++, SP++) + sv_setsv(*av_fetch(av, i, TRUE), SvREFCNT_inc(*SP)); } finishoff: @@ -219,7 +219,7 @@ newthread (SV *startsv, AV *initargs, char *classname) "%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 */ - PUSHMARK(sp); + PUSHMARK(SP); /* Could easily speed up the following greatly */ for (i = 0; i <= AvFILL(initargs); i++) XPUSHs(SvREFCNT_inc(*av_fetch(initargs, i, FALSE))); @@ -543,7 +543,7 @@ list(classname) /* Truncate any unneeded slots in av */ av_fill(av, n - 1); /* Finally, push all the new objects onto the stack and drop av */ - EXTEND(sp, n); + EXTEND(SP, n); for (svp = AvARRAY(av); n > 0; n--, svp++) PUSHs(*svp); (void)sv_2mortal((SV*)av); diff --git a/global.sym b/global.sym index f068bb7327..21ab314c78 100644 --- a/global.sym +++ b/global.sym @@ -902,6 +902,7 @@ safexrealloc same_dirent save_I16 save_I32 +save_aelem save_aptr save_ary save_clearsv @@ -912,6 +913,7 @@ save_freepv save_freesv save_gp save_hash +save_helem save_hptr save_int save_item @@ -530,17 +530,26 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type) /* By this point we should have a stash and a name */ if (!stash) { - if (add) { - warn("Global symbol \"%s\" requires explicit package name", name); - ++error_count; - stash = curstash ? curstash : defstash; /* avoid core dumps */ - add_gvflags = ((sv_type == SVt_PV) ? GVf_IMPORTED_SV - : (sv_type == SVt_PVAV) ? GVf_IMPORTED_AV - : (sv_type == SVt_PVHV) ? GVf_IMPORTED_HV - : 0); - } - else + if (!add) return Nullgv; + if (add & ~2) { + char sv_type_char = ((sv_type == SVt_PV) ? '$' + : (sv_type == SVt_PVAV) ? '@' + : (sv_type == SVt_PVHV) ? '%' + : 0); + if (sv_type_char) + warn("Global symbol \"%c%s\" requires explicit package name", + sv_type_char, name); + else + warn("Global symbol \"%s\" requires explicit package name", + name); + } + ++error_count; + stash = curstash ? curstash : defstash; /* avoid core dumps */ + add_gvflags = ((sv_type == SVt_PV) ? GVf_IMPORTED_SV + : (sv_type == SVt_PVAV) ? GVf_IMPORTED_AV + : (sv_type == SVt_PVHV) ? GVf_IMPORTED_HV + : 0); } if (!SvREFCNT(stash)) /* symbol table under destruction */ @@ -1314,7 +1323,7 @@ amagic_call(SV *left, SV *right, int method, int flags) PUTBACK; pp_pushmark(ARGS); - EXTEND(sp, notfound + 5); + EXTEND(SP, notfound + 5); PUSHs(lr>0? right: left); PUSHs(lr>0? left: right); PUSHs( lr > 0 ? &sv_yes : ( assign ? &sv_undef : &sv_no )); @@ -96,7 +96,15 @@ # endif # endif #endif - For the moment, these are mentioned here so metaconfig will + + except that still won't work if a system has no integral type + with a size that is 32 bytes. + + Further, we need to know about PTRSIZE == sizeof(void *) and + DOUBLESIZE == sizeof(double) if we really want to try to handle + 32/64-bit combinations. + + For the moment, these are only mentioned here so metaconfig will construct Configure to figure out the various sizes. */ diff --git a/hints/README.hints b/hints/README.hints index 2c27068e38..e36bd6d1dd 100644 --- a/hints/README.hints +++ b/hints/README.hints @@ -1,17 +1,24 @@ +=head1 NAME + +README.hints + +=head1 DESCRIPTION + These files are used by Configure to set things which Configure either can't or doesn't guess properly. Most of these hint files have been tested with at least some version of perl5, but some are still left -over from perl4. I would appreciate hearing about any problems -or suggested changes. +over from perl4. + +Please send any problems or suggested changes to perlbug@perl.com. Hint file naming convention: Each hint file name should have only -one '.'. (This is for portability to non-unix filesystems.) Names +one '.'. (This is for portability to non-unix file systems.) Names should also fit in <= 14 characters, for portability to older SVR3 systems. File names are of the form $osname_$osvers.sh, with all '.' -changed to '_', and all characters such as '/' that don't belong in +changed to '_', and all characters (such as '/') that don't belong in Unix filenames omitted. -For example, consider SunOS 4.1.3. Configure determines $osname=sunos +For example, consider Sun OS 4.1.3. Configure determines $osname=sunos (all names are converted to lower case) and $osvers=4.1.3. Configure will search for an appropriate hint file in the following order: @@ -22,18 +29,185 @@ will search for an appropriate hint file in the following order: If you need to create a hint file, please try to use as general a name as possible and include minor version differences inside case or test -statements. Be sure also to include a default choice. (See -aix.sh for one example.) That way, if you write a hint file for -foonix 3.2, it might still work without any changes when foonix 3.3 is -released. +statements. For example, for IRIX 6.X, we have the following hints +files: + + irix_6_0.sh + irix_6_1.sh + irix_6.sh + +That is, 6.0 and 6.1 have their own special hints, but 6.2, 6.3, and +up are all handled by the same irix_6.sh. That way, we don't have to +make a new hint file every time the IRIX O/S is upgraded. + +If you need to test for specific minor version differences in your +hints file, be sure to include a default choice. (See aix.sh for one +example.) That way, if you write a hint file for foonix 3.2, it might +still work without any changes when foonix 3.3 is released. Please also comment carefully on why the different hints are needed. That way, a future version of Configure may be able to automatically -detect what is needed. A glossary of config.sh variables is in the -file Porting/Glossary. +detect what is needed. + +A glossary of config.sh variables is in the file Porting/Glossary. + +=head1 Hint file tricks + +=head2 Printing critical messages + +[This is still experimental] + +If you have a *REALLY* important message that the user ought to see at +the end of the Configure run, you can store it in the file +'config.msg'. At the end of the Configure run, Configure will display +the contents of this file. Currently, the only place this is used is +in Configure itself to warn about the need to set LD_LIBRARY_PATH if +you are building a shared libperl.so. + +To use this feature, just do something like the following + + $cat <<EOM | $tee -a ../config.msg >&4 + + This is a really important message. Be sure to read it + before you type 'make'. + EOM + +This message will appear on the screen as the hint file is being +processed and again at the end of Configure. + +Please use this sparingly. + +=head2 Propagating variables to config.sh + +Sometimes, you want an extra variable to appear in config.sh. For +example, if your system can't compile toke.c with the optimizer on, +you can put + + toke_cflags='optimize=""' + +at the beginning of a line in your hints file. Configure will then +extract that variable and place it in your config.sh file. Later, +while compiling toke.c, the cflags shell script will eval $toke_cflags +and hence compile toke.c without optimization. + +Note that for this to work, the variable you want to propagate must +appear in the first column of the hint file. It is extracted by +Configure with a simple sed script, so beware that surrounding case +statements aren't any help. + +By contrast, if you don't want Configure to propagate your temporary +variable, simply indent it by a leading tab in your hint file. + +For example, prior to 5.002, a bug in scope.c led to perl crashing +when compiled with -O in AIX 4.1.1. The following "obvious" +workaround in hints/aix.sh wouldn't work as expected: + + case "$osvers" in + 4.1.1) + scope_cflags='optimize=""' + ;; + esac + +because Configure doesn't parse the surrounding 'case' statement, it +just blindly propagates any variable that starts in the first column. +For this particular case, that's probably harmless anyway. + +Three possible fixes are: + +=over + +=item 1 + +Create an aix_4_1_1.sh hint file that contains the scope_cflags +line and then sources the regular aix hints file for the rest of +the information. + +=item 2 + +Do the following trick: + + scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac' + +Now when $scope_cflags is eval'd by the cflags shell script, the +case statement is executed. Of course writing scripts to be eval'd is +tricky, especially if there is complex quoting. Or, + +=item 3 + +Write directly to Configure's temporary file UU/config.sh. +You can do this with + + case "$osvers" in + 4.1.1) + echo "scope_cflags='optimize=\"\"'" >> UU/config.sh + scope_cflags='optimize=""' + ;; + esac + +Note you have to both write the definition to the temporary +UU/config.sh file and set the variable to the appropriate value. + +This is sneaky, but it works. Still, if you need anything this +complex, perhaps you should create the separate hint file for +aix 4.1.1. + +=back + +=head2 Call-backs + +=over 4 + +=item Warning + +All of the following is experimental and subject to change. But it +probably won't change much. :-) + +=item Compiler-related flags + +The settings of some things, such as optimization flags, may depend on +the particular compiler used. For example, for ISC we have the +following: + + case "$cc" in + *gcc*) ccflags="$ccflags -posix" + ldflags="$ldflags -posix" + ;; + *) ccflags="$ccflags -Xp -D_POSIX_SOURCE" + ldflags="$ldflags -Xp" + ;; + esac + +However, the hints file is processed before the user is asked which +compiler should be used. Thus in order for these hints to be useful, +the user must specify sh Configure -Dcc=gcc on the command line, as +advised by the INSTALL file. + +For versions of perl later than 5.004_61, this problem can +be circumvented by the use of "call-back units". That is, the hints +file can tuck this information away into a file UU/cc.cbu. Then, +after Configure prompts the user for the C compiler, it will load in +and run the UU/cc.cbu "call-back" unit. See hints/solaris_2.sh for an +example. + +=item Threading-related flags + +Similarly, after Configure prompts the user about whether or not to +compile Perl with threads, it will look for a "call-back" unit +usethreads.cbu. See hints/linux.sh for an example. + +=item Future status + +I hope this "call-back" scheme is simple enough to use but powerful +enough to deal with most situations. Still, there are certainly cases +where it's not enough. For example, for aix we actually change +compilers if we are using threads. + +I'd appreciate feedback on whether this is sufficiently general to be +helpful, or whether we ought to simply continue to require folks to +say things like "sh Configure -Dcc=gcc -Dusethreads" on the command line. + +=back Have the appropriate amount of fun :-) Andy Dougherty doughera@lafcol.lafayette.edu - Dept. of Physics - Lafayette College, Easton PA 18042 diff --git a/hints/aix.sh b/hints/aix.sh index 076eed5769..bc26590291 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -48,12 +48,6 @@ esac d_setregid='undef' d_setreuid='undef' -# The optimizer in 4.1.1 apparently generates bad code for scope.c. -# Configure doesn't offer an easy way to propagate extra variables -# only for certain cases, so the following contortion is required: -# This is probably not needed in 5.002 and later. -# scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac' - # Changes for dynamic linking by Wayne Scott <wscott@ichips.intel.com> # # Tell perl which symbols to export for dynamic linking. diff --git a/hints/linux.sh b/hints/linux.sh index 1ddbca1964..7347945c48 100644 --- a/hints/linux.sh +++ b/hints/linux.sh @@ -30,7 +30,8 @@ esac ccflags="-Dbool=char -DHAS_BOOL $ccflags" # BSD compatability library no longer needed -set `echo X "$libswanted "| sed -e 's/ bsd / /'` +# 'kaffe' has a /usr/lib/libnet.so which is not at all relevent for perl. +set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /'` shift libswanted="$*" @@ -194,7 +195,12 @@ fi # it should be: # ccdlflags='-Wl,-E' -if [ "X$usethreads" != "X" ]; then +# XXX EXPERIMENTAL A.D. 2/27/1998 +# XXX This script UU/usethreads.cbu will get 'called-back' by Configure +# XXX after it has prompted the user for whether to use threads. +cat > UU/usethreads.cbu <<'EOSH' +case "$usethreads" in +$define|true|[yY]*) ccflags="-D_REENTRANT $ccflags" # -lpthread needs to come before -lc but after other libraries such # as -lgdbm and such like. We assume here that -lc is present in @@ -203,4 +209,7 @@ if [ "X$usethreads" != "X" ]; then set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` shift libswanted="$*" -fi + ;; +esac +EOSH +# XXX EXPERIMENTAL --end of call-back diff --git a/hints/netbsd.sh b/hints/netbsd.sh index 836c7eff0b..787f0f13bb 100644 --- a/hints/netbsd.sh +++ b/hints/netbsd.sh @@ -56,3 +56,11 @@ case "$osvers" in d_setruid="$undef" ;; esac +# netbsd 1.3 linker warns about setr[gu]id being deprecated. +# (setregid, setreuid, preferred?) +case "$osvers" in +1.3|1.3*) + d_setrgid="$undef" + d_setruid="$undef" + ;; +esac diff --git a/hints/solaris_2.sh b/hints/solaris_2.sh index 55d0416388..7f7a85680c 100644 --- a/hints/solaris_2.sh +++ b/hints/solaris_2.sh @@ -116,6 +116,10 @@ END fi rm -f make.vers +# XXX EXPERIMENTAL A.D. 2/27/1998 +# XXX This script UU/cc.cbu will get 'called-back' by Configure after it +# XXX has prompted the user for the C compiler to use. +cat > UU/cc.cbu <<'EOSH' # If the C compiler is gcc: # - check the fixed-includes # - check as(1) and ld(1), they should not be GNU @@ -223,6 +227,9 @@ fi # as --version or ld --version might dump core. rm -f core +# XXX +EOSH + if [ "X$usethreads" != "X" ]; then ccflags="-D_REENTRANT $ccflags" # -lpthread needs to come before -lc but after other libraries such diff --git a/hints/unicos.sh b/hints/unicos.sh index b864019a84..1d828550cc 100644 --- a/hints/unicos.sh +++ b/hints/unicos.sh @@ -4,4 +4,7 @@ esac optimize="-O1" d_setregid='undef' d_setreuid='undef' +case "$usemymalloc" in +'') usemymalloc='n' ;; +esac diff --git a/lib/ExtUtils/typemap b/lib/ExtUtils/typemap index 20cc96f0b5..03ba050d1e 100644 --- a/lib/ExtUtils/typemap +++ b/lib/ExtUtils/typemap @@ -262,7 +262,7 @@ T_ARRAY ST(ix_$var) = sv_newmortal(); DO_ARRAY_ELEM } - sp += $var.size - 1; + SP += $var.size - 1; T_IN { GV *gv = newGVgen("$Package"); diff --git a/lib/File/Basename.pm b/lib/File/Basename.pm index 5c6299e596..8828a52bfc 100644 --- a/lib/File/Basename.pm +++ b/lib/File/Basename.pm @@ -127,8 +127,8 @@ require Exporter; @ISA = qw(Exporter); @EXPORT = qw(fileparse fileparse_set_fstype basename dirname); #use strict; -#use vars qw($VERSION $Fileparse_fstype $Fileparse_igncase); -$VERSION = "2.5"; +use vars qw($VERSION $Fileparse_fstype $Fileparse_igncase); +$VERSION = "2.6"; # fileparse_set_fstype() - specify OS-based rules used in future @@ -155,11 +155,13 @@ sub fileparse { my($fullname,@suffices) = @_; my($fstype,$igncase) = ($Fileparse_fstype, $Fileparse_igncase); my($dirpath,$tail,$suffix,$basename); + my($taint) = substr($fullname,0,0); # Is $fullname tainted? if ($fstype =~ /^VMS/i) { if ($fullname =~ m#/#) { $fstype = '' } # We're doing Unix emulation else { ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/); + $dirpath ||= ''; # should always be defined } } if ($fstype =~ /^MS(DOS|Win32)/i) { @@ -183,12 +185,15 @@ sub fileparse { foreach $suffix (@suffices) { my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$"; if ($basename =~ s/$pat//) { + $taint .= substr($suffix,0,0); $tail = $1 . $tail; } } } - wantarray ? ($basename,$dirpath,$tail) : $basename; + $tail .= $taint if defined $tail; # avoid warning if $tail == undef + wantarray ? ($basename . $taint, $dirpath . $taint, $tail) + : $basename . $taint; } diff --git a/lib/File/Find.pm b/lib/File/Find.pm index 11835067ff..7abebc6544 100644 --- a/lib/File/Find.pm +++ b/lib/File/Find.pm @@ -17,7 +17,7 @@ finddepth - traverse a directory structure depth-first use File::Find; find(\&wanted, '/foo','/bar'); sub wanted { ... } - + use File::Find; finddepth(\&wanted, '/foo','/bar'); sub wanted { ... } @@ -34,7 +34,7 @@ prune the tree. File::Find assumes that you don't alter the $_ variable. If you do then make sure you return it to its original value before exiting your function. -This library is primarily for the C<find2perl> tool, which when fed, +This library is primarily for the C<find2perl> tool, which when fed, find2perl / -name .nfs\* -mtime +7 \ -exec rm -f {} \; -o -fstype nfs -prune @@ -63,7 +63,7 @@ that don't resolve: sub wanted { -l && !-e && print "bogus link: $File::Find::name\n"; - } + } =head1 BUGS @@ -91,12 +91,11 @@ sub find { $name = $topdir; $prune = 0; &$wanted; - if (!$prune) { - my $fixtopdir = $topdir; - $fixtopdir =~ s,/$,, ; - $fixtopdir =~ s/\.dir$// if $Is_VMS; - &finddir($wanted,$fixtopdir,$topnlink); - } + next if $prune; + my $fixtopdir = $topdir; + $fixtopdir =~ s,/$,, ; + $fixtopdir =~ s/\.dir$// if $Is_VMS; + &finddir($wanted,$fixtopdir,$topnlink); } else { warn "Can't cd to $topdir: $!\n"; @@ -106,8 +105,13 @@ sub find { unless (($_,$dir) = File::Basename::fileparse($topdir)) { ($dir,$_) = ('.', $topdir); } - $name = $topdir; - chdir $dir && &$wanted; + if (chdir($dir)) { + $name = $topdir; + &$wanted; + } + else { + warn "Can't cd to $dir: $!\n"; + } } chdir $cwd; } @@ -134,7 +138,7 @@ sub finddir { &$wanted; } } - else { # This dir has subdirectories. + else { # This dir has subdirectories. $subcount = $nlink - 2; for (@filenames) { next if $_ eq '.'; @@ -148,17 +152,21 @@ sub finddir { ($dev,$ino,$mode,$nlink) = ($Is_VMS ? stat($_) : lstat($_)); # unless ($nlink || $dont_use_nlink); - + if (-d _) { # It really is a directory, so do it recursively. - if (!$prune && chdir $_) { + --$subcount; + next if $prune; + if (chdir $_) { $name =~ s/\.dir$// if $Is_VMS; &finddir($wanted,$name,$nlink); chdir '..'; } - --$subcount; + else { + warn "Can't cd to $_: $!\n"; + } } } } @@ -168,12 +176,10 @@ sub finddir { sub finddepth { my $wanted = shift; - - $cwd = Cwd::fastcwd();; - + my $cwd = Cwd::cwd(); # Localize these rather than lexicalizing them for backwards # compatibility. - local($topdir, $topdev, $topino, $topmode, $topnlink); + local($topdir,$topdev,$topino,$topmode,$topnlink); foreach $topdir (@_) { (($topdev,$topino,$topmode,$topnlink) = ($Is_VMS ? stat($topdir) : lstat($topdir))) @@ -184,8 +190,8 @@ sub finddepth { $fixtopdir =~ s,/$,, ; $fixtopdir =~ s/\.dir$// if $Is_VMS; &finddepthdir($wanted,$fixtopdir,$topnlink); - ($dir,$_) = ($fixtopdir,'.'); - $name = $fixtopdir; + ($dir,$_) = ($topdir,'.'); + $name = $topdir; &$wanted; } else { @@ -196,8 +202,13 @@ sub finddepth { unless (($_,$dir) = File::Basename::fileparse($topdir)) { ($dir,$_) = ('.', $topdir); } - $name = $topdir; - chdir $dir && &$wanted; + if (chdir($dir)) { + $name = $topdir; + &$wanted; + } + else { + warn "Can't cd to $dir: $!\n"; + } } chdir $cwd; } @@ -206,15 +217,15 @@ sub finddepth { sub finddepthdir { my($wanted, $nlink); local($dir, $name); - ($wanted,$dir,$nlink) = @_; + ($wanted, $dir, $nlink) = @_; my($dev, $ino, $mode, $subcount); # Get the list of files in the current directory. - opendir(DIR,'.') || warn "Can't open $dir: $!\n"; + opendir(DIR,'.') || (warn "Can't open $dir: $!\n", return); my(@filenames) = readdir(DIR); closedir(DIR); - if ($nlink == 2 && !$dont_use_nlink) { # This dir has no subdirectories. + if ($nlink == 2 && !$dont_use_nlink) { # This dir has no subdirectories. for (@filenames) { next if $_ eq '.'; next if $_ eq '..'; @@ -223,7 +234,7 @@ sub finddepthdir { &$wanted; } } - else { # This dir has subdirectories. + else { # This dir has subdirectories. $subcount = $nlink - 2; for (@filenames) { next if $_ eq '.'; @@ -235,17 +246,20 @@ sub finddepthdir { # Get link count and check for directoriness. ($dev,$ino,$mode,$nlink) = ($Is_VMS ? stat($_) : lstat($_)); - + if (-d _) { # It really is a directory, so do it recursively. + --$subcount; if (chdir $_) { $name =~ s/\.dir$// if $Is_VMS; &finddepthdir($wanted,$name,$nlink); chdir '..'; } - --$subcount; + else { + warn "Can't cd to $_: $!\n"; + } } } &$wanted; @@ -264,13 +278,9 @@ if ($^O eq 'VMS') { $Is_VMS = 1; $dont_use_nlink = 1; } -if ($^O =~ m:^mswin32:i) { - $Is_NT = 1; - $dont_use_nlink = 1; -} $dont_use_nlink = 1 - if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos'; + if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32'; 1; diff --git a/lib/File/Path.pm b/lib/File/Path.pm index 492f150b5a..6b5d5683f1 100644 --- a/lib/File/Path.pm +++ b/lib/File/Path.pm @@ -92,7 +92,7 @@ Charles Bailey <F<bailey@genetics.upenn.edu>> =head1 REVISION -Current $VERSION is 1.04. +Current $VERSION is 1.0401. =cut @@ -103,7 +103,7 @@ use Exporter (); use strict; use vars qw( $VERSION @ISA @EXPORT ); -$VERSION = "1.04"; +$VERSION = "1.0401"; @ISA = qw( Exporter ); @EXPORT = qw( mkpath rmtree ); @@ -202,18 +202,18 @@ sub rmtree { if $force_writeable; print "unlink $root\n" if $verbose; # delete all versions under VMS - while (-e $root || -l $root) { - if (unlink $root) { - ++$count; - } - else { + for (;;) { + unless (unlink $root) { carp "Can't unlink file $root: $!"; if ($force_writeable) { chmod $rp, $root or carp("and can't restore permissions to " . sprintf("0%o",$rp) . "\n"); } + last; } + ++$count; + last unless $Is_VMS && lstat $root; } } } diff --git a/lib/autouse.pm b/lib/autouse.pm index ab95a19d8a..4445c6c419 100644 --- a/lib/autouse.pm +++ b/lib/autouse.pm @@ -146,15 +146,6 @@ The first line ensures that the errors in your argument specification are found early. When you ship your application you should comment out the first line, since it makes the second one useless. -=head1 BUGS - -If Module::func3() is autoused, and the module is loaded between the -C<autouse> directive and a call to Module::func3(), warnings about -redefinition would appear if warnings are enabled. - -If Module::func3() is autoused, warnings are disabled when loading the -module via autoused functions. - =head1 AUTHOR Ilya Zakharevich (ilya@math.ohio-state.edu) diff --git a/makedepend.SH b/makedepend.SH index dceca0baee..3c7ffe4f6b 100755 --- a/makedepend.SH +++ b/makedepend.SH @@ -115,7 +115,7 @@ for file in `$cat .clist`; do -e 's|\\$||' \ -e p \ -e '}' ) >UU/$file.c - $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <UU/$file.c | + $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c | $sed \ -e '/^#.*<stdin>/d' \ -e '/^#.*"-"/d' \ @@ -977,8 +977,8 @@ magic_methcall(MAGIC *mg, char *meth, I32 flags, int n, SV *val) { dSP; - PUSHMARK(sp); - EXTEND(sp, n); + PUSHMARK(SP); + EXTEND(SP, n); PUSHs(mg->mg_obj); if (n > 1) { if (mg->mg_ptr) { @@ -1062,7 +1062,7 @@ int magic_wipepack(SV *sv, MAGIC *mg) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(mg->mg_obj); PUTBACK; ENTER; @@ -1079,8 +1079,8 @@ magic_nextpack(SV *sv, MAGIC *mg, SV *key) ENTER; SAVETMPS; - PUSHMARK(sp); - EXTEND(sp, 2); + PUSHMARK(SP); + EXTEND(SP, 2); PUSHs(mg->mg_obj); if (SvOK(key)) PUSHs(key); @@ -1565,7 +1565,7 @@ magic_set(SV *sv, MAGIC *mg) STATUS_POSIX_SET(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)); break; case '!': - SETERRNO(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv), + SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0, (SvIV(sv) == EVMSERR) ? 4 : vaxc$errno); break; case '<': @@ -1892,7 +1892,7 @@ sighandler(int sig) sv = sv_newmortal(); sv_setpv(sv,sig_name[sig]); } - PUSHMARK(sp); + PUSHMARK(SP); PUSHs(sv); PUTBACK; @@ -15,7 +15,6 @@ fi . $TOP/config.sh # Note that the text lines /^Summary of/ .. /^\s*$/ are copied into Config.pm. -# XXX Add d_sigaction (?) once it's defined. $spitshell <<!GROK!THIS! @@ -24,14 +23,14 @@ Summary of my $package ($baserev patchlevel $PATCHLEVEL subversion $SUBVERSION) osname=$osname, osvers=$osvers, archname=$archname uname='$myuname' hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction - bincompat3=$bincompat3 useperlio=$useperlio d_sfio=$d_sfio + usethreads=$usethreads useperlio=$useperlio d_sfio=$d_sfio Compiler: cc='$cc', optimize='$optimize', gccversion=$gccversion cppflags='$cppflags' ccflags ='$ccflags' stdchar='$stdchar', d_stdstdio=$d_stdstdio, usevfork=$usevfork - voidflags=$voidflags, castflags=$castflags, d_casti32=$d_casti32, d_castneg=$d_castneg - intsize=$intsize, alignbytes=$alignbytes, usemymalloc=$usemymalloc, prototype=$prototype + intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize + alignbytes=$alignbytes, usemymalloc=$usemymalloc, prototype=$prototype Linker and Libraries: ld='$ld', ldflags ='$ldflags' libpth=$libpth @@ -48,6 +48,7 @@ static void null _((OP* o)); static PADOFFSET pad_findlex _((char* name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)); static OP *newDEFSVOP _((void)); +static OP *new_logop _((I32 type, I32 flags, OP **firstp, OP **otherp)); #endif STATIC char* @@ -93,9 +94,18 @@ assertref(OP *o) int type = o->op_type; if (type != OP_AELEM && type != OP_HELEM) { yyerror(form("Can't use subscript on %s", op_desc[type])); - if (type == OP_ENTERSUB || type == OP_RV2HV || type == OP_PADHV) - warn("(Did you mean $ or @ instead of %c?)\n", - type == OP_ENTERSUB ? '&' : '%'); + if (type == OP_ENTERSUB || type == OP_RV2HV || type == OP_PADHV) { + dTHR; + SV *msg = sv_2mortal( + newSVpvf("(Did you mean $ or @ instead of %c?)\n", + type == OP_ENTERSUB ? '&' : '%')); + if (in_eval & 2) + warn("%_", msg); + else if (in_eval) + sv_catsv(GvSV(errgv), msg); + else + PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg)); + } } } @@ -1396,8 +1406,9 @@ my(OP *o) if (type == OP_LIST) { for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) my(kid); - } - else if (type != OP_PADSV && + } else if (type == OP_UNDEF) { + return o; + } else if (type != OP_PADSV && type != OP_PADAV && type != OP_PADHV && type != OP_PUSHMARK) @@ -1568,7 +1579,7 @@ newPROG(OP *o) CV *cv = perl_get_cv("DB::postponed", FALSE); if (cv) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs((SV*)compiling.cop_filegv); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); @@ -2603,9 +2614,17 @@ intro_my(void) OP * newLOGOP(I32 type, I32 flags, OP *first, OP *other) { + return new_logop(type, flags, &first, &other); +} + +STATIC OP * +new_logop(I32 type, I32 flags, OP** firstp, OP** otherp) +{ dTHR; LOGOP *logop; OP *o; + OP *first = *firstp; + OP *other = *otherp; if (type == OP_XOR) /* Not short circuit, but here by precedence. */ return newBINOP(type, flags, scalar(first), scalar(other)); @@ -2619,7 +2638,7 @@ newLOGOP(I32 type, I32 flags, OP *first, OP *other) else type = OP_AND; o = first; - first = cUNOPo->op_first; + first = *firstp = cUNOPo->op_first; if (o->op_next) first->op_next = o->op_next; cUNOPo->op_first = Nullop; @@ -2631,10 +2650,12 @@ newLOGOP(I32 type, I32 flags, OP *first, OP *other) warn("Probable precedence problem on %s", op_desc[type]); if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) { op_free(first); + *firstp = Nullop; return other; } else { op_free(other); + *otherp = Nullop; return first; } } @@ -2819,9 +2840,10 @@ newLOOPOP(I32 flags, I32 debuggable, OP *expr, OP *block) } listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0)); - o = newLOGOP(OP_AND, 0, expr, listop); + o = new_logop(OP_AND, 0, &expr, &listop); - ((LISTOP*)listop)->op_last->op_next = LINKLIST(o); + if (listop) + ((LISTOP*)listop)->op_last->op_next = LINKLIST(o); if (once && o != listop) o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other; @@ -2869,14 +2891,17 @@ newWHILEOP(I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *b redo = LINKLIST(listop); if (expr) { - o = newLOGOP(OP_AND, 0, expr, scalar(listop)); + copline = whileline; + scalar(listop); + o = new_logop(OP_AND, 0, &expr, &listop); if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) { op_free(expr); /* oops, it's a while (0) */ op_free((OP*)loop); - return Nullop; /* (listop already freed by newLOGOP) */ + return Nullop; /* listop already freed by new_logop */ } - ((LISTOP*)listop)->op_last->op_next = condop = - (o == listop ? redo : LINKLIST(o)); + if (listop) + ((LISTOP*)listop)->op_last->op_next = condop = + (o == listop ? redo : LINKLIST(o)); if (!next) next = condop; } @@ -3313,7 +3338,10 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block) if (curstack == sortstack && sortcop == CvSTART(cv)) croak("Can't redefine active sort subroutine %s", name); const_sv = cv_const_sv(cv); - if (const_sv || dowarn) { + if (const_sv || dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv)) + && HvNAME(GvSTASH(CvGV(cv))) + && strEQ(HvNAME(GvSTASH(CvGV(cv))), + "autouse"))) { line_t oldline = curcop->cop_line; curcop->cop_line = copline; warn(const_sv ? "Constant subroutine %s redefined" @@ -3443,7 +3471,7 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block) if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr)) && (cv = GvCV(db_postponed))) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(tmpstr); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); @@ -3508,7 +3536,9 @@ newXS(char *name, void (*subaddr) (CPERLproto_ CV *), char *filename) } else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) { /* already defined (or promised) */ - if (dowarn) { + if (dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv)) + && HvNAME(GvSTASH(CvGV(cv))) + && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) { line_t oldline = curcop->cop_line; curcop->cop_line = copline; warn("Subroutine %s redefined",name); @@ -3946,17 +3976,16 @@ ck_rvconst(register OP *o) "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use", name, badthing); } - kid->op_type = OP_GV; + /* + * This is a little tricky. We only want to add the symbol if we + * didn't add it in the lexer. Otherwise we get duplicate strict + * warnings. But if we didn't add it in the lexer, we must at + * least pretend like we wanted to add it even if it existed before, + * or we get possible typo warnings. OPpCONST_ENTERED says + * whether the lexer already added THIS instance of this symbol. + */ iscv = (o->op_type == OP_RV2CV) * 2; - for (gv = 0; !gv; iscv++) { - /* - * This is a little tricky. We only want to add the symbol if we - * didn't add it in the lexer. Otherwise we get duplicate strict - * warnings. But if we didn't add it in the lexer, we must at - * least pretend like we wanted to add it even if it existed before, - * or we get possible typo warnings. OPpCONST_ENTERED says - * whether the lexer already added THIS instance of this symbol. - */ + do { gv = gv_fetchpv(name, iscv | !(kid->op_private & OPpCONST_ENTERED), iscv @@ -3968,9 +3997,12 @@ ck_rvconst(register OP *o) : o->op_type == OP_RV2HV ? SVt_PVHV : SVt_PVGV); + } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++); + if (gv) { + kid->op_type = OP_GV; + SvREFCNT_dec(kid->op_sv); + kid->op_sv = SvREFCNT_inc(gv); } - SvREFCNT_dec(kid->op_sv); - kid->op_sv = SvREFCNT_inc(gv); } return o; } @@ -4235,7 +4267,7 @@ ck_index(OP *o) if (o->op_flags & OPf_KIDS) { OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */ if (kid && kid->op_type == OP_CONST) - fbm_compile(((SVOP*)kid)->op_sv); + fbm_compile(((SVOP*)kid)->op_sv, 0); } return ck_fun(o); } @@ -4722,7 +4754,7 @@ peep(register OP *o) goto nothin; case OP_NULL: if (o->op_targ == OP_NEXTSTATE || o->op_targ == OP_DBSTATE) - curcop = ((COP*)op); + curcop = ((COP*)o); goto nothin; case OP_SCALAR: case OP_LINESEQ: diff --git a/os2/OS2/REXX/REXX.xs b/os2/OS2/REXX/REXX.xs index 43c92c8b46..14489f965d 100644 --- a/os2/OS2/REXX/REXX.xs +++ b/os2/OS2/REXX/REXX.xs @@ -133,7 +133,7 @@ PERLCALL(PSZ name, ULONG argc, PRXSTRING argv, PSZ queue, PRXSTRING ret) ENTER; SAVETMPS; - PUSHMARK(sp); + PUSHMARK(SP); #if 0 if (!my_perl) { @@ -339,7 +339,7 @@ _fetch(name, ...) { int i; ULONG rc; - EXTEND(sp, items); + EXTEND(SP, items); needvars(items); if (trace) fprintf(stderr, "REXXCALL::_fetch"); @@ -410,7 +410,7 @@ _next(stem) rc = RexxVariablePool(&sv); } while (!rc && memcmp(stem, sv.shvname.strptr, len) != 0); if (!rc) { - EXTEND(sp, 2); + EXTEND(SP, 2); /* returned lengths appear to be swapped */ /* but beware of "future bug fixes" */ namelen = sv.shvname.strlength; /* should be */ diff --git a/patchlevel.h b/patchlevel.h index 1fe5ee8e2a..44bbe3ac57 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1,5 +1,6 @@ +#ifndef __PATCHLEVEL_H_INCLUDED__ #define PATCHLEVEL 4 -#define SUBVERSION 61 +#define SUBVERSION 62 /* local_patches -- list of locally applied less-than-subversion patches. @@ -44,3 +45,6 @@ static char *local_patches[] = { /* Initial space prevents this variable from being inserted in config.sh */ # define LOCAL_PATCH_COUNT \ (sizeof(local_patches)/sizeof(local_patches[0])-2) + +#define __PATCHLEVEL_H_INCLUDED__ +#endif @@ -1133,7 +1133,7 @@ perl_call_argv(char *sub_name, I32 flags, register char **argv) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); if (argv) { while (*argv) { XPUSHs(sv_2mortal(newSVpv(*argv,0))); @@ -1173,9 +1173,8 @@ perl_call_sv(SV *sv, I32 flags) /* See G_* flags in cop.h */ { - dTHR; + dSP; LOGOP myop; /* fake syntax tree node */ - SV** sp = stack_sp; I32 oldmark; I32 retval; I32 oldscope; @@ -1316,10 +1315,9 @@ perl_eval_sv(SV *sv, I32 flags) /* See G_* flags in cop.h */ { - dTHR; + dSP; UNOP myop; /* fake syntax tree node */ - SV** sp = stack_sp; - I32 oldmark = sp - stack_base; + I32 oldmark = SP - stack_base; I32 retval; I32 oldscope; dJMPENV; @@ -1406,7 +1404,7 @@ perl_eval_pv(char *p, I32 croak_on_error) dSP; SV* sv = newSVpv(p, 0); - PUSHMARK(sp); + PUSHMARK(SP); perl_eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); @@ -73,7 +73,11 @@ class CPerlObj; # ifdef __GNUC__ # define stringify_immed(s) #s # define stringify(s) stringify_immed(s) +#ifdef EMBED +register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); +#else register struct op *op asm(stringify(OP_IN_REGISTER)); +#endif # endif #endif @@ -812,7 +816,11 @@ Free_t Perl_free _((Malloc_t where)); # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else -# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) +# ifdef USHRT_MAX +# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) +# else +# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) +# endif # endif #endif @@ -822,7 +830,11 @@ Free_t Perl_free _((Malloc_t where)); # ifdef MAXSHORT /* Often used in <values.h> */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else -# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) +# ifdef SHRT_MAX +# define PERL_SHORT_MAX ((short)SHRT_MAX) +# else +# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) +# endif # endif #endif @@ -832,7 +844,11 @@ Free_t Perl_free _((Malloc_t where)); # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else -# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) +# ifdef SHRT_MIN +# define PERL_SHORT_MIN ((short)SHRT_MIN) +# else +# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) +# endif # endif #endif diff --git a/perl_exp.SH b/perl_exp.SH index 067ebec135..f8fd973e30 100644 --- a/perl_exp.SH +++ b/perl_exp.SH @@ -38,31 +38,14 @@ echo "Extracting perl.exp" rm -f perl.exp echo "#!" > perl.exp -case "$bincompat3" in -y*) - global=/tmp/exp$$g - interp=/tmp/exp$$i - compat3=/tmp/exp$$c - grep '^[A-Za-z]' global.sym | sort >$global - grep '^[A-Za-z]' interp.sym | sort >$interp - grep '^[A-Za-z]' compat3.sym | sort >$compat3 - comm -23 $global $compat3 | sed 's/^/Perl_/' >> perl.exp - comm -12 $interp $compat3 | sed 's/^/Perl_/' >> perl.exp - comm -12 $global $compat3 >> perl.exp - comm -23 $interp $compat3 >> perl.exp - rm -f $global $interp $compat3 - ;; -*) - sed -n '/^[A-Za-z]/ s/^/Perl_/p' global.sym interp.sym >> perl.exp - expperlvars=/tmp/exp$$pv - expthrdvar=/tmp/exp$$tv - sed -n 's/^PERLVARI*(G\([^,]*\).*/Perl_\1/p' perlvars.h >> $expperlvars - sed -n 's/^PERLVARI*(T\([^,]*\).*/Perl_\1/p' thrdvar.h >> $expthrdvar - # The shebang line nicely sorts as the first one. - sort -o perl.exp -u perl.exp $expperlvars $expthrdvar - rm -f $expperlvars $expthrdvar - ;; -esac +# No compat3 since and including the 5.004_50. +# perlio.sym added later if needed. +syms=`ls -1 *.sym|egrep -v 'compat3|perlio'` + +sed -n '/^[A-Za-z]/ s/^/Perl_/p' $syms >> perl.exp + +sed -n 's/^PERLVAR.*(G\([^,]*\).*/Perl_\1/p' perlvars.h >> perl.exp +sed -n 's/^PERLVAR.*(T\([^,]*\).*/Perl_\1/p' thrdvar.h >> perl.exp # # If we use the PerlIO abstraction layer, add its symbols @@ -112,3 +95,8 @@ Perl_calloc Perl_realloc Perl_free END + +# The shebang line nicely sorts as the first one. +sort -o perl.exp -u perl.exp + +# eof @@ -15,7 +15,7 @@ #define PerlDir_seek(dir, loc) piDir->Seek((dir), (loc), ErrorNo()) #define PerlDir_tell(dir) piDir->Tell((dir), ErrorNo()) #else -#define PerlDir_mkdir(name, mode) mkdir((name), (mode)) +#define PerlDir_mkdir(name, mode) Mkdir((name), (mode)) #define PerlDir_chdir(name) chdir((name)) #define PerlDir_rmdir(name) rmdir((name)) #define PerlDir_close(dir) closedir((dir)) diff --git a/perlsdio.h b/perlsdio.h index 5a15a719ca..9825f8ed92 100644 --- a/perlsdio.h +++ b/perlsdio.h @@ -232,7 +232,9 @@ #undef fopen #undef vfprintf #undef fgetc +#undef getc_unlocked #undef fputc +#undef putc_unlocked #undef fputs #undef ungetc #undef fread @@ -25,1051 +25,1039 @@ dep(void) #define YYERRCODE 256 short yylhs[] = { -1, 45, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 24, 24, 24, 24, 24, 24, 15, - 15, 15, 14, 14, 42, 42, 13, 13, 13, 13, - 13, 13, 13, 26, 26, 27, 27, 28, 29, 30, - 31, 32, 44, 44, 1, 1, 1, 1, 3, 38, - 38, 46, 4, 5, 6, 39, 40, 40, 41, 41, - 47, 47, 49, 48, 16, 16, 16, 25, 25, 25, - 36, 36, 36, 36, 36, 36, 36, 50, 36, 37, - 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 12, 12, 12, 24, 24, 24, 24, 24, 24, 24, + 15, 15, 15, 14, 14, 42, 42, 13, 13, 13, + 13, 13, 13, 13, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 44, 44, 1, 1, 1, 1, 3, + 38, 38, 46, 4, 5, 6, 39, 40, 40, 41, + 41, 47, 47, 49, 48, 16, 16, 16, 25, 25, + 25, 36, 36, 36, 36, 36, 36, 36, 50, 36, + 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 33, 33, 34, - 34, 34, 2, 2, 43, 23, 18, 19, 20, 21, - 22, 35, 35, 35, 35, + 17, 17, 17, 17, 17, 17, 17, 17, 33, 33, + 34, 34, 34, 2, 2, 43, 23, 18, 19, 20, + 21, 22, 35, 35, 35, 35, }; short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 0, - 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, - 8, 11, 3, 0, 1, 0, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 4, 1, - 0, 5, 0, 0, 0, 1, 0, 1, 1, 1, - 3, 2, 0, 7, 3, 3, 1, 2, 3, 1, - 3, 5, 6, 3, 5, 2, 4, 0, 5, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 3, 2, 4, - 3, 4, 1, 5, 1, 4, 5, 4, 1, 1, - 1, 5, 6, 5, 6, 5, 4, 5, 1, 1, - 3, 4, 3, 2, 2, 4, 5, 4, 5, 4, - 5, 1, 2, 2, 1, 2, 2, 2, 1, 3, - 1, 3, 4, 4, 6, 1, 1, 0, 1, 0, - 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, + 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, + 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, + 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, + 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, + 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, + 1, 3, 5, 6, 3, 5, 2, 4, 0, 5, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 5, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, + 4, 3, 4, 1, 5, 1, 4, 5, 4, 1, + 1, 1, 5, 6, 5, 6, 5, 4, 5, 1, + 1, 3, 4, 3, 2, 2, 4, 5, 4, 5, + 4, 5, 1, 2, 2, 1, 2, 2, 2, 1, + 3, 1, 3, 4, 4, 6, 1, 1, 0, 1, + 0, 1, 2, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 1, 1, 1, 1, }; short yydefred[] = { 1, - 0, 7, 0, 44, 55, 53, 0, 53, 8, 45, - 9, 11, 0, 46, 47, 48, 0, 0, 0, 62, - 63, 14, 4, 156, 0, 0, 129, 0, 151, 0, - 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 164, 0, + 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, + 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, + 64, 14, 4, 157, 0, 0, 130, 0, 152, 0, + 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 165, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 119, 121, 0, 0, 0, 0, 157, 50, - 0, 56, 0, 61, 0, 7, 172, 175, 174, 173, + 0, 0, 120, 122, 0, 0, 0, 0, 158, 51, + 0, 57, 0, 62, 0, 7, 173, 176, 175, 174, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, - 4, 4, 0, 0, 0, 0, 0, 146, 0, 0, - 0, 0, 76, 0, 170, 0, 135, 0, 0, 0, - 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 167, 168, 169, 171, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 147, 0, 0, + 0, 0, 77, 0, 171, 0, 136, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 168, 169, 170, 172, 0, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 49, 58, 0, 0, 0, - 74, 0, 0, 78, 0, 0, 0, 0, 0, 0, - 0, 4, 150, 152, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 133, 0, 0, 108, 26, 0, 0, - 19, 0, 0, 0, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 50, 59, 0, 0, + 0, 75, 0, 0, 79, 0, 0, 0, 0, 0, + 0, 0, 4, 151, 153, 0, 0, 0, 0, 0, + 0, 0, 112, 0, 134, 0, 0, 109, 27, 0, + 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, - 0, 0, 131, 0, 0, 60, 59, 52, 0, 3, - 0, 154, 0, 0, 112, 0, 41, 0, 42, 0, - 0, 0, 0, 165, 0, 0, 35, 40, 0, 0, - 0, 153, 162, 77, 0, 136, 0, 138, 0, 110, - 0, 0, 0, 0, 0, 140, 0, 0, 0, 118, - 0, 116, 0, 127, 0, 132, 0, 75, 0, 79, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 137, - 139, 126, 0, 124, 0, 0, 141, 117, 0, 122, - 128, 114, 64, 155, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 125, 123, 73, 7, 27, 28, 0, - 0, 23, 24, 0, 31, 0, 0, 0, 21, 0, - 0, 0, 30, 5, 0, 29, 0, 0, 32, 0, - 22, + 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 0, 61, 60, 53, + 0, 3, 0, 155, 0, 0, 113, 0, 42, 0, + 43, 0, 0, 0, 0, 166, 0, 0, 36, 41, + 0, 0, 0, 154, 163, 78, 0, 137, 0, 139, + 0, 111, 0, 0, 0, 0, 0, 141, 0, 0, + 0, 119, 0, 117, 0, 128, 0, 133, 0, 76, + 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 138, 140, 127, 0, 125, 0, 0, 142, 118, + 0, 123, 129, 115, 65, 156, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 124, 74, 7, 28, + 29, 0, 0, 24, 25, 0, 32, 0, 0, 0, + 22, 0, 0, 0, 31, 5, 0, 30, 0, 0, + 33, 0, 23, }; short yydgoto[] = { 1, - 9, 66, 10, 18, 95, 17, 86, 337, 89, 326, - 3, 11, 12, 68, 342, 261, 70, 71, 72, 73, - 74, 75, 76, 267, 78, 268, 257, 259, 262, 270, - 258, 260, 113, 197, 91, 79, 236, 81, 83, 178, - 248, 142, 265, 13, 2, 14, 15, 16, 85, 254, + 9, 66, 10, 18, 95, 17, 86, 339, 89, 328, + 3, 11, 12, 68, 344, 263, 70, 71, 72, 73, + 74, 75, 76, 269, 78, 270, 259, 261, 264, 272, + 260, 262, 113, 198, 91, 79, 238, 81, 83, 179, + 250, 142, 267, 13, 2, 14, 15, 16, 85, 256, }; short yysindex[] = { 0, - 0, 0, -120, 0, 0, 0, -50, 0, 0, 0, - 0, 0, 661, 0, 0, 0, -240, -238, -29, 0, - 0, 0, 0, 0, -32, -32, 0, -8, 0, 2115, - 0, 0, -4, 31, 32, 35, -35, 2115, 56, 57, - 61, 1037, 981, -32, 1100, 1364, -218, 0, 0, -32, - 2115, 2115, 2115, 2115, 2115, 2115, 1420, 0, 2115, 2115, - 1476, -32, -32, -32, -32, 2115, -205, 0, 201, 306, - -63, -62, 0, 0, -24, 67, 45, 65, 0, 0, - -15, 0, -149, 0, -144, 0, 0, 0, 0, 0, - 2115, 80, 2115, 841, -15, -149, 0, 0, 0, 0, - 0, 0, 85, 306, 86, 1535, 981, 0, 841, 0, - -63, 65, 0, 2115, 0, 88, 0, 841, -28, 4, - -51, 2115, 0, 65, 340, 340, 340, -76, -76, 49, - -31, 340, 340, 0, -82, 0, 0, 0, 0, 841, - -15, 0, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, - 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, - 2115, 2115, 2115, 0, 0, 48, 2115, 2115, 2115, 2115, - 2115, 2115, 1710, 0, 2115, 0, 0, -43, -116, 241, - 0, 2115, 1193, 0, -15, 2115, 2115, 2115, 2115, 106, - 1769, 0, 0, 0, -23, 20, 104, 2115, 65, 1825, - 1881, 0, 36, 0, 2115, 62, 0, 0, -232, -232, - 0, -232, -232, -134, 0, -46, 1131, 841, 689, 316, - 859, 306, 3778, 1980, 3652, 1299, 480, 396, 340, 340, - 2115, 0, 1944, 2115, 0, 128, -58, 22, -56, 24, - 33, 28, 0, -19, 306, 0, 0, 0, 2115, 0, - 134, 0, 2115, 2115, 0, -232, 0, 142, 0, 148, - -232, 149, 150, 0, 153, 201, 0, 0, 154, 138, - 2115, 0, 0, 0, -7, 0, 2, 0, 16, 0, - 70, 2115, 73, 2115, 30, 0, 18, 101, 2115, 0, - 75, 0, 78, 0, 81, 0, 151, 0, 1247, 0, - 90, 90, 90, 90, 2115, 90, 2115, 167, 0, 0, - 0, 0, 103, 0, 3869, 84, 0, 0, 170, 0, - 0, 0, 0, 0, 0, -205, -205, -207, -207, 176, - -205, 168, 90, 0, 0, 0, 0, 0, 0, 90, - 192, 0, 0, 90, 0, 1769, -205, 402, 0, 2115, - -205, 207, 0, 0, 208, 0, 90, 90, 0, -207, - 0, + 0, 0, -66, 0, 0, 0, -48, 0, 0, 0, + 0, 0, 645, 0, 0, 0, -232, -227, -27, 0, + 0, 0, 0, 0, -23, -23, 0, -6, 0, 2099, + 0, 0, 13, 20, 24, 25, -34, 2099, 27, 28, + 29, 1021, 965, -23, 1084, 1348, -217, 0, 0, -23, + 2099, 2099, 2099, 2099, 2099, 2099, 1404, 0, 2099, 2099, + 1460, -23, -23, -23, -23, 2099, -206, 0, 335, 3814, + -73, -68, 0, 0, -47, 40, 32, 61, 0, 0, + -39, 0, -157, 0, -145, 0, 0, 0, 0, 0, + 2099, 73, 2099, 825, -39, -157, 0, 0, 0, 0, + 0, 0, 75, 3814, 78, 1519, 965, 0, 825, 0, + -73, 61, 0, 2099, 0, 77, 0, 825, -16, -9, + -51, 2099, 0, 61, 87, 87, 87, -86, -86, 33, + -40, 87, 87, 0, -81, 0, 0, 0, 0, 825, + -39, 0, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, + 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, + 2099, 2099, 2099, 2099, 0, 0, 30, 2099, 2099, 2099, + 2099, 2099, 2099, 1694, 0, 2099, 0, 0, -49, -118, + 189, 0, 2099, 353, 0, -39, 2099, 2099, 2099, 2099, + 104, 1753, 0, 0, 0, -24, 8, 85, 2099, 61, + 1809, 1865, 0, 23, 0, 2099, 54, 0, 0, -269, + -269, 0, -269, -269, -269, -151, 0, -43, 1121, 825, + 673, 50, 363, 3814, 1233, 2459, 3640, 2309, 266, -82, + 87, 87, 2099, 0, 1928, 2099, 0, 111, 51, 12, + 76, 14, 90, 39, 0, -22, 3814, 0, 0, 0, + 2099, 0, 121, 0, 2099, 2099, 0, -269, 0, 124, + 0, 125, -269, 126, 130, 0, 112, 335, 0, 0, + 131, 136, 2099, 0, 0, 0, -14, 0, 1, 0, + 4, 0, 133, 2099, 55, 2099, 49, 0, 6, 197, + 2099, 0, 89, 0, 94, 0, 100, 0, 144, 0, + 1175, 0, 92, 92, 92, 92, 2099, 92, 2099, 171, + 0, 0, 0, 0, 202, 0, 3900, 108, 0, 0, + 188, 0, 0, 0, 0, 0, 0, -206, -206, -238, + -238, 199, -206, 211, 92, 0, 0, 0, 0, 0, + 0, 92, 241, 0, 0, 92, 0, 1753, -206, 326, + 0, 2099, -206, 256, 0, 0, 259, 0, 92, 92, + 0, -238, 0, }; short yyrindex[] = { 0, - 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, + 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2156, -17, 0, - 0, 2675, 2720, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2228, 426, 0, + 0, 2833, 2876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 0, -3, 108, - 2774, 2860, 0, 0, 2034, 121, 0, 140, 0, 0, - 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, - 2203, 0, 0, 3504, 0, 145, 0, 0, 0, 0, - 0, 0, 0, 3772, 0, 0, 252, 0, 3551, 541, - 602, 2270, 0, 0, 0, 442, 0, 3587, 2774, 0, - 0, 2203, 0, 2324, 3010, 3049, 3096, 2911, 2972, 2439, - 0, 3147, 3193, 0, 0, 0, 0, 0, 0, 3633, + 0, 0, 0, 0, 0, 0, 59, 0, -10, 2038, + 2952, 2995, 0, 0, 2274, 2140, 0, 200, 0, 0, + 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, + 2421, 0, 0, 105, 0, 198, 0, 0, 0, 0, + 0, 0, 0, 3753, 0, 0, 319, 0, 3505, 525, + 586, 2510, 0, 0, 0, 2185, 0, 3541, 2952, 0, + 0, 2421, 0, 2553, 3112, 3150, 3188, -37, 3069, 2597, + 0, 3231, 3269, 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2522, 0, 0, 0, 0, 925, - 0, 252, 0, 0, 0, 263, 0, 0, 0, 0, - 223, 0, 0, 0, 0, 282, 0, 0, 2576, 0, - 0, 0, 0, 0, 0, 2624, 0, 0, -1, 26, - 0, 27, 51, 718, 0, 0, 3752, 1576, 1632, 3368, - 3413, 3799, 0, -38, 3710, 3678, 3060, 3459, 3285, 3332, + 0, 0, 0, 0, 0, 2673, 0, 0, 0, 0, + 909, 0, 319, 0, 0, 0, 320, 0, 0, 0, + 0, 306, 0, 0, 0, 0, 325, 0, 0, 2789, + 0, 0, 0, 0, 0, 0, 2716, 0, 0, -5, + 22, 0, 68, 69, 70, 702, 0, 0, 3741, 1296, + 1560, 3386, 3424, 3796, 0, 3703, 3660, 3622, 1616, 3467, + 3305, 3348, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3809, 0, 0, 0, + 309, 0, 0, 0, 0, 2421, 0, 79, 0, 0, + 0, 0, 330, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3835, 0, 0, 0, 273, 0, - 0, 0, 0, 2203, 0, 59, 0, 0, 0, 0, - 293, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, - 0, 0, 0, 0, 2380, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 79, 79, 186, 186, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 79, 925, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 0, + 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, + 0, 0, 0, 0, 0, 0, 1982, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 59, 154, + 154, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 340, 59, 909, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 154, 0, }; short yygindex[] = { 0, - 0, 0, 0, 349, 328, 0, -48, 0, 679, 378, - -84, 0, 0, 0, -298, -13, 4075, 2485, 0, 0, - 0, 0, 0, 363, 908, 0, 0, 233, -168, 38, - 72, 196, -77, -175, 999, 0, 0, 0, 0, 290, - 0, -249, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 374, 351, 0, -12, 0, 946, 413, + -83, 0, 0, 0, -311, -13, 4007, 2893, 0, 0, + 0, 0, 0, 372, -8, 0, 0, 246, -131, 43, + 86, 208, -45, -169, 987, 0, 0, 0, 0, 308, + 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4359 +#define YYTABLESIZE 4293 short yytable[] = { 69, - 62, 180, 93, 62, 102, 93, 251, 203, 20, 206, - 207, 201, 283, 181, 167, 246, 80, 272, 82, 93, - 93, 296, 269, 149, 93, 57, 149, 169, 171, 84, - 343, 93, 121, 309, 290, 97, 292, 15, 122, 18, - 149, 149, 310, 131, 204, 149, 149, 135, 186, 187, - 188, 189, 190, 191, 93, 15, 311, 18, 317, 168, - 170, 361, 169, 273, 147, 148, 38, 16, 340, 341, - 98, 99, 141, 149, 100, 149, 338, 339, 25, 23, - 291, 345, 293, 62, 38, 16, 295, 233, 316, 57, - 23, 17, 195, 196, 168, 105, 106, 353, 172, 37, - 107, 356, 308, 174, 39, 149, 173, 23, 175, 17, - 177, 25, 179, 319, 25, 25, 25, 37, 25, 182, - 25, 25, 15, 25, 192, 294, 193, 200, 202, 209, - 210, 212, 213, 214, 215, 216, 330, 25, 234, 205, - 249, 62, 25, 271, 274, 4, 5, 6, 70, 7, - 8, 70, 282, 237, 238, 239, 240, 241, 242, 244, - 280, 130, 312, 148, 130, 70, 70, 289, 196, 25, - 231, 297, 256, 210, 298, 210, 300, 266, 130, 130, - 67, 355, 301, 130, 275, 20, 277, 279, 302, 303, - 304, 281, 305, 318, 306, 334, 307, 314, 67, 320, - 70, 25, 321, 25, 25, 322, 19, 333, 335, 323, - 336, 130, 325, 130, 147, 148, 344, 285, 20, 287, - 288, 20, 20, 20, 87, 20, 346, 20, 20, 88, - 20, 350, 67, 93, 93, 93, 93, 166, 147, 148, - 147, 148, 93, 130, 20, 147, 148, 357, 358, 20, - 147, 148, 348, 51, 149, 149, 149, 149, 93, 93, - 101, 93, 93, 149, 2, 147, 148, 57, 313, 149, - 149, 149, 149, 147, 148, 196, 20, 147, 148, 149, - 149, 34, 149, 149, 149, 149, 149, 149, 149, 147, - 148, 149, 160, 256, 149, 149, 149, 43, 147, 148, - 43, 43, 43, 36, 43, 232, 43, 43, 20, 43, - 20, 20, 147, 148, 147, 148, 147, 148, 147, 148, - 147, 148, 161, 43, 147, 148, 147, 148, 43, 147, - 148, 158, 69, 39, 25, 25, 25, 25, 25, 25, - 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 36, 43, 21, 25, 25, 96, - 25, 25, 25, 25, 25, 250, 147, 148, 156, 25, - 25, 25, 25, 25, 25, 77, 211, 25, 332, 70, - 70, 70, 70, 352, 263, 185, 25, 43, 25, 25, - 43, 0, 130, 130, 130, 130, 167, 147, 148, 147, - 148, 130, 0, 0, 70, 70, 167, 130, 130, 130, - 130, 67, 67, 67, 67, 0, 0, 130, 130, 0, - 130, 130, 130, 130, 130, 130, 130, 0, 149, 130, - 167, 0, 130, 130, 130, 0, 67, 67, 149, 0, - 0, 20, 20, 20, 20, 20, 20, 0, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 0, 149, 0, 20, 20, 0, 20, 20, 20, - 20, 20, 143, 144, 145, 146, 20, 20, 20, 20, - 20, 20, 156, 0, 20, 156, 167, 0, 0, 0, - 0, 0, 0, 20, 0, 20, 20, 147, 148, 156, - 156, 0, 0, 0, 156, 0, 4, 5, 6, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 149, 0, - 43, 43, 43, 43, 43, 43, 354, 43, 43, 43, - 0, 0, 156, 43, 156, 0, 43, 43, 43, 43, - 0, 0, 0, 43, 43, 0, 43, 43, 43, 43, - 43, 0, 0, 0, 0, 43, 43, 43, 43, 43, - 43, 0, 0, 43, 156, 0, 0, 0, 0, 0, - 167, 0, 43, 172, 43, 43, 172, 172, 172, 0, - 172, 156, 172, 172, 156, 172, 150, 0, 0, 0, - 0, 0, 151, 152, 153, 154, 0, 0, 156, 156, - 0, 0, 149, 156, 172, 155, 157, 158, 159, 160, - 161, 162, 0, 0, 163, 0, 0, 164, 165, 166, - 0, 162, 0, 0, 163, 0, 0, 164, 165, 166, - 0, 156, 0, 156, 173, 0, 0, 173, 173, 173, - 0, 173, 113, 173, 173, 113, 173, 0, 163, 0, - 0, 164, 165, 166, 0, 0, 0, 0, 0, 113, - 113, 0, 0, 156, 113, 173, 172, 4, 5, 6, - 0, 7, 8, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 0, 331, 153, 154, 0, 0, 0, 0, - 0, 67, 0, 52, 113, 0, 62, 64, 50, 0, - 57, 162, 65, 60, 163, 59, 0, 164, 165, 166, - 347, 0, 0, 156, 156, 156, 156, 349, 0, 58, - 108, 351, 156, 117, 63, 0, 0, 173, 156, 156, - 156, 156, 0, 0, 359, 360, 0, 0, 156, 156, - 0, 156, 156, 156, 156, 156, 156, 156, 0, 0, - 156, 61, 0, 156, 156, 156, 0, 0, 66, 176, - 0, 66, 0, 0, 0, 0, 151, 152, 153, 154, - 0, 0, 0, 184, 0, 0, 66, 0, 0, 167, - 0, 0, 0, 23, 161, 162, 53, 0, 163, 0, - 0, 164, 165, 166, 0, 0, 0, 172, 172, 172, - 172, 172, 0, 172, 172, 172, 0, 0, 0, 172, - 66, 149, 156, 156, 156, 156, 0, 0, 0, 208, - 172, 156, 172, 172, 172, 172, 172, 156, 156, 156, - 156, 172, 172, 172, 172, 172, 172, 156, 156, 172, - 156, 156, 156, 156, 156, 156, 156, 0, 172, 156, - 172, 172, 156, 156, 156, 0, 247, 0, 173, 173, - 173, 173, 173, 255, 173, 173, 173, 0, 0, 0, - 173, 0, 0, 113, 113, 113, 113, 0, 0, 0, - 0, 173, 113, 173, 173, 173, 173, 173, 113, 113, - 113, 113, 173, 173, 173, 173, 173, 173, 113, 113, - 173, 113, 113, 113, 113, 113, 113, 113, 0, 173, - 113, 173, 173, 113, 113, 113, 22, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 167, 33, 34, 35, 36, 0, 0, 0, 37, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 167, - 112, 44, 45, 46, 47, 48, 49, 43, 124, 51, - 43, 43, 43, 149, 43, 0, 43, 43, 54, 43, - 55, 56, 0, 0, 0, 151, 0, 153, 154, 0, - 0, 149, 0, 43, 0, 0, 0, 0, 43, 66, - 66, 66, 66, 161, 162, 0, 0, 163, 112, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 66, 43, 62, 64, 50, 0, - 57, 199, 65, 60, 92, 59, 0, 0, 0, 112, + 207, 62, 181, 104, 168, 102, 104, 204, 168, 248, + 20, 208, 62, 253, 58, 285, 274, 170, 298, 345, + 104, 104, 172, 202, 80, 104, 311, 148, 149, 82, + 15, 84, 121, 93, 112, 18, 150, 342, 343, 122, + 150, 312, 124, 131, 313, 182, 319, 135, 15, 169, + 363, 275, 97, 18, 171, 104, 340, 341, 26, 98, + 271, 347, 39, 99, 100, 62, 105, 106, 107, 235, + 293, 141, 295, 23, 170, 173, 205, 355, 58, 174, + 39, 358, 112, 23, 187, 188, 189, 190, 191, 192, + 175, 26, 196, 197, 26, 26, 26, 297, 26, 23, + 26, 26, 178, 26, 176, 200, 169, 318, 16, 17, + 20, 180, 183, 112, 193, 203, 201, 26, 194, 38, + 236, 321, 26, 206, 40, 276, 16, 17, 20, 210, + 211, 213, 214, 215, 216, 217, 218, 38, 251, 62, + 168, 310, 15, 292, 284, 149, 149, 282, 149, 26, + 291, 307, 233, 21, 239, 240, 241, 242, 243, 244, + 246, 300, 149, 149, 303, 304, 305, 149, 294, 197, + 306, 308, 150, 258, 211, 332, 211, 168, 268, 316, + 273, 26, 296, 26, 26, 277, 21, 279, 281, 21, + 21, 21, 283, 21, 309, 21, 21, 149, 21, 4, + 5, 6, 325, 7, 8, 299, 154, 155, 19, 150, + 302, 335, 21, 322, 327, 148, 149, 21, 323, 287, + 357, 289, 290, 163, 324, 314, 164, 167, 338, 165, + 166, 167, 337, 87, 104, 104, 104, 104, 88, 346, + 68, 104, 112, 104, 21, 148, 149, 112, 2, 104, + 104, 104, 104, 148, 149, 350, 148, 149, 68, 104, + 104, 101, 104, 104, 104, 104, 104, 104, 104, 348, + 315, 104, 148, 149, 148, 149, 21, 197, 21, 21, + 352, 44, 148, 149, 44, 44, 44, 234, 44, 320, + 44, 44, 68, 44, 336, 258, 359, 148, 149, 360, + 148, 149, 148, 149, 148, 149, 52, 44, 148, 149, + 148, 149, 44, 252, 26, 26, 26, 26, 26, 26, + 58, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 69, 148, 149, 26, 26, 44, + 26, 26, 26, 26, 26, 148, 149, 148, 149, 26, + 26, 26, 26, 26, 26, 163, 168, 26, 164, 161, + 37, 165, 166, 167, 35, 162, 26, 159, 26, 26, + 40, 44, 148, 149, 44, 37, 149, 149, 149, 149, + 35, 21, 96, 149, 77, 149, 148, 149, 150, 212, + 354, 149, 149, 254, 334, 164, 255, 265, 165, 166, + 167, 149, 149, 186, 149, 149, 149, 149, 149, 21, + 21, 21, 21, 21, 21, 157, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 148, + 149, 0, 21, 21, 0, 21, 21, 21, 21, 21, + 0, 0, 0, 168, 21, 21, 21, 21, 21, 21, + 356, 0, 21, 168, 4, 5, 6, 0, 7, 8, + 0, 21, 0, 21, 21, 0, 150, 0, 0, 150, + 0, 68, 68, 68, 68, 150, 0, 0, 68, 0, + 0, 0, 0, 150, 150, 150, 0, 0, 150, 0, + 0, 0, 0, 148, 149, 0, 68, 68, 148, 149, + 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, + 0, 44, 44, 44, 0, 0, 150, 44, 150, 0, + 44, 44, 44, 44, 0, 0, 0, 44, 44, 0, + 44, 44, 44, 44, 44, 0, 0, 0, 0, 44, + 44, 44, 44, 44, 44, 0, 0, 44, 150, 0, + 0, 0, 152, 153, 154, 155, 44, 173, 44, 44, + 173, 173, 173, 0, 173, 157, 173, 173, 157, 173, + 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, + 0, 0, 157, 157, 0, 0, 0, 157, 173, 0, + 0, 4, 5, 6, 0, 7, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, + 0, 0, 0, 147, 0, 157, 0, 157, 174, 0, + 0, 174, 174, 174, 0, 174, 114, 174, 174, 114, + 174, 148, 149, 151, 0, 0, 0, 0, 0, 152, + 153, 154, 155, 114, 114, 0, 0, 157, 114, 174, + 173, 154, 156, 158, 159, 160, 161, 162, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 0, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 52, 114, 0, + 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, + 0, 0, 0, 0, 0, 0, 0, 150, 150, 150, + 150, 0, 0, 58, 150, 0, 150, 0, 63, 0, + 0, 174, 150, 150, 150, 150, 329, 330, 331, 0, + 333, 0, 150, 150, 0, 150, 150, 150, 150, 150, + 150, 150, 0, 0, 150, 61, 0, 150, 150, 150, + 0, 0, 67, 0, 0, 67, 0, 349, 0, 0, + 0, 0, 0, 0, 351, 0, 0, 0, 353, 0, + 67, 0, 0, 168, 0, 0, 0, 23, 0, 0, + 53, 361, 362, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 173, 173, 173, 173, 0, 173, 173, 173, + 0, 0, 0, 173, 67, 150, 157, 157, 157, 157, + 0, 0, 0, 157, 173, 157, 173, 173, 173, 173, + 173, 157, 157, 157, 157, 173, 173, 173, 173, 173, + 173, 157, 157, 173, 157, 157, 157, 157, 157, 157, + 157, 0, 173, 157, 173, 173, 157, 157, 157, 0, + 0, 0, 174, 174, 174, 174, 174, 0, 174, 174, + 174, 0, 0, 0, 174, 0, 0, 114, 114, 114, + 114, 0, 0, 0, 114, 174, 114, 174, 174, 174, + 174, 174, 114, 114, 114, 114, 174, 174, 174, 174, + 174, 174, 114, 114, 174, 114, 114, 114, 114, 114, + 114, 114, 0, 174, 114, 174, 174, 114, 114, 114, + 22, 24, 25, 26, 27, 28, 0, 29, 30, 31, + 0, 0, 0, 32, 0, 168, 33, 34, 35, 36, + 0, 0, 0, 37, 38, 0, 39, 40, 41, 42, + 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, + 49, 44, 0, 51, 44, 44, 44, 150, 44, 0, + 44, 44, 54, 44, 55, 56, 0, 0, 67, 152, + 0, 154, 155, 0, 0, 0, 0, 44, 0, 0, + 0, 0, 44, 67, 67, 67, 67, 162, 163, 0, + 67, 164, 0, 0, 165, 166, 167, 108, 0, 0, + 117, 0, 0, 0, 0, 0, 0, 52, 67, 44, + 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, + 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 177, 0, 63, 114, + 115, 44, 0, 0, 44, 0, 123, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 136, 137, + 138, 139, 0, 52, 0, 61, 62, 64, 50, 0, + 57, 0, 65, 60, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 115, 0, 63, 0, 0, 43, 123, 0, - 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 136, 137, 138, 139, 0, 0, 0, 0, 0, 52, - 0, 61, 62, 64, 50, 0, 57, 0, 65, 60, - 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63, 0, 209, 23, 0, 0, + 53, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 23, 0, 198, 53, 0, 0, 0, + 0, 61, 0, 154, 155, 0, 52, 0, 0, 62, + 64, 50, 0, 57, 249, 65, 60, 0, 59, 162, + 163, 257, 0, 164, 0, 0, 165, 166, 167, 0, + 0, 0, 0, 23, 0, 0, 53, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 153, - 154, 0, 52, 0, 0, 62, 64, 50, 0, 57, - 0, 65, 60, 0, 59, 161, 162, 153, 0, 163, - 0, 0, 164, 165, 166, 0, 112, 0, 0, 23, - 0, 112, 53, 63, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 43, 43, 0, 43, 43, 43, - 61, 0, 0, 43, 0, 0, 43, 43, 43, 43, - 0, 0, 0, 43, 43, 0, 43, 43, 43, 43, - 43, 0, 0, 0, 0, 43, 43, 43, 43, 43, - 43, 167, 23, 43, 0, 53, 0, 0, 0, 0, - 0, 0, 43, 252, 43, 43, 253, 110, 25, 26, - 27, 28, 88, 29, 30, 31, 0, 0, 0, 32, - 0, 0, 0, 149, 0, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, + 0, 44, 44, 44, 61, 0, 0, 44, 0, 0, + 44, 44, 44, 44, 0, 0, 0, 44, 44, 0, + 44, 44, 44, 44, 44, 0, 0, 0, 0, 44, + 44, 44, 44, 44, 44, 0, 23, 44, 0, 53, + 0, 168, 0, 0, 0, 326, 44, 0, 44, 44, + 0, 110, 25, 26, 27, 28, 88, 29, 30, 31, + 0, 0, 0, 32, 0, 0, 0, 157, 0, 0, + 0, 0, 0, 150, 38, 0, 39, 40, 41, 42, + 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, + 49, 0, 0, 51, 0, 168, 0, 0, 0, 0, + 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, + 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, + 286, 0, 0, 0, 0, 157, 0, 150, 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, 0, 51, - 0, 0, 0, 167, 0, 0, 0, 324, 54, 0, - 55, 56, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 0, 156, - 0, 0, 0, 0, 0, 149, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 51, 0, 167, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 0, 0, 0, 0, 0, 116, 25, 26, 27, - 28, 0, 29, 30, 31, 0, 0, 0, 32, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 167, - 44, 45, 46, 47, 48, 49, 52, 0, 51, 62, - 64, 50, 0, 57, 0, 65, 60, 54, 59, 55, - 56, 0, 0, 0, 0, 0, 0, 151, 152, 153, - 154, 149, 120, 0, 0, 0, 0, 63, 0, 0, - 0, 157, 158, 159, 160, 161, 162, 0, 0, 163, - 0, 0, 164, 165, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 0, 0, 0, 0, 54, 0, + 55, 56, 0, 0, 0, 0, 88, 0, 0, 88, + 116, 25, 26, 27, 28, 0, 29, 30, 31, 0, + 0, 0, 32, 88, 88, 150, 0, 0, 88, 0, + 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, + 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, + 52, 0, 51, 62, 64, 50, 0, 57, 88, 65, + 60, 54, 59, 55, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 120, 152, 153, 154, + 155, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 158, 159, 160, 161, 162, 163, 0, 0, 164, + 0, 0, 165, 166, 167, 0, 52, 0, 61, 62, + 64, 50, 0, 57, 130, 65, 60, 0, 59, 0, + 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, + 0, 152, 153, 154, 155, 0, 0, 63, 0, 0, + 0, 0, 0, 53, 156, 158, 159, 160, 161, 162, + 163, 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, 52, 0, 61, 62, 64, 50, 0, 57, - 130, 65, 60, 0, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, - 152, 153, 154, 63, 0, 0, 0, 0, 0, 53, - 0, 0, 155, 157, 158, 159, 160, 161, 162, 0, - 0, 163, 0, 0, 164, 165, 166, 0, 52, 0, - 61, 62, 64, 50, 0, 57, 0, 65, 60, 0, - 59, 0, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 151, 152, 153, 154, 0, 0, 63, - 0, 0, 0, 0, 0, 53, 155, 157, 158, 159, - 160, 161, 162, 0, 0, 163, 0, 0, 164, 165, - 166, 0, 0, 0, 0, 0, 61, 52, 134, 0, - 62, 64, 50, 0, 57, 194, 65, 60, 0, 59, - 0, 0, 0, 0, 0, 151, 152, 153, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, - 0, 53, 160, 161, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 87, 0, 0, 87, - 24, 25, 26, 27, 28, 61, 29, 30, 31, 0, - 0, 0, 32, 87, 87, 0, 0, 0, 87, 0, + 0, 65, 60, 0, 59, 0, 0, 0, 0, 0, + 0, 0, 0, 151, 0, 0, 0, 0, 0, 152, + 153, 154, 155, 63, 0, 0, 0, 0, 0, 53, + 0, 0, 156, 158, 159, 160, 161, 162, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, + 61, 52, 134, 0, 62, 64, 50, 0, 57, 195, + 65, 60, 0, 59, 0, 0, 0, 88, 88, 88, + 88, 0, 0, 0, 88, 0, 88, 0, 0, 0, + 0, 0, 63, 88, 0, 53, 0, 0, 0, 0, + 0, 0, 88, 88, 0, 88, 88, 88, 88, 88, + 89, 0, 0, 89, 24, 25, 26, 27, 28, 61, + 29, 30, 31, 0, 0, 0, 32, 89, 89, 0, + 0, 0, 89, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, + 46, 47, 48, 49, 53, 0, 51, 0, 0, 0, + 0, 0, 89, 0, 0, 54, 90, 55, 56, 90, + 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, + 0, 0, 32, 90, 90, 0, 0, 0, 90, 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, - 53, 0, 51, 0, 0, 0, 0, 0, 87, 0, - 0, 54, 88, 55, 56, 88, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 0, 0, 0, 32, 88, - 88, 0, 0, 0, 88, 0, 0, 0, 0, 38, + 0, 0, 51, 0, 0, 0, 0, 0, 90, 0, + 0, 54, 0, 55, 56, 0, 24, 25, 26, 27, + 28, 0, 29, 30, 31, 0, 52, 0, 32, 62, + 64, 50, 0, 57, 245, 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 0, 0, 51, 0, - 0, 0, 0, 0, 88, 0, 0, 54, 0, 55, - 56, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 52, 0, 32, 62, 64, 50, 0, 57, - 243, 65, 60, 0, 59, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 63, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 0, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 61, 52, 0, 32, 62, 64, 50, 0, 57, 0, - 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 63, 51, 0, 53, 0, 0, 0, 0, - 0, 0, 54, 0, 55, 56, 0, 87, 87, 87, - 87, 0, 0, 0, 0, 0, 87, 52, 0, 61, - 62, 64, 50, 87, 57, 276, 65, 60, 0, 59, - 0, 0, 87, 87, 0, 87, 87, 87, 87, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 88, 88, 88, 0, 0, 0, - 0, 0, 88, 52, 0, 61, 62, 64, 50, 0, - 57, 278, 65, 60, 0, 59, 0, 0, 88, 88, - 0, 88, 88, 88, 88, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, - 28, 61, 29, 30, 31, 0, 52, 0, 32, 62, - 64, 50, 0, 57, 286, 65, 60, 0, 59, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 53, 63, 51, 0, + 44, 45, 46, 47, 48, 49, 0, 63, 51, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 55, - 56, 0, 0, 0, 22, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 61, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 56, 0, 0, 0, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 61, 52, 0, 32, 62, 64, + 50, 0, 57, 0, 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 0, 51, 0, 53, - 167, 0, 0, 0, 115, 0, 54, 115, 55, 56, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 115, 115, 32, 0, 0, 115, 0, 0, 0, - 0, 0, 149, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 51, 115, 0, 115, 0, 0, 0, - 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 52, 0, 32, - 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 63, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 142, 0, 0, 142, + 45, 46, 47, 48, 49, 0, 63, 51, 0, 53, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 0, 89, 89, 89, 89, 0, 0, 0, 89, 0, + 89, 52, 0, 61, 62, 64, 50, 0, 57, 278, + 65, 60, 0, 59, 0, 0, 89, 89, 0, 89, + 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 0, 0, 0, 0, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, + 90, 0, 0, 0, 90, 0, 90, 52, 0, 61, + 62, 64, 50, 0, 57, 280, 65, 60, 0, 59, + 0, 0, 90, 90, 0, 90, 90, 90, 90, 90, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, + 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 61, 29, 30, 31, 0, - 0, 0, 32, 142, 142, 0, 0, 0, 142, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, + 52, 0, 32, 62, 64, 50, 0, 57, 288, 65, + 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, - 53, 0, 51, 158, 0, 0, 158, 0, 142, 0, - 0, 54, 0, 55, 56, 0, 0, 0, 0, 0, - 158, 158, 0, 0, 0, 158, 151, 152, 153, 154, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, - 0, 158, 159, 160, 161, 162, 0, 0, 163, 0, - 0, 164, 165, 166, 0, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 115, 115, 115, 0, - 159, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 115, 115, 115, 115, 0, 158, 0, 159, 159, 0, - 115, 115, 159, 115, 115, 115, 115, 115, 115, 115, - 0, 0, 115, 0, 0, 115, 115, 115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 0, 159, 0, 144, 0, 0, 0, 0, 0, + 53, 63, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 0, 55, 56, 0, 0, 0, 22, 24, + 25, 26, 27, 28, 0, 29, 30, 31, 61, 0, + 0, 32, 95, 0, 0, 95, 0, 0, 0, 0, + 0, 0, 38, 0, 39, 40, 41, 42, 43, 95, + 95, 0, 0, 44, 45, 46, 47, 48, 49, 0, + 0, 51, 0, 53, 0, 0, 0, 0, 0, 0, + 54, 0, 55, 56, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 95, 0, 0, 32, 71, 0, + 0, 71, 0, 0, 0, 0, 0, 0, 38, 0, + 39, 40, 41, 42, 43, 71, 71, 0, 0, 44, + 45, 46, 47, 48, 49, 0, 0, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 144, 144, 32, 0, 0, 144, 0, 0, 0, - 0, 0, 159, 0, 38, 0, 39, 40, 41, 42, + 71, 52, 0, 32, 62, 64, 50, 0, 57, 0, + 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 51, 144, 0, 144, 0, 0, 0, - 94, 0, 54, 94, 55, 56, 0, 142, 142, 142, - 142, 0, 0, 0, 0, 0, 142, 94, 94, 0, - 0, 0, 142, 142, 142, 142, 144, 0, 0, 0, - 0, 0, 142, 142, 0, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 142, 0, 0, 142, 142, 142, - 0, 0, 94, 0, 158, 158, 158, 158, 0, 107, - 0, 0, 107, 158, 0, 0, 0, 0, 0, 158, - 158, 158, 158, 0, 0, 0, 107, 107, 0, 158, - 158, 107, 158, 158, 158, 158, 158, 158, 158, 90, - 90, 158, 0, 0, 158, 158, 158, 0, 0, 0, - 0, 103, 0, 0, 0, 0, 0, 111, 90, 119, - 0, 107, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 159, 159, 159, 159, 0, 90, 90, 90, 90, - 159, 0, 0, 0, 0, 0, 159, 159, 159, 159, - 0, 107, 68, 0, 0, 68, 159, 159, 0, 159, - 159, 159, 159, 159, 159, 159, 0, 0, 159, 68, - 68, 159, 159, 159, 68, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 0, 144, 144, 144, 144, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, - 144, 144, 144, 144, 68, 0, 71, 0, 0, 0, - 144, 144, 0, 144, 144, 144, 144, 144, 144, 144, - 0, 0, 144, 71, 71, 144, 144, 144, 71, 0, - 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 235, 94, 94, 94, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 106, 0, 71, 106, 71, 0, - 0, 0, 0, 0, 264, 0, 94, 94, 0, 94, - 0, 106, 106, 0, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 107, 107, 107, 0, 145, 106, 0, 145, 107, - 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, - 0, 0, 145, 145, 0, 107, 107, 145, 107, 107, - 107, 107, 107, 107, 107, 0, 106, 107, 0, 0, - 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, - 158, 0, 0, 158, 0, 0, 0, 145, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 158, 0, - 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 68, 68, 68, 68, 0, 0, 0, - 0, 0, 68, 0, 0, 0, 0, 0, 68, 68, - 68, 68, 158, 0, 113, 0, 0, 113, 68, 68, - 0, 68, 68, 68, 68, 68, 68, 68, 0, 0, - 68, 113, 113, 68, 68, 68, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 71, 71, - 71, 0, 0, 0, 0, 0, 71, 0, 0, 0, - 0, 0, 71, 71, 71, 71, 113, 0, 0, 0, - 0, 0, 71, 71, 0, 71, 71, 71, 71, 71, - 71, 71, 0, 0, 71, 0, 0, 71, 71, 71, - 0, 0, 0, 0, 0, 106, 106, 106, 106, 0, - 120, 0, 0, 120, 106, 0, 0, 0, 0, 0, - 106, 106, 106, 106, 0, 0, 0, 120, 120, 0, - 106, 106, 120, 106, 106, 106, 106, 106, 106, 106, - 0, 0, 106, 0, 0, 106, 106, 106, 0, 0, - 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, - 0, 103, 120, 0, 103, 145, 0, 0, 0, 0, - 0, 145, 145, 145, 145, 0, 0, 0, 103, 103, - 0, 145, 145, 103, 145, 145, 145, 145, 145, 145, - 145, 0, 0, 145, 0, 0, 145, 145, 145, 0, - 0, 158, 158, 158, 158, 0, 0, 0, 0, 0, - 158, 0, 0, 103, 0, 0, 158, 158, 158, 158, - 0, 0, 104, 0, 0, 104, 158, 158, 0, 158, - 158, 158, 158, 158, 158, 158, 0, 0, 158, 104, - 104, 158, 158, 158, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 113, 113, 113, 113, 0, - 98, 0, 0, 98, 113, 0, 0, 0, 0, 0, - 113, 113, 113, 113, 104, 0, 0, 98, 98, 0, - 113, 113, 98, 113, 113, 113, 113, 113, 113, 113, - 0, 0, 113, 0, 0, 113, 113, 113, 0, 99, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 98, 89, 0, 0, 99, 99, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 89, 89, 0, - 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 100, 0, 0, 100, - 120, 99, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 89, 100, 100, 0, 120, 120, 100, 120, - 120, 120, 120, 120, 120, 120, 0, 0, 120, 0, - 0, 120, 120, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 103, 103, 0, 96, 100, 0, - 96, 103, 0, 0, 0, 0, 0, 103, 103, 103, - 103, 0, 0, 0, 96, 96, 0, 103, 103, 96, - 103, 103, 103, 103, 103, 103, 103, 0, 0, 103, + 49, 0, 63, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 55, 56, 0, 0, 0, 0, + 131, 0, 0, 131, 24, 25, 26, 27, 28, 61, + 29, 30, 31, 0, 0, 0, 32, 131, 131, 0, + 0, 0, 131, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, + 46, 47, 48, 49, 53, 157, 51, 0, 157, 0, + 131, 0, 131, 0, 0, 54, 0, 55, 56, 0, + 0, 0, 157, 157, 0, 0, 0, 157, 0, 0, + 0, 0, 0, 95, 95, 95, 95, 0, 0, 0, + 95, 0, 131, 0, 0, 0, 0, 0, 143, 0, + 0, 143, 0, 0, 0, 157, 0, 157, 95, 95, + 0, 95, 0, 0, 0, 143, 143, 0, 0, 0, + 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 157, 0, 71, + 71, 71, 71, 0, 116, 0, 71, 116, 0, 0, + 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 116, 0, 71, 71, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 97, 0, 0, 96, - 0, 0, 0, 104, 104, 104, 104, 0, 0, 0, - 97, 97, 104, 0, 0, 97, 0, 0, 104, 104, - 104, 104, 0, 0, 0, 0, 0, 0, 104, 104, - 0, 104, 104, 104, 104, 104, 104, 104, 0, 0, - 104, 98, 98, 98, 98, 97, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 98, 98, 98, 98, - 0, 0, 0, 0, 0, 0, 98, 98, 0, 98, - 98, 98, 98, 98, 98, 98, 0, 0, 0, 0, - 99, 99, 99, 99, 0, 95, 0, 0, 95, 99, - 0, 89, 89, 89, 89, 99, 99, 99, 99, 0, - 89, 0, 95, 95, 0, 99, 99, 95, 99, 99, - 99, 99, 99, 99, 99, 0, 89, 89, 0, 89, - 89, 89, 89, 89, 0, 0, 0, 100, 100, 100, - 100, 0, 83, 0, 0, 83, 100, 95, 0, 0, - 0, 0, 100, 100, 100, 100, 0, 0, 0, 83, - 83, 0, 100, 100, 83, 100, 100, 100, 100, 100, - 100, 100, 0, 0, 0, 0, 0, 0, 84, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 96, 96, - 96, 96, 0, 0, 83, 84, 84, 96, 0, 0, - 84, 0, 0, 96, 96, 96, 96, 0, 0, 0, - 0, 0, 0, 96, 96, 0, 96, 96, 96, 96, - 96, 96, 96, 85, 0, 0, 85, 0, 0, 0, - 84, 0, 0, 0, 97, 97, 97, 97, 0, 0, - 85, 85, 0, 97, 0, 85, 0, 0, 0, 97, - 97, 97, 97, 0, 0, 0, 0, 0, 0, 97, - 97, 0, 97, 97, 97, 97, 97, 97, 97, 86, - 0, 0, 86, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, + 143, 0, 0, 0, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 116, 0, 116, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, + 45, 46, 47, 48, 49, 0, 0, 51, 0, 168, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 0, 131, 131, 131, 131, 0, 0, 0, 131, 0, + 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, + 0, 150, 0, 0, 0, 0, 131, 131, 0, 131, + 131, 131, 131, 131, 131, 131, 0, 0, 131, 0, + 0, 131, 131, 131, 0, 0, 157, 157, 157, 157, + 0, 159, 0, 157, 159, 157, 0, 0, 0, 0, + 0, 157, 157, 157, 157, 0, 0, 0, 159, 159, + 0, 157, 157, 159, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 143, + 143, 143, 143, 0, 0, 0, 143, 0, 143, 0, + 0, 0, 0, 159, 143, 143, 143, 143, 0, 0, + 0, 0, 0, 0, 143, 143, 0, 143, 143, 143, + 143, 143, 143, 143, 0, 0, 143, 0, 0, 143, + 143, 143, 0, 159, 0, 116, 116, 116, 116, 168, + 160, 0, 116, 0, 116, 0, 0, 0, 0, 0, + 116, 116, 116, 116, 0, 0, 0, 160, 160, 0, + 116, 116, 160, 116, 116, 116, 116, 116, 116, 116, + 0, 150, 116, 0, 0, 116, 116, 116, 0, 0, + 0, 0, 0, 145, 0, 152, 153, 154, 155, 0, + 160, 0, 160, 0, 0, 0, 0, 0, 0, 0, + 145, 145, 161, 162, 163, 145, 0, 164, 0, 0, + 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 160, 0, 0, 0, 0, 108, 0, 0, + 108, 0, 0, 145, 0, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 108, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 148, 0, 0, 148, 0, 0, - 0, 86, 0, 0, 0, 0, 95, 95, 95, 95, - 0, 148, 148, 0, 0, 95, 148, 0, 0, 0, - 0, 95, 95, 95, 95, 0, 0, 0, 0, 0, - 0, 95, 95, 0, 95, 95, 95, 95, 95, 95, - 95, 147, 0, 0, 147, 0, 148, 0, 0, 0, - 0, 0, 0, 83, 83, 83, 83, 0, 147, 147, - 0, 0, 83, 147, 0, 0, 0, 0, 83, 83, - 83, 83, 0, 0, 0, 0, 0, 134, 83, 83, - 134, 83, 83, 83, 83, 83, 83, 83, 0, 84, - 84, 84, 84, 147, 134, 134, 0, 0, 84, 134, - 0, 0, 0, 0, 84, 84, 84, 84, 0, 0, - 0, 0, 0, 0, 84, 84, 0, 84, 84, 84, - 84, 84, 84, 105, 0, 0, 105, 0, 0, 134, - 0, 0, 0, 0, 85, 85, 85, 85, 0, 0, - 105, 105, 0, 85, 0, 105, 0, 0, 0, 85, - 85, 0, 85, 0, 0, 0, 0, 0, 0, 85, - 85, 0, 85, 85, 85, 85, 85, 85, 90, 0, - 0, 90, 0, 0, 0, 105, 0, 0, 0, 0, - 86, 86, 86, 86, 0, 90, 90, 0, 0, 86, - 90, 0, 167, 0, 0, 86, 86, 0, 0, 0, - 92, 0, 0, 92, 0, 86, 86, 0, 86, 86, - 86, 86, 86, 86, 0, 0, 0, 92, 92, 0, - 90, 0, 92, 0, 149, 148, 148, 148, 148, 0, - 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, - 148, 148, 91, 0, 0, 91, 0, 0, 0, 0, - 148, 148, 92, 148, 148, 148, 148, 148, 0, 91, - 91, 0, 143, 0, 91, 143, 0, 0, 0, 0, - 0, 0, 147, 147, 147, 147, 0, 0, 0, 143, - 143, 147, 0, 0, 0, 284, 0, 147, 147, 82, - 156, 0, 82, 0, 91, 0, 0, 147, 147, 0, - 147, 147, 147, 147, 147, 0, 82, 82, 134, 134, - 134, 134, 0, 0, 143, 0, 0, 134, 167, 0, - 0, 0, 0, 134, 134, 69, 0, 0, 69, 0, - 0, 0, 0, 134, 134, 0, 134, 134, 134, 134, - 134, 82, 69, 69, 0, 0, 0, 0, 0, 0, - 149, 0, 0, 0, 105, 105, 105, 105, 0, 0, - 0, 0, 0, 105, 0, 0, 0, 0, 0, 105, - 105, 0, 0, 0, 0, 0, 0, 69, 0, 105, - 105, 156, 105, 105, 105, 105, 105, 0, 151, 152, - 153, 154, 0, 0, 0, 0, 0, 0, 0, 90, - 90, 90, 90, 0, 159, 160, 161, 162, 90, 167, - 163, 0, 0, 164, 165, 166, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 90, 0, 90, 90, 90, - 90, 92, 92, 92, 92, 0, 0, 0, 0, 0, - 92, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 92, 0, 92, - 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 159, 159, 159, 159, 0, 0, 0, 159, + 0, 159, 0, 0, 0, 0, 0, 159, 159, 159, + 159, 0, 0, 69, 0, 0, 69, 159, 159, 108, + 159, 159, 159, 159, 159, 159, 159, 0, 0, 159, + 69, 69, 159, 159, 159, 69, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 153, 154, 155, 0, + 0, 0, 0, 0, 0, 0, 107, 0, 0, 107, + 159, 160, 161, 162, 163, 69, 0, 164, 0, 0, + 165, 166, 167, 107, 107, 0, 0, 0, 107, 0, + 0, 160, 160, 160, 160, 0, 0, 0, 160, 0, + 160, 0, 0, 0, 0, 69, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 160, 160, 107, 160, + 160, 160, 160, 160, 160, 160, 0, 0, 160, 0, + 0, 160, 160, 160, 145, 145, 145, 145, 0, 72, + 0, 145, 0, 145, 0, 0, 0, 0, 107, 145, + 145, 145, 145, 0, 0, 0, 72, 72, 0, 145, + 145, 72, 145, 145, 145, 145, 145, 145, 145, 0, + 0, 145, 0, 0, 145, 145, 145, 0, 108, 108, + 108, 108, 0, 146, 0, 108, 146, 108, 0, 72, + 0, 72, 0, 108, 108, 108, 108, 0, 0, 0, + 146, 146, 0, 108, 108, 146, 108, 108, 108, 108, + 108, 108, 108, 0, 0, 108, 0, 0, 108, 108, + 108, 72, 0, 0, 0, 0, 159, 90, 90, 159, + 0, 0, 0, 0, 0, 146, 0, 0, 0, 103, + 0, 0, 0, 159, 159, 111, 90, 119, 159, 0, + 0, 0, 90, 0, 69, 69, 69, 69, 0, 0, + 0, 69, 0, 69, 90, 90, 90, 90, 0, 69, + 69, 69, 69, 0, 0, 0, 0, 0, 159, 69, + 69, 0, 69, 69, 69, 69, 69, 69, 69, 0, + 0, 69, 0, 0, 69, 69, 69, 107, 107, 107, + 107, 0, 114, 0, 107, 114, 107, 0, 0, 111, + 0, 0, 107, 107, 107, 107, 0, 0, 0, 114, + 114, 0, 107, 107, 114, 107, 107, 107, 107, 107, + 107, 107, 0, 0, 107, 0, 0, 107, 107, 107, + 0, 0, 0, 0, 0, 121, 0, 0, 121, 0, + 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, + 0, 0, 121, 121, 0, 0, 0, 121, 0, 237, + 72, 72, 72, 72, 0, 0, 0, 72, 0, 72, + 0, 0, 0, 0, 0, 72, 72, 72, 72, 0, + 0, 0, 0, 266, 0, 72, 72, 121, 72, 72, + 72, 72, 72, 72, 72, 0, 0, 72, 0, 0, + 72, 72, 72, 0, 146, 146, 146, 146, 0, 105, + 0, 146, 105, 146, 0, 0, 0, 0, 0, 146, + 146, 146, 146, 0, 0, 0, 105, 105, 0, 146, + 146, 105, 146, 146, 146, 146, 146, 146, 146, 0, + 0, 146, 0, 0, 146, 146, 146, 159, 159, 159, + 159, 0, 99, 0, 159, 99, 159, 0, 0, 0, + 0, 105, 159, 159, 159, 159, 0, 0, 0, 99, + 99, 0, 159, 159, 99, 159, 159, 159, 159, 159, + 159, 159, 0, 0, 159, 0, 0, 159, 159, 159, + 100, 0, 0, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 0, 100, 100, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 101, 0, + 114, 101, 114, 0, 0, 0, 0, 0, 114, 114, + 114, 114, 100, 0, 0, 101, 101, 0, 114, 114, + 101, 114, 114, 114, 114, 114, 114, 114, 0, 0, + 114, 0, 0, 114, 114, 114, 121, 121, 121, 121, + 0, 97, 0, 121, 97, 121, 0, 0, 0, 0, + 101, 121, 121, 121, 121, 0, 0, 0, 97, 97, + 0, 121, 121, 97, 121, 121, 121, 121, 121, 121, + 121, 0, 0, 121, 0, 0, 121, 121, 121, 98, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 0, 0, 98, 98, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 0, 96, 0, 105, 96, 105, + 0, 0, 0, 0, 0, 105, 105, 105, 105, 0, + 0, 98, 96, 96, 0, 105, 105, 96, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 105, 0, 0, + 0, 0, 0, 99, 99, 99, 99, 0, 84, 0, + 99, 84, 99, 0, 0, 0, 0, 96, 99, 99, + 99, 99, 0, 0, 0, 84, 84, 0, 99, 99, + 84, 99, 99, 99, 99, 99, 99, 99, 0, 0, + 0, 100, 100, 100, 100, 0, 85, 0, 100, 85, + 100, 0, 0, 0, 0, 0, 100, 100, 100, 100, + 84, 0, 0, 85, 85, 0, 100, 100, 85, 100, + 100, 100, 100, 100, 100, 100, 0, 0, 0, 101, + 101, 101, 101, 0, 86, 0, 101, 86, 101, 0, + 0, 0, 0, 0, 101, 101, 101, 101, 85, 0, + 0, 86, 86, 0, 101, 101, 86, 101, 101, 101, + 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 97, 97, 97, 0, 87, 0, 97, + 87, 97, 0, 0, 0, 0, 86, 97, 97, 97, + 97, 0, 0, 0, 87, 87, 0, 97, 97, 87, + 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, + 98, 98, 98, 98, 0, 148, 0, 98, 148, 98, + 0, 0, 0, 0, 0, 98, 98, 98, 98, 87, + 0, 0, 148, 148, 0, 98, 98, 148, 98, 98, + 98, 98, 98, 98, 98, 0, 96, 96, 96, 96, + 0, 135, 0, 96, 135, 96, 0, 0, 0, 0, + 0, 96, 96, 96, 96, 0, 0, 148, 135, 135, + 0, 96, 96, 135, 96, 96, 96, 96, 96, 96, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 84, + 84, 84, 84, 0, 106, 0, 84, 106, 84, 0, + 0, 0, 0, 135, 84, 84, 84, 84, 0, 0, + 0, 106, 106, 0, 84, 84, 106, 84, 84, 84, + 84, 84, 84, 84, 0, 0, 0, 85, 85, 85, + 85, 0, 91, 0, 85, 91, 85, 0, 0, 0, + 0, 0, 85, 85, 85, 85, 106, 0, 0, 91, + 91, 0, 85, 85, 91, 85, 85, 85, 85, 85, + 85, 0, 0, 0, 0, 86, 86, 86, 86, 0, + 93, 0, 86, 93, 86, 0, 0, 0, 0, 0, + 86, 86, 0, 86, 91, 0, 0, 93, 93, 0, + 86, 86, 93, 86, 86, 86, 86, 86, 86, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 87, 87, + 87, 87, 0, 94, 0, 87, 94, 87, 0, 0, + 0, 0, 93, 87, 87, 0, 0, 0, 0, 0, + 94, 94, 150, 87, 87, 94, 87, 87, 87, 87, + 87, 87, 0, 0, 0, 0, 148, 148, 148, 148, + 0, 92, 0, 148, 92, 148, 0, 0, 0, 0, + 0, 148, 148, 144, 0, 94, 144, 0, 92, 92, + 0, 148, 148, 92, 148, 148, 148, 148, 148, 0, + 144, 144, 135, 135, 135, 135, 0, 0, 0, 135, + 0, 135, 0, 0, 0, 0, 0, 135, 135, 0, + 0, 0, 0, 92, 0, 0, 83, 135, 135, 83, + 135, 135, 135, 135, 135, 144, 0, 0, 0, 70, + 0, 0, 70, 83, 83, 106, 106, 106, 106, 0, + 0, 0, 106, 0, 106, 0, 70, 70, 0, 0, + 106, 106, 0, 0, 0, 0, 157, 0, 0, 0, + 106, 106, 0, 106, 106, 106, 106, 106, 83, 0, 0, 0, 0, 91, 91, 91, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 143, 143, 143, 0, 91, 91, - 0, 91, 0, 0, 0, 0, 0, 0, 150, 0, - 0, 0, 0, 0, 151, 152, 153, 154, 143, 143, - 82, 82, 82, 82, 0, 0, 0, 155, 157, 158, - 159, 160, 161, 162, 0, 0, 163, 0, 0, 164, - 165, 166, 0, 0, 0, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 94, 0, 69, 69, 69, 69, - 0, 0, 104, 0, 0, 0, 109, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 125, 126, 127, 128, - 129, 69, 69, 132, 133, 0, 0, 0, 0, 0, - 140, 0, 0, 0, 0, 0, 0, 0, 0, 150, - 0, 0, 0, 0, 0, 151, 152, 153, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 0, 157, - 158, 159, 160, 161, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, + 91, 70, 91, 0, 168, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, + 0, 91, 91, 91, 91, 0, 152, 153, 154, 155, + 0, 93, 93, 93, 93, 0, 150, 0, 93, 0, + 93, 0, 160, 161, 162, 163, 0, 0, 164, 0, + 0, 165, 166, 167, 0, 0, 93, 93, 0, 93, + 93, 93, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 94, 94, 94, 0, 0, + 0, 94, 0, 94, 0, 0, 0, 0, 0, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 94, 0, 94, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 92, 92, 92, 92, 0, 0, 0, 92, + 0, 0, 150, 0, 144, 144, 144, 144, 0, 0, + 0, 144, 0, 0, 0, 0, 94, 92, 92, 0, + 92, 0, 0, 0, 104, 0, 0, 0, 109, 144, + 144, 118, 0, 0, 0, 0, 0, 0, 125, 126, + 127, 128, 129, 0, 0, 132, 133, 83, 83, 83, + 83, 0, 140, 0, 83, 0, 0, 0, 0, 0, + 70, 70, 70, 70, 0, 0, 0, 70, 0, 0, + 0, 0, 83, 83, 151, 0, 0, 0, 0, 184, + 152, 153, 154, 155, 0, 70, 70, 0, 0, 0, + 0, 0, 0, 156, 158, 159, 160, 161, 162, 163, + 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 0, 247, 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 158, 159, 160, 161, 162, 163, 0, 0, 164, 0, + 0, 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, + 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 315, + 0, 0, 317, }; short yycheck[] = { 13, - 36, 86, 41, 36, 40, 44, 182, 59, 59, 41, - 93, 40, 59, 91, 91, 59, 257, 41, 257, 58, - 59, 41, 191, 41, 63, 59, 44, 91, 91, 59, - 329, 40, 46, 41, 93, 40, 93, 41, 257, 41, - 58, 59, 41, 57, 122, 63, 123, 61, 97, 98, - 99, 100, 101, 102, 93, 59, 41, 59, 41, 123, - 123, 360, 91, 44, 297, 298, 41, 41, 276, 277, - 40, 40, 278, 91, 40, 93, 326, 327, 0, 123, - 59, 331, 59, 36, 59, 59, 59, 40, 59, 123, - 123, 41, 106, 107, 123, 40, 40, 347, 123, 41, - 40, 351, 271, 59, 41, 123, 40, 123, 44, 59, - 260, 33, 257, 289, 36, 37, 38, 59, 40, 40, - 42, 43, 59, 45, 40, 93, 41, 40, 125, 143, - 144, 145, 146, 147, 148, 149, 305, 59, 91, 91, - 257, 36, 64, 192, 41, 266, 267, 268, 41, 270, - 271, 44, 91, 167, 168, 169, 170, 171, 172, 173, - 125, 41, 93, 298, 44, 58, 59, 40, 182, 91, - 123, 249, 186, 187, 41, 189, 254, 191, 58, 59, - 41, 350, 41, 63, 198, 0, 200, 201, 41, 41, - 41, 205, 40, 93, 41, 93, 59, 125, 59, 125, - 93, 123, 125, 125, 126, 125, 257, 41, 125, 59, - 41, 91, 123, 93, 297, 298, 41, 231, 33, 233, - 234, 36, 37, 38, 257, 40, 59, 42, 43, 262, - 45, 40, 93, 272, 273, 274, 275, 314, 297, 298, - 297, 298, 281, 123, 59, 297, 298, 41, 41, 64, - 297, 298, 337, 123, 272, 273, 274, 275, 297, 298, - 296, 300, 301, 281, 0, 297, 298, 123, 282, 287, - 288, 289, 290, 297, 298, 289, 91, 297, 298, 297, - 298, 59, 300, 301, 302, 303, 304, 305, 306, 297, - 298, 309, 41, 307, 312, 313, 314, 33, 297, 298, - 36, 37, 38, 41, 40, 258, 42, 43, 123, 45, - 125, 126, 297, 298, 297, 298, 297, 298, 297, 298, - 297, 298, 41, 59, 297, 298, 297, 298, 64, 297, - 298, 59, 346, 41, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 59, 91, 8, 279, 280, 32, - 282, 283, 284, 285, 286, 125, 297, 298, 63, 291, - 292, 293, 294, 295, 296, 13, 144, 299, 307, 272, - 273, 274, 275, 346, 189, 96, 308, 123, 310, 311, - 126, -1, 272, 273, 274, 275, 91, 297, 298, 297, - 298, 281, -1, -1, 297, 298, 91, 287, 288, 289, - 290, 272, 273, 274, 275, -1, -1, 297, 298, -1, - 300, 301, 302, 303, 304, 305, 306, -1, 123, 309, - 91, -1, 312, 313, 314, -1, 297, 298, 123, -1, - -1, 256, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, -1, 123, -1, 279, 280, -1, 282, 283, 284, - 285, 286, 272, 273, 274, 275, 291, 292, 293, 294, - 295, 296, 41, -1, 299, 44, 91, -1, -1, -1, - -1, -1, -1, 308, -1, 310, 311, 297, 298, 58, - 59, -1, -1, -1, 63, -1, 266, 267, 268, -1, - 270, 271, -1, -1, -1, -1, -1, -1, 123, -1, - 256, 257, 258, 259, 260, 261, 125, 263, 264, 265, - -1, -1, 91, 269, 93, -1, 272, 273, 274, 275, + 41, 36, 86, 41, 91, 40, 44, 59, 91, 59, + 59, 93, 36, 183, 59, 59, 41, 91, 41, 331, + 58, 59, 91, 40, 257, 63, 41, 297, 298, 257, + 41, 59, 46, 40, 43, 41, 123, 276, 277, 257, + 123, 41, 51, 57, 41, 91, 41, 61, 59, 123, + 362, 44, 40, 59, 123, 93, 328, 329, 0, 40, + 192, 333, 41, 40, 40, 36, 40, 40, 40, 40, + 59, 278, 59, 123, 91, 123, 122, 349, 123, 40, + 59, 353, 91, 123, 97, 98, 99, 100, 101, 102, + 59, 33, 106, 107, 36, 37, 38, 59, 40, 123, + 42, 43, 260, 45, 44, 114, 123, 59, 41, 41, + 41, 257, 40, 122, 40, 125, 40, 59, 41, 41, + 91, 291, 64, 91, 41, 41, 59, 59, 59, 143, + 144, 145, 146, 147, 148, 149, 150, 59, 257, 36, + 91, 273, 59, 93, 91, 41, 298, 125, 44, 91, + 40, 40, 123, 0, 168, 169, 170, 171, 172, 173, + 174, 41, 58, 59, 41, 41, 41, 63, 93, 183, + 41, 41, 123, 187, 188, 307, 190, 91, 192, 125, + 193, 123, 93, 125, 126, 199, 33, 201, 202, 36, + 37, 38, 206, 40, 59, 42, 43, 93, 45, 266, + 267, 268, 59, 270, 271, 251, 289, 290, 257, 123, + 256, 41, 59, 125, 123, 297, 298, 64, 125, 233, + 352, 235, 236, 306, 125, 93, 309, 314, 41, 312, + 313, 314, 125, 257, 272, 273, 274, 275, 262, 41, + 41, 279, 251, 281, 91, 297, 298, 256, 0, 287, + 288, 289, 290, 297, 298, 339, 297, 298, 59, 297, + 298, 296, 300, 301, 302, 303, 304, 305, 306, 59, + 284, 309, 297, 298, 297, 298, 123, 291, 125, 126, + 40, 33, 297, 298, 36, 37, 38, 258, 40, 93, + 42, 43, 93, 45, 93, 309, 41, 297, 298, 41, + 297, 298, 297, 298, 297, 298, 123, 59, 297, 298, + 297, 298, 64, 125, 256, 257, 258, 259, 260, 261, + 123, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 348, 297, 298, 279, 280, 91, + 282, 283, 284, 285, 286, 297, 298, 297, 298, 291, + 292, 293, 294, 295, 296, 306, 91, 299, 309, 41, + 41, 312, 313, 314, 59, 41, 308, 59, 310, 311, + 41, 123, 297, 298, 126, 59, 272, 273, 274, 275, + 41, 8, 32, 279, 13, 281, 297, 298, 123, 144, + 348, 287, 288, 41, 309, 309, 44, 190, 312, 313, + 314, 297, 298, 96, 300, 301, 302, 303, 304, 256, + 257, 258, 259, 260, 261, 63, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 297, + 298, -1, 279, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, 91, 291, 292, 293, 294, 295, 296, + 125, -1, 299, 91, 266, 267, 268, -1, 270, 271, + -1, 308, -1, 310, 311, -1, 41, -1, -1, 44, + -1, 272, 273, 274, 275, 123, -1, -1, 279, -1, + -1, -1, -1, 58, 59, 123, -1, -1, 63, -1, + -1, -1, -1, 297, 298, -1, 297, 298, 297, 298, + -1, -1, -1, -1, 256, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, -1, 91, 269, 93, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 123, -1, + -1, -1, 287, 288, 289, 290, 308, 33, 310, 311, + 36, 37, 38, -1, 40, 41, 42, 43, 44, 45, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + -1, -1, 58, 59, -1, -1, -1, 63, 64, -1, + -1, 266, 267, 268, -1, 270, 271, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 91, -1, 93, 33, -1, + -1, 36, 37, 38, -1, 40, 41, 42, 43, 44, + 45, 297, 298, 281, -1, -1, -1, -1, -1, 287, + 288, 289, 290, 58, 59, -1, -1, 123, 63, 64, + 126, 289, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, -1, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 33, 93, -1, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, 59, 279, -1, 281, -1, 64, -1, + -1, 126, 287, 288, 289, 290, 304, 305, 306, -1, + 308, -1, 297, 298, -1, 300, 301, 302, 303, 304, + 305, 306, -1, -1, 309, 91, -1, 312, 313, 314, + -1, -1, 41, -1, -1, 44, -1, 335, -1, -1, + -1, -1, -1, -1, 342, -1, -1, -1, 346, -1, + 59, -1, -1, 91, -1, -1, -1, 123, -1, -1, + 126, 359, 360, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, 93, 123, 272, 273, 274, 275, + -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, -1, 308, 309, 310, 311, 312, 313, 314, -1, + -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 91, 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 123, -1, -1, -1, -1, -1, - 91, -1, 308, 33, 310, 311, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, 58, 59, - -1, -1, 123, 63, 64, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, 91, -1, 93, 33, -1, -1, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, -1, -1, 58, - 59, -1, -1, 123, 63, 64, 126, 266, 267, 268, - -1, 270, 271, -1, -1, -1, -1, -1, -1, 302, - 303, 304, -1, 306, 289, 290, -1, -1, -1, -1, - -1, 13, -1, 33, 93, -1, 36, 37, 38, -1, - 40, 306, 42, 43, 309, 45, -1, 312, 313, 314, - 333, -1, -1, 272, 273, 274, 275, 340, -1, 59, - 42, 344, 281, 45, 64, -1, -1, 126, 287, 288, - 289, 290, -1, -1, 357, 358, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 91, -1, 312, 313, 314, -1, -1, 41, 81, - -1, 44, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 95, -1, -1, 59, -1, -1, 91, - -1, -1, -1, 123, 305, 306, 126, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - 93, 123, 272, 273, 274, 275, -1, -1, -1, 141, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, - 310, 311, 312, 313, 314, -1, 178, -1, 257, 258, - 259, 260, 261, 185, 263, 264, 265, -1, -1, -1, - 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, - 309, 310, 311, 312, 313, 314, 256, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 91, 272, 273, 274, 275, -1, -1, -1, 279, - 280, -1, 282, 283, 284, 285, 286, -1, -1, 91, - 43, 291, 292, 293, 294, 295, 296, 33, 51, 299, - 36, 37, 38, 123, 40, -1, 42, 43, 308, 45, - 310, 311, -1, -1, -1, 287, -1, 289, 290, -1, - -1, 123, -1, 59, -1, -1, -1, -1, 64, 272, - 273, 274, 275, 305, 306, -1, -1, 309, 91, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, 297, 91, 36, 37, 38, -1, - 40, 114, 42, 43, 26, 45, -1, -1, -1, 122, + 296, 33, -1, 299, 36, 37, 38, 123, 40, -1, + 42, 43, 308, 45, 310, 311, -1, -1, 13, 287, + -1, 289, 290, -1, -1, -1, -1, 59, -1, -1, + -1, -1, 64, 272, 273, 274, 275, 305, 306, -1, + 279, 309, -1, -1, 312, 313, 314, 42, -1, -1, + 45, -1, -1, -1, -1, -1, -1, 33, 297, 91, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 81, -1, 64, 43, + 44, 123, -1, -1, 126, -1, 50, -1, -1, -1, + 95, -1, -1, -1, -1, -1, -1, -1, 62, 63, + 64, 65, -1, 33, -1, 91, 36, 37, 38, -1, + 40, -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 43, 44, -1, 64, -1, -1, 123, 50, -1, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 62, 63, 64, 65, -1, -1, -1, -1, -1, 33, - -1, 91, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 141, 123, -1, -1, + 126, -1, -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 64, -1, -1, 123, -1, 107, 126, -1, -1, -1, + -1, 91, -1, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 179, 42, 43, -1, 45, 305, + 306, 186, -1, 309, -1, -1, 312, 313, 314, -1, + -1, -1, -1, 123, -1, -1, 126, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 91, -1, 289, - 290, -1, 33, -1, -1, 36, 37, 38, -1, 40, - -1, 42, 43, -1, 45, 305, 306, 289, -1, 309, - -1, -1, 312, 313, 314, -1, 249, -1, -1, 123, - -1, 254, 126, 64, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 91, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, + -1, -1, -1, -1, 256, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, -1, -1, 269, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 123, 299, -1, 126, + -1, 91, -1, -1, -1, 41, 308, -1, 310, 311, + -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, -1, -1, 269, -1, -1, -1, 63, -1, -1, + -1, -1, -1, 123, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 91, 123, 299, -1, 126, -1, -1, -1, -1, - -1, -1, 308, 41, 310, 311, 44, 257, 258, 259, - 260, 261, 262, 263, 264, 265, -1, -1, -1, 269, - -1, -1, -1, 123, -1, 63, -1, -1, -1, -1, + 296, -1, -1, 299, -1, 91, -1, -1, -1, -1, + -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 58, -1, -1, -1, -1, 63, -1, 123, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, -1, 299, - -1, -1, -1, 91, -1, -1, -1, 41, 308, -1, - 310, 311, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, -1, 63, - -1, -1, -1, -1, -1, 123, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 299, -1, 91, -1, -1, - -1, -1, -1, -1, 308, -1, 310, 311, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, -1, 263, 264, 265, -1, -1, -1, 269, 123, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, 91, - 291, 292, 293, 294, 295, 296, 33, -1, 299, 36, - 37, 38, -1, 40, -1, 42, 43, 308, 45, 310, - 311, -1, -1, -1, -1, -1, -1, 287, 288, 289, - 290, 123, 59, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, 91, -1, -1, -1, -1, 308, -1, + 310, 311, -1, -1, -1, -1, 41, -1, -1, 44, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, 58, 59, 123, -1, -1, 63, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 33, -1, 299, 36, 37, 38, -1, 40, 93, 42, + 43, 308, 45, 310, 311, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, 287, 288, 289, + 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301, 302, 303, 304, 305, 306, -1, -1, 309, - -1, -1, 312, 313, 314, -1, -1, -1, -1, -1, + -1, -1, 312, 313, 314, -1, 33, -1, 91, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, + -1, -1, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 64, -1, -1, + -1, -1, -1, 126, 300, 301, 302, 303, 304, 305, + 306, -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, 33, -1, 91, 36, 37, 38, -1, 40, - 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, 126, -1, -1, 300, 301, 302, 303, 304, 305, 306, -1, - -1, 309, -1, -1, 312, 313, 314, -1, 33, -1, - 91, 36, 37, 38, -1, 40, -1, 42, 43, -1, - 45, -1, -1, -1, -1, -1, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, 64, - -1, -1, -1, -1, -1, 126, 300, 301, 302, 303, - 304, 305, 306, -1, -1, 309, -1, -1, 312, 313, - 314, -1, -1, -1, -1, -1, 91, 33, 93, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - -1, 126, 304, 305, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, 41, -1, -1, 44, - 257, 258, 259, 260, 261, 91, 263, 264, 265, -1, + -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, + 91, 33, 93, -1, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, + -1, -1, 64, 288, -1, 126, -1, -1, -1, -1, + -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, + 41, -1, -1, 44, 257, 258, 259, 260, 261, 91, + 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, 126, -1, 299, -1, -1, -1, + -1, -1, 93, -1, -1, 308, 41, 310, 311, 44, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - 126, -1, 299, -1, -1, -1, -1, -1, 93, -1, - -1, 308, 41, 310, 311, 44, 257, 258, 259, 260, - 261, -1, 263, 264, 265, -1, -1, -1, 269, 58, - 59, -1, -1, -1, 63, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, -1, -1, 299, -1, - -1, -1, -1, -1, 93, -1, -1, 308, -1, 310, - 311, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, 33, -1, 269, 36, 37, 38, -1, 40, - 41, 42, 43, -1, 45, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 64, 299, -1, -1, -1, -1, -1, - -1, -1, -1, 308, -1, 310, 311, -1, -1, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 91, 33, -1, 269, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 64, 299, -1, 126, -1, -1, -1, -1, - -1, -1, 308, -1, 310, 311, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, 33, -1, 91, - 36, 37, 38, 288, 40, 41, 42, 43, -1, 45, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, 281, 33, -1, 91, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, 91, 263, 264, 265, -1, 33, -1, 269, 36, + -1, -1, 299, -1, -1, -1, -1, -1, 93, -1, + -1, 308, -1, 310, 311, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 126, 64, 299, -1, + 291, 292, 293, 294, 295, 296, -1, 64, 299, -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, 310, - 311, -1, -1, -1, 256, 257, 258, 259, 260, 261, - -1, 263, 264, 265, 91, -1, -1, 269, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 311, -1, -1, -1, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, 33, -1, 269, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, -1, 299, -1, 126, - 91, -1, -1, -1, 41, -1, 308, 44, 310, 311, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, 58, 59, 269, -1, -1, 63, -1, -1, -1, - -1, -1, 123, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 91, -1, 93, -1, -1, -1, - -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, - 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 64, 299, - -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, - 310, 311, -1, -1, -1, -1, 41, -1, -1, 44, + 292, 293, 294, 295, 296, -1, 64, 299, -1, 126, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 33, -1, 91, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, -1, -1, 297, 298, -1, 300, + 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, 64, -1, -1, -1, -1, -1, 126, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, 33, -1, 91, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, + -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 91, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + 33, -1, 269, 36, 37, 38, -1, 40, 41, 42, + 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - 126, -1, 299, 41, -1, -1, 44, -1, 93, -1, - -1, 308, -1, 310, 311, -1, -1, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, 302, 303, 304, 305, 306, -1, -1, 309, -1, - -1, 312, 313, 314, -1, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, 123, -1, 58, 59, -1, - 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, 93, -1, 41, -1, -1, -1, -1, -1, + 126, 64, 299, -1, -1, -1, -1, -1, -1, -1, + -1, 308, -1, 310, 311, -1, -1, -1, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 91, -1, + -1, 269, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 58, + 59, -1, -1, 291, 292, 293, 294, 295, 296, -1, + -1, 299, -1, 126, -1, -1, -1, -1, -1, -1, + 308, -1, 310, 311, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 93, -1, -1, 269, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, 58, 59, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, -1, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, 58, 59, 269, -1, -1, 63, -1, -1, -1, - -1, -1, 123, -1, 280, -1, 282, 283, 284, 285, + 93, 33, -1, 269, 36, 37, 38, -1, 40, -1, + 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 91, -1, 93, -1, -1, -1, - 41, -1, 308, 44, 310, 311, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, 58, 59, -1, - -1, -1, 287, 288, 289, 290, 123, -1, -1, -1, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, -1, 93, -1, 272, 273, 274, 275, -1, 41, - -1, -1, 44, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, - 298, 63, 300, 301, 302, 303, 304, 305, 306, 25, - 26, 309, -1, -1, 312, 313, 314, -1, -1, -1, - -1, 37, -1, -1, -1, -1, -1, 43, 44, 45, - -1, 93, -1, -1, 50, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, 62, 63, 64, 65, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, 123, 41, -1, -1, 44, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, 58, - 59, 312, 313, 314, 63, -1, -1, -1, -1, -1, - -1, 107, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, 93, -1, 41, -1, -1, -1, - 297, 298, -1, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, 58, 59, 312, 313, 314, 63, -1, - -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, - 166, 272, 273, 274, 275, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 41, -1, 91, 44, 93, -1, - -1, -1, -1, -1, 190, -1, 297, 298, -1, 300, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, 93, -1, 44, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, - 302, 303, 304, 305, 306, -1, 123, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, 93, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, + 296, -1, 64, 299, -1, -1, -1, -1, -1, -1, + -1, -1, 308, -1, 310, 311, -1, -1, -1, -1, + 41, -1, -1, 44, 257, 258, 259, 260, 261, 91, + 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, 126, 41, 299, -1, 44, -1, + 91, -1, 93, -1, -1, 308, -1, 310, 311, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, 93, -1, 41, -1, -1, 44, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 58, 59, 312, 313, 314, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 93, -1, -1, -1, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, - 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 41, 93, -1, 44, 281, -1, -1, -1, -1, + 279, -1, 123, -1, -1, -1, -1, -1, 41, -1, + -1, 44, -1, -1, -1, 91, -1, 93, 297, 298, + -1, 300, -1, -1, -1, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, -1, -1, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, 297, 298, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 123, -1, -1, -1, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, -1, 93, 269, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, 91, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, 123, -1, -1, -1, -1, 297, 298, -1, 300, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, - 306, -1, -1, 309, -1, -1, 312, 313, 314, -1, - -1, 272, 273, 274, 275, -1, -1, -1, -1, -1, - 281, -1, -1, 93, -1, -1, 287, 288, 289, 290, - -1, -1, 41, -1, -1, 44, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, 58, - 59, 312, 313, 314, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, 93, -1, -1, 58, 59, -1, + 306, -1, -1, 309, -1, -1, 312, 313, 314, 272, + 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, + 303, 304, 305, 306, -1, -1, 309, -1, -1, 312, + 313, 314, -1, 123, -1, 272, 273, 274, 275, 91, + 41, -1, 279, -1, 281, -1, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, 41, -1, -1, 44, - 281, 93, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, 93, 58, 59, -1, 297, 298, 63, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 41, 93, -1, - 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, - 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, + -1, 123, 309, -1, -1, 312, 313, 314, -1, -1, + -1, -1, -1, 41, -1, 287, 288, 289, 290, -1, + 91, -1, 93, -1, -1, -1, -1, -1, -1, -1, + 58, 59, 304, 305, 306, 63, -1, 309, -1, -1, + 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 123, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, 91, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, 93, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 58, 59, 281, -1, -1, 63, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 272, 273, 274, 275, 93, -1, -1, -1, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, -1, 44, 281, - -1, 272, 273, 274, 275, 287, 288, 289, 290, -1, - 281, -1, 58, 59, -1, 297, 298, 63, 300, 301, - 302, 303, 304, 305, 306, -1, 297, 298, -1, 300, - 301, 302, 303, 304, -1, -1, -1, 272, 273, 274, - 275, -1, 41, -1, -1, 44, 281, 93, -1, -1, + -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, 41, -1, -1, 44, 297, 298, 123, + 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, + 58, 59, 312, 313, 314, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 302, 303, 304, 305, 306, 93, -1, 309, -1, -1, + 312, 313, 314, 58, 59, -1, -1, -1, 63, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, 123, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, 297, 298, 93, 300, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, 272, 273, 274, 275, -1, 41, + -1, 279, -1, 281, -1, -1, -1, -1, 123, 287, + 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, + 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 91, + -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, + 304, 305, 306, -1, -1, 309, -1, -1, 312, 313, + 314, 123, -1, -1, -1, -1, 41, 25, 26, 44, + -1, -1, -1, -1, -1, 93, -1, -1, -1, 37, + -1, -1, -1, 58, 59, 43, 44, 45, 63, -1, + -1, -1, 50, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, 62, 63, 64, 65, -1, 287, + 288, 289, 290, -1, -1, -1, -1, -1, 93, 297, + 298, -1, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, 107, -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, - 305, 306, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, 93, 58, 59, 281, -1, -1, - 63, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, -1, -1, 297, 298, -1, 300, 301, 302, 303, - 304, 305, 306, 41, -1, -1, 44, -1, -1, -1, - 93, -1, -1, -1, 272, 273, 274, 275, -1, -1, - 58, 59, -1, 281, -1, 63, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 297, - 298, -1, 300, 301, 302, 303, 304, 305, 306, 41, - -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, 167, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, + -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 191, -1, 297, 298, 93, 300, 301, + 302, 303, 304, 305, 306, -1, -1, 309, -1, -1, + 312, 313, 314, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, + 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, 93, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, 297, 298, + 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, + 309, -1, -1, 312, 313, 314, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + 93, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, + 306, -1, -1, 309, -1, -1, 312, 313, 314, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, - -1, 93, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 58, 59, -1, -1, 281, 63, -1, -1, -1, - -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 297, 298, -1, 300, 301, 302, 303, 304, 305, - 306, 41, -1, -1, 44, -1, 93, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - -1, -1, 281, 63, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, 41, 297, 298, - 44, 300, 301, 302, 303, 304, 305, 306, -1, 272, - 273, 274, 275, 93, 58, 59, -1, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, - 303, 304, 305, 41, -1, -1, 44, -1, -1, 93, - -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - 58, 59, -1, 281, -1, 63, -1, -1, -1, 287, - 288, -1, 290, -1, -1, -1, -1, -1, -1, 297, - 298, -1, 300, 301, 302, 303, 304, 305, 41, -1, - -1, 44, -1, -1, -1, 93, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 58, 59, -1, -1, 281, - 63, -1, 91, -1, -1, 287, 288, -1, -1, -1, - 41, -1, -1, 44, -1, 297, 298, -1, 300, 301, - 302, 303, 304, 305, -1, -1, -1, 58, 59, -1, - 93, -1, 63, -1, 123, 272, 273, 274, 275, -1, - -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 41, -1, -1, 44, -1, -1, -1, -1, - 297, 298, 93, 300, 301, 302, 303, 304, -1, 58, - 59, -1, 41, -1, 63, 44, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 58, - 59, 281, -1, -1, -1, 58, -1, 287, 288, 41, - 63, -1, 44, -1, 93, -1, -1, 297, 298, -1, - 300, 301, 302, 303, 304, -1, 58, 59, 272, 273, - 274, 275, -1, -1, 93, -1, -1, 281, 91, -1, - -1, -1, -1, 287, 288, 41, -1, -1, 44, -1, - -1, -1, -1, 297, 298, -1, 300, 301, 302, 303, - 304, 93, 58, 59, -1, -1, -1, -1, -1, -1, - 123, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, -1, -1, 281, -1, -1, -1, -1, -1, 287, - 288, -1, -1, -1, -1, -1, -1, 93, -1, 297, - 298, 63, 300, 301, 302, 303, 304, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 303, 304, 305, 306, 281, 91, - 309, -1, -1, 312, 313, 314, -1, -1, -1, -1, - -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, - 303, 272, 273, 274, 275, -1, -1, -1, -1, -1, - 281, 123, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 297, 298, -1, 300, - 301, 302, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 297, 298, - -1, 300, -1, -1, -1, -1, -1, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, 297, 298, - 272, 273, 274, 275, -1, -1, -1, 300, 301, 302, - 303, 304, 305, 306, -1, -1, 309, -1, -1, 312, - 313, 314, -1, -1, -1, 297, 298, -1, -1, -1, - -1, -1, -1, -1, 30, -1, 272, 273, 274, 275, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, - 56, 297, 298, 59, 60, -1, -1, -1, -1, -1, - 66, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, 301, + -1, 93, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 175, + -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, 93, 287, 288, + 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, + 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + 93, -1, -1, 58, 59, -1, 297, 298, 63, 300, + 301, 302, 303, 304, 305, 306, -1, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, 93, -1, + -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, + 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, 93, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, + 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, 289, 290, 93, + -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, + 302, 303, 304, 305, 306, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 93, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, + 306, -1, -1, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, + 303, 304, 305, 306, -1, -1, -1, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, + 305, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, + 287, 288, -1, 290, 93, -1, -1, 58, 59, -1, + 297, 298, 63, 300, 301, 302, 303, 304, 305, -1, + 91, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, -1, 93, 287, 288, -1, -1, -1, -1, -1, + 58, 59, 123, 297, 298, 63, 300, 301, 302, 303, + 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 41, -1, 93, 44, -1, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, -1, + 58, 59, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, -1, 287, 288, -1, + -1, -1, -1, 93, -1, -1, 41, 297, 298, 44, + 300, 301, 302, 303, 304, 93, -1, -1, -1, 41, + -1, -1, 44, 58, 59, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, 58, 59, -1, -1, + 287, 288, -1, -1, -1, -1, 63, -1, -1, -1, + 297, 298, -1, 300, 301, 302, 303, 304, 93, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 297, 298, + -1, 300, 301, 302, 303, -1, 287, 288, 289, 290, + -1, 272, 273, 274, 275, -1, 123, -1, 279, -1, + 281, -1, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, 297, 298, -1, 300, + 301, 302, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + 91, -1, -1, -1, -1, -1, -1, -1, -1, 297, + 298, -1, 300, 301, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, -1, 123, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, -1, -1, -1, 30, 297, 298, -1, + 300, -1, -1, -1, 38, -1, -1, -1, 42, 297, + 298, 45, -1, -1, -1, -1, -1, -1, 52, 53, + 54, 55, 56, -1, -1, 59, 60, 272, 273, 274, + 275, -1, 66, -1, 279, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, -1, + -1, -1, 297, 298, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, 297, 298, -1, -1, -1, + -1, -1, -1, 300, 301, 302, 303, 304, 305, 306, + -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 281, -1, 176, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 253, -1, -1, + -1, 255, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 284, + -1, -1, 286, }; #define YYFINAL 1 #ifndef YYDEBUG @@ -1115,6 +1103,7 @@ char *yyrule[] = { "sideff : expr UNLESS expr", "sideff : expr WHILE expr", "sideff : expr UNTIL iexpr", +"sideff : expr FOR expr", "else :", "else : ELSE mblock", "else : ELSIF '(' mexpr ')' mblock else", @@ -1293,9 +1282,9 @@ int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; -#line 633 "perly.y" +#line 636 "perly.y" /* PROGRAM */ -#line 1360 "perly.c" +#line 1349 "y.tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -1344,7 +1333,6 @@ yyparse(void) #endif struct ysv *ysave; - New(73, ysave, 1, struct ysv); SAVEDESTRUCTOR(yydestruct, ysave); ysave->oldyydebug = yydebug; @@ -1392,7 +1380,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, + fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1402,7 +1390,7 @@ yyloop: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", + fprintf(stderr, "yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) @@ -1457,7 +1445,7 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: state %d, error recovery shifting to state %d\n", *yyssp, yytable[yyn]); #endif @@ -1487,7 +1475,7 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: error recovery discarding state %d\n", *yyssp); #endif @@ -1506,7 +1494,7 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: state %d, error recovery discards token %d (%s)\n", yystate, yychar, yys); } @@ -1517,7 +1505,7 @@ yyinrecovery: yyreduce: #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", + fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; @@ -1617,74 +1605,79 @@ case 19: { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 159 "perly.y" -{ yyval.opval = Nullop; } +#line 157 "perly.y" +{ yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, + Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 161 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +#line 162 "perly.y" +{ yyval.opval = Nullop; } break; case 22: -#line 163 "perly.y" +#line 164 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 23: +#line 166 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newSTATEOP(0, Nullch, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); hints |= HINT_BLOCK_SCOPE; } break; -case 23: -#line 170 "perly.y" +case 24: +#line 173 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; -case 24: -#line 174 "perly.y" +case 25: +#line 177 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; -case 25: -#line 180 "perly.y" +case 26: +#line 183 "perly.y" { yyval.opval = Nullop; } break; -case 26: -#line 182 "perly.y" +case 27: +#line 185 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 27: -#line 186 "perly.y" +case 28: +#line 189 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, newWHILEOP(0, 1, (LOOP*)Nullop, yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; -case 28: -#line 192 "perly.y" +case 29: +#line 195 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, newWHILEOP(0, 1, (LOOP*)Nullop, yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; -case 29: -#line 198 "perly.y" +case 30: +#line 201 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 30: -#line 201 "perly.y" +case 31: +#line 204 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 31: -#line 205 "perly.y" +case 32: +#line 208 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 32: -#line 209 "perly.y" +case 33: +#line 212 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1693,397 +1686,397 @@ case 32: copline = yyvsp[-9].ival; yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; -case 33: -#line 217 "perly.y" +case 34: +#line 220 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 34: -#line 223 "perly.y" +case 35: +#line 226 "perly.y" { yyval.opval = Nullop; } break; -case 36: -#line 228 "perly.y" +case 37: +#line 231 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; -case 38: -#line 233 "perly.y" -{ yyval.opval = invert(scalar(yyvsp[0].opval)); } -break; case 39: -#line 237 "perly.y" -{ yyval.opval = yyvsp[0].opval; intro_my(); } +#line 236 "perly.y" +{ yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 241 "perly.y" +#line 240 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 245 "perly.y" +#line 244 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 249 "perly.y" +#line 248 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 253 "perly.y" -{ yyval.pval = Nullch; } +#line 252 "perly.y" +{ yyval.opval = yyvsp[0].opval; intro_my(); } break; -case 45: -#line 258 "perly.y" -{ yyval.ival = 0; } +case 44: +#line 256 "perly.y" +{ yyval.pval = Nullch; } break; case 46: -#line 260 "perly.y" +#line 261 "perly.y" { yyval.ival = 0; } break; case 47: -#line 262 "perly.y" +#line 263 "perly.y" { yyval.ival = 0; } break; case 48: -#line 264 "perly.y" +#line 265 "perly.y" { yyval.ival = 0; } break; case 49: -#line 268 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 267 "perly.y" +{ yyval.ival = 0; } break; case 50: #line 271 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 51: -#line 272 "perly.y" -{ yyval.opval = Nullop; } +#line 274 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 52: -#line 276 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 275 "perly.y" +{ yyval.opval = Nullop; } break; case 53: -#line 280 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 279 "perly.y" +{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 54: -#line 284 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 283 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 55: -#line 288 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 287 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } break; case 56: #line 291 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 57: +#line 294 "perly.y" { char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv, na); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvUNIQUE_on(compcv); yyval.opval = yyvsp[0].opval; } break; -case 57: -#line 299 "perly.y" +case 58: +#line 302 "perly.y" { yyval.opval = Nullop; } break; -case 59: -#line 303 "perly.y" +case 60: +#line 306 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 60: -#line 304 "perly.y" +case 61: +#line 307 "perly.y" { yyval.opval = Nullop; expect = XSTATE; } break; -case 61: -#line 308 "perly.y" +case 62: +#line 311 "perly.y" { package(yyvsp[-1].opval); } break; -case 62: -#line 310 "perly.y" +case 63: +#line 313 "perly.y" { package(Nullop); } break; -case 63: -#line 314 "perly.y" +case 64: +#line 317 "perly.y" { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ } break; -case 64: -#line 316 "perly.y" +case 65: +#line 319 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 65: -#line 320 "perly.y" +case 66: +#line 323 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 66: -#line 322 "perly.y" +case 67: +#line 325 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 68: -#line 327 "perly.y" +case 69: +#line 330 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 69: -#line 329 "perly.y" +case 70: +#line 332 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 71: -#line 334 "perly.y" +case 72: +#line 337 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 72: -#line 337 "perly.y" +case 73: +#line 340 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 73: -#line 340 "perly.y" +case 74: +#line 343 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 74: -#line 345 "perly.y" +case 75: +#line 348 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 75: -#line 350 "perly.y" +case 76: +#line 353 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 76: -#line 355 "perly.y" +case 77: +#line 358 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 77: -#line 357 "perly.y" +case 78: +#line 360 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 78: -#line 359 "perly.y" +case 79: +#line 362 "perly.y" { yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 361 "perly.y" +case 80: +#line 364 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 82: -#line 371 "perly.y" +case 83: +#line 374 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 83: -#line 373 "perly.y" +case 84: +#line 376 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 84: -#line 375 "perly.y" +case 85: +#line 378 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 85: -#line 379 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } -break; case 86: -#line 381 "perly.y" +#line 382 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 87: -#line 383 "perly.y" +#line 384 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 88: -#line 385 "perly.y" +#line 386 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 89: -#line 387 "perly.y" +#line 388 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 90: -#line 389 "perly.y" +#line 390 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 91: -#line 391 "perly.y" -{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} +#line 392 "perly.y" +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 92: -#line 393 "perly.y" -{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } +#line 394 "perly.y" +{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; case 93: -#line 395 "perly.y" -{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } +#line 396 "perly.y" +{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 94: -#line 397 "perly.y" -{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } +#line 398 "perly.y" +{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 95: -#line 399 "perly.y" -{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } +#line 400 "perly.y" +{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; case 96: #line 402 "perly.y" -{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; case 97: -#line 404 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 405 "perly.y" +{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; case 98: -#line 406 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +#line 407 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 99: -#line 408 "perly.y" -{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +#line 409 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 100: -#line 410 "perly.y" -{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } +#line 411 "perly.y" +{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; case 101: -#line 412 "perly.y" -{ yyval.opval = newUNOP(OP_POSTINC, 0, - mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } +#line 413 "perly.y" +{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; case 102: #line 415 "perly.y" -{ yyval.opval = newUNOP(OP_POSTDEC, 0, - mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } +{ yyval.opval = newUNOP(OP_POSTINC, 0, + mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; case 103: #line 418 "perly.y" -{ yyval.opval = newUNOP(OP_PREINC, 0, - mod(scalar(yyvsp[0].opval), OP_PREINC)); } +{ yyval.opval = newUNOP(OP_POSTDEC, 0, + mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; case 104: #line 421 "perly.y" -{ yyval.opval = newUNOP(OP_PREDEC, 0, - mod(scalar(yyvsp[0].opval), OP_PREDEC)); } +{ yyval.opval = newUNOP(OP_PREINC, 0, + mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; case 105: #line 424 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +{ yyval.opval = newUNOP(OP_PREDEC, 0, + mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; case 106: -#line 426 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +#line 427 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 107: -#line 428 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +#line 429 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 108: -#line 430 "perly.y" -{ yyval.opval = newANONLIST(yyvsp[-1].opval); } +#line 431 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } break; case 109: -#line 432 "perly.y" -{ yyval.opval = newANONLIST(Nullop); } +#line 433 "perly.y" +{ yyval.opval = newANONLIST(yyvsp[-1].opval); } break; case 110: -#line 434 "perly.y" -{ yyval.opval = newANONHASH(yyvsp[-2].opval); } +#line 435 "perly.y" +{ yyval.opval = newANONLIST(Nullop); } break; case 111: -#line 436 "perly.y" -{ yyval.opval = newANONHASH(Nullop); } +#line 437 "perly.y" +{ yyval.opval = newANONHASH(yyvsp[-2].opval); } break; case 112: -#line 438 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 439 "perly.y" +{ yyval.opval = newANONHASH(Nullop); } break; case 113: -#line 440 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 441 "perly.y" +{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 114: -#line 442 "perly.y" -{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), - scalar(yyvsp[-2].opval)); } +#line 443 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 115: #line 445 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), + scalar(yyvsp[-2].opval)); } break; case 116: -#line 447 "perly.y" -{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +#line 448 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 117: -#line 449 "perly.y" +#line 450 "perly.y" +{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +break; +case 118: +#line 452 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 118: -#line 453 "perly.y" +case 119: +#line 456 "perly.y" { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 119: -#line 457 "perly.y" -{ yyval.opval = yyvsp[0].opval; } -break; case 120: -#line 459 "perly.y" +#line 460 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 121: -#line 461 "perly.y" -{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} +#line 462 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 122: -#line 463 "perly.y" -{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); - expect = XOPERATOR; } +#line 464 "perly.y" +{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 123: #line 466 "perly.y" +{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); + expect = XOPERATOR; } +break; +case 124: +#line 469 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; -case 124: -#line 471 "perly.y" +case 125: +#line 474 "perly.y" { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; -case 125: -#line 476 "perly.y" +case 126: +#line 479 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 126: -#line 478 "perly.y" +case 127: +#line 481 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 127: -#line 480 "perly.y" +case 128: +#line 483 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 128: -#line 486 "perly.y" +case 129: +#line 489 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2091,38 +2084,38 @@ case 128: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); expect = XOPERATOR; } break; -case 129: -#line 493 "perly.y" -{ yyval.opval = yyvsp[0].opval; } -break; case 130: -#line 495 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } +#line 496 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 131: -#line 497 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } +#line 498 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; case 132: -#line 499 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } +#line 500 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; case 133: #line 502 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } + append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; case 134: #line 505 "perly.y" -{ yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 135: -#line 507 "perly.y" -{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +#line 508 "perly.y" +{ yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); } break; case 136: -#line 509 "perly.y" +#line 510 "perly.y" +{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +break; +case 137: +#line 512 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2131,8 +2124,8 @@ case 136: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 137: -#line 517 "perly.y" +case 138: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2142,162 +2135,162 @@ case 137: scalar(yyvsp[-3].opval) )))); dep();} break; -case 138: -#line 526 "perly.y" +case 139: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 139: -#line 530 "perly.y" +case 140: +#line 533 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 140: -#line 535 "perly.y" +case 141: +#line 538 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 141: -#line 538 "perly.y" +case 142: +#line 541 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 142: -#line 542 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); - hints |= HINT_BLOCK_SCOPE; } -break; case 143: #line 545 "perly.y" -{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } +{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); + hints |= HINT_BLOCK_SCOPE; } break; case 144: -#line 547 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +#line 548 "perly.y" +{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 145: -#line 549 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 550 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 146: -#line 551 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +#line 552 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 147: -#line 553 "perly.y" +#line 554 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 148: -#line 555 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } +#line 556 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 149: #line 558 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 150: -#line 560 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, 0); } +#line 561 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 151: -#line 562 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - scalar(yyvsp[0].opval)); } +#line 563 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 152: #line 565 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + scalar(yyvsp[0].opval)); } break; case 153: -#line 567 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +#line 568 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 154: -#line 569 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } +#line 570 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 155: -#line 571 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } +#line 572 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 158: -#line 577 "perly.y" -{ yyval.opval = Nullop; } +case 156: +#line 574 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 159: -#line 579 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 580 "perly.y" +{ yyval.opval = Nullop; } break; case 160: -#line 583 "perly.y" -{ yyval.opval = Nullop; } +#line 582 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 161: -#line 585 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 586 "perly.y" +{ yyval.opval = Nullop; } break; case 162: -#line 587 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +#line 588 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 163: #line 590 "perly.y" -{ yyval.ival = 0; } +{ yyval.opval = yyvsp[-1].opval; } break; case 164: -#line 591 "perly.y" -{ yyval.ival = 1; } +#line 593 "perly.y" +{ yyval.ival = 0; } break; case 165: -#line 595 "perly.y" -{ in_my = 0; yyval.opval = my(yyvsp[0].opval); } +#line 594 "perly.y" +{ yyval.ival = 1; } break; case 166: -#line 599 "perly.y" -{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } +#line 598 "perly.y" +{ in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; case 167: -#line 603 "perly.y" -{ yyval.opval = newSVREF(yyvsp[0].opval); } +#line 602 "perly.y" +{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 168: -#line 607 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 606 "perly.y" +{ yyval.opval = newSVREF(yyvsp[0].opval); } break; case 169: -#line 611 "perly.y" -{ yyval.opval = newHVREF(yyvsp[0].opval); } +#line 610 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 170: -#line 615 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 614 "perly.y" +{ yyval.opval = newHVREF(yyvsp[0].opval); } break; case 171: -#line 619 "perly.y" -{ yyval.opval = newGVREF(0,yyvsp[0].opval); } +#line 618 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 172: -#line 623 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 622 "perly.y" +{ yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 173: -#line 625 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 626 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 174: -#line 627 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +#line 628 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 175: #line 630 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 176: +#line 633 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2273 "perly.c" +#line 2267 "y.tab.c" } yyssp -= yym; yystate = *yyssp; @@ -2307,7 +2300,7 @@ break; { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: after reduction, shifting from state 0 to state %d\n", YYFINAL); #endif @@ -2323,7 +2316,7 @@ break; yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", + fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } #endif @@ -2338,7 +2331,7 @@ break; yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: after reduction, shifting from state %d to state %d\n", *yyssp, yystate); #endif diff --git a/perly.c.diff b/perly.c.diff index 69555cf2e0..e082aecd27 100644 --- a/perly.c.diff +++ b/perly.c.diff @@ -1,4 +1,6 @@ Index: perly.c +*** perly.c.orig Sun Mar 1 21:44:24 1998 +--- perly.c Sun Mar 1 21:46:32 1998 *************** *** 13,82 **** } @@ -78,7 +80,7 @@ Index: perly.c #define YYERRCODE 256 short yylhs[] = { -1, *************** -*** 1348,1358 **** +*** 1337,1347 **** int yyerrflag; int yychar; - short *yyssp; @@ -88,11 +90,11 @@ Index: perly.c - short yyss[YYSTACKSIZE]; - YYSTYPE yyvs[YYSTACKSIZE]; - #define yystacksize YYSTACKSIZE - #line 632 "perly.y" + #line 636 "perly.y" /* PROGRAM */ ---- 1283,1288 ---- +--- 1272,1277 ---- *************** -*** 1361,1372 **** +*** 1350,1361 **** #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int @@ -105,7 +107,7 @@ Index: perly.c if (yys = getenv("YYDEBUG")) { ---- 1291,1349 ---- +--- 1280,1338 ---- #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab + @@ -166,8 +168,8 @@ Index: perly.c if (yys = getenv("YYDEBUG")) { *************** -*** 1381,1384 **** ---- 1357,1370 ---- +*** 1370,1373 **** +--- 1347,1360 ---- yychar = (-1); + /* @@ -183,20 +185,20 @@ Index: perly.c yyssp = yyss; yyvsp = yyvs; *************** -*** 1396,1400 **** +*** 1385,1389 **** if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! printf("yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } ---- 1380,1384 ---- +--- 1372,1376 ---- if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } *************** -*** 1406,1415 **** +*** 1395,1404 **** #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, shifting to state %d\n", @@ -207,7 +209,7 @@ Index: perly.c ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1390,1413 ---- +--- 1382,1405 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, "yydebug: state %d, shifting to state %d\n", @@ -233,7 +235,7 @@ Index: perly.c } *++yyssp = yystate = yytable[yyn]; *************** -*** 1447,1456 **** +*** 1436,1445 **** #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, error recovery shifting\ @@ -244,7 +246,7 @@ Index: perly.c ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; ---- 1445,1469 ---- +--- 1437,1461 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, @@ -271,14 +273,14 @@ Index: perly.c } *++yyssp = yystate = yytable[yyn]; *************** -*** 1462,1467 **** +*** 1451,1456 **** #if YYDEBUG if (yydebug) ! printf("yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; ---- 1475,1481 ---- +--- 1467,1473 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, @@ -287,14 +289,14 @@ Index: perly.c #endif if (yyssp <= yyss) goto yyabort; *************** -*** 1480,1485 **** +*** 1469,1474 **** if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! printf("yydebug: state %d, error recovery discards token %d (%s)\n", ! yystate, yychar, yys); } #endif ---- 1494,1500 ---- +--- 1486,1492 ---- if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! fprintf(stderr, @@ -303,27 +305,27 @@ Index: perly.c } #endif *************** -*** 1490,1494 **** +*** 1479,1483 **** #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif ---- 1505,1509 ---- +--- 1497,1501 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif *************** -*** 2279,2284 **** +*** 2274,2279 **** #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state 0 to\ ! state %d\n", YYFINAL); #endif yystate = YYFINAL; ---- 2294,2300 ---- +--- 2292,2298 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, @@ -332,20 +334,20 @@ Index: perly.c #endif yystate = YYFINAL; *************** -*** 2294,2298 **** +*** 2289,2293 **** if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! printf("yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } ---- 2310,2314 ---- +--- 2308,2312 ---- if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } *************** -*** 2309,2318 **** +*** 2304,2313 **** #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state %d \ @@ -356,7 +358,7 @@ Index: perly.c ! goto yyoverflow; } *++yyssp = yystate; ---- 2325,2349 ---- +--- 2323,2347 ---- #if YYDEBUG if (yydebug) ! fprintf(stderr, @@ -383,7 +385,7 @@ Index: perly.c } *++yyssp = yystate; *************** -*** 2320,2327 **** +*** 2315,2322 **** goto yyloop; yyoverflow: ! yyerror("yacc stack overflow"); @@ -392,7 +394,7 @@ Index: perly.c yyaccept: ! return (0); } ---- 2351,2358 ---- +--- 2349,2356 ---- goto yyloop; yyoverflow: ! yyerror("Out of memory for yacc stack"); @@ -153,6 +153,9 @@ sideff : error { $$ = newLOOPOP(OPf_PARENS, 1, scalar($3), $1); } | expr UNTIL iexpr { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1);} + | expr FOR expr + { $$ = newFOROP(0, Nullch, $2, + Nullop, $3, $1, Nullop); } ; else : /* NULL */ diff --git a/pod/checkpods.PL b/pod/checkpods.PL index ccd78ec9cf..0cac62325e 100644 --- a/pod/checkpods.PL +++ b/pod/checkpods.PL @@ -37,7 +37,7 @@ print OUT <<'!NO!SUBS!'; # From: Roderick Schertler <roderick@gate.net> # To: perl5-porters@africa.nicoh.com # Subject: POD lines with only spaces -# +# # There are some places in the documentation where a POD directive is # ignored because the line before it contains whitespace (and so the # directive doesn't start a paragraph). This patch adds a way to check @@ -53,18 +53,25 @@ print OUT <<'!NO!SUBS!'; # to grow. Someone will probably want to rewrite in terms of # some sort of Pod::Checker module. Or something. Consider this # a placeholder for the future. -$exit = $last_blank = 0; +# Version 1.02 Roderick Schertler <roderick@argon.org> +# Check for pod directives following any kind of unempty line, not +# just lines of whitespace. + +@directive = qw(head1 head2 item over back cut pod for begin end); +@directive{@directive} = (1) x @directive; + +$exit = $last_unempty = 0; while (<>) { - chop; - if (/^(=\S+)/ && $last_blank) { - printf "%s: line %5d, Non-empty line preceeding directive %s\n", + chomp; + if (/^=(\S+)/ && $directive{$1} && $last_unempty) { + printf "%s: line %5d, no blank line preceeding directive =%s\n", $ARGV, $., $1; $exit = 1; } - $last_blank = /^\s+$/; + $last_unempty = ($_ ne ''); if (eof) { close(ARGV); - $last_blank = 0; + $last_unempty = 0; } } exit $exit diff --git a/pod/perlcall.pod b/pod/perlcall.pod index f90e09f238..865d3bf88d 100644 --- a/pod/perlcall.pod +++ b/pod/perlcall.pod @@ -404,7 +404,7 @@ via this XSUB void Call_fred() CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_pv("fred", G_DISCARD|G_NOARGS) ; fprintf(stderr, "back in Call_fred\n") ; @@ -421,7 +421,7 @@ higher, or use the G_EVAL flag with I<perl_call_*> as shown below void Call_fred() CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_pv("fred", G_EVAL|G_DISCARD|G_NOARGS) ; fprintf(stderr, "back in Call_fred\n") ; @@ -462,7 +462,7 @@ and here is a C function to call it { dSP ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_pv("PrintUID", G_DISCARD|G_NOARGS) ; } @@ -474,7 +474,7 @@ A few points to note about this example. =item 1. -Ignore C<dSP> and C<PUSHMARK(sp)> for now. They will be discussed in +Ignore C<dSP> and C<PUSHMARK(SP)> for now. They will be discussed in the next example. =item 2. @@ -526,7 +526,7 @@ The C function required to call I<LeftString> would look like this. { dSP ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSVpv(a, 0))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -542,8 +542,9 @@ Here are a few notes on the C function I<call_LeftString>. Parameters are passed to the Perl subroutine using the Perl stack. This is the purpose of the code beginning with the line C<dSP> and -ending with the line C<PUTBACK>. - +ending with the line C<PUTBACK>. The C<dSP> declares a local copy +of the stack pointer. This local copy should B<always> be accessed +as C<SP>. =item 2. @@ -630,7 +631,7 @@ function required to call it is now a bit more complex. ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -766,7 +767,7 @@ and this is the C function ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -829,7 +830,7 @@ context, like this ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -897,7 +898,7 @@ and here is a C function to call it. sva = sv_2mortal(newSViv(a)) ; svb = sv_2mortal(newSViv(b)) ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sva); XPUSHs(svb); PUTBACK ; @@ -954,7 +955,7 @@ and some C to call it ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -1087,7 +1088,7 @@ Here is a snippet of XSUB which defines I<CallSubPV>. CallSubPV(name) char * name CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_pv(name, G_DISCARD|G_NOARGS) ; That is fine as far as it goes. The thing is, the Perl subroutine @@ -1103,7 +1104,7 @@ I<perl_call_sv> instead of I<perl_call_pv>. CallSubSV(name) SV * name CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_sv(name, G_DISCARD|G_NOARGS) ; Because we are using an SV to call I<fred> the following can all be used @@ -1133,7 +1134,7 @@ pointer to the SV. Say the code above had been like this void CallSavedSub1() CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_sv(rememberSub, G_DISCARD|G_NOARGS) ; The reason this is wrong is that by the time you come to use the @@ -1209,7 +1210,7 @@ SV. The code below shows C<SaveSub2> modified to do that void CallSavedSub2() CODE: - PUSHMARK(sp) ; + PUSHMARK(SP) ; perl_call_sv(keepSub, G_DISCARD|G_NOARGS) ; To avoid creating a new SV every time C<SaveSub2> is called, @@ -1318,7 +1319,7 @@ the C<PrintID> and C<Display> methods from C. char * method int index CODE: - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(ref); XPUSHs(sv_2mortal(newSViv(index))) ; PUTBACK; @@ -1330,7 +1331,7 @@ the C<PrintID> and C<Display> methods from C. char * class char * method CODE: - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(sv_2mortal(newSVpv(class, 0))) ; PUTBACK; @@ -1522,7 +1523,7 @@ Now change that to call a Perl subroutine instead { dSP ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; /* Call the Perl sub to process the callback */ perl_call_sv(callback, G_DISCARD) ; @@ -1625,7 +1626,7 @@ and C<asynch_read_if> could look like this if (sv == (SV**)NULL) croak("Internal error...\n") ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(fh))) ; XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ; PUTBACK ; @@ -1709,7 +1710,7 @@ series of C functions to act as the interface to Perl, thus { dSP ; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ; PUTBACK ; @@ -1863,7 +1864,7 @@ of values> recoded to use C<ST> instead of C<POP*>. ENTER ; SAVETMPS; - PUSHMARK(sp) ; + PUSHMARK(SP) ; XPUSHs(sv_2mortal(newSViv(a))); XPUSHs(sv_2mortal(newSViv(b))); PUTBACK ; @@ -1871,8 +1872,8 @@ of values> recoded to use C<ST> instead of C<POP*>. count = perl_call_pv("AddSubtract", G_ARRAY); SPAGAIN ; - sp -= count ; - ax = (sp - stack_base) + 1 ; + SP -= count ; + ax = (SP - stack_base) + 1 ; if (count != 2) croak("Big trouble\n") ; @@ -1901,8 +1902,8 @@ you. The code SPAGAIN ; - sp -= count ; - ax = (sp - stack_base) + 1 ; + SP -= count ; + ax = (SP - stack_base) + 1 ; sets the stack up so that we can use the C<ST> macro. diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 5c99211e62..9443f386d9 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1208,7 +1208,7 @@ or a hash slice, such as =item Applying %s to %s will act on scalar(%s) -(W) The pattern match (//), substitution (s///), and translation (tr///) +(W) The pattern match (//), substitution (s///), and transliteration (tr///) operators work on scalar values. If you apply one of them to an array or a hash, it will convert the array or hash to a scalar value -- the length of an array, or the population info of a hash -- and then work on @@ -1228,6 +1228,12 @@ that can no longer be found in the table. as an lvalue, which is pretty strange. Perhaps you forgot to dereference it first. See L<perlfunc/substr>. +=item Bareword "%s" refers to nonexistent package + +(W) You used a qualified bareword of the form C<Foo::>, but +the compiler saw no other uses of that namespace before that point. +Perhaps you need to predeclare a package? + =item Can't redefine active sort subroutine %s (F) Perl optimizes the internal handling of sort subroutines and keeps diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 5f2876bc73..9f16761239 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -194,7 +194,7 @@ the return value of your socket() call? See L<perlfunc/accept>. =item Applying %s to %s will act on scalar(%s) -(W) The pattern match (//), substitution (s///), and translation (tr///) +(W) The pattern match (//), substitution (s///), and transliteration (tr///) operators work on scalar values. If you apply one of them to an array or a hash, it will convert the array or hash to a scalar value -- the length of an array, or the population info of a hash -- and then work on @@ -361,6 +361,12 @@ Perl yourself. subroutine identifier, in curly braces or to the left of the "=>" symbol. Perhaps you need to predeclare a subroutine? +=item Bareword "%s" refers to nonexistent package + +(W) You used a qualified bareword of the form C<Foo::>, but +the compiler saw no other uses of that namespace before that point. +Perhaps you need to predeclare a package? + =item BEGIN failed--compilation aborted (F) An untrapped exception was raised while executing a BEGIN subroutine. @@ -2463,13 +2469,13 @@ Perl yourself. (F) The regular expression ends with an unbackslashed backslash. Backslash it. See L<perlre>. -=item Translation pattern not terminated +=item Transliteration pattern not terminated (F) The lexer couldn't find the interior delimiter of a tr/// or tr[][] or y/// or y[][] construct. Missing the leading C<$> from variables C<$tr> or C<$y> may cause this error. -=item Translation replacement not terminated +=item Transliteration replacement not terminated (F) The lexer couldn't find the final delimiter of a tr/// or tr[][] construct. diff --git a/pod/perlembed.pod b/pod/perlembed.pod index e7164b58f9..32096789ec 100644 --- a/pod/perlembed.pod +++ b/pod/perlembed.pod @@ -370,7 +370,7 @@ been wrapped here): dSP; SV* retval; - PUSHMARK(sp); + PUSHMARK(SP); perl_eval_sv(sv, G_SCALAR); SPAGAIN; @@ -563,7 +563,7 @@ deep breath... dSP; /* initialize stack pointer */ ENTER; /* everything created after here */ SAVETMPS; /* ...is a temporary variable. */ - PUSHMARK(sp); /* remember the stack pointer */ + PUSHMARK(SP); /* remember the stack pointer */ XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */ XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */ PUTBACK; /* make local stack pointer global */ diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index 0570c8fe64..f509f61553 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -3720,7 +3720,7 @@ seconds, for this process and the children of this process. =item tr/// -The translation operator. Same as y///. See L<perlop>. +The transliteration operator. Same as y///. See L<perlop>. =item truncate FILEHANDLE,LENGTH @@ -4062,6 +4062,6 @@ Note that write is I<NOT> the opposite of read. Unfortunately. =item y/// -The translation operator. Same as tr///. See L<perlop>. +The transliteration operator. Same as tr///. See L<perlop>. =back diff --git a/pod/perlguts.pod b/pod/perlguts.pod index 4ef8c22713..c6ba0115e2 100644 --- a/pod/perlguts.pod +++ b/pod/perlguts.pod @@ -1088,10 +1088,10 @@ two, the local time zone's standard and summer time abbreviations. To handle this situation, the PPCODE directive is used and the stack is extended using the macro: - EXTEND(sp, num); + EXTEND(SP, num); -where C<sp> is the stack pointer, and C<num> is the number of elements the -stack should be extended by. +where C<SP> is the macro that represents the local copy of the stack pointer, +and C<num> is the number of elements the stack should be extended by. Now that there is room on the stack, values can be pushed on it using the macros to push IVs, doubles, strings, and SV pointers respectively: @@ -1144,6 +1144,7 @@ must manipulate the Perl stack. These include the following macros and functions: dSP + SP PUSHMARK() PUTBACK SPAGAIN @@ -1575,7 +1576,8 @@ The C variable which corresponds to Perl's $^W warning variable. =item dSP -Declares a stack pointer variable, C<sp>, for the XSUB. See C<SP>. +Declares a local copy of perl's stack pointer for the XSUB, available via +the C<SP> macro. See C<SP>. =item dXSARGS @@ -3457,17 +3459,14 @@ destination, C<n> is the number of items, and C<t> is the type. =back -=head1 EDITOR +=head1 AUTHORS -Jeff Okamoto <F<okamoto@corp.hp.com>> +Until May 1997, this document was maintained by Jeff Okamoto +<okamoto@corp.hp.com>. It is now maintained as part of Perl itself. With lots of help and suggestions from Dean Roehrich, Malcolm Beattie, Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer, Stephen McCamant, and Gurusamy Sarathy. -API Listing by Dean Roehrich <F<roehrich@cray.com>>. - -=head1 DATE - -Version 31.8: 1997/5/17 +API Listing originally by Dean Roehrich <roehrich@cray.com>. diff --git a/pod/perllocale.pod b/pod/perllocale.pod index 037fcc9f91..70a32e4fe9 100644 --- a/pod/perllocale.pod +++ b/pod/perllocale.pod @@ -491,7 +491,7 @@ regular expressions.) Thanks to C<LC_CTYPE>, depending on your locale setting, characters like 'E<aelig>', 'E<eth>', 'E<szlig>', and 'E<oslash>' may be understood as C<\w> characters. -The C<LC_CTYPE> locale also provides the map used in translating +The C<LC_CTYPE> locale also provides the map used in transliterating characters between lower and uppercase. This affects the case-mapping functions - lc(), lcfirst, uc() and ucfirst(); case-mapping interpolation with C<\l>, C<\L>, C<\u> or <\U> in double-quoted strings diff --git a/pod/perlmod.pod b/pod/perlmod.pod index 4d0ad2d449..942f216dda 100644 --- a/pod/perlmod.pod +++ b/pod/perlmod.pod @@ -45,7 +45,7 @@ forced to be in package C<main>, even when used for other purposes than their builtin one. Note also that, if you have a package called C<m>, C<s>, or C<y>, then you can't use the qualified form of an identifier because it will be interpreted instead as a pattern match, a substitution, -or a translation. +or a transliteration. (Variables beginning with underscore used to be forced into package main, but we decided it was more useful for package writers to be able diff --git a/pod/perlop.pod b/pod/perlop.pod index 17728df9d3..5d1aae79a6 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -145,7 +145,7 @@ is returned. One effect of these rules is that C<-bareword> is equivalent to C<"-bareword">. Unary "~" performs bitwise negation, i.e., 1's complement. -(See also L<Integer Arithmetic>.) +(See also L<Integer Arithmetic> and L<Bitwise String Operators>.) Unary "+" has no effect whatsoever, even on strings. It is useful syntactically for separating a function name from a parenthesized expression @@ -162,11 +162,11 @@ thing from interpretation. Binary "=~" binds a scalar expression to a pattern match. Certain operations search or modify the string $_ by default. This operator makes that kind of operation work on some other string. The right argument is a search -pattern, substitution, or translation. The left argument is what is -supposed to be searched, substituted, or translated instead of the default +pattern, substitution, or transliteration. The left argument is what is +supposed to be searched, substituted, or transliterated instead of the default $_. The return value indicates the success of the operation. (If the right argument is an expression rather than a search pattern, -substitution, or translation, it is interpreted as a search pattern at run +substitution, or transliteration, it is interpreted as a search pattern at run time. This can be is less efficient than an explicit search, because the pattern must be compiled every time the expression is evaluated. @@ -300,15 +300,15 @@ by the current locale if C<use locale> is in effect. See L<perllocale>. =head2 Bitwise And Binary "&" returns its operators ANDed together bit by bit. -(See also L<Integer Arithmetic>.) +(See also L<Integer Arithmetic> and L<Bitwise String Operators>.) =head2 Bitwise Or and Exclusive Or Binary "|" returns its operators ORed together bit by bit. -(See also L<Integer Arithmetic>.) +(See also L<Integer Arithmetic> and L<Bitwise String Operators>.) Binary "^" returns its operators XORed together bit by bit. -(See also L<Integer Arithmetic>.) +(See also L<Integer Arithmetic> and L<Bitwise String Operators>.) =head2 C-style Logical And @@ -558,14 +558,14 @@ any pair of delimiters you choose. Non-bracketing delimiters use the same character fore and aft, but the 4 sorts of brackets (round, angle, square, curly) will all nest. - Customary Generic Meaning Interpolates - '' q{} Literal no - "" qq{} Literal yes - `` qx{} Command yes - qw{} Word list no - // m{} Pattern match yes - s{}{} Substitution yes - tr{}{} Translation no + Customary Generic Meaning Interpolates + '' q{} Literal no + "" qq{} Literal yes + `` qx{} Command yes + qw{} Word list no + // m{} Pattern match yes + s{}{} Substitution yes + tr{}{} Transliteration no (but see below) Note that there can be whitespace between the operator and the quoting characters, except when C<#> is being used as the quoting character. @@ -576,8 +576,9 @@ next line. This allows you to write: s {foo} # Replace foo {bar} # with bar. -For constructs that do interpolation, variables beginning with "C<$>" or "C<@>" -are interpolated, as are the following sequences: +For constructs that do interpolation, variables beginning with "C<$>" +or "C<@>" are interpolated, as are the following sequences. Within +a transliteration, the first ten of these sequences may be used. \t tab (HT, TAB) \n newline (LF, NL) @@ -589,6 +590,7 @@ are interpolated, as are the following sequences: \033 octal char \x1b hex char \c[ control char + \l lowercase next char \u uppercase next char \L lowercase till \E @@ -954,16 +956,18 @@ to occur. Here are two common cases: =item y/SEARCHLIST/REPLACEMENTLIST/cds -Translates all occurrences of the characters found in the search list +Transliterates all occurrences of the characters found in the search list with the corresponding character in the replacement list. It returns the number of characters replaced or deleted. If no string is -specified via the =~ or !~ operator, the $_ string is translated. (The +specified via the =~ or !~ operator, the $_ string is transliterated. (The string specified with =~ must be a scalar variable, an array element, a hash element, or an assignment to one of those, i.e., an lvalue.) +A character range may be specified with a hyphen, so C<tr/A-J/0-9/> +does the same replacement as C<tr/ACEGIBDFHJ/0246813579/>. For B<sed> devotees, C<y> is provided as a synonym for C<tr>. If the SEARCHLIST is delimited by bracketing quotes, the REPLACEMENTLIST has its own pair of quotes, which may or may not be bracketing quotes, -e.g., C<tr[A-Z][a-z]> or C<tr(+-*/)/ABCD/>. +e.g., C<tr[A-Z][a-z]> or C<tr(+\-*/)/ABCD/>. Options: @@ -977,7 +981,7 @@ by SEARCHLIST not found in REPLACEMENTLIST are deleted. (Note that this is slightly more flexible than the behavior of some B<tr> programs, which delete anything they find in the SEARCHLIST, period.) If the C</s> modifier is specified, sequences of characters that were -translated to the same character are squashed down to a single instance of the +transliterated to the same character are squashed down to a single instance of the character. If the C</d> modifier is used, the REPLACEMENTLIST is always interpreted @@ -1006,13 +1010,13 @@ Examples: tr [\200-\377] [\000-\177]; # delete 8th bit -If multiple translations are given for a character, only the first one is used: +If multiple transliterations are given for a character, only the first one is used: tr/AAA/XYZ/ -will translate any A to X. +will transliterate any A to X. -Note that because the translation table is built at compile time, neither +Note that because the transliteration table is built at compile time, neither the SEARCHLIST nor the REPLACEMENTLIST are subjected to double quote interpolation. That means that if you want to use variables, you must use an eval(): @@ -1213,6 +1217,34 @@ the compiler will precompute the number that expression represents so that the interpreter won't have to. +=head2 Bitwise String Operators + +Bitstrings of any size may be manipulated by the bitwise operators +(C<~ | & ^>). + +If the operands to a binary bitwise op are strings of different sizes, +B<or> and B<xor> ops will act as if the shorter operand had additional +zero bits on the right, while the B<and> op will act as if the longer +operand were truncated to the length of the shorter. + + # ASCII-based examples + print "j p \n" ^ " a h"; # prints "JAPH\n" + print "JA" | " ph\n"; # prints "japh\n" + print "japh\nJunk" & '_____'; # prints "JAPH\n"; + print 'p N$' ^ " E<H\n"; # prints "Perl\n"; + +If you are intending to manipulate bitstrings, you should be certain that +you're supplying bitstrings: If an operand is a number, that will imply +a B<numeric> bitwise operation. You may explicitly show which type of +operation you intend by using C<""> or C<0+>, as in the examples below. + + $foo = 150 | 105 ; # yields 255 (0x96 | 0x69 is 0xFF) + $foo = '150' | 105 ; # yields 255 + $foo = 150 | '105'; # yields 255 + $foo = '150' | '105'; # yields string '155' (under ASCII) + + $baz = 0+$foo & 0+$bar; # both ops explicitly numeric + $biz = "$foo" ^ "$bar"; # both ops explicitly stringy =head2 Integer Arithmetic @@ -1230,7 +1262,8 @@ countermand this by saying which lasts until the end of that BLOCK. The bitwise operators ("&", "|", "^", "~", "<<", and ">>") always -produce integral results. However, C<use integer> still has meaning +produce integral results. (But see also L<Bitwise String Operators>.) +However, C<use integer> still has meaning for them. By default, their results are interpreted as unsigned integers. However, if C<use integer> is in effect, their results are interpreted as signed integers. For example, C<~0> usually evaluates diff --git a/pod/perlstyle.pod b/pod/perlstyle.pod index bfc94a9eaa..5ad73cfafe 100644 --- a/pod/perlstyle.pod +++ b/pod/perlstyle.pod @@ -250,7 +250,7 @@ sufficient example: =item * -Line up your translations when it makes sense: +Line up your transliterations when it makes sense: tr [abc] [xyz]; diff --git a/pod/perlsyn.pod b/pod/perlsyn.pod index 5274d28383..205be7d97a 100644 --- a/pod/perlsyn.pod +++ b/pod/perlsyn.pod @@ -79,14 +79,16 @@ modifiers are: unless EXPR while EXPR until EXPR + foreach EXPR The C<if> and C<unless> modifiers have the expected semantics, -presuming you're a speaker of English. The C<while> and C<until> -modifiers also have the usual "while loop" semantics (conditional -evaluated first), except when applied to a do-BLOCK (or to the -now-deprecated do-SUBROUTINE statement), in which case the block -executes once before the conditional is evaluated. This is so that you -can write loops like: +presuming you're a speaker of English. The C<foreach> modifier is an +iterator: For each value in EXPR, it aliases $_ to the value and +executes the statement. The C<while> and C<until> modifiers have the +usual "while loop" semantics (conditional evaluated first), except +when applied to a do-BLOCK (or to the now-deprecated do-SUBROUTINE +statement), in which case the block executes once before the +conditional is evaluated. This is so that you can write loops like: do { $line = <STDIN>; diff --git a/pod/perlxs.pod b/pod/perlxs.pod index 07abd10564..d065b94425 100644 --- a/pod/perlxs.pod +++ b/pod/perlxs.pod @@ -558,7 +558,7 @@ Perl as a single list. bool_t status; PPCODE: status = rpcb_gettime( host, &timep ); - EXTEND(sp, 2); + EXTEND(SP, 2); PUSHs(sv_2mortal(newSViv(status))); PUSHs(sv_2mortal(newSViv(timep))); @@ -573,7 +573,7 @@ directive. The EXTEND() macro is used to make room on the argument stack for 2 return values. The PPCODE: directive causes the -B<xsubpp> compiler to create a stack pointer called C<sp>, and it +B<xsubpp> compiler to create a stack pointer available as C<SP>, and it is this pointer which is being used in the EXTEND() macro. The values are then pushed onto the stack with the PUSHs() macro. @@ -2218,7 +2218,7 @@ PP(pp_aslice) if (SvTYPE(av) == SVt_PVAV) { if (lval && op->op_private & OPpLVAL_INTRO) { I32 max = -1; - for (svp = mark + 1; svp <= sp; svp++) { + for (svp = MARK + 1; svp <= SP; svp++) { elem = SvIVx(*svp); if (elem > max) max = elem; @@ -2236,7 +2236,7 @@ PP(pp_aslice) if (!svp || *svp == &sv_undef) DIE(no_aelem, elem); if (op->op_private & OPpLVAL_INTRO) - save_svref(svp); + save_aelem(av, elem, svp); } *MARK = svp ? *svp : &sv_undef; } @@ -2378,7 +2378,7 @@ PP(pp_hslice) if (!he || HeVAL(he) == &sv_undef) DIE(no_helem, SvPV(keysv, na)); if (op->op_private & OPpLVAL_INTRO) - save_svref(&HeVAL(he)); + save_helem(hv, keysv, &HeVAL(he)); } *MARK = he ? HeVAL(he) : &sv_undef; } @@ -2860,7 +2860,7 @@ PP(pp_unpack) { djSP; dPOPPOPssrl; - SV **oldsp = sp; + SV **oldsp = SP; I32 gimme = GIMME_V; SV *sv; STRLEN llen; @@ -3544,7 +3544,7 @@ PP(pp_unpack) checksum = 0; } } - if (sp == oldsp && gimme == G_SCALAR) + if (SP == oldsp && gimme == G_SCALAR) PUSHs(&sv_undef); RETURN; } @@ -4438,7 +4438,7 @@ PP(pp_threadsv) { djSP; #ifdef USE_THREADS - EXTEND(sp, 1); + EXTEND(SP, 1); if (op->op_private & OPpLVAL_INTRO) PUSHs(*save_threadsv(op->op_targ)); else @@ -538,7 +538,7 @@ PP(pp_grepstart) djSP; SV *src; - if (stack_base + *markstack_ptr == sp) { + if (stack_base + *markstack_ptr == SP) { (void)POPMARK; if (GIMME_V == G_SCALAR) XPUSHs(&sv_no); @@ -577,7 +577,7 @@ PP(pp_mapstart) PP(pp_mapwhile) { djSP; - I32 diff = (sp - stack_base) - *markstack_ptr; + I32 diff = (SP - stack_base) - *markstack_ptr; I32 count; I32 shift; SV** src; @@ -587,11 +587,11 @@ PP(pp_mapwhile) if (diff) { if (diff > markstack_ptr[-1] - markstack_ptr[-2]) { shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]); - count = (sp - stack_base) - markstack_ptr[-1] + 2; + count = (SP - stack_base) - markstack_ptr[-1] + 2; - EXTEND(sp,shift); - src = sp; - dst = (sp += shift); + EXTEND(SP,shift); + src = SP; + dst = (SP += shift); markstack_ptr[-1] += shift; *markstack_ptr += shift; while (--count) @@ -792,7 +792,7 @@ PP(pp_flip) } else { sv_setiv(targ, 0); - sp--; + SP--; RETURNOP(((CONDOP*)cUNOP->op_first)->op_false); } } @@ -1286,7 +1286,7 @@ PP(pp_dbstate) if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace)) { - SV **sp; + djSP; register CV *cv; register PERL_CONTEXT *cx; I32 gimme = G_ARRAY; @@ -1308,10 +1308,10 @@ PP(pp_dbstate) SAVESTACK_POS(); debug = 0; hasargs = 0; - sp = stack_sp; + SPAGAIN; push_return(op->op_next); - PUSHBLOCK(cx, CXt_SUB, sp); + PUSHBLOCK(cx, CXt_SUB, SP); PUSHSUB(cx); CvDEPTH(cv)++; (void)SvREFCNT_inc(cv); @@ -1361,7 +1361,7 @@ PP(pp_enteriter) cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs); else { cx->blk_loop.iterary = curstack; - AvFILLp(curstack) = sp - stack_base; + AvFILLp(curstack) = SP - stack_base; cx->blk_loop.iterix = MARK - stack_base; } @@ -1751,15 +1751,15 @@ PP(pp_goto) if (CvXSUB(cv)) { if (CvOLDSTYLE(cv)) { I32 (*fp3)_((int,int,int)); - while (sp > mark) { - sp[1] = sp[0]; - sp--; + while (SP > mark) { + SP[1] = SP[0]; + SP--; } fp3 = (I32(*)_((int,int,int)))CvXSUB(cv); items = (*fp3)(CvXSUBANY(cv).any_i32, mark - stack_base + 1, items); - sp = stack_base + items; + SP = stack_base + items; } else { stack_sp--; /* There is no cv arg. */ @@ -1833,9 +1833,9 @@ PP(pp_goto) items = AvFILLp(av) + 1; if (items) { /* Mark is at the end of the stack. */ - EXTEND(sp, items); - Copy(AvARRAY(av), sp + 1, items, SV*); - sp += items; + EXTEND(SP, items); + Copy(AvARRAY(av), SP + 1, items, SV*); + SP += items; PUTBACK ; } } @@ -2154,7 +2154,11 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp) safestr = savepv(tmpbuf); SAVEDELETE(defstash, safestr, strlen(safestr)); SAVEI32(hints); +#ifdef OP_IN_REGISTER + opsave = op; +#else SAVEPPTR(op); +#endif hints = 0; op = &dummy; @@ -2171,6 +2175,9 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp) lex_end(); *avp = (AV*)SvREFCNT_inc(comppad); LEAVE; +#ifdef OP_IN_REGISTER + op = opsave; +#endif return rop; } @@ -2329,7 +2336,7 @@ doeval(int gimme, OP** startop) CV *cv = perl_get_cv("DB::postponed", FALSE); if (cv) { dSP; - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs((SV*)compiling.cop_filegv); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); @@ -2642,7 +2649,7 @@ PP(pp_leaveeval) lex_end(); if (optype == OP_REQUIRE && - !(gimme == G_SCALAR ? SvTRUE(*sp) : sp > newsp)) + !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp)) { /* Unassume the success we assumed earlier. */ char *name = cx->blk_eval.old_name; @@ -3567,9 +3574,10 @@ qsortsv( if (j != i) { /* Looks like we really need to move some things */ + int k; temp = array[i]; - for (--i; i >= j; --i) - array[i + 1] = array[i]; + for (k = i - 1; k >= j; --k) + array[k + 1] = array[k]; array[j] = temp; } } @@ -65,7 +65,7 @@ PP(pp_nextstate) PP(pp_gvsv) { djSP; - EXTEND(sp,1); + EXTEND(SP,1); if (op->op_private & OPpLVAL_INTRO) PUSHs(save_scalar(cGVOP->op_gv)); else @@ -1265,7 +1265,7 @@ PP(pp_enter) ENTER; SAVETMPS; - PUSHBLOCK(cx, CXt_BLOCK, sp); + PUSHBLOCK(cx, CXt_BLOCK, SP); RETURN; } @@ -1310,7 +1310,7 @@ PP(pp_helem) if (HvNAME(hv) && isGV(*svp)) save_gp((GV*)*svp, !(op->op_flags & OPf_SPECIAL)); else - save_svref(svp); + save_helem(hv, keysv, svp); } else if (op->op_private & OPpDEREF) vivify_ref(*svp, op->op_private & OPpDEREF); @@ -1382,7 +1382,7 @@ PP(pp_iter) SV* sv; AV* av; - EXTEND(sp, 1); + EXTEND(SP, 1); cx = &cxstack[cxstack_ix]; if (cx->cx_type != CXt_LOOP) DIE("panic: pp_iter"); @@ -1714,7 +1714,7 @@ PP(pp_grepwhile) LEAVE; /* exit inner scope */ /* All done yet? */ - if (stack_base + *markstack_ptr > sp) { + if (stack_base + *markstack_ptr > SP) { I32 items; I32 gimme = GIMME_V; @@ -2038,9 +2038,9 @@ PP(pp_entersub) dMARK; register I32 items = SP - MARK; /* We dont worry to copy from @_. */ - while (sp > mark) { - sp[1] = sp[0]; - sp--; + while (SP > mark) { + SP[1] = SP[0]; + SP--; } stack_sp = mark + 1; fp3 = (I32(*)_((int,int,int)))CvXSUB(cv); @@ -2069,9 +2069,9 @@ PP(pp_entersub) if (items) { /* Mark is at the end of the stack. */ - EXTEND(sp, items); - Copy(AvARRAY(av), sp + 1, items, SV*); - sp += items; + EXTEND(SP, items); + Copy(AvARRAY(av), SP + 1, items, SV*); + SP += items; PUTBACK ; } } @@ -2157,9 +2157,9 @@ PP(pp_entersub) items = AvFILLp(av) + 1; if (items) { /* Mark is at the end of the stack. */ - EXTEND(sp, items); - Copy(AvARRAY(av), sp + 1, items, SV*); - sp += items; + EXTEND(SP, items); + Copy(AvARRAY(av), SP + 1, items, SV*); + SP += items; PUTBACK ; } } @@ -2261,7 +2261,7 @@ PP(pp_aelem) RETURN; } if (op->op_private & OPpLVAL_INTRO) - save_svref(svp); + save_aelem(av, elem, svp); else if (op->op_private & OPpDEREF) vivify_ref(*svp, op->op_private & OPpDEREF); } @@ -648,9 +648,9 @@ PP(pp_dbmopen) } ENTER; - PUSHMARK(sp); + PUSHMARK(SP); - EXTEND(sp, 5); + EXTEND(SP, 5); PUSHs(sv); PUSHs(left); if (SvIV(right)) @@ -663,8 +663,8 @@ PP(pp_dbmopen) SPAGAIN; if (!sv_isobject(TOPs)) { - sp--; - PUSHMARK(sp); + SP--; + PUSHMARK(SP); PUSHs(sv); PUSHs(left); PUSHs(sv_2mortal(newSViv(O_RDONLY))); @@ -3584,7 +3584,7 @@ PP(pp_semop) PP(pp_ghbyname) { -#ifdef HAS_SOCKET +#ifdef HAS_GETHOSTBYNAME return pp_ghostent(ARGS); #else DIE(no_sock_func, "gethostbyname"); @@ -3593,7 +3593,7 @@ PP(pp_ghbyname) PP(pp_ghbyaddr) { -#ifdef HAS_SOCKET +#ifdef HAS_GETHOSTBYADDR return pp_ghostent(ARGS); #else DIE(no_sock_func, "gethostbyaddr"); @@ -3603,7 +3603,7 @@ PP(pp_ghbyaddr) PP(pp_ghostent) { djSP; -#ifdef HAS_SOCKET +#if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT) I32 which = op->op_type; register char **elem; register SV *sv; @@ -3687,7 +3687,7 @@ PP(pp_ghostent) PP(pp_gnbyname) { -#ifdef HAS_SOCKET +#ifdef HAS_GETNETBYNAME return pp_gnetent(ARGS); #else DIE(no_sock_func, "getnetbyname"); @@ -3696,7 +3696,7 @@ PP(pp_gnbyname) PP(pp_gnbyaddr) { -#ifdef HAS_SOCKET +#ifdef HAS_GETNETBYADDR return pp_gnetent(ARGS); #else DIE(no_sock_func, "getnetbyaddr"); @@ -3706,7 +3706,7 @@ PP(pp_gnbyaddr) PP(pp_gnetent) { djSP; -#ifdef HAS_SOCKET +#if defined(HAS_GETNETBYNAME) || defined(HAS_GETNETBYADDR) || defined(HAS_GETNETENT) I32 which = op->op_type; register char **elem; register SV *sv; @@ -3762,7 +3762,7 @@ PP(pp_gnetent) PP(pp_gpbyname) { -#ifdef HAS_SOCKET +#ifdef HAS_GETPROTOBYNAME return pp_gprotoent(ARGS); #else DIE(no_sock_func, "getprotobyname"); @@ -3771,7 +3771,7 @@ PP(pp_gpbyname) PP(pp_gpbynumber) { -#ifdef HAS_SOCKET +#ifdef HAS_GETPROTOBYNUMBER return pp_gprotoent(ARGS); #else DIE(no_sock_func, "getprotobynumber"); @@ -3781,7 +3781,7 @@ PP(pp_gpbynumber) PP(pp_gprotoent) { djSP; -#ifdef HAS_SOCKET +#if defined(HAS_GETPROTOBYNAME) || defined(HAS_GETPROTOBYNUMBER) || defined(HAS_GETPROTOENT) I32 which = op->op_type; register char **elem; register SV *sv; @@ -3834,7 +3834,7 @@ PP(pp_gprotoent) PP(pp_gsbyname) { -#ifdef HAS_SOCKET +#ifdef HAS_GETSERVICEBYNAME return pp_gservent(ARGS); #else DIE(no_sock_func, "getservbyname"); @@ -3843,7 +3843,7 @@ PP(pp_gsbyname) PP(pp_gsbyport) { -#ifdef HAS_SOCKET +#ifdef HAS_GETSERVICEBYPORT return pp_gservent(ARGS); #else DIE(no_sock_func, "getservbyport"); @@ -3853,7 +3853,7 @@ PP(pp_gsbyport) PP(pp_gservent) { djSP; -#ifdef HAS_SOCKET +#if defined(HAS_GETSERVBYNAME) || defined(HAS_GETSERVBYPORT) || defined(HAS_GETSERVENT) I32 which = op->op_type; register char **elem; register SV *sv; @@ -3932,7 +3932,7 @@ PP(pp_gservent) PP(pp_shostent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_SETHOSTENT PerlSock_sethostent(TOPi); RETSETYES; #else @@ -3943,7 +3943,7 @@ PP(pp_shostent) PP(pp_snetent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_SETNETENT PerlSock_setnetent(TOPi); RETSETYES; #else @@ -3954,7 +3954,7 @@ PP(pp_snetent) PP(pp_sprotoent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_SETPROTOENT PerlSock_setprotoent(TOPi); RETSETYES; #else @@ -3965,7 +3965,7 @@ PP(pp_sprotoent) PP(pp_sservent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_SETSERVENT PerlSock_setservent(TOPi); RETSETYES; #else @@ -3976,9 +3976,9 @@ PP(pp_sservent) PP(pp_ehostent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_ENDHOSTENT PerlSock_endhostent(); - EXTEND(sp,1); + EXTEND(SP,1); RETPUSHYES; #else DIE(no_sock_func, "endhostent"); @@ -3988,9 +3988,9 @@ PP(pp_ehostent) PP(pp_enetent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_ENDNETENT PerlSock_endnetent(); - EXTEND(sp,1); + EXTEND(SP,1); RETPUSHYES; #else DIE(no_sock_func, "endnetent"); @@ -4000,9 +4000,9 @@ PP(pp_enetent) PP(pp_eprotoent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_ENDPROTOENT PerlSock_endprotoent(); - EXTEND(sp,1); + EXTEND(SP,1); RETPUSHYES; #else DIE(no_sock_func, "endprotoent"); @@ -4012,9 +4012,9 @@ PP(pp_eprotoent) PP(pp_eservent) { djSP; -#ifdef HAS_SOCKET +#ifdef HAS_ENDSERVENT PerlSock_endservent(); - EXTEND(sp,1); + EXTEND(SP,1); RETPUSHYES; #else DIE(no_sock_func, "endservent"); @@ -152,7 +152,7 @@ void dump_op _((OP* arg)); void dump_pm _((PMOP* pm)); void dump_packsubs _((HV* stash)); void dump_sub _((GV* gv)); -VIRTUAL void fbm_compile _((SV* sv)); +VIRTUAL void fbm_compile _((SV* sv, U32 flags)); VIRTUAL char* fbm_instr _((unsigned char* big, unsigned char* bigend, SV* littlesv)); #ifdef USE_THREADS VIRTUAL PADOFFSET find_threadsv _((char *name)); @@ -465,6 +465,7 @@ VIRTUAL I32 same_dirent _((char* a, char* b)); VIRTUAL char* savepv _((char* sv)); VIRTUAL char* savepvn _((char* sv, I32 len)); VIRTUAL void savestack_grow _((void)); +VIRTUAL void save_aelem _((AV* av, I32 idx, SV **sptr)); VIRTUAL void save_aptr _((AV** aptr)); VIRTUAL AV* save_ary _((GV* gv)); VIRTUAL void save_clearsv _((SV** svp)); @@ -482,6 +483,7 @@ VIRTUAL void save_freeop _((OP* o)); VIRTUAL void save_freepv _((char* pv)); VIRTUAL void save_gp _((GV* gv, I32 empty)); VIRTUAL HV* save_hash _((GV* gv)); +VIRTUAL void save_helem _((HV* hv, SV *key, SV **sptr)); VIRTUAL void save_hptr _((HV** hptr)); VIRTUAL void save_I16 _((I16* intp)); VIRTUAL void save_I32 _((I32* intp)); @@ -118,6 +118,8 @@ static void regoptail _((regnode *, regnode *)); static void regset _((char *, I32)); static void regtail _((regnode *, regnode *)); static char* nextchar _((void)); + +static void re_croak2 _((const char* pat1,const char* pat2,...)) __attribute__((noreturn)); #endif /* Length of a variant. */ @@ -791,6 +793,11 @@ pregcomp(char *exp, char *xend, PMOP *pm) r->regstclass = NULL; r->naughty = regnaughty >= 10; /* Probably an expensive pattern. */ scan = r->program + 1; /* First BRANCH. */ + + /* XXXX To minimize changes to RE engine we always allocate + 3-units-long substrs field. */ + Newz(1004, r->substrs, 1, struct reg_substr_data); + if (OP(scan) != BRANCH) { /* Only one top-level choice. */ scan_data_t data; I32 fake; @@ -885,7 +892,7 @@ pregcomp(char *exp, char *xend, PMOP *pm) r->float_substr = data.longest_float; r->float_min_offset = data.offset_float_min; r->float_max_offset = data.offset_float_max; - fbm_compile(r->float_substr); + fbm_compile(r->float_substr, 0); BmUSEFUL(r->float_substr) = 100; if (data.flags & SF_FL_BEFORE_EOL /* Cannot have SEOL and MULTI */ && (!(data.flags & SF_FL_BEFORE_MEOL) @@ -905,7 +912,7 @@ pregcomp(char *exp, char *xend, PMOP *pm) || (regflags & PMf_MULTILINE)))) { r->anchored_substr = data.longest_fixed; r->anchored_offset = data.offset_fixed; - fbm_compile(r->anchored_substr); + fbm_compile(r->anchored_substr, 0); BmUSEFUL(r->anchored_substr) = 100; if (data.flags & SF_FIX_BEFORE_EOL /* Cannot have SEOL and MULTI */ && (!(data.flags & SF_FIX_BEFORE_MEOL) @@ -2544,6 +2551,8 @@ pregfree(struct regexp *r) Safefree(r->precomp); if (r->subbase) Safefree(r->subbase); + if (r->substrs) + Safefree(r->substrs); if (r->anchored_substr) SvREFCNT_dec(r->anchored_substr); if (r->float_substr) @@ -2601,11 +2610,11 @@ regnext(register regnode *p) } #ifdef I_STDARG -void +static void re_croak2(const char* pat1,const char* pat2,...) #else /*VARARGS0*/ -void +static void re_croak2(const char* pat1,const char* pat2, va_alist) const char* pat1; const char* pat2; @@ -447,7 +447,3 @@ const static char reg_off_by_arg[] = { #ifdef DEBUGGING extern char *colors[4]; #endif - -#ifndef PERL_OBJECT -void re_croak2 _((const char* pat1,const char* pat2,...)) __attribute__((noreturn)); -#endif @@ -23,6 +23,16 @@ struct reg_data { void* data[1]; }; +struct reg_substr_datum { + I32 min_offset; + I32 max_offset; + SV *substr; +}; + +struct reg_substr_data { + struct reg_substr_datum data[3]; /* Actual array */ +}; + typedef struct regexp { I32 refcnt; char **startp; @@ -39,6 +49,7 @@ typedef struct regexp { U16 naughty; /* how exponential is this pattern? */ U16 reganch; /* Internal use only + Tainted information used by regexec? */ +#if 0 SV *anchored_substr; /* Substring at fixed position wrt start. */ I32 anchored_offset; /* Position of it. */ SV *float_substr; /* Substring at variable position wrt start. */ @@ -47,10 +58,22 @@ typedef struct regexp { SV *check_substr; /* Substring to check before matching. */ I32 check_offset_min; /* Offset of the above. */ I32 check_offset_max; /* Offset of the above. */ +#else + struct reg_substr_data *substrs; +#endif struct reg_data *data; /* Additional data. */ regnode program[1]; /* Unwarranted chumminess with compiler. */ } regexp; +#define anchored_substr substrs->data[0].substr +#define anchored_offset substrs->data[0].min_offset +#define float_substr substrs->data[1].substr +#define float_min_offset substrs->data[1].min_offset +#define float_max_offset substrs->data[1].max_offset +#define check_substr substrs->data[2].substr +#define check_offset_min substrs->data[2].min_offset +#define check_offset_max substrs->data[2].max_offset + #define ROPT_ANCH (ROPT_ANCH_BOL|ROPT_ANCH_MBOL|ROPT_ANCH_GPOS) #define ROPT_ANCH_SINGLE (ROPT_ANCH_BOL|ROPT_ANCH_GPOS) #define ROPT_ANCH_BOL 1 @@ -433,6 +433,30 @@ save_delete(HV *hv, char *key, I32 klen) } void +save_aelem(AV *av, I32 idx, SV **sptr) +{ + dTHR; + SSCHECK(4); + SSPUSHPTR(av); + SSPUSHINT(idx); + SSPUSHPTR(*sptr); + SSPUSHINT(SAVEt_AELEM); + save_scalar_at(sptr); +} + +void +save_helem(HV *hv, SV *key, SV **sptr) +{ + dTHR; + SSCHECK(4); + SSPUSHPTR(hv); + SSPUSHPTR(key); + SSPUSHPTR(*sptr); + SSPUSHINT(SAVEt_HELEM); + save_scalar_at(sptr); +} + +void save_list(register SV **sarg, I32 maxsarg) { dTHR; @@ -482,6 +506,7 @@ leave_scope(I32 base) register AV *av; register HV *hv; register void* ptr; + I32 i; if (base < -1) croak("panic: corrupt saved stack index"); @@ -693,17 +718,26 @@ leave_scope(I32 base) (CALLDESTRUCTOR)(ptr); break; case SAVEt_REGCONTEXT: - { - I32 delta = SSPOPINT; - savestack_ix -= delta; /* regexp must have croaked */ - } + i = SSPOPINT; + savestack_ix -= i; /* regexp must have croaked */ break; case SAVEt_STACK_POS: /* Position on Perl stack */ - { - I32 delta = SSPOPINT; - stack_sp = stack_base + delta; - } + i = SSPOPINT; + stack_sp = stack_base + i; break; + case SAVEt_AELEM: /* array element */ + value = (SV*)SSPOPPTR; + i = SSPOPINT; + av = (AV*)SSPOPPTR; + ptr = av_fetch(av,i,1); + goto restore_sv; + case SAVEt_HELEM: /* hash element */ + value = (SV*)SSPOPPTR; + sv = (SV*)SSPOPPTR; + hv = (HV*)SSPOPPTR; + ptr = hv_fetch_ent(hv, sv, 1, 0); + ptr = &HeVAL((HE*)ptr); + goto restore_sv; case SAVEt_OP: op = (OP*)SSPOPPTR; break; @@ -22,7 +22,9 @@ #define SAVEt_REGCONTEXT 21 #define SAVEt_STACK_POS 22 #define SAVEt_I16 23 -#define SAVEt_OP 24 +#define SAVEt_AELEM 24 +#define SAVEt_HELEM 25 +#define SAVEt_OP 26 #define SSCHECK(need) if (savestack_ix + need > savestack_max) savestack_grow() #define SSPUSHINT(i) (savestack[savestack_ix++].any_i32 = (I32)(i)) @@ -1945,7 +1945,6 @@ sv_setsv(SV *dstr, register SV *sstr) if (dtype < SVt_PVNV) sv_upgrade(dstr, SVt_PVNV); break; - case SVt_PVAV: case SVt_PVHV: case SVt_PVCV: @@ -1996,8 +1995,10 @@ sv_setsv(SV *dstr, register SV *sstr) goto glob_assign; } } - if (dtype < stype) - sv_upgrade(dstr, stype); + if (stype == SVt_PVLV) + SvUPGRADE(dstr, SVt_PVNV); + else + SvUPGRADE(dstr, stype); } sflags = SvFLAGS(sstr); @@ -2068,9 +2069,14 @@ sv_setsv(SV *dstr, register SV *sstr) if (cv_const_sv(cv)) warn("Constant subroutine %s redefined", GvENAME((GV*)dstr)); - else if (dowarn) - warn("Subroutine %s redefined", - GvENAME((GV*)dstr)); + else if (dowarn) { + if (!(CvGV(cv) && GvSTASH(CvGV(cv)) + && HvNAME(GvSTASH(CvGV(cv))) + && strEQ(HvNAME(GvSTASH(CvGV(cv))), + "autouse"))) + warn("Subroutine %s redefined", + GvENAME((GV*)dstr)); + } } cv_ckproto(cv, (GV*)dstr, SvPOK(sref) ? SvPVX(sref) : Nullch); @@ -4576,6 +4582,8 @@ sv_vcatpvfn(SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, switch (base) { unsigned dig; case 16: + if (!uv) + alt = FALSE; p = (c == 'X') ? "0123456789ABCDEF" : "0123456789abcdef"; do { dig = uv & 15; @@ -4602,8 +4610,12 @@ sv_vcatpvfn(SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, break; } elen = (ebuf + sizeof ebuf) - eptr; - if (has_precis && precis > elen) - zeros = precis - elen; + if (has_precis) { + if (precis > elen) + zeros = precis - elen; + else if (precis == 0 && elen == 1 && *eptr == '0') + elen = 0; + } break; /* FLOATING POINT */ diff --git a/t/base/lex.t b/t/base/lex.t index 6d03b9e8df..31bb056b5b 100755 --- a/t/base/lex.t +++ b/t/base/lex.t @@ -2,7 +2,7 @@ # $RCSfile: lex.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:04 $ -print "1..27\n"; +print "1..28\n"; $x = 'x'; @@ -105,3 +105,9 @@ print "ABC" =~ /^$ary[$A]$/ ? "ok 25\n" : "not ok 25\n"; print "FOOZ" =~ /^$foo[$A-Z]$/ ? "ok 26\n" : "not ok 26\n"; print (((q{{\{\(}} . q{{\)\}}}) eq '{{\(}{\)}}') ? "ok 27\n" : "not ok 27\n"); + +$foo = "not ok 28\n"; +$foo =~ s/^not /substr(<<EOF, 0, 0)/e; + Ignored +EOF +print $foo; diff --git a/t/cmd/mod.t b/t/cmd/mod.t index b4f2731ffa..e2ab777246 100755 --- a/t/cmd/mod.t +++ b/t/cmd/mod.t @@ -2,7 +2,7 @@ # $RCSfile: mod.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:11 $ -print "1..11\n"; +print "1..12\n"; print "ok 1\n" if 1; print "not ok 1\n" unless 1; @@ -27,21 +27,28 @@ $x = 15; $x = 10 while $x < 10; if ($x == 15) {print "ok 6\n";} else {print "not ok 6\n";} +$y[$_] = $_ * 2 foreach @x; +if (join(' ',@y) eq '0 2 4 6 8 10 12 14 16 18 20') { + print "ok 7\n"; +} else { + print "not ok 7 @y\n"; +} + open(foo,'./TEST') || open(foo,'TEST') || open(foo,'t/TEST'); $x = 0; $x++ while <foo>; -print $x > 50 && $x < 1000 ? "ok 7\n" : "not ok 7\n"; +print $x > 50 && $x < 1000 ? "ok 8\n" : "not ok 8\n"; $x = -0.5; print "not " if scalar($x) < 0 and $x >= 0; -print "ok 8\n"; +print "ok 9\n"; print "not " unless (-(-$x) < 0) == ($x < 0); -print "ok 9\n"; +print "ok 10\n"; -print "ok 10\n" if $x < 0; -print "not ok 10\n" unless $x < 0; +print "ok 11\n" if $x < 0; +print "not ok 11\n" unless $x < 0; -print "ok 11\n" unless $x > 0; -print "not ok 11\n" if $x > 0; +print "ok 12\n" unless $x > 0; +print "not ok 12\n" if $x > 0; diff --git a/t/op/local.t b/t/op/local.t index a034539cae..0df1b6d1dc 100755 --- a/t/op/local.t +++ b/t/op/local.t @@ -2,7 +2,7 @@ # $RCSfile: local.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:04 $ -print "1..25\n"; +print "1..36\n"; sub foo { local($a, $b) = @_; @@ -53,13 +53,46 @@ print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 22\n"; eval 'local(%$e)'; print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 23\n"; +# Array and hash elements + +@a = ('a', 'b', 'c'); +{ + local($a[1]) = 'foo'; + local($a[2]) = $a[2]; + print +($a[1] eq 'foo') ? "" : "not ", "ok 24\n"; + print +($a[2] eq 'c') ? "" : "not ", "ok 25\n"; + undef @a; +} +print +($a[1] eq 'b') ? "" : "not ", "ok 26\n"; +print +($a[2] eq 'c') ? "" : "not ", "ok 27\n"; +print +(!defined $a[0]) ? "" : "not ", "ok 28\n"; + +@a = ('a', 'b', 'c'); +{ + local($a[1]) = "X"; + shift @a; +} +print +($a[0].$a[1] eq "Xb") ? "" : "not ", "ok 29\n"; + +%h = ('a' => 1, 'b' => 2, 'c' => 3); +{ + local($h{'a'}) = 'foo'; + local($h{'b'}) = $h{'b'}; + print +($h{'a'} eq 'foo') ? "" : "not ", "ok 30\n"; + print +($h{'b'} == 2) ? "" : "not ", "ok 31\n"; + local($h{'c'}); + delete $h{'c'}; +} +print +($h{'a'} == 1) ? "" : "not ", "ok 32\n"; +print +($h{'b'} == 2) ? "" : "not ", "ok 33\n"; +print +($h{'c'} == 3) ? "" : "not ", "ok 34\n"; + # check for scope leakage $a = 'outer'; if (1) { local $a = 'inner' } -print +($a eq 'outer') ? "" : "not ", "ok 24\n"; +print +($a eq 'outer') ? "" : "not ", "ok 35\n"; # see if localization works when scope unwinds - local $m = 5; eval { for $m (6) { @@ -67,4 +100,4 @@ eval { die "bye"; } }; -print $m == 5 ? "" : "not ", "ok 25\n"; +print $m == 5 ? "" : "not ", "ok 36\n"; diff --git a/t/op/magic.t b/t/op/magic.t index ab23d84cc5..ec7fbb529e 100755 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -24,7 +24,7 @@ $Is_VMS = $^O eq 'VMS'; $Is_Dos = $^O eq 'dos'; $PERL = ($Is_MSWin32 ? '.\perl' : './perl'); -print "1..34\n"; +print "1..35\n"; eval '$ENV{"FOO"} = "hi there";'; # check that ENV is inited inside eval if ($Is_MSWin32) { ok 1, `cmd /x /c set FOO` eq "FOO=hi there\n"; } @@ -182,20 +182,26 @@ else { : (`echo \$NoNeSuCh` eq "foo\n") ); } +{ + local $SIG{'__WARN__'} = sub { print "not " }; + $! = undef; + print "ok 31\n"; +} + # test case-insignificance of %ENV (these tests must be enabled only # when perl is compiled with -DENV_IS_CASELESS) if ($Is_MSWin32) { %ENV = (); $ENV{'Foo'} = 'bar'; $ENV{'fOo'} = 'baz'; - ok 31, (scalar(keys(%ENV)) == 1); - ok 32, exists($ENV{'FOo'}); - ok 33, (delete($ENV{'foO'}) eq 'baz'); - ok 34, (scalar(keys(%ENV)) == 0); + ok 32, (scalar(keys(%ENV)) == 1); + ok 33, exists($ENV{'FOo'}); + ok 34, (delete($ENV{'foO'}) eq 'baz'); + ok 35, (scalar(keys(%ENV)) == 0); } else { - ok "31 # skipped",1; ok "32 # skipped",1; ok "33 # skipped",1; ok "34 # skipped",1; + ok "35 # skipped",1; } diff --git a/t/op/misc.t b/t/op/misc.t index 1ca45db039..40c9c38825 100755 --- a/t/op/misc.t +++ b/t/op/misc.t @@ -358,3 +358,13 @@ init <b> end <c> argv <> ######## +-l +# fdopen from a system descriptor to a system descriptor used to close +# the former. +open STDERR, '>&=STDOUT' or die $!; +select STDOUT; $| = 1; print fileno STDOUT; +select STDERR; $| = 1; print fileno STDERR; +EXPECT +1 +2 +######## @@ -10,7 +10,8 @@ sub foo { my $d; $c = "ok 3\n"; $d = "ok 4\n"; - { my($a,$c) = ("ok 9\n", "ok 10\n"); ($x, $y) = ($a, $c); } + { my($a, undef, $c) = ("ok 9\n", "not ok 10\n", "ok 10\n"); + ($x, $y) = ($a, $c); } print $a, $b; $c . $d; } diff --git a/t/op/sprintf.t b/t/op/sprintf.t index 1450ae375f..7556c80a41 100755 --- a/t/op/sprintf.t +++ b/t/op/sprintf.t @@ -14,8 +14,8 @@ $SIG{__WARN__} = sub { }; $w = 0; -$x = sprintf("%3s %-4s%%foo %5d%c%3.1f","hi",123,456,65,3.0999); -if ($x eq ' hi 123 %foo 456A3.1' && $w == 0) { +$x = sprintf("%3s %-4s%%foo %.0d%5d %#x%c%3.1f","hi",123,0,456,0,65,3.0999); +if ($x eq ' hi 123 %foo 456 0A3.1' && $w == 0) { print "ok 1\n"; } else { print "not ok 1 '$x'\n"; diff --git a/t/op/subst.t b/t/op/subst.t index c6cfb8c96d..4fd00d5067 100755 --- a/t/op/subst.t +++ b/t/op/subst.t @@ -2,7 +2,7 @@ # $RCSfile: s.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:22 $ -print "1..67\n"; +print "1..68\n"; $x = 'foo'; $_ = "x"; @@ -261,3 +261,9 @@ print $_ eq "foobarfoobbar" ? "ok 66\n" : "not ok 66 # `$_' ne `foobarfoobbar'\n eval 's{foo} # this is a comment, not a delimiter {bar};'; print @? ? "not ok 67\n" : "ok 67\n"; + +# check if squashing works at the end of string +$_="baacbaa"; +tr/a/b/s; +print $_ eq "bbcbb" ? "ok 68\n" : "not ok 68 # `$_' ne `bbcbb'\n"; + diff --git a/t/pragma/strict-subs b/t/pragma/strict-subs index 43fce712d5..61ec286eb6 100644 --- a/t/pragma/strict-subs +++ b/t/pragma/strict-subs @@ -81,7 +81,7 @@ use strict 'vars' ; $joe = 1 ; EXPECT Variable "$joe" is not imported at - line 8. -Global symbol "joe" requires explicit package name at - line 8. +Global symbol "$joe" requires explicit package name at - line 8. Execution of - aborted due to compilation errors. ######## @@ -93,7 +93,7 @@ no strict; } $joe = 1 ; EXPECT -Global symbol "joe" requires explicit package name at - line 6. +Global symbol "$joe" requires explicit package name at - line 6. Execution of - aborted due to compilation errors. ######## diff --git a/t/pragma/strict-vars b/t/pragma/strict-vars index 7ca9843c2c..42107fa8e1 100644 --- a/t/pragma/strict-vars +++ b/t/pragma/strict-vars @@ -40,7 +40,7 @@ EXPECT use strict ; $fred ; EXPECT -Global symbol "fred" requires explicit package name at - line 4. +Global symbol "$fred" requires explicit package name at - line 4. Execution of - aborted due to compilation errors. ######## @@ -48,7 +48,7 @@ Execution of - aborted due to compilation errors. use strict 'vars' ; $fred ; EXPECT -Global symbol "fred" requires explicit package name at - line 4. +Global symbol "$fred" requires explicit package name at - line 4. Execution of - aborted due to compilation errors. ######## @@ -56,7 +56,7 @@ Execution of - aborted due to compilation errors. use strict 'vars' ; local $fred ; EXPECT -Global symbol "fred" requires explicit package name at - line 4. +Global symbol "$fred" requires explicit package name at - line 4. Execution of - aborted due to compilation errors. ######## @@ -69,7 +69,7 @@ use strict 'vars' ; $joe = 1 ; EXPECT Variable "$joe" is not imported at - line 8. -Global symbol "joe" requires explicit package name at - line 8. +Global symbol "$joe" requires explicit package name at - line 8. Execution of - aborted due to compilation errors. ######## @@ -81,7 +81,7 @@ no strict; } $joe = 1 ; EXPECT -Global symbol "joe" requires explicit package name at - line 6. +Global symbol "$joe" requires explicit package name at - line 6. Execution of - aborted due to compilation errors. ######## @@ -114,7 +114,7 @@ $joe = 1 ; require "./abc"; EXPECT Variable "$joe" is not imported at ./abc line 2. -Global symbol "joe" requires explicit package name at ./abc line 2. +Global symbol "$joe" requires explicit package name at ./abc line 2. Compilation failed in require at - line 2. ######## @@ -127,7 +127,7 @@ $joe = 1 ; use abc; EXPECT Variable "$joe" is not imported at abc.pm line 2. -Global symbol "joe" requires explicit package name at abc.pm line 2. +Global symbol "$joe" requires explicit package name at abc.pm line 2. Compilation failed in require at - line 2. BEGIN failed--compilation aborted at - line 2. ######## @@ -152,7 +152,7 @@ eval { print STDERR $@; $joe = 1 ; EXPECT -Global symbol "joe" requires explicit package name at - line 6. +Global symbol "$joe" requires explicit package name at - line 6. Execution of - aborted due to compilation errors. ######## @@ -164,7 +164,7 @@ eval { print STDERR $@; $joe = 1 ; EXPECT -Global symbol "joe" requires explicit package name at - line 5. +Global symbol "$joe" requires explicit package name at - line 5. Execution of - aborted due to compilation errors. ######## @@ -178,7 +178,7 @@ print STDERR $@; $joe = 1 ; EXPECT Variable "$joe" is not imported at - line 9. -Global symbol "joe" requires explicit package name at - line 9. +Global symbol "$joe" requires explicit package name at - line 9. Execution of - aborted due to compilation errors. ######## @@ -199,7 +199,7 @@ eval q[ $joe = 1 ; ]; print STDERR $@; EXPECT -Global symbol "joe" requires explicit package name at (eval 1) line 3. +Global symbol "$joe" requires explicit package name at (eval 1) line 3. ######## # Check scope of pragma with eval @@ -208,7 +208,7 @@ eval ' $joe = 1 ; '; print STDERR $@ ; EXPECT -Global symbol "joe" requires explicit package name at (eval 1) line 2. +Global symbol "$joe" requires explicit package name at (eval 1) line 2. ######## # Check scope of pragma with eval @@ -219,5 +219,5 @@ eval ' '; print STDERR $@; $joe = 1 ; EXPECT -Global symbol "joe" requires explicit package name at - line 8. +Global symbol "$joe" requires explicit package name at - line 8. Execution of - aborted due to compilation errors. diff --git a/t/pragma/warn-1global b/t/pragma/warn-1global index 33252731b0..07b5bc8eb9 100644 --- a/t/pragma/warn-1global +++ b/t/pragma/warn-1global @@ -144,3 +144,8 @@ my $a ; chop $a ; my $c ; chop $c ; EXPECT Use of uninitialized value at - line 5. +######## +-w +-e undef +EXPECT +Use of uninitialized value at - line 2. @@ -545,7 +545,7 @@ force_ident(register char *s, int kind) /* XXX see note in pp_entereval() for why we forgo typo warnings if the symbol must be introduced in an eval. GSAR 96-10-12 */ - gv_fetchpv(s, in_eval ? GV_ADDMULTI : TRUE, + gv_fetchpv(s, in_eval ? (GV_ADDMULTI | 8) : TRUE, kind == '$' ? SVt_PV : kind == '@' ? SVt_PVAV : kind == '%' ? SVt_PVHV : @@ -748,15 +748,88 @@ sublex_done(void) } } +/* + scan_const + + Extracts a pattern, double-quoted string, or transliteration. This + is terrifying code. + + It looks at lex_inwhat and lex_inpat to find out whether it's + processing a pattern (lex_inpat is true), a transliteration + (lex_inwhat & OP_TRANS is true), or a double-quoted string. + + In patterns: + backslashes: + double-quoted style: \r and \n + regexp special ones: \D \s + constants: \x3 + backrefs: \1 (deprecated in substitution replacements) + case and quoting: \U \Q \E + stops on @ and $, but not for $ as tail anchor + + In transliterations: + characters are VERY literal, except for - not at the start or end + of the string, which indicates a range. scan_const expands the + range to the full set of intermediate characters. + + In double-quoted strings: + backslashes: + double-quoted style: \r and \n + constants: \x3 + backrefs: \1 (deprecated) + case and quoting: \U \Q \E + stops on @ and $ + + scan_const does *not* construct ops to handle interpolated strings. + It stops processing as soon as it finds an embedded $ or @ variable + and leaves it to the caller to work out what's going on. + + @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo. + + $ in pattern could be $foo or could be tail anchor. Assumption: + it's a tail anchor if $ is the last thing in the string, or if it's + followed by one of ")| \n\t" + + \1 (backreferences) are turned into $1 + + The structure of the code is + while (there's a character to process) { + handle transliteration ranges + skip regexp comments + skip # initiated comments in //x patterns + check for embedded @foo + check for embedded scalars + if (backslash) { + leave intact backslashes from leave (below) + deprecate \1 in strings and sub replacements + handle string-changing backslashes \l \U \Q \E, etc. + switch (what was escaped) { + handle - in a transliteration (becomes a literal -) + handle \132 octal characters + handle 0x15 hex characters + handle \cV (control V) + handle printf backslashes (\f, \r, \n, etc) + } (end switch) + } (end if backslash) + } (end while character to read) + +*/ + STATIC char * scan_const(char *start) { - register char *send = bufend; - SV *sv = NEWSV(93, send - start); - register char *s = start; - register char *d = SvPVX(sv); - bool dorange = FALSE; - I32 len; + register char *send = bufend; /* end of the constant */ + SV *sv = NEWSV(93, send - start); /* sv for the constant */ + register char *s = start; /* start of the constant */ + register char *d = SvPVX(sv); /* destination for copies */ + bool dorange = FALSE; /* are we in a translit range? */ + I32 len; /* ? */ + + /* + leave is the set of acceptably-backslashed characters. + + I do *not* understand why there's the double hook here. + */ char *leaveit = lex_inpat ? "\\.^$@AGZdDwWsSbB+*?|()-nrtfeaxc0123456789[{]} \t\n\r\f\v#" @@ -765,25 +838,38 @@ scan_const(char *start) : ""; while (s < send || dorange) { + /* get transliterations out of the way (they're most literal) */ if (lex_inwhat == OP_TRANS) { + /* expand a range A-Z to the full set of characters. AIE! */ if (dorange) { - I32 i; - I32 max; - i = d - SvPVX(sv); - SvGROW(sv, SvLEN(sv) + 256); - d = SvPVX(sv) + i; - d -= 2; - max = (U8)d[1]; + I32 i; /* current expanded character */ + I32 max; /* last character in range */ + + i = d - SvPVX(sv); /* remember current offset */ + SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */ + d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */ + d -= 2; /* eat the first char and the - */ + + max = (U8)d[1]; /* last char in range */ + for (i = (U8)*d; i <= max; i++) *d++ = i; + + /* mark the range as done, and continue */ dorange = FALSE; continue; } + + /* range begins (ignore - as first or last char) */ else if (*s == '-' && s+1 < send && s != start) { dorange = TRUE; s++; } } + + /* if we get here, we're not doing a transliteration */ + + /* skip for regexp comments /(?#comment)/ */ else if (*s == '(' && lex_inpat && s[1] == '?') { if (s[2] == '#') { while (s < send && *s != ')') @@ -810,26 +896,40 @@ scan_const(char *start) *d++ = *s++; } } + + /* likewise skip #-initiated comments in //x patterns */ else if (*s == '#' && lex_inpat && ((PMOP*)lex_inpat)->op_pmflags & PMf_EXTENDED) { while (s+1 < send && *s != '\n') *d++ = *s++; } + + /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */ else if (*s == '@' && s[1] && (isALNUM(s[1]) || strchr(":'{$", s[1]))) break; + + /* check for embedded scalars. only stop if we're sure it's a + variable. + */ else if (*s == '$') { if (!lex_inpat) /* not a regexp, so $ must be var */ break; if (s + 1 < send && !strchr("()| \n\t", s[1])) break; /* in regexp, $ might be tail anchor */ } + + /* backslashes */ if (*s == '\\' && s+1 < send) { s++; + + /* some backslashes we leave behind */ if (*s && strchr(leaveit, *s)) { *d++ = '\\'; *d++ = *s++; continue; } + + /* deprecate \1 in strings and substitution replacements */ if (lex_inwhat == OP_SUBST && !lex_inpat && isDIGIT(*s) && *s != '0' && !isDIGIT(s[1])) { @@ -838,34 +938,49 @@ scan_const(char *start) *--s = '$'; break; } + + /* string-change backslash escapes */ if (lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) { --s; break; } + + /* if we get here, it's either a quoted -, or a digit */ switch (*s) { + + /* quoted - in transliterations */ case '-': if (lex_inwhat == OP_TRANS) { *d++ = *s++; continue; } /* FALL THROUGH */ + /* default action is to copy the quoted character */ default: *d++ = *s++; continue; + + /* \132 indicates an octal constant */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': *d++ = scan_oct(s, 3, &len); s += len; continue; + + /* \x24 indicates a hex constant */ case 'x': *d++ = scan_hex(++s, 2, &len); s += len; continue; + + /* \c is a control character */ case 'c': s++; len = *s++; *d++ = toCTRL(len); continue; + + /* printf-style backslashes, formfeeds, newlines, etc */ case 'b': *d++ = '\b'; break; @@ -887,20 +1002,27 @@ scan_const(char *start) case 'a': *d++ = '\007'; break; - } + } /* end switch */ + s++; continue; - } + } /* end if (backslash) */ + *d++ = *s++; - } + } /* while loop to process each character */ + + /* terminate the string and set up the sv */ *d = '\0'; SvCUR_set(sv, d - SvPVX(sv)); SvPOK_on(sv); + /* shrink the sv if we allocated more than we used */ if (SvCUR(sv) + 5 < SvLEN(sv)) { SvLEN_set(sv, SvCUR(sv) + 1); Renew(SvPVX(sv), SvLEN(sv), char); } + + /* ??? */ if (s > bufptr) yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv); else @@ -1070,7 +1192,12 @@ intuit_method(char *start, GV *gv) return *s == '(' ? FUNCMETH : METHOD; } if (!keyword(tmpbuf, len)) { - indirgv = gv_fetchpv(tmpbuf,FALSE, SVt_PVCV); + if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') { + len -= 2; + tmpbuf[len] = '\0'; + goto bare_package; + } + indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV); if (indirgv && GvCVu(indirgv)) return 0; /* filehandle or package name makes it a method */ @@ -1078,11 +1205,10 @@ intuit_method(char *start, GV *gv) s = skipspace(s); if ((bufend - s) >= 2 && *s == '=' && *(s+1) == '>') return 0; /* no assumptions -- "=>" quotes bearword */ - nextval[nexttoke].opval = - (OP*)newSVOP(OP_CONST, 0, - newSVpv(tmpbuf,0)); - nextval[nexttoke].opval->op_private = - OPpCONST_BARE; + bare_package: + nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, + newSVpv(tmpbuf,0)); + nextval[nexttoke].opval->op_private = OPpCONST_BARE; expect = XTERM; force_next(WORD); bufptr = s; @@ -1204,7 +1330,6 @@ filter_read(int idx, SV *buf_sv, int maxlen) else return 0 ; /* end of file */ } - } return SvCUR(buf_sv); } @@ -1225,7 +1350,6 @@ filter_read(int idx, SV *buf_sv, int maxlen) return (*funcp)(idx, buf_sv, maxlen); } - STATIC char * filter_gets(register SV *sv, register PerlIO *fp, STRLEN append) { @@ -1255,6 +1379,31 @@ filter_gets(register SV *sv, register PerlIO *fp, STRLEN append) EXT int yychar; /* last token */ +/* + yylex + + Works out what to call the token just pulled out of the input + stream. The yacc parser takes care of taking the ops we return and + stitching them into a tree. + + Returns: + PRIVATEREF + + Structure: + if read an identifier + if we're in a my declaration + croak if they tried to say my($foo::bar) + build the ops for a my() declaration + if it's an access to a my() variable + are we in a sort block? + croak if my($a); $a <=> $b + build ops for access to a my() variable + if in a dq string, and they've said @foo and we can't find @foo + croak + build ops for a bareword + if we already built the token before, use it. +*/ + int yylex(void) { @@ -1266,18 +1415,39 @@ yylex(void) GV *gv = Nullgv; GV **gvp = 0; + /* check if there's an identifier for us to look at */ if (pending_ident) { + /* pit holds the identifier we read and pending_ident is reset */ char pit = pending_ident; pending_ident = 0; + /* if we're in a my(), we can't allow dynamics here. + $foo'bar has already been turned into $foo::bar, so + just check for colons. + + if it's a legal name, the OP is a PADANY. + */ if (in_my) { if (strchr(tokenbuf,':')) croak(no_myglob,tokenbuf); + yylval.opval = newOP(OP_PADANY, 0); yylval.opval->op_targ = pad_allocmy(tokenbuf); return PRIVATEREF; } + /* + build the ops for accesses to a my() variable. + + Deny my($a) or my($b) in a sort block, *if* $a or $b is + then used in a comparison. This catches most, but not + all cases. For instance, it catches + sort { my($a); $a <=> $b } + but not + sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; } + (although why you'd do that is anyone's guess). + */ + if (!strchr(tokenbuf,':')) { #ifdef USE_THREADS /* Check for single character per-thread SVs */ @@ -1291,6 +1461,7 @@ yylex(void) } #endif /* USE_THREADS */ if ((tmp = pad_findmy(tokenbuf)) != NOT_IN_PAD) { + /* if it's a sort block and they're naming $a or $b */ if (last_lop_op == OP_SORT && tokenbuf[0] == '$' && (tokenbuf[1] == 'a' || tokenbuf[1] == 'b') @@ -1313,7 +1484,11 @@ yylex(void) } } - /* Force them to make up their mind on "@foo". */ + /* + Whine if they've said @foo in a doublequoted string, + and @foo isn't a variable we can find in the symbol + table. + */ if (pit == '@' && lex_state != LEX_NORMAL && !lex_brackets) { GV *gv = gv_fetchpv(tokenbuf+1, FALSE, SVt_PVAV); if (!gv || ((tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv))) @@ -1321,15 +1496,18 @@ yylex(void) tokenbuf, tokenbuf)); } + /* build ops for a bareword */ yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(tokenbuf+1, 0)); yylval.opval->op_private = OPpCONST_ENTERED; - gv_fetchpv(tokenbuf+1, in_eval ? GV_ADDMULTI : TRUE, + gv_fetchpv(tokenbuf+1, in_eval ? (GV_ADDMULTI | 8) : TRUE, ((tokenbuf[0] == '$') ? SVt_PV : (tokenbuf[0] == '@') ? SVt_PVAV : SVt_PVHV)); return WORD; } + /* no identifier pending identification */ + switch (lex_state) { #ifdef COMMENTARY case LEX_NORMAL: /* Some compilers will produce faster */ @@ -1337,6 +1515,7 @@ yylex(void) break; #endif + /* when we're already built the next token, just pull it out the queue */ case LEX_KNOWNEXT: nexttoke--; yylval = nextval[nexttoke]; @@ -1347,16 +1526,23 @@ yylex(void) } return(nexttype[nexttoke]); + /* interpolated case modifiers like \L \U, including \Q and \E. + when we get here, bufptr is at the \ + */ case LEX_INTERPCASEMOD: #ifdef DEBUGGING if (bufptr != bufend && *bufptr != '\\') croak("panic: INTERPCASEMOD"); #endif - if (bufptr == bufend || bufptr[1] == 'E') { + /* handle \E or end of string */ + if (bufptr == bufend || bufptr[1] == 'E') { char oldmod; + + /* if at a \E */ if (lex_casemods) { oldmod = lex_casestack[--lex_casemods]; lex_casestack[lex_casemods] = '\0'; + if (bufptr != bufend && strchr("LUQ", oldmod)) { bufptr += 2; lex_state = LEX_INTERPCONCAT; @@ -1815,9 +2001,6 @@ yylex(void) s++; if (strnEQ(s,"=>",2)) { - if (dowarn) - warn("Ambiguous use of -%c => resolved to \"-%c\" =>", - (int)tmp, (int)tmp); s = force_word(bufptr,WORD,FALSE,FALSE,FALSE); OPERATOR('-'); /* unary minus */ } @@ -2019,12 +2202,6 @@ yylex(void) d++; if (*d == '}') { char minus = (tokenbuf[0] == '-'); - if (dowarn && - (keyword(tokenbuf + 1, len) || - (minus && len == 1 && isALPHA(tokenbuf[1])) || - perl_get_cv(tokenbuf + 1, FALSE) )) - warn("Ambiguous use of {%s} resolved to {\"%s\"}", - tokenbuf + !minus, tokenbuf + !minus); s = force_word(s + minus, WORD, FALSE, TRUE, FALSE); if (minus) force_next('-'); @@ -2620,9 +2797,6 @@ yylex(void) /* Is this a word before a => operator? */ if (strnEQ(d,"=>",2)) { CLINE; - if (dowarn && (tmp || perl_get_cv(tokenbuf, FALSE))) - warn("Ambiguous use of %s => resolved to \"%s\" =>", - tokenbuf, tokenbuf); yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(tokenbuf,0)); yylval.opval->op_private = OPpCONST_BARE; TERM(WORD); @@ -2660,10 +2834,12 @@ yylex(void) /* Get the rest if it looks like a package qualifier */ if (*s == '\'' || *s == ':' && s[1] == ':') { + STRLEN morelen; s = scan_word(s, tokenbuf + len, sizeof tokenbuf - len, - TRUE, &len); - if (!len) + TRUE, &morelen); + if (!morelen) croak("Bad name after %s::", tokenbuf); + len += morelen; } if (expect == XOPERATOR) { @@ -2676,7 +2852,28 @@ yylex(void) no_op("Bareword",s); } - /* Look for a subroutine with this name in current package. */ + /* Look for a subroutine with this name in current package, + unless name is "Foo::", in which case Foo is a bearword + (and a package name). */ + + if (len > 2 && + tokenbuf[len - 2] == ':' && tokenbuf[len - 1] == ':') + { + if (dowarn && ! gv_fetchpv(tokenbuf, FALSE, SVt_PVHV)) + warn("Bareword \"%s\" refers to nonexistent package", + tokenbuf); + len -= 2; + tokenbuf[len] = '\0'; + gv = Nullgv; + gvp = 0; + } + else { + len = 0; + if (!gv) + gv = gv_fetchpv(tokenbuf, FALSE, SVt_PVCV); + } + + /* if we saw a global override before, get the right name */ if (gvp) { sv = newSVpv("CORE::GLOBAL::",14); @@ -2684,8 +2881,6 @@ yylex(void) } else sv = newSVpv(tokenbuf,0); - if (!gv) - gv = gv_fetchpv(tokenbuf,FALSE, SVt_PVCV); /* Presume this is going to be a bareword of some sort. */ @@ -2693,6 +2888,11 @@ yylex(void) yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv); yylval.opval->op_private = OPpCONST_BARE; + /* And if "Foo::", then that's what it certainly is. */ + + if (len) + goto safe_bareword; + /* See if it's the indirect object for a list operator. */ if (oldoldbufptr && @@ -2821,6 +3021,8 @@ yylex(void) warn(warn_reserved, tokenbuf); } } + + safe_bareword: if (lastchar && strchr("*%&", lastchar)) { warn("Operator or semicolon missing before %c%s", lastchar, tokenbuf); @@ -3064,7 +3266,7 @@ yylex(void) case KEY_foreach: yylval.ival = curcop->cop_line; s = skipspace(s); - if (isIDFIRST(*s)) { + if (expect == XSTATE && isIDFIRST(*s)) { char *p = s; if ((bufend - p) >= 3 && strnEQ(p, "my", 2) && isSPACE(*(p + 2))) @@ -4502,7 +4704,7 @@ scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLE *d++ = ':'; s++; } - else if (*s == ':' && s[1] == ':' && allow_package && isIDFIRST(s[2])) { + else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') { *d++ = *s++; *d++ = *s++; } @@ -4757,7 +4959,7 @@ scan_trans(char *start) if (lex_stuff) SvREFCNT_dec(lex_stuff); lex_stuff = Nullsv; - croak("Translation pattern not terminated"); + croak("Transliteration pattern not terminated"); } if (s[-1] == multi_open) s--; @@ -4770,7 +4972,7 @@ scan_trans(char *start) if (lex_repl) SvREFCNT_dec(lex_repl); lex_repl = Nullsv; - croak("Translation replacement not terminated"); + croak("Transliteration replacement not terminated"); } New(803,tbl,256,short); @@ -4805,7 +5007,7 @@ scan_heredoc(register char *s) register char *d; register char *e; char *peek; - int outer = (rsfp && !lex_inwhat); + int outer = (rsfp && !(lex_inwhat == OP_SCALAR)); s += 2; d = tokenbuf; @@ -4921,39 +5123,89 @@ scan_heredoc(register char *s) return s; } +/* scan_inputsymbol + takes: current position in input buffer + returns: new position in input buffer + side-effects: yylval and lex_op are set. + + This code handles: + + <> read from ARGV + <FH> read from filehandle + <pkg::FH> read from package qualified filehandle + <pkg'FH> read from package qualified filehandle + <$fh> read from filehandle in $fh + <*.h> filename glob + +*/ + STATIC char * scan_inputsymbol(char *start) { - register char *s = start; + register char *s = start; /* current position in buffer */ register char *d; register char *e; I32 len; - d = tokenbuf; - e = tokenbuf + sizeof tokenbuf; - s = delimcpy(d, e, s + 1, bufend, '>', &len); + d = tokenbuf; /* start of temp holding space */ + e = tokenbuf + sizeof tokenbuf; /* end of temp holding space */ + s = delimcpy(d, e, s + 1, bufend, '>', &len); /* extract until > */ + + /* die if we didn't have space for the contents of the <>, + or if it didn't end + */ + if (len >= sizeof tokenbuf) croak("Excessively long <> operator"); if (s >= bufend) croak("Unterminated <> operator"); + s++; + + /* check for <$fh> + Remember, only scalar variables are interpreted as filehandles by + this code. Anything more complex (e.g., <$fh{$num}>) will be + treated as a glob() call. + This code makes use of the fact that except for the $ at the front, + a scalar variable and a filehandle look the same. + */ if (*d == '$' && d[1]) d++; + + /* allow <Pkg'VALUE> or <Pkg::VALUE> */ while (*d && (isALNUM(*d) || *d == '\'' || *d == ':')) d++; + + /* If we've tried to read what we allow filehandles to look like, and + there's still text left, then it must be a glob() and not a getline. + Use scan_str to pull out the stuff between the <> and treat it + as nothing more than a string. + */ + if (d - tokenbuf != len) { yylval.ival = OP_GLOB; set_csh(); s = scan_str(start); if (!s) - croak("Glob not terminated"); + croak("Glob not terminated"); return s; } else { + /* we're in a filehandle read situation */ d = tokenbuf; + + /* turn <> into <ARGV> */ if (!len) (void)strcpy(d,"ARGV"); + + /* if <$fh>, create the ops to turn the variable into a + filehandle + */ if (*d == '$') { I32 tmp; + + /* try to find it in the pad for this block, otherwise find + add symbol table ops + */ if ((tmp = pad_findmy(d)) != NOT_IN_PAD) { OP *o = newOP(OP_PADSV, 0); o->op_targ = tmp; @@ -4966,71 +5218,147 @@ scan_inputsymbol(char *start) newUNOP(OP_RV2SV, 0, newGVOP(OP_GV, 0, gv)))); } + /* we created the ops in lex_op, so make yylval.ival a null op */ yylval.ival = OP_NULL; } + + /* If it's none of the above, it must be a literal filehandle + (<Foo::BAR> or <FOO>) so build a simple readline OP */ else { GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO); lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv)); yylval.ival = OP_NULL; } } + return s; } + +/* scan_str + takes: start position in buffer + returns: position to continue reading from buffer + side-effects: multi_start, multi_close, lex_repl or lex_stuff, and + updates the read buffer. + + This subroutine pulls a string out of the input. It is called for: + q single quotes q(literal text) + ' single quotes 'literal text' + qq double quotes qq(interpolate $here please) + " double quotes "interpolate $here please" + qx backticks qx(/bin/ls -l) + ` backticks `/bin/ls -l` + qw quote words @EXPORT_OK = qw( func() $spam ) + m// regexp match m/this/ + s/// regexp substitute s/this/that/ + tr/// string transliterate tr/this/that/ + y/// string transliterate y/this/that/ + ($*@) sub prototypes sub foo ($) + <> readline or globs <FOO>, <>, <$fh>, or <*.c> + + In most of these cases (all but <>, patterns and transliterate) + yylex() calls scan_str(). m// makes yylex() call scan_pat() which + calls scan_str(). s/// makes yylex() call scan_subst() which calls + scan_str(). tr/// and y/// make yylex() call scan_trans() which + calls scan_str(). + + It skips whitespace before the string starts, and treats the first + character as the delimiter. If the delimiter is one of ([{< then + the corresponding "close" character )]}> is used as the closing + delimiter. It allows quoting of delimiters, and if the string has + balanced delimiters ([{<>}]) it allows nesting. + + The lexer always reads these strings into lex_stuff, except in the + case of the operators which take *two* arguments (s/// and tr///) + when it checks to see if lex_stuff is full (presumably with the 1st + arg to s or tr) and if so puts the string into lex_repl. + +*/ + STATIC char * scan_str(char *start) { dTHR; - SV *sv; - char *tmps; - register char *s = start; - register char term; - register char *to; - I32 brackets = 1; - + SV *sv; /* scalar value: string */ + char *tmps; /* temp string, used for delimiter matching */ + register char *s = start; /* current position in the buffer */ + register char term; /* terminating character */ + register char *to; /* current position in the sv's data */ + I32 brackets = 1; /* bracket nesting level */ + + /* skip space before the delimiter */ if (isSPACE(*s)) s = skipspace(s); + + /* mark where we are, in case we need to report errors */ CLINE; + + /* after skipping whitespace, the next character is the terminator */ term = *s; + /* mark where we are */ multi_start = curcop->cop_line; multi_open = term; + + /* find corresponding closing delimiter */ if (term && (tmps = strchr("([{< )]}> )]}>",term))) term = tmps[5]; multi_close = term; + /* create a new SV to hold the contents. 87 is leak category, I'm + assuming. 80 is the SV's initial length. What a random number. */ sv = NEWSV(87,80); sv_upgrade(sv, SVt_PVIV); SvIVX(sv) = term; (void)SvPOK_only(sv); /* validate pointer */ + + /* move past delimiter and try to read a complete string */ s++; for (;;) { + /* extend sv if need be */ SvGROW(sv, SvCUR(sv) + (bufend - s) + 1); + /* set 'to' to the next character in the sv's string */ to = SvPVX(sv)+SvCUR(sv); + + /* if open delimiter is the close delimiter read unbridle */ if (multi_open == multi_close) { for (; s < bufend; s++,to++) { + /* embedded newlines increment the current line number */ if (*s == '\n' && !rsfp) curcop->cop_line++; + /* handle quoted delimiters */ if (*s == '\\' && s+1 < bufend && term != '\\') { if (s[1] == term) s++; + /* any other quotes are simply copied straight through */ else *to++ = *s++; } + /* terminate when run out of buffer (the for() condition), or + have found the terminator */ else if (*s == term) break; *to = *s; } } + + /* if the terminator isn't the same as the start character (e.g., + matched brackets), we have to allow more in the quoting, and + be prepared for nested brackets. + */ else { + /* read until we run out of string, or we find the terminator */ for (; s < bufend; s++,to++) { + /* embedded newlines increment the line count */ if (*s == '\n' && !rsfp) curcop->cop_line++; + /* backslashes can escape the open or closing characters */ if (*s == '\\' && s+1 < bufend) { if ((s[1] == multi_open) || (s[1] == multi_close)) s++; else *to++ = *s++; } + /* allow nested opens and closes */ else if (*s == multi_close && --brackets <= 0) break; else if (*s == multi_open) @@ -5038,18 +5366,29 @@ scan_str(char *start) *to = *s; } } + /* terminate the copied string and update the sv's end-of-string */ *to = '\0'; SvCUR_set(sv, to - SvPVX(sv)); - if (s < bufend) break; /* string ends on this line? */ + /* + * this next chunk reads more into the buffer if we're not done yet + */ + + if (s < bufend) break; /* handle case where we are done yet :-) */ + /* if we're out of file, or a read fails, bail and reset the current + line marker so we can report where the unterminated string began + */ if (!rsfp || !(oldoldbufptr = oldbufptr = s = linestart = filter_gets(linestr, rsfp, 0))) { sv_free(sv); curcop->cop_line = multi_start; return Nullch; } + /* we read a line, so increment our line counter */ curcop->cop_line++; + + /* update debugger info */ if (PERLDB_LINE && curstash != debstash) { SV *sv = NEWSV(88,0); @@ -5058,14 +5397,26 @@ scan_str(char *start) av_store(GvAV(curcop->cop_filegv), (I32)curcop->cop_line, sv); } + + /* having changed the buffer, we must update bufend */ bufend = SvPVX(linestr) + SvCUR(linestr); } + + /* at this point, we have successfully read the delimited string */ + multi_end = curcop->cop_line; s++; + + /* if we allocated too much space, give some back */ if (SvCUR(sv) + 5 < SvLEN(sv)) { SvLEN_set(sv, SvCUR(sv) + 1); Renew(SvPVX(sv), SvLEN(sv), char); } + + /* decide whether this is the first or second quoted string we've read + for this op + */ + if (lex_stuff) lex_repl = sv; else @@ -5073,121 +5424,231 @@ scan_str(char *start) return s; } +/* + scan_num + takes: pointer to position in buffer + returns: pointer to new position in buffer + side-effects: builds ops for the constant in yylval.op + + Read a number in any of the formats that Perl accepts: + + 0(x[0-7A-F]+)|([0-7]+) + [\d_]+(\.[\d_]*)?[Ee](\d+) + + Underbars (_) are allowed in decimal numbers. If -w is on, + underbars before a decimal point must be at three digit intervals. + + Like most scan_ routines, it uses the tokenbuf buffer to hold the + thing it reads. + + If it reads a number without a decimal point or an exponent, it will + try converting the number to an integer and see if it can do so + without loss of precision. +*/ + char * scan_num(char *start) { - register char *s = start; - register char *d; - register char *e; - I32 tryiv; - double value; - SV *sv; - I32 floatit; - char *lastub = 0; + register char *s = start; /* current position in buffer */ + register char *d; /* destination in temp buffer */ + register char *e; /* end of temp buffer */ + I32 tryiv; /* used to see if it can be an int */ + double value; /* number read, as a double */ + SV *sv; /* place to put the converted number */ + I32 floatit; /* boolean: int or float? */ + char *lastub = 0; /* position of last underbar */ static char number_too_long[] = "Number too long"; + /* We use the first character to decide what type of number this is */ + switch (*s) { default: - croak("panic: scan_num"); + croak("panic: scan_num"); + + /* if it starts with a 0, it could be an octal number, a decimal in + 0.13 disguise, or a hexadecimal number. + */ case '0': { + /* variables: + u holds the "number so far" + shift the power of 2 of the base (hex == 4, octal == 3) + overflowed was the number more than we can hold? + + Shift is used when we add a digit. It also serves as an "are + we in octal or hex?" indicator to disallow hex characters when + in octal mode. + */ UV u; I32 shift; bool overflowed = FALSE; + /* check for hex */ if (s[1] == 'x') { shift = 4; s += 2; } + /* check for a decimal in disguise */ else if (s[1] == '.') goto decimal; + /* so it must be octal */ else shift = 3; u = 0; + + /* read the rest of the octal number */ for (;;) { - UV n, b; + UV n, b; /* n is used in the overflow test, b is the digit we're adding on */ switch (*s) { + + /* if we don't mention it, we're done */ default: goto out; + + /* _ are ignored */ case '_': s++; break; + + /* 8 and 9 are not octal */ case '8': case '9': if (shift != 4) yyerror("Illegal octal digit"); /* FALL THROUGH */ + + /* octal digits */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': - b = *s++ & 15; + b = *s++ & 15; /* ASCII digit -> value of digit */ goto digit; + + /* hex digits */ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + /* make sure they said 0x */ if (shift != 4) goto out; b = (*s++ & 7) + 9; + + /* Prepare to put the digit we have onto the end + of the number so far. We check for overflows. + */ + digit: - n = u << shift; + n = u << shift; /* make room for the digit */ if (!overflowed && (n >> shift) != u) { warn("Integer overflow in %s number", (shift == 4) ? "hex" : "octal"); overflowed = TRUE; } - u = n | b; + u = n | b; /* add the digit to the end */ break; } } + + /* if we get here, we had success: make a scalar value from + the number. + */ out: sv = NEWSV(92,0); sv_setuv(sv, u); } break; + + /* + handle decimal numbers. + we're also sent here when we read a 0 as the first digit + */ case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': decimal: d = tokenbuf; e = tokenbuf + sizeof tokenbuf - 6; /* room for various punctuation */ floatit = FALSE; + + /* read next group of digits and _ and copy into d */ while (isDIGIT(*s) || *s == '_') { + /* skip underscores, checking for misplaced ones + if -w is on + */ if (*s == '_') { if (dowarn && lastub && s - lastub != 3) warn("Misplaced _ in number"); lastub = ++s; } else { + /* check for end of fixed-length buffer */ if (d >= e) croak(number_too_long); + /* if we're ok, copy the character */ *d++ = *s++; } } + + /* final misplaced underbar check */ if (dowarn && lastub && s - lastub != 3) warn("Misplaced _ in number"); + + /* read a decimal portion if there is one. avoid + 3..5 being interpreted as the number 3. followed + by .5 + */ if (*s == '.' && s[1] != '.') { floatit = TRUE; *d++ = *s++; + + /* copy, ignoring underbars, until we run out of + digits. Note: no misplaced underbar checks! + */ for (; isDIGIT(*s) || *s == '_'; s++) { + /* fixed length buffer check */ if (d >= e) croak(number_too_long); if (*s != '_') *d++ = *s; } } + + /* read exponent part, if present */ if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) { floatit = TRUE; s++; + + /* regardless of whether user said 3E5 or 3e5, use lower 'e' */ *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */ + + /* allow positive or negative exponent */ if (*s == '+' || *s == '-') *d++ = *s++; + + /* read digits of exponent (no underbars :-) */ while (isDIGIT(*s)) { if (d >= e) croak(number_too_long); *d++ = *s++; } } + + /* terminate the string */ *d = '\0'; + + /* make an sv from the string */ sv = NEWSV(92,0); + /* reset numeric locale in case we were earlier left in Swaziland */ SET_NUMERIC_STANDARD(); value = atof(tokenbuf); + + /* + See if we can make do with an integer value without loss of + precision. We use I_V to cast to an int, because some + compilers have issues. Then we try casting it back and see + if it was the same. We only do this if we know we + specifically read an integer. + + Note: if floatit is true, then we don't need to do the + conversion at all. + */ tryiv = I_V(value); if (!floatit && (double)tryiv == value) sv_setiv(sv, tryiv); @@ -5196,6 +5657,8 @@ scan_num(char *start) break; } + /* make the op for the constant and return */ + yylval.opval = newSVOP(OP_CONST, 0, sv); return s; @@ -891,7 +891,7 @@ mem_collxfrm(const char *s, STRLEN len, STRLEN *xlen) #endif /* USE_LOCALE_COLLATE */ void -fbm_compile(SV *sv) +fbm_compile(SV *sv, U32 flags /* not used yet */) { register unsigned char *s; register unsigned char *table; @@ -1311,7 +1311,7 @@ die(pat, va_alist) SvREADONLY_on(msg); SAVEFREESV(msg); - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); @@ -1376,7 +1376,7 @@ croak(pat, va_alist) SvREADONLY_on(msg); SAVEFREESV(msg); - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); @@ -1435,7 +1435,7 @@ warn(pat,va_alist) SvREADONLY_on(msg); SAVEFREESV(msg); - PUSHMARK(sp); + PUSHMARK(SP); XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); diff --git a/utils/perldoc.PL b/utils/perldoc.PL index 76385e2c18..53219a7a94 100644 --- a/utils/perldoc.PL +++ b/utils/perldoc.PL @@ -48,11 +48,11 @@ if(@ARGV<1) { $me = $0; # Editing $0 is unportable $me =~ s,.*/,,; die <<EOF; -Usage: $me [-h] [-v] [-t] [-u] [-m] [-l] [-F] PageName|ModuleName|ProgramName +Usage: $me [-h] [-v] [-t] [-u] [-m] [-l] [-F] [-X] PageName|ModuleName|ProgramName $me -f PerlFunc -We suggest you use "perldoc perldoc" to get aquainted -with the system. +The -h option prints more help. Also try "perldoc perldoc" to get +aquainted with the system. EOF } @@ -83,6 +83,7 @@ Options: -l Display the modules file name -F Arguments are file names, not modules -v Verbosely describe what's going on + -X use index if present (looks for pod.idx at $Config{archlib}) PageName|ModuleName... is the name of a piece of documentation that you want to look at. You @@ -96,7 +97,8 @@ BuiltinFunction `perlfunc'. Any switches in the PERLDOC environment variable will be used before the -command line arguments. +command line arguments. The optional pod index file contains a list of +filenames, one per line. EOF } @@ -106,10 +108,13 @@ use Text::ParseWords; unshift(@ARGV,shellwords($ENV{"PERLDOC"})); -getopts("mhtluvFf:") || usage; +getopts("mhtluvFf:X") || usage; usage if $opt_h || $opt_h; # avoid -w warning +$podidx = "$Config{'archlib'}/pod.idx"; +$podidx = "" if $opt_X || !-f "pod.idx" && !-r _ && -M _ > 7; + if ($opt_t + $opt_u + $opt_m + $opt_l > 1) { usage("only one of -t, -u, -m or -l") } elsif ($Is_MSWin32 || $Is_Dos) { @@ -252,6 +257,18 @@ sub searchfor { foreach (@pages) { + if ($podidx && open(PODIDX, $podidx)) { + my $searchfor = $_; + local($_); + $searchfor =~ s,::,/,g; + print STDERR "Searching for '$searchfor' in $podidx\n" if $opt_v; + while (<PODIDX>) { + chomp; + push(@found, $_) if m,/$searchfor(?:\.(?:pod|pm))?$,i; + } + close(PODIDX); + next; + } print STDERR "Searching for $_\n" if $opt_v; # We must look both in @INC for library modules and in PATH # for executables, like h2xs or perldoc itself. @@ -437,7 +454,7 @@ perldoc - Look up Perl documentation in pod format. =head1 SYNOPSIS -B<perldoc> [B<-h>] [B<-v>] [B<-t>] [B<-u>] [B<-m>] [B<-l>] PageName|ModuleName|ProgramName +B<perldoc> [B<-h>] [B<-v>] [B<-t>] [B<-u>] [B<-m>] [B<-l>] [B<-F>] [B<-X>] PageName|ModuleName|ProgramName B<perldoc> B<-f> BuiltinFunction @@ -486,13 +503,19 @@ Display the file name of the module found. =item B<-F> file names -Consider arguments as file names, no search in directories should be performed. +Consider arguments as file names, no search in directories will be performed. =item B<-f> perlfunc The B<-f> option followed by the name of a perl built in function will extract the documentation of this function from L<perlfunc>. +=item B<-X> use an index if present + +The B<-X> option looks for a entry whose basename matches the name given on the +command line in the file C<$Config{archlib}/pod.idx>. The pod.idx file should +contain fully qualified filenames, one per line. + =item B<PageName|ModuleName|ProgramName> The item you want to look up. Nested modules (such as C<File::Basename>) @@ -522,6 +545,9 @@ Minor updates by Andy Dougherty <doughera@lafcol.lafayette.edu> =cut # +# Version 1.13: Fri Feb 27 16:20:50 EST 1997 +# Gurusamy Sarathy <gsar@umich.edu> +# -doc tweaks for -F and -X options # Version 1.12: Sat Apr 12 22:41:09 EST 1997 # Gurusamy Sarathy <gsar@umich.edu> # -various fixes for win32 diff --git a/vms/perly_c.vms b/vms/perly_c.vms index 80b1d08c32..2e68d12bc8 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -17,1051 +17,1039 @@ dep(void) #define YYERRCODE 256 dEXT short yylhs[] = { -1, 45, 0, 9, 7, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 24, 24, 24, 24, 24, 24, 15, - 15, 15, 14, 14, 42, 42, 13, 13, 13, 13, - 13, 13, 13, 26, 26, 27, 27, 28, 29, 30, - 31, 32, 44, 44, 1, 1, 1, 1, 3, 38, - 38, 46, 4, 5, 6, 39, 40, 40, 41, 41, - 47, 47, 49, 48, 16, 16, 16, 25, 25, 25, - 36, 36, 36, 36, 36, 36, 36, 50, 36, 37, - 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 12, 12, 12, 24, 24, 24, 24, 24, 24, 24, + 15, 15, 15, 14, 14, 42, 42, 13, 13, 13, + 13, 13, 13, 13, 26, 26, 27, 27, 28, 29, + 30, 31, 32, 44, 44, 1, 1, 1, 1, 3, + 38, 38, 46, 4, 5, 6, 39, 40, 40, 41, + 41, 47, 47, 49, 48, 16, 16, 16, 25, 25, + 25, 36, 36, 36, 36, 36, 36, 36, 50, 36, + 37, 37, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 33, 33, 34, - 34, 34, 2, 2, 43, 23, 18, 19, 20, 21, - 22, 35, 35, 35, 35, + 17, 17, 17, 17, 17, 17, 17, 17, 33, 33, + 34, 34, 34, 2, 2, 43, 23, 18, 19, 20, + 21, 22, 35, 35, 35, 35, }; dEXT short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 0, - 2, 6, 7, 7, 0, 2, 8, 8, 10, 9, - 8, 11, 3, 0, 1, 0, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 4, 1, - 0, 5, 0, 0, 0, 1, 0, 1, 1, 1, - 3, 2, 0, 7, 3, 3, 1, 2, 3, 1, - 3, 5, 6, 3, 5, 2, 4, 0, 5, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 5, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 3, 2, 4, - 3, 4, 1, 5, 1, 4, 5, 4, 1, 1, - 1, 5, 6, 5, 6, 5, 4, 5, 1, 1, - 3, 4, 3, 2, 2, 4, 5, 4, 5, 4, - 5, 1, 2, 2, 1, 2, 2, 2, 1, 3, - 1, 3, 4, 4, 6, 1, 1, 0, 1, 0, - 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, + 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, + 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, + 9, 8, 11, 3, 0, 1, 0, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 4, + 1, 0, 5, 0, 0, 0, 1, 0, 1, 1, + 1, 3, 2, 0, 7, 3, 3, 1, 2, 3, + 1, 3, 5, 6, 3, 5, 2, 4, 0, 5, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 5, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, + 4, 3, 4, 1, 5, 1, 4, 5, 4, 1, + 1, 1, 5, 6, 5, 6, 5, 4, 5, 1, + 1, 3, 4, 3, 2, 2, 4, 5, 4, 5, + 4, 5, 1, 2, 2, 1, 2, 2, 2, 1, + 3, 1, 3, 4, 4, 6, 1, 1, 0, 1, + 0, 1, 2, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 1, 1, 1, 1, }; dEXT short yydefred[] = { 1, - 0, 7, 0, 44, 55, 53, 0, 53, 8, 45, - 9, 11, 0, 46, 47, 48, 0, 0, 0, 62, - 63, 14, 4, 156, 0, 0, 129, 0, 151, 0, - 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 164, 0, + 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, + 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, + 64, 14, 4, 157, 0, 0, 130, 0, 152, 0, + 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 165, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 119, 121, 0, 0, 0, 0, 157, 50, - 0, 56, 0, 61, 0, 7, 172, 175, 174, 173, + 0, 0, 120, 122, 0, 0, 0, 0, 158, 51, + 0, 57, 0, 62, 0, 7, 173, 176, 175, 174, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, - 4, 4, 0, 0, 0, 0, 0, 146, 0, 0, - 0, 0, 76, 0, 170, 0, 135, 0, 0, 0, - 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 167, 168, 169, 171, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 147, 0, 0, + 0, 0, 77, 0, 171, 0, 136, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 168, 169, 170, 172, 0, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 49, 58, 0, 0, 0, - 74, 0, 0, 78, 0, 0, 0, 0, 0, 0, - 0, 4, 150, 152, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 133, 0, 0, 108, 26, 0, 0, - 19, 0, 0, 0, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 0, 50, 59, 0, 0, + 0, 75, 0, 0, 79, 0, 0, 0, 0, 0, + 0, 0, 4, 151, 153, 0, 0, 0, 0, 0, + 0, 0, 112, 0, 134, 0, 0, 109, 27, 0, + 0, 19, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, - 0, 0, 131, 0, 0, 60, 59, 52, 0, 3, - 0, 154, 0, 0, 112, 0, 41, 0, 42, 0, - 0, 0, 0, 165, 0, 0, 35, 40, 0, 0, - 0, 153, 162, 77, 0, 136, 0, 138, 0, 110, - 0, 0, 0, 0, 0, 140, 0, 0, 0, 118, - 0, 116, 0, 127, 0, 132, 0, 75, 0, 79, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 137, - 139, 126, 0, 124, 0, 0, 141, 117, 0, 122, - 128, 114, 64, 155, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 125, 123, 73, 7, 27, 28, 0, - 0, 23, 24, 0, 31, 0, 0, 0, 21, 0, - 0, 0, 30, 5, 0, 29, 0, 0, 32, 0, - 22, + 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 0, 61, 60, 53, + 0, 3, 0, 155, 0, 0, 113, 0, 42, 0, + 43, 0, 0, 0, 0, 166, 0, 0, 36, 41, + 0, 0, 0, 154, 163, 78, 0, 137, 0, 139, + 0, 111, 0, 0, 0, 0, 0, 141, 0, 0, + 0, 119, 0, 117, 0, 128, 0, 133, 0, 76, + 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 138, 140, 127, 0, 125, 0, 0, 142, 118, + 0, 123, 129, 115, 65, 156, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 124, 74, 7, 28, + 29, 0, 0, 24, 25, 0, 32, 0, 0, 0, + 22, 0, 0, 0, 31, 5, 0, 30, 0, 0, + 33, 0, 23, }; dEXT short yydgoto[] = { 1, - 9, 66, 10, 18, 95, 17, 86, 337, 89, 326, - 3, 11, 12, 68, 342, 261, 70, 71, 72, 73, - 74, 75, 76, 267, 78, 268, 257, 259, 262, 270, - 258, 260, 113, 197, 91, 79, 236, 81, 83, 178, - 248, 142, 265, 13, 2, 14, 15, 16, 85, 254, + 9, 66, 10, 18, 95, 17, 86, 339, 89, 328, + 3, 11, 12, 68, 344, 263, 70, 71, 72, 73, + 74, 75, 76, 269, 78, 270, 259, 261, 264, 272, + 260, 262, 113, 198, 91, 79, 238, 81, 83, 179, + 250, 142, 267, 13, 2, 14, 15, 16, 85, 256, }; dEXT short yysindex[] = { 0, - 0, 0, -120, 0, 0, 0, -50, 0, 0, 0, - 0, 0, 661, 0, 0, 0, -240, -238, -29, 0, - 0, 0, 0, 0, -32, -32, 0, -8, 0, 2115, - 0, 0, -4, 31, 32, 35, -35, 2115, 56, 57, - 61, 1037, 981, -32, 1100, 1364, -218, 0, 0, -32, - 2115, 2115, 2115, 2115, 2115, 2115, 1420, 0, 2115, 2115, - 1476, -32, -32, -32, -32, 2115, -205, 0, 201, 306, - -63, -62, 0, 0, -24, 67, 45, 65, 0, 0, - -15, 0, -149, 0, -144, 0, 0, 0, 0, 0, - 2115, 80, 2115, 841, -15, -149, 0, 0, 0, 0, - 0, 0, 85, 306, 86, 1535, 981, 0, 841, 0, - -63, 65, 0, 2115, 0, 88, 0, 841, -28, 4, - -51, 2115, 0, 65, 340, 340, 340, -76, -76, 49, - -31, 340, 340, 0, -82, 0, 0, 0, 0, 841, - -15, 0, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, - 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, - 2115, 2115, 2115, 0, 0, 48, 2115, 2115, 2115, 2115, - 2115, 2115, 1710, 0, 2115, 0, 0, -43, -116, 241, - 0, 2115, 1193, 0, -15, 2115, 2115, 2115, 2115, 106, - 1769, 0, 0, 0, -23, 20, 104, 2115, 65, 1825, - 1881, 0, 36, 0, 2115, 62, 0, 0, -232, -232, - 0, -232, -232, -134, 0, -46, 1131, 841, 689, 316, - 859, 306, 3778, 1980, 3652, 1299, 480, 396, 340, 340, - 2115, 0, 1944, 2115, 0, 128, -58, 22, -56, 24, - 33, 28, 0, -19, 306, 0, 0, 0, 2115, 0, - 134, 0, 2115, 2115, 0, -232, 0, 142, 0, 148, - -232, 149, 150, 0, 153, 201, 0, 0, 154, 138, - 2115, 0, 0, 0, -7, 0, 2, 0, 16, 0, - 70, 2115, 73, 2115, 30, 0, 18, 101, 2115, 0, - 75, 0, 78, 0, 81, 0, 151, 0, 1247, 0, - 90, 90, 90, 90, 2115, 90, 2115, 167, 0, 0, - 0, 0, 103, 0, 3869, 84, 0, 0, 170, 0, - 0, 0, 0, 0, 0, -205, -205, -207, -207, 176, - -205, 168, 90, 0, 0, 0, 0, 0, 0, 90, - 192, 0, 0, 90, 0, 1769, -205, 402, 0, 2115, - -205, 207, 0, 0, 208, 0, 90, 90, 0, -207, - 0, + 0, 0, -66, 0, 0, 0, -48, 0, 0, 0, + 0, 0, 645, 0, 0, 0, -232, -227, -27, 0, + 0, 0, 0, 0, -23, -23, 0, -6, 0, 2099, + 0, 0, 13, 20, 24, 25, -34, 2099, 27, 28, + 29, 1021, 965, -23, 1084, 1348, -217, 0, 0, -23, + 2099, 2099, 2099, 2099, 2099, 2099, 1404, 0, 2099, 2099, + 1460, -23, -23, -23, -23, 2099, -206, 0, 335, 3814, + -73, -68, 0, 0, -47, 40, 32, 61, 0, 0, + -39, 0, -157, 0, -145, 0, 0, 0, 0, 0, + 2099, 73, 2099, 825, -39, -157, 0, 0, 0, 0, + 0, 0, 75, 3814, 78, 1519, 965, 0, 825, 0, + -73, 61, 0, 2099, 0, 77, 0, 825, -16, -9, + -51, 2099, 0, 61, 87, 87, 87, -86, -86, 33, + -40, 87, 87, 0, -81, 0, 0, 0, 0, 825, + -39, 0, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, + 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, + 2099, 2099, 2099, 2099, 0, 0, 30, 2099, 2099, 2099, + 2099, 2099, 2099, 1694, 0, 2099, 0, 0, -49, -118, + 189, 0, 2099, 353, 0, -39, 2099, 2099, 2099, 2099, + 104, 1753, 0, 0, 0, -24, 8, 85, 2099, 61, + 1809, 1865, 0, 23, 0, 2099, 54, 0, 0, -269, + -269, 0, -269, -269, -269, -151, 0, -43, 1121, 825, + 673, 50, 363, 3814, 1233, 2459, 3640, 2309, 266, -82, + 87, 87, 2099, 0, 1928, 2099, 0, 111, 51, 12, + 76, 14, 90, 39, 0, -22, 3814, 0, 0, 0, + 2099, 0, 121, 0, 2099, 2099, 0, -269, 0, 124, + 0, 125, -269, 126, 130, 0, 112, 335, 0, 0, + 131, 136, 2099, 0, 0, 0, -14, 0, 1, 0, + 4, 0, 133, 2099, 55, 2099, 49, 0, 6, 197, + 2099, 0, 89, 0, 94, 0, 100, 0, 144, 0, + 1175, 0, 92, 92, 92, 92, 2099, 92, 2099, 171, + 0, 0, 0, 0, 202, 0, 3900, 108, 0, 0, + 188, 0, 0, 0, 0, 0, 0, -206, -206, -238, + -238, 199, -206, 211, 92, 0, 0, 0, 0, 0, + 0, 92, 241, 0, 0, 92, 0, 1753, -206, 326, + 0, 2099, -206, 256, 0, 0, 259, 0, 92, 92, + 0, -238, 0, }; dEXT short yyrindex[] = { 0, - 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, + 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2156, -17, 0, - 0, 2675, 2720, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2228, 426, 0, + 0, 2833, 2876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 0, -3, 108, - 2774, 2860, 0, 0, 2034, 121, 0, 140, 0, 0, - 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, - 2203, 0, 0, 3504, 0, 145, 0, 0, 0, 0, - 0, 0, 0, 3772, 0, 0, 252, 0, 3551, 541, - 602, 2270, 0, 0, 0, 442, 0, 3587, 2774, 0, - 0, 2203, 0, 2324, 3010, 3049, 3096, 2911, 2972, 2439, - 0, 3147, 3193, 0, 0, 0, 0, 0, 0, 3633, + 0, 0, 0, 0, 0, 0, 59, 0, -10, 2038, + 2952, 2995, 0, 0, 2274, 2140, 0, 200, 0, 0, + 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, + 2421, 0, 0, 105, 0, 198, 0, 0, 0, 0, + 0, 0, 0, 3753, 0, 0, 319, 0, 3505, 525, + 586, 2510, 0, 0, 0, 2185, 0, 3541, 2952, 0, + 0, 2421, 0, 2553, 3112, 3150, 3188, -37, 3069, 2597, + 0, 3231, 3269, 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2522, 0, 0, 0, 0, 925, - 0, 252, 0, 0, 0, 263, 0, 0, 0, 0, - 223, 0, 0, 0, 0, 282, 0, 0, 2576, 0, - 0, 0, 0, 0, 0, 2624, 0, 0, -1, 26, - 0, 27, 51, 718, 0, 0, 3752, 1576, 1632, 3368, - 3413, 3799, 0, -38, 3710, 3678, 3060, 3459, 3285, 3332, + 0, 0, 0, 0, 0, 2673, 0, 0, 0, 0, + 909, 0, 319, 0, 0, 0, 320, 0, 0, 0, + 0, 306, 0, 0, 0, 0, 325, 0, 0, 2789, + 0, 0, 0, 0, 0, 0, 2716, 0, 0, -5, + 22, 0, 68, 69, 70, 702, 0, 0, 3741, 1296, + 1560, 3386, 3424, 3796, 0, 3703, 3660, 3622, 1616, 3467, + 3305, 3348, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3809, 0, 0, 0, + 309, 0, 0, 0, 0, 2421, 0, 79, 0, 0, + 0, 0, 330, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3835, 0, 0, 0, 273, 0, - 0, 0, 0, 2203, 0, 59, 0, 0, 0, 0, - 293, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, - 0, 0, 0, 0, 2380, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 79, 79, 186, 186, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 79, 925, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 0, + 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, + 0, 0, 0, 0, 0, 0, 1982, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 59, 154, + 154, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 340, 59, 909, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 154, 0, }; dEXT short yygindex[] = { 0, - 0, 0, 0, 349, 328, 0, -48, 0, 679, 378, - -84, 0, 0, 0, -298, -13, 4075, 2485, 0, 0, - 0, 0, 0, 363, 908, 0, 0, 233, -168, 38, - 72, 196, -77, -175, 999, 0, 0, 0, 0, 290, - 0, -249, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 374, 351, 0, -12, 0, 946, 413, + -83, 0, 0, 0, -311, -13, 4007, 2893, 0, 0, + 0, 0, 0, 372, -8, 0, 0, 246, -131, 43, + 86, 208, -45, -169, 987, 0, 0, 0, 0, 308, + 0, -271, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 4359 +#define YYTABLESIZE 4293 dEXT short yytable[] = { 69, - 62, 180, 93, 62, 102, 93, 251, 203, 20, 206, - 207, 201, 283, 181, 167, 246, 80, 272, 82, 93, - 93, 296, 269, 149, 93, 57, 149, 169, 171, 84, - 343, 93, 121, 309, 290, 97, 292, 15, 122, 18, - 149, 149, 310, 131, 204, 149, 149, 135, 186, 187, - 188, 189, 190, 191, 93, 15, 311, 18, 317, 168, - 170, 361, 169, 273, 147, 148, 38, 16, 340, 341, - 98, 99, 141, 149, 100, 149, 338, 339, 25, 23, - 291, 345, 293, 62, 38, 16, 295, 233, 316, 57, - 23, 17, 195, 196, 168, 105, 106, 353, 172, 37, - 107, 356, 308, 174, 39, 149, 173, 23, 175, 17, - 177, 25, 179, 319, 25, 25, 25, 37, 25, 182, - 25, 25, 15, 25, 192, 294, 193, 200, 202, 209, - 210, 212, 213, 214, 215, 216, 330, 25, 234, 205, - 249, 62, 25, 271, 274, 4, 5, 6, 70, 7, - 8, 70, 282, 237, 238, 239, 240, 241, 242, 244, - 280, 130, 312, 148, 130, 70, 70, 289, 196, 25, - 231, 297, 256, 210, 298, 210, 300, 266, 130, 130, - 67, 355, 301, 130, 275, 20, 277, 279, 302, 303, - 304, 281, 305, 318, 306, 334, 307, 314, 67, 320, - 70, 25, 321, 25, 25, 322, 19, 333, 335, 323, - 336, 130, 325, 130, 147, 148, 344, 285, 20, 287, - 288, 20, 20, 20, 87, 20, 346, 20, 20, 88, - 20, 350, 67, 93, 93, 93, 93, 166, 147, 148, - 147, 148, 93, 130, 20, 147, 148, 357, 358, 20, - 147, 148, 348, 51, 149, 149, 149, 149, 93, 93, - 101, 93, 93, 149, 2, 147, 148, 57, 313, 149, - 149, 149, 149, 147, 148, 196, 20, 147, 148, 149, - 149, 34, 149, 149, 149, 149, 149, 149, 149, 147, - 148, 149, 160, 256, 149, 149, 149, 43, 147, 148, - 43, 43, 43, 36, 43, 232, 43, 43, 20, 43, - 20, 20, 147, 148, 147, 148, 147, 148, 147, 148, - 147, 148, 161, 43, 147, 148, 147, 148, 43, 147, - 148, 158, 69, 39, 25, 25, 25, 25, 25, 25, - 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 36, 43, 21, 25, 25, 96, - 25, 25, 25, 25, 25, 250, 147, 148, 156, 25, - 25, 25, 25, 25, 25, 77, 211, 25, 332, 70, - 70, 70, 70, 352, 263, 185, 25, 43, 25, 25, - 43, 0, 130, 130, 130, 130, 167, 147, 148, 147, - 148, 130, 0, 0, 70, 70, 167, 130, 130, 130, - 130, 67, 67, 67, 67, 0, 0, 130, 130, 0, - 130, 130, 130, 130, 130, 130, 130, 0, 149, 130, - 167, 0, 130, 130, 130, 0, 67, 67, 149, 0, - 0, 20, 20, 20, 20, 20, 20, 0, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 0, 149, 0, 20, 20, 0, 20, 20, 20, - 20, 20, 143, 144, 145, 146, 20, 20, 20, 20, - 20, 20, 156, 0, 20, 156, 167, 0, 0, 0, - 0, 0, 0, 20, 0, 20, 20, 147, 148, 156, - 156, 0, 0, 0, 156, 0, 4, 5, 6, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 149, 0, - 43, 43, 43, 43, 43, 43, 354, 43, 43, 43, - 0, 0, 156, 43, 156, 0, 43, 43, 43, 43, - 0, 0, 0, 43, 43, 0, 43, 43, 43, 43, - 43, 0, 0, 0, 0, 43, 43, 43, 43, 43, - 43, 0, 0, 43, 156, 0, 0, 0, 0, 0, - 167, 0, 43, 172, 43, 43, 172, 172, 172, 0, - 172, 156, 172, 172, 156, 172, 150, 0, 0, 0, - 0, 0, 151, 152, 153, 154, 0, 0, 156, 156, - 0, 0, 149, 156, 172, 155, 157, 158, 159, 160, - 161, 162, 0, 0, 163, 0, 0, 164, 165, 166, - 0, 162, 0, 0, 163, 0, 0, 164, 165, 166, - 0, 156, 0, 156, 173, 0, 0, 173, 173, 173, - 0, 173, 113, 173, 173, 113, 173, 0, 163, 0, - 0, 164, 165, 166, 0, 0, 0, 0, 0, 113, - 113, 0, 0, 156, 113, 173, 172, 4, 5, 6, - 0, 7, 8, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 0, 331, 153, 154, 0, 0, 0, 0, - 0, 67, 0, 52, 113, 0, 62, 64, 50, 0, - 57, 162, 65, 60, 163, 59, 0, 164, 165, 166, - 347, 0, 0, 156, 156, 156, 156, 349, 0, 58, - 108, 351, 156, 117, 63, 0, 0, 173, 156, 156, - 156, 156, 0, 0, 359, 360, 0, 0, 156, 156, - 0, 156, 156, 156, 156, 156, 156, 156, 0, 0, - 156, 61, 0, 156, 156, 156, 0, 0, 66, 176, - 0, 66, 0, 0, 0, 0, 151, 152, 153, 154, - 0, 0, 0, 184, 0, 0, 66, 0, 0, 167, - 0, 0, 0, 23, 161, 162, 53, 0, 163, 0, - 0, 164, 165, 166, 0, 0, 0, 172, 172, 172, - 172, 172, 0, 172, 172, 172, 0, 0, 0, 172, - 66, 149, 156, 156, 156, 156, 0, 0, 0, 208, - 172, 156, 172, 172, 172, 172, 172, 156, 156, 156, - 156, 172, 172, 172, 172, 172, 172, 156, 156, 172, - 156, 156, 156, 156, 156, 156, 156, 0, 172, 156, - 172, 172, 156, 156, 156, 0, 247, 0, 173, 173, - 173, 173, 173, 255, 173, 173, 173, 0, 0, 0, - 173, 0, 0, 113, 113, 113, 113, 0, 0, 0, - 0, 173, 113, 173, 173, 173, 173, 173, 113, 113, - 113, 113, 173, 173, 173, 173, 173, 173, 113, 113, - 173, 113, 113, 113, 113, 113, 113, 113, 0, 173, - 113, 173, 173, 113, 113, 113, 22, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, - 0, 167, 33, 34, 35, 36, 0, 0, 0, 37, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 167, - 112, 44, 45, 46, 47, 48, 49, 43, 124, 51, - 43, 43, 43, 149, 43, 0, 43, 43, 54, 43, - 55, 56, 0, 0, 0, 151, 0, 153, 154, 0, - 0, 149, 0, 43, 0, 0, 0, 0, 43, 66, - 66, 66, 66, 161, 162, 0, 0, 163, 112, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 66, 43, 62, 64, 50, 0, - 57, 199, 65, 60, 92, 59, 0, 0, 0, 112, + 207, 62, 181, 104, 168, 102, 104, 204, 168, 248, + 20, 208, 62, 253, 58, 285, 274, 170, 298, 345, + 104, 104, 172, 202, 80, 104, 311, 148, 149, 82, + 15, 84, 121, 93, 112, 18, 150, 342, 343, 122, + 150, 312, 124, 131, 313, 182, 319, 135, 15, 169, + 363, 275, 97, 18, 171, 104, 340, 341, 26, 98, + 271, 347, 39, 99, 100, 62, 105, 106, 107, 235, + 293, 141, 295, 23, 170, 173, 205, 355, 58, 174, + 39, 358, 112, 23, 187, 188, 189, 190, 191, 192, + 175, 26, 196, 197, 26, 26, 26, 297, 26, 23, + 26, 26, 178, 26, 176, 200, 169, 318, 16, 17, + 20, 180, 183, 112, 193, 203, 201, 26, 194, 38, + 236, 321, 26, 206, 40, 276, 16, 17, 20, 210, + 211, 213, 214, 215, 216, 217, 218, 38, 251, 62, + 168, 310, 15, 292, 284, 149, 149, 282, 149, 26, + 291, 307, 233, 21, 239, 240, 241, 242, 243, 244, + 246, 300, 149, 149, 303, 304, 305, 149, 294, 197, + 306, 308, 150, 258, 211, 332, 211, 168, 268, 316, + 273, 26, 296, 26, 26, 277, 21, 279, 281, 21, + 21, 21, 283, 21, 309, 21, 21, 149, 21, 4, + 5, 6, 325, 7, 8, 299, 154, 155, 19, 150, + 302, 335, 21, 322, 327, 148, 149, 21, 323, 287, + 357, 289, 290, 163, 324, 314, 164, 167, 338, 165, + 166, 167, 337, 87, 104, 104, 104, 104, 88, 346, + 68, 104, 112, 104, 21, 148, 149, 112, 2, 104, + 104, 104, 104, 148, 149, 350, 148, 149, 68, 104, + 104, 101, 104, 104, 104, 104, 104, 104, 104, 348, + 315, 104, 148, 149, 148, 149, 21, 197, 21, 21, + 352, 44, 148, 149, 44, 44, 44, 234, 44, 320, + 44, 44, 68, 44, 336, 258, 359, 148, 149, 360, + 148, 149, 148, 149, 148, 149, 52, 44, 148, 149, + 148, 149, 44, 252, 26, 26, 26, 26, 26, 26, + 58, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 69, 148, 149, 26, 26, 44, + 26, 26, 26, 26, 26, 148, 149, 148, 149, 26, + 26, 26, 26, 26, 26, 163, 168, 26, 164, 161, + 37, 165, 166, 167, 35, 162, 26, 159, 26, 26, + 40, 44, 148, 149, 44, 37, 149, 149, 149, 149, + 35, 21, 96, 149, 77, 149, 148, 149, 150, 212, + 354, 149, 149, 254, 334, 164, 255, 265, 165, 166, + 167, 149, 149, 186, 149, 149, 149, 149, 149, 21, + 21, 21, 21, 21, 21, 157, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 148, + 149, 0, 21, 21, 0, 21, 21, 21, 21, 21, + 0, 0, 0, 168, 21, 21, 21, 21, 21, 21, + 356, 0, 21, 168, 4, 5, 6, 0, 7, 8, + 0, 21, 0, 21, 21, 0, 150, 0, 0, 150, + 0, 68, 68, 68, 68, 150, 0, 0, 68, 0, + 0, 0, 0, 150, 150, 150, 0, 0, 150, 0, + 0, 0, 0, 148, 149, 0, 68, 68, 148, 149, + 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, + 0, 44, 44, 44, 0, 0, 150, 44, 150, 0, + 44, 44, 44, 44, 0, 0, 0, 44, 44, 0, + 44, 44, 44, 44, 44, 0, 0, 0, 0, 44, + 44, 44, 44, 44, 44, 0, 0, 44, 150, 0, + 0, 0, 152, 153, 154, 155, 44, 173, 44, 44, + 173, 173, 173, 0, 173, 157, 173, 173, 157, 173, + 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, + 0, 0, 157, 157, 0, 0, 0, 157, 173, 0, + 0, 4, 5, 6, 0, 7, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, + 0, 0, 0, 147, 0, 157, 0, 157, 174, 0, + 0, 174, 174, 174, 0, 174, 114, 174, 174, 114, + 174, 148, 149, 151, 0, 0, 0, 0, 0, 152, + 153, 154, 155, 114, 114, 0, 0, 157, 114, 174, + 173, 154, 156, 158, 159, 160, 161, 162, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 0, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 52, 114, 0, + 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, + 0, 0, 0, 0, 0, 0, 0, 150, 150, 150, + 150, 0, 0, 58, 150, 0, 150, 0, 63, 0, + 0, 174, 150, 150, 150, 150, 329, 330, 331, 0, + 333, 0, 150, 150, 0, 150, 150, 150, 150, 150, + 150, 150, 0, 0, 150, 61, 0, 150, 150, 150, + 0, 0, 67, 0, 0, 67, 0, 349, 0, 0, + 0, 0, 0, 0, 351, 0, 0, 0, 353, 0, + 67, 0, 0, 168, 0, 0, 0, 23, 0, 0, + 53, 361, 362, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 173, 173, 173, 173, 0, 173, 173, 173, + 0, 0, 0, 173, 67, 150, 157, 157, 157, 157, + 0, 0, 0, 157, 173, 157, 173, 173, 173, 173, + 173, 157, 157, 157, 157, 173, 173, 173, 173, 173, + 173, 157, 157, 173, 157, 157, 157, 157, 157, 157, + 157, 0, 173, 157, 173, 173, 157, 157, 157, 0, + 0, 0, 174, 174, 174, 174, 174, 0, 174, 174, + 174, 0, 0, 0, 174, 0, 0, 114, 114, 114, + 114, 0, 0, 0, 114, 174, 114, 174, 174, 174, + 174, 174, 114, 114, 114, 114, 174, 174, 174, 174, + 174, 174, 114, 114, 174, 114, 114, 114, 114, 114, + 114, 114, 0, 174, 114, 174, 174, 114, 114, 114, + 22, 24, 25, 26, 27, 28, 0, 29, 30, 31, + 0, 0, 0, 32, 0, 168, 33, 34, 35, 36, + 0, 0, 0, 37, 38, 0, 39, 40, 41, 42, + 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, + 49, 44, 0, 51, 44, 44, 44, 150, 44, 0, + 44, 44, 54, 44, 55, 56, 0, 0, 67, 152, + 0, 154, 155, 0, 0, 0, 0, 44, 0, 0, + 0, 0, 44, 67, 67, 67, 67, 162, 163, 0, + 67, 164, 0, 0, 165, 166, 167, 108, 0, 0, + 117, 0, 0, 0, 0, 0, 0, 52, 67, 44, + 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, + 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 177, 0, 63, 114, + 115, 44, 0, 0, 44, 0, 123, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 136, 137, + 138, 139, 0, 52, 0, 61, 62, 64, 50, 0, + 57, 0, 65, 60, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 115, 0, 63, 0, 0, 43, 123, 0, - 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 136, 137, 138, 139, 0, 0, 0, 0, 0, 52, - 0, 61, 62, 64, 50, 0, 57, 0, 65, 60, - 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63, 0, 209, 23, 0, 0, + 53, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 23, 0, 198, 53, 0, 0, 0, + 0, 61, 0, 154, 155, 0, 52, 0, 0, 62, + 64, 50, 0, 57, 249, 65, 60, 0, 59, 162, + 163, 257, 0, 164, 0, 0, 165, 166, 167, 0, + 0, 0, 0, 23, 0, 0, 53, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 153, - 154, 0, 52, 0, 0, 62, 64, 50, 0, 57, - 0, 65, 60, 0, 59, 161, 162, 153, 0, 163, - 0, 0, 164, 165, 166, 0, 112, 0, 0, 23, - 0, 112, 53, 63, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 43, 43, 0, 43, 43, 43, - 61, 0, 0, 43, 0, 0, 43, 43, 43, 43, - 0, 0, 0, 43, 43, 0, 43, 43, 43, 43, - 43, 0, 0, 0, 0, 43, 43, 43, 43, 43, - 43, 167, 23, 43, 0, 53, 0, 0, 0, 0, - 0, 0, 43, 252, 43, 43, 253, 110, 25, 26, - 27, 28, 88, 29, 30, 31, 0, 0, 0, 32, - 0, 0, 0, 149, 0, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, + 0, 44, 44, 44, 61, 0, 0, 44, 0, 0, + 44, 44, 44, 44, 0, 0, 0, 44, 44, 0, + 44, 44, 44, 44, 44, 0, 0, 0, 0, 44, + 44, 44, 44, 44, 44, 0, 23, 44, 0, 53, + 0, 168, 0, 0, 0, 326, 44, 0, 44, 44, + 0, 110, 25, 26, 27, 28, 88, 29, 30, 31, + 0, 0, 0, 32, 0, 0, 0, 157, 0, 0, + 0, 0, 0, 150, 38, 0, 39, 40, 41, 42, + 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, + 49, 0, 0, 51, 0, 168, 0, 0, 0, 0, + 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, + 27, 28, 0, 29, 30, 31, 0, 0, 0, 32, + 286, 0, 0, 0, 0, 157, 0, 150, 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, 0, 0, 51, - 0, 0, 0, 167, 0, 0, 0, 324, 54, 0, - 55, 56, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 0, 0, 0, 32, 0, 0, 0, 156, - 0, 0, 0, 0, 0, 149, 38, 0, 39, 40, - 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, - 47, 48, 49, 0, 0, 51, 0, 167, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 56, 0, 0, - 0, 0, 0, 0, 0, 0, 116, 25, 26, 27, - 28, 0, 29, 30, 31, 0, 0, 0, 32, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 167, - 44, 45, 46, 47, 48, 49, 52, 0, 51, 62, - 64, 50, 0, 57, 0, 65, 60, 54, 59, 55, - 56, 0, 0, 0, 0, 0, 0, 151, 152, 153, - 154, 149, 120, 0, 0, 0, 0, 63, 0, 0, - 0, 157, 158, 159, 160, 161, 162, 0, 0, 163, - 0, 0, 164, 165, 166, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 0, 0, 0, 0, 54, 0, + 55, 56, 0, 0, 0, 0, 88, 0, 0, 88, + 116, 25, 26, 27, 28, 0, 29, 30, 31, 0, + 0, 0, 32, 88, 88, 150, 0, 0, 88, 0, + 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, + 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, + 52, 0, 51, 62, 64, 50, 0, 57, 88, 65, + 60, 54, 59, 55, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 120, 152, 153, 154, + 155, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 158, 159, 160, 161, 162, 163, 0, 0, 164, + 0, 0, 165, 166, 167, 0, 52, 0, 61, 62, + 64, 50, 0, 57, 130, 65, 60, 0, 59, 0, + 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, + 0, 152, 153, 154, 155, 0, 0, 63, 0, 0, + 0, 0, 0, 53, 156, 158, 159, 160, 161, 162, + 163, 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, 52, 0, 61, 62, 64, 50, 0, 57, - 130, 65, 60, 0, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, - 152, 153, 154, 63, 0, 0, 0, 0, 0, 53, - 0, 0, 155, 157, 158, 159, 160, 161, 162, 0, - 0, 163, 0, 0, 164, 165, 166, 0, 52, 0, - 61, 62, 64, 50, 0, 57, 0, 65, 60, 0, - 59, 0, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 151, 152, 153, 154, 0, 0, 63, - 0, 0, 0, 0, 0, 53, 155, 157, 158, 159, - 160, 161, 162, 0, 0, 163, 0, 0, 164, 165, - 166, 0, 0, 0, 0, 0, 61, 52, 134, 0, - 62, 64, 50, 0, 57, 194, 65, 60, 0, 59, - 0, 0, 0, 0, 0, 151, 152, 153, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, - 0, 53, 160, 161, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 87, 0, 0, 87, - 24, 25, 26, 27, 28, 61, 29, 30, 31, 0, - 0, 0, 32, 87, 87, 0, 0, 0, 87, 0, + 0, 65, 60, 0, 59, 0, 0, 0, 0, 0, + 0, 0, 0, 151, 0, 0, 0, 0, 0, 152, + 153, 154, 155, 63, 0, 0, 0, 0, 0, 53, + 0, 0, 156, 158, 159, 160, 161, 162, 163, 0, + 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, + 61, 52, 134, 0, 62, 64, 50, 0, 57, 195, + 65, 60, 0, 59, 0, 0, 0, 88, 88, 88, + 88, 0, 0, 0, 88, 0, 88, 0, 0, 0, + 0, 0, 63, 88, 0, 53, 0, 0, 0, 0, + 0, 0, 88, 88, 0, 88, 88, 88, 88, 88, + 89, 0, 0, 89, 24, 25, 26, 27, 28, 61, + 29, 30, 31, 0, 0, 0, 32, 89, 89, 0, + 0, 0, 89, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, + 46, 47, 48, 49, 53, 0, 51, 0, 0, 0, + 0, 0, 89, 0, 0, 54, 90, 55, 56, 90, + 24, 25, 26, 27, 28, 0, 29, 30, 31, 0, + 0, 0, 32, 90, 90, 0, 0, 0, 90, 0, 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, - 53, 0, 51, 0, 0, 0, 0, 0, 87, 0, - 0, 54, 88, 55, 56, 88, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 0, 0, 0, 32, 88, - 88, 0, 0, 0, 88, 0, 0, 0, 0, 38, + 0, 0, 51, 0, 0, 0, 0, 0, 90, 0, + 0, 54, 0, 55, 56, 0, 24, 25, 26, 27, + 28, 0, 29, 30, 31, 0, 52, 0, 32, 62, + 64, 50, 0, 57, 245, 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 0, 0, 51, 0, - 0, 0, 0, 0, 88, 0, 0, 54, 0, 55, - 56, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 0, 52, 0, 32, 62, 64, 50, 0, 57, - 243, 65, 60, 0, 59, 38, 0, 39, 40, 41, - 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, - 48, 49, 0, 63, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 0, 0, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 61, 52, 0, 32, 62, 64, 50, 0, 57, 0, - 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 63, 51, 0, 53, 0, 0, 0, 0, - 0, 0, 54, 0, 55, 56, 0, 87, 87, 87, - 87, 0, 0, 0, 0, 0, 87, 52, 0, 61, - 62, 64, 50, 87, 57, 276, 65, 60, 0, 59, - 0, 0, 87, 87, 0, 87, 87, 87, 87, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 88, 88, 88, 0, 0, 0, - 0, 0, 88, 52, 0, 61, 62, 64, 50, 0, - 57, 278, 65, 60, 0, 59, 0, 0, 88, 88, - 0, 88, 88, 88, 88, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, - 28, 61, 29, 30, 31, 0, 52, 0, 32, 62, - 64, 50, 0, 57, 286, 65, 60, 0, 59, 38, - 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, - 44, 45, 46, 47, 48, 49, 53, 63, 51, 0, + 44, 45, 46, 47, 48, 49, 0, 63, 51, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 55, - 56, 0, 0, 0, 22, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 61, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 56, 0, 0, 0, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 61, 52, 0, 32, 62, 64, + 50, 0, 57, 0, 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, - 45, 46, 47, 48, 49, 0, 0, 51, 0, 53, - 167, 0, 0, 0, 115, 0, 54, 115, 55, 56, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 115, 115, 32, 0, 0, 115, 0, 0, 0, - 0, 0, 149, 0, 38, 0, 39, 40, 41, 42, - 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 51, 115, 0, 115, 0, 0, 0, - 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 0, 52, 0, 32, - 62, 64, 50, 0, 57, 0, 65, 60, 0, 59, - 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, - 0, 44, 45, 46, 47, 48, 49, 0, 63, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 55, 56, 0, 0, 0, 0, 142, 0, 0, 142, + 45, 46, 47, 48, 49, 0, 63, 51, 0, 53, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 0, 89, 89, 89, 89, 0, 0, 0, 89, 0, + 89, 52, 0, 61, 62, 64, 50, 0, 57, 278, + 65, 60, 0, 59, 0, 0, 89, 89, 0, 89, + 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 0, 0, 0, 0, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, + 90, 0, 0, 0, 90, 0, 90, 52, 0, 61, + 62, 64, 50, 0, 57, 280, 65, 60, 0, 59, + 0, 0, 90, 90, 0, 90, 90, 90, 90, 90, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, + 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 61, 29, 30, 31, 0, - 0, 0, 32, 142, 142, 0, 0, 0, 142, 0, - 0, 0, 0, 38, 0, 39, 40, 41, 42, 43, + 52, 0, 32, 62, 64, 50, 0, 57, 288, 65, + 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, 49, - 53, 0, 51, 158, 0, 0, 158, 0, 142, 0, - 0, 54, 0, 55, 56, 0, 0, 0, 0, 0, - 158, 158, 0, 0, 0, 158, 151, 152, 153, 154, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, - 0, 158, 159, 160, 161, 162, 0, 0, 163, 0, - 0, 164, 165, 166, 0, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 115, 115, 115, 0, - 159, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 115, 115, 115, 115, 0, 158, 0, 159, 159, 0, - 115, 115, 159, 115, 115, 115, 115, 115, 115, 115, - 0, 0, 115, 0, 0, 115, 115, 115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 0, 159, 0, 144, 0, 0, 0, 0, 0, + 53, 63, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 0, 55, 56, 0, 0, 0, 22, 24, + 25, 26, 27, 28, 0, 29, 30, 31, 61, 0, + 0, 32, 95, 0, 0, 95, 0, 0, 0, 0, + 0, 0, 38, 0, 39, 40, 41, 42, 43, 95, + 95, 0, 0, 44, 45, 46, 47, 48, 49, 0, + 0, 51, 0, 53, 0, 0, 0, 0, 0, 0, + 54, 0, 55, 56, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 95, 0, 0, 32, 71, 0, + 0, 71, 0, 0, 0, 0, 0, 0, 38, 0, + 39, 40, 41, 42, 43, 71, 71, 0, 0, 44, + 45, 46, 47, 48, 49, 0, 0, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 0, 144, 144, 32, 0, 0, 144, 0, 0, 0, - 0, 0, 159, 0, 38, 0, 39, 40, 41, 42, + 71, 52, 0, 32, 62, 64, 50, 0, 57, 0, + 65, 60, 0, 59, 38, 0, 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, 46, 47, 48, - 49, 0, 0, 51, 144, 0, 144, 0, 0, 0, - 94, 0, 54, 94, 55, 56, 0, 142, 142, 142, - 142, 0, 0, 0, 0, 0, 142, 94, 94, 0, - 0, 0, 142, 142, 142, 142, 144, 0, 0, 0, - 0, 0, 142, 142, 0, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 142, 0, 0, 142, 142, 142, - 0, 0, 94, 0, 158, 158, 158, 158, 0, 107, - 0, 0, 107, 158, 0, 0, 0, 0, 0, 158, - 158, 158, 158, 0, 0, 0, 107, 107, 0, 158, - 158, 107, 158, 158, 158, 158, 158, 158, 158, 90, - 90, 158, 0, 0, 158, 158, 158, 0, 0, 0, - 0, 103, 0, 0, 0, 0, 0, 111, 90, 119, - 0, 107, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 159, 159, 159, 159, 0, 90, 90, 90, 90, - 159, 0, 0, 0, 0, 0, 159, 159, 159, 159, - 0, 107, 68, 0, 0, 68, 159, 159, 0, 159, - 159, 159, 159, 159, 159, 159, 0, 0, 159, 68, - 68, 159, 159, 159, 68, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 0, 144, 144, 144, 144, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, - 144, 144, 144, 144, 68, 0, 71, 0, 0, 0, - 144, 144, 0, 144, 144, 144, 144, 144, 144, 144, - 0, 0, 144, 71, 71, 144, 144, 144, 71, 0, - 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 235, 94, 94, 94, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 106, 0, 71, 106, 71, 0, - 0, 0, 0, 0, 264, 0, 94, 94, 0, 94, - 0, 106, 106, 0, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 107, 107, 107, 0, 145, 106, 0, 145, 107, - 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, - 0, 0, 145, 145, 0, 107, 107, 145, 107, 107, - 107, 107, 107, 107, 107, 0, 106, 107, 0, 0, - 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, - 158, 0, 0, 158, 0, 0, 0, 145, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 158, 0, - 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 68, 68, 68, 68, 0, 0, 0, - 0, 0, 68, 0, 0, 0, 0, 0, 68, 68, - 68, 68, 158, 0, 113, 0, 0, 113, 68, 68, - 0, 68, 68, 68, 68, 68, 68, 68, 0, 0, - 68, 113, 113, 68, 68, 68, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 71, 71, - 71, 0, 0, 0, 0, 0, 71, 0, 0, 0, - 0, 0, 71, 71, 71, 71, 113, 0, 0, 0, - 0, 0, 71, 71, 0, 71, 71, 71, 71, 71, - 71, 71, 0, 0, 71, 0, 0, 71, 71, 71, - 0, 0, 0, 0, 0, 106, 106, 106, 106, 0, - 120, 0, 0, 120, 106, 0, 0, 0, 0, 0, - 106, 106, 106, 106, 0, 0, 0, 120, 120, 0, - 106, 106, 120, 106, 106, 106, 106, 106, 106, 106, - 0, 0, 106, 0, 0, 106, 106, 106, 0, 0, - 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, - 0, 103, 120, 0, 103, 145, 0, 0, 0, 0, - 0, 145, 145, 145, 145, 0, 0, 0, 103, 103, - 0, 145, 145, 103, 145, 145, 145, 145, 145, 145, - 145, 0, 0, 145, 0, 0, 145, 145, 145, 0, - 0, 158, 158, 158, 158, 0, 0, 0, 0, 0, - 158, 0, 0, 103, 0, 0, 158, 158, 158, 158, - 0, 0, 104, 0, 0, 104, 158, 158, 0, 158, - 158, 158, 158, 158, 158, 158, 0, 0, 158, 104, - 104, 158, 158, 158, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 113, 113, 113, 113, 0, - 98, 0, 0, 98, 113, 0, 0, 0, 0, 0, - 113, 113, 113, 113, 104, 0, 0, 98, 98, 0, - 113, 113, 98, 113, 113, 113, 113, 113, 113, 113, - 0, 0, 113, 0, 0, 113, 113, 113, 0, 99, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 98, 89, 0, 0, 99, 99, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 89, 89, 0, - 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 120, 120, 120, 120, 0, 100, 0, 0, 100, - 120, 99, 0, 0, 0, 0, 120, 120, 120, 120, - 0, 0, 89, 100, 100, 0, 120, 120, 100, 120, - 120, 120, 120, 120, 120, 120, 0, 0, 120, 0, - 0, 120, 120, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 103, 103, 103, 0, 96, 100, 0, - 96, 103, 0, 0, 0, 0, 0, 103, 103, 103, - 103, 0, 0, 0, 96, 96, 0, 103, 103, 96, - 103, 103, 103, 103, 103, 103, 103, 0, 0, 103, + 49, 0, 63, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 55, 56, 0, 0, 0, 0, + 131, 0, 0, 131, 24, 25, 26, 27, 28, 61, + 29, 30, 31, 0, 0, 0, 32, 131, 131, 0, + 0, 0, 131, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 42, 43, 0, 0, 0, 0, 44, 45, + 46, 47, 48, 49, 53, 157, 51, 0, 157, 0, + 131, 0, 131, 0, 0, 54, 0, 55, 56, 0, + 0, 0, 157, 157, 0, 0, 0, 157, 0, 0, + 0, 0, 0, 95, 95, 95, 95, 0, 0, 0, + 95, 0, 131, 0, 0, 0, 0, 0, 143, 0, + 0, 143, 0, 0, 0, 157, 0, 157, 95, 95, + 0, 95, 0, 0, 0, 143, 143, 0, 0, 0, + 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 157, 0, 71, + 71, 71, 71, 0, 116, 0, 71, 116, 0, 0, + 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 116, 0, 71, 71, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 97, 0, 0, 96, - 0, 0, 0, 104, 104, 104, 104, 0, 0, 0, - 97, 97, 104, 0, 0, 97, 0, 0, 104, 104, - 104, 104, 0, 0, 0, 0, 0, 0, 104, 104, - 0, 104, 104, 104, 104, 104, 104, 104, 0, 0, - 104, 98, 98, 98, 98, 97, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 98, 98, 98, 98, - 0, 0, 0, 0, 0, 0, 98, 98, 0, 98, - 98, 98, 98, 98, 98, 98, 0, 0, 0, 0, - 99, 99, 99, 99, 0, 95, 0, 0, 95, 99, - 0, 89, 89, 89, 89, 99, 99, 99, 99, 0, - 89, 0, 95, 95, 0, 99, 99, 95, 99, 99, - 99, 99, 99, 99, 99, 0, 89, 89, 0, 89, - 89, 89, 89, 89, 0, 0, 0, 100, 100, 100, - 100, 0, 83, 0, 0, 83, 100, 95, 0, 0, - 0, 0, 100, 100, 100, 100, 0, 0, 0, 83, - 83, 0, 100, 100, 83, 100, 100, 100, 100, 100, - 100, 100, 0, 0, 0, 0, 0, 0, 84, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 96, 96, - 96, 96, 0, 0, 83, 84, 84, 96, 0, 0, - 84, 0, 0, 96, 96, 96, 96, 0, 0, 0, - 0, 0, 0, 96, 96, 0, 96, 96, 96, 96, - 96, 96, 96, 85, 0, 0, 85, 0, 0, 0, - 84, 0, 0, 0, 97, 97, 97, 97, 0, 0, - 85, 85, 0, 97, 0, 85, 0, 0, 0, 97, - 97, 97, 97, 0, 0, 0, 0, 0, 0, 97, - 97, 0, 97, 97, 97, 97, 97, 97, 97, 86, - 0, 0, 86, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, + 143, 0, 0, 0, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 116, 0, 116, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 39, 40, 41, 42, 43, 0, 0, 0, 0, 44, + 45, 46, 47, 48, 49, 0, 0, 51, 0, 168, + 0, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 0, 131, 131, 131, 131, 0, 0, 0, 131, 0, + 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, + 0, 150, 0, 0, 0, 0, 131, 131, 0, 131, + 131, 131, 131, 131, 131, 131, 0, 0, 131, 0, + 0, 131, 131, 131, 0, 0, 157, 157, 157, 157, + 0, 159, 0, 157, 159, 157, 0, 0, 0, 0, + 0, 157, 157, 157, 157, 0, 0, 0, 159, 159, + 0, 157, 157, 159, 157, 157, 157, 157, 157, 157, + 157, 0, 0, 157, 0, 0, 157, 157, 157, 143, + 143, 143, 143, 0, 0, 0, 143, 0, 143, 0, + 0, 0, 0, 159, 143, 143, 143, 143, 0, 0, + 0, 0, 0, 0, 143, 143, 0, 143, 143, 143, + 143, 143, 143, 143, 0, 0, 143, 0, 0, 143, + 143, 143, 0, 159, 0, 116, 116, 116, 116, 168, + 160, 0, 116, 0, 116, 0, 0, 0, 0, 0, + 116, 116, 116, 116, 0, 0, 0, 160, 160, 0, + 116, 116, 160, 116, 116, 116, 116, 116, 116, 116, + 0, 150, 116, 0, 0, 116, 116, 116, 0, 0, + 0, 0, 0, 145, 0, 152, 153, 154, 155, 0, + 160, 0, 160, 0, 0, 0, 0, 0, 0, 0, + 145, 145, 161, 162, 163, 145, 0, 164, 0, 0, + 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 160, 0, 0, 0, 0, 108, 0, 0, + 108, 0, 0, 145, 0, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 108, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 148, 0, 0, 148, 0, 0, - 0, 86, 0, 0, 0, 0, 95, 95, 95, 95, - 0, 148, 148, 0, 0, 95, 148, 0, 0, 0, - 0, 95, 95, 95, 95, 0, 0, 0, 0, 0, - 0, 95, 95, 0, 95, 95, 95, 95, 95, 95, - 95, 147, 0, 0, 147, 0, 148, 0, 0, 0, - 0, 0, 0, 83, 83, 83, 83, 0, 147, 147, - 0, 0, 83, 147, 0, 0, 0, 0, 83, 83, - 83, 83, 0, 0, 0, 0, 0, 134, 83, 83, - 134, 83, 83, 83, 83, 83, 83, 83, 0, 84, - 84, 84, 84, 147, 134, 134, 0, 0, 84, 134, - 0, 0, 0, 0, 84, 84, 84, 84, 0, 0, - 0, 0, 0, 0, 84, 84, 0, 84, 84, 84, - 84, 84, 84, 105, 0, 0, 105, 0, 0, 134, - 0, 0, 0, 0, 85, 85, 85, 85, 0, 0, - 105, 105, 0, 85, 0, 105, 0, 0, 0, 85, - 85, 0, 85, 0, 0, 0, 0, 0, 0, 85, - 85, 0, 85, 85, 85, 85, 85, 85, 90, 0, - 0, 90, 0, 0, 0, 105, 0, 0, 0, 0, - 86, 86, 86, 86, 0, 90, 90, 0, 0, 86, - 90, 0, 167, 0, 0, 86, 86, 0, 0, 0, - 92, 0, 0, 92, 0, 86, 86, 0, 86, 86, - 86, 86, 86, 86, 0, 0, 0, 92, 92, 0, - 90, 0, 92, 0, 149, 148, 148, 148, 148, 0, - 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, - 148, 148, 91, 0, 0, 91, 0, 0, 0, 0, - 148, 148, 92, 148, 148, 148, 148, 148, 0, 91, - 91, 0, 143, 0, 91, 143, 0, 0, 0, 0, - 0, 0, 147, 147, 147, 147, 0, 0, 0, 143, - 143, 147, 0, 0, 0, 284, 0, 147, 147, 82, - 156, 0, 82, 0, 91, 0, 0, 147, 147, 0, - 147, 147, 147, 147, 147, 0, 82, 82, 134, 134, - 134, 134, 0, 0, 143, 0, 0, 134, 167, 0, - 0, 0, 0, 134, 134, 69, 0, 0, 69, 0, - 0, 0, 0, 134, 134, 0, 134, 134, 134, 134, - 134, 82, 69, 69, 0, 0, 0, 0, 0, 0, - 149, 0, 0, 0, 105, 105, 105, 105, 0, 0, - 0, 0, 0, 105, 0, 0, 0, 0, 0, 105, - 105, 0, 0, 0, 0, 0, 0, 69, 0, 105, - 105, 156, 105, 105, 105, 105, 105, 0, 151, 152, - 153, 154, 0, 0, 0, 0, 0, 0, 0, 90, - 90, 90, 90, 0, 159, 160, 161, 162, 90, 167, - 163, 0, 0, 164, 165, 166, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 90, 0, 90, 90, 90, - 90, 92, 92, 92, 92, 0, 0, 0, 0, 0, - 92, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 92, 0, 92, - 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 159, 159, 159, 159, 0, 0, 0, 159, + 0, 159, 0, 0, 0, 0, 0, 159, 159, 159, + 159, 0, 0, 69, 0, 0, 69, 159, 159, 108, + 159, 159, 159, 159, 159, 159, 159, 0, 0, 159, + 69, 69, 159, 159, 159, 69, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 153, 154, 155, 0, + 0, 0, 0, 0, 0, 0, 107, 0, 0, 107, + 159, 160, 161, 162, 163, 69, 0, 164, 0, 0, + 165, 166, 167, 107, 107, 0, 0, 0, 107, 0, + 0, 160, 160, 160, 160, 0, 0, 0, 160, 0, + 160, 0, 0, 0, 0, 69, 160, 160, 160, 160, + 0, 0, 0, 0, 0, 0, 160, 160, 107, 160, + 160, 160, 160, 160, 160, 160, 0, 0, 160, 0, + 0, 160, 160, 160, 145, 145, 145, 145, 0, 72, + 0, 145, 0, 145, 0, 0, 0, 0, 107, 145, + 145, 145, 145, 0, 0, 0, 72, 72, 0, 145, + 145, 72, 145, 145, 145, 145, 145, 145, 145, 0, + 0, 145, 0, 0, 145, 145, 145, 0, 108, 108, + 108, 108, 0, 146, 0, 108, 146, 108, 0, 72, + 0, 72, 0, 108, 108, 108, 108, 0, 0, 0, + 146, 146, 0, 108, 108, 146, 108, 108, 108, 108, + 108, 108, 108, 0, 0, 108, 0, 0, 108, 108, + 108, 72, 0, 0, 0, 0, 159, 90, 90, 159, + 0, 0, 0, 0, 0, 146, 0, 0, 0, 103, + 0, 0, 0, 159, 159, 111, 90, 119, 159, 0, + 0, 0, 90, 0, 69, 69, 69, 69, 0, 0, + 0, 69, 0, 69, 90, 90, 90, 90, 0, 69, + 69, 69, 69, 0, 0, 0, 0, 0, 159, 69, + 69, 0, 69, 69, 69, 69, 69, 69, 69, 0, + 0, 69, 0, 0, 69, 69, 69, 107, 107, 107, + 107, 0, 114, 0, 107, 114, 107, 0, 0, 111, + 0, 0, 107, 107, 107, 107, 0, 0, 0, 114, + 114, 0, 107, 107, 114, 107, 107, 107, 107, 107, + 107, 107, 0, 0, 107, 0, 0, 107, 107, 107, + 0, 0, 0, 0, 0, 121, 0, 0, 121, 0, + 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, + 0, 0, 121, 121, 0, 0, 0, 121, 0, 237, + 72, 72, 72, 72, 0, 0, 0, 72, 0, 72, + 0, 0, 0, 0, 0, 72, 72, 72, 72, 0, + 0, 0, 0, 266, 0, 72, 72, 121, 72, 72, + 72, 72, 72, 72, 72, 0, 0, 72, 0, 0, + 72, 72, 72, 0, 146, 146, 146, 146, 0, 105, + 0, 146, 105, 146, 0, 0, 0, 0, 0, 146, + 146, 146, 146, 0, 0, 0, 105, 105, 0, 146, + 146, 105, 146, 146, 146, 146, 146, 146, 146, 0, + 0, 146, 0, 0, 146, 146, 146, 159, 159, 159, + 159, 0, 99, 0, 159, 99, 159, 0, 0, 0, + 0, 105, 159, 159, 159, 159, 0, 0, 0, 99, + 99, 0, 159, 159, 99, 159, 159, 159, 159, 159, + 159, 159, 0, 0, 159, 0, 0, 159, 159, 159, + 100, 0, 0, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 0, 100, 100, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114, 114, 114, 114, 0, 101, 0, + 114, 101, 114, 0, 0, 0, 0, 0, 114, 114, + 114, 114, 100, 0, 0, 101, 101, 0, 114, 114, + 101, 114, 114, 114, 114, 114, 114, 114, 0, 0, + 114, 0, 0, 114, 114, 114, 121, 121, 121, 121, + 0, 97, 0, 121, 97, 121, 0, 0, 0, 0, + 101, 121, 121, 121, 121, 0, 0, 0, 97, 97, + 0, 121, 121, 97, 121, 121, 121, 121, 121, 121, + 121, 0, 0, 121, 0, 0, 121, 121, 121, 98, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 0, 0, 98, 98, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 0, 96, 0, 105, 96, 105, + 0, 0, 0, 0, 0, 105, 105, 105, 105, 0, + 0, 98, 96, 96, 0, 105, 105, 96, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 105, 0, 0, + 0, 0, 0, 99, 99, 99, 99, 0, 84, 0, + 99, 84, 99, 0, 0, 0, 0, 96, 99, 99, + 99, 99, 0, 0, 0, 84, 84, 0, 99, 99, + 84, 99, 99, 99, 99, 99, 99, 99, 0, 0, + 0, 100, 100, 100, 100, 0, 85, 0, 100, 85, + 100, 0, 0, 0, 0, 0, 100, 100, 100, 100, + 84, 0, 0, 85, 85, 0, 100, 100, 85, 100, + 100, 100, 100, 100, 100, 100, 0, 0, 0, 101, + 101, 101, 101, 0, 86, 0, 101, 86, 101, 0, + 0, 0, 0, 0, 101, 101, 101, 101, 85, 0, + 0, 86, 86, 0, 101, 101, 86, 101, 101, 101, + 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 97, 97, 97, 0, 87, 0, 97, + 87, 97, 0, 0, 0, 0, 86, 97, 97, 97, + 97, 0, 0, 0, 87, 87, 0, 97, 97, 87, + 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, + 98, 98, 98, 98, 0, 148, 0, 98, 148, 98, + 0, 0, 0, 0, 0, 98, 98, 98, 98, 87, + 0, 0, 148, 148, 0, 98, 98, 148, 98, 98, + 98, 98, 98, 98, 98, 0, 96, 96, 96, 96, + 0, 135, 0, 96, 135, 96, 0, 0, 0, 0, + 0, 96, 96, 96, 96, 0, 0, 148, 135, 135, + 0, 96, 96, 135, 96, 96, 96, 96, 96, 96, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 84, + 84, 84, 84, 0, 106, 0, 84, 106, 84, 0, + 0, 0, 0, 135, 84, 84, 84, 84, 0, 0, + 0, 106, 106, 0, 84, 84, 106, 84, 84, 84, + 84, 84, 84, 84, 0, 0, 0, 85, 85, 85, + 85, 0, 91, 0, 85, 91, 85, 0, 0, 0, + 0, 0, 85, 85, 85, 85, 106, 0, 0, 91, + 91, 0, 85, 85, 91, 85, 85, 85, 85, 85, + 85, 0, 0, 0, 0, 86, 86, 86, 86, 0, + 93, 0, 86, 93, 86, 0, 0, 0, 0, 0, + 86, 86, 0, 86, 91, 0, 0, 93, 93, 0, + 86, 86, 93, 86, 86, 86, 86, 86, 86, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 87, 87, + 87, 87, 0, 94, 0, 87, 94, 87, 0, 0, + 0, 0, 93, 87, 87, 0, 0, 0, 0, 0, + 94, 94, 150, 87, 87, 94, 87, 87, 87, 87, + 87, 87, 0, 0, 0, 0, 148, 148, 148, 148, + 0, 92, 0, 148, 92, 148, 0, 0, 0, 0, + 0, 148, 148, 144, 0, 94, 144, 0, 92, 92, + 0, 148, 148, 92, 148, 148, 148, 148, 148, 0, + 144, 144, 135, 135, 135, 135, 0, 0, 0, 135, + 0, 135, 0, 0, 0, 0, 0, 135, 135, 0, + 0, 0, 0, 92, 0, 0, 83, 135, 135, 83, + 135, 135, 135, 135, 135, 144, 0, 0, 0, 70, + 0, 0, 70, 83, 83, 106, 106, 106, 106, 0, + 0, 0, 106, 0, 106, 0, 70, 70, 0, 0, + 106, 106, 0, 0, 0, 0, 157, 0, 0, 0, + 106, 106, 0, 106, 106, 106, 106, 106, 83, 0, 0, 0, 0, 91, 91, 91, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 143, 143, 143, 0, 91, 91, - 0, 91, 0, 0, 0, 0, 0, 0, 150, 0, - 0, 0, 0, 0, 151, 152, 153, 154, 143, 143, - 82, 82, 82, 82, 0, 0, 0, 155, 157, 158, - 159, 160, 161, 162, 0, 0, 163, 0, 0, 164, - 165, 166, 0, 0, 0, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 94, 0, 69, 69, 69, 69, - 0, 0, 104, 0, 0, 0, 109, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 125, 126, 127, 128, - 129, 69, 69, 132, 133, 0, 0, 0, 0, 0, - 140, 0, 0, 0, 0, 0, 0, 0, 0, 150, - 0, 0, 0, 0, 0, 151, 152, 153, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 0, 157, - 158, 159, 160, 161, 162, 0, 0, 163, 0, 0, - 164, 165, 166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, + 91, 70, 91, 0, 168, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, + 0, 91, 91, 91, 91, 0, 152, 153, 154, 155, + 0, 93, 93, 93, 93, 0, 150, 0, 93, 0, + 93, 0, 160, 161, 162, 163, 0, 0, 164, 0, + 0, 165, 166, 167, 0, 0, 93, 93, 0, 93, + 93, 93, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 94, 94, 94, 0, 0, + 0, 94, 0, 94, 0, 0, 0, 0, 0, 0, + 168, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 94, 0, 94, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 92, 92, 92, 92, 0, 0, 0, 92, + 0, 0, 150, 0, 144, 144, 144, 144, 0, 0, + 0, 144, 0, 0, 0, 0, 94, 92, 92, 0, + 92, 0, 0, 0, 104, 0, 0, 0, 109, 144, + 144, 118, 0, 0, 0, 0, 0, 0, 125, 126, + 127, 128, 129, 0, 0, 132, 133, 83, 83, 83, + 83, 0, 140, 0, 83, 0, 0, 0, 0, 0, + 70, 70, 70, 70, 0, 0, 0, 70, 0, 0, + 0, 0, 83, 83, 151, 0, 0, 0, 0, 184, + 152, 153, 154, 155, 0, 70, 70, 0, 0, 0, + 0, 0, 0, 156, 158, 159, 160, 161, 162, 163, + 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 0, 247, 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 158, 159, 160, 161, 162, 163, 0, 0, 164, 0, + 0, 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, + 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 315, + 0, 0, 317, }; dEXT short yycheck[] = { 13, - 36, 86, 41, 36, 40, 44, 182, 59, 59, 41, - 93, 40, 59, 91, 91, 59, 257, 41, 257, 58, - 59, 41, 191, 41, 63, 59, 44, 91, 91, 59, - 329, 40, 46, 41, 93, 40, 93, 41, 257, 41, - 58, 59, 41, 57, 122, 63, 123, 61, 97, 98, - 99, 100, 101, 102, 93, 59, 41, 59, 41, 123, - 123, 360, 91, 44, 297, 298, 41, 41, 276, 277, - 40, 40, 278, 91, 40, 93, 326, 327, 0, 123, - 59, 331, 59, 36, 59, 59, 59, 40, 59, 123, - 123, 41, 106, 107, 123, 40, 40, 347, 123, 41, - 40, 351, 271, 59, 41, 123, 40, 123, 44, 59, - 260, 33, 257, 289, 36, 37, 38, 59, 40, 40, - 42, 43, 59, 45, 40, 93, 41, 40, 125, 143, - 144, 145, 146, 147, 148, 149, 305, 59, 91, 91, - 257, 36, 64, 192, 41, 266, 267, 268, 41, 270, - 271, 44, 91, 167, 168, 169, 170, 171, 172, 173, - 125, 41, 93, 298, 44, 58, 59, 40, 182, 91, - 123, 249, 186, 187, 41, 189, 254, 191, 58, 59, - 41, 350, 41, 63, 198, 0, 200, 201, 41, 41, - 41, 205, 40, 93, 41, 93, 59, 125, 59, 125, - 93, 123, 125, 125, 126, 125, 257, 41, 125, 59, - 41, 91, 123, 93, 297, 298, 41, 231, 33, 233, - 234, 36, 37, 38, 257, 40, 59, 42, 43, 262, - 45, 40, 93, 272, 273, 274, 275, 314, 297, 298, - 297, 298, 281, 123, 59, 297, 298, 41, 41, 64, - 297, 298, 337, 123, 272, 273, 274, 275, 297, 298, - 296, 300, 301, 281, 0, 297, 298, 123, 282, 287, - 288, 289, 290, 297, 298, 289, 91, 297, 298, 297, - 298, 59, 300, 301, 302, 303, 304, 305, 306, 297, - 298, 309, 41, 307, 312, 313, 314, 33, 297, 298, - 36, 37, 38, 41, 40, 258, 42, 43, 123, 45, - 125, 126, 297, 298, 297, 298, 297, 298, 297, 298, - 297, 298, 41, 59, 297, 298, 297, 298, 64, 297, - 298, 59, 346, 41, 256, 257, 258, 259, 260, 261, - 41, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 59, 91, 8, 279, 280, 32, - 282, 283, 284, 285, 286, 125, 297, 298, 63, 291, - 292, 293, 294, 295, 296, 13, 144, 299, 307, 272, - 273, 274, 275, 346, 189, 96, 308, 123, 310, 311, - 126, -1, 272, 273, 274, 275, 91, 297, 298, 297, - 298, 281, -1, -1, 297, 298, 91, 287, 288, 289, - 290, 272, 273, 274, 275, -1, -1, 297, 298, -1, - 300, 301, 302, 303, 304, 305, 306, -1, 123, 309, - 91, -1, 312, 313, 314, -1, 297, 298, 123, -1, - -1, 256, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, -1, 123, -1, 279, 280, -1, 282, 283, 284, - 285, 286, 272, 273, 274, 275, 291, 292, 293, 294, - 295, 296, 41, -1, 299, 44, 91, -1, -1, -1, - -1, -1, -1, 308, -1, 310, 311, 297, 298, 58, - 59, -1, -1, -1, 63, -1, 266, 267, 268, -1, - 270, 271, -1, -1, -1, -1, -1, -1, 123, -1, - 256, 257, 258, 259, 260, 261, 125, 263, 264, 265, - -1, -1, 91, 269, 93, -1, 272, 273, 274, 275, + 41, 36, 86, 41, 91, 40, 44, 59, 91, 59, + 59, 93, 36, 183, 59, 59, 41, 91, 41, 331, + 58, 59, 91, 40, 257, 63, 41, 297, 298, 257, + 41, 59, 46, 40, 43, 41, 123, 276, 277, 257, + 123, 41, 51, 57, 41, 91, 41, 61, 59, 123, + 362, 44, 40, 59, 123, 93, 328, 329, 0, 40, + 192, 333, 41, 40, 40, 36, 40, 40, 40, 40, + 59, 278, 59, 123, 91, 123, 122, 349, 123, 40, + 59, 353, 91, 123, 97, 98, 99, 100, 101, 102, + 59, 33, 106, 107, 36, 37, 38, 59, 40, 123, + 42, 43, 260, 45, 44, 114, 123, 59, 41, 41, + 41, 257, 40, 122, 40, 125, 40, 59, 41, 41, + 91, 291, 64, 91, 41, 41, 59, 59, 59, 143, + 144, 145, 146, 147, 148, 149, 150, 59, 257, 36, + 91, 273, 59, 93, 91, 41, 298, 125, 44, 91, + 40, 40, 123, 0, 168, 169, 170, 171, 172, 173, + 174, 41, 58, 59, 41, 41, 41, 63, 93, 183, + 41, 41, 123, 187, 188, 307, 190, 91, 192, 125, + 193, 123, 93, 125, 126, 199, 33, 201, 202, 36, + 37, 38, 206, 40, 59, 42, 43, 93, 45, 266, + 267, 268, 59, 270, 271, 251, 289, 290, 257, 123, + 256, 41, 59, 125, 123, 297, 298, 64, 125, 233, + 352, 235, 236, 306, 125, 93, 309, 314, 41, 312, + 313, 314, 125, 257, 272, 273, 274, 275, 262, 41, + 41, 279, 251, 281, 91, 297, 298, 256, 0, 287, + 288, 289, 290, 297, 298, 339, 297, 298, 59, 297, + 298, 296, 300, 301, 302, 303, 304, 305, 306, 59, + 284, 309, 297, 298, 297, 298, 123, 291, 125, 126, + 40, 33, 297, 298, 36, 37, 38, 258, 40, 93, + 42, 43, 93, 45, 93, 309, 41, 297, 298, 41, + 297, 298, 297, 298, 297, 298, 123, 59, 297, 298, + 297, 298, 64, 125, 256, 257, 258, 259, 260, 261, + 123, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 348, 297, 298, 279, 280, 91, + 282, 283, 284, 285, 286, 297, 298, 297, 298, 291, + 292, 293, 294, 295, 296, 306, 91, 299, 309, 41, + 41, 312, 313, 314, 59, 41, 308, 59, 310, 311, + 41, 123, 297, 298, 126, 59, 272, 273, 274, 275, + 41, 8, 32, 279, 13, 281, 297, 298, 123, 144, + 348, 287, 288, 41, 309, 309, 44, 190, 312, 313, + 314, 297, 298, 96, 300, 301, 302, 303, 304, 256, + 257, 258, 259, 260, 261, 63, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 297, + 298, -1, 279, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, 91, 291, 292, 293, 294, 295, 296, + 125, -1, 299, 91, 266, 267, 268, -1, 270, 271, + -1, 308, -1, 310, 311, -1, 41, -1, -1, 44, + -1, 272, 273, 274, 275, 123, -1, -1, 279, -1, + -1, -1, -1, 58, 59, 123, -1, -1, 63, -1, + -1, -1, -1, 297, 298, -1, 297, 298, 297, 298, + -1, -1, -1, -1, 256, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, -1, 91, 269, 93, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, 123, -1, + -1, -1, 287, 288, 289, 290, 308, 33, 310, 311, + 36, 37, 38, -1, 40, 41, 42, 43, 44, 45, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + -1, -1, 58, 59, -1, -1, -1, 63, 64, -1, + -1, 266, 267, 268, -1, 270, 271, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 279, -1, 91, -1, 93, 33, -1, + -1, 36, 37, 38, -1, 40, 41, 42, 43, 44, + 45, 297, 298, 281, -1, -1, -1, -1, -1, 287, + 288, 289, 290, 58, 59, -1, -1, 123, 63, 64, + 126, 289, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, -1, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 33, 93, -1, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, 59, 279, -1, 281, -1, 64, -1, + -1, 126, 287, 288, 289, 290, 304, 305, 306, -1, + 308, -1, 297, 298, -1, 300, 301, 302, 303, 304, + 305, 306, -1, -1, 309, 91, -1, 312, 313, 314, + -1, -1, 41, -1, -1, 44, -1, 335, -1, -1, + -1, -1, -1, -1, 342, -1, -1, -1, 346, -1, + 59, -1, -1, 91, -1, -1, -1, 123, -1, -1, + 126, 359, 360, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, 93, 123, 272, 273, 274, 275, + -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, -1, 308, 309, 310, 311, 312, 313, 314, -1, + -1, -1, 257, 258, 259, 260, 261, -1, 263, 264, + 265, -1, -1, -1, 269, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, + -1, -1, -1, 269, -1, 91, 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 123, -1, -1, -1, -1, -1, - 91, -1, 308, 33, 310, 311, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, -1, -1, 58, 59, - -1, -1, 123, 63, 64, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, 91, -1, 93, 33, -1, -1, 36, 37, 38, - -1, 40, 41, 42, 43, 44, 45, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, -1, -1, 58, - 59, -1, -1, 123, 63, 64, 126, 266, 267, 268, - -1, 270, 271, -1, -1, -1, -1, -1, -1, 302, - 303, 304, -1, 306, 289, 290, -1, -1, -1, -1, - -1, 13, -1, 33, 93, -1, 36, 37, 38, -1, - 40, 306, 42, 43, 309, 45, -1, 312, 313, 314, - 333, -1, -1, 272, 273, 274, 275, 340, -1, 59, - 42, 344, 281, 45, 64, -1, -1, 126, 287, 288, - 289, 290, -1, -1, 357, 358, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 91, -1, 312, 313, 314, -1, -1, 41, 81, - -1, 44, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, 95, -1, -1, 59, -1, -1, 91, - -1, -1, -1, 123, 305, 306, 126, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - 93, 123, 272, 273, 274, 275, -1, -1, -1, 141, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, - 310, 311, 312, 313, 314, -1, 178, -1, 257, 258, - 259, 260, 261, 185, 263, 264, 265, -1, -1, -1, - 269, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, - 309, 310, 311, 312, 313, 314, 256, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, - -1, 91, 272, 273, 274, 275, -1, -1, -1, 279, - 280, -1, 282, 283, 284, 285, 286, -1, -1, 91, - 43, 291, 292, 293, 294, 295, 296, 33, 51, 299, - 36, 37, 38, 123, 40, -1, 42, 43, 308, 45, - 310, 311, -1, -1, -1, 287, -1, 289, 290, -1, - -1, 123, -1, 59, -1, -1, -1, -1, 64, 272, - 273, 274, 275, 305, 306, -1, -1, 309, 91, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, 297, 91, 36, 37, 38, -1, - 40, 114, 42, 43, 26, 45, -1, -1, -1, 122, + 296, 33, -1, 299, 36, 37, 38, 123, 40, -1, + 42, 43, 308, 45, 310, 311, -1, -1, 13, 287, + -1, 289, 290, -1, -1, -1, -1, 59, -1, -1, + -1, -1, 64, 272, 273, 274, 275, 305, 306, -1, + 279, 309, -1, -1, 312, 313, 314, 42, -1, -1, + 45, -1, -1, -1, -1, -1, -1, 33, 297, 91, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 81, -1, 64, 43, + 44, 123, -1, -1, 126, -1, 50, -1, -1, -1, + 95, -1, -1, -1, -1, -1, -1, -1, 62, 63, + 64, 65, -1, 33, -1, 91, 36, 37, 38, -1, + 40, -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 43, 44, -1, 64, -1, -1, 123, 50, -1, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 62, 63, 64, 65, -1, -1, -1, -1, -1, 33, - -1, 91, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 64, -1, 141, 123, -1, -1, + 126, -1, -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 64, -1, -1, 123, -1, 107, 126, -1, -1, -1, + -1, 91, -1, 289, 290, -1, 33, -1, -1, 36, + 37, 38, -1, 40, 179, 42, 43, -1, 45, 305, + 306, 186, -1, 309, -1, -1, 312, 313, 314, -1, + -1, -1, -1, 123, -1, -1, 126, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 91, -1, 289, - 290, -1, 33, -1, -1, 36, 37, 38, -1, 40, - -1, 42, 43, -1, 45, 305, 306, 289, -1, 309, - -1, -1, 312, 313, 314, -1, 249, -1, -1, 123, - -1, 254, 126, 64, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - 256, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 91, -1, -1, 269, -1, -1, 272, 273, 274, 275, - -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, + -1, -1, -1, -1, 256, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, -1, -1, 269, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 123, 299, -1, 126, + -1, 91, -1, -1, -1, 41, 308, -1, 310, 311, + -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, -1, -1, 269, -1, -1, -1, 63, -1, -1, + -1, -1, -1, 123, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, 91, 123, 299, -1, 126, -1, -1, -1, -1, - -1, -1, 308, 41, 310, 311, 44, 257, 258, 259, - 260, 261, 262, 263, 264, 265, -1, -1, -1, 269, - -1, -1, -1, 123, -1, 63, -1, -1, -1, -1, + 296, -1, -1, 299, -1, 91, -1, -1, -1, -1, + -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, + 58, -1, -1, -1, -1, 63, -1, 123, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, -1, 299, - -1, -1, -1, 91, -1, -1, -1, 41, 308, -1, - 310, 311, -1, 257, 258, 259, 260, 261, -1, 263, - 264, 265, -1, -1, -1, 269, -1, -1, -1, 63, - -1, -1, -1, -1, -1, 123, 280, -1, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, -1, 299, -1, 91, -1, -1, - -1, -1, -1, -1, 308, -1, 310, 311, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, -1, 263, 264, 265, -1, -1, -1, 269, 123, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, 91, - 291, 292, 293, 294, 295, 296, 33, -1, 299, 36, - 37, 38, -1, 40, -1, 42, 43, 308, 45, 310, - 311, -1, -1, -1, -1, -1, -1, 287, 288, 289, - 290, 123, 59, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, 91, -1, -1, -1, -1, 308, -1, + 310, 311, -1, -1, -1, -1, 41, -1, -1, 44, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, + -1, -1, 269, 58, 59, 123, -1, -1, 63, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + 33, -1, 299, 36, 37, 38, -1, 40, 93, 42, + 43, 308, 45, 310, 311, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, 287, 288, 289, + 290, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301, 302, 303, 304, 305, 306, -1, -1, 309, - -1, -1, 312, 313, 314, -1, -1, -1, -1, -1, + -1, -1, 312, 313, 314, -1, 33, -1, 91, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, -1, + -1, -1, -1, -1, -1, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 64, -1, -1, + -1, -1, -1, 126, 300, 301, 302, 303, 304, 305, + 306, -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, 33, -1, 91, 36, 37, 38, -1, 40, - 41, 42, 43, -1, 45, -1, -1, -1, -1, -1, + -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, 64, -1, -1, -1, -1, -1, 126, -1, -1, 300, 301, 302, 303, 304, 305, 306, -1, - -1, 309, -1, -1, 312, 313, 314, -1, 33, -1, - 91, 36, 37, 38, -1, 40, -1, 42, 43, -1, - 45, -1, -1, -1, -1, -1, -1, 281, -1, -1, - -1, -1, -1, 287, 288, 289, 290, -1, -1, 64, - -1, -1, -1, -1, -1, 126, 300, 301, 302, 303, - 304, 305, 306, -1, -1, 309, -1, -1, 312, 313, - 314, -1, -1, -1, -1, -1, 91, 33, 93, -1, - 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - -1, 126, 304, 305, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, 41, -1, -1, 44, - 257, 258, 259, 260, 261, 91, 263, 264, 265, -1, + -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, + 91, 33, 93, -1, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, -1, -1, -1, + -1, -1, 64, 288, -1, 126, -1, -1, -1, -1, + -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, + 41, -1, -1, 44, 257, 258, 259, 260, 261, 91, + 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, 126, -1, 299, -1, -1, -1, + -1, -1, 93, -1, -1, 308, 41, 310, 311, 44, + 257, 258, 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - 126, -1, 299, -1, -1, -1, -1, -1, 93, -1, - -1, 308, 41, 310, 311, 44, 257, 258, 259, 260, - 261, -1, 263, 264, 265, -1, -1, -1, 269, 58, - 59, -1, -1, -1, 63, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, -1, -1, 299, -1, - -1, -1, -1, -1, 93, -1, -1, 308, -1, 310, - 311, -1, 257, 258, 259, 260, 261, -1, 263, 264, - 265, -1, 33, -1, 269, 36, 37, 38, -1, 40, - 41, 42, 43, -1, 45, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 295, 296, -1, 64, 299, -1, -1, -1, -1, -1, - -1, -1, -1, 308, -1, 310, 311, -1, -1, -1, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - 91, 33, -1, 269, 36, 37, 38, -1, 40, -1, - 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, 64, 299, -1, 126, -1, -1, -1, -1, - -1, -1, 308, -1, 310, 311, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, 33, -1, 91, - 36, 37, 38, 288, 40, 41, 42, 43, -1, 45, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, - -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, 281, 33, -1, 91, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, 91, 263, 264, 265, -1, 33, -1, 269, 36, + -1, -1, 299, -1, -1, -1, -1, -1, 93, -1, + -1, 308, -1, 310, 311, -1, 257, 258, 259, 260, + 261, -1, 263, 264, 265, -1, 33, -1, 269, 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 295, 296, 126, 64, 299, -1, + 291, 292, 293, 294, 295, 296, -1, 64, 299, -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, 310, - 311, -1, -1, -1, 256, 257, 258, 259, 260, 261, - -1, 263, 264, 265, 91, -1, -1, 269, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 311, -1, -1, -1, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, 33, -1, 269, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 295, 296, -1, -1, 299, -1, 126, - 91, -1, -1, -1, 41, -1, 308, 44, 310, 311, - -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, 58, 59, 269, -1, -1, 63, -1, -1, -1, - -1, -1, 123, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 91, -1, 93, -1, -1, -1, - -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, - 260, 261, -1, 263, 264, 265, -1, 33, -1, 269, - 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, - 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, -1, 64, 299, - -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, - 310, 311, -1, -1, -1, -1, 41, -1, -1, 44, + 292, 293, 294, 295, 296, -1, 64, 299, -1, 126, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, 33, -1, 91, 36, 37, 38, -1, 40, 41, + 42, 43, -1, 45, -1, -1, 297, 298, -1, 300, + 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, 64, -1, -1, -1, -1, -1, 126, -1, + -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, 279, -1, 281, 33, -1, 91, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, 64, -1, + -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 91, 263, 264, 265, -1, - -1, -1, 269, 58, 59, -1, -1, -1, 63, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + 33, -1, 269, 36, 37, 38, -1, 40, 41, 42, + 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, - 126, -1, 299, 41, -1, -1, 44, -1, 93, -1, - -1, 308, -1, 310, 311, -1, -1, -1, -1, -1, - 58, 59, -1, -1, -1, 63, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, 302, 303, 304, 305, 306, -1, -1, 309, -1, - -1, 312, 313, 314, -1, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, 123, -1, 58, 59, -1, - 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, 93, -1, 41, -1, -1, -1, -1, -1, + 126, 64, 299, -1, -1, -1, -1, -1, -1, -1, + -1, 308, -1, 310, 311, -1, -1, -1, 256, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 91, -1, + -1, 269, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, 285, 286, 58, + 59, -1, -1, 291, 292, 293, 294, 295, 296, -1, + -1, 299, -1, 126, -1, -1, -1, -1, -1, -1, + 308, -1, 310, 311, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 93, -1, -1, 269, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, 58, 59, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, -1, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, - -1, 58, 59, 269, -1, -1, 63, -1, -1, -1, - -1, -1, 123, -1, 280, -1, 282, 283, 284, 285, + 93, 33, -1, 269, 36, 37, 38, -1, 40, -1, + 42, 43, -1, 45, 280, -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, - 296, -1, -1, 299, 91, -1, 93, -1, -1, -1, - 41, -1, 308, 44, 310, 311, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, 58, 59, -1, - -1, -1, 287, 288, 289, 290, 123, -1, -1, -1, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, -1, 93, -1, 272, 273, 274, 275, -1, 41, - -1, -1, 44, 281, -1, -1, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, - 298, 63, 300, 301, 302, 303, 304, 305, 306, 25, - 26, 309, -1, -1, 312, 313, 314, -1, -1, -1, - -1, 37, -1, -1, -1, -1, -1, 43, 44, 45, - -1, 93, -1, -1, 50, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, 62, 63, 64, 65, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, 123, 41, -1, -1, 44, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, 58, - 59, 312, 313, 314, 63, -1, -1, -1, -1, -1, - -1, 107, -1, -1, -1, 272, 273, 274, 275, -1, - -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, 93, -1, 41, -1, -1, -1, - 297, 298, -1, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, 58, 59, 312, 313, 314, 63, -1, - -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, - 166, 272, 273, 274, 275, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 41, -1, 91, 44, 93, -1, - -1, -1, -1, -1, 190, -1, 297, 298, -1, 300, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, 93, -1, 44, 281, - -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, - 302, 303, 304, 305, 306, -1, 123, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - 41, -1, -1, 44, -1, -1, -1, 93, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, + 296, -1, 64, 299, -1, -1, -1, -1, -1, -1, + -1, -1, 308, -1, 310, 311, -1, -1, -1, -1, + 41, -1, -1, 44, 257, 258, 259, 260, 261, 91, + 263, 264, 265, -1, -1, -1, 269, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, 126, 41, 299, -1, 44, -1, + 91, -1, 93, -1, -1, 308, -1, 310, 311, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, 281, -1, -1, -1, -1, -1, 287, 288, - 289, 290, 93, -1, 41, -1, -1, 44, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 58, 59, 312, 313, 314, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, 273, 274, - 275, -1, -1, -1, -1, -1, 281, -1, -1, -1, - -1, -1, 287, 288, 289, 290, 93, -1, -1, -1, - -1, -1, 297, 298, -1, 300, 301, 302, 303, 304, - 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, - 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, - -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 41, 93, -1, 44, 281, -1, -1, -1, -1, + 279, -1, 123, -1, -1, -1, -1, -1, 41, -1, + -1, 44, -1, -1, -1, 91, -1, 93, 297, 298, + -1, 300, -1, -1, -1, 58, 59, -1, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, -1, -1, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, 297, 298, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 123, -1, -1, -1, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, 91, -1, 93, 269, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, -1, 299, -1, 91, + -1, -1, -1, -1, -1, -1, 308, -1, 310, 311, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + -1, 123, -1, -1, -1, -1, 297, 298, -1, 300, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, - 306, -1, -1, 309, -1, -1, 312, 313, 314, -1, - -1, 272, 273, 274, 275, -1, -1, -1, -1, -1, - 281, -1, -1, 93, -1, -1, 287, 288, 289, 290, - -1, -1, 41, -1, -1, 44, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, 58, - 59, 312, 313, 314, 63, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, - 41, -1, -1, 44, 281, -1, -1, -1, -1, -1, - 287, 288, 289, 290, 93, -1, -1, 58, 59, -1, + 306, -1, -1, 309, -1, -1, 312, 313, 314, 272, + 273, 274, 275, -1, -1, -1, 279, -1, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, + 303, 304, 305, 306, -1, -1, 309, -1, -1, 312, + 313, 314, -1, 123, -1, 272, 273, 274, 275, 91, + 41, -1, 279, -1, 281, -1, -1, -1, -1, -1, + 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, - -1, -1, 309, -1, -1, 312, 313, 314, -1, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - 41, -1, 93, 44, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, 58, 59, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, -1, 41, -1, -1, 44, - 281, 93, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, 93, 58, 59, -1, 297, 298, 63, 300, - 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, - -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, 41, 93, -1, - 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, - 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, - 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, + -1, 123, 309, -1, -1, 312, 313, 314, -1, -1, + -1, -1, -1, 41, -1, 287, 288, 289, 290, -1, + 91, -1, 93, -1, -1, -1, -1, -1, -1, -1, + 58, 59, 304, 305, 306, 63, -1, 309, -1, -1, + 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 123, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, 91, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, 93, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - 58, 59, 281, -1, -1, 63, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, 297, 298, - -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, - 309, 272, 273, 274, 275, 93, -1, -1, -1, -1, - 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, - -1, -1, -1, -1, -1, -1, 297, 298, -1, 300, - 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 41, -1, -1, 44, 281, - -1, 272, 273, 274, 275, 287, 288, 289, 290, -1, - 281, -1, 58, 59, -1, 297, 298, 63, 300, 301, - 302, 303, 304, 305, 306, -1, 297, 298, -1, 300, - 301, 302, 303, 304, -1, -1, -1, 272, 273, 274, - 275, -1, 41, -1, -1, 44, 281, 93, -1, -1, + -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, -1, 287, 288, 289, + 290, -1, -1, 41, -1, -1, 44, 297, 298, 123, + 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, + 58, 59, 312, 313, 314, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + 302, 303, 304, 305, 306, 93, -1, 309, -1, -1, + 312, 313, 314, 58, 59, -1, -1, -1, 63, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 279, -1, + 281, -1, -1, -1, -1, 123, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, 297, 298, 93, 300, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, 272, 273, 274, 275, -1, 41, + -1, 279, -1, 281, -1, -1, -1, -1, 123, 287, + 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, + 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, 91, + -1, 93, -1, 287, 288, 289, 290, -1, -1, -1, + 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, + 304, 305, 306, -1, -1, 309, -1, -1, 312, 313, + 314, 123, -1, -1, -1, -1, 41, 25, 26, 44, + -1, -1, -1, -1, -1, 93, -1, -1, -1, 37, + -1, -1, -1, 58, 59, 43, 44, 45, 63, -1, + -1, -1, 50, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, 62, 63, 64, 65, -1, 287, + 288, 289, 290, -1, -1, -1, -1, -1, 93, 297, + 298, -1, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, 107, -1, -1, 287, 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, - 305, 306, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, -1, -1, -1, -1, -1, -1, 272, 273, - 274, 275, -1, -1, 93, 58, 59, 281, -1, -1, - 63, -1, -1, 287, 288, 289, 290, -1, -1, -1, - -1, -1, -1, 297, 298, -1, 300, 301, 302, 303, - 304, 305, 306, 41, -1, -1, 44, -1, -1, -1, - 93, -1, -1, -1, 272, 273, 274, 275, -1, -1, - 58, 59, -1, 281, -1, 63, -1, -1, -1, 287, - 288, 289, 290, -1, -1, -1, -1, -1, -1, 297, - 298, -1, 300, 301, 302, 303, 304, 305, 306, 41, - -1, -1, 44, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, + -1, -1, 58, 59, -1, -1, -1, 63, -1, 167, + 272, 273, 274, 275, -1, -1, -1, 279, -1, 281, + -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, + -1, -1, -1, 191, -1, 297, 298, 93, 300, 301, + 302, 303, 304, 305, 306, -1, -1, 309, -1, -1, + 312, 313, 314, -1, 272, 273, 274, 275, -1, 41, + -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, + 288, 289, 290, -1, -1, -1, 58, 59, -1, 297, + 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, + -1, 309, -1, -1, 312, 313, 314, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, 93, 287, 288, 289, 290, -1, -1, -1, 58, + 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, + 305, 306, -1, -1, 309, -1, -1, 312, 313, 314, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, + 289, 290, 93, -1, -1, 58, 59, -1, 297, 298, + 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, + 309, -1, -1, 312, 313, 314, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + 93, 287, 288, 289, 290, -1, -1, -1, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, + 306, -1, -1, 309, -1, -1, 312, 313, 314, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, - -1, 93, -1, -1, -1, -1, 272, 273, 274, 275, - -1, 58, 59, -1, -1, 281, 63, -1, -1, -1, - -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, - -1, 297, 298, -1, 300, 301, 302, 303, 304, 305, - 306, 41, -1, -1, 44, -1, 93, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 58, 59, - -1, -1, 281, 63, -1, -1, -1, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, 41, 297, 298, - 44, 300, 301, 302, 303, 304, 305, 306, -1, 272, - 273, 274, 275, 93, 58, 59, -1, -1, 281, 63, - -1, -1, -1, -1, 287, 288, 289, 290, -1, -1, - -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, - 303, 304, 305, 41, -1, -1, 44, -1, -1, 93, - -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, - 58, 59, -1, 281, -1, 63, -1, -1, -1, 287, - 288, -1, 290, -1, -1, -1, -1, -1, -1, 297, - 298, -1, 300, 301, 302, 303, 304, 305, 41, -1, - -1, 44, -1, -1, -1, 93, -1, -1, -1, -1, - 272, 273, 274, 275, -1, 58, 59, -1, -1, 281, - 63, -1, 91, -1, -1, 287, 288, -1, -1, -1, - 41, -1, -1, 44, -1, 297, 298, -1, 300, 301, - 302, 303, 304, 305, -1, -1, -1, 58, 59, -1, - 93, -1, 63, -1, 123, 272, 273, 274, 275, -1, - -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, - 287, 288, 41, -1, -1, 44, -1, -1, -1, -1, - 297, 298, 93, 300, 301, 302, 303, 304, -1, 58, - 59, -1, 41, -1, 63, 44, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, -1, -1, -1, 58, - 59, 281, -1, -1, -1, 58, -1, 287, 288, 41, - 63, -1, 44, -1, 93, -1, -1, 297, 298, -1, - 300, 301, 302, 303, 304, -1, 58, 59, 272, 273, - 274, 275, -1, -1, 93, -1, -1, 281, 91, -1, - -1, -1, -1, 287, 288, 41, -1, -1, 44, -1, - -1, -1, -1, 297, 298, -1, 300, 301, 302, 303, - 304, 93, 58, 59, -1, -1, -1, -1, -1, -1, - 123, -1, -1, -1, 272, 273, 274, 275, -1, -1, - -1, -1, -1, 281, -1, -1, -1, -1, -1, 287, - 288, -1, -1, -1, -1, -1, -1, 93, -1, 297, - 298, 63, 300, 301, 302, 303, 304, -1, 287, 288, - 289, 290, -1, -1, -1, -1, -1, -1, -1, 272, - 273, 274, 275, -1, 303, 304, 305, 306, 281, 91, - 309, -1, -1, 312, 313, 314, -1, -1, -1, -1, - -1, -1, -1, -1, 297, 298, -1, 300, 301, 302, - 303, 272, 273, 274, 275, -1, -1, -1, -1, -1, - 281, 123, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 297, 298, -1, 300, - 301, 302, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, -1, 297, 298, - -1, 300, -1, -1, -1, -1, -1, -1, 281, -1, - -1, -1, -1, -1, 287, 288, 289, 290, 297, 298, - 272, 273, 274, 275, -1, -1, -1, 300, 301, 302, - 303, 304, 305, 306, -1, -1, 309, -1, -1, 312, - 313, 314, -1, -1, -1, 297, 298, -1, -1, -1, - -1, -1, -1, -1, 30, -1, 272, 273, 274, 275, - -1, -1, 38, -1, -1, -1, 42, -1, -1, 45, - -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, - 56, 297, 298, 59, 60, -1, -1, -1, -1, -1, - 66, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, 301, + -1, 93, 58, 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, -1, - 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 175, + -1, -1, -1, 272, 273, 274, 275, -1, 41, -1, + 279, 44, 281, -1, -1, -1, -1, 93, 287, 288, + 289, 290, -1, -1, -1, 58, 59, -1, 297, 298, + 63, 300, 301, 302, 303, 304, 305, 306, -1, -1, + -1, 272, 273, 274, 275, -1, 41, -1, 279, 44, + 281, -1, -1, -1, -1, -1, 287, 288, 289, 290, + 93, -1, -1, 58, 59, -1, 297, 298, 63, 300, + 301, 302, 303, 304, 305, 306, -1, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, -1, 287, 288, 289, 290, 93, -1, + -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, + 303, 304, 305, 306, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, 41, -1, 279, + 44, 281, -1, -1, -1, -1, 93, 287, 288, 289, + 290, -1, -1, -1, 58, 59, -1, 297, 298, 63, + 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, + 272, 273, 274, 275, -1, 41, -1, 279, 44, 281, + -1, -1, -1, -1, -1, 287, 288, 289, 290, 93, + -1, -1, 58, 59, -1, 297, 298, 63, 300, 301, + 302, 303, 304, 305, 306, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 289, 290, -1, -1, 93, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, 305, + 306, -1, -1, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, -1, 41, -1, 279, 44, 281, -1, + -1, -1, -1, 93, 287, 288, 289, 290, -1, -1, + -1, 58, 59, -1, 297, 298, 63, 300, 301, 302, + 303, 304, 305, 306, -1, -1, -1, 272, 273, 274, + 275, -1, 41, -1, 279, 44, 281, -1, -1, -1, + -1, -1, 287, 288, 289, 290, 93, -1, -1, 58, + 59, -1, 297, 298, 63, 300, 301, 302, 303, 304, + 305, -1, -1, -1, -1, 272, 273, 274, 275, -1, + 41, -1, 279, 44, 281, -1, -1, -1, -1, -1, + 287, 288, -1, 290, 93, -1, -1, 58, 59, -1, + 297, 298, 63, 300, 301, 302, 303, 304, 305, -1, + 91, -1, -1, -1, -1, -1, -1, -1, 272, 273, + 274, 275, -1, 41, -1, 279, 44, 281, -1, -1, + -1, -1, 93, 287, 288, -1, -1, -1, -1, -1, + 58, 59, 123, 297, 298, 63, 300, 301, 302, 303, + 304, 305, -1, -1, -1, -1, 272, 273, 274, 275, + -1, 41, -1, 279, 44, 281, -1, -1, -1, -1, + -1, 287, 288, 41, -1, 93, 44, -1, 58, 59, + -1, 297, 298, 63, 300, 301, 302, 303, 304, -1, + 58, 59, 272, 273, 274, 275, -1, -1, -1, 279, + -1, 281, -1, -1, -1, -1, -1, 287, 288, -1, + -1, -1, -1, 93, -1, -1, 41, 297, 298, 44, + 300, 301, 302, 303, 304, 93, -1, -1, -1, 41, + -1, -1, 44, 58, 59, 272, 273, 274, 275, -1, + -1, -1, 279, -1, 281, -1, 58, 59, -1, -1, + 287, 288, -1, -1, -1, -1, 63, -1, -1, -1, + 297, 298, -1, 300, 301, 302, 303, 304, 93, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + 279, 93, 281, -1, 91, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 297, 298, + -1, 300, 301, 302, 303, -1, 287, 288, 289, 290, + -1, 272, 273, 274, 275, -1, 123, -1, 279, -1, + 281, -1, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, 297, 298, -1, 300, + 301, 302, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + 91, -1, -1, -1, -1, -1, -1, -1, -1, 297, + 298, -1, 300, 301, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 279, + -1, -1, 123, -1, 272, 273, 274, 275, -1, -1, + -1, 279, -1, -1, -1, -1, 30, 297, 298, -1, + 300, -1, -1, -1, 38, -1, -1, -1, 42, 297, + 298, 45, -1, -1, -1, -1, -1, -1, 52, 53, + 54, 55, 56, -1, -1, 59, 60, 272, 273, 274, + 275, -1, 66, -1, 279, -1, -1, -1, -1, -1, + 272, 273, 274, 275, -1, -1, -1, 279, -1, -1, + -1, -1, 297, 298, 281, -1, -1, -1, -1, 93, + 287, 288, 289, 290, -1, 297, 298, -1, -1, -1, + -1, -1, -1, 300, 301, 302, 303, 304, 305, 306, + -1, -1, 309, -1, -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 281, -1, 176, -1, -1, -1, 287, 288, 289, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 301, 302, 303, 304, 305, 306, -1, -1, 309, -1, + -1, 312, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 253, -1, -1, + -1, 255, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 284, + -1, -1, 286, }; #define YYFINAL 1 #ifndef YYDEBUG @@ -1107,6 +1095,7 @@ dEXT char * yyrule[] = { "sideff : expr UNLESS expr", "sideff : expr WHILE expr", "sideff : expr UNTIL iexpr", +"sideff : expr FOR expr", "else :", "else : ELSE mblock", "else : ELSIF '(' mexpr ')' mblock else", @@ -1285,9 +1274,9 @@ dEXT int yyerrflag; dEXT int yychar; dEXT YYSTYPE yyval; dEXT YYSTYPE yylval; -#line 633 "perly.y" +#line 636 "perly.y" /* PROGRAM */ -#line 1360 "perly.c" +#line 1349 "y_tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -1386,7 +1375,7 @@ yyloop: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, + fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif @@ -1396,7 +1385,7 @@ yyloop: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", + fprintf(stderr, "yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) @@ -1451,7 +1440,7 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: state %d, error recovery shifting to state %d\n", *yyssp, yytable[yyn]); #endif @@ -1481,7 +1470,7 @@ yyinrecovery: { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: error recovery discarding state %d\n", *yyssp); #endif @@ -1500,7 +1489,7 @@ yyinrecovery: yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: state %d, error recovery discards token %d (%s)\n", yystate, yychar, yys); } @@ -1511,7 +1500,7 @@ yyinrecovery: yyreduce: #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", + fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; @@ -1611,74 +1600,79 @@ case 19: { yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);} break; case 20: -#line 159 "perly.y" -{ yyval.opval = Nullop; } +#line 157 "perly.y" +{ yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival, + Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); } break; case 21: -#line 161 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +#line 162 "perly.y" +{ yyval.opval = Nullop; } break; case 22: -#line 163 "perly.y" +#line 164 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 23: +#line 166 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newSTATEOP(0, Nullch, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); hints |= HINT_BLOCK_SCOPE; } break; -case 23: -#line 170 "perly.y" +case 24: +#line 173 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; -case 24: -#line 174 "perly.y" +case 25: +#line 177 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); } break; -case 25: -#line 180 "perly.y" +case 26: +#line 183 "perly.y" { yyval.opval = Nullop; } break; -case 26: -#line 182 "perly.y" +case 27: +#line 185 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; -case 27: -#line 186 "perly.y" +case 28: +#line 189 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, newWHILEOP(0, 1, (LOOP*)Nullop, yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; -case 28: -#line 192 "perly.y" +case 29: +#line 195 "perly.y" { copline = yyvsp[-6].ival; yyval.opval = block_end(yyvsp[-4].ival, newSTATEOP(0, yyvsp[-7].pval, newWHILEOP(0, 1, (LOOP*)Nullop, yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); } break; -case 29: -#line 198 "perly.y" +case 30: +#line 201 "perly.y" { yyval.opval = block_end(yyvsp[-6].ival, newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 30: -#line 201 "perly.y" +case 31: +#line 204 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 31: -#line 205 "perly.y" +case 32: +#line 208 "perly.y" { yyval.opval = block_end(yyvsp[-4].ival, newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 32: -#line 209 "perly.y" +case 33: +#line 212 "perly.y" { OP *forop = append_elem(OP_LINESEQ, scalar(yyvsp[-6].opval), newWHILEOP(0, 1, (LOOP*)Nullop, @@ -1687,397 +1681,397 @@ case 32: copline = yyvsp[-9].ival; yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); } break; -case 33: -#line 217 "perly.y" +case 34: +#line 220 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; -case 34: -#line 223 "perly.y" +case 35: +#line 226 "perly.y" { yyval.opval = Nullop; } break; -case 36: -#line 228 "perly.y" +case 37: +#line 231 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; -case 38: -#line 233 "perly.y" -{ yyval.opval = invert(scalar(yyvsp[0].opval)); } -break; case 39: -#line 237 "perly.y" -{ yyval.opval = yyvsp[0].opval; intro_my(); } +#line 236 "perly.y" +{ yyval.opval = invert(scalar(yyvsp[0].opval)); } break; case 40: -#line 241 "perly.y" +#line 240 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 41: -#line 245 "perly.y" +#line 244 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 42: -#line 249 "perly.y" +#line 248 "perly.y" { yyval.opval = yyvsp[0].opval; intro_my(); } break; case 43: -#line 253 "perly.y" -{ yyval.pval = Nullch; } +#line 252 "perly.y" +{ yyval.opval = yyvsp[0].opval; intro_my(); } break; -case 45: -#line 258 "perly.y" -{ yyval.ival = 0; } +case 44: +#line 256 "perly.y" +{ yyval.pval = Nullch; } break; case 46: -#line 260 "perly.y" +#line 261 "perly.y" { yyval.ival = 0; } break; case 47: -#line 262 "perly.y" +#line 263 "perly.y" { yyval.ival = 0; } break; case 48: -#line 264 "perly.y" +#line 265 "perly.y" { yyval.ival = 0; } break; case 49: -#line 268 "perly.y" -{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 267 "perly.y" +{ yyval.ival = 0; } break; case 50: #line 271 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 51: -#line 272 "perly.y" -{ yyval.opval = Nullop; } +#line 274 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 52: -#line 276 "perly.y" -{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } +#line 275 "perly.y" +{ yyval.opval = Nullop; } break; case 53: -#line 280 "perly.y" -{ yyval.ival = start_subparse(FALSE, 0); } +#line 279 "perly.y" +{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 54: -#line 284 "perly.y" -{ yyval.ival = start_subparse(FALSE, CVf_ANON); } +#line 283 "perly.y" +{ yyval.ival = start_subparse(FALSE, 0); } break; case 55: -#line 288 "perly.y" -{ yyval.ival = start_subparse(TRUE, 0); } +#line 287 "perly.y" +{ yyval.ival = start_subparse(FALSE, CVf_ANON); } break; case 56: #line 291 "perly.y" +{ yyval.ival = start_subparse(TRUE, 0); } +break; +case 57: +#line 294 "perly.y" { char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv, na); if (strEQ(name, "BEGIN") || strEQ(name, "END") || strEQ(name, "INIT")) CvUNIQUE_on(compcv); yyval.opval = yyvsp[0].opval; } break; -case 57: -#line 299 "perly.y" +case 58: +#line 302 "perly.y" { yyval.opval = Nullop; } break; -case 59: -#line 303 "perly.y" +case 60: +#line 306 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 60: -#line 304 "perly.y" +case 61: +#line 307 "perly.y" { yyval.opval = Nullop; expect = XSTATE; } break; -case 61: -#line 308 "perly.y" +case 62: +#line 311 "perly.y" { package(yyvsp[-1].opval); } break; -case 62: -#line 310 "perly.y" +case 63: +#line 313 "perly.y" { package(Nullop); } break; -case 63: -#line 314 "perly.y" +case 64: +#line 317 "perly.y" { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ } break; -case 64: -#line 316 "perly.y" +case 65: +#line 319 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; -case 65: -#line 320 "perly.y" +case 66: +#line 323 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 66: -#line 322 "perly.y" +case 67: +#line 325 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 68: -#line 327 "perly.y" +case 69: +#line 330 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 69: -#line 329 "perly.y" +case 70: +#line 332 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 71: -#line 334 "perly.y" +case 72: +#line 337 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; -case 72: -#line 337 "perly.y" +case 73: +#line 340 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; -case 73: -#line 340 "perly.y" +case 74: +#line 343 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 74: -#line 345 "perly.y" +case 75: +#line 348 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; -case 75: -#line 350 "perly.y" +case 76: +#line 353 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; -case 76: -#line 355 "perly.y" +case 77: +#line 358 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 77: -#line 357 "perly.y" +case 78: +#line 360 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 78: -#line 359 "perly.y" +case 79: +#line 362 "perly.y" { yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 79: -#line 361 "perly.y" +case 80: +#line 364 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; -case 82: -#line 371 "perly.y" +case 83: +#line 374 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 83: -#line 373 "perly.y" +case 84: +#line 376 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 84: -#line 375 "perly.y" +case 85: +#line 378 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; -case 85: -#line 379 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } -break; case 86: -#line 381 "perly.y" +#line 382 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 87: -#line 383 "perly.y" +#line 384 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 88: -#line 385 "perly.y" +#line 386 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 89: -#line 387 "perly.y" +#line 388 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 90: -#line 389 "perly.y" +#line 390 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 91: -#line 391 "perly.y" -{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} +#line 392 "perly.y" +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 92: -#line 393 "perly.y" -{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } +#line 394 "perly.y" +{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; case 93: -#line 395 "perly.y" -{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } +#line 396 "perly.y" +{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 94: -#line 397 "perly.y" -{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } +#line 398 "perly.y" +{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 95: -#line 399 "perly.y" -{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } +#line 400 "perly.y" +{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; case 96: #line 402 "perly.y" -{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; case 97: -#line 404 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 405 "perly.y" +{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; case 98: -#line 406 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +#line 407 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 99: -#line 408 "perly.y" -{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} +#line 409 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 100: -#line 410 "perly.y" -{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } +#line 411 "perly.y" +{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; case 101: -#line 412 "perly.y" -{ yyval.opval = newUNOP(OP_POSTINC, 0, - mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } +#line 413 "perly.y" +{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; case 102: #line 415 "perly.y" -{ yyval.opval = newUNOP(OP_POSTDEC, 0, - mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } +{ yyval.opval = newUNOP(OP_POSTINC, 0, + mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; case 103: #line 418 "perly.y" -{ yyval.opval = newUNOP(OP_PREINC, 0, - mod(scalar(yyvsp[0].opval), OP_PREINC)); } +{ yyval.opval = newUNOP(OP_POSTDEC, 0, + mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; case 104: #line 421 "perly.y" -{ yyval.opval = newUNOP(OP_PREDEC, 0, - mod(scalar(yyvsp[0].opval), OP_PREDEC)); } +{ yyval.opval = newUNOP(OP_PREINC, 0, + mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; case 105: #line 424 "perly.y" -{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } +{ yyval.opval = newUNOP(OP_PREDEC, 0, + mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; case 106: -#line 426 "perly.y" -{ yyval.opval = sawparens(yyvsp[-1].opval); } +#line 427 "perly.y" +{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 107: -#line 428 "perly.y" -{ yyval.opval = sawparens(newNULLLIST()); } +#line 429 "perly.y" +{ yyval.opval = sawparens(yyvsp[-1].opval); } break; case 108: -#line 430 "perly.y" -{ yyval.opval = newANONLIST(yyvsp[-1].opval); } +#line 431 "perly.y" +{ yyval.opval = sawparens(newNULLLIST()); } break; case 109: -#line 432 "perly.y" -{ yyval.opval = newANONLIST(Nullop); } +#line 433 "perly.y" +{ yyval.opval = newANONLIST(yyvsp[-1].opval); } break; case 110: -#line 434 "perly.y" -{ yyval.opval = newANONHASH(yyvsp[-2].opval); } +#line 435 "perly.y" +{ yyval.opval = newANONLIST(Nullop); } break; case 111: -#line 436 "perly.y" -{ yyval.opval = newANONHASH(Nullop); } +#line 437 "perly.y" +{ yyval.opval = newANONHASH(yyvsp[-2].opval); } break; case 112: -#line 438 "perly.y" -{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } +#line 439 "perly.y" +{ yyval.opval = newANONHASH(Nullop); } break; case 113: -#line 440 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 441 "perly.y" +{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 114: -#line 442 "perly.y" -{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), - scalar(yyvsp[-2].opval)); } +#line 443 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 115: #line 445 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), + scalar(yyvsp[-2].opval)); } break; case 116: -#line 447 "perly.y" -{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +#line 448 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 117: -#line 449 "perly.y" +#line 450 "perly.y" +{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } +break; +case 118: +#line 452 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 118: -#line 453 "perly.y" +case 119: +#line 456 "perly.y" { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; -case 119: -#line 457 "perly.y" -{ yyval.opval = yyvsp[0].opval; } -break; case 120: -#line 459 "perly.y" +#line 460 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 121: -#line 461 "perly.y" -{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} +#line 462 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 122: -#line 463 "perly.y" -{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); - expect = XOPERATOR; } +#line 464 "perly.y" +{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 123: #line 466 "perly.y" +{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); + expect = XOPERATOR; } +break; +case 124: +#line 469 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; -case 124: -#line 471 "perly.y" +case 125: +#line 474 "perly.y" { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; -case 125: -#line 476 "perly.y" +case 126: +#line 479 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; -case 126: -#line 478 "perly.y" +case 127: +#line 481 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; -case 127: -#line 480 "perly.y" +case 128: +#line 483 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list(yyvsp[-1].opval), ref(yyvsp[-3].opval, OP_ASLICE))); } break; -case 128: -#line 486 "perly.y" +case 129: +#line 489 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -2085,38 +2079,38 @@ case 128: ref(oopsHV(yyvsp[-4].opval), OP_HSLICE))); expect = XOPERATOR; } break; -case 129: -#line 493 "perly.y" -{ yyval.opval = yyvsp[0].opval; } -break; case 130: -#line 495 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } +#line 496 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 131: -#line 497 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } +#line 498 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; case 132: -#line 499 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } +#line 500 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; case 133: #line 502 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } + append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; case 134: #line 505 "perly.y" -{ yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 135: -#line 507 "perly.y" -{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +#line 508 "perly.y" +{ yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); } break; case 136: -#line 509 "perly.y" +#line 510 "perly.y" +{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } +break; +case 137: +#line 512 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@ -2125,8 +2119,8 @@ case 136: scalar(yyvsp[-2].opval) )),Nullop)); dep();} break; -case 137: -#line 517 "perly.y" +case 138: +#line 520 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@ -2136,162 +2130,162 @@ case 137: scalar(yyvsp[-3].opval) )))); dep();} break; -case 138: -#line 526 "perly.y" +case 139: +#line 529 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; -case 139: -#line 530 "perly.y" +case 140: +#line 533 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; -case 140: -#line 535 "perly.y" +case 141: +#line 538 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar(yyvsp[-3].opval))); } break; -case 141: -#line 538 "perly.y" +case 142: +#line 541 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, newCVREF(0, scalar(yyvsp[-4].opval)))); } break; -case 142: -#line 542 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); - hints |= HINT_BLOCK_SCOPE; } -break; case 143: #line 545 "perly.y" -{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } +{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); + hints |= HINT_BLOCK_SCOPE; } break; case 144: -#line 547 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } +#line 548 "perly.y" +{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 145: -#line 549 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 550 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 146: -#line 551 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +#line 552 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 147: -#line 553 "perly.y" +#line 554 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 148: -#line 555 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } +#line 556 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 149: #line 558 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 150: -#line 560 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, 0); } +#line 561 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 151: -#line 562 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - scalar(yyvsp[0].opval)); } +#line 563 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 152: #line 565 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + scalar(yyvsp[0].opval)); } break; case 153: -#line 567 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +#line 568 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 154: -#line 569 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } +#line 570 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 155: -#line 571 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } +#line 572 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 158: -#line 577 "perly.y" -{ yyval.opval = Nullop; } +case 156: +#line 574 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 159: -#line 579 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 580 "perly.y" +{ yyval.opval = Nullop; } break; case 160: -#line 583 "perly.y" -{ yyval.opval = Nullop; } +#line 582 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 161: -#line 585 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 586 "perly.y" +{ yyval.opval = Nullop; } break; case 162: -#line 587 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +#line 588 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 163: #line 590 "perly.y" -{ yyval.ival = 0; } +{ yyval.opval = yyvsp[-1].opval; } break; case 164: -#line 591 "perly.y" -{ yyval.ival = 1; } +#line 593 "perly.y" +{ yyval.ival = 0; } break; case 165: -#line 595 "perly.y" -{ in_my = 0; yyval.opval = my(yyvsp[0].opval); } +#line 594 "perly.y" +{ yyval.ival = 1; } break; case 166: -#line 599 "perly.y" -{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } +#line 598 "perly.y" +{ in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; case 167: -#line 603 "perly.y" -{ yyval.opval = newSVREF(yyvsp[0].opval); } +#line 602 "perly.y" +{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 168: -#line 607 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 606 "perly.y" +{ yyval.opval = newSVREF(yyvsp[0].opval); } break; case 169: -#line 611 "perly.y" -{ yyval.opval = newHVREF(yyvsp[0].opval); } +#line 610 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 170: -#line 615 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 614 "perly.y" +{ yyval.opval = newHVREF(yyvsp[0].opval); } break; case 171: -#line 619 "perly.y" -{ yyval.opval = newGVREF(0,yyvsp[0].opval); } +#line 618 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 172: -#line 623 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 622 "perly.y" +{ yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 173: -#line 625 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 626 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 174: -#line 627 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +#line 628 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 175: #line 630 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 176: +#line 633 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2273 "perly.c" +#line 2267 "y_tab.c" } yyssp -= yym; yystate = *yyssp; @@ -2301,7 +2295,7 @@ break; { #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: after reduction, shifting from state 0 to state %d\n", YYFINAL); #endif @@ -2317,7 +2311,7 @@ break; yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; - PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", + fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } #endif @@ -2332,7 +2326,7 @@ break; yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) - PerlIO_printf(Perl_debug_log, + fprintf(stderr, "yydebug: after reduction, shifting from state %d to state %d\n", *yyssp, yystate); #endif diff --git a/win32/Makefile b/win32/Makefile index 9431745331..9acbb5493a 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -22,11 +22,11 @@ INST_TOP=$(INST_DRV)\perl5004.5x # # uncomment next line if you want to use the perl object -#OBJECT=-DPERL_OBJECT +OBJECT=-DPERL_OBJECT # # uncomment next line if you want debug version of perl (big,slow) -#CFG=Debug +CFG=Debug # # if you have the source for des_fcrypt(), uncomment this and make sure the @@ -43,7 +43,7 @@ INST_TOP=$(INST_DRV)\perl5004.5x # WARNING: Turning this on/off WILL break binary compatibility with extensions # you may have compiled with/without it. Be prepared to recompile all extensions # if you change the default. -PERL_MALLOC *= define +PERL_MALLOC = define # # set the install locations of the compiler include/libraries diff --git a/win32/config.bc b/win32/config.bc index de7a337a33..365c5dea45 100644 --- a/win32/config.bc +++ b/win32/config.bc @@ -1,31 +1,5 @@ -# -## This file was hand coded and a lot of information is invalid -# ## Configured by: ~cf_email~ ## Target system: WIN32 -# - -archlibexp='~INST_TOP~\lib\~archname~' -archname='MSWin32' -cc='bcc32' -ccflags='-DWIN32' -cppflags='-DWIN32' -dlsrc='dl_win32.xs' -dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' -extensions='~static_ext~ ~dynamic_ext~' -installarchlib='~INST_TOP~\lib\~archname~' -installprivlib='~INST_TOP~\lib' -libpth='' -libs='' -osname='MSWin32' -osvers='4.0' -prefix='~INST_DRV~' -privlibexp='~INST_TOP~\lib' -sharpbang='#!' -shsharp='true' -so='dll' -startsh='#!/bin/sh' -static_ext='DynaLoader' Author='' CONFIG='true' Date='$Date' @@ -35,22 +9,27 @@ Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='~PATCHLEVEL~' -POSIX_cflags='ccflags="$ccflags -DSTRUCT_TM_HASZONE"' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='~SUBVERSION~' Source='' State='' +_a='.lib' +_exe='.exe' +_o='.obj' afs='false' alignbytes='8' aphostname='' ar='tlib /P128' archlib='~INST_TOP~\lib\~archname~' +archlibexp='~INST_TOP~\lib\~archname~' +archname='MSWin32' archobjs='' awk='awk' baserev='5.0' bash='' bin='~INST_TOP~\bin' +bincompat3='' binexp='~INST_TOP~\bin' bison='' byacc='byacc' @@ -58,8 +37,10 @@ byteorder='1234' c='' castflags='0' cat='type' +cc='bcc32' cccdlflags=' ' ccdlflags='-tWD' +ccflags='-DWIN32' cf_by='nobody' cf_email='nobody@no.where.net' cf_time='' @@ -74,6 +55,7 @@ cp='copy' cpio='' cpp='cpp32' cpp_stuff='42' +cppflags='-DWIN32' cpplast='' cppminus='' cpprun='' @@ -90,7 +72,6 @@ d_bcopy='undef' d_bincompat3='undef' d_bsd='define' d_bsdgetpgrp='undef' -d_bsdpgrp='undef' d_bsdsetpgrp='undef' d_bzero='undef' d_casti32='define' @@ -126,24 +107,26 @@ d_flock='define' d_fork='undef' d_fpathconf='undef' d_fsetpos='define' +d_ftime='define' d_getgrps='undef' -d_setgrps='undef' -d_gethent='undef' d_gethbyaddr='define' d_gethbyname='define' +d_gethent='undef' +d_gethname='define' +d_getlogin='define' d_getnbyaddr='undef' d_getnbyname='undef' d_getpbyname='define' d_getpbynumber='define' -d_getsbyname='define' -d_getsbyport='define' -d_getlogin='define' +d_getpgid='undef' d_getpgrp2='undef' d_getpgrp='undef' -d_getpgid='undef' d_getppid='undef' d_getprior='undef' +d_getsbyname='define' +d_getsbyport='define' d_gettimeod='undef' +d_gnulibc='undef' d_htonl='define' d_index='undef' d_inetaton='undef' @@ -170,7 +153,7 @@ d_msgrcv='define' d_msgsnd='define' d_mymalloc='define' d_nice='undef' -d_oldarchlib='undef' +d_oldpthreads='undef' d_oldsock='undef' d_open3='undef' d_pathconf='undef' @@ -179,6 +162,8 @@ d_phostname='undef' d_pipe='define' d_poll='undef' d_portable='define' +d_pthread_yield='undef' +d_pthreads_created_joinable='undef' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' @@ -193,6 +178,7 @@ d_rmdir='define' d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' +d_sched_yield='undef' d_seekdir='define' d_select='define' d_sem='undef' @@ -201,6 +187,8 @@ d_semget='define' d_semop='define' d_setegid='undef' d_seteuid='undef' +d_setgrps='undef' +d_sethent='undef' d_setlinebuf='undef' d_setlocale='define' d_setpgid='undef' @@ -221,12 +209,8 @@ d_shmatprototype='undef' d_shmctl='define' d_shmdt='define' d_shmget='define' -d_shrplib='undef' d_sigaction='undef' -d_sigintrp='' d_sigsetjmp='undef' -d_sigvec='define' -d_sigvectr='undef' d_socket='define' d_sockpair='undef' d_statblks='undef' @@ -276,6 +260,9 @@ db_prefixtype='int' defvoidused='15' direntrytype='struct direct' dlext='dll' +dlsrc='dl_win32.xs' +doublesize='8' +dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' eagain='EAGAIN' echo='echo' egrep='egrep' @@ -283,6 +270,7 @@ emacs='' eunicefix=':' exe_ext='.exe' expr='expr' +extensions='~static_ext~ ~dynamic_ext~' find='find' firstmakefile='makefile' flex='' @@ -292,15 +280,12 @@ full_csh='' full_sed='' gcc='' gccversion='' -netdb_host_type='char *' -netdb_hlen_type='int' -netdb_name_type='char *' -netdb_net_type='long' gidtype='gid_t' glibpth='/usr/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/shlib ' grep='grep' groupcat='' groupstype='gid_t' +gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' @@ -322,6 +307,7 @@ i_malloc='define' i_math='define' i_memory='undef' i_ndbm='undef' +i_netdb='undef' i_neterrno='undef' i_niin='undef' i_pwd='undef' @@ -360,9 +346,11 @@ i_varhdr='varargs.h' i_vfork='undef' incpath='' inews='' +installarchlib='~INST_TOP~\lib\~archname~' installbin='~INST_TOP~\bin' installman1dir='~INST_TOP~\man\man1' installman3dir='~INST_TOP~\man\man3' +installprivlib='~INST_TOP~\lib' installscript='~INST_TOP~\bin' installsitearch='~INST_TOP~\lib\site\~archname~' installsitelib='~INST_TOP~\lib\site' @@ -377,6 +365,8 @@ less='less' lib_ext='.lib' libc='cw32mti.lib' libperl='perl.lib' +libpth='' +libs='' libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' line='line' lint='' @@ -393,6 +383,7 @@ lseektype='off_t' mail='' mailx='' make='dmake' +make_set_make='#' mallocobj='malloc.o' mallocsrc='malloc.c' malloctype='void *' @@ -415,15 +406,20 @@ mydomain='' myhostname='' myuname='' n='-n' +netdb_hlen_type='int' +netdb_host_type='char *' +netdb_name_type='char *' +netdb_net_type='long' +nm='' nm_opt='' nm_so_opt='' nroff='' o_nonblock='O_NONBLOCK' obj_ext='.obj' -oldarchlib='' -oldarchlibexp='' optimize='-O2' orderlib='false' +osname='MSWin32' +osvers='4.0' package='perl5' pager='more /e' passcat='' @@ -438,9 +434,12 @@ pidtype='int' plibpth='' pmake='' pr='' +prefix='~INST_DRV~' prefixexp='~INST_DRV~' privlib='~INST_TOP~\lib' +privlibexp='~INST_TOP~\lib' prototype='define' +ptrsize='4' randbits='15' ranlib='rem' rd_nodata='-1' @@ -454,9 +453,11 @@ selecttype='Perl_fd_set *' sendmail='blat' sh='cmd /x /c' shar='' +sharpbang='#!' shmattype='void *' shortsize='2' -shrpdir='none' +shrpenv='' +shsharp='true' sig_name='ZERO INT ILL FPE SEGV TERM USR1 USR2 USR3 BREAK ABRT' sig_name_init='"ZERO", "INT", "ILL", "FPE", "SEGV", "TERM", "USR1", "USR2", "USR3", "BREAK", "ABRT", 0' sig_num='0, 2, 4, 8, 11, 15, 16, 17, 20, 21, 22, 0' @@ -469,25 +470,32 @@ sizetype='size_t' sleep='' smail='' small='' +so='dll' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='' split='' +src='' ssizetype='int' startperl='#!perl' +startsh='#!/bin/sh' +static_ext='DynaLoader' stdchar='unsigned char' stdio_base='((fp)->buffer)' stdio_bufsiz='((fp)->level + (fp)->curp - (fp)->buffer)' stdio_cnt='((fp)->level)' +stdio_filbuf='' stdio_ptr='((fp)->curp)' strings='/usr/include/string.h' submit='' +subversion='~SUBVERSION~' sysman='/usr/man/man1' tail='' tar='' tbl='' +tee='' test='' timeincl='/usr/include/sys/time.h ' timetype='time_t' @@ -500,9 +508,11 @@ uniq='uniq' usedl='define' usemymalloc='n' usenm='false' +useopcode='true' useperlio='undef' -useposix='true' -usesafe='true' +useposix='false' +usesfio='false' +useshrplib='yes' usethreads='undef' usevfork='false' usrinc='/usr/include' @@ -511,3 +521,4 @@ vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' +zip='zip' diff --git a/win32/config.gc b/win32/config.gc index 310586f432..0bf2718e1a 100644 --- a/win32/config.gc +++ b/win32/config.gc @@ -1,31 +1,5 @@ -# -## This file was hand coded and a lot of information is invalid -# ## Configured by: ~cf_email~ ## Target system: WIN32 -# - -archlibexp='~INST_TOP~\lib\~archname~' -archname='MSWin32' -cc='gcc' -ccflags='-DWIN32' -cppflags='-DWIN32' -dlsrc='dl_win32.xs' -dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' -extensions='~static_ext~ ~dynamic_ext~' -installarchlib='~INST_TOP~\lib\~archname~' -installprivlib='~INST_TOP~\lib' -libpth='' -libs=' ' -osname='MSWin32' -osvers='4.0' -prefix='~INST_DRV~' -privlibexp='~INST_TOP~\lib' -sharpbang='#!' -shsharp='true' -so='dll' -startsh='#!/bin/sh' -static_ext='DynaLoader' Author='' CONFIG='true' Date='$Date' @@ -35,22 +9,27 @@ Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='~PATCHLEVEL~' -POSIX_cflags='ccflags="$ccflags -DSTRUCT_TM_HASZONE"' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='~SUBVERSION~' Source='' State='' +_a='.lib' +_exe='.exe' +_o='.obj' afs='false' alignbytes='8' aphostname='' ar='ar' archlib='~INST_TOP~\lib\~archname~' +archlibexp='~INST_TOP~\lib\~archname~' +archname='MSWin32' archobjs='' awk='awk' baserev='5.0' bash='' bin='~INST_TOP~\bin' +bincompat3='' binexp='~INST_TOP~\bin' bison='' byacc='byacc' @@ -58,8 +37,10 @@ byteorder='1234' c='' castflags='0' cat='type' +cc='gcc' cccdlflags=' ' ccdlflags=' ' +ccflags='-MD -DWIN32' cf_by='nobody' cf_email='nobody@no.where.net' cf_time='' @@ -74,6 +55,7 @@ cp='copy' cpio='' cpp='cpp' cpp_stuff='42' +cppflags='-DWIN32' cpplast='' cppminus='-' cpprun='gcc -E' @@ -90,7 +72,6 @@ d_bcopy='undef' d_bincompat3='undef' d_bsd='define' d_bsdgetpgrp='undef' -d_bsdpgrp='undef' d_bsdsetpgrp='undef' d_bzero='undef' d_casti32='define' @@ -126,24 +107,26 @@ d_flock='define' d_fork='undef' d_fpathconf='undef' d_fsetpos='define' +d_ftime='define' d_getgrps='undef' -d_setgrps='undef' -d_gethent='undef' d_gethbyaddr='define' d_gethbyname='define' +d_gethent='undef' +d_gethname='define' +d_getlogin='define' d_getnbyaddr='undef' d_getnbyname='undef' d_getpbyname='define' d_getpbynumber='define' -d_getsbyname='define' -d_getsbyport='define' -d_getlogin='define' +d_getpgid='undef' d_getpgrp2='undef' d_getpgrp='undef' -d_getpgid='undef' d_getppid='undef' d_getprior='undef' +d_getsbyname='define' +d_getsbyport='define' d_gettimeod='undef' +d_gnulibc='undef' d_htonl='define' d_index='undef' d_inetaton='undef' @@ -170,7 +153,7 @@ d_msgrcv='define' d_msgsnd='define' d_mymalloc='define' d_nice='undef' -d_oldarchlib='undef' +d_oldpthreads='undef' d_oldsock='undef' d_open3='undef' d_pathconf='undef' @@ -179,6 +162,8 @@ d_phostname='undef' d_pipe='define' d_poll='undef' d_portable='define' +d_pthread_yield='undef' +d_pthreads_created_joinable='undef' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' @@ -193,6 +178,7 @@ d_rmdir='define' d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' +d_sched_yield='undef' d_seekdir='define' d_select='define' d_sem='undef' @@ -201,6 +187,8 @@ d_semget='define' d_semop='define' d_setegid='undef' d_seteuid='undef' +d_setgrps='undef' +d_sethent='undef' d_setlinebuf='undef' d_setlocale='define' d_setpgid='undef' @@ -221,12 +209,8 @@ d_shmatprototype='undef' d_shmctl='define' d_shmdt='define' d_shmget='define' -d_shrplib='undef' d_sigaction='undef' -d_sigintrp='' d_sigsetjmp='undef' -d_sigvec='define' -d_sigvectr='undef' d_socket='define' d_sockpair='undef' d_statblks='undef' @@ -276,6 +260,9 @@ db_prefixtype='int' defvoidused='15' direntrytype='struct direct' dlext='dll' +dlsrc='dl_win32.xs' +doublesize='8' +dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' eagain='EAGAIN' echo='echo' egrep='egrep' @@ -283,6 +270,7 @@ emacs='' eunicefix=':' exe_ext='.exe' expr='expr' +extensions='~static_ext~ ~dynamic_ext~' find='find' firstmakefile='makefile' flex='' @@ -292,15 +280,12 @@ full_csh='' full_sed='' gcc='' gccversion='' -netdb_host_type='char *' -netdb_hlen_type='int' -netdb_name_type='char *' -netdb_net_type='long' gidtype='gid_t' glibpth='/usr/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/shlib ' grep='grep' groupcat='' groupstype='gid_t' +gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' @@ -322,6 +307,7 @@ i_malloc='define' i_math='define' i_memory='undef' i_ndbm='undef' +i_netdb='undef' i_neterrno='undef' i_niin='undef' i_pwd='undef' @@ -360,9 +346,11 @@ i_varhdr='varargs.h' i_vfork='undef' incpath='' inews='' +installarchlib='~INST_TOP~\lib\~archname~' installbin='~INST_TOP~\bin' installman1dir='~INST_TOP~\man\man1' installman3dir='~INST_TOP~\man\man3' +installprivlib='~INST_TOP~\lib' installscript='~INST_TOP~\bin' installsitearch='~INST_TOP~\lib\site\~archname~' installsitelib='~INST_TOP~\lib\site' @@ -377,10 +365,12 @@ less='less' lib_ext='.lib' libc='msvcrt.lib' libperl='libperl.a' +libpth='' +libs='' libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' line='line' lint='' -lkflags=' ' +lkflags='' ln='' lns='copy' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' @@ -393,6 +383,7 @@ lseektype='off_t' mail='' mailx='' make='dmake' +make_set_make='#' mallocobj='malloc.o' mallocsrc='malloc.c' malloctype='void *' @@ -415,15 +406,20 @@ mydomain='' myhostname='' myuname='' n='-n' +netdb_hlen_type='int' +netdb_host_type='char *' +netdb_name_type='char *' +netdb_net_type='long' +nm='nm' nm_opt='' nm_so_opt='' nroff='' o_nonblock='O_NONBLOCK' obj_ext='.o' -oldarchlib='' -oldarchlibexp='' optimize='-O2' orderlib='false' +osname='MSWin32' +osvers='4.0' package='perl5' pager='more /e' passcat='' @@ -438,9 +434,12 @@ pidtype='int' plibpth='' pmake='' pr='' +prefix='~INST_DRV~' prefixexp='~INST_DRV~' privlib='~INST_TOP~\lib' +privlibexp='~INST_TOP~\lib' prototype='define' +ptrsize='4' randbits='15' ranlib='rem' rd_nodata='-1' @@ -454,9 +453,11 @@ selecttype='Perl_fd_set *' sendmail='blat' sh='cmd /x /c' shar='' +sharpbang='#!' shmattype='void *' shortsize='2' -shrpdir='none' +shrpenv='' +shsharp='true' sig_name='ZERO INT ILL FPE SEGV TERM BREAK ABRT' sig_name_init='"ZERO", "INT", "ILL", "FPE", "SEGV", "TERM", "BREAK", "ABRT", 0' sig_num='0, 2, 4, 8, 11, 15, 21, 22, 0' @@ -469,25 +470,32 @@ sizetype='size_t' sleep='' smail='' small='' +so='dll' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='' split='' +src='' ssizetype='int' startperl='#!perl' +startsh='#!/bin/sh' +static_ext='DynaLoader' stdchar='char' stdio_base='((fp)->_base)' stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' stdio_cnt='((fp)->_cnt)' +stdio_filbuf='' stdio_ptr='((fp)->_ptr)' strings='/usr/include/string.h' submit='' +subversion='~SUBVERSION~' sysman='/usr/man/man1' tail='' tar='' tbl='' +tee='' test='' timeincl='/usr/include/sys/time.h ' timetype='time_t' @@ -500,9 +508,11 @@ uniq='uniq' usedl='define' usemymalloc='n' usenm='false' +useopcode='true' useperlio='undef' -useposix='true' -usesafe='true' +useposix='false' +usesfio='false' +useshrplib='yes' usethreads='undef' usevfork='false' usrinc='/usr/include' @@ -511,3 +521,4 @@ vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' +zip='zip' diff --git a/win32/config.vc b/win32/config.vc index 486794d248..9797319b61 100644 --- a/win32/config.vc +++ b/win32/config.vc @@ -1,31 +1,5 @@ -# -## This file was hand coded and a lot of information is invalid -# ## Configured by: ~cf_email~ ## Target system: WIN32 -# - -archlibexp='~INST_TOP~\lib\~archname~' -archname='MSWin32' -cc='cl' -ccflags='-MD -DWIN32' -cppflags='-DWIN32' -dlsrc='dl_win32.xs' -dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' -extensions='~static_ext~ ~dynamic_ext~' -installarchlib='~INST_TOP~\lib\~archname~' -installprivlib='~INST_TOP~\lib' -libpth='' -libs='' -osname='MSWin32' -osvers='4.0' -prefix='~INST_DRV~' -privlibexp='~INST_TOP~\lib' -sharpbang='#!' -shsharp='true' -so='dll' -startsh='#!/bin/sh' -static_ext='DynaLoader' Author='' CONFIG='true' Date='$Date' @@ -35,22 +9,27 @@ Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='~PATCHLEVEL~' -POSIX_cflags='ccflags="$ccflags -DSTRUCT_TM_HASZONE"' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='~SUBVERSION~' Source='' State='' +_a='.lib' +_exe='.exe' +_o='.obj' afs='false' alignbytes='8' aphostname='' ar='lib' archlib='~INST_TOP~\lib\~archname~' +archlibexp='~INST_TOP~\lib\~archname~' +archname='MSWin32' archobjs='' awk='awk' baserev='5.0' bash='' bin='~INST_TOP~\bin' +bincompat3='' binexp='~INST_TOP~\bin' bison='' byacc='byacc' @@ -58,8 +37,10 @@ byteorder='1234' c='' castflags='0' cat='type' +cc='cl' cccdlflags=' ' ccdlflags=' ' +ccflags='-MD -DWIN32' cf_by='nobody' cf_email='nobody@no.where.net' cf_time='' @@ -74,6 +55,7 @@ cp='copy' cpio='' cpp='cpp' cpp_stuff='42' +cppflags='-DWIN32' cpplast='' cppminus='' cpprun='cl -E' @@ -90,7 +72,6 @@ d_bcopy='undef' d_bincompat3='undef' d_bsd='define' d_bsdgetpgrp='undef' -d_bsdpgrp='undef' d_bsdsetpgrp='undef' d_bzero='undef' d_casti32='define' @@ -126,24 +107,26 @@ d_flock='define' d_fork='undef' d_fpathconf='undef' d_fsetpos='define' +d_ftime='define' d_getgrps='undef' -d_setgrps='undef' -d_gethent='undef' d_gethbyaddr='define' d_gethbyname='define' +d_gethent='undef' +d_gethname='define' +d_getlogin='define' d_getnbyaddr='undef' d_getnbyname='undef' d_getpbyname='define' d_getpbynumber='define' -d_getsbyname='define' -d_getsbyport='define' -d_getlogin='define' +d_getpgid='undef' d_getpgrp2='undef' d_getpgrp='undef' -d_getpgid='undef' d_getppid='undef' d_getprior='undef' +d_getsbyname='define' +d_getsbyport='define' d_gettimeod='undef' +d_gnulibc='undef' d_htonl='define' d_index='undef' d_inetaton='undef' @@ -170,7 +153,7 @@ d_msgrcv='define' d_msgsnd='define' d_mymalloc='define' d_nice='undef' -d_oldarchlib='undef' +d_oldpthreads='undef' d_oldsock='undef' d_open3='undef' d_pathconf='undef' @@ -179,6 +162,8 @@ d_phostname='undef' d_pipe='define' d_poll='undef' d_portable='define' +d_pthread_yield='undef' +d_pthreads_created_joinable='undef' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' @@ -193,6 +178,7 @@ d_rmdir='define' d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' +d_sched_yield='undef' d_seekdir='define' d_select='define' d_sem='undef' @@ -201,6 +187,8 @@ d_semget='define' d_semop='define' d_setegid='undef' d_seteuid='undef' +d_setgrps='undef' +d_sethent='undef' d_setlinebuf='undef' d_setlocale='define' d_setpgid='undef' @@ -221,12 +209,8 @@ d_shmatprototype='undef' d_shmctl='define' d_shmdt='define' d_shmget='define' -d_shrplib='undef' d_sigaction='undef' -d_sigintrp='' d_sigsetjmp='undef' -d_sigvec='define' -d_sigvectr='undef' d_socket='define' d_sockpair='undef' d_statblks='undef' @@ -276,6 +260,9 @@ db_prefixtype='int' defvoidused='15' direntrytype='struct direct' dlext='dll' +dlsrc='dl_win32.xs' +doublesize='8' +dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread' eagain='EAGAIN' echo='echo' egrep='egrep' @@ -283,6 +270,7 @@ emacs='' eunicefix=':' exe_ext='.exe' expr='expr' +extensions='~static_ext~ ~dynamic_ext~' find='find' firstmakefile='makefile' flex='' @@ -292,15 +280,12 @@ full_csh='' full_sed='' gcc='' gccversion='' -netdb_host_type='char *' -netdb_hlen_type='int' -netdb_name_type='char *' -netdb_net_type='long' gidtype='gid_t' glibpth='/usr/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/shlib ' grep='grep' groupcat='' groupstype='gid_t' +gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' @@ -322,6 +307,7 @@ i_malloc='define' i_math='define' i_memory='undef' i_ndbm='undef' +i_netdb='undef' i_neterrno='undef' i_niin='undef' i_pwd='undef' @@ -360,9 +346,11 @@ i_varhdr='varargs.h' i_vfork='undef' incpath='' inews='' +installarchlib='~INST_TOP~\lib\~archname~' installbin='~INST_TOP~\bin' installman1dir='~INST_TOP~\man\man1' installman3dir='~INST_TOP~\man\man3' +installprivlib='~INST_TOP~\lib' installscript='~INST_TOP~\bin' installsitearch='~INST_TOP~\lib\site\~archname~' installsitelib='~INST_TOP~\lib\site' @@ -377,6 +365,8 @@ less='less' lib_ext='.lib' libc='msvcrt.lib' libperl='perl.lib' +libpth='' +libs='' libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' line='line' lint='' @@ -393,6 +383,7 @@ lseektype='off_t' mail='' mailx='' make='nmake' +make_set_make='#' mallocobj='malloc.o' mallocsrc='malloc.c' malloctype='void *' @@ -415,15 +406,20 @@ mydomain='' myhostname='' myuname='' n='-n' +netdb_hlen_type='int' +netdb_host_type='char *' +netdb_name_type='char *' +netdb_net_type='long' +nm='' nm_opt='' nm_so_opt='' nroff='' o_nonblock='O_NONBLOCK' obj_ext='.obj' -oldarchlib='' -oldarchlibexp='' optimize='-O' orderlib='false' +osname='MSWin32' +osvers='4.0' package='perl5' pager='more /e' passcat='' @@ -438,9 +434,12 @@ pidtype='int' plibpth='' pmake='' pr='' +prefix='~INST_DRV~' prefixexp='~INST_DRV~' privlib='~INST_TOP~\lib' +privlibexp='~INST_TOP~\lib' prototype='define' +ptrsize='4' randbits='15' ranlib='rem' rd_nodata='-1' @@ -454,9 +453,11 @@ selecttype='Perl_fd_set *' sendmail='blat' sh='cmd /x /c' shar='' +sharpbang='#!' shmattype='void *' shortsize='2' -shrpdir='none' +shrpenv='' +shsharp='true' sig_name='ZERO INT ILL FPE SEGV TERM BREAK ABRT' sig_name_init='"ZERO", "INT", "ILL", "FPE", "SEGV", "TERM", "BREAK", "ABRT", 0' sig_num='0, 2, 4, 8, 11, 15, 21, 22, 0' @@ -469,25 +470,32 @@ sizetype='size_t' sleep='' smail='' small='' +so='dll' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='' split='' +src='' ssizetype='int' startperl='#!perl' +startsh='#!/bin/sh' +static_ext='DynaLoader' stdchar='char' stdio_base='((fp)->_base)' stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' stdio_cnt='((fp)->_cnt)' +stdio_filbuf='' stdio_ptr='((fp)->_ptr)' strings='/usr/include/string.h' submit='' +subversion='~SUBVERSION~' sysman='/usr/man/man1' tail='' tar='' tbl='' +tee='' test='' timeincl='/usr/include/sys/time.h ' timetype='time_t' @@ -500,9 +508,11 @@ uniq='uniq' usedl='define' usemymalloc='n' usenm='false' +useopcode='true' useperlio='undef' -useposix='true' -usesafe='true' +useposix='false' +usesfio='false' +useshrplib='yes' usethreads='undef' usevfork='false' usrinc='/usr/include' @@ -511,3 +521,4 @@ vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' +zip='zip' diff --git a/win32/config_H.bc b/win32/config_H.bc index b8f52a020c..bcdc0b8d78 100644 --- a/win32/config_H.bc +++ b/win32/config_H.bc @@ -12,7 +12,7 @@ /* * Package name : perl5 - * Source directory : undef + * Source directory : * Configuration time: undef * Configured by : gsar * Target system : @@ -239,12 +239,6 @@ */ /*#define HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent routine is - * available to lookup host names in some data base or other. - */ -/*#define HAS_GETHOSTENT /**/ - /* HAS_UNAME: * This symbol, if defined, indicates that the C program may use the * uname() routine to derive the host name. See also HAS_GETHOSTNAME @@ -1467,6 +1461,12 @@ #define HAS_VPRINTF /**/ /*#define USE_CHAR_VSPRINTF /**/ +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + /* I_TIME: * This symbol, if defined, indicates to the C program that it should * include <time.h>. @@ -1526,6 +1526,14 @@ #define RD_NODATA -1 #define EOF_NONBLOCK +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + /* RANDBITS: * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. @@ -1591,6 +1599,58 @@ */ /*#define CSH "" /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#define HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#define HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +/*#define HAS_GETHOSTENT /**/ + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +/*#define HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +/*#define HAS_GETNETBYNAME /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#define HAS_GETPROTOBYNAME /**/ +#define HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#define HAS_GETSERVBYNAME /**/ +#define HAS_GETSERVBYPORT /**/ + /* HAS_SETGROUPS: * This symbol, if defined, indicates that the setgroups() routine is * available to set the list of process groups. If unavailable, multiple @@ -1598,6 +1658,12 @@ */ /*#define HAS_SETGROUPS /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +/*#define HAS_SETHOSTENT /**/ + /* Signal_t: * This symbol's value is either "void" or "int", corresponding to the * appropriate return type of a signal handler. Thus, you can declare @@ -1802,7 +1868,12 @@ * This symbol, if defined, indicates that Perl should * be built to use threads. */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ /*#define USE_THREADS /**/ +/*#define OLD_PTHREADS_API /**/ #endif #include <win32.h> diff --git a/win32/config_H.gc b/win32/config_H.gc index e5f3d27a93..eef1a63b5c 100644 --- a/win32/config_H.gc +++ b/win32/config_H.gc @@ -12,7 +12,7 @@ /* * Package name : perl5 - * Source directory : undef + * Source directory : * Configuration time: undef * Configured by : gsar * Target system : @@ -239,12 +239,6 @@ */ /*#define HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent routine is - * available to lookup host names in some data base or other. - */ -/*#define HAS_GETHOSTENT /**/ - /* HAS_UNAME: * This symbol, if defined, indicates that the C program may use the * uname() routine to derive the host name. See also HAS_GETHOSTNAME @@ -1467,6 +1461,12 @@ #define HAS_VPRINTF /**/ /*#define USE_CHAR_VSPRINTF /**/ +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + /* I_TIME: * This symbol, if defined, indicates to the C program that it should * include <time.h>. @@ -1526,6 +1526,14 @@ #define RD_NODATA -1 #define EOF_NONBLOCK +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + /* RANDBITS: * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. @@ -1591,6 +1599,58 @@ */ /*#define CSH "" /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#define HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#define HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +/*#define HAS_GETHOSTENT /**/ + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +/*#define HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +/*#define HAS_GETNETBYNAME /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#define HAS_GETPROTOBYNAME /**/ +#define HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#define HAS_GETSERVBYNAME /**/ +#define HAS_GETSERVBYPORT /**/ + /* HAS_SETGROUPS: * This symbol, if defined, indicates that the setgroups() routine is * available to set the list of process groups. If unavailable, multiple @@ -1598,6 +1658,12 @@ */ /*#define HAS_SETGROUPS /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +/*#define HAS_SETHOSTENT /**/ + /* Signal_t: * This symbol's value is either "void" or "int", corresponding to the * appropriate return type of a signal handler. Thus, you can declare @@ -1802,7 +1868,12 @@ * This symbol, if defined, indicates that Perl should * be built to use threads. */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ /*#define USE_THREADS /**/ +/*#define OLD_PTHREADS_API /**/ #endif #include <win32.h> diff --git a/win32/config_H.vc b/win32/config_H.vc index 87bc9c09dc..ac3487f5fb 100644 --- a/win32/config_H.vc +++ b/win32/config_H.vc @@ -12,7 +12,7 @@ /* * Package name : perl5 - * Source directory : undef + * Source directory : * Configuration time: undef * Configured by : gsar * Target system : @@ -246,12 +246,6 @@ */ /*#define HAS_GETGROUPS /**/ -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent routine is - * available to lookup host names in some data base or other. - */ -/*#define HAS_GETHOSTENT /**/ - /* HAS_UNAME: * This symbol, if defined, indicates that the C program may use the * uname() routine to derive the host name. See also HAS_GETHOSTNAME @@ -1474,6 +1468,12 @@ #define HAS_VPRINTF /**/ /*#define USE_CHAR_VSPRINTF /**/ +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + /* I_TIME: * This symbol, if defined, indicates to the C program that it should * include <time.h>. @@ -1533,6 +1533,14 @@ #define RD_NODATA -1 #define EOF_NONBLOCK +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + /* RANDBITS: * This symbol contains the number of bits of random number the rand() * function produces. Usual values are 15, 16, and 31. @@ -1598,6 +1606,58 @@ */ /*#define CSH "" /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#define HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#define HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +/*#define HAS_GETHOSTENT /**/ + +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +/*#define HAS_GETNETBYADDR /**/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +/*#define HAS_GETNETBYNAME /**/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#define HAS_GETPROTOBYNAME /**/ +#define HAS_GETPROTOBYNUMBER /**/ + +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#define HAS_GETSERVBYNAME /**/ +#define HAS_GETSERVBYPORT /**/ + /* HAS_SETGROUPS: * This symbol, if defined, indicates that the setgroups() routine is * available to set the list of process groups. If unavailable, multiple @@ -1605,6 +1665,12 @@ */ /*#define HAS_SETGROUPS /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +/*#define HAS_SETHOSTENT /**/ + /* Signal_t: * This symbol's value is either "void" or "int", corresponding to the * appropriate return type of a signal handler. Thus, you can declare @@ -1809,7 +1875,12 @@ * This symbol, if defined, indicates that Perl should * be built to use threads. */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ /*#define USE_THREADS /**/ +/*#define OLD_PTHREADS_API /**/ #endif #include <win32.h> diff --git a/win32/config_h.PL b/win32/config_h.PL index 471c43c7e1..f317e5a407 100644 --- a/win32/config_h.PL +++ b/win32/config_h.PL @@ -27,6 +27,7 @@ eval $str; die "$str:$@" if $@; open(H,">$file.new") || die "Cannot open $file.new:$!"; +binmode H; # no CRs (which cause a spurious rebuild) while (<SH>) { last if /^$term$/o; diff --git a/win32/makefile.mk b/win32/makefile.mk index d027ce5b2d..789cf827c3 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -17,7 +17,7 @@ INST_TOP *= $(INST_DRV)\perl5004.5x # # uncomment to enable threads-capabilities -USE_THREADS *= define +#USE_THREADS *= define # # uncomment one diff --git a/win32/win32.c b/win32/win32.c index 54ce3990ab..65727a45f8 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -105,6 +105,20 @@ long w32_num_children = 0; HANDLE w32_child_pids[MAXIMUM_WAIT_OBJECTS]; #endif +#ifndef FOPEN_MAX +# ifdef _NSTREAM_ +# define FOPEN_MAX _NSTREAM_ +# elsif _NFILE_ +# define FOPEN_MAX _NFILE_ +# elsif _NFILE +# define FOPEN_MAX _NFILE +# endif +#endif + +#ifndef USE_CRT_POPEN +int w32_popen_pids[FOPEN_MAX]; +#endif + #ifdef USE_THREADS # ifdef USE_DECLSPEC_THREAD __declspec(thread) char strerror_buffer[512]; @@ -222,10 +236,8 @@ my_popen(char *cmd, char *mode) #define fixcmd(x) #endif fixcmd(cmd); -#ifdef __BORLANDC__ /* workaround a Borland stdio bug */ win32_fflush(stdout); win32_fflush(stderr); -#endif return win32_popen(cmd, mode); } @@ -370,15 +382,18 @@ do_aspawn(void *vreally, void **vmark, void **vsp) (const char* const*)argv); } - if (status < 0) { - if (dowarn) - warn("Can't spawn \"%s\": %s", argv[0], strerror(errno)); - status = 255 * 256; + if (flag != P_NOWAIT) { + if (status < 0) { + if (dowarn) + warn("Can't spawn \"%s\": %s", argv[0], strerror(errno)); + status = 255 * 256; + } + else + status *= 256; + statusvalue = status; } - else if (flag != P_NOWAIT) - status *= 256; Safefree(argv); - return (statusvalue = status); + return (status); } int @@ -454,16 +469,19 @@ do_spawn2(char *cmd, int exectype) cmd = argv[0]; Safefree(argv); } - if (status < 0) { - if (dowarn) - warn("Can't %s \"%s\": %s", - (exectype == EXECF_EXEC ? "exec" : "spawn"), - cmd, strerror(errno)); - status = 255 * 256; + if (exectype != EXECF_SPAWN_NOWAIT) { + if (status < 0) { + if (dowarn) + warn("Can't %s \"%s\": %s", + (exectype == EXECF_EXEC ? "exec" : "spawn"), + cmd, strerror(errno)); + status = 255 * 256; + } + else + status *= 256; + statusvalue = status; } - else if (exectype != EXECF_SPAWN_NOWAIT) - status *= 256; - return (statusvalue = status); + return (status); } int @@ -1483,16 +1501,125 @@ win32_pipe(int *pfd, unsigned int size, int mode) return _pipe(pfd, size, mode); } +/* + * a popen() clone that respects PERL5SHELL + */ + DllExport FILE* win32_popen(const char *command, const char *mode) { +#ifdef USE_CRT_POPEN return _popen(command, mode); +#else + int p[2]; + int parent, child; + int stdfd, oldfd; + int ourmode; + int childpid; + + /* establish which ends read and write */ + if (strchr(mode,'w')) { + stdfd = 0; /* stdin */ + parent = 1; + child = 0; + } + else if (strchr(mode,'r')) { + stdfd = 1; /* stdout */ + parent = 0; + child = 1; + } + else + return NULL; + + /* set the correct mode */ + if (strchr(mode,'b')) + ourmode = O_BINARY; + else if (strchr(mode,'t')) + ourmode = O_TEXT; + else + ourmode = _fmode & (O_TEXT | O_BINARY); + + /* the child doesn't inherit handles */ + ourmode |= O_NOINHERIT; + + if (win32_pipe( p, 512, ourmode) == -1) + return NULL; + + /* save current stdfd */ + if ((oldfd = win32_dup(stdfd)) == -1) + goto cleanup; + + /* make stdfd go to child end of pipe (implicitly closes stdfd) */ + /* stdfd will be inherited by the child */ + if (win32_dup2(p[child], stdfd) == -1) + goto cleanup; + + /* close the child end in parent */ + win32_close(p[child]); + + /* start the child */ + if ((childpid = do_spawn_nowait((char*)command)) == -1) + goto cleanup; + + /* revert stdfd to whatever it was before */ + if (win32_dup2(oldfd, stdfd) == -1) + goto cleanup; + + /* close saved handle */ + win32_close(oldfd); + + w32_popen_pids[p[parent]] = childpid; + + /* we have an fd, return a file stream */ + return (win32_fdopen(p[parent], (char *)mode)); + +cleanup: + /* we don't need to check for errors here */ + win32_close(p[0]); + win32_close(p[1]); + if (oldfd != -1) { + win32_dup2(oldfd, stdfd); + win32_close(oldfd); + } + return (NULL); + +#endif /* USE_CRT_POPEN */ } +/* + * pclose() clone + */ + DllExport int win32_pclose(FILE *pf) { +#ifdef USE_CRT_POPEN return _pclose(pf); +#else + int fd, childpid, status; + + fd = win32_fileno(pf); + childpid = w32_popen_pids[fd]; + + if (!childpid) { + errno = EBADF; + return -1; + } + + win32_fclose(pf); + w32_popen_pids[fd] = 0; + + /* wait for the child */ + if (cwait(&status, childpid, WAIT_CHILD) == -1) + return (-1); + /* cwait() returns differently on Borland */ +#ifdef __BORLANDC__ + return (((status >> 8) & 0xff) | ((status << 8) & 0xff00)); +#else + return (status); +#endif + +#endif /* USE_CRT_OPEN */ } DllExport int @@ -1814,7 +1941,7 @@ XS(w32_GetCwd) */ if (SvCUR(sv)) SvPOK_on(sv); - EXTEND(sp,1); + EXTEND(SP,1); ST(0) = sv; XSRETURN(1); } |