develooper 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About