mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 09:45:50 +02:00
WIP
This commit is contained in:
@ -40,7 +40,7 @@ impl Command for Do {
|
||||
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
|
||||
let params: Vec<_> = block
|
||||
.signature
|
||||
|
@ -51,22 +51,22 @@ impl Command for For {
|
||||
.expect("internal error: missing keyword");
|
||||
let values = eval_expression(engine_state, stack, keyword_expr)?;
|
||||
|
||||
let block = call.positional[2]
|
||||
let block_id = call.positional[2]
|
||||
.as_block()
|
||||
.expect("internal error: expected block");
|
||||
|
||||
let engine_state = engine_state.clone();
|
||||
let stack = stack.enter_scope();
|
||||
let block = engine_state.get_block(block_id);
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
|
||||
match values {
|
||||
Value::List { vals, span } => Ok(vals
|
||||
.into_iter()
|
||||
.map(move |x| {
|
||||
let block = engine_state.get_block(block);
|
||||
|
||||
let mut stack = stack.clone();
|
||||
stack.add_var(var_id, x);
|
||||
|
||||
let block = engine_state.get_block(block_id);
|
||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
||||
Ok(value) => Value::List {
|
||||
vals: value.collect(),
|
||||
@ -79,12 +79,9 @@ impl Command for For {
|
||||
Value::Range { val, span } => Ok(val
|
||||
.into_range_iter()?
|
||||
.map(move |x| {
|
||||
let block = engine_state.get_block(block);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
|
||||
stack.add_var(var_id, x);
|
||||
|
||||
let block = engine_state.get_block(block_id);
|
||||
match eval_block(&engine_state, &mut stack, block, PipelineData::new()) {
|
||||
Ok(value) => Value::List {
|
||||
vals: value.collect(),
|
||||
@ -95,10 +92,6 @@ impl Command for For {
|
||||
})
|
||||
.into_pipeline_data()),
|
||||
x => {
|
||||
let block = engine_state.get_block(block);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
|
||||
stack.add_var(var_id, x);
|
||||
|
||||
eval_block(&engine_state, &mut stack, block, PipelineData::new())
|
||||
|
@ -44,13 +44,13 @@ impl Command for If {
|
||||
Value::Bool { val, .. } => {
|
||||
if val {
|
||||
let block = engine_state.get_block(then_block);
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
eval_block(engine_state, &mut stack, block, input)
|
||||
} else if let Some(else_case) = else_case {
|
||||
if let Some(else_expr) = else_case.as_keyword() {
|
||||
if let Some(block_id) = else_expr.as_block() {
|
||||
let block = engine_state.get_block(block_id);
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
eval_block(engine_state, &mut stack, block, input)
|
||||
} else {
|
||||
eval_expression(engine_state, stack, else_expr)
|
||||
|
@ -64,7 +64,8 @@ impl Command for Each {
|
||||
|
||||
let numbered = call.has_flag("numbered");
|
||||
let engine_state = engine_state.clone();
|
||||
let stack = stack.clone();
|
||||
let block = engine_state.get_block(block_id);
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
let span = call.head;
|
||||
|
||||
match input {
|
||||
@ -74,7 +75,7 @@ impl Command for Each {
|
||||
.map(move |(idx, x)| {
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.clone();
|
||||
|
||||
if let Some(var) = block.signature.get_positional(0) {
|
||||
if let Some(var_id) = &var.var_id {
|
||||
@ -112,7 +113,8 @@ impl Command for Each {
|
||||
.map(move |(idx, x)| {
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.clone();
|
||||
|
||||
if let Some(var) = block.signature.get_positional(0) {
|
||||
if let Some(var_id) = &var.var_id {
|
||||
if numbered {
|
||||
@ -148,7 +150,8 @@ impl Command for Each {
|
||||
.map(move |(idx, x)| {
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.clone();
|
||||
|
||||
if let Some(var) = block.signature.get_positional(0) {
|
||||
if let Some(var_id) = &var.var_id {
|
||||
if numbered {
|
||||
@ -186,7 +189,8 @@ impl Command for Each {
|
||||
for (col, val) in cols.into_iter().zip(vals.into_iter()) {
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.clone();
|
||||
|
||||
if let Some(var) = block.signature.get_positional(0) {
|
||||
if let Some(var_id) = &var.var_id {
|
||||
stack.add_var(
|
||||
@ -231,7 +235,6 @@ impl Command for Each {
|
||||
PipelineData::Value(x) => {
|
||||
let block = engine_state.get_block(block_id);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
if let Some(var) = block.signature.get_positional(0) {
|
||||
if let Some(var_id) = &var.var_id {
|
||||
stack.add_var(*var_id, x);
|
||||
|
@ -29,7 +29,9 @@ impl Command for Where {
|
||||
let cond = call.positional[0].clone();
|
||||
|
||||
let engine_state = engine_state.clone();
|
||||
let mut stack = stack.enter_scope();
|
||||
|
||||
// FIXME: very expensive
|
||||
let mut stack = stack.clone();
|
||||
|
||||
let (var_id, cond) = match cond {
|
||||
Expression {
|
||||
|
@ -37,7 +37,7 @@ impl Command for Benchmark {
|
||||
.expect("internal error: expected block");
|
||||
let block = engine_state.get_block(block);
|
||||
|
||||
let mut stack = stack.enter_scope();
|
||||
let mut stack = stack.collect_captures(&block.captures);
|
||||
let start_time = Instant::now();
|
||||
eval_block(engine_state, &mut stack, block, PipelineData::new())?.into_value();
|
||||
|
||||
|
Reference in New Issue
Block a user