fix handling short-only args. limitation: long args and short args now share the same namespace, effectively
This commit is contained in:
parent
386a7de467
commit
323e2dbed9
|
@ -124,8 +124,12 @@ pub(crate) fn compile_call(
|
||||||
ast_ref,
|
ast_ref,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
Argument::Named((name, _, _)) => compiled_args.push(CompiledArg::Named(
|
Argument::Named((name, short, _)) => compiled_args.push(CompiledArg::Named(
|
||||||
name.item.as_str(),
|
if name.item.is_empty() {
|
||||||
|
&short.as_ref().expect("no long name and no short name").item
|
||||||
|
} else {
|
||||||
|
&name.item
|
||||||
|
},
|
||||||
arg_reg,
|
arg_reg,
|
||||||
arg.span(),
|
arg.span(),
|
||||||
ast_ref,
|
ast_ref,
|
||||||
|
|
|
@ -968,7 +968,15 @@ fn eval_call<D: DebugContext>(
|
||||||
fn find_named_var_id(sig: &Signature, name: &[u8], span: Span) -> Result<VarId, ShellError> {
|
fn find_named_var_id(sig: &Signature, name: &[u8], span: Span) -> Result<VarId, ShellError> {
|
||||||
sig.named
|
sig.named
|
||||||
.iter()
|
.iter()
|
||||||
.find(|n| n.long.as_bytes() == name)
|
.find(|n| {
|
||||||
|
if !n.long.is_empty() {
|
||||||
|
n.long.as_bytes() == name
|
||||||
|
} else {
|
||||||
|
// If the arg has no long name, then compare against its short name
|
||||||
|
n.short
|
||||||
|
.is_some_and(|s| s.encode_utf8(&mut [0; 4]).as_bytes() == name)
|
||||||
|
}
|
||||||
|
})
|
||||||
.ok_or_else(|| ShellError::IrEvalError {
|
.ok_or_else(|| ShellError::IrEvalError {
|
||||||
msg: format!(
|
msg: format!(
|
||||||
"block does not have an argument named `{}`",
|
"block does not have an argument named `{}`",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user