summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2014-04-25 08:52:41 +0100
committerKathy Gray2014-04-25 08:53:58 +0100
commitef014438c63984992429c325966f9007c8b85b29 (patch)
treef857ab0df3c2ac22e637e772aca3da9d2d32b9df /src
parentfe28d6a93686eca649c3a8db7eb3c4b6e363e511 (diff)
rename interpreter's local memory type to reflect that it's all local memory
Diffstat (limited to 'src')
-rw-r--r--src/lem_interp/interp.lem33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index 13d54d0b..ef0dbc00 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -91,10 +91,11 @@ instance (Eq value)
let (<>) n1 n2 = not (value_eq n1 n2)
end
-type mem = Mem of nat * map nat value
+(* Store for local memory of ref cells *)
+type lmem = LMem of nat * map nat value
type env = list (id * value)
-let emem = Mem 1 Map.empty
+let emem = LMem 1 Map.empty
(* These may need to be refined or expanded based on memory requirement *)
type action =
@@ -107,7 +108,7 @@ type action =
(* Inverted call stack, where top item on the stack is waiting for an action and all other frames for the right stack *)
type stack =
| Top
- | Frame of id * exp tannot * env * mem * stack
+ | Frame of id * exp tannot * env * lmem * stack
(* Either a case must be added for parallel options or action must be tied to a list *)
type outcome =
@@ -185,16 +186,16 @@ let rec in_env env id =
| (eid,value)::env -> if (get_id eid) = (get_id id) then Just value else in_env env id
end
-val in_mem : mem -> nat -> value
-let in_mem (Mem _ m) n =
+val in_mem : lmem -> nat -> value
+let in_mem (LMem _ m) n =
Map_extra.find n m
(* Map.lookup n m *)
-val update_mem : mem -> nat -> value -> mem
-let update_mem (Mem c m) loc value =
+val update_mem : lmem -> nat -> value -> lmem
+let update_mem (LMem c m) loc value =
let m' = Map.delete loc m in
let m' = Map.insert loc value m' in
- Mem c m'
+ LMem c m'
val is_lit_vector : lit -> bool
let is_lit_vector (L_aux l _) =
@@ -266,7 +267,7 @@ let fupdate_record base updates =
match (base,updates) with
| (V_record t bs,V_record _ us) -> V_record t (update_field_list bs us) end
-val update_vector_slice : value -> value -> mem -> mem
+val update_vector_slice : value -> value -> lmem -> lmem
let rec update_vector_slice vector value mem =
match (vector,value) with
| ((V_vector m inc vs),(V_vector n inc2 vals)) ->
@@ -621,9 +622,9 @@ let rec find_case pexps value =
(all definitions, letbound and enum values, register values, Typedef union constructors, and sub register mappings) *)
type top_level = Env of (defs tannot) * env * env * list (id * typ) * list (id * list (id * index_range))
-val interp_main : top_level -> env -> mem -> (exp tannot) -> (outcome * mem * env)
-val exp_list : top_level -> (list (exp tannot) -> (exp tannot)) -> (list value -> value) -> env -> mem -> list value -> list (exp tannot) -> (outcome * mem * env)
-val interp_lbind : top_level -> env -> mem -> (letbind tannot) -> ((outcome * mem * env) * (maybe ((exp tannot) -> (letbind tannot))))
+val interp_main : top_level -> env -> lmem -> (exp tannot) -> (outcome * lmem * env)
+val exp_list : top_level -> (list (exp tannot) -> (exp tannot)) -> (list value -> value) -> env -> lmem -> list value -> list (exp tannot) -> (outcome * lmem * env)
+val interp_lbind : top_level -> env -> lmem -> (letbind tannot) -> ((outcome * lmem * env) * (maybe ((exp tannot) -> (letbind tannot))))
let resolve_outcome to_match value_thunk action_thunk =
match to_match with
@@ -1106,8 +1107,8 @@ and create_write_message_or_update t_level value l_env l_mem is_top_level ((LEXP
else ((Value v Tag_empty,l_mem,l_env),Just (fun e -> LEXP_aux(LEXP_id id) (l,annot)))
| Nothing ->
if is_top_level then begin
- let (Mem c m) = l_mem in
- let l_mem = (Mem (c+1) m) in
+ let (LMem c m) = l_mem in
+ let l_mem = (LMem (c+1) m) in
((Value (V_lit (L_aux L_unit l)) Tag_empty, update_mem l_mem c value, (id,(V_boxref c typ))::l_env),Nothing)
end
else ((Error l (String.stringAppend "Undefined id " (get_id id)),l_mem,l_env),Nothing) end)
@@ -1149,8 +1150,8 @@ and create_write_message_or_update t_level value l_env l_mem is_top_level ((LEXP
| Nothing ->
if is_top_level
then begin
- let (Mem c m) = l_mem in
- let l_mem = (Mem (c+1) m) in
+ let (LMem c m) = l_mem in
+ let l_mem = (LMem (c+1) m) in
((Value (V_lit (L_aux L_unit l)) Tag_empty, update_mem l_mem c value, (id,(V_boxref c typ))::l_env),Nothing)
end
else ((Error l (String.stringAppend "Undefined id " (get_id id)),l_mem,l_env),Nothing)