6 print "walk(" . join(',', @_) . ")\n";
8 for my $key (sort keys %$self) {
9 print "\t$key = <$$self{$key}>\n";
11 foreach $kid (@{$$self{Kids}}) {
16 package PLXML::Characters;
21 package PLXML::madprops;
25 package PLXML::mad_op;
29 package PLXML::mad_pv;
33 package PLXML::baseop;
37 package PLXML::baseop_unop;
49 package PLXML::filestatop;
51 @ISA = ('PLXML::baseop_unop');
53 package PLXML::listop;
65 package PLXML::loopexop;
73 package PLXML::padop_svop;
81 package PLXML::pvop_svop;
90 # New ops always go at the end, just before 'custom'
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.
97 # The flags consist of options followed by a mandatory op class signifier
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 - ;
107 # needs stack mark - m
108 # needs constant folding - f
109 # produces a scalar - s
110 # produces an integer - i
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
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.
125 package PLXML::op_null;
127 @ISA = ('PLXML::baseop');
130 sub desc { 'null operation' }
131 sub check { 'ck_null' }
136 package PLXML::op_stub;
138 @ISA = ('PLXML::baseop');
142 sub check { 'ck_null' }
147 package PLXML::op_scalar;
149 @ISA = ('PLXML::baseop_unop');
152 sub desc { 'scalar' }
153 sub check { 'ck_fun' }
161 package PLXML::op_pushmark;
163 @ISA = ('PLXML::baseop');
165 sub key { 'pushmark' }
166 sub desc { 'pushmark' }
167 sub check { 'ck_null' }
172 package PLXML::op_wantarray;
174 @ISA = ('PLXML::baseop');
176 sub key { 'wantarray' }
177 sub desc { 'wantarray' }
178 sub check { 'ck_null' }
184 package PLXML::op_const;
186 @ISA = ('PLXML::padop_svop');
189 sub desc { 'constant item' }
190 sub check { 'ck_svconst' }
196 package PLXML::op_gvsv;
198 @ISA = ('PLXML::padop_svop');
201 sub desc { 'scalar variable' }
202 sub check { 'ck_null' }
207 package PLXML::op_gv;
209 @ISA = ('PLXML::padop_svop');
212 sub desc { 'glob value' }
213 sub check { 'ck_null' }
218 package PLXML::op_gelem;
220 @ISA = ('PLXML::binop');
223 sub desc { 'glob elem' }
224 sub check { 'ck_null' }
229 package PLXML::op_padsv;
231 @ISA = ('PLXML::baseop');
234 sub desc { 'private variable' }
235 sub check { 'ck_null' }
240 package PLXML::op_padav;
242 @ISA = ('PLXML::baseop');
245 sub desc { 'private array' }
246 sub check { 'ck_null' }
251 package PLXML::op_padhv;
253 @ISA = ('PLXML::baseop');
256 sub desc { 'private hash' }
257 sub check { 'ck_null' }
262 package PLXML::op_padany;
264 @ISA = ('PLXML::baseop');
267 sub desc { 'private value' }
268 sub check { 'ck_null' }
274 package PLXML::op_pushre;
276 @ISA = ('PLXML::pmop');
279 sub desc { 'push regexp' }
280 sub check { 'ck_null' }
286 # References and stuff.
288 package PLXML::op_rv2gv;
290 @ISA = ('PLXML::unop');
293 sub desc { 'ref-to-glob cast' }
294 sub check { 'ck_rvconst' }
299 package PLXML::op_rv2sv;
301 @ISA = ('PLXML::unop');
304 sub desc { 'scalar dereference' }
305 sub check { 'ck_rvconst' }
310 package PLXML::op_av2arylen;
312 @ISA = ('PLXML::unop');
314 sub key { 'av2arylen' }
315 sub desc { 'array length' }
316 sub check { 'ck_null' }
321 package PLXML::op_rv2cv;
323 @ISA = ('PLXML::unop');
326 sub desc { 'subroutine dereference' }
327 sub check { 'ck_rvconst' }
332 package PLXML::op_anoncode;
334 @ISA = ('PLXML::padop_svop');
336 sub key { 'anoncode' }
337 sub desc { 'anonymous subroutine' }
338 sub check { 'ck_anoncode' }
343 package PLXML::op_prototype;
345 @ISA = ('PLXML::baseop_unop');
347 sub key { 'prototype' }
348 sub desc { 'subroutine prototype' }
349 sub check { 'ck_null' }
354 package PLXML::op_refgen;
356 @ISA = ('PLXML::unop');
359 sub desc { 'reference constructor' }
360 sub check { 'ck_spair' }
365 package PLXML::op_srefgen;
367 @ISA = ('PLXML::unop');
369 sub key { 'srefgen' }
370 sub desc { 'single ref constructor' }
371 sub check { 'ck_null' }
376 package PLXML::op_ref;
378 @ISA = ('PLXML::baseop_unop');
381 sub desc { 'reference-type operator' }
382 sub check { 'ck_fun' }
387 package PLXML::op_bless;
389 @ISA = ('PLXML::listop');
393 sub check { 'ck_fun' }
401 package PLXML::op_backtick;
403 @ISA = ('PLXML::baseop_unop');
405 sub key { 'backtick' }
406 sub desc { 'quoted execution (``, qx)' }
407 sub check { 'ck_open' }
412 # glob defaults its first arg to $_
413 package PLXML::op_glob;
415 @ISA = ('PLXML::listop');
419 sub check { 'ck_glob' }
424 package PLXML::op_readline;
426 @ISA = ('PLXML::baseop_unop');
428 sub key { 'readline' }
429 sub desc { '<HANDLE>' }
430 sub check { 'ck_null' }
435 package PLXML::op_rcatline;
437 @ISA = ('PLXML::padop_svop');
439 sub key { 'rcatline' }
440 sub desc { 'append I/O operator' }
441 sub check { 'ck_null' }
447 # Bindable operators.
449 package PLXML::op_regcmaybe;
451 @ISA = ('PLXML::unop');
453 sub key { 'regcmaybe' }
454 sub desc { 'regexp internal guard' }
455 sub check { 'ck_fun' }
460 package PLXML::op_regcreset;
462 @ISA = ('PLXML::unop');
464 sub key { 'regcreset' }
465 sub desc { 'regexp internal reset' }
466 sub check { 'ck_fun' }
471 package PLXML::op_regcomp;
473 @ISA = ('PLXML::logop');
475 sub key { 'regcomp' }
476 sub desc { 'regexp compilation' }
477 sub check { 'ck_null' }
482 package PLXML::op_match;
484 @ISA = ('PLXML::pmop');
487 sub desc { 'pattern match (m//)' }
488 sub check { 'ck_match' }
493 package PLXML::op_qr;
495 @ISA = ('PLXML::pmop');
498 sub desc { 'pattern quote (qr//)' }
499 sub check { 'ck_match' }
504 package PLXML::op_subst;
506 @ISA = ('PLXML::pmop');
509 sub desc { 'substitution (s///)' }
510 sub check { 'ck_match' }
515 package PLXML::op_substcont;
517 @ISA = ('PLXML::logop');
519 sub key { 'substcont' }
520 sub desc { 'substitution iterator' }
521 sub check { 'ck_null' }
526 package PLXML::op_trans;
528 @ISA = ('PLXML::pvop_svop');
531 sub desc { 'transliteration (tr///)' }
532 sub check { 'ck_match' }
539 # sassign is special-cased for op class
541 package PLXML::op_sassign;
543 @ISA = ('PLXML::baseop');
545 sub key { 'sassign' }
546 sub desc { 'scalar assignment' }
547 sub check { 'ck_sassign' }
552 package PLXML::op_aassign;
554 @ISA = ('PLXML::binop');
556 sub key { 'aassign' }
557 sub desc { 'list assignment' }
558 sub check { 'ck_null' }
564 package PLXML::op_chop;
566 @ISA = ('PLXML::baseop_unop');
570 sub check { 'ck_spair' }
575 package PLXML::op_schop;
577 @ISA = ('PLXML::baseop_unop');
580 sub desc { 'scalar chop' }
581 sub check { 'ck_null' }
586 package PLXML::op_chomp;
588 @ISA = ('PLXML::baseop_unop');
592 sub check { 'ck_spair' }
597 package PLXML::op_schomp;
599 @ISA = ('PLXML::baseop_unop');
602 sub desc { 'scalar chomp' }
603 sub check { 'ck_null' }
608 package PLXML::op_defined;
610 @ISA = ('PLXML::baseop_unop');
612 sub key { 'defined' }
613 sub desc { 'defined operator' }
614 sub check { 'ck_defined' }
619 package PLXML::op_undef;
621 @ISA = ('PLXML::baseop_unop');
624 sub desc { 'undef operator' }
625 sub check { 'ck_lfun' }
630 package PLXML::op_study;
632 @ISA = ('PLXML::baseop_unop');
636 sub check { 'ck_fun' }
641 package PLXML::op_pos;
643 @ISA = ('PLXML::baseop_unop');
646 sub desc { 'match position' }
647 sub check { 'ck_lfun' }
653 package PLXML::op_preinc;
655 @ISA = ('PLXML::unop');
658 sub desc { 'preincrement (++)' }
659 sub check { 'ck_lfun' }
664 package PLXML::op_i_preinc;
666 @ISA = ('PLXML::unop');
668 sub key { 'i_preinc' }
669 sub desc { 'integer preincrement (++)' }
670 sub check { 'ck_lfun' }
675 package PLXML::op_predec;
677 @ISA = ('PLXML::unop');
680 sub desc { 'predecrement (--)' }
681 sub check { 'ck_lfun' }
686 package PLXML::op_i_predec;
688 @ISA = ('PLXML::unop');
690 sub key { 'i_predec' }
691 sub desc { 'integer predecrement (--)' }
692 sub check { 'ck_lfun' }
697 package PLXML::op_postinc;
699 @ISA = ('PLXML::unop');
701 sub key { 'postinc' }
702 sub desc { 'postincrement (++)' }
703 sub check { 'ck_lfun' }
704 sub flags { 'dIst1' }
708 package PLXML::op_i_postinc;
710 @ISA = ('PLXML::unop');
712 sub key { 'i_postinc' }
713 sub desc { 'integer postincrement (++)' }
714 sub check { 'ck_lfun' }
715 sub flags { 'disT1' }
719 package PLXML::op_postdec;
721 @ISA = ('PLXML::unop');
723 sub key { 'postdec' }
724 sub desc { 'postdecrement (--)' }
725 sub check { 'ck_lfun' }
726 sub flags { 'dIst1' }
730 package PLXML::op_i_postdec;
732 @ISA = ('PLXML::unop');
734 sub key { 'i_postdec' }
735 sub desc { 'integer postdecrement (--)' }
736 sub check { 'ck_lfun' }
737 sub flags { 'disT1' }
742 # Ordinary operators.
744 package PLXML::op_pow;
746 @ISA = ('PLXML::binop');
749 sub desc { 'exponentiation (**)' }
750 sub check { 'ck_null' }
756 package PLXML::op_multiply;
758 @ISA = ('PLXML::binop');
760 sub key { 'multiply' }
761 sub desc { 'multiplication (*)' }
762 sub check { 'ck_null' }
763 sub flags { 'IfsT2' }
767 package PLXML::op_i_multiply;
769 @ISA = ('PLXML::binop');
771 sub key { 'i_multiply' }
772 sub desc { 'integer multiplication (*)' }
773 sub check { 'ck_null' }
774 sub flags { 'ifsT2' }
778 package PLXML::op_divide;
780 @ISA = ('PLXML::binop');
783 sub desc { 'division (/)' }
784 sub check { 'ck_null' }
785 sub flags { 'IfsT2' }
789 package PLXML::op_i_divide;
791 @ISA = ('PLXML::binop');
793 sub key { 'i_divide' }
794 sub desc { 'integer division (/)' }
795 sub check { 'ck_null' }
796 sub flags { 'ifsT2' }
800 package PLXML::op_modulo;
802 @ISA = ('PLXML::binop');
805 sub desc { 'modulus (%)' }
806 sub check { 'ck_null' }
807 sub flags { 'IifsT2' }
811 package PLXML::op_i_modulo;
813 @ISA = ('PLXML::binop');
815 sub key { 'i_modulo' }
816 sub desc { 'integer modulus (%)' }
817 sub check { 'ck_null' }
818 sub flags { 'ifsT2' }
822 package PLXML::op_repeat;
824 @ISA = ('PLXML::binop');
827 sub desc { 'repeat (x)' }
828 sub check { 'ck_repeat' }
834 package PLXML::op_add;
836 @ISA = ('PLXML::binop');
839 sub desc { 'addition (+)' }
840 sub check { 'ck_null' }
841 sub flags { 'IfsT2' }
845 package PLXML::op_i_add;
847 @ISA = ('PLXML::binop');
850 sub desc { 'integer addition (+)' }
851 sub check { 'ck_null' }
852 sub flags { 'ifsT2' }
856 package PLXML::op_subtract;
858 @ISA = ('PLXML::binop');
860 sub key { 'subtract' }
861 sub desc { 'subtraction (-)' }
862 sub check { 'ck_null' }
863 sub flags { 'IfsT2' }
867 package PLXML::op_i_subtract;
869 @ISA = ('PLXML::binop');
871 sub key { 'i_subtract' }
872 sub desc { 'integer subtraction (-)' }
873 sub check { 'ck_null' }
874 sub flags { 'ifsT2' }
878 package PLXML::op_concat;
880 @ISA = ('PLXML::binop');
883 sub desc { 'concatenation (.) or string' }
884 sub check { 'ck_concat' }
889 package PLXML::op_stringify;
891 @ISA = ('PLXML::listop');
893 sub key { 'stringify' }
894 sub desc { 'string' }
895 sub check { 'ck_fun' }
901 package PLXML::op_left_shift;
903 @ISA = ('PLXML::binop');
905 sub key { 'left_shift' }
906 sub desc { 'left bitshift (<<)' }
907 sub check { 'ck_bitop' }
912 package PLXML::op_right_shift;
914 @ISA = ('PLXML::binop');
916 sub key { 'right_shift' }
917 sub desc { 'right bitshift (>>)' }
918 sub check { 'ck_bitop' }
924 package PLXML::op_lt;
926 @ISA = ('PLXML::binop');
929 sub desc { 'numeric lt (<)' }
930 sub check { 'ck_null' }
931 sub flags { 'Iifs2' }
935 package PLXML::op_i_lt;
937 @ISA = ('PLXML::binop');
940 sub desc { 'integer lt (<)' }
941 sub check { 'ck_null' }
946 package PLXML::op_gt;
948 @ISA = ('PLXML::binop');
951 sub desc { 'numeric gt (>)' }
952 sub check { 'ck_null' }
953 sub flags { 'Iifs2' }
957 package PLXML::op_i_gt;
959 @ISA = ('PLXML::binop');
962 sub desc { 'integer gt (>)' }
963 sub check { 'ck_null' }
968 package PLXML::op_le;
970 @ISA = ('PLXML::binop');
973 sub desc { 'numeric le (<=)' }
974 sub check { 'ck_null' }
975 sub flags { 'Iifs2' }
979 package PLXML::op_i_le;
981 @ISA = ('PLXML::binop');
984 sub desc { 'integer le (<=)' }
985 sub check { 'ck_null' }
990 package PLXML::op_ge;
992 @ISA = ('PLXML::binop');
995 sub desc { 'numeric ge (>=)' }
996 sub check { 'ck_null' }
997 sub flags { 'Iifs2' }
1001 package PLXML::op_i_ge;
1003 @ISA = ('PLXML::binop');
1006 sub desc { 'integer ge (>=)' }
1007 sub check { 'ck_null' }
1008 sub flags { 'ifs2' }
1012 package PLXML::op_eq;
1014 @ISA = ('PLXML::binop');
1017 sub desc { 'numeric eq (==)' }
1018 sub check { 'ck_null' }
1019 sub flags { 'Iifs2' }
1023 package PLXML::op_i_eq;
1025 @ISA = ('PLXML::binop');
1028 sub desc { 'integer eq (==)' }
1029 sub check { 'ck_null' }
1030 sub flags { 'ifs2' }
1034 package PLXML::op_ne;
1036 @ISA = ('PLXML::binop');
1039 sub desc { 'numeric ne (!=)' }
1040 sub check { 'ck_null' }
1041 sub flags { 'Iifs2' }
1045 package PLXML::op_i_ne;
1047 @ISA = ('PLXML::binop');
1050 sub desc { 'integer ne (!=)' }
1051 sub check { 'ck_null' }
1052 sub flags { 'ifs2' }
1056 package PLXML::op_ncmp;
1058 @ISA = ('PLXML::binop');
1061 sub desc { 'numeric comparison (<=>)' }
1062 sub check { 'ck_null' }
1063 sub flags { 'Iifst2' }
1067 package PLXML::op_i_ncmp;
1069 @ISA = ('PLXML::binop');
1071 sub key { 'i_ncmp' }
1072 sub desc { 'integer comparison (<=>)' }
1073 sub check { 'ck_null' }
1074 sub flags { 'ifst2' }
1079 package PLXML::op_slt;
1081 @ISA = ('PLXML::binop');
1084 sub desc { 'string lt' }
1085 sub check { 'ck_null' }
1086 sub flags { 'ifs2' }
1090 package PLXML::op_sgt;
1092 @ISA = ('PLXML::binop');
1095 sub desc { 'string gt' }
1096 sub check { 'ck_null' }
1097 sub flags { 'ifs2' }
1101 package PLXML::op_sle;
1103 @ISA = ('PLXML::binop');
1106 sub desc { 'string le' }
1107 sub check { 'ck_null' }
1108 sub flags { 'ifs2' }
1112 package PLXML::op_sge;
1114 @ISA = ('PLXML::binop');
1117 sub desc { 'string ge' }
1118 sub check { 'ck_null' }
1119 sub flags { 'ifs2' }
1123 package PLXML::op_seq;
1125 @ISA = ('PLXML::binop');
1128 sub desc { 'string eq' }
1129 sub check { 'ck_null' }
1130 sub flags { 'ifs2' }
1134 package PLXML::op_sne;
1136 @ISA = ('PLXML::binop');
1139 sub desc { 'string ne' }
1140 sub check { 'ck_null' }
1141 sub flags { 'ifs2' }
1145 package PLXML::op_scmp;
1147 @ISA = ('PLXML::binop');
1150 sub desc { 'string comparison (cmp)' }
1151 sub check { 'ck_null' }
1152 sub flags { 'ifst2' }
1157 package PLXML::op_bit_and;
1159 @ISA = ('PLXML::binop');
1161 sub key { 'bit_and' }
1162 sub desc { 'bitwise and (&)' }
1163 sub check { 'ck_bitop' }
1164 sub flags { 'fst2' }
1168 package PLXML::op_bit_xor;
1170 @ISA = ('PLXML::binop');
1172 sub key { 'bit_xor' }
1173 sub desc { 'bitwise xor (^)' }
1174 sub check { 'ck_bitop' }
1175 sub flags { 'fst2' }
1179 package PLXML::op_bit_or;
1181 @ISA = ('PLXML::binop');
1183 sub key { 'bit_or' }
1184 sub desc { 'bitwise or (|)' }
1185 sub check { 'ck_bitop' }
1186 sub flags { 'fst2' }
1191 package PLXML::op_negate;
1193 @ISA = ('PLXML::unop');
1195 sub key { 'negate' }
1196 sub desc { 'negation (-)' }
1197 sub check { 'ck_null' }
1198 sub flags { 'Ifst1' }
1202 package PLXML::op_i_negate;
1204 @ISA = ('PLXML::unop');
1206 sub key { 'i_negate' }
1207 sub desc { 'integer negation (-)' }
1208 sub check { 'ck_null' }
1209 sub flags { 'ifsT1' }
1213 package PLXML::op_not;
1215 @ISA = ('PLXML::unop');
1219 sub check { 'ck_null' }
1220 sub flags { 'ifs1' }
1224 package PLXML::op_complement;
1226 @ISA = ('PLXML::unop');
1228 sub key { 'complement' }
1229 sub desc { '1\'s complement (~)' }
1230 sub check { 'ck_bitop' }
1231 sub flags { 'fst1' }
1236 # High falutin' math.
1238 package PLXML::op_atan2;
1240 @ISA = ('PLXML::listop');
1243 sub desc { 'atan2' }
1244 sub check { 'ck_fun' }
1245 sub flags { 'fsT@' }
1249 package PLXML::op_sin;
1251 @ISA = ('PLXML::baseop_unop');
1255 sub check { 'ck_fun' }
1256 sub flags { 'fsTu%' }
1260 package PLXML::op_cos;
1262 @ISA = ('PLXML::baseop_unop');
1266 sub check { 'ck_fun' }
1267 sub flags { 'fsTu%' }
1271 package PLXML::op_rand;
1273 @ISA = ('PLXML::baseop_unop');
1277 sub check { 'ck_fun' }
1282 package PLXML::op_srand;
1284 @ISA = ('PLXML::baseop_unop');
1287 sub desc { 'srand' }
1288 sub check { 'ck_fun' }
1293 package PLXML::op_exp;
1295 @ISA = ('PLXML::baseop_unop');
1299 sub check { 'ck_fun' }
1300 sub flags { 'fsTu%' }
1304 package PLXML::op_log;
1306 @ISA = ('PLXML::baseop_unop');
1310 sub check { 'ck_fun' }
1311 sub flags { 'fsTu%' }
1315 package PLXML::op_sqrt;
1317 @ISA = ('PLXML::baseop_unop');
1321 sub check { 'ck_fun' }
1322 sub flags { 'fsTu%' }
1329 package PLXML::op_int;
1331 @ISA = ('PLXML::baseop_unop');
1335 sub check { 'ck_fun' }
1336 sub flags { 'fsTu%' }
1340 package PLXML::op_hex;
1342 @ISA = ('PLXML::baseop_unop');
1346 sub check { 'ck_fun' }
1347 sub flags { 'fsTu%' }
1351 package PLXML::op_oct;
1353 @ISA = ('PLXML::baseop_unop');
1357 sub check { 'ck_fun' }
1358 sub flags { 'fsTu%' }
1362 package PLXML::op_abs;
1364 @ISA = ('PLXML::baseop_unop');
1368 sub check { 'ck_fun' }
1369 sub flags { 'fsTu%' }
1376 package PLXML::op_length;
1378 @ISA = ('PLXML::baseop_unop');
1380 sub key { 'length' }
1381 sub desc { 'length' }
1382 sub check { 'ck_lengthconst' }
1383 sub flags { 'isTu%' }
1387 package PLXML::op_substr;
1389 @ISA = ('PLXML::listop');
1391 sub key { 'substr' }
1392 sub desc { 'substr' }
1393 sub check { 'ck_substr' }
1395 sub args { 'S S S? S?' }
1398 package PLXML::op_vec;
1400 @ISA = ('PLXML::listop');
1404 sub check { 'ck_fun' }
1405 sub flags { 'ist@' }
1406 sub args { 'S S S' }
1410 package PLXML::op_index;
1412 @ISA = ('PLXML::listop');
1415 sub desc { 'index' }
1416 sub check { 'ck_index' }
1417 sub flags { 'isT@' }
1418 sub args { 'S S S?' }
1421 package PLXML::op_rindex;
1423 @ISA = ('PLXML::listop');
1425 sub key { 'rindex' }
1426 sub desc { 'rindex' }
1427 sub check { 'ck_index' }
1428 sub flags { 'isT@' }
1429 sub args { 'S S S?' }
1433 package PLXML::op_sprintf;
1435 @ISA = ('PLXML::listop');
1437 sub key { 'sprintf' }
1438 sub desc { 'sprintf' }
1439 sub check { 'ck_fun' }
1440 sub flags { 'mfst@' }
1444 package PLXML::op_formline;
1446 @ISA = ('PLXML::listop');
1448 sub key { 'formline' }
1449 sub desc { 'formline' }
1450 sub check { 'ck_fun' }
1455 package PLXML::op_ord;
1457 @ISA = ('PLXML::baseop_unop');
1461 sub check { 'ck_fun' }
1462 sub flags { 'ifsTu%' }
1466 package PLXML::op_chr;
1468 @ISA = ('PLXML::baseop_unop');
1472 sub check { 'ck_fun' }
1473 sub flags { 'fsTu%' }
1477 package PLXML::op_crypt;
1479 @ISA = ('PLXML::listop');
1482 sub desc { 'crypt' }
1483 sub check { 'ck_fun' }
1484 sub flags { 'fsT@' }
1488 package PLXML::op_ucfirst;
1490 @ISA = ('PLXML::baseop_unop');
1492 sub key { 'ucfirst' }
1493 sub desc { 'ucfirst' }
1494 sub check { 'ck_fun' }
1495 sub flags { 'fstu%' }
1499 package PLXML::op_lcfirst;
1501 @ISA = ('PLXML::baseop_unop');
1503 sub key { 'lcfirst' }
1504 sub desc { 'lcfirst' }
1505 sub check { 'ck_fun' }
1506 sub flags { 'fstu%' }
1510 package PLXML::op_uc;
1512 @ISA = ('PLXML::baseop_unop');
1516 sub check { 'ck_fun' }
1517 sub flags { 'fstu%' }
1521 package PLXML::op_lc;
1523 @ISA = ('PLXML::baseop_unop');
1527 sub check { 'ck_fun' }
1528 sub flags { 'fstu%' }
1532 package PLXML::op_quotemeta;
1534 @ISA = ('PLXML::baseop_unop');
1536 sub key { 'quotemeta' }
1537 sub desc { 'quotemeta' }
1538 sub check { 'ck_fun' }
1539 sub flags { 'fstu%' }
1546 package PLXML::op_rv2av;
1548 @ISA = ('PLXML::unop');
1551 sub desc { 'array dereference' }
1552 sub check { 'ck_rvconst' }
1557 package PLXML::op_aelemfast;
1559 @ISA = ('PLXML::padop_svop');
1561 sub key { 'aelemfast' }
1562 sub desc { 'constant array element' }
1563 sub check { 'ck_null' }
1568 package PLXML::op_aelem;
1570 @ISA = ('PLXML::binop');
1573 sub desc { 'array element' }
1574 sub check { 'ck_null' }
1579 package PLXML::op_aslice;
1581 @ISA = ('PLXML::listop');
1583 sub key { 'aslice' }
1584 sub desc { 'array slice' }
1585 sub check { 'ck_null' }
1593 package PLXML::op_each;
1595 @ISA = ('PLXML::baseop_unop');
1599 sub check { 'ck_fun' }
1604 package PLXML::op_values;
1606 @ISA = ('PLXML::baseop_unop');
1608 sub key { 'values' }
1609 sub desc { 'values' }
1610 sub check { 'ck_fun' }
1615 package PLXML::op_keys;
1617 @ISA = ('PLXML::baseop_unop');
1621 sub check { 'ck_fun' }
1626 package PLXML::op_delete;
1628 @ISA = ('PLXML::baseop_unop');
1630 sub key { 'delete' }
1631 sub desc { 'delete' }
1632 sub check { 'ck_delete' }
1637 package PLXML::op_exists;
1639 @ISA = ('PLXML::baseop_unop');
1641 sub key { 'exists' }
1642 sub desc { 'exists' }
1643 sub check { 'ck_exists' }
1648 package PLXML::op_rv2hv;
1650 @ISA = ('PLXML::unop');
1653 sub desc { 'hash dereference' }
1654 sub check { 'ck_rvconst' }
1659 package PLXML::op_helem;
1661 @ISA = ('PLXML::listop');
1664 sub desc { 'hash element' }
1665 sub check { 'ck_null' }
1670 package PLXML::op_hslice;
1672 @ISA = ('PLXML::listop');
1674 sub key { 'hslice' }
1675 sub desc { 'hash slice' }
1676 sub check { 'ck_null' }
1682 # Explosives and implosives.
1684 package PLXML::op_unpack;
1686 @ISA = ('PLXML::listop');
1688 sub key { 'unpack' }
1689 sub desc { 'unpack' }
1690 sub check { 'ck_unpack' }
1695 package PLXML::op_pack;
1697 @ISA = ('PLXML::listop');
1701 sub check { 'ck_fun' }
1702 sub flags { 'mst@' }
1706 package PLXML::op_split;
1708 @ISA = ('PLXML::listop');
1711 sub desc { 'split' }
1712 sub check { 'ck_split' }
1714 sub args { 'S S S' }
1717 package PLXML::op_join;
1719 @ISA = ('PLXML::listop');
1722 sub desc { 'join or string' }
1723 sub check { 'ck_join' }
1724 sub flags { 'mst@' }
1731 package PLXML::op_list;
1733 @ISA = ('PLXML::listop');
1737 sub check { 'ck_null' }
1742 package PLXML::op_lslice;
1744 @ISA = ('PLXML::binop');
1746 sub key { 'lslice' }
1747 sub desc { 'list slice' }
1748 sub check { 'ck_null' }
1750 sub args { 'H L L' }
1753 package PLXML::op_anonlist;
1755 @ISA = ('PLXML::listop');
1757 sub key { 'anonlist' }
1758 sub desc { 'anonymous list ([])' }
1759 sub check { 'ck_fun' }
1764 package PLXML::op_anonhash;
1766 @ISA = ('PLXML::listop');
1768 sub key { 'anonhash' }
1769 sub desc { 'anonymous hash ({})' }
1770 sub check { 'ck_fun' }
1776 package PLXML::op_splice;
1778 @ISA = ('PLXML::listop');
1780 sub key { 'splice' }
1781 sub desc { 'splice' }
1782 sub check { 'ck_fun' }
1784 sub args { 'A S? S? L' }
1787 package PLXML::op_push;
1789 @ISA = ('PLXML::listop');
1793 sub check { 'ck_fun' }
1794 sub flags { 'imsT@' }
1798 package PLXML::op_pop;
1800 @ISA = ('PLXML::baseop_unop');
1804 sub check { 'ck_shift' }
1809 package PLXML::op_shift;
1811 @ISA = ('PLXML::baseop_unop');
1814 sub desc { 'shift' }
1815 sub check { 'ck_shift' }
1820 package PLXML::op_unshift;
1822 @ISA = ('PLXML::listop');
1824 sub key { 'unshift' }
1825 sub desc { 'unshift' }
1826 sub check { 'ck_fun' }
1827 sub flags { 'imsT@' }
1831 package PLXML::op_sort;
1833 @ISA = ('PLXML::listop');
1837 sub check { 'ck_sort' }
1842 package PLXML::op_reverse;
1844 @ISA = ('PLXML::listop');
1846 sub key { 'reverse' }
1847 sub desc { 'reverse' }
1848 sub check { 'ck_fun' }
1854 package PLXML::op_grepstart;
1856 @ISA = ('PLXML::listop');
1858 sub key { 'grepstart' }
1860 sub check { 'ck_grep' }
1865 package PLXML::op_grepwhile;
1867 @ISA = ('PLXML::logop');
1869 sub key { 'grepwhile' }
1870 sub desc { 'grep iterator' }
1871 sub check { 'ck_null' }
1877 package PLXML::op_mapstart;
1879 @ISA = ('PLXML::listop');
1881 sub key { 'mapstart' }
1883 sub check { 'ck_grep' }
1888 package PLXML::op_mapwhile;
1890 @ISA = ('PLXML::logop');
1892 sub key { 'mapwhile' }
1893 sub desc { 'map iterator' }
1894 sub check { 'ck_null' }
1902 package PLXML::op_range;
1904 @ISA = ('PLXML::logop');
1907 sub desc { 'flipflop' }
1908 sub check { 'ck_null' }
1913 package PLXML::op_flip;
1915 @ISA = ('PLXML::unop');
1918 sub desc { 'range (or flip)' }
1919 sub check { 'ck_null' }
1924 package PLXML::op_flop;
1926 @ISA = ('PLXML::unop');
1929 sub desc { 'range (or flop)' }
1930 sub check { 'ck_null' }
1938 package PLXML::op_and;
1940 @ISA = ('PLXML::logop');
1943 sub desc { 'logical and (&&)' }
1944 sub check { 'ck_null' }
1949 package PLXML::op_or;
1951 @ISA = ('PLXML::logop');
1954 sub desc { 'logical or (||)' }
1955 sub check { 'ck_null' }
1960 package PLXML::op_xor;
1962 @ISA = ('PLXML::binop');
1965 sub desc { 'logical xor' }
1966 sub check { 'ck_null' }
1971 package PLXML::op_cond_expr;
1973 @ISA = ('PLXML::logop');
1975 sub key { 'cond_expr' }
1976 sub desc { 'conditional expression' }
1977 sub check { 'ck_null' }
1982 package PLXML::op_andassign;
1984 @ISA = ('PLXML::logop');
1986 sub key { 'andassign' }
1987 sub desc { 'logical and assignment (&&=)' }
1988 sub check { 'ck_null' }
1993 package PLXML::op_orassign;
1995 @ISA = ('PLXML::logop');
1997 sub key { 'orassign' }
1998 sub desc { 'logical or assignment (||=)' }
1999 sub check { 'ck_null' }
2005 package PLXML::op_method;
2007 @ISA = ('PLXML::unop');
2009 sub key { 'method' }
2010 sub desc { 'method lookup' }
2011 sub check { 'ck_method' }
2016 package PLXML::op_entersub;
2018 @ISA = ('PLXML::unop');
2020 sub key { 'entersub' }
2021 sub desc { 'subroutine entry' }
2022 sub check { 'ck_subr' }
2023 sub flags { 'dmt1' }
2027 package PLXML::op_leavesub;
2029 @ISA = ('PLXML::unop');
2031 sub key { 'leavesub' }
2032 sub desc { 'subroutine exit' }
2033 sub check { 'ck_null' }
2038 package PLXML::op_leavesublv;
2040 @ISA = ('PLXML::unop');
2042 sub key { 'leavesublv' }
2043 sub desc { 'lvalue subroutine return' }
2044 sub check { 'ck_null' }
2049 package PLXML::op_caller;
2051 @ISA = ('PLXML::baseop_unop');
2053 sub key { 'caller' }
2054 sub desc { 'caller' }
2055 sub check { 'ck_fun' }
2060 package PLXML::op_warn;
2062 @ISA = ('PLXML::listop');
2066 sub check { 'ck_fun' }
2067 sub flags { 'imst@' }
2071 package PLXML::op_die;
2073 @ISA = ('PLXML::listop');
2077 sub check { 'ck_die' }
2078 sub flags { 'dimst@' }
2082 package PLXML::op_reset;
2084 @ISA = ('PLXML::baseop_unop');
2087 sub desc { 'symbol reset' }
2088 sub check { 'ck_fun' }
2094 package PLXML::op_lineseq;
2096 @ISA = ('PLXML::listop');
2098 sub key { 'lineseq' }
2099 sub desc { 'line sequence' }
2100 sub check { 'ck_null' }
2105 package PLXML::op_nextstate;
2107 @ISA = ('PLXML::cop');
2109 sub key { 'nextstate' }
2110 sub desc { 'next statement' }
2111 sub check { 'ck_null' }
2116 package PLXML::op_dbstate;
2118 @ISA = ('PLXML::cop');
2120 sub key { 'dbstate' }
2121 sub desc { 'debug next statement' }
2122 sub check { 'ck_null' }
2127 package PLXML::op_unstack;
2129 @ISA = ('PLXML::baseop');
2131 sub key { 'unstack' }
2132 sub desc { 'iteration finalizer' }
2133 sub check { 'ck_null' }
2138 package PLXML::op_enter;
2140 @ISA = ('PLXML::baseop');
2143 sub desc { 'block entry' }
2144 sub check { 'ck_null' }
2149 package PLXML::op_leave;
2151 @ISA = ('PLXML::listop');
2154 sub desc { 'block exit' }
2155 sub check { 'ck_null' }
2160 package PLXML::op_scope;
2162 @ISA = ('PLXML::listop');
2165 sub desc { 'block' }
2166 sub check { 'ck_null' }
2171 package PLXML::op_enteriter;
2173 @ISA = ('PLXML::loop');
2175 sub key { 'enteriter' }
2176 sub desc { 'foreach loop entry' }
2177 sub check { 'ck_null' }
2182 package PLXML::op_iter;
2184 @ISA = ('PLXML::baseop');
2187 sub desc { 'foreach loop iterator' }
2188 sub check { 'ck_null' }
2193 package PLXML::op_enterloop;
2195 @ISA = ('PLXML::loop');
2197 sub key { 'enterloop' }
2198 sub desc { 'loop entry' }
2199 sub check { 'ck_null' }
2204 package PLXML::op_leaveloop;
2206 @ISA = ('PLXML::binop');
2208 sub key { 'leaveloop' }
2209 sub desc { 'loop exit' }
2210 sub check { 'ck_null' }
2215 package PLXML::op_return;
2217 @ISA = ('PLXML::listop');
2219 sub key { 'return' }
2220 sub desc { 'return' }
2221 sub check { 'ck_return' }
2226 package PLXML::op_last;
2228 @ISA = ('PLXML::loopexop');
2232 sub check { 'ck_null' }
2237 package PLXML::op_next;
2239 @ISA = ('PLXML::loopexop');
2243 sub check { 'ck_null' }
2248 package PLXML::op_redo;
2250 @ISA = ('PLXML::loopexop');
2254 sub check { 'ck_null' }
2259 package PLXML::op_dump;
2261 @ISA = ('PLXML::loopexop');
2265 sub check { 'ck_null' }
2270 package PLXML::op_goto;
2272 @ISA = ('PLXML::loopexop');
2276 sub check { 'ck_null' }
2281 package PLXML::op_exit;
2283 @ISA = ('PLXML::baseop_unop');
2287 sub check { 'ck_exit' }
2294 #nswitch numeric switch ck_null d
2295 #cswitch character switch ck_null d
2299 package PLXML::op_open;
2301 @ISA = ('PLXML::listop');
2305 sub check { 'ck_open' }
2306 sub flags { 'ismt@' }
2307 sub args { 'F S? L' }
2310 package PLXML::op_close;
2312 @ISA = ('PLXML::baseop_unop');
2315 sub desc { 'close' }
2316 sub check { 'ck_fun' }
2321 package PLXML::op_pipe_op;
2323 @ISA = ('PLXML::listop');
2325 sub key { 'pipe_op' }
2327 sub check { 'ck_fun' }
2333 package PLXML::op_fileno;
2335 @ISA = ('PLXML::baseop_unop');
2337 sub key { 'fileno' }
2338 sub desc { 'fileno' }
2339 sub check { 'ck_fun' }
2340 sub flags { 'ist%' }
2344 package PLXML::op_umask;
2346 @ISA = ('PLXML::baseop_unop');
2349 sub desc { 'umask' }
2350 sub check { 'ck_fun' }
2351 sub flags { 'ist%' }
2355 package PLXML::op_binmode;
2357 @ISA = ('PLXML::listop');
2359 sub key { 'binmode' }
2360 sub desc { 'binmode' }
2361 sub check { 'ck_fun' }
2367 package PLXML::op_tie;
2369 @ISA = ('PLXML::listop');
2373 sub check { 'ck_fun' }
2374 sub flags { 'idms@' }
2375 sub args { 'R S L' }
2378 package PLXML::op_untie;
2380 @ISA = ('PLXML::baseop_unop');
2383 sub desc { 'untie' }
2384 sub check { 'ck_fun' }
2389 package PLXML::op_tied;
2391 @ISA = ('PLXML::baseop_unop');
2395 sub check { 'ck_fun' }
2400 package PLXML::op_dbmopen;
2402 @ISA = ('PLXML::listop');
2404 sub key { 'dbmopen' }
2405 sub desc { 'dbmopen' }
2406 sub check { 'ck_fun' }
2408 sub args { 'H S S' }
2411 package PLXML::op_dbmclose;
2413 @ISA = ('PLXML::baseop_unop');
2415 sub key { 'dbmclose' }
2416 sub desc { 'dbmclose' }
2417 sub check { 'ck_fun' }
2423 package PLXML::op_sselect;
2425 @ISA = ('PLXML::listop');
2427 sub key { 'sselect' }
2428 sub desc { 'select system call' }
2429 sub check { 'ck_select' }
2431 sub args { 'S S S S' }
2434 package PLXML::op_select;
2436 @ISA = ('PLXML::listop');
2438 sub key { 'select' }
2439 sub desc { 'select' }
2440 sub check { 'ck_select' }
2446 package PLXML::op_getc;
2448 @ISA = ('PLXML::baseop_unop');
2452 sub check { 'ck_eof' }
2457 package PLXML::op_read;
2459 @ISA = ('PLXML::listop');
2463 sub check { 'ck_fun' }
2464 sub flags { 'imst@' }
2465 sub args { 'F R S S?' }
2468 package PLXML::op_enterwrite;
2470 @ISA = ('PLXML::baseop_unop');
2472 sub key { 'enterwrite' }
2473 sub desc { 'write' }
2474 sub check { 'ck_fun' }
2475 sub flags { 'dis%' }
2479 package PLXML::op_leavewrite;
2481 @ISA = ('PLXML::unop');
2483 sub key { 'leavewrite' }
2484 sub desc { 'write exit' }
2485 sub check { 'ck_null' }
2491 package PLXML::op_prtf;
2493 @ISA = ('PLXML::listop');
2496 sub desc { 'printf' }
2497 sub check { 'ck_listiob' }
2498 sub flags { 'ims@' }
2502 package PLXML::op_print;
2504 @ISA = ('PLXML::listop');
2507 sub desc { 'print' }
2508 sub check { 'ck_listiob' }
2509 sub flags { 'ims@' }
2514 package PLXML::op_sysopen;
2516 @ISA = ('PLXML::listop');
2518 sub key { 'sysopen' }
2519 sub desc { 'sysopen' }
2520 sub check { 'ck_fun' }
2522 sub args { 'F S S S?' }
2525 package PLXML::op_sysseek;
2527 @ISA = ('PLXML::listop');
2529 sub key { 'sysseek' }
2530 sub desc { 'sysseek' }
2531 sub check { 'ck_fun' }
2533 sub args { 'F S S' }
2536 package PLXML::op_sysread;
2538 @ISA = ('PLXML::listop');
2540 sub key { 'sysread' }
2541 sub desc { 'sysread' }
2542 sub check { 'ck_fun' }
2543 sub flags { 'imst@' }
2544 sub args { 'F R S S?' }
2547 package PLXML::op_syswrite;
2549 @ISA = ('PLXML::listop');
2551 sub key { 'syswrite' }
2552 sub desc { 'syswrite' }
2553 sub check { 'ck_fun' }
2554 sub flags { 'imst@' }
2555 sub args { 'F S S? S?' }
2559 package PLXML::op_send;
2561 @ISA = ('PLXML::listop');
2565 sub check { 'ck_fun' }
2566 sub flags { 'imst@' }
2567 sub args { 'Fs S S S?' }
2570 package PLXML::op_recv;
2572 @ISA = ('PLXML::listop');
2576 sub check { 'ck_fun' }
2577 sub flags { 'imst@' }
2578 sub args { 'Fs R S S' }
2582 package PLXML::op_eof;
2584 @ISA = ('PLXML::baseop_unop');
2588 sub check { 'ck_eof' }
2593 package PLXML::op_tell;
2595 @ISA = ('PLXML::baseop_unop');
2599 sub check { 'ck_fun' }
2604 package PLXML::op_seek;
2606 @ISA = ('PLXML::listop');
2610 sub check { 'ck_fun' }
2612 sub args { 'F S S' }
2615 # truncate really behaves as if it had both "S S" and "F S"
2616 package PLXML::op_truncate;
2618 @ISA = ('PLXML::listop');
2620 sub key { 'truncate' }
2621 sub desc { 'truncate' }
2622 sub check { 'ck_trunc' }
2628 package PLXML::op_fcntl;
2630 @ISA = ('PLXML::listop');
2633 sub desc { 'fcntl' }
2634 sub check { 'ck_fun' }
2636 sub args { 'F S S' }
2639 package PLXML::op_ioctl;
2641 @ISA = ('PLXML::listop');
2644 sub desc { 'ioctl' }
2645 sub check { 'ck_fun' }
2647 sub args { 'F S S' }
2650 package PLXML::op_flock;
2652 @ISA = ('PLXML::listop');
2655 sub desc { 'flock' }
2656 sub check { 'ck_fun' }
2657 sub flags { 'isT@' }
2664 package PLXML::op_socket;
2666 @ISA = ('PLXML::listop');
2668 sub key { 'socket' }
2669 sub desc { 'socket' }
2670 sub check { 'ck_fun' }
2672 sub args { 'Fs S S S' }
2675 package PLXML::op_sockpair;
2677 @ISA = ('PLXML::listop');
2679 sub key { 'sockpair' }
2680 sub desc { 'socketpair' }
2681 sub check { 'ck_fun' }
2683 sub args { 'Fs Fs S S S' }
2687 package PLXML::op_bind;
2689 @ISA = ('PLXML::listop');
2693 sub check { 'ck_fun' }
2698 package PLXML::op_connect;
2700 @ISA = ('PLXML::listop');
2702 sub key { 'connect' }
2703 sub desc { 'connect' }
2704 sub check { 'ck_fun' }
2709 package PLXML::op_listen;
2711 @ISA = ('PLXML::listop');
2713 sub key { 'listen' }
2714 sub desc { 'listen' }
2715 sub check { 'ck_fun' }
2720 package PLXML::op_accept;
2722 @ISA = ('PLXML::listop');
2724 sub key { 'accept' }
2725 sub desc { 'accept' }
2726 sub check { 'ck_fun' }
2727 sub flags { 'ist@' }
2728 sub args { 'Fs Fs' }
2731 package PLXML::op_shutdown;
2733 @ISA = ('PLXML::listop');
2735 sub key { 'shutdown' }
2736 sub desc { 'shutdown' }
2737 sub check { 'ck_fun' }
2738 sub flags { 'ist@' }
2743 package PLXML::op_gsockopt;
2745 @ISA = ('PLXML::listop');
2747 sub key { 'gsockopt' }
2748 sub desc { 'getsockopt' }
2749 sub check { 'ck_fun' }
2751 sub args { 'Fs S S' }
2754 package PLXML::op_ssockopt;
2756 @ISA = ('PLXML::listop');
2758 sub key { 'ssockopt' }
2759 sub desc { 'setsockopt' }
2760 sub check { 'ck_fun' }
2762 sub args { 'Fs S S S' }
2766 package PLXML::op_getsockname;
2768 @ISA = ('PLXML::baseop_unop');
2770 sub key { 'getsockname' }
2771 sub desc { 'getsockname' }
2772 sub check { 'ck_fun' }
2777 package PLXML::op_getpeername;
2779 @ISA = ('PLXML::baseop_unop');
2781 sub key { 'getpeername' }
2782 sub desc { 'getpeername' }
2783 sub check { 'ck_fun' }
2791 package PLXML::op_lstat;
2793 @ISA = ('PLXML::filestatop');
2796 sub desc { 'lstat' }
2797 sub check { 'ck_ftst' }
2802 package PLXML::op_stat;
2804 @ISA = ('PLXML::filestatop');
2808 sub check { 'ck_ftst' }
2813 package PLXML::op_ftrread;
2815 @ISA = ('PLXML::filestatop');
2817 sub key { 'ftrread' }
2819 sub check { 'ck_ftst' }
2820 sub flags { 'isu-' }
2824 package PLXML::op_ftrwrite;
2826 @ISA = ('PLXML::filestatop');
2828 sub key { 'ftrwrite' }
2830 sub check { 'ck_ftst' }
2831 sub flags { 'isu-' }
2835 package PLXML::op_ftrexec;
2837 @ISA = ('PLXML::filestatop');
2839 sub key { 'ftrexec' }
2841 sub check { 'ck_ftst' }
2842 sub flags { 'isu-' }
2846 package PLXML::op_fteread;
2848 @ISA = ('PLXML::filestatop');
2850 sub key { 'fteread' }
2852 sub check { 'ck_ftst' }
2853 sub flags { 'isu-' }
2857 package PLXML::op_ftewrite;
2859 @ISA = ('PLXML::filestatop');
2861 sub key { 'ftewrite' }
2863 sub check { 'ck_ftst' }
2864 sub flags { 'isu-' }
2868 package PLXML::op_fteexec;
2870 @ISA = ('PLXML::filestatop');
2872 sub key { 'fteexec' }
2874 sub check { 'ck_ftst' }
2875 sub flags { 'isu-' }
2879 package PLXML::op_ftis;
2881 @ISA = ('PLXML::filestatop');
2885 sub check { 'ck_ftst' }
2886 sub flags { 'isu-' }
2890 package PLXML::op_fteowned;
2892 @ISA = ('PLXML::filestatop');
2894 sub key { 'fteowned' }
2896 sub check { 'ck_ftst' }
2897 sub flags { 'isu-' }
2901 package PLXML::op_ftrowned;
2903 @ISA = ('PLXML::filestatop');
2905 sub key { 'ftrowned' }
2907 sub check { 'ck_ftst' }
2908 sub flags { 'isu-' }
2912 package PLXML::op_ftzero;
2914 @ISA = ('PLXML::filestatop');
2916 sub key { 'ftzero' }
2918 sub check { 'ck_ftst' }
2919 sub flags { 'isu-' }
2923 package PLXML::op_ftsize;
2925 @ISA = ('PLXML::filestatop');
2927 sub key { 'ftsize' }
2929 sub check { 'ck_ftst' }
2930 sub flags { 'istu-' }
2934 package PLXML::op_ftmtime;
2936 @ISA = ('PLXML::filestatop');
2938 sub key { 'ftmtime' }
2940 sub check { 'ck_ftst' }
2941 sub flags { 'stu-' }
2945 package PLXML::op_ftatime;
2947 @ISA = ('PLXML::filestatop');
2949 sub key { 'ftatime' }
2951 sub check { 'ck_ftst' }
2952 sub flags { 'stu-' }
2956 package PLXML::op_ftctime;
2958 @ISA = ('PLXML::filestatop');
2960 sub key { 'ftctime' }
2962 sub check { 'ck_ftst' }
2963 sub flags { 'stu-' }
2967 package PLXML::op_ftsock;
2969 @ISA = ('PLXML::filestatop');
2971 sub key { 'ftsock' }
2973 sub check { 'ck_ftst' }
2974 sub flags { 'isu-' }
2978 package PLXML::op_ftchr;
2980 @ISA = ('PLXML::filestatop');
2984 sub check { 'ck_ftst' }
2985 sub flags { 'isu-' }
2989 package PLXML::op_ftblk;
2991 @ISA = ('PLXML::filestatop');
2995 sub check { 'ck_ftst' }
2996 sub flags { 'isu-' }
3000 package PLXML::op_ftfile;
3002 @ISA = ('PLXML::filestatop');
3004 sub key { 'ftfile' }
3006 sub check { 'ck_ftst' }
3007 sub flags { 'isu-' }
3011 package PLXML::op_ftdir;
3013 @ISA = ('PLXML::filestatop');
3017 sub check { 'ck_ftst' }
3018 sub flags { 'isu-' }
3022 package PLXML::op_ftpipe;
3024 @ISA = ('PLXML::filestatop');
3026 sub key { 'ftpipe' }
3028 sub check { 'ck_ftst' }
3029 sub flags { 'isu-' }
3033 package PLXML::op_ftlink;
3035 @ISA = ('PLXML::filestatop');
3037 sub key { 'ftlink' }
3039 sub check { 'ck_ftst' }
3040 sub flags { 'isu-' }
3044 package PLXML::op_ftsuid;
3046 @ISA = ('PLXML::filestatop');
3048 sub key { 'ftsuid' }
3050 sub check { 'ck_ftst' }
3051 sub flags { 'isu-' }
3055 package PLXML::op_ftsgid;
3057 @ISA = ('PLXML::filestatop');
3059 sub key { 'ftsgid' }
3061 sub check { 'ck_ftst' }
3062 sub flags { 'isu-' }
3066 package PLXML::op_ftsvtx;
3068 @ISA = ('PLXML::filestatop');
3070 sub key { 'ftsvtx' }
3072 sub check { 'ck_ftst' }
3073 sub flags { 'isu-' }
3077 package PLXML::op_fttty;
3079 @ISA = ('PLXML::filestatop');
3083 sub check { 'ck_ftst' }
3088 package PLXML::op_fttext;
3090 @ISA = ('PLXML::filestatop');
3092 sub key { 'fttext' }
3094 sub check { 'ck_ftst' }
3095 sub flags { 'isu-' }
3099 package PLXML::op_ftbinary;
3101 @ISA = ('PLXML::filestatop');
3103 sub key { 'ftbinary' }
3105 sub check { 'ck_ftst' }
3106 sub flags { 'isu-' }
3113 package PLXML::op_chdir;
3115 @ISA = ('PLXML::baseop_unop');
3118 sub desc { 'chdir' }
3119 sub check { 'ck_fun' }
3120 sub flags { 'isT%' }
3124 package PLXML::op_chown;
3126 @ISA = ('PLXML::listop');
3129 sub desc { 'chown' }
3130 sub check { 'ck_fun' }
3131 sub flags { 'imsT@' }
3135 package PLXML::op_chroot;
3137 @ISA = ('PLXML::baseop_unop');
3139 sub key { 'chroot' }
3140 sub desc { 'chroot' }
3141 sub check { 'ck_fun' }
3142 sub flags { 'isTu%' }
3146 package PLXML::op_unlink;
3148 @ISA = ('PLXML::listop');
3150 sub key { 'unlink' }
3151 sub desc { 'unlink' }
3152 sub check { 'ck_fun' }
3153 sub flags { 'imsTu@' }
3157 package PLXML::op_chmod;
3159 @ISA = ('PLXML::listop');
3162 sub desc { 'chmod' }
3163 sub check { 'ck_fun' }
3164 sub flags { 'imsT@' }
3168 package PLXML::op_utime;
3170 @ISA = ('PLXML::listop');
3173 sub desc { 'utime' }
3174 sub check { 'ck_fun' }
3175 sub flags { 'imsT@' }
3179 package PLXML::op_rename;
3181 @ISA = ('PLXML::listop');
3183 sub key { 'rename' }
3184 sub desc { 'rename' }
3185 sub check { 'ck_fun' }
3186 sub flags { 'isT@' }
3190 package PLXML::op_link;
3192 @ISA = ('PLXML::listop');
3196 sub check { 'ck_fun' }
3197 sub flags { 'isT@' }
3201 package PLXML::op_symlink;
3203 @ISA = ('PLXML::listop');
3205 sub key { 'symlink' }
3206 sub desc { 'symlink' }
3207 sub check { 'ck_fun' }
3208 sub flags { 'isT@' }
3212 package PLXML::op_readlink;
3214 @ISA = ('PLXML::baseop_unop');
3216 sub key { 'readlink' }
3217 sub desc { 'readlink' }
3218 sub check { 'ck_fun' }
3219 sub flags { 'stu%' }
3223 package PLXML::op_mkdir;
3225 @ISA = ('PLXML::listop');
3228 sub desc { 'mkdir' }
3229 sub check { 'ck_fun' }
3230 sub flags { 'isT@' }
3234 package PLXML::op_rmdir;
3236 @ISA = ('PLXML::baseop_unop');
3239 sub desc { 'rmdir' }
3240 sub check { 'ck_fun' }
3241 sub flags { 'isTu%' }
3248 package PLXML::op_open_dir;
3250 @ISA = ('PLXML::listop');
3252 sub key { 'open_dir' }
3253 sub desc { 'opendir' }
3254 sub check { 'ck_fun' }
3259 package PLXML::op_readdir;
3261 @ISA = ('PLXML::baseop_unop');
3263 sub key { 'readdir' }
3264 sub desc { 'readdir' }
3265 sub check { 'ck_fun' }
3270 package PLXML::op_telldir;
3272 @ISA = ('PLXML::baseop_unop');
3274 sub key { 'telldir' }
3275 sub desc { 'telldir' }
3276 sub check { 'ck_fun' }
3281 package PLXML::op_seekdir;
3283 @ISA = ('PLXML::listop');
3285 sub key { 'seekdir' }
3286 sub desc { 'seekdir' }
3287 sub check { 'ck_fun' }
3292 package PLXML::op_rewinddir;
3294 @ISA = ('PLXML::baseop_unop');
3296 sub key { 'rewinddir' }
3297 sub desc { 'rewinddir' }
3298 sub check { 'ck_fun' }
3303 package PLXML::op_closedir;
3305 @ISA = ('PLXML::baseop_unop');
3307 sub key { 'closedir' }
3308 sub desc { 'closedir' }
3309 sub check { 'ck_fun' }
3317 package PLXML::op_fork;
3319 @ISA = ('PLXML::baseop');
3323 sub check { 'ck_null' }
3324 sub flags { 'ist0' }
3328 package PLXML::op_wait;
3330 @ISA = ('PLXML::baseop');
3334 sub check { 'ck_null' }
3335 sub flags { 'isT0' }
3339 package PLXML::op_waitpid;
3341 @ISA = ('PLXML::listop');
3343 sub key { 'waitpid' }
3344 sub desc { 'waitpid' }
3345 sub check { 'ck_fun' }
3346 sub flags { 'isT@' }
3350 package PLXML::op_system;
3352 @ISA = ('PLXML::listop');
3354 sub key { 'system' }
3355 sub desc { 'system' }
3356 sub check { 'ck_exec' }
3357 sub flags { 'imsT@' }
3361 package PLXML::op_exec;
3363 @ISA = ('PLXML::listop');
3367 sub check { 'ck_exec' }
3368 sub flags { 'dimsT@' }
3372 package PLXML::op_kill;
3374 @ISA = ('PLXML::listop');
3378 sub check { 'ck_fun' }
3379 sub flags { 'dimsT@' }
3383 package PLXML::op_getppid;
3385 @ISA = ('PLXML::baseop');
3387 sub key { 'getppid' }
3388 sub desc { 'getppid' }
3389 sub check { 'ck_null' }
3390 sub flags { 'isT0' }
3394 package PLXML::op_getpgrp;
3396 @ISA = ('PLXML::baseop_unop');
3398 sub key { 'getpgrp' }
3399 sub desc { 'getpgrp' }
3400 sub check { 'ck_fun' }
3401 sub flags { 'isT%' }
3405 package PLXML::op_setpgrp;
3407 @ISA = ('PLXML::listop');
3409 sub key { 'setpgrp' }
3410 sub desc { 'setpgrp' }
3411 sub check { 'ck_fun' }
3412 sub flags { 'isT@' }
3413 sub args { 'S? S?' }
3416 package PLXML::op_getpriority;
3418 @ISA = ('PLXML::listop');
3420 sub key { 'getpriority' }
3421 sub desc { 'getpriority' }
3422 sub check { 'ck_fun' }
3423 sub flags { 'isT@' }
3427 package PLXML::op_setpriority;
3429 @ISA = ('PLXML::listop');
3431 sub key { 'setpriority' }
3432 sub desc { 'setpriority' }
3433 sub check { 'ck_fun' }
3434 sub flags { 'isT@' }
3435 sub args { 'S S S' }
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.
3445 package PLXML::op_time;
3447 @ISA = ('PLXML::baseop');
3451 sub check { 'ck_null' }
3452 sub flags { 'isT0' }
3456 package PLXML::op_tms;
3458 @ISA = ('PLXML::baseop');
3461 sub desc { 'times' }
3462 sub check { 'ck_null' }
3467 package PLXML::op_localtime;
3469 @ISA = ('PLXML::baseop_unop');
3471 sub key { 'localtime' }
3472 sub desc { 'localtime' }
3473 sub check { 'ck_fun' }
3478 package PLXML::op_gmtime;
3480 @ISA = ('PLXML::baseop_unop');
3482 sub key { 'gmtime' }
3483 sub desc { 'gmtime' }
3484 sub check { 'ck_fun' }
3489 package PLXML::op_alarm;
3491 @ISA = ('PLXML::baseop_unop');
3494 sub desc { 'alarm' }
3495 sub check { 'ck_fun' }
3496 sub flags { 'istu%' }
3500 package PLXML::op_sleep;
3502 @ISA = ('PLXML::baseop_unop');
3505 sub desc { 'sleep' }
3506 sub check { 'ck_fun' }
3507 sub flags { 'isT%' }
3514 package PLXML::op_shmget;
3516 @ISA = ('PLXML::listop');
3518 sub key { 'shmget' }
3519 sub desc { 'shmget' }
3520 sub check { 'ck_fun' }
3521 sub flags { 'imst@' }
3522 sub args { 'S S S' }
3525 package PLXML::op_shmctl;
3527 @ISA = ('PLXML::listop');
3529 sub key { 'shmctl' }
3530 sub desc { 'shmctl' }
3531 sub check { 'ck_fun' }
3532 sub flags { 'imst@' }
3533 sub args { 'S S S' }
3536 package PLXML::op_shmread;
3538 @ISA = ('PLXML::listop');
3540 sub key { 'shmread' }
3541 sub desc { 'shmread' }
3542 sub check { 'ck_fun' }
3543 sub flags { 'imst@' }
3544 sub args { 'S S S S' }
3547 package PLXML::op_shmwrite;
3549 @ISA = ('PLXML::listop');
3551 sub key { 'shmwrite' }
3552 sub desc { 'shmwrite' }
3553 sub check { 'ck_fun' }
3554 sub flags { 'imst@' }
3555 sub args { 'S S S S' }
3561 package PLXML::op_msgget;
3563 @ISA = ('PLXML::listop');
3565 sub key { 'msgget' }
3566 sub desc { 'msgget' }
3567 sub check { 'ck_fun' }
3568 sub flags { 'imst@' }
3572 package PLXML::op_msgctl;
3574 @ISA = ('PLXML::listop');
3576 sub key { 'msgctl' }
3577 sub desc { 'msgctl' }
3578 sub check { 'ck_fun' }
3579 sub flags { 'imst@' }
3580 sub args { 'S S S' }
3583 package PLXML::op_msgsnd;
3585 @ISA = ('PLXML::listop');
3587 sub key { 'msgsnd' }
3588 sub desc { 'msgsnd' }
3589 sub check { 'ck_fun' }
3590 sub flags { 'imst@' }
3591 sub args { 'S S S' }
3594 package PLXML::op_msgrcv;
3596 @ISA = ('PLXML::listop');
3598 sub key { 'msgrcv' }
3599 sub desc { 'msgrcv' }
3600 sub check { 'ck_fun' }
3601 sub flags { 'imst@' }
3602 sub args { 'S S S S S' }
3608 package PLXML::op_semget;
3610 @ISA = ('PLXML::listop');
3612 sub key { 'semget' }
3613 sub desc { 'semget' }
3614 sub check { 'ck_fun' }
3615 sub flags { 'imst@' }
3616 sub args { 'S S S' }
3619 package PLXML::op_semctl;
3621 @ISA = ('PLXML::listop');
3623 sub key { 'semctl' }
3624 sub desc { 'semctl' }
3625 sub check { 'ck_fun' }
3626 sub flags { 'imst@' }
3627 sub args { 'S S S S' }
3630 package PLXML::op_semop;
3632 @ISA = ('PLXML::listop');
3635 sub desc { 'semop' }
3636 sub check { 'ck_fun' }
3637 sub flags { 'imst@' }
3644 package PLXML::op_require;
3646 @ISA = ('PLXML::baseop_unop');
3648 sub key { 'require' }
3649 sub desc { 'require' }
3650 sub check { 'ck_require' }
3655 package PLXML::op_dofile;
3657 @ISA = ('PLXML::unop');
3659 sub key { 'dofile' }
3660 sub desc { 'do "file"' }
3661 sub check { 'ck_fun' }
3666 package PLXML::op_entereval;
3668 @ISA = ('PLXML::baseop_unop');
3670 sub key { 'entereval' }
3671 sub desc { 'eval "string"' }
3672 sub check { 'ck_eval' }
3677 package PLXML::op_leaveeval;
3679 @ISA = ('PLXML::unop');
3681 sub key { 'leaveeval' }
3682 sub desc { 'eval "string" exit' }
3683 sub check { 'ck_null' }
3688 #evalonce eval constant string ck_null d1 S
3689 package PLXML::op_entertry;
3691 @ISA = ('PLXML::logop');
3693 sub key { 'entertry' }
3694 sub desc { 'eval {block}' }
3695 sub check { 'ck_null' }
3700 package PLXML::op_leavetry;
3702 @ISA = ('PLXML::listop');
3704 sub key { 'leavetry' }
3705 sub desc { 'eval {block} exit' }
3706 sub check { 'ck_null' }
3714 package PLXML::op_ghbyname;
3716 @ISA = ('PLXML::baseop_unop');
3718 sub key { 'ghbyname' }
3719 sub desc { 'gethostbyname' }
3720 sub check { 'ck_fun' }
3725 package PLXML::op_ghbyaddr;
3727 @ISA = ('PLXML::listop');
3729 sub key { 'ghbyaddr' }
3730 sub desc { 'gethostbyaddr' }
3731 sub check { 'ck_fun' }
3736 package PLXML::op_ghostent;
3738 @ISA = ('PLXML::baseop');
3740 sub key { 'ghostent' }
3741 sub desc { 'gethostent' }
3742 sub check { 'ck_null' }
3747 package PLXML::op_gnbyname;
3749 @ISA = ('PLXML::baseop_unop');
3751 sub key { 'gnbyname' }
3752 sub desc { 'getnetbyname' }
3753 sub check { 'ck_fun' }
3758 package PLXML::op_gnbyaddr;
3760 @ISA = ('PLXML::listop');
3762 sub key { 'gnbyaddr' }
3763 sub desc { 'getnetbyaddr' }
3764 sub check { 'ck_fun' }
3769 package PLXML::op_gnetent;
3771 @ISA = ('PLXML::baseop');
3773 sub key { 'gnetent' }
3774 sub desc { 'getnetent' }
3775 sub check { 'ck_null' }
3780 package PLXML::op_gpbyname;
3782 @ISA = ('PLXML::baseop_unop');
3784 sub key { 'gpbyname' }
3785 sub desc { 'getprotobyname' }
3786 sub check { 'ck_fun' }
3791 package PLXML::op_gpbynumber;
3793 @ISA = ('PLXML::listop');
3795 sub key { 'gpbynumber' }
3796 sub desc { 'getprotobynumber' }
3797 sub check { 'ck_fun' }
3802 package PLXML::op_gprotoent;
3804 @ISA = ('PLXML::baseop');
3806 sub key { 'gprotoent' }
3807 sub desc { 'getprotoent' }
3808 sub check { 'ck_null' }
3813 package PLXML::op_gsbyname;
3815 @ISA = ('PLXML::listop');
3817 sub key { 'gsbyname' }
3818 sub desc { 'getservbyname' }
3819 sub check { 'ck_fun' }
3824 package PLXML::op_gsbyport;
3826 @ISA = ('PLXML::listop');
3828 sub key { 'gsbyport' }
3829 sub desc { 'getservbyport' }
3830 sub check { 'ck_fun' }
3835 package PLXML::op_gservent;
3837 @ISA = ('PLXML::baseop');
3839 sub key { 'gservent' }
3840 sub desc { 'getservent' }
3841 sub check { 'ck_null' }
3846 package PLXML::op_shostent;
3848 @ISA = ('PLXML::baseop_unop');
3850 sub key { 'shostent' }
3851 sub desc { 'sethostent' }
3852 sub check { 'ck_fun' }
3857 package PLXML::op_snetent;
3859 @ISA = ('PLXML::baseop_unop');
3861 sub key { 'snetent' }
3862 sub desc { 'setnetent' }
3863 sub check { 'ck_fun' }
3868 package PLXML::op_sprotoent;
3870 @ISA = ('PLXML::baseop_unop');
3872 sub key { 'sprotoent' }
3873 sub desc { 'setprotoent' }
3874 sub check { 'ck_fun' }
3879 package PLXML::op_sservent;
3881 @ISA = ('PLXML::baseop_unop');
3883 sub key { 'sservent' }
3884 sub desc { 'setservent' }
3885 sub check { 'ck_fun' }
3890 package PLXML::op_ehostent;
3892 @ISA = ('PLXML::baseop');
3894 sub key { 'ehostent' }
3895 sub desc { 'endhostent' }
3896 sub check { 'ck_null' }
3901 package PLXML::op_enetent;
3903 @ISA = ('PLXML::baseop');
3905 sub key { 'enetent' }
3906 sub desc { 'endnetent' }
3907 sub check { 'ck_null' }
3912 package PLXML::op_eprotoent;
3914 @ISA = ('PLXML::baseop');
3916 sub key { 'eprotoent' }
3917 sub desc { 'endprotoent' }
3918 sub check { 'ck_null' }
3923 package PLXML::op_eservent;
3925 @ISA = ('PLXML::baseop');
3927 sub key { 'eservent' }
3928 sub desc { 'endservent' }
3929 sub check { 'ck_null' }
3934 package PLXML::op_gpwnam;
3936 @ISA = ('PLXML::baseop_unop');
3938 sub key { 'gpwnam' }
3939 sub desc { 'getpwnam' }
3940 sub check { 'ck_fun' }
3945 package PLXML::op_gpwuid;
3947 @ISA = ('PLXML::baseop_unop');
3949 sub key { 'gpwuid' }
3950 sub desc { 'getpwuid' }
3951 sub check { 'ck_fun' }
3956 package PLXML::op_gpwent;
3958 @ISA = ('PLXML::baseop');
3960 sub key { 'gpwent' }
3961 sub desc { 'getpwent' }
3962 sub check { 'ck_null' }
3967 package PLXML::op_spwent;
3969 @ISA = ('PLXML::baseop');
3971 sub key { 'spwent' }
3972 sub desc { 'setpwent' }
3973 sub check { 'ck_null' }
3978 package PLXML::op_epwent;
3980 @ISA = ('PLXML::baseop');
3982 sub key { 'epwent' }
3983 sub desc { 'endpwent' }
3984 sub check { 'ck_null' }
3989 package PLXML::op_ggrnam;
3991 @ISA = ('PLXML::baseop_unop');
3993 sub key { 'ggrnam' }
3994 sub desc { 'getgrnam' }
3995 sub check { 'ck_fun' }
4000 package PLXML::op_ggrgid;
4002 @ISA = ('PLXML::baseop_unop');
4004 sub key { 'ggrgid' }
4005 sub desc { 'getgrgid' }
4006 sub check { 'ck_fun' }
4011 package PLXML::op_ggrent;
4013 @ISA = ('PLXML::baseop');
4015 sub key { 'ggrent' }
4016 sub desc { 'getgrent' }
4017 sub check { 'ck_null' }
4022 package PLXML::op_sgrent;
4024 @ISA = ('PLXML::baseop');
4026 sub key { 'sgrent' }
4027 sub desc { 'setgrent' }
4028 sub check { 'ck_null' }
4033 package PLXML::op_egrent;
4035 @ISA = ('PLXML::baseop');
4037 sub key { 'egrent' }
4038 sub desc { 'endgrent' }
4039 sub check { 'ck_null' }
4044 package PLXML::op_getlogin;
4046 @ISA = ('PLXML::baseop');
4048 sub key { 'getlogin' }
4049 sub desc { 'getlogin' }
4050 sub check { 'ck_null' }
4058 package PLXML::op_syscall;
4060 @ISA = ('PLXML::listop');
4062 sub key { 'syscall' }
4063 sub desc { 'syscall' }
4064 sub check { 'ck_fun' }
4065 sub flags { 'imst@' }
4070 # For multi-threading
4071 package PLXML::op_lock;
4073 @ISA = ('PLXML::baseop_unop');
4077 sub check { 'ck_rfun' }
4082 package PLXML::op_threadsv;
4084 @ISA = ('PLXML::baseop');
4086 sub key { 'threadsv' }
4087 sub desc { 'per-thread value' }
4088 sub check { 'ck_null' }
4095 package PLXML::op_setstate;
4097 @ISA = ('PLXML::cop');
4099 sub key { 'setstate' }
4100 sub desc { 'set statement info' }
4101 sub check { 'ck_null' }
4106 package PLXML::op_method_named;
4108 @ISA = ('PLXML::padop_svop');
4110 sub key { 'method_named' }
4111 sub desc { 'method with known name' }
4112 sub check { 'ck_null' }
4118 package PLXML::op_dor;
4120 @ISA = ('PLXML::logop');
4123 sub desc { 'defined or (//)' }
4124 sub check { 'ck_null' }
4129 package PLXML::op_dorassign;
4131 @ISA = ('PLXML::logop');
4133 sub key { 'dorassign' }
4134 sub desc { 'defined or assignment (//=)' }
4135 sub check { 'ck_null' }
4141 # Add new ops before this, the custom operator.
4143 package PLXML::op_custom;
4145 @ISA = ('PLXML::baseop');
4147 sub key { 'custom' }
4148 sub desc { 'unknown custom operator' }
4149 sub check { 'ck_null' }