doc: sample: add for and while loop samples

This commit is contained in:
2025-09-08 15:30:44 +01:00
parent cb63e8d016
commit 2ff85a7505
4 changed files with 83 additions and 0 deletions

8
doc/sample/ForLoop.im Normal file
View File

@@ -0,0 +1,8 @@
str = "hello".
for c in str do
cout put:c
end
cout put:"done"

31
doc/sample/ForLoop.mie Normal file
View File

@@ -0,0 +1,31 @@
data @cout = external global id
data @.str.0 = str "hello"
define void @init() static {
entry:
%0 = load str, ptr @.str.0
%str = alloca id
store str %0, ptr %str
%1 = load id, ptr %str
%for.it = msg id, id %1, @_M8iteratorE
br label %for.cond
for.cond:
%for.value = msg id, id %for.it, @_M5valueE
%for.finished = cmp eq id %for.value, null
br i1 %for.finished, label %for.end, label %for.body
for.body:
%c = alloca id
store id %for.value, ptr %c
%2 = load id, ptr @cout
%3 = load id, ptr %c
msg void, id %2, @_M03putE [ id %3 ]
br label %for.inc
for.inc:
msg void, id %for.it, @_M8moveNextE
br label %for.cond
for.end:
ret void
}

13
doc/sample/WhileLoop.im Normal file
View File

@@ -0,0 +1,13 @@
i = 0.
sum = 0.
while i < 10 do
x = 2.
if x == 0 then
continue
else
x += 1
end
end
cout put:"done"

31
doc/sample/WhileLoop.mie Normal file
View File

@@ -0,0 +1,31 @@
data @cout = external global id
data @.str.0 = str "done"
define void @init() static {
entry:
%i = alloca i32
store i32 #0, ptr %i
%sum = alloca i32
store i32 #0, ptr %sum
while.cond:
%0 = load i32, ptr %i
%cmptmp = cmp lt i32 %0, #10
br i1 %cmptmp, label %while.body, label %while.end
while.body:
%1 = load i32, ptr %i
%2 = load i32, ptr %sum
%addtmp = add i32 %1, %2
store i32 %addtmp, ptr %sum
br label %while.cond
while.end:
%3 = load str, ptr @.str.0
%4 = load id, ptr @cout
msg void, id %4, @_M03putE [ str %3 ]
ret void
}