浏览代码

bugfix function closure value handling

ncannasse 7 年之前
父节点
当前提交
37247006e7
共有 1 个文件被更改,包括 6 次插入3 次删除
  1. 6 3
      src/std/fun.c

+ 6 - 3
src/std/fun.c

@@ -30,6 +30,7 @@ HL_PRIM vclosure *hl_alloc_closure_void( hl_type *t, void *fvalue ) {
 	c->t = t;
 	c->fun = fvalue;
 	c->hasValue = false;
+	c->value = NULL;
 	return c;
 }
 
@@ -80,11 +81,13 @@ HL_PRIM vdynamic *hl_make_closure( vdynamic *c, vdynamic *v ) {
 
 HL_PRIM vdynamic* hl_get_closure_value( vdynamic *c ) {
 	vclosure *cl = (vclosure*)c;
+	if( !cl->hasValue )
+		return NULL;
 	if( cl->hasValue == 2 )
 		return hl_get_closure_value((vdynamic*)((vclosure_wrapper*)c)->wrappedFun);
-	if( cl->hasValue && cl->fun != fun_var_args )
-		return hl_make_dyn(&cl->value, cl->t->fun->parent->fun->args[0]);
-	return (vdynamic*)cl->value;
+	if( cl->fun == fun_var_args )
+		return (vdynamic*)cl->value;
+	return hl_make_dyn(&cl->value, cl->t->fun->parent->fun->args[0]);
 }
 
 HL_PRIM bool hl_fun_compare( vdynamic *a, vdynamic *b ) {