This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
newPADOP()'s sv parameter is never NULL, so mark it as so.
[perl5.git] / mad / PLXML.pm
CommitLineData
6a28abbc
NC
1package PLXML;
2
3sub DESTROY { }
4
5sub walk {
6 print "walk(" . join(',', @_) . ")\n";
7 my $self = shift;
8 for my $key (sort keys %$self) {
9 print "\t$key = <$$self{$key}>\n";
10 }
11 foreach $kid (@{$$self{Kids}}) {
12 $kid->walk(@_);
13 }
14}
15
16package PLXML::Characters;
17
18@ISA = ('PLXML');
19sub walk {}
20
21package PLXML::madprops;
22
23@ISA = ('PLXML');
24
25package PLXML::mad_op;
26
27@ISA = ('PLXML');
28
29package PLXML::mad_pv;
30
31@ISA = ('PLXML');
32
33package PLXML::baseop;
34
35@ISA = ('PLXML');
36
37package PLXML::baseop_unop;
38
39@ISA = ('PLXML');
40
41package PLXML::binop;
42
43@ISA = ('PLXML');
44
45package PLXML::cop;
46
47@ISA = ('PLXML');
48
49package PLXML::filestatop;
50
51@ISA = ('PLXML::baseop_unop');
52
53package PLXML::listop;
54
55@ISA = ('PLXML');
56
57package PLXML::logop;
58
59@ISA = ('PLXML');
60
61package PLXML::loop;
62
63@ISA = ('PLXML');
64
65package PLXML::loopexop;
66
67@ISA = ('PLXML');
68
69package PLXML::padop;
70
71@ISA = ('PLXML');
72
73package PLXML::padop_svop;
74
75@ISA = ('PLXML');
76
77package PLXML::pmop;
78
79@ISA = ('PLXML');
80
81package PLXML::pvop_svop;
82
83@ISA = ('PLXML');
84
85package PLXML::unop;
86
87@ISA = ('PLXML');
88
89
90# New ops always go at the end, just before 'custom'
91
92# A recapitulation of the format of this file:
93# The file consists of five columns: the name of the op, an English
94# description, the name of the "check" routine used to optimize this
95# operation, some flags, and a description of the operands.
96
97# The flags consist of options followed by a mandatory op class signifier
98
99# The classes are:
100# baseop - 0 unop - 1 binop - 2
101# logop - | listop - @ pmop - /
102# padop/svop - $ padop - # (unused) loop - {
103# baseop/unop - % loopexop - } filestatop - -
104# pvop/svop - " cop - ;
105
106# Other options are:
107# needs stack mark - m
108# needs constant folding - f
109# produces a scalar - s
110# produces an integer - i
111# needs a target - t
112# target can be in a pad - T
113# has a corresponding integer version - I
114# has side effects - d
115# uses $_ if no argument given - u
116
117# Values for the operands are:
118# scalar - S list - L array - A
119# hash - H sub (CV) - C file - F
120# socket - Fs filetest - F- reference - R
121# "?" denotes an optional operand.
122
123# Nothing.
124
125package PLXML::op_null;
126
127@ISA = ('PLXML::baseop');
128
129sub key { 'null' }
130sub desc { 'null operation' }
131sub check { 'ck_null' }
132sub flags { '0' }
133sub args { '' }
134
135
136package PLXML::op_stub;
137
138@ISA = ('PLXML::baseop');
139
140sub key { 'stub' }
141sub desc { 'stub' }
142sub check { 'ck_null' }
143sub flags { '0' }
144sub args { '' }
145
146
147package PLXML::op_scalar;
148
149@ISA = ('PLXML::baseop_unop');
150
151sub key { 'scalar' }
152sub desc { 'scalar' }
153sub check { 'ck_fun' }
154sub flags { 's%' }
155sub args { 'S' }
156
157
158
159# Pushy stuff.
160
161package PLXML::op_pushmark;
162
163@ISA = ('PLXML::baseop');
164
165sub key { 'pushmark' }
166sub desc { 'pushmark' }
167sub check { 'ck_null' }
168sub flags { 's0' }
169sub args { '' }
170
171
172package PLXML::op_wantarray;
173
174@ISA = ('PLXML::baseop');
175
176sub key { 'wantarray' }
177sub desc { 'wantarray' }
178sub check { 'ck_null' }
179sub flags { 'is0' }
180sub args { '' }
181
182
183
184package PLXML::op_const;
185
186@ISA = ('PLXML::padop_svop');
187
188sub key { 'const' }
189sub desc { 'constant item' }
190sub check { 'ck_svconst' }
191sub flags { 's$' }
192sub args { '' }
193
194
195
196package PLXML::op_gvsv;
197
198@ISA = ('PLXML::padop_svop');
199
200sub key { 'gvsv' }
201sub desc { 'scalar variable' }
202sub check { 'ck_null' }
203sub flags { 'ds$' }
204sub args { '' }
205
206
207package PLXML::op_gv;
208
209@ISA = ('PLXML::padop_svop');
210
211sub key { 'gv' }
212sub desc { 'glob value' }
213sub check { 'ck_null' }
214sub flags { 'ds$' }
215sub args { '' }
216
217
218package PLXML::op_gelem;
219
220@ISA = ('PLXML::binop');
221
222sub key { 'gelem' }
223sub desc { 'glob elem' }
224sub check { 'ck_null' }
225sub flags { 'd2' }
226sub args { 'S S' }
227
228
229package PLXML::op_padsv;
230
231@ISA = ('PLXML::baseop');
232
233sub key { 'padsv' }
234sub desc { 'private variable' }
235sub check { 'ck_null' }
236sub flags { 'ds0' }
237sub args { '' }
238
239
240package PLXML::op_padav;
241
242@ISA = ('PLXML::baseop');
243
244sub key { 'padav' }
245sub desc { 'private array' }
246sub check { 'ck_null' }
247sub flags { 'd0' }
248sub args { '' }
249
250
251package PLXML::op_padhv;
252
253@ISA = ('PLXML::baseop');
254
255sub key { 'padhv' }
256sub desc { 'private hash' }
257sub check { 'ck_null' }
258sub flags { 'd0' }
259sub args { '' }
260
261
262package PLXML::op_padany;
263
264@ISA = ('PLXML::baseop');
265
266sub key { 'padany' }
267sub desc { 'private value' }
268sub check { 'ck_null' }
269sub flags { 'd0' }
270sub args { '' }
271
272
273
274package PLXML::op_pushre;
275
276@ISA = ('PLXML::pmop');
277
278sub key { 'pushre' }
279sub desc { 'push regexp' }
280sub check { 'ck_null' }
281sub flags { 'd/' }
282sub args { '' }
283
284
285
286# References and stuff.
287
288package PLXML::op_rv2gv;
289
290@ISA = ('PLXML::unop');
291
292sub key { 'rv2gv' }
293sub desc { 'ref-to-glob cast' }
294sub check { 'ck_rvconst' }
295sub flags { 'ds1' }
296sub args { '' }
297
298
299package PLXML::op_rv2sv;
300
301@ISA = ('PLXML::unop');
302
303sub key { 'rv2sv' }
304sub desc { 'scalar dereference' }
305sub check { 'ck_rvconst' }
306sub flags { 'ds1' }
307sub args { '' }
308
309
310package PLXML::op_av2arylen;
311
312@ISA = ('PLXML::unop');
313
314sub key { 'av2arylen' }
315sub desc { 'array length' }
316sub check { 'ck_null' }
317sub flags { 'is1' }
318sub args { '' }
319
320
321package PLXML::op_rv2cv;
322
323@ISA = ('PLXML::unop');
324
325sub key { 'rv2cv' }
326sub desc { 'subroutine dereference' }
327sub check { 'ck_rvconst' }
328sub flags { 'd1' }
329sub args { '' }
330
331
332package PLXML::op_anoncode;
333
334@ISA = ('PLXML::padop_svop');
335
336sub key { 'anoncode' }
337sub desc { 'anonymous subroutine' }
338sub check { 'ck_anoncode' }
339sub flags { '$' }
340sub args { '' }
341
342
343package PLXML::op_prototype;
344
345@ISA = ('PLXML::baseop_unop');
346
347sub key { 'prototype' }
348sub desc { 'subroutine prototype' }
349sub check { 'ck_null' }
350sub flags { 's%' }
351sub args { 'S' }
352
353
354package PLXML::op_refgen;
355
356@ISA = ('PLXML::unop');
357
358sub key { 'refgen' }
359sub desc { 'reference constructor' }
360sub check { 'ck_spair' }
361sub flags { 'm1' }
362sub args { 'L' }
363
364
365package PLXML::op_srefgen;
366
367@ISA = ('PLXML::unop');
368
369sub key { 'srefgen' }
370sub desc { 'single ref constructor' }
371sub check { 'ck_null' }
372sub flags { 'fs1' }
373sub args { 'S' }
374
375
376package PLXML::op_ref;
377
378@ISA = ('PLXML::baseop_unop');
379
380sub key { 'ref' }
381sub desc { 'reference-type operator' }
382sub check { 'ck_fun' }
383sub flags { 'stu%' }
384sub args { 'S?' }
385
386
387package PLXML::op_bless;
388
389@ISA = ('PLXML::listop');
390
391sub key { 'bless' }
392sub desc { 'bless' }
393sub check { 'ck_fun' }
394sub flags { 's@' }
395sub args { 'S S?' }
396
397
398
399# Pushy I/O.
400
401package PLXML::op_backtick;
402
403@ISA = ('PLXML::baseop_unop');
404
405sub key { 'backtick' }
406sub desc { 'quoted execution (``, qx)' }
407sub check { 'ck_open' }
408sub flags { 't%' }
409sub args { '' }
410
411
412# glob defaults its first arg to $_
413package PLXML::op_glob;
414
415@ISA = ('PLXML::listop');
416
417sub key { 'glob' }
418sub desc { 'glob' }
419sub check { 'ck_glob' }
420sub flags { 't@' }
421sub args { 'S?' }
422
423
424package PLXML::op_readline;
425
426@ISA = ('PLXML::baseop_unop');
427
428sub key { 'readline' }
429sub desc { '<HANDLE>' }
430sub check { 'ck_null' }
431sub flags { 't%' }
432sub args { 'F?' }
433
434
435package PLXML::op_rcatline;
436
437@ISA = ('PLXML::padop_svop');
438
439sub key { 'rcatline' }
440sub desc { 'append I/O operator' }
441sub check { 'ck_null' }
442sub flags { 't$' }
443sub args { '' }
444
445
446
447# Bindable operators.
448
449package PLXML::op_regcmaybe;
450
451@ISA = ('PLXML::unop');
452
453sub key { 'regcmaybe' }
454sub desc { 'regexp internal guard' }
455sub check { 'ck_fun' }
456sub flags { 's1' }
457sub args { 'S' }
458
459
460package PLXML::op_regcreset;
461
462@ISA = ('PLXML::unop');
463
464sub key { 'regcreset' }
465sub desc { 'regexp internal reset' }
466sub check { 'ck_fun' }
467sub flags { 's1' }
468sub args { 'S' }
469
470
471package PLXML::op_regcomp;
472
473@ISA = ('PLXML::logop');
474
475sub key { 'regcomp' }
476sub desc { 'regexp compilation' }
477sub check { 'ck_null' }
478sub flags { 's|' }
479sub args { 'S' }
480
481
482package PLXML::op_match;
483
484@ISA = ('PLXML::pmop');
485
486sub key { 'match' }
487sub desc { 'pattern match (m//)' }
488sub check { 'ck_match' }
489sub flags { 'd/' }
490sub args { '' }
491
492
493package PLXML::op_qr;
494
495@ISA = ('PLXML::pmop');
496
497sub key { 'qr' }
498sub desc { 'pattern quote (qr//)' }
499sub check { 'ck_match' }
500sub flags { 's/' }
501sub args { '' }
502
503
504package PLXML::op_subst;
505
506@ISA = ('PLXML::pmop');
507
508sub key { 'subst' }
509sub desc { 'substitution (s///)' }
510sub check { 'ck_match' }
511sub flags { 'dis/' }
512sub args { 'S' }
513
514
515package PLXML::op_substcont;
516
517@ISA = ('PLXML::logop');
518
519sub key { 'substcont' }
520sub desc { 'substitution iterator' }
521sub check { 'ck_null' }
522sub flags { 'dis|' }
523sub args { '' }
524
525
526package PLXML::op_trans;
527
528@ISA = ('PLXML::pvop_svop');
529
530sub key { 'trans' }
531sub desc { 'transliteration (tr///)' }
532sub check { 'ck_match' }
533sub flags { 'is"' }
534sub args { 'S' }
535
536
537
538# Lvalue operators.
539# sassign is special-cased for op class
540
541package PLXML::op_sassign;
542
543@ISA = ('PLXML::baseop');
544
545sub key { 'sassign' }
546sub desc { 'scalar assignment' }
547sub check { 'ck_sassign' }
548sub flags { 's0' }
549sub args { '' }
550
551
552package PLXML::op_aassign;
553
554@ISA = ('PLXML::binop');
555
556sub key { 'aassign' }
557sub desc { 'list assignment' }
558sub check { 'ck_null' }
559sub flags { 't2' }
560sub args { 'L L' }
561
562
563
564package PLXML::op_chop;
565
566@ISA = ('PLXML::baseop_unop');
567
568sub key { 'chop' }
569sub desc { 'chop' }
570sub check { 'ck_spair' }
571sub flags { 'mts%' }
572sub args { 'L' }
573
574
575package PLXML::op_schop;
576
577@ISA = ('PLXML::baseop_unop');
578
579sub key { 'schop' }
580sub desc { 'scalar chop' }
581sub check { 'ck_null' }
582sub flags { 'stu%' }
583sub args { 'S?' }
584
585
586package PLXML::op_chomp;
587
588@ISA = ('PLXML::baseop_unop');
589
590sub key { 'chomp' }
591sub desc { 'chomp' }
592sub check { 'ck_spair' }
593sub flags { 'mTs%' }
594sub args { 'L' }
595
596
597package PLXML::op_schomp;
598
599@ISA = ('PLXML::baseop_unop');
600
601sub key { 'schomp' }
602sub desc { 'scalar chomp' }
603sub check { 'ck_null' }
604sub flags { 'sTu%' }
605sub args { 'S?' }
606
607
608package PLXML::op_defined;
609
610@ISA = ('PLXML::baseop_unop');
611
612sub key { 'defined' }
613sub desc { 'defined operator' }
614sub check { 'ck_defined' }
615sub flags { 'isu%' }
616sub args { 'S?' }
617
618
619package PLXML::op_undef;
620
621@ISA = ('PLXML::baseop_unop');
622
623sub key { 'undef' }
624sub desc { 'undef operator' }
625sub check { 'ck_lfun' }
626sub flags { 's%' }
627sub args { 'S?' }
628
629
630package PLXML::op_study;
631
632@ISA = ('PLXML::baseop_unop');
633
634sub key { 'study' }
635sub desc { 'study' }
636sub check { 'ck_fun' }
637sub flags { 'su%' }
638sub args { 'S?' }
639
640
641package PLXML::op_pos;
642
643@ISA = ('PLXML::baseop_unop');
644
645sub key { 'pos' }
646sub desc { 'match position' }
647sub check { 'ck_lfun' }
648sub flags { 'stu%' }
649sub args { 'S?' }
650
651
652
653package PLXML::op_preinc;
654
655@ISA = ('PLXML::unop');
656
657sub key { 'preinc' }
658sub desc { 'preincrement (++)' }
659sub check { 'ck_lfun' }
660sub flags { 'dIs1' }
661sub args { 'S' }
662
663
664package PLXML::op_i_preinc;
665
666@ISA = ('PLXML::unop');
667
668sub key { 'i_preinc' }
669sub desc { 'integer preincrement (++)' }
670sub check { 'ck_lfun' }
671sub flags { 'dis1' }
672sub args { 'S' }
673
674
675package PLXML::op_predec;
676
677@ISA = ('PLXML::unop');
678
679sub key { 'predec' }
680sub desc { 'predecrement (--)' }
681sub check { 'ck_lfun' }
682sub flags { 'dIs1' }
683sub args { 'S' }
684
685
686package PLXML::op_i_predec;
687
688@ISA = ('PLXML::unop');
689
690sub key { 'i_predec' }
691sub desc { 'integer predecrement (--)' }
692sub check { 'ck_lfun' }
693sub flags { 'dis1' }
694sub args { 'S' }
695
696
697package PLXML::op_postinc;
698
699@ISA = ('PLXML::unop');
700
701sub key { 'postinc' }
702sub desc { 'postincrement (++)' }
703sub check { 'ck_lfun' }
704sub flags { 'dIst1' }
705sub args { 'S' }
706
707
708package PLXML::op_i_postinc;
709
710@ISA = ('PLXML::unop');
711
712sub key { 'i_postinc' }
713sub desc { 'integer postincrement (++)' }
714sub check { 'ck_lfun' }
715sub flags { 'disT1' }
716sub args { 'S' }
717
718
719package PLXML::op_postdec;
720
721@ISA = ('PLXML::unop');
722
723sub key { 'postdec' }
724sub desc { 'postdecrement (--)' }
725sub check { 'ck_lfun' }
726sub flags { 'dIst1' }
727sub args { 'S' }
728
729
730package PLXML::op_i_postdec;
731
732@ISA = ('PLXML::unop');
733
734sub key { 'i_postdec' }
735sub desc { 'integer postdecrement (--)' }
736sub check { 'ck_lfun' }
737sub flags { 'disT1' }
738sub args { 'S' }
739
740
741
742# Ordinary operators.
743
744package PLXML::op_pow;
745
746@ISA = ('PLXML::binop');
747
748sub key { 'pow' }
749sub desc { 'exponentiation (**)' }
750sub check { 'ck_null' }
751sub flags { 'fsT2' }
752sub args { 'S S' }
753
754
755
756package PLXML::op_multiply;
757
758@ISA = ('PLXML::binop');
759
760sub key { 'multiply' }
761sub desc { 'multiplication (*)' }
762sub check { 'ck_null' }
763sub flags { 'IfsT2' }
764sub args { 'S S' }
765
766
767package PLXML::op_i_multiply;
768
769@ISA = ('PLXML::binop');
770
771sub key { 'i_multiply' }
772sub desc { 'integer multiplication (*)' }
773sub check { 'ck_null' }
774sub flags { 'ifsT2' }
775sub args { 'S S' }
776
777
778package PLXML::op_divide;
779
780@ISA = ('PLXML::binop');
781
782sub key { 'divide' }
783sub desc { 'division (/)' }
784sub check { 'ck_null' }
785sub flags { 'IfsT2' }
786sub args { 'S S' }
787
788
789package PLXML::op_i_divide;
790
791@ISA = ('PLXML::binop');
792
793sub key { 'i_divide' }
794sub desc { 'integer division (/)' }
795sub check { 'ck_null' }
796sub flags { 'ifsT2' }
797sub args { 'S S' }
798
799
800package PLXML::op_modulo;
801
802@ISA = ('PLXML::binop');
803
804sub key { 'modulo' }
805sub desc { 'modulus (%)' }
806sub check { 'ck_null' }
807sub flags { 'IifsT2' }
808sub args { 'S S' }
809
810
811package PLXML::op_i_modulo;
812
813@ISA = ('PLXML::binop');
814
815sub key { 'i_modulo' }
816sub desc { 'integer modulus (%)' }
817sub check { 'ck_null' }
818sub flags { 'ifsT2' }
819sub args { 'S S' }
820
821
822package PLXML::op_repeat;
823
824@ISA = ('PLXML::binop');
825
826sub key { 'repeat' }
827sub desc { 'repeat (x)' }
828sub check { 'ck_repeat' }
829sub flags { 'mt2' }
830sub args { 'L S' }
831
832
833
834package PLXML::op_add;
835
836@ISA = ('PLXML::binop');
837
838sub key { 'add' }
839sub desc { 'addition (+)' }
840sub check { 'ck_null' }
841sub flags { 'IfsT2' }
842sub args { 'S S' }
843
844
845package PLXML::op_i_add;
846
847@ISA = ('PLXML::binop');
848
849sub key { 'i_add' }
850sub desc { 'integer addition (+)' }
851sub check { 'ck_null' }
852sub flags { 'ifsT2' }
853sub args { 'S S' }
854
855
856package PLXML::op_subtract;
857
858@ISA = ('PLXML::binop');
859
860sub key { 'subtract' }
861sub desc { 'subtraction (-)' }
862sub check { 'ck_null' }
863sub flags { 'IfsT2' }
864sub args { 'S S' }
865
866
867package PLXML::op_i_subtract;
868
869@ISA = ('PLXML::binop');
870
871sub key { 'i_subtract' }
872sub desc { 'integer subtraction (-)' }
873sub check { 'ck_null' }
874sub flags { 'ifsT2' }
875sub args { 'S S' }
876
877
878package PLXML::op_concat;
879
880@ISA = ('PLXML::binop');
881
882sub key { 'concat' }
883sub desc { 'concatenation (.) or string' }
884sub check { 'ck_concat' }
885sub flags { 'fsT2' }
886sub args { 'S S' }
887
888
889package PLXML::op_stringify;
890
891@ISA = ('PLXML::listop');
892
893sub key { 'stringify' }
894sub desc { 'string' }
895sub check { 'ck_fun' }
896sub flags { 'fsT@' }
897sub args { 'S' }
898
899
900
901package PLXML::op_left_shift;
902
903@ISA = ('PLXML::binop');
904
905sub key { 'left_shift' }
906sub desc { 'left bitshift (<<)' }
907sub check { 'ck_bitop' }
908sub flags { 'fsT2' }
909sub args { 'S S' }
910
911
912package PLXML::op_right_shift;
913
914@ISA = ('PLXML::binop');
915
916sub key { 'right_shift' }
917sub desc { 'right bitshift (>>)' }
918sub check { 'ck_bitop' }
919sub flags { 'fsT2' }
920sub args { 'S S' }
921
922
923
924package PLXML::op_lt;
925
926@ISA = ('PLXML::binop');
927
928sub key { 'lt' }
929sub desc { 'numeric lt (<)' }
930sub check { 'ck_null' }
931sub flags { 'Iifs2' }
932sub args { 'S S' }
933
934
935package PLXML::op_i_lt;
936
937@ISA = ('PLXML::binop');
938
939sub key { 'i_lt' }
940sub desc { 'integer lt (<)' }
941sub check { 'ck_null' }
942sub flags { 'ifs2' }
943sub args { 'S S' }
944
945
946package PLXML::op_gt;
947
948@ISA = ('PLXML::binop');
949
950sub key { 'gt' }
951sub desc { 'numeric gt (>)' }
952sub check { 'ck_null' }
953sub flags { 'Iifs2' }
954sub args { 'S S' }
955
956
957package PLXML::op_i_gt;
958
959@ISA = ('PLXML::binop');
960
961sub key { 'i_gt' }
962sub desc { 'integer gt (>)' }
963sub check { 'ck_null' }
964sub flags { 'ifs2' }
965sub args { 'S S' }
966
967
968package PLXML::op_le;
969
970@ISA = ('PLXML::binop');
971
972sub key { 'le' }
973sub desc { 'numeric le (<=)' }
974sub check { 'ck_null' }
975sub flags { 'Iifs2' }
976sub args { 'S S' }
977
978
979package PLXML::op_i_le;
980
981@ISA = ('PLXML::binop');
982
983sub key { 'i_le' }
984sub desc { 'integer le (<=)' }
985sub check { 'ck_null' }
986sub flags { 'ifs2' }
987sub args { 'S S' }
988
989
990package PLXML::op_ge;
991
992@ISA = ('PLXML::binop');
993
994sub key { 'ge' }
995sub desc { 'numeric ge (>=)' }
996sub check { 'ck_null' }
997sub flags { 'Iifs2' }
998sub args { 'S S' }
999
1000
1001package PLXML::op_i_ge;
1002
1003@ISA = ('PLXML::binop');
1004
1005sub key { 'i_ge' }
1006sub desc { 'integer ge (>=)' }
1007sub check { 'ck_null' }
1008sub flags { 'ifs2' }
1009sub args { 'S S' }
1010
1011
1012package PLXML::op_eq;
1013
1014@ISA = ('PLXML::binop');
1015
1016sub key { 'eq' }
1017sub desc { 'numeric eq (==)' }
1018sub check { 'ck_null' }
1019sub flags { 'Iifs2' }
1020sub args { 'S S' }
1021
1022
1023package PLXML::op_i_eq;
1024
1025@ISA = ('PLXML::binop');
1026
1027sub key { 'i_eq' }
1028sub desc { 'integer eq (==)' }
1029sub check { 'ck_null' }
1030sub flags { 'ifs2' }
1031sub args { 'S S' }
1032
1033
1034package PLXML::op_ne;
1035
1036@ISA = ('PLXML::binop');
1037
1038sub key { 'ne' }
1039sub desc { 'numeric ne (!=)' }
1040sub check { 'ck_null' }
1041sub flags { 'Iifs2' }
1042sub args { 'S S' }
1043
1044
1045package PLXML::op_i_ne;
1046
1047@ISA = ('PLXML::binop');
1048
1049sub key { 'i_ne' }
1050sub desc { 'integer ne (!=)' }
1051sub check { 'ck_null' }
1052sub flags { 'ifs2' }
1053sub args { 'S S' }
1054
1055
1056package PLXML::op_ncmp;
1057
1058@ISA = ('PLXML::binop');
1059
1060sub key { 'ncmp' }
1061sub desc { 'numeric comparison (<=>)' }
1062sub check { 'ck_null' }
1063sub flags { 'Iifst2' }
1064sub args { 'S S' }
1065
1066
1067package PLXML::op_i_ncmp;
1068
1069@ISA = ('PLXML::binop');
1070
1071sub key { 'i_ncmp' }
1072sub desc { 'integer comparison (<=>)' }
1073sub check { 'ck_null' }
1074sub flags { 'ifst2' }
1075sub args { 'S S' }
1076
1077
1078
1079package PLXML::op_slt;
1080
1081@ISA = ('PLXML::binop');
1082
1083sub key { 'slt' }
1084sub desc { 'string lt' }
1085sub check { 'ck_null' }
1086sub flags { 'ifs2' }
1087sub args { 'S S' }
1088
1089
1090package PLXML::op_sgt;
1091
1092@ISA = ('PLXML::binop');
1093
1094sub key { 'sgt' }
1095sub desc { 'string gt' }
1096sub check { 'ck_null' }
1097sub flags { 'ifs2' }
1098sub args { 'S S' }
1099
1100
1101package PLXML::op_sle;
1102
1103@ISA = ('PLXML::binop');
1104
1105sub key { 'sle' }
1106sub desc { 'string le' }
1107sub check { 'ck_null' }
1108sub flags { 'ifs2' }
1109sub args { 'S S' }
1110
1111
1112package PLXML::op_sge;
1113
1114@ISA = ('PLXML::binop');
1115
1116sub key { 'sge' }
1117sub desc { 'string ge' }
1118sub check { 'ck_null' }
1119sub flags { 'ifs2' }
1120sub args { 'S S' }
1121
1122
1123package PLXML::op_seq;
1124
1125@ISA = ('PLXML::binop');
1126
1127sub key { 'seq' }
1128sub desc { 'string eq' }
1129sub check { 'ck_null' }
1130sub flags { 'ifs2' }
1131sub args { 'S S' }
1132
1133
1134package PLXML::op_sne;
1135
1136@ISA = ('PLXML::binop');
1137
1138sub key { 'sne' }
1139sub desc { 'string ne' }
1140sub check { 'ck_null' }
1141sub flags { 'ifs2' }
1142sub args { 'S S' }
1143
1144
1145package PLXML::op_scmp;
1146
1147@ISA = ('PLXML::binop');
1148
1149sub key { 'scmp' }
1150sub desc { 'string comparison (cmp)' }
1151sub check { 'ck_null' }
1152sub flags { 'ifst2' }
1153sub args { 'S S' }
1154
1155
1156
1157package PLXML::op_bit_and;
1158
1159@ISA = ('PLXML::binop');
1160
1161sub key { 'bit_and' }
1162sub desc { 'bitwise and (&)' }
1163sub check { 'ck_bitop' }
1164sub flags { 'fst2' }
1165sub args { 'S S' }
1166
1167
1168package PLXML::op_bit_xor;
1169
1170@ISA = ('PLXML::binop');
1171
1172sub key { 'bit_xor' }
1173sub desc { 'bitwise xor (^)' }
1174sub check { 'ck_bitop' }
1175sub flags { 'fst2' }
1176sub args { 'S S' }
1177
1178
1179package PLXML::op_bit_or;
1180
1181@ISA = ('PLXML::binop');
1182
1183sub key { 'bit_or' }
1184sub desc { 'bitwise or (|)' }
1185sub check { 'ck_bitop' }
1186sub flags { 'fst2' }
1187sub args { 'S S' }
1188
1189
1190
1191package PLXML::op_negate;
1192
1193@ISA = ('PLXML::unop');
1194
1195sub key { 'negate' }
1196sub desc { 'negation (-)' }
1197sub check { 'ck_null' }
1198sub flags { 'Ifst1' }
1199sub args { 'S' }
1200
1201
1202package PLXML::op_i_negate;
1203
1204@ISA = ('PLXML::unop');
1205
1206sub key { 'i_negate' }
1207sub desc { 'integer negation (-)' }
1208sub check { 'ck_null' }
1209sub flags { 'ifsT1' }
1210sub args { 'S' }
1211
1212
1213package PLXML::op_not;
1214
1215@ISA = ('PLXML::unop');
1216
1217sub key { 'not' }
1218sub desc { 'not' }
1219sub check { 'ck_null' }
1220sub flags { 'ifs1' }
1221sub args { 'S' }
1222
1223
1224package PLXML::op_complement;
1225
1226@ISA = ('PLXML::unop');
1227
1228sub key { 'complement' }
1229sub desc { '1\'s complement (~)' }
1230sub check { 'ck_bitop' }
1231sub flags { 'fst1' }
1232sub args { 'S' }
1233
1234
1235
1236# High falutin' math.
1237
1238package PLXML::op_atan2;
1239
1240@ISA = ('PLXML::listop');
1241
1242sub key { 'atan2' }
1243sub desc { 'atan2' }
1244sub check { 'ck_fun' }
1245sub flags { 'fsT@' }
1246sub args { 'S S' }
1247
1248
1249package PLXML::op_sin;
1250
1251@ISA = ('PLXML::baseop_unop');
1252
1253sub key { 'sin' }
1254sub desc { 'sin' }
1255sub check { 'ck_fun' }
1256sub flags { 'fsTu%' }
1257sub args { 'S?' }
1258
1259
1260package PLXML::op_cos;
1261
1262@ISA = ('PLXML::baseop_unop');
1263
1264sub key { 'cos' }
1265sub desc { 'cos' }
1266sub check { 'ck_fun' }
1267sub flags { 'fsTu%' }
1268sub args { 'S?' }
1269
1270
1271package PLXML::op_rand;
1272
1273@ISA = ('PLXML::baseop_unop');
1274
1275sub key { 'rand' }
1276sub desc { 'rand' }
1277sub check { 'ck_fun' }
1278sub flags { 'sT%' }
1279sub args { 'S?' }
1280
1281
1282package PLXML::op_srand;
1283
1284@ISA = ('PLXML::baseop_unop');
1285
1286sub key { 'srand' }
1287sub desc { 'srand' }
1288sub check { 'ck_fun' }
1289sub flags { 's%' }
1290sub args { 'S?' }
1291
1292
1293package PLXML::op_exp;
1294
1295@ISA = ('PLXML::baseop_unop');
1296
1297sub key { 'exp' }
1298sub desc { 'exp' }
1299sub check { 'ck_fun' }
1300sub flags { 'fsTu%' }
1301sub args { 'S?' }
1302
1303
1304package PLXML::op_log;
1305
1306@ISA = ('PLXML::baseop_unop');
1307
1308sub key { 'log' }
1309sub desc { 'log' }
1310sub check { 'ck_fun' }
1311sub flags { 'fsTu%' }
1312sub args { 'S?' }
1313
1314
1315package PLXML::op_sqrt;
1316
1317@ISA = ('PLXML::baseop_unop');
1318
1319sub key { 'sqrt' }
1320sub desc { 'sqrt' }
1321sub check { 'ck_fun' }
1322sub flags { 'fsTu%' }
1323sub args { 'S?' }
1324
1325
1326
1327# Lowbrow math.
1328
1329package PLXML::op_int;
1330
1331@ISA = ('PLXML::baseop_unop');
1332
1333sub key { 'int' }
1334sub desc { 'int' }
1335sub check { 'ck_fun' }
1336sub flags { 'fsTu%' }
1337sub args { 'S?' }
1338
1339
1340package PLXML::op_hex;
1341
1342@ISA = ('PLXML::baseop_unop');
1343
1344sub key { 'hex' }
1345sub desc { 'hex' }
1346sub check { 'ck_fun' }
1347sub flags { 'fsTu%' }
1348sub args { 'S?' }
1349
1350
1351package PLXML::op_oct;
1352
1353@ISA = ('PLXML::baseop_unop');
1354
1355sub key { 'oct' }
1356sub desc { 'oct' }
1357sub check { 'ck_fun' }
1358sub flags { 'fsTu%' }
1359sub args { 'S?' }
1360
1361
1362package PLXML::op_abs;
1363
1364@ISA = ('PLXML::baseop_unop');
1365
1366sub key { 'abs' }
1367sub desc { 'abs' }
1368sub check { 'ck_fun' }
1369sub flags { 'fsTu%' }
1370sub args { 'S?' }
1371
1372
1373
1374# String stuff.
1375
1376package PLXML::op_length;
1377
1378@ISA = ('PLXML::baseop_unop');
1379
1380sub key { 'length' }
1381sub desc { 'length' }
1382sub check { 'ck_lengthconst' }
1383sub flags { 'isTu%' }
1384sub args { 'S?' }
1385
1386
1387package PLXML::op_substr;
1388
1389@ISA = ('PLXML::listop');
1390
1391sub key { 'substr' }
1392sub desc { 'substr' }
1393sub check { 'ck_substr' }
1394sub flags { 'st@' }
1395sub args { 'S S S? S?' }
1396
1397
1398package PLXML::op_vec;
1399
1400@ISA = ('PLXML::listop');
1401
1402sub key { 'vec' }
1403sub desc { 'vec' }
1404sub check { 'ck_fun' }
1405sub flags { 'ist@' }
1406sub args { 'S S S' }
1407
1408
1409
1410package PLXML::op_index;
1411
1412@ISA = ('PLXML::listop');
1413
1414sub key { 'index' }
1415sub desc { 'index' }
1416sub check { 'ck_index' }
1417sub flags { 'isT@' }
1418sub args { 'S S S?' }
1419
1420
1421package PLXML::op_rindex;
1422
1423@ISA = ('PLXML::listop');
1424
1425sub key { 'rindex' }
1426sub desc { 'rindex' }
1427sub check { 'ck_index' }
1428sub flags { 'isT@' }
1429sub args { 'S S S?' }
1430
1431
1432
1433package PLXML::op_sprintf;
1434
1435@ISA = ('PLXML::listop');
1436
1437sub key { 'sprintf' }
1438sub desc { 'sprintf' }
1439sub check { 'ck_fun' }
1440sub flags { 'mfst@' }
1441sub args { 'S L' }
1442
1443
1444package PLXML::op_formline;
1445
1446@ISA = ('PLXML::listop');
1447
1448sub key { 'formline' }
1449sub desc { 'formline' }
1450sub check { 'ck_fun' }
1451sub flags { 'ms@' }
1452sub args { 'S L' }
1453
1454
1455package PLXML::op_ord;
1456
1457@ISA = ('PLXML::baseop_unop');
1458
1459sub key { 'ord' }
1460sub desc { 'ord' }
1461sub check { 'ck_fun' }
1462sub flags { 'ifsTu%' }
1463sub args { 'S?' }
1464
1465
1466package PLXML::op_chr;
1467
1468@ISA = ('PLXML::baseop_unop');
1469
1470sub key { 'chr' }
1471sub desc { 'chr' }
1472sub check { 'ck_fun' }
1473sub flags { 'fsTu%' }
1474sub args { 'S?' }
1475
1476
1477package PLXML::op_crypt;
1478
1479@ISA = ('PLXML::listop');
1480
1481sub key { 'crypt' }
1482sub desc { 'crypt' }
1483sub check { 'ck_fun' }
1484sub flags { 'fsT@' }
1485sub args { 'S S' }
1486
1487
1488package PLXML::op_ucfirst;
1489
1490@ISA = ('PLXML::baseop_unop');
1491
1492sub key { 'ucfirst' }
1493sub desc { 'ucfirst' }
1494sub check { 'ck_fun' }
1495sub flags { 'fstu%' }
1496sub args { 'S?' }
1497
1498
1499package PLXML::op_lcfirst;
1500
1501@ISA = ('PLXML::baseop_unop');
1502
1503sub key { 'lcfirst' }
1504sub desc { 'lcfirst' }
1505sub check { 'ck_fun' }
1506sub flags { 'fstu%' }
1507sub args { 'S?' }
1508
1509
1510package PLXML::op_uc;
1511
1512@ISA = ('PLXML::baseop_unop');
1513
1514sub key { 'uc' }
1515sub desc { 'uc' }
1516sub check { 'ck_fun' }
1517sub flags { 'fstu%' }
1518sub args { 'S?' }
1519
1520
1521package PLXML::op_lc;
1522
1523@ISA = ('PLXML::baseop_unop');
1524
1525sub key { 'lc' }
1526sub desc { 'lc' }
1527sub check { 'ck_fun' }
1528sub flags { 'fstu%' }
1529sub args { 'S?' }
1530
1531
1532package PLXML::op_quotemeta;
1533
1534@ISA = ('PLXML::baseop_unop');
1535
1536sub key { 'quotemeta' }
1537sub desc { 'quotemeta' }
1538sub check { 'ck_fun' }
1539sub flags { 'fstu%' }
1540sub args { 'S?' }
1541
1542
1543
1544# Arrays.
1545
1546package PLXML::op_rv2av;
1547
1548@ISA = ('PLXML::unop');
1549
1550sub key { 'rv2av' }
1551sub desc { 'array dereference' }
1552sub check { 'ck_rvconst' }
1553sub flags { 'dt1' }
1554sub args { '' }
1555
1556
1557package PLXML::op_aelemfast;
1558
1559@ISA = ('PLXML::padop_svop');
1560
1561sub key { 'aelemfast' }
1562sub desc { 'constant array element' }
1563sub check { 'ck_null' }
1564sub flags { 's$' }
1565sub args { 'A S' }
1566
1567
1568package PLXML::op_aelem;
1569
1570@ISA = ('PLXML::binop');
1571
1572sub key { 'aelem' }
1573sub desc { 'array element' }
1574sub check { 'ck_null' }
1575sub flags { 's2' }
1576sub args { 'A S' }
1577
1578
1579package PLXML::op_aslice;
1580
1581@ISA = ('PLXML::listop');
1582
1583sub key { 'aslice' }
1584sub desc { 'array slice' }
1585sub check { 'ck_null' }
1586sub flags { 'm@' }
1587sub args { 'A L' }
1588
1589
1590
1591# Hashes.
1592
1593package PLXML::op_each;
1594
1595@ISA = ('PLXML::baseop_unop');
1596
1597sub key { 'each' }
1598sub desc { 'each' }
1599sub check { 'ck_fun' }
1600sub flags { '%' }
1601sub args { 'H' }
1602
1603
1604package PLXML::op_values;
1605
1606@ISA = ('PLXML::baseop_unop');
1607
1608sub key { 'values' }
1609sub desc { 'values' }
1610sub check { 'ck_fun' }
1611sub flags { 't%' }
1612sub args { 'H' }
1613
1614
1615package PLXML::op_keys;
1616
1617@ISA = ('PLXML::baseop_unop');
1618
1619sub key { 'keys' }
1620sub desc { 'keys' }
1621sub check { 'ck_fun' }
1622sub flags { 't%' }
1623sub args { 'H' }
1624
1625
1626package PLXML::op_delete;
1627
1628@ISA = ('PLXML::baseop_unop');
1629
1630sub key { 'delete' }
1631sub desc { 'delete' }
1632sub check { 'ck_delete' }
1633sub flags { '%' }
1634sub args { 'S' }
1635
1636
1637package PLXML::op_exists;
1638
1639@ISA = ('PLXML::baseop_unop');
1640
1641sub key { 'exists' }
1642sub desc { 'exists' }
1643sub check { 'ck_exists' }
1644sub flags { 'is%' }
1645sub args { 'S' }
1646
1647
1648package PLXML::op_rv2hv;
1649
1650@ISA = ('PLXML::unop');
1651
1652sub key { 'rv2hv' }
1653sub desc { 'hash dereference' }
1654sub check { 'ck_rvconst' }
1655sub flags { 'dt1' }
1656sub args { '' }
1657
1658
1659package PLXML::op_helem;
1660
1661@ISA = ('PLXML::listop');
1662
1663sub key { 'helem' }
1664sub desc { 'hash element' }
1665sub check { 'ck_null' }
1666sub flags { 's2@' }
1667sub args { 'H S' }
1668
1669
1670package PLXML::op_hslice;
1671
1672@ISA = ('PLXML::listop');
1673
1674sub key { 'hslice' }
1675sub desc { 'hash slice' }
1676sub check { 'ck_null' }
1677sub flags { 'm@' }
1678sub args { 'H L' }
1679
1680
1681
1682# Explosives and implosives.
1683
1684package PLXML::op_unpack;
1685
1686@ISA = ('PLXML::listop');
1687
1688sub key { 'unpack' }
1689sub desc { 'unpack' }
1690sub check { 'ck_unpack' }
1691sub flags { '@' }
1692sub args { 'S S?' }
1693
1694
1695package PLXML::op_pack;
1696
1697@ISA = ('PLXML::listop');
1698
1699sub key { 'pack' }
1700sub desc { 'pack' }
1701sub check { 'ck_fun' }
1702sub flags { 'mst@' }
1703sub args { 'S L' }
1704
1705
1706package PLXML::op_split;
1707
1708@ISA = ('PLXML::listop');
1709
1710sub key { 'split' }
1711sub desc { 'split' }
1712sub check { 'ck_split' }
1713sub flags { 't@' }
1714sub args { 'S S S' }
1715
1716
1717package PLXML::op_join;
1718
1719@ISA = ('PLXML::listop');
1720
1721sub key { 'join' }
1722sub desc { 'join or string' }
1723sub check { 'ck_join' }
1724sub flags { 'mst@' }
1725sub args { 'S L' }
1726
1727
1728
1729# List operators.
1730
1731package PLXML::op_list;
1732
1733@ISA = ('PLXML::listop');
1734
1735sub key { 'list' }
1736sub desc { 'list' }
1737sub check { 'ck_null' }
1738sub flags { 'm@' }
1739sub args { 'L' }
1740
1741
1742package PLXML::op_lslice;
1743
1744@ISA = ('PLXML::binop');
1745
1746sub key { 'lslice' }
1747sub desc { 'list slice' }
1748sub check { 'ck_null' }
1749sub flags { '2' }
1750sub args { 'H L L' }
1751
1752
1753package PLXML::op_anonlist;
1754
1755@ISA = ('PLXML::listop');
1756
1757sub key { 'anonlist' }
1758sub desc { 'anonymous list ([])' }
1759sub check { 'ck_fun' }
1760sub flags { 'ms@' }
1761sub args { 'L' }
1762
1763
1764package PLXML::op_anonhash;
1765
1766@ISA = ('PLXML::listop');
1767
1768sub key { 'anonhash' }
1769sub desc { 'anonymous hash ({})' }
1770sub check { 'ck_fun' }
1771sub flags { 'ms@' }
1772sub args { 'L' }
1773
1774
1775
1776package PLXML::op_splice;
1777
1778@ISA = ('PLXML::listop');
1779
1780sub key { 'splice' }
1781sub desc { 'splice' }
1782sub check { 'ck_fun' }
1783sub flags { 'm@' }
1784sub args { 'A S? S? L' }
1785
1786
1787package PLXML::op_push;
1788
1789@ISA = ('PLXML::listop');
1790
1791sub key { 'push' }
1792sub desc { 'push' }
1793sub check { 'ck_fun' }
1794sub flags { 'imsT@' }
1795sub args { 'A L' }
1796
1797
1798package PLXML::op_pop;
1799
1800@ISA = ('PLXML::baseop_unop');
1801
1802sub key { 'pop' }
1803sub desc { 'pop' }
1804sub check { 'ck_shift' }
1805sub flags { 's%' }
1806sub args { 'A?' }
1807
1808
1809package PLXML::op_shift;
1810
1811@ISA = ('PLXML::baseop_unop');
1812
1813sub key { 'shift' }
1814sub desc { 'shift' }
1815sub check { 'ck_shift' }
1816sub flags { 's%' }
1817sub args { 'A?' }
1818
1819
1820package PLXML::op_unshift;
1821
1822@ISA = ('PLXML::listop');
1823
1824sub key { 'unshift' }
1825sub desc { 'unshift' }
1826sub check { 'ck_fun' }
1827sub flags { 'imsT@' }
1828sub args { 'A L' }
1829
1830
1831package PLXML::op_sort;
1832
1833@ISA = ('PLXML::listop');
1834
1835sub key { 'sort' }
1836sub desc { 'sort' }
1837sub check { 'ck_sort' }
1838sub flags { 'm@' }
1839sub args { 'C? L' }
1840
1841
1842package PLXML::op_reverse;
1843
1844@ISA = ('PLXML::listop');
1845
1846sub key { 'reverse' }
1847sub desc { 'reverse' }
1848sub check { 'ck_fun' }
1849sub flags { 'mt@' }
1850sub args { 'L' }
1851
1852
1853
1854package PLXML::op_grepstart;
1855
1856@ISA = ('PLXML::listop');
1857
1858sub key { 'grepstart' }
1859sub desc { 'grep' }
1860sub check { 'ck_grep' }
1861sub flags { 'dm@' }
1862sub args { 'C L' }
1863
1864
1865package PLXML::op_grepwhile;
1866
1867@ISA = ('PLXML::logop');
1868
1869sub key { 'grepwhile' }
1870sub desc { 'grep iterator' }
1871sub check { 'ck_null' }
1872sub flags { 'dt|' }
1873sub args { '' }
1874
1875
1876
1877package PLXML::op_mapstart;
1878
1879@ISA = ('PLXML::listop');
1880
1881sub key { 'mapstart' }
1882sub desc { 'map' }
1883sub check { 'ck_grep' }
1884sub flags { 'dm@' }
1885sub args { 'C L' }
1886
1887
1888package PLXML::op_mapwhile;
1889
1890@ISA = ('PLXML::logop');
1891
1892sub key { 'mapwhile' }
1893sub desc { 'map iterator' }
1894sub check { 'ck_null' }
1895sub flags { 'dt|' }
1896sub args { '' }
1897
1898
1899
1900# Range stuff.
1901
1902package PLXML::op_range;
1903
1904@ISA = ('PLXML::logop');
1905
1906sub key { 'range' }
1907sub desc { 'flipflop' }
1908sub check { 'ck_null' }
1909sub flags { '|' }
1910sub args { 'S S' }
1911
1912
1913package PLXML::op_flip;
1914
1915@ISA = ('PLXML::unop');
1916
1917sub key { 'flip' }
1918sub desc { 'range (or flip)' }
1919sub check { 'ck_null' }
1920sub flags { '1' }
1921sub args { 'S S' }
1922
1923
1924package PLXML::op_flop;
1925
1926@ISA = ('PLXML::unop');
1927
1928sub key { 'flop' }
1929sub desc { 'range (or flop)' }
1930sub check { 'ck_null' }
1931sub flags { '1' }
1932sub args { '' }
1933
1934
1935
1936# Control.
1937
1938package PLXML::op_and;
1939
1940@ISA = ('PLXML::logop');
1941
1942sub key { 'and' }
1943sub desc { 'logical and (&&)' }
1944sub check { 'ck_null' }
1945sub flags { '|' }
1946sub args { '' }
1947
1948
1949package PLXML::op_or;
1950
1951@ISA = ('PLXML::logop');
1952
1953sub key { 'or' }
1954sub desc { 'logical or (||)' }
1955sub check { 'ck_null' }
1956sub flags { '|' }
1957sub args { '' }
1958
1959
1960package PLXML::op_xor;
1961
1962@ISA = ('PLXML::binop');
1963
1964sub key { 'xor' }
1965sub desc { 'logical xor' }
1966sub check { 'ck_null' }
1967sub flags { 'fs2' }
1968sub args { 'S S ' }
1969
1970
1971package PLXML::op_cond_expr;
1972
1973@ISA = ('PLXML::logop');
1974
1975sub key { 'cond_expr' }
1976sub desc { 'conditional expression' }
1977sub check { 'ck_null' }
1978sub flags { 'd|' }
1979sub args { '' }
1980
1981
1982package PLXML::op_andassign;
1983
1984@ISA = ('PLXML::logop');
1985
1986sub key { 'andassign' }
1987sub desc { 'logical and assignment (&&=)' }
1988sub check { 'ck_null' }
1989sub flags { 's|' }
1990sub args { '' }
1991
1992
1993package PLXML::op_orassign;
1994
1995@ISA = ('PLXML::logop');
1996
1997sub key { 'orassign' }
1998sub desc { 'logical or assignment (||=)' }
1999sub check { 'ck_null' }
2000sub flags { 's|' }
2001sub args { '' }
2002
2003
2004
2005package PLXML::op_method;
2006
2007@ISA = ('PLXML::unop');
2008
2009sub key { 'method' }
2010sub desc { 'method lookup' }
2011sub check { 'ck_method' }
2012sub flags { 'd1' }
2013sub args { '' }
2014
2015
2016package PLXML::op_entersub;
2017
2018@ISA = ('PLXML::unop');
2019
2020sub key { 'entersub' }
2021sub desc { 'subroutine entry' }
2022sub check { 'ck_subr' }
2023sub flags { 'dmt1' }
2024sub args { 'L' }
2025
2026
2027package PLXML::op_leavesub;
2028
2029@ISA = ('PLXML::unop');
2030
2031sub key { 'leavesub' }
2032sub desc { 'subroutine exit' }
2033sub check { 'ck_null' }
2034sub flags { '1' }
2035sub args { '' }
2036
2037
2038package PLXML::op_leavesublv;
2039
2040@ISA = ('PLXML::unop');
2041
2042sub key { 'leavesublv' }
2043sub desc { 'lvalue subroutine return' }
2044sub check { 'ck_null' }
2045sub flags { '1' }
2046sub args { '' }
2047
2048
2049package PLXML::op_caller;
2050
2051@ISA = ('PLXML::baseop_unop');
2052
2053sub key { 'caller' }
2054sub desc { 'caller' }
2055sub check { 'ck_fun' }
2056sub flags { 't%' }
2057sub args { 'S?' }
2058
2059
2060package PLXML::op_warn;
2061
2062@ISA = ('PLXML::listop');
2063
2064sub key { 'warn' }
2065sub desc { 'warn' }
2066sub check { 'ck_fun' }
2067sub flags { 'imst@' }
2068sub args { 'L' }
2069
2070
2071package PLXML::op_die;
2072
2073@ISA = ('PLXML::listop');
2074
2075sub key { 'die' }
2076sub desc { 'die' }
2077sub check { 'ck_die' }
2078sub flags { 'dimst@' }
2079sub args { 'L' }
2080
2081
2082package PLXML::op_reset;
2083
2084@ISA = ('PLXML::baseop_unop');
2085
2086sub key { 'reset' }
2087sub desc { 'symbol reset' }
2088sub check { 'ck_fun' }
2089sub flags { 'is%' }
2090sub args { 'S?' }
2091
2092
2093
2094package PLXML::op_lineseq;
2095
2096@ISA = ('PLXML::listop');
2097
2098sub key { 'lineseq' }
2099sub desc { 'line sequence' }
2100sub check { 'ck_null' }
2101sub flags { '@' }
2102sub args { '' }
2103
2104
2105package PLXML::op_nextstate;
2106
2107@ISA = ('PLXML::cop');
2108
2109sub key { 'nextstate' }
2110sub desc { 'next statement' }
2111sub check { 'ck_null' }
2112sub flags { 's;' }
2113sub args { '' }
2114
2115
2116package PLXML::op_dbstate;
2117
2118@ISA = ('PLXML::cop');
2119
2120sub key { 'dbstate' }
2121sub desc { 'debug next statement' }
2122sub check { 'ck_null' }
2123sub flags { 's;' }
2124sub args { '' }
2125
2126
2127package PLXML::op_unstack;
2128
2129@ISA = ('PLXML::baseop');
2130
2131sub key { 'unstack' }
2132sub desc { 'iteration finalizer' }
2133sub check { 'ck_null' }
2134sub flags { 's0' }
2135sub args { '' }
2136
2137
2138package PLXML::op_enter;
2139
2140@ISA = ('PLXML::baseop');
2141
2142sub key { 'enter' }
2143sub desc { 'block entry' }
2144sub check { 'ck_null' }
2145sub flags { '0' }
2146sub args { '' }
2147
2148
2149package PLXML::op_leave;
2150
2151@ISA = ('PLXML::listop');
2152
2153sub key { 'leave' }
2154sub desc { 'block exit' }
2155sub check { 'ck_null' }
2156sub flags { '@' }
2157sub args { '' }
2158
2159
2160package PLXML::op_scope;
2161
2162@ISA = ('PLXML::listop');
2163
2164sub key { 'scope' }
2165sub desc { 'block' }
2166sub check { 'ck_null' }
2167sub flags { '@' }
2168sub args { '' }
2169
2170
2171package PLXML::op_enteriter;
2172
2173@ISA = ('PLXML::loop');
2174
2175sub key { 'enteriter' }
2176sub desc { 'foreach loop entry' }
2177sub check { 'ck_null' }
2178sub flags { 'd{' }
2179sub args { '' }
2180
2181
2182package PLXML::op_iter;
2183
2184@ISA = ('PLXML::baseop');
2185
2186sub key { 'iter' }
2187sub desc { 'foreach loop iterator' }
2188sub check { 'ck_null' }
2189sub flags { '0' }
2190sub args { '' }
2191
2192
2193package PLXML::op_enterloop;
2194
2195@ISA = ('PLXML::loop');
2196
2197sub key { 'enterloop' }
2198sub desc { 'loop entry' }
2199sub check { 'ck_null' }
2200sub flags { 'd{' }
2201sub args { '' }
2202
2203
2204package PLXML::op_leaveloop;
2205
2206@ISA = ('PLXML::binop');
2207
2208sub key { 'leaveloop' }
2209sub desc { 'loop exit' }
2210sub check { 'ck_null' }
2211sub flags { '2' }
2212sub args { '' }
2213
2214
2215package PLXML::op_return;
2216
2217@ISA = ('PLXML::listop');
2218
2219sub key { 'return' }
2220sub desc { 'return' }
2221sub check { 'ck_return' }
2222sub flags { 'dm@' }
2223sub args { 'L' }
2224
2225
2226package PLXML::op_last;
2227
2228@ISA = ('PLXML::loopexop');
2229
2230sub key { 'last' }
2231sub desc { 'last' }
2232sub check { 'ck_null' }
2233sub flags { 'ds}' }
2234sub args { '' }
2235
2236
2237package PLXML::op_next;
2238
2239@ISA = ('PLXML::loopexop');
2240
2241sub key { 'next' }
2242sub desc { 'next' }
2243sub check { 'ck_null' }
2244sub flags { 'ds}' }
2245sub args { '' }
2246
2247
2248package PLXML::op_redo;
2249
2250@ISA = ('PLXML::loopexop');
2251
2252sub key { 'redo' }
2253sub desc { 'redo' }
2254sub check { 'ck_null' }
2255sub flags { 'ds}' }
2256sub args { '' }
2257
2258
2259package PLXML::op_dump;
2260
2261@ISA = ('PLXML::loopexop');
2262
2263sub key { 'dump' }
2264sub desc { 'dump' }
2265sub check { 'ck_null' }
2266sub flags { 'ds}' }
2267sub args { '' }
2268
2269
2270package PLXML::op_goto;
2271
2272@ISA = ('PLXML::loopexop');
2273
2274sub key { 'goto' }
2275sub desc { 'goto' }
2276sub check { 'ck_null' }
2277sub flags { 'ds}' }
2278sub args { '' }
2279
2280
2281package PLXML::op_exit;
2282
2283@ISA = ('PLXML::baseop_unop');
2284
2285sub key { 'exit' }
2286sub desc { 'exit' }
2287sub check { 'ck_exit' }
2288sub flags { 'ds%' }
2289sub args { 'S?' }
2290
2291
2292# continued below
2293
2294#nswitch numeric switch ck_null d
2295#cswitch character switch ck_null d
2296
2297# I/O.
2298
2299package PLXML::op_open;
2300
2301@ISA = ('PLXML::listop');
2302
2303sub key { 'open' }
2304sub desc { 'open' }
2305sub check { 'ck_open' }
2306sub flags { 'ismt@' }
2307sub args { 'F S? L' }
2308
2309
2310package PLXML::op_close;
2311
2312@ISA = ('PLXML::baseop_unop');
2313
2314sub key { 'close' }
2315sub desc { 'close' }
2316sub check { 'ck_fun' }
2317sub flags { 'is%' }
2318sub args { 'F?' }
2319
2320
2321package PLXML::op_pipe_op;
2322
2323@ISA = ('PLXML::listop');
2324
2325sub key { 'pipe_op' }
2326sub desc { 'pipe' }
2327sub check { 'ck_fun' }
2328sub flags { 'is@' }
2329sub args { 'F F' }
2330
2331
2332
2333package PLXML::op_fileno;
2334
2335@ISA = ('PLXML::baseop_unop');
2336
2337sub key { 'fileno' }
2338sub desc { 'fileno' }
2339sub check { 'ck_fun' }
2340sub flags { 'ist%' }
2341sub args { 'F' }
2342
2343
2344package PLXML::op_umask;
2345
2346@ISA = ('PLXML::baseop_unop');
2347
2348sub key { 'umask' }
2349sub desc { 'umask' }
2350sub check { 'ck_fun' }
2351sub flags { 'ist%' }
2352sub args { 'S?' }
2353
2354
2355package PLXML::op_binmode;
2356
2357@ISA = ('PLXML::listop');
2358
2359sub key { 'binmode' }
2360sub desc { 'binmode' }
2361sub check { 'ck_fun' }
2362sub flags { 's@' }
2363sub args { 'F S?' }
2364
2365
2366
2367package PLXML::op_tie;
2368
2369@ISA = ('PLXML::listop');
2370
2371sub key { 'tie' }
2372sub desc { 'tie' }
2373sub check { 'ck_fun' }
2374sub flags { 'idms@' }
2375sub args { 'R S L' }
2376
2377
2378package PLXML::op_untie;
2379
2380@ISA = ('PLXML::baseop_unop');
2381
2382sub key { 'untie' }
2383sub desc { 'untie' }
2384sub check { 'ck_fun' }
2385sub flags { 'is%' }
2386sub args { 'R' }
2387
2388
2389package PLXML::op_tied;
2390
2391@ISA = ('PLXML::baseop_unop');
2392
2393sub key { 'tied' }
2394sub desc { 'tied' }
2395sub check { 'ck_fun' }
2396sub flags { 's%' }
2397sub args { 'R' }
2398
2399
2400package PLXML::op_dbmopen;
2401
2402@ISA = ('PLXML::listop');
2403
2404sub key { 'dbmopen' }
2405sub desc { 'dbmopen' }
2406sub check { 'ck_fun' }
2407sub flags { 'is@' }
2408sub args { 'H S S' }
2409
2410
2411package PLXML::op_dbmclose;
2412
2413@ISA = ('PLXML::baseop_unop');
2414
2415sub key { 'dbmclose' }
2416sub desc { 'dbmclose' }
2417sub check { 'ck_fun' }
2418sub flags { 'is%' }
2419sub args { 'H' }
2420
2421
2422
2423package PLXML::op_sselect;
2424
2425@ISA = ('PLXML::listop');
2426
2427sub key { 'sselect' }
2428sub desc { 'select system call' }
2429sub check { 'ck_select' }
2430sub flags { 't@' }
2431sub args { 'S S S S' }
2432
2433
2434package PLXML::op_select;
2435
2436@ISA = ('PLXML::listop');
2437
2438sub key { 'select' }
2439sub desc { 'select' }
2440sub check { 'ck_select' }
2441sub flags { 'st@' }
2442sub args { 'F?' }
2443
2444
2445
2446package PLXML::op_getc;
2447
2448@ISA = ('PLXML::baseop_unop');
2449
2450sub key { 'getc' }
2451sub desc { 'getc' }
2452sub check { 'ck_eof' }
2453sub flags { 'st%' }
2454sub args { 'F?' }
2455
2456
2457package PLXML::op_read;
2458
2459@ISA = ('PLXML::listop');
2460
2461sub key { 'read' }
2462sub desc { 'read' }
2463sub check { 'ck_fun' }
2464sub flags { 'imst@' }
2465sub args { 'F R S S?' }
2466
2467
2468package PLXML::op_enterwrite;
2469
2470@ISA = ('PLXML::baseop_unop');
2471
2472sub key { 'enterwrite' }
2473sub desc { 'write' }
2474sub check { 'ck_fun' }
2475sub flags { 'dis%' }
2476sub args { 'F?' }
2477
2478
2479package PLXML::op_leavewrite;
2480
2481@ISA = ('PLXML::unop');
2482
2483sub key { 'leavewrite' }
2484sub desc { 'write exit' }
2485sub check { 'ck_null' }
2486sub flags { '1' }
2487sub args { '' }
2488
2489
2490
2491package PLXML::op_prtf;
2492
2493@ISA = ('PLXML::listop');
2494
2495sub key { 'prtf' }
2496sub desc { 'printf' }
2497sub check { 'ck_listiob' }
2498sub flags { 'ims@' }
2499sub args { 'F? L' }
2500
2501
2502package PLXML::op_print;
2503
2504@ISA = ('PLXML::listop');
2505
2506sub key { 'print' }
2507sub desc { 'print' }
2508sub check { 'ck_listiob' }
2509sub flags { 'ims@' }
2510sub args { 'F? L' }
2511
2512
2513
2514package PLXML::op_sysopen;
2515
2516@ISA = ('PLXML::listop');
2517
2518sub key { 'sysopen' }
2519sub desc { 'sysopen' }
2520sub check { 'ck_fun' }
2521sub flags { 's@' }
2522sub args { 'F S S S?' }
2523
2524
2525package PLXML::op_sysseek;
2526
2527@ISA = ('PLXML::listop');
2528
2529sub key { 'sysseek' }
2530sub desc { 'sysseek' }
2531sub check { 'ck_fun' }
2532sub flags { 's@' }
2533sub args { 'F S S' }
2534
2535
2536package PLXML::op_sysread;
2537
2538@ISA = ('PLXML::listop');
2539
2540sub key { 'sysread' }
2541sub desc { 'sysread' }
2542sub check { 'ck_fun' }
2543sub flags { 'imst@' }
2544sub args { 'F R S S?' }
2545
2546
2547package PLXML::op_syswrite;
2548
2549@ISA = ('PLXML::listop');
2550
2551sub key { 'syswrite' }
2552sub desc { 'syswrite' }
2553sub check { 'ck_fun' }
2554sub flags { 'imst@' }
2555sub args { 'F S S? S?' }
2556
2557
2558
2559package PLXML::op_send;
2560
2561@ISA = ('PLXML::listop');
2562
2563sub key { 'send' }
2564sub desc { 'send' }
2565sub check { 'ck_fun' }
2566sub flags { 'imst@' }
2567sub args { 'Fs S S S?' }
2568
2569
2570package PLXML::op_recv;
2571
2572@ISA = ('PLXML::listop');
2573
2574sub key { 'recv' }
2575sub desc { 'recv' }
2576sub check { 'ck_fun' }
2577sub flags { 'imst@' }
2578sub args { 'Fs R S S' }
2579
2580
2581
2582package PLXML::op_eof;
2583
2584@ISA = ('PLXML::baseop_unop');
2585
2586sub key { 'eof' }
2587sub desc { 'eof' }
2588sub check { 'ck_eof' }
2589sub flags { 'is%' }
2590sub args { 'F?' }
2591
2592
2593package PLXML::op_tell;
2594
2595@ISA = ('PLXML::baseop_unop');
2596
2597sub key { 'tell' }
2598sub desc { 'tell' }
2599sub check { 'ck_fun' }
2600sub flags { 'st%' }
2601sub args { 'F?' }
2602
2603
2604package PLXML::op_seek;
2605
2606@ISA = ('PLXML::listop');
2607
2608sub key { 'seek' }
2609sub desc { 'seek' }
2610sub check { 'ck_fun' }
2611sub flags { 's@' }
2612sub args { 'F S S' }
2613
2614
2615# truncate really behaves as if it had both "S S" and "F S"
2616package PLXML::op_truncate;
2617
2618@ISA = ('PLXML::listop');
2619
2620sub key { 'truncate' }
2621sub desc { 'truncate' }
2622sub check { 'ck_trunc' }
2623sub flags { 'is@' }
2624sub args { 'S S' }
2625
2626
2627
2628package PLXML::op_fcntl;
2629
2630@ISA = ('PLXML::listop');
2631
2632sub key { 'fcntl' }
2633sub desc { 'fcntl' }
2634sub check { 'ck_fun' }
2635sub flags { 'st@' }
2636sub args { 'F S S' }
2637
2638
2639package PLXML::op_ioctl;
2640
2641@ISA = ('PLXML::listop');
2642
2643sub key { 'ioctl' }
2644sub desc { 'ioctl' }
2645sub check { 'ck_fun' }
2646sub flags { 'st@' }
2647sub args { 'F S S' }
2648
2649
2650package PLXML::op_flock;
2651
2652@ISA = ('PLXML::listop');
2653
2654sub key { 'flock' }
2655sub desc { 'flock' }
2656sub check { 'ck_fun' }
2657sub flags { 'isT@' }
2658sub args { 'F S' }
2659
2660
2661
2662# Sockets.
2663
2664package PLXML::op_socket;
2665
2666@ISA = ('PLXML::listop');
2667
2668sub key { 'socket' }
2669sub desc { 'socket' }
2670sub check { 'ck_fun' }
2671sub flags { 'is@' }
2672sub args { 'Fs S S S' }
2673
2674
2675package PLXML::op_sockpair;
2676
2677@ISA = ('PLXML::listop');
2678
2679sub key { 'sockpair' }
2680sub desc { 'socketpair' }
2681sub check { 'ck_fun' }
2682sub flags { 'is@' }
2683sub args { 'Fs Fs S S S' }
2684
2685
2686
2687package PLXML::op_bind;
2688
2689@ISA = ('PLXML::listop');
2690
2691sub key { 'bind' }
2692sub desc { 'bind' }
2693sub check { 'ck_fun' }
2694sub flags { 'is@' }
2695sub args { 'Fs S' }
2696
2697
2698package PLXML::op_connect;
2699
2700@ISA = ('PLXML::listop');
2701
2702sub key { 'connect' }
2703sub desc { 'connect' }
2704sub check { 'ck_fun' }
2705sub flags { 'is@' }
2706sub args { 'Fs S' }
2707
2708
2709package PLXML::op_listen;
2710
2711@ISA = ('PLXML::listop');
2712
2713sub key { 'listen' }
2714sub desc { 'listen' }
2715sub check { 'ck_fun' }
2716sub flags { 'is@' }
2717sub args { 'Fs S' }
2718
2719
2720package PLXML::op_accept;
2721
2722@ISA = ('PLXML::listop');
2723
2724sub key { 'accept' }
2725sub desc { 'accept' }
2726sub check { 'ck_fun' }
2727sub flags { 'ist@' }
2728sub args { 'Fs Fs' }
2729
2730
2731package PLXML::op_shutdown;
2732
2733@ISA = ('PLXML::listop');
2734
2735sub key { 'shutdown' }
2736sub desc { 'shutdown' }
2737sub check { 'ck_fun' }
2738sub flags { 'ist@' }
2739sub args { 'Fs S' }
2740
2741
2742
2743package PLXML::op_gsockopt;
2744
2745@ISA = ('PLXML::listop');
2746
2747sub key { 'gsockopt' }
2748sub desc { 'getsockopt' }
2749sub check { 'ck_fun' }
2750sub flags { 'is@' }
2751sub args { 'Fs S S' }
2752
2753
2754package PLXML::op_ssockopt;
2755
2756@ISA = ('PLXML::listop');
2757
2758sub key { 'ssockopt' }
2759sub desc { 'setsockopt' }
2760sub check { 'ck_fun' }
2761sub flags { 'is@' }
2762sub args { 'Fs S S S' }
2763
2764
2765
2766package PLXML::op_getsockname;
2767
2768@ISA = ('PLXML::baseop_unop');
2769
2770sub key { 'getsockname' }
2771sub desc { 'getsockname' }
2772sub check { 'ck_fun' }
2773sub flags { 'is%' }
2774sub args { 'Fs' }
2775
2776
2777package PLXML::op_getpeername;
2778
2779@ISA = ('PLXML::baseop_unop');
2780
2781sub key { 'getpeername' }
2782sub desc { 'getpeername' }
2783sub check { 'ck_fun' }
2784sub flags { 'is%' }
2785sub args { 'Fs' }
2786
2787
2788
2789# Stat calls.
2790
2791package PLXML::op_lstat;
2792
2793@ISA = ('PLXML::filestatop');
2794
2795sub key { 'lstat' }
2796sub desc { 'lstat' }
2797sub check { 'ck_ftst' }
2798sub flags { 'u-' }
2799sub args { 'F' }
2800
2801
2802package PLXML::op_stat;
2803
2804@ISA = ('PLXML::filestatop');
2805
2806sub key { 'stat' }
2807sub desc { 'stat' }
2808sub check { 'ck_ftst' }
2809sub flags { 'u-' }
2810sub args { 'F' }
2811
2812
2813package PLXML::op_ftrread;
2814
2815@ISA = ('PLXML::filestatop');
2816
2817sub key { 'ftrread' }
2818sub desc { '-R' }
2819sub check { 'ck_ftst' }
2820sub flags { 'isu-' }
2821sub args { 'F-' }
2822
2823
2824package PLXML::op_ftrwrite;
2825
2826@ISA = ('PLXML::filestatop');
2827
2828sub key { 'ftrwrite' }
2829sub desc { '-W' }
2830sub check { 'ck_ftst' }
2831sub flags { 'isu-' }
2832sub args { 'F-' }
2833
2834
2835package PLXML::op_ftrexec;
2836
2837@ISA = ('PLXML::filestatop');
2838
2839sub key { 'ftrexec' }
2840sub desc { '-X' }
2841sub check { 'ck_ftst' }
2842sub flags { 'isu-' }
2843sub args { 'F-' }
2844
2845
2846package PLXML::op_fteread;
2847
2848@ISA = ('PLXML::filestatop');
2849
2850sub key { 'fteread' }
2851sub desc { '-r' }
2852sub check { 'ck_ftst' }
2853sub flags { 'isu-' }
2854sub args { 'F-' }
2855
2856
2857package PLXML::op_ftewrite;
2858
2859@ISA = ('PLXML::filestatop');
2860
2861sub key { 'ftewrite' }
2862sub desc { '-w' }
2863sub check { 'ck_ftst' }
2864sub flags { 'isu-' }
2865sub args { 'F-' }
2866
2867
2868package PLXML::op_fteexec;
2869
2870@ISA = ('PLXML::filestatop');
2871
2872sub key { 'fteexec' }
2873sub desc { '-x' }
2874sub check { 'ck_ftst' }
2875sub flags { 'isu-' }
2876sub args { 'F-' }
2877
2878
2879package PLXML::op_ftis;
2880
2881@ISA = ('PLXML::filestatop');
2882
2883sub key { 'ftis' }
2884sub desc { '-e' }
2885sub check { 'ck_ftst' }
2886sub flags { 'isu-' }
2887sub args { 'F-' }
2888
2889
2890package PLXML::op_fteowned;
2891
2892@ISA = ('PLXML::filestatop');
2893
2894sub key { 'fteowned' }
2895sub desc { '-O' }
2896sub check { 'ck_ftst' }
2897sub flags { 'isu-' }
2898sub args { 'F-' }
2899
2900
2901package PLXML::op_ftrowned;
2902
2903@ISA = ('PLXML::filestatop');
2904
2905sub key { 'ftrowned' }
2906sub desc { '-o' }
2907sub check { 'ck_ftst' }
2908sub flags { 'isu-' }
2909sub args { 'F-' }
2910
2911
2912package PLXML::op_ftzero;
2913
2914@ISA = ('PLXML::filestatop');
2915
2916sub key { 'ftzero' }
2917sub desc { '-z' }
2918sub check { 'ck_ftst' }
2919sub flags { 'isu-' }
2920sub args { 'F-' }
2921
2922
2923package PLXML::op_ftsize;
2924
2925@ISA = ('PLXML::filestatop');
2926
2927sub key { 'ftsize' }
2928sub desc { '-s' }
2929sub check { 'ck_ftst' }
2930sub flags { 'istu-' }
2931sub args { 'F-' }
2932
2933
2934package PLXML::op_ftmtime;
2935
2936@ISA = ('PLXML::filestatop');
2937
2938sub key { 'ftmtime' }
2939sub desc { '-M' }
2940sub check { 'ck_ftst' }
2941sub flags { 'stu-' }
2942sub args { 'F-' }
2943
2944
2945package PLXML::op_ftatime;
2946
2947@ISA = ('PLXML::filestatop');
2948
2949sub key { 'ftatime' }
2950sub desc { '-A' }
2951sub check { 'ck_ftst' }
2952sub flags { 'stu-' }
2953sub args { 'F-' }
2954
2955
2956package PLXML::op_ftctime;
2957
2958@ISA = ('PLXML::filestatop');
2959
2960sub key { 'ftctime' }
2961sub desc { '-C' }
2962sub check { 'ck_ftst' }
2963sub flags { 'stu-' }
2964sub args { 'F-' }
2965
2966
2967package PLXML::op_ftsock;
2968
2969@ISA = ('PLXML::filestatop');
2970
2971sub key { 'ftsock' }
2972sub desc { '-S' }
2973sub check { 'ck_ftst' }
2974sub flags { 'isu-' }
2975sub args { 'F-' }
2976
2977
2978package PLXML::op_ftchr;
2979
2980@ISA = ('PLXML::filestatop');
2981
2982sub key { 'ftchr' }
2983sub desc { '-c' }
2984sub check { 'ck_ftst' }
2985sub flags { 'isu-' }
2986sub args { 'F-' }
2987
2988
2989package PLXML::op_ftblk;
2990
2991@ISA = ('PLXML::filestatop');
2992
2993sub key { 'ftblk' }
2994sub desc { '-b' }
2995sub check { 'ck_ftst' }
2996sub flags { 'isu-' }
2997sub args { 'F-' }
2998
2999
3000package PLXML::op_ftfile;
3001
3002@ISA = ('PLXML::filestatop');
3003
3004sub key { 'ftfile' }
3005sub desc { '-f' }
3006sub check { 'ck_ftst' }
3007sub flags { 'isu-' }
3008sub args { 'F-' }
3009
3010
3011package PLXML::op_ftdir;
3012
3013@ISA = ('PLXML::filestatop');
3014
3015sub key { 'ftdir' }
3016sub desc { '-d' }
3017sub check { 'ck_ftst' }
3018sub flags { 'isu-' }
3019sub args { 'F-' }
3020
3021
3022package PLXML::op_ftpipe;
3023
3024@ISA = ('PLXML::filestatop');
3025
3026sub key { 'ftpipe' }
3027sub desc { '-p' }
3028sub check { 'ck_ftst' }
3029sub flags { 'isu-' }
3030sub args { 'F-' }
3031
3032
3033package PLXML::op_ftlink;
3034
3035@ISA = ('PLXML::filestatop');
3036
3037sub key { 'ftlink' }
3038sub desc { '-l' }
3039sub check { 'ck_ftst' }
3040sub flags { 'isu-' }
3041sub args { 'F-' }
3042
3043
3044package PLXML::op_ftsuid;
3045
3046@ISA = ('PLXML::filestatop');
3047
3048sub key { 'ftsuid' }
3049sub desc { '-u' }
3050sub check { 'ck_ftst' }
3051sub flags { 'isu-' }
3052sub args { 'F-' }
3053
3054
3055package PLXML::op_ftsgid;
3056
3057@ISA = ('PLXML::filestatop');
3058
3059sub key { 'ftsgid' }
3060sub desc { '-g' }
3061sub check { 'ck_ftst' }
3062sub flags { 'isu-' }
3063sub args { 'F-' }
3064
3065
3066package PLXML::op_ftsvtx;
3067
3068@ISA = ('PLXML::filestatop');
3069
3070sub key { 'ftsvtx' }
3071sub desc { '-k' }
3072sub check { 'ck_ftst' }
3073sub flags { 'isu-' }
3074sub args { 'F-' }
3075
3076
3077package PLXML::op_fttty;
3078
3079@ISA = ('PLXML::filestatop');
3080
3081sub key { 'fttty' }
3082sub desc { '-t' }
3083sub check { 'ck_ftst' }
3084sub flags { 'is-' }
3085sub args { 'F-' }
3086
3087
3088package PLXML::op_fttext;
3089
3090@ISA = ('PLXML::filestatop');
3091
3092sub key { 'fttext' }
3093sub desc { '-T' }
3094sub check { 'ck_ftst' }
3095sub flags { 'isu-' }
3096sub args { 'F-' }
3097
3098
3099package PLXML::op_ftbinary;
3100
3101@ISA = ('PLXML::filestatop');
3102
3103sub key { 'ftbinary' }
3104sub desc { '-B' }
3105sub check { 'ck_ftst' }
3106sub flags { 'isu-' }
3107sub args { 'F-' }
3108
3109
3110
3111# File calls.
3112
3113package PLXML::op_chdir;
3114
3115@ISA = ('PLXML::baseop_unop');
3116
3117sub key { 'chdir' }
3118sub desc { 'chdir' }
3119sub check { 'ck_fun' }
3120sub flags { 'isT%' }
3121sub args { 'S?' }
3122
3123
3124package PLXML::op_chown;
3125
3126@ISA = ('PLXML::listop');
3127
3128sub key { 'chown' }
3129sub desc { 'chown' }
3130sub check { 'ck_fun' }
3131sub flags { 'imsT@' }
3132sub args { 'L' }
3133
3134
3135package PLXML::op_chroot;
3136
3137@ISA = ('PLXML::baseop_unop');
3138
3139sub key { 'chroot' }
3140sub desc { 'chroot' }
3141sub check { 'ck_fun' }
3142sub flags { 'isTu%' }
3143sub args { 'S?' }
3144
3145
3146package PLXML::op_unlink;
3147
3148@ISA = ('PLXML::listop');
3149
3150sub key { 'unlink' }
3151sub desc { 'unlink' }
3152sub check { 'ck_fun' }
3153sub flags { 'imsTu@' }
3154sub args { 'L' }
3155
3156
3157package PLXML::op_chmod;
3158
3159@ISA = ('PLXML::listop');
3160
3161sub key { 'chmod' }
3162sub desc { 'chmod' }
3163sub check { 'ck_fun' }
3164sub flags { 'imsT@' }
3165sub args { 'L' }
3166
3167
3168package PLXML::op_utime;
3169
3170@ISA = ('PLXML::listop');
3171
3172sub key { 'utime' }
3173sub desc { 'utime' }
3174sub check { 'ck_fun' }
3175sub flags { 'imsT@' }
3176sub args { 'L' }
3177
3178
3179package PLXML::op_rename;
3180
3181@ISA = ('PLXML::listop');
3182
3183sub key { 'rename' }
3184sub desc { 'rename' }
3185sub check { 'ck_fun' }
3186sub flags { 'isT@' }
3187sub args { 'S S' }
3188
3189
3190package PLXML::op_link;
3191
3192@ISA = ('PLXML::listop');
3193
3194sub key { 'link' }
3195sub desc { 'link' }
3196sub check { 'ck_fun' }
3197sub flags { 'isT@' }
3198sub args { 'S S' }
3199
3200
3201package PLXML::op_symlink;
3202
3203@ISA = ('PLXML::listop');
3204
3205sub key { 'symlink' }
3206sub desc { 'symlink' }
3207sub check { 'ck_fun' }
3208sub flags { 'isT@' }
3209sub args { 'S S' }
3210
3211
3212package PLXML::op_readlink;
3213
3214@ISA = ('PLXML::baseop_unop');
3215
3216sub key { 'readlink' }
3217sub desc { 'readlink' }
3218sub check { 'ck_fun' }
3219sub flags { 'stu%' }
3220sub args { 'S?' }
3221
3222
3223package PLXML::op_mkdir;
3224
3225@ISA = ('PLXML::listop');
3226
3227sub key { 'mkdir' }
3228sub desc { 'mkdir' }
3229sub check { 'ck_fun' }
3230sub flags { 'isT@' }
3231sub args { 'S S?' }
3232
3233
3234package PLXML::op_rmdir;
3235
3236@ISA = ('PLXML::baseop_unop');
3237
3238sub key { 'rmdir' }
3239sub desc { 'rmdir' }
3240sub check { 'ck_fun' }
3241sub flags { 'isTu%' }
3242sub args { 'S?' }
3243
3244
3245
3246# Directory calls.
3247
3248package PLXML::op_open_dir;
3249
3250@ISA = ('PLXML::listop');
3251
3252sub key { 'open_dir' }
3253sub desc { 'opendir' }
3254sub check { 'ck_fun' }
3255sub flags { 'is@' }
3256sub args { 'F S' }
3257
3258
3259package PLXML::op_readdir;
3260
3261@ISA = ('PLXML::baseop_unop');
3262
3263sub key { 'readdir' }
3264sub desc { 'readdir' }
3265sub check { 'ck_fun' }
3266sub flags { '%' }
3267sub args { 'F' }
3268
3269
3270package PLXML::op_telldir;
3271
3272@ISA = ('PLXML::baseop_unop');
3273
3274sub key { 'telldir' }
3275sub desc { 'telldir' }
3276sub check { 'ck_fun' }
3277sub flags { 'st%' }
3278sub args { 'F' }
3279
3280
3281package PLXML::op_seekdir;
3282
3283@ISA = ('PLXML::listop');
3284
3285sub key { 'seekdir' }
3286sub desc { 'seekdir' }
3287sub check { 'ck_fun' }
3288sub flags { 's@' }
3289sub args { 'F S' }
3290
3291
3292package PLXML::op_rewinddir;
3293
3294@ISA = ('PLXML::baseop_unop');
3295
3296sub key { 'rewinddir' }
3297sub desc { 'rewinddir' }
3298sub check { 'ck_fun' }
3299sub flags { 's%' }
3300sub args { 'F' }
3301
3302
3303package PLXML::op_closedir;
3304
3305@ISA = ('PLXML::baseop_unop');
3306
3307sub key { 'closedir' }
3308sub desc { 'closedir' }
3309sub check { 'ck_fun' }
3310sub flags { 'is%' }
3311sub args { 'F' }
3312
3313
3314
3315# Process control.
3316
3317package PLXML::op_fork;
3318
3319@ISA = ('PLXML::baseop');
3320
3321sub key { 'fork' }
3322sub desc { 'fork' }
3323sub check { 'ck_null' }
3324sub flags { 'ist0' }
3325sub args { '' }
3326
3327
3328package PLXML::op_wait;
3329
3330@ISA = ('PLXML::baseop');
3331
3332sub key { 'wait' }
3333sub desc { 'wait' }
3334sub check { 'ck_null' }
3335sub flags { 'isT0' }
3336sub args { '' }
3337
3338
3339package PLXML::op_waitpid;
3340
3341@ISA = ('PLXML::listop');
3342
3343sub key { 'waitpid' }
3344sub desc { 'waitpid' }
3345sub check { 'ck_fun' }
3346sub flags { 'isT@' }
3347sub args { 'S S' }
3348
3349
3350package PLXML::op_system;
3351
3352@ISA = ('PLXML::listop');
3353
3354sub key { 'system' }
3355sub desc { 'system' }
3356sub check { 'ck_exec' }
3357sub flags { 'imsT@' }
3358sub args { 'S? L' }
3359
3360
3361package PLXML::op_exec;
3362
3363@ISA = ('PLXML::listop');
3364
3365sub key { 'exec' }
3366sub desc { 'exec' }
3367sub check { 'ck_exec' }
3368sub flags { 'dimsT@' }
3369sub args { 'S? L' }
3370
3371
3372package PLXML::op_kill;
3373
3374@ISA = ('PLXML::listop');
3375
3376sub key { 'kill' }
3377sub desc { 'kill' }
3378sub check { 'ck_fun' }
3379sub flags { 'dimsT@' }
3380sub args { 'L' }
3381
3382
3383package PLXML::op_getppid;
3384
3385@ISA = ('PLXML::baseop');
3386
3387sub key { 'getppid' }
3388sub desc { 'getppid' }
3389sub check { 'ck_null' }
3390sub flags { 'isT0' }
3391sub args { '' }
3392
3393
3394package PLXML::op_getpgrp;
3395
3396@ISA = ('PLXML::baseop_unop');
3397
3398sub key { 'getpgrp' }
3399sub desc { 'getpgrp' }
3400sub check { 'ck_fun' }
3401sub flags { 'isT%' }
3402sub args { 'S?' }
3403
3404
3405package PLXML::op_setpgrp;
3406
3407@ISA = ('PLXML::listop');
3408
3409sub key { 'setpgrp' }
3410sub desc { 'setpgrp' }
3411sub check { 'ck_fun' }
3412sub flags { 'isT@' }
3413sub args { 'S? S?' }
3414
3415
3416package PLXML::op_getpriority;
3417
3418@ISA = ('PLXML::listop');
3419
3420sub key { 'getpriority' }
3421sub desc { 'getpriority' }
3422sub check { 'ck_fun' }
3423sub flags { 'isT@' }
3424sub args { 'S S' }
3425
3426
3427package PLXML::op_setpriority;
3428
3429@ISA = ('PLXML::listop');
3430
3431sub key { 'setpriority' }
3432sub desc { 'setpriority' }
3433sub check { 'ck_fun' }
3434sub flags { 'isT@' }
3435sub args { 'S S S' }
3436
3437
3438
3439# Time calls.
3440
3441# NOTE: MacOS patches the 'i' of time() away later when the interpreter
3442# is created because in MacOS time() is already returning times > 2**31-1,
3443# that is, non-integers.
3444
3445package PLXML::op_time;
3446
3447@ISA = ('PLXML::baseop');
3448
3449sub key { 'time' }
3450sub desc { 'time' }
3451sub check { 'ck_null' }
3452sub flags { 'isT0' }
3453sub args { '' }
3454
3455
3456package PLXML::op_tms;
3457
3458@ISA = ('PLXML::baseop');
3459
3460sub key { 'tms' }
3461sub desc { 'times' }
3462sub check { 'ck_null' }
3463sub flags { '0' }
3464sub args { '' }
3465
3466
3467package PLXML::op_localtime;
3468
3469@ISA = ('PLXML::baseop_unop');
3470
3471sub key { 'localtime' }
3472sub desc { 'localtime' }
3473sub check { 'ck_fun' }
3474sub flags { 't%' }
3475sub args { 'S?' }
3476
3477
3478package PLXML::op_gmtime;
3479
3480@ISA = ('PLXML::baseop_unop');
3481
3482sub key { 'gmtime' }
3483sub desc { 'gmtime' }
3484sub check { 'ck_fun' }
3485sub flags { 't%' }
3486sub args { 'S?' }
3487
3488
3489package PLXML::op_alarm;
3490
3491@ISA = ('PLXML::baseop_unop');
3492
3493sub key { 'alarm' }
3494sub desc { 'alarm' }
3495sub check { 'ck_fun' }
3496sub flags { 'istu%' }
3497sub args { 'S?' }
3498
3499
3500package PLXML::op_sleep;
3501
3502@ISA = ('PLXML::baseop_unop');
3503
3504sub key { 'sleep' }
3505sub desc { 'sleep' }
3506sub check { 'ck_fun' }
3507sub flags { 'isT%' }
3508sub args { 'S?' }
3509
3510
3511
3512# Shared memory.
3513
3514package PLXML::op_shmget;
3515
3516@ISA = ('PLXML::listop');
3517
3518sub key { 'shmget' }
3519sub desc { 'shmget' }
3520sub check { 'ck_fun' }
3521sub flags { 'imst@' }
3522sub args { 'S S S' }
3523
3524
3525package PLXML::op_shmctl;
3526
3527@ISA = ('PLXML::listop');
3528
3529sub key { 'shmctl' }
3530sub desc { 'shmctl' }
3531sub check { 'ck_fun' }
3532sub flags { 'imst@' }
3533sub args { 'S S S' }
3534
3535
3536package PLXML::op_shmread;
3537
3538@ISA = ('PLXML::listop');
3539
3540sub key { 'shmread' }
3541sub desc { 'shmread' }
3542sub check { 'ck_fun' }
3543sub flags { 'imst@' }
3544sub args { 'S S S S' }
3545
3546
3547package PLXML::op_shmwrite;
3548
3549@ISA = ('PLXML::listop');
3550
3551sub key { 'shmwrite' }
3552sub desc { 'shmwrite' }
3553sub check { 'ck_fun' }
3554sub flags { 'imst@' }
3555sub args { 'S S S S' }
3556
3557
3558
3559# Message passing.
3560
3561package PLXML::op_msgget;
3562
3563@ISA = ('PLXML::listop');
3564
3565sub key { 'msgget' }
3566sub desc { 'msgget' }
3567sub check { 'ck_fun' }
3568sub flags { 'imst@' }
3569sub args { 'S S' }
3570
3571
3572package PLXML::op_msgctl;
3573
3574@ISA = ('PLXML::listop');
3575
3576sub key { 'msgctl' }
3577sub desc { 'msgctl' }
3578sub check { 'ck_fun' }
3579sub flags { 'imst@' }
3580sub args { 'S S S' }
3581
3582
3583package PLXML::op_msgsnd;
3584
3585@ISA = ('PLXML::listop');
3586
3587sub key { 'msgsnd' }
3588sub desc { 'msgsnd' }
3589sub check { 'ck_fun' }
3590sub flags { 'imst@' }
3591sub args { 'S S S' }
3592
3593
3594package PLXML::op_msgrcv;
3595
3596@ISA = ('PLXML::listop');
3597
3598sub key { 'msgrcv' }
3599sub desc { 'msgrcv' }
3600sub check { 'ck_fun' }
3601sub flags { 'imst@' }
3602sub args { 'S S S S S' }
3603
3604
3605
3606# Semaphores.
3607
3608package PLXML::op_semget;
3609
3610@ISA = ('PLXML::listop');
3611
3612sub key { 'semget' }
3613sub desc { 'semget' }
3614sub check { 'ck_fun' }
3615sub flags { 'imst@' }
3616sub args { 'S S S' }
3617
3618
3619package PLXML::op_semctl;
3620
3621@ISA = ('PLXML::listop');
3622
3623sub key { 'semctl' }
3624sub desc { 'semctl' }
3625sub check { 'ck_fun' }
3626sub flags { 'imst@' }
3627sub args { 'S S S S' }
3628
3629
3630package PLXML::op_semop;
3631
3632@ISA = ('PLXML::listop');
3633
3634sub key { 'semop' }
3635sub desc { 'semop' }
3636sub check { 'ck_fun' }
3637sub flags { 'imst@' }
3638sub args { 'S S' }
3639
3640
3641
3642# Eval.
3643
3644package PLXML::op_require;
3645
3646@ISA = ('PLXML::baseop_unop');
3647
3648sub key { 'require' }
3649sub desc { 'require' }
3650sub check { 'ck_require' }
3651sub flags { 'du%' }
3652sub args { 'S?' }
3653
3654
3655package PLXML::op_dofile;
3656
3657@ISA = ('PLXML::unop');
3658
3659sub key { 'dofile' }
3660sub desc { 'do "file"' }
3661sub check { 'ck_fun' }
3662sub flags { 'd1' }
3663sub args { 'S' }
3664
3665
3666package PLXML::op_entereval;
3667
3668@ISA = ('PLXML::baseop_unop');
3669
3670sub key { 'entereval' }
3671sub desc { 'eval "string"' }
3672sub check { 'ck_eval' }
3673sub flags { 'd%' }
3674sub args { 'S' }
3675
3676
3677package PLXML::op_leaveeval;
3678
3679@ISA = ('PLXML::unop');
3680
3681sub key { 'leaveeval' }
3682sub desc { 'eval "string" exit' }
3683sub check { 'ck_null' }
3684sub flags { '1' }
3685sub args { 'S' }
3686
3687
3688#evalonce eval constant string ck_null d1 S
3689package PLXML::op_entertry;
3690
3691@ISA = ('PLXML::logop');
3692
3693sub key { 'entertry' }
3694sub desc { 'eval {block}' }
3695sub check { 'ck_null' }
3696sub flags { '|' }
3697sub args { '' }
3698
3699
3700package PLXML::op_leavetry;
3701
3702@ISA = ('PLXML::listop');
3703
3704sub key { 'leavetry' }
3705sub desc { 'eval {block} exit' }
3706sub check { 'ck_null' }
3707sub flags { '@' }
3708sub args { '' }
3709
3710
3711
3712# Get system info.
3713
3714package PLXML::op_ghbyname;
3715
3716@ISA = ('PLXML::baseop_unop');
3717
3718sub key { 'ghbyname' }
3719sub desc { 'gethostbyname' }
3720sub check { 'ck_fun' }
3721sub flags { '%' }
3722sub args { 'S' }
3723
3724
3725package PLXML::op_ghbyaddr;
3726
3727@ISA = ('PLXML::listop');
3728
3729sub key { 'ghbyaddr' }
3730sub desc { 'gethostbyaddr' }
3731sub check { 'ck_fun' }
3732sub flags { '@' }
3733sub args { 'S S' }
3734
3735
3736package PLXML::op_ghostent;
3737
3738@ISA = ('PLXML::baseop');
3739
3740sub key { 'ghostent' }
3741sub desc { 'gethostent' }
3742sub check { 'ck_null' }
3743sub flags { '0' }
3744sub args { '' }
3745
3746
3747package PLXML::op_gnbyname;
3748
3749@ISA = ('PLXML::baseop_unop');
3750
3751sub key { 'gnbyname' }
3752sub desc { 'getnetbyname' }
3753sub check { 'ck_fun' }
3754sub flags { '%' }
3755sub args { 'S' }
3756
3757
3758package PLXML::op_gnbyaddr;
3759
3760@ISA = ('PLXML::listop');
3761
3762sub key { 'gnbyaddr' }
3763sub desc { 'getnetbyaddr' }
3764sub check { 'ck_fun' }
3765sub flags { '@' }
3766sub args { 'S S' }
3767
3768
3769package PLXML::op_gnetent;
3770
3771@ISA = ('PLXML::baseop');
3772
3773sub key { 'gnetent' }
3774sub desc { 'getnetent' }
3775sub check { 'ck_null' }
3776sub flags { '0' }
3777sub args { '' }
3778
3779
3780package PLXML::op_gpbyname;
3781
3782@ISA = ('PLXML::baseop_unop');
3783
3784sub key { 'gpbyname' }
3785sub desc { 'getprotobyname' }
3786sub check { 'ck_fun' }
3787sub flags { '%' }
3788sub args { 'S' }
3789
3790
3791package PLXML::op_gpbynumber;
3792
3793@ISA = ('PLXML::listop');
3794
3795sub key { 'gpbynumber' }
3796sub desc { 'getprotobynumber' }
3797sub check { 'ck_fun' }
3798sub flags { '@' }
3799sub args { 'S' }
3800
3801
3802package PLXML::op_gprotoent;
3803
3804@ISA = ('PLXML::baseop');
3805
3806sub key { 'gprotoent' }
3807sub desc { 'getprotoent' }
3808sub check { 'ck_null' }
3809sub flags { '0' }
3810sub args { '' }
3811
3812
3813package PLXML::op_gsbyname;
3814
3815@ISA = ('PLXML::listop');
3816
3817sub key { 'gsbyname' }
3818sub desc { 'getservbyname' }
3819sub check { 'ck_fun' }
3820sub flags { '@' }
3821sub args { 'S S' }
3822
3823
3824package PLXML::op_gsbyport;
3825
3826@ISA = ('PLXML::listop');
3827
3828sub key { 'gsbyport' }
3829sub desc { 'getservbyport' }
3830sub check { 'ck_fun' }
3831sub flags { '@' }
3832sub args { 'S S' }
3833
3834
3835package PLXML::op_gservent;
3836
3837@ISA = ('PLXML::baseop');
3838
3839sub key { 'gservent' }
3840sub desc { 'getservent' }
3841sub check { 'ck_null' }
3842sub flags { '0' }
3843sub args { '' }
3844
3845
3846package PLXML::op_shostent;
3847
3848@ISA = ('PLXML::baseop_unop');
3849
3850sub key { 'shostent' }
3851sub desc { 'sethostent' }
3852sub check { 'ck_fun' }
3853sub flags { 'is%' }
3854sub args { 'S' }
3855
3856
3857package PLXML::op_snetent;
3858
3859@ISA = ('PLXML::baseop_unop');
3860
3861sub key { 'snetent' }
3862sub desc { 'setnetent' }
3863sub check { 'ck_fun' }
3864sub flags { 'is%' }
3865sub args { 'S' }
3866
3867
3868package PLXML::op_sprotoent;
3869
3870@ISA = ('PLXML::baseop_unop');
3871
3872sub key { 'sprotoent' }
3873sub desc { 'setprotoent' }
3874sub check { 'ck_fun' }
3875sub flags { 'is%' }
3876sub args { 'S' }
3877
3878
3879package PLXML::op_sservent;
3880
3881@ISA = ('PLXML::baseop_unop');
3882
3883sub key { 'sservent' }
3884sub desc { 'setservent' }
3885sub check { 'ck_fun' }
3886sub flags { 'is%' }
3887sub args { 'S' }
3888
3889
3890package PLXML::op_ehostent;
3891
3892@ISA = ('PLXML::baseop');
3893
3894sub key { 'ehostent' }
3895sub desc { 'endhostent' }
3896sub check { 'ck_null' }
3897sub flags { 'is0' }
3898sub args { '' }
3899
3900
3901package PLXML::op_enetent;
3902
3903@ISA = ('PLXML::baseop');
3904
3905sub key { 'enetent' }
3906sub desc { 'endnetent' }
3907sub check { 'ck_null' }
3908sub flags { 'is0' }
3909sub args { '' }
3910
3911
3912package PLXML::op_eprotoent;
3913
3914@ISA = ('PLXML::baseop');
3915
3916sub key { 'eprotoent' }
3917sub desc { 'endprotoent' }
3918sub check { 'ck_null' }
3919sub flags { 'is0' }
3920sub args { '' }
3921
3922
3923package PLXML::op_eservent;
3924
3925@ISA = ('PLXML::baseop');
3926
3927sub key { 'eservent' }
3928sub desc { 'endservent' }
3929sub check { 'ck_null' }
3930sub flags { 'is0' }
3931sub args { '' }
3932
3933
3934package PLXML::op_gpwnam;
3935
3936@ISA = ('PLXML::baseop_unop');
3937
3938sub key { 'gpwnam' }
3939sub desc { 'getpwnam' }
3940sub check { 'ck_fun' }
3941sub flags { '%' }
3942sub args { 'S' }
3943
3944
3945package PLXML::op_gpwuid;
3946
3947@ISA = ('PLXML::baseop_unop');
3948
3949sub key { 'gpwuid' }
3950sub desc { 'getpwuid' }
3951sub check { 'ck_fun' }
3952sub flags { '%' }
3953sub args { 'S' }
3954
3955
3956package PLXML::op_gpwent;
3957
3958@ISA = ('PLXML::baseop');
3959
3960sub key { 'gpwent' }
3961sub desc { 'getpwent' }
3962sub check { 'ck_null' }
3963sub flags { '0' }
3964sub args { '' }
3965
3966
3967package PLXML::op_spwent;
3968
3969@ISA = ('PLXML::baseop');
3970
3971sub key { 'spwent' }
3972sub desc { 'setpwent' }
3973sub check { 'ck_null' }
3974sub flags { 'is0' }
3975sub args { '' }
3976
3977
3978package PLXML::op_epwent;
3979
3980@ISA = ('PLXML::baseop');
3981
3982sub key { 'epwent' }
3983sub desc { 'endpwent' }
3984sub check { 'ck_null' }
3985sub flags { 'is0' }
3986sub args { '' }
3987
3988
3989package PLXML::op_ggrnam;
3990
3991@ISA = ('PLXML::baseop_unop');
3992
3993sub key { 'ggrnam' }
3994sub desc { 'getgrnam' }
3995sub check { 'ck_fun' }
3996sub flags { '%' }
3997sub args { 'S' }
3998
3999
4000package PLXML::op_ggrgid;
4001
4002@ISA = ('PLXML::baseop_unop');
4003
4004sub key { 'ggrgid' }
4005sub desc { 'getgrgid' }
4006sub check { 'ck_fun' }
4007sub flags { '%' }
4008sub args { 'S' }
4009
4010
4011package PLXML::op_ggrent;
4012
4013@ISA = ('PLXML::baseop');
4014
4015sub key { 'ggrent' }
4016sub desc { 'getgrent' }
4017sub check { 'ck_null' }
4018sub flags { '0' }
4019sub args { '' }
4020
4021
4022package PLXML::op_sgrent;
4023
4024@ISA = ('PLXML::baseop');
4025
4026sub key { 'sgrent' }
4027sub desc { 'setgrent' }
4028sub check { 'ck_null' }
4029sub flags { 'is0' }
4030sub args { '' }
4031
4032
4033package PLXML::op_egrent;
4034
4035@ISA = ('PLXML::baseop');
4036
4037sub key { 'egrent' }
4038sub desc { 'endgrent' }
4039sub check { 'ck_null' }
4040sub flags { 'is0' }
4041sub args { '' }
4042
4043
4044package PLXML::op_getlogin;
4045
4046@ISA = ('PLXML::baseop');
4047
4048sub key { 'getlogin' }
4049sub desc { 'getlogin' }
4050sub check { 'ck_null' }
4051sub flags { 'st0' }
4052sub args { '' }
4053
4054
4055
4056# Miscellaneous.
4057
4058package PLXML::op_syscall;
4059
4060@ISA = ('PLXML::listop');
4061
4062sub key { 'syscall' }
4063sub desc { 'syscall' }
4064sub check { 'ck_fun' }
4065sub flags { 'imst@' }
4066sub args { 'S L' }
4067
4068
4069
4070# For multi-threading
4071package PLXML::op_lock;
4072
4073@ISA = ('PLXML::baseop_unop');
4074
4075sub key { 'lock' }
4076sub desc { 'lock' }
4077sub check { 'ck_rfun' }
4078sub flags { 's%' }
4079sub args { 'R' }
4080
4081
4082package PLXML::op_threadsv;
4083
4084@ISA = ('PLXML::baseop');
4085
4086sub key { 'threadsv' }
4087sub desc { 'per-thread value' }
4088sub check { 'ck_null' }
4089sub flags { 'ds0' }
4090sub args { '' }
4091
4092
4093
4094# Control (contd.)
4095package PLXML::op_setstate;
4096
4097@ISA = ('PLXML::cop');
4098
4099sub key { 'setstate' }
4100sub desc { 'set statement info' }
4101sub check { 'ck_null' }
4102sub flags { 's;' }
4103sub args { '' }
4104
4105
4106package PLXML::op_method_named;
4107
4108@ISA = ('PLXML::padop_svop');
4109
4110sub key { 'method_named' }
4111sub desc { 'method with known name' }
4112sub check { 'ck_null' }
4113sub flags { 'd$' }
4114sub args { '' }
4115
4116
4117
4118package PLXML::op_dor;
4119
4120@ISA = ('PLXML::logop');
4121
4122sub key { 'dor' }
4123sub desc { 'defined or (//)' }
4124sub check { 'ck_null' }
4125sub flags { '|' }
4126sub args { '' }
4127
4128
4129package PLXML::op_dorassign;
4130
4131@ISA = ('PLXML::logop');
4132
4133sub key { 'dorassign' }
4134sub desc { 'defined or assignment (//=)' }
4135sub check { 'ck_null' }
4136sub flags { 's|' }
4137sub args { '' }
4138
4139
4140
4141# Add new ops before this, the custom operator.
4142
4143package PLXML::op_custom;
4144
4145@ISA = ('PLXML::baseop');
4146
4147sub key { 'custom' }
4148sub desc { 'unknown custom operator' }
4149sub check { 'ck_null' }
4150sub flags { '0' }
4151sub args { '' }
4152
4153