summaryrefslogtreecommitdiff
path: root/embed.h
Commit message (Collapse)AuthorAgeFilesLines
* make the EXACTF_invlist only when SCF_DO_STCLASSHugo van der Sanden2014-12-111-0/+1
| | | | The data is used only for STCLASS, and it's somewhat expensive to create.
* stdize_locale not used in POSIX.Jarkko Hietaniemi2014-12-091-1/+1
|
* Fix OUTSIDE for named subs inside predeclared subsFather Chrysostomos2014-12-091-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This prints 42 as expected (foo initialises $x and bar reads it via eval): use 5.01; sub foo { state $x = 42; sub bar { eval 'print $x // "u", "\n"'; } } foo(); bar(); If you predeclare foo and vivify its glob, use 5.01; *foo; # vivifies the glob at compile time sub foo; sub foo { state $x = 42; sub bar { eval 'print $x // "u", "\n"'; } } foo(); bar(); then the output is ‘u’, because $x is now undefined. What’s happening is that ‘eval’ follows CvOUTSIDE pointers (each sub points to its outer sub), searching each pad to find a lexical $x. In the former case it succeeds. In the latter, bar’s CvOUTSIDE pointer is pointing to the wrong thing, so the search fails and $x is treated as global. You can see it’s global with this example, which prints ‘globular’: use 5.01; *foo; # vivifies the glob at compile time sub foo; sub foo { state $x = 42; sub bar { eval 'print $x // "u", "\n"'; } } foo(); $main::x = "globular"; bar(); When a sub is compiled, a new CV is created at the outset and put in PL_compcv. When the sub finishes compiling, the CV in PL_compcv is installed in the sub’s typeglob (or as a subref in the stash if pos- sible). If there is already a stub in a typeglob, since that stub could be referenced elsewhere, we have to reuse that stub and transfer the contents of PL_compcv to that stub. If we have any subs inside it, those will now have CvOUTSIDE point- ers pointing to the old PL_compcv that has been eviscerated. So we go through the pad and fix up the outside pointers for any subs found there. Named subs don’t get stored in the pad like that, so the CvOUTSIDE fix-up never happens. Hence the bug above. The bug does not occur if the glob is not vivified before the sub def- inition, because a stub declaration will skip creating a real CV if it can. It can’t if there is a typeglob. The solution, of course, is to store named subs in the outer sub’s pad. We can skip this if the outer ‘sub’ is an eval or the main pro- gram. These two types of CVs obviously don’t reuse existing stubs, since they never get installed in the symbol table. Since named subs have strong outside pointers, we have to store weak refs in the pad, just as we do for formats.
* Add OP_MULTIDEREFDavid Mitchell2014-12-071-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This op is an optimisation for any series of one or more array or hash lookups and dereferences, where the key/index is a simple constant or package/lexical variable. If the first-level lookup is of a simple array/hash variable or scalar ref, then that is included in the op too. So all of the following are replaced with a single op: $h{foo} $a[$i] $a[5][$k][$i] $r->{$k} local $a[0][$i] exists $a[$i]{$k} delete $h{foo} while these aren't: $a[0] already handled by OP_AELEMFAST $a[$x+1] not a simple index and these are partially replaced: (expr)->[0]{$k} the bit following (expr) is replaced $h{foo}[$x+1][0] the first and third lookups are each done with a multideref op, while the $x+1 expression and middle lookup are done by existing add, aelem etc ops. Up until now, aggregate dereferencing has been very heavyweight in ops; for example, $r->[0]{$x} is compiled as: gv[*r] s rv2sv sKM/DREFAV,1 rv2av[t2] sKR/1 const[IV 0] s aelem sKM/DREFHV,2 rv2hv sKR/1 gvsv[*x] s helem vK/2 When executing this, in addition to the actual calls to av_fetch() and hv_fetch(), there is a lot of overhead of pushing SVs on and off the stack, and calling lots of little pp() functions from the runops loop (each with its potential indirect branch miss). The multideref op avoids that by running all the code in a loop in a switch statement. It makes use of the new UNOP_AUX type to hold an array of typedef union { PADOFFSET pad_offset; SV *sv; IV iv; UV uv; } UNOP_AUX_item; In something like $a[7][$i]{foo}, the GVs or pad offsets for @a and $i are stored as items in the array, along with a pointer to a const SV holding 'foo', and the UV 7 is stored directly. Along with this, some UVs are used to store a sequence of actions (several actions are squeezed into a single UV). Then the main body of pp_multideref is a big while loop round a switch, which reads actions and values from the AUX array. The two big branches in the switch are ones that are affectively unrolled (/DREFAV, rv2av, aelem) and (/DREFHV, rv2hv, helem) triplets. The other branches are various entry points that handle retrieving the different types of initial value; for example 'my %h; $h{foo}' needs to get %h from the pad, while '(expr)->{foo}' needs to pop expr off the stack. Note that there is a slight complication with /DEREF; in the example above of $r->[0]{$x}, the aelem op is actually aelem sKM/DREFHV,2 which means that the aelem, after having retrieved a (possibly undef) value from the array, is responsible for autovivifying it into a hash, ready for the next op. Similarly, the rv2sv that retrieves $r from the typeglob is responsible for autovivifying it into an AV. This action of doing the next op's work for it complicates matters somewhat. Within pp_multideref, the autovivification action is instead included as the first step of the current action. In terms of benchmarking with Porting/bench.pl, a simple lexical $a[$i][$j] shows a reduction of approx 40% in numbers of instructions executed, while $r->[0][0][0] uses 54% fewer. The speed-up for hash accesses is relatively more modest, since the actual hash lookup (i.e. hv_fetch()) is more expensive than an array lookup. A lexical $h{foo} uses 10% fewer, while $r->{foo}{bar}{baz} uses 34% fewer instructions. Overall, bench.pl --tests='/expr::(array|hash)/' ... gives: PRE POST ------ ------ Ir 100.00 145.00 Dr 100.00 165.30 Dw 100.00 175.74 COND 100.00 132.02 IND 100.00 171.11 COND_m 100.00 127.65 IND_m 100.00 203.90 with cache misses unchanged at 100%. In general, the more lookups done, the bigger the proportionate saving.
* add UNOP_AUX OP classDavid Mitchell2014-12-071-0/+1
| | | | | | | | | | | | | This is the same as a UNOP, but with the addition of an op_aux field, which points to an array of UNOP_AUX_item unions. It is intended as a general escape mechanism for adding per-op-type extra fields (or arrays of items) to UNOPs. Its class character (for regen/opcodes etc) is '+'. Currently there are no ops of this type; but shortly, OP_MULTIDEREF will be added, which is the original motivation for this new op type.
* gv_fetchmeth_sv now supports SV shared hashessyber2014-12-061-0/+1
| | | | | | | | | | | | | | | | | | | gv_fetchmeth_internal added, which receives method name both as SV and const char. Now it calls hv_common instead of hv_fetch. gv_fetchmeth_pvn and gv_fetchmeth_sv are now just wrappers for gv_fetchmeth_internal Result: x2 speedup for gv_fetchmeth_sv new SV is a shared hash BEFORE PVN - 28.5 Mcalls/s SV SHARED HASH - 26 Mcalls/s AFTER PVN - 29.4 Mcalls/s SV SHARED HASH - 51 Mcalls/s
* Followup 3f39ca90: those functions need no prototypes for ext/re.Jarkko Hietaniemi2014-12-061-5/+9
|
* [perl #123223] Make PADNAME a separate typeFather Chrysostomos2014-11-301-0/+3
| | | | | | | | | | | distinct from SV. This should fix the CPAN modules that were failing when the PadnameLVALUE flag was added, because it shared the same bit as SVs_OBJECT and pad names were going through code paths not designed to handle pad names. Unfortunately, it will probably break other CPAN modules, but I think this change is for the better, as it makes both pad names and SVs sim- pler and makes pad names take less memory.
* Make PADNAMELIST a separate typeFather Chrysostomos2014-11-301-0/+4
| | | | This is in preparation for making PADNAME a separate type.
* speedup for SUPER::method() calls.syber2014-11-281-1/+1
| | | | | | | | | | | | | | | In ck_method: Scan for '/::. If found SUPER::, create OP_METHOD_SUPER op with precomputed hash value for method name. In B::*, added support for method_super In pp_hot.c, pp_method_*: S_method_common removed, code related to getting stash is moved to S_opmethod_stash, other code is moved to pp_method_* functions. As a result, SUPER::func() calls speeded up by 50%.
* Make is_invariant_string()Karl Williamson2014-11-261-1/+1
| | | | | | This is a more accurately named synonym for is_ascii_string(), which is retained. The old name is misleading to someone programming for non-ASCII platforms.
* Remove context param from set_padlistFather Chrysostomos2014-11-211-1/+1
| | | | It doesn’t need it.
* Make a function to get PL_encoding's valueKarl Williamson2014-11-201-0/+1
| | | | | | This is in preparation for making the retrieval more complex in future commits than it is now. This is going into mg.c because the value is magical.
* readd noreturn and silence "noreturn that returns" warning on MSVCDaniel Dragan2014-11-151-20/+5
| | | | | | | | | | | | | | | | | | Based on commit 73758d77 (by me), in commit 117af67d629 more things got noreturn removed on MSVC. See also ML post "(Hugmeir) Re: [perl.git] branch blead, updated. v5.21.0-377-gdc3bf40" This caused a measurable increase in machine code size in 117af67d629 . In commit 73758d77 , the reason there was no increase is Perl_magic_regdatum_set is called only through a magic vtable. Optimizing this to noreturn is forbidden unless the struct member type specifies it (and it obviously doesn't, since this is the magic vtable). The other not-noreturn on MSVC function, Perl_screaminstr, has no core usage (its only reference is in the export table) or CPAN grep usage so therefore it is being removed. It was made fatal in commit 9e3f0d16db . before .text section of perl521.dll on VC 2003 32b, 0xc66a3 bytes, after 0xc6453
* Add warning message for locale/Unicode intermixingKarl Williamson2014-11-141-1/+1
| | | | This is explained in the added perldiag entry.
* Make op.c:op_const_sv staticFather Chrysostomos2014-11-131-1/+0
| | | | It is no longer called from any other file.
* Inline op_const_sv into cv_cloneFather Chrysostomos2014-11-131-1/+1
| | | | | | | | op_const_sv is actually two functions in one. This particular calling convention (CvCONST) was used only by cv_clone. Half the code was not even necessary for cv_clone’s use (the other half only for its use), so this reduces the total number of lines.
* Make sub () { 0; 3 } inlinable once moreFather Chrysostomos2014-11-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | It probably stopped being inlinable in commit beab0874143b. Following op_next pointers to see whether a sub’s execution chain con- sists of a constant followed by sub exit does not make sense if the op_next pointers have not been set up yet. So call LINKLIST earlier, so that we can merge the two calls to op_const_sv in newATTRSUB (no need to search for constants twice). That will allow sub () { 0; 3 } to be inlined once more, as it was in perl 5.005 (I checked) and probably in 5.6, too (I didn’t check). This also allows us to remove initial the OP_LINESEQ check, which was added to help this function into the block when we have no op_next pointers. op_const_sv is now called only before the peephole optimiser and finalize_op, which removes the need for the special explicit return check (it hasn’t been optimised out of the execution chain yet) and the need to account for constants that have been relocated to the pad by finalize_op.
* Deprecate inlining sub(){$x} if $x is changed elsewhereFather Chrysostomos2014-11-131-1/+1
| | | | | | | | | | | | | | | | | | With the new PadnameLVALUE flag, we can detect cases where an outer lexical is used multiple times in lvalue context. If the subroutine contains just a lexical variable and nothing else, deprecate this behaviour, so we can change it not to break the closure pattern at some future date. Future commits will fix those cases where the subroutine contains more than just a lexical variable, without a deprecation cycle. Adding this code to op_const_sv doesn’t really make sense. More to the point, having S_cv_clone_pad call op_const_sv doesn’t make sense, but changing that (moving this code directly to S_cv_clone_pad) will require other refactorings to avoid breaking some cases of constant (real constant) inlining, such as sub(){$x++ if 0; 3}, which cur- rently gets inlined.
* add filename handling to xs handshakeDaniel Dragan2014-11-131-0/+1
| | | | | | | | | | | | | | | | | | | | | - this improves the error message on ABI incompatibility, per [perl #123136] - reduce the number of gv_fetchfile calls in newXS over registering many XSUBs - "v" was not stripped from PERL_API_VERSION_STRING since string "vX.XX.X\0", a typical version number is 8 bytes long, and aligned to 4/8 by most compilers in an image. A double digit maint release is extremely unlikely. - newXS_deffile saves on machine code in bootstrap functions by not passing arg filename - move newXS to where the rest of the newXS*()s live - move the "no address" panic closer to the start to get it out of the way sooner flow wise (it nothing to do with var gv or cv) - move CvANON_on to not check var name twice - change die message to use %p, more efficient on 32 ptr/64 IV platforms see ML post "about commit "util.c: fix comiler warnings"" - vars cv/xs_spp (stack pointer pointer)/xs_interp exist for inspection by a C debugger in an unoptimized build
* add xs_handshake APIDaniel Dragan2014-11-071-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This API elevates the amount of ABI compatibility protection between XS modules and the interp. It also makes each boot XSUB smaller in machine code by removing function calls and factoring out code into the new Perl_xs_handshake and Perl_xs_epilog functions. sv.c : - revise padlist duping code to reduce code bloat/asserts on DEBUGGING ext/DynaLoader/dlutils.c : - disable version checking so interp startup is faster, ABI mismatches are impossible because DynaLoader is never available as a shared library ext/XS-APItest/XSUB-redefined-macros.xs : - "" means dont check the version, so switch to " " to make the test in xsub_h.t pass, see ML thread "XS_APIVERSION_BOOTCHECK and XS_VERSION is CPP defined but "", mow what?" ext/re/re.xs : - disable API version checking until #123007 is resolved ParseXS/Utilities.pm : 109-standard_XS_defs.t : - remove context from S_croak_xs_usage similar to core commit cb077ed296 . CvGV doesn't need a context until 5.21.4 and commit ae77754ae2 and by then core's croak_xs_uage API has been long available and this backport doesn't need to account for newer perls - fix test where lack of having PERL_IMPLICIT_CONTEXT caused it to fail
* [perl #57512] Warnings for implicitly closed handlesFather Chrysostomos2014-11-021-1/+1
| | | | | | | | | | | | | | | | | | If the implicit close() fails, warn about it, mentioning $! in the message. This is a default warning in the io category. We do this in two spots, sv_clear and gp_free. While sv_clear would be sufficient to get the warning emitted, the warning won’t contain the name of the handle when called from there, because lone IO thing- ies are nameless. Doing it also when a GV’s glob pointer is freed--as long as the IO thingy in there has a reference count of 1--allows the name to be included in the message, because we still have the glob, which is where the name is stored. The result: $ ./miniperl -Ilib -e 'open fh, ">/Volumes/Disk Image/foo"; print fh "x"x1000, "\n" for 1..50; undef *fh' Warning: unable to close filehandle fh properly: No space left on device at -e line 1.
* Record errno value in IO handlesFather Chrysostomos2014-11-021-0/+4
|
* free up CvPADLIST slot for XSUBs for future useDaniel Dragan2014-10-311-0/+1
| | | | | | | | | | | | | | | | | | | CvRESERVED is a placeholder, it will be replaced with a sentinal value from future revised BOOTCHECK API. CvPADLIST_set was helpful during development of this patch, so keep it around for now. PoisonPADLIST's magic value is from PERL_POISON 0xEF pattern. Some PoisonPADLIST locations will get code from future BOOTCHECK API. Make padlist_dup a NN function to avoid overhead of calling it for XSUBs during closing. Perl_cv_undef_flags's else if (CvISXSUB(&cvbody)) is to avoid whitespace changes. Filed as perl [#123059].
* rename convert to op_convert_list and APIfyLukas Mai2014-10-261-1/+1
|
* APIfy block_start/block_end/intro_myLukas Mai2014-10-251-3/+3
|
* APIfy newDEFSVOPLukas Mai2014-10-241-1/+1
|
* Make null list+pushmark happen in more casesFather Chrysostomos2014-10-201-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This optimisation, added in 7d3c8a683, nulls the list+pushmark pair if it occurs in list context, since the two ops effectively cancel each other out. I recently extended it in 8717a761e to apply to void con- text, too. It works by checking in the peephole optimiser whether the sibling of the current op is a list with a pushmark kid: 1 current op 4 list 2 pushmark 3 ... 5 ... That means the optimisation doesn’t happen if the elder sibling of the list op is something that is not part of the execution chain, such as $package_var: - ex-rv2sv 1 gvsv 4 list 2 pushmark 3 ... 5 ... because the ex-rv2sv is never the ‘current op’. So ($_,($_,$_)) doesn’t get optimised. We can’t just handle this when ‘pushmark’ or ‘list’ is the current op, because, in the former case, there is no way to get to the parent op to null it; in the latter case, there is no way to get to the op pointing to pushmark, to rethread the op_next pointers. However, handling this when list or void context is applied, before we even get to the peephole optimiser, just works, and requires much less code. We can just null the ops there, and leave it to the peephole optimiser’s handling of null ops to rethread op_next pointers. This breaks this convention: op_prepend_elem(OP_LIST, foo, list(that_list)) by creating two redundant null ops that were not there before, but the only pieces of code doing that were calling list() needlessly anyway.
* regcomp.c: Improve re debug output by showing buffer names if they existYves Orton2014-10-201-1/+1
| | | | | | Requires adding a new optional argument to regprop as we do not have a completed regexp object to give us the names, and we need to get it from RExC_state.
* Optimise "@_" to a single joinFather Chrysostomos2014-10-121-0/+1
| | | | instead of stringify(join(...)).
* Add lvref magic typeFather Chrysostomos2014-10-101-0/+1
| | | | | I just couldn’t resist using the backslash for the character, even though I had to tweak mg_vtable.pl to make it work.
* Simple package scalar lvalue refsFather Chrysostomos2014-10-101-1/+1
| | | | \$::x = ... works, but not \local $x yet.
* First stab at lexical scalar aliasesFather Chrysostomos2014-10-101-1/+2
| | | | | | | | | | | | | | | No \my$x= yet. Only my $x; \$x =.... It does not work properly with variables closed over from outside; hence, all the to-do tests fail still, since they do the assign- ment in evals. But this much works: $ ./miniperl -Ilib -Mfeature=:all -e 'my $m; \$m = \$n; warn \$m; warn \$n' Lvalue references are experimental at -e line 1. SCALAR(0x7fa04b805510) at -e line 1. SCALAR(0x7fa04b805510) at -e line 1.
* optimize & rmv from public API Perl_tmps_grow and related codeDaniel Dragan2014-10-101-1/+1
| | | | | | | | | | | | | | | | | | | Previously in PUSH_EXTEND_MORTAL__SV_C, "PL_tmps_ix + 1" would execute twice, once for the nonmutable if(>=), then again after the potential tmps_grow call. tmps_grow has an unused return register/void proto, put it to use by returning ix. Also change tmps_grow to take the result of "PL_tmps_ix + the constant (usually 1) or non-constant (EXTEND_MORTAL)". This avoid having to put the constant twice in machine code, once for the if test, 2nd time for extend length param for tmps_grow call. For non-constant/EXTEND_MORTAL usage, it allows the C optimizer to have the length var to go out of liveness sooner if possible. Also the var used for the if(>=) test is more likely to be in a register than length var. So "if test variable" is closer on hand to the CPU than length var. In some cases, if non-const len var isn't used again, it becomes the "ix" variable by having PL_tmps_ix added to it. Change sv_2mortal to return sv instead of NULL to remove a unique branch/block of machine code that assigns 0 to return variable (Visual C didn't figure out return sv == returned NULL, not sv). See also [perl #121845].
* [perl #122445] use magic on $DB::single etc to avoid overload issuesTony Cook2014-10-091-0/+2
| | | | | | | | | This prevents perl recursing infinitely when an overloaded object is assigned to $DB::single, $DB::trace or $DB::signal This is done by referencing their values as IVs instead of as SVs in dbstate, and by adding magic to those variables so that assignments to the scalars update the PL_DBcontrol array.
* Make OP_METHOD* to be of new class METHOPsyber2014-10-031-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce a new opcode class, METHOP, which will hold class/method related info needed at runtime to improve performance of class/object method calls, then change OP_METHOD and OP_METHOD_NAMED from being UNOP/SVOP to being METHOP. Note that because OP_METHOD is a UNOP with an op_first, while OP_METHOD_NAMED is an SVOP, the first field of the METHOP structure is a union holding either op_first or op_sv. This was seen as less messy than having to introduce two new op classes. The new op class's character is '.' Nothing has changed in functionality and/or performance by this commit. It just introduces new structure which will be extended with extra fields and used in later commits. Added METHOP constructors: - newMETHOP() for method ops with dynamic method names. The only optype for this op is OP_METHOD. - newMETHOP_named() for method ops with constant method names. Optypes for this op are: OP_METHOD_NAMED (currently) and (later) OP_METHOD_SUPER, OP_METHOD_REDIR, OP_METHOD_NEXT, OP_METHOD_NEXTCAN, OP_METHOD_MAYBENEXT (This commit includes fixups by davem)
* Make list assignment respect foreach aliasingFather Chrysostomos2014-10-021-0/+1
| | | | | | | | | | | | See ff2a62e0c8 for the explanation. The bug fix in that commit did not apply to foreach’s aliasing. In short, ($a,$b)=($c,$d) needs to account for whether two of those variable names could be referring to the same variable. This commit causes the test suite to exercise a code path in scope.c added by ff2a62e0c8, which turned out to be buggy. (I forgot to test it at the time.)
* Introduce the double-diamond operator <<>>Rafael Garcia-Suarez2014-09-301-1/+1
| | | | | | | | | | | This operator works like <> or <ARGV>, as it reads the list of file names to open from the command-line arguments. However, it disables the magic-open feature (that forks to execute piped commands) : $ bleadperl -e 'while(<>){print}' 'echo foo |' foo $ bleadperl -e 'while(<<>>){print}' 'echo foo |' Can't open echo foo |: No such file or directory at -e line 1.
* Tighten uses of regex synthetic start classKarl Williamson2014-09-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | A synthetic start class (SSC) is generated by the regular expression pattern compiler to give a consolidation of all the possible things that can match at the beginning of where a pattern can possibly match. For example qr/a?bfoo/; requires the match to begin with either an 'a' or a 'b'. There are no other possibilities. We can set things up to quickly scan for either of these in the target string, and only when one of these is found do we need to look for 'foo'. There is an overhead associated with using SSCs. If the number of possibilities that the SSC excludes is relatively small, it can be counter-productive to use them. This patch creates a crude sieve to decide whether to use an SSC or not. If the SSC doesn't exclude at least half the "likely" possiblities, it is discarded. This patch is a starting point, and can be refined if necessary as we gain experience. See thread beginning with http://nntp.perl.org/group/perl.perl5.porters/212644 In many patterns, no SSC is generated; and with the advent of tries, SSC's have become less important, so whatever we do is not terribly critical.
* regcomp.c: Add a function and use itKarl Williamson2014-09-291-0/+1
| | | | | | | This adds a function to allocate a regnode with 2 32-bit arguments, and uses it, rather than the ad-hoc code that did the same thing previously. This is in preparation for this code being used in a 2nd place in a future commit.
* regcomp.c: Extract duplicated code to fcnKarl Williamson2014-09-291-0/+1
| | | | | | | | | | | | | | | | | | | | | This causes the nearly-duplicate code of S_reg_node and S_reganode to be placed into a single function, S_regnode_guts. There is one place where it might not be obvious that this doesn't change things. And that is under DEBUGGING, reg_node() called Set_Node_Offset(RExC_emit, RExC_parse + (op == END)); and reganode called Set_Cur_Node_Offset; However Set_Cur_Node_Offset is defined to be Set_Node_Offset(RExC_emit, RExC_parse) and since op will never be END for reganode, the two statements are equivalent.
* [perl #12285] Fix str vs num inf/nan treatmentFather Chrysostomos2014-09-271-0/+1
| | | | | | | sprintf, pack and chr were treating 0+"Inf" and "Inf" differently, even though they have the same string and numeric values. pack was also croaking for 0+"Inf" passed to a string format.
* Add flags to cv_name; allow unqualified retvalFather Chrysostomos2014-09-241-1/+1
| | | | | | | | | | One of the main purposes of cv_name was to provide a way for CPAN mod- ules easily to obtain the name of a sub. As written, it was not actually sufficient, as some modules, such as Devel::Declare, need an unqualified name. So I am breaking compatibility with 5.21.4 (which introduced cv_name, but is only a dev release) by adding a flags parameter.
* quadmath NV formatted I/O.Jarkko Hietaniemi2014-09-191-3/+9
|
* Rename S_adjust_stack_on_leaveFather Chrysostomos2014-09-181-1/+1
| | | | | It now does more than that, so use a name that describes when it is called, rather than what it does.
* Stop undef &foo from temporarily anonymisingFather Chrysostomos2014-09-151-0/+1
| | | | | Instead of setting aside the name, calling cv_undef, and then naming the sub anew, just pass a flag to tell cv_undef not to unname it.
* Remove no-longer-used op.c:S_gv_enameFather Chrysostomos2014-09-151-1/+0
|
* Inline op.c:too_many_arguments_sv into its only callerFather Chrysostomos2014-09-151-1/+0
| | | | I’m about to change this code anyway, and it’s easier in one spot.
* Inline op.c:too_few_arguments_sv into its only callerFather Chrysostomos2014-09-151-1/+0
| | | | I’m about to change this code anyway, and it’s easier in one spot.
* Add cv_set_call_checker_flagsFather Chrysostomos2014-09-151-0/+1
| | | | | | | | This is like cv_set_call_checker, except that it allows the caller to decide whether the call checker needs a GV. Currently the GV flag is recorded, but ck_subr does not do anything with it yet.