compiler/
lib/
examples/
std/
arch/
char/
collections/
lang/
alloc/
ast/
gen/
il/
printer.rad
15.7 KiB
tests.rad
648 B
module/
parser/
resolver/
scanner/
alloc.rad
5.4 KiB
ast.rad
23.1 KiB
gen.rad
507 B
il.rad
15.3 KiB
lower.rad
271.6 KiB
module.rad
13.5 KiB
package.rad
1.2 KiB
parser.rad
78.7 KiB
resolver.rad
314.0 KiB
scanner.rad
17.4 KiB
sexpr.rad
6.3 KiB
strings.rad
2.2 KiB
types.rad
280 B
sys/
arch.rad
68 B
char.rad
855 B
collections.rad
39 B
fmt.rad
8.1 KiB
intrinsics.rad
683 B
io.rad
1.4 KiB
lang.rad
360 B
mem.rad
2.2 KiB
sys.rad
173 B
testing.rad
2.4 KiB
tests.rad
15.4 KiB
vec.rad
4.8 KiB
std.rad
358 B
scripts/
seed/
sublime/
test/
vim/
.gitignore
336 B
.gitsigners
112 B
LICENSE
1.1 KiB
Makefile
3.7 KiB
README
2.5 KiB
STYLE
2.5 KiB
std.lib
1.2 KiB
std.lib.test
373 B
lib/std/lang/il/tests.rad
raw
| 1 | //! Intermediate language tests. |
| 2 | |
| 3 | use std::testing; |
| 4 | |
| 5 | /// Add one register number through a call-scoped context loan. |
| 6 | fn observeReg(reg: super::Reg, ctx: &mut opaque) { |
| 7 | unsafe { set *(ctx as &mut u32) += reg.n; } |
| 8 | } |
| 9 | |
| 10 | /// Register traversal may reuse one mutable callback context loan. |
| 11 | @test fn testForEachRegCallbackLoan() throws (testing::TestError) { |
| 12 | let mut context: u32 = 0; |
| 13 | let instr = super::Instr::Store { |
| 14 | typ: super::Type::W32, |
| 15 | src: super::Val::Reg(super::Reg { n: 1 }), |
| 16 | dst: super::Reg { n: 2 }, |
| 17 | offset: 0, |
| 18 | }; |
| 19 | super::forEachReg(instr, observeReg, &mut context); |
| 20 | assert context == 3; |
| 21 | } |