From 767f261299d6f0c7d7f7c966ec57bd9ee88251d1 Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Thu, 17 Sep 2020 18:47:40 +0200 Subject: [PATCH] handling of unknown reference --- src/check.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/check.rs b/src/check.rs index 42d2522..46c2d2a 100644 --- a/src/check.rs +++ b/src/check.rs @@ -194,6 +194,16 @@ fn strip_mut(t: Type) -> Type { } } +fn is_known(t: &Type) -> bool { + use Type::*; + match t { + Type::Unknown => false, + Unit | Bool | I32 => true, + Mut(t) | Ref(t) => is_known(t), + _ => panic!("ICE is_known"), + } +} + pub fn check_stmts( stmts: &Stmts, fn_env: &FnEnv, @@ -223,7 +233,13 @@ pub fn check_stmts( } } } - (None, Some(e)) => expr_type(&*e, fn_env, type_env, var_env)?, + (None, Some(e)) => { + let et = expr_type(&*e, fn_env, type_env, var_env)?; + match is_known(&et) { + true => et, + _ => Err("reference to unknown type".to_string())?, + } + } (Some(t), None) => t.clone(), _ => Type::Unknown, }; -- GitLab