Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

overload::constant and number of arguments. #2534

Closed
p5pRT opened this issue Aug 31, 2000 · 3 comments
Closed

overload::constant and number of arguments. #2534

p5pRT opened this issue Aug 31, 2000 · 3 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 31, 2000

Migrated from rt.perl.org#4060 (status was 'resolved')

Searchable as RT4060$

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2000

From @Abigail

Created by @Abigail

#!/opt/perl/bin/perl -w

use overload;

BEGIN {overload​::constant q => sub {print "Got ", scalar (@​_), " arguments\n";
  $_ [1]}};

my $foo = "foo";
__END__
Got 4 arguments

However, the documentation only mentions three arguments​:

  The corresponding values are references to functions which
  take three arguments​: the first one is the initial string
  form of the constant, the second one is how Perl inter­
  prets this constant, the third one is how the constant is
  used.

What is this 4th argument (which seems to be a coderef)?

(bleedperl also has 4 arguments).

Abigail

Perl Info

Flags:
    category=library
    severity=low

Site configuration information for perl v5.6.0:

Configured by abigail at Wed Jun 14 21:00:02 EDT 2000.

Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.2.13, archname=i686-linux-64int
    uname='linux alexandra 2.2.13 #5 tue feb 8 15:37:54 est 2000 i686 unknown '
    config_args='-Dprefix=/opt/perl -d -Uinstallusrbinperl -Doptimize=-g -Dusemorebits'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=undef d_sfio=undef uselargefiles=define 
    use64bitint=define use64bitall=undef uselongdouble=define usesocks=undef
  Compiler:
    cc='cc', optimize='-g', gccversion=2.95.2 19991024 (release)
    cppflags='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include'
    ccflags ='-DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
    stdchar='char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
    libc=/lib/libc-2.1.2.so, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    


@INC for perl v5.6.0:
    /home/abigail/Perl
    /home/abigail/Sybase
    /opt/perl/lib/5.6.0/i686-linux-64int
    /opt/perl/lib/5.6.0
    /opt/perl/lib/site_perl/5.6.0/i686-linux-64int
    /opt/perl/lib/site_perl/5.6.0
    /opt/perl/lib/site_perl/5.005
    /opt/perl/lib/site_perl
    .


Environment for perl v5.6.0:
    HOME=/home/abigail
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH=/home/abigail/Lib:/usr/local/lib:/usr/lib:/lib:/usr/X11R6/lib:/opt/tcl/lib:/opt/tk/lib/tk8.0
    LOGDIR (unset)
    PATH=/home/abigail/Bin:/opt/perl/bin:/opt/tcl/bin:/opt/tk/bin:/usr/local/bin:/usr/local/X11/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/games:/opt/povray/bin:/opt/teTeX/bin/i686-pc-linux-gnu:/opt/python/bin
    PERL5LIB=/home/abigail/Perl:/home/abigail/Sybase
    PERLDIR=/opt/perl
    PERL_BADLANG (unset)
    SHELL=/bin/bash


@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2000

From [Unknown Contact. See original ticket]

On 31 Aug 2000 19​:32​:07 -0000, abigail@​foad.org wrote (in part)​:

abigail> What is this 4th argument (which seems to be a coderef)?
abigail> (bleedperl also has 4 arguments).

It's the code ref to the called routine. It seems to be a
left-over from earlier thinking about doing a method call rather
than a subroutine call, based on how the stack gets set up there.
(S_new_constant in toke.c)

  --s.

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2000

From [Unknown Contact. See original ticket]

On Thu, 31 Aug 2000 15​:58​:11 -0400, responding to abigail, I wrote​:

sb> It's the code ref to the called routine. It seems to be a
sb> left-over from earlier thinking about doing a method call
sb> rather than a subroutine call, based on how the stack gets
sb> set up there. (S_new_constant in toke.c)

Indeed, "make test" is still perfectly happy after the following patch.

  --s.

Inline Patch
--- toke.c.DIST	Sun Aug 13 14:37:03 2000
+++ toke.c	Thu Aug 31 16:05:01 2000
@@ -5742,13 +5742,12 @@ S_new_constant(pTHX_ char *s, STRLEN len
     SAVETMPS;
     
     PUSHMARK(SP) ;
-    EXTEND(sp, 4);
+    EXTEND(sp, 3);
     if (pv)
  	PUSHs(pv);
     PUSHs(sv);
     if (pv)
  	PUSHs(typesv);
-    PUSHs(cv);
     PUTBACK;
     call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
     

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant