summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-02-20 16:07:38 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-02-20 16:07:38 +0000
commit14dd3ad8c9bf82cf09798a22cc89a9862dfd6d1a (patch)
treee4a7db15d6f3f866de5e2a5881c5b1ec10c3f883 /pp_ctl.c
parentc9fcc6c44229e7c36dee08e5d883d12284a44f17 (diff)
downloadperl-14dd3ad8c9bf82cf09798a22cc89a9862dfd6d1a.tar.gz
make change#3386 a build-time option (avoids problems due to
perl_run() longjmping out) p4raw-link: @3386 on //depot/perl: 312caa8e97f1c7ee342a9895c2f0e749625b4929 p4raw-id: //depot/perl@5162
Diffstat (limited to 'pp_ctl.c')
-rw-r--r--pp_ctl.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 030bcbd166..24fad37430 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2521,9 +2521,17 @@ S_save_lines(pTHX_ AV *array, SV *sv)
}
}
+#ifdef PERL_FLEXIBLE_EXCEPTIONS
STATIC void *
S_docatch_body(pTHX_ va_list args)
{
+ return docatch_body();
+}
+#endif
+
+STATIC void *
+S_docatch_body(pTHX)
+{
CALLRUNOPS(aTHX);
return NULL;
}
@@ -2541,10 +2549,18 @@ S_docatch(pTHX_ OP *o)
assert(CATCH_GET == TRUE);
#endif
PL_op = o;
+#ifdef PERL_FLEXIBLE_EXCEPTIONS
redo_body:
CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
+#else
+ JMPENV_PUSH(ret);
+#endif
switch (ret) {
case 0:
+#ifndef PERL_FLEXIBLE_EXCEPTIONS
+ redo_body:
+ docatch_body();
+#endif
break;
case 3:
if (PL_restartop && cursi == PL_curstackinfo) {
@@ -2554,10 +2570,12 @@ S_docatch(pTHX_ OP *o)
}
/* FALL THROUGH */
default:
+ JMPENV_POP;
PL_op = oldop;
JMPENV_JUMP(ret);
/* NOTREACHED */
}
+ JMPENV_POP;
PL_op = oldop;
return Nullop;
}