X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=opcode.pl;h=eb64e8dc14efa8279733a6bebbad8e26494b9a1b;hb=544f31531e7cbe3b4e7571d94c56f36d53f647fa;hp=3dfca9ef47a0d3fc1c76e8c3c02e98c50fbe9da0;hpb=350de78d9c02710bb008e9ca922c78ba251ec366;p=p5sagit%2Fp5-mst-13.2.git diff --git a/opcode.pl b/opcode.pl index 3dfca9e..eb64e8d 100755 --- a/opcode.pl +++ b/opcode.pl @@ -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 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?