redirection shouldn't get passed through unless it's the value that's going to be returned in out_reg
This commit is contained in:
parent
5d083cdaee
commit
55a4772f4c
|
@ -90,7 +90,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
part_expr,
|
part_expr,
|
||||||
redirect_modes.with_capture_out(part_expr.span),
|
RedirectModes::capture_out(part_expr.span),
|
||||||
None,
|
None,
|
||||||
reg,
|
reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -148,7 +148,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
subexpr,
|
subexpr,
|
||||||
redirect_modes.with_capture_out(subexpr.span),
|
RedirectModes::capture_out(subexpr.span),
|
||||||
None,
|
None,
|
||||||
out_reg,
|
out_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -196,7 +196,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
expr,
|
expr,
|
||||||
redirect_modes.with_capture_out(expr.span),
|
RedirectModes::capture_out(expr.span),
|
||||||
None,
|
None,
|
||||||
reg,
|
reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -244,7 +244,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
column,
|
column,
|
||||||
redirect_modes.with_capture_out(column.span),
|
RedirectModes::capture_out(column.span),
|
||||||
None,
|
None,
|
||||||
reg,
|
reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -269,7 +269,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
item,
|
item,
|
||||||
redirect_modes.with_capture_out(item.span),
|
RedirectModes::capture_out(item.span),
|
||||||
None,
|
None,
|
||||||
item_reg,
|
item_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -316,7 +316,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
key,
|
key,
|
||||||
redirect_modes.with_capture_out(key.span),
|
RedirectModes::capture_out(key.span),
|
||||||
None,
|
None,
|
||||||
key_reg,
|
key_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -324,7 +324,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
val,
|
val,
|
||||||
redirect_modes.with_capture_out(val.span),
|
RedirectModes::capture_out(val.span),
|
||||||
None,
|
None,
|
||||||
val_reg,
|
val_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -344,7 +344,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
expr,
|
expr,
|
||||||
redirect_modes.with_capture_out(expr.span),
|
RedirectModes::capture_out(expr.span),
|
||||||
None,
|
None,
|
||||||
reg,
|
reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -462,7 +462,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
exprs_iter.next().expect("peek() was Some"),
|
exprs_iter.next().expect("peek() was Some"),
|
||||||
redirect_modes.with_capture_out(expr.span),
|
RedirectModes::capture_out(expr.span),
|
||||||
None,
|
None,
|
||||||
out_reg,
|
out_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -478,7 +478,7 @@ pub(crate) fn compile_expression(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
expr,
|
expr,
|
||||||
redirect_modes.with_capture_out(expr.span),
|
RedirectModes::capture_out(expr.span),
|
||||||
None,
|
None,
|
||||||
scratch_reg,
|
scratch_reg,
|
||||||
)?;
|
)?;
|
||||||
|
|
|
@ -47,7 +47,7 @@ pub(crate) fn compile_if(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
condition,
|
condition,
|
||||||
redirect_modes.with_capture_out(condition.span),
|
RedirectModes::capture_out(condition.span),
|
||||||
None,
|
None,
|
||||||
condition_reg,
|
condition_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -181,7 +181,7 @@ pub(crate) fn compile_match(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
match_expr,
|
match_expr,
|
||||||
redirect_modes.with_capture_out(match_expr.span),
|
RedirectModes::capture_out(match_expr.span),
|
||||||
None,
|
None,
|
||||||
match_reg,
|
match_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -233,7 +233,7 @@ pub(crate) fn compile_match(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
guard,
|
guard,
|
||||||
redirect_modes.with_capture_out(guard.span),
|
RedirectModes::capture_out(guard.span),
|
||||||
None,
|
None,
|
||||||
guard_reg,
|
guard_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -294,7 +294,7 @@ pub(crate) fn compile_let(
|
||||||
working_set: &StateWorkingSet,
|
working_set: &StateWorkingSet,
|
||||||
builder: &mut BlockBuilder,
|
builder: &mut BlockBuilder,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
redirect_modes: RedirectModes,
|
_redirect_modes: RedirectModes,
|
||||||
io_reg: RegId,
|
io_reg: RegId,
|
||||||
) -> Result<(), CompileError> {
|
) -> Result<(), CompileError> {
|
||||||
// Pseudocode:
|
// Pseudocode:
|
||||||
|
@ -319,7 +319,7 @@ pub(crate) fn compile_let(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
block,
|
block,
|
||||||
redirect_modes.with_capture_out(call.head),
|
RedirectModes::capture_out(call.head),
|
||||||
Some(io_reg),
|
Some(io_reg),
|
||||||
io_reg,
|
io_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -434,7 +434,7 @@ pub(crate) fn compile_try(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
catch_expr,
|
catch_expr,
|
||||||
redirect_modes.with_capture_out(catch_expr.span),
|
RedirectModes::capture_out(catch_expr.span),
|
||||||
None,
|
None,
|
||||||
closure_reg,
|
closure_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -640,7 +640,7 @@ pub(crate) fn compile_while(
|
||||||
working_set: &StateWorkingSet,
|
working_set: &StateWorkingSet,
|
||||||
builder: &mut BlockBuilder,
|
builder: &mut BlockBuilder,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
redirect_modes: RedirectModes,
|
_redirect_modes: RedirectModes,
|
||||||
io_reg: RegId,
|
io_reg: RegId,
|
||||||
) -> Result<(), CompileError> {
|
) -> Result<(), CompileError> {
|
||||||
// Pseudocode:
|
// Pseudocode:
|
||||||
|
@ -671,7 +671,7 @@ pub(crate) fn compile_while(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
cond_arg,
|
cond_arg,
|
||||||
redirect_modes.with_capture_out(call.head),
|
RedirectModes::capture_out(call.head),
|
||||||
None,
|
None,
|
||||||
io_reg,
|
io_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -714,7 +714,7 @@ pub(crate) fn compile_for(
|
||||||
working_set: &StateWorkingSet,
|
working_set: &StateWorkingSet,
|
||||||
builder: &mut BlockBuilder,
|
builder: &mut BlockBuilder,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
redirect_modes: RedirectModes,
|
_redirect_modes: RedirectModes,
|
||||||
io_reg: RegId,
|
io_reg: RegId,
|
||||||
) -> Result<(), CompileError> {
|
) -> Result<(), CompileError> {
|
||||||
// Pseudocode:
|
// Pseudocode:
|
||||||
|
@ -755,7 +755,7 @@ pub(crate) fn compile_for(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
in_expr,
|
in_expr,
|
||||||
redirect_modes.with_capture_out(in_expr.span),
|
RedirectModes::capture_out(in_expr.span),
|
||||||
None,
|
None,
|
||||||
stream_reg,
|
stream_reg,
|
||||||
)?;
|
)?;
|
||||||
|
@ -871,7 +871,7 @@ pub(crate) fn compile_return(
|
||||||
working_set: &StateWorkingSet,
|
working_set: &StateWorkingSet,
|
||||||
builder: &mut BlockBuilder,
|
builder: &mut BlockBuilder,
|
||||||
call: &Call,
|
call: &Call,
|
||||||
redirect_modes: RedirectModes,
|
_redirect_modes: RedirectModes,
|
||||||
io_reg: RegId,
|
io_reg: RegId,
|
||||||
) -> Result<(), CompileError> {
|
) -> Result<(), CompileError> {
|
||||||
// Pseudocode:
|
// Pseudocode:
|
||||||
|
@ -883,7 +883,7 @@ pub(crate) fn compile_return(
|
||||||
working_set,
|
working_set,
|
||||||
builder,
|
builder,
|
||||||
arg_expr,
|
arg_expr,
|
||||||
redirect_modes.with_capture_out(arg_expr.span),
|
RedirectModes::capture_out(arg_expr.span),
|
||||||
None,
|
None,
|
||||||
io_reg,
|
io_reg,
|
||||||
)?;
|
)?;
|
||||||
|
|
|
@ -27,13 +27,6 @@ impl RedirectModes {
|
||||||
err: Some(RedirectMode::Caller.into_spanned(span)),
|
err: Some(RedirectMode::Caller.into_spanned(span)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn with_capture_out(&self, span: Span) -> Self {
|
|
||||||
RedirectModes {
|
|
||||||
out: Some(RedirectMode::Capture.into_spanned(span)),
|
|
||||||
err: self.err,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn redirection_target_to_mode(
|
pub(crate) fn redirection_target_to_mode(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user