Front page | perl.perl5.porters |
Postings from September 2013
[perl #119815] Deparse sprinkles erroneous local() here and there
From:
Father Chrysostomos
Date:
September 15, 2013 20:34
Subject:
[perl #119815] Deparse sprinkles erroneous local() here and there
Message ID:
rt-3.6.HEAD-1873-1379277269-1198.119815-75-0@perl.org
# New Ticket Created by Father Chrysostomos
# Please include the string: [perl #119815]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=119815 >
B::Deparse has this:
sub pp_list {
my $self = shift;
my($op, $cx) = @_;
my($expr, @exprs);
my $kid = $op->first->sibling; # skip pushmark
return '' if class($kid) eq 'NULL';
my $lop;
my $local = "either"; # could be local(...), my(...), state(...) or our(...)
for ($lop = $kid; !null($lop); $lop = $lop->sibling) {
# This assumes that no other private flags equal 128, and that
# OPs that store things other than flags in their op_private,
# like OP_AELEMFAST, won't be immediate children of a list.
#
# OP_ENTERSUB can break this logic, so check for it.
# I suspect that open and exit can too.
# XXX This really needs to be rewritten to accept only those ops
# known to take the OPpLVAL_INTRO flag.
(I added the XXX comment. I don’t know when I’ll get to it, hence this report.)
I suspect the 128 flag usage has grown. This code needs to be rewritten. It is probably wrong for many untested cases, including this one:
$ ./perl -Ilib -MO=Deparse -e 'use utf8; () = goto ж'
use utf8;
use utf8 ();
() = local(goto ж);
-e syntax OK
---
Flags:
category=library
severity=low
---
Site configuration information for perl 5.19.4:
Configured by sprout at Mon Sep 9 00:16:24 PDT 2013.
Summary of my perl5 (revision 5 version 19 subversion 4) configuration:
Commit id: d47819ff6f55bfaa4b7eddc66c6db7d7dfdec11c
Platform:
osname=darwin, osvers=12.2.0, archname=darwin-2level
uname='darwin pint.local 12.2.0 darwin kernel version 12.2.0: sat aug 25 00:48:52 pdt 2012; root:xnu-2050.18.24~1release_x86_64 x86_64 '
config_args='-de -Dcc=gcc -Dusedevel -Doptimize=-ggdb3 -Aoptimize=-O0 -DDEBUGGING'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-fno-common -DPERL_DARWIN -no-cpp-precomp -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-ggdb3 -O0',
cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'
---
@INC for perl 5.19.4:
lib
/usr/local/lib/perl5/site_perl/5.19.4/darwin-2level
/usr/local/lib/perl5/site_perl/5.19.4
/usr/local/lib/perl5/5.19.4/darwin-2level
/usr/local/lib/perl5/5.19.4
/usr/local/lib/perl5/site_perl
.
---
Environment for perl 5.19.4:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash
-
[perl #119815] Deparse sprinkles erroneous local() here and there
by Father Chrysostomos