Fix find loops and index syntax
This commit is contained in:
parent
2876f50822
commit
a21aa5e37b
@ -52,11 +52,10 @@ impl AbstractTree for Assignment {
|
||||
fn run(&self, source: &str, context: &mut Map) -> Result<Value> {
|
||||
let key = self.identifier.inner().clone();
|
||||
let value = self.statement.run(source, context)?;
|
||||
let mut variables = context.variables_mut()?;
|
||||
|
||||
let new_value = match self.operator {
|
||||
AssignmentOperator::PlusEqual => {
|
||||
if let Some(mut previous_value) = variables.get(&key).cloned() {
|
||||
if let Some(mut previous_value) = context.variables()?.get(&key).cloned() {
|
||||
previous_value += value;
|
||||
previous_value
|
||||
} else {
|
||||
@ -64,7 +63,7 @@ impl AbstractTree for Assignment {
|
||||
}
|
||||
}
|
||||
AssignmentOperator::MinusEqual => {
|
||||
if let Some(mut previous_value) = variables.get(&key).cloned() {
|
||||
if let Some(mut previous_value) = context.variables()?.get(&key).cloned() {
|
||||
previous_value -= value;
|
||||
previous_value
|
||||
} else {
|
||||
@ -74,7 +73,7 @@ impl AbstractTree for Assignment {
|
||||
AssignmentOperator::Equal => value,
|
||||
};
|
||||
|
||||
variables.insert(key, new_value);
|
||||
context.variables_mut()?.insert(key, new_value);
|
||||
|
||||
Ok(Value::Empty)
|
||||
}
|
||||
|
@ -30,12 +30,13 @@ impl AbstractTree for Find {
|
||||
}
|
||||
|
||||
fn run(&self, source: &str, context: &mut Map) -> Result<Value> {
|
||||
let value = self.expression.run(source, context)?;
|
||||
let values = value.as_list()?.items();
|
||||
let expression_run = self.expression.run(source, context)?;
|
||||
let list = expression_run.as_list()?.items();
|
||||
let key = self.identifier.inner();
|
||||
let loop_context = Map::clone_from(context)?;
|
||||
|
||||
let find_result = values.par_iter().find_map_first(|value| {
|
||||
let find_result = list.par_iter().find_map_first(|value| {
|
||||
let loop_context = Map::clone_from(context).unwrap();
|
||||
|
||||
loop_context
|
||||
.variables_mut()
|
||||
.unwrap()
|
||||
|
@ -34,7 +34,7 @@ pub fn evaluate(source: &str) -> Result<Value> {
|
||||
/// let mut context = Map::new();
|
||||
///
|
||||
/// {
|
||||
/// let mut variables = context.variables_mut();
|
||||
/// let mut variables = context.variables_mut().unwrap();
|
||||
///
|
||||
/// variables.insert("one".into(), 1.into());
|
||||
/// variables.insert("two".into(), 2.into());
|
||||
|
@ -124,7 +124,7 @@ module.exports = grammar({
|
||||
'}',
|
||||
),
|
||||
|
||||
index: $ => prec.left(seq(
|
||||
index: $ => prec.left(1, seq(
|
||||
$.expression,
|
||||
':',
|
||||
$.expression,
|
||||
|
@ -606,7 +606,7 @@
|
||||
},
|
||||
"index": {
|
||||
"type": "PREC_LEFT",
|
||||
"value": 0,
|
||||
"value": 1,
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user