Implemented arrays and array indexing

This commit is contained in:
2026-02-26 00:32:54 -05:00
parent b55e6e2dfd
commit f9312885bd
10 changed files with 570 additions and 309 deletions

View File

@@ -144,6 +144,7 @@ bitflags! {
const BACKGROUND = 0b000001;
const FORK_BUILTINS = 0b000010;
const NO_FORK = 0b000100;
const ARR_ASSIGN = 0b001000;
}
}
@@ -1472,22 +1473,28 @@ impl ParseStream {
}
}
}
if assign_kind.is_none() || var_name.is_empty() {
None
} else {
if let Some(assign_kind) = assign_kind && !var_name.is_empty() {
let var = Tk::new(TkRule::Str, Span::new(name_range, token.source()));
let val = Tk::new(TkRule::Str, Span::new(val_range, token.source()));
let flags = if var_val.starts_with('(') && var_val.ends_with(')') {
NdFlags::ARR_ASSIGN
} else {
NdFlags::empty()
};
Some(Node {
class: NdRule::Assignment {
kind: assign_kind.unwrap(),
kind: assign_kind,
var,
val,
},
tokens: vec![token.clone()],
flags: NdFlags::empty(),
flags,
redirs: vec![],
})
}
} else {
None
}
}
}