Add booleans and fix semicolon shortcircuit (#1620)

This commit is contained in:
Jonathan Turner 2020-04-21 12:30:01 +12:00 committed by GitHub
parent e4fdb36511
commit 72cf57dd99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 4 deletions

View File

@ -30,17 +30,24 @@ pub(crate) async fn run_block(
..
}))) => return Err(e),
Ok(Some(_item)) => {
if let Some(err) = ctx.get_errors().get(0) {
ctx.clear_errors();
return Err(err.clone());
}
if ctx.ctrl_c.load(Ordering::SeqCst) {
break;
}
}
Ok(None) => break,
Ok(None) => {
if let Some(err) = ctx.get_errors().get(0) {
ctx.clear_errors();
return Err(err.clone());
}
break;
}
Err(e) => return Err(e),
}
}
if !ctx.get_errors().is_empty() {
return Ok(InputStream::empty());
}
}
Err(e) => {
return Err(e);

View File

@ -147,6 +147,10 @@ impl Context {
self.with_errors(|errors| errors.push(error))
}
pub(crate) fn clear_errors(&mut self) {
self.current_errors.lock().clear()
}
pub(crate) fn get_errors(&self) -> Vec<ShellError> {
self.current_errors.lock().clone()
}

View File

@ -88,6 +88,7 @@ pub(crate) enum CompareValues {
String(String, String),
Date(DateTime<Utc>, DateTime<Utc>),
DateDuration(DateTime<Utc>, i64),
Booleans(bool, bool),
}
impl CompareValues {
@ -108,6 +109,7 @@ impl CompareValues {
};
right.cmp(left)
}
CompareValues::Booleans(left, right) => left.cmp(right),
}
}
}
@ -164,6 +166,7 @@ fn coerce_compare_primitive(
(Line(left), Line(right)) => CompareValues::String(left.clone(), right.clone()),
(Date(left), Date(right)) => CompareValues::Date(*left, *right),
(Date(left), Duration(right)) => CompareValues::DateDuration(*left, *right),
(Boolean(left), Boolean(right)) => CompareValues::Booleans(*left, *right),
_ => return Err((left.type_name(), right.type_name())),
})
}

View File

@ -152,6 +152,14 @@ fn evaluate_reference(name: &hir::Variable, scope: &Scope, tag: Tag) -> Result<V
hir::Variable::It(_) => Ok(scope.it.value.clone().into_value(tag)),
hir::Variable::Other(name, _) => match name {
x if x == "$nu" => crate::evaluate::variables::nu(tag),
x if x == "$true" => Ok(Value {
value: UntaggedValue::boolean(true),
tag,
}),
x if x == "$false" => Ok(Value {
value: UntaggedValue::boolean(false),
tag,
}),
x => Ok(scope
.vars
.get(x)