This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
use LOOP struct for entergiven op
[perl5.git] / regen / opcodes
index ef418a5..b60eda0 100644 (file)
@@ -14,6 +14,7 @@
 # padop/svop  - $            padop    - # (unused)   loop       - {
 # baseop/unop - %            loopexop - }            filestatop - -
 # pvop/svop   - "            cop      - ;            methop     - .
+# unop_aux    - +
 
 # Other options are:
 #   needs stack mark                    - m  (OA_MARK)
@@ -30,7 +31,7 @@
 # scalar      - S            list     - L            array     - A
 # hash        - H            sub (CV) - C            file      - F
 # socket      - Fs           filetest - F-           filetest_access - F-+
-# num-compare - S<           dirhandle - DF
+# num-compare - S<           dirhandle - DF          infix bitwise   - S|
 
 # reference - R
 # "?" denotes an optional operand.
@@ -50,14 +51,12 @@ const               constant item           ck_svconst      s$
 
 gvsv           scalar variable         ck_null         ds$     
 gv             glob value              ck_null         ds$     
-gelem          glob elem               ck_null         d     S S
+gelem          glob elem               ck_null         ds2     S S
 padsv          private variable        ck_null         ds0
 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     
@@ -65,7 +64,7 @@ rv2sv         scalar dereference      ck_rvconst      ds1
 av2arylen      array length            ck_null         is1     
 rv2cv          subroutine dereference  ck_rvconst      d1
 anoncode       anonymous subroutine    ck_anoncode     s$      
-prototype      subroutine prototype    ck_null         s%      S
+prototype      subroutine prototype    ck_prototype    su%     S?
 refgen         reference constructor   ck_spair        m1      L
 srefgen                single ref constructor  ck_null         fs1     S
 ref            reference-type operator ck_fun          stu%    S?
@@ -93,9 +92,8 @@ trans         transliteration (tr///) ck_match        is"     S
 transr         transliteration (tr///) ck_match        is"     S
 
 # Lvalue operators.
-# sassign is special-cased for op class
 
-sassign                scalar assignment       ck_sassign      s0
+sassign                scalar assignment       ck_sassign      s2      S S
 aassign                list assignment         ck_null         t2      L L
 
 chop           chop                    ck_spair        mts%    L
@@ -111,10 +109,10 @@ preinc            preincrement (++)               ck_lfun         dIs1    S
 i_preinc       integer preincrement (++)       ck_lfun         dis1    S
 predec         predecrement (--)               ck_lfun         dIs1    S
 i_predec       integer predecrement (--)       ck_lfun         dis1    S
-postinc                postincrement (++)              ck_lfun         IsT1    S
-i_postinc      integer postincrement (++)      ck_lfun         isT1    S
-postdec                postdecrement (--)              ck_lfun         IsT1    S
-i_postdec      integer postdecrement (--)      ck_lfun         isT1    S
+postinc                postincrement (++)              ck_lfun         Ist1    S
+i_postinc      integer postincrement (++)      ck_lfun         ist1    S
+postdec                postdecrement (--)              ck_lfun         Ist1    S
+i_postdec      integer postdecrement (--)      ck_lfun         ist1    S
 
 # Ordinary operators.
 
@@ -126,13 +124,14 @@ divide            division (/)            ck_null         IfsT2   S S
 i_divide       integer division (/)    ck_null         ifsT2   S S
 modulo         modulus (%)             ck_null         IifsT2  S S
 i_modulo       integer modulus (%)     ck_null         ifsT2   S S
-repeat         repeat (x)              ck_repeat       fmT2    L S
+repeat         repeat (x)              ck_repeat       fmt2    L S
 
 add            addition (+)            ck_null         IfsT2   S S
 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<
 
@@ -161,16 +160,26 @@ seq               string eq               ck_null         ifs2    S S
 sne            string ne               ck_null         ifs2    S S
 scmp           string comparison (cmp) ck_null         ifst2   S S
 
-bit_and                bitwise and (&)         ck_bitop        fst2    S S
-bit_xor                bitwise xor (^)         ck_bitop        fst2    S S
-bit_or         bitwise or (|)          ck_bitop        fst2    S S
+bit_and                bitwise and (&)         ck_bitop        fst2    S S|
+bit_xor                bitwise xor (^)         ck_bitop        fst2    S S|
+bit_or         bitwise or (|)          ck_bitop        fst2    S S|
+nbit_and       numeric bitwise and (&) ck_bitop        fsT2    S S|
+nbit_xor       numeric bitwise xor (^) ck_bitop        fsT2    S S|
+nbit_or                numeric bitwise or (|)  ck_bitop        fsT2    S S|
+sbit_and       string bitwise and (&.) ck_bitop        fst2    S S|
+sbit_xor       string bitwise xor (^.) ck_bitop        fst2    S S|
+sbit_or                string bitwise or (|.)  ck_bitop        fst2    S S|
 
 negate         negation (-)            ck_null         Ifst1   S
-i_negate       integer negation (-)    ck_null         ifsT1   S
+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
 
-smartmatch     smart match             ck_smartmatch   s2
+smartmatch     smart match             ck_null         ifs2    S S
 
 # High falutin' math.
 
@@ -194,7 +203,7 @@ abs         abs                     ck_fun          fsTu%   S?
 
 length         length                  ck_length       ifsTu%  S?
 substr         substr                  ck_substr       st@     S S S? S?
-vec            vec                     ck_fun          isT@    S S S
+vec            vec                     ck_fun          ist@    S S S
 
 index          index                   ck_index        isT@    S S S?
 rindex         rindex                  ck_index        isT@    S S S?
@@ -219,34 +228,38 @@ aelem             array element           ck_null         s2      A S
 aslice         array slice             ck_null         m@      A L
 kvaslice       index/value array slice ck_null         m@      A L
 
-aeach          each on array           ck_each         %       A
+aeach          each on array           ck_each         d%      A
+avalues                values on array         ck_each         dt%     A
 akeys          keys on array           ck_each         t%      A
-avalues                values on array         ck_each         t%      A
 
 # Hashes.
 
-each           each                    ck_each               H
-values         values                  ck_each         t%      H
+each           each                    ck_each         d%      H
+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
 
+# mixed array and hash access
+
+multideref     array or hash lookup    ck_null         ds+     
+
 # Explosives and implosives.
 
 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.
 
 list           list                    ck_null         m@      L
 lslice         list slice              ck_null         2       H L L
-anonlist       anonymous list ([])     ck_fun          ms@     L
+anonlist       anonymous array ([])    ck_fun          ms@     L
 anonhash       anonymous hash ({})     ck_fun          ms@     L
 
 splice         splice                  ck_fun          m@      A S? S? L
@@ -280,10 +293,12 @@ 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         dmt1    L
+entersub       subroutine entry        ck_subr         dm1     L
 leavesub       subroutine exit         ck_null         1       
 leavesublv     lvalue subroutine return        ck_null         1       
+argcheck       check subroutine arguments      ck_null         +
+argelem                subroutine argument     ck_null         +
+argdefelem     subroutine argument default value       ck_null         |
 caller         caller                  ck_fun          t%      S?
 warn           warn                    ck_fun          imst@   L
 die            die                     ck_fun          imst@   L
@@ -307,9 +322,13 @@ 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.
+method_redir_super     redirect super method with known name   ck_null d.
 
-entergiven     given()                 ck_null         d|
+entergiven     given()                 ck_null         d{
 leavegiven     leave given block       ck_null         1
 enterwhen      when()                  ck_null         d|
 leavewhen      leave when block        ck_null         1
@@ -443,7 +462,7 @@ wait                wait                    ck_null         isT0
 waitpid                waitpid                 ck_fun          isT@    S S
 system         system                  ck_exec         imsT@   S? L
 exec           exec                    ck_exec         imsT@   S? L
-kill           kill                    ck_fun          dimsT@  L
+kill           kill                    ck_fun          imsT@   L
 getppid                getppid                 ck_null         isT0    
 getpgrp                getpgrp                 ck_fun          isT%    S?
 setpgrp                setpgrp                 ck_fun          isT@    S? S?
@@ -481,7 +500,7 @@ semctl              semctl                  ck_fun          imst@   S S S S
 
 # Eval.
 
-require                require                 ck_require      du%     S?
+require                require                 ck_require      dsu%    S?
 dofile         do "file"               ck_fun          d1      S
 hintseval      eval hints              ck_svconst      s$
 entereval      eval "string"           ck_eval         du%     S?
@@ -536,13 +555,9 @@ once               once                    ck_null         |
 
 custom         unknown custom operator         ck_null         0
 
-# For smart dereference for each/keys/values
-reach          each on reference                       ck_each         %       S
-rkeys          keys on reference                       ck_each         t%      S
-rvalues                values on reference                     ck_each         t%      S
-
 # For CORE:: subs
 coreargs       CORE:: subroutine       ck_null         $       
+avhvswitch     Array/hash switch       ck_null         t1
 
 runcv          __SUB__                 ck_null         s0
 
@@ -553,7 +568,8 @@ padcv               private subroutine      ck_null         d0
 introcv                private subroutine      ck_null         d0
 clonecv                private subroutine      ck_null         d0
 padrange       list of private variables       ck_null         d0
-refassign      lvalue ref assignment   ck_refassign    d2
+refassign      lvalue ref assignment   ck_refassign    ds2
 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