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@' }
2517 package PLXML::op_sysopen;
2519 our @ISA = ('PLXML::listop');
2521 sub key { 'sysopen' }
2522 sub desc { 'sysopen' }
2523 sub check { 'ck_fun' }
2525 sub args { 'F S S S?' }
2528 package PLXML::op_sysseek;
2530 our @ISA = ('PLXML::listop');
2532 sub key { 'sysseek' }
2533 sub desc { 'sysseek' }
2534 sub check { 'ck_fun' }
2536 sub args { 'F S S' }
2539 package PLXML::op_sysread;
2541 our @ISA = ('PLXML::listop');
2543 sub key { 'sysread' }
2544 sub desc { 'sysread' }
2545 sub check { 'ck_fun' }
2546 sub flags { 'imst@' }
2547 sub args { 'F R S S?' }
2550 package PLXML::op_syswrite;
2552 our @ISA = ('PLXML::listop');
2554 sub key { 'syswrite' }
2555 sub desc { 'syswrite' }
2556 sub check { 'ck_fun' }
2557 sub flags { 'imst@' }
2558 sub args { 'F S S? S?' }
2562 package PLXML::op_send;
2564 our @ISA = ('PLXML::listop');
2568 sub check { 'ck_fun' }
2569 sub flags { 'imst@' }
2570 sub args { 'Fs S S S?' }
2573 package PLXML::op_recv;
2575 our @ISA = ('PLXML::listop');
2579 sub check { 'ck_fun' }
2580 sub flags { 'imst@' }
2581 sub args { 'Fs R S S' }
2585 package PLXML::op_eof;
2587 our @ISA = ('PLXML::baseop_unop');
2591 sub check { 'ck_eof' }
2596 package PLXML::op_tell;
2598 our @ISA = ('PLXML::baseop_unop');
2602 sub check { 'ck_fun' }
2607 package PLXML::op_seek;
2609 our @ISA = ('PLXML::listop');
2613 sub check { 'ck_fun' }
2615 sub args { 'F S S' }
2618 # truncate really behaves as if it had both "S S" and "F S"
2619 package PLXML::op_truncate;
2621 our @ISA = ('PLXML::listop');
2623 sub key { 'truncate' }
2624 sub desc { 'truncate' }
2625 sub check { 'ck_trunc' }
2631 package PLXML::op_fcntl;
2633 our @ISA = ('PLXML::listop');
2636 sub desc { 'fcntl' }
2637 sub check { 'ck_fun' }
2639 sub args { 'F S S' }
2642 package PLXML::op_ioctl;
2644 our @ISA = ('PLXML::listop');
2647 sub desc { 'ioctl' }
2648 sub check { 'ck_fun' }
2650 sub args { 'F S S' }
2653 package PLXML::op_flock;
2655 our @ISA = ('PLXML::listop');
2658 sub desc { 'flock' }
2659 sub check { 'ck_fun' }
2660 sub flags { 'isT@' }
2667 package PLXML::op_socket;
2669 our @ISA = ('PLXML::listop');
2671 sub key { 'socket' }
2672 sub desc { 'socket' }
2673 sub check { 'ck_fun' }
2675 sub args { 'Fs S S S' }
2678 package PLXML::op_sockpair;
2680 our @ISA = ('PLXML::listop');
2682 sub key { 'sockpair' }
2683 sub desc { 'socketpair' }
2684 sub check { 'ck_fun' }
2686 sub args { 'Fs Fs S S S' }
2690 package PLXML::op_bind;
2692 our @ISA = ('PLXML::listop');
2696 sub check { 'ck_fun' }
2701 package PLXML::op_connect;
2703 our @ISA = ('PLXML::listop');
2705 sub key { 'connect' }
2706 sub desc { 'connect' }
2707 sub check { 'ck_fun' }
2712 package PLXML::op_listen;
2714 our @ISA = ('PLXML::listop');
2716 sub key { 'listen' }
2717 sub desc { 'listen' }
2718 sub check { 'ck_fun' }
2723 package PLXML::op_accept;
2725 our @ISA = ('PLXML::listop');
2727 sub key { 'accept' }
2728 sub desc { 'accept' }
2729 sub check { 'ck_fun' }
2730 sub flags { 'ist@' }
2731 sub args { 'Fs Fs' }
2734 package PLXML::op_shutdown;
2736 our @ISA = ('PLXML::listop');
2738 sub key { 'shutdown' }
2739 sub desc { 'shutdown' }
2740 sub check { 'ck_fun' }
2741 sub flags { 'ist@' }
2746 package PLXML::op_gsockopt;
2748 our @ISA = ('PLXML::listop');
2750 sub key { 'gsockopt' }
2751 sub desc { 'getsockopt' }
2752 sub check { 'ck_fun' }
2754 sub args { 'Fs S S' }
2757 package PLXML::op_ssockopt;
2759 our @ISA = ('PLXML::listop');
2761 sub key { 'ssockopt' }
2762 sub desc { 'setsockopt' }
2763 sub check { 'ck_fun' }
2765 sub args { 'Fs S S S' }
2769 package PLXML::op_getsockname;
2771 our @ISA = ('PLXML::baseop_unop');
2773 sub key { 'getsockname' }
2774 sub desc { 'getsockname' }
2775 sub check { 'ck_fun' }
2780 package PLXML::op_getpeername;
2782 our @ISA = ('PLXML::baseop_unop');
2784 sub key { 'getpeername' }
2785 sub desc { 'getpeername' }
2786 sub check { 'ck_fun' }
2794 package PLXML::op_lstat;
2796 our @ISA = ('PLXML::filestatop');
2799 sub desc { 'lstat' }
2800 sub check { 'ck_ftst' }
2805 package PLXML::op_stat;
2807 our @ISA = ('PLXML::filestatop');
2811 sub check { 'ck_ftst' }
2816 package PLXML::op_ftrread;
2818 our @ISA = ('PLXML::filestatop');
2820 sub key { 'ftrread' }
2822 sub check { 'ck_ftst' }
2823 sub flags { 'isu-' }
2827 package PLXML::op_ftrwrite;
2829 our @ISA = ('PLXML::filestatop');
2831 sub key { 'ftrwrite' }
2833 sub check { 'ck_ftst' }
2834 sub flags { 'isu-' }
2838 package PLXML::op_ftrexec;
2840 our @ISA = ('PLXML::filestatop');
2842 sub key { 'ftrexec' }
2844 sub check { 'ck_ftst' }
2845 sub flags { 'isu-' }
2849 package PLXML::op_fteread;
2851 our @ISA = ('PLXML::filestatop');
2853 sub key { 'fteread' }
2855 sub check { 'ck_ftst' }
2856 sub flags { 'isu-' }
2860 package PLXML::op_ftewrite;
2862 our @ISA = ('PLXML::filestatop');
2864 sub key { 'ftewrite' }
2866 sub check { 'ck_ftst' }
2867 sub flags { 'isu-' }
2871 package PLXML::op_fteexec;
2873 our @ISA = ('PLXML::filestatop');
2875 sub key { 'fteexec' }
2877 sub check { 'ck_ftst' }
2878 sub flags { 'isu-' }
2882 package PLXML::op_ftis;
2884 our @ISA = ('PLXML::filestatop');
2888 sub check { 'ck_ftst' }
2889 sub flags { 'isu-' }
2893 package PLXML::op_fteowned;
2895 our @ISA = ('PLXML::filestatop');
2897 sub key { 'fteowned' }
2899 sub check { 'ck_ftst' }
2900 sub flags { 'isu-' }
2904 package PLXML::op_ftrowned;
2906 our @ISA = ('PLXML::filestatop');
2908 sub key { 'ftrowned' }
2910 sub check { 'ck_ftst' }
2911 sub flags { 'isu-' }
2915 package PLXML::op_ftzero;
2917 our @ISA = ('PLXML::filestatop');
2919 sub key { 'ftzero' }
2921 sub check { 'ck_ftst' }
2922 sub flags { 'isu-' }
2926 package PLXML::op_ftsize;
2928 our @ISA = ('PLXML::filestatop');
2930 sub key { 'ftsize' }
2932 sub check { 'ck_ftst' }
2933 sub flags { 'istu-' }
2937 package PLXML::op_ftmtime;
2939 our @ISA = ('PLXML::filestatop');
2941 sub key { 'ftmtime' }
2943 sub check { 'ck_ftst' }
2944 sub flags { 'stu-' }
2948 package PLXML::op_ftatime;
2950 our @ISA = ('PLXML::filestatop');
2952 sub key { 'ftatime' }
2954 sub check { 'ck_ftst' }
2955 sub flags { 'stu-' }
2959 package PLXML::op_ftctime;
2961 our @ISA = ('PLXML::filestatop');
2963 sub key { 'ftctime' }
2965 sub check { 'ck_ftst' }
2966 sub flags { 'stu-' }
2970 package PLXML::op_ftsock;
2972 our @ISA = ('PLXML::filestatop');
2974 sub key { 'ftsock' }
2976 sub check { 'ck_ftst' }
2977 sub flags { 'isu-' }
2981 package PLXML::op_ftchr;
2983 our @ISA = ('PLXML::filestatop');
2987 sub check { 'ck_ftst' }
2988 sub flags { 'isu-' }
2992 package PLXML::op_ftblk;
2994 our @ISA = ('PLXML::filestatop');
2998 sub check { 'ck_ftst' }
2999 sub flags { 'isu-' }
3003 package PLXML::op_ftfile;
3005 our @ISA = ('PLXML::filestatop');
3007 sub key { 'ftfile' }
3009 sub check { 'ck_ftst' }
3010 sub flags { 'isu-' }
3014 package PLXML::op_ftdir;
3016 our @ISA = ('PLXML::filestatop');
3020 sub check { 'ck_ftst' }
3021 sub flags { 'isu-' }
3025 package PLXML::op_ftpipe;
3027 our @ISA = ('PLXML::filestatop');
3029 sub key { 'ftpipe' }
3031 sub check { 'ck_ftst' }
3032 sub flags { 'isu-' }
3036 package PLXML::op_ftlink;
3038 our @ISA = ('PLXML::filestatop');
3040 sub key { 'ftlink' }
3042 sub check { 'ck_ftst' }
3043 sub flags { 'isu-' }
3047 package PLXML::op_ftsuid;
3049 our @ISA = ('PLXML::filestatop');
3051 sub key { 'ftsuid' }
3053 sub check { 'ck_ftst' }
3054 sub flags { 'isu-' }
3058 package PLXML::op_ftsgid;
3060 our @ISA = ('PLXML::filestatop');
3062 sub key { 'ftsgid' }
3064 sub check { 'ck_ftst' }
3065 sub flags { 'isu-' }
3069 package PLXML::op_ftsvtx;
3071 our @ISA = ('PLXML::filestatop');
3073 sub key { 'ftsvtx' }
3075 sub check { 'ck_ftst' }
3076 sub flags { 'isu-' }
3080 package PLXML::op_fttty;
3082 our @ISA = ('PLXML::filestatop');
3086 sub check { 'ck_ftst' }
3091 package PLXML::op_fttext;
3093 our @ISA = ('PLXML::filestatop');
3095 sub key { 'fttext' }
3097 sub check { 'ck_ftst' }
3098 sub flags { 'isu-' }
3102 package PLXML::op_ftbinary;
3104 our @ISA = ('PLXML::filestatop');
3106 sub key { 'ftbinary' }
3108 sub check { 'ck_ftst' }
3109 sub flags { 'isu-' }
3116 package PLXML::op_chdir;
3118 our @ISA = ('PLXML::baseop_unop');
3121 sub desc { 'chdir' }
3122 sub check { 'ck_fun' }
3123 sub flags { 'isT%' }
3127 package PLXML::op_chown;
3129 our @ISA = ('PLXML::listop');
3132 sub desc { 'chown' }
3133 sub check { 'ck_fun' }
3134 sub flags { 'imsT@' }
3138 package PLXML::op_chroot;
3140 our @ISA = ('PLXML::baseop_unop');
3142 sub key { 'chroot' }
3143 sub desc { 'chroot' }
3144 sub check { 'ck_fun' }
3145 sub flags { 'isTu%' }
3149 package PLXML::op_unlink;
3151 our @ISA = ('PLXML::listop');
3153 sub key { 'unlink' }
3154 sub desc { 'unlink' }
3155 sub check { 'ck_fun' }
3156 sub flags { 'imsTu@' }
3160 package PLXML::op_chmod;
3162 our @ISA = ('PLXML::listop');
3165 sub desc { 'chmod' }
3166 sub check { 'ck_fun' }
3167 sub flags { 'imsT@' }
3171 package PLXML::op_utime;
3173 our @ISA = ('PLXML::listop');
3176 sub desc { 'utime' }
3177 sub check { 'ck_fun' }
3178 sub flags { 'imsT@' }
3182 package PLXML::op_rename;
3184 our @ISA = ('PLXML::listop');
3186 sub key { 'rename' }
3187 sub desc { 'rename' }
3188 sub check { 'ck_fun' }
3189 sub flags { 'isT@' }
3193 package PLXML::op_link;
3195 our @ISA = ('PLXML::listop');
3199 sub check { 'ck_fun' }
3200 sub flags { 'isT@' }
3204 package PLXML::op_symlink;
3206 our @ISA = ('PLXML::listop');
3208 sub key { 'symlink' }
3209 sub desc { 'symlink' }
3210 sub check { 'ck_fun' }
3211 sub flags { 'isT@' }
3215 package PLXML::op_readlink;
3217 our @ISA = ('PLXML::baseop_unop');
3219 sub key { 'readlink' }
3220 sub desc { 'readlink' }
3221 sub check { 'ck_fun' }
3222 sub flags { 'stu%' }
3226 package PLXML::op_mkdir;
3228 our @ISA = ('PLXML::listop');
3231 sub desc { 'mkdir' }
3232 sub check { 'ck_fun' }
3233 sub flags { 'isT@' }
3237 package PLXML::op_rmdir;
3239 our @ISA = ('PLXML::baseop_unop');
3242 sub desc { 'rmdir' }
3243 sub check { 'ck_fun' }
3244 sub flags { 'isTu%' }
3251 package PLXML::op_open_dir;
3253 our @ISA = ('PLXML::listop');
3255 sub key { 'open_dir' }
3256 sub desc { 'opendir' }
3257 sub check { 'ck_fun' }
3262 package PLXML::op_readdir;
3264 our @ISA = ('PLXML::baseop_unop');
3266 sub key { 'readdir' }
3267 sub desc { 'readdir' }
3268 sub check { 'ck_fun' }
3273 package PLXML::op_telldir;
3275 our @ISA = ('PLXML::baseop_unop');
3277 sub key { 'telldir' }
3278 sub desc { 'telldir' }
3279 sub check { 'ck_fun' }
3284 package PLXML::op_seekdir;
3286 our @ISA = ('PLXML::listop');
3288 sub key { 'seekdir' }
3289 sub desc { 'seekdir' }
3290 sub check { 'ck_fun' }
3295 package PLXML::op_rewinddir;
3297 our @ISA = ('PLXML::baseop_unop');
3299 sub key { 'rewinddir' }
3300 sub desc { 'rewinddir' }
3301 sub check { 'ck_fun' }
3306 package PLXML::op_closedir;
3308 our @ISA = ('PLXML::baseop_unop');
3310 sub key { 'closedir' }
3311 sub desc { 'closedir' }
3312 sub check { 'ck_fun' }
3320 package PLXML::op_fork;
3322 our @ISA = ('PLXML::baseop');
3326 sub check { 'ck_null' }
3327 sub flags { 'ist0' }
3331 package PLXML::op_wait;
3333 our @ISA = ('PLXML::baseop');
3337 sub check { 'ck_null' }
3338 sub flags { 'isT0' }
3342 package PLXML::op_waitpid;
3344 our @ISA = ('PLXML::listop');
3346 sub key { 'waitpid' }
3347 sub desc { 'waitpid' }
3348 sub check { 'ck_fun' }
3349 sub flags { 'isT@' }
3353 package PLXML::op_system;
3355 our @ISA = ('PLXML::listop');
3357 sub key { 'system' }
3358 sub desc { 'system' }
3359 sub check { 'ck_exec' }
3360 sub flags { 'imsT@' }
3364 package PLXML::op_exec;
3366 our @ISA = ('PLXML::listop');
3370 sub check { 'ck_exec' }
3371 sub flags { 'dimsT@' }
3375 package PLXML::op_kill;
3377 our @ISA = ('PLXML::listop');
3381 sub check { 'ck_fun' }
3382 sub flags { 'dimsT@' }
3386 package PLXML::op_getppid;
3388 our @ISA = ('PLXML::baseop');
3390 sub key { 'getppid' }
3391 sub desc { 'getppid' }
3392 sub check { 'ck_null' }
3393 sub flags { 'isT0' }
3397 package PLXML::op_getpgrp;
3399 our @ISA = ('PLXML::baseop_unop');
3401 sub key { 'getpgrp' }
3402 sub desc { 'getpgrp' }
3403 sub check { 'ck_fun' }
3404 sub flags { 'isT%' }
3408 package PLXML::op_setpgrp;
3410 our @ISA = ('PLXML::listop');
3412 sub key { 'setpgrp' }
3413 sub desc { 'setpgrp' }
3414 sub check { 'ck_fun' }
3415 sub flags { 'isT@' }
3416 sub args { 'S? S?' }
3419 package PLXML::op_getpriority;
3421 our @ISA = ('PLXML::listop');
3423 sub key { 'getpriority' }
3424 sub desc { 'getpriority' }
3425 sub check { 'ck_fun' }
3426 sub flags { 'isT@' }
3430 package PLXML::op_setpriority;
3432 our @ISA = ('PLXML::listop');
3434 sub key { 'setpriority' }
3435 sub desc { 'setpriority' }
3436 sub check { 'ck_fun' }
3437 sub flags { 'isT@' }
3438 sub args { 'S S S' }
3444 # NOTE: MacOS patches the 'i' of time() away later when the interpreter
3445 # is created because in MacOS time() is already returning times > 2**31-1,
3446 # that is, non-integers.
3448 package PLXML::op_time;
3450 our @ISA = ('PLXML::baseop');
3454 sub check { 'ck_null' }
3455 sub flags { 'isT0' }
3459 package PLXML::op_tms;
3461 our @ISA = ('PLXML::baseop');
3464 sub desc { 'times' }
3465 sub check { 'ck_null' }
3470 package PLXML::op_localtime;
3472 our @ISA = ('PLXML::baseop_unop');
3474 sub key { 'localtime' }
3475 sub desc { 'localtime' }
3476 sub check { 'ck_fun' }
3481 package PLXML::op_gmtime;
3483 our @ISA = ('PLXML::baseop_unop');
3485 sub key { 'gmtime' }
3486 sub desc { 'gmtime' }
3487 sub check { 'ck_fun' }
3492 package PLXML::op_alarm;
3494 our @ISA = ('PLXML::baseop_unop');
3497 sub desc { 'alarm' }
3498 sub check { 'ck_fun' }
3499 sub flags { 'istu%' }
3503 package PLXML::op_sleep;
3505 our @ISA = ('PLXML::baseop_unop');
3508 sub desc { 'sleep' }
3509 sub check { 'ck_fun' }
3510 sub flags { 'isT%' }
3517 package PLXML::op_shmget;
3519 our @ISA = ('PLXML::listop');
3521 sub key { 'shmget' }
3522 sub desc { 'shmget' }
3523 sub check { 'ck_fun' }
3524 sub flags { 'imst@' }
3525 sub args { 'S S S' }
3528 package PLXML::op_shmctl;
3530 our @ISA = ('PLXML::listop');
3532 sub key { 'shmctl' }
3533 sub desc { 'shmctl' }
3534 sub check { 'ck_fun' }
3535 sub flags { 'imst@' }
3536 sub args { 'S S S' }
3539 package PLXML::op_shmread;
3541 our @ISA = ('PLXML::listop');
3543 sub key { 'shmread' }
3544 sub desc { 'shmread' }
3545 sub check { 'ck_fun' }
3546 sub flags { 'imst@' }
3547 sub args { 'S S S S' }
3550 package PLXML::op_shmwrite;
3552 our @ISA = ('PLXML::listop');
3554 sub key { 'shmwrite' }
3555 sub desc { 'shmwrite' }
3556 sub check { 'ck_fun' }
3557 sub flags { 'imst@' }
3558 sub args { 'S S S S' }
3564 package PLXML::op_msgget;
3566 our @ISA = ('PLXML::listop');
3568 sub key { 'msgget' }
3569 sub desc { 'msgget' }
3570 sub check { 'ck_fun' }
3571 sub flags { 'imst@' }
3575 package PLXML::op_msgctl;
3577 our @ISA = ('PLXML::listop');
3579 sub key { 'msgctl' }
3580 sub desc { 'msgctl' }
3581 sub check { 'ck_fun' }
3582 sub flags { 'imst@' }
3583 sub args { 'S S S' }
3586 package PLXML::op_msgsnd;
3588 our @ISA = ('PLXML::listop');
3590 sub key { 'msgsnd' }
3591 sub desc { 'msgsnd' }
3592 sub check { 'ck_fun' }
3593 sub flags { 'imst@' }
3594 sub args { 'S S S' }
3597 package PLXML::op_msgrcv;
3599 our @ISA = ('PLXML::listop');
3601 sub key { 'msgrcv' }
3602 sub desc { 'msgrcv' }
3603 sub check { 'ck_fun' }
3604 sub flags { 'imst@' }
3605 sub args { 'S S S S S' }
3611 package PLXML::op_semget;
3613 our @ISA = ('PLXML::listop');
3615 sub key { 'semget' }
3616 sub desc { 'semget' }
3617 sub check { 'ck_fun' }
3618 sub flags { 'imst@' }
3619 sub args { 'S S S' }
3622 package PLXML::op_semctl;
3624 our @ISA = ('PLXML::listop');
3626 sub key { 'semctl' }
3627 sub desc { 'semctl' }
3628 sub check { 'ck_fun' }
3629 sub flags { 'imst@' }
3630 sub args { 'S S S S' }
3633 package PLXML::op_semop;
3635 our @ISA = ('PLXML::listop');
3638 sub desc { 'semop' }
3639 sub check { 'ck_fun' }
3640 sub flags { 'imst@' }
3647 package PLXML::op_require;
3649 our @ISA = ('PLXML::baseop_unop');
3651 sub key { 'require' }
3652 sub desc { 'require' }
3653 sub check { 'ck_require' }
3658 package PLXML::op_dofile;
3660 our @ISA = ('PLXML::unop');
3662 sub key { 'dofile' }
3663 sub desc { 'do "file"' }
3664 sub check { 'ck_fun' }
3669 package PLXML::op_entereval;
3671 our @ISA = ('PLXML::baseop_unop');
3673 sub key { 'entereval' }
3674 sub desc { 'eval "string"' }
3675 sub check { 'ck_eval' }
3680 package PLXML::op_leaveeval;
3682 our @ISA = ('PLXML::unop');
3684 sub key { 'leaveeval' }
3685 sub desc { 'eval "string" exit' }
3686 sub check { 'ck_null' }
3691 #evalonce eval constant string ck_null d1 S
3692 package PLXML::op_entertry;
3694 our @ISA = ('PLXML::logop');
3696 sub key { 'entertry' }
3697 sub desc { 'eval {block}' }
3698 sub check { 'ck_null' }
3703 package PLXML::op_leavetry;
3705 our @ISA = ('PLXML::listop');
3707 sub key { 'leavetry' }
3708 sub desc { 'eval {block} exit' }
3709 sub check { 'ck_null' }
3717 package PLXML::op_ghbyname;
3719 our @ISA = ('PLXML::baseop_unop');
3721 sub key { 'ghbyname' }
3722 sub desc { 'gethostbyname' }
3723 sub check { 'ck_fun' }
3728 package PLXML::op_ghbyaddr;
3730 our @ISA = ('PLXML::listop');
3732 sub key { 'ghbyaddr' }
3733 sub desc { 'gethostbyaddr' }
3734 sub check { 'ck_fun' }
3739 package PLXML::op_ghostent;
3741 our @ISA = ('PLXML::baseop');
3743 sub key { 'ghostent' }
3744 sub desc { 'gethostent' }
3745 sub check { 'ck_null' }
3750 package PLXML::op_gnbyname;
3752 our @ISA = ('PLXML::baseop_unop');
3754 sub key { 'gnbyname' }
3755 sub desc { 'getnetbyname' }
3756 sub check { 'ck_fun' }
3761 package PLXML::op_gnbyaddr;
3763 our @ISA = ('PLXML::listop');
3765 sub key { 'gnbyaddr' }
3766 sub desc { 'getnetbyaddr' }
3767 sub check { 'ck_fun' }
3772 package PLXML::op_gnetent;
3774 our @ISA = ('PLXML::baseop');
3776 sub key { 'gnetent' }
3777 sub desc { 'getnetent' }
3778 sub check { 'ck_null' }
3783 package PLXML::op_gpbyname;
3785 our @ISA = ('PLXML::baseop_unop');
3787 sub key { 'gpbyname' }
3788 sub desc { 'getprotobyname' }
3789 sub check { 'ck_fun' }
3794 package PLXML::op_gpbynumber;
3796 our @ISA = ('PLXML::listop');
3798 sub key { 'gpbynumber' }
3799 sub desc { 'getprotobynumber' }
3800 sub check { 'ck_fun' }
3805 package PLXML::op_gprotoent;
3807 our @ISA = ('PLXML::baseop');
3809 sub key { 'gprotoent' }
3810 sub desc { 'getprotoent' }
3811 sub check { 'ck_null' }
3816 package PLXML::op_gsbyname;
3818 our @ISA = ('PLXML::listop');
3820 sub key { 'gsbyname' }
3821 sub desc { 'getservbyname' }
3822 sub check { 'ck_fun' }
3827 package PLXML::op_gsbyport;
3829 our @ISA = ('PLXML::listop');
3831 sub key { 'gsbyport' }
3832 sub desc { 'getservbyport' }
3833 sub check { 'ck_fun' }
3838 package PLXML::op_gservent;
3840 our @ISA = ('PLXML::baseop');
3842 sub key { 'gservent' }
3843 sub desc { 'getservent' }
3844 sub check { 'ck_null' }
3849 package PLXML::op_shostent;
3851 our @ISA = ('PLXML::baseop_unop');
3853 sub key { 'shostent' }
3854 sub desc { 'sethostent' }
3855 sub check { 'ck_fun' }
3860 package PLXML::op_snetent;
3862 our @ISA = ('PLXML::baseop_unop');
3864 sub key { 'snetent' }
3865 sub desc { 'setnetent' }
3866 sub check { 'ck_fun' }
3871 package PLXML::op_sprotoent;
3873 our @ISA = ('PLXML::baseop_unop');
3875 sub key { 'sprotoent' }
3876 sub desc { 'setprotoent' }
3877 sub check { 'ck_fun' }
3882 package PLXML::op_sservent;
3884 our @ISA = ('PLXML::baseop_unop');
3886 sub key { 'sservent' }
3887 sub desc { 'setservent' }
3888 sub check { 'ck_fun' }
3893 package PLXML::op_ehostent;
3895 our @ISA = ('PLXML::baseop');
3897 sub key { 'ehostent' }
3898 sub desc { 'endhostent' }
3899 sub check { 'ck_null' }
3904 package PLXML::op_enetent;
3906 our @ISA = ('PLXML::baseop');
3908 sub key { 'enetent' }
3909 sub desc { 'endnetent' }
3910 sub check { 'ck_null' }
3915 package PLXML::op_eprotoent;
3917 our @ISA = ('PLXML::baseop');
3919 sub key { 'eprotoent' }
3920 sub desc { 'endprotoent' }
3921 sub check { 'ck_null' }
3926 package PLXML::op_eservent;
3928 our @ISA = ('PLXML::baseop');
3930 sub key { 'eservent' }
3931 sub desc { 'endservent' }
3932 sub check { 'ck_null' }
3937 package PLXML::op_gpwnam;
3939 our @ISA = ('PLXML::baseop_unop');
3941 sub key { 'gpwnam' }
3942 sub desc { 'getpwnam' }
3943 sub check { 'ck_fun' }
3948 package PLXML::op_gpwuid;
3950 our @ISA = ('PLXML::baseop_unop');
3952 sub key { 'gpwuid' }
3953 sub desc { 'getpwuid' }
3954 sub check { 'ck_fun' }
3959 package PLXML::op_gpwent;
3961 our @ISA = ('PLXML::baseop');
3963 sub key { 'gpwent' }
3964 sub desc { 'getpwent' }
3965 sub check { 'ck_null' }
3970 package PLXML::op_spwent;
3972 our @ISA = ('PLXML::baseop');
3974 sub key { 'spwent' }
3975 sub desc { 'setpwent' }
3976 sub check { 'ck_null' }
3981 package PLXML::op_epwent;
3983 our @ISA = ('PLXML::baseop');
3985 sub key { 'epwent' }
3986 sub desc { 'endpwent' }
3987 sub check { 'ck_null' }
3992 package PLXML::op_ggrnam;
3994 our @ISA = ('PLXML::baseop_unop');
3996 sub key { 'ggrnam' }
3997 sub desc { 'getgrnam' }
3998 sub check { 'ck_fun' }
4003 package PLXML::op_ggrgid;
4005 our @ISA = ('PLXML::baseop_unop');
4007 sub key { 'ggrgid' }
4008 sub desc { 'getgrgid' }
4009 sub check { 'ck_fun' }
4014 package PLXML::op_ggrent;
4016 our @ISA = ('PLXML::baseop');
4018 sub key { 'ggrent' }
4019 sub desc { 'getgrent' }
4020 sub check { 'ck_null' }
4025 package PLXML::op_sgrent;
4027 our @ISA = ('PLXML::baseop');
4029 sub key { 'sgrent' }
4030 sub desc { 'setgrent' }
4031 sub check { 'ck_null' }
4036 package PLXML::op_egrent;
4038 our @ISA = ('PLXML::baseop');
4040 sub key { 'egrent' }
4041 sub desc { 'endgrent' }
4042 sub check { 'ck_null' }
4047 package PLXML::op_getlogin;
4049 our @ISA = ('PLXML::baseop');
4051 sub key { 'getlogin' }
4052 sub desc { 'getlogin' }
4053 sub check { 'ck_null' }
4061 package PLXML::op_syscall;
4063 our @ISA = ('PLXML::listop');
4065 sub key { 'syscall' }
4066 sub desc { 'syscall' }
4067 sub check { 'ck_fun' }
4068 sub flags { 'imst@' }
4073 # For multi-threading
4074 package PLXML::op_lock;
4076 our @ISA = ('PLXML::baseop_unop');
4080 sub check { 'ck_rfun' }
4085 package PLXML::op_threadsv;
4087 our @ISA = ('PLXML::baseop');
4089 sub key { 'threadsv' }
4090 sub desc { 'per-thread value' }
4091 sub check { 'ck_null' }
4098 package PLXML::op_setstate;
4100 our @ISA = ('PLXML::cop');
4102 sub key { 'setstate' }
4103 sub desc { 'set statement info' }
4104 sub check { 'ck_null' }
4109 package PLXML::op_method_named;
4111 our @ISA = ('PLXML::padop_svop');
4113 sub key { 'method_named' }
4114 sub desc { 'method with known name' }
4115 sub check { 'ck_null' }
4121 package PLXML::op_dor;
4123 our @ISA = ('PLXML::logop');
4126 sub desc { 'defined or (//)' }
4127 sub check { 'ck_null' }
4132 package PLXML::op_dorassign;
4134 our @ISA = ('PLXML::logop');
4136 sub key { 'dorassign' }
4137 sub desc { 'defined or assignment (//=)' }
4138 sub check { 'ck_null' }
4144 # Add new ops before this, the custom operator.
4146 package PLXML::op_custom;
4148 our @ISA = ('PLXML::baseop');
4150 sub key { 'custom' }
4151 sub desc { 'unknown custom operator' }
4152 sub check { 'ck_null' }