Front page | perl.perl5.porters |
Postings from April 2000
[ID 20000418.002] line numbers are given % 64k
Thread Next
From:
James Jurach
Date:
April 18, 2000 08:58
Subject:
[ID 20000418.002] line numbers are given % 64k
Message ID:
200004181558.KAA07438@ilwrath.mesas.com
This is a bug report for perl from muaddib@fundsxpress.com,
generated with the help of perlbug 1.26 running under perl 5.00502.
-----------------------------------------------------------------
Line numbers are stored in a 16 bit field during compilation. As a result,
line numbers > 64k are reported inaccurately.
$ perl -e 'print "\n" x 66000, "\$foo=\"baz\";\n"' > toolong.pl
$ wc toolong.pl
66001 1 66012 toolong.pl
$ perl -w toolong.pl
Name "main::foo" used only once: possible typo at toolong.pl line 465.
Below, I've enclosed a patch to fix this behavior in 5.005_03, and have
currently begun to use it in our development environment. Are there any
issues why making line_t 32-bit instead of 16-bit might be a bad idea?
Thanks,
james jurach
muaddib@fundsxpress.com
p.s. the patch:
diff -urb perl5.005_03.orig/handy.h perl5.005_03/handy.h
--- perl5.005_03.orig/handy.h Sat Mar 27 11:57:02 1999
+++ perl5.005_03/handy.h Thu Mar 16 18:39:50 2000
@@ -256,11 +256,11 @@
#endif
/* Line numbers are unsigned, 16 bits. */
-typedef U16 line_t;
+typedef U32 line_t;
#ifdef lint
#define NOLINE ((line_t)0)
#else
-#define NOLINE ((line_t) 65535)
+#define NOLINE ((line_t) 4294967295UL)
#endif
diff -urb perl5.005_03.orig/op.c perl5.005_03/op.c
--- perl5.005_03.orig/op.c Sun Mar 28 10:13:03 1999
+++ perl5.005_03/op.c Thu Mar 16 18:40:17 2000
@@ -3745,7 +3745,7 @@
I32 oldscope = PL_scopestack_ix;
ENTER;
SAVESPTR(PL_compiling.cop_filegv);
- SAVEI16(PL_compiling.cop_line);
+ SAVEI32(PL_compiling.cop_line);
save_svref(&PL_rs);
sv_setsv(PL_rs, PL_nrs);
diff -urb perl5.005_03.orig/pp_ctl.c perl5.005_03/pp_ctl.c
--- perl5.005_03.orig/pp_ctl.c Sat Mar 27 11:56:24 1999
+++ perl5.005_03/pp_ctl.c Thu Mar 16 18:40:34 2000
@@ -2354,7 +2354,7 @@
PL_compiling.cop_stash = PL_curstash;
}
SAVESPTR(PL_compiling.cop_filegv);
- SAVEI16(PL_compiling.cop_line);
+ SAVEI32(PL_compiling.cop_line);
sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
PL_compiling.cop_line = 1;
@@ -2705,7 +2705,7 @@
PUSHBLOCK(cx, CXt_EVAL, SP);
PUSHEVAL(cx, name, PL_compiling.cop_filegv);
- SAVEI16(PL_compiling.cop_line);
+ SAVEI32(PL_compiling.cop_line);
PL_compiling.cop_line = 0;
PUTBACK;
diff -urb perl5.005_03.orig/toke.c perl5.005_03/toke.c
--- perl5.005_03.orig/toke.c Sun Mar 28 01:57:23 1999
+++ perl5.005_03/toke.c Thu Mar 16 18:39:50 2000
@@ -251,7 +251,7 @@
SAVEI32(PL_lex_state);
SAVESPTR(PL_lex_inpat);
SAVEI32(PL_lex_inwhat);
- SAVEI16(PL_curcop->cop_line);
+ SAVEI32(PL_curcop->cop_line);
SAVEPPTR(PL_bufptr);
SAVEPPTR(PL_bufend);
SAVEPPTR(PL_oldbufptr);
@@ -694,7 +694,7 @@
SAVEI32(PL_lex_state);
SAVESPTR(PL_lex_inpat);
SAVEI32(PL_lex_inwhat);
- SAVEI16(PL_curcop->cop_line);
+ SAVEI32(PL_curcop->cop_line);
SAVEPPTR(PL_bufptr);
SAVEPPTR(PL_oldbufptr);
SAVEPPTR(PL_oldoldbufptr);
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Site configuration information for perl 5.00502:
Configured by root at Sun Dec 27 07:04:42 CST 1998.
Summary of my perl5 (5.0 patchlevel 5 subversion 2) configuration:
Platform:
osname=solaris, osvers=2.6, archname=sun4-solaris
uname='sunos harika 5.6 generic_105181-05 sun4u sparc sunw,ultra-250 '
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=define d_sfio=define
Compiler:
cc='cc', optimize='-O', gccversion=egcs-2.90.29 980515 (egcs-1.0.3 release)
cppflags='-I/tmp/tools/sfio/include -I/usr/local/include -I/mesa/myarch/include'
ccflags ='-I/tmp/tools/sfio/include -I/usr/local/include -I/mesa/myarch/include'
stdchar='unsigned char', d_stdstdio=define, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
alignbytes=8, usemymalloc=y, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/tmp/tools/sfio/src/lib/sfio -L/usr/local/lib'
libpth=/tmp/tools/sfio/src/lib/sfio /usr/local/lib /lib /usr/lib /usr/ccs/lib
libs=-lsfio -lsocket -lnsl -ldl -lm -lc -lcrypt
libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-fPIC', lddlflags='-G -L/tmp/tools/sfio/src/lib/sfio -L/usr/local/lib'
Locally applied patches:
---
@INC for perl 5.00502:
/prod/devtrees/muaddib-cvs/lib/perl
/mesa/arch/sun4_solaris/lib/perl5/5.00502/sun4-solaris
/mesa/arch/sun4_solaris/lib/perl5/5.00502
/mesa/arch/sun4_solaris/lib/perl5/site_perl/5.005/sun4-solaris
/mesa/arch/sun4_solaris/lib/perl5/site_perl/5.005
.
---
Environment for perl 5.00502:
HOME=/home/muaddib
LANG (unset)
LD_LIBRARY_PATH=/mesa/oracle/current/lib:
LOGDIR (unset)
PATH=/home/muaddib/arch/sun4_solaris/bin:/home/muaddib/Mail/bin:/home/muaddib/bin:/usr/krb5/bin:/usr/pkg/bin:/mesa/bin:/mesa/release/common/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/X/bin:/usr/bin/X11:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/mh:/usr/ccs/bin:/mesa/oracle/current/bin:/prod/devtrees/muaddib-cvs/bin:/opt/java/bin
PERL5LIB=/prod/devtrees/muaddib-cvs/lib/perl
PERL_BADLANG (unset)
PERL_READLINE_NOWARN=1
SHELL=/bin/bash
Thread Next
-
[ID 20000418.002] line numbers are given % 64k
by James Jurach