From e5962efe1fc0ff6aba5284cffe5d434ebb6a3a97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sun, 8 Feb 2015 19:58:48 +0100
Subject: [PATCH] Interpreter: lvalue_to_svalue_no_free() now returns the type
 of lvalue.

---
 src/interpret.c | 6 ++++--
 src/interpret.h | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/interpret.c b/src/interpret.c
index 0dc50761cd..98298d2874 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 8c9455170e..1709c37892 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);
-- 
GitLab