summaryrefslogtreecommitdiff
path: root/perl.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-11-13 02:17:53 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-11-13 02:17:53 +0000
commit971a9dd36d83520d7040365d2791ad56b6d39411 (patch)
tree2bb4f700b96a8e36132040891ef26db29f3d45a9 /perl.c
parent11faa288e292c27cb2ddc4ccdc483b523d26ce19 (diff)
downloadperl-971a9dd36d83520d7040365d2791ad56b6d39411.tar.gz
cloned interpreters now actually run and pass all but 55/10386
subtests; various subtle bugs, new and old, observed when running cloned interpreters have been fixed still to do: | * dup psig_ptr table | * merge PADOP GVs support with "our" SVs (existing PADOPs are too | simple-minded and grab one pad entry each, heavily bloating | the pad by not avoiding dups) | * overloaded constants are not really immutable--they need to | be PADOPs | * allocator for constants and OPs need to be spelled differently | (shared vs interpreter-local allocations) | * optree refcounting is still missing locking (macros are in place) | * curstackinfo, {mark,scope,save,ret}stack need to be cloned so | perl_clone() can be called from within runops*() p4raw-id: //depot/perl@4553
Diffstat (limited to 'perl.c')
-rw-r--r--perl.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/perl.c b/perl.c
index 11a06bd4f1..5eb83387dc 100644
--- a/perl.c
+++ b/perl.c
@@ -512,7 +512,8 @@ perl_destruct(pTHXx)
PL_utf8_totitle = Nullsv;
PL_utf8_tolower = Nullsv;
- SvREFCNT_dec(PL_compiling.cop_warnings);
+ if (!specialWARN(PL_compiling.cop_warnings))
+ SvREFCNT_dec(PL_compiling.cop_warnings);
PL_compiling.cop_warnings = Nullsv;
/* Prepare to destruct main symbol table. */
@@ -3121,7 +3122,7 @@ void
Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
{
dTHR;
- SV *atsv = ERRSV;
+ SV *atsv;
line_t oldline = CopLINE(PL_curcop);
CV *cv;
STRLEN len;
@@ -3134,8 +3135,10 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_call_list_body), cv);
switch (ret) {
case 0:
+ atsv = ERRSV;
(void)SvPV(atsv, len);
if (len) {
+ STRLEN n_a;
PL_curcop = &PL_compiling;
CopLINE_set(PL_curcop, oldline);
if (paramList == PL_beginav)
@@ -3148,7 +3151,7 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
: "END");
while (PL_scopestack_ix > oldscope)
LEAVE;
- Perl_croak(aTHX_ "%s", SvPVX(atsv));
+ Perl_croak(aTHX_ "%s", SvPVx(atsv, n_a));
}
break;
case 1: