| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When MULTIPLICITY was first developed, and interpreter state moved into an
interpreter struct, thread and interpreter local PL_* variables were defined
as macros that called accessor functions, returning the address of the value,
outside of the perl core. The intent was to allow members within the
interpreter struct to change size without breaking binary compatibility, so
that bug fixes could be merged to a maintenance branch that necessitated such
a size change.
However, some non-core code defines PERL_CORE, sometimes intentionally to
bypass this mechanism for speed reasons, sometimes for other reasons but with
the inadvertent side effect of bypassing this mechanism. As some of this code
is widespread in production use, the result is that the core *can't* change
the size of members of the interpreter struct, as it will break such modules
compiled against a previous release on that maintenance branch. The upshot
is that this mechanism is redundant, and well-behaved code is penalised by
it. Hence it can and should be removed.
Accessor functions are still needed for globals when PERL_GLOBAL_STRUCT is
defined.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These provided a non-public API for the hash and array code to donate free
memory direct to the SV head allocation routines, instead of returning it
to the malloc system with free().
I assume that on some older mallocs this could offer significant benefits.
However, my benchmarking on a modern malloc couldn't detect any significant
effect (positive or negative) on removing the code. Its (continued) presence,
however, has downsides
a: slightly more code complexity
b: slightly larger interpreter structure
c: in the steady state, if net creation of SVs is zero, 1 chunk of allocated
but unused memory will exist (per thread)
So I think it best to remove it.
|
|
|
|
|
|
|
|
| |
New variable PL_rpeepp makes it possible for extensions to hook
the per-op-chain part of the peephole optimiser (which recurses into
side chains). The existing variable PL_peepp still allows hooking the
per-sub part of the peephole optimiser, maintaining perfect backward
compatibility.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds PL_apiversion, allowing the API version of a running interpreter to be
introspected. It is used in the new XS_APIVERSION_BOOTCHECK macro, which is
added to the _boot function of every XS module, to compare it against the API
version the module has been compiled against. If the versions do not match, an
exception is thrown.
This doesn't fully prevent binary incompatible extensions to be loaded. It
merely compares PERL_API_* between compile- and runtime, and does not attempt to
solve the problem of identifying binary incompatible perls with the same API
version (i.e. the same perl version configured with and without DEBUGGING).
|
|
|
|
|
|
|
|
|
|
| |
These take the form of a vtable pushed onto the new PL_blockhooks array.
This could probably do with a API around it later. Separate pre_end and
post_end hooks are needed to capture globals before the stack is unwound
(like needblockscope in the existing code). The intention is that once
a vtable is installed it never gets removed, so where necessary
extensions using this will need to use a hinthv element to determine
whether to do anything or not.
|
|
|
|
|
| |
This is initially intended for threads::shared and shouldn't (yet)
be considered part of the public API.
|
|
|
|
|
|
|
|
| |
When unwinding due to die, the new global PL_restartjmpenv points
to the JMP_ENV at which longjmping should stop and control should
be transferred to PL_restartop. This replaces the previous
use of cxstack[cxstack_ix+1].blk_eval.cur_top_env, located in a
nominally-discarded context frame.
|
| |
|
|
|
|
| |
ENTER/LEAVE when debugging is enabled
|
|
|
|
| |
syntax triggered by keywords
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
(and run "make regen")
|
|
|
|
|
|
| |
Perl_mro_get_from_name() to retrieve MROs by name, and PL_registered_mros to
store them in. Abolish the static array of mros, and instead register the dfs
and c3 MRO structures.
|
|
|
|
|
| |
the ANSI gods of VMS.
p4raw-id: //depot/perl@34886
|
|
|
|
|
| |
lines in subroutines defined inside eval ""s for the debugger.
p4raw-id: //depot/perl@34873
|
|
|
|
|
| |
Message-ID: <20081114084436.GJ5779@tytlal.topaz.cx>
p4raw-id: //depot/perl@34831
|
|
|
| |
p4raw-id: //depot/perl@34586
|
|
|
| |
p4raw-id: //depot/perl@34569
|
|
|
| |
p4raw-id: //depot/perl@32954
|
|
|
|
|
| |
a now unused variable.
p4raw-id: //depot/perl@32477
|
|
|
|
|
|
| |
global symbols to keep overall symbol length within 31 characters,
which is what the VMS C compiler with default flags can handle.
p4raw-id: //depot/perl@32275
|
|
|
|
|
|
|
|
| |
From: "Jerry D. Hedden" <jdhedden@cpan.org>
Message-ID: <1ff86f510711061136t52a1fe62waf384c4551612181@mail.gmail.com>
(core patch only)
p4raw-id: //depot/perl@32241
|
|
|
|
|
|
|
|
|
|
|
| |
into global variables (and hence a shared perl library). Additionally
under MULTIPLICITY record the size of the interpreter structure (total,
and for this version) and under PERL_GLOBAL_STRUCT the size of the
global variables structure. Coupled with PL_bincompat_options this will
allow 5.10.1 (and later), when compiled with a shared perl library, to
perform sanity checks in main() to verify that the shared library is
indeed binary compatible.
p4raw-id: //depot/perl@32238
|
|
|
|
|
|
|
| |
PL_cshlen can be calculated by the compiler. So eliminate both as
interpreter variables, and the code that calculates PL_cshlen at
runtime.
p4raw-id: //depot/perl@32035
|
|
|
|
|
| |
p4raw-link: @31978 on //depot/perl: d804f4346b490171e547d5cc512063e53da10708
p4raw-id: //depot/perl@32015
|
|
|
| |
p4raw-id: //depot/perl@31990
|
|
|
|
|
|
| |
From: "Robin Barker" <Robin.Barker@npl.co.uk>
Message-ID: <2C2E01334A940D4792B3E115F95B7226C9D1C3@exchsvr1.npl.ad.local>
p4raw-id: //depot/perl@31978
|
|
|
|
|
|
| |
From: "Brandon Black" <blblack@gmail.com>
Message-ID: <84621a60708121336m13dcf9e5uac624fb246f2a79c@mail.gmail.com>
p4raw-id: //depot/perl@31770
|
|
|
|
|
|
|
| |
the first two aren't used, and the last two are just place holders
to ensure that both runops functions get linked in; so make them
global rather than per-interpeter
p4raw-id: //depot/perl@31280
|
|
|
| |
p4raw-id: //depot/perl@31255
|
|
|
| |
p4raw-id: //depot/perl@31254
|
|
|
| |
p4raw-id: //depot/perl@31252
|
|
|
|
|
|
| |
and fix 'duplicate symbol' warnings from embed.pl
for utf8cache and sh_path
p4raw-id: //depot/perl@31246
|
|
|
| |
p4raw-id: //depot/perl@31245
|
|
|
| |
p4raw-id: //depot/perl@31203
|
|
|
| |
p4raw-id: //depot/perl@31200
|
|
|
|
|
| |
and simplify its creation and destruction
p4raw-id: //depot/perl@31199
|
|
|
| |
p4raw-id: //depot/perl@31154
|
|
|
|
|
| |
PL_nexttoke PL_curforce PL_nextval PL_nexttype
p4raw-id: //depot/perl@31148
|
|
|
|
|
|
|
| |
PL_bufptr PL_oldbufptr PL_oldoldbufptr
PL_linestart PL_bufend
PL_last_uni PL_last_lop PL_last_lop_op
p4raw-id: //depot/perl@31147
|
|
|
| |
p4raw-id: //depot/perl@31134
|
|
|
|
|
|
| |
From: "Brandon Black" <blblack@gmail.com>
Message-ID: <84621a60704301445y37e9b05ey235210a8e5547cc1@mail.gmail.com>
p4raw-id: //depot/perl@31122
|
|
|
|
|
|
| |
From: "Brandon Black" <blblack@gmail.com>
Message-ID: <84621a60704291527y1b39be37l221ef66e4c828f66@mail.gmail.com>
p4raw-id: //depot/perl@31107
|
|
|
|
|
|
|
| |
code, and instead use it to generate a header at perl build time.
By removing uudmap from the interpreter structure we save 256 bytes
per child thread.
p4raw-id: //depot/perl@31059
|
|
|
| |
p4raw-id: //depot/perl@31058
|
|
|
| |
p4raw-id: //depot/perl@31045
|
|
|
|
|
|
| |
as read only (or as much of it as it practical). This makes it trivial
to detect buggy code that is modifying the optree at runtime.
p4raw-id: //depot/perl@30829
|