improve matching

This commit is contained in:
Tove 2025-01-10 22:18:25 +01:00
parent a597a54f35
commit c71dd4d637
Signed by: TudbuT
GPG key ID: B3CF345217F202D3

View file

@ -292,23 +292,38 @@ fn read_block_dyn(
let throwing = cword.contains('!');
if str_words[i + 1] == "[" {
i += 1;
let mut block =
let block =
read_block_dyn(&str_words[i + 1..], false, "]".to_owned(), compat)?;
i += block.2 + 1;
words.push(Word::Call("[".to_owned(), false, 0));
words.append(&mut block.1.words);
for word in block.1.words {
if let Word::Key(Keyword::Def(ref varname)) = &word {
words.push(Word::Key(Keyword::Def(varname.clone())));
words.push(Word::Call("=".to_owned() + &varname, false, 1));
}
else {
words.push(word);
}
}
words.push(Word::Call("]".to_owned(), false, 0));
} else {
words.append(
&mut read_block_dyn(
&[str_words[i + 1].clone()],
false,
"".to_owned(),
false,
)?
.1
.words,
);
if str_words[i + 1] == "def" {
i += 1;
words.push(Word::Key(Keyword::Def(str_words[i + 1].clone())));
words.push(Word::Call("=".to_owned() + &str_words[i + 1], false, 1));
}
else {
words.append(
&mut read_block_dyn(
&[str_words[i + 1].clone()],
false,
"".to_owned(),
false,
)?
.1
.words,
);
}
i += 1;
}
words.push(Word::Call("match".to_owned(), false, 0));
@ -429,6 +444,9 @@ pub fn parse(mut input: String) -> Vec<String> {
if c == 'r' {
s += "\r";
}
if c == 't' {
s += "\t";
}
if c == '"' {
s += "\"";
}