mirror of
https://github.com/MorizzG/MLox.git
synced 2025-12-06 04:22:41 +00:00
added closures
This commit is contained in:
parent
34c279ec2e
commit
b425a59db5
5 changed files with 59 additions and 28 deletions
|
|
@ -140,7 +140,7 @@ let rec interpret_expr (env : environment) (expr_node : expr_node) : lox_value i
|
|||
RuntimeError.make pos msg |> error
|
||||
else
|
||||
match fn args with Ok value -> Ok value | Error s -> RuntimeError.make pos s |> error)
|
||||
| Function { name; arity; arg_names; body } -> (
|
||||
| Function { name; env; arity; arg_names; body } -> (
|
||||
let args_len = List.length args in
|
||||
if args_len <> arity then
|
||||
let msg =
|
||||
|
|
@ -149,7 +149,8 @@ let rec interpret_expr (env : environment) (expr_node : expr_node) : lox_value i
|
|||
in
|
||||
RuntimeError.make pos msg |> error
|
||||
else
|
||||
let env = Env.push_frame env in
|
||||
(* let env = Env.push_frame env in *)
|
||||
let env = Env.enter env in
|
||||
let () =
|
||||
List.iter2 (fun name value -> assert (Env.define env name value)) arg_names args
|
||||
in
|
||||
|
|
@ -190,7 +191,7 @@ and interpret_stmt (env : environment) (stmt_node : stmt_node) : unit interprete
|
|||
in
|
||||
RuntimeError.make pos msg |> error
|
||||
| FunDecl { name; arg_names; body } ->
|
||||
let fn = make_lox_function name arg_names body in
|
||||
let fn = make_lox_function name env arg_names body in
|
||||
let success = Env.define env name fn in
|
||||
if success then Ok ()
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue