summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST2
-rw-r--r--overload.h168
-rw-r--r--overload.pl153
-rw-r--r--perl.h91
4 files changed, 324 insertions, 90 deletions
diff --git a/MANIFEST b/MANIFEST
index baf849a5fb..83fce2d8c2 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -2804,6 +2804,8 @@ os2/OS2/typemap Common typemap for OS/2 types
os2/perl2cmd.pl Corrects installed binaries under OS/2
os2/perlrexx.c Support perl interpreter embedded in REXX
os2/perlrexx.cmd Test perl interpreter embedded in REXX
+overload.h generated overload enum and name table
+overload.pl generate overload.h
pad.c Scratchpad functions
pad.h Scratchpad headers
patchlevel.h The current patch level of perl
diff --git a/overload.h b/overload.h
new file mode 100644
index 0000000000..adf1feae2d
--- /dev/null
+++ b/overload.h
@@ -0,0 +1,168 @@
+/* -*- buffer-read-only: t -*-
+ *
+ * overload.h
+ *
+ * Copyright (C) 1997, 1998, 2000, 2001, 2005 and 2006 by 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.
+ *
+ * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ * This file is built by overload.pl
+ */
+
+enum {
+ fallback_amg,
+ to_sv_amg,
+ to_av_amg,
+ to_hv_amg,
+ to_gv_amg,
+ to_cv_amg,
+ inc_amg,
+ dec_amg,
+ bool__amg,
+ numer_amg,
+ string_amg,
+ not_amg,
+ copy_amg,
+ abs_amg,
+ neg_amg,
+ iter_amg,
+ int_amg,
+ lt_amg,
+ le_amg,
+ gt_amg,
+ ge_amg,
+ eq_amg,
+ ne_amg,
+ slt_amg,
+ sle_amg,
+ sgt_amg,
+ sge_amg,
+ seq_amg,
+ sne_amg,
+ nomethod_amg,
+ add_amg,
+ add_ass_amg,
+ subtr_amg,
+ subtr_ass_amg,
+ mult_amg,
+ mult_ass_amg,
+ div_amg,
+ div_ass_amg,
+ modulo_amg,
+ modulo_ass_amg,
+ pow_amg,
+ pow_ass_amg,
+ lshift_amg,
+ lshift_ass_amg,
+ rshift_amg,
+ rshift_ass_amg,
+ band_amg,
+ band_ass_amg,
+ bor_amg,
+ bor_ass_amg,
+ bxor_amg,
+ bxor_ass_amg,
+ ncmp_amg,
+ scmp_amg,
+ compl_amg,
+ atan2_amg,
+ cos_amg,
+ sin_amg,
+ exp_amg,
+ log_amg,
+ sqrt_amg,
+ repeat_amg,
+ repeat_ass_amg,
+ concat_amg,
+ concat_ass_amg,
+ smart_amg,
+ DESTROY_amg,
+ max_amg_code
+ /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
+};
+
+
+#define NofAMmeth max_amg_code
+#define AMG_id2name(id) (PL_AMG_names[id]+1)
+
+#ifdef DOINIT
+EXTCONST char * const PL_AMG_names[NofAMmeth] = {
+ /* Names kept in the symbol table. fallback => "()", the rest has
+ "(" prepended. The only other place in perl which knows about
+ this convention is AMG_id2name (used for debugging output and
+ 'nomethod' only), the only other place which has it hardwired is
+ overload.pm. */
+ "()",
+ "(${}",
+ "(@{}",
+ "(%{}",
+ "(*{}",
+ "(&{}",
+ "(++",
+ "(--",
+ "(bool",
+ "(0+",
+ "(\"\"",
+ "(!",
+ "(=",
+ "(abs",
+ "(neg",
+ "(<>",
+ "(int",
+ "(<",
+ "(<=",
+ "(>",
+ "(>=",
+ "(==",
+ "(!=",
+ "(lt",
+ "(le",
+ "(gt",
+ "(ge",
+ "(eq",
+ "(ne",
+ "(nomethod",
+ "(+",
+ "(+=",
+ "(-",
+ "(-=",
+ "(*",
+ "(*=",
+ "(/",
+ "(/=",
+ "(%",
+ "(%=",
+ "(**",
+ "(**=",
+ "(<<",
+ "(<<=",
+ "(>>",
+ "(>>=",
+ "(&",
+ "(&=",
+ "(|",
+ "(|=",
+ "(^",
+ "(^=",
+ "(<=>",
+ "(cmp",
+ "(~",
+ "(atan2",
+ "(cos",
+ "(sin",
+ "(exp",
+ "(log",
+ "(sqrt",
+ "(x",
+ "(x=",
+ "(.",
+ "(.=",
+ "(~~",
+ "DESTROY"
+};
+#else
+EXTCONST char * PL_AMG_names[NofAMmeth];
+#endif /* def INITAMAGIC */
diff --git a/overload.pl b/overload.pl
new file mode 100644
index 0000000000..640f4fdf29
--- /dev/null
+++ b/overload.pl
@@ -0,0 +1,153 @@
+#!/usr/bin/perl -w
+
+#
+# Generate overload.h
+# This allows the order of overloading consants to be changed.
+#
+
+BEGIN {
+ # Get function prototypes
+ require 'regen_lib.pl';
+}
+
+use strict;
+
+my (@enums, @names);
+while (<DATA>) {
+ next if /^#/;
+ next if /^$/;
+ my ($enum, $name) = /^(\S+)\s+(\S+)/ or die "Can't parse $_";
+ push @enums, $enum;
+ push @names, $name;
+}
+
+safer_unlink 'overload.h';
+die "overload.h: $!" unless open(H, ">overload.h");
+binmode H;
+select H;
+print <<'EOF';
+/* -*- buffer-read-only: t -*-
+ *
+ * overload.h
+ *
+ * Copyright (C) 1997, 1998, 2000, 2001, 2005 and 2006 by 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.
+ *
+ * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ * This file is built by overload.pl
+ */
+
+enum {
+EOF
+
+print " ${_}_amg,\n", foreach @enums;
+
+print <<'EOF';
+ max_amg_code
+ /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
+};
+
+
+#define NofAMmeth max_amg_code
+#define AMG_id2name(id) (PL_AMG_names[id]+1)
+
+#ifdef DOINIT
+EXTCONST char * const PL_AMG_names[NofAMmeth] = {
+ /* Names kept in the symbol table. fallback => "()", the rest has
+ "(" prepended. The only other place in perl which knows about
+ this convention is AMG_id2name (used for debugging output and
+ 'nomethod' only), the only other place which has it hardwired is
+ overload.pm. */
+EOF
+
+my $last = pop @names;
+print " \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names;
+
+print <<"EOT";
+ "$last"
+};
+#else
+EXTCONST char * PL_AMG_names[NofAMmeth];
+#endif /* def INITAMAGIC */
+EOT
+
+__DATA__
+# Fallback should be the first
+fallback ()
+
+# These 5 are the most common in the fallback switch statement in amagic_call
+to_sv (${}
+to_av (@{}
+to_hv (%{}
+to_gv (*{}
+to_cv (&{}
+
+# These have non-default cases in that switch statement
+inc (++
+dec (--
+bool_ (bool
+numer (0+
+string (""
+not (!
+copy (=
+abs (abs
+neg (neg
+iter (<>
+int (int
+
+# These 12 feature in the next switch statement
+lt (<
+le (<=
+gt (>
+ge (>=
+eq (==
+ne (!=
+slt (lt
+sle (le
+sgt (gt
+sge (ge
+seq (eq
+sne (ne
+
+nomethod (nomethod
+add (+
+add_ass (+=
+subtr (-
+subtr_ass (-=
+mult (*
+mult_ass (*=
+div (/
+div_ass (/=
+modulo (%
+modulo_ass (%=
+pow (**
+pow_ass (**=
+lshift (<<
+lshift_ass (<<=
+rshift (>>
+rshift_ass (>>=
+band (&
+band_ass (&=
+bor (|
+bor_ass (|=
+bxor (^
+bxor_ass (^=
+ncmp (<=>
+scmp (cmp
+compl (~
+atan2 (atan2
+cos (cos
+sin (sin
+exp (exp
+log (log
+sqrt (sqrt
+repeat (x
+repeat_ass (x=
+concat (.
+concat_ass (.=
+smart (~~
+# Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry
+DESTROY DESTROY
diff --git a/perl.h b/perl.h
index 363fa0cdb4..93b4d62f11 100644
--- a/perl.h
+++ b/perl.h
@@ -4938,96 +4938,7 @@ MGVTBL_SET(
NULL
);
-
-enum {
- fallback_amg, abs_amg,
- bool__amg, nomethod_amg,
- string_amg, numer_amg,
- add_amg, add_ass_amg,
- subtr_amg, subtr_ass_amg,
- mult_amg, mult_ass_amg,
- div_amg, div_ass_amg,
- modulo_amg, modulo_ass_amg,
- pow_amg, pow_ass_amg,
- lshift_amg, lshift_ass_amg,
- rshift_amg, rshift_ass_amg,
- band_amg, band_ass_amg,
- bor_amg, bor_ass_amg,
- bxor_amg, bxor_ass_amg,
- lt_amg, le_amg,
- gt_amg, ge_amg,
- eq_amg, ne_amg,
- ncmp_amg, scmp_amg,
- slt_amg, sle_amg,
- sgt_amg, sge_amg,
- seq_amg, sne_amg,
- not_amg, compl_amg,
- inc_amg, dec_amg,
- atan2_amg, cos_amg,
- sin_amg, exp_amg,
- log_amg, sqrt_amg,
- repeat_amg, repeat_ass_amg,
- concat_amg, concat_ass_amg,
- copy_amg, neg_amg,
- to_sv_amg, to_av_amg,
- to_hv_amg, to_gv_amg,
- to_cv_amg, iter_amg,
- int_amg, smart_amg,
-
- /* Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry */
- DESTROY_amg,
- max_amg_code
- /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
-};
-
-#define NofAMmeth max_amg_code
-#define AMG_id2name(id) (PL_AMG_names[id]+1)
-
-#ifdef DOINIT
-EXTCONST char * const PL_AMG_names[NofAMmeth] = {
- /* Names kept in the symbol table. fallback => "()", the rest has
- "(" prepended. The only other place in perl which knows about
- this convention is AMG_id2name (used for debugging output and
- 'nomethod' only), the only other place which has it hardwired is
- overload.pm. */
- "()", "(abs", /* "fallback" should be the first. */
- "(bool", "(nomethod",
- "(\"\"", "(0+",
- "(+", "(+=",
- "(-", "(-=",
- "(*", "(*=",
- "(/", "(/=",
- "(%", "(%=",
- "(**", "(**=",
- "(<<", "(<<=",
- "(>>", "(>>=",
- "(&", "(&=",
- "(|", "(|=",
- "(^", "(^=",
- "(<", "(<=",
- "(>", "(>=",
- "(==", "(!=",
- "(<=>", "(cmp",
- "(lt", "(le",
- "(gt", "(ge",
- "(eq", "(ne",
- "(!", "(~",
- "(++", "(--",
- "(atan2", "(cos",
- "(sin", "(exp",
- "(log", "(sqrt",
- "(x", "(x=",
- "(.", "(.=",
- "(=", "(neg",
- "(${}", "(@{}",
- "(%{}", "(*{}",
- "(&{}", "(<>",
- "(int", "(~~",
- "DESTROY"
-};
-#else
-EXTCONST char * PL_AMG_names[NofAMmeth];
-#endif /* def INITAMAGIC */
+#include "overload.h"
END_EXTERN_C