mirror of
https://github.com/nushell/nushell
synced 2024-12-30 15:03:25 +00:00
Merge pull request #254 from nushell/iter_perf
Some iter perf improvements
This commit is contained in:
commit
29dde84394
2 changed files with 16 additions and 32 deletions
|
@ -56,18 +56,17 @@ impl Command for For {
|
||||||
.expect("internal error: expected block");
|
.expect("internal error: expected block");
|
||||||
|
|
||||||
let engine_state = engine_state.clone();
|
let engine_state = engine_state.clone();
|
||||||
let block = engine_state.get_block(block_id);
|
let block = engine_state.get_block(block_id).clone();
|
||||||
let mut stack = stack.collect_captures(&block.captures);
|
let mut stack = stack.collect_captures(&block.captures);
|
||||||
|
|
||||||
match values {
|
match values {
|
||||||
Value::List { vals, .. } => Ok(vals
|
Value::List { vals, .. } => Ok(vals
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(move |x| {
|
.map(move |x| {
|
||||||
let mut stack = stack.clone();
|
|
||||||
stack.add_var(var_id, x);
|
stack.add_var(var_id, x);
|
||||||
|
|
||||||
let block = engine_state.get_block(block_id);
|
//let block = engine_state.get_block(block_id);
|
||||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
match eval_block(&engine_state, &mut stack, &block, PipelineData::new()) {
|
||||||
Ok(pipeline_data) => pipeline_data.into_value(),
|
Ok(pipeline_data) => pipeline_data.into_value(),
|
||||||
Err(error) => Value::Error { error },
|
Err(error) => Value::Error { error },
|
||||||
}
|
}
|
||||||
|
@ -78,8 +77,8 @@ impl Command for For {
|
||||||
.map(move |x| {
|
.map(move |x| {
|
||||||
stack.add_var(var_id, x);
|
stack.add_var(var_id, x);
|
||||||
|
|
||||||
let block = engine_state.get_block(block_id);
|
//let block = engine_state.get_block(block_id);
|
||||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
match eval_block(&engine_state, &mut stack, &block, PipelineData::new()) {
|
||||||
Ok(pipeline_data) => pipeline_data.into_value(),
|
Ok(pipeline_data) => pipeline_data.into_value(),
|
||||||
Err(error) => Value::Error { error },
|
Err(error) => Value::Error { error },
|
||||||
}
|
}
|
||||||
|
@ -88,7 +87,7 @@ impl Command for For {
|
||||||
x => {
|
x => {
|
||||||
stack.add_var(var_id, x);
|
stack.add_var(var_id, x);
|
||||||
|
|
||||||
eval_block(&engine_state, &mut stack, block, PipelineData::new())
|
eval_block(&engine_state, &mut stack, &block, PipelineData::new())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ impl Command for Each {
|
||||||
|
|
||||||
let numbered = call.has_flag("numbered");
|
let numbered = call.has_flag("numbered");
|
||||||
let engine_state = engine_state.clone();
|
let engine_state = engine_state.clone();
|
||||||
let block = engine_state.get_block(block_id);
|
let block = engine_state.get_block(block_id).clone();
|
||||||
let mut stack = stack.collect_captures(&block.captures);
|
let mut stack = stack.collect_captures(&block.captures);
|
||||||
let span = call.head;
|
let span = call.head;
|
||||||
|
|
||||||
|
@ -73,10 +73,6 @@ impl Command for Each {
|
||||||
.into_range_iter()?
|
.into_range_iter()?
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(move |(idx, x)| {
|
.map(move |(idx, x)| {
|
||||||
let block = engine_state.get_block(block_id);
|
|
||||||
|
|
||||||
let mut stack = stack.clone();
|
|
||||||
|
|
||||||
if let Some(var) = block.signature.get_positional(0) {
|
if let Some(var) = block.signature.get_positional(0) {
|
||||||
if let Some(var_id) = &var.var_id {
|
if let Some(var_id) = &var.var_id {
|
||||||
if numbered {
|
if numbered {
|
||||||
|
@ -100,21 +96,16 @@ impl Command for Each {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
match eval_block(&engine_state, &mut stack, &block, PipelineData::new()) {
|
||||||
Ok(v) => v,
|
Ok(v) => v.into_value(),
|
||||||
Err(error) => Value::Error { error }.into_pipeline_data(),
|
Err(error) => Value::Error { error },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.flatten()
|
|
||||||
.into_pipeline_data()),
|
.into_pipeline_data()),
|
||||||
PipelineData::Value(Value::List { vals: val, .. }) => Ok(val
|
PipelineData::Value(Value::List { vals: val, .. }) => Ok(val
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(move |(idx, x)| {
|
.map(move |(idx, x)| {
|
||||||
let block = engine_state.get_block(block_id);
|
|
||||||
|
|
||||||
let mut stack = stack.clone();
|
|
||||||
|
|
||||||
if let Some(var) = block.signature.get_positional(0) {
|
if let Some(var) = block.signature.get_positional(0) {
|
||||||
if let Some(var_id) = &var.var_id {
|
if let Some(var_id) = &var.var_id {
|
||||||
if numbered {
|
if numbered {
|
||||||
|
@ -138,20 +129,15 @@ impl Command for Each {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
match eval_block(&engine_state, &mut stack, &block, PipelineData::new()) {
|
||||||
Ok(v) => v,
|
Ok(v) => v.into_value(),
|
||||||
Err(error) => Value::Error { error }.into_pipeline_data(),
|
Err(error) => Value::Error { error },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.flatten()
|
|
||||||
.into_pipeline_data()),
|
.into_pipeline_data()),
|
||||||
PipelineData::Stream(stream) => Ok(stream
|
PipelineData::Stream(stream) => Ok(stream
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(move |(idx, x)| {
|
.map(move |(idx, x)| {
|
||||||
let block = engine_state.get_block(block_id);
|
|
||||||
|
|
||||||
let mut stack = stack.clone();
|
|
||||||
|
|
||||||
if let Some(var) = block.signature.get_positional(0) {
|
if let Some(var) = block.signature.get_positional(0) {
|
||||||
if let Some(var_id) = &var.var_id {
|
if let Some(var_id) = &var.var_id {
|
||||||
if numbered {
|
if numbered {
|
||||||
|
@ -175,12 +161,11 @@ impl Command for Each {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
match eval_block(&engine_state, &mut stack, &block, PipelineData::new()) {
|
||||||
Ok(v) => v,
|
Ok(v) => v.into_value(),
|
||||||
Err(error) => Value::Error { error }.into_pipeline_data(),
|
Err(error) => Value::Error { error },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.flatten()
|
|
||||||
.into_pipeline_data()),
|
.into_pipeline_data()),
|
||||||
PipelineData::Value(Value::Record { cols, vals, .. }) => {
|
PipelineData::Value(Value::Record { cols, vals, .. }) => {
|
||||||
let mut output_cols = vec![];
|
let mut output_cols = vec![];
|
||||||
|
|
Loading…
Reference in a new issue