diff --git a/crates/ailang-check/src/lib.rs b/crates/ailang-check/src/lib.rs index cde5498..613b930 100644 --- a/crates/ailang-check/src/lib.rs +++ b/crates/ailang-check/src/lib.rs @@ -1276,7 +1276,7 @@ fn check_type_def(td: &TypeDef, env: &Env) -> Result<()> { fn check_type_well_formed(t: &Type, env: &Env) -> Result<()> { match t { Type::Con { name, args } => { - let is_primitive = matches!(name.as_str(), "Int" | "Bool" | "Unit" | "Str"); + let is_primitive = ailang_core::primitives::is_primitive_name(name); if is_primitive { if !args.is_empty() { return Err(CheckError::UnknownType(format!( @@ -2258,7 +2258,7 @@ fn qualify_local_types(t: &Type, owner_module: &str, local_types: &IndexMap { let qualified_name = if name.contains('.') { name.clone() - } else if matches!(name.as_str(), "Int" | "Bool" | "Unit" | "Str") { + } else if ailang_core::primitives::is_primitive_name(name) { name.clone() } else if local_types.contains_key(name) { format!("{owner_module}.{name}") diff --git a/crates/ailang-check/src/linearity.rs b/crates/ailang-check/src/linearity.rs index d304a3f..064d98b 100644 --- a/crates/ailang-check/src/linearity.rs +++ b/crates/ailang-check/src/linearity.rs @@ -140,7 +140,7 @@ use std::collections::HashMap; /// == 0`. fn is_heap_type(t: &Type) -> bool { match t { - Type::Con { name, .. } => !matches!(name.as_str(), "Int" | "Bool" | "Str" | "Unit"), + Type::Con { name, .. } => !ailang_core::primitives::is_primitive_name(name), // Type::Var (a polymorphic param) is conservatively heap — // it could instantiate to a heap type at the call site. Type::Var { .. } => true, diff --git a/crates/ailang-codegen/src/subst.rs b/crates/ailang-codegen/src/subst.rs index bbdcfe9..b83d1eb 100644 --- a/crates/ailang-codegen/src/subst.rs +++ b/crates/ailang-codegen/src/subst.rs @@ -166,7 +166,7 @@ pub(crate) fn qualify_local_types_codegen( Type::Con { name, args } => { let qualified = if name.contains('.') { name.clone() - } else if matches!(name.as_str(), "Int" | "Bool" | "Unit" | "Str") { + } else if ailang_core::primitives::is_primitive_name(name) { name.clone() } else if owner_local_types.contains(name) { format!("{owner_module}.{name}")