Merge master
This commit is contained in:
2
rust_compiler/Cargo.lock
generated
2
rust_compiler/Cargo.lock
generated
@@ -1039,7 +1039,7 @@ checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
|
||||
|
||||
[[package]]
|
||||
name = "slang"
|
||||
version = "0.5.0"
|
||||
version = "0.5.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "slang"
|
||||
version = "0.5.0"
|
||||
version = "0.5.1"
|
||||
edition = "2021"
|
||||
|
||||
[workspace]
|
||||
|
||||
@@ -65,4 +65,20 @@ mod integration_tests {
|
||||
let output = compile_with_and_without_optimization(source);
|
||||
insta::assert_snapshot!(output);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_setbatched_with_member_access() {
|
||||
let source = indoc! {r#"
|
||||
const SENSOR = 20088;
|
||||
const PANELS = hash("StructureSolarPanelDual");
|
||||
|
||||
loop {
|
||||
setBatched(PANELS, "Horizontal", SENSOR.Horizontal);
|
||||
setBatched(PANELS, "Vertical", SENSOR.Vertical + 90);
|
||||
yield();
|
||||
}
|
||||
"#};
|
||||
let output = compile_with_and_without_optimization(source);
|
||||
insta::assert_snapshot!(output);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
source: libs/integration_tests/src/lib.rs
|
||||
expression: output
|
||||
---
|
||||
## Unoptimized Output
|
||||
|
||||
j main
|
||||
main:
|
||||
__internal_L1:
|
||||
l r1 20088 Horizontal
|
||||
sb -539224550 Horizontal r1
|
||||
l r2 20088 Vertical
|
||||
add r3 r2 90
|
||||
sb -539224550 Vertical r3
|
||||
yield
|
||||
j __internal_L1
|
||||
__internal_L2:
|
||||
|
||||
## Optimized Output
|
||||
|
||||
l r1 20088 Horizontal
|
||||
sb -539224550 Horizontal r1
|
||||
l r2 20088 Vertical
|
||||
add r3 r2 90
|
||||
sb -539224550 Vertical r3
|
||||
yield
|
||||
j 0
|
||||
@@ -125,6 +125,9 @@ pub fn reg_is_read(instr: &Instruction, reg: u8) -> bool {
|
||||
| Instruction::Pow(_, a, b) => check(a) || check(b),
|
||||
Instruction::Load(_, a, _) => check(a),
|
||||
Instruction::Store(a, _, b) => check(a) || check(b),
|
||||
Instruction::StoreBatch(a, _, b) => check(a) || check(b),
|
||||
Instruction::StoreBatchNamed(a, b, _, c) => check(a) || check(b) || check(c),
|
||||
Instruction::StoreSlot(a, b, _, c) => check(a) || check(b) || check(c),
|
||||
Instruction::BranchEq(a, b, _)
|
||||
| Instruction::BranchNe(a, b, _)
|
||||
| Instruction::BranchGt(a, b, _)
|
||||
@@ -167,6 +170,8 @@ pub fn reg_is_read(instr: &Instruction, reg: u8) -> bool {
|
||||
Instruction::Atan2(_, a, b) | Instruction::Max(_, a, b) | Instruction::Min(_, a, b) => {
|
||||
check(a) || check(b)
|
||||
}
|
||||
Instruction::JumpRelative(a) => check(a),
|
||||
Instruction::Alias(_, a) => check(a),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user