From a926335a9098a4ca42b447c012b038881c1e3559 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 3 Jan 2022 19:59:54 +0100 Subject: Add some comments for later --- src/ir.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/ir.h') diff --git a/src/ir.h b/src/ir.h index cd2100c..f039882 100644 --- a/src/ir.h +++ b/src/ir.h @@ -362,6 +362,12 @@ compile_proc_call(ProgramIr *program, Procedure *proc, Object *obj) { if (IS_BUILTIN(obj->head)) { compile_builtin(program, proc, obj); } else if (IS_LAMBDA(obj->head)) { + // FIXME: Setup stack parameter order and call convention. + Object *tail = obj->tail; + while (tail != NULL) { + compile_object(program, proc, tail->head); + tail = tail->tail; + } compile_object(program, proc, obj->head); INST_SIMPLE(proc, OP_CALL, obj->line, obj->col); } else { @@ -399,6 +405,10 @@ compile_def(ProgramIr *program, Procedure *proc, Object *obj) { void compile_lambda(ProgramIr *program, Procedure *proc, Object *obj) { + // NOTE: As an optimization, instead of storing and comparing lambdas, we + // could calculate a checksum and only check equality in full if they + // differ. We can also calculate the equality of Procedure instead of + // lambdas. for (size_t i = 0; i < array_size(program->lambdas); ++i) { if (object_equal(program->lambdas[i], obj)) { INST_ARG(proc, OP_PUSH, obj, obj->line, obj->col); -- cgit v1.2.1