This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fixes for bugs in C<use warnings qw(FATAL all)> (from Paul Marquess)
[perl5.git] / opcode.pl
index c9174f2..eb64e8d 100755 (executable)
--- a/opcode.pl
+++ b/opcode.pl
@@ -183,7 +183,7 @@ END
     '|',  3,           # logop
     '@',  4,           # listop
     '/',  5,           # pmop
-    '$',  6,           # svop
+    '$',  6,           # svop_or_padop
     '#',  7,           # padop
     '"',  8,           # pvop_or_svop
     '{',  9,           # loop
@@ -298,6 +298,7 @@ sub tab {
 #      ref not OK (RETPUSHNO)
 #      trans not OK (dTARG; TARG = sv_newmortal();)
 #      ucfirst etc not OK: TMP arg processed inplace
+#      quotemeta not OK (unsafe when TARG == arg)
 #      each repeat not OK too due to array context
 #      pack split - unknown whether they are safe
 #      sprintf: is calling do_sprintf(TARG,...) which can act on TARG
@@ -314,6 +315,7 @@ sub tab {
 #      readline - unknown whether it is safe
 #      match subst not OK (dTARG)
 #      grepwhile not OK (not always setting)
+#      join not OK (unsafe when TARG == arg)
 
 #      Suspicious wrt "additional mode of failure": concat (dealt with
 #      in ck_sassign()), join (same).
@@ -363,9 +365,9 @@ pushre              push regexp             ck_null         d/
 # References and stuff.
 
 rv2gv          ref-to-glob cast        ck_rvconst      ds1     
-rv2sv          scalar deref            ck_rvconst      ds1     
+rv2sv          scalar dereference      ck_rvconst      ds1     
 av2arylen      array length            ck_null         is1     
-rv2cv          subroutine deref        ck_rvconst      d1
+rv2cv          subroutine dereference  ck_rvconst      d1
 anoncode       anonymous subroutine    ck_anoncode     $       
 prototype      subroutine prototype    ck_null         s%      S
 refgen         reference constructor   ck_spair        m1      L
@@ -375,9 +377,9 @@ bless               bless                   ck_fun          s@      S S?
 
 # Pushy I/O.
 
-backtick       quoted execution (``, qx)       ck_null         t%      
+backtick       quoted execution (``, qx)       ck_open         t%      
 # glob defaults its first arg to $_
-glob           glob                    ck_glob         t@      S? S?
+glob           glob                    ck_glob         t@      S?
 readline       <HANDLE>                ck_null         t%      
 rcatline       append I/O operator     ck_null         t%      
 
@@ -506,7 +508,7 @@ ucfirst             ucfirst                 ck_fun_locale   fstu%   S?
 lcfirst                lcfirst                 ck_fun_locale   fstu%   S?
 uc             uc                      ck_fun_locale   fstu%   S?
 lc             lc                      ck_fun_locale   fstu%   S?
-quotemeta      quotemeta               ck_fun          fsTu%   S?
+quotemeta      quotemeta               ck_fun          fstu%   S?
 
 # Arrays.
 
@@ -531,7 +533,7 @@ hslice              hash slice              ck_null         m@      H L
 unpack         unpack                  ck_fun          @       S S
 pack           pack                    ck_fun          mst@    S L
 split          split                   ck_split        t@      S S S
-join           join                    ck_join         msT@    S L
+join           join                    ck_join         mst@    S L
 
 # List operators.
 
@@ -595,7 +597,7 @@ next                next                    ck_null         ds}
 redo           redo                    ck_null         ds}     
 dump           dump                    ck_null         ds}     
 goto           goto                    ck_null         ds}     
-exit           exit                    ck_fun          ds%     S?
+exit           exit                    ck_exit         ds%     S?
 # continued below
 
 #nswitch       numeric switch          ck_null         d       
@@ -603,13 +605,13 @@ exit              exit                    ck_fun          ds%     S?
 
 # I/O.
 
-open           open                    ck_fun          ist@    F S? S?
+open           open                    ck_open         ist@    F S? L
 close          close                   ck_fun          is%     F?
 pipe_op                pipe                    ck_fun          is@     F F
 
 fileno         fileno                  ck_fun          ist%    F
 umask          umask                   ck_fun          ist%    S?
-binmode                binmode                 ck_fun          s%      F
+binmode                binmode                 ck_fun          s@      F S?
 
 tie            tie                     ck_fun          idms@   R S L
 untie          untie                   ck_fun          is%     R
@@ -707,7 +709,7 @@ rename              rename                  ck_fun          isT@    S S
 link           link                    ck_fun          isT@    S S
 symlink                symlink                 ck_fun          isT@    S S
 readlink       readlink                ck_fun          stu%    S?
-mkdir          mkdir                   ck_fun          isT@    S S
+mkdir          mkdir                   ck_fun          isT@    S S?
 rmdir          rmdir                   ck_fun          isTu%   S?
 
 # Directory calls.
@@ -735,6 +737,10 @@ setpriority        setpriority             ck_fun          isT@    S S S
 
 # Time calls.
 
+# NOTE: MacOS patches the 'i' of time() away later when the interpreter
+# is created because in MacOS time() is already returning times > 2**31-1,
+# that is, non-integers.
+
 time           time                    ck_null         isT0    
 tms            times                   ck_null         0       
 localtime      localtime               ck_fun          t%      S?