From 95118bc1d9090116cbd2ad5423ae023033d5756f Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 7 May 2023 22:59:07 -0400 Subject: [PATCH] delete more elements without overflows. --- mumble | Bin 190768 -> 190872 bytes src/mumble.c | 29 +++++++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/mumble b/mumble index 77d8e51256c6b9290bb33619ca444a5d89dcff78..2d275c3598855bc781239e72eed460c35ce1d7c0 100755 GIT binary patch delta 33891 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 delta 33285 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 O9^gAMEKe)cell[0]); + lispval* manipulation = clone_lispval(v->cell[1]); + lispenv* env = NULL; // clone_lispval(blah) + lispval* lambda = lispval_lambda_func(variables, manipulation, NULL); + */ if (VERBOSE) { printfln("Allocating user-defined function"); } @@ -157,6 +163,8 @@ lispval* lispval_lambda_func(lispval* variables, lispval* manipulation, lispenv* // Previously: unclear how to garbage-collect this. Maybe add to a list and collect at the end? // Now: Hah! Lambda functions are just added to the environment, so they will just // be destroyed when it is destroyed. + // But no! in def {id} (@ {x} {x}), there is a copy of a lambda function in + // the arguments to def. Aarg! if (VERBOSE) { printfln("Allocated user-defined function"); } @@ -259,11 +267,13 @@ void delete_lispval(lispval* v) v->env = NULL; } if (v->variables != NULL) { + // not deleting these for now. // delete_lispval(v->variables); // free(v->variables) // v->variables = NULL; } if (v->manipulation != NULL) { + // not deleting these for now. // delete_lispval(v->manipulation); // free(v->manipulation); // v->manipulation = NULL; @@ -631,7 +641,11 @@ lispval* clone_lispval(lispval* old) break; case LISPVAL_USER_FUNC: if(VERBOSE) printfln("Cloning function. This generally shouldn't be happening, given that I've decided to just add functions to the environment and just clean them when the environment is cleaned. One situation where it should happen is in def {id} (@ {x} {x}), there is a lambda function in the arguments, which should get collected. "); - new = lispval_lambda_func(old->variables, old->manipulation, old->env); + lispval* variables = clone_lispval(old->variables); + lispval* manipulation = clone_lispval(old->manipulation); + lispenv* env = clone_lispenv(old->env); + new = lispval_lambda_func(variables, manipulation, env); + // new = lispval_lambda_func(old->variables, old->manipulation, old->env); // Also, fun to notice how these choices around implementation would determine tricky behaviour details around variable shadowing. break; case LISPVAL_SEXPR: @@ -805,9 +819,9 @@ lispval* builtin_define_lambda(lispval* v, lispenv* env) // def { {plus} {{@ {x y} {+ x y}} }} // (eval plus) 1 2 // (@ { {x y} { + x y } }) 1 2 - LISPVAL_ASSERT(v->count == 2, "Lambda definition requires two arguments; try @ { {x y} { + x y } }"); - LISPVAL_ASSERT(v->cell[0]->type == LISPVAL_QEXPR, "Lambda definition (@) requires that the first sub-arg be a q-expression; try @ { {x y} { + x y } }"); - LISPVAL_ASSERT(v->cell[1]->type == LISPVAL_QEXPR, "Lambda definition (@) requires that the second sub-arg be a q-expression; try @ { {x y} { + x y } }"); + LISPVAL_ASSERT(v->count == 2, "Lambda definition requires two arguments; try (@ {x y} { + x y }) "); + LISPVAL_ASSERT(v->cell[0]->type == LISPVAL_QEXPR, "Lambda definition (@) requires that the first sub-arg be a q-expression; try @ {x y} { + x y }"); + LISPVAL_ASSERT(v->cell[1]->type == LISPVAL_QEXPR, "Lambda definition (@) requires that the second sub-arg be a q-expression; try @ {x y} { + x y }"); lispval* variables = clone_lispval(v->cell[0]); lispval* manipulation = clone_lispval(v->cell[1]); @@ -815,8 +829,9 @@ lispval* builtin_define_lambda(lispval* v, lispenv* env) for (int i = 0; i > variables->count; i++) { LISPVAL_ASSERT(variables->cell[i]->type == LISPVAL_SYM, "First argument in function definition must only be symbols. Try @ { {x y} { + x y } }"); } - - lispval* lambda = lispval_lambda_func(variables, manipulation, NULL); + lispenv* new_env = clone_lispenv(env); + // So env at the time of creation! + lispval* lambda = lispval_lambda_func(variables, manipulation, new_env); return lambda; } // Simple math ops @@ -1048,6 +1063,8 @@ lispval* evaluate_lispval(lispval* l, lispenv* env) lispval* temp_expression = clone_lispval(f->manipulation); temp_expression->type = LISPVAL_SEXPR; lispval* answer = evaluate_lispval(temp_expression, evaluation_env); + // delete_lispval(temp_expression); + // delete_lispenv(evaluation_env); // lispval* answer = builtin_eval(f->manipulation, f->env); // destroy_lispenv(f->env); return answer;