This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Create `defer` syntax and `OP_PUSHDEFER` opcode
[perl5.git] / regen / opcodes
index 6ad9c62..0192f1c 100644 (file)
@@ -2,8 +2,8 @@
 # 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
@@ -57,8 +57,6 @@ padav         private array           ck_null         d0
 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     
@@ -133,6 +131,7 @@ i_add               integer addition (+)    ck_null         ifsT2   S S
 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
@@ -146,10 +145,10 @@ le                numeric le (<=)         ck_cmp          Iifs2   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<
 
@@ -176,9 +175,7 @@ i_negate    integer negation (-)    ck_null         ifst1   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
 
@@ -240,7 +237,7 @@ values              values                  ck_each         dt%     H
 keys           keys                    ck_each         t%      H
 delete         delete                  ck_delete       %       S
 exists         exists                  ck_exists       is%     S
-rv2hv          hash dereference        ck_rvconst      d     
+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
@@ -253,7 +250,7 @@ multideref  array or hash lookup    ck_null         ds+
 
 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.
@@ -294,7 +291,6 @@ andassign   logical and assignment (&&=)    ck_null         s|
 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       
@@ -324,6 +320,7 @@ redo                redo                    ck_null         s}
 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.
@@ -400,6 +397,7 @@ getsockname getsockname             ck_fun          is%     Fs
 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?
@@ -574,3 +572,14 @@ lvref              lvalue ref assignment   ck_null         d%
 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         |