1616#include "common/var_eval.h"
1717#include "common/plugins.h"
1818
19+ //
20+ // returns a temporary var that can exist in the calling scope
21+ //
22+ var_p_t v_get_tmp (var_p_t map ) {
23+ var_p_t result = map_get (map , MAP_TMP_FIELD );
24+ if (result == NULL ) {
25+ result = map_add_var (map , MAP_TMP_FIELD , 0 );
26+ }
27+ return result ;
28+ }
29+
1930void v_eval_func (var_p_t self , var_p_t v_func , var_p_t result ) {
2031 if (v_func -> v .fn .cb != NULL ) {
2132 // internal object method
@@ -185,11 +196,7 @@ var_t *code_get_map_element(var_t *map, var_t *field) {
185196 if (udf_rv .type != kwTYPE_RET ) {
186197 err_stackmess ();
187198 } else {
188- // result must exist until processed in eval()
189- var_p_t var = map_get (map , MAP_TMP_FIELD );
190- if (var == NULL ) {
191- var = map_add_var (map , MAP_TMP_FIELD , 0 );
192- }
199+ var_p_t var = v_get_tmp (map );
193200 v_move (var , udf_rv .x .vdvar .vptr );
194201 v_detach (udf_rv .x .vdvar .vptr );
195202 result = var ;
@@ -198,10 +205,7 @@ var_t *code_get_map_element(var_t *map, var_t *field) {
198205 } else if (field -> type == V_ARRAY ) {
199206 result = code_getvarptr_arridx (field );
200207 } else if (field -> type == V_FUNC ) {
201- result = map_get (map , MAP_TMP_FIELD );
202- if (result == NULL ) {
203- result = map_add_var (map , MAP_TMP_FIELD , 0 );
204- }
208+ result = v_get_tmp (map );
205209 v_init (result );
206210 v_eval_func (map , field , result );
207211 } else {
0 commit comments