summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2024-04-29 18:51:58 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2024-04-29 18:52:58 +0200
commit5a09ae2978e5fcd7a4894bd87324c0ca9c11826e (patch)
tree8463710012419115439567373d04f859f4539736
parentb3df12b910f8df19095b7b9af25eef30a39bffc7 (diff)
downloadrebel-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.rs4
-rw-r--r--crates/rebel-lang/src/value.rs4
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