Commit | Line | Data |
bab3dc31 |
1 | #!/usr/bin/perl -w |
bab3dc31 |
2 | # |
6294c161 |
3 | # Unconditionally regenerate: |
4 | # |
5 | # overload.h |
6 | # overload.c |
7 | # lib/overload/numbers.pm |
8 | # |
9 | # from information stored in the DATA section of this file. |
10 | # |
8c798f87 |
11 | # This allows the order of overloading constants to be changed. |
6294c161 |
12 | # |
13 | # Accepts the standard regen_lib -q and -v args. |
14 | # |
15 | # This script is normally invoked from regen.pl. |
bab3dc31 |
16 | |
17 | BEGIN { |
18 | # Get function prototypes |
19 | require 'regen_lib.pl'; |
20 | } |
21 | |
22 | use strict; |
23 | |
e46c382e |
24 | use File::Spec::Functions qw(catdir catfile);; |
25 | |
bab3dc31 |
26 | my (@enums, @names); |
27 | while (<DATA>) { |
28 | next if /^#/; |
29 | next if /^$/; |
30 | my ($enum, $name) = /^(\S+)\s+(\S+)/ or die "Can't parse $_"; |
31 | push @enums, $enum; |
32 | push @names, $name; |
33 | } |
34 | |
e46c382e |
35 | safer_unlink ('overload.h', 'overload.c', catfile(qw(lib overload numbers.pm))); |
08858ed2 |
36 | my $c = safer_open("overload.c"); |
37 | my $h = safer_open("overload.h"); |
e46c382e |
38 | mkdir("lib/overload") unless -d catdir(qw(lib overload)); |
39 | my $p = safer_open(catfile(qw(lib overload numbers.pm))); |
40 | |
41 | |
42 | select $p; |
43 | |
44 | { |
45 | local $" = "\n "; |
46 | print <<"EOF"; |
47 | # -*- buffer-read-only: t -*- |
48 | # |
49 | # lib/overload/numbers.pm |
50 | # |
51 | # Copyright (C) 2008 by Larry Wall and others |
52 | # |
53 | # You may distribute under the terms of either the GNU General Public |
54 | # License or the Artistic License, as specified in the README file. |
55 | # |
56 | # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! |
57 | # This file is built by overload.pl |
58 | # |
59 | |
60 | package overload::numbers; |
61 | |
62 | our \@names = qw# |
63 | @names |
64 | #; |
65 | |
66 | our \@enums = qw# |
67 | @enums |
68 | #; |
69 | |
d87d3eed |
70 | { my \$i = 0; our %names = map { \$_ => \$i++ } \@names } |
e46c382e |
71 | |
d87d3eed |
72 | { my \$i = 0; our %enums = map { \$_ => \$i++ } \@enums } |
e46c382e |
73 | |
74 | EOF |
75 | } |
76 | |
8261f8eb |
77 | |
78 | sub print_header { |
79 | my $file = shift; |
80 | print <<"EOF"; |
bab3dc31 |
81 | /* -*- buffer-read-only: t -*- |
82 | * |
8261f8eb |
83 | * $file |
bab3dc31 |
84 | * |
38f14693 |
85 | * Copyright (C) 1997, 1998, 2000, 2001, 2005, 2006, 2007 by Larry Wall |
86 | * and others |
bab3dc31 |
87 | * |
88 | * You may distribute under the terms of either the GNU General Public |
89 | * License or the Artistic License, as specified in the README file. |
90 | * |
91 | * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! |
92 | * This file is built by overload.pl |
93 | */ |
8261f8eb |
94 | EOF |
95 | } |
96 | |
08858ed2 |
97 | select $c; |
8261f8eb |
98 | print_header('overload.c'); |
99 | |
08858ed2 |
100 | select $h; |
8261f8eb |
101 | print_header('overload.h'); |
102 | print <<'EOF'; |
bab3dc31 |
103 | |
104 | enum { |
105 | EOF |
106 | |
107 | print " ${_}_amg,\n", foreach @enums; |
108 | |
109 | print <<'EOF'; |
110 | max_amg_code |
111 | /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */ |
112 | }; |
113 | |
bab3dc31 |
114 | #define NofAMmeth max_amg_code |
8261f8eb |
115 | |
116 | EOF |
117 | |
08858ed2 |
118 | print $c <<'EOF'; |
8261f8eb |
119 | |
bab3dc31 |
120 | #define AMG_id2name(id) (PL_AMG_names[id]+1) |
82af6593 |
121 | #define AMG_id2namelen(id) (PL_AMG_namelens[id]-1) |
bab3dc31 |
122 | |
2e1c5ef0 |
123 | static const U8 PL_AMG_namelens[NofAMmeth] = { |
d279ab82 |
124 | EOF |
125 | |
126 | my $last = pop @names; |
127 | |
08858ed2 |
128 | print $c " $_,\n" foreach map { length $_ } @names; |
d279ab82 |
129 | |
130 | my $lastlen = length $last; |
08858ed2 |
131 | print $c <<"EOT"; |
d279ab82 |
132 | $lastlen |
133 | }; |
134 | |
2e1c5ef0 |
135 | static const char * const PL_AMG_names[NofAMmeth] = { |
bab3dc31 |
136 | /* Names kept in the symbol table. fallback => "()", the rest has |
137 | "(" prepended. The only other place in perl which knows about |
138 | this convention is AMG_id2name (used for debugging output and |
139 | 'nomethod' only), the only other place which has it hardwired is |
140 | overload.pm. */ |
d279ab82 |
141 | EOT |
bab3dc31 |
142 | |
08858ed2 |
143 | print $c " \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names; |
bab3dc31 |
144 | |
08858ed2 |
145 | print $c <<"EOT"; |
bab3dc31 |
146 | "$last" |
147 | }; |
bab3dc31 |
148 | EOT |
149 | |
08858ed2 |
150 | safer_close($h); |
151 | safer_close($c); |
e46c382e |
152 | safer_close($p); |
8c798f87 |
153 | |
bab3dc31 |
154 | __DATA__ |
155 | # Fallback should be the first |
156 | fallback () |
157 | |
158 | # These 5 are the most common in the fallback switch statement in amagic_call |
159 | to_sv (${} |
160 | to_av (@{} |
161 | to_hv (%{} |
162 | to_gv (*{} |
163 | to_cv (&{} |
164 | |
165 | # These have non-default cases in that switch statement |
166 | inc (++ |
167 | dec (-- |
168 | bool_ (bool |
169 | numer (0+ |
170 | string ("" |
171 | not (! |
172 | copy (= |
173 | abs (abs |
174 | neg (neg |
175 | iter (<> |
176 | int (int |
177 | |
178 | # These 12 feature in the next switch statement |
179 | lt (< |
180 | le (<= |
181 | gt (> |
182 | ge (>= |
183 | eq (== |
184 | ne (!= |
185 | slt (lt |
186 | sle (le |
187 | sgt (gt |
188 | sge (ge |
189 | seq (eq |
190 | sne (ne |
191 | |
192 | nomethod (nomethod |
193 | add (+ |
194 | add_ass (+= |
195 | subtr (- |
196 | subtr_ass (-= |
197 | mult (* |
198 | mult_ass (*= |
199 | div (/ |
200 | div_ass (/= |
201 | modulo (% |
202 | modulo_ass (%= |
203 | pow (** |
204 | pow_ass (**= |
205 | lshift (<< |
206 | lshift_ass (<<= |
207 | rshift (>> |
208 | rshift_ass (>>= |
209 | band (& |
210 | band_ass (&= |
211 | bor (| |
212 | bor_ass (|= |
213 | bxor (^ |
214 | bxor_ass (^= |
215 | ncmp (<=> |
216 | scmp (cmp |
217 | compl (~ |
218 | atan2 (atan2 |
219 | cos (cos |
220 | sin (sin |
221 | exp (exp |
222 | log (log |
223 | sqrt (sqrt |
224 | repeat (x |
225 | repeat_ass (x= |
226 | concat (. |
227 | concat_ass (.= |
228 | smart (~~ |
8c8d0d99 |
229 | ftest (-X |
bab3dc31 |
230 | # Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry |
231 | DESTROY DESTROY |