Allow variables in scope for strict vars.
This commit is contained in:
parent
6f4cc91451
commit
a6c2c00479
@ -12,7 +12,7 @@ Bug fixes
|
||||
Script-breaking changes
|
||||
-----------------------
|
||||
|
||||
* _Strict Variables Mode_ no longer returns an error when an undeclared variable matches a constant in the provided external `Scope`.
|
||||
* _Strict Variables Mode_ no longer returns an error when an undeclared variable matches a variable/constant in the provided external `Scope`.
|
||||
|
||||
Enhancements
|
||||
------------
|
||||
|
@ -1301,10 +1301,7 @@ impl Engine {
|
||||
if settings.options.strict_var
|
||||
&& !settings.is_closure_scope
|
||||
&& index.is_none()
|
||||
&& !matches!(
|
||||
state.scope.get_index(name),
|
||||
Some((_, AccessMode::ReadOnly))
|
||||
)
|
||||
&& !state.scope.contains(name)
|
||||
{
|
||||
// If the parent scope is not inside another capturing closure
|
||||
// then we can conclude that the captured variable doesn't exist.
|
||||
@ -1450,7 +1447,7 @@ impl Engine {
|
||||
|
||||
if settings.options.strict_var
|
||||
&& index.is_none()
|
||||
&& !matches!(state.scope.get_index(&s), Some((_, AccessMode::ReadOnly)))
|
||||
&& !state.scope.contains(&s)
|
||||
{
|
||||
return Err(
|
||||
PERR::VariableUndefined(s.to_string()).into_err(settings.pos)
|
||||
|
@ -57,7 +57,7 @@ fn test_options_strict_var() -> Result<(), Box<EvalAltResult>> {
|
||||
let mut engine = Engine::new();
|
||||
|
||||
let mut scope = Scope::new();
|
||||
scope.push_constant("x", 42 as INT);
|
||||
scope.push("x", 42 as INT);
|
||||
scope.push_constant("y", 0 as INT);
|
||||
|
||||
engine.compile("let x = if y { z } else { w };")?;
|
||||
@ -114,8 +114,8 @@ fn test_options_strict_var() -> Result<(), Box<EvalAltResult>> {
|
||||
}
|
||||
#[cfg(not(feature = "no_optimize"))]
|
||||
assert_eq!(
|
||||
engine.eval_with_scope::<INT>(&mut scope, "fn foo(z) { x * y + z } foo(1)")?,
|
||||
1
|
||||
engine.eval_with_scope::<INT>(&mut scope, "fn foo(z) { y + z } foo(x)")?,
|
||||
42
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user