From 68c2b52ad7f2f1fc69cfbd29614e13204c932d00 Mon Sep 17 00:00:00 2001 From: mark Date: Fri, 26 May 2023 21:55:04 +0200 Subject: [PATCH] bugfix: changing the implementation of get() to respect references broke some builtin functions which did not account for this --- mers/src/lang/builtins.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/mers/src/lang/builtins.rs b/mers/src/lang/builtins.rs index 9392405..5892018 100755 --- a/mers/src/lang/builtins.rs +++ b/mers/src/lang/builtins.rs @@ -380,7 +380,12 @@ impl BuiltinFunction { // if vec.is_reference().is_some_and(|v| v) { // unstable if let Some(true) = vec.is_reference() { if let Some(t) = vec.get_any(info) { - el.fits_in(&t, info).is_empty() + el.fits_in( + &t.dereference() + .expect("running get() on &[ ...] should give a reference"), + info, + ) + .is_empty() } else { false } @@ -396,7 +401,12 @@ impl BuiltinFunction { let (vec, el) = (&input[0], &input[1]); if let Some(true) = vec.is_reference() { if let Some(t) = vec.get_any(info) { - el.fits_in(&t, info).is_empty() + el.fits_in( + &t.dereference() + .expect("running get() on a &[ ...] should give a reference."), + info, + ) + .is_empty() } else { false } @@ -613,7 +623,11 @@ impl BuiltinFunction { VSingleType::Tuple(vec![]), VSingleType::Tuple(vec![v .get_any(info) - .expect("cannot use get on this type")]), + .expect("cannot use get on this type") + .dereference() + .expect( + "running get_any() on &[ ...] should give a reference...", + )]), ], } } else {