Fix compiler crash around dangling expect/let in traces

Fixes #1029.
This commit is contained in:
KtorZ
2024-10-01 12:24:31 +02:00
parent 9533903acc
commit 5737556efc
5 changed files with 142 additions and 22 deletions

View File

@@ -6477,3 +6477,63 @@ fn hard_soft_cast() {
assert_uplc(src, program, false, false);
}
#[test]
fn dangling_trace_expect_standalone() {
let src = r#"
test foo() {
trace @"foo"
expect True
}
"#;
let program = Term::bool(true)
.delayed_if_then_else(
Term::unit(),
Term::Error.delayed_trace(Term::string("expect True")),
)
.delayed_trace(Term::string("foo"));
assert_uplc(src, program, false, true)
}
#[test]
fn dangling_trace_expect_in_sequence() {
let src = r#"
test foo() {
let predicate = True
trace @"foo"
expect predicate
}
"#;
let program = Term::bool(true)
.delayed_if_then_else(
Term::unit(),
Term::Error.delayed_trace(Term::string("expect predicate")),
)
.delayed_trace(Term::string("foo"));
assert_uplc(src, program, false, true)
}
#[test]
fn dangling_trace_expect_in_trace() {
let src = r#"
test foo() {
trace @"foo"
trace @"bar"
expect True
}
"#;
let program = Term::bool(true)
.delayed_if_then_else(
Term::unit(),
Term::Error.delayed_trace(Term::string("expect True")),
)
.delayed_trace(Term::string("bar"))
.delayed_trace(Term::string("foo"));
assert_uplc(src, program, false, true)
}