]> git.eli173.com Git - klapaucius/commitdiff
fixed memory leaks in loading
authorElijah Cohen <cohen@eli173.com>
Thu, 15 Aug 2024 20:56:20 +0000 (20:56 +0000)
committerElijah Cohen <cohen@eli173.com>
Thu, 15 Aug 2024 20:56:20 +0000 (20:56 +0000)
src/builtins.c
src/builtins/arithmetic.c
src/builtins/core.c
src/test.c

index 90cf1c157a2cb4b35512869f109393b8ca17b4be..5bef3b417d1bd63cadac97b9193083e76b2d46f7 100644 (file)
@@ -38,10 +38,21 @@ uint64_t u64_get_num_args(Sexpr* b) {
 
 
 Sexpr* load_env(Sexpr* env) {
-       append_to_dict(env, from_sym("nil"), from_nil());
-       append_to_dict(env, from_sym("t"), from_t());
-       Sexpr* newenv = load_core_env(env);
+       Sexpr* nilk = from_sym("nil");
+       Sexpr* nilv = from_nil();
+       append_to_dict(env, nilk, nilv);
+       sexpr_free(nilk);
+       sexpr_free(nilv);       
+
+       Sexpr* tk = from_sym("t");
+       Sexpr* tv = from_t();
+       append_to_dict(env, tk, tv);
+       sexpr_free(tk);
+       sexpr_free(tv);
+
+       Sexpr* newenv = env;
+       newenv = load_core_env(env);
        newenv = load_arith_env(newenv);
-       append_to_dict(env, from_sym("asdf"), from_uint(5455));
+       //append_to_dict(env, from_sym("asdf"), from_uint(5455));
        return newenv;
 }
index fb2b16b0ce489f5e4b6fb900b555956d0a828524..4a686c40ca64ac27c3c16b08fa370339bf0893e2 100644 (file)
@@ -33,8 +33,12 @@ Sexpr* x_arith_dispatch(Sexpr* b, Sexpr* rest, Sexpr* env) {
 }
 
 Sexpr* load_arith_env(Sexpr* env) {
-       Sexpr* a_plus = from_opcode((ARITH_PREFIX << 8) | ARITH_PLUS);
-       append_to_dict(env, from_sym("+"), a_plus);
+       Sexpr* k;
 
+       k = from_sym("+");
+       Sexpr* a_plus = from_opcode((ARITH_PREFIX << 8) | ARITH_PLUS);
+       append_to_dict(env, k, a_plus);
+       sexpr_free(a_plus);
+       sexpr_free(k);
        return env;
 }
index ee739e4fa4be5a6c083cec2314c2c5a8a9a199db..7b1ff6229dcc35f8456f2bfe9c6879accd76d4ae 100644 (file)
@@ -146,25 +146,65 @@ Sexpr* x_core_dispatch(Sexpr* b, Sexpr* rest, Sexpr* env) {
 
 
 Sexpr* load_core_env(Sexpr* env) {
+       Sexpr* k = from_sym("quote");
        Sexpr* c_quote = from_opcode(CORE_QUOTE);
-       append_to_dict(env, from_sym("quote"), c_quote);
+       append_to_dict(env, k, c_quote);
+       sexpr_free(c_quote);
+       sexpr_free(k);
+       
+       k = from_sym("cons");
        Sexpr* c_cons = from_opcode(CORE_CONS);
-       append_to_dict(env, from_sym("cons"), c_cons);
+       append_to_dict(env, k, c_cons);
+       sexpr_free(c_cons);
+       sexpr_free(k);
+
+       k = from_sym("car");
        Sexpr* c_car = from_opcode(CORE_CAR);
-       append_to_dict(env, from_sym("car"), c_car);
+       append_to_dict(env, k, c_car);
+       sexpr_free(c_car);
+       sexpr_free(k);
+       
+       k = from_sym("cdr");
        Sexpr* c_cdr = from_opcode(CORE_CDR);
-       append_to_dict(env, from_sym("cdr"), c_cdr);
+       append_to_dict(env, k, c_cdr);
+       sexpr_free(c_cdr);
+       sexpr_free(k);
+
+       k = from_sym("if");
        Sexpr* c_if = from_opcode(CORE_IF);
-       append_to_dict(env, from_sym("if"), c_if);
+       append_to_dict(env, k, c_if);
+       sexpr_free(c_if);
+       sexpr_free(k);
+
+       k = from_sym("eq");
        Sexpr* c_eq = from_opcode(CORE_EQ);
-       append_to_dict(env, from_sym("eq"), c_eq);
+       append_to_dict(env, k, c_eq);
+       sexpr_free(c_eq);
+       sexpr_free(k);
+
+       k = from_sym("not");
        Sexpr* c_not = from_opcode(CORE_NOT);
-       append_to_dict(env, from_sym("not"), c_not);
+       append_to_dict(env, k, c_not);
+       sexpr_free(c_not);
+       sexpr_free(k);
+
+       k = from_sym("atom");
        Sexpr* c_atom = from_opcode(CORE_ATOM);
-       append_to_dict(env, from_sym("atom"), c_atom);
+       append_to_dict(env, k, c_atom);
+       sexpr_free(c_atom);
+       sexpr_free(k);
+
+       k = from_sym("def");
        Sexpr* c_def = from_opcode(CORE_DEF);
-       append_to_dict(env, from_sym("def"), c_def);
+       append_to_dict(env, k, c_def);
+       sexpr_free(c_def);
+       sexpr_free(k);
+
+       k = from_sym("exit");
        Sexpr* c_exit = from_opcode(CORE_EXIT);
-       append_to_dict(env, from_sym("exit"), c_exit);
+       append_to_dict(env, k, c_exit);
+       sexpr_free(c_exit);
+       sexpr_free(k);
+
        return env;
 }
index 6d5de148429c10a26b671104a09e7cd3069f9151..eb24d9879e106e2dec0c6a5e1c3bddc69b2dad7a 100644 (file)
@@ -205,10 +205,30 @@ void memtest_dict() {
        sexpr_free(d);
 }
 
+void memtest_eval() {
+       printf("memtest eval\n");
+       Sexpr* env = init_dict();
+       load_env(env);
+
+       Sexpr* parsed = parse("(cons 1 2)");
+       Sexpr* val = eval(car(parsed), env);
+       char* out = sprint_sexpr(val);
+       printf(" - %s\n", out);
+       free(out);
+       sexpr_free(val);
+       printf("uh\n");
+       sexpr_free(parsed);
+       printf("um\n");
+
+       
+       sexpr_free(env);
+}
+
 void run_tests(){
+       memtest_eval();
        //mem_testing();
        //mem_parser();
-       memtest_dict();
+       //memtest_dict();
        //mem_hammer();
        //test_basics();
        //test2();