   return NULL;
 }
 
-void dropframe (int tc, object **env) {
-  if (tc) {
-    while (*env != NULL && car(*env) != NULL) {
-      pop(*env);
-    }
-  } else {
-    push(nil, *env);
-  }
-}
-
 // Handling closures
   
-object *closure (object *fname, object *state, object *function, object *args, object **env) {
+object *closure (int tc, object *fname, object *state, object *function, object *args, object **env) {
   int trace = 0;
   if (fname != NULL) trace = tracing(fname->name);
   if (trace) {

  }
  if (listp(function) && issymbol(car(function), LAMBDA)) {
    function = cdr(function);
    object *result = closure(NULL, NULL, function, args, env);
    return eval(result, *env);
  }
  if (listp(function) && issymbol(car(function), CLOSURE)) {
    function = cdr(function);
    object *result = closure(NULL, car(function), cdr(function), args, env);
    return eval(result, *env);
  }
  error2(function, PSTR("is an illegal function"));

/* uLisp AVR Version 2.2 - www.ulisp.com
   David Johnson-Davies - www.technoblogy.com - 19th May 2018

   Licensed under the MIT license: https://opensource.org/licenses/MIT
*/
