elna/boot/stage2.elna

1425 lines
24 KiB
Plaintext

program
import dummy
const
SOURCE_BUFFER_SIZE := 81920
var
source_code: [81920]Byte
proc _compile_import()
var loca0: Word
begin
_advance(6);
_skip_spaces();
loca0 := _read_token();
_advance(loca0)
end
proc _build_binary_expression()
var
loca0, loca4, loca8, loca16, loca20: Word
loca12: ^Byte
loca24: Bool
begin
_build_expression(0);
loca4 := 0x2c306120;
loca8 := 0x0a316120;
_skip_spaces();
loca20 := _read_token();
loca12 := _current();
loca16 := 0x26;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_and
end;
loca16 := 0x726f;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_or
end;
loca16 := 0x3d;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_equal
end;
loca16 := 0x2b;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_plus
end;
loca16 := 0x2d;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_minus
end;
loca16 := 0x2a;
loca24 := _token_compare(loca12, loca20, @loca16);
if loca24 = 0 then
goto .L_build_binary_expression_product
end;
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_equal;
_advance(1);
_build_expression(1);
loca0 := 0x627573;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
loca0 := 0x7a716573;
_write_out(@loca0, 4);
_write_out(@loca4, 4);
_write_out(@loca4, 3);
_put_char(0x0a);
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_and;
_advance(1);
_build_expression(1);
loca0 := 0x646e61;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_or;
_advance(2);
_build_expression(1);
loca0 := 0x726f;
_write_out(@loca0, 2);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_plus;
_advance(1);
_build_expression(1);
loca0 := 0x646461;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_minus;
_advance(1);
_build_expression(1);
loca0 := 0x627573;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
goto .Lbuild_binary_expression_end;
.L_build_binary_expression_product;
_advance(1);
_build_expression(1);
loca0 := 0x6c756d;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
goto .Lbuild_binary_expression_end;
.Lbuild_binary_expression_end
end
proc _compile_identifier_expression(loca84: Word, loca80: Byte)
begin
loca24 := _current();
loca0 := 0x61636f6c;
loca0 := _memcmp(@loca0, loca24, 4);
if loca0 = 0 then
loca8 := 0x6120776c;
_write_out(@loca8, 4);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
loca4 := loca24 + 4;
loca0 := loca84 - 4;
_write_out(loca4, loca0);
loca8 := 0x29707328;
_write_out(@loca8, 4);
_put_char(0x0a);
goto .Lcompile_identifier_expression_end
end;
loca0 := _front(loca24);
loca8 := loca84 = 2;
loca12 := loca0 = 0x73;
if loca8 & loca12 then
loca8 := 0x6120766d;
_write_out(@loca8, 4);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
_write_out(loca24, loca84);
_put_char(0x0a);
goto .Lcompile_identifier_expression_end
end;
loca8 := 0x6120616c;
_write_out(@loca8, 4);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
_write_out(loca24, loca84);
_put_char(0x0a);
if _is_upper(loca0) then
loca8 := 0x6120776c;
_write_out(@loca8, 4);
loca8 := 0x28202c00 or loca28;
_write_out(@loca8, 4);
_put_char(0x61);
_put_char(loca28);
_put_char(0x29);
_put_char(0x0a);
goto .Lcompile_identifier_expression_end
end;
.Lcompile_identifier_expression_end
end
proc _build_expression()
var
loca0, loca20, loca28, loca8: Word
loca24, loca4: ^Byte
begin
loca28 := loca84 + 0x30;
_skip_spaces();
loca20 := _read_token();
loca24 := _current();
loca0 := _front(loca24);
if loca0 = 0x2d then
goto .Lbuild_expression_negate
end;
if loca0 = 0x40 then
goto .Lbuild_expression_address
end;
if _is_digit(loca0) then
goto .Lbuild_expression_literal
end;
if loca0 = 0x5f then
goto .Lbuild_expression_call
end;
_compile_identifier_expression(loca20, loca28);
goto .Lbuild_expression_advance;
.Lbuild_expression_negate;
_advance(1);
_build_expression(0);
loca8 := 0x2067656e;
_write_out(@loca8, 4);
loca8 := 0x202c3061;
_write_out(@loca8, 4);
loca8 := 0x0a3061;
_write_out(@loca8, 3);
goto .Lbuild_expression_advance;
.Lbuild_expression_address;
loca8 := 0x69646461;
_write_out(@loca8, 4);
loca8 := 0x6120;
_write_out(@loca8, 2);
_put_char(loca28);
loca8 := 0x7073202c;
_write_out(@loca8, 4);
loca8 := 0x202c;
_write_out(@loca8, 2);
_advance(1);
_skip_spaces();
loca24 := _current();
loca20 := _read_token();
loca4 := loca24 + 4;
loca0 := loca20 - 4;
_write_out(loca4, loca0);
_put_char(0xa);
goto .Lbuild_expression_advance;
.Lbuild_expression_call;
_advance(loca20);
_advance(1);
_compile_call(loca24, loca20);
goto .Lbuild_expression_end;
.Lbuild_expression_literal;
loca8 := 0x6120696c;
_write_out(@loca8, 4);
loca8 := 0x00202c00 or loca28;
_write_out(@loca8, 3);
_write_out(loca24, loca20);
_put_char(0x0a);
goto .Lbuild_expression_advance;
.Lbuild_expression_advance;
_advance(loca20);
.Lbuild_expression_end
end
proc _compile_designator_expression(loca84: ^Byte, loca80: Word)
var
loca0: Word
begin
loca0 := 0x61636f6c;
loca4 := _memcmp(@loca0, loca84, 4);
if loca4 = 0 then
loca0 := 0x61207773;
_write_out(@loca0, 4);
loca0 := 0x202c30;
_write_out(@loca0, 3);
loca84 := loca84 + 4;
loca80 := loca80 - 4;
_write_out(loca84, loca80);
loca0 := 0x29707328;
_write_out(@loca0, 4);
_put_char(0x0a);
goto .Lcompile_designator_expression_end
end;
loca8 := _front(loca84);
loca12 := loca8 = 0x73;
loca16 := loca80 = 2;
if loca12 & loca16 then
loca0 := 0x20766d;
_write_out(@loca0, 3);
_write_out(loca84, loca80);
loca0 := 0x3061202c;
_write_out(@loca0, 4);
_put_char(0x0a);
goto .Lcompile_designator_expression_end
end;
.Lcompile_designator_expression_end
end
proc _compile_identifier()
var
loca0, loca16, loca8: Word
loca20, loca12: ^Byte
loca4: Bool
begin
loca20 := _current();
loca16 := _read_token();
_advance(loca16);
_skip_spaces();
loca12 := _current();
loca8 := _read_token();
_advance(loca8);
_skip_spaces();
loca0 := 0x3d3a;
loca4 := _token_compare(loca12, loca8, @loca0);
if loca4 = 0 then
_build_binary_expression();
_compile_designator_expression(loca20, loca16);
goto .Lcompile_identifier_end
end;
if _front(loca12) = 0x28 then
_compile_call(loca20, loca16);
goto .Lcompile_identifier_end
end;
.Lcompile_identifier_end
end
proc _compile_call(loca84: ^Byte, loca80: Word)
var
loca0, loca4, loca12: Word
loca8: ^Byte
begin
loca12 := 0;
.Lcompile_call_paren;
_skip_spaces();
loca8 := _current();
if _front(loca8) = 0x29 then
goto .Lcompile_call_complete
end;
.Lcompile_call_argument;
_build_expression(0);
loca0 := 0x61207773;
_write_out(@loca0, 4);
loca0 := 0x202c30;
_write_out(@loca0, 3);
loca0 := -4 * loca12;
loca0 := loca0 + 60;
_printi(loca0);
loca0 := 0x29707328;
_write_out(@loca0, 4);
_put_char(0x0a);
_skip_spaces();
loca8 := _current();
loca0 := _front(loca8) = 0x2c;
if loca0 = 0 then
goto .Lcompile_call_paren
end;
loca12 := loca12 + 1;
_advance(1);
goto .Lcompile_call_argument;
.Lcompile_call_complete;
loca12 := 0;
.Lcompile_call_restore;
loca0 := 0x6120776c;
_write_out(@loca0, 4);
loca4 := 0x36202c30;
_write_out(@loca4, 4);
loca4 := 0x70732830;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_out(@loca0, 4);
loca4 := 0x35202c31;
_write_out(@loca4, 4);
loca4 := 0x70732836;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_out(@loca0, 4);
loca4 := 0x35202c32;
_write_out(@loca4, 4);
loca4 := 0x70732832;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_out(@loca0, 4);
loca4 := 0x34202c33;
_write_out(@loca4, 4);
loca4 := 0x70732838;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_out(@loca0, 4);
loca4 := 0x34202c34;
_write_out(@loca4, 4);
loca4 := 0x70732834;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_out(@loca0, 4);
loca4 := 0x34202c35;
_write_out(@loca4, 4);
loca4 := 0x70732830;
_write_out(@loca4, 4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
loca0 := 0x6c6c6163;
_write_out(@loca0, 4);
_put_char(0x20);
_write_out(loca84, loca80);
_put_char(0x0a);
_skip_spaces();
_advance(1)
end
proc _read_token()
var
loca0, loca4: Word
loca8: ^Byte
begin
loca8 := _current();
loca0 := _front(loca8);
loca4 := 0;
if loca0 = 0x2e then
goto .Ltoken_character_single
end;
if loca0 = 0x2c then
goto .Ltoken_character_single
end;
if loca0 = 0x3a then
goto .Ltoken_character_colon
end;
if loca0 = 0x3b then
goto .Ltoken_character_single
end;
if loca0 = 0x28 then
goto .Ltoken_character_single
end;
if loca0 = 0x29 then
goto .Ltoken_character_single
end;
if loca0 = 0x5b then
goto .Ltoken_character_single
end;
if loca0 = 0x5d then
goto .Ltoken_character_single
end;
if loca0 = 0x5e then
goto .Ltoken_character_single
end;
if loca0 = 0x26 then
goto .Ltoken_character_single
end;
if loca0 = 0x3d then
goto .Ltoken_character_single
end;
if loca0 = 0x2b then
goto .Ltoken_character_single
end;
if loca0 = 0x2d then
goto .Ltoken_character_single
end;
if loca0 = 0x2a then
goto .Ltoken_character_single
end;
if loca0 = 0x40 then
goto .Ltoken_character_single
end;
.Ltoken_character_loop_do;
loca0 := loca8 + loca4;
loca0 := _front(loca0);
if _is_alnum(loca0) then
loca4 := loca4 + 1;
goto .Ltoken_character_loop_do;
.Ltoken_character_single;
loca4 := loca4 + 1;
goto .Ltoken_character_end;
.Ltoken_character_colon;
loca0 := loca8 + 1;
loca0 := _front(loca0);
loca4 := loca4 + 1;
if loca0 = 0x3d then
goto .Ltoken_character_single
end
end;
.Ltoken_character_end;
return loca4
end
proc _skip_spaces()
var
loca0: Byte
loca4: ^Byte
begin
.Lspace_loop_do;
loca4 := _current();
loca0 := _front(loca4);
if loca0 = 0x20 then
goto .Lspace_loop_repeat
end;
if loca0 = 0x09 then
goto .Lspace_loop_repeat
end;
if loca0 = 0x0a then
goto .Lspace_loop_repeat
end;
if loca0 = 0x0d then
goto .Lspace_loop_repeat
end;
goto .Lspace_loop_end;
.Lspace_loop_repeat;
_advance(1);
goto .Lspace_loop_do;
.Lspace_loop_end
end
proc _compile_assembly(loca84: Word)
var loca0: ^Byte
begin
loca0 := _current();
_write_out(loca0, loca84);
_advance(loca84);
_put_char(0xa);
_advance(1)
end
proc _compile_program()
var loca0: Word
begin
loca0 := 0x6f6c672e;
_write_out(@loca0, 4);
loca0 := 0x206c6162;
_write_out(@loca0, 4);
loca0 := 0x6174735f;
_write_out(@loca0, 4);
loca0 := 0x0a7472;
_write_out(@loca0, 3);
_advance(8)
end
proc _compile_constant_section()
var
loca0: Word
loca4: ^Byte
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
loca0 := 0x6f722e20;
_write_out(@loca0, 4);
loca0 := 0x61746164;
_write_out(@loca0, 4);
loca0 := 0x0a;
_write_out(@loca0, 1);
_advance(6);
.Lcompile_constant_section_item;
_skip_spaces();
loca4 := _current();
loca0 := _front(loca4);
if _is_upper(loca0) then
_compile_constant();
goto .Lcompile_constant_section_item
end;
.Lcompile_constant_section_end
end
proc _compile_constant()
var
loca0, loca4: Word
loca8: ^Byte
begin
loca4 := _read_token();
loca8 := _current();
_write_out(loca8, loca4);
_advance(loca4);
_skip_spaces();
_advance(2);
loca0 := 0x6c2e203a;
_write_out(@loca0, 4);
loca0 := 0x20676e6f;
_write_out(@loca0, 4);
_skip_spaces();
loca4 := _read_token();
loca8 := _current();
_write_out(loca8, loca4);
_advance(loca4);
_put_char(0x0a)
end
proc _compile_variable_section()
var
loca0: Word
loca4: ^Byte
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
loca0 := 0x73622e20;
_write_out(@loca0, 4);
loca0 := 0x0a73;
_write_out(@loca0, 2);
_advance(4);
.Lcompile_variable_section_item;
_skip_spaces();
loca4 := _current();
loca0 := 0x636f7270;
loca0 := _memcmp(@loca0, loca4, 4);
if loca0 = 0 then
goto .Lcompile_variable_section_end
end;
_compile_variable();
goto .Lcompile_variable_section_item;
.Lcompile_variable_section_end
end
proc _compile_variable()
var
loca28, loca16: ^Byte
loca0, loca24, loca20: Word
begin
loca24 := _read_token();
loca28 := _current();
_advance(loca24);
_skip_spaces();
_advance(1);
_skip_spaces();
_advance(1);
loca16 := _read_token();
loca20 := _current();
_advance(loca16);
_skip_spaces();
_advance(1);
_skip_spaces();
loca0 := _read_token();
_advance(loca0);
loca0 := 0x7079742e;
_write_out(@loca0, 4);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_out(loca28, loca24);
loca0 := 0x6f40202c;
_write_out(@loca0, 4);
loca0 := 0x63656a62;
_write_out(@loca0, 4);
loca0 := 0x0a74;
_write_out(@loca0, 2);
loca0 := 0x7a69732e;
_write_out(@loca0, 4);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_out(loca28, loca24);
loca0 := 0x202c;
_write_out(@loca0, 2);
_write_out(loca20, loca16);
_put_char(0x0a);
_write_out(loca28, loca24);
loca0 := 0x7a2e203a;
_write_out(@loca0, 4);
loca0 := 0x206f7265;
_write_out(@loca0, 4);
_write_out(loca20, loca16);
_put_char(0x0a)
end
proc _compile_procedure()
var
loca0, loca4, loca8, loca12, loca16: Word
loca20, loca24: ^Byte
begin
_advance(5);
loca16 := _read_token();
loca20 := _current();
_advance(loca16);
loca0 := 0x7079742e;
_write_out(@loca0, 4);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_out(loca20, loca16);
loca0 := 0x6640202c;
_write_out(@loca0, 4);
loca0 := 0x74636e75;
_write_out(@loca0, 4);
loca0 := 0x0a6e6f69;
_write_out(@loca0, 4);
_write_out(loca20, loca16);
loca0 := 0x0a3a;
_write_out(@loca0, 2);
_skip_spaces();
_advance(1);
_skip_spaces();
_advance(1);
loca12 := 0x6e;
loca8 := 0x69676562;
.Lcompile_procedure_begin;
_skip_spaces();
loca0 := _read_token();
loca24 := _current();
_advance(loca0);
loca0 := _token_compare(loca24, loca0, @loca8);
if loca0 = 1 then
goto .Lcompile_procedure_begin
end;
loca0 := 0x69646461;
_write_out(@loca0, 4);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
_write_out(@loca0, 4);
loca0 := 0x0a36392d;
_write_out(@loca0, 4);
loca0 := 0x72207773;
_write_out(@loca0, 4);
loca0 := 0x39202c61;
_write_out(@loca0, 4);
loca0 := 0x70732832;
_write_out(@loca0, 4);
loca0 := 0x0a29;
_write_out(@loca0, 2);
loca0 := 0x73207773;
_write_out(@loca0, 4);
loca0 := 0x38202c30;
_write_out(@loca0, 4);
loca0 := 0x70732838;
_write_out(@loca0, 4);
loca0 := 0x0a29;
_write_out(@loca0, 2);
loca0 := 0x69646461;
_write_out(@loca0, 4);
loca0 := 0x2c307320;
_write_out(@loca0, 4);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
loca0 := 0x0a363920;
_write_out(@loca0, 4);
loca0 := 0x61207773;
_write_out(@loca0, 4);
loca4 := 0x38202c30;
_write_out(@loca4, 4);
loca8 := 0x70732834;
_write_out(@loca8, 4);
loca12 := 0x0a29;
_write_out(@loca12, 2);
_write_out(@loca0, 4);
loca4 := 0x38202c31;
_write_out(@loca4, 4);
loca8 := 0x70732830;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_out(@loca0, 4);
loca4 := 0x37202c32;
_write_out(@loca4, 4);
loca8 := 0x70732836;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_out(@loca0, 4);
loca4 := 0x37202c33;
_write_out(@loca4, 4);
loca8 := 0x70732832;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_out(@loca0, 4);
loca4 := 0x36202c34;
_write_out(@loca4, 4);
loca8 := 0x70732838;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_out(@loca0, 4);
loca4 := 0x36202c35;
_write_out(@loca4, 4);
loca8 := 0x70732838;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
.Lcompile_procedure_body;
_skip_spaces();
loca12 := _read_line();
loca8 := 0x0a646e65;
loca24 := _current();
loca8 := _memcmp(loca24, @loca8, 4);
if loca8 = 0 then
goto .Lcompile_procedure_end
end;
_compile_line(loca12);
goto .Lcompile_procedure_body;
.Lcompile_procedure_end;
_advance(4);
loca0 := 0x7220776c;
_write_out(@loca0, 4);
loca0 := 0x39202c61;
_write_out(@loca0, 4);
loca0 := 0x70732832;
_write_out(@loca0, 4);
loca0 := 0x0a29;
_write_out(@loca0, 2);
loca0 := 0x7320776c;
_write_out(@loca0, 4);
loca0 := 0x38202c30;
_write_out(@loca0, 4);
loca0 := 0x70732838;
_write_out(@loca0, 4);
loca0 := 0x0a29;
_write_out(@loca0, 2);
loca0 := 0x69646461;
_write_out(@loca0, 4);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
_write_out(@loca0, 4);
loca0 := 0x0a3639;
_write_out(@loca0, 4);
loca0 := 0x0a746572;
_write_out(@loca0, 4)
end
proc _token_compare(loca84: ^Byte, loca80: Word, loca76: ^Byte)
var
loca0: Bool
loca4, loca12: Byte
loca8: Word
begin
.Ltoken_compare_loop;
loca4 := _front(loca76);
loca8 := loca4 or loca80;
if loca8 = 0 then
goto .Ltoken_compare_equal
end;
if loca80 = 0 then
goto .Ltoken_compare_not_equal
end;
if loca4 = 0 then
goto .Ltoken_compare_not_equal
end;
loca12 := _front(loca84);
if loca4 = loca12 then
goto .Ltoken_compare_continue
end;
goto .Ltoken_compare_not_equal;
.Ltoken_compare_continue;
loca84 := loca84 + 1;
loca80 := loca80 - 1;
loca76 := loca76 + 1;
goto .Ltoken_compare_loop;
.Ltoken_compare_not_equal;
loca0 := 1;
goto .Ltoken_compare_end;
.Ltoken_compare_equal;
loca0 := 0;
.Ltoken_compare_end;
return loca0
end
proc _compile_goto()
var
loca0: Word
loca8: ^Byte
begin
_advance(4);
loca0 := 0x206a;
_write_out(@loca0, 2);
_skip_spaces();
loca8 := _current();
_advance(1);
loca0 := _read_token();
_advance(loca0);
loca0 := loca0 + 1;
_write_out(loca8, loca0);
_advance(1);
_put_char(0x0a)
end
proc _compile_label(loca84: Word)
var
loca0: Word
begin
loca0 := _current();
loca0 := loca0 + loca84;
loca0 := loca0 - 1;
loca4 := loca84;
loca0 := _front(loca0);
if loca0 = 0x3b then
loca4 := loca4 - 1
end;
_write_out(s1, loca4);
_put_char(0x3a);
_put_char(0x0a);
_advance(loca84)
end
proc _compile_return()
begin
_advance(6);
_skip_spaces();
_build_binary_expression()
end
proc _compile_if()
var
loca8, loca12, loca16, loca20: Word
loca4: ^Byte
begin
_advance(2);
_skip_spaces();
_build_binary_expression();
_skip_spaces();
_advance(4);
loca20 := 0x00646e65;
loca16 := 0x66694c2e;
loca12 := 0x7a716562;
_write_out(@loca12, 4);
loca12 := 0x2c306120;
_write_out(@loca12, 4);
_put_char(0x20);
_write_out(@loca16, 4);
_printi(s2);
_put_char(0x0a);
.Lcompile_if_loop;
_skip_spaces();
loca12 := _read_token();
loca4 := _current();
loca8 := _token_compare(loca4, loca12, @loca20);
if loca8 then
loca12 := _read_line();
_compile_line(loca12, 1);
goto .Lcompile_if_loop
end;
_write_out(@loca16, 4);
_printi(s2);
loca12 := 0x0a3a0a3a;
_write_out(@loca12, 2);
s2 := s2 + 1;
_advance(4)
end
proc _compile_line(loca84: Word, loca80: Bool)
var
loca0: Char
loca4: Int
loca8: Bool
loca12: Word
loca16: ^Byte
begin
if loca84 = 0 then
goto .Lcompile_line_empty
end;
loca16 := _current();
loca0 := _front(loca16);
loca12 := 0x676f7270;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_program
end;
loca12 := 0x736e6f63;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_const
end;
loca12 := 0x0a726176;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_var
end;
loca12 := 0x636f7270;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_procedure
end;
loca12 := 0x69676562;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_begin
end;
loca12 := 0x2e646e65;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_exit
end;
loca12 := 0x61636f6c;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_identifier
end;
loca4 := _front(loca16);
if loca4 = 0x73 then
goto .Lcompile_line_identifier
end;
loca12 := 0x6f706d69;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_import
end;
loca12 := 0x6f746f67;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_goto
end;
loca12 := 0x75746572;
loca4 := _memcmp(loca16, @loca12, 4);
if loca4 = 0 then
goto .Lcompile_line_return
end;
loca12 := 0x6669;
loca4 := _memcmp(loca16, @loca12, 2);
if loca4 = 0 then
goto .Lcompile_line_if
end;
if loca0 = 0x2e then
goto .Lcompile_line_label
end;
if loca0 = 0x5f then
goto .Lcompile_line_identifier
end;
goto .Lcompile_line_unchanged;
.Lcompile_line_if;
_compile_if();
goto .Lcompile_line_section;
.Lcompile_line_label;
_compile_label(loca84);
goto .Lcompile_line_section;
.Lcompile_line_return;
_compile_return();
goto .Lcompile_line_section;
.Lcompile_line_goto;
_compile_goto();
goto .Lcompile_line_section;
.Lcompile_line_import;
_compile_import();
goto .Lcompile_line_section;
.Lcompile_line_identifier;
_compile_identifier();
goto .Lcompile_line_section;
.Lcompile_line_exit;
_compile_exit();
goto .Lcompile_line_section;
.Lcompile_line_begin;
if loca80 = 1 then
goto .Lcompile_line_compile_entry
end;
_compile_text_section();
.Lcompile_line_compile_entry;
_compile_entry_point();
loca8 := 1;
goto .Lcompile_line_end;
.Lcompile_line_const;
_compile_constant_section();
goto .Lcompile_line_section;
.Lcompile_line_procedure;
if loca80 = 1 then
goto .Lcompile_line_compile_procedure
end;
_compile_text_section();
.Lcompile_line_compile_procedure;
_compile_procedure();
loca8 := 1;
goto .Lcompile_line_end;
.Lcompile_line_var;
_compile_variable_section();
goto .Lcompile_line_section;
.Lcompile_line_program;
_compile_program();
goto .Lcompile_line_section;
.Lcompile_line_empty;
_advance(1);
goto .Lcompile_line_section;
.Lcompile_line_unchanged;
_compile_assembly(loca84);
goto .Lcompile_line_section;
.Lcompile_line_section;
loca8 := 0;
.Lcompile_line_end;
_skip_spaces();
return loca8
end
proc _compile_text_section()
var loca0: Word
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
loca0 := 0x65742e20;
_write_out(@loca0, 4);
loca0 := 0x0a7478;
_write_out(@loca0, 3)
end
proc _compile_entry_point()
var loca0: Word
begin
loca0 := 0x7079742e;
_write_out(@loca0, 4);
loca0 := 0x735f2065;
_write_out(@loca0, 4);
loca0 := 0x74726174;
_write_out(@loca0, 4);
loca0 := 0x6640202c;
_write_out(@loca0, 4);
loca0 := 0x74636e75;
_write_out(@loca0, 4);
loca0 := 0x0a6e6f69;
_write_out(@loca0, 4);
loca0 := 0x6174735f;
_write_out(@loca0, 4);
loca0 := 0x0a3a7472;
_write_out(@loca0, 4);
_advance(6)
end
proc _compile_exit()
var loca0: Word
begin
loca0 := 0x6120696c;
_write_out(@loca0, 4);
loca0 := 0x30202c30;
_write_out(@loca0, 4);
loca0 := 0x20696c0a;
_write_out(@loca0, 4);
loca0 := 0x202c3761;
_write_out(@loca0, 4);
loca0 := 0x650a3339;
_write_out(@loca0, 4);
loca0 := 0x6c6c6163;
_write_out(@loca0, 4);
loca0 := 0x0a;
_write_out(@loca0, 1);
_advance(4);
_skip_spaces()
end
proc _read_line()
var
loca0: ^Byte
loca4: Byte
begin
loca0 := _current();
.Lread_line_do;
loca4 := _front(loca0);
if loca4 = 0 then
goto .Lread_line_end
end;
if loca4 = 0x0a then
goto .Lread_line_end
end;
loca0 := loca0 + 1;
goto .Lread_line_do;
.Lread_line_end;
loca4 := _current();
return loca0 - loca4
end
proc _compile()
var
loca0, loca4: Word
loca8: Bool
loca12: Char
loca16: ^Byte
begin
loca4 := 0;
.Lcompile_do;
loca16 := _current();
loca12 := _front(loca16);
if loca12 = 0 then
goto .Lcompile_end
end;
_skip_spaces();
loca0 := _read_line();
loca8 := _compile_line(loca0, loca4);
if loca8 = 0 then
goto .Lcompile_do
end;
loca4 := loca4 or loca8;
goto .Lcompile_do;
.Lcompile_end
end
proc _current()
begin
return s1
end
proc _advance(loca84: Word)
begin
s1 := s1 + loca84
end
proc _front(loca84: ^Word)
begin
return _get(loca84) & 0xff
end
proc _main()
begin
_read_file(source_code, SOURCE_BUFFER_SIZE);
s2 := 1
end
begin
_main();
_compile()
end.