| 27 |
let rec eval env e0 = match e0.Typed.exp_descr with |
let rec eval env e0 = match e0.Typed.exp_descr with |
| 28 |
| Typed.Forget (e,_) -> eval env e |
| Typed.Forget (e,_) -> eval env e |
| 29 |
| Typed.Var s -> (match Env.find s env with Value.Delayed x -> !x | x -> x) |
| Typed.Var s -> (match Env.find s env with Value.Delayed x -> !x | x -> x) |
| 30 |
|
| Typed.ExtVar _ -> assert false |
| 31 |
| Typed.Apply (f,arg) -> eval_apply (eval env f) (eval env arg) |
| Typed.Apply (f,arg) -> eval_apply (eval env f) (eval env arg) |
| 32 |
| Typed.Abstraction a -> eval_abstraction env a |
| Typed.Abstraction a -> eval_abstraction env a |
| 33 |
| Typed.RecordLitt r -> Record (LabelMap.map (eval env) r) |
| Typed.RecordLitt r -> Record (LabelMap.map (eval env) r) |
| 292 |
let frame = ref 0 |
let frame = ref 0 |
| 293 |
let sp = ref 0 |
let sp = ref 0 |
| 294 |
|
|
| 295 |
|
let comp_unit () = |
| 296 |
|
let r = Array.sub !stack 0 !sp in |
| 297 |
|
sp := 0; |
| 298 |
|
r |
| 299 |
|
|
| 300 |
let dump ppf = |
let dump ppf = |
| 301 |
Format.fprintf ppf "sp = %i frame = %i@." !sp !frame; |
Format.fprintf ppf "sp = %i frame = %i@." !sp !frame; |
| 302 |
for i = 0 to !sp - 1 do |
for i = 0 to !sp - 1 do |
| 322 |
|
|
| 323 |
let calls = ref 0 |
let calls = ref 0 |
| 324 |
|
|
| 325 |
|
let from_comp_unit = ref (fun cu pos -> assert false) |
| 326 |
|
|
| 327 |
let eval_var env = function |
let eval_var env = function |
| 328 |
| Env i -> env.(i) |
| Env i -> env.(i) |
| 329 |
| Global i -> !stack.(i) |
| Global i -> !stack.(i) |
| 332 |
|
|
| 333 |
let rec eval env = function |
let rec eval env = function |
| 334 |
| Var x -> eval_var env x |
| Var x -> eval_var env x |
| 335 |
|
| ExtVar (cu,pos) -> !from_comp_unit cu pos |
| 336 |
| Apply (false,e1,e2) -> |
| Apply (false,e1,e2) -> |
| 337 |
let v1 = eval env e1 in |
let v1 = eval env e1 in |
| 338 |
let v2 = eval env e2 in |
let v2 = eval env e2 in |