summaryrefslogtreecommitdiff
path: root/sv.h
Commit message (Collapse)AuthorAgeFilesLines
* perlapi (from sv.h) clarificationsKarl Williamson2012-03-191-2/+4
|
* fix slowdown in nested hash freeingDavid Mitchell2012-03-061-0/+1
| | | | | | | | | | | | | | Commit 104d7b69 made sv_clear free hashes iteratively rather than recursively; however, my code didn't record the current hash index when freeing a nested hash, which made the code go quadratic when freeing a large hash with inner hashes, e.g.: my $r; $r->{$_} = { a => 1 } for 1..10_0000; This was noticeable on such things as CPAN.pm being very slow to exit. This commit fixes this by squirrelling away the old hash index in the now-unused SvMAGIC field of the hash being freed.
* sv_force_normal: Don’t confuse regexps with cowsFather Chrysostomos2012-01-221-1/+2
| | | | | Otherwise we get assertion failures and possibly corrupt string tables.
* Fix bad reference in sv.h’s docsFather Chrysostomos2011-12-301-1/+1
| | | | SvPVx should be referring to SvPV as the faster version, not SvPVX.
* Adjust substr offsets when using, not when creating, lvalueFather Chrysostomos2011-12-041-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When substr() occurs in potential lvalue context, the offsets are adjusted to the current string (negative being converted to positive, lengths reaching beyond the end of the string being shortened, etc.) as soon as the special lvalue to be returned is created. When that lvalue is assigned to, the original scalar is stringified once more. That implementation results in two bugs: 1) Fetch is called twice in a simple substr() assignment (except in void context, due to the special optimisation of commit 24fcb59fc). 2) These two calls are not equivalent: $SIG{__WARN__} = sub { warn "w ",shift}; sub myprint { print @_; $_[0] = 1 } print substr("", 2); myprint substr("", 2); The second one dies. The first one only warns. That’s mean. The error is also wrong, sometimes, if the original string is going to get longer before the substr lvalue is actually used. The behaviour of \substr($str, -1) if $str changes length is com- pletely undocumented. Before 5.10, it was documented as being unreli- able and subject to change. What this commit does is make the lvalue returned by substr remember the original arguments and only adjust the offsets when the assign- ment happens. This means that the following now prints z, instead of xyz (which is actually what I would expect): $str = "a"; $substr = \substr($str,-1); $str = "xyz"; print $substr;
* Bring SvOOK_on back, but simplerFather Chrysostomos2011-12-011-0/+1
| | | | | | | | | | | Commit 404dce59 removed it, because nothing in core or CPAN was using it and it is not part of the API. Nothing in core was using it because it was unusable as previously defined (with SvIOK_off). This commit brings it back, but now it is a simple flag-setting macro, that will actually be usable by the core.
* Remove SvOOK_onFather Chrysostomos2011-11-301-1/+0
| | | | Nothing is using in core or on CPAN. It is not part of the API.
* Remove obsolete comment about SvPOKp in sv.hFather Chrysostomos2011-11-291-4/+0
| | | | | This comment was added in 373b357f1, and then invalidated by the same person in 8eeaf79a, seventeen days later.
* Remove duplicate comment from sv.hFather Chrysostomos2011-11-271-1/+1
| | | | | | | | | | The ‘or lexical’ in this ‘glob or lexical is just a copy’ comment was added in perl 5.001 (748a9306), which added closures. This comment was later duplicated in commit 120ff8e9d (‘Document a sixth use for SVf_FAKE’), but in a clearer fashion. This commit removes the ‘or lexical’ part, as it is now confusing.
* sv.h: Consistent use of spaces after dotsFather Chrysostomos2011-11-261-25/+30
|
* [perl #97632] Improve SvTAINT docsFather Chrysostomos2011-11-261-1/+5
| | | | Copied almost verbatim from text supplied by Kevin Ryde.
* [RT #36079] Convert ` to '.jkeenan2011-11-221-1/+1
|
* document boolSV(), which is used in the default typemapTony Cook2011-10-171-0/+10
|
* Improve documentation of XS autoloadingFather Chrysostomos2011-10-111-4/+2
|
* Update docs for XS AUTOLOADFather Chrysostomos2011-10-091-0/+5
| | | | | This mentions the UTF8 flag and moves the discussion to perlapi, where it belongs, IMHO.
* Correct SvEND docsFather Chrysostomos2011-10-081-1/+6
| | | | | SvEND does not point to the last character, but to a spot just after it.
* renumber SVpad_STATE and free a bit in SvFLAGSDavid Mitchell2011-10-071-2/+3
| | | | | | SVpad_STATE is only used on SVs which hold PAD names; make it share the same flags bit as SVprv_WEAKREF/SVf_IVisUV. Together with the previous commit, this frees up a single bit in SvFLAGS, 0x00010000.
* make SVs_PADTMP and SVs_PADSTALE share a bitDavid Mitchell2011-10-071-20/+28
| | | | | | | | | | | SVs_PADSTALE is only meaningful with SVs_PADMY, while SVs_PADTMP is only meaningful with !SVs_PADMY, so let them share the same flag bit. Note that this doesn't yet free a bit in SvFLAGS, as the two bits are also used for SVpad_STATE, SVpad_TYPED. (This is is follow-on to 62bb6514085e5eddc42b4fdaf3713ccdb7f1da85.)
* mro.c: Correct utf8 and bytes concatenationFather Chrysostomos2011-10-061-0/+6
| | | | | | | | | | | | | | | | | | | The previous commit introduced some code that concatenates a pv on to an sv and then does SvUTF8_on on the sv if the pv was utf8. That can’t work if the sv was in Latin-1 (or single-byte) encoding and contained extra-ASCII characters. Nor can it work if bytes are appended to a utf8 sv. Both produce mangled utf8. There is apparently no function apart from sv_catsv that handle this. So I’ve modified sv_catpvn_flags to handle this if passed the SV_CATUTF8 (concatenating a utf8 pv) or SV_CATBYTES (cancatenating a byte pv) flag. This avoids the overhead of creating a new sv (in fact, sv_catsv even copies its rhs in some cases, so that would mean creating two new svs). It might even be worthwhile to redefine sv_catsv in terms of this....
* Add MAYBE_DEREF_GV macroFather Chrysostomos2011-09-101-1/+1
| | | | | | | | | | | | | | | | | There are so many parts of the core (mostly pp functions or functions they call) that need a glob or a globref, including many that call get-magic at the wrong time (or not at all in some cases, that it makes sense to add a macro to do it. It can be used like this: if (gv = MAYBE_DEREF_GV(sv)) /* calls get-magic */ { } else { /* avoid magic here */ }
* replace many SvTYPE assertions with lookup tablesDavid Mitchell2011-07-151-63/+26
| | | | | Under a DEBUGGING build, this reduces the size of the perl binary by about 10%, and reduces the time to run the test suite by about 10-20%% (!)
* ensure SVs_PADTMP and SVs_PADTMP not both onDavid Mitchell2011-07-151-3/+22
| | | | | | | | There's no reason for these two flags to ever both be on. Fix the one place that was doing this, and assert that this never happens. If this doesn't break anything, it opens the door to freeing a bit in SvFLAGS. (woo hoo!)
* Make SvIsCOW honest about globsFather Chrysostomos2011-07-121-2/+2
| | | | | | | | SvIsCOW was ignoring the fact that it might be passed a typeglob, which made its behaviour contradict its docs. This fixes that and, in doing so, simplifies the upcoming Internals::SvREADONLY fix.
* Store FBMs in PVMGs, instead of GVs.Nicholas Clark2011-06-111-9/+9
| | | | | | | | This should reduce the complexity of code dealing with GVs, as they no longer try to play several different incompatible roles. (As suggested by Ben Morrow. However, it didn't turn out to be as straightforward as one might have hoped).
* Store the BM table in mg_ptr instead of after SvCUR().Nicholas Clark2011-06-111-2/+0
| | | | | | | | | | | | Previously the 256 byte Boyer-Moore table was stored in the buffer of SvPVX() after the raw string by extending the buffer. Given that the scalar is alway upgraded to add PERL_MAGIC_bm magic, to clear the table and other flags, there's no extra memory cost in using mg_ptr in the MAGIC struct to point directly to the table. I believe that this removes the last place in the core that stores data beyond SvCUR().
* Abolish xbm_rare. Move BmUSEFUL() to union _xnvu and BmPREVIOUS() to the UV.Nicholas Clark2011-06-111-7/+5
| | | | | | | This reduces the complexity of the union declarations in sv.h. As B.xs is accessing the structures/unions directly, instead of using the macros, it needs a patch too.
* Use SvTAIL() instead of BmFLAGS(). The core no longer uses BmFLAGS().Nicholas Clark2011-06-111-1/+3
|
* Emulate the value of BmFLAGS() using SvTAIL().Nicholas Clark2011-06-111-7/+3
| | | | | | | | | | | | | | | | | | | | Don't set BmFLAGS() in Perl_fbm_compile() Originally fbm_compile() had an I32 flags argument, which seems to have been part of case folding/locale improvements. bbce6d69784bf43b removed this. SvTAIL() was only used in once place until c277df42229d99fe. 2779dcf1a3ceec16 added the U32 flags argument to fbm_compile(), not used until cf93c79d660ae36c. That commit also added FBMcf_TAIL and FBMcf_TAIL{z,Z,DOLLAR} but didn't use the last three. Additionally, it stored the BmFLAGS as part of the compiled table: + table[-1] = flags; /* Not used yet */ f722798beaa43749 added FBMcf_TAIL_DOLLARM, renumbered FBMcf_TAIL{z,Z,DOLLAR}, but still didn't use anything other than FBMcf_TAIL. The core, nothing on CPAN, and nothing visible to Google codesearch, has ever used the 4 specialist flags. The only use is 0 or FBMcf_TAIL, which is in lockstep with SvTAIL() of 0 or non-0.
* Use 0x40008000 in SvFLAGS() for SVpad_NAME, not 0x40000000Nicholas Clark2011-06-111-2/+15
| | | | This eliminates potential confusion between SVpad_NAME and SVpbm_VALID.
* Improve comments in sv.h describing SVrepl_EVAL and SVf_IVisUV.Nicholas Clark2011-05-241-2/+1
|
* Remove empty #ifdef/#else/#endif block.Nicholas Clark2011-05-191-3/+0
| | | | | | This was added (with contents) in b162af07ec759e1b. The contents were moved elsewhere in the refactoring of ac09da3b9065d6e7, but that change failed to remove the block it had now emptied.
* Store the compiled format in mg_ptr instead of after SvCUR() - fixes RT #89218Nicholas Clark2011-05-181-5/+5
| | | | | | | | | | | | | | | | | | | | | Formats are compiled down to a sequence of U32 opcodes in doparseform(). Previously the block of opcodes was stored in the buffer of SvPVX() after the raw string by extending the buffer, and calculating the first U32 aligned address after SvCUR(). A flag bit on the scalar was set to signal this hackery, tested with SvCOMPILED() The flag bit used happened to be the same as one of the two used by to signal Boyer-Moore compiled scalars. The assumption was that no scalar can be used for both. Unfortunately, this isn't quite true. Given that the scalar is alway upgraded to PVMG to add PERL_MAGIC_fm magic, to clear the cached compiled version, there's no extra memory cost in using mg_ptr in the MAGIC struct to point directly to the block of U32 opcodes. The test for "is there a compiled version" can switch to mg_find(..., PERL_MAGIC_fm) returning a pointer, and the use of a flag bit abolished. Retain SvCOMPILED() and SvCOMPILED_{on,off}() as compatibility for XS code on CPAN - the first is always 0, the other two now no-ops.
* Inline sv_cmp() and sv_cmp_locale() as macros wrapping their flags variants.Nicholas Clark2010-11-111-0/+2
| | | | | | We can't move Perl_sv_cmp() and Perl_sv_cmp_locale() to mathoms.c, as they are referenced by function pointer in pp_sort.c - pointers which require the specific current calling signature.
* rt #72398 - get magic before downgrading in SvPVbyte()Tony Cook2010-10-251-0/+7
|
* Revert "[perl #77928] Glob slot assignment and set-magic"Father Chrysostomos2010-09-291-16/+2
| | | | This reverts commit cffb36981555111f364a511fb5763f65ea748c0e.
* systematically provide pv/pvn/pvs/sv quartetsZefram2010-09-281-0/+4
| | | | | Anywhere an API function takes a string in pvn form, ensure that there are corresponding pv, pvs, and sv APIs.
* [perl #77928] Glob slot assignment and set-magicFather Chrysostomos2010-09-281-2/+16
| | | | Stop set-magic from being called after ref-to-glob assignment.
* define SvTRUE_nomg for compilers other than gccFather Chrysostomos2010-09-241-0/+15
| | | | This time I *really* broke the Windows build!
* [perl #76814] FETCH called twice - !Father Chrysostomos2010-09-241-0/+23
| | | | | | This fixes ! by changing sv_2bool to sv_2bool_flags (with a macro wrapper) and adding SvTRUE_nomg. It also corrects the docs that state incorrectly that SvTRUE does not handle magic.
* [perl #76814] FETCH called twice - string comparison opsFather Chrysostomos2010-09-241-0/+2
| | | | | | This patch changes sv_eq, sv_cmp, sv_cmp_locale and sv_collxfrm to _flags forms, with macros under the old names for sv_eq and sv_collxfrm, but functions for sv_cmp* since pp_sort.c needs them.
* fix some 64-bit casts under DEBUG_LEAKING_SCALARSDavid Mitchell2010-09-011-1/+1
|
* Remove CALL_FPTR and CPERLscope.Ben Morrow2010-08-201-4/+4
| | | | | | | | | | | | | | | | These are left from PERL_OBJECT, which was an implementation of multiplicity using C++ objects. PERL_OBJECT was removed in 5.8, but the macros seem to have been cargo-culted all over the core (including in places where they would have been inappropriate originally). Since they now do exactly nothing, it's cleaner to remove them. I have left the definitions in perl.h, under #ifndef PERL_CORE, since some CPAN XS code uses them (also often incorrectly). I have also left STATIC alone, since it seems potentially more useful and is much more ingrained. The only appearance of these macros this patch doesn't touch is in Devel-PPPort, because that's a CPAN module.
* DEBUG_LEAKING_SCALARS: add sv_debug_parentDavid Mitchell2010-08-011-2/+2
| | | | | Rather than just recording whether an SV was cloned (sv->sv_debug_cloned), record the address of the SV we were cloned from.
* Store xio_ifp in sv_u in the SV head, reducing XPVIO by 1 pointer.Nicholas Clark2010-06-301-3/+18
| | | | | | | | | When accessing a file handle for reading, this reduces pointer dereferences by 1, which will reduce CPU cache pressure. As SVt_PVIO is also the default type provided to source filters, the code needs to allow them to continue to use the sv_u for SvPVX(). Re-use the existing IOf_FAKE_DIRP to signal this, as it's only set when a source filter is added.
* Only allow SvPVX() on SVt_PVIO when IOf_FAKE_DIRP is set.Nicholas Clark2010-06-301-1/+4
|
* Eliminate macro _XPVIO_TAIL by inlining it within struct xpvio.Nicholas Clark2010-06-281-30/+27
| | | | | | | _XPVIO_TAIL was added in 167f2c4d08e1e800, but has only been used in 1 location since xpvio_allocated was removed in b6f609162799aa49. This restores the header layout to the situation as it was before 167f2c4d08e1e800, although there are changes to the structure itself.
* Better ithreads cloning - add all SVs with a 0 refcnt to the temps stack.Nicholas Clark2010-05-241-0/+1
| | | | | | | | | | Track all SVs created by sv_dup() that have a 0 reference count. If they still have a 0 reference count at the end of cloning, assign a reference to each to the temps stack. As the temps stack is cleared at thread exit, SVs book keeping will be correct and consistent before perl_destruct() makes its check for leaked scalars. Remove special case code for checking each @_ and the parent's temp stack.
* Cleaner implementations for Perl_clone_params_{new,del}Nicholas Clark2010-05-241-0/+1
| | | | Not source or binary compatible with maint-5.12.
* make overload respect get magicDavid Mitchell2010-05-211-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In most places, ops checked their args for overload *before* doing mg_get(). This meant that, among other issues, tied vars that returned overloaded objects wouldn't trigger calling the overloaded method. (Actually, for tied and arrays and hashes, it still often would since mg_get gets called beforehand in rvalue context). This patch does the following: Makes sure get magic is called first. Moves most of the overload code formerly included by macros at the start of each pp function into the separate helper functions Perl_try_amagic_bin, Perl_try_amagic_un, S_try_amagic_ftest, with 3 new wrapper macros: tryAMAGICbin_MG, tryAMAGICun_MG, tryAMAGICftest_MG. This made the code 3800 bytes smaller. Makes sure that FETCH is not called multiple times. Much of this bit was helped by some earlier work from Father Chrysostomos. Added new functions and macros sv_inc_nomg(), sv_dec_nomg(), dPOPnv_nomg, dPOPXiirl_ul_nomg, dPOPTOPnnrl_nomg, dPOPTOPiirl_ul_nomg dPOPTOPiirl_nomg, SvIV_please_nomg, SvNV_nomg (again, some of these were based on Father Chrysostomos's work). Fixed the list version of the repeat operator (x): it now only calls overloaded methods for the scalar version: (1,2,$overloaded) x 10 no longer erroneously calls x_method($overloaded,10)) The only thing I haven't checked/fixed yet is overloading the iterator operator, <>.
* Remove union _xivu from _XPVCV_COMMON, and hence structs xpvcv and xpvfmNicholas Clark2010-05-211-4/+3
| | | | | | | Replaced with xcv_depth and xfm_lines respectively. Both structures might benefit from some field re-ordering. Update the descriptive comments in the definition of union _xivu.