# The restriction on having custom as the last op has been removed
# A recapitulation of the format of this file:
-# The file consists of five columns: the name of the op, an English
-# description, the name of the "check" routine used to optimize this
+# The file consists of five tab-separated columns: the name of the op, an
+# English description, the name of the "check" routine used to optimize this
# operation, some flags, and a description of the operands.
# The flags consist of options followed by a mandatory op class signifier
padhv private hash ck_null d0
padany private value ck_null d0
-pushre push regexp ck_null d/
-
# References and stuff.
rv2gv ref-to-glob cast ck_rvconst ds1
subtract subtraction (-) ck_null IfsT2 S S
i_subtract integer subtraction (-) ck_null ifsT2 S S
concat concatenation (.) or string ck_concat fsT2 S S
+multiconcat concatenation (.) or string ck_null sT+
stringify string ck_stringify fsT@ S
left_shift left bitshift (<<) ck_bitop fsT2 S S
i_le integer le (<=) ck_cmp ifs2 S S<
ge numeric ge (>=) ck_cmp Iifs2 S S<
i_ge integer ge (>=) ck_cmp ifs2 S S<
-eq numeric eq (==) ck_null Iifs2 S S<
-i_eq integer eq (==) ck_null ifs2 S S<
-ne numeric ne (!=) ck_null Iifs2 S S<
-i_ne integer ne (!=) ck_null ifs2 S S<
+eq numeric eq (==) ck_cmp Iifs2 S S<
+i_eq integer eq (==) ck_cmp ifs2 S S<
+ne numeric ne (!=) ck_cmp Iifs2 S S<
+i_ne integer ne (!=) ck_cmp ifs2 S S<
ncmp numeric comparison (<=>) ck_null Iifst2 S S<
i_ncmp integer comparison (<=>) ck_null ifst2 S S<
not not ck_null ifs1 S
complement 1's complement (~) ck_bitop fst1 S
ncomplement numeric 1's complement (~) ck_bitop fsT1 S
-# scomplement uses ck_bitop only for the experimental warning. Once the
-# warning is gone, this can change to ck_null.
-scomplement string 1's complement (~) ck_bitop fsT1 S
+scomplement string 1's complement (~) ck_null fsT1 S
smartmatch smart match ck_smartmatch s2
keys keys ck_each t% H
delete delete ck_delete % S
exists exists ck_exists is% S
-rv2hv hash dereference ck_rvconst d1
+rv2hv hash dereference ck_rvconst dt1
helem hash element ck_null s2 H S
hslice hash slice ck_null m@ H L
kvhslice key/value hash slice ck_null m@ H L
unpack unpack ck_fun u@ S S?
pack pack ck_fun fmst@ S L
-split split ck_split t@ S S S
+split split ck_split t/ S S S
join join or string ck_join fmst@ S L
# List operators.
orassign logical or assignment (||=) ck_null s|
dorassign defined or assignment (//=) ck_null s|
-method method lookup ck_method d.
entersub subroutine entry ck_subr dm1 L
leavesub subroutine exit ck_null 1
leavesublv lvalue subroutine return ck_null 1
dump dump ck_null ds}
goto goto ck_null s}
exit exit ck_fun s% S?
+method method lookup ck_method d.
method_named method with known name ck_null d.
method_super super with known name ck_null d.
method_redir redirect method with known name ck_null d.
getpeername getpeername ck_fun is% Fs
# Stat calls. OP_IS_FILETEST wants them consecutive.
+# Also needs to match OP_IS_STAT() in op.h
lstat lstat ck_ftst u- F?
stat stat ck_ftst u- F?
lvrefslice lvalue ref assignment ck_null d@
lvavref lvalue array reference ck_null d%
anonconst anonymous constant ck_null ds1
+
+isa derived class test ck_isa s2
+
+cmpchain_and comparison chaining ck_null |
+cmpchain_dup comparand shuffling ck_null 1
+
+entertrycatch try {block} ck_trycatch |
+leavetrycatch try {block} exit ck_null @
+poptry pop try ck_null @
+catch catch {} block ck_null |
+pushdefer push defer {} block ck_null |