From f88ad89868563add8e76d7d06c33bdbe3fe7063c Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Tue, 2 May 2023 01:47:59 -0400 Subject: [PATCH] savepoint: see if this fixes a memory leak. --- mumble | Bin 111956 -> 112148 bytes src/mumble.c | 46 +++++++++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/mumble b/mumble index 705ede559e3d0e8c3e54f5ab851a9db2314311ed..1b6dbf9757dbe5480b617ff46d6af9b3aedd7ae9 100755 GIT binary patch delta 26550 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 delta 26239 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 zets-JKaro;count ==1, "Error: function eval passed too many arguments"); - LISPVAL_ASSERT(v->cell[0]->type == LISPVAL_QEXPR, "Error: Argument passed to eval is not a q-expr, i.e., a bracketed list."); - v->cell[0]->type=LISPVAL_SEXPR; - return evaluate_lispval(v->cell[0]); + lispval* old = v->cell[0]; + LISPVAL_ASSERT(old->type == LISPVAL_QEXPR, "Error: Argument passed to eval is not a q-expr, i.e., a bracketed list."); + lispval* new = clone_lispval(old); + new->type=LISPVAL_SEXPR; + return evaluate_lispval(new); + // Returns something that should be freed later: probably. + // Returns something that is independent of the input: depends on the output of evaluate_lispval. } lispval* builtin_join(lispval* l){ @@ -428,6 +432,8 @@ lispval* builtin_join(lispval* l){ } } return result; + // Returns something that should be freed later: yes. + // Returns something that is independent of the input: yes. } // Simple math ops @@ -449,12 +455,10 @@ lispval* builtin_math_ops(char* op, lispval* v) return lispval_err("Error: Non minus unary operation"); } } else if (v->count >= 2) { - lispval* x = pop_lispval(v, 0); - - while (v->count > 0) { - // Pop the next element - lispval* y = pop_lispval(v, 0); - + lispval* x = clone_lispval(v->cell[0]);// pop_lispval(v, 0); + + for(int i=1;icount; i++){ + lispval* y = v->cell[i]; if (strcmp(op, "+") == 0) { x->num += y->num; } @@ -473,13 +477,13 @@ lispval* builtin_math_ops(char* op, lispval* v) } x->num /= y->num; } - - delete_lispval(y); - } + } return x; } else { return lispval_err("Error: Incorrect number of args. Perhaps a lispval->count was wrongly initialized?"); } + // Returns something that should be freed later: yes. + // Returns something that is independent of the input: yes. } // Aggregate both math and operations over lists @@ -494,6 +498,8 @@ lispval* builtin_functions(char* func, lispval* v) } else { return lispval_err("Unknown function"); } + // Returns something that should be freed later: depends on eval + // Returns something that is independent of the input: depends on eval } // Evaluate the lispval @@ -510,15 +516,21 @@ lispval* evaluate_lispval(lispval* l) // Check if any are errors. for (int i = 0; i < l->count; i++) { if (l->cell[i]->type == LISPVAL_ERR) { - return pop_lispval(l, i); + return clone_lispval(l->cell[i]); } } // Check if the first element is an operation. if (l->count >= 2 && ((l->cell[0])->type == LISPVAL_SYM)) { - lispval* op = pop_lispval(l, 0); - lispval* result = builtin_functions(op->sym, l); - delete_lispval(op); + // lispval* op = pop_lispval(l, 0); + lispval* operation = clone_lispval(l->cell[0]); + lispval* operands = lispval_sexpr(); + for(int i=1; icount; i++){ + lispval_append_child(operands, l->cell[i]); + } + lispval* result = builtin_functions(operation->sym, operands); + delete_lispval(operation); + delete_lispval(operands); return result; } return l; @@ -590,7 +602,7 @@ int main(int argc, char** argv) printf("\n"); } delete_lispval(l); - // delete_lispval(result); + delete_lispval(result); } else { /* Otherwise Print the Error */ mpc_err_print(result.error);