diff options
author | Bad Diode <bd@badd10de.dev> | 2022-01-03 19:59:54 +0100 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-01-03 19:59:54 +0100 |
commit | a926335a9098a4ca42b447c012b038881c1e3559 (patch) | |
tree | 7445a8594a0986b1502423c707e34e92dff714fe /src/ir.h | |
parent | 073105080457218e67d999d6d70610914c9effe7 (diff) | |
download | bdl-a926335a9098a4ca42b447c012b038881c1e3559.tar.gz bdl-a926335a9098a4ca42b447c012b038881c1e3559.zip |
Add some comments for later
Diffstat (limited to 'src/ir.h')
-rw-r--r-- | src/ir.h | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -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 | ||
400 | void | 406 | void |
401 | compile_lambda(ProgramIr *program, Procedure *proc, Object *obj) { | 407 | compile_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); |