diff --git a/src/compiler.cpp b/src/compiler.cpp index 77290b7..e61ef55 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -402,10 +402,13 @@ Result Compiler::compile_list(Context& context, Pair& expr) { return compile_if(context, sym, expr); } else if (TRY(sym.cmp("lambda")) == 0) { return compile_lambda(context, sym, expr); + } else { + return compile_function_call(context, expr); } } else if (first.is()) { return compile_function_call(context, expr); } + return ERROR(TypeMismatch); } diff --git a/src/vli.cpp b/src/vli.cpp index b202307..cf0014e 100644 --- a/src/vli.cpp +++ b/src/vli.cpp @@ -11,7 +11,8 @@ StaticArena<64 * 1024 * 1024> arena; Result run() { // auto code_str = TRY(String::create("(* (+ 1 2 3) (/ 4 2))")); - auto code_str = TRY(String::create("((lambda (x) (* x x)) 2)")); + auto code_str = + TRY(String::create("((lambda (f y) (f y)) (lambda (x) (* x x)) 2)")); auto parsed = TRY(read_one(code_str)); auto code_str_written = TRY(write_one(parsed)); diff --git a/src/vm.cpp b/src/vm.cpp index aa34128..bd6ad67 100644 --- a/src/vm.cpp +++ b/src/vm.cpp @@ -87,7 +87,7 @@ Result VM::vm_call(Opcode& oc) { uint64_t old_base = _base; - Value fun_val = TRY(fun.copy()); + Value fun_val = TRY(_fun.copy()); Value oldbase_val = TRY(Int64::create(old_base)); Value pc_val = TRY(Int64::create(_pc)); _callstack.set(_callstack.gettop(), fun_val);