Я добавил байткодеризацию для while, но без do, else, post instruction, break и continue. Всё-таки пришлось переписать кое-что, но это оказалось много легче, чем я думал.
u8 a := 33;
func (u8,[u32 c0,f32e8 c1]) main := {
u8 b := 8 + 5;
while 1 {
b := 3;
};
return a + 57;
};
преобразуется в:
u8 @0 'a' := 0x21
func(u8,[u32 %0,f32e8 %1]) @1 'main' := {
.0:
%2 := alloca u8;
%3 := 0x8 + 0x5;
%2 := %3;
.3:
branch 0x1 .4,.6;
.4:
{
.0:
%2 := 0x3;
};
goto .3;
.6:
%4 := @0 + 0x39;
return %4;
}
В итоге я засомневался в goto в laisi. Дело в том, что если написать такое:
{a := b + c;
d := e + f;},,
{lbl: g := h + i;
j := k + l;};
goto lbl;
?????
Верхние 2 комплекса ({}) инструкций исполняются в неопределённом порядке, потенцаильно параллельно, но при это внутри комплексов инструкции исполняются по порядку. И что сделает goto lbl; — неясно.
>>/2098/
https://ru.wikipedia.org/wiki/События_на_площади_Тяньаньмэнь_(1989)