diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-29 18:51:58 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-29 18:52:58 +0200 |
commit | 5a09ae2978e5fcd7a4894bd87324c0ca9c11826e (patch) | |
tree | 8463710012419115439567373d04f859f4539736 | |
parent | b3df12b910f8df19095b7b9af25eef30a39bffc7 (diff) | |
download | rebel-5a09ae2978e5fcd7a4894bd87324c0ca9c11826e.tar rebel-5a09ae2978e5fcd7a4894bd87324c0ca9c11826e.zip |
rebel-lang: limit array lengths to u32
Make the supported maximum array length independent of usize.
-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 |