9 print "walk(" . join(',', @_) . ")\n";
11 for my $key (sort keys %$self) {
12 print "\t$key = <$$self{$key}>\n";
14 foreach my $kid (@{$$self{Kids}}) {
19 package PLXML::Characters;
24 package PLXML::madprops;
28 package PLXML::mad_op;
32 package PLXML::mad_pv;
36 package PLXML::baseop;
40 package PLXML::baseop_unop;
52 package PLXML::filestatop;
54 our @ISA = ('PLXML::baseop_unop');
56 package PLXML::listop;
68 package PLXML::loopexop;
76 package PLXML::padop_svop;
84 package PLXML::pvop_svop;
93 # New ops always go at the end, just before 'custom'
95 # A recapitulation of the format of this file:
96 # The file consists of five columns: the name of the op, an English
97 # description, the name of the "check" routine used to optimize this
98 # operation, some flags, and a description of the operands.
100 # The flags consist of options followed by a mandatory op class signifier
103 # baseop - 0 unop - 1 binop - 2
104 # logop - | listop - @ pmop - /
105 # padop/svop - $ padop - # (unused) loop - {
106 # baseop/unop - % loopexop - } filestatop - -
107 # pvop/svop - " cop - ;
110 # needs stack mark - m
111 # needs constant folding - f
112 # produces a scalar - s
113 # produces an integer - i
115 # target can be in a pad - T
116 # has a corresponding integer version - I
117 # has side effects - d
118 # uses $_ if no argument given - u
120 # Values for the operands are:
121 # scalar - S list - L array - A
122 # hash - H sub (CV) - C file - F
123 # socket - Fs filetest - F- reference - R
124 # "?" denotes an optional operand.
128 package PLXML::op_null;
130 our @ISA = ('PLXML::baseop');
133 sub desc { 'null operation' }
134 sub check { 'ck_null' }
139 package PLXML::op_stub;
141 our @ISA = ('PLXML::baseop');
145 sub check { 'ck_null' }
150 package PLXML::op_scalar;
152 our @ISA = ('PLXML::baseop_unop');
155 sub desc { 'scalar' }
156 sub check { 'ck_fun' }
164 package PLXML::op_pushmark;
166 our @ISA = ('PLXML::baseop');
168 sub key { 'pushmark' }
169 sub desc { 'pushmark' }
170 sub check { 'ck_null' }
175 package PLXML::op_wantarray;
177 our @ISA = ('PLXML::baseop');
179 sub key { 'wantarray' }
180 sub desc { 'wantarray' }
181 sub check { 'ck_null' }
187 package PLXML::op_const;
189 our @ISA = ('PLXML::padop_svop');
192 sub desc { 'constant item' }
193 sub check { 'ck_svconst' }
199 package PLXML::op_gvsv;
201 our @ISA = ('PLXML::padop_svop');
204 sub desc { 'scalar variable' }
205 sub check { 'ck_null' }
210 package PLXML::op_gv;
212 our @ISA = ('PLXML::padop_svop');
215 sub desc { 'glob value' }
216 sub check { 'ck_null' }
221 package PLXML::op_gelem;
223 our @ISA = ('PLXML::binop');
226 sub desc { 'glob elem' }
227 sub check { 'ck_null' }
232 package PLXML::op_padsv;
234 our @ISA = ('PLXML::baseop');
237 sub desc { 'private variable' }
238 sub check { 'ck_null' }
243 package PLXML::op_padav;
245 our @ISA = ('PLXML::baseop');
248 sub desc { 'private array' }
249 sub check { 'ck_null' }
254 package PLXML::op_padhv;
256 our @ISA = ('PLXML::baseop');
259 sub desc { 'private hash' }
260 sub check { 'ck_null' }
265 package PLXML::op_padany;
267 our @ISA = ('PLXML::baseop');
270 sub desc { 'private value' }
271 sub check { 'ck_null' }
277 package PLXML::op_pushre;
279 our @ISA = ('PLXML::pmop');
282 sub desc { 'push regexp' }
283 sub check { 'ck_null' }
289 # References and stuff.
291 package PLXML::op_rv2gv;
293 our @ISA = ('PLXML::unop');
296 sub desc { 'ref-to-glob cast' }
297 sub check { 'ck_rvconst' }
302 package PLXML::op_rv2sv;
304 our @ISA = ('PLXML::unop');
307 sub desc { 'scalar dereference' }
308 sub check { 'ck_rvconst' }
313 package PLXML::op_av2arylen;
315 our @ISA = ('PLXML::unop');
317 sub key { 'av2arylen' }
318 sub desc { 'array length' }
319 sub check { 'ck_null' }
324 package PLXML::op_rv2cv;
326 our @ISA = ('PLXML::unop');
329 sub desc { 'subroutine dereference' }
330 sub check { 'ck_rvconst' }
335 package PLXML::op_anoncode;
337 our @ISA = ('PLXML::padop_svop');
339 sub key { 'anoncode' }
340 sub desc { 'anonymous subroutine' }
341 sub check { 'ck_anoncode' }
346 package PLXML::op_prototype;
348 our @ISA = ('PLXML::baseop_unop');
350 sub key { 'prototype' }
351 sub desc { 'subroutine prototype' }
352 sub check { 'ck_null' }
357 package PLXML::op_refgen;
359 our @ISA = ('PLXML::unop');
362 sub desc { 'reference constructor' }
363 sub check { 'ck_spair' }
368 package PLXML::op_srefgen;
370 our @ISA = ('PLXML::unop');
372 sub key { 'srefgen' }
373 sub desc { 'single ref constructor' }
374 sub check { 'ck_null' }
379 package PLXML::op_ref;
381 our @ISA = ('PLXML::baseop_unop');
384 sub desc { 'reference-type operator' }
385 sub check { 'ck_fun' }
390 package PLXML::op_bless;
392 our @ISA = ('PLXML::listop');
396 sub check { 'ck_fun' }
404 package PLXML::op_backtick;
406 our @ISA = ('PLXML::baseop_unop');
408 sub key { 'backtick' }
409 sub desc { 'quoted execution (``, qx)' }
410 sub check { 'ck_open' }
415 # glob defaults its first arg to $_
416 package PLXML::op_glob;
418 our @ISA = ('PLXML::listop');
422 sub check { 'ck_glob' }
427 package PLXML::op_readline;
429 our @ISA = ('PLXML::baseop_unop');
431 sub key { 'readline' }
432 sub desc { '<HANDLE>' }
433 sub check { 'ck_null' }
438 package PLXML::op_rcatline;
440 our @ISA = ('PLXML::padop_svop');
442 sub key { 'rcatline' }
443 sub desc { 'append I/O operator' }
444 sub check { 'ck_null' }
450 # Bindable operators.
452 package PLXML::op_regcmaybe;
454 our @ISA = ('PLXML::unop');
456 sub key { 'regcmaybe' }
457 sub desc { 'regexp internal guard' }
458 sub check { 'ck_fun' }
463 package PLXML::op_regcreset;
465 our @ISA = ('PLXML::unop');
467 sub key { 'regcreset' }
468 sub desc { 'regexp internal reset' }
469 sub check { 'ck_fun' }
474 package PLXML::op_regcomp;
476 our @ISA = ('PLXML::logop');
478 sub key { 'regcomp' }
479 sub desc { 'regexp compilation' }
480 sub check { 'ck_null' }
485 package PLXML::op_match;
487 our @ISA = ('PLXML::pmop');
490 sub desc { 'pattern match (m//)' }
491 sub check { 'ck_match' }
496 package PLXML::op_qr;
498 our @ISA = ('PLXML::pmop');
501 sub desc { 'pattern quote (qr//)' }
502 sub check { 'ck_match' }
507 package PLXML::op_subst;
509 our @ISA = ('PLXML::pmop');
512 sub desc { 'substitution (s///)' }
513 sub check { 'ck_match' }
518 package PLXML::op_substcont;
520 our @ISA = ('PLXML::logop');
522 sub key { 'substcont' }
523 sub desc { 'substitution iterator' }
524 sub check { 'ck_null' }
529 package PLXML::op_trans;
531 our @ISA = ('PLXML::pvop_svop');
534 sub desc { 'transliteration (tr///)' }
535 sub check { 'ck_match' }
542 # sassign is special-cased for op class
544 package PLXML::op_sassign;
546 our @ISA = ('PLXML::baseop');
548 sub key { 'sassign' }
549 sub desc { 'scalar assignment' }
550 sub check { 'ck_sassign' }
555 package PLXML::op_aassign;
557 our @ISA = ('PLXML::binop');
559 sub key { 'aassign' }
560 sub desc { 'list assignment' }
561 sub check { 'ck_null' }
567 package PLXML::op_chop;
569 our @ISA = ('PLXML::baseop_unop');
573 sub check { 'ck_spair' }
578 package PLXML::op_schop;
580 our @ISA = ('PLXML::baseop_unop');
583 sub desc { 'scalar chop' }
584 sub check { 'ck_null' }
589 package PLXML::op_chomp;
591 our @ISA = ('PLXML::baseop_unop');
595 sub check { 'ck_spair' }
600 package PLXML::op_schomp;
602 our @ISA = ('PLXML::baseop_unop');
605 sub desc { 'scalar chomp' }
606 sub check { 'ck_null' }
611 package PLXML::op_defined;
613 our @ISA = ('PLXML::baseop_unop');
615 sub key { 'defined' }
616 sub desc { 'defined operator' }
617 sub check { 'ck_defined' }
622 package PLXML::op_undef;
624 our @ISA = ('PLXML::baseop_unop');
627 sub desc { 'undef operator' }
628 sub check { 'ck_lfun' }
633 package PLXML::op_study;
635 our @ISA = ('PLXML::baseop_unop');
639 sub check { 'ck_fun' }
644 package PLXML::op_pos;
646 our @ISA = ('PLXML::baseop_unop');
649 sub desc { 'match position' }
650 sub check { 'ck_lfun' }
656 package PLXML::op_preinc;
658 our @ISA = ('PLXML::unop');
661 sub desc { 'preincrement (++)' }
662 sub check { 'ck_lfun' }
667 package PLXML::op_i_preinc;
669 our @ISA = ('PLXML::unop');
671 sub key { 'i_preinc' }
672 sub desc { 'integer preincrement (++)' }
673 sub check { 'ck_lfun' }
678 package PLXML::op_predec;
680 our @ISA = ('PLXML::unop');
683 sub desc { 'predecrement (--)' }
684 sub check { 'ck_lfun' }
689 package PLXML::op_i_predec;
691 our @ISA = ('PLXML::unop');
693 sub key { 'i_predec' }
694 sub desc { 'integer predecrement (--)' }
695 sub check { 'ck_lfun' }
700 package PLXML::op_postinc;
702 our @ISA = ('PLXML::unop');
704 sub key { 'postinc' }
705 sub desc { 'postincrement (++)' }
706 sub check { 'ck_lfun' }
707 sub flags { 'dIst1' }
711 package PLXML::op_i_postinc;
713 our @ISA = ('PLXML::unop');
715 sub key { 'i_postinc' }
716 sub desc { 'integer postincrement (++)' }
717 sub check { 'ck_lfun' }
718 sub flags { 'disT1' }
722 package PLXML::op_postdec;
724 our @ISA = ('PLXML::unop');
726 sub key { 'postdec' }
727 sub desc { 'postdecrement (--)' }
728 sub check { 'ck_lfun' }
729 sub flags { 'dIst1' }
733 package PLXML::op_i_postdec;
735 our @ISA = ('PLXML::unop');
737 sub key { 'i_postdec' }
738 sub desc { 'integer postdecrement (--)' }
739 sub check { 'ck_lfun' }
740 sub flags { 'disT1' }
745 # Ordinary operators.
747 package PLXML::op_pow;
749 our @ISA = ('PLXML::binop');
752 sub desc { 'exponentiation (**)' }
753 sub check { 'ck_null' }
759 package PLXML::op_multiply;
761 our @ISA = ('PLXML::binop');
763 sub key { 'multiply' }
764 sub desc { 'multiplication (*)' }
765 sub check { 'ck_null' }
766 sub flags { 'IfsT2' }
770 package PLXML::op_i_multiply;
772 our @ISA = ('PLXML::binop');
774 sub key { 'i_multiply' }
775 sub desc { 'integer multiplication (*)' }
776 sub check { 'ck_null' }
777 sub flags { 'ifsT2' }
781 package PLXML::op_divide;
783 our @ISA = ('PLXML::binop');
786 sub desc { 'division (/)' }
787 sub check { 'ck_null' }
788 sub flags { 'IfsT2' }
792 package PLXML::op_i_divide;
794 our @ISA = ('PLXML::binop');
796 sub key { 'i_divide' }
797 sub desc { 'integer division (/)' }
798 sub check { 'ck_null' }
799 sub flags { 'ifsT2' }
803 package PLXML::op_modulo;
805 our @ISA = ('PLXML::binop');
808 sub desc { 'modulus (%)' }
809 sub check { 'ck_null' }
810 sub flags { 'IifsT2' }
814 package PLXML::op_i_modulo;
816 our @ISA = ('PLXML::binop');
818 sub key { 'i_modulo' }
819 sub desc { 'integer modulus (%)' }
820 sub check { 'ck_null' }
821 sub flags { 'ifsT2' }
825 package PLXML::op_repeat;
827 our @ISA = ('PLXML::binop');
830 sub desc { 'repeat (x)' }
831 sub check { 'ck_repeat' }
837 package PLXML::op_add;
839 our @ISA = ('PLXML::binop');
842 sub desc { 'addition (+)' }
843 sub check { 'ck_null' }
844 sub flags { 'IfsT2' }
848 package PLXML::op_i_add;
850 our @ISA = ('PLXML::binop');
853 sub desc { 'integer addition (+)' }
854 sub check { 'ck_null' }
855 sub flags { 'ifsT2' }
859 package PLXML::op_subtract;
861 our @ISA = ('PLXML::binop');
863 sub key { 'subtract' }
864 sub desc { 'subtraction (-)' }
865 sub check { 'ck_null' }
866 sub flags { 'IfsT2' }
870 package PLXML::op_i_subtract;
872 our @ISA = ('PLXML::binop');
874 sub key { 'i_subtract' }
875 sub desc { 'integer subtraction (-)' }
876 sub check { 'ck_null' }
877 sub flags { 'ifsT2' }
881 package PLXML::op_concat;
883 our @ISA = ('PLXML::binop');
886 sub desc { 'concatenation (.) or string' }
887 sub check { 'ck_concat' }
892 package PLXML::op_stringify;
894 our @ISA = ('PLXML::listop');
896 sub key { 'stringify' }
897 sub desc { 'string' }
898 sub check { 'ck_fun' }
904 package PLXML::op_left_shift;
906 our @ISA = ('PLXML::binop');
908 sub key { 'left_shift' }
909 sub desc { 'left bitshift (<<)' }
910 sub check { 'ck_bitop' }
915 package PLXML::op_right_shift;
917 our @ISA = ('PLXML::binop');
919 sub key { 'right_shift' }
920 sub desc { 'right bitshift (>>)' }
921 sub check { 'ck_bitop' }
927 package PLXML::op_lt;
929 our @ISA = ('PLXML::binop');
932 sub desc { 'numeric lt (<)' }
933 sub check { 'ck_null' }
934 sub flags { 'Iifs2' }
938 package PLXML::op_i_lt;
940 our @ISA = ('PLXML::binop');
943 sub desc { 'integer lt (<)' }
944 sub check { 'ck_null' }
949 package PLXML::op_gt;
951 our @ISA = ('PLXML::binop');
954 sub desc { 'numeric gt (>)' }
955 sub check { 'ck_null' }
956 sub flags { 'Iifs2' }
960 package PLXML::op_i_gt;
962 our @ISA = ('PLXML::binop');
965 sub desc { 'integer gt (>)' }
966 sub check { 'ck_null' }
971 package PLXML::op_le;
973 our @ISA = ('PLXML::binop');
976 sub desc { 'numeric le (<=)' }
977 sub check { 'ck_null' }
978 sub flags { 'Iifs2' }
982 package PLXML::op_i_le;
984 our @ISA = ('PLXML::binop');
987 sub desc { 'integer le (<=)' }
988 sub check { 'ck_null' }
993 package PLXML::op_ge;
995 our @ISA = ('PLXML::binop');
998 sub desc { 'numeric ge (>=)' }
999 sub check { 'ck_null' }
1000 sub flags { 'Iifs2' }
1004 package PLXML::op_i_ge;
1006 our @ISA = ('PLXML::binop');
1009 sub desc { 'integer ge (>=)' }
1010 sub check { 'ck_null' }
1011 sub flags { 'ifs2' }
1015 package PLXML::op_eq;
1017 our @ISA = ('PLXML::binop');
1020 sub desc { 'numeric eq (==)' }
1021 sub check { 'ck_null' }
1022 sub flags { 'Iifs2' }
1026 package PLXML::op_i_eq;
1028 our @ISA = ('PLXML::binop');
1031 sub desc { 'integer eq (==)' }
1032 sub check { 'ck_null' }
1033 sub flags { 'ifs2' }
1037 package PLXML::op_ne;
1039 our @ISA = ('PLXML::binop');
1042 sub desc { 'numeric ne (!=)' }
1043 sub check { 'ck_null' }
1044 sub flags { 'Iifs2' }
1048 package PLXML::op_i_ne;
1050 our @ISA = ('PLXML::binop');
1053 sub desc { 'integer ne (!=)' }
1054 sub check { 'ck_null' }
1055 sub flags { 'ifs2' }
1059 package PLXML::op_ncmp;
1061 our @ISA = ('PLXML::binop');
1064 sub desc { 'numeric comparison (<=>)' }
1065 sub check { 'ck_null' }
1066 sub flags { 'Iifst2' }
1070 package PLXML::op_i_ncmp;
1072 our @ISA = ('PLXML::binop');
1074 sub key { 'i_ncmp' }
1075 sub desc { 'integer comparison (<=>)' }
1076 sub check { 'ck_null' }
1077 sub flags { 'ifst2' }
1082 package PLXML::op_slt;
1084 our @ISA = ('PLXML::binop');
1087 sub desc { 'string lt' }
1088 sub check { 'ck_null' }
1089 sub flags { 'ifs2' }
1093 package PLXML::op_sgt;
1095 our @ISA = ('PLXML::binop');
1098 sub desc { 'string gt' }
1099 sub check { 'ck_null' }
1100 sub flags { 'ifs2' }
1104 package PLXML::op_sle;
1106 our @ISA = ('PLXML::binop');
1109 sub desc { 'string le' }
1110 sub check { 'ck_null' }
1111 sub flags { 'ifs2' }
1115 package PLXML::op_sge;
1117 our @ISA = ('PLXML::binop');
1120 sub desc { 'string ge' }
1121 sub check { 'ck_null' }
1122 sub flags { 'ifs2' }
1126 package PLXML::op_seq;
1128 our @ISA = ('PLXML::binop');
1131 sub desc { 'string eq' }
1132 sub check { 'ck_null' }
1133 sub flags { 'ifs2' }
1137 package PLXML::op_sne;
1139 our @ISA = ('PLXML::binop');
1142 sub desc { 'string ne' }
1143 sub check { 'ck_null' }
1144 sub flags { 'ifs2' }
1148 package PLXML::op_scmp;
1150 our @ISA = ('PLXML::binop');
1153 sub desc { 'string comparison (cmp)' }
1154 sub check { 'ck_null' }
1155 sub flags { 'ifst2' }
1160 package PLXML::op_bit_and;
1162 our @ISA = ('PLXML::binop');
1164 sub key { 'bit_and' }
1165 sub desc { 'bitwise and (&)' }
1166 sub check { 'ck_bitop' }
1167 sub flags { 'fst2' }
1171 package PLXML::op_bit_xor;
1173 our @ISA = ('PLXML::binop');
1175 sub key { 'bit_xor' }
1176 sub desc { 'bitwise xor (^)' }
1177 sub check { 'ck_bitop' }
1178 sub flags { 'fst2' }
1182 package PLXML::op_bit_or;
1184 our @ISA = ('PLXML::binop');
1186 sub key { 'bit_or' }
1187 sub desc { 'bitwise or (|)' }
1188 sub check { 'ck_bitop' }
1189 sub flags { 'fst2' }
1194 package PLXML::op_negate;
1196 our @ISA = ('PLXML::unop');
1198 sub key { 'negate' }
1199 sub desc { 'negation (-)' }
1200 sub check { 'ck_null' }
1201 sub flags { 'Ifst1' }
1205 package PLXML::op_i_negate;
1207 our @ISA = ('PLXML::unop');
1209 sub key { 'i_negate' }
1210 sub desc { 'integer negation (-)' }
1211 sub check { 'ck_null' }
1212 sub flags { 'ifsT1' }
1216 package PLXML::op_not;
1218 our @ISA = ('PLXML::unop');
1222 sub check { 'ck_null' }
1223 sub flags { 'ifs1' }
1227 package PLXML::op_complement;
1229 our @ISA = ('PLXML::unop');
1231 sub key { 'complement' }
1232 sub desc { '1\'s complement (~)' }
1233 sub check { 'ck_bitop' }
1234 sub flags { 'fst1' }
1239 # High falutin' math.
1241 package PLXML::op_atan2;
1243 our @ISA = ('PLXML::listop');
1246 sub desc { 'atan2' }
1247 sub check { 'ck_fun' }
1248 sub flags { 'fsT@' }
1252 package PLXML::op_sin;
1254 our @ISA = ('PLXML::baseop_unop');
1258 sub check { 'ck_fun' }
1259 sub flags { 'fsTu%' }
1263 package PLXML::op_cos;
1265 our @ISA = ('PLXML::baseop_unop');
1269 sub check { 'ck_fun' }
1270 sub flags { 'fsTu%' }
1274 package PLXML::op_rand;
1276 our @ISA = ('PLXML::baseop_unop');
1280 sub check { 'ck_fun' }
1285 package PLXML::op_srand;
1287 our @ISA = ('PLXML::baseop_unop');
1290 sub desc { 'srand' }
1291 sub check { 'ck_fun' }
1296 package PLXML::op_exp;
1298 our @ISA = ('PLXML::baseop_unop');
1302 sub check { 'ck_fun' }
1303 sub flags { 'fsTu%' }
1307 package PLXML::op_log;
1309 our @ISA = ('PLXML::baseop_unop');
1313 sub check { 'ck_fun' }
1314 sub flags { 'fsTu%' }
1318 package PLXML::op_sqrt;
1320 our @ISA = ('PLXML::baseop_unop');
1324 sub check { 'ck_fun' }
1325 sub flags { 'fsTu%' }
1332 package PLXML::op_int;
1334 our @ISA = ('PLXML::baseop_unop');
1338 sub check { 'ck_fun' }
1339 sub flags { 'fsTu%' }
1343 package PLXML::op_hex;
1345 our @ISA = ('PLXML::baseop_unop');
1349 sub check { 'ck_fun' }
1350 sub flags { 'fsTu%' }
1354 package PLXML::op_oct;
1356 our @ISA = ('PLXML::baseop_unop');
1360 sub check { 'ck_fun' }
1361 sub flags { 'fsTu%' }
1365 package PLXML::op_abs;
1367 our @ISA = ('PLXML::baseop_unop');
1371 sub check { 'ck_fun' }
1372 sub flags { 'fsTu%' }
1379 package PLXML::op_length;
1381 our @ISA = ('PLXML::baseop_unop');
1383 sub key { 'length' }
1384 sub desc { 'length' }
1385 sub check { 'ck_lengthconst' }
1386 sub flags { 'isTu%' }
1390 package PLXML::op_substr;
1392 our @ISA = ('PLXML::listop');
1394 sub key { 'substr' }
1395 sub desc { 'substr' }
1396 sub check { 'ck_substr' }
1398 sub args { 'S S S? S?' }
1401 package PLXML::op_vec;
1403 our @ISA = ('PLXML::listop');
1407 sub check { 'ck_fun' }
1408 sub flags { 'ist@' }
1409 sub args { 'S S S' }
1413 package PLXML::op_index;
1415 our @ISA = ('PLXML::listop');
1418 sub desc { 'index' }
1419 sub check { 'ck_index' }
1420 sub flags { 'isT@' }
1421 sub args { 'S S S?' }
1424 package PLXML::op_rindex;
1426 our @ISA = ('PLXML::listop');
1428 sub key { 'rindex' }
1429 sub desc { 'rindex' }
1430 sub check { 'ck_index' }
1431 sub flags { 'isT@' }
1432 sub args { 'S S S?' }
1436 package PLXML::op_sprintf;
1438 our @ISA = ('PLXML::listop');
1440 sub key { 'sprintf' }
1441 sub desc { 'sprintf' }
1442 sub check { 'ck_fun' }
1443 sub flags { 'mfst@' }
1447 package PLXML::op_formline;
1449 our @ISA = ('PLXML::listop');
1451 sub key { 'formline' }
1452 sub desc { 'formline' }
1453 sub check { 'ck_fun' }
1458 package PLXML::op_ord;
1460 our @ISA = ('PLXML::baseop_unop');
1464 sub check { 'ck_fun' }
1465 sub flags { 'ifsTu%' }
1469 package PLXML::op_chr;
1471 our @ISA = ('PLXML::baseop_unop');
1475 sub check { 'ck_fun' }
1476 sub flags { 'fsTu%' }
1480 package PLXML::op_crypt;
1482 our @ISA = ('PLXML::listop');
1485 sub desc { 'crypt' }
1486 sub check { 'ck_fun' }
1487 sub flags { 'fsT@' }
1491 package PLXML::op_ucfirst;
1493 our @ISA = ('PLXML::baseop_unop');
1495 sub key { 'ucfirst' }
1496 sub desc { 'ucfirst' }
1497 sub check { 'ck_fun' }
1498 sub flags { 'fstu%' }
1502 package PLXML::op_lcfirst;
1504 our @ISA = ('PLXML::baseop_unop');
1506 sub key { 'lcfirst' }
1507 sub desc { 'lcfirst' }
1508 sub check { 'ck_fun' }
1509 sub flags { 'fstu%' }
1513 package PLXML::op_uc;
1515 our @ISA = ('PLXML::baseop_unop');
1519 sub check { 'ck_fun' }
1520 sub flags { 'fstu%' }
1524 package PLXML::op_lc;
1526 our @ISA = ('PLXML::baseop_unop');
1530 sub check { 'ck_fun' }
1531 sub flags { 'fstu%' }
1535 package PLXML::op_quotemeta;
1537 our @ISA = ('PLXML::baseop_unop');
1539 sub key { 'quotemeta' }
1540 sub desc { 'quotemeta' }
1541 sub check { 'ck_fun' }
1542 sub flags { 'fstu%' }
1549 package PLXML::op_rv2av;
1551 our @ISA = ('PLXML::unop');
1554 sub desc { 'array dereference' }
1555 sub check { 'ck_rvconst' }
1560 package PLXML::op_aelemfast;
1562 our @ISA = ('PLXML::padop_svop');
1564 sub key { 'aelemfast' }
1565 sub desc { 'constant array element' }
1566 sub check { 'ck_null' }
1571 package PLXML::op_aelem;
1573 our @ISA = ('PLXML::binop');
1576 sub desc { 'array element' }
1577 sub check { 'ck_null' }
1582 package PLXML::op_aslice;
1584 our @ISA = ('PLXML::listop');
1586 sub key { 'aslice' }
1587 sub desc { 'array slice' }
1588 sub check { 'ck_null' }
1596 package PLXML::op_each;
1598 our @ISA = ('PLXML::baseop_unop');
1602 sub check { 'ck_fun' }
1607 package PLXML::op_values;
1609 our @ISA = ('PLXML::baseop_unop');
1611 sub key { 'values' }
1612 sub desc { 'values' }
1613 sub check { 'ck_fun' }
1618 package PLXML::op_keys;
1620 our @ISA = ('PLXML::baseop_unop');
1624 sub check { 'ck_fun' }
1629 package PLXML::op_delete;
1631 our @ISA = ('PLXML::baseop_unop');
1633 sub key { 'delete' }
1634 sub desc { 'delete' }
1635 sub check { 'ck_delete' }
1640 package PLXML::op_exists;
1642 our @ISA = ('PLXML::baseop_unop');
1644 sub key { 'exists' }
1645 sub desc { 'exists' }
1646 sub check { 'ck_exists' }
1651 package PLXML::op_rv2hv;
1653 our @ISA = ('PLXML::unop');
1656 sub desc { 'hash dereference' }
1657 sub check { 'ck_rvconst' }
1662 package PLXML::op_helem;
1664 our @ISA = ('PLXML::listop');
1667 sub desc { 'hash element' }
1668 sub check { 'ck_null' }
1673 package PLXML::op_hslice;
1675 our @ISA = ('PLXML::listop');
1677 sub key { 'hslice' }
1678 sub desc { 'hash slice' }
1679 sub check { 'ck_null' }
1685 # Explosives and implosives.
1687 package PLXML::op_unpack;
1689 our @ISA = ('PLXML::listop');
1691 sub key { 'unpack' }
1692 sub desc { 'unpack' }
1693 sub check { 'ck_unpack' }
1698 package PLXML::op_pack;
1700 our @ISA = ('PLXML::listop');
1704 sub check { 'ck_fun' }
1705 sub flags { 'mst@' }
1709 package PLXML::op_split;
1711 our @ISA = ('PLXML::listop');
1714 sub desc { 'split' }
1715 sub check { 'ck_split' }
1717 sub args { 'S S S' }
1720 package PLXML::op_join;
1722 our @ISA = ('PLXML::listop');
1725 sub desc { 'join or string' }
1726 sub check { 'ck_join' }
1727 sub flags { 'mst@' }
1734 package PLXML::op_list;
1736 our @ISA = ('PLXML::listop');
1740 sub check { 'ck_null' }
1745 package PLXML::op_lslice;
1747 our @ISA = ('PLXML::binop');
1749 sub key { 'lslice' }
1750 sub desc { 'list slice' }
1751 sub check { 'ck_null' }
1753 sub args { 'H L L' }
1756 package PLXML::op_anonlist;
1758 our @ISA = ('PLXML::listop');
1760 sub key { 'anonlist' }
1761 sub desc { 'anonymous list ([])' }
1762 sub check { 'ck_fun' }
1767 package PLXML::op_anonhash;
1769 our @ISA = ('PLXML::listop');
1771 sub key { 'anonhash' }
1772 sub desc { 'anonymous hash ({})' }
1773 sub check { 'ck_fun' }
1779 package PLXML::op_splice;
1781 our @ISA = ('PLXML::listop');
1783 sub key { 'splice' }
1784 sub desc { 'splice' }
1785 sub check { 'ck_fun' }
1787 sub args { 'A S? S? L' }
1790 package PLXML::op_push;
1792 our @ISA = ('PLXML::listop');
1796 sub check { 'ck_fun' }
1797 sub flags { 'imsT@' }
1801 package PLXML::op_pop;
1803 our @ISA = ('PLXML::baseop_unop');
1807 sub check { 'ck_shift' }
1812 package PLXML::op_shift;
1814 our @ISA = ('PLXML::baseop_unop');
1817 sub desc { 'shift' }
1818 sub check { 'ck_shift' }
1823 package PLXML::op_unshift;
1825 our @ISA = ('PLXML::listop');
1827 sub key { 'unshift' }
1828 sub desc { 'unshift' }
1829 sub check { 'ck_fun' }
1830 sub flags { 'imsT@' }
1834 package PLXML::op_sort;
1836 our @ISA = ('PLXML::listop');
1840 sub check { 'ck_sort' }
1845 package PLXML::op_reverse;
1847 our @ISA = ('PLXML::listop');
1849 sub key { 'reverse' }
1850 sub desc { 'reverse' }
1851 sub check { 'ck_fun' }
1857 package PLXML::op_grepstart;
1859 our @ISA = ('PLXML::listop');
1861 sub key { 'grepstart' }
1863 sub check { 'ck_grep' }
1868 package PLXML::op_grepwhile;
1870 our @ISA = ('PLXML::logop');
1872 sub key { 'grepwhile' }
1873 sub desc { 'grep iterator' }
1874 sub check { 'ck_null' }
1880 package PLXML::op_mapstart;
1882 our @ISA = ('PLXML::listop');
1884 sub key { 'mapstart' }
1886 sub check { 'ck_grep' }
1891 package PLXML::op_mapwhile;
1893 our @ISA = ('PLXML::logop');
1895 sub key { 'mapwhile' }
1896 sub desc { 'map iterator' }
1897 sub check { 'ck_null' }
1905 package PLXML::op_range;
1907 our @ISA = ('PLXML::logop');
1910 sub desc { 'flipflop' }
1911 sub check { 'ck_null' }
1916 package PLXML::op_flip;
1918 our @ISA = ('PLXML::unop');
1921 sub desc { 'range (or flip)' }
1922 sub check { 'ck_null' }
1927 package PLXML::op_flop;
1929 our @ISA = ('PLXML::unop');
1932 sub desc { 'range (or flop)' }
1933 sub check { 'ck_null' }
1941 package PLXML::op_and;
1943 our @ISA = ('PLXML::logop');
1946 sub desc { 'logical and (&&)' }
1947 sub check { 'ck_null' }
1952 package PLXML::op_or;
1954 our @ISA = ('PLXML::logop');
1957 sub desc { 'logical or (||)' }
1958 sub check { 'ck_null' }
1963 package PLXML::op_xor;
1965 our @ISA = ('PLXML::binop');
1968 sub desc { 'logical xor' }
1969 sub check { 'ck_null' }
1974 package PLXML::op_cond_expr;
1976 our @ISA = ('PLXML::logop');
1978 sub key { 'cond_expr' }
1979 sub desc { 'conditional expression' }
1980 sub check { 'ck_null' }
1985 package PLXML::op_andassign;
1987 our @ISA = ('PLXML::logop');
1989 sub key { 'andassign' }
1990 sub desc { 'logical and assignment (&&=)' }
1991 sub check { 'ck_null' }
1996 package PLXML::op_orassign;
1998 our @ISA = ('PLXML::logop');
2000 sub key { 'orassign' }
2001 sub desc { 'logical or assignment (||=)' }
2002 sub check { 'ck_null' }
2008 package PLXML::op_method;
2010 our @ISA = ('PLXML::unop');
2012 sub key { 'method' }
2013 sub desc { 'method lookup' }
2014 sub check { 'ck_method' }
2019 package PLXML::op_entersub;
2021 our @ISA = ('PLXML::unop');
2023 sub key { 'entersub' }
2024 sub desc { 'subroutine entry' }
2025 sub check { 'ck_subr' }
2026 sub flags { 'dmt1' }
2030 package PLXML::op_leavesub;
2032 our @ISA = ('PLXML::unop');
2034 sub key { 'leavesub' }
2035 sub desc { 'subroutine exit' }
2036 sub check { 'ck_null' }
2041 package PLXML::op_leavesublv;
2043 our @ISA = ('PLXML::unop');
2045 sub key { 'leavesublv' }
2046 sub desc { 'lvalue subroutine return' }
2047 sub check { 'ck_null' }
2052 package PLXML::op_caller;
2054 our @ISA = ('PLXML::baseop_unop');
2056 sub key { 'caller' }
2057 sub desc { 'caller' }
2058 sub check { 'ck_fun' }
2063 package PLXML::op_warn;
2065 our @ISA = ('PLXML::listop');
2069 sub check { 'ck_fun' }
2070 sub flags { 'imst@' }
2074 package PLXML::op_die;
2076 our @ISA = ('PLXML::listop');
2080 sub check { 'ck_die' }
2081 sub flags { 'dimst@' }
2085 package PLXML::op_reset;
2087 our @ISA = ('PLXML::baseop_unop');
2090 sub desc { 'symbol reset' }
2091 sub check { 'ck_fun' }
2097 package PLXML::op_lineseq;
2099 our @ISA = ('PLXML::listop');
2101 sub key { 'lineseq' }
2102 sub desc { 'line sequence' }
2103 sub check { 'ck_null' }
2108 package PLXML::op_nextstate;
2110 our @ISA = ('PLXML::cop');
2112 sub key { 'nextstate' }
2113 sub desc { 'next statement' }
2114 sub check { 'ck_null' }
2119 package PLXML::op_dbstate;
2121 our @ISA = ('PLXML::cop');
2123 sub key { 'dbstate' }
2124 sub desc { 'debug next statement' }
2125 sub check { 'ck_null' }
2130 package PLXML::op_unstack;
2132 our @ISA = ('PLXML::baseop');
2134 sub key { 'unstack' }
2135 sub desc { 'iteration finalizer' }
2136 sub check { 'ck_null' }
2141 package PLXML::op_enter;
2143 our @ISA = ('PLXML::baseop');
2146 sub desc { 'block entry' }
2147 sub check { 'ck_null' }
2152 package PLXML::op_leave;
2154 our @ISA = ('PLXML::listop');
2157 sub desc { 'block exit' }
2158 sub check { 'ck_null' }
2163 package PLXML::op_scope;
2165 our @ISA = ('PLXML::listop');
2168 sub desc { 'block' }
2169 sub check { 'ck_null' }
2174 package PLXML::op_enteriter;
2176 our @ISA = ('PLXML::loop');
2178 sub key { 'enteriter' }
2179 sub desc { 'foreach loop entry' }
2180 sub check { 'ck_null' }
2185 package PLXML::op_iter;
2187 our @ISA = ('PLXML::baseop');
2190 sub desc { 'foreach loop iterator' }
2191 sub check { 'ck_null' }
2196 package PLXML::op_enterloop;
2198 our @ISA = ('PLXML::loop');
2200 sub key { 'enterloop' }
2201 sub desc { 'loop entry' }
2202 sub check { 'ck_null' }
2207 package PLXML::op_leaveloop;
2209 our @ISA = ('PLXML::binop');
2211 sub key { 'leaveloop' }
2212 sub desc { 'loop exit' }
2213 sub check { 'ck_null' }
2218 package PLXML::op_return;
2220 our @ISA = ('PLXML::listop');
2222 sub key { 'return' }
2223 sub desc { 'return' }
2224 sub check { 'ck_return' }
2229 package PLXML::op_last;
2231 our @ISA = ('PLXML::loopexop');
2235 sub check { 'ck_null' }
2240 package PLXML::op_next;
2242 our @ISA = ('PLXML::loopexop');
2246 sub check { 'ck_null' }
2251 package PLXML::op_redo;
2253 our @ISA = ('PLXML::loopexop');
2257 sub check { 'ck_null' }
2262 package PLXML::op_dump;
2264 our @ISA = ('PLXML::loopexop');
2268 sub check { 'ck_null' }
2273 package PLXML::op_goto;
2275 our @ISA = ('PLXML::loopexop');
2279 sub check { 'ck_null' }
2284 package PLXML::op_exit;
2286 our @ISA = ('PLXML::baseop_unop');
2290 sub check { 'ck_exit' }
2297 #nswitch numeric switch ck_null d
2298 #cswitch character switch ck_null d
2302 package PLXML::op_open;
2304 our @ISA = ('PLXML::listop');
2308 sub check { 'ck_open' }
2309 sub flags { 'ismt@' }
2310 sub args { 'F S? L' }
2313 package PLXML::op_close;
2315 our @ISA = ('PLXML::baseop_unop');
2318 sub desc { 'close' }
2319 sub check { 'ck_fun' }
2324 package PLXML::op_pipe_op;
2326 our @ISA = ('PLXML::listop');
2328 sub key { 'pipe_op' }
2330 sub check { 'ck_fun' }
2336 package PLXML::op_fileno;
2338 our @ISA = ('PLXML::baseop_unop');
2340 sub key { 'fileno' }
2341 sub desc { 'fileno' }
2342 sub check { 'ck_fun' }
2343 sub flags { 'ist%' }
2347 package PLXML::op_umask;
2349 our @ISA = ('PLXML::baseop_unop');
2352 sub desc { 'umask' }
2353 sub check { 'ck_fun' }
2354 sub flags { 'ist%' }
2358 package PLXML::op_binmode;
2360 our @ISA = ('PLXML::listop');
2362 sub key { 'binmode' }
2363 sub desc { 'binmode' }
2364 sub check { 'ck_fun' }
2370 package PLXML::op_tie;
2372 our @ISA = ('PLXML::listop');
2376 sub check { 'ck_fun' }
2377 sub flags { 'idms@' }
2378 sub args { 'R S L' }
2381 package PLXML::op_untie;
2383 our @ISA = ('PLXML::baseop_unop');
2386 sub desc { 'untie' }
2387 sub check { 'ck_fun' }
2392 package PLXML::op_tied;
2394 our @ISA = ('PLXML::baseop_unop');
2398 sub check { 'ck_fun' }
2403 package PLXML::op_dbmopen;
2405 our @ISA = ('PLXML::listop');
2407 sub key { 'dbmopen' }
2408 sub desc { 'dbmopen' }
2409 sub check { 'ck_fun' }
2411 sub args { 'H S S' }
2414 package PLXML::op_dbmclose;
2416 our @ISA = ('PLXML::baseop_unop');
2418 sub key { 'dbmclose' }
2419 sub desc { 'dbmclose' }
2420 sub check { 'ck_fun' }
2426 package PLXML::op_sselect;
2428 our @ISA = ('PLXML::listop');
2430 sub key { 'sselect' }
2431 sub desc { 'select system call' }
2432 sub check { 'ck_select' }
2434 sub args { 'S S S S' }
2437 package PLXML::op_select;
2439 our @ISA = ('PLXML::listop');
2441 sub key { 'select' }
2442 sub desc { 'select' }
2443 sub check { 'ck_select' }
2449 package PLXML::op_getc;
2451 our @ISA = ('PLXML::baseop_unop');
2455 sub check { 'ck_eof' }
2460 package PLXML::op_read;
2462 our @ISA = ('PLXML::listop');
2466 sub check { 'ck_fun' }
2467 sub flags { 'imst@' }
2468 sub args { 'F R S S?' }
2471 package PLXML::op_enterwrite;
2473 our @ISA = ('PLXML::baseop_unop');
2475 sub key { 'enterwrite' }
2476 sub desc { 'write' }
2477 sub check { 'ck_fun' }
2478 sub flags { 'dis%' }
2482 package PLXML::op_leavewrite;
2484 our @ISA = ('PLXML::unop');
2486 sub key { 'leavewrite' }
2487 sub desc { 'write exit' }
2488 sub check { 'ck_null' }
2494 package PLXML::op_prtf;
2496 our @ISA = ('PLXML::listop');
2499 sub desc { 'printf' }
2500 sub check { 'ck_listiob' }
2501 sub flags { 'ims@' }
2505 package PLXML::op_print;
2507 our @ISA = ('PLXML::listop');
2510 sub desc { 'print' }
2511 sub check { 'ck_listiob' }
2512 sub flags { 'ims@' }
2516 package PLXML::op_say;
2518 our @ISA = ('PLXML::listop');
2522 sub check { 'ck_listiob' }
2523 sub flags { 'ims@' }
2527 package PLXML::op_sysopen;
2529 our @ISA = ('PLXML::listop');
2531 sub key { 'sysopen' }
2532 sub desc { 'sysopen' }
2533 sub check { 'ck_fun' }
2535 sub args { 'F S S S?' }
2538 package PLXML::op_sysseek;
2540 our @ISA = ('PLXML::listop');
2542 sub key { 'sysseek' }
2543 sub desc { 'sysseek' }
2544 sub check { 'ck_fun' }
2546 sub args { 'F S S' }
2549 package PLXML::op_sysread;
2551 our @ISA = ('PLXML::listop');
2553 sub key { 'sysread' }
2554 sub desc { 'sysread' }
2555 sub check { 'ck_fun' }
2556 sub flags { 'imst@' }
2557 sub args { 'F R S S?' }
2560 package PLXML::op_syswrite;
2562 our @ISA = ('PLXML::listop');
2564 sub key { 'syswrite' }
2565 sub desc { 'syswrite' }
2566 sub check { 'ck_fun' }
2567 sub flags { 'imst@' }
2568 sub args { 'F S S? S?' }
2572 package PLXML::op_send;
2574 our @ISA = ('PLXML::listop');
2578 sub check { 'ck_fun' }
2579 sub flags { 'imst@' }
2580 sub args { 'Fs S S S?' }
2583 package PLXML::op_recv;
2585 our @ISA = ('PLXML::listop');
2589 sub check { 'ck_fun' }
2590 sub flags { 'imst@' }
2591 sub args { 'Fs R S S' }
2595 package PLXML::op_eof;
2597 our @ISA = ('PLXML::baseop_unop');
2601 sub check { 'ck_eof' }
2606 package PLXML::op_tell;
2608 our @ISA = ('PLXML::baseop_unop');
2612 sub check { 'ck_fun' }
2617 package PLXML::op_seek;
2619 our @ISA = ('PLXML::listop');
2623 sub check { 'ck_fun' }
2625 sub args { 'F S S' }
2628 # truncate really behaves as if it had both "S S" and "F S"
2629 package PLXML::op_truncate;
2631 our @ISA = ('PLXML::listop');
2633 sub key { 'truncate' }
2634 sub desc { 'truncate' }
2635 sub check { 'ck_trunc' }
2641 package PLXML::op_fcntl;
2643 our @ISA = ('PLXML::listop');
2646 sub desc { 'fcntl' }
2647 sub check { 'ck_fun' }
2649 sub args { 'F S S' }
2652 package PLXML::op_ioctl;
2654 our @ISA = ('PLXML::listop');
2657 sub desc { 'ioctl' }
2658 sub check { 'ck_fun' }
2660 sub args { 'F S S' }
2663 package PLXML::op_flock;
2665 our @ISA = ('PLXML::listop');
2668 sub desc { 'flock' }
2669 sub check { 'ck_fun' }
2670 sub flags { 'isT@' }
2677 package PLXML::op_socket;
2679 our @ISA = ('PLXML::listop');
2681 sub key { 'socket' }
2682 sub desc { 'socket' }
2683 sub check { 'ck_fun' }
2685 sub args { 'Fs S S S' }
2688 package PLXML::op_sockpair;
2690 our @ISA = ('PLXML::listop');
2692 sub key { 'sockpair' }
2693 sub desc { 'socketpair' }
2694 sub check { 'ck_fun' }
2696 sub args { 'Fs Fs S S S' }
2700 package PLXML::op_bind;
2702 our @ISA = ('PLXML::listop');
2706 sub check { 'ck_fun' }
2711 package PLXML::op_connect;
2713 our @ISA = ('PLXML::listop');
2715 sub key { 'connect' }
2716 sub desc { 'connect' }
2717 sub check { 'ck_fun' }
2722 package PLXML::op_listen;
2724 our @ISA = ('PLXML::listop');
2726 sub key { 'listen' }
2727 sub desc { 'listen' }
2728 sub check { 'ck_fun' }
2733 package PLXML::op_accept;
2735 our @ISA = ('PLXML::listop');
2737 sub key { 'accept' }
2738 sub desc { 'accept' }
2739 sub check { 'ck_fun' }
2740 sub flags { 'ist@' }
2741 sub args { 'Fs Fs' }
2744 package PLXML::op_shutdown;
2746 our @ISA = ('PLXML::listop');
2748 sub key { 'shutdown' }
2749 sub desc { 'shutdown' }
2750 sub check { 'ck_fun' }
2751 sub flags { 'ist@' }
2756 package PLXML::op_gsockopt;
2758 our @ISA = ('PLXML::listop');
2760 sub key { 'gsockopt' }
2761 sub desc { 'getsockopt' }
2762 sub check { 'ck_fun' }
2764 sub args { 'Fs S S' }
2767 package PLXML::op_ssockopt;
2769 our @ISA = ('PLXML::listop');
2771 sub key { 'ssockopt' }
2772 sub desc { 'setsockopt' }
2773 sub check { 'ck_fun' }
2775 sub args { 'Fs S S S' }
2779 package PLXML::op_getsockname;
2781 our @ISA = ('PLXML::baseop_unop');
2783 sub key { 'getsockname' }
2784 sub desc { 'getsockname' }
2785 sub check { 'ck_fun' }
2790 package PLXML::op_getpeername;
2792 our @ISA = ('PLXML::baseop_unop');
2794 sub key { 'getpeername' }
2795 sub desc { 'getpeername' }
2796 sub check { 'ck_fun' }
2804 package PLXML::op_lstat;
2806 our @ISA = ('PLXML::filestatop');
2809 sub desc { 'lstat' }
2810 sub check { 'ck_ftst' }
2815 package PLXML::op_stat;
2817 our @ISA = ('PLXML::filestatop');
2821 sub check { 'ck_ftst' }
2826 package PLXML::op_ftrread;
2828 our @ISA = ('PLXML::filestatop');
2830 sub key { 'ftrread' }
2832 sub check { 'ck_ftst' }
2833 sub flags { 'isu-' }
2837 package PLXML::op_ftrwrite;
2839 our @ISA = ('PLXML::filestatop');
2841 sub key { 'ftrwrite' }
2843 sub check { 'ck_ftst' }
2844 sub flags { 'isu-' }
2848 package PLXML::op_ftrexec;
2850 our @ISA = ('PLXML::filestatop');
2852 sub key { 'ftrexec' }
2854 sub check { 'ck_ftst' }
2855 sub flags { 'isu-' }
2859 package PLXML::op_fteread;
2861 our @ISA = ('PLXML::filestatop');
2863 sub key { 'fteread' }
2865 sub check { 'ck_ftst' }
2866 sub flags { 'isu-' }
2870 package PLXML::op_ftewrite;
2872 our @ISA = ('PLXML::filestatop');
2874 sub key { 'ftewrite' }
2876 sub check { 'ck_ftst' }
2877 sub flags { 'isu-' }
2881 package PLXML::op_fteexec;
2883 our @ISA = ('PLXML::filestatop');
2885 sub key { 'fteexec' }
2887 sub check { 'ck_ftst' }
2888 sub flags { 'isu-' }
2892 package PLXML::op_ftis;
2894 our @ISA = ('PLXML::filestatop');
2898 sub check { 'ck_ftst' }
2899 sub flags { 'isu-' }
2903 package PLXML::op_fteowned;
2905 our @ISA = ('PLXML::filestatop');
2907 sub key { 'fteowned' }
2909 sub check { 'ck_ftst' }
2910 sub flags { 'isu-' }
2914 package PLXML::op_ftrowned;
2916 our @ISA = ('PLXML::filestatop');
2918 sub key { 'ftrowned' }
2920 sub check { 'ck_ftst' }
2921 sub flags { 'isu-' }
2925 package PLXML::op_ftzero;
2927 our @ISA = ('PLXML::filestatop');
2929 sub key { 'ftzero' }
2931 sub check { 'ck_ftst' }
2932 sub flags { 'isu-' }
2936 package PLXML::op_ftsize;
2938 our @ISA = ('PLXML::filestatop');
2940 sub key { 'ftsize' }
2942 sub check { 'ck_ftst' }
2943 sub flags { 'istu-' }
2947 package PLXML::op_ftmtime;
2949 our @ISA = ('PLXML::filestatop');
2951 sub key { 'ftmtime' }
2953 sub check { 'ck_ftst' }
2954 sub flags { 'stu-' }
2958 package PLXML::op_ftatime;
2960 our @ISA = ('PLXML::filestatop');
2962 sub key { 'ftatime' }
2964 sub check { 'ck_ftst' }
2965 sub flags { 'stu-' }
2969 package PLXML::op_ftctime;
2971 our @ISA = ('PLXML::filestatop');
2973 sub key { 'ftctime' }
2975 sub check { 'ck_ftst' }
2976 sub flags { 'stu-' }
2980 package PLXML::op_ftsock;
2982 our @ISA = ('PLXML::filestatop');
2984 sub key { 'ftsock' }
2986 sub check { 'ck_ftst' }
2987 sub flags { 'isu-' }
2991 package PLXML::op_ftchr;
2993 our @ISA = ('PLXML::filestatop');
2997 sub check { 'ck_ftst' }
2998 sub flags { 'isu-' }
3002 package PLXML::op_ftblk;
3004 our @ISA = ('PLXML::filestatop');
3008 sub check { 'ck_ftst' }
3009 sub flags { 'isu-' }
3013 package PLXML::op_ftfile;
3015 our @ISA = ('PLXML::filestatop');
3017 sub key { 'ftfile' }
3019 sub check { 'ck_ftst' }
3020 sub flags { 'isu-' }
3024 package PLXML::op_ftdir;
3026 our @ISA = ('PLXML::filestatop');
3030 sub check { 'ck_ftst' }
3031 sub flags { 'isu-' }
3035 package PLXML::op_ftpipe;
3037 our @ISA = ('PLXML::filestatop');
3039 sub key { 'ftpipe' }
3041 sub check { 'ck_ftst' }
3042 sub flags { 'isu-' }
3046 package PLXML::op_ftlink;
3048 our @ISA = ('PLXML::filestatop');
3050 sub key { 'ftlink' }
3052 sub check { 'ck_ftst' }
3053 sub flags { 'isu-' }
3057 package PLXML::op_ftsuid;
3059 our @ISA = ('PLXML::filestatop');
3061 sub key { 'ftsuid' }
3063 sub check { 'ck_ftst' }
3064 sub flags { 'isu-' }
3068 package PLXML::op_ftsgid;
3070 our @ISA = ('PLXML::filestatop');
3072 sub key { 'ftsgid' }
3074 sub check { 'ck_ftst' }
3075 sub flags { 'isu-' }
3079 package PLXML::op_ftsvtx;
3081 our @ISA = ('PLXML::filestatop');
3083 sub key { 'ftsvtx' }
3085 sub check { 'ck_ftst' }
3086 sub flags { 'isu-' }
3090 package PLXML::op_fttty;
3092 our @ISA = ('PLXML::filestatop');
3096 sub check { 'ck_ftst' }
3101 package PLXML::op_fttext;
3103 our @ISA = ('PLXML::filestatop');
3105 sub key { 'fttext' }
3107 sub check { 'ck_ftst' }
3108 sub flags { 'isu-' }
3112 package PLXML::op_ftbinary;
3114 our @ISA = ('PLXML::filestatop');
3116 sub key { 'ftbinary' }
3118 sub check { 'ck_ftst' }
3119 sub flags { 'isu-' }
3126 package PLXML::op_chdir;
3128 our @ISA = ('PLXML::baseop_unop');
3131 sub desc { 'chdir' }
3132 sub check { 'ck_fun' }
3133 sub flags { 'isT%' }
3137 package PLXML::op_chown;
3139 our @ISA = ('PLXML::listop');
3142 sub desc { 'chown' }
3143 sub check { 'ck_fun' }
3144 sub flags { 'imsT@' }
3148 package PLXML::op_chroot;
3150 our @ISA = ('PLXML::baseop_unop');
3152 sub key { 'chroot' }
3153 sub desc { 'chroot' }
3154 sub check { 'ck_fun' }
3155 sub flags { 'isTu%' }
3159 package PLXML::op_unlink;
3161 our @ISA = ('PLXML::listop');
3163 sub key { 'unlink' }
3164 sub desc { 'unlink' }
3165 sub check { 'ck_fun' }
3166 sub flags { 'imsTu@' }
3170 package PLXML::op_chmod;
3172 our @ISA = ('PLXML::listop');
3175 sub desc { 'chmod' }
3176 sub check { 'ck_fun' }
3177 sub flags { 'imsT@' }
3181 package PLXML::op_utime;
3183 our @ISA = ('PLXML::listop');
3186 sub desc { 'utime' }
3187 sub check { 'ck_fun' }
3188 sub flags { 'imsT@' }
3192 package PLXML::op_rename;
3194 our @ISA = ('PLXML::listop');
3196 sub key { 'rename' }
3197 sub desc { 'rename' }
3198 sub check { 'ck_fun' }
3199 sub flags { 'isT@' }
3203 package PLXML::op_link;
3205 our @ISA = ('PLXML::listop');
3209 sub check { 'ck_fun' }
3210 sub flags { 'isT@' }
3214 package PLXML::op_symlink;
3216 our @ISA = ('PLXML::listop');
3218 sub key { 'symlink' }
3219 sub desc { 'symlink' }
3220 sub check { 'ck_fun' }
3221 sub flags { 'isT@' }
3225 package PLXML::op_readlink;
3227 our @ISA = ('PLXML::baseop_unop');
3229 sub key { 'readlink' }
3230 sub desc { 'readlink' }
3231 sub check { 'ck_fun' }
3232 sub flags { 'stu%' }
3236 package PLXML::op_mkdir;
3238 our @ISA = ('PLXML::listop');
3241 sub desc { 'mkdir' }
3242 sub check { 'ck_fun' }
3243 sub flags { 'isT@' }
3247 package PLXML::op_rmdir;
3249 our @ISA = ('PLXML::baseop_unop');
3252 sub desc { 'rmdir' }
3253 sub check { 'ck_fun' }
3254 sub flags { 'isTu%' }
3261 package PLXML::op_open_dir;
3263 our @ISA = ('PLXML::listop');
3265 sub key { 'open_dir' }
3266 sub desc { 'opendir' }
3267 sub check { 'ck_fun' }
3272 package PLXML::op_readdir;
3274 our @ISA = ('PLXML::baseop_unop');
3276 sub key { 'readdir' }
3277 sub desc { 'readdir' }
3278 sub check { 'ck_fun' }
3283 package PLXML::op_telldir;
3285 our @ISA = ('PLXML::baseop_unop');
3287 sub key { 'telldir' }
3288 sub desc { 'telldir' }
3289 sub check { 'ck_fun' }
3294 package PLXML::op_seekdir;
3296 our @ISA = ('PLXML::listop');
3298 sub key { 'seekdir' }
3299 sub desc { 'seekdir' }
3300 sub check { 'ck_fun' }
3305 package PLXML::op_rewinddir;
3307 our @ISA = ('PLXML::baseop_unop');
3309 sub key { 'rewinddir' }
3310 sub desc { 'rewinddir' }
3311 sub check { 'ck_fun' }
3316 package PLXML::op_closedir;
3318 our @ISA = ('PLXML::baseop_unop');
3320 sub key { 'closedir' }
3321 sub desc { 'closedir' }
3322 sub check { 'ck_fun' }
3330 package PLXML::op_fork;
3332 our @ISA = ('PLXML::baseop');
3336 sub check { 'ck_null' }
3337 sub flags { 'ist0' }
3341 package PLXML::op_wait;
3343 our @ISA = ('PLXML::baseop');
3347 sub check { 'ck_null' }
3348 sub flags { 'isT0' }
3352 package PLXML::op_waitpid;
3354 our @ISA = ('PLXML::listop');
3356 sub key { 'waitpid' }
3357 sub desc { 'waitpid' }
3358 sub check { 'ck_fun' }
3359 sub flags { 'isT@' }
3363 package PLXML::op_system;
3365 our @ISA = ('PLXML::listop');
3367 sub key { 'system' }
3368 sub desc { 'system' }
3369 sub check { 'ck_exec' }
3370 sub flags { 'imsT@' }
3374 package PLXML::op_exec;
3376 our @ISA = ('PLXML::listop');
3380 sub check { 'ck_exec' }
3381 sub flags { 'dimsT@' }
3385 package PLXML::op_kill;
3387 our @ISA = ('PLXML::listop');
3391 sub check { 'ck_fun' }
3392 sub flags { 'dimsT@' }
3396 package PLXML::op_getppid;
3398 our @ISA = ('PLXML::baseop');
3400 sub key { 'getppid' }
3401 sub desc { 'getppid' }
3402 sub check { 'ck_null' }
3403 sub flags { 'isT0' }
3407 package PLXML::op_getpgrp;
3409 our @ISA = ('PLXML::baseop_unop');
3411 sub key { 'getpgrp' }
3412 sub desc { 'getpgrp' }
3413 sub check { 'ck_fun' }
3414 sub flags { 'isT%' }
3418 package PLXML::op_setpgrp;
3420 our @ISA = ('PLXML::listop');
3422 sub key { 'setpgrp' }
3423 sub desc { 'setpgrp' }
3424 sub check { 'ck_fun' }
3425 sub flags { 'isT@' }
3426 sub args { 'S? S?' }
3429 package PLXML::op_getpriority;
3431 our @ISA = ('PLXML::listop');
3433 sub key { 'getpriority' }
3434 sub desc { 'getpriority' }
3435 sub check { 'ck_fun' }
3436 sub flags { 'isT@' }
3440 package PLXML::op_setpriority;
3442 our @ISA = ('PLXML::listop');
3444 sub key { 'setpriority' }
3445 sub desc { 'setpriority' }
3446 sub check { 'ck_fun' }
3447 sub flags { 'isT@' }
3448 sub args { 'S S S' }
3454 # NOTE: MacOS patches the 'i' of time() away later when the interpreter
3455 # is created because in MacOS time() is already returning times > 2**31-1,
3456 # that is, non-integers.
3458 package PLXML::op_time;
3460 our @ISA = ('PLXML::baseop');
3464 sub check { 'ck_null' }
3465 sub flags { 'isT0' }
3469 package PLXML::op_tms;
3471 our @ISA = ('PLXML::baseop');
3474 sub desc { 'times' }
3475 sub check { 'ck_null' }
3480 package PLXML::op_localtime;
3482 our @ISA = ('PLXML::baseop_unop');
3484 sub key { 'localtime' }
3485 sub desc { 'localtime' }
3486 sub check { 'ck_fun' }
3491 package PLXML::op_gmtime;
3493 our @ISA = ('PLXML::baseop_unop');
3495 sub key { 'gmtime' }
3496 sub desc { 'gmtime' }
3497 sub check { 'ck_fun' }
3502 package PLXML::op_alarm;
3504 our @ISA = ('PLXML::baseop_unop');
3507 sub desc { 'alarm' }
3508 sub check { 'ck_fun' }
3509 sub flags { 'istu%' }
3513 package PLXML::op_sleep;
3515 our @ISA = ('PLXML::baseop_unop');
3518 sub desc { 'sleep' }
3519 sub check { 'ck_fun' }
3520 sub flags { 'isT%' }
3527 package PLXML::op_shmget;
3529 our @ISA = ('PLXML::listop');
3531 sub key { 'shmget' }
3532 sub desc { 'shmget' }
3533 sub check { 'ck_fun' }
3534 sub flags { 'imst@' }
3535 sub args { 'S S S' }
3538 package PLXML::op_shmctl;
3540 our @ISA = ('PLXML::listop');
3542 sub key { 'shmctl' }
3543 sub desc { 'shmctl' }
3544 sub check { 'ck_fun' }
3545 sub flags { 'imst@' }
3546 sub args { 'S S S' }
3549 package PLXML::op_shmread;
3551 our @ISA = ('PLXML::listop');
3553 sub key { 'shmread' }
3554 sub desc { 'shmread' }
3555 sub check { 'ck_fun' }
3556 sub flags { 'imst@' }
3557 sub args { 'S S S S' }
3560 package PLXML::op_shmwrite;
3562 our @ISA = ('PLXML::listop');
3564 sub key { 'shmwrite' }
3565 sub desc { 'shmwrite' }
3566 sub check { 'ck_fun' }
3567 sub flags { 'imst@' }
3568 sub args { 'S S S S' }
3574 package PLXML::op_msgget;
3576 our @ISA = ('PLXML::listop');
3578 sub key { 'msgget' }
3579 sub desc { 'msgget' }
3580 sub check { 'ck_fun' }
3581 sub flags { 'imst@' }
3585 package PLXML::op_msgctl;
3587 our @ISA = ('PLXML::listop');
3589 sub key { 'msgctl' }
3590 sub desc { 'msgctl' }
3591 sub check { 'ck_fun' }
3592 sub flags { 'imst@' }
3593 sub args { 'S S S' }
3596 package PLXML::op_msgsnd;
3598 our @ISA = ('PLXML::listop');
3600 sub key { 'msgsnd' }
3601 sub desc { 'msgsnd' }
3602 sub check { 'ck_fun' }
3603 sub flags { 'imst@' }
3604 sub args { 'S S S' }
3607 package PLXML::op_msgrcv;
3609 our @ISA = ('PLXML::listop');
3611 sub key { 'msgrcv' }
3612 sub desc { 'msgrcv' }
3613 sub check { 'ck_fun' }
3614 sub flags { 'imst@' }
3615 sub args { 'S S S S S' }
3621 package PLXML::op_semget;
3623 our @ISA = ('PLXML::listop');
3625 sub key { 'semget' }
3626 sub desc { 'semget' }
3627 sub check { 'ck_fun' }
3628 sub flags { 'imst@' }
3629 sub args { 'S S S' }
3632 package PLXML::op_semctl;
3634 our @ISA = ('PLXML::listop');
3636 sub key { 'semctl' }
3637 sub desc { 'semctl' }
3638 sub check { 'ck_fun' }
3639 sub flags { 'imst@' }
3640 sub args { 'S S S S' }
3643 package PLXML::op_semop;
3645 our @ISA = ('PLXML::listop');
3648 sub desc { 'semop' }
3649 sub check { 'ck_fun' }
3650 sub flags { 'imst@' }
3657 package PLXML::op_require;
3659 our @ISA = ('PLXML::baseop_unop');
3661 sub key { 'require' }
3662 sub desc { 'require' }
3663 sub check { 'ck_require' }
3668 package PLXML::op_dofile;
3670 our @ISA = ('PLXML::unop');
3672 sub key { 'dofile' }
3673 sub desc { 'do "file"' }
3674 sub check { 'ck_fun' }
3679 package PLXML::op_entereval;
3681 our @ISA = ('PLXML::baseop_unop');
3683 sub key { 'entereval' }
3684 sub desc { 'eval "string"' }
3685 sub check { 'ck_eval' }
3690 package PLXML::op_leaveeval;
3692 our @ISA = ('PLXML::unop');
3694 sub key { 'leaveeval' }
3695 sub desc { 'eval "string" exit' }
3696 sub check { 'ck_null' }
3701 #evalonce eval constant string ck_null d1 S
3702 package PLXML::op_entertry;
3704 our @ISA = ('PLXML::logop');
3706 sub key { 'entertry' }
3707 sub desc { 'eval {block}' }
3708 sub check { 'ck_null' }
3713 package PLXML::op_leavetry;
3715 our @ISA = ('PLXML::listop');
3717 sub key { 'leavetry' }
3718 sub desc { 'eval {block} exit' }
3719 sub check { 'ck_null' }
3727 package PLXML::op_ghbyname;
3729 our @ISA = ('PLXML::baseop_unop');
3731 sub key { 'ghbyname' }
3732 sub desc { 'gethostbyname' }
3733 sub check { 'ck_fun' }
3738 package PLXML::op_ghbyaddr;
3740 our @ISA = ('PLXML::listop');
3742 sub key { 'ghbyaddr' }
3743 sub desc { 'gethostbyaddr' }
3744 sub check { 'ck_fun' }
3749 package PLXML::op_ghostent;
3751 our @ISA = ('PLXML::baseop');
3753 sub key { 'ghostent' }
3754 sub desc { 'gethostent' }
3755 sub check { 'ck_null' }
3760 package PLXML::op_gnbyname;
3762 our @ISA = ('PLXML::baseop_unop');
3764 sub key { 'gnbyname' }
3765 sub desc { 'getnetbyname' }
3766 sub check { 'ck_fun' }
3771 package PLXML::op_gnbyaddr;
3773 our @ISA = ('PLXML::listop');
3775 sub key { 'gnbyaddr' }
3776 sub desc { 'getnetbyaddr' }
3777 sub check { 'ck_fun' }
3782 package PLXML::op_gnetent;
3784 our @ISA = ('PLXML::baseop');
3786 sub key { 'gnetent' }
3787 sub desc { 'getnetent' }
3788 sub check { 'ck_null' }
3793 package PLXML::op_gpbyname;
3795 our @ISA = ('PLXML::baseop_unop');
3797 sub key { 'gpbyname' }
3798 sub desc { 'getprotobyname' }
3799 sub check { 'ck_fun' }
3804 package PLXML::op_gpbynumber;
3806 our @ISA = ('PLXML::listop');
3808 sub key { 'gpbynumber' }
3809 sub desc { 'getprotobynumber' }
3810 sub check { 'ck_fun' }
3815 package PLXML::op_gprotoent;
3817 our @ISA = ('PLXML::baseop');
3819 sub key { 'gprotoent' }
3820 sub desc { 'getprotoent' }
3821 sub check { 'ck_null' }
3826 package PLXML::op_gsbyname;
3828 our @ISA = ('PLXML::listop');
3830 sub key { 'gsbyname' }
3831 sub desc { 'getservbyname' }
3832 sub check { 'ck_fun' }
3837 package PLXML::op_gsbyport;
3839 our @ISA = ('PLXML::listop');
3841 sub key { 'gsbyport' }
3842 sub desc { 'getservbyport' }
3843 sub check { 'ck_fun' }
3848 package PLXML::op_gservent;
3850 our @ISA = ('PLXML::baseop');
3852 sub key { 'gservent' }
3853 sub desc { 'getservent' }
3854 sub check { 'ck_null' }
3859 package PLXML::op_shostent;
3861 our @ISA = ('PLXML::baseop_unop');
3863 sub key { 'shostent' }
3864 sub desc { 'sethostent' }
3865 sub check { 'ck_fun' }
3870 package PLXML::op_snetent;
3872 our @ISA = ('PLXML::baseop_unop');
3874 sub key { 'snetent' }
3875 sub desc { 'setnetent' }
3876 sub check { 'ck_fun' }
3881 package PLXML::op_sprotoent;
3883 our @ISA = ('PLXML::baseop_unop');
3885 sub key { 'sprotoent' }
3886 sub desc { 'setprotoent' }
3887 sub check { 'ck_fun' }
3892 package PLXML::op_sservent;
3894 our @ISA = ('PLXML::baseop_unop');
3896 sub key { 'sservent' }
3897 sub desc { 'setservent' }
3898 sub check { 'ck_fun' }
3903 package PLXML::op_ehostent;
3905 our @ISA = ('PLXML::baseop');
3907 sub key { 'ehostent' }
3908 sub desc { 'endhostent' }
3909 sub check { 'ck_null' }
3914 package PLXML::op_enetent;
3916 our @ISA = ('PLXML::baseop');
3918 sub key { 'enetent' }
3919 sub desc { 'endnetent' }
3920 sub check { 'ck_null' }
3925 package PLXML::op_eprotoent;
3927 our @ISA = ('PLXML::baseop');
3929 sub key { 'eprotoent' }
3930 sub desc { 'endprotoent' }
3931 sub check { 'ck_null' }
3936 package PLXML::op_eservent;
3938 our @ISA = ('PLXML::baseop');
3940 sub key { 'eservent' }
3941 sub desc { 'endservent' }
3942 sub check { 'ck_null' }
3947 package PLXML::op_gpwnam;
3949 our @ISA = ('PLXML::baseop_unop');
3951 sub key { 'gpwnam' }
3952 sub desc { 'getpwnam' }
3953 sub check { 'ck_fun' }
3958 package PLXML::op_gpwuid;
3960 our @ISA = ('PLXML::baseop_unop');
3962 sub key { 'gpwuid' }
3963 sub desc { 'getpwuid' }
3964 sub check { 'ck_fun' }
3969 package PLXML::op_gpwent;
3971 our @ISA = ('PLXML::baseop');
3973 sub key { 'gpwent' }
3974 sub desc { 'getpwent' }
3975 sub check { 'ck_null' }
3980 package PLXML::op_spwent;
3982 our @ISA = ('PLXML::baseop');
3984 sub key { 'spwent' }
3985 sub desc { 'setpwent' }
3986 sub check { 'ck_null' }
3991 package PLXML::op_epwent;
3993 our @ISA = ('PLXML::baseop');
3995 sub key { 'epwent' }
3996 sub desc { 'endpwent' }
3997 sub check { 'ck_null' }
4002 package PLXML::op_ggrnam;
4004 our @ISA = ('PLXML::baseop_unop');
4006 sub key { 'ggrnam' }
4007 sub desc { 'getgrnam' }
4008 sub check { 'ck_fun' }
4013 package PLXML::op_ggrgid;
4015 our @ISA = ('PLXML::baseop_unop');
4017 sub key { 'ggrgid' }
4018 sub desc { 'getgrgid' }
4019 sub check { 'ck_fun' }
4024 package PLXML::op_ggrent;
4026 our @ISA = ('PLXML::baseop');
4028 sub key { 'ggrent' }
4029 sub desc { 'getgrent' }
4030 sub check { 'ck_null' }
4035 package PLXML::op_sgrent;
4037 our @ISA = ('PLXML::baseop');
4039 sub key { 'sgrent' }
4040 sub desc { 'setgrent' }
4041 sub check { 'ck_null' }
4046 package PLXML::op_egrent;
4048 our @ISA = ('PLXML::baseop');
4050 sub key { 'egrent' }
4051 sub desc { 'endgrent' }
4052 sub check { 'ck_null' }
4057 package PLXML::op_getlogin;
4059 our @ISA = ('PLXML::baseop');
4061 sub key { 'getlogin' }
4062 sub desc { 'getlogin' }
4063 sub check { 'ck_null' }
4071 package PLXML::op_syscall;
4073 our @ISA = ('PLXML::listop');
4075 sub key { 'syscall' }
4076 sub desc { 'syscall' }
4077 sub check { 'ck_fun' }
4078 sub flags { 'imst@' }
4083 # For multi-threading
4084 package PLXML::op_lock;
4086 our @ISA = ('PLXML::baseop_unop');
4090 sub check { 'ck_rfun' }
4095 package PLXML::op_threadsv;
4097 our @ISA = ('PLXML::baseop');
4099 sub key { 'threadsv' }
4100 sub desc { 'per-thread value' }
4101 sub check { 'ck_null' }
4108 package PLXML::op_setstate;
4110 our @ISA = ('PLXML::cop');
4112 sub key { 'setstate' }
4113 sub desc { 'set statement info' }
4114 sub check { 'ck_null' }
4119 package PLXML::op_method_named;
4121 our @ISA = ('PLXML::padop_svop');
4123 sub key { 'method_named' }
4124 sub desc { 'method with known name' }
4125 sub check { 'ck_null' }
4131 package PLXML::op_dor;
4133 our @ISA = ('PLXML::logop');
4136 sub desc { 'defined or (//)' }
4137 sub check { 'ck_null' }
4142 package PLXML::op_dorassign;
4144 our @ISA = ('PLXML::logop');
4146 sub key { 'dorassign' }
4147 sub desc { 'defined or assignment (//=)' }
4148 sub check { 'ck_null' }
4154 # Add new ops before this, the custom operator.
4156 package PLXML::op_custom;
4158 our @ISA = ('PLXML::baseop');
4160 sub key { 'custom' }
4161 sub desc { 'unknown custom operator' }
4162 sub check { 'ck_null' }