diff options
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | overload.h | 168 | ||||
-rw-r--r-- | overload.pl | 153 | ||||
-rw-r--r-- | perl.h | 91 |
4 files changed, 324 insertions, 90 deletions
@@ -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 @@ -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 |