summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
authorKathy Gray2015-06-18 11:18:37 +0100
committerKathy Gray2015-06-18 11:18:37 +0100
commita546e697cc65cda36e294929fd0b4bd5b8c2c2c2 (patch)
treed05196772f467b16ac2197ec47bf77db40566b62 /src/lem_interp
parent94b1798e233a29fe30d2da83d1782541ec788440 (diff)
Consistent handling of constructors with no parameters
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp.lem14
-rw-r--r--src/lem_interp/interp_inter_imp.lem2
2 files changed, 9 insertions, 7 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index b7641438..7a9ae1cd 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -834,12 +834,14 @@ let rec to_exp mode env v : (exp tannot * lenv) =
| V_list(vals) -> let (es,env') = mapf vals env in (E_aux (E_list es) annot, env')
| V_ctor id t ckind vals ->
let annotation = mk_annot true (Just ckind) in
- (match vals with
- | V_lit (L_aux L_unit _) -> (E_aux (E_id id) annotation, env)
- | V_track (V_lit (L_aux L_unit _)) _ -> (E_aux (E_id id) annotation, env)
- | V_tuple vals -> let (es,env') = mapf vals env in (E_aux (E_app id es) annotation, env')
- | V_track (V_tuple vals) _ -> let (es,env') = mapf vals env in (E_aux (E_app id es) annotation, env')
- | V_track _ _ ->
+ (match (vals,ckind) with
+ | (V_lit (L_aux L_unit _), C_Union) -> (E_aux (E_app id []) annotation, env)
+ | (V_lit (L_aux L_unit _), C_Enum _) -> (E_aux (E_id id) annotation, env)
+ | (V_track (V_lit (L_aux L_unit _)) _, C_Union) -> (E_aux (E_app id []) annotation, env)
+ | (V_track (V_lit (L_aux L_unit _)) _, C_Enum _) -> (E_aux (E_id id) annotation, env)
+ | (V_tuple vals,_) -> let (es,env') = mapf vals env in (E_aux (E_app id es) annotation, env')
+ | (V_track (V_tuple vals) _,_) -> let (es,env') = mapf vals env in (E_aux (E_app id es) annotation, env')
+ | (V_track _ _,_) ->
if mode.track_values
then begin let (fid,env') = fresh_var env in
let env' = add_to_env (fid,vals) env' in
diff --git a/src/lem_interp/interp_inter_imp.lem b/src/lem_interp/interp_inter_imp.lem
index 0ecd6fe7..72f5ba7c 100644
--- a/src/lem_interp/interp_inter_imp.lem
+++ b/src/lem_interp/interp_inter_imp.lem
@@ -376,7 +376,7 @@ let decode_to_istate top_level value =
top_env Interp.eenv Interp.emem Interp.Top) Nothing) in
match (instr_decoded,error) with
| (Just instr,_) ->
- let (arg,_) = Interp.to_exp mode Interp.eenv instr in
+ (*let (arg,_) = Interp.to_exp mode Interp.eenv instr in*)
Instr instr_external
(IState (Interp.Thunk_frame
(E_aux (E_app (Id_aux (Id "execute") Interp_ast.Unknown) [arg]) (Interp_ast.Unknown,Nothing))