diff --git a/src/interpret.c b/src/interpret.c
index 0dc50761cd286a432ab3709f7ce1c6d8e6e1f43a..98298d287472b6a231040a1511a34fbd3cae784b 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -358,14 +358,15 @@ PMOD_EXPORT void init_interpreter(void)
  * lvalue array: { T_ARRAY_LVALUE, array with lvalue pairs }
  */
 
-void lvalue_to_svalue_no_free(struct svalue *to,struct svalue *lval)
+int lvalue_to_svalue_no_free(struct svalue *to, struct svalue *lval)
 {
+  int run_time_type;
 #ifdef PIKE_SECURITY
   if(TYPEOF(*lval) <= MAX_COMPLEX)
     if(!CHECK_DATA_SECURITY(lval->u.array, SECURITY_BIT_INDEX))
       Pike_error("Index permission denied.\n");
 #endif
-  switch(TYPEOF(*lval))
+  switch(run_time_type = TYPEOF(*lval))
   {
    case T_ARRAY_LVALUE:
     {
@@ -421,6 +422,7 @@ void lvalue_to_svalue_no_free(struct svalue *to,struct svalue *lval)
       else
 	index_error(0,0,0,lval,lval+1,"Indexing a basic type.\n");
   }
+  return run_time_type;
 }
 
 PMOD_EXPORT void assign_lvalue(struct svalue *lval,struct svalue *from)
diff --git a/src/interpret.h b/src/interpret.h
index 8c9455170e26033ae3bad874597cafdf25b13881..1709c3789275149cbc46096594ab830eba494c68 100644
--- a/src/interpret.h
+++ b/src/interpret.h
@@ -745,7 +745,7 @@ void gc_mark_stack_external (struct pike_frame *frame,
 			     struct svalue *stack_p, struct svalue *stack);
 PMOD_EXPORT int low_init_interpreter(struct Pike_interpreter_struct *interpreter);
 PMOD_EXPORT void init_interpreter(void);
-void lvalue_to_svalue_no_free(struct svalue *to,struct svalue *lval);
+int lvalue_to_svalue_no_free(struct svalue *to, struct svalue *lval);
 PMOD_EXPORT void assign_lvalue(struct svalue *lval,struct svalue *from);
 PMOD_EXPORT union anything *get_pointer_if_this_type(struct svalue *lval, TYPE_T t);
 void print_return_value(void);