diff --git a/bf.kp b/bf.kp index 6c3150e..4402393 100644 --- a/bf.kp +++ b/bf.kp @@ -70,6 +70,8 @@ ; (inner 7))) ; 7))) +(def! to_be_saved (with-meta [1] [2])) +(def! to_be_saved_s "asdfasdf") (def! main (fn* () (let* ( a 7 b [1] @@ -83,6 +85,9 @@ (println c) (println (meta c)) (println "world") + (println to_be_saved) + (println (meta to_be_saved)) + (println to_be_saved_s) a))) ))))) (do diff --git a/k_prime.krak b/k_prime.krak index 2c20726..e263bf3 100644 --- a/k_prime.krak +++ b/k_prime.krak @@ -1728,7 +1728,8 @@ fun compile_value(top_decs: *str, top_defs: *str, main_init: *str, defs: *str, e var v = e->get(s) e->remove(s) var x = str() - var value = compile(top_decs, top_defs, main_init, &x, e, get_value(v)) + /*var value = compile(top_decs, top_defs, main_init, &x, e, get_value(v))*/ + var value = compile_value(top_decs, top_defs, main_init, &x, e, get_value(v), true) *top_decs += "size_t " + s + ";\n" *main_init += x *main_init += s + " = " + value + ";\n" @@ -1755,7 +1756,16 @@ fun compile_value(top_decs: *str, top_defs: *str, main_init: *str, defs: *str, e call_str += compile(top_decs, top_defs, main_init, defs, env, l.get()[i]) } } - return call_str + "})" + call_str += "})" + if ast.meta != null() { + var meta_value = compile_value(top_decs, top_defs, main_init, defs, env, *ast.meta, true) + var for_meta = "for_meta_" + new_tmp() + *defs += "size_t " + for_meta + " = " + call_str + ";\n" + *defs += "((size_t*)(" + for_meta + ">>3))[0] = " + meta_value + ";\n" + return for_meta + } else { + return call_str + } } MalValue_int::Int(i) { return to_string(i<<3)