From a546e697cc65cda36e294929fd0b4bd5b8c2c2c2 Mon Sep 17 00:00:00 2001 From: Kathy Gray Date: Thu, 18 Jun 2015 11:18:37 +0100 Subject: Consistent handling of constructors with no parameters --- src/lem_interp/interp.lem | 14 ++++++++------ src/lem_interp/interp_inter_imp.lem | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src/lem_interp') 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)) -- cgit v1.2.3