FIX: env lookups should respect the strict flag.

This commit is contained in:
Jeremy Wall 2019-01-31 19:02:50 -06:00
parent 24aa55fdac
commit 71d4f6f620
2 changed files with 13 additions and 4 deletions

View File

@ -106,7 +106,6 @@ pub struct FileBuilder<'a> {
import_path: &'a Vec<PathBuf>,
validate_mode: bool,
pub assert_collector: AssertCollector,
strict: bool,
scope: Scope,
import_registry: ImporterRegistry,
// NOTE(jwall): We use interior mutability here because we need
@ -176,7 +175,6 @@ impl<'a> FileBuilder<'a> {
failures: String::new(),
},
scope: scope,
strict: true,
import_registry: ImporterRegistry::make_registry(),
assets: cache,
out_lock: None,
@ -197,7 +195,6 @@ impl<'a> FileBuilder<'a> {
summary: String::new(),
failures: String::new(),
},
strict: true,
assets: self.assets.clone(),
// This is admittedly a little wasteful but we can live with it for now.
import_registry: ImporterRegistry::make_registry(),
@ -252,7 +249,7 @@ impl<'a> FileBuilder<'a> {
}
pub fn set_strict(&mut self, to: bool) {
self.strict = to;
self.scope.strict = to;
}
fn eval_tuple(

View File

@ -40,6 +40,7 @@ pub struct Scope {
pub curr_val: Option<Rc<Val>>,
pub build_output: ValueMap,
pub search_curr_val: bool,
pub strict: bool,
}
impl Scope {
@ -53,9 +54,15 @@ impl Scope {
curr_val: None,
build_output: HashMap::new(),
search_curr_val: false,
strict: false,
}
}
pub fn use_strict(mut self) -> Self {
self.strict = true;
self
}
pub fn use_curr_val(mut self) -> Self {
self.search_curr_val = true;
self
@ -71,6 +78,7 @@ impl Scope {
curr_val: None,
build_output: self.build_output.clone(),
search_curr_val: false,
strict: self.strict,
}
}
@ -82,6 +90,7 @@ impl Scope {
curr_val: None,
build_output: HashMap::new(),
search_curr_val: false,
strict: self.strict,
}
}
@ -140,6 +149,9 @@ impl Scope {
return Some(Rc::new(Val::Str(val.clone())));
}
}
if !self.strict {
return Some(Rc::new(Val::Empty));
}
}
Val::Tuple(ref fs) => match Self::lookup_in_tuple(&sym.pos, &sym.val, fs) {
Ok(v) => return Some(v),