Implemented scoping for expansions
This commit is contained in:
@@ -175,6 +175,12 @@ impl Span {
|
||||
pub fn shift_end(&mut self, delta: isize) {
|
||||
self.end = self.end.saturating_add_signed(delta)
|
||||
}
|
||||
pub fn set_start(&mut self, start: usize) {
|
||||
self.start = start
|
||||
}
|
||||
pub fn set_end(&mut self, end: usize) {
|
||||
self.end = end
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! try_match {
|
||||
@@ -251,9 +257,9 @@ impl TkRule {
|
||||
// Generalized rules come last
|
||||
try_match!(Whitespace,input);
|
||||
try_match!(Comment,input);
|
||||
try_match!(CmdSub,input);
|
||||
try_match!(VarSub,input);
|
||||
try_match!(ProcSub,input);
|
||||
try_match!(CmdSub,input);
|
||||
try_match!(ArithSub,input);
|
||||
try_match!(AndOp,input);
|
||||
try_match!(OrOp,input);
|
||||
|
||||
@@ -391,7 +391,6 @@ ndrule_def!(Case, shenv, |mut tokens: &[Token], shenv: &mut ShEnv| {
|
||||
node_toks.push(token.clone());
|
||||
tokens = &tokens[1..];
|
||||
if token.as_raw(shenv) != "in" {
|
||||
panic!();
|
||||
return Err(err("Expected `in` after case statement pattern", token.span(), shenv))
|
||||
} else {
|
||||
closed = true;
|
||||
@@ -405,7 +404,6 @@ ndrule_def!(Case, shenv, |mut tokens: &[Token], shenv: &mut ShEnv| {
|
||||
_ => {
|
||||
if closed { break }
|
||||
log!(ERROR, token);
|
||||
panic!();
|
||||
return Err(err("Expected `in` after case statement pattern", token.span(), shenv))
|
||||
}
|
||||
}
|
||||
@@ -440,12 +438,8 @@ ndrule_def!(Case, shenv, |mut tokens: &[Token], shenv: &mut ShEnv| {
|
||||
let mut lists_iter = lists.iter().peekable();
|
||||
while let Some(list) = lists_iter.next() {
|
||||
node_toks.extend(list.tokens.clone());
|
||||
if lists_iter.peek().is_none() {
|
||||
for token in list.tokens() {
|
||||
}
|
||||
}
|
||||
if let Some(token) = list.tokens().last() {
|
||||
if lists_iter.peek().is_none() && (token.rule() != TkRule::Sep || token.as_raw(shenv).trim() != ";;") {
|
||||
if lists_iter.peek().is_none() && (token.rule() != TkRule::Sep || !token.as_raw(shenv).trim().ends_with(";;")) {
|
||||
log!(ERROR, "{:?}",list.tokens());
|
||||
log!(ERROR, token);
|
||||
log!(ERROR, "{}",token.as_raw(shenv).trim());
|
||||
@@ -1149,6 +1143,7 @@ ndrule_def!(Command, shenv, |tokens: &[Token], shenv: &mut ShEnv| {
|
||||
TkRule::DQuote |
|
||||
TkRule::TildeSub |
|
||||
TkRule::ArithSub |
|
||||
TkRule::CmdSub |
|
||||
TkRule::VarSub => {
|
||||
argv.push(token.clone());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user