diff options
author | Son Ho | 2021-12-07 10:35:27 +0100 |
---|---|---|
committer | Son Ho | 2021-12-07 10:35:27 +0100 |
commit | a3ad74c9302bafc5b7b63a3cceb192ea096ca7e4 (patch) | |
tree | 444e59b739d70f14869679838b6472c9fe5f7cb4 | |
parent | f6e979127b60709db8d736b9d69c72e6d28863ad (diff) |
Implement map_typed_value
-rw-r--r-- | src/Values.ml | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/Values.ml b/src/Values.ml index 9a932fc2..c51f0b2c 100644 --- a/src/Values.ml +++ b/src/Values.ml @@ -433,3 +433,67 @@ class virtual ['self] map_g_typed_value = method visit_ty : 'monomorphic. 'env -> 'r ty -> 'r ty = fun _env ty -> ty end + +class ['self] map_typed_value = + object (self : 'self) + inherit [_] map_g_typed_value + + method visit_'sv + : 'monomorphic. 'env -> symbolic_proj_comp -> symbolic_proj_comp = + fun env sv -> self#visit_symbolic_proj_comp env sv + + method visit_'bc : 'monomorphic. 'env -> borrow_content -> borrow_content = + fun env bc -> self#visit_borrow_content env bc + + method visit_'lc : 'monomorphic. 'env -> loan_content -> loan_content = + fun env lc -> self#visit_loan_content env lc + + method visit_symbolic_proj_comp + : 'monomorphic. 'env -> symbolic_proj_comp -> symbolic_proj_comp = + fun _env sv -> sv + + method visit_borrow_content + : 'monomorphic. 'env -> borrow_content -> borrow_content = + fun env bc -> + match bc with + | SharedBorrow bid -> self#visit_SharedBorrow env bid + | MutBorrow (bid, v) -> self#visit_MutBorrow env bid v + | InactivatedMutBorrow bid -> self#visit_InactivatedMutBorrow env bid + + method visit_SharedBorrow + : 'monomorphic. 'env -> BorrowId.id -> borrow_content = + fun _env bid -> SharedBorrow bid + + method visit_MutBorrow + : 'monomorphic. 'env -> BorrowId.id -> typed_value -> borrow_content = + fun env bid v -> + let v = self#visit_typed_value env v in + MutBorrow (bid, v) + + method visit_InactivatedMutBorrow + : 'monomorphic. 'env -> BorrowId.id -> borrow_content = + fun _env bid -> InactivatedMutBorrow bid + + method visit_loan_content + : 'monomorphic. 'env -> loan_content -> loan_content = + fun env lc -> + match lc with + | SharedLoan (bids, v) -> self#visit_SharedLoan env bids v + | MutLoan bid -> self#visit_MutLoan env bid + + method visit_SharedLoan + : 'monomorphic. 'env -> BorrowId.set_t -> typed_value -> loan_content = + fun env bids v -> + let v = self#visit_typed_value env v in + SharedLoan (bids, v) + + method visit_MutLoan : 'monomorphic. 'env -> BorrowId.id -> loan_content = + fun _env bid -> MutLoan bid + + method visit_typed_value : 'monomorphic. 'env -> typed_value -> typed_value + = + fun env v -> self#visit_g_typed_value env v + + method visit_adt_value : 'monomorphic. 'env -> adt_value -> adt_value = + fun env v -> self#visit_g_adt_value env v + end |