diff --git a/ulisp-arm.ino b/ulisp-arm.ino index 76dfb2c..2d8098c 100644 --- a/ulisp-arm.ino +++ b/ulisp-arm.ino @@ -1,5 +1,5 @@ -/* uLisp ARM 2.7b - www.ulisp.com - David Johnson-Davies - www.technoblogy.com - 9th June 2019 +/* uLisp ARM 2.7c - www.ulisp.com + David Johnson-Davies - www.technoblogy.com - 20th June 2019 Licensed under the MIT license: https://opensource.org/licenses/MIT */ @@ -972,8 +972,11 @@ object *closure (int tc, object *fname, object *state, object *function, object function = cdr(function); // Dropframe if (tc) { - while (*env != NULL && car(*env) != NULL) pop(*env); - } else push(nil, *env); + if (*env != NULL && car(*env) == NULL) { + pop(*env); + while (*env != NULL && car(*env) != NULL) pop(*env); + } else push(nil, *env); + } // Push state while (state != NULL) { object *pair = first(state); @@ -1014,6 +1017,7 @@ object *closure (int tc, object *fname, object *state, object *function, object if (args != NULL) error2(fname, PSTR("has too many arguments")); if (trace) { pserial(')'); pln(pserial); } // Do an implicit progn + if (tc) push(nil, *env); return tf_progn(function, *env); }