diff options
Diffstat (limited to 'src/scTypes.ml')
-rw-r--r-- | src/scTypes.ml | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/src/scTypes.ml b/src/scTypes.ml index e85b2f1..f0a42d4 100644 --- a/src/scTypes.ml +++ b/src/scTypes.ml @@ -105,15 +105,6 @@ module Refs = struct | Cell of Cell.t (** A cell *) | Range of Cell.t * Cell.t (** An area of cells *) - let shift (vector_x, vector_y) ref = - let _shift ((x, y), (fixed_x, fixed_y)) = - let x' = if fixed_x then x else x + vector_x - and y' = if fixed_y then y else y + vector_y in - (x', y'), (fixed_x, fixed_y) - in match ref with - | Cell x -> Cell (_shift x) - | Range (fst, snd) -> Range (_shift fst, _shift snd) - let cell c = Cell c let range c1 c2 = Range (c1, c2) @@ -152,44 +143,34 @@ module Expr = struct let callN ident params = CallN(ident, params) let expression e = Expression e - let rec shift_exp vector = function - | Value v -> Value v - | Call0 ident -> Call0 ident - | Call1 (ident, p1) -> Call1 (ident, shift_exp vector p1) - | Call2 (ident, p1, p2) -> Call2 (ident, shift_exp vector p1, shift_exp vector p2) - | Call3 (ident, p1, p2, p3) -> Call3 (ident, shift_exp vector p1, shift_exp vector p2, shift_exp vector p3) - | CallN (ident, params) -> CallN (ident, List.map (shift_exp vector) params) - | Ref r -> Ref (Refs.shift vector r) - | Expression expr -> Expression (shift_exp vector expr) - module Eval(E:Sym_expr.SYM_EXPR) = struct module T = Type.Eval(E.T) module R = Refs.Eval(E.R) - let eval e t = begin + let eval e = begin let rec _eval v k = begin match v with - | Ref r -> k @@ E.ref (R.eval_ref r) t - | Value v -> k @@ E.value (T.eval_type v) t - | Call0 ident -> k @@ E.call0 ident t + | Ref r -> k @@ E.ref (R.eval_ref r) + | Value v -> k @@ E.value (T.eval_type v) + | Call0 ident -> k @@ E.call0 ident | Call1 (ident, p1) -> _eval p1 (fun v1 -> - k @@ E.call1 ident v1 t) + k @@ E.call1 ident v1) | Call2 (ident, p1, p2) -> _eval p1 (fun v1 -> _eval p2 (fun v2 -> - k @@ E.call2 ident v1 v2 t)) + k @@ E.call2 ident v1 v2)) | Call3 (ident, p1, p2, p3) -> (_eval[@tailcall]) p1 (fun v1 -> (_eval[@tailcall]) p2 (fun v2 -> (_eval[@tailcall]) p3 (fun v3 -> - k @@ E.call3 ident v1 v2 v3 t))) + k @@ E.call3 ident v1 v2 v3))) | CallN (ident, exprs) -> let mapped = List.map (fun x -> _eval x (fun x -> x)) exprs in - k @@ E.callN ident mapped t + k @@ E.callN ident mapped | Expression e -> - (_eval[@tailcall]) e (fun v1 -> k @@ E.expression v1 t) + (_eval[@tailcall]) e (fun v1 -> k @@ E.expression v1) end in E.observe (_eval e (fun x -> x)) |