mirror of
https://github.com/edg-l/edlang.git
synced 2024-09-19 01:02:25 +00:00
fix cf bug
This commit is contained in:
parent
050377daee
commit
c568cd4876
75
Cargo.lock
generated
75
Cargo.lock
generated
|
@ -61,9 +61,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.81"
|
version = "1.0.82"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247"
|
checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ariadne"
|
name = "ariadne"
|
||||||
|
@ -362,9 +362,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "either"
|
name = "either"
|
||||||
version = "1.10.0"
|
version = "1.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
|
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ena"
|
name = "ena"
|
||||||
|
@ -556,9 +556,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jobserver"
|
name = "jobserver"
|
||||||
version = "0.1.28"
|
version = "0.1.30"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6"
|
checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
@ -875,9 +875,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.35"
|
version = "1.0.36"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
|
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
@ -1401,7 +1401,7 @@ version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.52.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1436,17 +1436,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-targets"
|
name = "windows-targets"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
|
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows_aarch64_gnullvm 0.52.4",
|
"windows_aarch64_gnullvm 0.52.5",
|
||||||
"windows_aarch64_msvc 0.52.4",
|
"windows_aarch64_msvc 0.52.5",
|
||||||
"windows_i686_gnu 0.52.4",
|
"windows_i686_gnu 0.52.5",
|
||||||
"windows_i686_msvc 0.52.4",
|
"windows_i686_gnullvm",
|
||||||
"windows_x86_64_gnu 0.52.4",
|
"windows_i686_msvc 0.52.5",
|
||||||
"windows_x86_64_gnullvm 0.52.4",
|
"windows_x86_64_gnu 0.52.5",
|
||||||
"windows_x86_64_msvc 0.52.4",
|
"windows_x86_64_gnullvm 0.52.5",
|
||||||
|
"windows_x86_64_msvc 0.52.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1463,9 +1464,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_gnullvm"
|
name = "windows_aarch64_gnullvm"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
|
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
|
@ -1481,9 +1482,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
|
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
|
@ -1499,9 +1500,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
|
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
|
@ -1517,9 +1524,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
|
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
|
@ -1535,9 +1542,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
|
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnullvm"
|
name = "windows_x86_64_gnullvm"
|
||||||
|
@ -1553,9 +1560,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnullvm"
|
name = "windows_x86_64_gnullvm"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
|
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
|
@ -1571,15 +1578,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
|
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.6.5"
|
version = "0.6.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
|
checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
|
@ -20,6 +20,8 @@ mod common;
|
||||||
#[test_case(TEST_IF_BOTH, "test_if_both", false, 2, &["a"] ; "test_if_both_args")]
|
#[test_case(TEST_IF_BOTH, "test_if_both", false, 2, &["a"] ; "test_if_both_args")]
|
||||||
#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 1, &[] ; "test_if_no_else")]
|
#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 1, &[] ; "test_if_no_else")]
|
||||||
#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 2, &["a"] ; "test_if_no_else_args")]
|
#[test_case(TEST_IF_NO_ELSE, "test_if_no_else", false, 2, &["a"] ; "test_if_no_else_args")]
|
||||||
|
#[test_case(include_str!("programs/while_if_false.ed"), "while_if_false", false, 7, &[] ; "while_if_false")]
|
||||||
|
#[test_case(include_str!("programs/if_if_false.ed"), "if_if_false", false, 7, &[] ; "if_if_false")]
|
||||||
fn example_tests(source: &str, name: &str, is_library: bool, status_code: i32, args: &[&str]) {
|
fn example_tests(source: &str, name: &str, is_library: bool, status_code: i32, args: &[&str]) {
|
||||||
let program = compile_program(source, name, is_library).unwrap();
|
let program = compile_program(source, name, is_library).unwrap();
|
||||||
|
|
||||||
|
|
14
lib/edlang_driver/tests/programs/if_if_false.ed
Normal file
14
lib/edlang_driver/tests/programs/if_if_false.ed
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
fn main() -> i32 {
|
||||||
|
let foo: i32 = 7;
|
||||||
|
|
||||||
|
if true {
|
||||||
|
if false {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
foo = 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
return foo;
|
||||||
|
}
|
12
lib/edlang_driver/tests/programs/while_if_false.ed
Normal file
12
lib/edlang_driver/tests/programs/while_if_false.ed
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
fn main() -> i32 {
|
||||||
|
let mut result: i32 = 7;
|
||||||
|
|
||||||
|
while false {
|
||||||
|
if false {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
result = 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -288,7 +288,6 @@ fn lower_function(
|
||||||
lower_statement(&mut builder, stmt, &ret_ty)?;
|
lower_statement(&mut builder, stmt, &ret_ty)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if !builder.statements.is_empty() {
|
|
||||||
let statements = std::mem::take(&mut builder.statements);
|
let statements = std::mem::take(&mut builder.statements);
|
||||||
builder.body.blocks.push(BasicBlock {
|
builder.body.blocks.push(BasicBlock {
|
||||||
statements: statements.into(),
|
statements: statements.into(),
|
||||||
|
@ -296,7 +295,6 @@ fn lower_function(
|
||||||
terminator_span: None,
|
terminator_span: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
let (mut ctx, body) = (builder.ctx, builder.body);
|
let (mut ctx, body) = (builder.ctx, builder.body);
|
||||||
ctx.unresolved_function_signatures.remove(&body.def_id);
|
ctx.unresolved_function_signatures.remove(&body.def_id);
|
||||||
ctx.body.functions.insert(body.def_id, body);
|
ctx.body.functions.insert(body.def_id, body);
|
||||||
|
@ -366,10 +364,7 @@ fn lower_while(
|
||||||
}
|
}
|
||||||
|
|
||||||
// keet idx to change terminator if there is no return
|
// keet idx to change terminator if there is no return
|
||||||
let last_then_block_idx = if !matches!(
|
let last_then_block_idx = {
|
||||||
builder.body.blocks.last().unwrap().terminator,
|
|
||||||
Terminator::Return
|
|
||||||
) {
|
|
||||||
builder.body.blocks.len();
|
builder.body.blocks.len();
|
||||||
let statements = std::mem::take(&mut builder.statements);
|
let statements = std::mem::take(&mut builder.statements);
|
||||||
let idx = builder.body.blocks.len();
|
let idx = builder.body.blocks.len();
|
||||||
|
@ -379,8 +374,6 @@ fn lower_while(
|
||||||
terminator_span: Some(Span::new(info.block.span.hi, info.block.span.hi)),
|
terminator_span: Some(Span::new(info.block.span.hi, info.block.span.hi)),
|
||||||
});
|
});
|
||||||
Some(idx)
|
Some(idx)
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let otherwise_block_idx = builder.body.blocks.len();
|
let otherwise_block_idx = builder.body.blocks.len();
|
||||||
|
@ -447,10 +440,7 @@ fn lower_if_stmt(
|
||||||
}
|
}
|
||||||
|
|
||||||
// keet idx to change terminator
|
// keet idx to change terminator
|
||||||
let last_then_block_idx = if !matches!(
|
let last_then_block_idx = {
|
||||||
builder.body.blocks.last().unwrap().terminator,
|
|
||||||
Terminator::Return
|
|
||||||
) {
|
|
||||||
let idx = builder.body.blocks.len();
|
let idx = builder.body.blocks.len();
|
||||||
let statements = std::mem::take(&mut builder.statements);
|
let statements = std::mem::take(&mut builder.statements);
|
||||||
builder.body.blocks.push(BasicBlock {
|
builder.body.blocks.push(BasicBlock {
|
||||||
|
@ -459,8 +449,6 @@ fn lower_if_stmt(
|
||||||
terminator_span: Some(Span::new(info.then_block.span.hi, info.then_block.span.hi)),
|
terminator_span: Some(Span::new(info.then_block.span.hi, info.then_block.span.hi)),
|
||||||
});
|
});
|
||||||
Some(idx)
|
Some(idx)
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let first_else_block_idx = builder.body.blocks.len();
|
let first_else_block_idx = builder.body.blocks.len();
|
||||||
|
@ -471,10 +459,7 @@ fn lower_if_stmt(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let last_else_block_idx = if !matches!(
|
let last_else_block_idx = {
|
||||||
builder.body.blocks.last().unwrap().terminator,
|
|
||||||
Terminator::Return
|
|
||||||
) {
|
|
||||||
let idx = builder.body.blocks.len();
|
let idx = builder.body.blocks.len();
|
||||||
let statements = std::mem::take(&mut builder.statements);
|
let statements = std::mem::take(&mut builder.statements);
|
||||||
builder.body.blocks.push(BasicBlock {
|
builder.body.blocks.push(BasicBlock {
|
||||||
|
@ -486,8 +471,6 @@ fn lower_if_stmt(
|
||||||
.map(|x| Span::new(x.span.hi, x.span.hi)),
|
.map(|x| Span::new(x.span.hi, x.span.hi)),
|
||||||
});
|
});
|
||||||
Some(idx)
|
Some(idx)
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let targets = SwitchTarget {
|
let targets = SwitchTarget {
|
||||||
|
|
Loading…
Reference in a new issue