Commit | Line | Data |
---|---|---|
6a28abbc NC |
1 | package P5AST; |
2 | ||
3 | $::herequeue = ''; | |
4 | ||
5 | 1; | |
6 | ||
7 | { | |
8 | my %newkey = qw( | |
9 | ); | |
10 | ||
11 | sub translate { | |
12 | my $class = shift; | |
13 | my $key = shift; | |
14 | $key = $newkey{$key} || "op_$key"; | |
15 | return "P5AST::$key"; | |
16 | } | |
17 | } | |
18 | ||
19 | sub new { | |
20 | my $class = shift; | |
21 | bless {@_}, $class; | |
22 | } | |
23 | ||
24 | sub AUTOLOAD { | |
25 | warn "AUTOLOAD $P5AST::AUTOLOAD(" . join(',', @_) . ")\n"; | |
26 | } | |
27 | ||
28 | sub DESTROY { } | |
29 | ||
30 | sub p5arraytext { | |
31 | my $kid = shift; | |
32 | my $text = ""; | |
33 | for my $subkid (@$kid) { | |
34 | my $type = ref $subkid; | |
35 | if ($type eq 'ARRAY') { | |
36 | if ($dowarn) { | |
37 | warn "Extra array\n"; | |
38 | $text .= '〔 '. p5arraytext($subkid) . ' 〕'; | |
39 | } | |
40 | else { | |
41 | $text .= p5arraytext($subkid); | |
42 | } | |
43 | } | |
44 | elsif ($type =~ /^p5::/) { | |
45 | my $newtext = $subkid->enc(); | |
46 | if ($::herequeue && $newtext =~ s/\n/\n$::herequeue/) { | |
47 | $::herequeue = ''; | |
48 | } | |
49 | $text .= $newtext; | |
50 | } | |
51 | elsif ($type) { | |
52 | $text .= $subkid->text(@_); | |
53 | } | |
54 | else { | |
55 | $text .= $subkid; | |
56 | } | |
57 | } | |
58 | return $text; | |
59 | } | |
60 | ||
61 | sub p5text { | |
62 | my $self = shift; | |
63 | # my $pre = $self->pretext(); | |
64 | # my $post = $self->posttext(); | |
65 | my $text = ""; | |
66 | foreach my $kid (@{$$self{Kids}}) { | |
67 | my $type = ref $kid; | |
68 | if ($type eq 'ARRAY') { | |
69 | $text .= p5arraytext($kid); | |
70 | } | |
71 | elsif ($type =~ /^p5::/) { | |
72 | my $newtext = $kid->enc(); | |
73 | if ($::herequeue && $newtext =~ s/\n/\n$::herequeue/) { | |
74 | $::herequeue = ''; | |
75 | } | |
76 | $text .= $newtext; | |
77 | } | |
b3f5cf18 GG |
78 | elsif ($type eq "chomp") { |
79 | $text =~ s/\n$//g; | |
80 | } | |
6a28abbc NC |
81 | elsif ($type) { |
82 | $text .= $kid->p5text(@_); | |
83 | } | |
84 | elsif (defined $kid) { | |
85 | $text .= $kid; | |
86 | } | |
87 | else { | |
88 | $text .= '[[[ UNDEF ]]]'; | |
89 | } | |
90 | } | |
91 | return $text; | |
92 | } | |
93 | ||
94 | sub p5subtext { | |
95 | my $self = shift; | |
96 | my @text; | |
97 | foreach my $kid (@{$$self{Kids}}) { | |
98 | my $text = $kid->p5text(@_); | |
99 | push @text, $text if defined $text; | |
100 | } | |
101 | return @text; | |
102 | } | |
103 | ||
104 | sub p6text { | |
105 | return $_[0]->p5text(); # assume it's the same | |
106 | } | |
107 | ||
108 | package P5AST::heredoc; @ISA = 'P5AST'; | |
109 | ||
110 | sub p5text { | |
111 | my $self = shift; | |
112 | my $newdoc; | |
113 | { | |
114 | local $::herequeue; # don't interpolate outer heredoc yet | |
115 | $newdoc = $self->{doc}->p5text(@_) . $self->{end}->enc(); | |
116 | if ($::herequeue) { # heredoc within the heredoc? | |
117 | $newdoc .= $::herequeue; | |
118 | $::herequeue = ''; | |
119 | } | |
120 | } | |
121 | $::herequeue .= $newdoc; | |
122 | my $start = $self->{start}; | |
123 | my $type = ref $start; | |
124 | if ($type =~ /^p5::/) { # XXX too much cut-n-paste here... | |
125 | return $start->enc(); | |
126 | } | |
127 | elsif ($type) { | |
128 | return $start->p5text(@_); | |
129 | } | |
130 | else { | |
131 | return $start; | |
132 | } | |
133 | } | |
134 | ||
135 | package P5AST::BAD; | |
136 | ||
137 | sub p5text { | |
138 | my $self = shift; | |
139 | my $t = ref $t; | |
140 | warn "Shouldn't have a node of type $t"; | |
141 | } | |
142 | ||
143 | package P5AST::baseop; @ISA = 'P5AST'; | |
144 | package P5AST::baseop_unop; @ISA = 'P5AST::baseop'; | |
145 | package P5AST::binop; @ISA = 'P5AST::baseop'; | |
146 | package P5AST::cop; @ISA = 'P5AST::baseop'; | |
147 | package P5AST::filestatop; @ISA = 'P5AST::baseop'; | |
148 | package P5AST::listop; @ISA = 'P5AST::baseop'; | |
149 | package P5AST::logop; @ISA = 'P5AST::baseop'; | |
150 | package P5AST::loop; @ISA = 'P5AST::baseop'; | |
151 | package P5AST::loopexop; @ISA = 'P5AST::baseop'; | |
152 | package P5AST::padop; @ISA = 'P5AST::baseop'; | |
153 | package P5AST::padop_svop; @ISA = 'P5AST::baseop'; | |
154 | package P5AST::pmop; @ISA = 'P5AST::baseop'; | |
155 | package P5AST::pvop_svop; @ISA = 'P5AST::baseop'; | |
156 | package P5AST::unop; @ISA = 'P5AST::baseop'; | |
157 | ||
158 | # Nothing. | |
159 | ||
160 | package P5AST::op_null; @ISA = 'P5AST::baseop'; | |
161 | package P5AST::op_stub; @ISA = 'P5AST::baseop'; | |
162 | package P5AST::op_scalar; @ISA = 'P5AST::baseop_unop'; | |
163 | ||
164 | # Pushy stuff. | |
165 | ||
166 | package P5AST::op_pushmark; @ISA = 'P5AST::baseop'; | |
167 | package P5AST::op_wantarray; @ISA = 'P5AST::baseop'; | |
168 | package P5AST::op_const; @ISA = 'P5AST::padop_svop'; | |
169 | package P5AST::op_gvsv; @ISA = 'P5AST::padop_svop'; | |
170 | package P5AST::op_gv; @ISA = 'P5AST::padop_svop'; | |
171 | package P5AST::op_gelem; @ISA = 'P5AST::binop'; | |
172 | package P5AST::op_padsv; @ISA = 'P5AST::baseop'; | |
173 | package P5AST::op_padav; @ISA = 'P5AST::baseop'; | |
174 | package P5AST::op_padhv; @ISA = 'P5AST::baseop'; | |
175 | package P5AST::op_padany; @ISA = 'P5AST::baseop'; | |
176 | package P5AST::op_pushre; @ISA = 'P5AST::pmop'; | |
177 | package P5AST::op_rv2gv; @ISA = 'P5AST::unop'; | |
178 | package P5AST::op_rv2sv; @ISA = 'P5AST::unop'; | |
179 | package P5AST::op_av2arylen; @ISA = 'P5AST::unop'; | |
180 | package P5AST::op_rv2cv; @ISA = 'P5AST::unop'; | |
181 | package P5AST::op_anoncode; @ISA = 'P5AST::padop_svop'; | |
182 | package P5AST::op_prototype; @ISA = 'P5AST::baseop_unop'; | |
183 | package P5AST::op_refgen; @ISA = 'P5AST::unop'; | |
184 | package P5AST::op_srefgen; @ISA = 'P5AST::unop'; | |
185 | package P5AST::op_ref; @ISA = 'P5AST::baseop_unop'; | |
186 | package P5AST::op_bless; @ISA = 'P5AST::listop'; | |
187 | package P5AST::op_backtick; @ISA = 'P5AST::baseop_unop'; | |
188 | package P5AST::op_glob; @ISA = 'P5AST::listop'; | |
189 | package P5AST::op_readline; @ISA = 'P5AST::baseop_unop'; | |
190 | package P5AST::op_rcatline; @ISA = 'P5AST::padop_svop'; | |
191 | package P5AST::op_regcmaybe; @ISA = 'P5AST::unop'; | |
192 | package P5AST::op_regcreset; @ISA = 'P5AST::unop'; | |
193 | package P5AST::op_regcomp; @ISA = 'P5AST::logop'; | |
194 | package P5AST::op_match; @ISA = 'P5AST::pmop'; | |
195 | package P5AST::op_qr; @ISA = 'P5AST::pmop'; | |
196 | package P5AST::op_subst; @ISA = 'P5AST::pmop'; | |
197 | package P5AST::op_substcont; @ISA = 'P5AST::logop'; | |
198 | package P5AST::op_trans; @ISA = 'P5AST::pvop_svop'; | |
199 | package P5AST::op_sassign; @ISA = 'P5AST::baseop'; | |
200 | package P5AST::op_aassign; @ISA = 'P5AST::binop'; | |
201 | package P5AST::op_chop; @ISA = 'P5AST::baseop_unop'; | |
202 | package P5AST::op_schop; @ISA = 'P5AST::baseop_unop'; | |
203 | package P5AST::op_chomp; @ISA = 'P5AST::baseop_unop'; | |
204 | package P5AST::op_schomp; @ISA = 'P5AST::baseop_unop'; | |
205 | package P5AST::op_defined; @ISA = 'P5AST::baseop_unop'; | |
206 | package P5AST::op_undef; @ISA = 'P5AST::baseop_unop'; | |
207 | package P5AST::op_study; @ISA = 'P5AST::baseop_unop'; | |
208 | package P5AST::op_pos; @ISA = 'P5AST::baseop_unop'; | |
209 | package P5AST::op_preinc; @ISA = 'P5AST::unop'; | |
210 | package P5AST::op_i_preinc; @ISA = 'P5AST::unop'; | |
211 | package P5AST::op_predec; @ISA = 'P5AST::unop'; | |
212 | package P5AST::op_i_predec; @ISA = 'P5AST::unop'; | |
213 | package P5AST::op_postinc; @ISA = 'P5AST::unop'; | |
214 | package P5AST::op_i_postinc; @ISA = 'P5AST::unop'; | |
215 | package P5AST::op_postdec; @ISA = 'P5AST::unop'; | |
216 | package P5AST::op_i_postdec; @ISA = 'P5AST::unop'; | |
217 | package P5AST::op_pow; @ISA = 'P5AST::binop'; | |
218 | package P5AST::op_multiply; @ISA = 'P5AST::binop'; | |
219 | package P5AST::op_i_multiply; @ISA = 'P5AST::binop'; | |
220 | package P5AST::op_divide; @ISA = 'P5AST::binop'; | |
221 | package P5AST::op_i_divide; @ISA = 'P5AST::binop'; | |
222 | package P5AST::op_modulo; @ISA = 'P5AST::binop'; | |
223 | package P5AST::op_i_modulo; @ISA = 'P5AST::binop'; | |
224 | package P5AST::op_repeat; @ISA = 'P5AST::binop'; | |
225 | package P5AST::op_add; @ISA = 'P5AST::binop'; | |
226 | package P5AST::op_i_add; @ISA = 'P5AST::binop'; | |
227 | package P5AST::op_subtract; @ISA = 'P5AST::binop'; | |
228 | package P5AST::op_i_subtract; @ISA = 'P5AST::binop'; | |
229 | package P5AST::op_concat; @ISA = 'P5AST::binop'; | |
230 | package P5AST::op_stringify; @ISA = 'P5AST::listop'; | |
231 | package P5AST::op_left_shift; @ISA = 'P5AST::binop'; | |
232 | package P5AST::op_right_shift; @ISA = 'P5AST::binop'; | |
233 | package P5AST::op_lt; @ISA = 'P5AST::binop'; | |
234 | package P5AST::op_i_lt; @ISA = 'P5AST::binop'; | |
235 | package P5AST::op_gt; @ISA = 'P5AST::binop'; | |
236 | package P5AST::op_i_gt; @ISA = 'P5AST::binop'; | |
237 | package P5AST::op_le; @ISA = 'P5AST::binop'; | |
238 | package P5AST::op_i_le; @ISA = 'P5AST::binop'; | |
239 | package P5AST::op_ge; @ISA = 'P5AST::binop'; | |
240 | package P5AST::op_i_ge; @ISA = 'P5AST::binop'; | |
241 | package P5AST::op_eq; @ISA = 'P5AST::binop'; | |
242 | package P5AST::op_i_eq; @ISA = 'P5AST::binop'; | |
243 | package P5AST::op_ne; @ISA = 'P5AST::binop'; | |
244 | package P5AST::op_i_ne; @ISA = 'P5AST::binop'; | |
245 | package P5AST::op_ncmp; @ISA = 'P5AST::binop'; | |
246 | package P5AST::op_i_ncmp; @ISA = 'P5AST::binop'; | |
247 | package P5AST::op_slt; @ISA = 'P5AST::binop'; | |
248 | package P5AST::op_sgt; @ISA = 'P5AST::binop'; | |
249 | package P5AST::op_sle; @ISA = 'P5AST::binop'; | |
250 | package P5AST::op_sge; @ISA = 'P5AST::binop'; | |
251 | package P5AST::op_seq; @ISA = 'P5AST::binop'; | |
252 | package P5AST::op_sne; @ISA = 'P5AST::binop'; | |
253 | package P5AST::op_scmp; @ISA = 'P5AST::binop'; | |
254 | package P5AST::op_bit_and; @ISA = 'P5AST::binop'; | |
255 | package P5AST::op_bit_xor; @ISA = 'P5AST::binop'; | |
256 | package P5AST::op_bit_or; @ISA = 'P5AST::binop'; | |
257 | package P5AST::op_negate; @ISA = 'P5AST::unop'; | |
258 | package P5AST::op_i_negate; @ISA = 'P5AST::unop'; | |
259 | package P5AST::op_not; @ISA = 'P5AST::unop'; | |
260 | package P5AST::op_complement; @ISA = 'P5AST::unop'; | |
261 | package P5AST::op_atan2; @ISA = 'P5AST::listop'; | |
262 | package P5AST::op_sin; @ISA = 'P5AST::baseop_unop'; | |
263 | package P5AST::op_cos; @ISA = 'P5AST::baseop_unop'; | |
264 | package P5AST::op_rand; @ISA = 'P5AST::baseop_unop'; | |
265 | package P5AST::op_srand; @ISA = 'P5AST::baseop_unop'; | |
266 | package P5AST::op_exp; @ISA = 'P5AST::baseop_unop'; | |
267 | package P5AST::op_log; @ISA = 'P5AST::baseop_unop'; | |
268 | package P5AST::op_sqrt; @ISA = 'P5AST::baseop_unop'; | |
269 | package P5AST::op_int; @ISA = 'P5AST::baseop_unop'; | |
270 | package P5AST::op_hex; @ISA = 'P5AST::baseop_unop'; | |
271 | package P5AST::op_oct; @ISA = 'P5AST::baseop_unop'; | |
272 | package P5AST::op_abs; @ISA = 'P5AST::baseop_unop'; | |
273 | package P5AST::op_length; @ISA = 'P5AST::baseop_unop'; | |
274 | package P5AST::op_substr; @ISA = 'P5AST::listop'; | |
275 | package P5AST::op_vec; @ISA = 'P5AST::listop'; | |
276 | package P5AST::op_index; @ISA = 'P5AST::listop'; | |
277 | package P5AST::op_rindex; @ISA = 'P5AST::listop'; | |
278 | package P5AST::op_sprintf; @ISA = 'P5AST::listop'; | |
279 | package P5AST::op_formline; @ISA = 'P5AST::listop'; | |
280 | package P5AST::op_ord; @ISA = 'P5AST::baseop_unop'; | |
281 | package P5AST::op_chr; @ISA = 'P5AST::baseop_unop'; | |
282 | package P5AST::op_crypt; @ISA = 'P5AST::listop'; | |
283 | package P5AST::op_ucfirst; @ISA = 'P5AST::baseop_unop'; | |
284 | package P5AST::op_lcfirst; @ISA = 'P5AST::baseop_unop'; | |
285 | package P5AST::op_uc; @ISA = 'P5AST::baseop_unop'; | |
286 | package P5AST::op_lc; @ISA = 'P5AST::baseop_unop'; | |
287 | package P5AST::op_quotemeta; @ISA = 'P5AST::baseop_unop'; | |
288 | package P5AST::op_rv2av; @ISA = 'P5AST::unop'; | |
289 | package P5AST::op_aelemfast; @ISA = 'P5AST::padop_svop'; | |
290 | package P5AST::op_aelem; @ISA = 'P5AST::binop'; | |
291 | package P5AST::op_aslice; @ISA = 'P5AST::listop'; | |
292 | package P5AST::op_each; @ISA = 'P5AST::baseop_unop'; | |
293 | package P5AST::op_values; @ISA = 'P5AST::baseop_unop'; | |
294 | package P5AST::op_keys; @ISA = 'P5AST::baseop_unop'; | |
295 | package P5AST::op_delete; @ISA = 'P5AST::baseop_unop'; | |
296 | package P5AST::op_exists; @ISA = 'P5AST::baseop_unop'; | |
297 | package P5AST::op_rv2hv; @ISA = 'P5AST::unop'; | |
298 | package P5AST::op_helem; @ISA = 'P5AST::listop'; | |
299 | package P5AST::op_hslice; @ISA = 'P5AST::listop'; | |
300 | package P5AST::op_unpack; @ISA = 'P5AST::listop'; | |
301 | package P5AST::op_pack; @ISA = 'P5AST::listop'; | |
302 | package P5AST::op_split; @ISA = 'P5AST::listop'; | |
303 | package P5AST::op_join; @ISA = 'P5AST::listop'; | |
304 | package P5AST::op_list; @ISA = 'P5AST::listop'; | |
305 | package P5AST::op_lslice; @ISA = 'P5AST::binop'; | |
306 | package P5AST::op_anonlist; @ISA = 'P5AST::listop'; | |
307 | package P5AST::op_anonhash; @ISA = 'P5AST::listop'; | |
308 | package P5AST::op_splice; @ISA = 'P5AST::listop'; | |
309 | package P5AST::op_push; @ISA = 'P5AST::listop'; | |
310 | package P5AST::op_pop; @ISA = 'P5AST::baseop_unop'; | |
311 | package P5AST::op_shift; @ISA = 'P5AST::baseop_unop'; | |
312 | package P5AST::op_unshift; @ISA = 'P5AST::listop'; | |
313 | package P5AST::op_sort; @ISA = 'P5AST::listop'; | |
314 | package P5AST::op_reverse; @ISA = 'P5AST::listop'; | |
315 | package P5AST::op_grepstart; @ISA = 'P5AST::listop'; | |
316 | package P5AST::op_grepwhile; @ISA = 'P5AST::logop'; | |
317 | package P5AST::op_mapstart; @ISA = 'P5AST::listop'; | |
318 | package P5AST::op_mapwhile; @ISA = 'P5AST::logop'; | |
319 | package P5AST::op_range; @ISA = 'P5AST::logop'; | |
320 | package P5AST::op_flip; @ISA = 'P5AST::unop'; | |
321 | package P5AST::op_flop; @ISA = 'P5AST::unop'; | |
322 | package P5AST::op_and; @ISA = 'P5AST::logop'; | |
323 | package P5AST::op_or; @ISA = 'P5AST::logop'; | |
324 | package P5AST::op_xor; @ISA = 'P5AST::binop'; | |
325 | package P5AST::op_cond_expr; @ISA = 'P5AST::logop'; | |
326 | package P5AST::op_andassign; @ISA = 'P5AST::logop'; | |
327 | package P5AST::op_orassign; @ISA = 'P5AST::logop'; | |
328 | package P5AST::op_method; @ISA = 'P5AST::unop'; | |
329 | package P5AST::op_entersub; @ISA = 'P5AST::unop'; | |
330 | package P5AST::op_leavesub; @ISA = 'P5AST::unop'; | |
331 | package P5AST::op_leavesublv; @ISA = 'P5AST::unop'; | |
332 | package P5AST::op_caller; @ISA = 'P5AST::baseop_unop'; | |
333 | package P5AST::op_warn; @ISA = 'P5AST::listop'; | |
334 | package P5AST::op_die; @ISA = 'P5AST::listop'; | |
335 | package P5AST::op_reset; @ISA = 'P5AST::baseop_unop'; | |
336 | package P5AST::op_lineseq; @ISA = 'P5AST::listop'; | |
337 | package P5AST::op_nextstate; @ISA = 'P5AST::BAD'; | |
338 | package P5AST::op_dbstate; @ISA = 'P5AST::cop'; | |
339 | package P5AST::op_unstack; @ISA = 'P5AST::baseop'; | |
340 | package P5AST::op_enter; @ISA = 'P5AST::baseop'; | |
341 | package P5AST::op_leave; @ISA = 'P5AST::listop'; | |
342 | package P5AST::op_scope; @ISA = 'P5AST::listop'; | |
343 | package P5AST::op_enteriter; @ISA = 'P5AST::loop'; | |
344 | package P5AST::op_iter; @ISA = 'P5AST::baseop'; | |
345 | package P5AST::op_enterloop; @ISA = 'P5AST::loop'; | |
346 | package P5AST::op_leaveloop; @ISA = 'P5AST::binop'; | |
347 | package P5AST::op_return; @ISA = 'P5AST::listop'; | |
348 | package P5AST::op_last; @ISA = 'P5AST::loopexop'; | |
349 | package P5AST::op_next; @ISA = 'P5AST::loopexop'; | |
350 | package P5AST::op_redo; @ISA = 'P5AST::loopexop'; | |
351 | package P5AST::op_dump; @ISA = 'P5AST::loopexop'; | |
352 | package P5AST::op_goto; @ISA = 'P5AST::loopexop'; | |
353 | package P5AST::op_exit; @ISA = 'P5AST::baseop_unop'; | |
354 | package P5AST::op_open; @ISA = 'P5AST::listop'; | |
355 | package P5AST::op_close; @ISA = 'P5AST::baseop_unop'; | |
356 | package P5AST::op_pipe_op; @ISA = 'P5AST::listop'; | |
357 | package P5AST::op_fileno; @ISA = 'P5AST::baseop_unop'; | |
358 | package P5AST::op_umask; @ISA = 'P5AST::baseop_unop'; | |
359 | package P5AST::op_binmode; @ISA = 'P5AST::listop'; | |
360 | package P5AST::op_tie; @ISA = 'P5AST::listop'; | |
361 | package P5AST::op_untie; @ISA = 'P5AST::baseop_unop'; | |
362 | package P5AST::op_tied; @ISA = 'P5AST::baseop_unop'; | |
363 | package P5AST::op_dbmopen; @ISA = 'P5AST::listop'; | |
364 | package P5AST::op_dbmclose; @ISA = 'P5AST::baseop_unop'; | |
365 | package P5AST::op_sselect; @ISA = 'P5AST::listop'; | |
366 | package P5AST::op_select; @ISA = 'P5AST::listop'; | |
367 | package P5AST::op_getc; @ISA = 'P5AST::baseop_unop'; | |
368 | package P5AST::op_read; @ISA = 'P5AST::listop'; | |
369 | package P5AST::op_enterwrite; @ISA = 'P5AST::baseop_unop'; | |
370 | package P5AST::op_leavewrite; @ISA = 'P5AST::unop'; | |
371 | package P5AST::op_prtf; @ISA = 'P5AST::listop'; | |
372 | package P5AST::op_print; @ISA = 'P5AST::listop'; | |
793019c7 | 373 | package P5AST::op_say; @ISA = 'P5AST::listop'; |
6a28abbc NC |
374 | package P5AST::op_sysopen; @ISA = 'P5AST::listop'; |
375 | package P5AST::op_sysseek; @ISA = 'P5AST::listop'; | |
376 | package P5AST::op_sysread; @ISA = 'P5AST::listop'; | |
377 | package P5AST::op_syswrite; @ISA = 'P5AST::listop'; | |
378 | package P5AST::op_send; @ISA = 'P5AST::listop'; | |
379 | package P5AST::op_recv; @ISA = 'P5AST::listop'; | |
380 | package P5AST::op_eof; @ISA = 'P5AST::baseop_unop'; | |
381 | package P5AST::op_tell; @ISA = 'P5AST::baseop_unop'; | |
382 | package P5AST::op_seek; @ISA = 'P5AST::listop'; | |
383 | package P5AST::op_truncate; @ISA = 'P5AST::listop'; | |
384 | package P5AST::op_fcntl; @ISA = 'P5AST::listop'; | |
385 | package P5AST::op_ioctl; @ISA = 'P5AST::listop'; | |
386 | package P5AST::op_flock; @ISA = 'P5AST::listop'; | |
387 | package P5AST::op_socket; @ISA = 'P5AST::listop'; | |
388 | package P5AST::op_sockpair; @ISA = 'P5AST::listop'; | |
389 | package P5AST::op_bind; @ISA = 'P5AST::listop'; | |
390 | package P5AST::op_connect; @ISA = 'P5AST::listop'; | |
391 | package P5AST::op_listen; @ISA = 'P5AST::listop'; | |
392 | package P5AST::op_accept; @ISA = 'P5AST::listop'; | |
393 | package P5AST::op_shutdown; @ISA = 'P5AST::listop'; | |
394 | package P5AST::op_gsockopt; @ISA = 'P5AST::listop'; | |
395 | package P5AST::op_ssockopt; @ISA = 'P5AST::listop'; | |
396 | package P5AST::op_getsockname; @ISA = 'P5AST::baseop_unop'; | |
397 | package P5AST::op_getpeername; @ISA = 'P5AST::baseop_unop'; | |
398 | package P5AST::op_lstat; @ISA = 'P5AST::filestatop'; | |
399 | package P5AST::op_stat; @ISA = 'P5AST::filestatop'; | |
400 | package P5AST::op_ftrread; @ISA = 'P5AST::filestatop'; | |
401 | package P5AST::op_ftrwrite; @ISA = 'P5AST::filestatop'; | |
402 | package P5AST::op_ftrexec; @ISA = 'P5AST::filestatop'; | |
403 | package P5AST::op_fteread; @ISA = 'P5AST::filestatop'; | |
404 | package P5AST::op_ftewrite; @ISA = 'P5AST::filestatop'; | |
405 | package P5AST::op_fteexec; @ISA = 'P5AST::filestatop'; | |
406 | package P5AST::op_ftis; @ISA = 'P5AST::filestatop'; | |
407 | package P5AST::op_fteowned; @ISA = 'P5AST::filestatop'; | |
408 | package P5AST::op_ftrowned; @ISA = 'P5AST::filestatop'; | |
409 | package P5AST::op_ftzero; @ISA = 'P5AST::filestatop'; | |
410 | package P5AST::op_ftsize; @ISA = 'P5AST::filestatop'; | |
411 | package P5AST::op_ftmtime; @ISA = 'P5AST::filestatop'; | |
412 | package P5AST::op_ftatime; @ISA = 'P5AST::filestatop'; | |
413 | package P5AST::op_ftctime; @ISA = 'P5AST::filestatop'; | |
414 | package P5AST::op_ftsock; @ISA = 'P5AST::filestatop'; | |
415 | package P5AST::op_ftchr; @ISA = 'P5AST::filestatop'; | |
416 | package P5AST::op_ftblk; @ISA = 'P5AST::filestatop'; | |
417 | package P5AST::op_ftfile; @ISA = 'P5AST::filestatop'; | |
418 | package P5AST::op_ftdir; @ISA = 'P5AST::filestatop'; | |
419 | package P5AST::op_ftpipe; @ISA = 'P5AST::filestatop'; | |
420 | package P5AST::op_ftlink; @ISA = 'P5AST::filestatop'; | |
421 | package P5AST::op_ftsuid; @ISA = 'P5AST::filestatop'; | |
422 | package P5AST::op_ftsgid; @ISA = 'P5AST::filestatop'; | |
423 | package P5AST::op_ftsvtx; @ISA = 'P5AST::filestatop'; | |
424 | package P5AST::op_fttty; @ISA = 'P5AST::filestatop'; | |
425 | package P5AST::op_fttext; @ISA = 'P5AST::filestatop'; | |
426 | package P5AST::op_ftbinary; @ISA = 'P5AST::filestatop'; | |
427 | package P5AST::op_chdir; @ISA = 'P5AST::baseop_unop'; | |
428 | package P5AST::op_chown; @ISA = 'P5AST::listop'; | |
429 | package P5AST::op_chroot; @ISA = 'P5AST::baseop_unop'; | |
430 | package P5AST::op_unlink; @ISA = 'P5AST::listop'; | |
431 | package P5AST::op_chmod; @ISA = 'P5AST::listop'; | |
432 | package P5AST::op_utime; @ISA = 'P5AST::listop'; | |
433 | package P5AST::op_rename; @ISA = 'P5AST::listop'; | |
434 | package P5AST::op_link; @ISA = 'P5AST::listop'; | |
435 | package P5AST::op_symlink; @ISA = 'P5AST::listop'; | |
436 | package P5AST::op_readlink; @ISA = 'P5AST::baseop_unop'; | |
437 | package P5AST::op_mkdir; @ISA = 'P5AST::listop'; | |
438 | package P5AST::op_rmdir; @ISA = 'P5AST::baseop_unop'; | |
439 | package P5AST::op_open_dir; @ISA = 'P5AST::listop'; | |
440 | package P5AST::op_readdir; @ISA = 'P5AST::baseop_unop'; | |
441 | package P5AST::op_telldir; @ISA = 'P5AST::baseop_unop'; | |
442 | package P5AST::op_seekdir; @ISA = 'P5AST::listop'; | |
443 | package P5AST::op_rewinddir; @ISA = 'P5AST::baseop_unop'; | |
444 | package P5AST::op_closedir; @ISA = 'P5AST::baseop_unop'; | |
445 | package P5AST::op_fork; @ISA = 'P5AST::baseop'; | |
446 | package P5AST::op_wait; @ISA = 'P5AST::baseop'; | |
447 | package P5AST::op_waitpid; @ISA = 'P5AST::listop'; | |
448 | package P5AST::op_system; @ISA = 'P5AST::listop'; | |
449 | package P5AST::op_exec; @ISA = 'P5AST::listop'; | |
450 | package P5AST::op_kill; @ISA = 'P5AST::listop'; | |
451 | package P5AST::op_getppid; @ISA = 'P5AST::baseop'; | |
452 | package P5AST::op_getpgrp; @ISA = 'P5AST::baseop_unop'; | |
453 | package P5AST::op_setpgrp; @ISA = 'P5AST::listop'; | |
454 | package P5AST::op_getpriority; @ISA = 'P5AST::listop'; | |
455 | package P5AST::op_setpriority; @ISA = 'P5AST::listop'; | |
456 | package P5AST::op_time; @ISA = 'P5AST::baseop'; | |
457 | package P5AST::op_tms; @ISA = 'P5AST::baseop'; | |
458 | package P5AST::op_localtime; @ISA = 'P5AST::baseop_unop'; | |
459 | package P5AST::op_gmtime; @ISA = 'P5AST::baseop_unop'; | |
460 | package P5AST::op_alarm; @ISA = 'P5AST::baseop_unop'; | |
461 | package P5AST::op_sleep; @ISA = 'P5AST::baseop_unop'; | |
462 | package P5AST::op_shmget; @ISA = 'P5AST::listop'; | |
463 | package P5AST::op_shmctl; @ISA = 'P5AST::listop'; | |
464 | package P5AST::op_shmread; @ISA = 'P5AST::listop'; | |
465 | package P5AST::op_shmwrite; @ISA = 'P5AST::listop'; | |
466 | package P5AST::op_msgget; @ISA = 'P5AST::listop'; | |
467 | package P5AST::op_msgctl; @ISA = 'P5AST::listop'; | |
468 | package P5AST::op_msgsnd; @ISA = 'P5AST::listop'; | |
469 | package P5AST::op_msgrcv; @ISA = 'P5AST::listop'; | |
470 | package P5AST::op_semget; @ISA = 'P5AST::listop'; | |
471 | package P5AST::op_semctl; @ISA = 'P5AST::listop'; | |
472 | package P5AST::op_semop; @ISA = 'P5AST::listop'; | |
473 | package P5AST::op_require; @ISA = 'P5AST::baseop_unop'; | |
474 | package P5AST::op_dofile; @ISA = 'P5AST::unop'; | |
475 | package P5AST::op_entereval; @ISA = 'P5AST::baseop_unop'; | |
476 | package P5AST::op_leaveeval; @ISA = 'P5AST::unop'; | |
477 | package P5AST::op_entertry; @ISA = 'P5AST::logop'; | |
478 | package P5AST::op_leavetry; @ISA = 'P5AST::listop'; | |
479 | package P5AST::op_ghbyname; @ISA = 'P5AST::baseop_unop'; | |
480 | package P5AST::op_ghbyaddr; @ISA = 'P5AST::listop'; | |
481 | package P5AST::op_ghostent; @ISA = 'P5AST::baseop'; | |
482 | package P5AST::op_gnbyname; @ISA = 'P5AST::baseop_unop'; | |
483 | package P5AST::op_gnbyaddr; @ISA = 'P5AST::listop'; | |
484 | package P5AST::op_gnetent; @ISA = 'P5AST::baseop'; | |
485 | package P5AST::op_gpbyname; @ISA = 'P5AST::baseop_unop'; | |
486 | package P5AST::op_gpbynumber; @ISA = 'P5AST::listop'; | |
487 | package P5AST::op_gprotoent; @ISA = 'P5AST::baseop'; | |
488 | package P5AST::op_gsbyname; @ISA = 'P5AST::listop'; | |
489 | package P5AST::op_gsbyport; @ISA = 'P5AST::listop'; | |
490 | package P5AST::op_gservent; @ISA = 'P5AST::baseop'; | |
491 | package P5AST::op_shostent; @ISA = 'P5AST::baseop_unop'; | |
492 | package P5AST::op_snetent; @ISA = 'P5AST::baseop_unop'; | |
493 | package P5AST::op_sprotoent; @ISA = 'P5AST::baseop_unop'; | |
494 | package P5AST::op_sservent; @ISA = 'P5AST::baseop_unop'; | |
495 | package P5AST::op_ehostent; @ISA = 'P5AST::baseop'; | |
496 | package P5AST::op_enetent; @ISA = 'P5AST::baseop'; | |
497 | package P5AST::op_eprotoent; @ISA = 'P5AST::baseop'; | |
498 | package P5AST::op_eservent; @ISA = 'P5AST::baseop'; | |
499 | package P5AST::op_gpwnam; @ISA = 'P5AST::baseop_unop'; | |
500 | package P5AST::op_gpwuid; @ISA = 'P5AST::baseop_unop'; | |
501 | package P5AST::op_gpwent; @ISA = 'P5AST::baseop'; | |
502 | package P5AST::op_spwent; @ISA = 'P5AST::baseop'; | |
503 | package P5AST::op_epwent; @ISA = 'P5AST::baseop'; | |
504 | package P5AST::op_ggrnam; @ISA = 'P5AST::baseop_unop'; | |
505 | package P5AST::op_ggrgid; @ISA = 'P5AST::baseop_unop'; | |
506 | package P5AST::op_ggrent; @ISA = 'P5AST::baseop'; | |
507 | package P5AST::op_sgrent; @ISA = 'P5AST::baseop'; | |
508 | package P5AST::op_egrent; @ISA = 'P5AST::baseop'; | |
509 | package P5AST::op_getlogin; @ISA = 'P5AST::baseop'; | |
510 | package P5AST::op_syscall; @ISA = 'P5AST::listop'; | |
511 | package P5AST::op_lock; @ISA = 'P5AST::baseop_unop'; | |
512 | package P5AST::op_threadsv; @ISA = 'P5AST::baseop'; | |
513 | package P5AST::op_setstate; @ISA = 'P5AST::cop'; | |
514 | package P5AST::op_method_named; @ISA = 'P5AST::padop_svop'; | |
515 | package P5AST::op_dor; @ISA = 'P5AST::logop'; | |
516 | package P5AST::op_dorassign; @ISA = 'P5AST::logop'; | |
517 | package P5AST::op_custom; @ISA = 'P5AST::baseop'; | |
518 | ||
519 | # New node types (implicit types within perl) | |
520 | ||
521 | package P5AST::statement; @ISA = 'P5AST::cop'; | |
522 | package P5AST::peg; @ISA = 'P5AST::baseop'; | |
523 | package P5AST::parens; @ISA = 'P5AST::baseop'; | |
524 | package P5AST::bindop; @ISA = 'P5AST::baseop'; | |
525 | package P5AST::nothing; @ISA = 'P5AST::baseop'; | |
526 | package P5AST::condstate; @ISA = 'P5AST::logop'; | |
527 | package P5AST::use; @ISA = 'P5AST::baseop'; | |
528 | package P5AST::ternary; @ISA = 'P5AST::baseop'; | |
529 | package P5AST::sub; @ISA = 'P5AST::baseop'; | |
530 | package P5AST::condmod; @ISA = 'P5AST::logop'; | |
531 | package P5AST::package; @ISA = 'P5AST::baseop'; | |
532 | package P5AST::format; @ISA = 'P5AST::baseop'; | |
533 | package P5AST::qwliteral; @ISA = 'P5AST::baseop'; | |
534 | package P5AST::quote; @ISA = 'P5AST::baseop'; | |
535 | package P5AST::token; @ISA = 'P5AST::baseop'; | |
536 | package P5AST::attrlist; @ISA = 'P5AST::baseop'; | |
537 | package P5AST::listelem; @ISA = 'P5AST::baseop'; | |
538 | package P5AST::preplus; @ISA = 'P5AST::baseop'; | |
539 | package P5AST::doblock; @ISA = 'P5AST::baseop'; | |
540 | package P5AST::cfor; @ISA = 'P5AST::baseop'; | |
541 | package P5AST::pmop; @ISA = 'P5AST::baseop'; |