diff options
author | Steffen Mueller <smueller@cpan.org> | 2010-10-10 15:43:47 +0200 |
---|---|---|
committer | Steffen Mueller <smueller@cpan.org> | 2010-10-10 15:55:11 +0200 |
commit | af00134636ffe4172cbffeaed3bbad802e58d8a0 (patch) | |
tree | f5ab1e5e8ec6035e6bf8c3e3f497b822e0ff8c1c /regen/overload.pl | |
parent | 98f8176da90af0f0d21fac5f61e6d180814b57c9 (diff) | |
download | perl-af00134636ffe4172cbffeaed3bbad802e58d8a0.tar.gz |
Move regen scripts to regen/
Moves the various scripts that are called by regen.pl to a subdirectory
to reduce clutter.
Diffstat (limited to 'regen/overload.pl')
-rw-r--r-- | regen/overload.pl | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/regen/overload.pl b/regen/overload.pl new file mode 100644 index 0000000000..5e145318e5 --- /dev/null +++ b/regen/overload.pl @@ -0,0 +1,232 @@ +#!/usr/bin/perl -w +# +# Regenerate (overwriting only if changed): +# +# overload.h +# overload.c +# lib/overload/numbers.pm +# +# from information stored in the DATA section of this file. +# +# This allows the order of overloading constants to be changed. +# +# Accepts the standard regen_lib -q and -v args. +# +# This script is normally invoked from regen.pl. + +BEGIN { + # Get function prototypes + require 'regen/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 ('lib/overload/numbers.pm'); +my $c = safer_open("overload.c-new"); +my $h = safer_open("overload.h-new"); +mkdir("lib/overload", 0777) unless -d 'lib/overload'; +my $p = safer_open('lib/overload/numbers.pm'); + + +select $p; + +{ +local $" = "\n "; +print <<"EOF"; +# -*- buffer-read-only: t -*- +# +# lib/overload/numbers.pm +# +# Copyright (C) 2008 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 +# + +package overload::numbers; + +our \@names = qw# + @names +#; + +our \@enums = qw# + @enums +#; + +{ my \$i = 0; our %names = map { \$_ => \$i++ } \@names } + +{ my \$i = 0; our %enums = map { \$_ => \$i++ } \@enums } + +EOF +} + + +sub print_header { + my $file = shift; + print <<"EOF"; +/* -*- buffer-read-only: t -*- + * + * $file + * + * Copyright (C) 1997, 1998, 2000, 2001, 2005, 2006, 2007 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 + */ +EOF +} + +select $c; +print_header('overload.c'); + +select $h; +print_header('overload.h'); +print <<'EOF'; + +enum { +EOF + +print map " ${_}_amg,\n", @enums; + +print <<'EOF'; + max_amg_code + /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */ +}; + +#define NofAMmeth max_amg_code + +EOF + +print $c <<'EOF'; + +#define AMG_id2name(id) (PL_AMG_names[id]+1) +#define AMG_id2namelen(id) (PL_AMG_namelens[id]-1) + +static const U8 PL_AMG_namelens[NofAMmeth] = { +EOF + +my $last = pop @names; + +print $c map { " " . (length $_) . ",\n" } @names; + +my $lastlen = length $last; +print $c <<"EOT"; + $lastlen +}; + +static const 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. */ +EOT + +print $c map { s/(["\\"])/\\$1/g; " \"$_\",\n" } @names; + +print $c <<"EOT"; + "$last" +}; +EOT + +safer_close($h); +safer_close($c); +safer_close($p); +rename_if_different("overload.c-new", "overload.c"); +rename_if_different("overload.h-new","overload.h"); + +__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 (~~ +ftest (-X +regexp (qr +# Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry +DESTROY DESTROY |