summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2014-06-13 15:21:25 -0400
committerJarkko Hietaniemi <jhi@iki.fi>2014-06-13 15:41:55 -0400
commitb5bbe64ad2ec51417ef02ac52304ed45fe37be3f (patch)
tree71f1b45882f215a6d886d3bc08954c02a54e6af0
parent7053d92917f7cb46452de86dc4c6d8644cae849c (diff)
downloadperl-b5bbe64ad2ec51417ef02ac52304ed45fe37be3f.tar.gz
Remove MAD.
MAD = Misc Attribute Decoration; unmaintained attempt at preserving the Perl parse tree more faithfully so that automatic conversion to Perl 6 would have been easier.
-rwxr-xr-xConfigure42
-rw-r--r--Cross/Makefile-cross-SH6
-rw-r--r--Cross/cflags-cross-arm1
-rw-r--r--MANIFEST8
-rwxr-xr-xMakefile.SH6
-rw-r--r--Porting/Glossary16
-rw-r--r--Porting/config.sh3
-rw-r--r--Porting/config_H6
-rwxr-xr-xconfig_h.SH6
-rw-r--r--dump.c773
-rw-r--r--embed.fnc68
-rw-r--r--embed.h58
-rw-r--r--embedvar.h2
-rw-r--r--ext/Devel-Peek/Peek.xs19
-rw-r--r--intrpvar.h5
-rw-r--r--locale.c75
-rw-r--r--mad/Nomad.pm3012
-rw-r--r--mad/P5AST.pm541
-rw-r--r--mad/P5re.pm650
-rw-r--r--mad/PLXML.pm4162
-rw-r--r--mad/p5569
-rw-r--r--mad/t/p55.t178
-rw-r--r--madly.c26
-rw-r--r--makedef.pl7
-rw-r--r--op.c641
-rw-r--r--op.h104
-rw-r--r--pad.c22
-rw-r--r--pad.h2
-rw-r--r--parser.h19
-rw-r--r--perl.c43
-rw-r--r--perl.h25
-rw-r--r--perly.act1380
-rw-r--r--perly.c42
-rw-r--r--perly.h50
-rw-r--r--perly.tab1596
-rw-r--r--perly.y761
-rw-r--r--pp_ctl.c13
-rw-r--r--proto.h175
-rw-r--r--regen_perly.pl2
-rw-r--r--sv.c18
-rw-r--r--t/run/mad.t46
-rw-r--r--toke.c1213
-rw-r--r--uconfig.h10
-rw-r--r--uconfig.sh1
-rw-r--r--win32/config_H.gc6
-rw-r--r--win32/config_H.vc6
46 files changed, 1576 insertions, 14338 deletions
diff --git a/Configure b/Configure
index c84249f6cc..4e6315d12b 100755
--- a/Configure
+++ b/Configure
@@ -1042,10 +1042,6 @@ sPRIgldbl=''
sSCNfldbl=''
lseeksize=''
lseektype=''
-mad=''
-madlyh=''
-madlyobj=''
-madlysrc=''
make_set_make=''
d_mymalloc=''
freetype=''
@@ -20338,40 +20334,6 @@ EOM
*) groupstype="$gidtype";;
esac
-: MAD = Misc Attribute Definition
-
-if $test $patchlevel -lt 9; then
-: MAD is not available in 5.8.x or earlier.
- ans=n;
-else
- case "$mad" in
- $define|true|[yY]*) dflt='y' ;;
- *) dflt='n' ;;
- esac
- cat <<EOM
-
-Would you like to build with Misc Attribute Decoration? This is development
-work leading to a Perl 5 to Perl 6 convertor, which imposes a space and speed
-overhead on the interpreter.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
- rp='Build Perl with MAD?'
- . ./myread
-fi
-case "$ans" in
-y|Y) val="$define"
- madlyh='madly.h madly.act madly.tab'
- madlysrc='madly.c'
- madlyobj="madly$_o" ;;
-*) val="$undef"
- madlyh=''
- madlysrc=''
- madlyobj='' ;;
-esac
-set mad
-eval $setvar
-
: check whether make sets MAKE
echo " "
echo "Checking if your $make program sets \$(MAKE)..." >&4
@@ -23746,10 +23708,6 @@ lpr='$lpr'
ls='$ls'
lseeksize='$lseeksize'
lseektype='$lseektype'
-mad='$mad'
-madlyh='$madlyh'
-madlyobj='$madlyobj'
-madlysrc='$madlysrc'
mail='$mail'
mailx='$mailx'
make='$make'
diff --git a/Cross/Makefile-cross-SH b/Cross/Makefile-cross-SH
index 13945ceb19..eb673ce6fe 100644
--- a/Cross/Makefile-cross-SH
+++ b/Cross/Makefile-cross-SH
@@ -196,8 +196,6 @@ CLDFLAGS = $ldflags
mallocsrc = $mallocsrc
mallocobj = $mallocobj
-madlysrc = $madlysrc
-madlyobj = $madlyobj
LNS = $lns
# NOTE: some systems don't grok "cp -f". XXX Configure test needed?
CPS = $cp
@@ -351,11 +349,11 @@ c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro.c perl.c
c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c
-c5 = $(madlysrc) $(mallocsrc)
+c5 = $(mallocsrc)
c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c perlmain.c opmini.c
-obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT)
+obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT)
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) perl$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)
diff --git a/Cross/cflags-cross-arm b/Cross/cflags-cross-arm
index acec8cc80f..8ee55a5d31 100644
--- a/Cross/cflags-cross-arm
+++ b/Cross/cflags-cross-arm
@@ -78,7 +78,6 @@ for file do
gv) ;;
hv) ;;
locale) ;;
- madly) ;;
main) ;;
malloc) ;;
mg) ;;
diff --git a/MANIFEST b/MANIFEST
index 487e350a39..7ba8ccd7b2 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -4235,13 +4235,6 @@ lib/warnings.pm For "use warnings"
lib/warnings/register.pm For "use warnings::register"
lib/warnings.t See if warning controls work
locale.c locale-specific utility functions
-madly.c parser code for MAD build
-mad/Nomad.pm Converts MAD XML dump to Perl 5
-mad/p55 Perl 5 to Perl 5 translator - driver for nomad
-mad/P5AST.pm Used by nomad
-mad/P5re.pm Used by nomad
-mad/PLXML.pm Used by nomad
-mad/t/p55.t Test for the Perl 5 to Perl 5 translator
makedef.pl Create symbol export lists for linking
makedepend.SH Precursor to makedepend
make_ext.pl Used by Makefile to execute extension Makefiles
@@ -5305,7 +5298,6 @@ t/run/flib/t2.pm Test for .pmcs with -I/dir/
t/run/flib/t2.pmc Test for .pmcs with -I/dir/
t/run/fresh_perl.t Tests that require a fresh perl.
t/run/locale.t Tests related to locale handling
-t/run/mad.t Test vs MAD environment
t/run/noswitch.t Test aliasing ARGV for other switch tests
t/run/runenv.t Test if perl honors its environment variables.
t/run/script.t See if script invocation works
diff --git a/Makefile.SH b/Makefile.SH
index 8c6221ae29..8438c4b2bd 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -248,8 +248,6 @@ CLDFLAGS = $ldflags
mallocsrc = $mallocsrc
mallocobj = $mallocobj
-madlysrc = $madlysrc
-madlyobj = $madlyobj
LNS = $lns
# NOTE: some systems don't grok "cp -f". XXX Configure test needed?
CPS = $cp
@@ -476,13 +474,13 @@ c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro.c perl.c
c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c
c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c
c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c
-c5 = $(madlysrc) $(mallocsrc)
+c5 = $(mallocsrc)
c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c opmini.c perlmini.c
obj0 = op$(OBJ_EXT) perl$(OBJ_EXT)
obj0mini = perlmini$(OBJ_EXT) opmini$(OBJ_EXT) miniperlmain$(OBJ_EXT)
-obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT) keywords$(OBJ_EXT)
+obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT) keywords$(OBJ_EXT)
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT)
diff --git a/Porting/Glossary b/Porting/Glossary
index 9128f5f41a..c58fb5202f 100644
--- a/Porting/Glossary
+++ b/Porting/Glossary
@@ -3830,22 +3830,6 @@ lseektype (lseektype.U):
or whatever type is used to declare lseek offset's type in the
kernel (which also appears to be lseek's return type).
-mad (mad.U):
- This variable indicates that the Misc Attribute Definition code is to
- be compiled.
-
-madlyh (mad.U):
- If the Misc Attribute Decoration is to be compiled, this variable is
- set to the name of the extra header files to be used, else it is ''
-
-madlyobj (mad.U):
- If the Misc Attribute Decoration is to be compiled, this variable is
- set to the name of the extra object files to be used, else it is ''
-
-madlysrc (mad.U):
- If the Misc Attribute Decoration is to be compiled, this variable is
- set to the name of the extra C source files to be used, else it is ''
-
mail (Loc.U):
This variable is defined but not used by Configure.
The value is the empty string and is not useful.
diff --git a/Porting/config.sh b/Porting/config.sh
index 372acb5256..0a352e1e5b 100644
--- a/Porting/config.sh
+++ b/Porting/config.sh
@@ -822,9 +822,6 @@ ls='ls'
lseeksize='8'
lseektype='off_t'
mad='undef'
-madlyh=''
-madlyobj=''
-madlysrc=''
mail=''
mailx=''
make='make'
diff --git a/Porting/config_H b/Porting/config_H
index 6c1f125af3..9e99b54c5c 100644
--- a/Porting/config_H
+++ b/Porting/config_H
@@ -4132,12 +4132,6 @@
#define PERL_PRIeldbl "Le" /**/
#define PERL_SCNfldbl "Lf" /**/
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format
diff --git a/config_h.SH b/config_h.SH
index c320df38fe..db150a6deb 100755
--- a/config_h.SH
+++ b/config_h.SH
@@ -4425,12 +4425,6 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
#$d_PRIeldbl PERL_PRIeldbl $sPRIeldbl /**/
#$d_SCNfldbl PERL_SCNfldbl $sSCNfldbl /**/
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-#$mad PERL_MAD /**/
-
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format
diff --git a/dump.c b/dump.c
index 6bc0211718..9bbbe2dd17 100644
--- a/dump.c
+++ b/dump.c
@@ -884,7 +884,7 @@ S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) {
return FALSE;
}
-#define DUMP_OP_FLAGS(o,xml,level,file) \
+#define DUMP_OP_FLAGS(o,level,file) \
if (o->op_flags || o->op_slabbed || o->op_savefree || o->op_static) { \
SV * const tmpsv = newSVpvs(""); \
switch (o->op_flags & OPf_WANT) { \
@@ -906,22 +906,11 @@ S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) {
if (o->op_savefree) sv_catpvs(tmpsv, ",SAVEFREE"); \
if (o->op_static) sv_catpvs(tmpsv, ",STATIC"); \
if (o->op_folded) sv_catpvs(tmpsv, ",FOLDED"); \
- if (!xml) \
- Perl_dump_indent(aTHX_ level, file, "FLAGS = (%s)\n", \
- SvCUR(tmpsv) ? SvPVX_const(tmpsv) + 1 : "");\
- else \
- PerlIO_printf(file, " flags=\"%s\"", \
- SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : ""); \
+ Perl_dump_indent(aTHX_ level, file, "FLAGS = (%s)\n", \
+ SvCUR(tmpsv) ? SvPVX_const(tmpsv) + 1 : ""); \
}
-#if !defined(PERL_MAD)
-# define xmldump_attr1(level, file, pat, arg)
-#else
-# define xmldump_attr1(level, file, pat, arg) \
- S_xmldump_attr(aTHX_ level, file, pat, arg)
-#endif
-
-#define DUMP_OP_PRIVATE(o,xml,level,file) \
+#define DUMP_OP_PRIVATE(o,level,file) \
if (o->op_private) { \
U32 optype = o->op_type; \
U32 oppriv = o->op_private; \
@@ -1003,11 +992,8 @@ S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) {
&& oppriv & OPpSLICEWARNING ) \
sv_catpvs(tmpsv, ",SLICEWARNING"); \
if (SvCUR(tmpsv)) { \
- if (xml) \
- xmldump_attr1(level+1, file, "private=\"%s\"", SvPVX(tmpsv)+1); \
- else \
- Perl_dump_indent(aTHX_ level, file, "PRIVATE = (%s)\n", SvPVX_const(tmpsv) + 1); \
- } else if (!xml) \
+ Perl_dump_indent(aTHX_ level, file, "PRIVATE = (%s)\n", SvPVX_const(tmpsv) + 1); \
+ } else \
Perl_dump_indent(aTHX_ level, file, "PRIVATE = (0x%"UVxf")\n", \
(UV)oppriv); \
}
@@ -1073,49 +1059,9 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
Perl_dump_indent(aTHX_ level, file, "ADDR = 0x%"UVxf" => 0x%"UVxf"\n", (UV)o, (UV)o->op_next);
#endif
- DUMP_OP_FLAGS(o,0,level,file);
- DUMP_OP_PRIVATE(o,0,level,file);
-
-#ifdef PERL_MAD
- if (PL_madskills && o->op_madprop) {
- SV * const tmpsv = newSVpvs("");
- MADPROP* mp = o->op_madprop;
- Perl_dump_indent(aTHX_ level, file, "MADPROPS = {\n");
- level++;
- while (mp) {
- const char tmp = mp->mad_key;
- sv_setpvs(tmpsv,"'");
- if (tmp)
- sv_catpvn(tmpsv, &tmp, 1);
- sv_catpv(tmpsv, "'=");
- switch (mp->mad_type) {
- case MAD_NULL:
- sv_catpv(tmpsv, "NULL");
- Perl_dump_indent(aTHX_ level, file, "%s\n", SvPVX(tmpsv));
- break;
- case MAD_PV:
- sv_catpv(tmpsv, "<");
- sv_catpvn(tmpsv, (char*)mp->mad_val, mp->mad_vlen);
- sv_catpv(tmpsv, ">");
- Perl_dump_indent(aTHX_ level, file, "%s\n", SvPVX(tmpsv));
- break;
- case MAD_OP:
- if ((OP*)mp->mad_val) {
- Perl_dump_indent(aTHX_ level, file, "%s\n", SvPVX(tmpsv));
- do_op_dump(level, file, (OP*)mp->mad_val);
- }
- break;
- default:
- sv_catpv(tmpsv, "(UNK)");
- Perl_dump_indent(aTHX_ level, file, "%s\n", SvPVX(tmpsv));
- break;
- }
- mp = mp->mad_next;
- }
- level--;
- Perl_dump_indent(aTHX_ level, file, "}\n");
- }
-#endif
+ DUMP_OP_FLAGS(o,level,file);
+ DUMP_OP_PRIVATE(o,level,file);
+
switch (optype) {
case OP_AELEMFAST:
@@ -1130,11 +1076,6 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
const char * name;
SV * const tmpsv = newSVpvs_flags("", SVs_TEMP);
SV * const tmpsv2 = newSVpvs_flags("", SVs_TEMP);
-#ifdef PERL_MAD
- /* FIXME - is this making unwarranted assumptions about the
- UTF-8 cleanliness of the dump file handle? */
- SvUTF8_on(tmpsv);
-#endif
gv_fullname3(tmpsv, MUTABLE_GV(cSVOPo->op_sv), NULL);
name = SvPV_const(tmpsv, len);
Perl_dump_indent(aTHX_ level, file, "GV = %s\n",
@@ -2461,11 +2402,6 @@ Perl_debop(pTHX_ const OP *o)
case OP_GV:
if (cGVOPo_gv) {
SV * const sv = newSV(0);
-#ifdef PERL_MAD
- /* FIXME - is this making unwarranted assumptions about the
- UTF-8 cleanliness of the dump file handle? */
- SvUTF8_on(sv);
-#endif
gv_fullname3(sv, cGVOPo_gv, NULL);
PerlIO_printf(Perl_debug_log, "(%s)", SvPV_nolen_const(sv));
SvREFCNT_dec_NN(sv);
@@ -2578,697 +2514,6 @@ Perl_debprofdump(pTHX)
}
}
-#ifdef PERL_MAD
-/*
- * XML variants of most of the above routines
- */
-
-STATIC void
-S_xmldump_attr(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
-{
- va_list args;
-
- PERL_ARGS_ASSERT_XMLDUMP_ATTR;
-
- PerlIO_printf(file, "\n ");
- va_start(args, pat);
- xmldump_vindent(level, file, pat, &args);
- va_end(args);
-}
-
-
-void
-Perl_xmldump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
-{
- va_list args;
- PERL_ARGS_ASSERT_XMLDUMP_INDENT;
- va_start(args, pat);
- xmldump_vindent(level, file, pat, &args);
- va_end(args);
-}
-
-void
-Perl_xmldump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args)
-{
- PERL_ARGS_ASSERT_XMLDUMP_VINDENT;
-
- PerlIO_printf(file, "%*s", (int)(level*PL_dumpindent), "");
- PerlIO_vprintf(file, pat, *args);
-}
-
-void
-Perl_xmldump_all(pTHX)
-{
- xmldump_all_perl(FALSE);
-}
-
-void
-Perl_xmldump_all_perl(pTHX_ bool justperl PERL_UNUSED_DECL)
-{
- PerlIO_setlinebuf(PL_xmlfp);
- if (PL_main_root)
- op_xmldump(PL_main_root);
- /* someday we might call this, when it outputs XML: */
- /* xmldump_packsubs_perl(PL_defstash, justperl); */
- if (PL_xmlfp != (PerlIO*)PerlIO_stdout())
- PerlIO_close(PL_xmlfp);
- PL_xmlfp = 0;
-}
-
-void
-Perl_xmldump_packsubs(pTHX_ const HV *stash)
-{
- PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS;
- xmldump_packsubs_perl(stash, FALSE);
-}
-
-void
-Perl_xmldump_packsubs_perl(pTHX_ const HV *stash, bool justperl)
-{
- I32 i;
- HE *entry;
-
- PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS_PERL;
-
- if (!HvARRAY(stash))
- return;
- for (i = 0; i <= (I32) HvMAX(stash); i++) {
- for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
- GV *gv = MUTABLE_GV(HeVAL(entry));
- HV *hv;
- if (SvTYPE(gv) != SVt_PVGV || !GvGP(gv))
- continue;
- if (GvCVu(gv))
- xmldump_sub_perl(gv, justperl);
- if (GvFORM(gv))
- xmldump_form(gv);
- if (HeKEY(entry)[HeKLEN(entry)-1] == ':'
- && (hv = GvHV(gv)) && hv != PL_defstash)
- xmldump_packsubs_perl(hv, justperl); /* nested package */
- }
- }
-}
-
-void
-Perl_xmldump_sub(pTHX_ const GV *gv)
-{
- PERL_ARGS_ASSERT_XMLDUMP_SUB;
- xmldump_sub_perl(gv, FALSE);
-}
-
-void
-Perl_xmldump_sub_perl(pTHX_ const GV *gv, bool justperl)
-{
- SV * sv;
-
- PERL_ARGS_ASSERT_XMLDUMP_SUB_PERL;
-
- if (justperl && (CvISXSUB(GvCV(gv)) || !CvROOT(GvCV(gv))))
- return;
-
- sv = sv_newmortal();
- gv_fullname3(sv, gv, NULL);
- Perl_xmldump_indent(aTHX_ 0, PL_xmlfp, "\nSUB %s = ", SvPVX(sv));
- if (CvXSUB(GvCV(gv)))
- Perl_xmldump_indent(aTHX_ 0, PL_xmlfp, "(xsub 0x%"UVxf" %d)\n",
- PTR2UV(CvXSUB(GvCV(gv))),
- (int)CvXSUBANY(GvCV(gv)).any_i32);
- else if (CvROOT(GvCV(gv)))
- op_xmldump(CvROOT(GvCV(gv)));
- else
- Perl_xmldump_indent(aTHX_ 0, PL_xmlfp, "<undef>\n");
-}
-
-void
-Perl_xmldump_form(pTHX_ const GV *gv)
-{
- SV * const sv = sv_newmortal();
-
- PERL_ARGS_ASSERT_XMLDUMP_FORM;
-
- gv_fullname3(sv, gv, NULL);
- Perl_xmldump_indent(aTHX_ 0, PL_xmlfp, "\nFORMAT %s = ", SvPVX(sv));
- if (CvROOT(GvFORM(gv)))
- op_xmldump(CvROOT(GvFORM(gv)));
- else
- Perl_xmldump_indent(aTHX_ 0, PL_xmlfp, "<undef>\n");
-}
-
-void
-Perl_xmldump_eval(pTHX)
-{
- op_xmldump(PL_eval_root);
-}
-
-char *
-Perl_sv_catxmlsv(pTHX_ SV *dsv, SV *ssv)
-{
- PERL_ARGS_ASSERT_SV_CATXMLSV;
- return sv_catxmlpvn(dsv, SvPVX(ssv), SvCUR(ssv), SvUTF8(ssv));
-}
-
-char *
-Perl_sv_catxmlpv(pTHX_ SV *dsv, const char *pv, int utf8)
-{
- PERL_ARGS_ASSERT_SV_CATXMLPV;
- return sv_catxmlpvn(dsv, pv, strlen(pv), utf8);
-}
-
-char *
-Perl_sv_catxmlpvn(pTHX_ SV *dsv, const char *pv, STRLEN len, int utf8)
-{
- unsigned int c;
- const char * const e = pv + len;
- const char * const start = pv;
- STRLEN dsvcur;
- STRLEN cl;
-
- PERL_ARGS_ASSERT_SV_CATXMLPVN;
-
- sv_catpvs(dsv,"");
- dsvcur = SvCUR(dsv); /* in case we have to restart */
-
- retry:
- while (pv < e) {
- if (utf8) {
- c = utf8_to_uvchr_buf((U8*)pv, (U8*)e, &cl);
- if (cl == 0) {
- SvCUR(dsv) = dsvcur;
- pv = start;
- utf8 = 0;
- goto retry;
- }
- }
- else
- c = (*pv & 255);
-
- if (isCNTRL_L1(c)
- && c != '\t'
- && c != '\n'
- && c != '\r'
- && c != LATIN1_TO_NATIVE(0x85))
- {
- Perl_sv_catpvf(aTHX_ dsv, "STUPIDXML(#x%X)", c);
- }
- else switch (c) {
- case '<':
- sv_catpvs(dsv, "&lt;");
- break;
- case '>':
- sv_catpvs(dsv, "&gt;");
- break;
- case '&':
- sv_catpvs(dsv, "&amp;");
- break;
- case '"':
- sv_catpvs(dsv, "&#34;");
- break;
- default:
- if (c < 0xD800) {
- if (! isPRINT(c)) {
- Perl_sv_catpvf(aTHX_ dsv, "&#x%X;", c);
- }
- else {
- const char string = (char) c;
- sv_catpvn(dsv, &string, 1);
- }
- break;
- }
- if ((c >= 0xD800 && c <= 0xDB7F) ||
- (c >= 0xDC00 && c <= 0xDFFF) ||
- (c >= 0xFFF0 && c <= 0xFFFF) ||
- c > 0x10ffff)
- Perl_sv_catpvf(aTHX_ dsv, "STUPIDXML(#x%X)", c);
- else
- Perl_sv_catpvf(aTHX_ dsv, "&#x%X;", c);
- }
-
- if (utf8)
- pv += UTF8SKIP(pv);
- else
- pv++;
- }
-
- return SvPVX(dsv);
-}
-
-char *
-Perl_sv_xmlpeek(pTHX_ SV *sv)
-{
- SV * const t = sv_newmortal();
- STRLEN n_a;
- int unref = 0;
-
- PERL_ARGS_ASSERT_SV_XMLPEEK;
-
- sv_utf8_upgrade(t);
- sv_setpvs(t, "");
- /* retry: */
- if (!sv) {
- sv_catpv(t, "VOID=\"\"");
- goto finish;
- }
- else if (sv == (const SV *)0x55555555 || ((char)SvTYPE(sv)) == 'U') {
- sv_catpv(t, "WILD=\"\"");
- goto finish;
- }
- else if (sv == &PL_sv_undef || sv == &PL_sv_no || sv == &PL_sv_yes || sv == &PL_sv_placeholder) {
- if (sv == &PL_sv_undef) {
- sv_catpv(t, "SV_UNDEF=\"1\"");
- if (!(SvFLAGS(sv) & (SVf_OK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- SvREADONLY(sv))
- goto finish;
- }
- else if (sv == &PL_sv_no) {
- sv_catpv(t, "SV_NO=\"1\"");
- if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
- SVp_POK|SVp_NOK)) &&
- SvCUR(sv) == 0 &&
- SvNVX(sv) == 0.0)
- goto finish;
- }
- else if (sv == &PL_sv_yes) {
- sv_catpv(t, "SV_YES=\"1\"");
- if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
- SVp_POK|SVp_NOK)) &&
- SvCUR(sv) == 1 &&
- SvPVX(sv) && *SvPVX(sv) == '1' &&
- SvNVX(sv) == 1.0)
- goto finish;
- }
- else {
- sv_catpv(t, "SV_PLACEHOLDER=\"1\"");
- if (!(SvFLAGS(sv) & (SVf_OK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- SvREADONLY(sv))
- goto finish;
- }
- sv_catpv(t, " XXX=\"\" ");
- }
- else if (SvREFCNT(sv) == 0) {
- sv_catpv(t, " refcnt=\"0\"");
- unref++;
- }
- else if (DEBUG_R_TEST_) {
- int is_tmp = 0;
- SSize_t ix;
- /* is this SV on the tmps stack? */
- for (ix=PL_tmps_ix; ix>=0; ix--) {
- if (PL_tmps_stack[ix] == sv) {
- is_tmp = 1;
- break;
- }
- }
- if (SvREFCNT(sv) > 1)
- Perl_sv_catpvf(aTHX_ t, " DRT=\"<%"UVuf"%s>\"", (UV)SvREFCNT(sv),
- is_tmp ? "T" : "");
- else if (is_tmp)
- sv_catpv(t, " DRT=\"<T>\"");
- }
-
- if (SvROK(sv)) {
- sv_catpv(t, " ROK=\"\"");
- }
- switch (SvTYPE(sv)) {
- default:
- sv_catpv(t, " FREED=\"1\"");
- goto finish;
-
- case SVt_NULL:
- sv_catpv(t, " UNDEF=\"1\"");
- goto finish;
- case SVt_IV:
- sv_catpv(t, " IV=\"");
- break;
- case SVt_NV:
- sv_catpv(t, " NV=\"");
- break;
- case SVt_PV:
- sv_catpv(t, " PV=\"");
- break;
- case SVt_PVIV:
- sv_catpv(t, " PVIV=\"");
- break;
- case SVt_PVNV:
- sv_catpv(t, " PVNV=\"");
- break;
- case SVt_PVMG:
- sv_catpv(t, " PVMG=\"");
- break;
- case SVt_PVLV:
- sv_catpv(t, " PVLV=\"");
- break;
- case SVt_PVAV:
- sv_catpv(t, " AV=\"");
- break;
- case SVt_PVHV:
- sv_catpv(t, " HV=\"");
- break;
- case SVt_PVCV:
- if (CvGV(sv))
- Perl_sv_catpvf(aTHX_ t, " CV=\"(%s)\"", GvNAME(CvGV(sv)));
- else
- sv_catpv(t, " CV=\"()\"");
- goto finish;
- case SVt_PVGV:
- sv_catpv(t, " GV=\"");
- break;
- case SVt_INVLIST:
- sv_catpv(t, " DUMMY=\"");
- break;
- case SVt_REGEXP:
- sv_catpv(t, " REGEXP=\"");
- break;
- case SVt_PVFM:
- sv_catpv(t, " FM=\"");
- break;
- case SVt_PVIO:
- sv_catpv(t, " IO=\"");
- break;
- }
-
- if (SvPOKp(sv)) {
- if (SvPVX(sv)) {
- sv_catxmlsv(t, sv);
- }
- }
- else if (SvNOKp(sv)) {
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- Perl_sv_catpvf(aTHX_ t, "%"NVgf"",SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- }
- else if (SvIOKp(sv)) {
- if (SvIsUV(sv))
- Perl_sv_catpvf(aTHX_ t, "%"UVuf"", (UV)SvUVX(sv));
- else
- Perl_sv_catpvf(aTHX_ t, "%"IVdf"", (IV)SvIVX(sv));
- }
- else
- sv_catpv(t, "");
- sv_catpv(t, "\"");
-
- finish:
- while (unref--)
- sv_catpv(t, ")");
- return SvPV(t, n_a);
-}
-
-void
-Perl_do_pmop_xmldump(pTHX_ I32 level, PerlIO *file, const PMOP *pm)
-{
- PERL_ARGS_ASSERT_DO_PMOP_XMLDUMP;
-
- if (!pm) {
- Perl_xmldump_indent(aTHX_ level, file, "<pmop/>\n");
- return;
- }
- Perl_xmldump_indent(aTHX_ level, file, "<pmop \n");
- level++;
- if (PM_GETRE(pm)) {
- REGEXP *const r = PM_GETRE(pm);
- SV * const tmpsv = newSVpvn_utf8("", 0, TRUE);
- sv_catxmlsv(tmpsv, MUTABLE_SV(r));
- Perl_xmldump_indent(aTHX_ level, file, "pre=\"%s\"\n",
- SvPVX(tmpsv));
- SvREFCNT_dec_NN(tmpsv);
- Perl_xmldump_indent(aTHX_ level, file, "when=\"%s\"\n",
- (pm->op_private & OPpRUNTIME) ? "RUN" : "COMP");
- }
- else
- Perl_xmldump_indent(aTHX_ level, file, "pre=\"\" when=\"RUN\"\n");
- if (pm->op_pmflags || (PM_GETRE(pm) && RX_CHECK_SUBSTR(PM_GETRE(pm)))) {
- SV * const tmpsv = pm_description(pm);
- Perl_xmldump_indent(aTHX_ level, file, "pmflags=\"%s\"\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : "");
- SvREFCNT_dec_NN(tmpsv);
- }
-
- level--;
- if (pm->op_type != OP_PUSHRE && pm->op_pmreplrootu.op_pmreplroot) {
- Perl_xmldump_indent(aTHX_ level, file, ">\n");
- Perl_xmldump_indent(aTHX_ level+1, file, "<pm_repl>\n");
- do_op_xmldump(level+2, file, pm->op_pmreplrootu.op_pmreplroot);
- Perl_xmldump_indent(aTHX_ level+1, file, "</pm_repl>\n");
- Perl_xmldump_indent(aTHX_ level, file, "</pmop>\n");
- }
- else
- Perl_xmldump_indent(aTHX_ level, file, "/>\n");
-}
-
-void
-Perl_pmop_xmldump(pTHX_ const PMOP *pm)
-{
- do_pmop_xmldump(0, PL_xmlfp, pm);
-}
-
-void
-Perl_do_op_xmldump(pTHX_ I32 level, PerlIO *file, const OP *o)
-{
- UV seq;
- int contents = 0;
- const OPCODE optype = o->op_type;
-
- PERL_ARGS_ASSERT_DO_OP_XMLDUMP;
-
- if (!o)
- return;
- seq = sequence_num(o);
- Perl_xmldump_indent(aTHX_ level, file,
- "<op_%s seq=\"%"UVuf" -> ",
- OP_NAME(o),
- seq);
- level++;
- if (o->op_next)
- PerlIO_printf(file, seq ? "%"UVuf"\"" : "(%"UVuf")\"",
- sequence_num(o->op_next));
- else
- PerlIO_printf(file, "DONE\"");
-
- if (o->op_targ) {
- if (optype == OP_NULL)
- {
- PerlIO_printf(file, " was=\"%s\"", PL_op_name[o->op_targ]);
- if (o->op_targ == OP_NEXTSTATE)
- {
- if (CopLINE(cCOPo))
- PerlIO_printf(file, " line=\"%"UVuf"\"",
- (UV)CopLINE(cCOPo));
- if (CopSTASHPV(cCOPo))
- PerlIO_printf(file, " package=\"%s\"",
- CopSTASHPV(cCOPo));
- if (CopLABEL(cCOPo))
- PerlIO_printf(file, " label=\"%s\"",
- CopLABEL(cCOPo));
- }
- }
- else
- PerlIO_printf(file, " targ=\"%ld\"", (long)o->op_targ);
- }
-#ifdef DUMPADDR
- PerlIO_printf(file, " addr=\"0x%"UVxf" => 0x%"UVxf"\"", (UV)o, (UV)o->op_next);
-#endif
-
- DUMP_OP_FLAGS(o,1,0,file);
- DUMP_OP_PRIVATE(o,1,0,file);
-
- switch (optype) {
- case OP_AELEMFAST:
- if (o->op_flags & OPf_SPECIAL) {
- break;
- }
- case OP_GVSV:
- case OP_GV:
-#ifdef USE_ITHREADS
- S_xmldump_attr(aTHX_ level, file, "padix=\"%" IVdf "\"", (IV)cPADOPo->op_padix);
-#else
- if (cSVOPo->op_sv) {
- SV * const tmpsv1 = newSVpvn_utf8(NULL, 0, TRUE);
- SV * const tmpsv2 = newSVpvn_utf8("", 0, TRUE);
- char *s;
- STRLEN len;
- ENTER;
- SAVEFREESV(tmpsv1);
- SAVEFREESV(tmpsv2);
- gv_fullname3(tmpsv1, MUTABLE_GV(cSVOPo->op_sv), NULL);
- s = SvPV(tmpsv1,len);
- sv_catxmlpvn(tmpsv2, s, len, 1);
- S_xmldump_attr(aTHX_ level, file, "gv=\"%s\"", SvPV(tmpsv2, len));
- LEAVE;
- }
- else
- S_xmldump_attr(aTHX_ level, file, "gv=\"NULL\"");
-#endif
- break;
- case OP_CONST:
- case OP_HINTSEVAL:
- case OP_METHOD_NAMED:
-#ifndef USE_ITHREADS
- /* with ITHREADS, consts are stored in the pad, and the right pad
- * may not be active here, so skip */
- S_xmldump_attr(aTHX_ level, file, "%s", sv_xmlpeek(cSVOPo_sv));
-#endif
- break;
- case OP_ANONCODE:
- if (!contents) {
- contents = 1;
- PerlIO_printf(file, ">\n");
- }
- do_op_xmldump(level+1, file, CvROOT(cSVOPo_sv));
- break;
- case OP_NEXTSTATE:
- case OP_DBSTATE:
- if (CopLINE(cCOPo))
- S_xmldump_attr(aTHX_ level, file, "line=\"%"UVuf"\"",
- (UV)CopLINE(cCOPo));
- if (CopSTASHPV(cCOPo))
- S_xmldump_attr(aTHX_ level, file, "package=\"%s\"",
- CopSTASHPV(cCOPo));
- if (CopLABEL(cCOPo))
- S_xmldump_attr(aTHX_ level, file, "label=\"%s\"",
- CopLABEL(cCOPo));
- break;
- case OP_ENTERLOOP:
- S_xmldump_attr(aTHX_ level, file, "redo=\"");
- if (cLOOPo->op_redoop)
- PerlIO_printf(file, "%"UVuf"\"", sequence_num(cLOOPo->op_redoop));
- else
- PerlIO_printf(file, "DONE\"");
- S_xmldump_attr(aTHX_ level, file, "next=\"");
- if (cLOOPo->op_nextop)
- PerlIO_printf(file, "%"UVuf"\"", sequence_num(cLOOPo->op_nextop));
- else
- PerlIO_printf(file, "DONE\"");
- S_xmldump_attr(aTHX_ level, file, "last=\"");
- if (cLOOPo->op_lastop)
- PerlIO_printf(file, "%"UVuf"\"", sequence_num(cLOOPo->op_lastop));
- else
- PerlIO_printf(file, "DONE\"");
- break;
- case OP_COND_EXPR:
- case OP_RANGE:
- case OP_MAPWHILE:
- case OP_GREPWHILE:
- case OP_OR:
- case OP_AND:
- S_xmldump_attr(aTHX_ level, file, "other=\"");
- if (cLOGOPo->op_other)
- PerlIO_printf(file, "%"UVuf"\"", sequence_num(cLOGOPo->op_other));
- else
- PerlIO_printf(file, "DONE\"");
- break;
- case OP_LEAVE:
- case OP_LEAVEEVAL:
- case OP_LEAVESUB:
- case OP_LEAVESUBLV:
- case OP_LEAVEWRITE:
- case OP_SCOPE:
- if (o->op_private & OPpREFCOUNTED)
- S_xmldump_attr(aTHX_ level, file, "refcnt=\"%"UVuf"\"", (UV)o->op_targ);
- break;
- default:
- break;
- }
-
- if (PL_madskills && o->op_madprop) {
- char prevkey = '\0';
- SV * const tmpsv = newSVpvn_utf8("", 0, TRUE);
- const MADPROP* mp = o->op_madprop;
-
- if (!contents) {
- contents = 1;
- PerlIO_printf(file, ">\n");
- }
- Perl_xmldump_indent(aTHX_ level, file, "<madprops>\n");
- level++;
- while (mp) {
- char tmp = mp->mad_key;
- sv_setpvs(tmpsv,"\"");
- if (tmp)
- sv_catxmlpvn(tmpsv, &tmp, 1, 0);
- if ((tmp == '_') || (tmp == '#')) /* '_' '#' whitespace belong to the previous token. */
- sv_catxmlpvn(tmpsv, &prevkey, 1, 0);
- else
- prevkey = tmp;
- sv_catpv(tmpsv, "\"");
- switch (mp->mad_type) {
- case MAD_NULL:
- sv_catpv(tmpsv, "NULL");
- Perl_xmldump_indent(aTHX_ level, file, "<mad_null key=%s/>\n", SvPVX(tmpsv));
- break;
- case MAD_PV:
- sv_catpv(tmpsv, " val=\"");
- sv_catxmlpvn(tmpsv, (char*)mp->mad_val, mp->mad_vlen,1);
- sv_catpv(tmpsv, "\"");
- Perl_xmldump_indent(aTHX_ level, file, "<mad_pv key=%s/>\n", SvPVX(tmpsv));
- break;
- case MAD_SV:
- sv_catpv(tmpsv, " val=\"");
- sv_catxmlsv(tmpsv, MUTABLE_SV(mp->mad_val));
- sv_catpv(tmpsv, "\"");
- Perl_xmldump_indent(aTHX_ level, file, "<mad_sv key=%s/>\n", SvPVX(tmpsv));
- break;
- case MAD_OP:
- if ((OP*)mp->mad_val) {
- Perl_xmldump_indent(aTHX_ level, file, "<mad_op key=%s>\n", SvPVX(tmpsv));
- do_op_xmldump(level+1, file, (OP*)mp->mad_val);
- Perl_xmldump_indent(aTHX_ level, file, "</mad_op>\n");
- }
- break;
- default:
- Perl_xmldump_indent(aTHX_ level, file, "<mad_unk key=%s/>\n", SvPVX(tmpsv));
- break;
- }
- mp = mp->mad_next;
- }
- level--;
- Perl_xmldump_indent(aTHX_ level, file, "</madprops>\n");
-
- SvREFCNT_dec_NN(tmpsv);
- }
-
- switch (optype) {
- case OP_PUSHRE:
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- if (!contents) {
- contents = 1;
- PerlIO_printf(file, ">\n");
- }
- do_pmop_xmldump(level, file, cPMOPo);
- break;
- default:
- break;
- }
-
- if (o->op_flags & OPf_KIDS) {
- OP *kid;
- if (!contents) {
- contents = 1;
- PerlIO_printf(file, ">\n");
- }
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
- do_op_xmldump(level, file, kid);
- }
-
- if (contents)
- Perl_xmldump_indent(aTHX_ level-1, file, "</op_%s>\n", OP_NAME(o));
- else
- PerlIO_printf(file, " />\n");
-}
-
-void
-Perl_op_xmldump(pTHX_ const OP *o)
-{
- PERL_ARGS_ASSERT_OP_XMLDUMP;
-
- do_op_xmldump(0, PL_xmlfp, o);
-}
-#endif
/*
* Local variables:
diff --git a/embed.fnc b/embed.fnc
index b576d89bf4..74b10cebe7 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -949,11 +949,7 @@ Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv
Apd |CV* |newCONSTSUB_flags|NULLOK HV* stash \
|NULLOK const char* name|STRLEN len \
|U32 flags|NULLOK SV* sv
-#ifdef PERL_MAD
-Ap |OP* |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block
-#else
Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block
-#endif
Apda |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
Apda |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off
Apda |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other
@@ -1055,11 +1051,7 @@ p |void |opslab_free_nopad|NN OPSLAB *slab
p |void |opslab_force_free|NN OPSLAB *slab
#endif
: Used in perly.y
-#ifdef PERL_MAD
-p |OP* |package |NN OP* o
-#else
p |void |package |NN OP* o
-#endif
: Used in perly.y
p |void |package_version|NN OP* v
: Used in toke.c and perly.y
@@ -1593,12 +1585,7 @@ Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash
: Used in gv.c, hv.c
p |void |unshare_hek |NULLOK HEK* hek
: Used in perly.y
-#ifdef PERL_MAD
-p |OP * |utilize |int aver|I32 floor|NULLOK OP* version \
- |NN OP* idop|NULLOK OP* arg
-#else
p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg
-#endif
Ap |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
Ap |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
AdpPR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e
@@ -2494,9 +2481,6 @@ s |void |deb_stack_n |NN SV** stack_base|I32 stack_min \
#endif
: pad API
-#ifdef PERL_MAD
-Mnpd |void |pad_peg |NN const char* s
-#endif
Apda |PADLIST*|pad_new |int flags
#if defined(PERL_IN_PAD_C)
s |PADOFFSET|pad_alloc_name|NN SV *namesv|U32 flags \
@@ -2663,58 +2647,6 @@ Apnod |Size_t |my_strlcat |NULLOK char *dst|NULLOK const char *src|Size_t size
Apnod |Size_t |my_strlcpy |NULLOK char *dst|NULLOK const char *src|Size_t size
#endif
-#ifdef PERL_MAD
-#if defined(PERL_IN_DUMP_C)
-sf |void |xmldump_attr |I32 level|NN PerlIO *file|NN const char* pat \
- |...
-#endif
-Mfp |void |xmldump_indent |I32 level|NN PerlIO *file|NN const char* pat \
- |...
-Mp |void |xmldump_vindent|I32 level|NN PerlIO *file|NN const char* pat \
- |NULLOK va_list *args
-Mp |void |xmldump_all
-p |void |xmldump_all_perl |bool justperl
-Mp |void |xmldump_packsubs |NN const HV* stash
-p |void |xmldump_packsubs_perl |NN const HV* stash|bool justperl
-Mp |void |xmldump_sub |NN const GV* gv
-Mp |void |xmldump_sub_perl |NN const GV* gv|bool justperl
-Mp |void |xmldump_form |NN const GV* gv
-Mp |void |xmldump_eval
-Mp |char* |sv_catxmlsv |NN SV *dsv|NN SV *ssv
-Mp |char* |sv_catxmlpvn |NN SV *dsv|NN const char *pv|STRLEN len|int utf8
-Mp |char* |sv_catxmlpv |NN SV *dsv|NN const char *pv|int utf8
-Mp |char* |sv_xmlpeek |NN SV* sv
-Mp |void |do_pmop_xmldump|I32 level|NN PerlIO *file \
- |NULLOK const PMOP *pm
-Mp |void |pmop_xmldump |NULLOK const PMOP* pm
-Mp |void |do_op_xmldump |I32 level|NN PerlIO *file|NULLOK const OP *o
-Mp |void |op_xmldump |NN const OP *o
-
-Mp |TOKEN* |newTOKEN |I32 optype|YYSTYPE lval \
- |NULLOK MADPROP* madprop
-Mp |void |token_free |NN TOKEN *tk
-Mp |void |token_getmad |NN TOKEN *tk|NULLOK OP *o|char slot
-Mp |void |op_getmad_weak |NULLOK OP* from|NULLOK OP* o|char slot
-Mp |void |op_getmad |NULLOK OP* from|NULLOK OP* o|char slot
-Mp |void |prepend_madprops|NULLOK MADPROP* mp|NULLOK OP* o|char slot
-Mp |void |append_madprops|NULLOK MADPROP* tm|NULLOK OP* o|char slot
-Mp |void |addmad |NULLOK MADPROP* tm|NULLOK MADPROP** root \
- |char slot
-Mp |MADPROP*|newMADsv |char key|NN SV* sv
-Mp |MADPROP*|newMADPROP |char key|char type|NULLOK void* val \
- |I32 vlen
-Mp |void |mad_free |NULLOK MADPROP* mp
-
-# if defined(PERL_IN_TOKE_C)
-s |char* |skipspace0 |NN char *s
-s |char* |skipspace1 |NN char *s
-s |char* |skipspace2 |NN char *s|NULLOK SV **sv
-s |void |start_force |int where
-s |void |curmad |char slot|NULLOK SV *sv
-# endif
-Mp |int |madlex
-Mp |int |madparse |int gramtype
-#endif
#if !defined(HAS_SIGNBIT)
AMdnoP |int |Perl_signbit |NV f
#endif
diff --git a/embed.h b/embed.h
index c139c1e95e..b236adae1c 100644
--- a/embed.h
+++ b/embed.h
@@ -352,6 +352,7 @@
#define newCONSTSUB(a,b,c) Perl_newCONSTSUB(aTHX_ a,b,c)
#define newCONSTSUB_flags(a,b,c,d,e) Perl_newCONSTSUB_flags(aTHX_ a,b,c,d,e)
#define newCVREF(a,b) Perl_newCVREF(aTHX_ a,b)
+#define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c)
#define newFOROP(a,b,c,d,e) Perl_newFOROP(aTHX_ a,b,c,d,e)
#define newGIVENOP(a,b,c) Perl_newGIVENOP(aTHX_ a,b,c)
#define newGVOP(a,b,c) Perl_newGVOP(aTHX_ a,b,c)
@@ -733,9 +734,6 @@
#if !(defined(NO_MATHOMS))
#define sv_nounlocking(a) Perl_sv_nounlocking(aTHX_ a)
#endif
-#if !(defined(PERL_MAD))
-#define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c)
-#endif
#if !(defined(_MSC_VER))
#ifndef PERL_IMPLICIT_CONTEXT
#define die Perl_die
@@ -813,9 +811,6 @@
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
#define _get_regclass_nonbitmap_data(a,b,c,d,e) Perl__get_regclass_nonbitmap_data(aTHX_ a,b,c,d,e)
#endif
-#if defined(PERL_MAD)
-#define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c)
-#endif
#if defined(UNLINK_ALL_VERSIONS)
#define unlnk(a) Perl_unlnk(aTHX_ a)
#endif
@@ -1238,6 +1233,7 @@
#define oopsHV(a) Perl_oopsHV(aTHX_ a)
#define op_const_sv(a,b) Perl_op_const_sv(aTHX_ a,b)
#define op_unscope(a) Perl_op_unscope(aTHX_ a)
+#define package(a) Perl_package(aTHX_ a)
#define package_version(a) Perl_package_version(aTHX_ a)
#define pad_block_start(a) Perl_pad_block_start(aTHX_ a)
#define pad_fixup_inner_anons(a,b,c) Perl_pad_fixup_inner_anons(aTHX_ a,b,c)
@@ -1287,6 +1283,7 @@
#define tied_method Perl_tied_method
#endif
#define unshare_hek(a) Perl_unshare_hek(aTHX_ a)
+#define utilize(a,b,c,d,e) Perl_utilize(aTHX_ a,b,c,d,e)
#define vivify_ref(a,b) Perl_vivify_ref(aTHX_ a,b)
#define wait4pid(a,b,c) Perl_wait4pid(aTHX_ a,b,c)
#define watch(a) Perl_watch(aTHX_ a)
@@ -1309,10 +1306,6 @@
# if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION))
#define do_exec(a) Perl_do_exec(aTHX_ a)
# endif
-# if !(defined(PERL_MAD))
-#define package(a) Perl_package(aTHX_ a)
-#define utilize(a,b,c,d,e) Perl_utilize(aTHX_ a,b,c,d,e)
-# endif
# if !(defined(_MSC_VER))
#define magic_regdatum_set(a,b) Perl_magic_regdatum_set(aTHX_ a,b)
# endif
@@ -1706,13 +1699,6 @@
#define tokeq(a) S_tokeq(aTHX_ a)
#define update_debugger_info(a,b,c) S_update_debugger_info(aTHX_ a,b,c)
#define yywarn(a,b) S_yywarn(aTHX_ a,b)
-# if defined(PERL_MAD)
-#define curmad(a,b) S_curmad(aTHX_ a,b)
-#define skipspace0(a) S_skipspace0(aTHX_ a)
-#define skipspace1(a) S_skipspace1(aTHX_ a)
-#define skipspace2(a,b) S_skipspace2(aTHX_ a,b)
-#define start_force(a) S_start_force(aTHX_ a)
-# endif
# endif
# if defined(PERL_IN_UNIVERSAL_C)
#define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d)
@@ -1736,44 +1722,6 @@
#define mem_log_common S_mem_log_common
# endif
# endif
-# if defined(PERL_MAD)
-#define addmad(a,b,c) Perl_addmad(aTHX_ a,b,c)
-#define append_madprops(a,b,c) Perl_append_madprops(aTHX_ a,b,c)
-#define do_op_xmldump(a,b,c) Perl_do_op_xmldump(aTHX_ a,b,c)
-#define do_pmop_xmldump(a,b,c) Perl_do_pmop_xmldump(aTHX_ a,b,c)
-#define mad_free(a) Perl_mad_free(aTHX_ a)
-#define madlex() Perl_madlex(aTHX)
-#define madparse(a) Perl_madparse(aTHX_ a)
-#define newMADPROP(a,b,c,d) Perl_newMADPROP(aTHX_ a,b,c,d)
-#define newMADsv(a,b) Perl_newMADsv(aTHX_ a,b)
-#define newTOKEN(a,b,c) Perl_newTOKEN(aTHX_ a,b,c)
-#define op_getmad(a,b,c) Perl_op_getmad(aTHX_ a,b,c)
-#define op_getmad_weak(a,b,c) Perl_op_getmad_weak(aTHX_ a,b,c)
-#define op_xmldump(a) Perl_op_xmldump(aTHX_ a)
-#define package(a) Perl_package(aTHX_ a)
-#define pad_peg Perl_pad_peg
-#define pmop_xmldump(a) Perl_pmop_xmldump(aTHX_ a)
-#define prepend_madprops(a,b,c) Perl_prepend_madprops(aTHX_ a,b,c)
-#define sv_catxmlpv(a,b,c) Perl_sv_catxmlpv(aTHX_ a,b,c)
-#define sv_catxmlpvn(a,b,c,d) Perl_sv_catxmlpvn(aTHX_ a,b,c,d)
-#define sv_catxmlsv(a,b) Perl_sv_catxmlsv(aTHX_ a,b)
-#define sv_xmlpeek(a) Perl_sv_xmlpeek(aTHX_ a)
-#define token_free(a) Perl_token_free(aTHX_ a)
-#define token_getmad(a,b,c) Perl_token_getmad(aTHX_ a,b,c)
-#define utilize(a,b,c,d,e) Perl_utilize(aTHX_ a,b,c,d,e)
-#define xmldump_all() Perl_xmldump_all(aTHX)
-#define xmldump_all_perl(a) Perl_xmldump_all_perl(aTHX_ a)
-#define xmldump_eval() Perl_xmldump_eval(aTHX)
-#define xmldump_form(a) Perl_xmldump_form(aTHX_ a)
-#ifndef PERL_IMPLICIT_CONTEXT
-#define xmldump_indent Perl_xmldump_indent
-#endif
-#define xmldump_packsubs(a) Perl_xmldump_packsubs(aTHX_ a)
-#define xmldump_packsubs_perl(a,b) Perl_xmldump_packsubs_perl(aTHX_ a,b)
-#define xmldump_sub(a) Perl_xmldump_sub(aTHX_ a)
-#define xmldump_sub_perl(a,b) Perl_xmldump_sub_perl(aTHX_ a,b)
-#define xmldump_vindent(a,b,c,d) Perl_xmldump_vindent(aTHX_ a,b,c,d)
-# endif
# if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
#define pidgone(a,b) S_pidgone(aTHX_ a,b)
# endif
diff --git a/embedvar.h b/embedvar.h
index bf087801aa..454c1ee49b 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -180,7 +180,6 @@
#define PL_localizing (vTHX->Ilocalizing)
#define PL_localpatches (vTHX->Ilocalpatches)
#define PL_lockhook (vTHX->Ilockhook)
-#define PL_madskills (vTHX->Imadskills)
#define PL_main_cv (vTHX->Imain_cv)
#define PL_main_root (vTHX->Imain_root)
#define PL_main_start (vTHX->Imain_start)
@@ -348,7 +347,6 @@
#define PL_warnhook (vTHX->Iwarnhook)
#define PL_watchaddr (vTHX->Iwatchaddr)
#define PL_watchok (vTHX->Iwatchok)
-#define PL_xmlfp (vTHX->Ixmlfp)
#endif /* MULTIPLICITY */
diff --git a/ext/Devel-Peek/Peek.xs b/ext/Devel-Peek/Peek.xs
index b20fa94687..0d8b833267 100644
--- a/ext/Devel-Peek/Peek.xs
+++ b/ext/Devel-Peek/Peek.xs
@@ -364,19 +364,8 @@ S_ck_dump(pTHX_ OP *entersubop, GV *namegv, SV *cv)
aop = cUNOPx(aop)->op_first;
prev = aop;
aop = aop->op_sibling;
- while (PL_madskills && aop->op_type == OP_STUB) {
- prev = aop;
- aop = aop->op_sibling;
- }
- if (PL_madskills && aop->op_type == OP_NULL) {
- first = ((UNOP*)aop)->op_first;
- ((UNOP*)aop)->op_first = NULL;
- prev = aop;
- }
- else {
- first = aop;
- prev->op_sibling = first->op_sibling;
- }
+ first = aop;
+ prev->op_sibling = first->op_sibling;
if (first->op_type == OP_RV2AV ||
first->op_type == OP_PADAV ||
first->op_type == OP_RV2HV ||
@@ -386,10 +375,6 @@ S_ck_dump(pTHX_ OP *entersubop, GV *namegv, SV *cv)
else
first->op_flags &= ~OPf_MOD;
aop = aop->op_sibling;
- while (PL_madskills && aop->op_type == OP_STUB) {
- prev = aop;
- aop = aop->op_sibling;
- }
if (!aop) {
/* It doesn’t really matter what we return here, as this only
occurs after yyerror. */
diff --git a/intrpvar.h b/intrpvar.h
index 3e7d4a36f7..c8982fd92f 100644
--- a/intrpvar.h
+++ b/intrpvar.h
@@ -757,11 +757,6 @@ PERLVAR(I, memory_debug_header, struct perl_memory_debug_header)
PERLVARI(I, dumper_fd, int, -1)
#endif
-#ifdef PERL_MAD
-PERLVARI(I, madskills, bool, FALSE) /* preserve all syntactic info */
- /* (MAD = Misc Attribute Decoration) */
-PERLVARI(I, xmlfp, PerlIO *, NULL)
-#endif
#ifdef DEBUG_LEAKING_SCALARS
PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
diff --git a/locale.c b/locale.c
index 64c0d8d6f1..2b66c8cb9e 100644
--- a/locale.c
+++ b/locale.c
@@ -1300,81 +1300,6 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category)
# endif /* USE_LOCALE_MONETARY */
#endif /* HAS_LOCALECONV */
-#if 0 && defined(HAS_STRERROR) && defined(USE_LOCALE_MESSAGES)
-
-/* This code is ifdefd out because it was found to not be necessary in testing
- * on our dromedary test machine, which has over 700 locales. There, looking
- * at just the currency symbol gave essentially the same results as doing this
- * extra work. Executing this also caused segfaults in miniperl. I left it in
- * so as to avoid rewriting it if real-world experience indicates that
- * dromedary is an outlier. Essentially, instead of returning abpve if we
- * haven't found illegal utf8, we continue on and examine all the strerror()
- * messages on the platform for utf8ness. If all are ASCII, we still don't
- * know the answer; but otherwise we have a pretty good indication of the
- * utf8ness. The reason this doesn't necessarily help much is that the
- * messages may not have been translated into the locale. The currency symbol
- * is much more likely to have been translated. The code below would need to
- * be altered somewhat to just be a continuation of testing the currency
- * symbol. */
- int e;
- unsigned int failures = 0, non_ascii = 0;
- char *save_messages_locale = NULL;
-
- /* Like above for LC_CTYPE, we set LC_MESSAGES to the locale of the
- * desired category, if it isn't that locale already */
-
- if (category != LC_MESSAGES) {
-
- save_messages_locale = stdize_locale(savepv(setlocale(LC_MESSAGES,
- NULL)));
- if (! save_messages_locale) {
- goto cant_use_messages;
- }
-
- if (strEQ(save_messages_locale, save_input_locale)) {
- Safefree(save_input_locale);
- }
- else if (! setlocale(LC_MESSAGES, save_input_locale)) {
- Safefree(save_messages_locale);
- goto cant_use_messages;
- }
- }
-
- /* Here the current LC_MESSAGES is set to the locale of the category
- * whose information is desired. Look through all the messages */
-
- for (e = 0;
-#ifdef HAS_SYS_ERRLIST
- e <= sys_nerr
-#endif
- ; e++)
- {
- const U8* const errmsg = (U8 *) Strerror(e) ;
- if (!errmsg)
- break;
- if (! is_utf8_string(errmsg, 0)) {
- failures++;
- break;
- }
- else if (! is_ascii_string(errmsg, 0)) {
- non_ascii++;
- }
- }
-
- /* And, if we changed it, restore LC_MESSAGES to its original locale */
- if (save_messages_locale) {
- setlocale(LC_MESSAGES, save_messages_locale);
- Safefree(save_messages_locale);
- }
-
- /* Any non-UTF-8 message means not a UTF-8 locale; if all are valid,
- * any non-ascii means it is one; otherwise we assume it isn't */
- return (failures) ? FALSE : non_ascii;
-
- }
- cant_use_messages:
-
-#endif
DEBUG_L(PerlIO_printf(Perl_debug_log,
"Assuming locale %s is not a UTF-8 locale\n",
diff --git a/mad/Nomad.pm b/mad/Nomad.pm
deleted file mode 100644
index eaac474b78..0000000000
--- a/mad/Nomad.pm
+++ /dev/null
@@ -1,3012 +0,0 @@
-package Nomad;
-
-# Suboptimal things:
-# ast type info is generally still implicit
-# the combined madness calls are actually losing type information
-# brace madprops tend to be too low in the tree
-# could use about 18 more refactorings...
-# lots of unused cruft left around from previous refactorings
-
-use strict;
-use warnings;
-use Carp;
-
-use P5AST;
-use P5re;
-
-my $deinterpolate;
-
-sub xml_to_p5 {
- my %options = @_;
-
-
- my $filename = $options{'input'} or die;
- $deinterpolate = $options{'deinterpolate'};
- my $YAML = $options{'YAML'};
-
- local $SIG{__DIE__} = sub {
- my $e = shift;
- $e =~ s/\n$/\n [NODE $filename line $::prevstate->{line}]/ if $::prevstate;
- confess $e;
- };
-
- # parse file
- use XML::Parser;
- my $p1 = XML::Parser->new(Style => 'Objects', Pkg => 'PLXML');
- $p1->setHandlers('Char' => sub { warn "Chars $_[1]" if $_[1] =~ /\S/; });
-
- # First slurp XML into tree of objects.
-
- my $root = $p1->parsefile($filename);
-
- # Now turn XML tree into something more like an AST.
-
- PLXML::prepreproc($root->[0]);
- my $ast = P5AST->new('Kids' => [$root->[0]->ast()]);
- #::t($ast);
-
- if ($YAML) {
- require YAML::Syck;
- return YAML::Syck::Dump($ast);
- }
-
- # Finally, walk AST to produce new program.
-
- my $text = $ast->p5text(); # returns encoded, must output raw
- return $text;
-}
-
-$::curstate = 0;
-$::prevstate = 0;
-$::curenc = 1; # start in iso-8859-1, sigh...
-
-$::H = "HeredocHere000";
-%::H = ();
-
-my @enc = (
- 'utf-8',
- 'iso-8859-1',
-);
-
-my %enc = (
- 'utf-8' => 0,
- 'iso-8859-1' => 1,
-);
-
-my %madtype = (
- '$' => 'p5::sigil',
- '@' => 'p5::sigil',
- '%' => 'p5::sigil',
- '&' => 'p5::sigil',
- '*' => 'p5::sigil',
- 'o' => 'p5::operator',
- '~' => 'p5::operator',
- '+' => 'p5::punct',
- '?' => 'p5::punct',
- ':' => 'p5::punct',
- ',' => 'p5::punct',
- ';' => 'p5::punct',
- '#' => 'p5::punct',
- '(' => 'p5::opener',
- ')' => 'p5::closer',
- '[' => 'p5::opener',
- ']' => 'p5::closer',
- '{' => 'p5::opener',
- '}' => 'p5::closer',
- '1' => 'p5::punct',
- '2' => 'p5::punct',
- 'a' => 'p5::operator',
- 'A' => 'p5::operator',
- 'd' => 'p5::declarator',
- 'E' => 'p5::text',
- 'L' => 'p5::label',
- 'm' => 'p5::remod',
-# 'n' => 'p5::name',
- 'q' => 'p5::openquote',
- 'Q' => 'p5::closequote',
- '=' => 'p5::text',
- 'R' => 'p5::text',
- 's' => 'p5::text',
- 's' => 'p5::declarator',
-# 'V' => 'p5::version',
- 'X' => 'p5::token',
-);
-
-use Data::Dumper;
-$Data::Dumper::Indent = 1;
-$Data::Dumper::Quotekeys = 0;
-
-sub d {
- my $text = Dumper(@_);
- # doesn't scale well, alas
- 1 while $text =~ s/(.*)^([^\n]*)bless\( \{\n(.*?)^(\s*\}), '([^']*)' \)([^\n]*)/$1$2$5 {\n$3$4$6 # $5/ms;
- $text =~ s/PLXML:://g;
- if ($text) {
- my ($package, $filename, $line) = caller;
- my $subroutine = (caller(1))[3];
- $text =~ s/\n?\z/, called from $subroutine, line $line\n/;
- warn $text;
- }
-};
-
-{
-
- my %xmlrepl = (
- '&' => '&amp;',
- "'" => '&apos;',
- '"' => '&dquo;',
- '<' => '&lt;',
- '>' => '&gt;',
- "\n" => '&#10;',
- "\t" => '&#9;',
- );
-
- sub x {
- my $indent = 0;
- if (@_ > 1) {
- warn xdolist($indent,"LIST",@_);
- }
- else {
- my $type = ref $_[0];
- if ($type) {
- warn xdoitem($indent,$type,@_);
- }
- else {
- warn xdoitem($indent,"ITEM",@_);
- }
- }
- }
-
- sub xdolist {
- my $indent = shift;
- my $tag = shift;
- my $in = ' ' x ($indent * 2);
- my $result;
- $result .= "$in<$tag>\n" if defined $tag;
- for my $it (@_) {
- my $itt = ref $it || "ITEM";
- $itt =~ s/::/:/g;
- $result .= xdoitem($indent+1,$itt,$it);
- }
- $result .= "$in</$tag>\n" if defined $tag;
- return $result;
- }
-
- sub xdohash {
- my $indent = shift;
- my $tag = shift;
- my $hash = shift;
- my $in = ' ' x ($indent * 2);
- my $result = "$in<$tag>\n";
- my @keys = sort keys %$hash;
- my $longest = 0;
- for my $k (@keys) {
- $longest = length($k) if length($k) > $longest;
- }
- my $K;
- for my $k (@keys) {
- my $tmp;
- $K = $$hash{$k}, next if $k eq 'Kids';
- my $sp = ' ' x ($longest - length($k));
- if (ref $$hash{$k}) {
- $tmp = xdoitem($indent+1,"kv",$$hash{$k});
- $tmp =~ s!^ *<kv>\n *</kv>!$in <kv/>!;
- }
- else {
- $tmp = xdoitem($indent+1,"kv",$$hash{$k});
- }
- $k =~ s/([\t\n'"<>&])/$xmlrepl{$1}/g;
- $tmp =~ s/<kv/<kv k='$k'$sp/ or
- $tmp =~ s/^(.*)$/$in <kv k='$k'>\n$in $1$in <\/kv>\n/s;
- $result .= $tmp;
- }
- if ($K and @$K) {
- $result .= xdolist($indent, undef, @$K);
- }
- $result .= "$in</$tag>\n";
- }
-
- sub xdoitem {
- my $indent = shift;
- my $tag = shift;
- my $item = shift;
- my $in = ' ' x ($indent * 2);
- my $r = ref $item;
- if (not $r) {
- $item =~ s/([\t\n'"<>&])/$xmlrepl{$1}/g;
- return "$in<$tag>$item</$tag>\n";
- }
- (my $newtag = $r) =~ s/::/:/g;
- my $t = "$item";
- if ($t =~ /\bARRAY\b/) {
- if (@{$item}) {
- return xdolist($indent,$tag,@{$item});
- }
- else {
- return "$in<$tag />\n";
- }
- }
- if ($t =~ /\bHASH\b/) {
- return xdohash($indent,$tag,$item);
- }
- if ($r =~ /^p5::/) {
- return "$in<$newtag>$$item</$newtag>\n";
- }
- else {
- return "$in<$newtag type='$r'/>\n";
- }
- }
-
- my %trepl = (
- "'" => '\\\'',
- '"' => '\\"',
- "\n" => '\\n',
- "\t" => '\\t',
- );
-
- sub t {
- my $indent = 0;
- if (@_ > 1) {
- tdolist($indent,"LIST",@_);
- }
- else {
- my $type = ref $_[0];
- if ($type) {
- tdoitem($indent,$type,@_);
- }
- else {
- tdoitem($indent,"ITEM",@_);
- }
- }
- print STDERR "\n";
- }
-
- sub tdolist {
- my $indent = shift;
- my $tag = shift || "ARRAY";
- my $in = ' ' x ($indent * 2);
- if (@_) {
- print STDERR "[\n";
- for my $it (@_) {
- my $itt = ref $it || "ITEM";
- print STDERR $in," ";
- tdoitem($indent+1,$itt,$it);
- print STDERR "\n";
- }
- print STDERR "$in]";
- }
- else {
- print STDERR "[]";
- }
- }
-
- sub tdohash {
- my $indent = shift;
- my $tag = shift;
- my $hash = shift;
- my $in = ' ' x ($indent * 2);
-
- print STDERR "$tag => {\n";
-
- my @keys = sort keys %$hash;
- my $longest = 0;
- for my $k (@keys) {
- $longest = length($k) if length($k) > $longest;
- }
- my $K;
- for my $k (@keys) {
- my $sp = ' ' x ($longest - length($k));
- print STDERR "$in $k$sp => ";
- tdoitem($indent+1,"",$$hash{$k});
- if ($k eq 'Kids') {
- print STDERR " # Kids";
- }
- print STDERR "\n";
- }
- print STDERR "$in} # $tag";
- }
-
- sub tdoitem {
- my $indent = shift;
- my $tag = shift;
- my $item = shift;
- if (not defined $item) {
- print STDERR "UNDEF";
- return;
- }
-# my $in = ' ' x ($indent * 2);
- my $r = ref $item;
- if (not $r) {
- $item =~ s/([\t\n"])/$trepl{$1}/g;
- print STDERR "\"$item\"";
- return;
- }
- my $t = "$item";
- if ($r =~ /^p5::/) {
- my $str = $$item{uni};
- my $enc = $enc[$$item{enc}] . ' ';
- $enc =~ s/iso-8859-1 //;
- $str =~ s/([\t\n"])/$trepl{$1}/g;
- print STDERR "$r $enc\"$str\"";
- }
- elsif ($t =~ /\bARRAY\b/) {
- tdolist($indent,$tag,@{$item});
- }
- elsif ($t =~ /\bHASH\b/) {
- tdohash($indent,$tag,$item);
- }
- else {
- print STDERR "$r type='$r'";
- }
- }
-}
-
-sub encnum {
- my $encname = shift;
- if (not exists $enc{$encname}) {
- push @enc, $encname;
- return $enc{$encname} = $#enc;
- }
- return $enc{$encname};
-}
-
-use PLXML;
-
-package p5::text;
-
-use Encode;
-
-sub new {
- my $class = shift;
- my $text = shift;
- die "Too many args to new" if @_;
- die "Attempt to bless non-text $text" if ref $text;
- return bless( { uni => $text,
- enc => $::curenc,
- }, $class);
-}
-
-sub uni { my $self = shift; $$self{uni}; } # internal stuff all in utf8
-
-sub enc {
- my $self = shift;
- my $enc = $enc[$$self{enc} || 0];
- return encode($enc, $$self{uni});
-}
-
-package p5::closequote; BEGIN { @p5::closequote::ISA = 'p5::punct'; }
-package p5::closer; BEGIN { @p5::closer::ISA = 'p5::punct'; }
-package p5::declarator; BEGIN { @p5::declarator::ISA = 'p5::token'; }
-package p5::junk; BEGIN { @p5::junk::ISA = 'p5::text'; }
-package p5::label; BEGIN { @p5::label::ISA = 'p5::token'; }
-#package p5::name; BEGIN { @p5::name::ISA = 'p5::token'; }
-package p5::opener; BEGIN { @p5::opener::ISA = 'p5::punct'; }
-package p5::openquote; BEGIN { @p5::openquote::ISA = 'p5::punct'; }
-package p5::operator; BEGIN { @p5::operator::ISA = 'p5::token'; }
-package p5::punct; BEGIN { @p5::punct::ISA = 'p5::token'; }
-package p5::remod; BEGIN { @p5::remod::ISA = 'p5::token'; }
-package p5::sigil; BEGIN { @p5::sigil::ISA = 'p5::punct'; }
-package p5::token; BEGIN { @p5::token::ISA = 'p5::text'; }
-#package p5::version; BEGIN { @p5::version::ISA = 'p5::token'; }
-
-################################################################
-# Routines to turn XML tree into an AST. Mostly this amounts to hoisting
-# misplaced nodes and flattening various things into lists.
-
-package PLXML;
-
-sub AUTOLOAD {
- ::x("AUTOLOAD $PLXML::AUTOLOAD", @_);
- return "[[[ $PLXML::AUTOLOAD ]]]";
-}
-
-sub prepreproc {
- my $self = shift;
- my $kids = $$self{Kids};
- $self->{mp} = {};
- if (defined $kids) {
- my $i;
- for ($i = 0; $i < @$kids; $i++) {
- if (ref $kids->[$i] eq "PLXML::madprops") {
- $self->{mp} = splice(@$kids, $i, 1)->hash($self,@_);
- $i--;
- next;
- }
- else {
- prepreproc($kids->[$i], $self, @_);
- }
- }
- }
-}
-
-sub preproc {
- my $self = shift;
- if (ref $self eq 'PLXML::op_null' and $$self{was}) {
- return "PLXML::op_$$self{was}"->key();
- }
- else {
- return $self->key();
- }
-}
-
-sub newtype {
- my $self = shift;
- my $t = ref $self || $self;
- $t = "PLXML::op_$$self{was}" if $t eq 'PLXML::op_null' and $$self{was};
- $t =~ s/PLXML/P5AST/ or die "Bad type: $t";
- return $t;
-}
-
-sub madness {
- my $self = shift;
- my @keys = split(' ', shift);
- @keys = map { $_ eq 'd' ? ('k', 'd') : $_ } @keys;
- my @vals = ();
- for my $key (@keys) {
- my $madprop = $self->{mp}{$key};
- next unless defined $madprop;
- if (ref $madprop eq 'PLXML::mad_op') {
- if ($key eq 'b') {
- push @vals, $madprop->blockast($self, @_);
- }
- else {
- push @vals, $madprop->ast($self, @_);
- }
- next;
- }
- my $white;
- if ($white = $self->{mp}{"_$key"}) {
- push @vals, p5::junk->new($white);
- }
- my $type = $madtype{$key} || "p5::token";
- push @vals, $type->new($madprop);
- if ($white = $self->{mp}{"#$key"}) {
- push @vals, p5::junk->new($white);
- }
- }
- @vals;
-}
-
-sub blockast {
- my $self = shift;
- $self->ast(@_);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- return $self->newtype->new(Kids => [uc $self->key(), "(", @newkids, ")"]);
-}
-
-sub op {
- my $self = shift;
- my $desc = $self->desc();
- if ($desc =~ /\((.*?)\)/) {
- return $1;
- }
- else {
- return " <<" . $self->key() . ">> ";
- }
-}
-
-sub mp {
- my $self = shift;
- return $self->{mp};
-}
-
-package PLXML::Characters;
-
-sub ast { die "oops" }
-sub pair { die "oops" }
-
-package PLXML::madprops;
-
-sub ast {
- die "oops madprops";
-}
-
-sub hash {
- my $self = shift;
- my @pairs;
- my %hash = ();
- my $firstthing = '';
- my $lastthing = '';
-
- # We need to guarantee key uniqueness at this point.
- for my $kid (@{$$self{Kids}}) {
- my ($k,$v) = $kid->pair($self, @_);
- $firstthing ||= $k;
- $k .= 'x' while exists $hash{$k};
- $lastthing = $k;
- $hash{$k} = $v;
- }
- $hash{FIRST} = $firstthing;
- $hash{LAST} = $lastthing;
- return \%hash;
-}
-
-package PLXML::mad_op;
-
-sub pair {
- my $self = shift;
- my $key = $$self{key};
- return $key,$self;
-}
-
-sub ast {
- my $self = shift;
- $self->prepreproc(@_);
- my @vals;
- for my $kid (@{$$self{Kids}}) {
- push @vals, $kid->ast($self, @_);
- }
- if (@vals == 1) {
- return @vals;
- }
- else {
- return P5AST::op_list->new(Kids => [@vals]);
- }
-}
-
-sub blockast {
- my $self = shift;
- $self->prepreproc(@_);
- my @vals;
- for my $kid (@{$$self{Kids}}) {
- push @vals, $kid->blockast($self, @_);
- }
- if (@vals == 1) {
- return @vals;
- }
- else {
- return P5AST::op_lineseq->new(Kids => [@vals]);
- }
-}
-
-package PLXML::mad_pv;
-
-sub pair {
- my $self = shift;
- my $key = $$self{key};
- my $val = $$self{val};
- $val =~ s/STUPIDXML\(#x(\w+)\)/chr(hex $1)/eg;
- return $key,$val;
-}
-
-package PLXML::mad_sv;
-
-sub pair {
- my $self = shift;
- my $key = $$self{key};
- my $val = $$self{val};
- $val =~ s/STUPIDXML\(#x(\w+)\)/chr(hex $1)/eg;
- return $key,$val;
-}
-
-package PLXML::baseop;
-
-sub ast {
- my $self = shift;
-
- my @retval;
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- if (@newkids) {
- push @retval, uc $self->key(), "(", @newkids , ")";
- }
- else {
- push @retval, $self->madness('o ( )');
- }
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::baseop_unop;
-
-sub ast {
- my $self = shift;
- my @newkids = $self->madness('d o (');
-
- if (exists $$self{Kids}) {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
- push @newkids, $self->madness(')');
-
- return $self->newtype()->new(Kids => [@newkids]);
-}
-
-package PLXML::binop;
-
-sub ast {
- my $self = shift;
- my @newkids;
-
- my $left = $$self{Kids}[0];
- push @newkids, $left->ast($self, @_);
-
- push @newkids, $self->madness('o');
-
- my $right = $$self{Kids}[1];
- if (defined $right) {
- push @newkids, $right->ast($self, @_);
- }
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::cop;
-
-package PLXML::filestatop;
-
-sub ast {
- my $self = shift;
-
- my @newkids = $self->madness('o (');
-
- if (@{$$self{Kids}}) {
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- }
- if ($$self{mp}{O}) {
- push @newkids, $self->madness('O');
- }
- push @newkids, $self->madness(')');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::listop;
-
-sub ast {
- my $self = shift;
-
- my @retval;
- my @after;
- if (@retval = $self->madness('X')) {
- my @before, $self->madness('o x');
- return P5AST::listop->new(Kids => [@before,@retval]);
- }
-
- push @retval, $self->madness('o d ( [ {');
-
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- next if ref $kid eq 'PLXML::op_pushmark';
- next if ref $kid eq 'PLXML::op_null' and
- defined $$kid{was} and $$kid{was} eq 'pushmark';
- push @newkids, $kid->ast($self, @_);
- }
-
- my $x = "";
-
- if ($$self{mp}{S}) {
- push @retval, $self->madness('S');
- }
- push @retval, @newkids;
-
- push @retval, $self->madness('} ] )');
- return $self->newtype->new(Kids => [@retval,@after]);
-}
-
-package PLXML::logop;
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('o (');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- push @newkids, $self->madness(')');
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::loop;
-
-package PLXML::loopexop;
-
-sub ast {
- my $self = shift;
- my @newkids = $self->madness('o (');
-
- if ($$self{mp}{L} or not $$self{flags} =~ /\bSPECIAL\b/) {
- my @label = $self->madness('L');
- if (@label) {
- push @newkids, @label;
- }
- else {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
- }
- push @newkids, $self->madness(')');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-
-package PLXML::padop;
-
-package PLXML::padop_svop;
-
-package PLXML::pmop;
-
-sub ast {
- my $self = shift;
-
- return P5AST::pmop->new(Kids => []) unless exists $$self{flags};
-
- my $bits = $self->fetchbits($$self{flags},@_);
-
- my @newkids;
- if ($bits->{binding}) {
- push @newkids, $bits->{binding};
- push @newkids, $self->madness('~');
- }
- if (exists $bits->{regcomp} and $bits->{regcomp}) {
- my @front = $self->madness('q');
- my @back = $self->madness('Q');
- push @newkids, @front, $bits->{regcomp}, @back,
- $self->madness('m');
- }
- elsif ($$self{mp}{q}) {
- push @newkids, $self->madness('q = Q m');
- }
- elsif ($$self{mp}{X}) {
- push @newkids, $self->madness('X m');
- }
- else {
- push @newkids, $self->madness('e m');
- }
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-sub innerpmop {
- my $pmop = shift;
- my $bits = shift;
- for my $key (grep {!/^Kids/} keys %$pmop) {
- $bits->{$key} = $pmop->{$key};
- }
-
- # Have to delete all the fake evals of the repl. This is a pain...
- if (@{$$pmop{Kids}}) {
- my $really = $$pmop{Kids}[0]{Kids}[0];
- if (ref $really eq 'PLXML::op_substcont') {
- $really = $$really{Kids}[0];
- }
- while ((ref $really) =~ /^PLXML::op_.*(null|entereval)/) {
- if (exists $$really{was}) {
- $bits->{repl} = $really->ast(@_);
- return;
- }
- $really = $$really{Kids}[0];
- }
- if (ref $really eq 'PLXML::op_scope' and
- @{$$really{Kids}} == 1 and
- ref $$really{Kids}[0] eq 'PLXML::op_null' and
- not @{$$really{Kids}[0]{Kids}})
- {
- $bits->{repl} = '';
- return;
- }
- if (ref $really eq 'PLXML::op_leave' and
- @{$$really{Kids}} == 2 and
- ref $$really{Kids}[1] eq 'PLXML::op_null' and
- not @{$$really{Kids}[1]{Kids}})
- {
- $bits->{repl} = '';
- return;
- }
- if ((ref $really) =~ /^PLXML::op_(scope|leave)/) {
- # should be at inner do {...} here, so skip that fakery too
- $bits->{repl} = $really->newtype->new(Kids => [$really->PLXML::op_lineseq::lineseq(@_)]);
- # but retrieve the whitespace before fake '}'
- if ($$really{mp}{'_}'}) {
- push(@{$bits->{repl}->{Kids}}, p5::junk->new($$really{mp}{'_}'}));
- }
- }
- else { # something else, padsv probably
- $bits->{repl} = $really->ast(@_);
- }
- }
-}
-
-sub fetchbits {
- my $self = shift;
- my $flags = shift || '';
- my %bits = %$self;
- my @kids = @{$$self{Kids}};
- if (@kids) {
- delete $bits{Kids};
- my $arg = shift @kids;
- innerpmop($arg,\%bits, $self, @_);
- if ($flags =~ /STACKED/) {
- $arg = shift @kids;
- $bits{binding} = $arg->ast($self, @_);
- }
- if ($bits{when} ne "COMP" and @kids) {
- $arg = pop @kids;
- $bits{regcomp} = $arg->ast($self, @_);
- }
- if (not exists $bits{repl} and @kids) {
- $arg = shift @kids;
- $bits{repl} = $arg->ast($self, @_);
- }
- }
- return \%bits;
-}
-
-package PLXML::pvop_svop;
-
-package PLXML::unop;
-
-sub ast {
- my $self = shift;
- my @newkids = $self->madness('o (');
-
- if (exists $$self{Kids}) {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
- push @newkids, $self->madness(')');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML;
-package PLXML::Characters;
-package PLXML::madprops;
-package PLXML::mad_op;
-package PLXML::mad_pv;
-package PLXML::baseop;
-package PLXML::baseop_unop;
-package PLXML::binop;
-package PLXML::cop;
-package PLXML::filestatop;
-package PLXML::listop;
-package PLXML::logop;
-package PLXML::loop;
-package PLXML::loopexop;
-package PLXML::padop;
-package PLXML::padop_svop;
-package PLXML::pmop;
-package PLXML::pvop_svop;
-package PLXML::unop;
-package PLXML::op_null;
-
-# Null nodes typed by first madprop.
-
-my %astmad;
-
-BEGIN {
- %astmad = (
- 'p' => sub { # peg for #! line, etc.
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('p px');
- $::curstate = 0;
- return P5AST::peg->new(Kids => [@newkids])
- },
- '(' => sub { # extra parens around the whole thing
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('dx d o (');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- push @newkids, $self->madness(')');
- return P5AST::parens->new(Kids => [@newkids])
- },
- '~' => sub { # binding operator
- my $self = shift;
- my @newkids;
- push @newkids, $$self{Kids}[0]->ast($self,@_);
- push @newkids, $self->madness('~');
- push @newkids, $$self{Kids}[1]->ast($self,@_);
- return P5AST::bindop->new(Kids => [@newkids])
- },
- ';' => sub { # null statements/blocks
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('{ ; }');
- $::curstate = 0;
- return P5AST::nothing->new(Kids => [@newkids])
- },
- 'I' => sub { # if or unless statement keyword
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('L I (');
- my @subkids;
- for my $kid (@{$$self{Kids}}) {
- push @subkids, $kid->ast($self, @_);
- }
- die "oops in op_null->new" unless @subkids == 1;
- my $newself = $subkids[0];
- @subkids = @{$$newself{Kids}};
-
- unshift @{$subkids[0]{Kids}}, @newkids;
- push @{$subkids[0]{Kids}}, $self->madness(')');
- return bless($newself, 'P5AST::condstate');
- },
- 'U' => sub { # use
- my $self = shift;
- my @newkids;
- my @module = $self->madness('U');
- my @args = $self->madness('A');
- my $module = $module[-1]{Kids}[-1];
- if ($module->uni eq 'bytes') {
- $::curenc = Nomad::encnum('iso-8859-1');
- }
- elsif ($module->uni eq 'utf8') {
- if ($$self{mp}{o} eq 'no') {
- $::curenc = Nomad::encnum('iso-8859-1');
- }
- else {
- $::curenc = Nomad::encnum('utf-8');
- }
- }
- elsif ($module->uni eq 'encoding') {
- if ($$self{mp}{o} eq 'no') {
- $::curenc = Nomad::encnum('iso-8859-1');
- }
- else {
- $::curenc = Nomad::encnum(eval $args[0]->p5text); # XXX bletch
- }
- }
- # (Surrounding {} ends up here if use is only thing in block.)
- push @newkids, $self->madness('{ o');
- push @newkids, @module;
- push @newkids, $self->madness('V');
- push @newkids, @args;
- push @newkids, $self->madness('S ; }');
- $::curstate = 0;
- return P5AST::use->new(Kids => [@newkids])
- },
- '?' => sub { # ternary
- my $self = shift;
- my @newkids;
- my @subkids;
- my @condkids = @{$$self{Kids}[0]{Kids}};
-
- push @newkids, $condkids[0]->ast($self,@_), $self->madness('?');
- push @newkids, $condkids[1]->ast($self,@_), $self->madness(':');
- push @newkids, $condkids[2]->ast($self,@_);
- return P5AST::ternary->new(Kids => [@newkids])
- },
- '&' => sub { # subroutine
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('d n s a : { & } ;');
- $::curstate = 0;
- return P5AST::sub->new(Kids => [@newkids])
- },
- 'i' => sub { # modifier if
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('i');
- my $cond = $$self{Kids}[0];
- my @subkids;
- for my $kid (@{$$cond{Kids}}) {
- push @subkids, $kid->ast($self, @_);
- }
- push @newkids, shift @subkids;
- unshift @newkids, @subkids;
- return P5AST::condmod->new(Kids => [@newkids])
- },
- 'P' => sub { # package declaration
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('o');
- push @newkids, $self->madness('P');
- push @newkids, $self->madness(';');
- $::curstate = 0;
- return P5AST::package->new(Kids => [@newkids])
- },
- 'F' => sub { # format
- my $self = shift;
- my @newkids = $self->madness('F n b');
- $::curstate = 0;
- return P5AST::format->new(Kids => [@newkids])
- },
- 'x' => sub { # qw literal
- my $self = shift;
- return P5AST::qwliteral->new(Kids => [$self->madness('x')])
- },
- 'q' => sub { # random quote
- my $self = shift;
- return P5AST::quote->new(Kids => [$self->madness('q = Q')])
- },
- 'X' => sub { # random literal
- my $self = shift;
- return P5AST::token->new(Kids => [$self->madness('X')])
- },
- ':' => sub { # attr list
- my $self = shift;
- return P5AST::attrlist->new(Kids => [$self->madness(':')])
- },
- ',' => sub { # "unary ," so to speak
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness(',');
- push @newkids, $$self{Kids}[0]->ast($self,@_);
- return P5AST::listelem->new(Kids => [@newkids])
- },
- 'C' => sub { # constant conditional
- my $self = shift;
- my @newkids;
- push @newkids, $$self{Kids}[0]->ast($self,@_);
- my @folded = $self->madness('C');
- if (@folded) {
- my @t = $self->madness('t');
- my @e = $self->madness('e');
- if (@e) {
- return P5AST::op_cond_expr->new(
- Kids => [
- $self->madness('I ('),
- @folded,
- $self->madness(') ?'),
- P5AST::op_cond_expr->new(Kids => [@newkids]),
- $self->madness(':'),
- @e
- ] );
- }
- else {
- return P5AST::op_cond_expr->new(
- Kids => [
- $self->madness('I ('),
- @folded,
- $self->madness(') ?'),
- @t,
- $self->madness(':'),
- @newkids
- ] );
- }
- }
- return P5AST::op_null->new(Kids => [@newkids])
- },
- '+' => sub { # unary +
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('+');
- push @newkids, $$self{Kids}[0]->ast($self,@_);
- return P5AST::preplus->new(Kids => [@newkids])
- },
- 'D' => sub { # do block
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('D');
- push @newkids, $$self{Kids}[0]->ast($self,@_);
- return P5AST::doblock->new(Kids => [@newkids])
- },
- '3' => sub { # C-style for loop
- my $self = shift;
- my @newkids;
-
- # What a mess!
- my (undef, $init, $lineseq) = @{$$self{Kids}[0]{Kids}};
- my (undef, $leaveloop) = @{$$lineseq{Kids}};
- my (undef, $null) = @{$$leaveloop{Kids}};
- my $and;
- my $cond;
- my $lineseq2;
- my $block;
- my $cont;
- if (exists $$null{was} and $$null{was} eq 'and') {
- ($lineseq2) = @{$$null{Kids}};
- }
- else {
- ($and) = @{$$null{Kids}};
- ($cond, $lineseq2) = @{$$and{Kids}};
- }
- if ($$lineseq2{mp}{'{'}) {
- $block = $lineseq2;
- }
- else {
- ($block, $cont) = @{$$lineseq2{Kids}};
- }
-
- push @newkids, $self->madness('L 3 (');
- push @newkids, $init->ast($self,@_);
- push @newkids, $self->madness('1');
- if (defined $cond) {
- push @newkids, $cond->ast($self,@_);
- }
- elsif (defined $null) {
- push @newkids, $null->madness('1');
- }
- push @newkids, $self->madness('2');
- if (defined $cont) {
- push @newkids, $cont->ast($self,@_);
- }
- push @newkids, $self->madness(')');
- push @newkids, $block->blockast($self,@_);
- $::curstate = 0;
- return P5AST::cfor->new(Kids => [@newkids])
- },
- 'o' => sub { # random useless operator
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('o');
- my $kind = $newkids[-1] || '';
- $kind = $kind->uni if ref $kind;
- my @subkids;
- for my $kid (@{$$self{Kids}}) {
- push @subkids, $kid->ast($self, @_);
- }
- if ($kind eq '=') { # stealth readline
- unshift(@newkids, shift(@subkids));
- push(@newkids, @subkids);
- return P5AST::op_aassign->new(Kids => [@newkids])
- }
- else {
- my $newself = $subkids[0];
- splice(@{$newself->{Kids}}, 1, 0,
- $self->madness('ox ('),
- @newkids,
- $self->madness(')')
- );
- return $newself;
- }
- },
- );
-}
-
-# Null nodes are an untyped mess inside Perl. Instead of fixing it there,
-# we derive an effective type either from the "was" field or the first madprop.
-# (The individual routines select the actual new type.)
-
-sub ast {
- my $self = shift;
- my $was = $$self{was} || 'peg';
- my $mad = $$self{mp}{FIRST} || "unknown";
-
- # First try for a "was".
- my $meth = "PLXML::op_${was}::astnull";
- if (exists &{$meth}) {
- return $self->$meth(@_);
- }
-
- # Look at first madprop.
- if (exists $astmad{$mad}) {
- return $astmad{$mad}->($self);
- }
- warn "No mad $mad" unless $mad eq 'unknown';
-
- # Do something generic.
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-sub blockast {
- my $self = shift;
- local $::curstate;
- local $::curenc = $::curenc;
- return $self->madness('{ ; }');
-}
-
-package PLXML::op_stub;
-
-sub ast {
- my $self = shift;
- return $self->newtype->new(Kids => [$self->madness(', x ( ) q = Q')]);
-}
-
-package PLXML::op_scalar;
-
-sub ast {
- my $self = shift;
-
- my @pre = $self->madness('o q');
- my $op = pop @pre;
- if ($op->uni =~ /^<</) {
- my @newkids;
- my $opstub = bless { start => $op }, 'P5AST::heredoc';
- push @newkids, $opstub;
- push @newkids, $self->madness('(');
-
- my @kids = @{$$self{Kids}};
-
- my @divert;
- for my $kid (@kids) {
- next if ref $kid eq 'PLXML::op_pushmark';
- next if ref $kid eq 'PLXML::op_null' and
- defined $$kid{was} and $$kid{was} eq 'pushmark';
- push @divert, $kid->ast($self, @_);
- }
- $opstub->{doc} = P5AST::op_list->new(Kids => [@divert]);
- $opstub->{end} = ($self->madness('Q'))[-1];
-
- push @newkids, $self->madness(')');
-
- return $self->newtype->new(Kids => [@pre,@newkids]);
- }
- return $self->PLXML::baseop_unop::ast();
-}
-
-package PLXML::op_pushmark;
-
-sub ast { () }
-
-package PLXML::op_wantarray;
-package PLXML::op_const;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- return unless $$self{mp};
- push @newkids, $self->madness('q = Q X : f O ( )');
- return P5AST::op_const->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
- return unless %{$$self{mp}};
-
- my @before;
-
- my $const;
- my @args = $self->madness('f');
- if (@args) {
- }
- elsif (exists $self->{mp}{q}) {
- push @args, $self->madness('d q');
- if ($args[-1]->uni =~ /^<</) {
- my $opstub = bless { start => pop(@args) }, 'P5AST::heredoc';
- $opstub->{doc} = P5AST::op_const->new(Kids => [$self->madness('=')]);
- $opstub->{end} = ($self->madness('Q'))[-1];
- push @args, $opstub;
- }
- else {
- push @args, $self->madness('= Q');
- }
- }
- elsif (exists $self->{mp}{X}) {
- push @before, $self->madness('d'); # was local $[ probably
- if (not $$self{mp}{O}) {
- push @before, $self->madness('o'); # was unary
- }
- my @X = $self->madness(': X');
- if (exists $$self{private} and $$self{private} =~ /BARE/) {
- return $self->newtype->new(Kids => [@X]);
- }
- my $X = pop @X;
- push @before, @X;
- @args = (
- $self->madness('x'),
- $X);
- if ($$self{mp}{O}) {
- push @args, $self->madness('o O');
- }
- }
- elsif (exists $self->{mp}{O}) {
- push @args, $self->madness('O');
- }
- elsif ($$self{private} =~ /\bBARE\b/) {
- @args = ($$self{PV});
- }
- elsif (exists $$self{mp}{o}) {
- @args = $self->madness('o');
- }
- elsif (exists $$self{PV}) {
- @args = ('"', $$self{PV}, '"');
- }
- elsif (exists $$self{NV}) {
- @args = $$self{NV};
- }
- elsif (exists $$self{IV}) {
- @args = $$self{IV};
- }
- else {
- @args = $self->SUPER::text(@_);
- }
- return $self->newtype->new(Kids => [@before, @args]);
-}
-
-
-package PLXML::op_gvsv;
-
-sub ast {
- my $self = shift;
- my @args;
- my @retval;
- for my $attr (qw/gv GV flags/) {
- if (exists $$self{$attr}) {
- push @args, $attr, $$self{$attr};
- }
- }
- push @retval, @args;
- push @retval, $self->madness('X');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_gv;
-
-sub ast {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('X K');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_gelem;
-
-sub ast {
- my $self = shift;
-
- local $::curstate; # in case there are statements in subscript
- local $::curenc = $::curenc;
- my @newkids;
- push @newkids, $self->madness('dx d');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- splice @newkids, -1, 0, $self->madness('o {');
- push @newkids, $self->madness('}');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_padsv;
-
-sub ast {
- my $self = shift;
- my @args;
- push @args, $self->madness('dx d ( $ )');
-
- return $self->newtype->new(Kids => [@args]);
-}
-
-package PLXML::op_padav;
-
-sub astnull { ast(@_) }
-
-sub ast {
- my $self = shift;
- my @retval;
- push @retval, $self->madness('dx d (');
- push @retval, $self->madness('$ @');
- push @retval, $self->madness(') o O');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_padhv;
-
-sub astnull { ast(@_) }
-
-sub ast {
- my $self = shift;
- my @retval;
- push @retval, $self->madness('dx d (');
- push @retval, $self->madness('$ @ %');
- push @retval, $self->madness(') o O');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_padany;
-
-package PLXML::op_pushre;
-
-sub ast {
- my $self = shift;
- if ($$self{mp}{q}) {
- return $self->madness('q = Q m');
- }
- if ($$self{mp}{X}) {
- return $self->madness('X m');
- }
- if ($$self{mp}{e}) {
- return $self->madness('e m');
- }
- return $$self{Kids}[1]->ast($self,@_), $self->madness('m');
-}
-
-package PLXML::op_rv2gv;
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('dx d ( * $');
- push @newkids, $$self{Kids}[0]->ast();
- push @newkids, $self->madness(')');
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_rv2sv;
-
-sub astnull {
- my $self = shift;
- return P5AST::op_rv2sv->new(Kids => [$self->madness('O o dx d ( $ ) : a')]);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('dx d ( $');
- if (ref $$self{Kids}[0] ne "PLXML::op_gv") {
- push @newkids, $$self{Kids}[0]->ast();
- }
- push @newkids, $self->madness(') : a');
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_av2arylen;
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $$self{Kids}[0]->madness('l');
- push @newkids, $$self{Kids}[0]->ast();
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_rv2cv;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('X');
- return @newkids if @newkids;
- if (exists $$self{mp}{'&'}) {
- push @newkids, $self->madness('&');
- if (@{$$self{Kids}}) {
- push @newkids, $$self{Kids}[0]->ast(@_);
- }
- }
- else {
- push @newkids, $$self{Kids}[0]->ast(@_);
- }
- return P5AST::op_rv2cv->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('&');
- if (@{$$self{Kids}}) {
- push @newkids, $$self{Kids}[0]->ast();
- }
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_anoncode;
-
-sub ast {
- my $self = shift;
- my $arg = $$self{Kids}[0];
- local $::curstate; # hide nested statements in sub
- local $::curenc = $::curenc;
- if (defined $arg) {
- return $arg->ast(@_);
- }
- return ';'; # XXX literal ; should come through somewhere
-}
-
-package PLXML::op_prototype;
-package PLXML::op_refgen;
-
-sub ast {
- my $self = shift;
- my @newkids = $self->madness('o s a');
-
- if (exists $$self{Kids}) {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
-
- my $res = $self->newtype->new(Kids => [@newkids]);
- return $res;
-}
-
-package PLXML::op_srefgen;
-
-sub ast {
- my @newkids;
- my $self = shift;
- if ($$self{mp}{FIRST} eq '{') {
- local $::curstate; # this is officially a block, so hide it
- local $::curenc = $::curenc;
- push @newkids, $self->madness('{');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- push @newkids, $self->madness('; }');
- return P5AST::op_stringify->new(Kids => [@newkids]);
- }
- else {
- push @newkids, $self->madness('o [');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- push @newkids, $self->madness(']');
- return P5AST::op_stringify->new(Kids => [@newkids]);
- }
-}
-
-package PLXML::op_ref;
-package PLXML::op_bless;
-package PLXML::op_backtick;
-
-sub ast {
- my $self = shift;
- my @args;
- if (exists $self->{mp}{q}) {
- push @args, $self->madness('q');
- if ($args[-1]->uni =~ /^<</) {
- my $opstub = bless { start => $args[-1] }, 'P5AST::heredoc';
- $args[-1] = $opstub;
- $opstub->{doc} = P5AST::op_const->new(Kids => [$self->madness('=')]);
- $opstub->{end} = ($self->madness('Q'))[-1];
- }
- else {
- push @args, $self->madness('= Q');
- }
- }
- return $self->newtype->new(Kids => [@args]);
-}
-
-package PLXML::op_glob;
-
-sub astnull {
- my $self = shift;
- my @retval = $self->madness('o q = Q');
- if (not @retval or $retval[-1]->uni eq 'glob') {
- push @retval, $self->madness('(');
- push @retval, $$self{Kids}[0]->ast($self,@_);
- push @retval, $self->madness(')');
- }
- return P5AST::op_glob->new(Kids => [@retval]);
-}
-
-package PLXML::op_readline;
-
-sub astnull {
- my $self = shift;
- my @retval;
- if (exists $$self{mp}{q}) {
- @retval = $self->madness('q = Q');
- }
- elsif (exists $$self{mp}{X}) {
- @retval = $self->madness('X');
- }
- return P5AST::op_readline->new(Kids => [@retval]);
-}
-
-sub ast {
- my $self = shift;
-
- my @retval;
-
- my @args;
- my $const;
- if (exists $$self{mp}{q}) {
- @args = $self->madness('q = Q');
- }
- elsif (exists $$self{mp}{X}) {
- @args = $self->madness('X');
- }
- elsif (exists $$self{GV}) {
- @args = $$self{IV};
- }
- elsif (@{$$self{Kids}}) {
- @args = $self->PLXML::unop::ast(@_);
- }
- else {
- @args = $self->SUPER::text(@_);
- }
- return $self->newtype->new(Kids => [@retval,@args]);
-}
-
-
-package PLXML::op_rcatline;
-package PLXML::op_regcmaybe;
-package PLXML::op_regcreset;
-package PLXML::op_regcomp;
-
-sub ast {
- my $self = shift;
- $self->PLXML::unop::ast(@_);
-}
-
-package PLXML::op_match;
-
-sub ast {
- my $self = shift;
- my $retval = $self->SUPER::ast(@_);
- my $p5re;
- if (not $p5re = $retval->p5text()) {
- $retval = $self->newtype->new(Kids => [$self->madness('X q = Q m')]);
- $p5re = $retval->p5text();
- }
- if ($deinterpolate) {
- $retval->{P5re} = P5re::qrparse($p5re);
- }
- return $retval;
-}
-
-package PLXML::op_qr;
-
-sub ast {
- my $self = shift;
- my $retval;
- if (exists $$self{flags}) {
- $retval = $self->SUPER::ast(@_);
- }
- else {
- $retval = $self->newtype->new(Kids => [$self->madness('X q = Q m')]);
- }
- if ($deinterpolate) {
- my $p5re = $retval->p5text();
- $retval->{P5re} = P5re::qrparse($p5re);
- }
- return $retval;
-}
-
-package PLXML::op_subst;
-
-sub ast {
- my $self = shift;
-
- my $bits = $self->fetchbits($$self{flags},@_);
-
- my @newkids;
- if ($bits->{binding}) {
- push @newkids, $bits->{binding};
- push @newkids, $self->madness('~');
- }
- my $X = p5::token->new($$self{mp}{X});
- my @lfirst = $self->madness('q');
- my @llast = $self->madness('Q');
- push @newkids,
- @lfirst,
- $self->madness('E'), # XXX s/b e probably
- @llast;
- my @rfirst = $self->madness('z');
- my @rlast = $self->madness('Z');
- my @mods = $self->madness('m');
- if ($rfirst[-1]->uni ne $llast[-1]->uni) {
- push @newkids, @rfirst;
- }
- # remove the fake '\n' if /e and '#' in replacement.
- if (@mods and $mods[0] =~ m/e/ and ($self->madness('R'))[0]->uni =~ m/#/) {
- unshift @rlast, bless {}, 'chomp'; # hack to remove '\n'
- }
- push @newkids, $bits->{repl}, @rlast, @mods;
-
- my $retval = $self->newtype->new(Kids => [@newkids]);
- if ($deinterpolate) {
- my $p5re = $retval->p5text();
- $retval->{P5re} = P5re::qrparse($p5re);
- }
- return $retval;
-}
-
-package PLXML::op_substcont;
-package PLXML::op_trans;
-
-sub ast {
- my $self = shift;
-
-# my $bits = $self->fetchbits($$self{flags},@_);
-#
- my @newkids;
- my @lfirst = $self->madness('q');
- my @llast = $self->madness('Q');
- push @newkids,
- @lfirst,
- $self->madness('E'),
- @llast;
- my @rfirst = $self->madness('z');
- my @repl = $self->madness('R');
- my @rlast = $self->madness('Z');
- my @mods = $self->madness('m');
- if ($rfirst[-1]->uni ne $llast[-1]->uni) {
- push @newkids, @rfirst;
- }
-
- push @newkids, @repl, @rlast, @mods;
-
- my $res = $self->newtype->new(Kids => [@newkids]);
- return $res;
-}
-
-package PLXML::op_sassign;
-
-sub ast {
- my $self = shift;
- my @newkids;
-
- my $right = $$self{Kids}[1];
- eval { push @newkids, $right->ast($self, @_); };
-
- push @newkids, $self->madness('o');
-
- my $left = $$self{Kids}[0];
- push @newkids, $left->ast($self, @_);
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_aassign;
-
-sub astnull { ast(@_) }
-
-sub ast {
- my $self = shift;
- my @newkids;
-
- my $right = $$self{Kids}[1];
- push @newkids, $right->ast($self, @_);
-
- push @newkids, $self->madness('o');
-
- my $left = $$self{Kids}[0];
- push @newkids, $left->ast($self, @_);
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_chop;
-package PLXML::op_schop;
-package PLXML::op_chomp;
-package PLXML::op_schomp;
-package PLXML::op_defined;
-package PLXML::op_undef;
-package PLXML::op_study;
-package PLXML::op_pos;
-package PLXML::op_preinc;
-
-sub ast {
- my $self = shift;
- if ($$self{targ}) { # stealth post inc or dec
- return $self->PLXML::op_postinc::ast(@_);
- }
- return $self->SUPER::ast(@_);
-}
-
-package PLXML::op_i_preinc;
-
-sub ast { my $self = shift; $self->PLXML::op_preinc::ast(@_); }
-
-package PLXML::op_predec;
-
-sub ast { my $self = shift; $self->PLXML::op_preinc::ast(@_); }
-
-package PLXML::op_i_predec;
-
-sub ast { my $self = shift; $self->PLXML::op_preinc::ast(@_); }
-
-package PLXML::op_postinc;
-
-sub ast {
- my $self = shift;
- my @newkids;
-
- if (exists $$self{Kids}) {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
- push @newkids, $self->madness('o');
-
- my $res = $self->newtype->new(Kids => [@newkids]);
- return $res;
-}
-
-package PLXML::op_i_postinc;
-
-sub ast { my $self = shift; $self->PLXML::op_postinc::ast(@_); }
-
-package PLXML::op_postdec;
-
-sub ast { my $self = shift; $self->PLXML::op_postinc::ast(@_); }
-
-package PLXML::op_i_postdec;
-
-sub ast { my $self = shift; $self->PLXML::op_postinc::ast(@_); }
-
-package PLXML::op_pow;
-package PLXML::op_multiply;
-package PLXML::op_i_multiply;
-package PLXML::op_divide;
-package PLXML::op_i_divide;
-package PLXML::op_modulo;
-package PLXML::op_i_modulo;
-package PLXML::op_repeat;
-
-sub ast {
- my $self = shift;
- return $self->SUPER::ast(@_)
- unless exists $$self{private} and $$self{private} =~ /DOLIST/;
-
- my $newself = $$self{Kids}[0]->ast($self,@_);
- splice @{$newself->{Kids}}, -1, 0, $self->madness('o');
-
- return bless $newself, $self->newtype; # rebless the op_null
-}
-
-package PLXML::op_add;
-package PLXML::op_i_add;
-package PLXML::op_subtract;
-package PLXML::op_i_subtract;
-package PLXML::op_concat;
-
-sub astnull {
- my $self = shift;
- my @newkids;
-
- my @after;
- my $left = $$self{Kids}[0];
- push @newkids, $left->ast($self, @_);
-
- push @newkids, $self->madness('o');
-
- my $right = $$self{Kids}[1];
- push @newkids, $right->ast($self, @_);
- return P5AST::op_concat->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
- my $parent = $_[0];
- my @newkids;
-
- my @after;
- my $left = $$self{Kids}[0];
- push @newkids, $left->ast($self, @_);
-
- push @newkids, $self->madness('o');
-
- my $right = $$self{Kids}[1];
- push @newkids, $right->ast($self, @_);
-
- return $self->newtype->new(Kids => [@newkids, @after]);
-}
-
-package PLXML::op_stringify;
-
-sub astnull {
- ast(@_);
-}
-
-sub ast {
- my $self = shift;
- my @newkids;
- my @front = $self->madness('q (');
- my @back = $self->madness(') Q');
- my @M = $self->madness('M');
- if (@M) {
- push @newkids, $M[0], $self->madness('o');
- }
- push @newkids, @front;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- push @newkids, @back;
- return P5AST::op_stringify->new(Kids => [@newkids]);
-}
-
-package PLXML::op_left_shift;
-package PLXML::op_right_shift;
-package PLXML::op_lt;
-package PLXML::op_i_lt;
-package PLXML::op_gt;
-package PLXML::op_i_gt;
-package PLXML::op_le;
-package PLXML::op_i_le;
-package PLXML::op_ge;
-package PLXML::op_i_ge;
-package PLXML::op_eq;
-package PLXML::op_i_eq;
-package PLXML::op_ne;
-package PLXML::op_i_ne;
-package PLXML::op_ncmp;
-package PLXML::op_i_ncmp;
-package PLXML::op_slt;
-package PLXML::op_sgt;
-package PLXML::op_sle;
-package PLXML::op_sge;
-package PLXML::op_seq;
-package PLXML::op_sne;
-package PLXML::op_scmp;
-package PLXML::op_bit_and;
-package PLXML::op_bit_xor;
-package PLXML::op_bit_or;
-package PLXML::op_negate;
-package PLXML::op_i_negate;
-package PLXML::op_not;
-
-sub ast {
- my $self = shift;
- my @newkids = $self->madness('o (');
- my @swap;
- if (@newkids and $newkids[-1]->uni eq '!~') {
- @swap = @newkids;
- @newkids = ();
- }
-
- if (exists $$self{Kids}) {
- my $arg = $$self{Kids}[0];
- push @newkids, $arg->ast($self, @_) if defined $arg;
- }
- if (@swap) {
- splice @{$newkids[-1][0]{Kids}}, -2, 0, @swap; # XXX WAG
- }
- push @newkids, $self->madness(')');
-
- my $res = $self->newtype->new(Kids => [@newkids]);
- return $res;
-}
-
-package PLXML::op_complement;
-package PLXML::op_atan2;
-package PLXML::op_sin;
-package PLXML::op_cos;
-package PLXML::op_rand;
-package PLXML::op_srand;
-package PLXML::op_exp;
-package PLXML::op_log;
-package PLXML::op_sqrt;
-package PLXML::op_int;
-package PLXML::op_hex;
-package PLXML::op_oct;
-package PLXML::op_abs;
-package PLXML::op_length;
-package PLXML::op_substr;
-package PLXML::op_vec;
-package PLXML::op_index;
-package PLXML::op_rindex;
-package PLXML::op_sprintf;
-package PLXML::op_formline;
-package PLXML::op_ord;
-package PLXML::op_chr;
-package PLXML::op_crypt;
-package PLXML::op_ucfirst;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_lcfirst;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_uc;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_lc;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_quotemeta;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_rv2av;
-
-sub astnull {
- my $self = shift;
- return P5AST::op_rv2av->new(Kids => [$self->madness('$ @')]);
-}
-
-sub ast {
- my $self = shift;
-
- if (ref $$self{Kids}[0] eq 'PLXML::op_const' and $$self{mp}{'O'}) {
- return $self->madness('O');
- }
-
- my @before;
- push @before, $self->madness('dx d (');
-
- my @newkids;
- push @newkids, $self->madness('$ @ K');
- if (ref $$self{Kids}[0] ne "PLXML::op_gv") {
- push @newkids, $$self{Kids}[0]->ast();
- }
- my @after;
- push @after, $self->madness(') a');
- return $self->newtype->new(Kids => [@before, @newkids, @after]);
-}
-
-package PLXML::op_aelemfast;
-
-sub ast {
- my $self = shift;
- return $self->madness('$');
-}
-
-package PLXML::op_aelem;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('dx d');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- splice @newkids, -1, 0, $self->madness('a [');
- push @newkids, $self->madness(']');
- return P5AST::op_aelem->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @before = $self->madness('dx d');
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast(@_);
- }
- splice @newkids, -1, 0, $self->madness('a [');
- push @newkids, $self->madness(']');
-
- return $self->newtype->new(Kids => [@before, @newkids]);
-}
-
-package PLXML::op_aslice;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('[');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast(@_);
- }
- unshift @newkids, pop @newkids;
- unshift @newkids, $self->madness('dx d');
- push @newkids, $self->madness(']');
- return P5AST::op_aslice->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('[');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast(@_);
- }
- unshift @newkids, pop @newkids;
- unshift @newkids, $self->madness('dx d');
- push @newkids, $self->madness(']');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_each;
-package PLXML::op_values;
-package PLXML::op_keys;
-package PLXML::op_delete;
-package PLXML::op_exists;
-package PLXML::op_rv2hv;
-
-sub astnull {
- my $self = shift;
- return P5AST::op_rv2hv->new(Kids => [$self->madness('$')]);
-}
-
-sub ast {
- my $self = shift;
-
- my @before;
- push @before, $self->madness('dx d (');
-
- my @newkids;
- push @newkids, $self->madness('$ @ % K');
- if (ref $$self{Kids}[0] ne "PLXML::op_gv") {
- push @newkids, $$self{Kids}[0]->ast();
- }
- my @after;
- push @after, $self->madness(') a');
- return $self->newtype->new(Kids => [@before, @newkids, @after]);
-}
-
-package PLXML::op_helem;
-
-sub astnull {
- my $self = shift;
- local $::curstate; # hash subscript potentially a lineseq
- local $::curenc = $::curenc;
-
- my @newkids;
- push @newkids, $self->madness('dx d');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- splice @newkids, -1, 0, $self->madness('a {');
- push @newkids, $self->madness('}');
- return P5AST::op_helem->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
- local $::curstate; # hash subscript potentially a lineseq
- local $::curenc = $::curenc;
-
- my @before = $self->madness('dx d');
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- splice @newkids, -1, 0, $self->madness('a {');
- push @newkids, $self->madness('}');
-
- return $self->newtype->new(Kids => [@before, @newkids]);
-}
-
-
-package PLXML::op_hslice;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('{');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast(@_);
- }
- unshift @newkids, pop @newkids;
- unshift @newkids, $self->madness('dx d');
- push @newkids, $self->madness('}');
- return P5AST::op_hslice->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('{');
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast(@_);
- }
- unshift @newkids, pop @newkids;
- unshift @newkids, $self->madness('dx d');
- push @newkids, $self->madness('}');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_unpack;
-package PLXML::op_pack;
-package PLXML::op_split;
-package PLXML::op_join;
-package PLXML::op_list;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- my @retval;
- my @before;
- if (@retval = $self->madness('X')) {
- push @before, $self->madness('x o');
- return @before,@retval;
- }
- my @kids = @{$$self{Kids}};
- for my $kid (@kids) {
- next if ref $kid eq 'PLXML::op_pushmark';
- next if ref $kid eq 'PLXML::op_null' and
- defined $$kid{was} and $$kid{was} eq 'pushmark';
- push @newkids, $kid->ast($self, @_);
- }
-
- my $x = "";
- my @newnewkids = ();
- push @newnewkids, $self->madness('dx d (');
- push @newnewkids, @newkids;
- push @newnewkids, $self->madness(') :');
- return P5AST::op_list->new(Kids => [@newnewkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @retval;
- my @before;
- if (@retval = $self->madness('X')) {
- push @before, $self->madness('o');
- return $self->newtype->new(Kids => [@before,@retval]);
- }
- push @retval, $self->madness('dx d (');
-
- my @newkids;
- for my $kid (@{$$self{Kids}}) {
- push @newkids, $kid->ast($self, @_);
- }
- my $x = "";
- my @newnewkids = ();
- push @newnewkids, @newkids;
- @newkids = @newnewkids;
- push @retval, @newkids;
- push @retval, $self->madness(') :');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_lslice;
-
-sub ast {
- my $self = shift;
- my @newkids;
-
- if ($$self{mp}{q}) {
- push @newkids, $self->madness('q = Q');
- }
- elsif ($$self{mp}{x}) {
- push @newkids, $self->madness('x');
- }
- else {
- push @newkids, $self->madness('(');
- my $list = $$self{Kids}[1];
- push @newkids, $list->ast($self, @_);
- push @newkids, $self->madness(')');
- }
-
- push @newkids, $self->madness('[');
-
- my $slice = $$self{Kids}[0];
- push @newkids, $slice->ast($self, @_);
- push @newkids, $self->madness(']');
-
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_anonlist;
-package PLXML::op_anonhash;
-package PLXML::op_splice;
-package PLXML::op_push;
-package PLXML::op_pop;
-package PLXML::op_shift;
-package PLXML::op_unshift;
-package PLXML::op_sort;
-package PLXML::op_reverse;
-
-sub astnull {
- my $self = shift;
- $self->PLXML::listop::ast(@_);
-}
-
-package PLXML::op_grepstart;
-package PLXML::op_grepwhile;
-package PLXML::op_mapstart;
-package PLXML::op_mapwhile;
-package PLXML::op_range;
-
-sub ast {
- my $self = shift;
- return $self->PLXML::binop::ast(@_);
-}
-
-package PLXML::op_flip;
-package PLXML::op_flop;
-package PLXML::op_and;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- my @first = $self->madness('1');
- my @second = $self->madness('2');
- my @stuff = $$self{Kids}[0]->ast();
- if (my @I = $self->madness('I')) {
- if (@second) {
- push @newkids, @I;
- push @newkids, $self->madness('(');
- push @newkids, @stuff;
- push @newkids, $self->madness(')');
- push @newkids, @second;
- }
- else {
- push @newkids, @I;
- push @newkids, $self->madness('(');
- push @newkids, @first;
- push @newkids, $self->madness(')');
- push @newkids, @stuff;
- }
- }
- elsif (my @i = $self->madness('i')) {
- if (@second) {
- push @newkids, @second;
- push @newkids, @i;
- push @newkids, @stuff;
- }
- else {
- push @newkids, @stuff;
- push @newkids, @i;
- push @newkids, @first;
- }
- }
- elsif (my @o = $self->madness('o')) {
- if (@second) {
- push @newkids, @stuff;
- push @newkids, @o;
- push @newkids, @second;
- }
- else {
- push @newkids, @first;
- push @newkids, @o;
- push @newkids, @stuff;
- }
- }
- return P5AST::op_and->new(Kids => [@newkids]);
-}
-
-package PLXML::op_or;
-
-sub astnull {
- my $self = shift;
- my @newkids;
- my @first = $self->madness('1');
- my @second = $self->madness('2');
- my @i = $self->madness('i');
- my @stuff = $$self{Kids}[0]->ast();
- if (@second) {
- if (@i) {
- push @newkids, @second;
- push @newkids, $self->madness('i');
- push @newkids, @stuff;
- }
- else {
- push @newkids, @stuff;
- push @newkids, $self->madness('o');
- push @newkids, @second;
- }
- }
- else {
- if (@i) {
- push @newkids, @stuff;
- push @newkids, $self->madness('i');
- push @newkids, @first;
- }
- else {
- push @newkids, @first;
- push @newkids, $self->madness('o');
- push @newkids, @stuff;
- }
- }
- return "P5AST::op_$$self{was}"->new(Kids => [@newkids]);
-}
-
-
-package PLXML::op_xor;
-package PLXML::op_cond_expr;
-package PLXML::op_andassign;
-package PLXML::op_orassign;
-package PLXML::op_method;
-package PLXML::op_entersub;
-
-sub ast {
- my $self = shift;
-
- if ($$self{mp}{q}) {
- return $self->madness('q = Q');
- }
- if ($$self{mp}{X}) { # <FH> override?
- return $self->madness('X');
- }
- if ($$self{mp}{A}) {
- return $self->astmethod(@_);
- }
- if ($$self{mp}{a}) {
- return $self->astarrow(@_);
- }
-
- my @retval;
-
- my @newkids;
- my @kids = @{$$self{Kids}};
- if (@kids == 1 and ref $kids[0] eq 'PLXML::op_null' and $kids[0]{was} =~ /list/) {
- @kids = @{$kids[0]{Kids}};
- }
- my $dest = pop @kids;
- my @dest = $dest->ast($self, @_);
-
- if (ref($dest) =~ /method/) {
- my $invocant = shift @kids;
- $invocant = shift @kids if ref($invocant) eq 'PLXML::op_pushmark';
- my @invocant = $invocant->ast($self, @_);
- push @retval, @dest;
- push @retval, @invocant;
- }
- elsif (exists $$self{mp}{o} and $$self{mp}{o} eq 'do') {
- push @retval, $self->madness('o');
- push @retval, @dest;
- }
- else {
- push @retval, $self->madness('o');
- push @retval, @dest;
- }
- while (@kids) {
- my $kid = shift(@kids);
- push @newkids, $kid->ast($self, @_);
- }
-
- push @retval, $self->madness('(');
- push @retval, @newkids;
- push @retval, $self->madness(')');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-sub astmethod {
- my $self = shift;
- my @newkids;
- my @kids;
- for my $kid (@{$$self{Kids}}) {
- next if ref $kid eq 'PLXML::op_pushmark';
- next if ref $kid eq 'PLXML::op_null' and
- defined $$kid{was} and $$kid{was} eq 'pushmark';
- push @kids, $kid;
- }
- my @invocant;
- if ($$self{flags} =~ /\bSTACKED\b/) {
- push @invocant, shift(@kids)->ast($self, @_);
- }
- for my $kid (@kids) {
- push @newkids, $kid->ast($self, @_);
- }
- my $dest = pop(@newkids);
- if (ref $dest eq 'PLXML::op_rv2cv' and $$self{flags} =~ /\bMOD\b/) {
- $dest = pop(@newkids);
- }
- my $x = "";
- my @retval;
- push @retval, @invocant;
- push @retval, $self->madness('A');
- push @retval, $dest;
- push @retval, $self->madness('(');
- push @retval, @newkids;
- push @retval, $self->madness(')');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-sub astarrow {
- my $self = shift;
- my @newkids;
- my @retval;
- my @kids = @{$$self{Kids}};
- if (@kids == 1 and ref $kids[0] eq 'PLXML::op_null' and $kids[0]{was} =~ /list/) {
- @kids = @{$kids[0]{Kids}};
- }
- while (@kids > 1) {
- my $kid = shift(@kids);
- push @newkids, $kid->ast($self, @_);
- }
- my @dest = $kids[0]->ast($self, @_);
- my $x = "";
- push @retval, @dest;
- push @retval, $self->madness('a');
- push @retval, $self->madness('(');
- push @retval, @newkids;
- push @retval, $self->madness(')');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_leavesub;
-
-sub ast {
- my $self = shift;
- if (ref $$self{Kids}[0] eq "PLXML::op_null") {
- return $$self{Kids}[0]->ast(@_);
- }
- return $$self{Kids}[0]->blockast($self, @_);
-}
-
-package PLXML::op_leavesublv;
-
-sub ast {
- my $self = shift;
-
- return $$self{Kids}[0]->blockast($self, @_);
-}
-
-package PLXML::op_caller;
-package PLXML::op_warn;
-package PLXML::op_die;
-package PLXML::op_reset;
-package PLXML::op_lineseq;
-
-sub lineseq {
- my $self = shift;
- my @kids = @{$$self{Kids}};
- local $::curstate = 0; # (probably redundant, but that's okay)
- local $::prevstate = 0;
- local $::curenc = $::curenc;
- my @retval;
- my @newstuff;
- my $newprev;
- while (@kids) {
- my $kid = shift @kids;
- my $thing = $kid->ast($self, @_);
- next unless defined $thing;
- if ($::curstate ne $::prevstate) {
- if ($::prevstate) {
- push @newstuff, $::prevstate->madness(';');
- push @{$newprev->{Kids}}, @newstuff if $newprev;
- @newstuff = ();
- }
- $::prevstate = $::curstate;
- $newprev = $thing;
- push @retval, $thing;
- }
- elsif ($::prevstate) {
- push @newstuff, $thing;
- }
- else {
- push @retval, $thing;
- }
- }
- if ($::prevstate) {
- push @newstuff, $::prevstate->madness(';');
- push @{$newprev->{Kids}}, @newstuff if $newprev;
- @newstuff = ();
- $::prevstate = 0;
- }
- return @retval;
-}
-
-sub blockast {
- my $self = shift;
- local $::curstate;
-
- my @retval;
- push @retval, $self->madness('{');
-
- my @newkids = $self->PLXML::op_lineseq::lineseq(@_);
- push @retval, @newkids;
-
- push @retval, $self->madness('; }');
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_nextstate;
-
-sub newtype { return "P5AST::statement" }
-
-sub astnull {
- my $self = shift;
- my @newkids;
- push @newkids, $self->madness('L');
- $::curstate = $self;
- return P5AST::statement->new(Kids => [@newkids]);
-}
-
-sub ast {
- my $self = shift;
-
- my @newkids;
- push @newkids, $self->madness('L');
- $::curstate = $self;
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-
-package PLXML::op_dbstate;
-package PLXML::op_unstack;
-package PLXML::op_enter;
-
-sub ast { () }
-
-package PLXML::op_leave;
-
-sub astnull {
- ast(@_);
-}
-
-sub ast {
- my $self = shift;
-
- my $mad = $$self{mp}{FIRST} || "unknown";
-
- my @retval;
- if ($mad eq 'w') {
- my @newkids;
- my @tmpkids;
- push @tmpkids, $self->{Kids};
- my $anddo = $$self{Kids}[-1]{Kids}[0]{Kids};
- eval { push @newkids, $anddo->[1]->ast($self,@_); };
- push @newkids, "[[[NOANDDO]]]" if $@;
- push @newkids, $self->madness('w');
- push @newkids, $anddo->[0]->ast($self,@_);
-
- return $self->newtype->new(Kids => [@newkids]);
- }
-
- local $::curstate;
- push @retval, $self->madness('o {');
-
- my @newkids = $self->PLXML::op_lineseq::lineseq(@_);
- push @retval, @newkids;
- push @retval, $self->madness(q/; }/);
- my $retval = $self->newtype->new(Kids => [@retval]);
-
- if ($$self{mp}{C}) {
- my @before;
- my @after;
- push @before, $self->madness('I ( C )');
- if ($$self{mp}{t}) {
- push @before, $self->madness('t');
- }
- elsif ($$self{mp}{e}) {
- push @after, $self->madness('e');
- }
- return P5AST::op_cond->new(Kids => [@before, $retval, @after]);
- }
- else {
- return $retval;
- }
-}
-
-package PLXML::op_scope;
-
-sub ast {
- my $self = shift;
- local $::curstate;
-
- my @newkids;
- push @newkids, $self->madness('o');
-
- push @newkids, $self->madness('{');
- push @newkids, $self->PLXML::op_lineseq::lineseq(@_);
- push @newkids, $self->madness('; }');
-
- my @folded = $self->madness('C');
- if (@folded) {
- my @t = $self->madness('t');
- my @e = $self->madness('e');
- if (@e) {
- return $self->newtype->new(
- Kids => [
- $self->madness('I ('),
- @folded,
- $self->madness(')'),
- $self->newtype->new(Kids => [@newkids]),
- @e
- ] );
- }
- else {
- return $self->newtype->new(
- Kids => [
- $self->madness('I ('),
- @folded,
- $self->madness(')'),
- @t,
- $self->newtype->new(Kids => [@newkids])
- ] );
- }
- }
- return $self->newtype->new(Kids => [@newkids]);
-}
-
-package PLXML::op_enteriter;
-
-sub ast {
- my $self = shift;
- my (undef,$range,$var) = @{$self->{Kids}};
- my @retval;
- push @retval, $self->madness('v');
- if (!@retval and defined $var) {
- push @retval, $var->ast($self,@_);
- }
- else {
- push @retval, '';
- }
- if (ref $range eq 'PLXML::op_null' and $$self{flags} =~ /STACKED/) {
- my (undef,$min,$max) = @{$range->{Kids}};
- push @retval, $min->ast($self,@_);
- if (defined $max) {
- if (exists $$range{mp}{O}) { # deeply buried .. operator
- PLXML::prepreproc($$range{mp}{O});
- push @retval,
- $$range{mp}{'O'}{Kids}[0]{Kids}[0]{Kids}[0]{Kids}[0]->madness('o')
- }
- else {
- push @retval, '..'; # XXX missing whitespace
- }
- push @retval, $max->ast($self,@_);
- }
- }
- else {
- push @retval, $range->ast($self,@_);
- }
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_iter;
-package PLXML::op_enterloop;
-
-sub ast {
-}
-
-package PLXML::op_leaveloop;
-
-sub ast {
- my $self = shift;
-
- my @retval;
- my @newkids;
- my $enterloop = $$self{Kids}[0];
- my $nextthing = $$self{Kids}[1];
-
- if ($$self{mp}{W}) {
- push @retval, $self->madness('L');
- push @newkids, $self->madness('W d');
-
- if (ref $enterloop eq 'PLXML::op_enteriter') {
- my ($var,@rest) = @{$enterloop->ast($self,@_)->{Kids}};
- push @newkids, $var if $var;
- push @newkids, $self->madness('q ( x = Q');
- push @newkids, @rest;
- }
- else {
- push @newkids, $self->madness('(');
- push @newkids, $enterloop->ast($self,@_);
- }
- }
- my $andor;
-
- if (ref $nextthing eq 'PLXML::op_null') {
- if ($$nextthing{mp}{'1'}) {
- push @newkids, $nextthing->madness('1');
- push @newkids, $self->madness(')');
- push @newkids, $$nextthing{Kids}[0]->blockast($self,@_);
- }
- elsif ($$nextthing{mp}{'2'}) {
- push @newkids, $$nextthing{Kids}[0]->ast($self,@_);
- push @newkids, $self->madness(')');
- push @newkids, $$nextthing{mp}{'2'}->blockast($self,@_);
- }
- elsif ($$nextthing{mp}{'U'}) {
- push @newkids, $nextthing->ast($self,@_);
- }
- else {
- # bypass the op_null
- $andor = $nextthing->{Kids}[0];
- eval {
- push @newkids, $$andor{Kids}[0]->ast($self, @_);
- };
- push @newkids, $self->madness(')');
- eval {
- push @newkids, $$andor{Kids}[1]->blockast($self, @_);
- };
- }
- }
- else {
- $andor = $nextthing;
- push @newkids, $nextthing->madness('O');
- push @newkids, $self->madness(')');
- push @newkids, $nextthing->blockast($self, @_);
- }
- if ($$self{mp}{w}) {
- push @newkids, $self->madness('w');
- push @newkids, $enterloop->ast($self,@_);
- }
-
- push @retval, @newkids;
-
- return $self->newtype->new(Kids => [@retval]);
-}
-
-package PLXML::op_return;
-package PLXML::op_last;
-package PLXML::op_next;
-package PLXML::op_redo;
-package PLXML::op_dump;
-package PLXML::op_goto;
-package PLXML::op_exit;
-package PLXML::op_open;
-package PLXML::op_close;
-package PLXML::op_pipe_op;
-package PLXML::op_fileno;
-package PLXML::op_umask;
-package PLXML::op_binmode;
-package PLXML::op_tie;
-package PLXML::op_untie;
-package PLXML::op_tied;
-package PLXML::op_dbmopen;
-package PLXML::op_dbmclose;
-package PLXML::op_sselect;
-package PLXML::op_select;
-package PLXML::op_getc;
-package PLXML::op_read;
-package PLXML::op_enterwrite;
-package PLXML::op_leavewrite;
-package PLXML::op_prtf;
-package PLXML::op_print;
-package PLXML::op_say;
-package PLXML::op_sysopen;
-package PLXML::op_sysseek;
-package PLXML::op_sysread;
-package PLXML::op_syswrite;
-package PLXML::op_send;
-package PLXML::op_recv;
-package PLXML::op_eof;
-package PLXML::op_tell;
-package PLXML::op_seek;
-package PLXML::op_truncate;
-package PLXML::op_fcntl;
-package PLXML::op_ioctl;
-package PLXML::op_flock;
-package PLXML::op_socket;
-package PLXML::op_sockpair;
-package PLXML::op_bind;
-package PLXML::op_connect;
-package PLXML::op_listen;
-package PLXML::op_accept;
-package PLXML::op_shutdown;
-package PLXML::op_gsockopt;
-package PLXML::op_ssockopt;
-package PLXML::op_getsockname;
-package PLXML::op_getpeername;
-package PLXML::op_lstat;
-package PLXML::op_stat;
-package PLXML::op_ftrread;
-package PLXML::op_ftrwrite;
-package PLXML::op_ftrexec;
-package PLXML::op_fteread;
-package PLXML::op_ftewrite;
-package PLXML::op_fteexec;
-package PLXML::op_ftis;
-package PLXML::op_fteowned;
-package PLXML::op_ftrowned;
-package PLXML::op_ftzero;
-package PLXML::op_ftsize;
-package PLXML::op_ftmtime;
-package PLXML::op_ftatime;
-package PLXML::op_ftctime;
-package PLXML::op_ftsock;
-package PLXML::op_ftchr;
-package PLXML::op_ftblk;
-package PLXML::op_ftfile;
-package PLXML::op_ftdir;
-package PLXML::op_ftpipe;
-package PLXML::op_ftlink;
-package PLXML::op_ftsuid;
-package PLXML::op_ftsgid;
-package PLXML::op_ftsvtx;
-package PLXML::op_fttty;
-package PLXML::op_fttext;
-package PLXML::op_ftbinary;
-package PLXML::op_chdir;
-package PLXML::op_chown;
-package PLXML::op_chroot;
-package PLXML::op_unlink;
-package PLXML::op_chmod;
-package PLXML::op_utime;
-package PLXML::op_rename;
-package PLXML::op_link;
-package PLXML::op_symlink;
-package PLXML::op_readlink;
-package PLXML::op_mkdir;
-package PLXML::op_rmdir;
-package PLXML::op_open_dir;
-package PLXML::op_readdir;
-package PLXML::op_telldir;
-package PLXML::op_seekdir;
-package PLXML::op_rewinddir;
-package PLXML::op_closedir;
-package PLXML::op_fork;
-package PLXML::op_wait;
-package PLXML::op_waitpid;
-package PLXML::op_system;
-package PLXML::op_exec;
-package PLXML::op_kill;
-package PLXML::op_getppid;
-package PLXML::op_getpgrp;
-package PLXML::op_setpgrp;
-package PLXML::op_getpriority;
-package PLXML::op_setpriority;
-package PLXML::op_time;
-package PLXML::op_tms;
-package PLXML::op_localtime;
-package PLXML::op_gmtime;
-package PLXML::op_alarm;
-package PLXML::op_sleep;
-package PLXML::op_shmget;
-package PLXML::op_shmctl;
-package PLXML::op_shmread;
-package PLXML::op_shmwrite;
-package PLXML::op_msgget;
-package PLXML::op_msgctl;
-package PLXML::op_msgsnd;
-package PLXML::op_msgrcv;
-package PLXML::op_semget;
-package PLXML::op_semctl;
-package PLXML::op_semop;
-package PLXML::op_require;
-package PLXML::op_dofile;
-package PLXML::op_entereval;
-
-sub ast {
- my $self = shift;
- local $::curstate; # eval {} has own statement sequence
- return $self->SUPER::ast(@_);
-}
-
-package PLXML::op_leaveeval;
-package PLXML::op_entertry;
-package PLXML::op_leavetry;
-
-sub ast {
- my $self = shift;
-
- return $self->PLXML::op_leave::ast(@_);
-}
-
-package PLXML::op_ghbyname;
-package PLXML::op_ghbyaddr;
-package PLXML::op_ghostent;
-package PLXML::op_gnbyname;
-package PLXML::op_gnbyaddr;
-package PLXML::op_gnetent;
-package PLXML::op_gpbyname;
-package PLXML::op_gpbynumber;
-package PLXML::op_gprotoent;
-package PLXML::op_gsbyname;
-package PLXML::op_gsbyport;
-package PLXML::op_gservent;
-package PLXML::op_shostent;
-package PLXML::op_snetent;
-package PLXML::op_sprotoent;
-package PLXML::op_sservent;
-package PLXML::op_ehostent;
-package PLXML::op_enetent;
-package PLXML::op_eprotoent;
-package PLXML::op_eservent;
-package PLXML::op_gpwnam;
-package PLXML::op_gpwuid;
-package PLXML::op_gpwent;
-package PLXML::op_spwent;
-package PLXML::op_epwent;
-package PLXML::op_ggrnam;
-package PLXML::op_ggrgid;
-package PLXML::op_ggrent;
-package PLXML::op_sgrent;
-package PLXML::op_egrent;
-package PLXML::op_getlogin;
-package PLXML::op_syscall;
-package PLXML::op_lock;
-package PLXML::op_threadsv;
-package PLXML::op_setstate;
-package PLXML::op_method_named;
-
-sub ast {
- my $self = shift;
- return $self->madness('O');
-}
-
-package PLXML::op_dor;
-
-sub astnull {
- my $self = shift;
- $self->PLXML::op_or::astnull(@_);
-}
-
-package PLXML::op_dorassign;
-package PLXML::op_custom;
-
diff --git a/mad/P5AST.pm b/mad/P5AST.pm
deleted file mode 100644
index 13a35e18d0..0000000000
--- a/mad/P5AST.pm
+++ /dev/null
@@ -1,541 +0,0 @@
-package P5AST;
-
-$::herequeue = '';
-
-1;
-
-{
- my %newkey = qw(
- );
-
- sub translate {
- my $class = shift;
- my $key = shift;
- $key = $newkey{$key} || "op_$key";
- return "P5AST::$key";
- }
-}
-
-sub new {
- my $class = shift;
- bless {@_}, $class;
-}
-
-sub AUTOLOAD {
- warn "AUTOLOAD $P5AST::AUTOLOAD(" . join(',', @_) . ")\n";
-}
-
-sub DESTROY { }
-
-sub p5arraytext {
- my $kid = shift;
- my $text = "";
- for my $subkid (@$kid) {
- my $type = ref $subkid;
- if ($type eq 'ARRAY') {
- if ($dowarn) {
- warn "Extra array\n";
- $text .= '〔 '. p5arraytext($subkid) . ' 〕';
- }
- else {
- $text .= p5arraytext($subkid);
- }
- }
- elsif ($type =~ /^p5::/) {
- my $newtext = $subkid->enc();
- if ($::herequeue && $newtext =~ s/\n/\n$::herequeue/) {
- $::herequeue = '';
- }
- $text .= $newtext;
- }
- elsif ($type) {
- $text .= $subkid->text(@_);
- }
- else {
- $text .= $subkid;
- }
- }
- return $text;
-}
-
-sub p5text {
- my $self = shift;
-# my $pre = $self->pretext();
-# my $post = $self->posttext();
- my $text = "";
- foreach my $kid (@{$$self{Kids}}) {
- my $type = ref $kid;
- if ($type eq 'ARRAY') {
- $text .= p5arraytext($kid);
- }
- elsif ($type =~ /^p5::/) {
- my $newtext = $kid->enc();
- if ($::herequeue && $newtext =~ s/\n/\n$::herequeue/) {
- $::herequeue = '';
- }
- $text .= $newtext;
- }
- elsif ($type eq "chomp") {
- $text =~ s/\n$//g;
- }
- elsif ($type) {
- $text .= $kid->p5text(@_);
- }
- elsif (defined $kid) {
- $text .= $kid;
- }
- else {
- $text .= '[[[ UNDEF ]]]';
- }
- }
- return $text;
-}
-
-sub p5subtext {
- my $self = shift;
- my @text;
- foreach my $kid (@{$$self{Kids}}) {
- my $text = $kid->p5text(@_);
- push @text, $text if defined $text;
- }
- return @text;
-}
-
-sub p6text {
- return $_[0]->p5text(); # assume it's the same
-}
-
-package P5AST::heredoc; @ISA = 'P5AST';
-
-sub p5text {
- my $self = shift;
- my $newdoc;
- {
- local $::herequeue; # don't interpolate outer heredoc yet
- $newdoc = $self->{doc}->p5text(@_) . $self->{end}->enc();
- if ($::herequeue) { # heredoc within the heredoc?
- $newdoc .= $::herequeue;
- $::herequeue = '';
- }
- }
- $::herequeue .= $newdoc;
- my $start = $self->{start};
- my $type = ref $start;
- if ($type =~ /^p5::/) { # XXX too much cut-n-paste here...
- return $start->enc();
- }
- elsif ($type) {
- return $start->p5text(@_);
- }
- else {
- return $start;
- }
-}
-
-package P5AST::BAD;
-
-sub p5text {
- my $self = shift;
- my $t = ref $t;
- warn "Shouldn't have a node of type $t";
-}
-
-package P5AST::baseop; @ISA = 'P5AST';
-package P5AST::baseop_unop; @ISA = 'P5AST::baseop';
-package P5AST::binop; @ISA = 'P5AST::baseop';
-package P5AST::cop; @ISA = 'P5AST::baseop';
-package P5AST::filestatop; @ISA = 'P5AST::baseop';
-package P5AST::listop; @ISA = 'P5AST::baseop';
-package P5AST::logop; @ISA = 'P5AST::baseop';
-package P5AST::loop; @ISA = 'P5AST::baseop';
-package P5AST::loopexop; @ISA = 'P5AST::baseop';
-package P5AST::padop; @ISA = 'P5AST::baseop';
-package P5AST::padop_svop; @ISA = 'P5AST::baseop';
-package P5AST::pmop; @ISA = 'P5AST::baseop';
-package P5AST::pvop_svop; @ISA = 'P5AST::baseop';
-package P5AST::unop; @ISA = 'P5AST::baseop';
-
-# Nothing.
-
-package P5AST::op_null; @ISA = 'P5AST::baseop';
-package P5AST::op_stub; @ISA = 'P5AST::baseop';
-package P5AST::op_scalar; @ISA = 'P5AST::baseop_unop';
-
-# Pushy stuff.
-
-package P5AST::op_pushmark; @ISA = 'P5AST::baseop';
-package P5AST::op_wantarray; @ISA = 'P5AST::baseop';
-package P5AST::op_const; @ISA = 'P5AST::padop_svop';
-package P5AST::op_gvsv; @ISA = 'P5AST::padop_svop';
-package P5AST::op_gv; @ISA = 'P5AST::padop_svop';
-package P5AST::op_gelem; @ISA = 'P5AST::binop';
-package P5AST::op_padsv; @ISA = 'P5AST::baseop';
-package P5AST::op_padav; @ISA = 'P5AST::baseop';
-package P5AST::op_padhv; @ISA = 'P5AST::baseop';
-package P5AST::op_padany; @ISA = 'P5AST::baseop';
-package P5AST::op_pushre; @ISA = 'P5AST::pmop';
-package P5AST::op_rv2gv; @ISA = 'P5AST::unop';
-package P5AST::op_rv2sv; @ISA = 'P5AST::unop';
-package P5AST::op_av2arylen; @ISA = 'P5AST::unop';
-package P5AST::op_rv2cv; @ISA = 'P5AST::unop';
-package P5AST::op_anoncode; @ISA = 'P5AST::padop_svop';
-package P5AST::op_prototype; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_refgen; @ISA = 'P5AST::unop';
-package P5AST::op_srefgen; @ISA = 'P5AST::unop';
-package P5AST::op_ref; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_bless; @ISA = 'P5AST::listop';
-package P5AST::op_backtick; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_glob; @ISA = 'P5AST::listop';
-package P5AST::op_readline; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_rcatline; @ISA = 'P5AST::padop_svop';
-package P5AST::op_regcmaybe; @ISA = 'P5AST::unop';
-package P5AST::op_regcreset; @ISA = 'P5AST::unop';
-package P5AST::op_regcomp; @ISA = 'P5AST::logop';
-package P5AST::op_match; @ISA = 'P5AST::pmop';
-package P5AST::op_qr; @ISA = 'P5AST::pmop';
-package P5AST::op_subst; @ISA = 'P5AST::pmop';
-package P5AST::op_substcont; @ISA = 'P5AST::logop';
-package P5AST::op_trans; @ISA = 'P5AST::pvop_svop';
-package P5AST::op_sassign; @ISA = 'P5AST::baseop';
-package P5AST::op_aassign; @ISA = 'P5AST::binop';
-package P5AST::op_chop; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_schop; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_chomp; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_schomp; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_defined; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_undef; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_study; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_pos; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_preinc; @ISA = 'P5AST::unop';
-package P5AST::op_i_preinc; @ISA = 'P5AST::unop';
-package P5AST::op_predec; @ISA = 'P5AST::unop';
-package P5AST::op_i_predec; @ISA = 'P5AST::unop';
-package P5AST::op_postinc; @ISA = 'P5AST::unop';
-package P5AST::op_i_postinc; @ISA = 'P5AST::unop';
-package P5AST::op_postdec; @ISA = 'P5AST::unop';
-package P5AST::op_i_postdec; @ISA = 'P5AST::unop';
-package P5AST::op_pow; @ISA = 'P5AST::binop';
-package P5AST::op_multiply; @ISA = 'P5AST::binop';
-package P5AST::op_i_multiply; @ISA = 'P5AST::binop';
-package P5AST::op_divide; @ISA = 'P5AST::binop';
-package P5AST::op_i_divide; @ISA = 'P5AST::binop';
-package P5AST::op_modulo; @ISA = 'P5AST::binop';
-package P5AST::op_i_modulo; @ISA = 'P5AST::binop';
-package P5AST::op_repeat; @ISA = 'P5AST::binop';
-package P5AST::op_add; @ISA = 'P5AST::binop';
-package P5AST::op_i_add; @ISA = 'P5AST::binop';
-package P5AST::op_subtract; @ISA = 'P5AST::binop';
-package P5AST::op_i_subtract; @ISA = 'P5AST::binop';
-package P5AST::op_concat; @ISA = 'P5AST::binop';
-package P5AST::op_stringify; @ISA = 'P5AST::listop';
-package P5AST::op_left_shift; @ISA = 'P5AST::binop';
-package P5AST::op_right_shift; @ISA = 'P5AST::binop';
-package P5AST::op_lt; @ISA = 'P5AST::binop';
-package P5AST::op_i_lt; @ISA = 'P5AST::binop';
-package P5AST::op_gt; @ISA = 'P5AST::binop';
-package P5AST::op_i_gt; @ISA = 'P5AST::binop';
-package P5AST::op_le; @ISA = 'P5AST::binop';
-package P5AST::op_i_le; @ISA = 'P5AST::binop';
-package P5AST::op_ge; @ISA = 'P5AST::binop';
-package P5AST::op_i_ge; @ISA = 'P5AST::binop';
-package P5AST::op_eq; @ISA = 'P5AST::binop';
-package P5AST::op_i_eq; @ISA = 'P5AST::binop';
-package P5AST::op_ne; @ISA = 'P5AST::binop';
-package P5AST::op_i_ne; @ISA = 'P5AST::binop';
-package P5AST::op_ncmp; @ISA = 'P5AST::binop';
-package P5AST::op_i_ncmp; @ISA = 'P5AST::binop';
-package P5AST::op_slt; @ISA = 'P5AST::binop';
-package P5AST::op_sgt; @ISA = 'P5AST::binop';
-package P5AST::op_sle; @ISA = 'P5AST::binop';
-package P5AST::op_sge; @ISA = 'P5AST::binop';
-package P5AST::op_seq; @ISA = 'P5AST::binop';
-package P5AST::op_sne; @ISA = 'P5AST::binop';
-package P5AST::op_scmp; @ISA = 'P5AST::binop';
-package P5AST::op_bit_and; @ISA = 'P5AST::binop';
-package P5AST::op_bit_xor; @ISA = 'P5AST::binop';
-package P5AST::op_bit_or; @ISA = 'P5AST::binop';
-package P5AST::op_negate; @ISA = 'P5AST::unop';
-package P5AST::op_i_negate; @ISA = 'P5AST::unop';
-package P5AST::op_not; @ISA = 'P5AST::unop';
-package P5AST::op_complement; @ISA = 'P5AST::unop';
-package P5AST::op_atan2; @ISA = 'P5AST::listop';
-package P5AST::op_sin; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_cos; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_rand; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_srand; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_exp; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_log; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_sqrt; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_int; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_hex; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_oct; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_abs; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_length; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_substr; @ISA = 'P5AST::listop';
-package P5AST::op_vec; @ISA = 'P5AST::listop';
-package P5AST::op_index; @ISA = 'P5AST::listop';
-package P5AST::op_rindex; @ISA = 'P5AST::listop';
-package P5AST::op_sprintf; @ISA = 'P5AST::listop';
-package P5AST::op_formline; @ISA = 'P5AST::listop';
-package P5AST::op_ord; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_chr; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_crypt; @ISA = 'P5AST::listop';
-package P5AST::op_ucfirst; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_lcfirst; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_uc; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_lc; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_quotemeta; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_rv2av; @ISA = 'P5AST::unop';
-package P5AST::op_aelemfast; @ISA = 'P5AST::padop_svop';
-package P5AST::op_aelem; @ISA = 'P5AST::binop';
-package P5AST::op_aslice; @ISA = 'P5AST::listop';
-package P5AST::op_each; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_values; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_keys; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_delete; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_exists; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_rv2hv; @ISA = 'P5AST::unop';
-package P5AST::op_helem; @ISA = 'P5AST::listop';
-package P5AST::op_hslice; @ISA = 'P5AST::listop';
-package P5AST::op_unpack; @ISA = 'P5AST::listop';
-package P5AST::op_pack; @ISA = 'P5AST::listop';
-package P5AST::op_split; @ISA = 'P5AST::listop';
-package P5AST::op_join; @ISA = 'P5AST::listop';
-package P5AST::op_list; @ISA = 'P5AST::listop';
-package P5AST::op_lslice; @ISA = 'P5AST::binop';
-package P5AST::op_anonlist; @ISA = 'P5AST::listop';
-package P5AST::op_anonhash; @ISA = 'P5AST::listop';
-package P5AST::op_splice; @ISA = 'P5AST::listop';
-package P5AST::op_push; @ISA = 'P5AST::listop';
-package P5AST::op_pop; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_shift; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_unshift; @ISA = 'P5AST::listop';
-package P5AST::op_sort; @ISA = 'P5AST::listop';
-package P5AST::op_reverse; @ISA = 'P5AST::listop';
-package P5AST::op_grepstart; @ISA = 'P5AST::listop';
-package P5AST::op_grepwhile; @ISA = 'P5AST::logop';
-package P5AST::op_mapstart; @ISA = 'P5AST::listop';
-package P5AST::op_mapwhile; @ISA = 'P5AST::logop';
-package P5AST::op_range; @ISA = 'P5AST::logop';
-package P5AST::op_flip; @ISA = 'P5AST::unop';
-package P5AST::op_flop; @ISA = 'P5AST::unop';
-package P5AST::op_and; @ISA = 'P5AST::logop';
-package P5AST::op_or; @ISA = 'P5AST::logop';
-package P5AST::op_xor; @ISA = 'P5AST::binop';
-package P5AST::op_cond_expr; @ISA = 'P5AST::logop';
-package P5AST::op_andassign; @ISA = 'P5AST::logop';
-package P5AST::op_orassign; @ISA = 'P5AST::logop';
-package P5AST::op_method; @ISA = 'P5AST::unop';
-package P5AST::op_entersub; @ISA = 'P5AST::unop';
-package P5AST::op_leavesub; @ISA = 'P5AST::unop';
-package P5AST::op_leavesublv; @ISA = 'P5AST::unop';
-package P5AST::op_caller; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_warn; @ISA = 'P5AST::listop';
-package P5AST::op_die; @ISA = 'P5AST::listop';
-package P5AST::op_reset; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_lineseq; @ISA = 'P5AST::listop';
-package P5AST::op_nextstate; @ISA = 'P5AST::BAD';
-package P5AST::op_dbstate; @ISA = 'P5AST::cop';
-package P5AST::op_unstack; @ISA = 'P5AST::baseop';
-package P5AST::op_enter; @ISA = 'P5AST::baseop';
-package P5AST::op_leave; @ISA = 'P5AST::listop';
-package P5AST::op_scope; @ISA = 'P5AST::listop';
-package P5AST::op_enteriter; @ISA = 'P5AST::loop';
-package P5AST::op_iter; @ISA = 'P5AST::baseop';
-package P5AST::op_enterloop; @ISA = 'P5AST::loop';
-package P5AST::op_leaveloop; @ISA = 'P5AST::binop';
-package P5AST::op_return; @ISA = 'P5AST::listop';
-package P5AST::op_last; @ISA = 'P5AST::loopexop';
-package P5AST::op_next; @ISA = 'P5AST::loopexop';
-package P5AST::op_redo; @ISA = 'P5AST::loopexop';
-package P5AST::op_dump; @ISA = 'P5AST::loopexop';
-package P5AST::op_goto; @ISA = 'P5AST::loopexop';
-package P5AST::op_exit; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_open; @ISA = 'P5AST::listop';
-package P5AST::op_close; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_pipe_op; @ISA = 'P5AST::listop';
-package P5AST::op_fileno; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_umask; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_binmode; @ISA = 'P5AST::listop';
-package P5AST::op_tie; @ISA = 'P5AST::listop';
-package P5AST::op_untie; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_tied; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_dbmopen; @ISA = 'P5AST::listop';
-package P5AST::op_dbmclose; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_sselect; @ISA = 'P5AST::listop';
-package P5AST::op_select; @ISA = 'P5AST::listop';
-package P5AST::op_getc; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_read; @ISA = 'P5AST::listop';
-package P5AST::op_enterwrite; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_leavewrite; @ISA = 'P5AST::unop';
-package P5AST::op_prtf; @ISA = 'P5AST::listop';
-package P5AST::op_print; @ISA = 'P5AST::listop';
-package P5AST::op_say; @ISA = 'P5AST::listop';
-package P5AST::op_sysopen; @ISA = 'P5AST::listop';
-package P5AST::op_sysseek; @ISA = 'P5AST::listop';
-package P5AST::op_sysread; @ISA = 'P5AST::listop';
-package P5AST::op_syswrite; @ISA = 'P5AST::listop';
-package P5AST::op_send; @ISA = 'P5AST::listop';
-package P5AST::op_recv; @ISA = 'P5AST::listop';
-package P5AST::op_eof; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_tell; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_seek; @ISA = 'P5AST::listop';
-package P5AST::op_truncate; @ISA = 'P5AST::listop';
-package P5AST::op_fcntl; @ISA = 'P5AST::listop';
-package P5AST::op_ioctl; @ISA = 'P5AST::listop';
-package P5AST::op_flock; @ISA = 'P5AST::listop';
-package P5AST::op_socket; @ISA = 'P5AST::listop';
-package P5AST::op_sockpair; @ISA = 'P5AST::listop';
-package P5AST::op_bind; @ISA = 'P5AST::listop';
-package P5AST::op_connect; @ISA = 'P5AST::listop';
-package P5AST::op_listen; @ISA = 'P5AST::listop';
-package P5AST::op_accept; @ISA = 'P5AST::listop';
-package P5AST::op_shutdown; @ISA = 'P5AST::listop';
-package P5AST::op_gsockopt; @ISA = 'P5AST::listop';
-package P5AST::op_ssockopt; @ISA = 'P5AST::listop';
-package P5AST::op_getsockname; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_getpeername; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_lstat; @ISA = 'P5AST::filestatop';
-package P5AST::op_stat; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftrread; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftrwrite; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftrexec; @ISA = 'P5AST::filestatop';
-package P5AST::op_fteread; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftewrite; @ISA = 'P5AST::filestatop';
-package P5AST::op_fteexec; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftis; @ISA = 'P5AST::filestatop';
-package P5AST::op_fteowned; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftrowned; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftzero; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftsize; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftmtime; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftatime; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftctime; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftsock; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftchr; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftblk; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftfile; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftdir; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftpipe; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftlink; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftsuid; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftsgid; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftsvtx; @ISA = 'P5AST::filestatop';
-package P5AST::op_fttty; @ISA = 'P5AST::filestatop';
-package P5AST::op_fttext; @ISA = 'P5AST::filestatop';
-package P5AST::op_ftbinary; @ISA = 'P5AST::filestatop';
-package P5AST::op_chdir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_chown; @ISA = 'P5AST::listop';
-package P5AST::op_chroot; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_unlink; @ISA = 'P5AST::listop';
-package P5AST::op_chmod; @ISA = 'P5AST::listop';
-package P5AST::op_utime; @ISA = 'P5AST::listop';
-package P5AST::op_rename; @ISA = 'P5AST::listop';
-package P5AST::op_link; @ISA = 'P5AST::listop';
-package P5AST::op_symlink; @ISA = 'P5AST::listop';
-package P5AST::op_readlink; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_mkdir; @ISA = 'P5AST::listop';
-package P5AST::op_rmdir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_open_dir; @ISA = 'P5AST::listop';
-package P5AST::op_readdir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_telldir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_seekdir; @ISA = 'P5AST::listop';
-package P5AST::op_rewinddir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_closedir; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_fork; @ISA = 'P5AST::baseop';
-package P5AST::op_wait; @ISA = 'P5AST::baseop';
-package P5AST::op_waitpid; @ISA = 'P5AST::listop';
-package P5AST::op_system; @ISA = 'P5AST::listop';
-package P5AST::op_exec; @ISA = 'P5AST::listop';
-package P5AST::op_kill; @ISA = 'P5AST::listop';
-package P5AST::op_getppid; @ISA = 'P5AST::baseop';
-package P5AST::op_getpgrp; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_setpgrp; @ISA = 'P5AST::listop';
-package P5AST::op_getpriority; @ISA = 'P5AST::listop';
-package P5AST::op_setpriority; @ISA = 'P5AST::listop';
-package P5AST::op_time; @ISA = 'P5AST::baseop';
-package P5AST::op_tms; @ISA = 'P5AST::baseop';
-package P5AST::op_localtime; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_gmtime; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_alarm; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_sleep; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_shmget; @ISA = 'P5AST::listop';
-package P5AST::op_shmctl; @ISA = 'P5AST::listop';
-package P5AST::op_shmread; @ISA = 'P5AST::listop';
-package P5AST::op_shmwrite; @ISA = 'P5AST::listop';
-package P5AST::op_msgget; @ISA = 'P5AST::listop';
-package P5AST::op_msgctl; @ISA = 'P5AST::listop';
-package P5AST::op_msgsnd; @ISA = 'P5AST::listop';
-package P5AST::op_msgrcv; @ISA = 'P5AST::listop';
-package P5AST::op_semget; @ISA = 'P5AST::listop';
-package P5AST::op_semctl; @ISA = 'P5AST::listop';
-package P5AST::op_semop; @ISA = 'P5AST::listop';
-package P5AST::op_require; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_dofile; @ISA = 'P5AST::unop';
-package P5AST::op_entereval; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_leaveeval; @ISA = 'P5AST::unop';
-package P5AST::op_entertry; @ISA = 'P5AST::logop';
-package P5AST::op_leavetry; @ISA = 'P5AST::listop';
-package P5AST::op_ghbyname; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_ghbyaddr; @ISA = 'P5AST::listop';
-package P5AST::op_ghostent; @ISA = 'P5AST::baseop';
-package P5AST::op_gnbyname; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_gnbyaddr; @ISA = 'P5AST::listop';
-package P5AST::op_gnetent; @ISA = 'P5AST::baseop';
-package P5AST::op_gpbyname; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_gpbynumber; @ISA = 'P5AST::listop';
-package P5AST::op_gprotoent; @ISA = 'P5AST::baseop';
-package P5AST::op_gsbyname; @ISA = 'P5AST::listop';
-package P5AST::op_gsbyport; @ISA = 'P5AST::listop';
-package P5AST::op_gservent; @ISA = 'P5AST::baseop';
-package P5AST::op_shostent; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_snetent; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_sprotoent; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_sservent; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_ehostent; @ISA = 'P5AST::baseop';
-package P5AST::op_enetent; @ISA = 'P5AST::baseop';
-package P5AST::op_eprotoent; @ISA = 'P5AST::baseop';
-package P5AST::op_eservent; @ISA = 'P5AST::baseop';
-package P5AST::op_gpwnam; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_gpwuid; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_gpwent; @ISA = 'P5AST::baseop';
-package P5AST::op_spwent; @ISA = 'P5AST::baseop';
-package P5AST::op_epwent; @ISA = 'P5AST::baseop';
-package P5AST::op_ggrnam; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_ggrgid; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_ggrent; @ISA = 'P5AST::baseop';
-package P5AST::op_sgrent; @ISA = 'P5AST::baseop';
-package P5AST::op_egrent; @ISA = 'P5AST::baseop';
-package P5AST::op_getlogin; @ISA = 'P5AST::baseop';
-package P5AST::op_syscall; @ISA = 'P5AST::listop';
-package P5AST::op_lock; @ISA = 'P5AST::baseop_unop';
-package P5AST::op_threadsv; @ISA = 'P5AST::baseop';
-package P5AST::op_setstate; @ISA = 'P5AST::cop';
-package P5AST::op_method_named; @ISA = 'P5AST::padop_svop';
-package P5AST::op_dor; @ISA = 'P5AST::logop';
-package P5AST::op_dorassign; @ISA = 'P5AST::logop';
-package P5AST::op_custom; @ISA = 'P5AST::baseop';
-
-# New node types (implicit types within perl)
-
-package P5AST::statement; @ISA = 'P5AST::cop';
-package P5AST::peg; @ISA = 'P5AST::baseop';
-package P5AST::parens; @ISA = 'P5AST::baseop';
-package P5AST::bindop; @ISA = 'P5AST::baseop';
-package P5AST::nothing; @ISA = 'P5AST::baseop';
-package P5AST::condstate; @ISA = 'P5AST::logop';
-package P5AST::use; @ISA = 'P5AST::baseop';
-package P5AST::ternary; @ISA = 'P5AST::baseop';
-package P5AST::sub; @ISA = 'P5AST::baseop';
-package P5AST::condmod; @ISA = 'P5AST::logop';
-package P5AST::package; @ISA = 'P5AST::baseop';
-package P5AST::format; @ISA = 'P5AST::baseop';
-package P5AST::qwliteral; @ISA = 'P5AST::baseop';
-package P5AST::quote; @ISA = 'P5AST::baseop';
-package P5AST::token; @ISA = 'P5AST::baseop';
-package P5AST::attrlist; @ISA = 'P5AST::baseop';
-package P5AST::listelem; @ISA = 'P5AST::baseop';
-package P5AST::preplus; @ISA = 'P5AST::baseop';
-package P5AST::doblock; @ISA = 'P5AST::baseop';
-package P5AST::cfor; @ISA = 'P5AST::baseop';
-package P5AST::pmop; @ISA = 'P5AST::baseop';
diff --git a/mad/P5re.pm b/mad/P5re.pm
deleted file mode 100644
index 24037ecc0d..0000000000
--- a/mad/P5re.pm
+++ /dev/null
@@ -1,650 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright (C) 2005, Larry Wall
-# This software may be copied under the same terms as Perl.
-
-package P5re;
-
-use strict;
-use warnings;
-
-our @EXPORT_OK = qw(re re2xml qr2xml);
-
-my $indent = 0;
-my $in = "";
-my $delim = 1;
-my $debug = 0;
-my $maxbrack;
-
-our $extended;
-our $insensitive;
-our $singleline;
-our $multiline;
-
-my %xmlish = (
- chr(0x00) => "STUPIDXML(#x00)",
- chr(0x01) => "STUPIDXML(#x01)",
- chr(0x02) => "STUPIDXML(#x02)",
- chr(0x03) => "STUPIDXML(#x03)",
- chr(0x04) => "STUPIDXML(#x04)",
- chr(0x05) => "STUPIDXML(#x05)",
- chr(0x06) => "STUPIDXML(#x06)",
- chr(0x07) => "STUPIDXML(#x07)",
- chr(0x08) => "STUPIDXML(#x08)",
- chr(0x09) => "&#9;",
- chr(0x0a) => "&#10;",
- chr(0x0b) => "STUPIDXML(#x0b)",
- chr(0x0c) => "STUPIDXML(#x0c)",
- chr(0x0d) => "&#13;",
- chr(0x0e) => "STUPIDXML(#x0e)",
- chr(0x0f) => "STUPIDXML(#x0f)",
- chr(0x10) => "STUPIDXML(#x10)",
- chr(0x11) => "STUPIDXML(#x11)",
- chr(0x12) => "STUPIDXML(#x12)",
- chr(0x13) => "STUPIDXML(#x13)",
- chr(0x14) => "STUPIDXML(#x14)",
- chr(0x15) => "STUPIDXML(#x15)",
- chr(0x16) => "STUPIDXML(#x16)",
- chr(0x17) => "STUPIDXML(#x17)",
- chr(0x18) => "STUPIDXML(#x18)",
- chr(0x19) => "STUPIDXML(#x19)",
- chr(0x1a) => "STUPIDXML(#x1a)",
- chr(0x1b) => "STUPIDXML(#x1b)",
- chr(0x1c) => "STUPIDXML(#x1c)",
- chr(0x1d) => "STUPIDXML(#x1d)",
- chr(0x1e) => "STUPIDXML(#x1e)",
- chr(0x1f) => "STUPIDXML(#x1f)",
- chr(0x7f) => "STUPIDXML(#x7f)",
- chr(0x80) => "STUPIDXML(#x80)",
- chr(0x81) => "STUPIDXML(#x81)",
- chr(0x82) => "STUPIDXML(#x82)",
- chr(0x83) => "STUPIDXML(#x83)",
- chr(0x84) => "STUPIDXML(#x84)",
- chr(0x86) => "STUPIDXML(#x86)",
- chr(0x87) => "STUPIDXML(#x87)",
- chr(0x88) => "STUPIDXML(#x88)",
- chr(0x89) => "STUPIDXML(#x89)",
- chr(0x90) => "STUPIDXML(#x90)",
- chr(0x91) => "STUPIDXML(#x91)",
- chr(0x92) => "STUPIDXML(#x92)",
- chr(0x93) => "STUPIDXML(#x93)",
- chr(0x94) => "STUPIDXML(#x94)",
- chr(0x95) => "STUPIDXML(#x95)",
- chr(0x96) => "STUPIDXML(#x96)",
- chr(0x97) => "STUPIDXML(#x97)",
- chr(0x98) => "STUPIDXML(#x98)",
- chr(0x99) => "STUPIDXML(#x99)",
- chr(0x9a) => "STUPIDXML(#x9a)",
- chr(0x9b) => "STUPIDXML(#x9b)",
- chr(0x9c) => "STUPIDXML(#x9c)",
- chr(0x9d) => "STUPIDXML(#x9d)",
- chr(0x9e) => "STUPIDXML(#x9e)",
- chr(0x9f) => "STUPIDXML(#x9f)",
- '<' => "&lt;",
- '>' => "&gt;",
- '&' => "&amp;",
- '"' => "&#34;", # XML idiocy
-);
-
-sub xmlquote {
- my $text = shift;
- $text =~ s/(.)/$xmlish{$1} || $1/seg;
- return $text;
-}
-
-sub text {
- my $self = shift;
- return xmlquote($self->{text});
-}
-
-sub rep {
- my $self = shift;
- return xmlquote($self->{rep});
-}
-
-sub xmlkids {
- my $self = shift;
- my $array = $self->{Kids};
- my $ret = "";
- $indent += 2;
- $in = ' ' x $indent;
- foreach my $chunk (@$array) {
- if (ref $chunk eq "ARRAY") {
- die;
- }
- elsif (ref $chunk) {
- $ret .= $chunk->xml();
- }
- else {
- warn $chunk;
- }
- }
- $indent -= 2;
- $in = ' ' x $indent;
- return $ret;
-};
-
-package P5re::RE; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my %flags = @_;
- if ($flags{indent}) {
- $indent = delete $flags{indent} || 0;
- $in = ' ' x $indent;
- }
-
- my $kind = $self->{kind};
-
- my $first = $self->{Kids}[0];
- if ($first and ref $first eq 'P5re::Mod') {
- for my $c (qw(i m s x)) {
- next unless defined $first->{$c};
- $self->{$c} = $first->{$c};
- delete $first->{$c};
- }
- }
-
- my $modifiers = "";
- foreach my $k (sort keys %$self) {
- next if $k eq 'kind' or $k eq "Kids";
- my $v = $self->{$k};
- $k =~ s/^[A-Z]//;
- $modifiers .= " $k=\"$v\"";
- }
- my $text = "$in<$kind$modifiers>\n";
- $text .= $self->xmlkids();
- $text .= "$in</$kind>\n";
- return $text;
-}
-
-package P5re::Alt; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $text = "$in<alt>\n";
- $text .= $self->xmlkids();
- $text .= "$in</alt>\n";
- return $text;
-}
-
-#package P5re::Atom; our @ISA = 'P5re';
-#
-#sub xml {
-# my $self = shift;
-# my $text = "$in<atom>\n";
-# $text .= $self->xmlkids();
-# $text .= "$in</atom>\n";
-# return $text;
-#}
-
-package P5re::Quant; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $q = $self->{rep};
- my $min = $self->{min};
- my $max = $self->{max};
- my $greedy = $self->{greedy};
- my $text = "$in<quant rep=\"$q\" min=\"$min\" max=\"$max\" greedy=\"$greedy\">\n";
- $text .= $self->xmlkids();
- $text .= "$in</quant>\n";
- return $text;
-}
-
-package P5re::White; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<white text=\"" . $self->text() . "\" />\n";
-}
-
-package P5re::Char; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<char text=\"" . $self->text() . "\" />\n";
-}
-
-package P5re::Comment; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<comment rep=\"" . $self->rep() . "\" />\n";
-}
-
-package P5re::Mod; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $modifiers = "";
- foreach my $k (sort keys %$self) {
- next if $k eq 'kind' or $k eq "Kids";
- my $v = $self->{$k};
- $k =~ s/^[A-Z]//;
- $modifiers .= " $k=\"$v\"";
- }
- return "$in<mod$modifiers />\n";
-}
-
-package P5re::Meta; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $sem = "";
- if ($self->{sem}) {
- $sem = 'sem="' . $self->{sem} . '" '
- }
- return "$in<meta rep=\"" . $self->rep() . "\" $sem/>\n";
-}
-
-package P5re::Back; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<backref to=\"" . P5re::xmlquote($self->{to}) . "\"/>\n";
-}
-
-package P5re::Var; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<var name=\"" . $self->{name} . "\" />\n";
-}
-
-package P5re::Closure; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- return "$in<closure rep=\"" . P5re::xmlquote($self->{rep}) . "\" />\n";
-}
-
-package P5re::CClass; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $neg = $self->{neg} ? "negated" : "normal";
- my $text = "$in<cclass match=\"$neg\">\n";
- $text .= $self->xmlkids();
- $text .= "$in</cclass>\n";
- return $text;
-}
-
-package P5re::Range; our @ISA = 'P5re';
-
-sub xml {
- my $self = shift;
- my $text = "$in<range>\n";
- $text .= $self->xmlkids();
- $text .= "$in</range>\n";
- return $text;
-}
-
-package P5re;
-
-unless (caller) {
- while (<>) {
- chomp;
- print qr2xml($_);
- print "#######################################\n";
- }
-}
-
-sub qrparse {
- my $qr = shift;
- my $mod;
- if ($qr =~ /^s/) {
- $qr =~ s/^(?:\w*)(\W)((?:\\.|.)*?)\1(.*)\1(\w*)$/$2/;
- $mod = $4;
- }
- else {
- $qr =~ s/^(?:\w*)(\W)(.*)\1(\w*)$/$2/;
- $mod = $3;
- }
- substr($qr,0,0) = "(?$mod)" if defined $mod and $mod ne "";
- return parse($qr,@_);
-}
-
-sub qr2xml {
- return qrparse(@_)->xml();
-}
-
-sub re2xml {
- my $re = shift;
- return parse($re,@_)->xml();
-}
-
-sub parse {
- local($_) = shift;
- my %flags = @_;
- $maxbrack = 0;
- $indent = delete $flags{indent} || 0;
- $in = ' ' x $indent;
- warn "$_\n" if $debug;
- my $re = re('re');
- @$re{keys %flags} = values %flags;
- return $re;
-}
-
-sub re {
- my $kind = shift;
-
- my $oldextended = $extended;
- my $oldinsensitive = $insensitive;
- my $oldmultiline = $multiline;
- my $oldsingleline = $singleline;
-
- local $extended = $extended;
- local $insensitive = $insensitive;
- local $multiline = $multiline;
- local $singleline = $singleline;
-
- my $first = alt();
-
- my $re;
- if (not /^\|/) {
- $first->{kind} = $kind;
- $re = bless $first, "P5re::RE"; # rebless to remove single alt
- }
- else {
- my @alts = ($first);
-
- while (s/^\|//) {
- push(@alts, alt());
- }
- $re = bless { Kids => [@alts], kind => $kind }, "P5re::RE";
- }
-
- $re->{x} = $oldextended || 0;
- $re->{i} = $oldinsensitive || 0;
- $re->{m} = $oldmultiline || 0;
- $re->{s} = $oldsingleline || 0;
- return $re;
-}
-
-sub alt {
- my @quants;
-
- my $quant;
- while ($quant = quant()) {
- if (@quants and
- ref $quant eq ref $quants[-1] and
- exists $quants[-1]{text} and
- exists $quant->{text} )
- {
- $quants[-1]{text} .= $quant->{text};
- }
- else {
- push(@quants, $quant);
- }
- }
- return bless { Kids => [@quants] }, "P5re::Alt";
-}
-
-sub quant {
- my $atom = atom();
- return 0 unless $atom;
-# $atom = bless { Kids => [$atom] }, "P5re::Atom";
- if (s/^(([*+?])(\??)|\{(\d+)(?:(,)(\d*))?\}(\??))//) {
- my $min = 0;
- my $max = "Inf";
- my $greed = 1;
- if ($2) {
- if ($2 eq '+') {
- $min = 1;
- }
- elsif ($2 eq '?') {
- $max = 1;
- }
- $greed = 0 if $3;
- }
- elsif (defined $4) {
- $min = $4;
- if ($5) {
- $max = $6 if $6;
- }
- else {
- $max = $min;
- }
- $greed = 0 if $7;
- }
- $greed = "na" if $min == $max;
- return bless { Kids => [$atom],
- rep => $1,
- min => $min,
- max => $max,
- greedy => $greed
- }, "P5re::Quant";
- }
- return $atom;
-}
-
-sub atom {
- my $re;
- if ($_ eq "") { return 0 }
- if (/^[)|]/) { return 0 }
-
- # whitespace is special because we don't know if /x is in effect
- if ($extended) {
- if (s/^(?=\s|#)(\s*(?:#.*)?)//) { return bless { text => $1 }, "P5re::White"; }
- }
-
- # all the parenthesized forms
- if (s/^\(//) {
- if (s/^\?://) {
- $re = re('bracket');
- }
- elsif (s/^(\?#.*?)\)/)/) {
- $re = bless { rep => "($1)" }, "P5re::Comment";
- }
- elsif (s/^\?=//) {
- $re = re('lookahead');
- }
- elsif (s/^\?!//) {
- $re = re('neglookahead');
- }
- elsif (s/^\?<=//) {
- $re = re('lookbehind');
- }
- elsif (s/^\?<!//) {
- $re = re('neglookbehind');
- }
- elsif (s/^\?>//) {
- $re = re('nobacktrack');
- }
- elsif (s/^(\?\??\{.*?\})\)/)/) {
- $re = bless { rep => "($1)" }, "P5re::Closure";
- }
- elsif (s/^(\?\(\d+\))//) {
- my $mods = $1;
- $re = re('conditional');
- $re->{Arep} = "$mods";
- }
- elsif (s/^\?(?=\(\?)//) {
- my $mods = $1;
- my $cond = atom();
- $re = re('conditional');
- unshift(@{$re->{Kids}}, $cond);
- }
- elsif (s/^(\?[-\w]+)://) {
- my $mods = $1;
- local $extended = $extended;
- local $insensitive = $insensitive;
- local $multiline = $multiline;
- local $singleline = $singleline;
- setmods($mods);
- $re = re('bracket');
- $re->{Arep} = "($mods)";
- $re->{x} = $extended || 0;
- $re->{i} = $insensitive || 0;
- $re->{m} = $multiline || 0;
- $re->{s} = $singleline || 0;
- }
- elsif (s/^(\?[-\w]+)//) {
- my $mods = $1;
- $re = bless { Arep => "($mods)" }, "P5re::Mod";
- setmods($mods);
- $re->{x} = $extended || 0;
- $re->{i} = $insensitive || 0;
- $re->{m} = $multiline || 0;
- $re->{s} = $singleline || 0;
- }
- elsif (s/^\?//) {
- $re = re('UNRECOGNIZED');
- }
- else {
- my $brack = ++$maxbrack;
- $re = re('capture');
- $re->{Ato} = $brack;
- }
-
- if (not s/^\)//) { warn "Expected right paren at: '$_'" }
- return $re;
- }
-
- # special meta
- if (s/^\.//) {
- my $s = $singleline ? '.' : '\N';
- return bless { rep => '.', sem => $s }, "P5re::Meta";
- }
- if (s/^\^//) {
- my $s = $multiline ? '^^' : '^';
- return bless { rep => '^', sem => $s }, "P5re::Meta";
- }
- if (s/^\$(?:$|(?=[|)]))//) {
- my $s = $multiline ? '$$' : '$';
- return bless { rep => '$', sem => $s }, "P5re::Meta";
- }
- if (s/^([\$\@](\w+|.))//) { # XXX need to handle subscripts here
- return bless { name => $1 }, "P5re::Var";
- }
-
- # character classes
- if (s/^\[//) {
- my $re = cclass();
- if (not s/^\]//) { warn "Expected right bracket at: '$_'" }
- return $re;
- }
-
- # backwhacks
- if (/^\\([1-9]\d*)/ and $1 <= $maxbrack) {
- my $to = $1;
- onechar();
- return bless { to => $to }, "P5re::Back";
- }
-
- # backwhacks
- if (/^\\(?=\w)/) {
- return bless { rep => onechar() }, "P5re::Meta";
- }
-
- # backwhacks
- if (s/^\\(.)//) {
- return bless { text => $1 }, "P5re::Char";
- }
-
- # optimization, would happen anyway
- if (s/^(\w+)//) { return bless { text => $1 }, "P5re::Char"; }
-
- # random character
- if (s/^(.)//) { return bless { text => $1 }, "P5re::Char"; }
-}
-
-sub cclass {
- my @cclass;
- my $cclass = "";
- my $neg = 0;
- if (s/^\^//) { $neg = 1 }
- if (s/^([\]\-])//) { $cclass .= $1 }
-
- while ($_ ne "" and not /^\]/) {
- # backwhacks
- if (/^\\(?=.)|.-/) {
- my $o1 = onecharobj();
- if ($cclass ne "") {
- push @cclass, bless { text => $cclass }, "P5re::Char";
- $cclass = "";
- }
-
- if (s/^-(?=[^]])//) {
- my $o2 = onecharobj();
- push @cclass, bless { Kids => [$o1, $o2] }, "P5re::Range";
- }
- else {
- push @cclass, $o1;
- }
- }
- elsif (s/^(\[([:=.])\^?\w*\2\])//) {
- if ($cclass ne "") {
- push @cclass, bless { text => $cclass }, "P5re::Char";
- $cclass = "";
- }
- push @cclass, bless { rep => $1 }, "P5re::Meta";
- }
- else {
- $cclass .= onechar();
- }
- }
-
- if ($cclass ne "") {
- push @cclass, bless { text => $cclass }, "P5re::Char";
- }
- return bless { Kids => [@cclass], neg => $neg }, "P5re::CClass";
-}
-
-sub onecharobj {
- my $ch = onechar();
- if ($ch =~ /^\\/) {
- $ch = bless { rep => $ch }, "P5re::Meta";
- }
- else {
- $ch = bless { text => $ch }, "P5re::Char";
- }
-}
-
-sub onechar {
- die "Oops, short cclass" unless s/^(.)//;
- my $ch = $1;
- if ($ch eq '\\') {
- if (s/^([rntf]|[0-7]{1,4})//) { $ch .= $1 }
- elsif (s/^(x[0-9a-fA-f]{1,2})//) { $ch .= $1 }
- elsif (s/^(x\{[0-9a-fA-f]+\})//) { $ch .= $1 }
- elsif (s/^([NpP]\{.*?\})//) { $ch .= $1 }
- elsif (s/^([cpP].)//) { $ch .= $1 }
- elsif (s/^(.)//) { $ch .= $1 }
- else {
- die "Oops, short backwhack";
- }
- }
- return $ch;
-}
-
-sub setmods {
- my $mods = shift;
- if ($mods =~ /\-.*x/) {
- $extended = 0;
- }
- elsif ($mods =~ /x/) {
- $extended = 1;
- }
- if ($mods =~ /\-.*i/) {
- $insensitive = 0;
- }
- elsif ($mods =~ /i/) {
- $insensitive = 1;
- }
- if ($mods =~ /\-.*m/) {
- $multiline = 0;
- }
- elsif ($mods =~ /m/) {
- $multiline = 1;
- }
- if ($mods =~ /\-.*s/) {
- $singleline = 0;
- }
- elsif ($mods =~ /s/) {
- $singleline = 1;
- }
-}
-
-1;
diff --git a/mad/PLXML.pm b/mad/PLXML.pm
deleted file mode 100644
index ad778601c7..0000000000
--- a/mad/PLXML.pm
+++ /dev/null
@@ -1,4162 +0,0 @@
-use strict;
-use warnings;
-
-package PLXML;
-
-sub DESTROY { }
-
-sub walk {
- print "walk(" . join(',', @_) . ")\n";
- my $self = shift;
- for my $key (sort keys %$self) {
- print "\t$key = <$$self{$key}>\n";
- }
- foreach my $kid (@{$$self{Kids}}) {
- $kid->walk(@_);
- }
-}
-
-package PLXML::Characters;
-
-our @ISA = ('PLXML');
-sub walk {}
-
-package PLXML::madprops;
-
-our @ISA = ('PLXML');
-
-package PLXML::mad_op;
-
-our @ISA = ('PLXML');
-
-package PLXML::mad_pv;
-
-our @ISA = ('PLXML');
-
-package PLXML::baseop;
-
-our @ISA = ('PLXML');
-
-package PLXML::baseop_unop;
-
-our @ISA = ('PLXML');
-
-package PLXML::binop;
-
-our @ISA = ('PLXML');
-
-package PLXML::cop;
-
-our @ISA = ('PLXML');
-
-package PLXML::filestatop;
-
-our @ISA = ('PLXML::baseop_unop');
-
-package PLXML::listop;
-
-our @ISA = ('PLXML');
-
-package PLXML::logop;
-
-our @ISA = ('PLXML');
-
-package PLXML::loop;
-
-our @ISA = ('PLXML');
-
-package PLXML::loopexop;
-
-our @ISA = ('PLXML');
-
-package PLXML::padop;
-
-our @ISA = ('PLXML');
-
-package PLXML::padop_svop;
-
-our @ISA = ('PLXML');
-
-package PLXML::pmop;
-
-our @ISA = ('PLXML');
-
-package PLXML::pvop_svop;
-
-our @ISA = ('PLXML');
-
-package PLXML::unop;
-
-our @ISA = ('PLXML');
-
-
-# New ops always go at the end, just before 'custom'
-
-# A recapitulation of the format of this file:
-# The file consists of five columns: the name of the op, an English
-# description, the name of the "check" routine used to optimize this
-# operation, some flags, and a description of the operands.
-
-# The flags consist of options followed by a mandatory op class signifier
-
-# The classes are:
-# baseop - 0 unop - 1 binop - 2
-# logop - | listop - @ pmop - /
-# padop/svop - $ padop - # (unused) loop - {
-# baseop/unop - % loopexop - } filestatop - -
-# pvop/svop - " cop - ;
-
-# Other options are:
-# needs stack mark - m
-# needs constant folding - f
-# produces a scalar - s
-# produces an integer - i
-# needs a target - t
-# target can be in a pad - T
-# has a corresponding integer version - I
-# has side effects - d
-# uses $_ if no argument given - u
-
-# Values for the operands are:
-# scalar - S list - L array - A
-# hash - H sub (CV) - C file - F
-# socket - Fs filetest - F- reference - R
-# "?" denotes an optional operand.
-
-# Nothing.
-
-package PLXML::op_null;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'null' }
-sub desc { 'null operation' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_stub;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'stub' }
-sub desc { 'stub' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_scalar;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'scalar' }
-sub desc { 'scalar' }
-sub check { 'ck_fun' }
-sub flags { 's%' }
-sub args { 'S' }
-
-
-
-# Pushy stuff.
-
-package PLXML::op_pushmark;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'pushmark' }
-sub desc { 'pushmark' }
-sub check { 'ck_null' }
-sub flags { 's0' }
-sub args { '' }
-
-
-package PLXML::op_wantarray;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'wantarray' }
-sub desc { 'wantarray' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-
-package PLXML::op_const;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'const' }
-sub desc { 'constant item' }
-sub check { 'ck_svconst' }
-sub flags { 's$' }
-sub args { '' }
-
-
-
-package PLXML::op_gvsv;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'gvsv' }
-sub desc { 'scalar variable' }
-sub check { 'ck_null' }
-sub flags { 'ds$' }
-sub args { '' }
-
-
-package PLXML::op_gv;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'gv' }
-sub desc { 'glob value' }
-sub check { 'ck_null' }
-sub flags { 'ds$' }
-sub args { '' }
-
-
-package PLXML::op_gelem;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'gelem' }
-sub desc { 'glob elem' }
-sub check { 'ck_null' }
-sub flags { 'd2' }
-sub args { 'S S' }
-
-
-package PLXML::op_padsv;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'padsv' }
-sub desc { 'private variable' }
-sub check { 'ck_null' }
-sub flags { 'ds0' }
-sub args { '' }
-
-
-package PLXML::op_padav;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'padav' }
-sub desc { 'private array' }
-sub check { 'ck_null' }
-sub flags { 'd0' }
-sub args { '' }
-
-
-package PLXML::op_padhv;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'padhv' }
-sub desc { 'private hash' }
-sub check { 'ck_null' }
-sub flags { 'd0' }
-sub args { '' }
-
-
-package PLXML::op_padany;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'padany' }
-sub desc { 'private value' }
-sub check { 'ck_null' }
-sub flags { 'd0' }
-sub args { '' }
-
-
-
-package PLXML::op_pushre;
-
-our @ISA = ('PLXML::pmop');
-
-sub key { 'pushre' }
-sub desc { 'push regexp' }
-sub check { 'ck_null' }
-sub flags { 'd/' }
-sub args { '' }
-
-
-
-# References and stuff.
-
-package PLXML::op_rv2gv;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'rv2gv' }
-sub desc { 'ref-to-glob cast' }
-sub check { 'ck_rvconst' }
-sub flags { 'ds1' }
-sub args { '' }
-
-
-package PLXML::op_rv2sv;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'rv2sv' }
-sub desc { 'scalar dereference' }
-sub check { 'ck_rvconst' }
-sub flags { 'ds1' }
-sub args { '' }
-
-
-package PLXML::op_av2arylen;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'av2arylen' }
-sub desc { 'array length' }
-sub check { 'ck_null' }
-sub flags { 'is1' }
-sub args { '' }
-
-
-package PLXML::op_rv2cv;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'rv2cv' }
-sub desc { 'subroutine dereference' }
-sub check { 'ck_rvconst' }
-sub flags { 'd1' }
-sub args { '' }
-
-
-package PLXML::op_anoncode;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'anoncode' }
-sub desc { 'anonymous subroutine' }
-sub check { 'ck_anoncode' }
-sub flags { '$' }
-sub args { '' }
-
-
-package PLXML::op_prototype;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'prototype' }
-sub desc { 'subroutine prototype' }
-sub check { 'ck_null' }
-sub flags { 's%' }
-sub args { 'S' }
-
-
-package PLXML::op_refgen;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'refgen' }
-sub desc { 'reference constructor' }
-sub check { 'ck_spair' }
-sub flags { 'm1' }
-sub args { 'L' }
-
-
-package PLXML::op_srefgen;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'srefgen' }
-sub desc { 'single ref constructor' }
-sub check { 'ck_null' }
-sub flags { 'fs1' }
-sub args { 'S' }
-
-
-package PLXML::op_ref;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ref' }
-sub desc { 'reference-type operator' }
-sub check { 'ck_fun' }
-sub flags { 'stu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_bless;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'bless' }
-sub desc { 'bless' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'S S?' }
-
-
-
-# Pushy I/O.
-
-package PLXML::op_backtick;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'backtick' }
-sub desc { 'quoted execution (``, qx)' }
-sub check { 'ck_open' }
-sub flags { 't%' }
-sub args { '' }
-
-
-# glob defaults its first arg to $_
-package PLXML::op_glob;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'glob' }
-sub desc { 'glob' }
-sub check { 'ck_glob' }
-sub flags { 't@' }
-sub args { 'S?' }
-
-
-package PLXML::op_readline;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'readline' }
-sub desc { '<HANDLE>' }
-sub check { 'ck_null' }
-sub flags { 't%' }
-sub args { 'F?' }
-
-
-package PLXML::op_rcatline;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'rcatline' }
-sub desc { 'append I/O operator' }
-sub check { 'ck_null' }
-sub flags { 't$' }
-sub args { '' }
-
-
-
-# Bindable operators.
-
-package PLXML::op_regcmaybe;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'regcmaybe' }
-sub desc { 'regexp internal guard' }
-sub check { 'ck_fun' }
-sub flags { 's1' }
-sub args { 'S' }
-
-
-package PLXML::op_regcreset;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'regcreset' }
-sub desc { 'regexp internal reset' }
-sub check { 'ck_fun' }
-sub flags { 's1' }
-sub args { 'S' }
-
-
-package PLXML::op_regcomp;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'regcomp' }
-sub desc { 'regexp compilation' }
-sub check { 'ck_null' }
-sub flags { 's|' }
-sub args { 'S' }
-
-
-package PLXML::op_match;
-
-our @ISA = ('PLXML::pmop');
-
-sub key { 'match' }
-sub desc { 'pattern match (m//)' }
-sub check { 'ck_match' }
-sub flags { 'd/' }
-sub args { '' }
-
-
-package PLXML::op_qr;
-
-our @ISA = ('PLXML::pmop');
-
-sub key { 'qr' }
-sub desc { 'pattern quote (qr//)' }
-sub check { 'ck_match' }
-sub flags { 's/' }
-sub args { '' }
-
-
-package PLXML::op_subst;
-
-our @ISA = ('PLXML::pmop');
-
-sub key { 'subst' }
-sub desc { 'substitution (s///)' }
-sub check { 'ck_match' }
-sub flags { 'dis/' }
-sub args { 'S' }
-
-
-package PLXML::op_substcont;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'substcont' }
-sub desc { 'substitution iterator' }
-sub check { 'ck_null' }
-sub flags { 'dis|' }
-sub args { '' }
-
-
-package PLXML::op_trans;
-
-our @ISA = ('PLXML::pvop_svop');
-
-sub key { 'trans' }
-sub desc { 'transliteration (tr///)' }
-sub check { 'ck_match' }
-sub flags { 'is"' }
-sub args { 'S' }
-
-
-
-# Lvalue operators.
-# sassign is special-cased for op class
-
-package PLXML::op_sassign;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'sassign' }
-sub desc { 'scalar assignment' }
-sub check { 'ck_sassign' }
-sub flags { 's0' }
-sub args { '' }
-
-
-package PLXML::op_aassign;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'aassign' }
-sub desc { 'list assignment' }
-sub check { 'ck_null' }
-sub flags { 't2' }
-sub args { 'L L' }
-
-
-
-package PLXML::op_chop;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'chop' }
-sub desc { 'chop' }
-sub check { 'ck_spair' }
-sub flags { 'mts%' }
-sub args { 'L' }
-
-
-package PLXML::op_schop;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'schop' }
-sub desc { 'scalar chop' }
-sub check { 'ck_null' }
-sub flags { 'stu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_chomp;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'chomp' }
-sub desc { 'chomp' }
-sub check { 'ck_spair' }
-sub flags { 'mTs%' }
-sub args { 'L' }
-
-
-package PLXML::op_schomp;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'schomp' }
-sub desc { 'scalar chomp' }
-sub check { 'ck_null' }
-sub flags { 'sTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_defined;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'defined' }
-sub desc { 'defined operator' }
-sub check { 'ck_defined' }
-sub flags { 'isu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_undef;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'undef' }
-sub desc { 'undef operator' }
-sub check { 'ck_lfun' }
-sub flags { 's%' }
-sub args { 'S?' }
-
-
-package PLXML::op_study;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'study' }
-sub desc { 'study' }
-sub check { 'ck_fun' }
-sub flags { 'su%' }
-sub args { 'S?' }
-
-
-package PLXML::op_pos;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'pos' }
-sub desc { 'match position' }
-sub check { 'ck_lfun' }
-sub flags { 'stu%' }
-sub args { 'S?' }
-
-
-
-package PLXML::op_preinc;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'preinc' }
-sub desc { 'preincrement (++)' }
-sub check { 'ck_lfun' }
-sub flags { 'dIs1' }
-sub args { 'S' }
-
-
-package PLXML::op_i_preinc;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'i_preinc' }
-sub desc { 'integer preincrement (++)' }
-sub check { 'ck_lfun' }
-sub flags { 'dis1' }
-sub args { 'S' }
-
-
-package PLXML::op_predec;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'predec' }
-sub desc { 'predecrement (--)' }
-sub check { 'ck_lfun' }
-sub flags { 'dIs1' }
-sub args { 'S' }
-
-
-package PLXML::op_i_predec;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'i_predec' }
-sub desc { 'integer predecrement (--)' }
-sub check { 'ck_lfun' }
-sub flags { 'dis1' }
-sub args { 'S' }
-
-
-package PLXML::op_postinc;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'postinc' }
-sub desc { 'postincrement (++)' }
-sub check { 'ck_lfun' }
-sub flags { 'dIst1' }
-sub args { 'S' }
-
-
-package PLXML::op_i_postinc;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'i_postinc' }
-sub desc { 'integer postincrement (++)' }
-sub check { 'ck_lfun' }
-sub flags { 'disT1' }
-sub args { 'S' }
-
-
-package PLXML::op_postdec;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'postdec' }
-sub desc { 'postdecrement (--)' }
-sub check { 'ck_lfun' }
-sub flags { 'dIst1' }
-sub args { 'S' }
-
-
-package PLXML::op_i_postdec;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'i_postdec' }
-sub desc { 'integer postdecrement (--)' }
-sub check { 'ck_lfun' }
-sub flags { 'disT1' }
-sub args { 'S' }
-
-
-
-# Ordinary operators.
-
-package PLXML::op_pow;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'pow' }
-sub desc { 'exponentiation (**)' }
-sub check { 'ck_null' }
-sub flags { 'fsT2' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_multiply;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'multiply' }
-sub desc { 'multiplication (*)' }
-sub check { 'ck_null' }
-sub flags { 'IfsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_multiply;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_multiply' }
-sub desc { 'integer multiplication (*)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_divide;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'divide' }
-sub desc { 'division (/)' }
-sub check { 'ck_null' }
-sub flags { 'IfsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_divide;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_divide' }
-sub desc { 'integer division (/)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_modulo;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'modulo' }
-sub desc { 'modulus (%)' }
-sub check { 'ck_null' }
-sub flags { 'IifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_modulo;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_modulo' }
-sub desc { 'integer modulus (%)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_repeat;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'repeat' }
-sub desc { 'repeat (x)' }
-sub check { 'ck_repeat' }
-sub flags { 'mt2' }
-sub args { 'L S' }
-
-
-
-package PLXML::op_add;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'add' }
-sub desc { 'addition (+)' }
-sub check { 'ck_null' }
-sub flags { 'IfsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_add;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_add' }
-sub desc { 'integer addition (+)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_subtract;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'subtract' }
-sub desc { 'subtraction (-)' }
-sub check { 'ck_null' }
-sub flags { 'IfsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_subtract;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_subtract' }
-sub desc { 'integer subtraction (-)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_concat;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'concat' }
-sub desc { 'concatenation (.) or string' }
-sub check { 'ck_concat' }
-sub flags { 'fsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_stringify;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'stringify' }
-sub desc { 'string' }
-sub check { 'ck_fun' }
-sub flags { 'fsT@' }
-sub args { 'S' }
-
-
-
-package PLXML::op_left_shift;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'left_shift' }
-sub desc { 'left bitshift (<<)' }
-sub check { 'ck_bitop' }
-sub flags { 'fsT2' }
-sub args { 'S S' }
-
-
-package PLXML::op_right_shift;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'right_shift' }
-sub desc { 'right bitshift (>>)' }
-sub check { 'ck_bitop' }
-sub flags { 'fsT2' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_lt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'lt' }
-sub desc { 'numeric lt (<)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_lt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_lt' }
-sub desc { 'integer lt (<)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_gt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'gt' }
-sub desc { 'numeric gt (>)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_gt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_gt' }
-sub desc { 'integer gt (>)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_le;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'le' }
-sub desc { 'numeric le (<=)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_le;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_le' }
-sub desc { 'integer le (<=)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_ge;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'ge' }
-sub desc { 'numeric ge (>=)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_ge;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_ge' }
-sub desc { 'integer ge (>=)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_eq;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'eq' }
-sub desc { 'numeric eq (==)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_eq;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_eq' }
-sub desc { 'integer eq (==)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_ne;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'ne' }
-sub desc { 'numeric ne (!=)' }
-sub check { 'ck_null' }
-sub flags { 'Iifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_ne;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_ne' }
-sub desc { 'integer ne (!=)' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_ncmp;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'ncmp' }
-sub desc { 'numeric comparison (<=>)' }
-sub check { 'ck_null' }
-sub flags { 'Iifst2' }
-sub args { 'S S' }
-
-
-package PLXML::op_i_ncmp;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'i_ncmp' }
-sub desc { 'integer comparison (<=>)' }
-sub check { 'ck_null' }
-sub flags { 'ifst2' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_slt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'slt' }
-sub desc { 'string lt' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_sgt;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'sgt' }
-sub desc { 'string gt' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_sle;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'sle' }
-sub desc { 'string le' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_sge;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'sge' }
-sub desc { 'string ge' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_seq;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'seq' }
-sub desc { 'string eq' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_sne;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'sne' }
-sub desc { 'string ne' }
-sub check { 'ck_null' }
-sub flags { 'ifs2' }
-sub args { 'S S' }
-
-
-package PLXML::op_scmp;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'scmp' }
-sub desc { 'string comparison (cmp)' }
-sub check { 'ck_null' }
-sub flags { 'ifst2' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_bit_and;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'bit_and' }
-sub desc { 'bitwise and (&)' }
-sub check { 'ck_bitop' }
-sub flags { 'fst2' }
-sub args { 'S S' }
-
-
-package PLXML::op_bit_xor;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'bit_xor' }
-sub desc { 'bitwise xor (^)' }
-sub check { 'ck_bitop' }
-sub flags { 'fst2' }
-sub args { 'S S' }
-
-
-package PLXML::op_bit_or;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'bit_or' }
-sub desc { 'bitwise or (|)' }
-sub check { 'ck_bitop' }
-sub flags { 'fst2' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_negate;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'negate' }
-sub desc { 'negation (-)' }
-sub check { 'ck_null' }
-sub flags { 'Ifst1' }
-sub args { 'S' }
-
-
-package PLXML::op_i_negate;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'i_negate' }
-sub desc { 'integer negation (-)' }
-sub check { 'ck_null' }
-sub flags { 'ifsT1' }
-sub args { 'S' }
-
-
-package PLXML::op_not;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'not' }
-sub desc { 'not' }
-sub check { 'ck_null' }
-sub flags { 'ifs1' }
-sub args { 'S' }
-
-
-package PLXML::op_complement;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'complement' }
-sub desc { '1\'s complement (~)' }
-sub check { 'ck_bitop' }
-sub flags { 'fst1' }
-sub args { 'S' }
-
-
-
-# High falutin' math.
-
-package PLXML::op_atan2;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'atan2' }
-sub desc { 'atan2' }
-sub check { 'ck_fun' }
-sub flags { 'fsT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_sin;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'sin' }
-sub desc { 'sin' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_cos;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'cos' }
-sub desc { 'cos' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_rand;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'rand' }
-sub desc { 'rand' }
-sub check { 'ck_fun' }
-sub flags { 'sT%' }
-sub args { 'S?' }
-
-
-package PLXML::op_srand;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'srand' }
-sub desc { 'srand' }
-sub check { 'ck_fun' }
-sub flags { 's%' }
-sub args { 'S?' }
-
-
-package PLXML::op_exp;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'exp' }
-sub desc { 'exp' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_log;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'log' }
-sub desc { 'log' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_sqrt;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'sqrt' }
-sub desc { 'sqrt' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-
-# Lowbrow math.
-
-package PLXML::op_int;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'int' }
-sub desc { 'int' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_hex;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'hex' }
-sub desc { 'hex' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_oct;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'oct' }
-sub desc { 'oct' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_abs;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'abs' }
-sub desc { 'abs' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-
-# String stuff.
-
-package PLXML::op_length;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'length' }
-sub desc { 'length' }
-sub check { 'ck_lengthconst' }
-sub flags { 'isTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_substr;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'substr' }
-sub desc { 'substr' }
-sub check { 'ck_substr' }
-sub flags { 'st@' }
-sub args { 'S S S? S?' }
-
-
-package PLXML::op_vec;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'vec' }
-sub desc { 'vec' }
-sub check { 'ck_fun' }
-sub flags { 'ist@' }
-sub args { 'S S S' }
-
-
-
-package PLXML::op_index;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'index' }
-sub desc { 'index' }
-sub check { 'ck_index' }
-sub flags { 'isT@' }
-sub args { 'S S S?' }
-
-
-package PLXML::op_rindex;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'rindex' }
-sub desc { 'rindex' }
-sub check { 'ck_index' }
-sub flags { 'isT@' }
-sub args { 'S S S?' }
-
-
-
-package PLXML::op_sprintf;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sprintf' }
-sub desc { 'sprintf' }
-sub check { 'ck_fun' }
-sub flags { 'mfst@' }
-sub args { 'S L' }
-
-
-package PLXML::op_formline;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'formline' }
-sub desc { 'formline' }
-sub check { 'ck_fun' }
-sub flags { 'ms@' }
-sub args { 'S L' }
-
-
-package PLXML::op_ord;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ord' }
-sub desc { 'ord' }
-sub check { 'ck_fun' }
-sub flags { 'ifsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_chr;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'chr' }
-sub desc { 'chr' }
-sub check { 'ck_fun' }
-sub flags { 'fsTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_crypt;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'crypt' }
-sub desc { 'crypt' }
-sub check { 'ck_fun' }
-sub flags { 'fsT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_ucfirst;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ucfirst' }
-sub desc { 'ucfirst' }
-sub check { 'ck_fun' }
-sub flags { 'fstu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_lcfirst;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'lcfirst' }
-sub desc { 'lcfirst' }
-sub check { 'ck_fun' }
-sub flags { 'fstu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_uc;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'uc' }
-sub desc { 'uc' }
-sub check { 'ck_fun' }
-sub flags { 'fstu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_lc;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'lc' }
-sub desc { 'lc' }
-sub check { 'ck_fun' }
-sub flags { 'fstu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_quotemeta;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'quotemeta' }
-sub desc { 'quotemeta' }
-sub check { 'ck_fun' }
-sub flags { 'fstu%' }
-sub args { 'S?' }
-
-
-
-# Arrays.
-
-package PLXML::op_rv2av;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'rv2av' }
-sub desc { 'array dereference' }
-sub check { 'ck_rvconst' }
-sub flags { 'dt1' }
-sub args { '' }
-
-
-package PLXML::op_aelemfast;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'aelemfast' }
-sub desc { 'constant array element' }
-sub check { 'ck_null' }
-sub flags { 's$' }
-sub args { 'A S' }
-
-
-package PLXML::op_aelem;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'aelem' }
-sub desc { 'array element' }
-sub check { 'ck_null' }
-sub flags { 's2' }
-sub args { 'A S' }
-
-
-package PLXML::op_aslice;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'aslice' }
-sub desc { 'array slice' }
-sub check { 'ck_null' }
-sub flags { 'm@' }
-sub args { 'A L' }
-
-
-
-# Hashes.
-
-package PLXML::op_each;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'each' }
-sub desc { 'each' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'H' }
-
-
-package PLXML::op_values;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'values' }
-sub desc { 'values' }
-sub check { 'ck_fun' }
-sub flags { 't%' }
-sub args { 'H' }
-
-
-package PLXML::op_keys;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'keys' }
-sub desc { 'keys' }
-sub check { 'ck_fun' }
-sub flags { 't%' }
-sub args { 'H' }
-
-
-package PLXML::op_delete;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'delete' }
-sub desc { 'delete' }
-sub check { 'ck_delete' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_exists;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'exists' }
-sub desc { 'exists' }
-sub check { 'ck_exists' }
-sub flags { 'is%' }
-sub args { 'S' }
-
-
-package PLXML::op_rv2hv;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'rv2hv' }
-sub desc { 'hash dereference' }
-sub check { 'ck_rvconst' }
-sub flags { 'dt1' }
-sub args { '' }
-
-
-package PLXML::op_helem;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'helem' }
-sub desc { 'hash element' }
-sub check { 'ck_null' }
-sub flags { 's2@' }
-sub args { 'H S' }
-
-
-package PLXML::op_hslice;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'hslice' }
-sub desc { 'hash slice' }
-sub check { 'ck_null' }
-sub flags { 'm@' }
-sub args { 'H L' }
-
-
-
-# Explosives and implosives.
-
-package PLXML::op_unpack;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'unpack' }
-sub desc { 'unpack' }
-sub check { 'ck_unpack' }
-sub flags { '@' }
-sub args { 'S S?' }
-
-
-package PLXML::op_pack;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'pack' }
-sub desc { 'pack' }
-sub check { 'ck_fun' }
-sub flags { 'mst@' }
-sub args { 'S L' }
-
-
-package PLXML::op_split;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'split' }
-sub desc { 'split' }
-sub check { 'ck_split' }
-sub flags { 't@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_join;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'join' }
-sub desc { 'join or string' }
-sub check { 'ck_join' }
-sub flags { 'mst@' }
-sub args { 'S L' }
-
-
-
-# List operators.
-
-package PLXML::op_list;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'list' }
-sub desc { 'list' }
-sub check { 'ck_null' }
-sub flags { 'm@' }
-sub args { 'L' }
-
-
-package PLXML::op_lslice;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'lslice' }
-sub desc { 'list slice' }
-sub check { 'ck_null' }
-sub flags { '2' }
-sub args { 'H L L' }
-
-
-package PLXML::op_anonlist;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'anonlist' }
-sub desc { 'anonymous list ([])' }
-sub check { 'ck_fun' }
-sub flags { 'ms@' }
-sub args { 'L' }
-
-
-package PLXML::op_anonhash;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'anonhash' }
-sub desc { 'anonymous hash ({})' }
-sub check { 'ck_fun' }
-sub flags { 'ms@' }
-sub args { 'L' }
-
-
-
-package PLXML::op_splice;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'splice' }
-sub desc { 'splice' }
-sub check { 'ck_fun' }
-sub flags { 'm@' }
-sub args { 'A S? S? L' }
-
-
-package PLXML::op_push;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'push' }
-sub desc { 'push' }
-sub check { 'ck_fun' }
-sub flags { 'imsT@' }
-sub args { 'A L' }
-
-
-package PLXML::op_pop;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'pop' }
-sub desc { 'pop' }
-sub check { 'ck_shift' }
-sub flags { 's%' }
-sub args { 'A?' }
-
-
-package PLXML::op_shift;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'shift' }
-sub desc { 'shift' }
-sub check { 'ck_shift' }
-sub flags { 's%' }
-sub args { 'A?' }
-
-
-package PLXML::op_unshift;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'unshift' }
-sub desc { 'unshift' }
-sub check { 'ck_fun' }
-sub flags { 'imsT@' }
-sub args { 'A L' }
-
-
-package PLXML::op_sort;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sort' }
-sub desc { 'sort' }
-sub check { 'ck_sort' }
-sub flags { 'm@' }
-sub args { 'C? L' }
-
-
-package PLXML::op_reverse;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'reverse' }
-sub desc { 'reverse' }
-sub check { 'ck_fun' }
-sub flags { 'mt@' }
-sub args { 'L' }
-
-
-
-package PLXML::op_grepstart;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'grepstart' }
-sub desc { 'grep' }
-sub check { 'ck_grep' }
-sub flags { 'dm@' }
-sub args { 'C L' }
-
-
-package PLXML::op_grepwhile;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'grepwhile' }
-sub desc { 'grep iterator' }
-sub check { 'ck_null' }
-sub flags { 'dt|' }
-sub args { '' }
-
-
-
-package PLXML::op_mapstart;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'mapstart' }
-sub desc { 'map' }
-sub check { 'ck_grep' }
-sub flags { 'dm@' }
-sub args { 'C L' }
-
-
-package PLXML::op_mapwhile;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'mapwhile' }
-sub desc { 'map iterator' }
-sub check { 'ck_null' }
-sub flags { 'dt|' }
-sub args { '' }
-
-
-
-# Range stuff.
-
-package PLXML::op_range;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'range' }
-sub desc { 'flipflop' }
-sub check { 'ck_null' }
-sub flags { '|' }
-sub args { 'S S' }
-
-
-package PLXML::op_flip;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'flip' }
-sub desc { 'range (or flip)' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { 'S S' }
-
-
-package PLXML::op_flop;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'flop' }
-sub desc { 'range (or flop)' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { '' }
-
-
-
-# Control.
-
-package PLXML::op_and;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'and' }
-sub desc { 'logical and (&&)' }
-sub check { 'ck_null' }
-sub flags { '|' }
-sub args { '' }
-
-
-package PLXML::op_or;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'or' }
-sub desc { 'logical or (||)' }
-sub check { 'ck_null' }
-sub flags { '|' }
-sub args { '' }
-
-
-package PLXML::op_xor;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'xor' }
-sub desc { 'logical xor' }
-sub check { 'ck_null' }
-sub flags { 'fs2' }
-sub args { 'S S ' }
-
-
-package PLXML::op_cond_expr;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'cond_expr' }
-sub desc { 'conditional expression' }
-sub check { 'ck_null' }
-sub flags { 'd|' }
-sub args { '' }
-
-
-package PLXML::op_andassign;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'andassign' }
-sub desc { 'logical and assignment (&&=)' }
-sub check { 'ck_null' }
-sub flags { 's|' }
-sub args { '' }
-
-
-package PLXML::op_orassign;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'orassign' }
-sub desc { 'logical or assignment (||=)' }
-sub check { 'ck_null' }
-sub flags { 's|' }
-sub args { '' }
-
-
-
-package PLXML::op_method;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'method' }
-sub desc { 'method lookup' }
-sub check { 'ck_method' }
-sub flags { 'd1' }
-sub args { '' }
-
-
-package PLXML::op_entersub;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'entersub' }
-sub desc { 'subroutine entry' }
-sub check { 'ck_subr' }
-sub flags { 'dmt1' }
-sub args { 'L' }
-
-
-package PLXML::op_leavesub;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'leavesub' }
-sub desc { 'subroutine exit' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { '' }
-
-
-package PLXML::op_leavesublv;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'leavesublv' }
-sub desc { 'lvalue subroutine return' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { '' }
-
-
-package PLXML::op_caller;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'caller' }
-sub desc { 'caller' }
-sub check { 'ck_fun' }
-sub flags { 't%' }
-sub args { 'S?' }
-
-
-package PLXML::op_warn;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'warn' }
-sub desc { 'warn' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'L' }
-
-
-package PLXML::op_die;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'die' }
-sub desc { 'die' }
-sub check { 'ck_die' }
-sub flags { 'dimst@' }
-sub args { 'L' }
-
-
-package PLXML::op_reset;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'reset' }
-sub desc { 'symbol reset' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'S?' }
-
-
-
-package PLXML::op_lineseq;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'lineseq' }
-sub desc { 'line sequence' }
-sub check { 'ck_null' }
-sub flags { '@' }
-sub args { '' }
-
-
-package PLXML::op_nextstate;
-
-our @ISA = ('PLXML::cop');
-
-sub key { 'nextstate' }
-sub desc { 'next statement' }
-sub check { 'ck_null' }
-sub flags { 's;' }
-sub args { '' }
-
-
-package PLXML::op_dbstate;
-
-our @ISA = ('PLXML::cop');
-
-sub key { 'dbstate' }
-sub desc { 'debug next statement' }
-sub check { 'ck_null' }
-sub flags { 's;' }
-sub args { '' }
-
-
-package PLXML::op_unstack;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'unstack' }
-sub desc { 'iteration finalizer' }
-sub check { 'ck_null' }
-sub flags { 's0' }
-sub args { '' }
-
-
-package PLXML::op_enter;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'enter' }
-sub desc { 'block entry' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_leave;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'leave' }
-sub desc { 'block exit' }
-sub check { 'ck_null' }
-sub flags { '@' }
-sub args { '' }
-
-
-package PLXML::op_scope;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'scope' }
-sub desc { 'block' }
-sub check { 'ck_null' }
-sub flags { '@' }
-sub args { '' }
-
-
-package PLXML::op_enteriter;
-
-our @ISA = ('PLXML::loop');
-
-sub key { 'enteriter' }
-sub desc { 'foreach loop entry' }
-sub check { 'ck_null' }
-sub flags { 'd{' }
-sub args { '' }
-
-
-package PLXML::op_iter;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'iter' }
-sub desc { 'foreach loop iterator' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_enterloop;
-
-our @ISA = ('PLXML::loop');
-
-sub key { 'enterloop' }
-sub desc { 'loop entry' }
-sub check { 'ck_null' }
-sub flags { 'd{' }
-sub args { '' }
-
-
-package PLXML::op_leaveloop;
-
-our @ISA = ('PLXML::binop');
-
-sub key { 'leaveloop' }
-sub desc { 'loop exit' }
-sub check { 'ck_null' }
-sub flags { '2' }
-sub args { '' }
-
-
-package PLXML::op_return;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'return' }
-sub desc { 'return' }
-sub check { 'ck_return' }
-sub flags { 'dm@' }
-sub args { 'L' }
-
-
-package PLXML::op_last;
-
-our @ISA = ('PLXML::loopexop');
-
-sub key { 'last' }
-sub desc { 'last' }
-sub check { 'ck_null' }
-sub flags { 'ds}' }
-sub args { '' }
-
-
-package PLXML::op_next;
-
-our @ISA = ('PLXML::loopexop');
-
-sub key { 'next' }
-sub desc { 'next' }
-sub check { 'ck_null' }
-sub flags { 'ds}' }
-sub args { '' }
-
-
-package PLXML::op_redo;
-
-our @ISA = ('PLXML::loopexop');
-
-sub key { 'redo' }
-sub desc { 'redo' }
-sub check { 'ck_null' }
-sub flags { 'ds}' }
-sub args { '' }
-
-
-package PLXML::op_dump;
-
-our @ISA = ('PLXML::loopexop');
-
-sub key { 'dump' }
-sub desc { 'dump' }
-sub check { 'ck_null' }
-sub flags { 'ds}' }
-sub args { '' }
-
-
-package PLXML::op_goto;
-
-our @ISA = ('PLXML::loopexop');
-
-sub key { 'goto' }
-sub desc { 'goto' }
-sub check { 'ck_null' }
-sub flags { 'ds}' }
-sub args { '' }
-
-
-package PLXML::op_exit;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'exit' }
-sub desc { 'exit' }
-sub check { 'ck_exit' }
-sub flags { 'ds%' }
-sub args { 'S?' }
-
-
-# continued below
-
-#nswitch numeric switch ck_null d
-#cswitch character switch ck_null d
-
-# I/O.
-
-package PLXML::op_open;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'open' }
-sub desc { 'open' }
-sub check { 'ck_open' }
-sub flags { 'ismt@' }
-sub args { 'F S? L' }
-
-
-package PLXML::op_close;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'close' }
-sub desc { 'close' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'F?' }
-
-
-package PLXML::op_pipe_op;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'pipe_op' }
-sub desc { 'pipe' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'F F' }
-
-
-
-package PLXML::op_fileno;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'fileno' }
-sub desc { 'fileno' }
-sub check { 'ck_fun' }
-sub flags { 'ist%' }
-sub args { 'F' }
-
-
-package PLXML::op_umask;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'umask' }
-sub desc { 'umask' }
-sub check { 'ck_fun' }
-sub flags { 'ist%' }
-sub args { 'S?' }
-
-
-package PLXML::op_binmode;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'binmode' }
-sub desc { 'binmode' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'F S?' }
-
-
-
-package PLXML::op_tie;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'tie' }
-sub desc { 'tie' }
-sub check { 'ck_fun' }
-sub flags { 'idms@' }
-sub args { 'R S L' }
-
-
-package PLXML::op_untie;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'untie' }
-sub desc { 'untie' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'R' }
-
-
-package PLXML::op_tied;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'tied' }
-sub desc { 'tied' }
-sub check { 'ck_fun' }
-sub flags { 's%' }
-sub args { 'R' }
-
-
-package PLXML::op_dbmopen;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'dbmopen' }
-sub desc { 'dbmopen' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'H S S' }
-
-
-package PLXML::op_dbmclose;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'dbmclose' }
-sub desc { 'dbmclose' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'H' }
-
-
-
-package PLXML::op_sselect;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sselect' }
-sub desc { 'select system call' }
-sub check { 'ck_select' }
-sub flags { 't@' }
-sub args { 'S S S S' }
-
-
-package PLXML::op_select;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'select' }
-sub desc { 'select' }
-sub check { 'ck_select' }
-sub flags { 'st@' }
-sub args { 'F?' }
-
-
-
-package PLXML::op_getc;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'getc' }
-sub desc { 'getc' }
-sub check { 'ck_eof' }
-sub flags { 'st%' }
-sub args { 'F?' }
-
-
-package PLXML::op_read;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'read' }
-sub desc { 'read' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'F R S S?' }
-
-
-package PLXML::op_enterwrite;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'enterwrite' }
-sub desc { 'write' }
-sub check { 'ck_fun' }
-sub flags { 'dis%' }
-sub args { 'F?' }
-
-
-package PLXML::op_leavewrite;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'leavewrite' }
-sub desc { 'write exit' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { '' }
-
-
-
-package PLXML::op_prtf;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'prtf' }
-sub desc { 'printf' }
-sub check { 'ck_listiob' }
-sub flags { 'ims@' }
-sub args { 'F? L' }
-
-
-package PLXML::op_print;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'print' }
-sub desc { 'print' }
-sub check { 'ck_listiob' }
-sub flags { 'ims@' }
-sub args { 'F? L' }
-
-
-package PLXML::op_say;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'say' }
-sub desc { 'say' }
-sub check { 'ck_listiob' }
-sub flags { 'ims@' }
-sub args { 'F? L' }
-
-
-package PLXML::op_sysopen;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sysopen' }
-sub desc { 'sysopen' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'F S S S?' }
-
-
-package PLXML::op_sysseek;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sysseek' }
-sub desc { 'sysseek' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'F S S' }
-
-
-package PLXML::op_sysread;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sysread' }
-sub desc { 'sysread' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'F R S S?' }
-
-
-package PLXML::op_syswrite;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'syswrite' }
-sub desc { 'syswrite' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'F S S? S?' }
-
-
-
-package PLXML::op_send;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'send' }
-sub desc { 'send' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'Fs S S S?' }
-
-
-package PLXML::op_recv;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'recv' }
-sub desc { 'recv' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'Fs R S S' }
-
-
-
-package PLXML::op_eof;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'eof' }
-sub desc { 'eof' }
-sub check { 'ck_eof' }
-sub flags { 'is%' }
-sub args { 'F?' }
-
-
-package PLXML::op_tell;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'tell' }
-sub desc { 'tell' }
-sub check { 'ck_fun' }
-sub flags { 'st%' }
-sub args { 'F?' }
-
-
-package PLXML::op_seek;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'seek' }
-sub desc { 'seek' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'F S S' }
-
-
-# truncate really behaves as if it had both "S S" and "F S"
-package PLXML::op_truncate;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'truncate' }
-sub desc { 'truncate' }
-sub check { 'ck_trunc' }
-sub flags { 'is@' }
-sub args { 'S S' }
-
-
-
-package PLXML::op_fcntl;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'fcntl' }
-sub desc { 'fcntl' }
-sub check { 'ck_fun' }
-sub flags { 'st@' }
-sub args { 'F S S' }
-
-
-package PLXML::op_ioctl;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'ioctl' }
-sub desc { 'ioctl' }
-sub check { 'ck_fun' }
-sub flags { 'st@' }
-sub args { 'F S S' }
-
-
-package PLXML::op_flock;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'flock' }
-sub desc { 'flock' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'F S' }
-
-
-
-# Sockets.
-
-package PLXML::op_socket;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'socket' }
-sub desc { 'socket' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S S S' }
-
-
-package PLXML::op_sockpair;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'sockpair' }
-sub desc { 'socketpair' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs Fs S S S' }
-
-
-
-package PLXML::op_bind;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'bind' }
-sub desc { 'bind' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S' }
-
-
-package PLXML::op_connect;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'connect' }
-sub desc { 'connect' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S' }
-
-
-package PLXML::op_listen;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'listen' }
-sub desc { 'listen' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S' }
-
-
-package PLXML::op_accept;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'accept' }
-sub desc { 'accept' }
-sub check { 'ck_fun' }
-sub flags { 'ist@' }
-sub args { 'Fs Fs' }
-
-
-package PLXML::op_shutdown;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'shutdown' }
-sub desc { 'shutdown' }
-sub check { 'ck_fun' }
-sub flags { 'ist@' }
-sub args { 'Fs S' }
-
-
-
-package PLXML::op_gsockopt;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'gsockopt' }
-sub desc { 'getsockopt' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S S' }
-
-
-package PLXML::op_ssockopt;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'ssockopt' }
-sub desc { 'setsockopt' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'Fs S S S' }
-
-
-
-package PLXML::op_getsockname;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'getsockname' }
-sub desc { 'getsockname' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'Fs' }
-
-
-package PLXML::op_getpeername;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'getpeername' }
-sub desc { 'getpeername' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'Fs' }
-
-
-
-# Stat calls.
-
-package PLXML::op_lstat;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'lstat' }
-sub desc { 'lstat' }
-sub check { 'ck_ftst' }
-sub flags { 'u-' }
-sub args { 'F' }
-
-
-package PLXML::op_stat;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'stat' }
-sub desc { 'stat' }
-sub check { 'ck_ftst' }
-sub flags { 'u-' }
-sub args { 'F' }
-
-
-package PLXML::op_ftrread;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftrread' }
-sub desc { '-R' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftrwrite;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftrwrite' }
-sub desc { '-W' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftrexec;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftrexec' }
-sub desc { '-X' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_fteread;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'fteread' }
-sub desc { '-r' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftewrite;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftewrite' }
-sub desc { '-w' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_fteexec;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'fteexec' }
-sub desc { '-x' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftis;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftis' }
-sub desc { '-e' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_fteowned;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'fteowned' }
-sub desc { '-O' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftrowned;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftrowned' }
-sub desc { '-o' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftzero;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftzero' }
-sub desc { '-z' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftsize;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftsize' }
-sub desc { '-s' }
-sub check { 'ck_ftst' }
-sub flags { 'istu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftmtime;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftmtime' }
-sub desc { '-M' }
-sub check { 'ck_ftst' }
-sub flags { 'stu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftatime;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftatime' }
-sub desc { '-A' }
-sub check { 'ck_ftst' }
-sub flags { 'stu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftctime;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftctime' }
-sub desc { '-C' }
-sub check { 'ck_ftst' }
-sub flags { 'stu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftsock;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftsock' }
-sub desc { '-S' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftchr;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftchr' }
-sub desc { '-c' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftblk;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftblk' }
-sub desc { '-b' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftfile;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftfile' }
-sub desc { '-f' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftdir;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftdir' }
-sub desc { '-d' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftpipe;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftpipe' }
-sub desc { '-p' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftlink;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftlink' }
-sub desc { '-l' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftsuid;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftsuid' }
-sub desc { '-u' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftsgid;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftsgid' }
-sub desc { '-g' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftsvtx;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftsvtx' }
-sub desc { '-k' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_fttty;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'fttty' }
-sub desc { '-t' }
-sub check { 'ck_ftst' }
-sub flags { 'is-' }
-sub args { 'F-' }
-
-
-package PLXML::op_fttext;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'fttext' }
-sub desc { '-T' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-package PLXML::op_ftbinary;
-
-our @ISA = ('PLXML::filestatop');
-
-sub key { 'ftbinary' }
-sub desc { '-B' }
-sub check { 'ck_ftst' }
-sub flags { 'isu-' }
-sub args { 'F-' }
-
-
-
-# File calls.
-
-package PLXML::op_chdir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'chdir' }
-sub desc { 'chdir' }
-sub check { 'ck_fun' }
-sub flags { 'isT%' }
-sub args { 'S?' }
-
-
-package PLXML::op_chown;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'chown' }
-sub desc { 'chown' }
-sub check { 'ck_fun' }
-sub flags { 'imsT@' }
-sub args { 'L' }
-
-
-package PLXML::op_chroot;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'chroot' }
-sub desc { 'chroot' }
-sub check { 'ck_fun' }
-sub flags { 'isTu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_unlink;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'unlink' }
-sub desc { 'unlink' }
-sub check { 'ck_fun' }
-sub flags { 'imsTu@' }
-sub args { 'L' }
-
-
-package PLXML::op_chmod;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'chmod' }
-sub desc { 'chmod' }
-sub check { 'ck_fun' }
-sub flags { 'imsT@' }
-sub args { 'L' }
-
-
-package PLXML::op_utime;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'utime' }
-sub desc { 'utime' }
-sub check { 'ck_fun' }
-sub flags { 'imsT@' }
-sub args { 'L' }
-
-
-package PLXML::op_rename;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'rename' }
-sub desc { 'rename' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_link;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'link' }
-sub desc { 'link' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_symlink;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'symlink' }
-sub desc { 'symlink' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_readlink;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'readlink' }
-sub desc { 'readlink' }
-sub check { 'ck_fun' }
-sub flags { 'stu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_mkdir;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'mkdir' }
-sub desc { 'mkdir' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S?' }
-
-
-package PLXML::op_rmdir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'rmdir' }
-sub desc { 'rmdir' }
-sub check { 'ck_fun' }
-sub flags { 'isTu%' }
-sub args { 'S?' }
-
-
-
-# Directory calls.
-
-package PLXML::op_open_dir;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'open_dir' }
-sub desc { 'opendir' }
-sub check { 'ck_fun' }
-sub flags { 'is@' }
-sub args { 'F S' }
-
-
-package PLXML::op_readdir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'readdir' }
-sub desc { 'readdir' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'F' }
-
-
-package PLXML::op_telldir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'telldir' }
-sub desc { 'telldir' }
-sub check { 'ck_fun' }
-sub flags { 'st%' }
-sub args { 'F' }
-
-
-package PLXML::op_seekdir;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'seekdir' }
-sub desc { 'seekdir' }
-sub check { 'ck_fun' }
-sub flags { 's@' }
-sub args { 'F S' }
-
-
-package PLXML::op_rewinddir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'rewinddir' }
-sub desc { 'rewinddir' }
-sub check { 'ck_fun' }
-sub flags { 's%' }
-sub args { 'F' }
-
-
-package PLXML::op_closedir;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'closedir' }
-sub desc { 'closedir' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'F' }
-
-
-
-# Process control.
-
-package PLXML::op_fork;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'fork' }
-sub desc { 'fork' }
-sub check { 'ck_null' }
-sub flags { 'ist0' }
-sub args { '' }
-
-
-package PLXML::op_wait;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'wait' }
-sub desc { 'wait' }
-sub check { 'ck_null' }
-sub flags { 'isT0' }
-sub args { '' }
-
-
-package PLXML::op_waitpid;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'waitpid' }
-sub desc { 'waitpid' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_system;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'system' }
-sub desc { 'system' }
-sub check { 'ck_exec' }
-sub flags { 'imsT@' }
-sub args { 'S? L' }
-
-
-package PLXML::op_exec;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'exec' }
-sub desc { 'exec' }
-sub check { 'ck_exec' }
-sub flags { 'dimsT@' }
-sub args { 'S? L' }
-
-
-package PLXML::op_kill;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'kill' }
-sub desc { 'kill' }
-sub check { 'ck_fun' }
-sub flags { 'dimsT@' }
-sub args { 'L' }
-
-
-package PLXML::op_getppid;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'getppid' }
-sub desc { 'getppid' }
-sub check { 'ck_null' }
-sub flags { 'isT0' }
-sub args { '' }
-
-
-package PLXML::op_getpgrp;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'getpgrp' }
-sub desc { 'getpgrp' }
-sub check { 'ck_fun' }
-sub flags { 'isT%' }
-sub args { 'S?' }
-
-
-package PLXML::op_setpgrp;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'setpgrp' }
-sub desc { 'setpgrp' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S? S?' }
-
-
-package PLXML::op_getpriority;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'getpriority' }
-sub desc { 'getpriority' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S' }
-
-
-package PLXML::op_setpriority;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'setpriority' }
-sub desc { 'setpriority' }
-sub check { 'ck_fun' }
-sub flags { 'isT@' }
-sub args { 'S S S' }
-
-
-
-# Time calls.
-
-package PLXML::op_time;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'time' }
-sub desc { 'time' }
-sub check { 'ck_null' }
-sub flags { 'isT0' }
-sub args { '' }
-
-
-package PLXML::op_tms;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'tms' }
-sub desc { 'times' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_localtime;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'localtime' }
-sub desc { 'localtime' }
-sub check { 'ck_fun' }
-sub flags { 't%' }
-sub args { 'S?' }
-
-
-package PLXML::op_gmtime;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'gmtime' }
-sub desc { 'gmtime' }
-sub check { 'ck_fun' }
-sub flags { 't%' }
-sub args { 'S?' }
-
-
-package PLXML::op_alarm;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'alarm' }
-sub desc { 'alarm' }
-sub check { 'ck_fun' }
-sub flags { 'istu%' }
-sub args { 'S?' }
-
-
-package PLXML::op_sleep;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'sleep' }
-sub desc { 'sleep' }
-sub check { 'ck_fun' }
-sub flags { 'isT%' }
-sub args { 'S?' }
-
-
-
-# Shared memory.
-
-package PLXML::op_shmget;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'shmget' }
-sub desc { 'shmget' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_shmctl;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'shmctl' }
-sub desc { 'shmctl' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_shmread;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'shmread' }
-sub desc { 'shmread' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S S' }
-
-
-package PLXML::op_shmwrite;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'shmwrite' }
-sub desc { 'shmwrite' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S S' }
-
-
-
-# Message passing.
-
-package PLXML::op_msgget;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'msgget' }
-sub desc { 'msgget' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S' }
-
-
-package PLXML::op_msgctl;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'msgctl' }
-sub desc { 'msgctl' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_msgsnd;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'msgsnd' }
-sub desc { 'msgsnd' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_msgrcv;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'msgrcv' }
-sub desc { 'msgrcv' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S S S' }
-
-
-
-# Semaphores.
-
-package PLXML::op_semget;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'semget' }
-sub desc { 'semget' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S' }
-
-
-package PLXML::op_semctl;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'semctl' }
-sub desc { 'semctl' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S S S' }
-
-
-package PLXML::op_semop;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'semop' }
-sub desc { 'semop' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S S' }
-
-
-
-# Eval.
-
-package PLXML::op_require;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'require' }
-sub desc { 'require' }
-sub check { 'ck_require' }
-sub flags { 'du%' }
-sub args { 'S?' }
-
-
-package PLXML::op_dofile;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'dofile' }
-sub desc { 'do "file"' }
-sub check { 'ck_fun' }
-sub flags { 'd1' }
-sub args { 'S' }
-
-
-package PLXML::op_entereval;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'entereval' }
-sub desc { 'eval "string"' }
-sub check { 'ck_eval' }
-sub flags { 'd%' }
-sub args { 'S' }
-
-
-package PLXML::op_leaveeval;
-
-our @ISA = ('PLXML::unop');
-
-sub key { 'leaveeval' }
-sub desc { 'eval "string" exit' }
-sub check { 'ck_null' }
-sub flags { '1' }
-sub args { 'S' }
-
-
-#evalonce eval constant string ck_null d1 S
-package PLXML::op_entertry;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'entertry' }
-sub desc { 'eval {block}' }
-sub check { 'ck_null' }
-sub flags { '|' }
-sub args { '' }
-
-
-package PLXML::op_leavetry;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'leavetry' }
-sub desc { 'eval {block} exit' }
-sub check { 'ck_null' }
-sub flags { '@' }
-sub args { '' }
-
-
-
-# Get system info.
-
-package PLXML::op_ghbyname;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ghbyname' }
-sub desc { 'gethostbyname' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_ghbyaddr;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'ghbyaddr' }
-sub desc { 'gethostbyaddr' }
-sub check { 'ck_fun' }
-sub flags { '@' }
-sub args { 'S S' }
-
-
-package PLXML::op_ghostent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'ghostent' }
-sub desc { 'gethostent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_gnbyname;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'gnbyname' }
-sub desc { 'getnetbyname' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_gnbyaddr;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'gnbyaddr' }
-sub desc { 'getnetbyaddr' }
-sub check { 'ck_fun' }
-sub flags { '@' }
-sub args { 'S S' }
-
-
-package PLXML::op_gnetent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'gnetent' }
-sub desc { 'getnetent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_gpbyname;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'gpbyname' }
-sub desc { 'getprotobyname' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_gpbynumber;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'gpbynumber' }
-sub desc { 'getprotobynumber' }
-sub check { 'ck_fun' }
-sub flags { '@' }
-sub args { 'S' }
-
-
-package PLXML::op_gprotoent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'gprotoent' }
-sub desc { 'getprotoent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_gsbyname;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'gsbyname' }
-sub desc { 'getservbyname' }
-sub check { 'ck_fun' }
-sub flags { '@' }
-sub args { 'S S' }
-
-
-package PLXML::op_gsbyport;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'gsbyport' }
-sub desc { 'getservbyport' }
-sub check { 'ck_fun' }
-sub flags { '@' }
-sub args { 'S S' }
-
-
-package PLXML::op_gservent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'gservent' }
-sub desc { 'getservent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_shostent;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'shostent' }
-sub desc { 'sethostent' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'S' }
-
-
-package PLXML::op_snetent;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'snetent' }
-sub desc { 'setnetent' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'S' }
-
-
-package PLXML::op_sprotoent;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'sprotoent' }
-sub desc { 'setprotoent' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'S' }
-
-
-package PLXML::op_sservent;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'sservent' }
-sub desc { 'setservent' }
-sub check { 'ck_fun' }
-sub flags { 'is%' }
-sub args { 'S' }
-
-
-package PLXML::op_ehostent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'ehostent' }
-sub desc { 'endhostent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_enetent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'enetent' }
-sub desc { 'endnetent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_eprotoent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'eprotoent' }
-sub desc { 'endprotoent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_eservent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'eservent' }
-sub desc { 'endservent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_gpwnam;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'gpwnam' }
-sub desc { 'getpwnam' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_gpwuid;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'gpwuid' }
-sub desc { 'getpwuid' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_gpwent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'gpwent' }
-sub desc { 'getpwent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_spwent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'spwent' }
-sub desc { 'setpwent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_epwent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'epwent' }
-sub desc { 'endpwent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_ggrnam;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ggrnam' }
-sub desc { 'getgrnam' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_ggrgid;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'ggrgid' }
-sub desc { 'getgrgid' }
-sub check { 'ck_fun' }
-sub flags { '%' }
-sub args { 'S' }
-
-
-package PLXML::op_ggrent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'ggrent' }
-sub desc { 'getgrent' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
-package PLXML::op_sgrent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'sgrent' }
-sub desc { 'setgrent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_egrent;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'egrent' }
-sub desc { 'endgrent' }
-sub check { 'ck_null' }
-sub flags { 'is0' }
-sub args { '' }
-
-
-package PLXML::op_getlogin;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'getlogin' }
-sub desc { 'getlogin' }
-sub check { 'ck_null' }
-sub flags { 'st0' }
-sub args { '' }
-
-
-
-# Miscellaneous.
-
-package PLXML::op_syscall;
-
-our @ISA = ('PLXML::listop');
-
-sub key { 'syscall' }
-sub desc { 'syscall' }
-sub check { 'ck_fun' }
-sub flags { 'imst@' }
-sub args { 'S L' }
-
-
-
-# For multi-threading
-package PLXML::op_lock;
-
-our @ISA = ('PLXML::baseop_unop');
-
-sub key { 'lock' }
-sub desc { 'lock' }
-sub check { 'ck_rfun' }
-sub flags { 's%' }
-sub args { 'R' }
-
-
-package PLXML::op_threadsv;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'threadsv' }
-sub desc { 'per-thread value' }
-sub check { 'ck_null' }
-sub flags { 'ds0' }
-sub args { '' }
-
-
-
-# Control (contd.)
-package PLXML::op_setstate;
-
-our @ISA = ('PLXML::cop');
-
-sub key { 'setstate' }
-sub desc { 'set statement info' }
-sub check { 'ck_null' }
-sub flags { 's;' }
-sub args { '' }
-
-
-package PLXML::op_method_named;
-
-our @ISA = ('PLXML::padop_svop');
-
-sub key { 'method_named' }
-sub desc { 'method with known name' }
-sub check { 'ck_null' }
-sub flags { 'd$' }
-sub args { '' }
-
-
-
-package PLXML::op_dor;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'dor' }
-sub desc { 'defined or (//)' }
-sub check { 'ck_null' }
-sub flags { '|' }
-sub args { '' }
-
-
-package PLXML::op_dorassign;
-
-our @ISA = ('PLXML::logop');
-
-sub key { 'dorassign' }
-sub desc { 'defined or assignment (//=)' }
-sub check { 'ck_null' }
-sub flags { 's|' }
-sub args { '' }
-
-
-
-# Add new ops before this, the custom operator.
-
-package PLXML::op_custom;
-
-our @ISA = ('PLXML::baseop');
-
-sub key { 'custom' }
-sub desc { 'unknown custom operator' }
-sub check { 'ck_null' }
-sub flags { '0' }
-sub args { '' }
-
-
diff --git a/mad/p55 b/mad/p55
deleted file mode 100644
index 20b879bbd2..0000000000
--- a/mad/p55
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/perl
-
-while (@ARGV and $ARGV[0] =~ /^-/) {
- my $switch = shift;
- if ($switch eq '-Y') {
- $YAML = '-Y ';
- }
- else {
- die "Unrecognized switch: -$switch";
- }
-}
-
-my $file = shift;
-my $infile = $file;
-
-unlink "$file.msg";
-my $top = "/home/larry/src/p55";
-
-my $text;
-open(FILE, $file) or die "Can't open $file: $!\n";
-{
- local $/;
- $text = <FILE>;
-}
-close FILE;
-my $T;
-$switches = $1 if $text =~ /^#!.*?\s(-.*)/;
-$switches =~ s/\s+-[-*].*//;
-$switches =~ s/\s+#.*//;
-
-#if ($text =~ s/\bexit\b/DUMMYEXIT/g) {
-# $infile = "$file.tmp";
-# open FILE, ">$infile";
-# print FILE $text;
-# close FILE;
-#}
-
-unlink "$file.xml", "$file.msg", "$file.err", "$file.diff", "$file.p5";
-print "PERL_XMLDUMP='$file.xml' $top/perl $switches -I lib $infile 2>$file.err\n";
-system "PERL_XMLDUMP='$file.xml' $top/perl $switches -I lib $infile 2>$file.err";
-
-if ($?) {
- print "Exit status $?\n";
- system "cat $file.err";
- exit 1;
-}
-
-if (not -s "$file.xml") {
- die "Didn't produce an xml file!?!\n"
-}
-
-if ($YAML) {
- system "$top/nomad -Y $file.xml";
- exit;
-}
-
-system "$top/nomad $file.xml >$file.p5 2>$file.msg";
-
-if ($?) {
- print "Oops!\n" unless -s "$file.msg";
- system "cat $file.msg";
- exit 1;
-}
-
-system "diff -u $file $file.p5 >$file.diff";
-if (-s "$file.diff") {
- system "cat $file.diff";
- exit 1;
-}
diff --git a/mad/t/p55.t b/mad/t/p55.t
deleted file mode 100644
index fbfa451220..0000000000
--- a/mad/t/p55.t
+++ /dev/null
@@ -1,178 +0,0 @@
-
-# Test p55, the "Perl 5 to Perl 5" translator.
-
-# The perl core should have MAD enabled ('sh Configure -Dmad=y ...')
-
-# The part to convert xml to Perl 5 requires XML::Parser, but it does
-# not depend on Perl internals, so you can use a stable system wide
-# perl
-
-# For the p55 on the perl test suite, it should be started from the
-# $perlsource/t subdir
-
-# Instructions:
-# sh Configure -Dmad=y
-# make && make test
-# cd t && /usr/bin/prove ../mad/t/p55.t
-
-use strict;
-use warnings;
-
-BEGIN {
- push @INC, "../mad";
-}
-
-use Test::More qw|no_plan|;
-use IO::Handle;
-
-use Nomad;
-
-sub p55 {
- my ($input, $msg) = @_;
-
- # perl5 to xml
- open my $infile, "> tmp.in";
- $infile->print($input);
- close $infile;
-
- unlink "tmp.xml";
- `PERL_XMLDUMP='tmp.xml' ../perl -I ../lib tmp.in 2> tmp.err`;
-
- if (-z "tmp.xml") {
- return ok 0, "MAD dump failed $msg";
- }
- my $output = eval { Nomad::xml_to_p5( input => "tmp.xml" ) };
- diag($@) if $@;
- is($output, $input, $msg);
-}
-
-undef $/;
-my @prgs = split m/^########\n/m, <DATA>;
-
-use bytes;
-
-for my $prog (@prgs) {
- my $msg = ($prog =~ s/^#(.*)\n//) && $1;
- local $TODO = ($msg =~ /TODO/) ? 1 : 0;
- p55($prog, $msg);
-}
-
-# Files
-use File::Find;
-use Test::Differences;
-
-our %failing = map { $_, 1 } qw|
-../t/comp/require.t
-
-../t/op/switch.t
-
-../t/op/attrhand.t
-
-../t/op/symbolcache.t
-
-../t/op/exec.t
-
-../t/op/state.t
-../t/op/each_array.t
-../t/lib/cygwin.t
-|;
-
-my @files;
-find( sub { push @files, $File::Find::name if m/[.]t$/ }, '../t/');
-
-for my $file (@files) {
- my $input;
- local $/ = undef;
- local $TODO = (exists $failing{$file} ? "Known failure" : undef);
- #warn $file;
- open(my $fh, "<", "$file") or die "Failed open '../t/$file' $!";
- $input = $fh->getline;
- close $fh or die;
-
- my $switches = "";
- if( $input =~ m/^[#][!].*perl(.*)/) {
- $switches = $1;
- }
-
- unlink "tmp.xml";
- `PERL_XMLDUMP='tmp.xml' ../perl $switches -I ../lib $file 2> tmp.err`;
-
- if (-z "tmp.xml") {
- fail "MAD dump failure of '$file'";
- next;
- }
- my $output = eval { Nomad::xml_to_p5( input => "tmp.xml" ) };
- if ($@) {
- fail "convert xml to p5 failed file: '$file'";
- diag "error: $@";
- next;
- }
- eq_or_diff $output, $input, "p55 '$file'";
-}
-
-__DATA__
-use strict;
-#ABC
-new Foo;
-Foo->new;
-########
-sub pi() { 3.14 }
-my $x = pi;
-########
--OS_Code => $a
-########
-use encoding 'euc-jp';
-tr/¤¡-¤ó¥¡-¥ó/¥¡-¥ó¤¡-¤ó/;
-########
-sub ok($$) { }
-BEGIN { ok(1, 2, ); }
-########
-for (my $i=0; $i<3; $i++) { }
-########
-for (; $a<3; $a++) { }
-########
-#
-s//$#foo/ge;
-########
-#
-s//m#.#/ge;
-########
-#
-eval { require 5.005 }
-########
-# Reduced test case from t/io/layers.t
-sub PerlIO::F_UTF8 () { 0x00008000 } # from perliol.h
-BEGIN { PerlIO::Layer->find("encoding",1);}
-########
-# from ../t/op/array.t
-$[ = 1
-########
-# from t/comp/parser.t
-$x = 1 for ($[) = 0;
-########
-# from t/op/getppid.t
-pipe my ($r, $w)
-########
-# TODO switch
-use feature 'switch';
-given(my $x = "bar") { }
-########
-# TODO attribute t/op/attrhand.t
-sub something : TypeCheck(
- QNET::Util::Object,
- QNET::Util::Object,
- QNET::Util::Object
-) { # WrongAttr (perl tokenizer bug)
- # keep this ^ lined up !
- return 42;
-}
-########
-# TODO symbol table t/op/symbolcache.t
-sub replaced2 { 'func' }
-BEGIN { undef $main::{replaced2} }
-########
-# TODO exit in begin block. from t/op/threads.t without threads
-BEGIN {
- exit 0;
-}
-use foobar;
diff --git a/madly.c b/madly.c
deleted file mode 100644
index d703732816..0000000000
--- a/madly.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* madly.c
- *
- * Copyright (c) 2004, 2005, 2006 Larry Wall and others
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * Note that this file is essentially empty, and just #includes perly.c,
- * to allow compilation of a second parser, Perl_madparse, that is
- * identical to Perl_yyparse, but which includes extra code for dumping
- * the parse tree. This is controlled by the PERL_IN_MADLY_C define.
- */
-
-#define PERL_IN_MADLY_C
-
-#include "perly.c"
-
-/*
- * Local variables:
- * c-indentation-style: bsd
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- *
- * ex: set ts=8 sts=4 sw=4 et:
- */
diff --git a/makedef.pl b/makedef.pl
index c88bee8b0b..83f0c91e06 100644
--- a/makedef.pl
+++ b/makedef.pl
@@ -453,13 +453,6 @@ unless ($define{'PERL_TRACK_MEMPOOL'}) {
++$skip{PL_memory_debug_header};
}
-unless ($define{PERL_MAD}) {
- ++$skip{$_} foreach qw(
- PL_madskills
- PL_xmlfp
- );
-}
-
unless ($define{'MULTIPLICITY'}) {
++$skip{$_} foreach qw(
PL_interp_size
diff --git a/op.c b/op.c
index be20c21e9c..eb64b52b8e 100644
--- a/op.c
+++ b/op.c
@@ -571,8 +571,6 @@ S_no_bareword_allowed(pTHX_ OP *o)
{
PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
- if (PL_madskills)
- return; /* various ok barewords are hidden in extra OP_NULL */
qerror(Perl_mess(aTHX_
"Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
SVfARG(cSVOPo_sv)));
@@ -786,19 +784,8 @@ Perl_op_clear(pTHX_ OP *o)
PERL_ARGS_ASSERT_OP_CLEAR;
-#ifdef PERL_MAD
- mad_free(o->op_madprop);
- o->op_madprop = 0;
-#endif
-
- retry:
switch (o->op_type) {
case OP_NULL: /* Was holding old type, if any. */
- if (PL_madskills && o->op_targ != OP_NULL) {
- o->op_type = (Optype)o->op_targ;
- o->op_targ = 0;
- goto retry;
- }
/* FALLTHROUGH */
case OP_ENTERTRY:
case OP_ENTEREVAL: /* Was holding hints. */
@@ -1038,8 +1025,7 @@ Perl_op_null(pTHX_ OP *o)
if (o->op_type == OP_NULL)
return;
- if (!PL_madskills)
- op_clear(o);
+ op_clear(o);
o->op_targ = o->op_type;
o->op_type = OP_NULL;
o->op_ppaddr = PL_ppaddr[OP_NULL];
@@ -1398,21 +1384,6 @@ Perl_scalarvoid(pTHX_ OP *o)
PERL_ARGS_ASSERT_SCALARVOID;
- /* trailing mad null ops don't count as "there" for void processing */
- if (PL_madskills &&
- o->op_type != OP_NULL &&
- o->op_sibling &&
- o->op_sibling->op_type == OP_NULL)
- {
- OP *sib;
- for (sib = o->op_sibling;
- sib && sib->op_type == OP_NULL;
- sib = sib->op_sibling) ;
-
- if (!sib)
- return o;
- }
-
if (o->op_type == OP_NEXTSTATE
|| o->op_type == OP_DBSTATE
|| (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
@@ -1673,8 +1644,7 @@ Perl_scalarvoid(pTHX_ OP *o)
case OP_AND:
kid = cLOGOPo->op_first;
if (kid->op_type == OP_NOT
- && (kid->op_flags & OPf_KIDS)
- && !PL_madskills) {
+ && (kid->op_flags & OPf_KIDS)) {
if (o->op_type == OP_AND) {
o->op_type = OP_OR;
o->op_ppaddr = PL_ppaddr[OP_OR];
@@ -1885,23 +1855,6 @@ S_finalize_op(pTHX_ OP* o)
{
PERL_ARGS_ASSERT_FINALIZE_OP;
-#if defined(PERL_MAD) && defined(USE_ITHREADS)
- {
- /* Make sure mad ops are also thread-safe */
- MADPROP *mp = o->op_madprop;
- while (mp) {
- if (mp->mad_type == MAD_OP && mp->mad_vlen) {
- OP *prop_op = (OP *) mp->mad_val;
- /* We only need "Relocate sv to the pad for thread safety.", but this
- easiest way to make sure it traverses everything */
- if (prop_op->op_type == OP_CONST)
- cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
- finalize_op(prop_op);
- }
- mp = mp->mad_next;
- }
- }
-#endif
switch (o->op_type) {
case OP_NEXTSTATE:
@@ -2132,7 +2085,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
PL_modcount++;
return o;
case OP_STUB:
- if ((o->op_flags & OPf_PARENS) || PL_madskills)
+ if ((o->op_flags & OPf_PARENS))
break;
goto nomod;
case OP_ENTERSUB:
@@ -2635,10 +2588,6 @@ S_dup_attrlist(pTHX_ OP *o)
*/
if (o->op_type == OP_CONST)
rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
-#ifdef PERL_MAD
- else if (o->op_type == OP_NULL)
- rop = NULL;
-#endif
else {
assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
rop = NULL;
@@ -2898,10 +2847,6 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
return o;
type = o->op_type;
- if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
- (void)my_kid(cUNOPo->op_first, attrs, imopsp);
- return o;
- }
if (type == OP_LIST) {
OP *kid;
@@ -3614,14 +3559,7 @@ S_fold_constants(pTHX_ OP *o)
CALLRUNOPS(aTHX);
sv = *(PL_stack_sp--);
if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
-#ifdef PERL_MAD
- /* Can't simply swipe the SV from the pad, because that relies on
- the op being freed "real soon now". Under MAD, this doesn't
- happen (see the #ifdef below). */
- sv = newSVsv(sv);
-#else
pad_swipe(o->op_targ, FALSE);
-#endif
}
else if (SvTEMP(sv)) { /* grab mortal temp? */
SvREFCNT_inc_simple_void(sv);
@@ -3655,9 +3593,7 @@ S_fold_constants(pTHX_ OP *o)
if (ret)
goto nope;
-#ifndef PERL_MAD
op_free(o);
-#endif
assert(sv);
if (type == OP_STRINGIFY) SvPADTMP_off(sv);
else if (!SvIMMORTAL(sv)) {
@@ -3671,7 +3607,6 @@ S_fold_constants(pTHX_ OP *o)
newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
if (type != OP_STRINGIFY) newop->op_folded = 1;
}
- op_getmad(o,newop,'f');
return newop;
nope:
@@ -3718,11 +3653,7 @@ S_gen_constant_list(pTHX_ OP *o)
SvPADTMP_on(*svp);
SvREADONLY_on(*svp);
}
-#ifdef PERL_MAD
- op_getmad(curop,o,'O');
-#else
op_free(curop);
-#endif
LINKLIST(o);
return list(o);
}
@@ -3834,21 +3765,6 @@ Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
first->op_flags |= (last->op_flags & OPf_KIDS);
-#ifdef PERL_MAD
- if (((LISTOP*)last)->op_first && first->op_madprop) {
- MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
- if (mp) {
- while (mp->mad_next)
- mp = mp->mad_next;
- mp->mad_next = first->op_madprop;
- }
- else {
- ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
- }
- }
- first->op_madprop = last->op_madprop;
- last->op_madprop = 0;
-#endif
S_op_destroy(aTHX_ last);
@@ -3901,251 +3817,6 @@ Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
/* Constructors */
-#ifdef PERL_MAD
-
-TOKEN *
-Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
-{
- TOKEN *tk;
- Newxz(tk, 1, TOKEN);
- tk->tk_type = (OPCODE)optype;
- tk->tk_type = 12345;
- tk->tk_lval = lval;
- tk->tk_mad = madprop;
- return tk;
-}
-
-void
-Perl_token_free(pTHX_ TOKEN* tk)
-{
- PERL_ARGS_ASSERT_TOKEN_FREE;
-
- if (tk->tk_type != 12345)
- return;
- mad_free(tk->tk_mad);
- Safefree(tk);
-}
-
-void
-Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
-{
- MADPROP* mp;
- MADPROP* tm;
-
- PERL_ARGS_ASSERT_TOKEN_GETMAD;
-
- if (tk->tk_type != 12345) {
- Perl_warner(aTHX_ packWARN(WARN_MISC),
- "Invalid TOKEN object ignored");
- return;
- }
- tm = tk->tk_mad;
- if (!tm)
- return;
-
- /* faked up qw list? */
- if (slot == '(' &&
- tm->mad_type == MAD_SV &&
- SvPVX((SV *)tm->mad_val)[0] == 'q')
- slot = 'x';
-
- if (o) {
- mp = o->op_madprop;
- if (mp) {
- for (;;) {
- /* pretend constant fold didn't happen? */
- if (mp->mad_key == 'f' &&
- (o->op_type == OP_CONST ||
- o->op_type == OP_GV) )
- {
- token_getmad(tk,(OP*)mp->mad_val,slot);
- return;
- }
- if (!mp->mad_next)
- break;
- mp = mp->mad_next;
- }
- mp->mad_next = tm;
- mp = mp->mad_next;
- }
- else {
- o->op_madprop = tm;
- mp = o->op_madprop;
- }
- if (mp->mad_key == 'X')
- mp->mad_key = slot; /* just change the first one */
-
- tk->tk_mad = 0;
- }
- else
- mad_free(tm);
- Safefree(tk);
-}
-
-void
-Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
-{
- MADPROP* mp;
- if (!from)
- return;
- if (o) {
- mp = o->op_madprop;
- if (mp) {
- for (;;) {
- /* pretend constant fold didn't happen? */
- if (mp->mad_key == 'f' &&
- (o->op_type == OP_CONST ||
- o->op_type == OP_GV) )
- {
- op_getmad(from,(OP*)mp->mad_val,slot);
- return;
- }
- if (!mp->mad_next)
- break;
- mp = mp->mad_next;
- }
- mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
- }
- else {
- o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
- }
- }
-}
-
-void
-Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
-{
- MADPROP* mp;
- if (!from)
- return;
- if (o) {
- mp = o->op_madprop;
- if (mp) {
- for (;;) {
- /* pretend constant fold didn't happen? */
- if (mp->mad_key == 'f' &&
- (o->op_type == OP_CONST ||
- o->op_type == OP_GV) )
- {
- op_getmad(from,(OP*)mp->mad_val,slot);
- return;
- }
- if (!mp->mad_next)
- break;
- mp = mp->mad_next;
- }
- mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
- }
- else {
- o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
- }
- }
- else {
- PerlIO_printf(PerlIO_stderr(),
- "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
- op_free(from);
- }
-}
-
-void
-Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
-{
- MADPROP* tm;
- if (!mp || !o)
- return;
- if (slot)
- mp->mad_key = slot;
- tm = o->op_madprop;
- o->op_madprop = mp;
- for (;;) {
- if (!mp->mad_next)
- break;
- mp = mp->mad_next;
- }
- mp->mad_next = tm;
-}
-
-void
-Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
-{
- if (!o)
- return;
- addmad(tm, &(o->op_madprop), slot);
-}
-
-void
-Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
-{
- MADPROP* mp;
- if (!tm || !root)
- return;
- if (slot)
- tm->mad_key = slot;
- mp = *root;
- if (!mp) {
- *root = tm;
- return;
- }
- for (;;) {
- if (!mp->mad_next)
- break;
- mp = mp->mad_next;
- }
- mp->mad_next = tm;
-}
-
-MADPROP *
-Perl_newMADsv(pTHX_ char key, SV* sv)
-{
- PERL_ARGS_ASSERT_NEWMADSV;
-
- return newMADPROP(key, MAD_SV, sv, 0);
-}
-
-MADPROP *
-Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
-{
- MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
- mp->mad_next = 0;
- mp->mad_key = key;
- mp->mad_vlen = vlen;
- mp->mad_type = type;
- mp->mad_val = val;
-/* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
- return mp;
-}
-
-void
-Perl_mad_free(pTHX_ MADPROP* mp)
-{
-/* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
- if (!mp)
- return;
- if (mp->mad_next)
- mad_free(mp->mad_next);
-/* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
- PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
- switch (mp->mad_type) {
- case MAD_NULL:
- break;
- case MAD_PV:
- Safefree(mp->mad_val);
- break;
- case MAD_OP:
- if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
- op_free((OP*)mp->mad_val);
- break;
- case MAD_SV:
- sv_free(MUTABLE_SV(mp->mad_val));
- break;
- default:
- PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
- break;
- }
- PerlMemShared_free(mp);
-}
-
-#endif
/*
=head1 Optree construction
@@ -4386,10 +4057,6 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
dVAR;
SV * const tstr = ((SVOP*)expr)->op_sv;
SV * const rstr =
-#ifdef PERL_MAD
- (repl->op_type == OP_NULL)
- ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
-#endif
((SVOP*)repl)->op_sv;
STRLEN tlen;
STRLEN rlen;
@@ -4620,13 +4287,8 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
Safefree(tsave);
Safefree(rsave);
-#ifdef PERL_MAD
- op_getmad(expr,o,'e');
- op_getmad(repl,o,'r');
-#else
op_free(expr);
op_free(repl);
-#endif
return o;
}
@@ -4711,13 +4373,8 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
if (grows)
o->op_private |= OPpTRANS_GROWS;
-#ifdef PERL_MAD
- op_getmad(expr,o,'e');
- op_getmad(repl,o,'r');
-#else
op_free(expr);
op_free(repl);
-#endif
return o;
}
@@ -4969,11 +4626,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
: Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
rx_flags, pm->op_pmflags)
);
-#ifdef PERL_MAD
- op_getmad(expr,(OP*)pm,'e');
-#else
op_free(expr);
-#endif
}
else {
/* compile-time pattern that includes literal code blocks */
@@ -5316,18 +4969,11 @@ Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
return CHECKOP(type, pvop);
}
-#ifdef PERL_MAD
-OP*
-#else
void
-#endif
Perl_package(pTHX_ OP *o)
{
dVAR;
SV *const sv = cSVOPo->op_sv;
-#ifdef PERL_MAD
- OP *pegop;
-#endif
PERL_ARGS_ASSERT_PACKAGE;
@@ -5342,18 +4988,7 @@ Perl_package(pTHX_ OP *o)
PL_parser->copline = NOLINE;
PL_parser->expect = XSTATE;
-#ifndef PERL_MAD
op_free(o);
-#else
- if (!PL_madskills) {
- op_free(o);
- return NULL;
- }
-
- pegop = newOP(OP_NULL,0);
- op_getmad(o,pegop,'P');
- return pegop;
-#endif
}
void
@@ -5368,20 +5003,13 @@ Perl_package_version( pTHX_ OP *v )
op_free(v);
}
-#ifdef PERL_MAD
-OP*
-#else
void
-#endif
Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
{
dVAR;
OP *pack;
OP *imop;
OP *veop;
-#ifdef PERL_MAD
- OP *pegop = PL_madskills ? newOP(OP_NULL,0) : NULL;
-#endif
SV *use_version = NULL;
PERL_ARGS_ASSERT_UTILIZE;
@@ -5389,16 +5017,11 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
if (idop->op_type != OP_CONST)
Perl_croak(aTHX_ "Module name must be constant");
- if (PL_madskills)
- op_getmad(idop,pegop,'U');
-
veop = NULL;
if (version) {
SV * const vesv = ((SVOP*)version)->op_sv;
- if (PL_madskills)
- op_getmad(version,pegop,'V');
if (!arg && !SvNIOKp(vesv)) {
arg = version;
}
@@ -5423,8 +5046,6 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
/* Fake up an import/unimport */
if (arg && arg->op_type == OP_STUB) {
- if (PL_madskills)
- op_getmad(arg,pegop,'S');
imop = arg; /* no import on explicit () */
}
else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
@@ -5437,9 +5058,6 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
else {
SV *meth;
- if (PL_madskills)
- op_getmad(arg,pegop,'A');
-
/* Make copy of idop so we don't free it twice */
pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
@@ -5514,9 +5132,6 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
PL_cop_seqmax++;
-#ifdef PERL_MAD
- return pegop;
-#endif
}
/*
@@ -5910,7 +5525,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
LINKLIST(o);
}
- if (right && right->op_type == OP_SPLIT && !PL_madskills) {
+ if (right && right->op_type == OP_SPLIT) {
OP* tmpop = ((LISTOP*)right)->op_first;
if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
PMOP * const pm = (PMOP*)tmpop;
@@ -6211,7 +5826,7 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
&& (first->op_flags & OPf_KIDS)
&& ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
|| (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
- && !PL_madskills) {
+ ) {
if (type == OP_AND || type == OP_OR) {
if (type == OP_AND)
type = OP_OR;
@@ -6236,12 +5851,6 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
*firstp = NULL;
if (other->op_type == OP_CONST)
other->op_private |= OPpCONST_SHORTCIRCUIT;
- if (PL_madskills) {
- OP *newop = newUNOP(OP_NULL, 0, other);
- op_getmad(first, newop, '1');
- newop->op_targ = type; /* set "was" field */
- return newop;
- }
op_free(first);
if (other->op_type == OP_LEAVE)
other = newUNOP(OP_NULL, OPf_SPECIAL, other);
@@ -6276,13 +5885,7 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
*otherp = NULL;
if (cstop->op_type == OP_CONST)
cstop->op_private |= OPpCONST_SHORTCIRCUIT;
- if (PL_madskills) {
- first = newUNOP(OP_NULL, 0, first);
- op_getmad(other, first, '2');
- first->op_targ = type; /* set "was" field */
- }
- else
- op_free(other);
+ op_free(other);
return first;
}
}
@@ -6397,15 +6000,8 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
cstop->op_private & OPpCONST_STRICT) {
no_bareword_allowed(cstop);
}
- if (PL_madskills) {
- /* This is all dead code when PERL_MAD is not defined. */
- live = newUNOP(OP_NULL, 0, live);
- op_getmad(first, live, 'C');
- op_getmad(dead, live, left ? 'e' : 't');
- } else {
- op_free(first);
- op_free(dead);
- }
+ op_free(first);
+ op_free(dead);
if (live->op_type == OP_LEAVE)
live = newUNOP(OP_NULL, OPf_SPECIAL, live);
else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
@@ -6767,7 +6363,6 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
PADOFFSET padoff = 0;
I32 iterflags = 0;
I32 iterpflags = 0;
- OP *madsv = NULL;
PERL_ARGS_ASSERT_NEWFOROP;
@@ -6790,12 +6385,8 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
else if (sv->op_type == OP_PADSV) { /* private variable */
iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
padoff = sv->op_targ;
- if (PL_madskills)
- madsv = sv;
- else {
- sv->op_targ = 0;
- op_free(sv);
- }
+ sv->op_targ = 0;
+ op_free(sv);
sv = NULL;
}
else
@@ -6846,11 +6437,7 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
right->op_next = (OP*)listop;
listop->op_next = listop->op_first;
-#ifdef PERL_MAD
- op_getmad(expr,(OP*)listop,'O');
-#else
op_free(expr);
-#endif
expr = (OP*)(listop);
op_null(expr);
iterflags |= OPf_STACKED;
@@ -6879,8 +6466,6 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
loop->op_targ = padoff;
wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
- if (madsv)
- op_getmad(madsv, (OP*)loop, 'v');
return wop;
}
@@ -6933,11 +6518,7 @@ Perl_newLOOPEX(pTHX_ I32 type, OP *label)
/* If we have already created an op, we do not need the label. */
if (o)
-#ifdef PERL_MAD
- op_getmad(label,o,'L');
-#else
op_free(label);
-#endif
else o = newUNOP(type, OPf_STACKED, label);
PL_hints |= HINT_BLOCK_SCOPE;
@@ -7298,9 +6879,6 @@ Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
dVAR;
SV *sv = NULL;
- if (PL_madskills)
- return NULL;
-
if (!o)
return NULL;
@@ -7362,9 +6940,6 @@ S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
assert (o || name);
assert (const_svp);
if ((!block
-#ifdef PERL_MAD
- || block->op_type == OP_NULL
-#endif
)) {
if (CvFLAGS(PL_compcv)) {
/* might have had built-in attrs applied */
@@ -7402,13 +6977,7 @@ S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
SvREFCNT_inc_simple_void_NN(PL_compcv);
CopLINE_set(PL_curcop, oldline);
}
-#ifdef PERL_MAD
- if (!PL_minus_c) /* keep old one around for madskills */
-#endif
- {
- /* (PL_madskills unset in used file.) */
- SAVEFREESV(cv);
- }
+ SAVEFREESV(cv);
return TRUE;
}
@@ -7464,12 +7033,10 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
else
ps = NULL;
- if (!PL_madskills) {
- if (proto)
- SAVEFREEOP(proto);
- if (attrs)
- SAVEFREEOP(attrs);
- }
+ if (proto)
+ SAVEFREEOP(proto);
+ if (attrs)
+ SAVEFREEOP(attrs);
if (PL_parser && PL_parser->error_count) {
op_free(block);
@@ -7512,9 +7079,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
if (!block || !ps || *ps || attrs
|| (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS)
-#ifdef PERL_MAD
- || block->op_type == OP_NULL
-#endif
)
const_sv = NULL;
else
@@ -7563,8 +7127,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
CvXSUB(cv) = const_sv_xsub;
CvCONST_on(cv);
CvISXSUB_on(cv);
- if (PL_madskills)
- goto install_block;
op_free(block);
SvREFCNT_dec(compcv);
PL_compcv = NULL;
@@ -7585,9 +7147,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
if (cv) { /* must reuse cv in case stub is referenced elsewhere */
/* transfer PL_compcv to cv */
if (block
-#ifdef PERL_MAD
- && block->op_type != OP_NULL
-#endif
) {
cv_flags_t preserved_flags =
CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
@@ -7651,7 +7210,6 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
}
- install_block:
if (!block)
goto attrs;
@@ -7664,11 +7222,7 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
/* This makes sub {}; work as expected. */
if (block->op_type == OP_STUB) {
OP* const newblock = newSTATEOP(0, NULL, 0);
-#ifdef PERL_MAD
- op_getmad(block,newblock,'B');
-#else
op_free(block);
-#endif
block = newblock;
}
CvROOT(cv) = CvLVALUE(cv)
@@ -7786,8 +7340,7 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
store it. */
const I32 gv_fetch_flags
= ec ? GV_NOADD_NOINIT :
- (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
- || PL_madskills)
+ (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
STRLEN namlen = 0;
const char * const name =
@@ -7831,14 +7384,12 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
else
ps = NULL;
- if (!PL_madskills) {
- if (o)
- SAVEFREEOP(o);
- if (proto)
- SAVEFREEOP(proto);
- if (attrs)
- SAVEFREEOP(attrs);
- }
+ if (o)
+ SAVEFREEOP(o);
+ if (proto)
+ SAVEFREEOP(proto);
+ if (attrs)
+ SAVEFREEOP(attrs);
if (ec) {
op_free(block);
@@ -7885,9 +7436,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
if (!block || !ps || *ps || attrs
|| (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
-#ifdef PERL_MAD
- || block->op_type == OP_NULL
-#endif
)
const_sv = NULL;
else
@@ -7933,8 +7481,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
const_sv
);
}
- if (PL_madskills)
- goto install_block;
op_free(block);
SvREFCNT_dec(PL_compcv);
PL_compcv = NULL;
@@ -7943,9 +7489,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
if (cv) { /* must reuse cv if autoloaded */
/* transfer PL_compcv to cv */
if (block
-#ifdef PERL_MAD
- && block->op_type != OP_NULL
-#endif
) {
cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
PADLIST *const temp_av = CvPADLIST(cv);
@@ -8010,7 +7553,6 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
}
- install_block:
if (!block)
goto attrs;
@@ -8023,11 +7565,7 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
/* This makes sub {}; work as expected. */
if (block->op_type == OP_STUB) {
OP* const newblock = newSTATEOP(0, NULL, 0);
-#ifdef PERL_MAD
- op_getmad(block,newblock,'B');
-#else
op_free(block);
-#endif
block = newblock;
}
CvROOT(cv) = CvLVALUE(cv)
@@ -8395,18 +7933,11 @@ Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
);
}
-#ifdef PERL_MAD
-OP *
-#else
void
-#endif
Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
{
dVAR;
CV *cv;
-#ifdef PERL_MAD
- OP* pegop = newOP(OP_NULL, 0);
-#endif
GV *gv;
@@ -8455,18 +7986,10 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
cv_forget_slab(cv);
finish:
-#ifdef PERL_MAD
- op_getmad(o,pegop,'n');
- op_getmad_weak(block, pegop, 'b');
-#else
op_free(o);
-#endif
if (PL_parser)
PL_parser->copline = NOLINE;
LEAVE_SCOPE(floor);
-#ifdef PERL_MAD
- return pegop;
-#endif
}
OP *
@@ -8632,8 +8155,7 @@ Perl_ck_anoncode(pTHX_ OP *o)
PERL_ARGS_ASSERT_CK_ANONCODE;
cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
- if (!PL_madskills)
- cSVOPo->op_sv = NULL;
+ cSVOPo->op_sv = NULL;
return o;
}
@@ -8697,11 +8219,7 @@ Perl_ck_backtick(pTHX_ OP *o)
else if (!(o->op_flags & OPf_KIDS))
newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
if (newop) {
-#ifdef PERL_MAD
- op_getmad(o,newop,'O');
-#else
op_free(o);
-#endif
return newop;
}
S_io_hints(aTHX_ o);
@@ -8801,11 +8319,7 @@ Perl_ck_spair(pTHX_ OP *o)
type == OP_RV2AV || type == OP_RV2HV)
return o;
}
-#ifdef PERL_MAD
- op_getmad(kUNOP->op_first,newop,'K');
-#else
op_free(kUNOP->op_first);
-#endif
kUNOP->op_first = newop;
}
/* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
@@ -8864,11 +8378,7 @@ Perl_ck_eof(pTHX_ OP *o)
if (cLISTOPo->op_first->op_type == OP_STUB) {
OP * const newop
= newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
-#ifdef PERL_MAD
- op_getmad(o,newop,'O');
-#else
op_free(o);
-#endif
o = newop;
}
o = ck_fun(o);
@@ -8893,14 +8403,9 @@ Perl_ck_eval(pTHX_ OP *o)
if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
LOGOP *enter;
-#ifdef PERL_MAD
- OP* const oldo = o;
-#endif
cUNOPo->op_first = 0;
-#ifndef PERL_MAD
op_free(o);
-#endif
NewOp(1101, enter, 1, LOGOP);
enter->op_type = OP_ENTERTRY;
@@ -8914,7 +8419,6 @@ Perl_ck_eval(pTHX_ OP *o)
o->op_type = OP_LEAVETRY;
o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
enter->op_other = o;
- op_getmad(oldo,o,'O');
return o;
}
else {
@@ -8924,13 +8428,8 @@ Perl_ck_eval(pTHX_ OP *o)
}
else {
const U8 priv = o->op_private;
-#ifdef PERL_MAD
- OP* const oldo = o;
-#else
op_free(o);
-#endif
o = newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
- op_getmad(oldo,o,'O');
}
o->op_targ = (PADOFFSET)PL_hints;
if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
@@ -9123,11 +8622,7 @@ Perl_ck_ftst(pTHX_ OP *o)
&& !kid->op_folded) {
OP * const newop = newGVOP(type, OPf_REF,
gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
-#ifdef PERL_MAD
- op_getmad(o,newop,'O');
-#else
op_free(o);
-#endif
return newop;
}
if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
@@ -9144,16 +8639,11 @@ Perl_ck_ftst(pTHX_ OP *o)
}
}
else {
-#ifdef PERL_MAD
- OP* const oldo = o;
-#else
op_free(o);
-#endif
if (type == OP_FTTTY)
o = newGVOP(type, OPf_REF, PL_stdingv);
else
o = newUNOP(type, 0, newDEFSVOP());
- op_getmad(oldo,o,'O');
}
return o;
}
@@ -9208,12 +8698,6 @@ Perl_ck_fun(pTHX_ OP *o)
numargs++;
sibl = kid->op_sibling;
-#ifdef PERL_MAD
- if (!sibl && kid->op_type == OP_STUB) {
- numargs--;
- break;
- }
-#endif
switch (oa & 7) {
case OA_SCALAR:
/* list seen where single (scalar) arg expected? */
@@ -9281,11 +8765,7 @@ Perl_ck_fun(pTHX_ OP *o)
if (!(o->op_private & 1) && /* if not unop */
kid == cLISTOPo->op_last)
cLISTOPo->op_last = newop;
-#ifdef PERL_MAD
- op_getmad(kid,newop,'K');
-#else
op_free(kid);
-#endif
kid = newop;
}
else if (kid->op_type == OP_READLINE) {
@@ -9407,28 +8887,17 @@ Perl_ck_fun(pTHX_ OP *o)
tokid = &kid->op_sibling;
kid = kid->op_sibling;
}
-#ifdef PERL_MAD
- if (kid && kid->op_type != OP_STUB)
- return too_many_arguments_pv(o,OP_DESC(o), 0);
- o->op_private |= numargs;
-#else
- /* FIXME - should the numargs move as for the PERL_MAD case? */
+ /* FIXME - should the numargs or-ing move after the too many
+ * arguments check? */
o->op_private |= numargs;
if (kid)
return too_many_arguments_pv(o,OP_DESC(o), 0);
-#endif
listkids(o);
}
else if (PL_opargs[type] & OA_DEFGV) {
-#ifdef PERL_MAD
- OP *newop = newUNOP(type, 0, newDEFSVOP());
- op_getmad(o,newop,'O');
- return newop;
-#else
/* Ordering of these two is important to keep f_map.t passing. */
op_free(o);
return newUNOP(type, 0, newDEFSVOP());
-#endif
}
if (oa) {
@@ -9628,11 +9097,7 @@ Perl_ck_readline(pTHX_ OP *o)
else {
OP * const newop
= newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
-#ifdef PERL_MAD
- op_getmad(o,newop,'O');
-#else
op_free(o);
-#endif
return newop;
}
return o;
@@ -9724,8 +9189,6 @@ Perl_ck_sassign(pTHX_ OP *o)
&& !(kid->op_flags & OPf_STACKED)
/* Cannot steal the second time! */
&& !(kid->op_private & OPpTARGET_MY)
- /* Keep the full thing for madskills */
- && !PL_madskills
)
{
OP * const kkid = kid->op_sibling;
@@ -9820,11 +9283,7 @@ Perl_ck_method(pTHX_ OP *o)
kSVOP->op_sv = NULL;
}
cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
-#ifdef PERL_MAD
- op_getmad(o,cmop,'O');
-#else
op_free(o);
-#endif
return cmop;
}
}
@@ -9934,11 +9393,8 @@ Perl_ck_require(pTHX_ OP *o)
else {
kid = newDEFSVOP();
}
-#ifndef PERL_MAD
op_free(o);
-#endif
newop = S_new_entersubop(aTHX_ gv, kid);
- op_getmad(o,newop,'O');
return newop;
}
@@ -10003,17 +9459,8 @@ Perl_ck_shift(pTHX_ OP *o)
}
argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
-#ifdef PERL_MAD
- {
- OP * const oldo = o;
- o = newUNOP(type, 0, scalar(argop));
- op_getmad(oldo,o,'O');
- return o;
- }
-#else
op_free(o);
return newUNOP(type, 0, scalar(argop));
-#endif
}
return scalar(ck_fun(o));
}
@@ -10182,11 +9629,7 @@ S_simplify_sort(pTHX_ OP *o)
o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
kid = cLISTOPo->op_first->op_sibling;
cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
-#ifdef PERL_MAD
- op_getmad(kid,o,'S'); /* then delete it */
-#else
op_free(kid); /* then delete it */
-#endif
}
OP *
@@ -10410,10 +9853,8 @@ Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
if (!aop->op_sibling)
aop = cUNOPx(aop)->op_first;
for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
- if (!(PL_madskills && aop->op_type == OP_STUB)) {
- list(aop);
- op_lvalue(aop, OP_ENTERSUB);
- }
+ list(aop);
+ op_lvalue(aop, OP_ENTERSUB);
}
return entersubop;
}
@@ -10472,15 +9913,7 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
aop = aop->op_sibling;
for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
while (aop != cvop) {
- OP* o3;
- if (PL_madskills && aop->op_type == OP_STUB) {
- aop = aop->op_sibling;
- continue;
- }
- if (PL_madskills && aop->op_type == OP_NULL)
- o3 = ((UNOP*)aop)->op_first;
- else
- o3 = aop;
+ OP* o3 = aop;
if (proto >= proto_end)
return too_many_arguments_sv(entersubop, gv_ename(namegv), 0);
@@ -10537,14 +9970,9 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
GV * const gv = cGVOPx_gv(gvop);
OP * const sibling = aop->op_sibling;
SV * const n = newSVpvs("");
-#ifdef PERL_MAD
- OP * const oldaop = aop;
-#else
op_free(aop);
-#endif
gv_fullname4(n, gv, "", FALSE);
aop = newSVOP(OP_CONST, 0, n);
- op_getmad(oldaop,aop,'O');
prev->op_sibling = aop;
aop->op_sibling = sibling;
}
@@ -10744,9 +10172,6 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
aop = cUNOPx(aop)->op_first;
aop = aop->op_sibling;
for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
- if (PL_madskills) while (aop != cvop && aop->op_type == OP_STUB) {
- aop = aop->op_sibling;
- }
if (aop != cvop)
(void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
@@ -10772,9 +10197,6 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
else {
OP *prev, *cvop;
U32 flags;
-#ifdef PERL_MAD
- bool seenarg = FALSE;
-#endif
if (!aop->op_sibling)
aop = cUNOPx(aop)->op_first;
@@ -10784,10 +10206,6 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
for (cvop = aop;
cvop->op_sibling;
prev=cvop, cvop = cvop->op_sibling)
-#ifdef PERL_MAD
- if (PL_madskills && cvop->op_sibling
- && cvop->op_type != OP_STUB) seenarg = TRUE
-#endif
;
prev->op_sibling = NULL;
flags = OPf_SPECIAL * !(cvop->op_private & OPpENTERSUB_NOPAREN);
@@ -10806,9 +10224,6 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
case OA_BASEOP:
if (aop) {
-#ifdef PERL_MAD
- if (!PL_madskills || seenarg)
-#endif
(void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
op_free(aop);
}
diff --git a/op.h b/op.h
index 9d9dd58d8f..100514c6ad 100644
--- a/op.h
+++ b/op.h
@@ -35,12 +35,6 @@
#define OPCODE U16
-#ifdef PERL_MAD
-# define MADPROP_IN_BASEOP MADPROP* op_madprop;
-#else
-# define MADPROP_IN_BASEOP
-#endif
-
typedef PERL_BITFIELD16 Optype;
#ifdef BASEOP_DEFINITION
@@ -50,7 +44,6 @@ typedef PERL_BITFIELD16 Optype;
OP* op_next; \
OP* op_sibling; \
OP* (*op_ppaddr)(pTHX); \
- MADPROP_IN_BASEOP \
PADOFFSET op_targ; \
PERL_BITFIELD16 op_type:9; \
PERL_BITFIELD16 op_opt:1; \
@@ -1062,103 +1055,6 @@ the NULL pointer check.
#define newATTRSUB(f, o, p, a, b) Perl_newATTRSUB_x(aTHX_ f, o, p, a, b, FALSE)
#define newSUB(f, o, p, b) newATTRSUB((f), (o), (p), NULL, (b))
-#ifdef PERL_MAD
-# define MAD_NULL 1
-# define MAD_PV 2
-# define MAD_OP 3
-# define MAD_SV 4
-
-struct madprop {
- MADPROP* mad_next;
- void *mad_val;
- U32 mad_vlen;
-/* short mad_count; */
- char mad_key;
- char mad_type;
-};
-
-struct token {
- I32 tk_type;
- YYSTYPE tk_lval;
- MADPROP* tk_mad;
-};
-#endif
-
-/*
- * Values that can be held by mad_key :
- * ^ unfilled head spot
- * , literal ,
- * ; literal ; (blank if implicit ; at end of block)
- * : literal : from ?: or attr list
- * + unary +
- * ? literal ? from ?:
- * ( literal (
- * ) literal )
- * [ literal [
- * ] literal ]
- * { literal {
- * } literal }
- * @ literal @ sigil
- * $ literal $ sigil
- * * literal * sigil
- * ! use is source filtered
- * & & or sub
- * # whitespace/comment following ; or }
- * # $# sigil
- * 1 1st ; from for(;;)
- * 1 retired protasis
- * 2 2nd ; from for(;;)
- * 2 retired apodosis
- * 3 C-style for list
- * a sub or var attributes
- * a non-method arrow operator
- * A method arrow operator
- * A use import args
- * b format block
- * B retired stub block
- * C constant conditional op
- * d declarator
- * D do block
- * e unreached "else" (see C)
- * e expression producing E
- * E tr/E/R/, /E/
- * f folded constant op
- * F peg op for format
- * g op was forced to be a word
- * i if/unless modifier
- * I if/elsif/unless statement
- * k local declarator
- * K retired kid op
- * l last index of array ($#foo)
- * L label
- * m modifier on regex
- * n sub or format name
- * o current operator/declarator name
- * o else/continue
- * O generic optimized op
- * p peg to hold extra whitespace at statement level
- * P peg op for package declaration
- * q opening quote
- * = quoted material
- * Q closing quote
- * Q optimized qw//
- * r expression producing R
- * R tr/E/R/ s/E/R/
- * s sub signature
- * S use import stub (no import)
- * S retired sort block
- * t unreached "then" (see C)
- * U use import op
- * v private sv of for loop
- * V use version
- * w while/until modifier
- * W while/for statement
- * x optimized qw
- * X random thing
- * _ whitespace/comments preceding anything else
- * ~ =~ operator
- */
-
/*
=head1 Hook manipulation
*/
diff --git a/pad.c b/pad.c
index e2523e3b3b..da067bffc2 100644
--- a/pad.c
+++ b/pad.c
@@ -153,28 +153,6 @@ Points directly to the body of the L</PL_comppad> array.
STMT_START { ((XPVNV*)SvANY(sv))->xnv_u.xpad_cop_seq.xhigh = (val); } STMT_END
/*
-=for apidoc mx|void|pad_peg|const char *s
-
-When PERL_MAD is enabled, this is a small no-op function that gets called
-at the start of each pad-related function. It can be breakpointed to
-track all pad operations. The parameter is a string indicating the type
-of pad operation being performed.
-
-=cut
-*/
-
-#ifdef PERL_MAD
-void pad_peg(const char* s) {
- static int pegcnt; /* XXX not threadsafe */
- PERL_UNUSED_ARG(s);
-
- PERL_ARGS_ASSERT_PAD_PEG;
-
- pegcnt++;
-}
-#endif
-
-/*
This is basically sv_eq_flags() in sv.c, but we avoid the magic
and bytes checking.
*/
diff --git a/pad.h b/pad.h
index 6269bdc366..b36eafb2ea 100644
--- a/pad.h
+++ b/pad.h
@@ -135,9 +135,7 @@ typedef enum {
* whether PL_comppad and PL_curpad are consistent and whether they have
* active values */
-#ifndef PERL_MAD
# define pad_peg(label)
-#endif
#ifdef DEBUGGING
# define ASSERT_CURPAD_LEGAL(label) \
diff --git a/parser.h b/parser.h
index ff5867e442..75f676c1b1 100644
--- a/parser.h
+++ b/parser.h
@@ -98,28 +98,9 @@ typedef struct yy_parser {
AV *rsfp_filters; /* holds chain of active source filters */
U8 form_lex_state; /* remember lex_state when parsing fmt */
-#ifdef PERL_MAD
- SV *endwhite;
- I32 faketokens;
- I32 lasttoke;
- SV *nextwhite;
- I32 realtokenstart;
- SV *skipwhite;
- SV *thisclose;
- MADPROP * thismad;
- SV *thisopen;
- SV *thisstuff;
- SV *thistoken;
- SV *thiswhite;
-
-/* What we know when we're in LEX_KNOWNEXT state. */
- NEXTTOKE nexttoke[5]; /* value of next token, if any */
- I32 curforce;
-#else
YYSTYPE nextval[5]; /* value of next token, if any */
I32 nexttype[5]; /* type of next token */
I32 nexttoke;
-#endif
COP *saved_curcop; /* the previous PL_curcop */
char tokenbuf[256];
diff --git a/perl.c b/perl.c
index 544a0bc003..9e0d2b5049 100644
--- a/perl.c
+++ b/perl.c
@@ -2244,32 +2244,6 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
}
}
-#ifdef PERL_MAD
- {
- const char *s;
- if (!TAINTING_get &&
- (s = PerlEnv_getenv("PERL_XMLDUMP"))) {
- PL_madskills = 1;
- PL_minus_c = 1;
- if (!s || !s[0])
- PL_xmlfp = PerlIO_stdout();
- else {
- PL_xmlfp = PerlIO_open(s, "w");
- if (!PL_xmlfp)
- Perl_croak(aTHX_ "Can't open %s", s);
- }
- my_setenv("PERL_XMLDUMP", NULL); /* hide from subprocs */
- }
- }
-
- {
- const char *s;
- if ((s = PerlEnv_getenv("PERL_MADSKILLS"))) {
- PL_madskills = atoi(s);
- my_setenv("PERL_MADSKILLS", NULL); /* hide from subprocs */
- }
- }
-#endif
lex_start(linestr_sv, rsfp, lex_start_flags);
SvREFCNT_dec(linestr_sv);
@@ -2398,12 +2372,6 @@ S_run_body(pTHX_ I32 oldscope)
(unsigned int)(PL_sawampersand)));
if (!PL_restartop) {
-#ifdef PERL_MAD
- if (PL_xmlfp) {
- xmldump_all();
- exit(0); /* less likely to core dump than my_exit(0) */
- }
-#endif
#ifdef DEBUGGING
if (DEBUG_x_TEST || DEBUG_B_TEST)
dump_all_perl(!DEBUG_B_TEST);
@@ -4858,21 +4826,12 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv));
}
} else {
- if (!PL_madskills)
- SAVEFREESV(cv);
+ SAVEFREESV(cv);
}
JMPENV_PUSH(ret);
switch (ret) {
case 0:
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_madskills |= 16384;
-#endif
CALL_LIST_BODY(cv);
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_madskills &= ~16384;
-#endif
atsv = ERRSV;
(void)SvPV_const(atsv, len);
if (len) {
diff --git a/perl.h b/perl.h
index 3fa7db5d08..237c2d1f96 100644
--- a/perl.h
+++ b/perl.h
@@ -2256,11 +2256,6 @@ int isnan(double d);
typedef MEM_SIZE STRLEN;
-#ifdef PERL_MAD
-typedef struct token TOKEN;
-typedef struct madprop MADPROP;
-typedef struct nexttoken NEXTTOKE;
-#endif
typedef struct op OP;
typedef struct cop COP;
typedef struct unop UNOP;
@@ -3294,13 +3289,6 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
#endif
#include "perly.h"
-#ifdef PERL_MAD
-struct nexttoken {
- YYSTYPE next_val; /* value of next token, if any */
- I32 next_type; /* type of next token */
- MADPROP *next_mad; /* everything else about that token */
-};
-#endif
/* macros to define bit-fields in structs. */
#ifndef PERL_BITFIELD8
@@ -4611,9 +4599,6 @@ EXTCONST char PL_bincompat_options[] =
# ifdef PERL_IMPLICIT_SYS
" PERL_IMPLICIT_SYS"
# endif
-# ifdef PERL_MAD
- " PERL_MAD"
-# endif
# ifdef PERL_MICRO
" PERL_MICRO"
# endif
@@ -5032,12 +5017,6 @@ struct tempsym; /* defined in pp_pack.c */
#if !defined(PERL_FOR_X2P)
# include "embedvar.h"
#endif
-#ifndef PERL_MAD
-# undef PL_madskills
-# undef PL_xmlfp
-# define PL_madskills 0
-# define PL_xmlfp 0
-#endif
/* Now include all the 'global' variables
* If we don't have threads or multiple interpreters
@@ -5064,10 +5043,6 @@ END_EXTERN_C
In particular, need the relevant *ish file included already, as it may
define HAVE_INTERP_INTERN */
#include "embed.h"
-#ifndef PERL_MAD
-# undef op_getmad
-# define op_getmad(arg,pegop,slot) NOOP
-#endif
#ifndef PERL_GLOBAL_STRUCT
START_EXTERN_C
diff --git a/perly.act b/perly.act
index cb5e9ba227..61850f48e5 100644
--- a/perly.act
+++ b/perly.act
@@ -5,14 +5,14 @@
*/
case 2:
-#line 142 "perly.y"
+#line 114 "perly.y"
{
PL_parser->expect = XSTATE;
}
break;
case 3:
-#line 146 "perly.y"
+#line 118 "perly.y"
{
newPROG(block_end((ps[(3) - (4)].val.ival),(ps[(4) - (4)].val.opval)));
(yyval.ival) = 0;
@@ -20,14 +20,14 @@ case 2:
break;
case 4:
-#line 151 "perly.y"
+#line 123 "perly.y"
{
parser->expect = XTERM;
}
break;
case 5:
-#line 155 "perly.y"
+#line 127 "perly.y"
{
PL_eval_root = (ps[(3) - (3)].val.opval);
(yyval.ival) = 0;
@@ -35,14 +35,14 @@ case 2:
break;
case 6:
-#line 160 "perly.y"
+#line 132 "perly.y"
{
parser->expect = XBLOCK;
}
break;
case 7:
-#line 164 "perly.y"
+#line 136 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
@@ -53,14 +53,14 @@ case 2:
break;
case 8:
-#line 172 "perly.y"
+#line 144 "perly.y"
{
parser->expect = XSTATE;
}
break;
case 9:
-#line 176 "perly.y"
+#line 148 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
@@ -71,14 +71,14 @@ case 2:
break;
case 10:
-#line 184 "perly.y"
+#line 156 "perly.y"
{
parser->expect = XSTATE;
}
break;
case 11:
-#line 188 "perly.y"
+#line 160 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
@@ -89,14 +89,14 @@ case 2:
break;
case 12:
-#line 196 "perly.y"
+#line 168 "perly.y"
{
parser->expect = XSTATE;
}
break;
case 13:
-#line 200 "perly.y"
+#line 172 "perly.y"
{
PL_eval_root = (ps[(3) - (3)].val.opval);
(yyval.ival) = 0;
@@ -104,52 +104,46 @@ case 2:
break;
case 14:
-#line 208 "perly.y"
- { if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
- PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
+#line 180 "perly.y"
+ { if (PL_parser->copline > (line_t)(ps[(1) - (4)].val.ival))
+ PL_parser->copline = (line_t)(ps[(1) - (4)].val.ival);
(yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
- TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
}
break;
case 15:
-#line 218 "perly.y"
- { if (PL_parser->copline > (line_t)IVAL((ps[(1) - (7)].val.i_tkval)))
- PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
+#line 188 "perly.y"
+ { if (PL_parser->copline > (line_t)(ps[(1) - (7)].val.ival))
+ PL_parser->copline = (line_t)(ps[(1) - (7)].val.ival);
(yyval.opval) = block_end((ps[(2) - (7)].val.ival), (ps[(5) - (7)].val.opval));
- TOKEN_GETMAD((ps[(1) - (7)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(7) - (7)].val.i_tkval),(yyval.opval),'}');
}
break;
case 16:
-#line 227 "perly.y"
+#line 195 "perly.y"
{ (yyval.ival) = block_start(TRUE); }
break;
case 17:
-#line 231 "perly.y"
- { if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
- PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
+#line 199 "perly.y"
+ { if (PL_parser->copline > (line_t)(ps[(1) - (4)].val.ival))
+ PL_parser->copline = (line_t)(ps[(1) - (4)].val.ival);
(yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
- TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
}
break;
case 18:
-#line 240 "perly.y"
+#line 206 "perly.y"
{ (yyval.ival) = block_start(FALSE); }
break;
case 19:
-#line 245 "perly.y"
+#line 211 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
case 20:
-#line 247 "perly.y"
+#line 213 "perly.y"
{ (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval));
PL_pad_reset_pending = TRUE;
if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
@@ -158,12 +152,12 @@ case 2:
break;
case 21:
-#line 256 "perly.y"
+#line 222 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
case 22:
-#line 258 "perly.y"
+#line 224 "perly.y"
{ (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval));
PL_pad_reset_pending = TRUE;
if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
@@ -172,68 +166,42 @@ case 2:
break;
case 23:
-#line 267 "perly.y"
+#line 233 "perly.y"
{
- if((ps[(1) - (1)].val.opval)) {
- (yyval.opval) = newSTATEOP(0, NULL, (ps[(1) - (1)].val.opval));
- } else {
- (yyval.opval) = IF_MAD(newOP(OP_NULL, 0), NULL);
- }
+ (yyval.opval) = (ps[(1) - (1)].val.opval) ? newSTATEOP(0, NULL, (ps[(1) - (1)].val.opval)) : NULL;
}
break;
case 24:
-#line 275 "perly.y"
+#line 237 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 25:
-#line 279 "perly.y"
+#line 241 "perly.y"
{
- (yyval.opval) = newSTATEOP(SVf_UTF8
- * PVAL((ps[(1) - (2)].val.p_tkval))[strlen(PVAL((ps[(1) - (2)].val.p_tkval)))+1],
- PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval),
- (ps[(2) - (2)].val.opval) ? cLISTOPx((yyval.opval))->op_first : (yyval.opval), 'L');
+ (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[(1) - (2)].val.pval)[strlen((ps[(1) - (2)].val.pval))+1], (ps[(1) - (2)].val.pval), (ps[(2) - (2)].val.opval));
}
break;
case 26:
-#line 287 "perly.y"
+#line 245 "perly.y"
{
- (yyval.opval) = newSTATEOP(SVf_UTF8
- * PVAL((ps[(1) - (2)].val.p_tkval))[strlen(PVAL((ps[(1) - (2)].val.p_tkval)))+1],
- PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval), cLISTOPx((yyval.opval))->op_first, 'L');
+ (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[(1) - (2)].val.pval)[strlen((ps[(1) - (2)].val.pval))+1], (ps[(1) - (2)].val.pval), (ps[(2) - (2)].val.opval));
}
break;
case 27:
-#line 297 "perly.y"
+#line 252 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 28:
-#line 299 "perly.y"
- {
- (yyval.opval) = newOP(OP_NULL,0);
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'p');
- }
- break;
-
- case 29:
-#line 304 "perly.y"
+#line 254 "perly.y"
{
CV *fmtcv = PL_compcv;
-#ifdef MAD
- (yyval.opval) = newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval));
- prepend_madprops((ps[(1) - (4)].val.i_tkval)->tk_mad, (yyval.opval), 'F');
- (ps[(1) - (4)].val.i_tkval)->tk_mad = 0;
- token_free((ps[(1) - (4)].val.i_tkval));
-#else
newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval));
(yyval.opval) = (OP*)NULL;
-#endif
if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) {
SvREFCNT_inc_simple_void(fmtcv);
pad_add_anon(fmtcv, OP_NULL);
@@ -241,8 +209,8 @@ case 2:
}
break;
- case 30:
-#line 321 "perly.y"
+ case 29:
+#line 264 "perly.y"
{
if ((ps[(2) - (3)].val.opval)->op_type == OP_CONST) {
const char *const name =
@@ -266,104 +234,63 @@ case 2:
}
break;
- case 31:
-#line 343 "perly.y"
+ case 30:
+#line 286 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
-#ifdef MAD
- {
- OP* o = newSVOP(OP_ANONCODE, 0,
- (SV*)(
-#endif
(ps[(2) - (7)].val.opval)->op_type == OP_CONST
? newATTRSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval))
: newMYSUB((ps[(3) - (7)].val.ival), (ps[(2) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval))
-#ifdef MAD
- ));
- (yyval.opval) = newOP(OP_NULL,0);
- op_getmad(o,(yyval.opval),'&');
- op_getmad((ps[(2) - (7)].val.opval),(yyval.opval),'n');
- op_getmad((ps[(5) - (7)].val.opval),(yyval.opval),'s');
- op_getmad((ps[(6) - (7)].val.opval),(yyval.opval),'a');
- token_getmad((ps[(1) - (7)].val.i_tkval),(yyval.opval),'d');
- append_madprops((ps[(7) - (7)].val.opval)->op_madprop, (yyval.opval), 0);
- (ps[(7) - (7)].val.opval)->op_madprop = 0;
- }
-#else
;
(yyval.opval) = (OP*)NULL;
-#endif
intro_my();
}
break;
- case 32:
-#line 371 "perly.y"
+ case 31:
+#line 296 "perly.y"
{
-#ifdef MAD
- (yyval.opval) = package((ps[(3) - (4)].val.opval));
- token_getmad((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
- if ((ps[(2) - (4)].val.opval))
- package_version((ps[(2) - (4)].val.opval));
- token_getmad((ps[(4) - (4)].val.i_tkval),(yyval.opval),';');
-#else
package((ps[(3) - (4)].val.opval));
if ((ps[(2) - (4)].val.opval))
package_version((ps[(2) - (4)].val.opval));
(yyval.opval) = (OP*)NULL;
-#endif
}
break;
- case 33:
-#line 386 "perly.y"
+ case 32:
+#line 303 "perly.y"
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
break;
- case 34:
-#line 388 "perly.y"
+ case 33:
+#line 305 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
-#ifdef MAD
- (yyval.opval) = utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
- token_getmad((ps[(1) - (7)].val.i_tkval),(yyval.opval),'o');
- token_getmad((ps[(7) - (7)].val.i_tkval),(yyval.opval),';');
- if (PL_parser->rsfp_filters &&
- AvFILLp(PL_parser->rsfp_filters) >= 0)
- append_madprops(newMADPROP('!', MAD_NULL, NULL, 0), (yyval.opval), 0);
-#else
- utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
+ utilize((ps[(1) - (7)].val.ival), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
(yyval.opval) = (OP*)NULL;
-#endif
}
break;
- case 35:
-#line 403 "perly.y"
+ case 34:
+#line 311 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (7)].val.i_tkval),(yyval.opval),'I');
- TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (7)].val.ival);
}
break;
- case 36:
-#line 412 "perly.y"
+ case 35:
+#line 317 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (7)].val.i_tkval),(yyval.opval),'I');
- TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (7)].val.ival);
}
break;
- case 37:
-#line 421 "perly.y"
+ case 36:
+#line 323 "perly.y"
{
const PADOFFSET offset = pad_findmy_pvs("$_", 0);
(yyval.opval) = block_end((ps[(3) - (6)].val.ival),
@@ -372,50 +299,44 @@ case 2:
|| PAD_COMPNAME_FLAGS_isOUR(offset)
? 0
: offset));
- PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (6)].val.ival);
}
break;
- case 38:
-#line 432 "perly.y"
+ case 37:
+#line 334 "perly.y"
{ (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); }
break;
- case 39:
-#line 434 "perly.y"
+ case 38:
+#line 336 "perly.y"
{ (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); }
break;
- case 40:
-#line 436 "perly.y"
+ case 39:
+#line 338 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (8)].val.ival),
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
(ps[(4) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval), (ps[(6) - (8)].val.ival)));
- TOKEN_GETMAD((ps[(1) - (8)].val.i_tkval),(yyval.opval),'W');
- TOKEN_GETMAD((ps[(2) - (8)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (8)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (8)].val.ival);
}
break;
- case 41:
-#line 446 "perly.y"
+ case 40:
+#line 345 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (8)].val.ival),
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
(ps[(4) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval), (ps[(6) - (8)].val.ival)));
- TOKEN_GETMAD((ps[(1) - (8)].val.i_tkval),(yyval.opval),'W');
- TOKEN_GETMAD((ps[(2) - (8)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (8)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (8)].val.ival);
}
break;
- case 42:
-#line 457 "perly.y"
+ case 41:
+#line 353 "perly.y"
{
- OP *initop = IF_MAD((ps[(4) - (11)].val.opval) ? (ps[(4) - (11)].val.opval) : newOP(OP_NULL, 0), (ps[(4) - (11)].val.opval));
+ OP *initop = (ps[(4) - (11)].val.opval);
OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
scalar((ps[(6) - (11)].val.opval)), (ps[(11) - (11)].val.opval), (ps[(9) - (11)].val.opval), (ps[(8) - (11)].val.ival));
if (initop) {
@@ -424,55 +345,39 @@ case 2:
newOP(OP_UNSTACK, OPf_SPECIAL),
forop));
}
- DO_MAD({ forop = newUNOP(OP_NULL, 0, forop); })
(yyval.opval) = block_end((ps[(3) - (11)].val.ival), forop);
- TOKEN_GETMAD((ps[(1) - (11)].val.i_tkval),(yyval.opval),'3');
- TOKEN_GETMAD((ps[(2) - (11)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (11)].val.i_tkval),(yyval.opval),'1');
- TOKEN_GETMAD((ps[(7) - (11)].val.i_tkval),(yyval.opval),'2');
- TOKEN_GETMAD((ps[(10) - (11)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (11)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (11)].val.ival);
}
break;
- case 43:
-#line 477 "perly.y"
+ case 42:
+#line 367 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (9)].val.ival), newFOROP(0, (ps[(4) - (9)].val.opval), (ps[(6) - (9)].val.opval), (ps[(8) - (9)].val.opval), (ps[(9) - (9)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (9)].val.i_tkval),(yyval.opval),'W');
- TOKEN_GETMAD((ps[(2) - (9)].val.i_tkval),(yyval.opval),'d');
- TOKEN_GETMAD((ps[(5) - (9)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(7) - (9)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (9)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (9)].val.ival);
}
break;
- case 44:
-#line 486 "perly.y"
+ case 43:
+#line 372 "perly.y"
{
(yyval.opval) = block_end((ps[(4) - (8)].val.ival), newFOROP(0,
op_lvalue((ps[(2) - (8)].val.opval), OP_ENTERLOOP), (ps[(5) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (8)].val.i_tkval),(yyval.opval),'W');
- TOKEN_GETMAD((ps[(3) - (8)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(6) - (8)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (8)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (8)].val.ival);
}
break;
- case 45:
-#line 495 "perly.y"
+ case 44:
+#line 378 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newFOROP(0, (OP*)NULL, (ps[(4) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (7)].val.i_tkval),(yyval.opval),'W');
- TOKEN_GETMAD((ps[(2) - (7)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (7)].val.i_tkval),(yyval.opval),')');
- PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
+ PL_parser->copline = (line_t)(ps[(1) - (7)].val.ival);
}
break;
- case 46:
-#line 504 "perly.y"
+ case 45:
+#line 384 "perly.y"
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -480,8 +385,8 @@ case 2:
}
break;
- case 47:
-#line 510 "perly.y"
+ case 46:
+#line 390 "perly.y"
{
package((ps[(3) - (5)].val.opval));
if ((ps[(2) - (5)].val.opval)) {
@@ -490,53 +395,43 @@ case 2:
}
break;
- case 48:
-#line 517 "perly.y"
+ case 47:
+#line 397 "perly.y"
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
(OP*)NULL, block_end((ps[(5) - (8)].val.ival), (ps[(7) - (8)].val.opval)), (OP*)NULL, 0);
- TOKEN_GETMAD((ps[(4) - (8)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(8) - (8)].val.i_tkval),(yyval.opval),'}');
- if (PL_parser->copline > (line_t)IVAL((ps[(4) - (8)].val.i_tkval)))
- PL_parser->copline = (line_t)IVAL((ps[(4) - (8)].val.i_tkval));
+ if (PL_parser->copline > (line_t)(ps[(4) - (8)].val.ival))
+ PL_parser->copline = (line_t)(ps[(4) - (8)].val.ival);
}
break;
- case 49:
-#line 527 "perly.y"
+ case 48:
+#line 405 "perly.y"
{
PL_parser->expect = XSTATE;
(yyval.opval) = (ps[(1) - (2)].val.opval);
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),';');
}
break;
- case 50:
-#line 533 "perly.y"
+ case 49:
+#line 410 "perly.y"
{
PL_parser->expect = XSTATE;
- (yyval.opval) = IF_MAD(newOP(OP_NULL, 0), (OP*)NULL);
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),';');
+ (yyval.opval) = (OP*)NULL;
PL_parser->copline = NOLINE;
}
break;
- case 51:
-#line 543 "perly.y"
+ case 50:
+#line 419 "perly.y"
{ OP *list;
if ((ps[(2) - (2)].val.opval)) {
OP *term = (ps[(2) - (2)].val.opval);
- DO_MAD(term = newUNOP(OP_NULL, 0, term));
list = op_append_elem(OP_LIST, (ps[(1) - (2)].val.opval), term);
}
else {
-#ifdef MAD
- OP *op = newNULLLIST();
- list = op_append_elem(OP_LIST, (ps[(1) - (2)].val.opval), op);
-#else
list = (ps[(1) - (2)].val.opval);
-#endif
}
if (PL_parser->copline == NOLINE)
PL_parser->copline = CopLINE(PL_curcop)-1;
@@ -546,225 +441,194 @@ case 2:
}
break;
- case 52:
-#line 566 "perly.y"
+ case 51:
+#line 436 "perly.y"
{ (yyval.opval) = NULL; }
break;
- case 53:
-#line 568 "perly.y"
+ case 52:
+#line 438 "perly.y"
{ (yyval.opval) = op_unscope((ps[(2) - (3)].val.opval)); }
break;
- case 54:
-#line 573 "perly.y"
+ case 53:
+#line 443 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 55:
-#line 575 "perly.y"
+ case 54:
+#line 445 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
+ case 55:
+#line 447 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
+ break;
+
case 56:
-#line 577 "perly.y"
- { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
- }
+#line 449 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
break;
case 57:
-#line 581 "perly.y"
- { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
- }
+#line 451 "perly.y"
+ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval)); }
break;
case 58:
-#line 585 "perly.y"
- { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
- }
+#line 453 "perly.y"
+ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval)); }
break;
case 59:
-#line 589 "perly.y"
- { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
- }
- break;
-
- case 60:
-#line 593 "perly.y"
+#line 455 "perly.y"
{ (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
- PL_parser->copline = (line_t)IVAL((ps[(2) - (3)].val.i_tkval));
- }
+ PL_parser->copline = (line_t)(ps[(2) - (3)].val.ival); }
break;
- case 61:
-#line 598 "perly.y"
+ case 60:
+#line 458 "perly.y"
{ (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); }
break;
- case 62:
-#line 603 "perly.y"
+ case 61:
+#line 463 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 63:
-#line 605 "perly.y"
+ case 62:
+#line 465 "perly.y"
{
((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS;
(yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
}
break;
- case 64:
-#line 611 "perly.y"
- { PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
+ case 63:
+#line 470 "perly.y"
+ { PL_parser->copline = (line_t)(ps[(1) - (6)].val.ival);
(yyval.opval) = newCONDOP(0,
newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)),
op_scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval));
PL_hints |= HINT_BLOCK_SCOPE;
- TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'I');
- TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),')');
}
break;
- case 65:
-#line 624 "perly.y"
+ case 64:
+#line 480 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 66:
-#line 626 "perly.y"
- {
- (yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ case 65:
+#line 482 "perly.y"
+ { (yyval.opval) = op_scope((ps[(2) - (2)].val.opval)); }
break;
- case 67:
-#line 634 "perly.y"
+ case 66:
+#line 487 "perly.y"
{ (yyval.ival) = (PL_min_intro_pending &&
PL_max_intro_pending >= PL_min_intro_pending);
intro_my(); }
break;
- case 68:
-#line 640 "perly.y"
+ case 67:
+#line 493 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 70:
-#line 646 "perly.y"
+ case 69:
+#line 499 "perly.y"
{ YYSTYPE tmplval;
(void)scan_num("1", &tmplval);
(yyval.opval) = tmplval.opval; }
break;
- case 72:
-#line 654 "perly.y"
+ case 71:
+#line 507 "perly.y"
{ (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); }
break;
- case 73:
-#line 659 "perly.y"
+ case 72:
+#line 512 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
break;
- case 74:
-#line 663 "perly.y"
+ case 73:
+#line 516 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
break;
- case 75:
-#line 667 "perly.y"
+ case 74:
+#line 520 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); }
break;
- case 76:
-#line 670 "perly.y"
+ case 75:
+#line 523 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
- case 77:
-#line 671 "perly.y"
+ case 76:
+#line 524 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 78:
-#line 675 "perly.y"
+ case 77:
+#line 528 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, 0);
SAVEFREESV(PL_compcv); }
break;
- case 79:
-#line 681 "perly.y"
+ case 78:
+#line 534 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, CVf_ANON);
SAVEFREESV(PL_compcv); }
break;
- case 80:
-#line 686 "perly.y"
+ case 79:
+#line 539 "perly.y"
{ (yyval.ival) = start_subparse(TRUE, 0);
SAVEFREESV(PL_compcv); }
break;
- case 83:
-#line 697 "perly.y"
+ case 82:
+#line 550 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 85:
-#line 703 "perly.y"
+ case 84:
+#line 556 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
+ case 85:
+#line 558 "perly.y"
+ { (yyval.opval) = (ps[(2) - (2)].val.opval); }
+ break;
+
case 86:
-#line 705 "perly.y"
- { (yyval.opval) = (ps[(2) - (2)].val.opval);
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
- }
+#line 560 "perly.y"
+ { (yyval.opval) = (OP*)NULL; }
break;
case 87:
-#line 709 "perly.y"
- { (yyval.opval) = IF_MAD(
- newOP(OP_NULL, 0),
- (OP*)NULL
- );
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),':');
- }
+#line 565 "perly.y"
+ { (yyval.opval) = (ps[(2) - (2)].val.opval); }
break;
case 88:
-#line 719 "perly.y"
- { (yyval.opval) = (ps[(2) - (2)].val.opval);
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
- }
+#line 567 "perly.y"
+ { (yyval.opval) = (OP*)NULL; }
break;
case 89:
-#line 723 "perly.y"
- { (yyval.opval) = IF_MAD(
- newOP(OP_NULL, 0),
- (OP*)NULL
- );
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),':');
- }
- break;
-
- case 90:
-#line 732 "perly.y"
+#line 571 "perly.y"
{ (yyval.opval) = (OP*)NULL; }
break;
- case 91:
-#line 734 "perly.y"
+ case 90:
+#line 573 "perly.y"
{
if (!FEATURE_SIGNATURES_IS_ENABLED)
Perl_croak(aTHX_ "Experimental "
@@ -776,8 +640,8 @@ case 2:
}
break;
- case 92:
-#line 744 "perly.y"
+ case 91:
+#line 583 "perly.y"
{
(yyval.opval) = op_append_list(OP_LINESEQ, (ps[(2) - (3)].val.opval),
newSTATEOP(0, NULL, sawparens(newNULLLIST())));
@@ -785,121 +649,89 @@ case 2:
}
break;
- case 93:
-#line 753 "perly.y"
+ case 92:
+#line 592 "perly.y"
{
- if (PL_parser->copline > (line_t)IVAL((ps[(3) - (5)].val.i_tkval)))
- PL_parser->copline = (line_t)IVAL((ps[(3) - (5)].val.i_tkval));
+ if (PL_parser->copline > (line_t)(ps[(3) - (5)].val.ival))
+ PL_parser->copline = (line_t)(ps[(3) - (5)].val.ival);
(yyval.opval) = block_end((ps[(1) - (5)].val.ival),
op_append_list(OP_LINESEQ, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)));
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 94:
-#line 764 "perly.y"
+ case 93:
+#line 601 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
- case 95:
-#line 765 "perly.y"
- { (yyval.opval) = IF_MAD(
- newOP(OP_NULL,0),
- (OP*)NULL
- );
+ case 94:
+#line 602 "perly.y"
+ { (yyval.opval) = (OP*)NULL;
PL_parser->expect = XSTATE;
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),';');
}
break;
+ case 95:
+#line 609 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
+ break;
+
case 96:
-#line 776 "perly.y"
- { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 611 "perly.y"
+ { (yyval.opval) = newLOGOP((ps[(2) - (3)].val.ival), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
case 97:
-#line 780 "perly.y"
- { (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 613 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
- case 98:
-#line 784 "perly.y"
- { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+ case 99:
+#line 619 "perly.y"
+ { (yyval.opval) = (ps[(1) - (2)].val.opval); }
break;
case 100:
-#line 792 "perly.y"
- {
-#ifdef MAD
- OP* op = newNULLLIST();
- token_getmad((ps[(2) - (2)].val.i_tkval),op,',');
- (yyval.opval) = op_append_elem(OP_LIST, (ps[(1) - (2)].val.opval), op);
-#else
- (yyval.opval) = (ps[(1) - (2)].val.opval);
-#endif
- }
- break;
-
- case 101:
-#line 802 "perly.y"
+#line 621 "perly.y"
{
OP* term = (ps[(3) - (3)].val.opval);
- DO_MAD(
- term = newUNOP(OP_NULL, 0, term);
- token_getmad((ps[(2) - (3)].val.i_tkval),term,',');
- )
(yyval.opval) = op_append_elem(OP_LIST, (ps[(1) - (3)].val.opval), term);
}
break;
- case 103:
-#line 815 "perly.y"
- { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
- op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
+ case 102:
+#line 630 "perly.y"
+ { (yyval.opval) = convert((ps[(1) - (3)].val.ival), OPf_STACKED,
+ op_prepend_elem(OP_LIST, newGVREF((ps[(1) - (3)].val.ival),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
}
break;
- case 104:
-#line 820 "perly.y"
- { (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED,
- op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (5)].val.i_tkval)),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
- TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
+ case 103:
+#line 634 "perly.y"
+ { (yyval.opval) = convert((ps[(1) - (5)].val.ival), OPf_STACKED,
+ op_prepend_elem(OP_LIST, newGVREF((ps[(1) - (5)].val.ival),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
}
break;
- case 105:
-#line 827 "perly.y"
+ case 104:
+#line 638 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
newUNOP(OP_METHOD, 0, (ps[(3) - (6)].val.opval))));
- TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'A');
- TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),')');
}
break;
- case 106:
-#line 836 "perly.y"
+ case 105:
+#line 644 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'A');
}
break;
- case 107:
-#line 842 "perly.y"
+ case 106:
+#line 649 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
@@ -907,349 +739,241 @@ case 2:
}
break;
- case 108:
-#line 848 "perly.y"
+ case 107:
+#line 655 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
newUNOP(OP_METHOD, 0, (ps[(1) - (5)].val.opval))));
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
}
break;
- case 109:
-#line 856 "perly.y"
- { (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ case 108:
+#line 661 "perly.y"
+ { (yyval.opval) = convert((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
break;
- case 110:
-#line 860 "perly.y"
- { (yyval.opval) = convert(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
- TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
- }
+ case 109:
+#line 663 "perly.y"
+ { (yyval.opval) = convert((ps[(1) - (4)].val.ival), 0, (ps[(3) - (4)].val.opval)); }
break;
- case 111:
-#line 866 "perly.y"
+ case 110:
+#line 665 "perly.y"
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); }
break;
- case 112:
-#line 869 "perly.y"
+ case 111:
+#line 668 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
}
break;
- case 115:
-#line 884 "perly.y"
+ case 114:
+#line 683 "perly.y"
{ (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval)));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 116:
-#line 891 "perly.y"
+ case 115:
+#line 687 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
}
break;
- case 117:
-#line 896 "perly.y"
+ case 116:
+#line 690 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
scalar((ps[(4) - (5)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'a');
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),']');
}
break;
- case 118:
-#line 904 "perly.y"
+ case 117:
+#line 695 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
scalar((ps[(3) - (4)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
}
break;
- case 119:
-#line 911 "perly.y"
+ case 118:
+#line 700 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval)));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 120:
-#line 918 "perly.y"
+ case 119:
+#line 704 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
jmaybe((ps[(4) - (6)].val.opval)));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'a');
- TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(5) - (6)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 121:
-#line 928 "perly.y"
+ case 120:
+#line 710 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
jmaybe((ps[(3) - (5)].val.opval)));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
+ case 121:
+#line 716 "perly.y"
+ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+ newCVREF(0, scalar((ps[(1) - (4)].val.opval)))); }
+ break;
+
case 122:
-#line 937 "perly.y"
+#line 719 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar((ps[(1) - (4)].val.opval))));
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a');
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
- }
+ op_append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
+ newCVREF(0, scalar((ps[(1) - (5)].val.opval))))); }
break;
case 123:
-#line 944 "perly.y"
+#line 724 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
- newCVREF(0, scalar((ps[(1) - (5)].val.opval)))));
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'a');
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
- }
+ op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
+ newCVREF(0, scalar((ps[(1) - (4)].val.opval))))); }
break;
case 124:
-#line 953 "perly.y"
+#line 728 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
- newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
- }
+ newCVREF(0, scalar((ps[(1) - (3)].val.opval)))); }
break;
case 125:
-#line 960 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar((ps[(1) - (3)].val.opval))));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 731 "perly.y"
+ { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval)); }
break;
case 126:
-#line 966 "perly.y"
- { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval));
- TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')');
- TOKEN_GETMAD((ps[(4) - (6)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(6) - (6)].val.i_tkval),(yyval.opval),']');
- }
+#line 733 "perly.y"
+ { (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval)); }
break;
case 127:
-#line 973 "perly.y"
- { (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
- }
+#line 735 "perly.y"
+ { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL); }
break;
case 128:
-#line 978 "perly.y"
- { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL);
- TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')');
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),']');
- }
+#line 740 "perly.y"
+ { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), (ps[(2) - (3)].val.ival), (ps[(3) - (3)].val.opval)); }
break;
case 129:
-#line 988 "perly.y"
- { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 742 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 130:
-#line 992 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
+#line 744 "perly.y"
+ { if ((ps[(2) - (3)].val.ival) != OP_REPEAT)
+ scalar((ps[(1) - (3)].val.opval));
+ (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
}
break;
case 131:
-#line 996 "perly.y"
- { if (IVAL((ps[(2) - (3)].val.i_tkval)) != OP_REPEAT)
- scalar((ps[(1) - (3)].val.opval));
- (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 749 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 132:
-#line 1002 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 751 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 133:
-#line 1006 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 753 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 134:
-#line 1010 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 755 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 135:
-#line 1014 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 757 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 136:
-#line 1018 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 759 "perly.y"
+ { (yyval.opval) = newBINOP((ps[(2) - (3)].val.ival), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 137:
-#line 1022 "perly.y"
- { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 761 "perly.y"
+ { (yyval.opval) = newRANGE((ps[(2) - (3)].val.ival), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); }
break;
case 138:
-#line 1026 "perly.y"
- {
- (yyval.opval) = newRANGE(IVAL((ps[(2) - (3)].val.i_tkval)), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
- DO_MAD({
- UNOP *op;
- op = (UNOP*)(yyval.opval);
- op = (UNOP*)op->op_first; /* get to flop */
- op = (UNOP*)op->op_first; /* get to flip */
- op = (UNOP*)op->op_first; /* get to range */
- token_getmad((ps[(2) - (3)].val.i_tkval),(OP*)op,'o');
- });
- }
+#line 763 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
case 139:
-#line 1038 "perly.y"
- { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 765 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
case 140:
-#line 1042 "perly.y"
- { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 767 "perly.y"
+ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
case 141:
-#line 1046 "perly.y"
- { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
- }
+#line 769 "perly.y"
+ { (yyval.opval) = bind_match((ps[(2) - (3)].val.ival), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); }
break;
case 142:
-#line 1050 "perly.y"
- { (yyval.opval) = bind_match(IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),
- ((yyval.opval)->op_type == OP_NOT
- ? ((UNOP*)(yyval.opval))->op_first : (yyval.opval)),
- '~');
- }
+#line 774 "perly.y"
+ { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval))); }
break;
case 143:
-#line 1060 "perly.y"
- { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 776 "perly.y"
+ { (yyval.opval) = (ps[(2) - (2)].val.opval); }
break;
case 144:
-#line 1064 "perly.y"
- { (yyval.opval) = IF_MAD(
- newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)),
- (ps[(2) - (2)].val.opval)
- );
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'+');
- }
+#line 779 "perly.y"
+ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); }
break;
case 145:
-#line 1071 "perly.y"
- { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 781 "perly.y"
+ { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval))); }
break;
case 146:
-#line 1075 "perly.y"
- { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
- break;
-
- case 147:
-#line 1079 "perly.y"
+#line 783 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTINC, 0,
- op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC)); }
break;
- case 148:
-#line 1084 "perly.y"
+ case 147:
+#line 786 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTDEC, 0,
- op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));}
break;
- case 149:
-#line 1089 "perly.y"
+ case 148:
+#line 789 "perly.y"
{ (yyval.opval) = convert(OP_JOIN, 0,
op_append_elem(
OP_LIST,
@@ -1259,164 +983,124 @@ case 2:
)),
(ps[(1) - (2)].val.opval)
));
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
}
break;
- case 150:
-#line 1101 "perly.y"
+ case 149:
+#line 800 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREINC, 0,
- op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC)); }
break;
- case 151:
-#line 1106 "perly.y"
+ case 150:
+#line 803 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREDEC, 0,
- op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+ op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC)); }
+ break;
+
+ case 151:
+#line 810 "perly.y"
+ { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval)); }
break;
case 152:
-#line 1115 "perly.y"
- { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval));
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']');
- }
+#line 812 "perly.y"
+ { (yyval.opval) = newANONLIST((OP*)NULL);}
break;
case 153:
-#line 1120 "perly.y"
- { (yyval.opval) = newANONLIST((OP*)NULL);
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']');
- }
+#line 814 "perly.y"
+ { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval)); }
break;
case 154:
-#line 1125 "perly.y"
- { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval));
- TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),'}');
- }
+#line 816 "perly.y"
+ { (yyval.opval) = newANONHASH((OP*)NULL); }
break;
case 155:
-#line 1131 "perly.y"
- { (yyval.opval) = newANONHASH((OP*)NULL);
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),'}');
- }
+#line 818 "perly.y"
+ { SvREFCNT_inc_simple_void(PL_compcv);
+ (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)); }
break;
case 156:
-#line 1137 "perly.y"
- { SvREFCNT_inc_simple_void(PL_compcv);
- (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval));
- TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
- OP_GETMAD((ps[(3) - (5)].val.opval),(yyval.opval),'s');
- OP_GETMAD((ps[(4) - (5)].val.opval),(yyval.opval),'a');
- }
+#line 825 "perly.y"
+ { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), (ps[(1) - (2)].val.ival));}
break;
case 157:
-#line 1148 "perly.y"
- { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 827 "perly.y"
+ { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));}
break;
- case 158:
-#line 1152 "perly.y"
- { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
- }
+ case 162:
+#line 835 "perly.y"
+ { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval)); }
break;
case 163:
-#line 1162 "perly.y"
- { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval));
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':');
- }
+#line 837 "perly.y"
+ { (yyval.opval) = newUNOP(OP_REFGEN, 0, op_lvalue((ps[(2) - (2)].val.opval),OP_REFGEN)); }
break;
case 164:
-#line 1167 "perly.y"
- { (yyval.opval) = newUNOP(OP_REFGEN, 0, op_lvalue((ps[(2) - (2)].val.opval),OP_REFGEN));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 839 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 165:
-#line 1171 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 841 "perly.y"
+ { (yyval.opval) = localize((ps[(2) - (2)].val.opval),(ps[(1) - (2)].val.ival)); }
break;
case 166:
-#line 1173 "perly.y"
- { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k');
- }
+#line 843 "perly.y"
+ { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); }
break;
case 167:
-#line 1177 "perly.y"
- { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 845 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 168:
-#line 1182 "perly.y"
- { (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); }
+#line 847 "perly.y"
+ { (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 169:
-#line 1184 "perly.y"
- { (yyval.opval) = sawparens(newNULLLIST());
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
- }
+#line 849 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 170:
-#line 1189 "perly.y"
+#line 851 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 171:
-#line 1191 "perly.y"
+#line 853 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 172:
-#line 1193 "perly.y"
+#line 855 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 173:
-#line 1195 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
- break;
-
- case 174:
-#line 1197 "perly.y"
+#line 857 "perly.y"
{ (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));}
break;
- case 175:
-#line 1199 "perly.y"
+ case 174:
+#line 859 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
- case 176:
-#line 1201 "perly.y"
+ case 175:
+#line 861 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
@@ -1425,13 +1109,11 @@ case 2:
if ((yyval.opval) && (ps[(1) - (4)].val.opval))
(yyval.opval)->op_private |=
(ps[(1) - (4)].val.opval)->op_private & OPpSLICEWARNING;
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
}
break;
- case 177:
-#line 1213 "perly.y"
+ case 176:
+#line 871 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVASLICE, 0,
@@ -1440,13 +1122,11 @@ case 2:
if ((yyval.opval) && (ps[(1) - (4)].val.opval))
(yyval.opval)->op_private |=
(ps[(1) - (4)].val.opval)->op_private & OPpSLICEWARNING;
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
}
break;
- case 178:
-#line 1225 "perly.y"
+ case 177:
+#line 881 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
@@ -1456,14 +1136,11 @@ case 2:
(yyval.opval)->op_private |=
(ps[(1) - (5)].val.opval)->op_private & OPpSLICEWARNING;
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 179:
-#line 1239 "perly.y"
+ case 178:
+#line 892 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVHSLICE, 0,
@@ -1473,216 +1150,157 @@ case 2:
(yyval.opval)->op_private |=
(ps[(1) - (5)].val.opval)->op_private & OPpSLICEWARNING;
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
- TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),';');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),'}');
}
break;
- case 180:
-#line 1253 "perly.y"
+ case 179:
+#line 903 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
- case 181:
-#line 1255 "perly.y"
+ case 180:
+#line 905 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); }
break;
- case 182:
-#line 1257 "perly.y"
+ case 181:
+#line 907 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
}
break;
- case 183:
-#line 1262 "perly.y"
+ case 182:
+#line 910 "perly.y"
{
(yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
- DO_MAD({
- OP* op = (yyval.opval);
- if (op->op_type == OP_CONST) { /* defeat const fold */
- op = (OP*)op->op_madprop->mad_val;
- }
- token_getmad((ps[(2) - (4)].val.i_tkval),op,'(');
- token_getmad((ps[(4) - (4)].val.i_tkval),op,')');
- });
}
break;
- case 184:
-#line 1275 "perly.y"
+ case 183:
+#line 915 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
}
break;
+ case 184:
+#line 919 "perly.y"
+ { (yyval.opval) = newSVREF((ps[(1) - (4)].val.opval)); }
+ break;
+
case 185:
-#line 1280 "perly.y"
- { (yyval.opval) = newSVREF((ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'$');
- }
+#line 921 "perly.y"
+ { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval)); }
break;
case 186:
-#line 1284 "perly.y"
- { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'@');
- }
+#line 923 "perly.y"
+ { (yyval.opval) = newHVREF((ps[(1) - (4)].val.opval)); }
break;
case 187:
-#line 1288 "perly.y"
- { (yyval.opval) = newHVREF((ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'%');
- }
+#line 925 "perly.y"
+ { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
+ scalar(newCVREF((ps[(3) - (4)].val.ival),(ps[(1) - (4)].val.opval)))); }
break;
case 188:
-#line 1292 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
- scalar(newCVREF(IVAL((ps[(3) - (4)].val.i_tkval)),(ps[(1) - (4)].val.opval))));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'&');
- }
+#line 928 "perly.y"
+ { (yyval.opval) = newGVREF(0,(ps[(1) - (4)].val.opval)); }
break;
case 189:
-#line 1297 "perly.y"
- { (yyval.opval) = newGVREF(0,(ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'*');
- }
+#line 930 "perly.y"
+ { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), OPf_SPECIAL);
+ PL_hints |= HINT_BLOCK_SCOPE; }
break;
case 190:
-#line 1301 "perly.y"
- { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL);
- PL_hints |= HINT_BLOCK_SCOPE;
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
- }
+#line 933 "perly.y"
+ { (yyval.opval) = newLOOPEX((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval)); }
break;
case 191:
-#line 1306 "perly.y"
- { (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 935 "perly.y"
+ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); }
break;
case 192:
-#line 1310 "perly.y"
- { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 937 "perly.y"
+ { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), 0); }
break;
case 193:
-#line 1314 "perly.y"
- { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
- }
+#line 939 "perly.y"
+ { (yyval.opval) = newUNOP((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
break;
case 194:
-#line 1318 "perly.y"
- { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 941 "perly.y"
+ { (yyval.opval) = newUNOP((ps[(1) - (2)].val.ival), 0, (ps[(2) - (2)].val.opval)); }
break;
case 195:
-#line 1322 "perly.y"
- { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 943 "perly.y"
+ { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.ival) ? OPf_SPECIAL : 0); }
break;
case 196:
-#line 1326 "perly.y"
- { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0);
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
- }
+#line 945 "perly.y"
+ { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.ival) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval)); }
break;
case 197:
-#line 1330 "perly.y"
- { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
- }
+#line 947 "perly.y"
+ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
break;
case 198:
-#line 1334 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
+#line 949 "perly.y"
+ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
+ op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); }
break;
case 199:
-#line 1336 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); }
+#line 952 "perly.y"
+ { (yyval.opval) = newOP((ps[(1) - (1)].val.ival), 0); }
break;
case 200:
-#line 1339 "perly.y"
- { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
- }
+#line 954 "perly.y"
+ { (yyval.opval) = newOP((ps[(1) - (3)].val.ival), 0);}
break;
case 201:
-#line 1343 "perly.y"
- { (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0);
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 956 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 202:
-#line 1349 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 958 "perly.y"
+ { (yyval.opval) = (ps[(1) - (3)].val.opval); }
break;
case 203:
-#line 1351 "perly.y"
- { (yyval.opval) = (ps[(1) - (3)].val.opval);
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 960 "perly.y"
+ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); }
break;
case 204:
-#line 1356 "perly.y"
- { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
- scalar((ps[(1) - (1)].val.opval))); }
+#line 962 "perly.y"
+ { (yyval.opval) = ((ps[(1) - (3)].val.ival) == OP_NOT)
+ ? newUNOP((ps[(1) - (3)].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
+ : newOP((ps[(1) - (3)].val.ival), OPf_SPECIAL); }
break;
case 205:
-#line 1359 "perly.y"
- { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
- ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
- : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
-
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
- TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 966 "perly.y"
+ { (yyval.opval) = newUNOP((ps[(1) - (4)].val.ival), 0, (ps[(3) - (4)].val.opval)); }
break;
case 206:
-#line 1368 "perly.y"
- { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
- TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
- TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
- }
- break;
-
- case 207:
-#line 1374 "perly.y"
+#line 968 "perly.y"
{
if ( (ps[(1) - (1)].val.opval)->op_type != OP_TRANS
&& (ps[(1) - (1)].val.opval)->op_type != OP_TRANSR
@@ -1695,186 +1313,150 @@ case 2:
}
break;
- case 208:
-#line 1385 "perly.y"
- { (yyval.opval) = pmruntime((ps[(1) - (5)].val.opval), (ps[(4) - (5)].val.opval), 1, (ps[(2) - (5)].val.ival));
- TOKEN_GETMAD((ps[(3) - (5)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(5) - (5)].val.i_tkval),(yyval.opval),')');
- }
+ case 207:
+#line 979 "perly.y"
+ { (yyval.opval) = pmruntime((ps[(1) - (5)].val.opval), (ps[(4) - (5)].val.opval), 1, (ps[(2) - (5)].val.ival)); }
break;
- case 211:
-#line 1392 "perly.y"
+ case 210:
+#line 983 "perly.y"
{
(yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
- TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'X');
}
break;
+ case 212:
+#line 992 "perly.y"
+ { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval)); }
+ break;
+
case 213:
-#line 1402 "perly.y"
- { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
- DO_MAD(
- token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
- append_madprops((ps[(3) - (3)].val.opval)->op_madprop, (yyval.opval), 'a');
- (ps[(3) - (3)].val.opval)->op_madprop = 0;
- );
- }
+#line 994 "perly.y"
+ { (yyval.opval) = localize((ps[(2) - (2)].val.opval),(ps[(1) - (2)].val.ival)); }
break;
case 214:
-#line 1410 "perly.y"
- { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
- }
+#line 999 "perly.y"
+ { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); }
break;
case 215:
-#line 1417 "perly.y"
- { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
- TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
- }
+#line 1001 "perly.y"
+ { (yyval.opval) = sawparens(newNULLLIST()); }
break;
case 216:
-#line 1422 "perly.y"
- { (yyval.opval) = sawparens(newNULLLIST());
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
- TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
- }
+#line 1004 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 217:
-#line 1427 "perly.y"
+#line 1006 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 218:
-#line 1429 "perly.y"
+#line 1008 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 219:
-#line 1431 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 1013 "perly.y"
+ { (yyval.opval) = (OP*)NULL; }
break;
case 220:
-#line 1436 "perly.y"
- { (yyval.opval) = (OP*)NULL; }
+#line 1015 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 221:
-#line 1438 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 1019 "perly.y"
+ { (yyval.opval) = (OP*)NULL; }
break;
case 222:
-#line 1442 "perly.y"
- { (yyval.opval) = (OP*)NULL; }
+#line 1021 "perly.y"
+ { (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
case 223:
-#line 1444 "perly.y"
- { (yyval.opval) = (ps[(1) - (1)].val.opval); }
+#line 1027 "perly.y"
+ { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
break;
case 224:
-#line 1450 "perly.y"
- { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); }
+#line 1031 "perly.y"
+ { (yyval.opval) = newCVREF((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval)); }
break;
case 225:
-#line 1454 "perly.y"
- { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
- }
+#line 1035 "perly.y"
+ { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval)); }
break;
case 226:
-#line 1460 "perly.y"
- { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
+#line 1039 "perly.y"
+ { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
+ if ((yyval.opval)) (yyval.opval)->op_private |= (ps[(1) - (2)].val.ival);
}
break;
case 227:
-#line 1466 "perly.y"
- { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
- if ((yyval.opval)) (yyval.opval)->op_private |= IVAL((ps[(1) - (2)].val.i_tkval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
+#line 1045 "perly.y"
+ { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
+ if ((yyval.opval)) (yyval.opval)->op_private |= (ps[(1) - (2)].val.ival);
}
break;
case 228:
-#line 1473 "perly.y"
- { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
- if ((yyval.opval)) (yyval.opval)->op_private |= IVAL((ps[(1) - (2)].val.i_tkval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
- }
+#line 1051 "perly.y"
+ { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); }
break;
case 229:
-#line 1480 "perly.y"
- { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
- }
+#line 1053 "perly.y"
+ { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval)); }
break;
case 230:
-#line 1484 "perly.y"
- { (yyval.opval) = newAVREF((ps[(1) - (4)].val.opval));
- TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),'l');
- }
+#line 1057 "perly.y"
+ { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval)); }
break;
- case 231:
-#line 1490 "perly.y"
- { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
- TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
- }
+ case 232:
+#line 1062 "perly.y"
+ { (yyval.opval) = newAVREF((ps[(1) - (3)].val.opval)); }
break;
- case 233:
-#line 1497 "perly.y"
- { (yyval.opval) = newAVREF((ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),'@');
- }
+ case 234:
+#line 1067 "perly.y"
+ { (yyval.opval) = newHVREF((ps[(1) - (3)].val.opval)); }
break;
- case 235:
-#line 1504 "perly.y"
- { (yyval.opval) = newHVREF((ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),'@');
- }
+ case 236:
+#line 1072 "perly.y"
+ { (yyval.opval) = newGVREF(0,(ps[(1) - (3)].val.opval)); }
break;
case 237:
-#line 1511 "perly.y"
- { (yyval.opval) = newGVREF(0,(ps[(1) - (3)].val.opval));
- TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),'*');
- }
+#line 1077 "perly.y"
+ { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
break;
case 238:
-#line 1518 "perly.y"
+#line 1079 "perly.y"
{ (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
break;
case 239:
-#line 1520 "perly.y"
- { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); }
- break;
-
- case 240:
-#line 1522 "perly.y"
+#line 1081 "perly.y"
{ (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); }
break;
- case 241:
-#line 1525 "perly.y"
+ case 240:
+#line 1084 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); }
break;
@@ -1882,6 +1464,6 @@ case 2:
/* Generated from:
- * bb8245a1a537b2afb2445b3973f63b210f9ec346a1955071aef7d05ba97196ae perly.y
- * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
+ * 7e6c275bbd1dbc800c205a8a8b0cd785e4859f94976ee7372149598471f16f81 perly.y
+ * d1d4df7b8e30ac9dede664af9179e6e5e7ddc7f2ad9c4eff9e2e5b32c9e16a6e regen_perly.pl
* ex: set ro: */
diff --git a/perly.c b/perly.c
index 46d25a5531..eb258939e7 100644
--- a/perly.c
+++ b/perly.c
@@ -19,10 +19,6 @@
* restriction. This special exception was added by the Free
* Software Foundation in version 1.24 of Bison.
*
- * Note that this file is also #included in madly.c, to allow compilation
- * of a second parser, Perl_madparse, that is identical to Perl_yyparse,
- * but which includes extra code for dumping the parse tree.
- * This is controlled by the PERL_IN_MADLY_C define.
*/
#include "EXTERN.h"
@@ -144,9 +140,6 @@ yy_stack_print (pTHX_ const yy_parser *parser)
: "(Nullop)"
);
break;
-#ifndef PERL_IN_MADLY_C
- case toketype_i_tkval:
-#endif
case toketype_ival:
PerlIO_printf(Perl_debug_log, " %8"IVdf, (IV)ps->val.ival);
break;
@@ -241,11 +234,7 @@ S_clear_yystack(pTHX_ const yy_parser *parser)
`----------*/
int
-#ifdef PERL_IN_MADLY_C
-Perl_madparse (pTHX_ int gramtype)
-#else
Perl_yyparse (pTHX_ int gramtype)
-#endif
{
dVAR;
int yystate;
@@ -265,13 +254,6 @@ Perl_yyparse (pTHX_ int gramtype)
action routines: ie $$. */
YYSTYPE yyval;
-#ifndef PERL_IN_MADLY_C
-# ifdef PERL_MAD
- if (PL_madskills)
- return madparse(gramtype);
-# endif
-#endif
-
YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
parser = PL_parser;
@@ -338,11 +320,7 @@ Perl_yyparse (pTHX_ int gramtype)
/* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
if (parser->yychar == YYEMPTY) {
YYDPRINTF ((Perl_debug_log, "Reading a token: "));
-#ifdef PERL_IN_MADLY_C
- parser->yychar = PL_madskills ? madlex() : yylex();
-#else
parser->yychar = yylex();
-#endif
/* perly.tab is shipped based on an ASCII system; if it were to be regenerated
* on a platform that doesn't use ASCII, this translation back would need to be
@@ -435,26 +413,6 @@ Perl_yyparse (pTHX_ int gramtype)
switch (yyn) {
-#ifdef PERL_IN_MADLY_C
-# define IVAL(i) (i)->tk_lval.ival
-# define PVAL(p) (p)->tk_lval.pval
-# define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c))
-# define TOKEN_FREE(a) token_free(a)
-# define OP_GETMAD(a,b,c) op_getmad((a),(b),(c))
-# define IF_MAD(a,b) (a)
-# define DO_MAD(a) a
-# define MAD
-#else
-# define IVAL(i) (i)
-# define PVAL(p) (p)
-# define TOKEN_GETMAD(a,b,c)
-# define TOKEN_FREE(a)
-# define OP_GETMAD(a,b,c)
-# define IF_MAD(a,b) (b)
-# define DO_MAD(a)
-# undef MAD
-#endif
-
/* contains all the rule actions; auto-generated from perly.y */
#include "perly.act"
diff --git a/perly.h b/perly.h
index e6426df92a..cd92798734 100644
--- a/perly.h
+++ b/perly.h
@@ -5,11 +5,11 @@
*/
#ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 2.5. */
+/* A Bison parser, made by GNU Bison 2.7.12-4996. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -37,6 +37,13 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
/* Tokens. */
#ifndef YYTOKENTYPE
@@ -123,8 +130,7 @@
POSTINC = 334,
PREDEC = 335,
PREINC = 336,
- ARROW = 337,
- PEG = 338
+ ARROW = 337
};
#endif
@@ -209,8 +215,6 @@
#define PREDEC 335
#define PREINC 336
#define ARROW 337
-#define PEG 338
-
#ifdef PERL_IN_TOKE_C
@@ -239,28 +243,16 @@ S_is_opval_token(int type) {
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
-
-/* Line 2068 of yacc.c */
+/* Line 2053 of yacc.c */
I32 ival; /* __DEFAULT__ (marker for regen_perly.pl;
must always be 1st union member) */
char *pval;
OP *opval;
GV *gvval;
-#ifdef PERL_IN_MADLY_C
- TOKEN* p_tkval;
- TOKEN* i_tkval;
-#else
- char *p_tkval;
- I32 i_tkval;
-#endif
-#ifdef PERL_MAD
- TOKEN* tkval;
-#endif
-
-/* Line 2068 of yacc.c */
+/* Line 2053 of yacc.c */
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -268,10 +260,22 @@ typedef union YYSTYPE
#endif
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
/* Generated from:
- * bb8245a1a537b2afb2445b3973f63b210f9ec346a1955071aef7d05ba97196ae perly.y
- * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
+ * 7e6c275bbd1dbc800c205a8a8b0cd785e4859f94976ee7372149598471f16f81 perly.y
+ * d1d4df7b8e30ac9dede664af9179e6e5e7ddc7f2ad9c4eff9e2e5b32c9e16a6e regen_perly.pl
* ex: set ro: */
diff --git a/perly.tab b/perly.tab
index 4f5a86a772..bd3a25c75b 100644
--- a/perly.tab
+++ b/perly.tab
@@ -6,20 +6,20 @@
#define YYFINAL 14
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2731
+#define YYLAST 2763
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 105
+#define YYNTOKENS 104
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 72
/* YYNRULES -- Number of rules. */
-#define YYNRULES 241
+#define YYNRULES 240
/* YYNRULES -- Number of states. */
-#define YYNSTATES 475
+#define YYNSTATES 474
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 338
+#define YYMAXUTOK 337
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -60,7 +60,7 @@ static const yytype_uint8 yytranslate[] =
59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 81, 84, 85, 86, 87, 88, 89, 90, 93,
- 94, 95, 96, 97, 98, 99, 100, 101, 104
+ 94, 95, 96, 97, 98, 99, 100, 101
};
#if YYDEBUG
@@ -70,151 +70,151 @@ static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 4, 9, 10, 14, 15, 19, 20,
24, 25, 29, 30, 34, 39, 47, 48, 53, 54,
- 55, 58, 59, 62, 64, 66, 69, 72, 74, 76,
- 81, 82, 90, 95, 96, 104, 112, 120, 127, 134,
- 137, 146, 155, 167, 177, 186, 194, 197, 198, 207,
- 210, 212, 215, 216, 220, 222, 224, 228, 232, 236,
- 240, 244, 248, 249, 252, 259, 260, 263, 264, 265,
- 267, 268, 270, 272, 274, 276, 278, 280, 281, 282,
- 283, 284, 286, 288, 289, 291, 292, 295, 297, 300,
- 302, 303, 304, 308, 314, 316, 318, 322, 326, 330,
- 332, 335, 339, 341, 345, 351, 358, 362, 366, 372,
- 375, 380, 381, 387, 389, 391, 397, 402, 408, 413,
- 419, 426, 432, 437, 443, 448, 452, 459, 464, 470,
- 474, 478, 482, 486, 490, 494, 498, 502, 506, 510,
- 514, 518, 522, 526, 529, 532, 535, 538, 541, 544,
- 547, 550, 553, 557, 560, 565, 569, 575, 578, 581,
- 583, 585, 587, 589, 595, 598, 600, 603, 607, 609,
- 612, 614, 616, 618, 620, 622, 624, 629, 634, 640,
- 646, 648, 650, 654, 659, 663, 668, 673, 678, 683,
- 688, 690, 693, 696, 698, 701, 704, 706, 709, 711,
- 714, 716, 720, 722, 726, 728, 732, 737, 738, 744,
- 746, 748, 750, 752, 756, 759, 763, 766, 768, 770,
- 772, 773, 775, 776, 778, 780, 783, 786, 789, 792,
- 795, 800, 803, 805, 809, 811, 815, 817, 821, 823,
- 825, 827
+ 55, 58, 59, 62, 64, 66, 69, 72, 74, 79,
+ 80, 88, 93, 94, 102, 110, 118, 125, 132, 135,
+ 144, 153, 165, 175, 184, 192, 195, 196, 205, 208,
+ 210, 213, 214, 218, 220, 222, 226, 230, 234, 238,
+ 242, 246, 247, 250, 257, 258, 261, 262, 263, 265,
+ 266, 268, 270, 272, 274, 276, 278, 279, 280, 281,
+ 282, 284, 286, 287, 289, 290, 293, 295, 298, 300,
+ 301, 302, 306, 312, 314, 316, 320, 324, 328, 330,
+ 333, 337, 339, 343, 349, 356, 360, 364, 370, 373,
+ 378, 379, 385, 387, 389, 395, 400, 406, 411, 417,
+ 424, 430, 435, 441, 446, 450, 457, 462, 468, 472,
+ 476, 480, 484, 488, 492, 496, 500, 504, 508, 512,
+ 516, 520, 524, 527, 530, 533, 536, 539, 542, 545,
+ 548, 551, 555, 558, 563, 567, 573, 576, 579, 581,
+ 583, 585, 587, 593, 596, 598, 601, 605, 607, 610,
+ 612, 614, 616, 618, 620, 622, 627, 632, 638, 644,
+ 646, 648, 652, 657, 661, 666, 671, 676, 681, 686,
+ 688, 691, 694, 696, 699, 702, 704, 707, 709, 712,
+ 714, 718, 720, 724, 726, 730, 735, 736, 742, 744,
+ 746, 748, 750, 754, 757, 761, 764, 766, 768, 770,
+ 771, 773, 774, 776, 778, 781, 784, 787, 790, 793,
+ 798, 801, 803, 807, 809, 813, 815, 819, 821, 823,
+ 825
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int16 yyrhs[] =
{
- 106, 0, -1, -1, 3, 107, 115, 118, -1, -1,
- 4, 108, 165, -1, -1, 5, 109, 113, -1, -1,
- 6, 110, 122, -1, -1, 7, 111, 120, -1, -1,
- 8, 112, 118, -1, 9, 115, 118, 10, -1, 21,
- 115, 20, 74, 119, 20, 22, -1, -1, 9, 117,
- 118, 10, -1, -1, -1, 118, 120, -1, -1, 119,
- 126, -1, 122, -1, 121, -1, 36, 122, -1, 36,
- 121, -1, 35, -1, 104, -1, 37, 141, 138, 114,
- -1, -1, 38, 142, 139, 123, 143, 144, 149, -1,
- 40, 23, 23, 20, -1, -1, 41, 139, 124, 23,
- 23, 164, 20, -1, 44, 103, 115, 135, 102, 116,
- 129, -1, 45, 103, 115, 137, 102, 116, 129, -1,
- 50, 103, 115, 135, 102, 116, -1, 51, 103, 115,
- 135, 102, 116, -1, 52, 113, -1, 42, 103, 115,
- 133, 102, 131, 116, 130, -1, 43, 103, 115, 134,
- 102, 131, 116, 130, -1, 49, 103, 115, 136, 20,
- 133, 20, 131, 136, 102, 116, -1, 49, 70, 115,
- 166, 103, 135, 102, 116, 130, -1, 49, 168, 103,
- 115, 135, 102, 116, 130, -1, 49, 103, 115, 135,
- 102, 116, 130, -1, 113, 130, -1, -1, 40, 23,
- 23, 9, 115, 125, 118, 10, -1, 128, 20, -1,
- 20, -1, 26, 127, -1, -1, 73, 118, 74, -1,
- 1, -1, 150, -1, 150, 44, 150, -1, 150, 45,
- 150, -1, 150, 42, 150, -1, 150, 43, 134, -1,
- 150, 49, 150, -1, 150, 51, 150, -1, -1, 46,
- 116, -1, 47, 103, 135, 102, 116, 129, -1, -1,
- 48, 113, -1, -1, -1, 128, -1, -1, 150, -1,
- 150, -1, 150, -1, 132, -1, 134, -1, 23, -1,
- -1, -1, -1, -1, 23, -1, 28, -1, -1, 26,
- -1, -1, 72, 26, -1, 72, -1, 72, 26, -1,
- 72, -1, -1, -1, 103, 147, 102, -1, 115, 146,
- 9, 118, 10, -1, 148, -1, 20, -1, 150, 78,
- 150, -1, 150, 77, 150, -1, 150, 76, 150, -1,
- 151, -1, 151, 80, -1, 151, 80, 160, -1, 160,
- -1, 60, 176, 151, -1, 58, 103, 176, 150, 102,
- -1, 160, 101, 154, 103, 165, 102, -1, 160, 101,
- 154, -1, 24, 176, 164, -1, 25, 176, 103, 165,
- 102, -1, 60, 164, -1, 58, 103, 165, 102, -1,
- -1, 33, 140, 113, 153, 164, -1, 24, -1, 168,
- -1, 175, 9, 150, 20, 10, -1, 168, 11, 150,
- 12, -1, 160, 101, 11, 150, 12, -1, 155, 11,
- 150, 12, -1, 168, 9, 150, 20, 10, -1, 160,
- 101, 9, 150, 20, 10, -1, 155, 9, 150, 20,
- 10, -1, 160, 101, 103, 102, -1, 160, 101, 103,
- 150, 102, -1, 155, 103, 150, 102, -1, 155, 103,
- 102, -1, 103, 150, 102, 11, 150, 12, -1, 29,
- 11, 150, 12, -1, 103, 102, 11, 150, 12, -1,
- 160, 81, 160, -1, 160, 95, 160, -1, 160, 63,
- 160, -1, 160, 64, 160, -1, 160, 89, 160, -1,
- 160, 61, 160, -1, 160, 62, 160, -1, 160, 88,
- 160, -1, 160, 87, 160, -1, 160, 54, 160, -1,
- 160, 86, 160, -1, 160, 85, 160, -1, 160, 84,
- 160, -1, 160, 90, 160, -1, 13, 160, -1, 14,
- 160, -1, 91, 160, -1, 92, 160, -1, 160, 98,
- -1, 160, 97, -1, 160, 96, -1, 100, 160, -1,
- 99, 160, -1, 11, 150, 12, -1, 11, 12, -1,
- 67, 150, 20, 10, -1, 67, 20, 10, -1, 39,
- 140, 143, 144, 148, -1, 66, 160, -1, 66, 113,
- -1, 156, -1, 157, -1, 158, -1, 159, -1, 160,
- 82, 160, 83, 160, -1, 93, 160, -1, 162, -1,
- 69, 160, -1, 103, 150, 102, -1, 29, -1, 103,
- 102, -1, 168, -1, 172, -1, 170, -1, 169, -1,
- 171, -1, 155, -1, 173, 11, 150, 12, -1, 174,
- 11, 150, 12, -1, 173, 9, 150, 20, 10, -1,
- 174, 9, 150, 20, 10, -1, 26, -1, 167, -1,
- 167, 103, 102, -1, 167, 103, 150, 102, -1, 68,
- 142, 164, -1, 160, 101, 15, 18, -1, 160, 101,
- 16, 18, -1, 160, 101, 17, 18, -1, 160, 101,
- 19, 18, -1, 160, 101, 18, 18, -1, 53, -1,
- 53, 160, -1, 79, 151, -1, 59, -1, 59, 113,
- -1, 59, 160, -1, 71, -1, 71, 160, -1, 32,
- -1, 32, 160, -1, 56, -1, 56, 103, 102, -1,
- 30, -1, 30, 103, 102, -1, 31, -1, 57, 103,
- 102, -1, 57, 103, 150, 102, -1, -1, 27, 161,
- 103, 151, 102, -1, 23, -1, 152, -1, 55, -1,
- 34, -1, 70, 163, 145, -1, 70, 163, -1, 103,
- 150, 102, -1, 103, 102, -1, 168, -1, 170, -1,
- 169, -1, -1, 151, -1, -1, 150, -1, 168, -1,
- 19, 176, -1, 15, 176, -1, 16, 176, -1, 17,
- 176, -1, 65, 176, -1, 160, 101, 65, 18, -1,
- 18, 176, -1, 169, -1, 160, 101, 16, -1, 170,
- -1, 160, 101, 17, -1, 172, -1, 160, 101, 18,
- -1, 23, -1, 168, -1, 113, -1, 28, -1
+ 105, 0, -1, -1, 3, 106, 114, 117, -1, -1,
+ 4, 107, 164, -1, -1, 5, 108, 112, -1, -1,
+ 6, 109, 121, -1, -1, 7, 110, 119, -1, -1,
+ 8, 111, 117, -1, 9, 114, 117, 10, -1, 21,
+ 114, 20, 74, 118, 20, 22, -1, -1, 9, 116,
+ 117, 10, -1, -1, -1, 117, 119, -1, -1, 118,
+ 125, -1, 121, -1, 120, -1, 36, 121, -1, 36,
+ 120, -1, 35, -1, 37, 140, 137, 113, -1, -1,
+ 38, 141, 138, 122, 142, 143, 148, -1, 40, 23,
+ 23, 20, -1, -1, 41, 138, 123, 23, 23, 163,
+ 20, -1, 44, 103, 114, 134, 102, 115, 128, -1,
+ 45, 103, 114, 136, 102, 115, 128, -1, 50, 103,
+ 114, 134, 102, 115, -1, 51, 103, 114, 134, 102,
+ 115, -1, 52, 112, -1, 42, 103, 114, 132, 102,
+ 130, 115, 129, -1, 43, 103, 114, 133, 102, 130,
+ 115, 129, -1, 49, 103, 114, 135, 20, 132, 20,
+ 130, 135, 102, 115, -1, 49, 70, 114, 165, 103,
+ 134, 102, 115, 129, -1, 49, 167, 103, 114, 134,
+ 102, 115, 129, -1, 49, 103, 114, 134, 102, 115,
+ 129, -1, 112, 129, -1, -1, 40, 23, 23, 9,
+ 114, 124, 117, 10, -1, 127, 20, -1, 20, -1,
+ 26, 126, -1, -1, 73, 117, 74, -1, 1, -1,
+ 149, -1, 149, 44, 149, -1, 149, 45, 149, -1,
+ 149, 42, 149, -1, 149, 43, 133, -1, 149, 49,
+ 149, -1, 149, 51, 149, -1, -1, 46, 115, -1,
+ 47, 103, 134, 102, 115, 128, -1, -1, 48, 112,
+ -1, -1, -1, 127, -1, -1, 149, -1, 149, -1,
+ 149, -1, 131, -1, 133, -1, 23, -1, -1, -1,
+ -1, -1, 23, -1, 28, -1, -1, 26, -1, -1,
+ 72, 26, -1, 72, -1, 72, 26, -1, 72, -1,
+ -1, -1, 103, 146, 102, -1, 114, 145, 9, 117,
+ 10, -1, 147, -1, 20, -1, 149, 78, 149, -1,
+ 149, 77, 149, -1, 149, 76, 149, -1, 150, -1,
+ 150, 80, -1, 150, 80, 159, -1, 159, -1, 60,
+ 175, 150, -1, 58, 103, 175, 149, 102, -1, 159,
+ 101, 153, 103, 164, 102, -1, 159, 101, 153, -1,
+ 24, 175, 163, -1, 25, 175, 103, 164, 102, -1,
+ 60, 163, -1, 58, 103, 164, 102, -1, -1, 33,
+ 139, 112, 152, 163, -1, 24, -1, 167, -1, 174,
+ 9, 149, 20, 10, -1, 167, 11, 149, 12, -1,
+ 159, 101, 11, 149, 12, -1, 154, 11, 149, 12,
+ -1, 167, 9, 149, 20, 10, -1, 159, 101, 9,
+ 149, 20, 10, -1, 154, 9, 149, 20, 10, -1,
+ 159, 101, 103, 102, -1, 159, 101, 103, 149, 102,
+ -1, 154, 103, 149, 102, -1, 154, 103, 102, -1,
+ 103, 149, 102, 11, 149, 12, -1, 29, 11, 149,
+ 12, -1, 103, 102, 11, 149, 12, -1, 159, 81,
+ 159, -1, 159, 95, 159, -1, 159, 63, 159, -1,
+ 159, 64, 159, -1, 159, 89, 159, -1, 159, 61,
+ 159, -1, 159, 62, 159, -1, 159, 88, 159, -1,
+ 159, 87, 159, -1, 159, 54, 159, -1, 159, 86,
+ 159, -1, 159, 85, 159, -1, 159, 84, 159, -1,
+ 159, 90, 159, -1, 13, 159, -1, 14, 159, -1,
+ 91, 159, -1, 92, 159, -1, 159, 98, -1, 159,
+ 97, -1, 159, 96, -1, 100, 159, -1, 99, 159,
+ -1, 11, 149, 12, -1, 11, 12, -1, 67, 149,
+ 20, 10, -1, 67, 20, 10, -1, 39, 139, 142,
+ 143, 147, -1, 66, 159, -1, 66, 112, -1, 155,
+ -1, 156, -1, 157, -1, 158, -1, 159, 82, 159,
+ 83, 159, -1, 93, 159, -1, 161, -1, 69, 159,
+ -1, 103, 149, 102, -1, 29, -1, 103, 102, -1,
+ 167, -1, 171, -1, 169, -1, 168, -1, 170, -1,
+ 154, -1, 172, 11, 149, 12, -1, 173, 11, 149,
+ 12, -1, 172, 9, 149, 20, 10, -1, 173, 9,
+ 149, 20, 10, -1, 26, -1, 166, -1, 166, 103,
+ 102, -1, 166, 103, 149, 102, -1, 68, 141, 163,
+ -1, 159, 101, 15, 18, -1, 159, 101, 16, 18,
+ -1, 159, 101, 17, 18, -1, 159, 101, 19, 18,
+ -1, 159, 101, 18, 18, -1, 53, -1, 53, 159,
+ -1, 79, 150, -1, 59, -1, 59, 112, -1, 59,
+ 159, -1, 71, -1, 71, 159, -1, 32, -1, 32,
+ 159, -1, 56, -1, 56, 103, 102, -1, 30, -1,
+ 30, 103, 102, -1, 31, -1, 57, 103, 102, -1,
+ 57, 103, 149, 102, -1, -1, 27, 160, 103, 150,
+ 102, -1, 23, -1, 151, -1, 55, -1, 34, -1,
+ 70, 162, 144, -1, 70, 162, -1, 103, 149, 102,
+ -1, 103, 102, -1, 167, -1, 169, -1, 168, -1,
+ -1, 150, -1, -1, 149, -1, 167, -1, 19, 175,
+ -1, 15, 175, -1, 16, 175, -1, 17, 175, -1,
+ 65, 175, -1, 159, 101, 65, 18, -1, 18, 175,
+ -1, 168, -1, 159, 101, 16, -1, 169, -1, 159,
+ 101, 17, -1, 171, -1, 159, 101, 18, -1, 23,
+ -1, 167, -1, 112, -1, 28, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 142, 142, 141, 151, 150, 160, 159, 172, 171,
- 184, 183, 196, 195, 207, 217, 227, 230, 240, 245,
- 246, 256, 257, 266, 274, 278, 286, 296, 298, 303,
- 321, 320, 370, 386, 385, 402, 411, 420, 431, 433,
- 435, 445, 455, 476, 485, 494, 503, 510, 509, 526,
- 532, 542, 566, 567, 572, 574, 576, 580, 584, 588,
- 592, 597, 603, 604, 610, 624, 625, 634, 640, 641,
- 646, 649, 653, 658, 662, 666, 670, 671, 675, 681,
- 686, 691, 692, 697, 698, 703, 704, 708, 718, 722,
- 732, 734, 733, 752, 764, 765, 775, 779, 783, 787,
- 791, 801, 810, 814, 819, 826, 835, 841, 847, 855,
- 859, 866, 865, 876, 877, 881, 890, 895, 903, 910,
- 917, 927, 936, 943, 952, 959, 965, 972, 977, 987,
- 991, 995, 1001, 1005, 1009, 1013, 1017, 1021, 1025, 1037,
- 1041, 1045, 1049, 1059, 1063, 1070, 1074, 1078, 1083, 1088,
- 1100, 1105, 1114, 1119, 1124, 1130, 1136, 1147, 1151, 1157,
- 1158, 1159, 1160, 1161, 1166, 1170, 1172, 1176, 1181, 1183,
- 1188, 1190, 1192, 1194, 1196, 1198, 1200, 1212, 1224, 1238,
- 1252, 1254, 1256, 1261, 1274, 1279, 1283, 1287, 1291, 1296,
- 1300, 1305, 1309, 1313, 1317, 1321, 1325, 1329, 1333, 1335,
- 1338, 1342, 1348, 1350, 1355, 1358, 1367, 1374, 1373, 1389,
- 1390, 1391, 1397, 1401, 1409, 1416, 1421, 1426, 1428, 1430,
- 1435, 1437, 1442, 1443, 1449, 1453, 1459, 1465, 1472, 1479,
- 1483, 1489, 1495, 1496, 1502, 1503, 1509, 1510, 1517, 1519,
- 1521, 1524
+ 0, 114, 114, 113, 123, 122, 132, 131, 144, 143,
+ 156, 155, 168, 167, 179, 187, 195, 198, 206, 211,
+ 212, 222, 223, 232, 236, 240, 244, 251, 253, 264,
+ 263, 295, 303, 302, 310, 316, 322, 333, 335, 337,
+ 344, 351, 366, 371, 377, 383, 390, 389, 404, 409,
+ 418, 436, 437, 442, 444, 446, 448, 450, 452, 454,
+ 457, 463, 464, 469, 480, 481, 487, 493, 494, 499,
+ 502, 506, 511, 515, 519, 523, 524, 528, 534, 539,
+ 544, 545, 550, 551, 556, 557, 559, 564, 566, 571,
+ 573, 572, 591, 601, 602, 608, 610, 612, 614, 618,
+ 620, 625, 629, 633, 637, 643, 648, 654, 660, 662,
+ 665, 664, 675, 676, 680, 686, 689, 694, 699, 703,
+ 709, 715, 718, 723, 727, 730, 732, 734, 739, 741,
+ 743, 748, 750, 752, 754, 756, 758, 760, 762, 764,
+ 766, 768, 773, 775, 778, 780, 782, 785, 788, 799,
+ 802, 809, 811, 813, 815, 817, 824, 826, 830, 831,
+ 832, 833, 834, 836, 838, 840, 842, 844, 846, 848,
+ 850, 852, 854, 856, 858, 860, 870, 880, 891, 902,
+ 904, 906, 909, 914, 918, 920, 922, 924, 927, 929,
+ 932, 934, 936, 938, 940, 942, 944, 946, 948, 951,
+ 953, 955, 957, 959, 961, 965, 968, 967, 980, 981,
+ 982, 987, 991, 993, 998, 1000, 1003, 1005, 1007, 1012,
+ 1014, 1019, 1020, 1026, 1030, 1034, 1038, 1044, 1050, 1052,
+ 1056, 1060, 1061, 1065, 1066, 1070, 1071, 1076, 1078, 1080,
+ 1083
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 0
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
@@ -233,18 +233,18 @@ static const char *const yytname[] =
"ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "DORDOR", "OROR",
"ANDAND", "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'", "'~'",
"REFGEN", "UMINUS", "POWOP", "POSTJOIN", "POSTDEC", "POSTINC", "PREDEC",
- "PREINC", "ARROW", "')'", "'('", "PEG", "$accept", "grammar", "$@1",
- "$@2", "$@3", "$@4", "$@5", "$@6", "block", "formblock", "remember",
- "mblock", "mremember", "stmtseq", "formstmtseq", "fullstmt",
- "labfullstmt", "barestmt", "$@7", "$@8", "$@9", "formline", "formarg",
- "sideff", "else", "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr",
- "mnexpr", "miexpr", "formname", "startsub", "startanonsub",
- "startformsub", "subname", "proto", "subattrlist", "myattrlist",
- "subsignature", "@10", "realsubbody", "optsubbody", "expr", "listexpr",
- "listop", "@11", "method", "subscripted", "termbinop", "termunop",
- "anonymous", "termdo", "term", "@12", "myattrterm", "myterm",
- "optlistexpr", "optexpr", "my_scalar", "amper", "scalar", "ary", "hsh",
- "arylen", "star", "sliceme", "kvslice", "gelem", "indirob", 0
+ "PREINC", "ARROW", "')'", "'('", "$accept", "grammar", "$@1", "$@2",
+ "$@3", "$@4", "$@5", "$@6", "block", "formblock", "remember", "mblock",
+ "mremember", "stmtseq", "formstmtseq", "fullstmt", "labfullstmt",
+ "barestmt", "$@7", "$@8", "$@9", "formline", "formarg", "sideff", "else",
+ "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr",
+ "formname", "startsub", "startanonsub", "startformsub", "subname",
+ "proto", "subattrlist", "myattrlist", "subsignature", "@10",
+ "realsubbody", "optsubbody", "expr", "listexpr", "listop", "@11",
+ "method", "subscripted", "termbinop", "termunop", "anonymous", "termdo",
+ "term", "@12", "myattrterm", "myterm", "optlistexpr", "optexpr",
+ "my_scalar", "amper", "scalar", "ary", "hsh", "arylen", "star",
+ "sliceme", "kvslice", "gelem", "indirob", YY_NULL
};
#endif
@@ -263,38 +263,38 @@ static const yytype_uint16 yytoknum[] =
311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
44, 321, 63, 58, 322, 323, 324, 325, 326, 327,
328, 33, 126, 329, 330, 331, 332, 333, 334, 335,
- 336, 337, 41, 40, 338
+ 336, 337, 41, 40
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 105, 107, 106, 108, 106, 109, 106, 110, 106,
- 111, 106, 112, 106, 113, 114, 115, 116, 117, 118,
- 118, 119, 119, 120, 120, 121, 121, 122, 122, 122,
- 123, 122, 122, 124, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 125, 122, 122,
- 122, 126, 127, 127, 128, 128, 128, 128, 128, 128,
- 128, 128, 129, 129, 129, 130, 130, 131, 132, 132,
- 133, 133, 134, 135, 136, 137, 138, 138, 139, 140,
- 141, 142, 142, 143, 143, 144, 144, 144, 145, 145,
- 146, 147, 146, 148, 149, 149, 150, 150, 150, 150,
- 151, 151, 151, 152, 152, 152, 152, 152, 152, 152,
- 152, 153, 152, 154, 154, 155, 155, 155, 155, 155,
- 155, 155, 155, 155, 155, 155, 155, 155, 155, 156,
- 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
- 156, 156, 156, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 158, 158, 158, 158, 158, 159, 159, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 161, 160, 160,
- 160, 160, 160, 162, 162, 163, 163, 163, 163, 163,
- 164, 164, 165, 165, 166, 167, 168, 169, 170, 171,
- 171, 172, 173, 173, 174, 174, 175, 175, 176, 176,
- 176, 176
+ 0, 104, 106, 105, 107, 105, 108, 105, 109, 105,
+ 110, 105, 111, 105, 112, 113, 114, 115, 116, 117,
+ 117, 118, 118, 119, 119, 120, 120, 121, 121, 122,
+ 121, 121, 123, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 124, 121, 121, 121,
+ 125, 126, 126, 127, 127, 127, 127, 127, 127, 127,
+ 127, 128, 128, 128, 129, 129, 130, 131, 131, 132,
+ 132, 133, 134, 135, 136, 137, 137, 138, 139, 140,
+ 141, 141, 142, 142, 143, 143, 143, 144, 144, 145,
+ 146, 145, 147, 148, 148, 149, 149, 149, 149, 150,
+ 150, 150, 151, 151, 151, 151, 151, 151, 151, 151,
+ 152, 151, 153, 153, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 156, 156, 156, 156, 156, 156, 156, 156,
+ 156, 157, 157, 157, 157, 157, 158, 158, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 160, 159, 159, 159,
+ 159, 159, 161, 161, 162, 162, 162, 162, 162, 163,
+ 163, 164, 164, 165, 166, 167, 168, 169, 170, 170,
+ 171, 172, 172, 173, 173, 174, 174, 175, 175, 175,
+ 175
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -302,29 +302,29 @@ static const yytype_uint8 yyr2[] =
{
0, 2, 0, 4, 0, 3, 0, 3, 0, 3,
0, 3, 0, 3, 4, 7, 0, 4, 0, 0,
- 2, 0, 2, 1, 1, 2, 2, 1, 1, 4,
- 0, 7, 4, 0, 7, 7, 7, 6, 6, 2,
- 8, 8, 11, 9, 8, 7, 2, 0, 8, 2,
- 1, 2, 0, 3, 1, 1, 3, 3, 3, 3,
- 3, 3, 0, 2, 6, 0, 2, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 0, 2, 1, 2, 1,
- 0, 0, 3, 5, 1, 1, 3, 3, 3, 1,
- 2, 3, 1, 3, 5, 6, 3, 3, 5, 2,
- 4, 0, 5, 1, 1, 5, 4, 5, 4, 5,
- 6, 5, 4, 5, 4, 3, 6, 4, 5, 3,
+ 2, 0, 2, 1, 1, 2, 2, 1, 4, 0,
+ 7, 4, 0, 7, 7, 7, 6, 6, 2, 8,
+ 8, 11, 9, 8, 7, 2, 0, 8, 2, 1,
+ 2, 0, 3, 1, 1, 3, 3, 3, 3, 3,
+ 3, 0, 2, 6, 0, 2, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 1, 1, 0, 1, 0, 2, 1, 2, 1, 0,
+ 0, 3, 5, 1, 1, 3, 3, 3, 1, 2,
+ 3, 1, 3, 5, 6, 3, 3, 5, 2, 4,
+ 0, 5, 1, 1, 5, 4, 5, 4, 5, 6,
+ 5, 4, 5, 4, 3, 6, 4, 5, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 4, 3, 5, 2, 2, 1,
- 1, 1, 1, 5, 2, 1, 2, 3, 1, 2,
- 1, 1, 1, 1, 1, 1, 4, 4, 5, 5,
- 1, 1, 3, 4, 3, 4, 4, 4, 4, 4,
- 1, 2, 2, 1, 2, 2, 1, 2, 1, 2,
- 1, 3, 1, 3, 1, 3, 4, 0, 5, 1,
- 1, 1, 1, 3, 2, 3, 2, 1, 1, 1,
- 0, 1, 0, 1, 1, 2, 2, 2, 2, 2,
- 4, 2, 1, 3, 1, 3, 1, 3, 1, 1,
- 1, 1
+ 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 2, 4, 3, 5, 2, 2, 1, 1,
+ 1, 1, 5, 2, 1, 2, 3, 1, 2, 1,
+ 1, 1, 1, 1, 1, 4, 4, 5, 5, 1,
+ 1, 3, 4, 3, 4, 4, 4, 4, 4, 1,
+ 2, 2, 1, 2, 2, 1, 2, 1, 2, 1,
+ 3, 1, 3, 1, 3, 4, 0, 5, 1, 1,
+ 1, 1, 3, 2, 3, 2, 1, 1, 1, 0,
+ 1, 0, 1, 1, 2, 2, 2, 2, 2, 4,
+ 2, 1, 3, 1, 3, 1, 3, 1, 1, 1,
+ 1
};
/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -332,345 +332,362 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 2, 4, 6, 8, 10, 12, 0, 16, 222,
+ 0, 2, 4, 6, 8, 10, 12, 0, 16, 221,
0, 0, 0, 19, 1, 19, 0, 0, 0, 0,
- 0, 0, 0, 0, 209, 0, 0, 180, 207, 168,
- 202, 204, 198, 79, 212, 79, 190, 211, 200, 0,
- 0, 193, 220, 0, 0, 0, 0, 0, 0, 196,
- 0, 0, 0, 0, 0, 0, 0, 223, 99, 210,
- 175, 159, 160, 161, 162, 102, 165, 5, 181, 170,
- 173, 172, 174, 171, 0, 0, 0, 16, 7, 54,
- 50, 27, 80, 0, 0, 78, 0, 0, 0, 0,
- 0, 0, 0, 0, 28, 65, 9, 0, 55, 0,
- 11, 24, 23, 0, 0, 153, 0, 143, 144, 238,
- 241, 240, 239, 226, 227, 228, 231, 225, 220, 0,
- 0, 0, 0, 199, 0, 83, 191, 0, 0, 222,
- 194, 195, 238, 221, 109, 239, 0, 229, 158, 157,
- 0, 0, 81, 82, 220, 166, 0, 214, 217, 219,
- 218, 197, 192, 145, 146, 164, 151, 150, 169, 0,
- 0, 0, 0, 100, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 208, 0, 0, 179, 206, 167,
+ 201, 203, 197, 78, 211, 78, 189, 210, 199, 0,
+ 0, 192, 219, 0, 0, 0, 0, 0, 0, 195,
+ 0, 0, 0, 0, 0, 0, 0, 222, 98, 209,
+ 174, 158, 159, 160, 161, 101, 164, 5, 180, 169,
+ 172, 171, 173, 170, 0, 0, 0, 16, 7, 53,
+ 49, 27, 79, 0, 0, 77, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 9, 0, 54, 0, 11,
+ 24, 23, 0, 0, 152, 0, 142, 143, 237, 240,
+ 239, 238, 225, 226, 227, 230, 224, 219, 0, 0,
+ 0, 0, 198, 0, 82, 190, 0, 0, 221, 193,
+ 194, 237, 220, 108, 238, 0, 228, 157, 156, 0,
+ 0, 80, 81, 219, 165, 0, 213, 216, 218, 217,
+ 196, 191, 144, 145, 163, 150, 149, 168, 0, 0,
+ 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 149, 148, 147, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 19, 77, 78, 0, 33, 16,
- 16, 16, 16, 16, 16, 0, 16, 16, 39, 0,
- 46, 49, 0, 0, 0, 0, 0, 0, 26, 25,
- 20, 152, 107, 222, 0, 0, 203, 111, 84, 85,
- 201, 205, 0, 0, 0, 103, 155, 0, 184, 216,
- 0, 89, 213, 0, 167, 98, 97, 96, 101, 0,
- 0, 125, 0, 138, 134, 135, 131, 132, 129, 0,
- 141, 140, 139, 137, 136, 133, 142, 130, 0, 0,
- 0, 233, 235, 237, 0, 113, 0, 0, 106, 114,
- 182, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 76, 0, 30, 0, 0, 70, 0, 0, 0, 0,
- 0, 16, 0, 0, 66, 58, 59, 72, 56, 57,
- 60, 61, 0, 0, 127, 220, 87, 16, 206, 110,
- 0, 154, 215, 88, 0, 0, 0, 118, 124, 0,
- 0, 0, 185, 186, 187, 189, 188, 230, 122, 0,
- 222, 183, 0, 116, 0, 176, 0, 177, 0, 14,
- 16, 29, 83, 16, 32, 0, 0, 71, 0, 0,
- 73, 75, 0, 0, 224, 69, 74, 0, 0, 55,
- 0, 0, 0, 108, 208, 112, 86, 90, 156, 104,
- 128, 0, 121, 163, 0, 117, 123, 0, 119, 178,
- 179, 115, 0, 85, 47, 220, 67, 67, 0, 0,
- 0, 0, 70, 0, 0, 0, 91, 0, 126, 120,
- 105, 0, 16, 19, 0, 0, 0, 18, 62, 62,
- 0, 65, 0, 0, 37, 38, 0, 19, 21, 95,
- 94, 31, 0, 34, 65, 65, 19, 0, 0, 35,
- 36, 0, 45, 67, 65, 92, 0, 0, 48, 40,
- 41, 0, 63, 0, 65, 0, 44, 93, 0, 52,
- 22, 17, 0, 43, 0, 15, 19, 51, 0, 0,
- 0, 62, 42, 53, 64
+ 0, 148, 147, 146, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 19, 76, 77, 0, 32, 16, 16,
+ 16, 16, 16, 16, 0, 16, 16, 38, 0, 45,
+ 48, 0, 0, 0, 0, 0, 0, 26, 25, 20,
+ 151, 106, 221, 0, 0, 202, 110, 83, 84, 200,
+ 204, 0, 0, 0, 102, 154, 0, 183, 215, 0,
+ 88, 212, 0, 166, 97, 96, 95, 100, 0, 0,
+ 124, 0, 137, 133, 134, 130, 131, 128, 0, 140,
+ 139, 138, 136, 135, 132, 141, 129, 0, 0, 0,
+ 232, 234, 236, 0, 112, 0, 0, 105, 113, 181,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,
+ 0, 29, 0, 0, 69, 0, 0, 0, 0, 0,
+ 16, 0, 0, 65, 57, 58, 71, 55, 56, 59,
+ 60, 0, 0, 126, 219, 86, 16, 205, 109, 0,
+ 153, 214, 87, 0, 0, 0, 117, 123, 0, 0,
+ 0, 184, 185, 186, 188, 187, 229, 121, 0, 221,
+ 182, 0, 115, 0, 175, 0, 176, 0, 14, 16,
+ 28, 82, 16, 31, 0, 0, 70, 0, 0, 72,
+ 74, 0, 0, 223, 68, 73, 0, 0, 54, 0,
+ 0, 0, 107, 207, 111, 85, 89, 155, 103, 127,
+ 0, 120, 162, 0, 116, 122, 0, 118, 177, 178,
+ 114, 0, 84, 46, 219, 66, 66, 0, 0, 0,
+ 0, 69, 0, 0, 0, 90, 0, 125, 119, 104,
+ 0, 16, 19, 0, 0, 0, 18, 61, 61, 0,
+ 64, 0, 0, 36, 37, 0, 19, 21, 94, 93,
+ 30, 0, 33, 64, 64, 19, 0, 0, 34, 35,
+ 0, 44, 66, 64, 91, 0, 0, 47, 39, 40,
+ 0, 62, 0, 64, 0, 43, 92, 0, 51, 22,
+ 17, 0, 42, 0, 15, 19, 50, 0, 0, 0,
+ 61, 41, 52, 63
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 7, 8, 9, 10, 11, 12, 13, 111, 351,
- 377, 418, 436, 103, 447, 220, 101, 102, 352, 294,
- 413, 460, 467, 97, 439, 210, 415, 366, 356, 306,
- 359, 368, 362, 291, 198, 124, 195, 144, 229, 317,
- 242, 407, 426, 378, 431, 98, 58, 59, 315, 278,
- 60, 61, 62, 63, 64, 65, 120, 66, 147, 134,
- 67, 363, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 113
+ -1, 7, 8, 9, 10, 11, 12, 13, 110, 350,
+ 376, 417, 435, 102, 446, 219, 100, 101, 351, 293,
+ 412, 459, 466, 96, 438, 209, 414, 365, 355, 305,
+ 358, 367, 361, 290, 197, 123, 194, 143, 228, 316,
+ 241, 406, 425, 377, 430, 97, 58, 59, 314, 277,
+ 60, 61, 62, 63, 64, 65, 119, 66, 146, 133,
+ 67, 362, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 112
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -401
+#define YYPACT_NINF -408
static const yytype_int16 yypact[] =
{
- 709, -401, -401, -401, -401, -401, -401, 15, -401, 2565,
- 19, 1216, 1120, -401, -401, -401, 1825, 2565, 2565, 379,
- 379, 379, 379, 379, -401, 379, 379, -401, -401, 13,
- -51, -401, 2565, -401, -401, -401, 2565, -401, -45, -39,
- -17, 1732, 1639, 379, 1732, 1916, 26, 2565, 10, 2565,
- 2565, 2565, 2565, 2565, 2565, 2565, 2007, -21, 11, -401,
- 1, -401, -401, -401, -401, 2585, -401, -401, -7, 54,
- 108, 131, -401, 91, 156, 221, 92, -401, -401, -401,
- -401, -401, -401, 26, 99, -401, 20, 52, 53, 65,
- -11, 69, 89, 19, -401, 116, -401, 158, 368, 1120,
- -401, -401, -401, 448, 544, -401, -1, 250, 250, -401,
- -401, -401, -401, -401, -401, -401, -401, -401, 2565, 90,
- 94, 2565, 96, 1901, 19, 182, 2585, 125, 2100, 1639,
- -401, 1901, 1545, 11, -401, 1466, 2565, -401, -401, 1901,
- 208, 68, -401, -401, 2565, 1901, 2193, 167, -401, -401,
- -401, 1901, 11, 250, 250, 250, 520, 520, 231, 139,
- 2565, 2565, 2565, 2565, 2565, 2565, 2286, 2565, 2565, 2565,
- 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565,
- 2565, 2565, -401, -401, -401, 63, 2379, 2565, 2565, 2565,
- 2565, 2565, 2565, 2565, -401, 222, -401, 223, -401, -401,
- -401, -401, -401, -401, -401, 141, -401, -401, -401, 19,
- -401, -401, 2565, 2565, 2565, 2565, 2565, 2565, -401, -401,
- -401, -401, -401, 2565, 2565, 61, -401, -401, -401, 191,
- -401, -401, 160, 162, 2565, 11, -401, 257, -401, -401,
- 213, 247, -401, 2565, 269, 199, 199, -401, 2585, 75,
- 72, -401, 233, 1298, 1810, 1624, 529, 273, 2585, 295,
- 342, 342, 1436, 1515, 1717, 1348, 250, 250, 2565, 2565,
- 515, 267, 288, 289, 290, -401, 296, 2472, 178, -401,
- -401, 349, 157, 93, 248, 98, 255, 103, 263, 640,
- -401, 297, -401, 12, 264, 2565, 2565, 2565, 2565, 301,
- 1310, -401, 2565, 2565, -401, -21, -401, -21, -21, -21,
- -21, -21, 217, -66, -401, 2565, 302, -401, -401, -401,
- 418, -401, -401, -401, 118, 2565, 311, -401, -401, 2565,
- 266, 124, -401, -401, -401, -401, -401, -401, -401, 434,
- 2565, -401, 317, -401, 320, -401, 340, -401, 343, -401,
- -401, -401, 182, -401, -401, 329, 252, -21, 253, 258,
- -21, -401, 259, 261, -401, -401, -401, 271, 366, 227,
- 2565, 285, 287, -401, -401, -401, -401, 292, -401, -401,
- -401, 129, -401, 2630, 388, -401, -401, 298, -401, -401,
- -401, -401, 394, 191, -401, 2565, -401, -401, 399, 399,
- 2565, 399, 2565, 314, 399, 399, -401, 409, -401, -401,
- -401, 346, 401, -401, 403, 399, 399, -401, 23, 23,
- 331, 116, 414, 399, -401, -401, 333, -401, -401, -401,
- -401, -401, 736, -401, 116, 116, -401, 399, 339, -401,
- -401, 399, -401, -401, 116, -401, 832, 9, -401, -401,
- -401, 928, -401, 2565, 116, 1403, -401, -401, 425, 380,
- -401, -401, 350, -401, 353, -401, -401, -401, 399, 399,
- 1024, 23, -401, -401, -401
+ 714, -408, -408, -408, -408, -408, -408, 5, -408, 2549,
+ 20, 1201, 1108, -408, -408, -408, 1809, 2549, 2549, 608,
+ 608, 608, 608, 608, -408, 608, 608, -408, -408, 48,
+ -67, -408, 2549, -408, -408, -408, 2549, -408, -54, -41,
+ -26, 1716, 1623, 608, 1716, 1900, 50, 2549, 40, 2549,
+ 2549, 2549, 2549, 2549, 2549, 2549, 1991, 226, 21, -408,
+ 11, -408, -408, -408, -408, 2617, -408, -408, -8, 107,
+ 136, 155, -408, 98, 220, 251, 110, -408, -408, -408,
+ -408, -408, -408, 50, 77, -408, 19, 26, 37, 41,
+ 1, 45, 51, 20, 93, -408, 135, 367, 1108, -408,
+ -408, -408, 447, 542, -408, -2, 614, 614, -408, -408,
+ -408, -408, -408, -408, -408, -408, -408, 2549, 56, 100,
+ 2549, 92, 1701, 20, 188, 2617, 124, 2084, 1623, -408,
+ 1701, 1529, 21, -408, 1450, 2549, -408, -408, 1701, 225,
+ 3, -408, -408, 2549, 1701, 2177, 168, -408, -408, -408,
+ 1701, 21, 614, 614, 614, 354, 354, 232, -50, 2549,
+ 2549, 2549, 2549, 2549, 2549, 2270, 2549, 2549, 2549, 2549,
+ 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549,
+ 2549, -408, -408, -408, 252, 2363, 2549, 2549, 2549, 2549,
+ 2549, 2549, 2549, -408, 221, -408, 259, -408, -408, -408,
+ -408, -408, -408, -408, 171, -408, -408, -408, 20, -408,
+ -408, 2549, 2549, 2549, 2549, 2549, 2549, -408, -408, -408,
+ -408, -408, 2549, 2549, 9, -408, -408, -408, 211, -408,
+ -408, 140, 184, 2549, 21, -408, 295, -408, -408, 212,
+ 284, -408, 2549, 302, 240, 240, -408, 2617, 74, 13,
+ -408, 291, 341, 1608, 245, 529, 432, 2617, 2572, 289,
+ 289, 1279, 1420, 1499, 1332, 614, 614, 2549, 2549, 257,
+ 309, 313, 321, 326, -408, 327, 2456, 217, -408, -408,
+ 304, 101, 60, 119, 91, 129, 94, 156, 637, -408,
+ 328, -408, 15, 324, 2549, 2549, 2549, 2549, 339, 1294,
+ -408, 2549, 2549, -408, 226, -408, 226, 226, 226, 226,
+ 226, 254, -48, -408, 2549, 334, -408, -408, -408, 433,
+ -408, -408, -408, 97, 2549, 352, -408, -408, 2549, 160,
+ 115, -408, -408, -408, -408, -408, -408, -408, 443, 2549,
+ -408, 353, -408, 360, -408, 362, -408, 363, -408, -408,
+ -408, 188, -408, -408, 365, 287, 226, 290, 292, 226,
+ -408, 297, 288, -408, -408, -408, 299, 377, 281, 2549,
+ 306, 311, -408, -408, -408, -408, 312, -408, -408, -408,
+ 123, -408, 2662, 407, -408, -408, 317, -408, -408, -408,
+ -408, 400, 211, -408, 2549, -408, -408, 413, 413, 2549,
+ 413, 2549, 322, 413, 413, -408, 423, -408, -408, -408,
+ 359, 414, -408, 421, 413, 413, -408, 23, 23, 344,
+ 93, 434, 413, -408, -408, 355, -408, -408, -408, -408,
+ -408, 732, -408, 93, 93, -408, 413, 366, -408, -408,
+ 413, -408, -408, 93, -408, 827, 38, -408, -408, -408,
+ 922, -408, 2549, 93, 1387, -408, -408, 446, 402, -408,
+ -408, 391, -408, 392, -408, -408, -408, 413, 413, 1015,
+ 23, -408, -408, -408
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -401, -401, -401, -401, -401, -401, -401, -401, -10, -401,
- 22, -103, -401, -12, -401, 444, 359, 7, -401, -401,
- -401, -401, -401, -295, -400, 88, -381, -401, 67, -189,
- -280, 21, -401, -401, 274, 467, -401, 438, 173, 133,
- -401, -401, -401, 117, -401, -3, -33, -401, -401, -401,
- -401, -401, -401, -401, -401, 80, -401, -401, -401, -111,
- -121, -401, -401, 18, 480, 483, -401, -401, -401, -401,
- -401, 25
+ -408, -408, -408, -408, -408, -408, -408, -408, -10, -408,
+ 22, -103, -408, -12, -408, 489, 410, 7, -408, -408,
+ -408, -408, -408, -291, -407, -105, -377, -408, 122, -18,
+ -287, 70, -408, -408, 330, 496, -408, 449, 183, 144,
+ -408, -408, -408, 126, -408, -3, -33, -408, -408, -408,
+ -408, -408, -408, -408, -408, 79, -408, -408, -408, -110,
+ -124, -408, -408, 18, 493, 500, -408, -408, -408, -408,
+ -408, 25
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -237
+#define YYTABLE_NINF -236
static const yytype_int16 yytable[] =
{
- 78, 95, 95, 104, 19, 365, 57, 222, 233, 133,
- 164, 221, 165, 106, 163, 14, 416, 152, 96, 440,
- 367, 353, 371, 372, 121, 19, 20, 21, 77, 458,
- 15, 130, 354, 238, 138, 459, 374, 112, 112, 112,
- 112, 112, 141, 112, 112, 114, 115, 116, 117, 142,
- 118, 119, 122, 159, 143, 160, 161, 162, 127, 203,
- 135, 112, 455, 187, 128, 188, 148, 136, 137, 437,
- 438, 474, 268, 314, 269, 160, 161, 162, 270, 271,
- 272, 273, 274, 208, 327, 133, 129, 275, 237, 95,
- 403, 163, 204, 95, 95, 326, 186, 107, 108, 194,
- -236, 193, 312, 235, 166, 343, 219, 358, 205, 361,
- 345, 133, 123, 146, 227, 347, 126, -232, 225, -232,
- 420, 131, 197, 199, 139, 232, 57, 145, 276, 151,
- 380, 153, 154, 155, 156, 157, 385, 160, 161, 162,
- -234, 408, -234, 240, 160, 161, 162, 135, 160, 161,
- 162, 160, 161, 162, 234, 200, 201, 245, 246, 247,
- 365, 249, 250, 252, 209, 189, 277, 190, 202, 160,
- 161, 162, 206, 462, 160, 161, 162, 342, 211, 160,
- 161, 162, 289, 281, 282, 283, 284, 285, 286, 287,
- 288, 313, 207, 223, 160, 161, 162, 224, 226, 304,
- 160, 161, 162, 279, 375, 160, 161, 162, 228, 305,
- 307, 308, 309, 310, 311, 160, 161, 162, 236, 387,
- 57, 295, 296, 297, 298, 299, 300, 230, 302, 303,
- 191, 320, 192, 160, 161, 162, 160, 161, 162, 241,
- 324, 244, 243, 248, 301, 290, 293, 253, 254, 255,
- 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 318, 316, 319, 330, 331, 321, 344, 212,
- 213, 214, 215, 323, 339, 346, 216, 162, 217, 95,
- 325, 340, 133, 348, 414, 333, 384, 355, 112, 160,
- 161, 162, 357, 307, 360, 307, 419, 369, 421, 360,
- 360, 424, 425, 160, 161, 162, 334, 335, 336, 160,
- 161, 162, 434, 435, 337, 322, 19, 364, 350, 373,
- 444, 382, 381, 370, 160, 161, 162, 388, 376, -73,
- 389, 160, 161, 162, 452, 328, 170, 57, 454, 160,
- 161, 162, 160, 161, 162, 181, 182, 183, 184, 167,
- 390, 185, 395, 391, 396, 397, 168, 169, 170, 171,
- 398, 399, 133, 180, 400, 471, 472, 360, 181, 182,
- 183, 184, 392, 401, 185, 394, 172, 173, 329, 174,
- 175, 176, 177, 178, 179, 180, 402, 404, 77, 405,
- 181, 182, 183, 184, 19, 406, 185, 360, 409, 357,
- 410, 432, 109, 168, 169, 170, 171, 110, 417, 383,
- 212, 213, 214, 215, 411, 446, 423, 216, 427, 217,
- 428, 429, 95, 433, 451, 160, 161, 162, 176, 177,
- 178, 179, 180, 441, 443, 445, 95, 181, 182, 183,
- 184, 95, 453, 185, 160, 161, 162, 465, -13, 79,
- 360, 341, 468, 466, 470, 469, 100, 77, 218, 16,
- 95, 17, 18, 19, 20, 21, 22, 23, 80, 422,
- 292, 24, 25, 26, 27, 28, 464, 29, 30, 31,
- 32, 33, 34, 81, 99, 82, 83, 35, 84, 85,
- 86, 87, 88, 89, 160, 161, 162, 90, 91, 92,
- 93, 36, 125, 37, 38, 39, 40, 41, 42, 442,
- 160, 161, 162, 43, 44, 45, 46, 47, 48, 49,
- 379, 196, 449, 450, 77, 393, 412, 50, 149, 430,
- 19, 150, 456, 332, 0, 0, 386, 0, 109, 51,
- 52, 53, 463, 110, -3, 79, 0, 54, 55, 0,
- 0, 56, 94, 77, 0, 16, 0, 17, 18, 19,
- 20, 21, 22, 23, 80, 0, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 34, 81,
- 99, 82, 83, 35, 84, 85, 86, 87, 88, 89,
- 0, 0, 0, 90, 91, 92, 93, 36, 0, 37,
- 38, 39, 40, 41, 42, 0, 0, 0, 0, 43,
- 44, 45, 46, 47, 48, 49, -237, -237, -237, 180,
- 0, 185, 0, 50, 181, 182, 183, 184, 0, 0,
- 185, 0, 0, 0, 0, 51, 52, 53, 0, 0,
- 0, 79, 0, 54, 55, 0, 0, 56, 94, 77,
- 349, 16, 0, 17, 18, 19, 20, 21, 22, 23,
- 80, 0, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 34, 81, 99, 82, 83, 35,
- 84, 85, 86, 87, 88, 89, 0, 0, 0, 90,
- 91, 92, 93, 36, 0, 37, 38, 39, 40, 41,
- 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
- 48, 49, 1, 2, 3, 4, 5, 6, 0, 50,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 51, 52, 53, 0, 0, 0, 79, 0, 54,
- 55, 0, 0, 56, 94, 77, 448, 16, 0, 17,
- 18, 19, 20, 21, 22, 23, 80, 0, 0, 24,
- 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 34, 81, 99, 82, 83, 35, 84, 85, 86, 87,
- 88, 89, 0, 0, 0, 90, 91, 92, 93, 36,
- 0, 37, 38, 39, 40, 41, 42, 0, 0, 0,
- 0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
- 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
- 0, 0, 0, 79, 0, 54, 55, 0, 0, 56,
- 94, 77, 457, 16, 0, 17, 18, 19, 20, 21,
+ 78, 94, 94, 103, 232, 14, 57, 221, 364, 132,
+ 220, 439, 366, 105, 370, 371, 19, 151, 95, 415,
+ 163, 313, 164, 236, 352, 326, 159, 160, 161, 77,
+ 15, 129, 162, 237, 137, 353, 121, 111, 111, 111,
+ 111, 111, 140, 111, 111, 113, 114, 115, 116, 126,
+ 117, 118, 243, 158, 373, 19, 20, 21, 457, 120,
+ 134, 111, 127, 473, 458, 454, 147, 135, 136, 436,
+ 437, 202, 342, 141, 159, 160, 161, 128, 142, 159,
+ 160, 161, 402, 207, 132, 159, 160, 161, 94, 159,
+ 160, 161, 94, 94, 325, 185, 106, 107, 311, 193,
+ 196, 162, 234, 344, 203, 218, 346, -235, 204, 379,
+ 132, 122, 419, 226, 165, 125, 186, 224, 187, 192,
+ 130, 341, 198, 138, 231, 57, 144, 384, 150, 199,
+ 152, 153, 154, 155, 156, 407, 159, 160, 161, 343,
+ 200, 208, 239, 145, 201, -231, 134, -231, 205, 345,
+ 159, 160, 161, 233, 206, 210, 244, 245, 246, 222,
+ 248, 249, 251, 364, -233, 461, -233, 159, 160, 161,
+ 159, 160, 161, 159, 160, 161, 347, 159, 160, 161,
+ 383, 288, 280, 281, 282, 283, 284, 285, 286, 287,
+ 312, 159, 160, 161, 225, 159, 160, 161, 303, 159,
+ 160, 161, 278, 223, 374, 159, 160, 161, 304, 306,
+ 307, 308, 309, 310, 227, 386, 159, 160, 161, 57,
+ 294, 295, 296, 297, 298, 299, 229, 301, 302, 188,
+ 319, 189, 159, 160, 161, 235, 159, 160, 161, 323,
+ 240, 247, 317, 242, 289, 252, 253, 254, 255, 256,
+ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 190, 267, 191, 268, 329, 330, 77, 269, 270, 271,
+ 272, 273, 19, 338, 300, 331, 274, 357, 94, 360,
+ 108, 132, 292, 315, 413, 109, 318, 111, 159, 160,
+ 161, 356, 306, 359, 306, 418, 368, 420, 359, 359,
+ 423, 424, 159, 160, 161, 320, 167, -236, 169, 170,
+ 322, 433, 434, 324, 321, 441, 363, 275, 161, 443,
+ 339, 380, 369, 211, 212, 213, 214, 332, 448, 449,
+ 215, 333, 216, 451, 178, 179, 57, 453, 455, 334,
+ 180, 181, 182, 183, 335, 336, 184, 354, 462, 349,
+ 167, 168, 169, 170, 19, 276, 372, 159, 160, 161,
+ 375, 132, 381, 387, 470, 471, 359, 159, 160, 161,
+ 388, 391, 389, 390, 393, 175, 176, 177, 178, 179,
+ 159, 160, 161, -72, 180, 181, 182, 183, 394, 395,
+ 184, 399, 396, 327, 397, -236, 359, 401, 356, 398,
+ 431, 400, 167, 168, 169, 170, 340, 382, 403, 211,
+ 212, 213, 214, 404, 445, 405, 215, 408, 216, 409,
+ 410, 94, 416, 450, 422, 173, 174, 175, 176, 177,
+ 178, 179, 426, 427, 428, 94, 180, 181, 182, 183,
+ 94, 432, 184, 159, 160, 161, 440, -13, 79, 359,
+ -236, -236, -236, 469, 442, 184, 77, 444, 16, 94,
+ 17, 18, 19, 20, 21, 22, 23, 80, 464, 452,
+ 24, 25, 26, 27, 28, 465, 29, 30, 31, 32,
+ 33, 34, 81, 98, 82, 83, 35, 84, 85, 86,
+ 87, 88, 89, 467, 468, 169, 90, 91, 92, 93,
+ 36, 99, 37, 38, 39, 40, 41, 42, 217, 159,
+ 160, 161, 43, 44, 45, 46, 47, 48, 49, 159,
+ 160, 161, 179, 421, 463, 291, 50, 180, 181, 182,
+ 183, 124, 195, 184, 392, 378, 411, 429, 51, 52,
+ 53, 148, -3, 79, 0, 385, 54, 55, 149, 0,
+ 56, 77, 0, 16, 0, 17, 18, 19, 20, 21,
+ 22, 23, 80, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 81, 98, 82,
+ 83, 35, 84, 85, 86, 87, 88, 89, 0, 0,
+ 0, 90, 91, 92, 93, 36, 0, 37, 38, 39,
+ 40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
+ 46, 47, 48, 49, 0, 0, 0, 77, 0, 179,
+ 0, 50, 0, 19, 180, 181, 182, 183, 0, 0,
+ 184, 108, 0, 51, 52, 53, 109, 0, 79, 0,
+ 0, 54, 55, 0, 0, 56, 77, 348, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 80, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 81, 98, 82, 83, 35, 84, 85, 86,
+ 87, 88, 89, 0, 0, 0, 90, 91, 92, 93,
+ 36, 0, 37, 38, 39, 40, 41, 42, 0, 0,
+ 0, 0, 43, 44, 45, 46, 47, 48, 49, 180,
+ 181, 182, 183, 0, 0, 184, 50, 1, 2, 3,
+ 4, 5, 6, 0, 0, 0, 0, 0, 51, 52,
+ 53, 0, 0, 79, 0, 0, 54, 55, 0, 0,
+ 56, 77, 447, 16, 0, 17, 18, 19, 20, 21,
22, 23, 80, 0, 0, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 34, 81, 99, 82,
+ 0, 29, 30, 31, 32, 33, 34, 81, 98, 82,
83, 35, 84, 85, 86, 87, 88, 89, 0, 0,
0, 90, 91, 92, 93, 36, 0, 37, 38, 39,
40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 51, 52, 53, 0, 0, 0, 79,
- 0, 54, 55, 0, 0, 56, 94, 77, 461, 16,
+ 0, 0, 0, 51, 52, 53, 0, 0, 79, 0,
+ 0, 54, 55, 0, 0, 56, 77, 456, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 80, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 81, 98, 82, 83, 35, 84, 85, 86,
+ 87, 88, 89, 0, 0, 0, 90, 91, 92, 93,
+ 36, 0, 37, 38, 39, 40, 41, 42, 0, 0,
+ 0, 0, 43, 44, 45, 46, 47, 48, 49, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 51, 52,
+ 53, 0, 0, 79, 0, 0, 54, 55, 0, 0,
+ 56, 77, 460, 16, 0, 17, 18, 19, 20, 21,
+ 22, 23, 80, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 81, 98, 82,
+ 83, 35, 84, 85, 86, 87, 88, 89, 0, 0,
+ 0, 90, 91, 92, 93, 36, 0, 37, 38, 39,
+ 40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
+ 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 52, 53, 79, 0, 0, 0,
+ 0, 54, 55, 0, 77, 56, 16, 0, 17, 18,
+ 19, 20, 21, 22, 23, 80, 0, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 81, 98, 82, 83, 35, 84, 85, 86, 87, 88,
+ 89, 0, 0, 0, 90, 91, 92, 93, 36, 0,
+ 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
+ 43, 44, 45, 46, 47, 48, 49, 0, 0, 472,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 51, 52, 53, 79,
+ 0, 0, 0, 0, 54, 55, 0, 77, 56, 16,
0, 17, 18, 19, 20, 21, 22, 23, 80, 0,
0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 32, 33, 34, 81, 99, 82, 83, 35, 84, 85,
+ 32, 33, 34, 81, 98, 82, 83, 35, 84, 85,
86, 87, 88, 89, 0, 0, 0, 90, 91, 92,
93, 36, 0, 37, 38, 39, 40, 41, 42, 0,
0, 0, 0, 43, 44, 45, 46, 47, 48, 49,
0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
- 52, 53, 0, 0, 0, 79, 0, 54, 55, 0,
- 0, 56, 94, 77, 0, 16, 0, 17, 18, 19,
- 20, 21, 22, 23, 80, 0, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 32, 33, 34, 81,
- 99, 82, 83, 35, 84, 85, 86, 87, 88, 89,
- 0, 0, 0, 90, 91, 92, 93, 36, 0, 37,
+ 52, 53, 79, 0, 0, 0, 0, 54, 55, 0,
+ 77, 56, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 80, 0, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 81, 0, 82, 83,
+ 35, 84, 85, 86, 87, 88, 89, 0, 0, 0,
+ 90, 91, 92, 93, 36, 0, 37, 38, 39, 40,
+ 41, 42, 0, 0, 0, 0, 43, 44, 45, 46,
+ 47, 48, 49, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 51, 52, 53, 79, 0, 0, 0, 0,
+ 54, 55, 0, 0, 56, 16, 0, 17, 18, 19,
+ 20, 21, 22, 23, -67, 0, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 0,
+ 0, 0, 0, 35, 0, 0, 0, 0, 0, 0,
+ 167, 168, 169, 170, 0, 0, 0, 36, 0, 37,
38, 39, 40, 41, 42, 0, 0, 0, 0, 43,
- 44, 45, 46, 47, 48, 49, 0, 0, 473, 0,
- 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 51, 52, 53, 0, 0,
- 0, 79, 0, 54, 55, 0, 0, 56, 94, 77,
- 0, 16, 0, 17, 18, 19, 20, 21, 22, 23,
- 80, 0, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 34, 81, 99, 82, 83, 35,
- 84, 85, 86, 87, 88, 89, 0, 0, 0, 90,
- 91, 92, 93, 36, 0, 37, 38, 39, 40, 41,
- 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
- 48, 49, 0, 0, 0, 0, 0, 0, 0, 50,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 51, 52, 53, 0, 0, 0, 79, 0, 54,
- 55, 0, 0, 56, 94, 77, 0, 16, 0, 17,
- 18, 19, 20, 21, 22, 23, 80, 0, 0, 24,
+ 44, 45, 46, 47, 48, 49, 176, 177, 178, 179,
+ 0, 0, 0, 50, 180, 181, 182, 183, 0, 0,
+ 184, 0, 0, 0, 0, 51, 52, 53, 79, 0,
+ 0, 0, 0, 54, 55, 169, 170, 56, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 0, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 179, 0, 0, 0, 35, 180, 181, 182,
+ 183, 0, 0, 184, 0, 0, 0, 0, 0, 0,
+ 36, 0, 37, 38, 39, 40, 41, 42, 0, 0,
+ -169, 0, 43, 44, 45, 46, 47, 48, 49, 186,
+ 0, 187, -169, 0, 0, 0, 50, 0, 0, 0,
+ -169, 0, 0, 0, 0, 0, 0, 0, 51, 52,
+ 53, 167, 168, 169, 170, 0, 54, 55, 0, -67,
+ 56, 0, -169, -169, -169, -169, 0, 0, 0, -169,
+ 0, -169, 0, 0, -169, 0, 0, 0, 177, 178,
+ 179, -169, -169, -169, -169, 180, 181, 182, 183, 0,
+ 0, 184, 0, 0, 0, 0, -169, -169, -169, -208,
+ -169, -169, -169, -169, -169, -169, -169, -169, -169, -169,
+ -169, -208, 0, 0, 0, -169, -169, -169, -169, -208,
+ 0, -169, -169, 0, 0, 0, 0, 0, 0, 0,
+ 167, 168, 169, 170, 0, 0, 0, 0, 0, 0,
+ 0, -208, -208, -208, -208, 0, 0, 0, -208, 0,
+ -208, 0, 0, -208, 0, 0, 0, 0, 178, 179,
+ -208, -208, -208, -208, 180, 181, 182, 183, 0, 0,
+ 184, 0, 0, 0, 0, -208, -208, -208, 0, -208,
+ -208, -208, -208, -208, -208, -208, -208, -208, -208, -208,
+ 0, 0, 0, 0, -208, -208, -208, -208, 0, 0,
+ -208, -208, 77, 0, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 0, 0, 0, 131, 25, 26, 27,
+ 28, 109, 29, 30, 31, 32, 33, 34, 0, 0,
+ 0, 0, 35, 0, 0, 0, 0, 0, 0, -236,
+ 0, 169, 170, 0, 0, 0, 36, 0, 37, 38,
+ 39, 40, 41, 42, 0, 0, 0, 0, 43, 44,
+ 45, 46, 47, 48, 49, 0, 0, 178, 179, 0,
+ 0, 0, 50, 180, 181, 182, 183, 0, 0, 184,
+ 0, 0, 0, 0, 51, 52, 53, 0, 0, 0,
+ 0, 0, 54, 55, 0, 77, 56, 16, 0, 17,
+ 18, 19, 20, 21, 22, 23, 0, 0, 0, 24,
25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 34, 81, 0, 82, 83, 35, 84, 85, 86, 87,
- 88, 89, 0, 0, 0, 90, 91, 92, 93, 36,
+ 34, 0, 0, 0, 0, 35, 0, 0, 0, 0,
+ 0, 0, 0, 0, 169, 170, 0, 0, 0, 36,
0, 37, 38, 39, 40, 41, 42, 0, 0, 0,
0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
- 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
- 0, 79, 0, 0, 0, 54, 55, 0, 0, 56,
- 94, 16, 0, 17, 18, 19, 20, 21, 22, 23,
- -68, 0, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 32, 33, 34, 0, 0, 0, 0, 35,
- 0, 0, -237, 0, 0, 0, 0, 0, 0, 168,
- 169, 170, 171, 36, 0, 37, 38, 39, 40, 41,
- 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
- 48, 49, 174, 175, 176, 177, 178, 179, 180, 50,
- 0, 0, 0, 181, 182, 183, 184, 0, 0, 185,
- 0, 51, 52, 53, 79, 0, 0, 0, 0, 54,
- 55, 170, 171, 56, 16, 0, 17, 18, 19, 20,
- 21, 22, 23, 0, 0, 0, 24, 25, 26, 27,
- 28, 0, 29, 30, 31, 32, 33, 34, 180, 0,
- 0, 0, 35, 181, 182, 183, 184, 0, 0, 185,
- 0, 0, 0, 0, 0, 0, 36, 0, 37, 38,
- 39, 40, 41, 42, 0, 0, -170, 0, 43, 44,
- 45, 46, 47, 48, 49, 187, 0, 188, -170, 0,
- 0, 0, 50, 0, 0, 0, -170, 0, 0, 0,
- 0, 0, 0, 0, 51, 52, 53, 168, 169, 170,
- 171, 0, 54, 55, 0, -68, 56, 0, -170, -170,
- -170, -170, 0, 0, 0, -170, 0, -170, 0, 0,
- -170, 0, 0, 177, 178, 179, 180, -170, -170, -170,
- -170, 181, 182, 183, 184, 0, 0, 185, 0, 0,
- 0, 0, -170, -170, -170, -209, -170, -170, -170, -170,
- -170, -170, -170, -170, -170, -170, -170, -209, 0, 0,
- 0, -170, -170, -170, -170, -209, 0, -170, -170, 0,
- 0, 0, 0, 0, 0, 0, 168, 169, 170, 171,
- 0, 0, 0, 0, 0, 0, 0, -209, -209, -209,
- -209, 0, 0, 0, -209, 0, -209, 0, 0, -209,
- 0, 0, 0, 178, 179, 180, -209, -209, -209, -209,
- 181, 182, 183, 184, 0, 0, 185, 0, 0, 0,
- 0, -209, -209, -209, 0, -209, -209, -209, -209, -209,
- -209, -209, -209, -209, -209, -209, 0, 0, 0, 0,
- -209, -209, -209, -209, 0, 0, -209, -209, 77, 0,
- 16, 0, 17, 18, 19, 20, 21, 22, 23, 0,
- 0, 0, 132, 25, 26, 27, 28, 110, 29, 30,
+ 178, 179, 0, 0, 0, 50, 180, 181, 182, 183,
+ 0, 0, 184, 0, 0, 0, 0, 51, 52, 53,
+ 0, 0, 0, 0, 0, 54, 55, 0, 0, 56,
+ 16, 104, 17, 18, 19, 20, 21, 22, 23, 0,
+ 0, 0, 24, 25, 26, 27, 28, 0, 29, 30,
31, 32, 33, 34, 0, 0, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 168, -237, 170, 171, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 36, 0, 37, 38, 39, 40, 41, 42,
0, 0, 0, 0, 43, 44, 45, 46, 47, 48,
- 49, 0, 0, 179, 180, 0, 0, 0, 50, 181,
- 182, 183, 184, 0, 0, 185, 0, 0, 0, 0,
+ 49, 0, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 52, 53, 0, 0, 0, 0, 0, 54, 55,
- 0, 77, 56, 16, 0, 17, 18, 19, 20, 21,
- 22, 23, 0, 0, 0, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 34, 0, 0, 0,
- 0, 35, 0, 0, 0, 0, 0, 0, 168, 169,
- 170, 171, 0, 0, 0, 36, 0, 37, 38, 39,
- 40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
- 46, 47, 48, 49, 0, 0, 179, 180, 0, 0,
- 0, 50, 181, 182, 183, 184, 0, 0, 185, 0,
- 0, 0, 0, 51, 52, 53, 0, 0, 0, 0,
- 0, 54, 55, 0, 0, 56, 16, 105, 17, 18,
- 19, 20, 21, 22, 23, 0, 0, 0, 24, 25,
- 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
- 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
- 0, -237, 0, 170, 171, 0, 0, 0, 36, 0,
- 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
- 43, 44, 45, 46, 47, 48, 49, 0, 0, 179,
- 180, 0, 0, 0, 50, 181, 182, 183, 184, 0,
- 0, 185, 0, 0, 0, 0, 51, 52, 53, 0,
- 0, 0, 0, 0, 54, 55, 0, 16, 56, 17,
- 18, 19, 20, 21, 22, 23, 140, 0, 0, 24,
- 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
- 34, 0, 0, 0, 0, 35, 0, 0, 0, 0,
- 0, 0, 0, 0, 170, 171, 0, 0, 0, 36,
- 0, 37, 38, 39, 40, 41, 42, 0, 0, 0,
- 0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
- 179, 180, 0, 0, 0, 50, 181, 182, 183, 184,
- 0, 0, 185, 0, 0, 0, 0, 51, 52, 53,
- 0, 0, 0, 0, 0, 54, 55, 0, 16, 56,
+ 0, 16, 56, 17, 18, 19, 20, 21, 22, 23,
+ 139, 0, 0, 24, 25, 26, 27, 28, 0, 29,
+ 30, 31, 32, 33, 34, 0, 0, 0, 0, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 36, 0, 37, 38, 39, 40, 41,
+ 42, 0, 0, 0, 0, 43, 44, 45, 46, 47,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 50,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 51, 52, 53, 0, 0, 0, 0, 0, 54,
+ 55, 0, 16, 56, 17, 18, 19, 20, 21, 22,
+ 23, 0, 0, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 0, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 36, 0, 37, 38, 39, 40,
+ 41, 42, 0, 0, 0, 0, 43, 44, 45, 46,
+ 47, 48, 49, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 51, 52, 53, 0, 0, 0, 0, 0,
+ 54, 55, 0, 157, 56, 16, 0, 17, 18, 19,
+ 20, 21, 22, 23, 0, 0, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 0,
+ 0, 0, 0, 35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 36, 0, 37,
+ 38, 39, 40, 41, 42, 0, 0, 0, 0, 43,
+ 44, 45, 46, 47, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 53, 0, 0,
+ 0, 0, 0, 54, 55, 0, 230, 56, 16, 0,
17, 18, 19, 20, 21, 22, 23, 0, 0, 0,
24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
33, 34, 0, 0, 0, 0, 35, 0, 0, 0,
@@ -679,7 +696,7 @@ static const yytype_int16 yytable[] =
0, 0, 43, 44, 45, 46, 47, 48, 49, 0,
0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 51, 52,
- 53, 0, 0, 0, 0, 0, 54, 55, 0, 158,
+ 53, 0, 0, 0, 0, 0, 54, 55, 0, 238,
56, 16, 0, 17, 18, 19, 20, 21, 22, 23,
0, 0, 0, 24, 25, 26, 27, 28, 0, 29,
30, 31, 32, 33, 34, 0, 0, 0, 0, 35,
@@ -689,7 +706,7 @@ static const yytype_int16 yytable[] =
48, 49, 0, 0, 0, 0, 0, 0, 0, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 51, 52, 53, 0, 0, 0, 0, 0, 54,
- 55, 0, 231, 56, 16, 0, 17, 18, 19, 20,
+ 55, 0, 250, 56, 16, 0, 17, 18, 19, 20,
21, 22, 23, 0, 0, 0, 24, 25, 26, 27,
28, 0, 29, 30, 31, 32, 33, 34, 0, 0,
0, 0, 35, 0, 0, 0, 0, 0, 0, 0,
@@ -698,7 +715,7 @@ static const yytype_int16 yytable[] =
45, 46, 47, 48, 49, 0, 0, 0, 0, 0,
0, 0, 50, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 51, 52, 53, 0, 0, 0,
- 0, 0, 54, 55, 0, 239, 56, 16, 0, 17,
+ 0, 0, 54, 55, 0, 279, 56, 16, 0, 17,
18, 19, 20, 21, 22, 23, 0, 0, 0, 24,
25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
34, 0, 0, 0, 0, 35, 0, 0, 0, 0,
@@ -707,137 +724,132 @@ static const yytype_int16 yytable[] =
0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 51, 52, 53,
- 0, 0, 0, 0, 0, 54, 55, 0, 251, 56,
+ 0, 0, 0, 0, 0, 54, 55, 0, 337, 56,
16, 0, 17, 18, 19, 20, 21, 22, 23, 0,
0, 0, 24, 25, 26, 27, 28, 0, 29, 30,
31, 32, 33, 34, 0, 0, 0, 0, 35, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 36, 0, 37, 38, 39, 40, 41, 42,
0, 0, 0, 0, 43, 44, 45, 46, 47, 48,
- 49, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 49, 0, 0, 0, 0, 0, 166, 0, 50, 0,
+ 0, 0, 0, 167, 168, 169, 170, 0, 0, 0,
51, 52, 53, 0, 0, 0, 0, 0, 54, 55,
- 0, 280, 56, 16, 0, 17, 18, 19, 20, 21,
- 22, 23, 0, 0, 0, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 32, 33, 34, 0, 0, 0,
- 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 36, 0, 37, 38, 39,
- 40, 41, 42, 0, 0, 0, 0, 43, 44, 45,
- 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
- 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 51, 52, 53, 0, 0, 0, 0,
- 0, 54, 55, 0, 338, 56, 16, 0, 17, 18,
- 19, 20, 21, 22, 23, 0, 0, 0, 24, 25,
- 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
- 0, 0, 0, 0, 35, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 0,
- 37, 38, 39, 40, 41, 42, 0, 0, 0, 0,
- 43, 44, 45, 46, 47, 48, 49, 0, 0, 167,
- 0, 0, 0, 0, 50, 0, 168, 169, 170, 171,
- 0, 0, 0, 0, 0, 0, 51, 52, 53, 0,
- 0, 0, 0, 0, 54, 55, 172, 173, 56, 174,
- 175, 176, 177, 178, 179, 180, 0, 0, 0, 0,
- 181, 182, 183, 184, 167, 0, 185, 0, 0, 0,
- 0, 168, 169, 170, 171, 0, 0, 0, 0, 0,
+ 0, 0, 56, 171, 172, 328, 173, 174, 175, 176,
+ 177, 178, 179, 0, 0, 0, 0, 180, 181, 182,
+ 183, 166, 0, 184, 0, 0, 0, 0, 167, 168,
+ 169, 170, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 171, 172,
+ 0, 173, 174, 175, 176, 177, 178, 179, 0, 0,
+ 0, 0, 180, 181, 182, 183, 166, 0, 184, 0,
+ 0, 0, 0, 167, 168, 169, 170, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 173, 0, 174, 175, 176, 177, 178, 179,
- 180, 0, 0, 0, 0, 181, 182, 183, 184, 0,
- 0, 185
+ 0, 0, 0, 0, 172, 0, 173, 174, 175, 176,
+ 177, 178, 179, 0, 0, 0, 0, 180, 181, 182,
+ 183, 0, 0, 184
};
-#define yypact_value_is_default(yystate) \
- ((yystate) == (-401))
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-408)))
-#define yytable_value_is_error(yytable_value) \
- ((yytable_value) == (-237))
+#define yytable_value_is_error(Yytable_value) \
+ (!!((Yytable_value) == (-236)))
static const yytype_int16 yycheck[] =
{
- 10, 11, 12, 15, 15, 300, 9, 118, 129, 42,
- 9, 12, 11, 16, 80, 0, 397, 50, 11, 419,
- 300, 9, 302, 303, 11, 15, 16, 17, 9, 20,
- 8, 41, 20, 144, 44, 26, 102, 19, 20, 21,
- 22, 23, 45, 25, 26, 20, 21, 22, 23, 23,
- 25, 26, 103, 56, 28, 76, 77, 78, 103, 70,
- 42, 43, 443, 9, 103, 11, 48, 42, 43, 46,
- 47, 471, 9, 12, 11, 76, 77, 78, 15, 16,
- 17, 18, 19, 93, 12, 118, 103, 24, 20, 99,
- 370, 80, 103, 103, 104, 20, 103, 17, 18, 77,
- 9, 9, 223, 136, 103, 12, 99, 296, 90, 298,
- 12, 144, 32, 103, 124, 12, 36, 9, 121, 11,
- 400, 41, 23, 103, 44, 128, 129, 47, 65, 49,
- 12, 51, 52, 53, 54, 55, 12, 76, 77, 78,
- 9, 12, 11, 146, 76, 77, 78, 129, 76, 77,
- 78, 76, 77, 78, 129, 103, 103, 160, 161, 162,
- 455, 164, 165, 166, 48, 9, 103, 11, 103, 76,
- 77, 78, 103, 453, 76, 77, 78, 20, 20, 76,
- 77, 78, 194, 186, 187, 188, 189, 190, 191, 192,
- 193, 224, 103, 103, 76, 77, 78, 103, 102, 209,
- 76, 77, 78, 185, 315, 76, 77, 78, 26, 212,
- 213, 214, 215, 216, 217, 76, 77, 78, 10, 340,
- 223, 199, 200, 201, 202, 203, 204, 102, 206, 207,
- 9, 234, 11, 76, 77, 78, 76, 77, 78, 72,
- 243, 102, 11, 163, 103, 23, 23, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 102, 72, 102, 268, 269, 10, 20, 42,
- 43, 44, 45, 26, 277, 20, 49, 78, 51, 289,
- 11, 103, 315, 20, 395, 18, 20, 23, 270, 76,
- 77, 78, 295, 296, 297, 298, 399, 300, 401, 302,
- 303, 404, 405, 76, 77, 78, 18, 18, 18, 76,
- 77, 78, 415, 416, 18, 102, 15, 299, 21, 102,
- 423, 10, 325, 301, 76, 77, 78, 10, 26, 102,
- 10, 76, 77, 78, 437, 102, 63, 340, 441, 76,
- 77, 78, 76, 77, 78, 95, 96, 97, 98, 54,
- 10, 101, 23, 10, 102, 102, 61, 62, 63, 64,
- 102, 102, 395, 90, 103, 468, 469, 370, 95, 96,
- 97, 98, 350, 102, 101, 353, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 20, 102, 9, 102,
- 95, 96, 97, 98, 15, 103, 101, 400, 10, 402,
- 102, 413, 23, 61, 62, 63, 64, 28, 9, 329,
- 42, 43, 44, 45, 20, 427, 102, 49, 9, 51,
- 74, 20, 432, 20, 436, 76, 77, 78, 86, 87,
- 88, 89, 90, 102, 20, 102, 446, 95, 96, 97,
- 98, 451, 103, 101, 76, 77, 78, 22, 0, 1,
- 453, 102, 102, 73, 466, 102, 12, 9, 99, 11,
- 470, 13, 14, 15, 16, 17, 18, 19, 20, 402,
- 196, 23, 24, 25, 26, 27, 455, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 76, 77, 78, 49, 50, 51,
- 52, 53, 35, 55, 56, 57, 58, 59, 60, 421,
- 76, 77, 78, 65, 66, 67, 68, 69, 70, 71,
- 102, 83, 434, 435, 9, 352, 393, 79, 48, 412,
- 15, 48, 444, 18, -1, -1, 102, -1, 23, 91,
- 92, 93, 454, 28, 0, 1, -1, 99, 100, -1,
- -1, 103, 104, 9, -1, 11, -1, 13, 14, 15,
- 16, 17, 18, 19, 20, -1, -1, 23, 24, 25,
- 26, 27, -1, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- -1, -1, -1, 49, 50, 51, 52, 53, -1, 55,
- 56, 57, 58, 59, 60, -1, -1, -1, -1, 65,
- 66, 67, 68, 69, 70, 71, 96, 97, 98, 90,
- -1, 101, -1, 79, 95, 96, 97, 98, -1, -1,
- 101, -1, -1, -1, -1, 91, 92, 93, -1, -1,
- -1, 1, -1, 99, 100, -1, -1, 103, 104, 9,
- 10, 11, -1, 13, 14, 15, 16, 17, 18, 19,
- 20, -1, -1, 23, 24, 25, 26, 27, -1, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, -1, -1, -1, 49,
- 50, 51, 52, 53, -1, 55, 56, 57, 58, 59,
- 60, -1, -1, -1, -1, 65, 66, 67, 68, 69,
- 70, 71, 3, 4, 5, 6, 7, 8, -1, 79,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 91, 92, 93, -1, -1, -1, 1, -1, 99,
- 100, -1, -1, 103, 104, 9, 10, 11, -1, 13,
- 14, 15, 16, 17, 18, 19, 20, -1, -1, 23,
- 24, 25, 26, 27, -1, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, -1, -1, -1, 49, 50, 51, 52, 53,
- -1, 55, 56, 57, 58, 59, 60, -1, -1, -1,
- -1, 65, 66, 67, 68, 69, 70, 71, -1, -1,
- -1, -1, -1, -1, -1, 79, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 91, 92, 93,
- -1, -1, -1, 1, -1, 99, 100, -1, -1, 103,
- 104, 9, 10, 11, -1, 13, 14, 15, 16, 17,
+ 10, 11, 12, 15, 128, 0, 9, 117, 299, 42,
+ 12, 418, 299, 16, 301, 302, 15, 50, 11, 396,
+ 9, 12, 11, 20, 9, 12, 76, 77, 78, 9,
+ 8, 41, 80, 143, 44, 20, 103, 19, 20, 21,
+ 22, 23, 45, 25, 26, 20, 21, 22, 23, 103,
+ 25, 26, 102, 56, 102, 15, 16, 17, 20, 11,
+ 42, 43, 103, 470, 26, 442, 48, 42, 43, 46,
+ 47, 70, 12, 23, 76, 77, 78, 103, 28, 76,
+ 77, 78, 369, 93, 117, 76, 77, 78, 98, 76,
+ 77, 78, 102, 103, 20, 103, 17, 18, 222, 77,
+ 23, 80, 135, 12, 103, 98, 12, 9, 90, 12,
+ 143, 32, 399, 123, 103, 36, 9, 120, 11, 9,
+ 41, 20, 103, 44, 127, 128, 47, 12, 49, 103,
+ 51, 52, 53, 54, 55, 12, 76, 77, 78, 20,
+ 103, 48, 145, 103, 103, 9, 128, 11, 103, 20,
+ 76, 77, 78, 128, 103, 20, 159, 160, 161, 103,
+ 163, 164, 165, 454, 9, 452, 11, 76, 77, 78,
+ 76, 77, 78, 76, 77, 78, 20, 76, 77, 78,
+ 20, 193, 185, 186, 187, 188, 189, 190, 191, 192,
+ 223, 76, 77, 78, 102, 76, 77, 78, 208, 76,
+ 77, 78, 184, 103, 314, 76, 77, 78, 211, 212,
+ 213, 214, 215, 216, 26, 339, 76, 77, 78, 222,
+ 198, 199, 200, 201, 202, 203, 102, 205, 206, 9,
+ 233, 11, 76, 77, 78, 10, 76, 77, 78, 242,
+ 72, 162, 102, 11, 23, 166, 167, 168, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 9, 9, 11, 11, 267, 268, 9, 15, 16, 17,
+ 18, 19, 15, 276, 103, 18, 24, 295, 288, 297,
+ 23, 314, 23, 72, 394, 28, 102, 269, 76, 77,
+ 78, 294, 295, 296, 297, 398, 299, 400, 301, 302,
+ 403, 404, 76, 77, 78, 10, 61, 62, 63, 64,
+ 26, 414, 415, 11, 102, 420, 298, 65, 78, 422,
+ 103, 324, 300, 42, 43, 44, 45, 18, 433, 434,
+ 49, 18, 51, 436, 89, 90, 339, 440, 443, 18,
+ 95, 96, 97, 98, 18, 18, 101, 23, 453, 21,
+ 61, 62, 63, 64, 15, 103, 102, 76, 77, 78,
+ 26, 394, 10, 10, 467, 468, 369, 76, 77, 78,
+ 10, 349, 10, 10, 352, 86, 87, 88, 89, 90,
+ 76, 77, 78, 102, 95, 96, 97, 98, 23, 102,
+ 101, 103, 102, 102, 102, 54, 399, 20, 401, 102,
+ 412, 102, 61, 62, 63, 64, 102, 328, 102, 42,
+ 43, 44, 45, 102, 426, 103, 49, 10, 51, 102,
+ 20, 431, 9, 435, 102, 84, 85, 86, 87, 88,
+ 89, 90, 9, 74, 20, 445, 95, 96, 97, 98,
+ 450, 20, 101, 76, 77, 78, 102, 0, 1, 452,
+ 96, 97, 98, 465, 20, 101, 9, 102, 11, 469,
+ 13, 14, 15, 16, 17, 18, 19, 20, 22, 103,
+ 23, 24, 25, 26, 27, 73, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 102, 102, 63, 49, 50, 51, 52,
+ 53, 12, 55, 56, 57, 58, 59, 60, 98, 76,
+ 77, 78, 65, 66, 67, 68, 69, 70, 71, 76,
+ 77, 78, 90, 401, 454, 195, 79, 95, 96, 97,
+ 98, 35, 83, 101, 351, 102, 392, 411, 91, 92,
+ 93, 48, 0, 1, -1, 102, 99, 100, 48, -1,
+ 103, 9, -1, 11, -1, 13, 14, 15, 16, 17,
+ 18, 19, 20, -1, -1, 23, 24, 25, 26, 27,
+ -1, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
+ -1, 49, 50, 51, 52, 53, -1, 55, 56, 57,
+ 58, 59, 60, -1, -1, -1, -1, 65, 66, 67,
+ 68, 69, 70, 71, -1, -1, -1, 9, -1, 90,
+ -1, 79, -1, 15, 95, 96, 97, 98, -1, -1,
+ 101, 23, -1, 91, 92, 93, 28, -1, 1, -1,
+ -1, 99, 100, -1, -1, 103, 9, 10, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, 20, -1, -1,
+ 23, 24, 25, 26, 27, -1, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, -1, -1, -1, 49, 50, 51, 52,
+ 53, -1, 55, 56, 57, 58, 59, 60, -1, -1,
+ -1, -1, 65, 66, 67, 68, 69, 70, 71, 95,
+ 96, 97, 98, -1, -1, 101, 79, 3, 4, 5,
+ 6, 7, 8, -1, -1, -1, -1, -1, 91, 92,
+ 93, -1, -1, 1, -1, -1, 99, 100, -1, -1,
+ 103, 9, 10, 11, -1, 13, 14, 15, 16, 17,
+ 18, 19, 20, -1, -1, 23, 24, 25, 26, 27,
+ -1, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
+ -1, 49, 50, 51, 52, 53, -1, 55, 56, 57,
+ 58, 59, 60, -1, -1, -1, -1, 65, 66, 67,
+ 68, 69, 70, 71, -1, -1, -1, -1, -1, -1,
+ -1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 91, 92, 93, -1, -1, 1, -1,
+ -1, 99, 100, -1, -1, 103, 9, 10, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, 20, -1, -1,
+ 23, 24, 25, 26, 27, -1, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, -1, -1, -1, 49, 50, 51, 52,
+ 53, -1, 55, 56, 57, 58, 59, 60, -1, -1,
+ -1, -1, 65, 66, 67, 68, 69, 70, 71, -1,
+ -1, -1, -1, -1, -1, -1, 79, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 91, 92,
+ 93, -1, -1, 1, -1, -1, 99, 100, -1, -1,
+ 103, 9, 10, 11, -1, 13, 14, 15, 16, 17,
18, 19, 20, -1, -1, 23, 24, 25, 26, 27,
-1, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
@@ -845,8 +857,17 @@ static const yytype_int16 yycheck[] =
58, 59, 60, -1, -1, -1, -1, 65, 66, 67,
68, 69, 70, 71, -1, -1, -1, -1, -1, -1,
-1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 91, 92, 93, -1, -1, -1, 1,
- -1, 99, 100, -1, -1, 103, 104, 9, 10, 11,
+ -1, -1, -1, 91, 92, 93, 1, -1, -1, -1,
+ -1, 99, 100, -1, 9, 103, 11, -1, 13, 14,
+ 15, 16, 17, 18, 19, 20, -1, -1, 23, 24,
+ 25, 26, 27, -1, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, -1, -1, -1, 49, 50, 51, 52, 53, -1,
+ 55, 56, 57, 58, 59, 60, -1, -1, -1, -1,
+ 65, 66, 67, 68, 69, 70, 71, -1, -1, 74,
+ -1, -1, -1, -1, 79, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 91, 92, 93, 1,
+ -1, -1, -1, -1, 99, 100, -1, 9, 103, 11,
-1, 13, 14, 15, 16, 17, 18, 19, 20, -1,
-1, 23, 24, 25, 26, 27, -1, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
@@ -855,98 +876,60 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, 65, 66, 67, 68, 69, 70, 71,
-1, -1, -1, -1, -1, -1, -1, 79, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 91,
- 92, 93, -1, -1, -1, 1, -1, 99, 100, -1,
- -1, 103, 104, 9, -1, 11, -1, 13, 14, 15,
+ 92, 93, 1, -1, -1, -1, -1, 99, 100, -1,
+ 9, 103, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, 20, -1, -1, 23, 24, 25, 26, 27, -1,
+ 29, 30, 31, 32, 33, 34, 35, -1, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, -1, -1, -1,
+ 49, 50, 51, 52, 53, -1, 55, 56, 57, 58,
+ 59, 60, -1, -1, -1, -1, 65, 66, 67, 68,
+ 69, 70, 71, -1, -1, -1, -1, -1, -1, -1,
+ 79, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 91, 92, 93, 1, -1, -1, -1, -1,
+ 99, 100, -1, -1, 103, 11, -1, 13, 14, 15,
16, 17, 18, 19, 20, -1, -1, 23, 24, 25,
- 26, 27, -1, 29, 30, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- -1, -1, -1, 49, 50, 51, 52, 53, -1, 55,
+ 26, 27, -1, 29, 30, 31, 32, 33, 34, -1,
+ -1, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+ 61, 62, 63, 64, -1, -1, -1, 53, -1, 55,
56, 57, 58, 59, 60, -1, -1, -1, -1, 65,
- 66, 67, 68, 69, 70, 71, -1, -1, 74, -1,
- -1, -1, -1, 79, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 91, 92, 93, -1, -1,
- -1, 1, -1, 99, 100, -1, -1, 103, 104, 9,
- -1, 11, -1, 13, 14, 15, 16, 17, 18, 19,
- 20, -1, -1, 23, 24, 25, 26, 27, -1, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, -1, -1, -1, 49,
- 50, 51, 52, 53, -1, 55, 56, 57, 58, 59,
- 60, -1, -1, -1, -1, 65, 66, 67, 68, 69,
- 70, 71, -1, -1, -1, -1, -1, -1, -1, 79,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 91, 92, 93, -1, -1, -1, 1, -1, 99,
- 100, -1, -1, 103, 104, 9, -1, 11, -1, 13,
- 14, 15, 16, 17, 18, 19, 20, -1, -1, 23,
- 24, 25, 26, 27, -1, 29, 30, 31, 32, 33,
- 34, 35, -1, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, -1, -1, -1, 49, 50, 51, 52, 53,
- -1, 55, 56, 57, 58, 59, 60, -1, -1, -1,
- -1, 65, 66, 67, 68, 69, 70, 71, -1, -1,
- -1, -1, -1, -1, -1, 79, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 91, 92, 93,
- -1, 1, -1, -1, -1, 99, 100, -1, -1, 103,
- 104, 11, -1, 13, 14, 15, 16, 17, 18, 19,
- 20, -1, -1, 23, 24, 25, 26, 27, -1, 29,
- 30, 31, 32, 33, 34, -1, -1, -1, -1, 39,
- -1, -1, 54, -1, -1, -1, -1, -1, -1, 61,
- 62, 63, 64, 53, -1, 55, 56, 57, 58, 59,
- 60, -1, -1, -1, -1, 65, 66, 67, 68, 69,
- 70, 71, 84, 85, 86, 87, 88, 89, 90, 79,
- -1, -1, -1, 95, 96, 97, 98, -1, -1, 101,
- -1, 91, 92, 93, 1, -1, -1, -1, -1, 99,
- 100, 63, 64, 103, 11, -1, 13, 14, 15, 16,
+ 66, 67, 68, 69, 70, 71, 87, 88, 89, 90,
+ -1, -1, -1, 79, 95, 96, 97, 98, -1, -1,
+ 101, -1, -1, -1, -1, 91, 92, 93, 1, -1,
+ -1, -1, -1, 99, 100, 63, 64, 103, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, -1, -1, -1,
+ 23, 24, 25, 26, 27, -1, 29, 30, 31, 32,
+ 33, 34, 90, -1, -1, -1, 39, 95, 96, 97,
+ 98, -1, -1, 101, -1, -1, -1, -1, -1, -1,
+ 53, -1, 55, 56, 57, 58, 59, 60, -1, -1,
+ 0, -1, 65, 66, 67, 68, 69, 70, 71, 9,
+ -1, 11, 12, -1, -1, -1, 79, -1, -1, -1,
+ 20, -1, -1, -1, -1, -1, -1, -1, 91, 92,
+ 93, 61, 62, 63, 64, -1, 99, 100, -1, 102,
+ 103, -1, 42, 43, 44, 45, -1, -1, -1, 49,
+ -1, 51, -1, -1, 54, -1, -1, -1, 88, 89,
+ 90, 61, 62, 63, 64, 95, 96, 97, 98, -1,
+ -1, 101, -1, -1, -1, -1, 76, 77, 78, 0,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 12, -1, -1, -1, 95, 96, 97, 98, 20,
+ -1, 101, 102, -1, -1, -1, -1, -1, -1, -1,
+ 61, 62, 63, 64, -1, -1, -1, -1, -1, -1,
+ -1, 42, 43, 44, 45, -1, -1, -1, 49, -1,
+ 51, -1, -1, 54, -1, -1, -1, -1, 89, 90,
+ 61, 62, 63, 64, 95, 96, 97, 98, -1, -1,
+ 101, -1, -1, -1, -1, 76, 77, 78, -1, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ -1, -1, -1, -1, 95, 96, 97, 98, -1, -1,
+ 101, 102, 9, -1, 11, -1, 13, 14, 15, 16,
17, 18, 19, -1, -1, -1, 23, 24, 25, 26,
- 27, -1, 29, 30, 31, 32, 33, 34, 90, -1,
- -1, -1, 39, 95, 96, 97, 98, -1, -1, 101,
- -1, -1, -1, -1, -1, -1, 53, -1, 55, 56,
- 57, 58, 59, 60, -1, -1, 0, -1, 65, 66,
- 67, 68, 69, 70, 71, 9, -1, 11, 12, -1,
- -1, -1, 79, -1, -1, -1, 20, -1, -1, -1,
- -1, -1, -1, -1, 91, 92, 93, 61, 62, 63,
- 64, -1, 99, 100, -1, 102, 103, -1, 42, 43,
- 44, 45, -1, -1, -1, 49, -1, 51, -1, -1,
- 54, -1, -1, 87, 88, 89, 90, 61, 62, 63,
- 64, 95, 96, 97, 98, -1, -1, 101, -1, -1,
- -1, -1, 76, 77, 78, 0, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 12, -1, -1,
- -1, 95, 96, 97, 98, 20, -1, 101, 102, -1,
- -1, -1, -1, -1, -1, -1, 61, 62, 63, 64,
- -1, -1, -1, -1, -1, -1, -1, 42, 43, 44,
- 45, -1, -1, -1, 49, -1, 51, -1, -1, 54,
- -1, -1, -1, 88, 89, 90, 61, 62, 63, 64,
- 95, 96, 97, 98, -1, -1, 101, -1, -1, -1,
- -1, 76, 77, 78, -1, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, -1, -1, -1, -1,
- 95, 96, 97, 98, -1, -1, 101, 102, 9, -1,
- 11, -1, 13, 14, 15, 16, 17, 18, 19, -1,
- -1, -1, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, -1, -1, -1, -1, 39, -1,
- -1, -1, -1, -1, -1, 61, 62, 63, 64, -1,
- -1, -1, 53, -1, 55, 56, 57, 58, 59, 60,
- -1, -1, -1, -1, 65, 66, 67, 68, 69, 70,
- 71, -1, -1, 89, 90, -1, -1, -1, 79, 95,
- 96, 97, 98, -1, -1, 101, -1, -1, -1, -1,
- 91, 92, 93, -1, -1, -1, -1, -1, 99, 100,
- -1, 9, 103, 11, -1, 13, 14, 15, 16, 17,
- 18, 19, -1, -1, -1, 23, 24, 25, 26, 27,
- -1, 29, 30, 31, 32, 33, 34, -1, -1, -1,
- -1, 39, -1, -1, -1, -1, -1, -1, 61, 62,
- 63, 64, -1, -1, -1, 53, -1, 55, 56, 57,
- 58, 59, 60, -1, -1, -1, -1, 65, 66, 67,
- 68, 69, 70, 71, -1, -1, 89, 90, -1, -1,
- -1, 79, 95, 96, 97, 98, -1, -1, 101, -1,
- -1, -1, -1, 91, 92, 93, -1, -1, -1, -1,
- -1, 99, 100, -1, -1, 103, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, -1, -1, -1, 23, 24,
- 25, 26, 27, -1, 29, 30, 31, 32, 33, 34,
- -1, -1, -1, -1, 39, -1, -1, -1, -1, -1,
- -1, 61, -1, 63, 64, -1, -1, -1, 53, -1,
- 55, 56, 57, 58, 59, 60, -1, -1, -1, -1,
- 65, 66, 67, 68, 69, 70, 71, -1, -1, 89,
- 90, -1, -1, -1, 79, 95, 96, 97, 98, -1,
- -1, 101, -1, -1, -1, -1, 91, 92, 93, -1,
- -1, -1, -1, -1, 99, 100, -1, 11, 103, 13,
- 14, 15, 16, 17, 18, 19, 20, -1, -1, 23,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, -1,
+ -1, -1, 39, -1, -1, -1, -1, -1, -1, 61,
+ -1, 63, 64, -1, -1, -1, 53, -1, 55, 56,
+ 57, 58, 59, 60, -1, -1, -1, -1, 65, 66,
+ 67, 68, 69, 70, 71, -1, -1, 89, 90, -1,
+ -1, -1, 79, 95, 96, 97, 98, -1, -1, 101,
+ -1, -1, -1, -1, 91, 92, 93, -1, -1, -1,
+ -1, -1, 99, 100, -1, 9, 103, 11, -1, 13,
+ 14, 15, 16, 17, 18, 19, -1, -1, -1, 23,
24, 25, 26, 27, -1, 29, 30, 31, 32, 33,
34, -1, -1, -1, -1, 39, -1, -1, -1, -1,
-1, -1, -1, -1, 63, 64, -1, -1, -1, 53,
@@ -954,7 +937,44 @@ static const yytype_int16 yycheck[] =
-1, 65, 66, 67, 68, 69, 70, 71, -1, -1,
89, 90, -1, -1, -1, 79, 95, 96, 97, 98,
-1, -1, 101, -1, -1, -1, -1, 91, 92, 93,
- -1, -1, -1, -1, -1, 99, 100, -1, 11, 103,
+ -1, -1, -1, -1, -1, 99, 100, -1, -1, 103,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
+ -1, -1, 23, 24, 25, 26, 27, -1, 29, 30,
+ 31, 32, 33, 34, -1, -1, -1, -1, 39, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 53, -1, 55, 56, 57, 58, 59, 60,
+ -1, -1, -1, -1, 65, 66, 67, 68, 69, 70,
+ 71, -1, -1, -1, -1, -1, -1, -1, 79, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 91, 92, 93, -1, -1, -1, -1, -1, 99, 100,
+ -1, 11, 103, 13, 14, 15, 16, 17, 18, 19,
+ 20, -1, -1, 23, 24, 25, 26, 27, -1, 29,
+ 30, 31, 32, 33, 34, -1, -1, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 53, -1, 55, 56, 57, 58, 59,
+ 60, -1, -1, -1, -1, 65, 66, 67, 68, 69,
+ 70, 71, -1, -1, -1, -1, -1, -1, -1, 79,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 91, 92, 93, -1, -1, -1, -1, -1, 99,
+ 100, -1, 11, 103, 13, 14, 15, 16, 17, 18,
+ 19, -1, -1, -1, 23, 24, 25, 26, 27, -1,
+ 29, 30, 31, 32, 33, 34, -1, -1, -1, -1,
+ 39, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 53, -1, 55, 56, 57, 58,
+ 59, 60, -1, -1, -1, -1, 65, 66, 67, 68,
+ 69, 70, 71, -1, -1, -1, -1, -1, -1, -1,
+ 79, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 91, 92, 93, -1, -1, -1, -1, -1,
+ 99, 100, -1, 102, 103, 11, -1, 13, 14, 15,
+ 16, 17, 18, 19, -1, -1, -1, 23, 24, 25,
+ 26, 27, -1, 29, 30, 31, 32, 33, 34, -1,
+ -1, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 53, -1, 55,
+ 56, 57, 58, 59, 60, -1, -1, -1, -1, 65,
+ 66, 67, 68, 69, 70, 71, -1, -1, -1, -1,
+ -1, -1, -1, 79, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 91, 92, 93, -1, -1,
+ -1, -1, -1, 99, 100, -1, 102, 103, 11, -1,
13, 14, 15, 16, 17, 18, 19, -1, -1, -1,
23, 24, 25, 26, 27, -1, 29, 30, 31, 32,
33, 34, -1, -1, -1, -1, 39, -1, -1, -1,
@@ -998,127 +1018,113 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 53, -1, 55, 56, 57, 58, 59, 60,
-1, -1, -1, -1, 65, 66, 67, 68, 69, 70,
- 71, -1, -1, -1, -1, -1, -1, -1, 79, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 71, -1, -1, -1, -1, -1, 54, -1, 79, -1,
+ -1, -1, -1, 61, 62, 63, 64, -1, -1, -1,
91, 92, 93, -1, -1, -1, -1, -1, 99, 100,
- -1, 102, 103, 11, -1, 13, 14, 15, 16, 17,
- 18, 19, -1, -1, -1, 23, 24, 25, 26, 27,
- -1, 29, 30, 31, 32, 33, 34, -1, -1, -1,
- -1, 39, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 53, -1, 55, 56, 57,
- 58, 59, 60, -1, -1, -1, -1, 65, 66, 67,
- 68, 69, 70, 71, -1, -1, -1, -1, -1, -1,
- -1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 91, 92, 93, -1, -1, -1, -1,
- -1, 99, 100, -1, 102, 103, 11, -1, 13, 14,
- 15, 16, 17, 18, 19, -1, -1, -1, 23, 24,
- 25, 26, 27, -1, 29, 30, 31, 32, 33, 34,
- -1, -1, -1, -1, 39, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 53, -1,
- 55, 56, 57, 58, 59, 60, -1, -1, -1, -1,
- 65, 66, 67, 68, 69, 70, 71, -1, -1, 54,
- -1, -1, -1, -1, 79, -1, 61, 62, 63, 64,
- -1, -1, -1, -1, -1, -1, 91, 92, 93, -1,
- -1, -1, -1, -1, 99, 100, 81, 82, 103, 84,
- 85, 86, 87, 88, 89, 90, -1, -1, -1, -1,
- 95, 96, 97, 98, 54, -1, 101, -1, -1, -1,
- -1, 61, 62, 63, 64, -1, -1, -1, -1, -1,
+ -1, -1, 103, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, -1, -1, -1, -1, 95, 96, 97,
+ 98, 54, -1, 101, -1, -1, -1, -1, 61, 62,
+ 63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 81, 82,
+ -1, 84, 85, 86, 87, 88, 89, 90, -1, -1,
+ -1, -1, 95, 96, 97, 98, 54, -1, 101, -1,
+ -1, -1, -1, 61, 62, 63, 64, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 82, -1, 84, 85, 86, 87, 88, 89,
- 90, -1, -1, -1, -1, 95, 96, 97, 98, -1,
- -1, 101
+ -1, -1, -1, -1, 82, -1, 84, 85, 86, 87,
+ 88, 89, 90, -1, -1, -1, -1, 95, 96, 97,
+ 98, -1, -1, 101
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 3, 4, 5, 6, 7, 8, 106, 107, 108,
- 109, 110, 111, 112, 0, 115, 11, 13, 14, 15,
+ 0, 3, 4, 5, 6, 7, 8, 105, 106, 107,
+ 108, 109, 110, 111, 0, 114, 11, 13, 14, 15,
16, 17, 18, 19, 23, 24, 25, 26, 27, 29,
30, 31, 32, 33, 34, 39, 53, 55, 56, 57,
58, 59, 60, 65, 66, 67, 68, 69, 70, 71,
- 79, 91, 92, 93, 99, 100, 103, 150, 151, 152,
- 155, 156, 157, 158, 159, 160, 162, 165, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 9, 113, 1,
+ 79, 91, 92, 93, 99, 100, 103, 149, 150, 151,
+ 154, 155, 156, 157, 158, 159, 161, 164, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 9, 112, 1,
20, 35, 37, 38, 40, 41, 42, 43, 44, 45,
- 49, 50, 51, 52, 104, 113, 122, 128, 150, 36,
- 120, 121, 122, 118, 118, 12, 150, 160, 160, 23,
- 28, 113, 168, 176, 176, 176, 176, 176, 176, 176,
- 161, 11, 103, 160, 140, 140, 160, 103, 103, 103,
- 113, 160, 23, 151, 164, 168, 176, 176, 113, 160,
- 20, 150, 23, 28, 142, 160, 103, 163, 168, 169,
- 170, 160, 151, 160, 160, 160, 160, 160, 102, 150,
- 76, 77, 78, 80, 9, 11, 103, 54, 61, 62,
- 63, 64, 81, 82, 84, 85, 86, 87, 88, 89,
- 90, 95, 96, 97, 98, 101, 103, 9, 11, 9,
- 11, 9, 11, 9, 115, 141, 142, 23, 139, 103,
- 103, 103, 103, 70, 103, 168, 103, 103, 113, 48,
- 130, 20, 42, 43, 44, 45, 49, 51, 121, 122,
- 120, 12, 164, 103, 103, 150, 102, 113, 26, 143,
- 102, 102, 150, 165, 176, 151, 10, 20, 164, 102,
- 150, 72, 145, 11, 102, 150, 150, 150, 160, 150,
- 150, 102, 150, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 9, 11,
- 15, 16, 17, 18, 19, 24, 65, 103, 154, 168,
- 102, 150, 150, 150, 150, 150, 150, 150, 150, 118,
- 23, 138, 139, 23, 124, 115, 115, 115, 115, 115,
- 115, 103, 115, 115, 113, 150, 134, 150, 150, 150,
- 150, 150, 165, 151, 12, 153, 72, 144, 102, 102,
- 150, 10, 102, 26, 150, 11, 20, 12, 102, 83,
- 150, 150, 18, 18, 18, 18, 18, 18, 102, 150,
- 103, 102, 20, 12, 20, 12, 20, 12, 20, 10,
- 21, 114, 123, 9, 20, 23, 133, 150, 134, 135,
- 150, 134, 137, 166, 168, 128, 132, 135, 136, 150,
- 115, 135, 135, 102, 102, 164, 26, 115, 148, 102,
- 12, 150, 10, 160, 20, 12, 102, 165, 10, 10,
- 10, 10, 115, 143, 115, 23, 102, 102, 102, 102,
- 103, 102, 20, 135, 102, 102, 103, 146, 12, 10,
- 102, 20, 144, 125, 164, 131, 131, 9, 116, 116,
- 135, 116, 133, 102, 116, 116, 147, 9, 74, 20,
- 148, 149, 118, 20, 116, 116, 117, 46, 47, 129,
- 129, 102, 130, 20, 116, 102, 118, 119, 10, 130,
- 130, 118, 116, 103, 116, 131, 130, 10, 20, 26,
- 126, 10, 135, 130, 136, 22, 73, 127, 102, 102,
- 118, 116, 116, 74, 129
+ 49, 50, 51, 52, 112, 121, 127, 149, 36, 119,
+ 120, 121, 117, 117, 12, 149, 159, 159, 23, 28,
+ 112, 167, 175, 175, 175, 175, 175, 175, 175, 160,
+ 11, 103, 159, 139, 139, 159, 103, 103, 103, 112,
+ 159, 23, 150, 163, 167, 175, 175, 112, 159, 20,
+ 149, 23, 28, 141, 159, 103, 162, 167, 168, 169,
+ 159, 150, 159, 159, 159, 159, 159, 102, 149, 76,
+ 77, 78, 80, 9, 11, 103, 54, 61, 62, 63,
+ 64, 81, 82, 84, 85, 86, 87, 88, 89, 90,
+ 95, 96, 97, 98, 101, 103, 9, 11, 9, 11,
+ 9, 11, 9, 114, 140, 141, 23, 138, 103, 103,
+ 103, 103, 70, 103, 167, 103, 103, 112, 48, 129,
+ 20, 42, 43, 44, 45, 49, 51, 120, 121, 119,
+ 12, 163, 103, 103, 149, 102, 112, 26, 142, 102,
+ 102, 149, 164, 175, 150, 10, 20, 163, 102, 149,
+ 72, 144, 11, 102, 149, 149, 149, 159, 149, 149,
+ 102, 149, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 9, 11, 15,
+ 16, 17, 18, 19, 24, 65, 103, 153, 167, 102,
+ 149, 149, 149, 149, 149, 149, 149, 149, 117, 23,
+ 137, 138, 23, 123, 114, 114, 114, 114, 114, 114,
+ 103, 114, 114, 112, 149, 133, 149, 149, 149, 149,
+ 149, 164, 150, 12, 152, 72, 143, 102, 102, 149,
+ 10, 102, 26, 149, 11, 20, 12, 102, 83, 149,
+ 149, 18, 18, 18, 18, 18, 18, 102, 149, 103,
+ 102, 20, 12, 20, 12, 20, 12, 20, 10, 21,
+ 113, 122, 9, 20, 23, 132, 149, 133, 134, 149,
+ 133, 136, 165, 167, 127, 131, 134, 135, 149, 114,
+ 134, 134, 102, 102, 163, 26, 114, 147, 102, 12,
+ 149, 10, 159, 20, 12, 102, 164, 10, 10, 10,
+ 10, 114, 142, 114, 23, 102, 102, 102, 102, 103,
+ 102, 20, 134, 102, 102, 103, 145, 12, 10, 102,
+ 20, 143, 124, 163, 130, 130, 9, 115, 115, 134,
+ 115, 132, 102, 115, 115, 146, 9, 74, 20, 147,
+ 148, 117, 20, 115, 115, 116, 46, 47, 128, 128,
+ 102, 129, 20, 115, 102, 117, 118, 10, 129, 129,
+ 117, 115, 103, 115, 130, 129, 10, 20, 26, 125,
+ 10, 134, 129, 135, 22, 73, 126, 102, 102, 117,
+ 115, 115, 74, 128
};
typedef enum {
- toketype_i_tkval, toketype_ival, toketype_opval, toketype_p_tkval
+ toketype_ival, toketype_opval, toketype_pval
} toketypes;
/* type of each token/terminal */
static const toketypes yy_type_tab[] =
{
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_p_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival,
+ toketype_opval, toketype_pval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_ival,
- toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_ival, toketype_opval,
toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval
};
/* Generated from:
- * bb8245a1a537b2afb2445b3973f63b210f9ec346a1955071aef7d05ba97196ae perly.y
- * 5c9d2a0262457fe9b70073fc8ad6c188f812f38ad57712b7e2f53daa01b297cc regen_perly.pl
+ * 7e6c275bbd1dbc800c205a8a8b0cd785e4859f94976ee7372149598471f16f81 perly.y
+ * d1d4df7b8e30ac9dede664af9179e6e5e7ddc7f2ad9c4eff9e2e5b32c9e16a6e regen_perly.pl
* ex: set ro: */
diff --git a/perly.y b/perly.y
index 10479136bf..de90b2adca 100644
--- a/perly.y
+++ b/perly.y
@@ -20,20 +20,6 @@
* to run regen_perly.pl, which re-creates the files perly.h, perly.tab
* and perly.act which are derived from this.
*
- * Note that these derived files are included and compiled twice; once
- * from perly.c, and once from madly.c. The second time, a number of MAD
- * macros are defined, which compile in extra code that allows the parse
- * tree to be accurately dumped. In particular:
- *
- * MAD defined if compiling madly.c
- * DO_MAD(A) expands to A under madly.c, to null otherwise
- * IF_MAD(a,b) expands to A under madly.c, to B otherwise
- * TOKEN_GETMAD() expands to token_getmad() under madly.c, to null otherwise
- * TOKEN_FREE() similarly
- * OP_GETMAD() similarly
- * IVAL(i) expands to (i)->tk_lval.ival or (i)
- * PVAL(p) expands to (p)->tk_lval.pval or (p)
- *
* The main job of of this grammar is to call the various newFOO()
* functions in op.c to build a syntax tree of OP structs.
* It relies on the lexer in toke.c to do the tokenizing.
@@ -47,8 +33,6 @@
%pure_parser
-/* FIXME for MAD - is the new mintro on while and until important? */
-
%start grammar
%union {
@@ -57,39 +41,29 @@
char *pval;
OP *opval;
GV *gvval;
-#ifdef PERL_IN_MADLY_C
- TOKEN* p_tkval;
- TOKEN* i_tkval;
-#else
- char *p_tkval;
- I32 i_tkval;
-#endif
-#ifdef PERL_MAD
- TOKEN* tkval;
-#endif
}
%token <ival> GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ
-%token <i_tkval> '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';' '=' '.'
+%token <ival> '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';' '=' '.'
%token <opval> WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF QWLIST
%token <opval> FUNC0OP FUNC0SUB UNIOPSUB LSTOPSUB
%token <opval> PLUGEXPR PLUGSTMT
-%token <p_tkval> LABEL
-%token <i_tkval> FORMAT SUB ANONSUB PACKAGE USE
-%token <i_tkval> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR
-%token <i_tkval> GIVEN WHEN DEFAULT
-%token <i_tkval> LOOPEX DOTDOT YADAYADA
-%token <i_tkval> FUNC0 FUNC1 FUNC UNIOP LSTOP
-%token <i_tkval> RELOP EQOP MULOP ADDOP
-%token <i_tkval> DOLSHARP DO HASHBRACK NOAMP
-%token <i_tkval> LOCAL MY REQUIRE
-%token <i_tkval> COLONATTR FORMLBRACK FORMRBRACK
+%token <pval> LABEL
+%token <ival> FORMAT SUB ANONSUB PACKAGE USE
+%token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR
+%token <ival> GIVEN WHEN DEFAULT
+%token <ival> LOOPEX DOTDOT YADAYADA
+%token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP
+%token <ival> RELOP EQOP MULOP ADDOP
+%token <ival> DOLSHARP DO HASHBRACK NOAMP
+%token <ival> LOCAL MY REQUIRE
+%token <ival> COLONATTR FORMLBRACK FORMRBRACK
%type <ival> grammar remember mremember
%type <ival> startsub startanonsub startformsub
-/* FIXME for MAD - are these two ival? */
+
%type <ival> mintro
%type <opval> stmtseq fullstmt labfullstmt barestmt block mblock else
@@ -102,39 +76,37 @@
%type <opval> realsubbody subsignature termbinop termunop anonymous termdo
%type <opval> formstmtseq formline formarg
-%nonassoc <i_tkval> PREC_LOW
+%nonassoc <ival> PREC_LOW
%nonassoc LOOPEX
-%left <i_tkval> OROP DOROP
-%left <i_tkval> ANDOP
-%right <i_tkval> NOTOP
+%left <ival> OROP DOROP
+%left <ival> ANDOP
+%right <ival> NOTOP
%nonassoc LSTOP LSTOPSUB
-%left <i_tkval> ','
-%right <i_tkval> ASSIGNOP
-%right <i_tkval> '?' ':'
+%left <ival> ','
+%right <ival> ASSIGNOP
+%right <ival> '?' ':'
%nonassoc DOTDOT YADAYADA
-%left <i_tkval> OROR DORDOR
-%left <i_tkval> ANDAND
-%left <i_tkval> BITOROP
-%left <i_tkval> BITANDOP
+%left <ival> OROR DORDOR
+%left <ival> ANDAND
+%left <ival> BITOROP
+%left <ival> BITANDOP
%nonassoc EQOP
%nonassoc RELOP
%nonassoc UNIOP UNIOPSUB
%nonassoc REQUIRE
-%left <i_tkval> SHIFTOP
+%left <ival> SHIFTOP
%left ADDOP
%left MULOP
-%left <i_tkval> MATCHOP
-%right <i_tkval> '!' '~' UMINUS REFGEN
-%right <i_tkval> POWOP
-%nonassoc <i_tkval> PREINC PREDEC POSTINC POSTDEC POSTJOIN
-%left <i_tkval> ARROW
-%nonassoc <i_tkval> ')'
-%left <i_tkval> '('
+%left <ival> MATCHOP
+%right <ival> '!' '~' UMINUS REFGEN
+%right <ival> POWOP
+%nonassoc <ival> PREINC PREDEC POSTINC POSTDEC POSTJOIN
+%left <ival> ARROW
+%nonassoc <ival> ')'
+%left <ival> '('
%left '[' '{'
-%token <i_tkval> PEG
-
%% /* RULES */
/* Top-level choice of what kind of thing yyparse was called to parse */
@@ -205,21 +177,17 @@ grammar : GRAMPROG
/* An ordinary block */
block : '{' remember stmtseq '}'
- { if (PL_parser->copline > (line_t)IVAL($1))
- PL_parser->copline = (line_t)IVAL($1);
+ { if (PL_parser->copline > (line_t)$1)
+ PL_parser->copline = (line_t)$1;
$$ = block_end($2, $3);
- TOKEN_GETMAD($1,$$,'{');
- TOKEN_GETMAD($4,$$,'}');
}
;
/* format body */
formblock: '=' remember ';' FORMRBRACK formstmtseq ';' '.'
- { if (PL_parser->copline > (line_t)IVAL($1))
- PL_parser->copline = (line_t)IVAL($1);
+ { if (PL_parser->copline > (line_t)$1)
+ PL_parser->copline = (line_t)$1;
$$ = block_end($2, $5);
- TOKEN_GETMAD($1,$$,'{');
- TOKEN_GETMAD($7,$$,'}');
}
;
@@ -228,11 +196,9 @@ remember: /* NULL */ /* start a full lexical scope */
;
mblock : '{' mremember stmtseq '}'
- { if (PL_parser->copline > (line_t)IVAL($1))
- PL_parser->copline = (line_t)IVAL($1);
+ { if (PL_parser->copline > (line_t)$1)
+ PL_parser->copline = (line_t)$1;
$$ = block_end($2, $3);
- TOKEN_GETMAD($1,$$,'{');
- TOKEN_GETMAD($4,$$,'}');
}
;
@@ -265,11 +231,7 @@ formstmtseq: /* NULL */
/* A statement in the program, including optional labels */
fullstmt: barestmt
{
- if($1) {
- $$ = newSTATEOP(0, NULL, $1);
- } else {
- $$ = IF_MAD(newOP(OP_NULL, 0), NULL);
- }
+ $$ = $1 ? newSTATEOP(0, NULL, $1) : NULL;
}
| labfullstmt
{ $$ = $1; }
@@ -277,41 +239,22 @@ fullstmt: barestmt
labfullstmt: LABEL barestmt
{
- $$ = newSTATEOP(SVf_UTF8
- * PVAL($1)[strlen(PVAL($1))+1],
- PVAL($1), $2);
- TOKEN_GETMAD($1,
- $2 ? cLISTOPx($$)->op_first : $$, 'L');
+ $$ = newSTATEOP(SVf_UTF8 * $1[strlen($1)+1], $1, $2);
}
| LABEL labfullstmt
{
- $$ = newSTATEOP(SVf_UTF8
- * PVAL($1)[strlen(PVAL($1))+1],
- PVAL($1), $2);
- TOKEN_GETMAD($1, cLISTOPx($$)->op_first, 'L');
+ $$ = newSTATEOP(SVf_UTF8 * $1[strlen($1)+1], $1, $2);
}
;
/* A bare statement, lacking label and other aspects of state op */
barestmt: PLUGSTMT
{ $$ = $1; }
- | PEG
- {
- $$ = newOP(OP_NULL,0);
- TOKEN_GETMAD($1,$$,'p');
- }
| FORMAT startformsub formname formblock
{
CV *fmtcv = PL_compcv;
-#ifdef MAD
- $$ = newFORM($2, $3, $4);
- prepend_madprops($1->tk_mad, $$, 'F');
- $1->tk_mad = 0;
- token_free($1);
-#else
newFORM($2, $3, $4);
$$ = (OP*)NULL;
-#endif
if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) {
SvREFCNT_inc_simple_void(fmtcv);
pad_add_anon(fmtcv, OP_NULL);
@@ -342,80 +285,39 @@ barestmt: PLUGSTMT
proto subattrlist optsubbody
{
SvREFCNT_inc_simple_void(PL_compcv);
-#ifdef MAD
- {
- OP* o = newSVOP(OP_ANONCODE, 0,
- (SV*)(
-#endif
$2->op_type == OP_CONST
? newATTRSUB($3, $2, $5, $6, $7)
: newMYSUB($3, $2, $5, $6, $7)
-#ifdef MAD
- ));
- $$ = newOP(OP_NULL,0);
- op_getmad(o,$$,'&');
- op_getmad($2,$$,'n');
- op_getmad($5,$$,'s');
- op_getmad($6,$$,'a');
- token_getmad($1,$$,'d');
- append_madprops($7->op_madprop, $$, 0);
- $7->op_madprop = 0;
- }
-#else
;
$$ = (OP*)NULL;
-#endif
intro_my();
}
| PACKAGE WORD WORD ';'
{
-#ifdef MAD
- $$ = package($3);
- token_getmad($1,$$,'o');
- if ($2)
- package_version($2);
- token_getmad($4,$$,';');
-#else
package($3);
if ($2)
package_version($2);
$$ = (OP*)NULL;
-#endif
}
| USE startsub
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
WORD WORD optlistexpr ';'
{
SvREFCNT_inc_simple_void(PL_compcv);
-#ifdef MAD
- $$ = utilize(IVAL($1), $2, $4, $5, $6);
- token_getmad($1,$$,'o');
- token_getmad($7,$$,';');
- if (PL_parser->rsfp_filters &&
- AvFILLp(PL_parser->rsfp_filters) >= 0)
- append_madprops(newMADPROP('!', MAD_NULL, NULL, 0), $$, 0);
-#else
- utilize(IVAL($1), $2, $4, $5, $6);
+ utilize($1, $2, $4, $5, $6);
$$ = (OP*)NULL;
-#endif
}
| IF '(' remember mexpr ')' mblock else
{
$$ = block_end($3,
newCONDOP(0, $4, op_scope($6), $7));
- TOKEN_GETMAD($1,$$,'I');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| UNLESS '(' remember miexpr ')' mblock else
{
$$ = block_end($3,
newCONDOP(0, $4, op_scope($6), $7));
- TOKEN_GETMAD($1,$$,'I');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| GIVEN '(' remember mexpr ')' mblock
{
@@ -426,7 +328,7 @@ barestmt: PLUGSTMT
|| PAD_COMPNAME_FLAGS_isOUR(offset)
? 0
: offset));
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| WHEN '(' remember mexpr ')' mblock
{ $$ = block_end($3, newWHENOP($4, op_scope($6))); }
@@ -437,25 +339,19 @@ barestmt: PLUGSTMT
$$ = block_end($3,
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
$4, $7, $8, $6));
- TOKEN_GETMAD($1,$$,'W');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| UNTIL '(' remember iexpr ')' mintro mblock cont
{
$$ = block_end($3,
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
$4, $7, $8, $6));
- TOKEN_GETMAD($1,$$,'W');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| FOR '(' remember mnexpr ';' texpr ';' mintro mnexpr ')'
mblock
{
- OP *initop = IF_MAD($4 ? $4 : newOP(OP_NULL, 0), $4);
+ OP *initop = $4;
OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
scalar($6), $11, $9, $8);
if (initop) {
@@ -464,41 +360,25 @@ barestmt: PLUGSTMT
newOP(OP_UNSTACK, OPf_SPECIAL),
forop));
}
- DO_MAD({ forop = newUNOP(OP_NULL, 0, forop); })
$$ = block_end($3, forop);
- TOKEN_GETMAD($1,$$,'3');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,'1');
- TOKEN_GETMAD($7,$$,'2');
- TOKEN_GETMAD($10,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| FOR MY remember my_scalar '(' mexpr ')' mblock cont
{
$$ = block_end($3, newFOROP(0, $4, $6, $8, $9));
- TOKEN_GETMAD($1,$$,'W');
- TOKEN_GETMAD($2,$$,'d');
- TOKEN_GETMAD($5,$$,'(');
- TOKEN_GETMAD($7,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| FOR scalar '(' remember mexpr ')' mblock cont
{
$$ = block_end($4, newFOROP(0,
op_lvalue($2, OP_ENTERLOOP), $5, $7, $8));
- TOKEN_GETMAD($1,$$,'W');
- TOKEN_GETMAD($3,$$,'(');
- TOKEN_GETMAD($6,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| FOR '(' remember mexpr ')' mblock cont
{
$$ = block_end($3,
newFOROP(0, (OP*)NULL, $4, $6, $7));
- TOKEN_GETMAD($1,$$,'W');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- PL_parser->copline = (line_t)IVAL($1);
+ PL_parser->copline = (line_t)$1;
}
| block cont
{
@@ -518,22 +398,18 @@ barestmt: PLUGSTMT
/* a block is a loop that happens once */
$$ = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
(OP*)NULL, block_end($5, $7), (OP*)NULL, 0);
- TOKEN_GETMAD($4,$$,'{');
- TOKEN_GETMAD($8,$$,'}');
- if (PL_parser->copline > (line_t)IVAL($4))
- PL_parser->copline = (line_t)IVAL($4);
+ if (PL_parser->copline > (line_t)$4)
+ PL_parser->copline = (line_t)$4;
}
| sideff ';'
{
PL_parser->expect = XSTATE;
$$ = $1;
- TOKEN_GETMAD($2,$$,';');
}
| ';'
{
PL_parser->expect = XSTATE;
- $$ = IF_MAD(newOP(OP_NULL, 0), (OP*)NULL);
- TOKEN_GETMAD($1,$$,';');
+ $$ = (OP*)NULL;
PL_parser->copline = NOLINE;
}
;
@@ -543,16 +419,10 @@ formline: THING formarg
{ OP *list;
if ($2) {
OP *term = $2;
- DO_MAD(term = newUNOP(OP_NULL, 0, term));
list = op_append_elem(OP_LIST, $1, term);
}
else {
-#ifdef MAD
- OP *op = newNULLLIST();
- list = op_append_elem(OP_LIST, $1, op);
-#else
list = $1;
-#endif
}
if (PL_parser->copline == NOLINE)
PL_parser->copline = CopLINE(PL_curcop)-1;
@@ -574,26 +444,16 @@ sideff : error
| expr
{ $$ = $1; }
| expr IF expr
- { $$ = newLOGOP(OP_AND, 0, $3, $1);
- TOKEN_GETMAD($2,$$,'i');
- }
+ { $$ = newLOGOP(OP_AND, 0, $3, $1); }
| expr UNLESS expr
- { $$ = newLOGOP(OP_OR, 0, $3, $1);
- TOKEN_GETMAD($2,$$,'i');
- }
+ { $$ = newLOGOP(OP_OR, 0, $3, $1); }
| expr WHILE expr
- { $$ = newLOOPOP(OPf_PARENS, 1, scalar($3), $1);
- TOKEN_GETMAD($2,$$,'w');
- }
+ { $$ = newLOOPOP(OPf_PARENS, 1, scalar($3), $1); }
| expr UNTIL iexpr
- { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1);
- TOKEN_GETMAD($2,$$,'w');
- }
+ { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1); }
| expr FOR expr
{ $$ = newFOROP(0, (OP*)NULL, $3, $1, (OP*)NULL);
- TOKEN_GETMAD($2,$$,'w');
- PL_parser->copline = (line_t)IVAL($2);
- }
+ PL_parser->copline = (line_t)$2; }
| expr WHEN expr
{ $$ = newWHENOP($3, op_scope($1)); }
;
@@ -605,17 +465,13 @@ else : /* NULL */
{
($2)->op_flags |= OPf_PARENS;
$$ = op_scope($2);
- TOKEN_GETMAD($1,$$,'o');
}
| ELSIF '(' mexpr ')' mblock else
- { PL_parser->copline = (line_t)IVAL($1);
+ { PL_parser->copline = (line_t)$1;
$$ = newCONDOP(0,
newSTATEOP(OPf_SPECIAL,NULL,$3),
op_scope($5), $6);
PL_hints |= HINT_BLOCK_SCOPE;
- TOKEN_GETMAD($1,$$,'I');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($4,$$,')');
}
;
@@ -623,10 +479,7 @@ else : /* NULL */
cont : /* NULL */
{ $$ = (OP*)NULL; }
| CONTINUE block
- {
- $$ = op_scope($2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = op_scope($2); }
;
/* determine whether there are any new my declarations */
@@ -702,30 +555,16 @@ proto : /* NULL */
subattrlist: /* NULL */
{ $$ = (OP*)NULL; }
| COLONATTR THING
- { $$ = $2;
- TOKEN_GETMAD($1,$$,':');
- }
+ { $$ = $2; }
| COLONATTR
- { $$ = IF_MAD(
- newOP(OP_NULL, 0),
- (OP*)NULL
- );
- TOKEN_GETMAD($1,$$,':');
- }
+ { $$ = (OP*)NULL; }
;
/* List of attributes for a "my" variable declaration */
myattrlist: COLONATTR THING
- { $$ = $2;
- TOKEN_GETMAD($1,$$,':');
- }
+ { $$ = $2; }
| COLONATTR
- { $$ = IF_MAD(
- newOP(OP_NULL, 0),
- (OP*)NULL
- );
- TOKEN_GETMAD($1,$$,':');
- }
+ { $$ = (OP*)NULL; }
;
/* Optional subroutine signature */
@@ -751,60 +590,36 @@ subsignature: /* NULL */ { $$ = (OP*)NULL; }
/* Subroutine body - block with optional signature */
realsubbody: remember subsignature '{' stmtseq '}'
{
- if (PL_parser->copline > (line_t)IVAL($3))
- PL_parser->copline = (line_t)IVAL($3);
+ if (PL_parser->copline > (line_t)$3)
+ PL_parser->copline = (line_t)$3;
$$ = block_end($1,
op_append_list(OP_LINESEQ, $2, $4));
- TOKEN_GETMAD($3,$$,'{');
- TOKEN_GETMAD($5,$$,'}');
}
;
/* Optional subroutine body, for named subroutine declaration */
optsubbody: realsubbody { $$ = $1; }
- | ';' { $$ = IF_MAD(
- newOP(OP_NULL,0),
- (OP*)NULL
- );
+ | ';' { $$ = (OP*)NULL;
PL_parser->expect = XSTATE;
- TOKEN_GETMAD($1,$$,';');
}
;
/* Ordinary expressions; logical combinations */
expr : expr ANDOP expr
- { $$ = newLOGOP(OP_AND, 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP(OP_AND, 0, $1, $3); }
| expr OROP expr
- { $$ = newLOGOP(IVAL($2), 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP($2, 0, $1, $3); }
| expr DOROP expr
- { $$ = newLOGOP(OP_DOR, 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP(OP_DOR, 0, $1, $3); }
| listexpr %prec PREC_LOW
;
/* Expressions are a list of terms joined by commas */
listexpr: listexpr ','
- {
-#ifdef MAD
- OP* op = newNULLLIST();
- token_getmad($2,op,',');
- $$ = op_append_elem(OP_LIST, $1, op);
-#else
- $$ = $1;
-#endif
- }
+ { $$ = $1; }
| listexpr ',' term
{
OP* term = $3;
- DO_MAD(
- term = newUNOP(OP_NULL, 0, term);
- token_getmad($2,term,',');
- )
$$ = op_append_elem(OP_LIST, $1, term);
}
| term %prec PREC_LOW
@@ -812,31 +627,23 @@ listexpr: listexpr ','
/* List operators */
listop : LSTOP indirob listexpr /* map {...} @args or print $fh @args */
- { $$ = convert(IVAL($1), OPf_STACKED,
- op_prepend_elem(OP_LIST, newGVREF(IVAL($1),$2), $3) );
- TOKEN_GETMAD($1,$$,'o');
+ { $$ = convert($1, OPf_STACKED,
+ op_prepend_elem(OP_LIST, newGVREF($1,$2), $3) );
}
| FUNC '(' indirob expr ')' /* print ($fh @args */
- { $$ = convert(IVAL($1), OPf_STACKED,
- op_prepend_elem(OP_LIST, newGVREF(IVAL($1),$3), $4) );
- TOKEN_GETMAD($1,$$,'o');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($5,$$,')');
+ { $$ = convert($1, OPf_STACKED,
+ op_prepend_elem(OP_LIST, newGVREF($1,$3), $4) );
}
| term ARROW method '(' optexpr ')' /* $foo->bar(list) */
{ $$ = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, scalar($1), $5),
newUNOP(OP_METHOD, 0, $3)));
- TOKEN_GETMAD($2,$$,'A');
- TOKEN_GETMAD($4,$$,'(');
- TOKEN_GETMAD($6,$$,')');
}
| term ARROW method /* $foo->bar */
{ $$ = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, scalar($1),
newUNOP(OP_METHOD, 0, $3)));
- TOKEN_GETMAD($2,$$,'A');
}
| METHOD indirob optlistexpr /* new Class @args */
{ $$ = convert(OP_ENTERSUB, OPf_STACKED,
@@ -849,19 +656,11 @@ listop : LSTOP indirob listexpr /* map {...} @args or print $fh @args */
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, $2, $4),
newUNOP(OP_METHOD, 0, $1)));
- TOKEN_GETMAD($3,$$,'(');
- TOKEN_GETMAD($5,$$,')');
}
| LSTOP optlistexpr /* print @args */
- { $$ = convert(IVAL($1), 0, $2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = convert($1, 0, $2); }
| FUNC '(' optexpr ')' /* print (@args) */
- { $$ = convert(IVAL($1), 0, $3);
- TOKEN_GETMAD($1,$$,'o');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($4,$$,')');
- }
+ { $$ = convert($1, 0, $3); }
| LSTOPSUB startanonsub block /* sub f(&@); f { foo } ... */
{ SvREFCNT_inc_simple_void(PL_compcv);
$<opval>$ = newANONATTRSUB($2, 0, (OP*)NULL, $3); }
@@ -883,208 +682,109 @@ subscripted: gelem '{' expr ';' '}' /* *main::{something} */
* provided by the tokeniser */
{ $$ = newBINOP(OP_GELEM, 0, $1, scalar($3));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'{');
- TOKEN_GETMAD($4,$$,';');
- TOKEN_GETMAD($5,$$,'}');
}
| scalar '[' expr ']' /* $array[$element] */
{ $$ = newBINOP(OP_AELEM, 0, oopsAV($1), scalar($3));
- TOKEN_GETMAD($2,$$,'[');
- TOKEN_GETMAD($4,$$,']');
}
| term ARROW '[' expr ']' /* somearef->[$element] */
{ $$ = newBINOP(OP_AELEM, 0,
ref(newAVREF($1),OP_RV2AV),
scalar($4));
- TOKEN_GETMAD($2,$$,'a');
- TOKEN_GETMAD($3,$$,'[');
- TOKEN_GETMAD($5,$$,']');
}
| subscripted '[' expr ']' /* $foo->[$bar]->[$baz] */
{ $$ = newBINOP(OP_AELEM, 0,
ref(newAVREF($1),OP_RV2AV),
scalar($3));
- TOKEN_GETMAD($2,$$,'[');
- TOKEN_GETMAD($4,$$,']');
}
| scalar '{' expr ';' '}' /* $foo{bar();} */
{ $$ = newBINOP(OP_HELEM, 0, oopsHV($1), jmaybe($3));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'{');
- TOKEN_GETMAD($4,$$,';');
- TOKEN_GETMAD($5,$$,'}');
}
| term ARROW '{' expr ';' '}' /* somehref->{bar();} */
{ $$ = newBINOP(OP_HELEM, 0,
ref(newHVREF($1),OP_RV2HV),
jmaybe($4));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'a');
- TOKEN_GETMAD($3,$$,'{');
- TOKEN_GETMAD($5,$$,';');
- TOKEN_GETMAD($6,$$,'}');
}
| subscripted '{' expr ';' '}' /* $foo->[bar]->{baz;} */
{ $$ = newBINOP(OP_HELEM, 0,
ref(newHVREF($1),OP_RV2HV),
jmaybe($3));
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'{');
- TOKEN_GETMAD($4,$$,';');
- TOKEN_GETMAD($5,$$,'}');
}
| term ARROW '(' ')' /* $subref->() */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar($1)));
- TOKEN_GETMAD($2,$$,'a');
- TOKEN_GETMAD($3,$$,'(');
- TOKEN_GETMAD($4,$$,')');
- }
+ newCVREF(0, scalar($1))); }
| term ARROW '(' expr ')' /* $subref->(@args) */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, $4,
- newCVREF(0, scalar($1))));
- TOKEN_GETMAD($2,$$,'a');
- TOKEN_GETMAD($3,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- }
+ newCVREF(0, scalar($1)))); }
| subscripted '(' expr ')' /* $foo->{bar}->(@args) */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, $3,
- newCVREF(0, scalar($1))));
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($4,$$,')');
- }
+ newCVREF(0, scalar($1)))); }
| subscripted '(' ')' /* $foo->{bar}->() */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar($1)));
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ newCVREF(0, scalar($1))); }
| '(' expr ')' '[' expr ']' /* list slice */
- { $$ = newSLICEOP(0, $5, $2);
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- TOKEN_GETMAD($4,$$,'[');
- TOKEN_GETMAD($6,$$,']');
- }
+ { $$ = newSLICEOP(0, $5, $2); }
| QWLIST '[' expr ']' /* list literal slice */
- { $$ = newSLICEOP(0, $3, $1);
- TOKEN_GETMAD($2,$$,'[');
- TOKEN_GETMAD($4,$$,']');
- }
+ { $$ = newSLICEOP(0, $3, $1); }
| '(' ')' '[' expr ']' /* empty list slice! */
- { $$ = newSLICEOP(0, $4, (OP*)NULL);
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($2,$$,')');
- TOKEN_GETMAD($3,$$,'[');
- TOKEN_GETMAD($5,$$,']');
- }
+ { $$ = newSLICEOP(0, $4, (OP*)NULL); }
;
/* Binary operators between terms */
termbinop: term ASSIGNOP term /* $x = $y */
- { $$ = newASSIGNOP(OPf_STACKED, $1, IVAL($2), $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newASSIGNOP(OPf_STACKED, $1, $2, $3); }
| term POWOP term /* $x ** $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term MULOP term /* $x * $y, $x x $y */
- { if (IVAL($2) != OP_REPEAT)
+ { if ($2 != OP_REPEAT)
scalar($1);
- $$ = newBINOP(IVAL($2), 0, $1, scalar($3));
- TOKEN_GETMAD($2,$$,'o');
+ $$ = newBINOP($2, 0, $1, scalar($3));
}
| term ADDOP term /* $x + $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term SHIFTOP term /* $x >> $y, $x << $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term RELOP term /* $x > $y, etc. */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term EQOP term /* $x == $y, $x eq $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term BITANDOP term /* $x & $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term BITOROP term /* $x | $y */
- { $$ = newBINOP(IVAL($2), 0, scalar($1), scalar($3));
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term DOTDOT term /* $x..$y, $x...$y */
- {
- $$ = newRANGE(IVAL($2), scalar($1), scalar($3));
- DO_MAD({
- UNOP *op;
- op = (UNOP*)$$;
- op = (UNOP*)op->op_first; /* get to flop */
- op = (UNOP*)op->op_first; /* get to flip */
- op = (UNOP*)op->op_first; /* get to range */
- token_getmad($2,(OP*)op,'o');
- });
- }
+ { $$ = newRANGE($2, scalar($1), scalar($3)); }
| term ANDAND term /* $x && $y */
- { $$ = newLOGOP(OP_AND, 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP(OP_AND, 0, $1, $3); }
| term OROR term /* $x || $y */
- { $$ = newLOGOP(OP_OR, 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP(OP_OR, 0, $1, $3); }
| term DORDOR term /* $x // $y */
- { $$ = newLOGOP(OP_DOR, 0, $1, $3);
- TOKEN_GETMAD($2,$$,'o');
- }
+ { $$ = newLOGOP(OP_DOR, 0, $1, $3); }
| term MATCHOP term /* $x =~ /$y/ */
- { $$ = bind_match(IVAL($2), $1, $3);
- TOKEN_GETMAD($2,
- ($$->op_type == OP_NOT
- ? ((UNOP*)$$)->op_first : $$),
- '~');
- }
+ { $$ = bind_match($2, $1, $3); }
;
/* Unary operators and terms */
termunop : '-' term %prec UMINUS /* -$x */
- { $$ = newUNOP(OP_NEGATE, 0, scalar($2));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_NEGATE, 0, scalar($2)); }
| '+' term %prec UMINUS /* +$x */
- { $$ = IF_MAD(
- newUNOP(OP_NULL, 0, $2),
- $2
- );
- TOKEN_GETMAD($1,$$,'+');
- }
+ { $$ = $2; }
+
| '!' term /* !$x */
- { $$ = newUNOP(OP_NOT, 0, scalar($2));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_NOT, 0, scalar($2)); }
| '~' term /* ~$x */
- { $$ = newUNOP(OP_COMPLEMENT, 0, scalar($2));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_COMPLEMENT, 0, scalar($2)); }
| term POSTINC /* $x++ */
{ $$ = newUNOP(OP_POSTINC, 0,
- op_lvalue(scalar($1), OP_POSTINC));
- TOKEN_GETMAD($2,$$,'o');
- }
+ op_lvalue(scalar($1), OP_POSTINC)); }
| term POSTDEC /* $x-- */
{ $$ = newUNOP(OP_POSTDEC, 0,
- op_lvalue(scalar($1), OP_POSTDEC));
- TOKEN_GETMAD($2,$$,'o');
- }
+ op_lvalue(scalar($1), OP_POSTDEC));}
| term POSTJOIN /* implicit join after interpolated ->@ */
{ $$ = convert(OP_JOIN, 0,
op_append_elem(
@@ -1095,63 +795,36 @@ termunop : '-' term %prec UMINUS /* -$x */
)),
$1
));
- TOKEN_GETMAD($2,$$,'o');
}
| PREINC term /* ++$x */
{ $$ = newUNOP(OP_PREINC, 0,
- op_lvalue(scalar($2), OP_PREINC));
- TOKEN_GETMAD($1,$$,'o');
- }
+ op_lvalue(scalar($2), OP_PREINC)); }
| PREDEC term /* --$x */
{ $$ = newUNOP(OP_PREDEC, 0,
- op_lvalue(scalar($2), OP_PREDEC));
- TOKEN_GETMAD($1,$$,'o');
- }
+ op_lvalue(scalar($2), OP_PREDEC)); }
;
/* Constructors for anonymous data */
anonymous: '[' expr ']'
- { $$ = newANONLIST($2);
- TOKEN_GETMAD($1,$$,'[');
- TOKEN_GETMAD($3,$$,']');
- }
+ { $$ = newANONLIST($2); }
| '[' ']'
- { $$ = newANONLIST((OP*)NULL);
- TOKEN_GETMAD($1,$$,'[');
- TOKEN_GETMAD($2,$$,']');
- }
+ { $$ = newANONLIST((OP*)NULL);}
| HASHBRACK expr ';' '}' %prec '(' /* { foo => "Bar" } */
- { $$ = newANONHASH($2);
- TOKEN_GETMAD($1,$$,'{');
- TOKEN_GETMAD($3,$$,';');
- TOKEN_GETMAD($4,$$,'}');
- }
+ { $$ = newANONHASH($2); }
| HASHBRACK ';' '}' %prec '(' /* { } (';' by tokener) */
- { $$ = newANONHASH((OP*)NULL);
- TOKEN_GETMAD($1,$$,'{');
- TOKEN_GETMAD($2,$$,';');
- TOKEN_GETMAD($3,$$,'}');
- }
+ { $$ = newANONHASH((OP*)NULL); }
| ANONSUB startanonsub proto subattrlist realsubbody %prec '('
{ SvREFCNT_inc_simple_void(PL_compcv);
- $$ = newANONATTRSUB($2, $3, $4, $5);
- TOKEN_GETMAD($1,$$,'o');
- OP_GETMAD($3,$$,'s');
- OP_GETMAD($4,$$,'a');
- }
+ $$ = newANONATTRSUB($2, $3, $4, $5); }
;
/* Things called with "do" */
termdo : DO term %prec UNIOP /* do $filename */
- { $$ = dofile($2, IVAL($1));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = dofile($2, $1);}
| DO block %prec '(' /* do { code */
- { $$ = newUNOP(OP_NULL, OPf_SPECIAL, op_scope($2));
- TOKEN_GETMAD($1,$$,'D');
- }
+ { $$ = newUNOP(OP_NULL, OPf_SPECIAL, op_scope($2));}
;
term : termbinop
@@ -1159,32 +832,19 @@ term : termbinop
| anonymous
| termdo
| term '?' term ':' term
- { $$ = newCONDOP(0, $1, $3, $5);
- TOKEN_GETMAD($2,$$,'?');
- TOKEN_GETMAD($4,$$,':');
- }
+ { $$ = newCONDOP(0, $1, $3, $5); }
| REFGEN term /* \$x, \@y, \%z */
- { $$ = newUNOP(OP_REFGEN, 0, op_lvalue($2,OP_REFGEN));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_REFGEN, 0, op_lvalue($2,OP_REFGEN)); }
| myattrterm %prec UNIOP
{ $$ = $1; }
| LOCAL term %prec UNIOP
- { $$ = localize($2,IVAL($1));
- TOKEN_GETMAD($1,$$,'k');
- }
+ { $$ = localize($2,$1); }
| '(' expr ')'
- { $$ = sawparens(IF_MAD(newUNOP(OP_NULL,0,$2), $2));
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ { $$ = sawparens($2); }
| QWLIST
- { $$ = IF_MAD(newUNOP(OP_NULL,0,$1), $1); }
+ { $$ = $1; }
| '(' ')'
- { $$ = sawparens(newNULLLIST());
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($2,$$,')');
- }
+ { $$ = sawparens(newNULLLIST()); }
| scalar %prec '('
{ $$ = $1; }
| star %prec '('
@@ -1206,8 +866,6 @@ term : termbinop
if ($$ && $1)
$$->op_private |=
$1->op_private & OPpSLICEWARNING;
- TOKEN_GETMAD($2,$$,'[');
- TOKEN_GETMAD($4,$$,']');
}
| kvslice '[' expr ']' /* array key/value slice */
{ $$ = op_prepend_elem(OP_KVASLICE,
@@ -1218,8 +876,6 @@ term : termbinop
if ($$ && $1)
$$->op_private |=
$1->op_private & OPpSLICEWARNING;
- TOKEN_GETMAD($2,$$,'[');
- TOKEN_GETMAD($4,$$,']');
}
| sliceme '{' expr ';' '}' /* @hash{@keys} */
{ $$ = op_prepend_elem(OP_HSLICE,
@@ -1231,9 +887,6 @@ term : termbinop
$$->op_private |=
$1->op_private & OPpSLICEWARNING;
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'{');
- TOKEN_GETMAD($4,$$,';');
- TOKEN_GETMAD($5,$$,'}');
}
| kvslice '{' expr ';' '}' /* %hash{@keys} */
{ $$ = op_prepend_elem(OP_KVHSLICE,
@@ -1245,9 +898,6 @@ term : termbinop
$$->op_private |=
$1->op_private & OPpSLICEWARNING;
PL_parser->expect = XOPERATOR;
- TOKEN_GETMAD($2,$$,'{');
- TOKEN_GETMAD($4,$$,';');
- TOKEN_GETMAD($5,$$,'}');
}
| THING %prec '('
{ $$ = $1; }
@@ -1255,121 +905,65 @@ term : termbinop
{ $$ = newUNOP(OP_ENTERSUB, 0, scalar($1)); }
| amper '(' ')' /* &foo() or foo() */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1));
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($3,$$,')');
}
| amper '(' expr ')' /* &foo(@args) or foo(@args) */
{
$$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, $3, scalar($1)));
- DO_MAD({
- OP* op = $$;
- if (op->op_type == OP_CONST) { /* defeat const fold */
- op = (OP*)op->op_madprop->mad_val;
- }
- token_getmad($2,op,'(');
- token_getmad($4,op,')');
- });
}
| NOAMP subname optlistexpr /* foo @args (no parens) */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, $3, scalar($2)));
- TOKEN_GETMAD($1,$$,'o');
}
| term ARROW '$' '*'
- { $$ = newSVREF($1);
- TOKEN_GETMAD($3,$$,'$');
- }
+ { $$ = newSVREF($1); }
| term ARROW '@' '*'
- { $$ = newAVREF($1);
- TOKEN_GETMAD($3,$$,'@');
- }
+ { $$ = newAVREF($1); }
| term ARROW '%' '*'
- { $$ = newHVREF($1);
- TOKEN_GETMAD($3,$$,'%');
- }
+ { $$ = newHVREF($1); }
| term ARROW '&' '*'
{ $$ = newUNOP(OP_ENTERSUB, 0,
- scalar(newCVREF(IVAL($3),$1)));
- TOKEN_GETMAD($3,$$,'&');
- }
+ scalar(newCVREF($3,$1))); }
| term ARROW '*' '*' %prec '('
- { $$ = newGVREF(0,$1);
- TOKEN_GETMAD($3,$$,'*');
- }
+ { $$ = newGVREF(0,$1); }
| LOOPEX /* loop exiting command (goto, last, dump, etc) */
- { $$ = newOP(IVAL($1), OPf_SPECIAL);
- PL_hints |= HINT_BLOCK_SCOPE;
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newOP($1, OPf_SPECIAL);
+ PL_hints |= HINT_BLOCK_SCOPE; }
| LOOPEX term
- { $$ = newLOOPEX(IVAL($1),$2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newLOOPEX($1,$2); }
| NOTOP listexpr /* not $foo */
- { $$ = newUNOP(OP_NOT, 0, scalar($2));
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_NOT, 0, scalar($2)); }
| UNIOP /* Unary op, $_ implied */
- { $$ = newOP(IVAL($1), 0);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newOP($1, 0); }
| UNIOP block /* eval { foo }* */
- { $$ = newUNOP(IVAL($1), 0, $2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP($1, 0, $2); }
| UNIOP term /* Unary op */
- { $$ = newUNOP(IVAL($1), 0, $2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP($1, 0, $2); }
| REQUIRE /* require, $_ implied */
- { $$ = newOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0); }
| REQUIRE term /* require Foo */
- { $$ = newUNOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0, $2);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newUNOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0, $2); }
| UNIOPSUB
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); }
| UNIOPSUB term /* Sub treated as unop */
{ $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, $2, scalar($1))); }
| FUNC0 /* Nullary operator */
- { $$ = newOP(IVAL($1), 0);
- TOKEN_GETMAD($1,$$,'o');
- }
+ { $$ = newOP($1, 0); }
| FUNC0 '(' ')'
- { $$ = newOP(IVAL($1), 0);
- TOKEN_GETMAD($1,$$,'o');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ { $$ = newOP($1, 0);}
| FUNC0OP /* Same as above, but op created in toke.c */
{ $$ = $1; }
| FUNC0OP '(' ')'
- { $$ = $1;
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ { $$ = $1; }
| FUNC0SUB /* Sub treated as nullop */
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- scalar($1)); }
+ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); }
| FUNC1 '(' ')' /* not () */
- { $$ = (IVAL($1) == OP_NOT)
- ? newUNOP(IVAL($1), 0, newSVOP(OP_CONST, 0, newSViv(0)))
- : newOP(IVAL($1), OPf_SPECIAL);
-
- TOKEN_GETMAD($1,$$,'o');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ { $$ = ($1 == OP_NOT)
+ ? newUNOP($1, 0, newSVOP(OP_CONST, 0, newSViv(0)))
+ : newOP($1, OPf_SPECIAL); }
| FUNC1 '(' expr ')' /* not($foo) */
- { $$ = newUNOP(IVAL($1), 0, $3);
- TOKEN_GETMAD($1,$$,'o');
- TOKEN_GETMAD($2,$$,'(');
- TOKEN_GETMAD($4,$$,')');
- }
+ { $$ = newUNOP($1, 0, $3); }
| PMFUNC /* m//, s///, qr//, tr/// */
{
if ( $1->op_type != OP_TRANS
@@ -1382,47 +976,30 @@ term : termbinop
$<ival>$ = 0;
}
'(' listexpr ')'
- { $$ = pmruntime($1, $4, 1, $<ival>2);
- TOKEN_GETMAD($3,$$,'(');
- TOKEN_GETMAD($5,$$,')');
- }
+ { $$ = pmruntime($1, $4, 1, $<ival>2); }
| WORD
| listop
| YADAYADA
{
$$ = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
- TOKEN_GETMAD($1,$$,'X');
}
| PLUGEXPR
;
/* "my" declarations, with optional attributes */
myattrterm: MY myterm myattrlist
- { $$ = my_attrs($2,$3);
- DO_MAD(
- token_getmad($1,$$,'d');
- append_madprops($3->op_madprop, $$, 'a');
- $3->op_madprop = 0;
- );
- }
+ { $$ = my_attrs($2,$3); }
| MY myterm
- { $$ = localize($2,IVAL($1));
- TOKEN_GETMAD($1,$$,'d');
- }
+ { $$ = localize($2,$1); }
;
/* Things that can be "my"'d */
myterm : '(' expr ')'
- { $$ = sawparens($2);
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($3,$$,')');
- }
+ { $$ = sawparens($2); }
| '(' ')'
- { $$ = sawparens(newNULLLIST());
- TOKEN_GETMAD($1,$$,'(');
- TOKEN_GETMAD($2,$$,')');
- }
+ { $$ = sawparens(newNULLLIST()); }
+
| scalar %prec '('
{ $$ = $1; }
| hsh %prec '('
@@ -1451,66 +1028,48 @@ my_scalar: scalar
;
amper : '&' indirob
- { $$ = newCVREF(IVAL($1),$2);
- TOKEN_GETMAD($1,$$,'&');
- }
+ { $$ = newCVREF($1,$2); }
;
scalar : '$' indirob
- { $$ = newSVREF($2);
- TOKEN_GETMAD($1,$$,'$');
- }
+ { $$ = newSVREF($2); }
;
ary : '@' indirob
{ $$ = newAVREF($2);
- if ($$) $$->op_private |= IVAL($1);
- TOKEN_GETMAD($1,$$,'@');
+ if ($$) $$->op_private |= $1;
}
;
hsh : '%' indirob
{ $$ = newHVREF($2);
- if ($$) $$->op_private |= IVAL($1);
- TOKEN_GETMAD($1,$$,'%');
+ if ($$) $$->op_private |= $1;
}
;
arylen : DOLSHARP indirob
- { $$ = newAVREF($2);
- TOKEN_GETMAD($1,$$,'l');
- }
+ { $$ = newAVREF($2); }
| term ARROW DOLSHARP '*'
- { $$ = newAVREF($1);
- TOKEN_GETMAD($3,$$,'l');
- }
+ { $$ = newAVREF($1); }
;
star : '*' indirob
- { $$ = newGVREF(0,$2);
- TOKEN_GETMAD($1,$$,'*');
- }
+ { $$ = newGVREF(0,$2); }
;
sliceme : ary
| term ARROW '@'
- { $$ = newAVREF($1);
- TOKEN_GETMAD($3,$$,'@');
- }
+ { $$ = newAVREF($1); }
;
kvslice : hsh
| term ARROW '%'
- { $$ = newHVREF($1);
- TOKEN_GETMAD($3,$$,'@');
- }
+ { $$ = newHVREF($1); }
;
gelem : star
| term ARROW '*'
- { $$ = newGVREF(0,$1);
- TOKEN_GETMAD($3,$$,'*');
- }
+ { $$ = newGVREF(0,$1); }
;
/* Indirect objects */
diff --git a/pp_ctl.c b/pp_ctl.c
index 96a7d2a7b8..ab729b0334 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3164,13 +3164,7 @@ PP(pp_exit)
#endif
}
PL_exit_flags |= PERL_EXIT_EXPECTED;
-#ifdef PERL_MAD
- /* KLUDGE: disable exit 0 in BEGIN blocks when we're just compiling */
- if (anum || !(PL_minus_c && PL_madskills))
- my_exit(anum);
-#else
my_exit(anum);
-#endif
PUSHs(&PL_sv_undef);
RETURN;
}
@@ -3405,8 +3399,7 @@ S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
PL_op = NULL; /* avoid PL_op and PL_curpad referring to different CVs */
- if (!PL_madskills)
- SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
+ SAVEMORTALIZESV(evalcv); /* must remain until end of current statement */
/* make sure we compile in the right package */
@@ -3424,10 +3417,6 @@ S_doeval(pTHX_ int gimme, CV* outside, U32 seq, HV *hh)
PL_unitcheckav = newAV();
SAVEFREESV(PL_unitcheckav);
-#ifdef PERL_MAD
- SAVEBOOL(PL_madskills);
- PL_madskills = 0;
-#endif
ENTER_with_name("evalcomp");
SAVESPTR(PL_compcv);
diff --git a/proto.h b/proto.h
index 8dde508138..35325941a1 100644
--- a/proto.h
+++ b/proto.h
@@ -2773,6 +2773,7 @@ PERL_CALLCONV OP* Perl_newCVREF(pTHX_ I32 flags, OP* o)
__attribute__malloc__
__attribute__warn_unused_result__;
+PERL_CALLCONV void Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
PERL_CALLCONV OP* Perl_newFOROP(pTHX_ I32 flags, OP* sv, OP* expr, OP* block, OP* cont)
__attribute__malloc__
__attribute__warn_unused_result__
@@ -3130,6 +3131,11 @@ PERL_CALLCONV void Perl_pack_cat(pTHX_ SV *cat, const char *pat, const char *pat
#define PERL_ARGS_ASSERT_PACK_CAT \
assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist); assert(next_in_list)
+PERL_CALLCONV void Perl_package(pTHX_ OP* o)
+ __attribute__nonnull__(pTHX_1);
+#define PERL_ARGS_ASSERT_PACKAGE \
+ assert(o)
+
PERL_CALLCONV void Perl_package_version(pTHX_ OP* v)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_PACKAGE_VERSION \
@@ -4863,6 +4869,11 @@ PERL_CALLCONV UV Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *r
#define PERL_ARGS_ASSERT_UTF8N_TO_UVUNI \
assert(s)
+PERL_CALLCONV void Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg)
+ __attribute__nonnull__(pTHX_4);
+#define PERL_ARGS_ASSERT_UTILIZE \
+ assert(idop)
+
/* PERL_CALLCONV U8* uvchr_to_utf8(pTHX_ U8 *d, UV uv)
__attribute__nonnull__(pTHX_1); */
@@ -5099,19 +5110,6 @@ PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ int *index, size_t size)
# endif
#endif
-#if !(defined(PERL_MAD))
-PERL_CALLCONV void Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
-PERL_CALLCONV void Perl_package(pTHX_ OP* o)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_PACKAGE \
- assert(o)
-
-PERL_CALLCONV void Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg)
- __attribute__nonnull__(pTHX_4);
-#define PERL_ARGS_ASSERT_UTILIZE \
- assert(idop)
-
-#endif
#if !(defined(WIN32))
/* PERL_CALLCONV char* my_setlocale(pTHX_ int category, const char* locale)
__attribute__pure__; */
@@ -5844,15 +5842,6 @@ STATIC SV* S_pm_description(pTHX_ const PMOP *pm)
assert(pm)
STATIC UV S_sequence_num(pTHX_ const OP *o);
-# if defined(PERL_MAD)
-STATIC void S_xmldump_attr(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
- __attribute__format__(__printf__,pTHX_3,pTHX_4)
- __attribute__nonnull__(pTHX_2)
- __attribute__nonnull__(pTHX_3);
-#define PERL_ARGS_ASSERT_XMLDUMP_ATTR \
- assert(file); assert(pat)
-
-# endif
#endif
#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C)
PERL_CALLCONV void Perl_hv_kill_backrefs(pTHX_ HV *hv)
@@ -7692,25 +7681,6 @@ STATIC int S_yywarn(pTHX_ const char *const s, U32 flags)
#define PERL_ARGS_ASSERT_YYWARN \
assert(s)
-# if defined(PERL_MAD)
-STATIC void S_curmad(pTHX_ char slot, SV *sv);
-STATIC char* S_skipspace0(pTHX_ char *s)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_SKIPSPACE0 \
- assert(s)
-
-STATIC char* S_skipspace1(pTHX_ char *s)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_SKIPSPACE1 \
- assert(s)
-
-STATIC char* S_skipspace2(pTHX_ char *s, SV **sv)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_SKIPSPACE2 \
- assert(s)
-
-STATIC void S_start_force(pTHX_ int where);
-# endif
#endif
#if defined(PERL_IN_UNIVERSAL_C)
STATIC bool S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
@@ -7793,129 +7763,6 @@ STATIC void S_mem_log_common(enum mem_log_type mlt, const UV n, const UV typesiz
# endif
#endif
-#if defined(PERL_MAD)
-PERL_CALLCONV void Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot);
-PERL_CALLCONV void Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot);
-PERL_CALLCONV void Perl_do_op_xmldump(pTHX_ I32 level, PerlIO *file, const OP *o)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_DO_OP_XMLDUMP \
- assert(file)
-
-PERL_CALLCONV void Perl_do_pmop_xmldump(pTHX_ I32 level, PerlIO *file, const PMOP *pm)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_DO_PMOP_XMLDUMP \
- assert(file)
-
-PERL_CALLCONV void Perl_mad_free(pTHX_ MADPROP* mp);
-PERL_CALLCONV int Perl_madlex(pTHX);
-PERL_CALLCONV int Perl_madparse(pTHX_ int gramtype);
-PERL_CALLCONV OP* Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
-PERL_CALLCONV MADPROP* Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen);
-PERL_CALLCONV MADPROP* Perl_newMADsv(pTHX_ char key, SV* sv)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_NEWMADSV \
- assert(sv)
-
-PERL_CALLCONV TOKEN* Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop);
-PERL_CALLCONV void Perl_op_getmad(pTHX_ OP* from, OP* o, char slot);
-PERL_CALLCONV void Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot);
-PERL_CALLCONV void Perl_op_xmldump(pTHX_ const OP *o)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_OP_XMLDUMP \
- assert(o)
-
-PERL_CALLCONV OP* Perl_package(pTHX_ OP* o)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_PACKAGE \
- assert(o)
-
-PERL_CALLCONV void Perl_pad_peg(const char* s)
- __attribute__nonnull__(1);
-#define PERL_ARGS_ASSERT_PAD_PEG \
- assert(s)
-
-PERL_CALLCONV void Perl_pmop_xmldump(pTHX_ const PMOP* pm);
-PERL_CALLCONV void Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot);
-PERL_CALLCONV char* Perl_sv_catxmlpv(pTHX_ SV *dsv, const char *pv, int utf8)
- __attribute__nonnull__(pTHX_1)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_SV_CATXMLPV \
- assert(dsv); assert(pv)
-
-PERL_CALLCONV char* Perl_sv_catxmlpvn(pTHX_ SV *dsv, const char *pv, STRLEN len, int utf8)
- __attribute__nonnull__(pTHX_1)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_SV_CATXMLPVN \
- assert(dsv); assert(pv)
-
-PERL_CALLCONV char* Perl_sv_catxmlsv(pTHX_ SV *dsv, SV *ssv)
- __attribute__nonnull__(pTHX_1)
- __attribute__nonnull__(pTHX_2);
-#define PERL_ARGS_ASSERT_SV_CATXMLSV \
- assert(dsv); assert(ssv)
-
-PERL_CALLCONV char* Perl_sv_xmlpeek(pTHX_ SV* sv)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_SV_XMLPEEK \
- assert(sv)
-
-PERL_CALLCONV void Perl_token_free(pTHX_ TOKEN *tk)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_TOKEN_FREE \
- assert(tk)
-
-PERL_CALLCONV void Perl_token_getmad(pTHX_ TOKEN *tk, OP *o, char slot)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_TOKEN_GETMAD \
- assert(tk)
-
-PERL_CALLCONV OP * Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg)
- __attribute__nonnull__(pTHX_4);
-#define PERL_ARGS_ASSERT_UTILIZE \
- assert(idop)
-
-PERL_CALLCONV void Perl_xmldump_all(pTHX);
-PERL_CALLCONV void Perl_xmldump_all_perl(pTHX_ bool justperl);
-PERL_CALLCONV void Perl_xmldump_eval(pTHX);
-PERL_CALLCONV void Perl_xmldump_form(pTHX_ const GV* gv)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_XMLDUMP_FORM \
- assert(gv)
-
-PERL_CALLCONV void Perl_xmldump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
- __attribute__format__(__printf__,pTHX_3,pTHX_4)
- __attribute__nonnull__(pTHX_2)
- __attribute__nonnull__(pTHX_3);
-#define PERL_ARGS_ASSERT_XMLDUMP_INDENT \
- assert(file); assert(pat)
-
-PERL_CALLCONV void Perl_xmldump_packsubs(pTHX_ const HV* stash)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS \
- assert(stash)
-
-PERL_CALLCONV void Perl_xmldump_packsubs_perl(pTHX_ const HV* stash, bool justperl)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS_PERL \
- assert(stash)
-
-PERL_CALLCONV void Perl_xmldump_sub(pTHX_ const GV* gv)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_XMLDUMP_SUB \
- assert(gv)
-
-PERL_CALLCONV void Perl_xmldump_sub_perl(pTHX_ const GV* gv, bool justperl)
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_XMLDUMP_SUB_PERL \
- assert(gv)
-
-PERL_CALLCONV void Perl_xmldump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args)
- __attribute__nonnull__(pTHX_2)
- __attribute__nonnull__(pTHX_3);
-#define PERL_ARGS_ASSERT_XMLDUMP_VINDENT \
- assert(file); assert(pat)
-
-#endif
#if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
STATIC void S_pidgone(pTHX_ Pid_t pid, int status);
#endif
diff --git a/regen_perly.pl b/regen_perly.pl
index b96275639c..bf484bbed6 100644
--- a/regen_perly.pl
+++ b/regen_perly.pl
@@ -272,7 +272,7 @@ sub make_type_tab {
my $default_token;
open my $fh, '<', $y_file or die "Can't open $y_file: $!\n";
while (<$fh>) {
- if (/(\$\d+)\s*=/) {
+ if (/(\$\d+)\s*=[^=]/) {
warn "$y_file:$.: dangerous assignment to $1: $_";
}
diff --git a/sv.c b/sv.c
index b6409a08d2..05f26d76e0 100644
--- a/sv.c
+++ b/sv.c
@@ -11928,27 +11928,9 @@ Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
-#ifdef PERL_MAD
- parser->endwhite = proto->endwhite;
- parser->faketokens = proto->faketokens;
- parser->lasttoke = proto->lasttoke;
- parser->nextwhite = proto->nextwhite;
- parser->realtokenstart = proto->realtokenstart;
- parser->skipwhite = proto->skipwhite;
- parser->thisclose = proto->thisclose;
- parser->thismad = proto->thismad;
- parser->thisopen = proto->thisopen;
- parser->thisstuff = proto->thisstuff;
- parser->thistoken = proto->thistoken;
- parser->thiswhite = proto->thiswhite;
-
- Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
- parser->curforce = proto->curforce;
-#else
Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
Copy(proto->nexttype, parser->nexttype, 5, I32);
parser->nexttoke = proto->nexttoke;
-#endif
/* XXX should clone saved_curcop here, but we aren't passed
* proto_perl; so do it in perl_clone_using instead */
diff --git a/t/run/mad.t b/t/run/mad.t
deleted file mode 100644
index 83023c53ef..0000000000
--- a/t/run/mad.t
+++ /dev/null
@@ -1,46 +0,0 @@
-#!./perl
-#
-# Tests for Perl mad environment
-#
-# $PERL_XMLDUMP
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- require './test.pl';
- skip_all_without_config('mad');
-}
-
-use File::Path;
-use File::Spec;
-
-my $tempdir = tempfile;
-
-mkdir $tempdir, 0700 or die "Can't mkdir '$tempdir': $!";
-unshift @INC, '../../lib';
-my $cleanup = 1;
-
-END {
- if ($cleanup) {
- rmtree($tempdir);
- }
-}
-
-plan tests => 4;
-
-{
- delete local $ENV{$_} for keys %ENV;
- my $fn = File::Spec->catfile(File::Spec->curdir(), "withoutT.xml");
- $ENV{PERL_XMLDUMP} = $fn;
- fresh_perl_is('print q/hello/', '', {}, 'mad without -T');
- ok(-f $fn, "xml file created without -T as expected");
-}
-
-{
- delete local $ENV{$_} for keys %ENV;
- my $fn = File::Spec->catfile(File::Spec->curdir(), "withT.xml");
- fresh_perl_is('print q/hello/', 'hello', { switches => [ "-T" ] },
- 'mad with -T');
- ok(!-e $fn, "no xml file created with -T as expected");
-}
diff --git a/toke.c b/toke.c
index 4f1d7b3fc4..4d2254903e 100644
--- a/toke.c
+++ b/toke.c
@@ -87,37 +87,13 @@ Individual members of C<PL_parser> have their own documentation.
#define PL_multi_end (PL_parser->multi_end)
#define PL_error_count (PL_parser->error_count)
-#ifdef PERL_MAD
-# define PL_endwhite (PL_parser->endwhite)
-# define PL_faketokens (PL_parser->faketokens)
-# define PL_lasttoke (PL_parser->lasttoke)
-# define PL_nextwhite (PL_parser->nextwhite)
-# define PL_realtokenstart (PL_parser->realtokenstart)
-# define PL_skipwhite (PL_parser->skipwhite)
-# define PL_thisclose (PL_parser->thisclose)
-# define PL_thismad (PL_parser->thismad)
-# define PL_thisopen (PL_parser->thisopen)
-# define PL_thisstuff (PL_parser->thisstuff)
-# define PL_thistoken (PL_parser->thistoken)
-# define PL_thiswhite (PL_parser->thiswhite)
-# define PL_thiswhite (PL_parser->thiswhite)
-# define PL_nexttoke (PL_parser->nexttoke)
-# define PL_curforce (PL_parser->curforce)
-#else
# define PL_nexttoke (PL_parser->nexttoke)
# define PL_nexttype (PL_parser->nexttype)
# define PL_nextval (PL_parser->nextval)
-#endif
static const char* const ident_too_long = "Identifier too long";
-#ifdef PERL_MAD
-# define CURMAD(slot,sv) if (PL_madskills) { curmad(slot,sv); sv = 0; }
-# define NEXTVAL_NEXTTOKE PL_nexttoke[PL_curforce].next_val
-#else
-# define CURMAD(slot,sv)
# define NEXTVAL_NEXTTOKE PL_nextval[PL_nexttoke]
-#endif
#define XENUMMASK 0x3f
#define XFAKEEOF 0x40
@@ -187,17 +163,10 @@ static const char* const lex_state_names[] = {
#define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? CopLINE(PL_curcop) : PL_copline))
-#ifdef PERL_MAD
-# define SKIPSPACE0(s) skipspace0(s)
-# define SKIPSPACE1(s) skipspace1(s)
-# define SKIPSPACE2(s,tsv) skipspace2(s,&tsv)
-# define PEEKSPACE(s) skipspace2(s,0)
-#else
# define SKIPSPACE0(s) skipspace(s)
# define SKIPSPACE1(s) skipspace(s)
# define SKIPSPACE2(s,tsv) skipspace(s)
# define PEEKSPACE(s) skipspace(s)
-#endif
/*
* Convenience functions to return different tokens and prime the
@@ -374,7 +343,6 @@ static struct debug_tokens {
{ OROP, TOKENTYPE_IVAL, "OROP" },
{ OROR, TOKENTYPE_NONE, "OROR" },
{ PACKAGE, TOKENTYPE_NONE, "PACKAGE" },
- { PEG, TOKENTYPE_NONE, "PEG" },
{ PLUGEXPR, TOKENTYPE_OPVAL, "PLUGEXPR" },
{ PLUGSTMT, TOKENTYPE_OPVAL, "PLUGSTMT" },
{ PMFUNC, TOKENTYPE_OPVAL, "PMFUNC" },
@@ -728,11 +696,7 @@ Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, U32 flags)
/* initialise lexer state */
-#ifdef PERL_MAD
- parser->curforce = -1;
-#else
parser->nexttoke = 0;
-#endif
parser->error_count = oparser ? oparser->error_count : 0;
parser->copline = parser->preambling = NOLINE;
parser->lex_state = LEX_NORMAL;
@@ -807,23 +771,9 @@ Perl_parser_free(pTHX_ const yy_parser *parser)
void
Perl_parser_free_nexttoke_ops(pTHX_ yy_parser *parser, OPSLAB *slab)
{
-#ifdef PERL_MAD
- I32 nexttoke = parser->lasttoke;
-#else
I32 nexttoke = parser->nexttoke;
-#endif
PERL_ARGS_ASSERT_PARSER_FREE_NEXTTOKE_OPS;
while (nexttoke--) {
-#ifdef PERL_MAD
- if (S_is_opval_token(parser->nexttoke[nexttoke].next_type
- & 0xffff)
- && parser->nexttoke[nexttoke].next_val.opval
- && parser->nexttoke[nexttoke].next_val.opval->op_slabbed
- && OpSLAB(parser->nexttoke[nexttoke].next_val.opval) == slab) {
- op_free(parser->nexttoke[nexttoke].next_val.opval);
- parser->nexttoke[nexttoke].next_val.opval = NULL;
- }
-#else
if (S_is_opval_token(parser->nexttype[nexttoke] & 0xffff)
&& parser->nextval[nexttoke].opval
&& parser->nextval[nexttoke].opval->op_slabbed
@@ -831,7 +781,6 @@ Perl_parser_free_nexttoke_ops(pTHX_ yy_parser *parser, OPSLAB *slab)
op_free(parser->nextval[nexttoke].opval);
parser->nextval[nexttoke].opval = NULL;
}
-#endif
}
}
@@ -1358,10 +1307,6 @@ Perl_lex_next_chunk(pTHX_ U32 flags)
(void)PerlIO_close(PL_parser->rsfp);
PL_parser->rsfp = NULL;
PL_parser->in_pod = PL_parser->filtered = 0;
-#ifdef PERL_MAD
- if (PL_madskills && !PL_in_eval && (PL_minus_p || PL_minus_n))
- PL_faketokens = 1;
-#endif
if (!PL_in_eval && PL_minus_p) {
sv_catpvs(linestr,
/*{*/";}continue{print or die qq(-p destination: $!\\n);}");
@@ -1535,14 +1480,6 @@ Perl_lex_read_space(pTHX_ U32 flags)
bool need_incline = 0;
if (flags & ~(LEX_KEEP_PREVIOUS|LEX_NO_NEXT_CHUNK|LEX_NO_INCLINE))
Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_read_space");
-#ifdef PERL_MAD
- if (PL_skipwhite) {
- sv_free(PL_skipwhite);
- PL_skipwhite = NULL;
- }
- if (PL_madskills)
- PL_skipwhite = newSVpvs("");
-#endif /* PERL_MAD */
s = PL_parser->bufptr;
bufend = PL_parser->bufend;
while (1) {
@@ -1565,10 +1502,6 @@ Perl_lex_read_space(pTHX_ U32 flags)
} else if (c == 0 && s == bufend) {
bool got_more;
line_t l;
-#ifdef PERL_MAD
- if (PL_madskills)
- sv_catpvn(PL_skipwhite, PL_parser->bufptr, s-PL_parser->bufptr);
-#endif /* PERL_MAD */
if (flags & LEX_NO_NEXT_CHUNK)
break;
PL_parser->bufptr = s;
@@ -1588,10 +1521,6 @@ Perl_lex_read_space(pTHX_ U32 flags)
break;
}
}
-#ifdef PERL_MAD
- if (PL_madskills)
- sv_catpvn(PL_skipwhite, PL_parser->bufptr, s-PL_parser->bufptr);
-#endif /* PERL_MAD */
PL_parser->bufptr = s;
}
@@ -1828,85 +1757,6 @@ S_incline(pTHX_ const char *s)
#define skipspace(s) skipspace_flags(s, 0)
-#ifdef PERL_MAD
-/* skip space before PL_thistoken */
-
-STATIC char *
-S_skipspace0(pTHX_ char *s)
-{
- PERL_ARGS_ASSERT_SKIPSPACE0;
-
- s = skipspace(s);
- if (!PL_madskills)
- return s;
- if (PL_skipwhite) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- sv_catsv(PL_thiswhite, PL_skipwhite);
- sv_free(PL_skipwhite);
- PL_skipwhite = 0;
- }
- PL_realtokenstart = s - SvPVX(PL_linestr);
- return s;
-}
-
-/* skip space after PL_thistoken */
-
-STATIC char *
-S_skipspace1(pTHX_ char *s)
-{
- const char *start = s;
- I32 startoff = start - SvPVX(PL_linestr);
-
- PERL_ARGS_ASSERT_SKIPSPACE1;
-
- s = skipspace(s);
- if (!PL_madskills)
- return s;
- start = SvPVX(PL_linestr) + startoff;
- if (!PL_thistoken && PL_realtokenstart >= 0) {
- const char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
- PL_thistoken = newSVpvn(tstart, start - tstart);
- }
- PL_realtokenstart = -1;
- if (PL_skipwhite) {
- if (!PL_nextwhite)
- PL_nextwhite = newSVpvs("");
- sv_catsv(PL_nextwhite, PL_skipwhite);
- sv_free(PL_skipwhite);
- PL_skipwhite = 0;
- }
- return s;
-}
-
-STATIC char *
-S_skipspace2(pTHX_ char *s, SV **svp)
-{
- char *start;
- const I32 startoff = s - SvPVX(PL_linestr);
-
- PERL_ARGS_ASSERT_SKIPSPACE2;
-
- s = skipspace(s);
- if (!PL_madskills || !svp)
- return s;
- start = SvPVX(PL_linestr) + startoff;
- if (!PL_thistoken && PL_realtokenstart >= 0) {
- char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
- PL_thistoken = newSVpvn(tstart, start - tstart);
- PL_realtokenstart = -1;
- }
- if (PL_skipwhite) {
- if (!*svp)
- *svp = newSVpvs("");
- sv_setsv(*svp, PL_skipwhite);
- sv_free(PL_skipwhite);
- PL_skipwhite = 0;
- }
-
- return s;
-}
-#endif
STATIC void
S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len)
@@ -1942,16 +1792,7 @@ S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len)
STATIC char *
S_skipspace_flags(pTHX_ char *s, U32 flags)
{
-#ifdef PERL_MAD
- char *start = s;
-#endif /* PERL_MAD */
PERL_ARGS_ASSERT_SKIPSPACE_FLAGS;
-#ifdef PERL_MAD
- if (PL_skipwhite) {
- sv_free(PL_skipwhite);
- PL_skipwhite = NULL;
- }
-#endif /* PERL_MAD */
if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
while (s < PL_bufend && SPACE_OR_TAB(*s))
s++;
@@ -1967,10 +1808,6 @@ S_skipspace_flags(pTHX_ char *s, U32 flags)
PL_bufptr = PL_linestart;
return s;
}
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_skipwhite = newSVpvn(start, s-start);
-#endif /* PERL_MAD */
return s;
}
@@ -2033,13 +1870,8 @@ S_lop(pTHX_ I32 f, int x, char *s)
PL_bufptr = s;
PL_last_lop = PL_oldbufptr;
PL_last_lop_op = (OPCODE)f;
-#ifdef PERL_MAD
- if (PL_lasttoke)
- goto lstop;
-#else
if (PL_nexttoke)
goto lstop;
-#endif
if (*s == '(')
return REPORT(FUNC);
s = PEEKSPACE(s);
@@ -2053,83 +1885,13 @@ S_lop(pTHX_ I32 f, int x, char *s)
}
}
-#ifdef PERL_MAD
- /*
- * S_start_force
- * Sets up for an eventual force_next(). start_force(0) basically does
- * an unshift, while start_force(-1) does a push. yylex removes items
- * on the "pop" end.
- */
-
-STATIC void
-S_start_force(pTHX_ int where)
-{
- int i;
-
- if (where < 0) /* so people can duplicate start_force(PL_curforce) */
- where = PL_lasttoke;
- assert(PL_curforce < 0 || PL_curforce == where);
- if (PL_curforce != where) {
- for (i = PL_lasttoke; i > where; --i) {
- PL_nexttoke[i] = PL_nexttoke[i-1];
- }
- PL_lasttoke++;
- }
- if (PL_curforce < 0) /* in case of duplicate start_force() */
- Zero(&PL_nexttoke[where], 1, NEXTTOKE);
- PL_curforce = where;
- if (PL_nextwhite) {
- if (PL_madskills)
- curmad('^', newSVpvs(""));
- CURMAD('_', PL_nextwhite);
- }
-}
-
-STATIC void
-S_curmad(pTHX_ char slot, SV *sv)
-{
- MADPROP **where;
-
- if (!sv)
- return;
- if (PL_curforce < 0)
- where = &PL_thismad;
- else
- where = &PL_nexttoke[PL_curforce].next_mad;
-
- if (PL_faketokens)
- sv_setpvs(sv, "");
- else {
- if (!IN_BYTES) {
- if (UTF && is_utf8_string((U8*)SvPVX(sv), SvCUR(sv)))
- SvUTF8_on(sv);
- else if (PL_encoding) {
- sv_recode_to_utf8(sv, PL_encoding);
- }
- }
- }
-
- /* keep a slot open for the head of the list? */
- if (slot != '_' && *where && (*where)->mad_key == '^') {
- (*where)->mad_key = slot;
- sv_free(MUTABLE_SV(((*where)->mad_val)));
- (*where)->mad_val = (void*)sv;
- }
- else
- addmad(newMADsv(slot, sv), where, 0);
-}
-#else
-# define start_force(where) NOOP
-# define curmad(slot, sv) NOOP
-#endif
-
/*
* S_force_next
* When the lexer realizes it knows the next token (for instance,
* it is reordering tokens for the parser) then it can call S_force_next
* to know what token to return the next time the lexer is called. Caller
- * will need to set PL_nextval[] (or PL_nexttoke[].next_val with PERL_MAD),
- * and possibly PL_expect to ensure the lexer handles the token correctly.
+ * will need to set PL_nextval[] and possibly PL_expect to ensure
+ * the lexer handles the token correctly.
*/
STATIC void
@@ -2142,16 +1904,6 @@ S_force_next(pTHX_ I32 type)
tokereport(type, &NEXTVAL_NEXTTOKE);
}
#endif
-#ifdef PERL_MAD
- if (PL_curforce < 0)
- start_force(PL_lasttoke);
- PL_nexttoke[PL_curforce].next_type = type;
- if (PL_lex_state != LEX_KNOWNEXT)
- PL_lex_defer = PL_lex_state;
- PL_lex_state = LEX_KNOWNEXT;
- PL_lex_expect = PL_expect;
- PL_curforce = -1;
-#else
PL_nexttype[PL_nexttoke] = type;
PL_nexttoke++;
if (PL_lex_state != LEX_KNOWNEXT) {
@@ -2159,7 +1911,6 @@ S_force_next(pTHX_ I32 type)
PL_lex_expect = PL_expect;
PL_lex_state = LEX_KNOWNEXT;
}
-#endif
}
/*
@@ -2182,10 +1933,8 @@ S_postderef(pTHX_ int const funny, char const next)
if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets) {
assert('@' == funny || '$' == funny || DOLSHARP == funny);
PL_lex_state = LEX_INTERPEND;
- start_force(PL_curforce);
force_next(POSTJOIN);
}
- start_force(PL_curforce);
force_next(next);
PL_bufptr+=2;
}
@@ -2205,7 +1954,6 @@ Perl_yyunlex(pTHX)
int yyc = PL_parser->yychar;
if (yyc != YYEMPTY) {
if (yyc) {
- start_force(-1);
NEXTVAL_NEXTTOKE = PL_parser->yylval;
if (yyc == '{'/*}*/ || yyc == HASHBRACK || yyc == '['/*]*/) {
PL_lex_allbrackets--;
@@ -2272,9 +2020,6 @@ S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
if (keyword(s2, len, 0))
return start;
}
- start_force(PL_curforce);
- if (PL_madskills)
- curmad('X', newSVpvn(start,s-start));
if (token == METHOD) {
s = SKIPSPACE1(s);
if (*s == '(')
@@ -2283,8 +2028,6 @@ S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
PL_expect = XOPERATOR;
}
}
- if (PL_madskills)
- curmad('g', newSVpvs( "forced" ));
NEXTVAL_NEXTTOKE.opval
= (OP*)newSVOP(OP_CONST,0,
S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
@@ -2314,7 +2057,6 @@ S_force_ident(pTHX_ const char *s, int kind)
const STRLEN len = s[1] ? strlen(s) : 1; /* s = "\"" see yylex */
OP* const o = (OP*)newSVOP(OP_CONST, 0, newSVpvn_flags(s, len,
UTF ? SVf_UTF8 : 0));
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = o;
force_next(WORD);
if (kind) {
@@ -2337,7 +2079,6 @@ S_force_ident(pTHX_ const char *s, int kind)
static void
S_force_ident_maybe_lex(pTHX_ char pit)
{
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = pit;
force_next('p');
}
@@ -2384,9 +2125,6 @@ S_force_version(pTHX_ char *s, int guessing)
dVAR;
OP *version = NULL;
char *d;
-#ifdef PERL_MAD
- I32 startoff = s - SvPVX(PL_linestr);
-#endif
PERL_ARGS_ASSERT_FORCE_VERSION;
@@ -2398,12 +2136,6 @@ S_force_version(pTHX_ char *s, int guessing)
if (isDIGIT(*d)) {
while (isDIGIT(*d) || *d == '_' || *d == '.')
d++;
-#ifdef PERL_MAD
- if (PL_madskills) {
- start_force(PL_curforce);
- curmad('X', newSVpvn(s,d-s));
- }
-#endif
if (*d == ';' || isSPACE(*d) || *d == '{' || *d == '}' || !*d) {
SV *ver;
s = scan_num(s, &pl_yylval);
@@ -2416,26 +2148,11 @@ S_force_version(pTHX_ char *s, int guessing)
}
}
else if (guessing) {
-#ifdef PERL_MAD
- if (PL_madskills) {
- sv_free(PL_nextwhite); /* let next token collect whitespace */
- PL_nextwhite = 0;
- s = SvPVX(PL_linestr) + startoff;
- }
-#endif
return s;
}
}
-#ifdef PERL_MAD
- if (PL_madskills && !version) {
- sv_free(PL_nextwhite); /* let next token collect whitespace */
- PL_nextwhite = 0;
- s = SvPVX(PL_linestr) + startoff;
- }
-#endif
/* NOTE: The parser sees the package name and the VERSION swapped */
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = version;
force_next(WORD);
@@ -2452,9 +2169,6 @@ S_force_strict_version(pTHX_ char *s)
{
dVAR;
OP *version = NULL;
-#ifdef PERL_MAD
- I32 startoff = s - SvPVX(PL_linestr);
-#endif
const char *errstr = NULL;
PERL_ARGS_ASSERT_FORCE_STRICT_VERSION;
@@ -2476,15 +2190,7 @@ S_force_strict_version(pTHX_ char *s)
return s;
}
-#ifdef PERL_MAD
- if (PL_madskills && !version) {
- sv_free(PL_nextwhite); /* let next token collect whitespace */
- PL_nextwhite = 0;
- s = SvPVX(PL_linestr) + startoff;
- }
-#endif
/* NOTE: The parser sees the package name and the VERSION swapped */
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = version;
force_next(WORD);
@@ -2773,20 +2479,6 @@ S_sublex_done(pTHX)
}
else {
const line_t l = CopLINE(PL_curcop);
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thiswhite) {
- if (!PL_endwhite)
- PL_endwhite = newSVpvs("");
- sv_catsv(PL_endwhite, PL_thiswhite);
- PL_thiswhite = 0;
- }
- if (PL_thistoken)
- sv_setpvs(PL_thistoken,"");
- else
- PL_realtokenstart = -1;
- }
-#endif
LEAVE;
if (PL_multi_close == '<')
PL_parser->herelines += l - PL_multi_end;
@@ -4144,9 +3836,6 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
char tmpbuf[sizeof PL_tokenbuf];
STRLEN len;
GV* indirgv;
-#ifdef PERL_MAD
- int soff;
-#endif
PERL_ARGS_ASSERT_INTUIT_METHOD;
@@ -4166,13 +3855,7 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY ||
isUPPER(*PL_tokenbuf))
return 0;
-#ifdef PERL_MAD
- len = start - SvPVX(PL_linestr);
-#endif
s = PEEKSPACE(s);
-#ifdef PERL_MAD
- start = SvPVX(PL_linestr) + len;
-#endif
PL_bufptr = start;
PL_expect = XREF;
return *s == '(' ? FUNCMETH : METHOD;
@@ -4188,9 +3871,6 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
len -= 2;
tmpbuf[len] = '\0';
-#ifdef PERL_MAD
- soff = s - SvPVX(PL_linestr);
-#endif
goto bare_package;
}
indirgv = gv_fetchpvn_flags(tmpbuf, len, ( UTF ? SVf_UTF8 : 0 ), SVt_PVCV);
@@ -4198,26 +3878,16 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
return 0;
/* filehandle or package name makes it a method */
if (!cv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, UTF ? SVf_UTF8 : 0)) {
-#ifdef PERL_MAD
- soff = s - SvPVX(PL_linestr);
-#endif
s = PEEKSPACE(s);
if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
return 0; /* no assumptions -- "=>" quotes bareword */
bare_package:
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0,
S_newSV_maybe_utf8(aTHX_ tmpbuf, len));
NEXTVAL_NEXTTOKE.opval->op_private = OPpCONST_BARE;
- if (PL_madskills)
- curmad('X', newSVpvn_flags(start,SvPVX(PL_linestr) + soff - start,
- ( UTF ? SVf_UTF8 : 0 )));
PL_expect = XTERM;
force_next(WORD);
PL_bufptr = s;
-#ifdef PERL_MAD
- PL_bufptr = SvPVX(PL_linestr) + soff; /* restart before space */
-#endif
return *s == '(' ? FUNCMETH : METHOD;
}
}
@@ -4481,186 +4151,6 @@ S_find_in_my_stash(pTHX_ const char *pkgname, STRLEN len)
return gv_stashpvn(pkgname, len, UTF ? SVf_UTF8 : 0);
}
-#ifdef PERL_MAD
- /*
- * Perl_madlex
- * The intent of this yylex wrapper is to minimize the changes to the
- * tokener when we aren't interested in collecting madprops. It remains
- * to be seen how successful this strategy will be...
- */
-
-int
-Perl_madlex(pTHX)
-{
- int optype;
- char *s = PL_bufptr;
-
- /* make sure PL_thiswhite is initialized */
- PL_thiswhite = 0;
- PL_thismad = 0;
-
- /* previous token ate up our whitespace? */
- if (!PL_lasttoke && PL_nextwhite) {
- PL_thiswhite = PL_nextwhite;
- PL_nextwhite = 0;
- }
-
- /* isolate the token, and figure out where it is without whitespace */
- PL_realtokenstart = -1;
- PL_thistoken = 0;
- optype = yylex();
- s = PL_bufptr;
- assert(PL_curforce < 0);
-
- if (!PL_thismad || PL_thismad->mad_key == '^') { /* not forced already? */
- if (!PL_thistoken) {
- if (PL_realtokenstart < 0 || !CopLINE(PL_curcop))
- PL_thistoken = newSVpvs("");
- else {
- char * const tstart = SvPVX(PL_linestr) + PL_realtokenstart;
- PL_thistoken = newSVpvn(tstart, s - tstart);
- }
- }
- if (PL_thismad) /* install head */
- CURMAD('X', PL_thistoken);
- }
-
- /* last whitespace of a sublex? */
- if (optype == ')' && PL_endwhite) {
- CURMAD('X', PL_endwhite);
- }
-
- if (!PL_thismad) {
-
- /* if no whitespace and we're at EOF, bail. Otherwise fake EOF below. */
- if (!PL_thiswhite && !PL_endwhite && !optype) {
- sv_free(PL_thistoken);
- PL_thistoken = 0;
- return 0;
- }
-
- /* put off final whitespace till peg */
- if (optype == ';' && !PL_rsfp && !PL_parser->filtered) {
- PL_nextwhite = PL_thiswhite;
- PL_thiswhite = 0;
- }
- else if (PL_thisopen) {
- CURMAD('q', PL_thisopen);
- if (PL_thistoken)
- sv_free(PL_thistoken);
- PL_thistoken = 0;
- }
- else {
- /* Store actual token text as madprop X */
- CURMAD('X', PL_thistoken);
- }
-
- if (PL_thiswhite) {
- /* add preceding whitespace as madprop _ */
- CURMAD('_', PL_thiswhite);
- }
-
- if (PL_thisstuff) {
- /* add quoted material as madprop = */
- CURMAD('=', PL_thisstuff);
- }
-
- if (PL_thisclose) {
- /* add terminating quote as madprop Q */
- CURMAD('Q', PL_thisclose);
- }
- }
-
- /* special processing based on optype */
-
- switch (optype) {
-
- /* opval doesn't need a TOKEN since it can already store mp */
- case WORD:
- case METHOD:
- case FUNCMETH:
- case THING:
- case PMFUNC:
- case PRIVATEREF:
- case FUNC0SUB:
- case UNIOPSUB:
- case LSTOPSUB:
- if (pl_yylval.opval)
- append_madprops(PL_thismad, pl_yylval.opval, 0);
- PL_thismad = 0;
- return optype;
-
- /* fake EOF */
- case 0:
- optype = PEG;
- if (PL_endwhite) {
- addmad(newMADsv('p', PL_endwhite), &PL_thismad, 0);
- PL_endwhite = 0;
- }
- break;
-
- /* pval */
- case LABEL:
- break;
-
- case ']':
- case '}':
- if (PL_faketokens)
- break;
- /* remember any fake bracket that lexer is about to discard */
- if (PL_lex_brackets == 1 &&
- ((expectation)PL_lex_brackstack[0] & XFAKEBRACK))
- {
- s = PL_bufptr;
- while (s < PL_bufend && (*s == ' ' || *s == '\t'))
- s++;
- if (*s == '}') {
- PL_thiswhite = newSVpvn(PL_bufptr, ++s - PL_bufptr);
- addmad(newMADsv('#', PL_thiswhite), &PL_thismad, 0);
- PL_thiswhite = 0;
- PL_bufptr = s - 1;
- break; /* don't bother looking for trailing comment */
- }
- else
- s = PL_bufptr;
- }
- if (optype == ']')
- break;
- /* FALLTHROUGH */
-
- /* attach a trailing comment to its statement instead of next token */
- case ';':
- if (PL_faketokens)
- break;
- if (PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == optype) {
- s = PL_bufptr;
- while (s < PL_bufend && (*s == ' ' || *s == '\t'))
- s++;
- if (*s == '\n' || *s == '#') {
- while (s < PL_bufend && *s != '\n')
- s++;
- if (s < PL_bufend)
- s++;
- PL_thiswhite = newSVpvn(PL_bufptr, s - PL_bufptr);
- addmad(newMADsv('#', PL_thiswhite), &PL_thismad, 0);
- PL_thiswhite = 0;
- PL_bufptr = s;
- }
- }
- break;
-
- /* ival */
- default:
- break;
-
- }
-
- /* Create new token struct. Note: opvals return early above. */
- pl_yylval.tkval = newTOKEN(optype, pl_yylval, PL_thismad);
- PL_thismad = 0;
- return optype;
-}
-#endif
STATIC char *
S_tokenize_use(pTHX_ int is_use, char *s) {
@@ -4677,7 +4167,6 @@ S_tokenize_use(pTHX_ int is_use, char *s) {
s = force_version(s, TRUE);
if (*s == ';' || *s == '}'
|| (s = SKIPSPACE1(s), (*s == ';' || *s == '}'))) {
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = NULL;
force_next(WORD);
}
@@ -4805,27 +4294,6 @@ Perl_yylex(pTHX)
/* when we've already built the next token, just pull it out of the queue */
case LEX_KNOWNEXT:
-#ifdef PERL_MAD
- PL_lasttoke--;
- pl_yylval = PL_nexttoke[PL_lasttoke].next_val;
- if (PL_madskills) {
- PL_thismad = PL_nexttoke[PL_lasttoke].next_mad;
- PL_nexttoke[PL_lasttoke].next_mad = 0;
- if (PL_thismad && PL_thismad->mad_key == '_') {
- PL_thiswhite = MUTABLE_SV(PL_thismad->mad_val);
- PL_thismad->mad_val = 0;
- mad_free(PL_thismad);
- PL_thismad = 0;
- }
- }
- if (!PL_lasttoke) {
- PL_lex_state = PL_lex_defer;
- PL_expect = PL_lex_expect;
- PL_lex_defer = LEX_NORMAL;
- if (!PL_nexttoke[PL_lasttoke].next_type)
- return yylex();
- }
-#else
PL_nexttoke--;
pl_yylval = PL_nextval[PL_nexttoke];
if (!PL_nexttoke) {
@@ -4833,14 +4301,9 @@ Perl_yylex(pTHX)
PL_expect = PL_lex_expect;
PL_lex_defer = LEX_NORMAL;
}
-#endif
{
I32 next_type;
-#ifdef PERL_MAD
- next_type = PL_nexttoke[PL_lasttoke].next_type;
-#else
next_type = PL_nexttype[PL_nexttoke];
-#endif
if (next_type & (7<<24)) {
if (next_type & (1<<24)) {
if (PL_lex_brackets > 100)
@@ -4879,10 +4342,6 @@ Perl_yylex(pTHX)
|| oldmod == 'F')) {
PL_bufptr += 2;
PL_lex_state = LEX_INTERPCONCAT;
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_thistoken = newSVpvs("\\E");
-#endif
}
PL_lex_allbrackets--;
return REPORT(')');
@@ -4892,20 +4351,8 @@ Perl_yylex(pTHX)
Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
"Useless use of \\E");
}
-#ifdef PERL_MAD
- while (PL_bufptr != PL_bufend &&
- PL_bufptr[0] == '\\' && PL_bufptr[1] == 'E') {
- if (PL_madskills) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- sv_catpvn(PL_thiswhite, PL_bufptr, 2);
- }
- PL_bufptr += 2;
- }
-#else
if (PL_bufptr != PL_bufend)
PL_bufptr += 2;
-#endif
PL_lex_state = LEX_INTERPCONCAT;
return yylex();
}
@@ -4914,22 +4361,14 @@ Perl_yylex(pTHX)
"### Saw case modifier\n"); });
s = PL_bufptr + 1;
if (s[1] == '\\' && s[2] == 'E') {
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- sv_catpvn(PL_thiswhite, PL_bufptr, 4);
- }
-#endif
PL_bufptr = s + 3;
PL_lex_state = LEX_INTERPCONCAT;
return yylex();
}
else {
I32 tmp;
- if (!PL_madskills) /* when just compiling don't need correct */
- if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
- tmp = *s, *s = s[2], s[2] = (char)tmp; /* misordered... */
+ if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
+ tmp = *s, *s = s[2], s[2] = (char)tmp; /* misordered... */
if ((*s == 'L' || *s == 'U' || *s == 'F') &&
(strchr(PL_lex_casestack, 'L')
|| strchr(PL_lex_casestack, 'U')
@@ -4943,10 +4382,8 @@ Perl_yylex(pTHX)
PL_lex_casestack[PL_lex_casemods++] = *s;
PL_lex_casestack[PL_lex_casemods] = '\0';
PL_lex_state = LEX_INTERPCONCAT;
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next((2<<24)|'(');
- start_force(PL_curforce);
if (*s == 'l')
NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
else if (*s == 'u')
@@ -4961,26 +4398,12 @@ Perl_yylex(pTHX)
NEXTVAL_NEXTTOKE.ival = OP_FC;
else
Perl_croak(aTHX_ "panic: yylex, *s=%u", *s);
- if (PL_madskills) {
- SV* const tmpsv = newSVpvs("\\ ");
- /* replace the space with the character we want to escape
- */
- SvPVX(tmpsv)[1] = *s;
- curmad('_', tmpsv);
- }
PL_bufptr = s + 1;
}
force_next(FUNC);
if (PL_lex_starts) {
s = PL_bufptr;
PL_lex_starts = 0;
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_free(PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
-#endif
/* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
if (PL_lex_casemods == 1 && PL_lex_inpat)
OPERATOR(',');
@@ -5006,18 +4429,13 @@ Perl_yylex(pTHX)
&& (!PL_lex_inpat || PL_lex_casemods));
PL_lex_state = LEX_INTERPNORMAL;
if (PL_lex_dojoin) {
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next(',');
- start_force(PL_curforce);
force_ident("\"", '$');
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next('$');
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next((2<<24)|'(');
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = OP_JOIN; /* emulate join($", ...) */
force_next(FUNC);
}
@@ -5027,21 +4445,12 @@ Perl_yylex(pTHX)
PL_bufptr += 2;
if (*PL_bufptr != '{')
PL_bufptr++;
- start_force(PL_curforce);
- /* XXX probably need a CURMAD(something) here */
PL_expect = XTERMBLOCK;
force_next(DO);
}
if (PL_lex_starts++) {
s = PL_bufptr;
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_free(PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
-#endif
/* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
if (!PL_lex_casemods && PL_lex_inpat)
OPERATOR(',');
@@ -5062,13 +4471,6 @@ Perl_yylex(pTHX)
const U8 dojoin_was = PL_lex_dojoin;
PL_lex_dojoin = FALSE;
PL_lex_state = LEX_INTERPCONCAT;
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_free(PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
-#endif
PL_lex_allbrackets--;
return REPORT(dojoin_was == 1 ? ')' : POSTJOIN);
}
@@ -5100,8 +4502,6 @@ Perl_yylex(pTHX)
}
else sv = newSVpvn(PL_parser->lex_shared->re_eval_start,
PL_bufptr - PL_parser->lex_shared->re_eval_start);
- start_force(PL_curforce);
- /* XXX probably need a CURMAD(something) here */
NEXTVAL_NEXTTOKE.opval =
(OP*)newSVOP(OP_CONST, 0,
sv);
@@ -5137,21 +4537,10 @@ Perl_yylex(pTHX)
}
if (s != PL_bufptr) {
- start_force(PL_curforce);
- if (PL_madskills) {
- curmad('X', newSVpvn(PL_bufptr,s-PL_bufptr));
- }
NEXTVAL_NEXTTOKE = pl_yylval;
PL_expect = XTERM;
force_next(THING);
if (PL_lex_starts++) {
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_free(PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
-#endif
/* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
if (!PL_lex_casemods && PL_lex_inpat)
OPERATOR(',');
@@ -5184,13 +4573,6 @@ Perl_yylex(pTHX)
PL_parser->saw_infix_sigil = 0;
retry:
-#ifdef PERL_MAD
- if (PL_thistoken) {
- sv_free(PL_thistoken);
- PL_thistoken = 0;
- }
- PL_realtokenstart = s - SvPVX(PL_linestr); /* assume but undo on ws */
-#endif
switch (*s) {
default:
if (UTF ? isIDFIRST_utf8((U8*)s) : isALNUMC(*s))
@@ -5216,10 +4598,6 @@ Perl_yylex(pTHX)
case 26:
goto fake_eof; /* emulate EOF on ^D or ^Z */
case 0:
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_faketokens = 0;
-#endif
if (!PL_rsfp && (!PL_parser->filtered || s+1 < PL_bufend)) {
PL_last_uni = 0;
PL_last_lop = 0;
@@ -5241,10 +4619,6 @@ Perl_yylex(pTHX)
PL_last_lop = 0;
if (!PL_in_eval && !PL_preambled) {
PL_preambled = TRUE;
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_faketokens = 1;
-#endif
if (PL_perldb) {
/* Generate a string of Perl code to load the debugger.
* If PERL5DB is set, it will return the contents of that,
@@ -5330,10 +4704,6 @@ Perl_yylex(pTHX)
TOKEN(';'); /* not infinite loop because rsfp is NULL now */
}
CopLINE_dec(PL_curcop);
-#ifdef PERL_MAD
- if (!PL_rsfp)
- PL_realtokenstart = -1;
-#endif
s = PL_bufptr;
/* If it looks like the start of a BOM or raw UTF-16,
* check if it in fact is. */
@@ -5356,10 +4726,6 @@ Perl_yylex(pTHX)
}
if (PL_parser->in_pod) {
/* Incest with pod. */
-#ifdef PERL_MAD
- if (PL_madskills)
- sv_catsv(PL_thiswhite, PL_linestr);
-#endif
if (*s == '=' && strnEQ(s, "=cut", 4) && !isALPHA(s[4])) {
sv_setpvs(PL_linestr, "");
PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
@@ -5379,10 +4745,6 @@ Perl_yylex(pTHX)
s++;
if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
s++;
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_thiswhite = newSVpvn(PL_linestart, s - PL_linestart);
-#endif
d = NULL;
if (!PL_in_eval) {
if (*s == '#' && *(s+1) == '!')
@@ -5568,7 +4930,6 @@ Perl_yylex(pTHX)
}
if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
PL_lex_state = LEX_FORMLINE;
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next(FORMRBRACK);
TOKEN(';');
@@ -5581,100 +4942,54 @@ Perl_yylex(pTHX)
"\t(Maybe you didn't strip carriage returns after a network transfer?)\n");
#endif
case ' ': case '\t': case '\f': case 013:
-#ifdef PERL_MAD
- PL_realtokenstart = -1;
- if (PL_madskills) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- sv_catpvn(PL_thiswhite, s, 1);
- }
-#endif
s++;
goto retry;
case '#':
case '\n':
-#ifdef PERL_MAD
- PL_realtokenstart = -1;
- if (PL_madskills)
- PL_faketokens = 0;
-#endif
if (PL_lex_state != LEX_NORMAL ||
(PL_in_eval && !PL_rsfp && !PL_parser->filtered)) {
+ const bool in_comment = *s == '#';
if (*s == '#' && s == PL_linestart && PL_in_eval
&& !PL_rsfp && !PL_parser->filtered) {
/* handle eval qq[#line 1 "foo"\n ...] */
CopLINE_dec(PL_curcop);
incline(s);
}
- if (PL_madskills && !PL_lex_formbrack && !PL_in_eval) {
- s = SKIPSPACE0(s);
- if (!PL_in_eval || PL_rsfp || PL_parser->filtered)
- incline(s);
- }
- else {
- const bool in_comment = *s == '#';
- d = s;
- while (d < PL_bufend && *d != '\n')
- d++;
- if (d < PL_bufend)
- d++;
- else if (d > PL_bufend) /* Found by Ilya: feed random input to Perl. */
- Perl_croak(aTHX_ "panic: input overflow, %p > %p",
- d, PL_bufend);
-#ifdef PERL_MAD
- if (PL_madskills)
- PL_thiswhite = newSVpvn(s, d - s);
-#endif
- s = d;
- if (in_comment && d == PL_bufend
- && PL_lex_state == LEX_INTERPNORMAL
- && PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
- && SvEVALED(PL_lex_repl) && d[-1] == '}') s--;
- else incline(s);
- }
+ d = s;
+ while (d < PL_bufend && *d != '\n')
+ d++;
+ if (d < PL_bufend)
+ d++;
+ else if (d > PL_bufend)
+ /* Found by Ilya: feed random input to Perl. */
+ Perl_croak(aTHX_ "panic: input overflow, %p > %p",
+ d, PL_bufend);
+ s = d;
+ if (in_comment && d == PL_bufend
+ && PL_lex_state == LEX_INTERPNORMAL
+ && PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
+ && SvEVALED(PL_lex_repl) && d[-1] == '}') s--;
+ else
+ incline(s);
if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
PL_lex_state = LEX_FORMLINE;
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next(FORMRBRACK);
TOKEN(';');
}
}
else {
-#ifdef PERL_MAD
- if (PL_madskills && CopLINE(PL_curcop) >= 1 && !PL_lex_formbrack) {
- if (CopLINE(PL_curcop) == 1 && s[0] == '#' && s[1] == '!') {
- PL_faketokens = 0;
- s = SKIPSPACE0(s);
- TOKEN(PEG); /* make sure any #! line is accessible */
- }
- s = SKIPSPACE0(s);
- }
- else {
-#endif
- if (PL_madskills) d = s;
- while (s < PL_bufend && *s != '\n')
- s++;
- if (s < PL_bufend)
- {
- s++;
- if (s < PL_bufend)
- incline(s);
- }
- else if (s > PL_bufend) /* Found by Ilya: feed random input to Perl. */
- Perl_croak(aTHX_ "panic: input overflow");
-#ifdef PERL_MAD
- if (PL_madskills && CopLINE(PL_curcop) >= 1) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- if (CopLINE(PL_curcop) == 1) {
- sv_setpvs(PL_thiswhite, "");
- PL_faketokens = 0;
- }
- sv_catpvn(PL_thiswhite, d, s - d);
- }
- }
-#endif
+ while (s < PL_bufend && *s != '\n')
+ s++;
+ if (s < PL_bufend)
+ {
+ s++;
+ if (s < PL_bufend)
+ incline(s);
+ }
+ else if (s > PL_bufend)
+ /* Found by Ilya: feed random input to Perl. */
+ Perl_croak(aTHX_ "panic: input overflow");
}
goto retry;
case '-':
@@ -5920,9 +5235,6 @@ Perl_yylex(pTHX)
s++;
switch (PL_expect) {
OP *attrs;
-#ifdef PERL_MAD
- I32 stuffstart;
-#endif
case XOPERATOR:
if (!PL_in_my || PL_lex_state != LEX_NORMAL)
break;
@@ -5938,9 +5250,6 @@ Perl_yylex(pTHX)
case XATTRTERM:
PL_expect = XTERMBLOCK;
grabattrs:
-#ifdef PERL_MAD
- stuffstart = s - SvPVX(PL_linestr) - 1;
-#endif
s = PEEKSPACE(s);
attrs = NULL;
while (isIDFIRST_lazy_if(s,UTF)) {
@@ -6060,17 +5369,9 @@ Perl_yylex(pTHX)
}
got_attrs:
if (attrs) {
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = attrs;
- CURMAD('_', PL_nextwhite);
force_next(THING);
}
-#ifdef PERL_MAD
- if (PL_madskills) {
- PL_thistoken = newSVpvn(SvPVX(PL_linestr) + stuffstart,
- (s - SvPVX(PL_linestr)) - stuffstart);
- }
-#endif
TOKEN(COLONATTR);
}
if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) {
@@ -6314,19 +5615,9 @@ Perl_yylex(pTHX)
PL_bufptr = s;
return yylex(); /* ignore fake brackets */
}
- start_force(PL_curforce);
- if (PL_madskills) {
- curmad('X', newSVpvn(s-1,1));
- CURMAD('_', PL_thiswhite);
- }
force_next(formbrack ? '.' : '}');
if (formbrack) LEAVE;
-#ifdef PERL_MAD
- if (PL_madskills && !PL_thistoken)
- PL_thistoken = newSVpvs("");
-#endif
if (formbrack == 2) { /* means . where arguments were expected */
- start_force(PL_curforce);
force_next(';');
TOKEN(FORMRBRACK);
}
@@ -6438,14 +5729,6 @@ Perl_yylex(pTHX)
}
goto retry;
}
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (!PL_thiswhite)
- PL_thiswhite = newSVpvs("");
- sv_catpvn(PL_thiswhite, PL_linestart,
- PL_bufend - PL_linestart);
- }
-#endif
s = PL_bufend;
PL_parser->in_pod = 1;
goto retry;
@@ -6864,7 +6147,7 @@ Perl_yylex(pTHX)
TERM(THING);
case '\'':
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s)
missingterm(NULL);
COPLINE_SET_FROM_MULTI_END;
@@ -6880,7 +6163,7 @@ Perl_yylex(pTHX)
TERM(sublex_start());
case '"':
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
DEBUG_T( {
if (s)
printbuf("### Saw string before %s\n", s);
@@ -6911,7 +6194,7 @@ Perl_yylex(pTHX)
TERM(sublex_start());
case '`':
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
DEBUG_T( { printbuf("### Saw backtick string before %s\n", s); } );
if (PL_expect == XOPERATOR)
no_op("Backticks",s);
@@ -7212,9 +6495,6 @@ Perl_yylex(pTHX)
lastchar && PL_bufptr - 2 >= PL_linestart
? PL_bufptr[-2]
: 0;
-#ifdef PERL_MAD
- SV *nextPL_nextwhite = 0;
-#endif
/* Get the rest if it looks like a package qualifier */
@@ -7246,7 +6526,7 @@ Perl_yylex(pTHX)
in which case Foo is a bareword
(and a package name). */
- if (len > 2 && !PL_madskills &&
+ if (len > 2 &&
PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
{
if (ckWARN(WARN_BAREWORD)
@@ -7284,13 +6564,6 @@ Perl_yylex(pTHX)
SvREFCNT_dec(tmp_sv);
}
-#ifdef PERL_MAD
- if (PL_madskills && !PL_thistoken) {
- char *start = SvPVX(PL_linestr) + PL_realtokenstart;
- PL_thistoken = newSVpvn(start,s - start);
- PL_realtokenstart = s - SvPVX(PL_linestr);
- }
-#endif
/* Presume this is going to be a bareword of some sort. */
CLINE;
@@ -7323,9 +6596,6 @@ Perl_yylex(pTHX)
/* (Now we can afford to cross potential line boundary.) */
s = SKIPSPACE2(s,nextPL_nextwhite);
-#ifdef PERL_MAD
- PL_nextwhite = nextPL_nextwhite; /* assume no & deception */
-#endif
/* Two barewords in a row may indicate method call. */
@@ -7357,13 +6627,7 @@ Perl_yylex(pTHX)
}
PL_expect = XOPERATOR;
-#ifdef PERL_MAD
- if (isSPACE(*s))
- s = SKIPSPACE2(s,nextPL_nextwhite);
- PL_nextwhite = nextPL_nextwhite;
-#else
s = skipspace(s);
-#endif
/* Is this a word before a => operator? */
if (*s == '=' && s[1] == '>' && !pkgname) {
@@ -7391,23 +6655,9 @@ Perl_yylex(pTHX)
goto its_constant;
}
}
-#ifdef PERL_MAD
- if (PL_madskills) {
- PL_nextwhite = PL_thiswhite;
- PL_thiswhite = 0;
- }
- start_force(PL_curforce);
-#endif
NEXTVAL_NEXTTOKE.opval =
off ? rv2cv_op : pl_yylval.opval;
PL_expect = XOPERATOR;
-#ifdef PERL_MAD
- if (PL_madskills) {
- PL_nextwhite = nextPL_nextwhite;
- curmad('X', PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
-#endif
if (off)
op_free(pl_yylval.opval), force_next(PRIVATEREF);
else op_free(rv2cv_op), force_next(WORD);
@@ -7474,9 +6724,6 @@ Perl_yylex(pTHX)
PL_last_lop_op = OP_ENTERSUB;
/* Is there a prototype? */
if (
-#ifdef PERL_MAD
- cv &&
-#endif
SvPOK(cv))
{
STRLEN protolen = CvPROTOLEN(cv);
@@ -7520,71 +6767,6 @@ Perl_yylex(pTHX)
PREBLOCK(LSTOPSUB);
}
}
-#ifdef PERL_MAD
- {
- if (PL_madskills) {
- PL_nextwhite = PL_thiswhite;
- PL_thiswhite = 0;
- }
- start_force(PL_curforce);
- NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
- PL_expect = XTERM;
- if (PL_madskills) {
- PL_nextwhite = nextPL_nextwhite;
- curmad('X', PL_thistoken);
- PL_thistoken = newSVpvs("");
- }
- force_next(off ? PRIVATEREF : WORD);
- if (!PL_lex_allbrackets &&
- PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- TOKEN(NOAMP);
- }
- }
-
- /* Guess harder when madskills require "best effort". */
- if (PL_madskills && (!gv || !GvCVu(gv))) {
- int probable_sub = 0;
- if (strchr("\"'`$@%0123456789!*+{[<", *s))
- probable_sub = 1;
- else if (isALPHA(*s)) {
- char tmpbuf[1024];
- STRLEN tmplen;
- d = s;
- d = scan_word(d, tmpbuf, sizeof tmpbuf, TRUE, &tmplen);
- if (!keyword(tmpbuf, tmplen, 0))
- probable_sub = 1;
- else {
- while (d < PL_bufend && isSPACE(*d))
- d++;
- if (*d == '=' && d[1] == '>')
- probable_sub = 1;
- }
- }
- if (probable_sub) {
- gv = gv_fetchpv(PL_tokenbuf, GV_ADD | ( UTF ? SVf_UTF8 : 0 ),
- SVt_PVCV);
- op_free(pl_yylval.opval);
- pl_yylval.opval =
- off ? (OP *)newCVREF(0, rv2cv_op) : rv2cv_op;
- pl_yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = OP_ENTERSUB;
- PL_nextwhite = PL_thiswhite;
- PL_thiswhite = 0;
- start_force(PL_curforce);
- NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
- PL_expect = XTERM;
- PL_nextwhite = nextPL_nextwhite;
- curmad('X', PL_thistoken);
- PL_thistoken = newSVpvs("");
- force_next(off ? PRIVATEREF : WORD);
- if (!PL_lex_allbrackets &&
- PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- TOKEN(NOAMP);
- }
-#else
NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
PL_expect = XTERM;
force_next(off ? PRIVATEREF : WORD);
@@ -7592,7 +6774,6 @@ Perl_yylex(pTHX)
PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
TOKEN(NOAMP);
-#endif
}
/* Call it a bare word */
@@ -7737,21 +6918,6 @@ Perl_yylex(pTHX)
}
}
#endif
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_realtokenstart >= 0) {
- char *tstart = SvPVX(PL_linestr) + PL_realtokenstart;
- if (!PL_endwhite)
- PL_endwhite = newSVpvs("");
- sv_catsv(PL_endwhite, PL_thiswhite);
- PL_thiswhite = 0;
- sv_catpvn(PL_endwhite, tstart, PL_bufend - tstart);
- PL_realtokenstart = -1;
- }
- while ((s = filter_gets(PL_endwhite, SvCUR(PL_endwhite)))
- != NULL) ;
- }
-#endif
PL_rsfp = NULL;
}
goto fake_eof;
@@ -7961,8 +7127,6 @@ Perl_yylex(pTHX)
UNI(OP_EXISTS);
case KEY_exit:
- if (PL_madskills)
- UNI(OP_INT);
UNI(OP_EXIT);
case KEY_eval:
@@ -8018,9 +7182,6 @@ Perl_yylex(pTHX)
s = SKIPSPACE1(s);
if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
char *p = s;
-#ifdef PERL_MAD
- int soff = s - SvPVX(PL_linestr); /* for skipspace realloc */
-#endif
if ((PL_bufend - p) >= 3 &&
strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
@@ -8036,9 +7197,6 @@ Perl_yylex(pTHX)
}
if (*p != '$')
Perl_croak(aTHX_ "Missing $ on loop variable");
-#ifdef PERL_MAD
- s = SvPVX(PL_linestr) + soff;
-#endif
}
OPERATOR(FOR);
@@ -8273,9 +7431,6 @@ Perl_yylex(pTHX)
PL_in_my = (U16)tmp;
s = SKIPSPACE1(s);
if (isIDFIRST_lazy_if(s,UTF)) {
-#ifdef PERL_MAD
- char* start = s;
-#endif
s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
{
@@ -8296,13 +7451,6 @@ Perl_yylex(pTHX)
my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
}
-#ifdef PERL_MAD
- if (PL_madskills) { /* just add type to declarator token */
- sv_catsv(PL_thistoken, PL_nextwhite);
- PL_nextwhite = 0;
- sv_catpvn(PL_thistoken, start, s - start);
- }
-#endif
}
pl_yylval.ival = 1;
OPERATOR(MY);
@@ -8401,7 +7549,7 @@ Perl_yylex(pTHX)
LOP(OP_PIPE_OP,XTERM);
case KEY_q:
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s)
missingterm(NULL);
COPLINE_SET_FROM_MULTI_END;
@@ -8413,7 +7561,7 @@ Perl_yylex(pTHX)
case KEY_qw: {
OP *words = NULL;
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s)
missingterm(NULL);
COPLINE_SET_FROM_MULTI_END;
@@ -8464,7 +7612,7 @@ Perl_yylex(pTHX)
}
case KEY_qq:
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s)
missingterm(NULL);
pl_yylval.ival = OP_STRINGIFY;
@@ -8477,7 +7625,7 @@ Perl_yylex(pTHX)
TERM(sublex_start());
case KEY_qx:
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s)
missingterm(NULL);
pl_yylval.ival = OP_BACKTICK;
@@ -8697,44 +7845,21 @@ Perl_yylex(pTHX)
expectation attrful;
bool have_name, have_proto;
const int key = tmp;
-#ifndef PERL_MAD
SV *format_name = NULL;
-#endif
-
-#ifdef PERL_MAD
- SV *tmpwhite = 0;
-
- char *tstart = SvPVX(PL_linestr) + PL_realtokenstart;
- SV *subtoken = PL_madskills
- ? newSVpvn_flags(tstart, s - tstart, SvUTF8(PL_linestr))
- : NULL;
- PL_thistoken = 0;
d = s;
- s = SKIPSPACE2(s,tmpwhite);
-#else
- d = s;
s = skipspace(s);
-#endif
if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
(*s == ':' && s[1] == ':'))
{
-#ifdef PERL_MAD
- SV *nametoke = NULL;
-#endif
PL_expect = XBLOCK;
attrful = XATTRBLOCK;
d = scan_word(s, tmpbuf, sizeof PL_tokenbuf - 1, TRUE,
&len);
-#ifdef PERL_MAD
- if (PL_madskills)
- nametoke = newSVpvn_flags(s, d - s, SvUTF8(PL_linestr));
-#else
if (key == KEY_format)
format_name = S_newSV_maybe_utf8(aTHX_ s, d - s);
-#endif
*PL_tokenbuf = '&';
if (memchr(tmpbuf, ':', len) || key != KEY_sub
|| pad_findmy_pvn(
@@ -8751,16 +7876,7 @@ Perl_yylex(pTHX)
have_name = TRUE;
-#ifdef PERL_MAD
- start_force(0);
- CURMAD('X', nametoke);
- CURMAD('_', tmpwhite);
- force_ident_maybe_lex('&');
-
- s = SKIPSPACE2(d,tmpwhite);
-#else
s = skipspace(d);
-#endif
}
else {
if (key == KEY_my || key == KEY_our || key==KEY_state)
@@ -8777,45 +7893,25 @@ Perl_yylex(pTHX)
}
if (key == KEY_format) {
-#ifdef PERL_MAD
- PL_thistoken = subtoken;
- s = d;
-#else
if (format_name) {
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval
= (OP*)newSVOP(OP_CONST,0, format_name);
NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
force_next(WORD);
}
-#endif
PREBLOCK(FORMAT);
}
/* Look for a prototype */
if (*s == '(' && !FEATURE_SIGNATURES_IS_ENABLED) {
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
COPLINE_SET_FROM_MULTI_END;
if (!s)
Perl_croak(aTHX_ "Prototype not terminated");
(void)validate_proto(PL_subname, PL_lex_stuff, ckWARN(WARN_ILLEGALPROTO));
have_proto = TRUE;
-#ifdef PERL_MAD
- start_force(0);
- CURMAD('q', PL_thisopen);
- CURMAD('_', tmpwhite);
- CURMAD('=', PL_thisstuff);
- CURMAD('Q', PL_thisclose);
- NEXTVAL_NEXTTOKE.opval =
- (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
- PL_lex_stuff = NULL;
- force_next(THING);
-
- s = SKIPSPACE2(s,tmpwhite);
-#else
s = skipspace(s);
-#endif
}
else
have_proto = FALSE;
@@ -8829,25 +7925,12 @@ Perl_yylex(pTHX)
Perl_croak(aTHX_ "Illegal declaration of subroutine %"SVf, SVfARG(PL_subname));
}
-#ifdef PERL_MAD
- start_force(0);
- if (tmpwhite) {
- if (PL_madskills)
- curmad('^', newSVpvs(""));
- CURMAD('_', tmpwhite);
- }
- force_next(0);
-
- PL_thistoken = subtoken;
- PERL_UNUSED_VAR(have_proto);
-#else
if (have_proto) {
NEXTVAL_NEXTTOKE.opval =
(OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
PL_lex_stuff = NULL;
force_next(THING);
}
-#endif
if (!have_name) {
if (PL_curstash)
sv_setpvs(PL_subname, "__ANON__");
@@ -8855,9 +7938,7 @@ Perl_yylex(pTHX)
sv_setpvs(PL_subname, "__ANON__::__ANON__");
TOKEN(ANONSUB);
}
-#ifndef PERL_MAD
force_ident_maybe_lex('&');
-#endif
TOKEN(SUB);
}
@@ -9718,9 +8799,6 @@ S_scan_pat(pTHX_ char *start, I32 type)
const char * const valid_flags =
(const char *)((type == OP_QR) ? QR_PAT_MODS : M_PAT_MODS);
char charset = '\0'; /* character set modifier */
-#ifdef PERL_MAD
- char *modstart;
-#endif
PERL_ARGS_ASSERT_SCAN_PAT;
@@ -9757,9 +8835,6 @@ S_scan_pat(pTHX_ char *start, I32 type)
PmopSTASH_set(pm,PL_curstash);
}
}
-#ifdef PERL_MAD
- modstart = s;
-#endif
/* if qr/...(?{..}).../, then need to parse the pattern within a new
* anon CV. False positives like qr/[(?{]/ are harmless */
@@ -9780,12 +8855,6 @@ S_scan_pat(pTHX_ char *start, I32 type)
}
while (*s && S_pmflag(aTHX_ valid_flags, &(pm->op_pmflags), &s, &charset)) {};
-#ifdef PERL_MAD
- if (PL_madskills && modstart != s) {
- SV* tmptoken = newSVpvn(modstart, s - modstart);
- append_madprops(newMADPROP('m', MAD_SV, tmptoken, 0), (OP*)pm, 0);
- }
-#endif
/* issue a warning if /c is specified,but /g is not */
if ((pm->op_pmflags & PMf_CONTINUE) && !(pm->op_pmflags & PMf_GLOBAL))
{
@@ -9808,9 +8877,6 @@ S_scan_subst(pTHX_ char *start)
line_t first_line;
I32 es = 0;
char charset = '\0'; /* character set modifier */
-#ifdef PERL_MAD
- char *modstart;
-#endif
char *t;
PERL_ARGS_ASSERT_SCAN_SUBST;
@@ -9823,19 +8889,10 @@ S_scan_subst(pTHX_ char *start)
Perl_croak(aTHX_ "Substitution pattern not terminated");
s = t;
-#ifdef PERL_MAD
- if (PL_madskills) {
- CURMAD('q', PL_thisopen);
- CURMAD('_', PL_thiswhite);
- CURMAD('E', PL_thisstuff);
- CURMAD('Q', PL_thisclose);
- PL_realtokenstart = s - SvPVX(PL_linestr);
- }
-#endif
first_start = PL_multi_start;
first_line = CopLINE(PL_curcop);
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s) {
if (PL_lex_stuff) {
SvREFCNT_dec(PL_lex_stuff);
@@ -9847,14 +8904,6 @@ S_scan_subst(pTHX_ char *start)
pm = (PMOP*)newPMOP(OP_SUBST, 0);
-#ifdef PERL_MAD
- if (PL_madskills) {
- CURMAD('z', PL_thisopen);
- CURMAD('R', PL_thisstuff);
- CURMAD('Z', PL_thisclose);
- }
- modstart = s;
-#endif
while (*s) {
if (*s == EXEC_PAT_MOD) {
@@ -9867,14 +8916,6 @@ S_scan_subst(pTHX_ char *start)
}
}
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (modstart != s)
- curmad('m', newSVpvn(modstart, s - modstart));
- append_madprops(PL_thismad, (OP*)pm, 0);
- PL_thismad = 0;
- }
-#endif
if ((pm->op_pmflags & PMf_CONTINUE)) {
Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), "Use of /c modifier is meaningless in s///" );
}
@@ -9919,31 +8960,19 @@ S_scan_trans(pTHX_ char *start)
U8 del;
U8 complement;
bool nondestruct = 0;
-#ifdef PERL_MAD
- char *modstart;
-#endif
char *t;
PERL_ARGS_ASSERT_SCAN_TRANS;
pl_yylval.ival = OP_NULL;
- s = scan_str(start,!!PL_madskills,FALSE,FALSE,&t);
+ s = scan_str(start,FALSE,FALSE,FALSE,&t);
if (!s)
Perl_croak(aTHX_ "Transliteration pattern not terminated");
s = t;
-#ifdef PERL_MAD
- if (PL_madskills) {
- CURMAD('q', PL_thisopen);
- CURMAD('_', PL_thiswhite);
- CURMAD('E', PL_thisstuff);
- CURMAD('Q', PL_thisclose);
- PL_realtokenstart = s - SvPVX(PL_linestr);
- }
-#endif
- s = scan_str(s,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
if (!s) {
if (PL_lex_stuff) {
SvREFCNT_dec(PL_lex_stuff);
@@ -9951,16 +8980,8 @@ S_scan_trans(pTHX_ char *start)
}
Perl_croak(aTHX_ "Transliteration replacement not terminated");
}
- if (PL_madskills) {
- CURMAD('z', PL_thisopen);
- CURMAD('R', PL_thisstuff);
- CURMAD('Z', PL_thisclose);
- }
complement = del = squash = 0;
-#ifdef PERL_MAD
- modstart = s;
-#endif
while (1) {
switch (*s) {
case 'c':
@@ -9991,14 +9012,6 @@ S_scan_trans(pTHX_ char *start)
PL_lex_op = o;
pl_yylval.ival = nondestruct ? OP_TRANSR : OP_TRANS;
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (modstart != s)
- curmad('m', newSVpvn(modstart, s - modstart));
- append_madprops(PL_thismad, o, 0);
- PL_thismad = 0;
- }
-#endif
return s;
}
@@ -10041,12 +9054,6 @@ S_scan_heredoc(pTHX_ char *s)
const bool infile = PL_rsfp || PL_parser->filtered;
const line_t origline = CopLINE(PL_curcop);
LEXSHARED *shared = PL_parser->lex_shared;
-#ifdef PERL_MAD
- I32 stuffstart = s - SvPVX(PL_linestr);
- char *tstart;
-
- PL_realtokenstart = -1;
-#endif
PERL_ARGS_ASSERT_SCAN_HEREDOC;
@@ -10085,15 +9092,6 @@ S_scan_heredoc(pTHX_ char *s)
*d = '\0';
len = d - PL_tokenbuf;
-#ifdef PERL_MAD
- if (PL_madskills) {
- tstart = PL_tokenbuf + 1;
- PL_thisclose = newSVpvn(tstart, len - 1);
- tstart = SvPVX(PL_linestr) + stuffstart;
- PL_thisopen = newSVpvn(tstart, s - tstart);
- stuffstart = s - SvPVX(PL_linestr);
- }
-#endif
#ifndef PERL_STRICT_CR
d = strchr(s, '\r');
if (d) {
@@ -10118,17 +9116,6 @@ S_scan_heredoc(pTHX_ char *s)
s = olds;
}
#endif
-#ifdef PERL_MAD
- if (PL_madskills) {
- tstart = SvPVX(PL_linestr) + stuffstart;
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, tstart, s - tstart);
- else
- PL_thisstuff = newSVpvn(tstart, s - tstart);
- }
-
- stuffstart = s - SvPVX(PL_linestr);
-#endif
tmpstr = newSV_type(SVt_PVIV);
SvGROW(tmpstr, 80);
@@ -10194,15 +9181,6 @@ S_scan_heredoc(pTHX_ char *s)
goto interminable;
}
sv_setpvn(tmpstr,d+1,s-d);
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, d + 1, s - d);
- else
- PL_thisstuff = newSVpvn(d + 1, s - d);
- stuffstart = s - SvPVX(PL_linestr);
- }
-#endif
s += len - 1;
/* the preceding stmt passes a newline */
PL_parser->herelines++;
@@ -10252,15 +9230,6 @@ S_scan_heredoc(pTHX_ char *s)
PL_linestr = newSVpvs("");
PL_bufend = SvPVX(PL_linestr);
while (1) {
-#ifdef PERL_MAD
- if (PL_madskills) {
- tstart = SvPVX(PL_linestr) + stuffstart;
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, tstart, PL_bufend - tstart);
- else
- PL_thisstuff = newSVpvn(tstart, PL_bufend - tstart);
- }
-#endif
PL_bufptr = PL_bufend;
CopLINE_set(PL_curcop,
origline + 1 + PL_parser->herelines);
@@ -10278,9 +9247,6 @@ S_scan_heredoc(pTHX_ char *s)
PL_bufend = SvEND(PL_linestr);
}
s = PL_bufptr;
-#ifdef PERL_MAD
- stuffstart = s - SvPVX(PL_linestr);
-#endif
PL_parser->herelines++;
PL_last_lop = PL_last_uni = NULL;
#ifndef PERL_STRICT_CR
@@ -10396,7 +9362,7 @@ S_scan_inputsymbol(pTHX_ char *start)
if (d - PL_tokenbuf != len) {
pl_yylval.ival = OP_GLOB;
- s = scan_str(start,!!PL_madskills,FALSE,FALSE,NULL);
+ s = scan_str(start,FALSE,FALSE,FALSE,NULL);
if (!s)
Perl_croak(aTHX_ "Glob not terminated");
return s;
@@ -10555,10 +9521,6 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
STRLEN termlen; /* length of terminating string */
int last_off = 0; /* last position for nesting bracket */
line_t herelines;
-#ifdef PERL_MAD
- int stuffstart;
- char *tstart;
-#endif
PERL_ARGS_ASSERT_SCAN_STR;
@@ -10567,14 +9529,6 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
s = PEEKSPACE(s);
}
-#ifdef PERL_MAD
- if (PL_realtokenstart >= 0) {
- stuffstart = PL_realtokenstart;
- PL_realtokenstart = -1;
- }
- else
- stuffstart = start - SvPVX(PL_linestr);
-#endif
/* mark where we are, in case we need to report errors */
CLINE;
@@ -10617,13 +9571,6 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
if (keep_delims)
sv_catpvn(sv, s, termlen);
s += termlen;
-#ifdef PERL_MAD
- tstart = SvPVX(PL_linestr) + stuffstart;
- if (PL_madskills && !PL_thisopen && !keep_delims) {
- PL_thisopen = newSVpvn(tstart, s - tstart);
- stuffstart = s - SvPVX(PL_linestr);
- }
-#endif
for (;;) {
if (PL_encoding && !UTF && !re_reparse) {
bool cont = TRUE;
@@ -10831,15 +9778,6 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
/* 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
*/
-#ifdef PERL_MAD
- if (PL_madskills) {
- char * const tstart = SvPVX(PL_linestr) + stuffstart;
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, tstart, PL_bufend - tstart);
- else
- PL_thisstuff = newSVpvn(tstart, PL_bufend - tstart);
- }
-#endif
COPLINE_INC_WITH_HERELINES;
PL_bufptr = PL_bufend;
if (!lex_next_chunk(0)) {
@@ -10848,45 +9786,16 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re
return NULL;
}
s = PL_bufptr;
-#ifdef PERL_MAD
- stuffstart = 0;
-#endif
}
/* at this point, we have successfully read the delimited string */
if (!PL_encoding || UTF || re_reparse) {
-#ifdef PERL_MAD
- if (PL_madskills) {
- char * const tstart = SvPVX(PL_linestr) + stuffstart;
- const int len = s - tstart;
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, tstart, len);
- else
- PL_thisstuff = newSVpvn(tstart, len);
- if (!PL_thisclose && !keep_delims)
- PL_thisclose = newSVpvn(s,termlen);
- }
-#endif
if (keep_delims)
sv_catpvn(sv, s, termlen);
s += termlen;
}
-#ifdef PERL_MAD
- else {
- if (PL_madskills) {
- char * const tstart = SvPVX(PL_linestr) + stuffstart;
- const int len = s - tstart - termlen;
- if (PL_thisstuff)
- sv_catpvn(PL_thisstuff, tstart, len);
- else
- PL_thisstuff = newSVpvn(tstart, len);
- if (!PL_thisclose && !keep_delims)
- PL_thisclose = newSVpvn(s - termlen,termlen);
- }
- }
-#endif
if (has_utf8 || (PL_encoding && !re_reparse))
SvUTF8_on(sv);
@@ -11322,15 +10231,6 @@ S_scan_formline(pTHX_ char *s)
SV * const stuff = newSVpvs("");
bool needargs = FALSE;
bool eofmt = FALSE;
-#ifdef PERL_MAD
- char *tokenstart = s;
- SV* savewhite = NULL;
-
- if (PL_madskills) {
- savewhite = PL_thiswhite;
- PL_thiswhite = 0;
- }
-#endif
PERL_ARGS_ASSERT_SCAN_FORMLINE;
@@ -11379,22 +10279,11 @@ S_scan_formline(pTHX_ char *s)
if ((PL_rsfp || PL_parser->filtered)
&& PL_parser->form_lex_state == LEX_NORMAL) {
bool got_some;
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_catpvn(PL_thistoken, tokenstart, PL_bufend - tokenstart);
- else
- PL_thistoken = newSVpvn(tokenstart, PL_bufend - tokenstart);
- }
-#endif
PL_bufptr = PL_bufend;
COPLINE_INC_WITH_HERELINES;
got_some = lex_next_chunk(0);
CopLINE_dec(PL_curcop);
s = PL_bufptr;
-#ifdef PERL_MAD
- tokenstart = PL_bufptr;
-#endif
if (!got_some)
break;
}
@@ -11411,12 +10300,10 @@ S_scan_formline(pTHX_ char *s)
|| *s2 == 013)
s2++;
if (*s2 == '{') {
- start_force(PL_curforce);
PL_expect = XTERMBLOCK;
NEXTVAL_NEXTTOKE.ival = 0;
force_next(DO);
}
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
force_next(FORMLBRACK);
}
@@ -11426,7 +10313,6 @@ S_scan_formline(pTHX_ char *s)
else if (PL_encoding)
sv_recode_to_utf8(stuff, PL_encoding);
}
- start_force(PL_curforce);
NEXTVAL_NEXTTOKE.opval = (OP*)newSVOP(OP_CONST, 0, stuff);
force_next(THING);
}
@@ -11435,15 +10321,6 @@ S_scan_formline(pTHX_ char *s)
if (eofmt)
PL_lex_formbrack = 0;
}
-#ifdef PERL_MAD
- if (PL_madskills) {
- if (PL_thistoken)
- sv_catpvn(PL_thistoken, tokenstart, s - tokenstart);
- else
- PL_thistoken = newSVpvn(tokenstart, s - tokenstart);
- PL_thiswhite = savewhite;
- }
-#endif
return s;
}
diff --git a/uconfig.h b/uconfig.h
index 4f9127eb21..eb1839ad55 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -4390,12 +4390,6 @@
/*#define PERL_PRIeldbl "lle" / **/
/*#define PERL_SCNfldbl "llf" / **/
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format
@@ -4748,6 +4742,6 @@
#endif
/* Generated from:
- * 4cb92587c221c8c3b0fe3f9c2fbab1293d6798f426cca6a0be90491d0fd04185 config_h.SH
- * 87a71147b46045d5a12e0e15b269db96e2af06d021d25ab516cfe4d0efb6b87b uconfig.sh
+ * a37f46da5285428077feb313bcbe68661740bac16d76fa658d723d9fcc91c2c4 config_h.SH
+ * 4b709c0b049c660c04c0932eaa8481f9ca6fdc697ec4ffaa86b7bef21ee886a8 uconfig.sh
* ex: set ro: */
diff --git a/uconfig.sh b/uconfig.sh
index 0dc4171937..e8df3c2ea0 100644
--- a/uconfig.sh
+++ b/uconfig.sh
@@ -653,7 +653,6 @@ longlongsize=8
longsize='4'
lseeksize=4
lseektype=int
-mad='undef'
malloctype='int*'
malloctype='void *'
mmaptype='void *'
diff --git a/win32/config_H.gc b/win32/config_H.gc
index da310afd6f..228bee33e0 100644
--- a/win32/config_H.gc
+++ b/win32/config_H.gc
@@ -4372,12 +4372,6 @@
/*#define PERL_PRIeldbl "e" / **/
/*#define PERL_SCNfldbl "f" / **/
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format
diff --git a/win32/config_H.vc b/win32/config_H.vc
index 4c1ae3d428..2d9ebfd066 100644
--- a/win32/config_H.vc
+++ b/win32/config_H.vc
@@ -4366,12 +4366,6 @@
/*#define PERL_PRIeldbl "e" / **/
/*#define PERL_SCNfldbl "f" / **/
-/* PERL_MAD:
- * This symbol, if defined, indicates that the Misc Attribution
- * Declaration code should be conditionally compiled.
- */
-/*#define PERL_MAD / **/
-
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
* the variable argument list datatype, va_list, in a format