aboutsummaryrefslogtreecommitdiffstats
path: root/src/ir.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-01-03 19:59:54 +0100
committerBad Diode <bd@badd10de.dev>2022-01-03 19:59:54 +0100
commita926335a9098a4ca42b447c012b038881c1e3559 (patch)
tree7445a8594a0986b1502423c707e34e92dff714fe /src/ir.h
parent073105080457218e67d999d6d70610914c9effe7 (diff)
downloadbdl-a926335a9098a4ca42b447c012b038881c1e3559.tar.gz
bdl-a926335a9098a4ca42b447c012b038881c1e3559.zip
Add some comments for later
Diffstat (limited to 'src/ir.h')
-rw-r--r--src/ir.h10
1 files changed, 10 insertions, 0 deletions
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) {
362 if (IS_BUILTIN(obj->head)) { 362 if (IS_BUILTIN(obj->head)) {
363 compile_builtin(program, proc, obj); 363 compile_builtin(program, proc, obj);
364 } else if (IS_LAMBDA(obj->head)) { 364 } else if (IS_LAMBDA(obj->head)) {
365 // FIXME: Setup stack parameter order and call convention.
366 Object *tail = obj->tail;
367 while (tail != NULL) {
368 compile_object(program, proc, tail->head);
369 tail = tail->tail;
370 }
365 compile_object(program, proc, obj->head); 371 compile_object(program, proc, obj->head);
366 INST_SIMPLE(proc, OP_CALL, obj->line, obj->col); 372 INST_SIMPLE(proc, OP_CALL, obj->line, obj->col);
367 } else { 373 } else {
@@ -399,6 +405,10 @@ compile_def(ProgramIr *program, Procedure *proc, Object *obj) {
399 405
400void 406void
401compile_lambda(ProgramIr *program, Procedure *proc, Object *obj) { 407compile_lambda(ProgramIr *program, Procedure *proc, Object *obj) {
408 // NOTE: As an optimization, instead of storing and comparing lambdas, we
409 // could calculate a checksum and only check equality in full if they
410 // differ. We can also calculate the equality of Procedure instead of
411 // lambdas.
402 for (size_t i = 0; i < array_size(program->lambdas); ++i) { 412 for (size_t i = 0; i < array_size(program->lambdas); ++i) {
403 if (object_equal(program->lambdas[i], obj)) { 413 if (object_equal(program->lambdas[i], obj)) {
404 INST_ARG(proc, OP_PUSH, obj, obj->line, obj->col); 414 INST_ARG(proc, OP_PUSH, obj, obj->line, obj->col);