diff options
-rw-r--r-- | crates/rebel-lang/src/typing.rs | 4 | ||||
-rw-r--r-- | crates/rebel-lang/src/value.rs | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/crates/rebel-lang/src/typing.rs b/crates/rebel-lang/src/typing.rs index 7b20517..fc3009a 100644 --- a/crates/rebel-lang/src/typing.rs +++ b/crates/rebel-lang/src/typing.rs @@ -326,7 +326,7 @@ impl Type { Box::new(elems.iter().try_fold(Type::Free, |acc, elem| { acc.unify(Self::ast_expr_type(ctx, elem)?, Coerce::Common) })?), - ArrayLen::Fixed(elems.len()), + ArrayLen::Fixed(elems.len().try_into().or(Err(TypeError))?), ), Literal::Struct(entries) => Struct( entries @@ -385,7 +385,7 @@ impl Display for Type { #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub enum ArrayLen { Free, - Fixed(usize), + Fixed(u32), Dynamic, } diff --git a/crates/rebel-lang/src/value.rs b/crates/rebel-lang/src/value.rs index fe1d10c..fe2caa2 100644 --- a/crates/rebel-lang/src/value.rs +++ b/crates/rebel-lang/src/value.rs @@ -9,7 +9,7 @@ use rebel_parse::ast::{self, expr}; use crate::{ func::{Func, FuncDef}, scope::Context, - typing::{self, ArrayLen, Coerce, Type, TypeFamily}, + typing::{self, ArrayLen, Coerce, Type, TypeError, TypeFamily}, }; #[derive(Debug)] @@ -44,7 +44,7 @@ impl Value { ), Value::Array(elems) => Type::Array( Box::new(Self::array_elem_type(elems)?), - ArrayLen::Fixed(elems.len()), + ArrayLen::Fixed(elems.len().try_into().or(Err(TypeError))?), ), Value::Struct(entries) => Type::Struct( entries |