Commit Diff


commit - 3e23847c5a3bd90213c8b080f0c19094eb5707a3
commit + 219cbeaa58fa0f4f6a90d357d38414dd80bc8463
blob - 71ba49d74d6d53926437437b20dde74eaecdea0d
blob + f04e9995a11e0f1ef8a590d58081409203b239c1
--- script.c
+++ script.c
@@ -577,19 +577,18 @@ eval(struct op *op)
 		proc = op->v.funcall.proc;
 		if (proc->nativefn != NULL) {
 			/* push arguments on the stack */
-			for (i = 0; i < op->v.funcall.argc; ++i) {
-				t = &op->v.funcall.argv[i];
-				if ((ret = eval(t)) != EVAL_OK)
-					return ret;
-			}
+			t = op->v.funcall.argv;
+			if (t != NULL && (ret = eval(t)) != EVAL_OK)
+				return ret;
 			if ((ret = proc->nativefn(op->v.funcall.argc))
 			    != EVAL_OK)
 				return ret;
 		} else {
 			pushenv();
 
-			for (i = 0; i < op->v.funcall.argc; ++i) {
-				t = &op->v.funcall.argv[i];
+			for (t = op->v.funcall.argv, i = 0;
+			     t != NULL;
+			     t = t->next, i++) {
 				if ((ret = setvar(proc->args[i], t))
 				    != EVAL_OK)
 					return ret;