doc: sample: add match-statement syntax and ir samples
This commit is contained in:
18
doc/sample/Match.im
Normal file
18
doc/sample/Match.im
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
age = 65.
|
||||||
|
yz = 32.
|
||||||
|
|
||||||
|
p3 = 3.
|
||||||
|
|
||||||
|
q = match yz in
|
||||||
|
1 => do
|
||||||
|
wq = 32.
|
||||||
|
wq * 2
|
||||||
|
end,
|
||||||
|
|
||||||
|
2 => age / 12,
|
||||||
|
p3 => age / 365,
|
||||||
|
5 | 6 => age = 32,
|
||||||
|
10..=15 => age = 64,
|
||||||
|
_ => 0
|
||||||
|
end
|
||||||
47
doc/sample/Match.mie
Normal file
47
doc/sample/Match.mie
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
define void @init() static {
|
||||||
|
entry:
|
||||||
|
%age = alloca id
|
||||||
|
store i32 #65, ptr %age
|
||||||
|
|
||||||
|
%yz = alloca id
|
||||||
|
store i32 #32, ptr %yz
|
||||||
|
|
||||||
|
%p3 = alloca id
|
||||||
|
store i32 #3, ptr %p3
|
||||||
|
|
||||||
|
%1 = load id, ptr %yz
|
||||||
|
%2 = load id, ptr %p3
|
||||||
|
|
||||||
|
switch id %1, label %match.d,
|
||||||
|
[ i32 #1, label %match.0 ],
|
||||||
|
[ i32 #2, label %match.1 ],
|
||||||
|
[ i32 %2, label %match.2 ]
|
||||||
|
match.0:
|
||||||
|
%wq = alloca id
|
||||||
|
store i32 #32, ptr %wq
|
||||||
|
|
||||||
|
%3 = load id, ptr %wq
|
||||||
|
%multmp = mul id %3, i32 #2
|
||||||
|
br label %match.end
|
||||||
|
|
||||||
|
match.1:
|
||||||
|
%4 = load id, ptr %age
|
||||||
|
%divtmp = mul id %4, i32 #12
|
||||||
|
br label %match.end
|
||||||
|
match.2:
|
||||||
|
%5 = load id, ptr %age
|
||||||
|
%divtmp.0 = mul id %5, i32 #365
|
||||||
|
br label %match.end
|
||||||
|
match.d:
|
||||||
|
br label %match.end
|
||||||
|
match.end:
|
||||||
|
%match.result = phi id
|
||||||
|
[ %match.0, %multmp],
|
||||||
|
[ %match.1, %divtmp ],
|
||||||
|
[ %match.2, %divtmp.0 ],
|
||||||
|
[ %match.d, #0 ]
|
||||||
|
|
||||||
|
%q = alloca id
|
||||||
|
store id %match.result, ptr %q
|
||||||
|
ret void
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user