improve matching
This commit is contained in:
parent
a597a54f35
commit
c71dd4d637
1 changed files with 30 additions and 12 deletions
|
|
@ -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 += "\"";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue