Skip to content

Commit ce91838

Browse files
committed
优化没有elif和else的if为反转if条件的skip
1 parent 0876235 commit ce91838

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mindustry_logic_bang_lang"
3-
version = "0.7.3"
3+
version = "0.7.4"
44
edition = "2021"
55

66
authors = ["A4-Tacks <wdsjxhno1001@163.com>"]

src/syntax.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,19 @@ mod tests {
13581358
"#).unwrap(),
13591359
);
13601360

1361+
assert_eq!(
1362+
parse!(parser, r#"
1363+
if 2 < 3 { # 对于没有elif与else的if, 会将条件反转并构建为skip
1364+
print 1;
1365+
}
1366+
"#).unwrap(),
1367+
parse!(parser, r#"
1368+
skip ! 2 < 3 {
1369+
print 1;
1370+
}
1371+
"#).unwrap(),
1372+
);
1373+
13611374
assert_eq!(
13621375
parse!(parser, r#"
13631376
while a < b

src/syntax_def.lalrpop

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,16 @@ pub Control: LogicLine = {
365365
<elifs:("elif" <JumpCmp> <Block>)*>
366366
<else_body:("else" <LogicLine>)?> => {
367367

368+
// 对于没有elif和else的直接优化成skip
369+
if elifs.is_empty() && else_body.is_none() {
370+
let lab = meta.get_tag();
371+
return Expand(vec![
372+
Goto(lab.clone(), cmp.reverse()).into(),
373+
body,
374+
LogicLine::new_label(lab, meta),
375+
]).into()
376+
}
377+
368378
let end = meta.get_tag();
369379
let true_start = meta.get_tag();
370380
let mut elif_tags = Vec::with_capacity(elifs.len());

0 commit comments

Comments
 (0)