| 100 |
let (bind, e) = rhs.(code) in |
let (bind, e) = rhs.(code) in |
| 101 |
let env = |
let env = |
| 102 |
List.fold_left (fun env (x,i) -> |
List.fold_left (fun env (x,i) -> |
| 103 |
if (i = -1) then Env.add x arg env |
if (i == -1) then Env.add x arg env |
| 104 |
else Env.add x bindings.(i) env) env (IdMap.get bind) in |
else Env.add x bindings.(i) env) env (IdMap.get bind) in |
| 105 |
eval env e |
eval env e |
| 106 |
|
|
| 108 |
let v = eval env l.Typed.let_body in |
let v = eval env l.Typed.let_body in |
| 109 |
let (disp,bind) = Typed.dispatcher_let_decl l in |
let (disp,bind) = Typed.dispatcher_let_decl l in |
| 110 |
let (_,bindings) = run_dispatcher disp v in |
let (_,bindings) = run_dispatcher disp v in |
| 111 |
List.map (fun (x,i) -> (x, if (i = -1) then v else bindings.(i))) (IdMap.get bind) |
List.map (fun (x,i) -> (x, if (i == -1) then v else bindings.(i))) (IdMap.get bind) |
| 112 |
|
|
| 113 |
and eval_map env brs = function |
and eval_map env brs = function |
| 114 |
| Pair (x,y) -> |
| Pair (x,y) -> |
| 233 |
|
|
| 234 |
and eval_equal v1 v2 = |
and eval_equal v1 v2 = |
| 235 |
let c = Value.compare v1 v2 in |
let c = Value.compare v1 v2 in |
| 236 |
Value.vbool (Value.compare v1 v2 = 0) |
Value.vbool (Value.compare v1 v2 == 0) |
| 237 |
|
|
| 238 |
and eval_lt v1 v2 = |
and eval_lt v1 v2 = |
| 239 |
let c = Value.compare v1 v2 in |
let c = Value.compare v1 v2 in |