diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-20 16:07:38 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 2000-02-20 16:07:38 +0000 |
commit | 14dd3ad8c9bf82cf09798a22cc89a9862dfd6d1a (patch) | |
tree | e4a7db15d6f3f866de5e2a5881c5b1ec10c3f883 /pp_ctl.c | |
parent | c9fcc6c44229e7c36dee08e5d883d12284a44f17 (diff) | |
download | perl-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.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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; } |