summaryrefslogtreecommitdiff
path: root/scope.c
diff options
context:
space:
mode:
Diffstat (limited to 'scope.c')
-rw-r--r--scope.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/scope.c b/scope.c
index 03cdddd7ef..d2dac1ca94 100644
--- a/scope.c
+++ b/scope.c
@@ -272,6 +272,16 @@ I32 *intp;
}
void
+save_I16(intp)
+I16 *intp;
+{
+ SSCHECK(3);
+ SSPUSHINT(*intp);
+ SSPUSHPTR(intp);
+ SSPUSHINT(SAVEt_I16);
+}
+
+void
save_iv(ivp)
IV *ivp;
{
@@ -496,6 +506,10 @@ I32 base;
ptr = SSPOPPTR;
*(I32*)ptr = (I32)SSPOPINT;
break;
+ case SAVEt_I16: /* I16 reference */
+ ptr = SSPOPPTR;
+ *(I16*)ptr = (I16)SSPOPINT;
+ break;
case SAVEt_IV: /* IV reference */
ptr = SSPOPPTR;
*(IV*)ptr = (IV)SSPOPIV;
@@ -601,6 +615,12 @@ I32 base;
savestack_ix -= delta; /* regexp must have croaked */
}
break;
+ case SAVEt_STACK_POS: /* Position on Perl stack */
+ {
+ I32 delta = SSPOPINT;
+ stack_sp = stack_base + delta;
+ }
+ break;
default:
croak("panic: leave_scope inconsistency");
}