Support named identifiers on the right side

This commit is contained in:
Eugen Wissner 2025-05-12 00:06:02 +02:00
parent 707f983fe9
commit d85183c7a6
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
4 changed files with 725 additions and 592 deletions

View File

@ -3,7 +3,7 @@
# obtain one at https://mozilla.org/MPL/2.0/.
.global _is_alpha, _is_digit, _is_alnum, _is_upper, _is_lower
.global _write_out, _read_file, _write_error, _put_char, _printi
.global _write_s, _read_file, _write_error, _write_c, _write_i, _print_i
.global _get, _memcmp, _memchr, _memmem, _memcpy
.global _divide_by_zero_error, _exit, _mmap
.global _strings_index, _string_equal
@ -175,16 +175,20 @@ _is_alnum:
addi sp, sp, 16
ret
.type _write_out, @function
_write_out:
# Writes a string to the standard output.
#
# Parameters:
# a0 - Length of the string.
# a1 - String pointer.
.type _write_s, @function
_write_s:
# Prologue.
addi sp, sp, -8
sw ra, 4(sp)
sw s0, 0(sp)
addi s0, sp, 8
mv a2, a1
mv a1, a0
mv a2, a0
li a0, STDOUT
li a7, SYS_WRITE
ecall
@ -244,53 +248,87 @@ _divide_by_zero_error:
ecall
ret
# a0 - Whole number.
# Writes a number to a string buffer.
#
# t0 - Local buffer.
# t1 - Constant 10.
# a1 - Local buffer.
# t2 - Current character.
# t3 - Whether the number is negative.
.type printi, @function
_printi:
addi sp, sp, -16
sw s0, 0(sp)
sw ra, 4(sp)
addi s0, sp, 16
addi t1, zero, 10
addi a1, s0, -1
#
# Parameters:
# a0 - Whole number.
# a1 - Buffer pointer.
#
# Sets a0 to the length of the written number.
.type _print_i, @function
_print_i:
addi sp, sp, -32
sw ra, 28(sp)
sw s0, 24(sp)
addi s0, sp, 32
addi t3, zero, 0
bge a0, zero, .digit10
addi t3, zero, 1
sub a0, zero, a0
li t1, 10
addi t0, s0, -9
.digit10:
li t3, 0
bgez a0, .Lprint_i_digit10
li t3, 1
neg a0, a0
.Lprint_i_digit10:
rem t2, a0, t1
addi t2, t2, '0'
sb t2, 0(a1)
sb t2, 0(t0)
div a0, a0, t1
addi a1, a1, -1
bne zero, a0, .digit10
addi t0, t0, -1
bne zero, a0, .Lprint_i_digit10
beq zero, t3, .write_call
beq zero, t3, .Lprint_i_write_call
addi t2, zero, '-'
sb t2, 0(a1)
addi a1, a1, -1
sb t2, 0(t0)
addi t0, t0, -1
.write_call:
addi a0, zero, 1
addi a1, a1, 1
sub a2, s0, a1
addi a7, zero, 64 # write
ecall
.Lprint_i_write_call:
mv a0, a1
addi a1, t0, 1
sub a2, s0, t0
addi a2, a2, -9
sw a2, 0(sp)
lw s0, 0(sp)
lw ra, 4(sp)
addi sp, sp, 16
call _memcpy
lw a0, 0(sp)
lw ra, 28(sp)
lw s0, 24(sp)
addi sp, sp, 32
ret
# Writes a number to the standard output.
#
# Parameters:
# a0 - Whole number.
.type _write_i, @function
_write_i:
addi sp, sp, -32
sw ra, 28(sp)
sw s0, 24(sp)
addi s0, sp, 32
addi a1, sp, 0
call _print_i
addi a1, sp, 0
call _write_s
lw ra, 28(sp)
lw s0, 24(sp)
addi sp, sp, 32
ret
# Writes a character from a0 into the standard output.
.type _put_char, @function
_put_char:
.type _write_c, @function
_write_c:
# Prologue
addi sp, sp, -16
sw ra, 12(sp)

File diff suppressed because it is too large Load Diff

View File

@ -22,9 +22,9 @@ var
loca0: Word
loca4: Word
loca8: Word
loca12: ^Byte
loca16: Word
loca20: Word
loca12: ^Byte
loca24: Bool
begin
_build_expression(0);
@ -79,16 +79,16 @@ begin
_build_expression(1);
loca0 := 0x627573;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(3, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
loca0 := 0x7a716573;
_write_out(@loca0, 4);
_write_out(@loca4, 4);
_write_out(@loca4, 3);
_put_char(0x0a);
_write_s(4, @loca0);
_write_s(4, @loca4);
_write_s(3, @loca4);
_write_c(0x0a);
goto .Lbuild_binary_expression_end;
@ -96,10 +96,10 @@ begin
_advance(1);
_build_expression(1);
loca0 := 0x646e61;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(3, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
goto .Lbuild_binary_expression_end;
@ -107,10 +107,10 @@ begin
_advance(2);
_build_expression(1);
loca0 := 0x726f;
_write_out(@loca0, 2);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(2, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
goto .Lbuild_binary_expression_end;
@ -118,10 +118,10 @@ begin
_advance(1);
_build_expression(1);
loca0 := 0x646461;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(3, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
goto .Lbuild_binary_expression_end;
@ -129,10 +129,10 @@ begin
_advance(1);
_build_expression(1);
loca0 := 0x627573;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(3, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
goto .Lbuild_binary_expression_end;
@ -140,10 +140,10 @@ begin
_advance(1);
_build_expression(1);
loca0 := 0x6c756d;
_write_out(@loca0, 3);
_write_out(@loca4, 4);
_write_out(@loca4, 4);
_write_out(@loca8, 4);
_write_s(3, @loca0);
_write_s(4, @loca4);
_write_s(4, @loca4);
_write_s(4, @loca8);
goto .Lbuild_binary_expression_end;
@ -151,6 +151,15 @@ begin
end
proc _compile_identifier_expression(loca84: Word, loca80: Byte)
var
loca0: Word
loca4: ^Byte
loca8: Word
loca12: Bool
loca16: Word
loca20: Word
loca24: ^Byte
loca28: Byte
begin
loca24 := _current();
loca0 := 0x61636f6c;
@ -158,17 +167,17 @@ begin
if loca0 = 0 then
loca8 := 0x6120776c;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
_write_s(3, @loca8);
loca4 := loca24 + 4;
loca0 := loca84 - 4;
_write_out(loca4, loca0);
_write_s(loca0, loca4);
loca8 := 0x29707328;
_write_out(@loca8, 4);
_put_char(0x0a);
_write_s(4, @loca8);
_write_c(0x0a);
goto .Lcompile_identifier_expression_end
end;
@ -177,32 +186,32 @@ begin
loca12 := loca0 = 0x73;
if loca8 & loca12 then
loca8 := 0x6120766d;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
_write_out(loca24, loca84);
_put_char(0x0a);
_write_s(3, @loca8);
_write_s(loca84, loca24);
_write_c(0x0a);
goto .Lcompile_identifier_expression_end
end;
loca8 := 0x6120616c;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x00202c00 or loca80;
_write_out(@loca8, 3);
_write_s(3, @loca8);
_write_out(loca24, loca84);
_put_char(0x0a);
_write_s(loca84, loca24);
_write_c(0x0a);
if _is_upper(loca0) then
loca8 := 0x6120776c;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x28202c00 or loca28;
_write_out(@loca8, 4);
_put_char(0x61);
_put_char(loca28);
_put_char(0x29);
_put_char(0x0a);
_write_s(4, @loca8);
_write_c(0x61);
_write_c(loca28);
_write_c(0x29);
_write_c(0x0a);
goto .Lcompile_identifier_expression_end
end;
@ -210,14 +219,16 @@ begin
.Lcompile_identifier_expression_end
end
proc _build_expression()
proc _build_expression(loca84: Word)
var
loca0: Word
loca20: Word
loca28: Word
loca8: Word
loca24: ^Byte
loca4: ^Byte
loca8: Word
loca12: Word
loca16: Word
loca20: Word
loca24: ^Byte
loca28: Word
begin
loca28 := loca84 + 0x30;
@ -250,24 +261,24 @@ begin
_build_expression(0);
loca8 := 0x2067656e;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x202c3061;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x0a3061;
_write_out(@loca8, 3);
_write_s(3, @loca8);
goto .Lbuild_expression_advance;
.Lbuild_expression_address;
loca8 := 0x69646461;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x6120;
_write_out(@loca8, 2);
_put_char(loca28);
_write_s(2, @loca8);
_write_c(loca28);
loca8 := 0x7073202c;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x202c;
_write_out(@loca8, 2);
_write_s(2, @loca8);
_advance(1);
_skip_spaces();
@ -276,9 +287,9 @@ begin
loca4 := loca24 + 4;
loca0 := loca20 - 4;
_write_out(loca4, loca0);
_write_s(loca0, loca4);
_put_char(0xa);
_write_c(0xa);
goto .Lbuild_expression_advance;
@ -291,12 +302,12 @@ begin
.Lbuild_expression_literal;
loca8 := 0x6120696c;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca8 := 0x00202c00 or loca28;
_write_out(@loca8, 3);
_write_s(3, @loca8);
_write_out(loca24, loca20);
_put_char(0x0a);
_write_s(loca20, loca24);
_write_c(0x0a);
goto .Lbuild_expression_advance;
@ -309,23 +320,27 @@ end
proc _compile_designator_expression(loca84: ^Byte, loca80: Word)
var
loca0: Word
loca4: Int
loca8: Char
loca12: Bool
loca16: Bool
begin
loca0 := 0x61636f6c;
loca4 := _memcmp(@loca0, loca84, 4);
if loca4 = 0 then
loca0 := 0x61207773;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x202c30;
_write_out(@loca0, 3);
_write_s(3, @loca0);
loca84 := loca84 + 4;
loca80 := loca80 - 4;
_write_out(loca84, loca80);
_write_s(loca80, loca84);
loca0 := 0x29707328;
_write_out(@loca0, 4);
_put_char(0x0a);
_write_s(4, @loca0);
_write_c(0x0a);
goto .Lcompile_designator_expression_end
end;
@ -334,11 +349,11 @@ begin
loca16 := loca80 = 2;
if loca12 & loca16 then
loca0 := 0x20766d;
_write_out(@loca0, 3);
_write_out(loca84, loca80);
_write_s(3, @loca0);
_write_s(loca80, loca84);
loca0 := 0x3061202c;
_write_out(@loca0, 4);
_put_char(0x0a);
_write_s(4, @loca0);
_write_c(0x0a);
goto .Lcompile_designator_expression_end
end;
@ -349,11 +364,11 @@ end
proc _compile_identifier()
var
loca0: Word
loca16: Word
loca8: Word
loca20: ^Byte
loca12: ^Byte
loca4: Bool
loca8: Word
loca12: ^Byte
loca16: Word
loca20: ^Byte
begin
loca20 := _current();
loca16 := _read_token();
@ -388,8 +403,8 @@ proc _compile_call(loca84: ^Byte, loca80: Word)
var
loca0: Word
loca4: Word
loca12: Word
loca8: ^Byte
loca12: Word
begin
loca12 := 0;
@ -404,17 +419,17 @@ begin
_build_expression(0);
loca0 := 0x61207773;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x202c30;
_write_out(@loca0, 3);
_write_s(3, @loca0);
loca0 := -4 * loca12;
loca0 := loca0 + 60;
_printi(loca0);
_write_i(loca0);
loca0 := 0x29707328;
_write_out(@loca0, 4);
_put_char(0x0a);
_write_s(4, @loca0);
_write_c(0x0a);
_skip_spaces();
loca8 := _current();
@ -434,60 +449,60 @@ begin
.Lcompile_call_restore;
loca0 := 0x6120776c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x36202c30;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732830;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x35202c31;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732836;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x35202c32;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732832;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x34202c33;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732838;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x34202c34;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732834;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x34202c35;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x70732830;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca4 := 0x0a29;
_write_out(@loca4, 2);
_write_s(2, @loca4);
loca0 := 0x6c6c6163;
_write_out(@loca0, 4);
_put_char(0x20);
_write_s(4, @loca0);
_write_c(0x20);
_write_out(loca84, loca80);
_put_char(0x0a);
_write_s(loca80, loca84);
_write_c(0x0a);
_skip_spaces();
_advance(1)
@ -623,10 +638,10 @@ var loca0: ^Byte
begin
loca0 := _current();
_write_out(loca0, loca84);
_write_s(loca84, loca0);
_advance(loca84);
_put_char(0xa);
_write_c(0xa);
_advance(1)
end
@ -635,13 +650,13 @@ proc _compile_program()
var loca0: Word
begin
loca0 := 0x6f6c672e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x206c6162;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6174735f;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a7472;
_write_out(@loca0, 3);
_write_s(3, @loca0);
_advance(8)
end
@ -652,15 +667,15 @@ var
loca4: ^Byte
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6f722e20;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x61746164;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a;
_write_out(@loca0, 1);
_write_s(1, @loca0);
_advance(6);
@ -685,25 +700,25 @@ begin
loca4 := _read_token();
loca8 := _current();
_write_out(loca8, loca4);
_write_s(loca4, loca8);
_advance(loca4);
_skip_spaces();
_advance(2);
loca0 := 0x6c2e203a;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x20676e6f;
_write_out(@loca0, 4);
_write_s(4, @loca0);
_skip_spaces();
loca4 := _read_token();
loca8 := _current();
_write_out(loca8, loca4);
_write_s(loca4, loca8);
_advance(loca4);
_put_char(0x0a)
_write_c(0x0a)
end
proc _compile_variable_section()
@ -712,13 +727,13 @@ var
loca4: ^Byte
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x73622e20;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a73;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_advance(4);
@ -740,11 +755,14 @@ end
proc _compile_variable()
var
loca28: ^Byte
loca16: ^Byte
loca0: Word
loca24: Word
loca4: Word
loca8: Word
loca12: Word
loca16: ^Byte
loca20: Word
loca24: Word
loca28: ^Byte
begin
loca24 := _read_token();
loca28 := _current();
@ -769,42 +787,42 @@ begin
_advance(loca0);
loca0 := 0x7079742e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_write_out(loca28, loca24);
_write_s(loca24, loca28);
loca0 := 0x6f40202c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x63656a62;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a74;
_write_out(@loca0, 2);
_write_s(2, @loca0);
loca0 := 0x7a69732e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_write_out(loca28, loca24);
_write_s(loca24, loca28);
loca0 := 0x202c;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_write_out(loca20, loca16);
_put_char(0x0a);
_write_s(loca16, loca20);
_write_c(0x0a);
_write_out(loca28, loca24);
_write_s(loca24, loca28);
loca0 := 0x7a2e203a;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x206f7265;
_write_out(@loca0, 4);
_write_s(4, @loca0);
_write_out(loca20, loca16);
_write_s(loca16, loca20);
_put_char(0x0a)
_write_c(0x0a)
end
proc _compile_procedure()
@ -823,23 +841,23 @@ begin
_advance(loca16);
loca0 := 0x7079742e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2065;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_write_out(loca20, loca16);
_write_s(loca16, loca20);
loca0 := 0x6640202c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x74636e75;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a6e6f69;
_write_out(@loca0, 4);
_write_s(4, @loca0);
_write_out(loca20, loca16);
_write_s(loca16, loca20);
loca0 := 0x0a3a;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_skip_spaces();
_advance(1);
@ -862,85 +880,85 @@ begin
end;
loca0 := 0x69646461;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
_write_s(4, @loca0);
loca0 := 0x0a36392d;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x72207773;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x39202c61;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x70732832;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a29;
_write_out(@loca0, 2);
_write_s(2, @loca0);
loca0 := 0x73207773;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x38202c30;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x70732838;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a29;
_write_out(@loca0, 2);
_write_s(2, @loca0);
loca0 := 0x69646461;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2c307320;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a363920;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x61207773;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x38202c30;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732834;
_write_out(@loca8, 4);
_write_s(4, @loca8);
loca12 := 0x0a29;
_write_out(@loca12, 2);
_write_s(2, @loca12);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x38202c31;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732830;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_s(4, @loca8);
_write_s(2, @loca12);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x37202c32;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732836;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_s(4, @loca8);
_write_s(2, @loca12);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x37202c33;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732832;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_s(4, @loca8);
_write_s(2, @loca12);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x36202c34;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732838;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_s(4, @loca8);
_write_s(2, @loca12);
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca4 := 0x36202c35;
_write_out(@loca4, 4);
_write_s(4, @loca4);
loca8 := 0x70732838;
_write_out(@loca8, 4);
_write_out(@loca12, 2);
_write_s(4, @loca8);
_write_s(2, @loca12);
.Lcompile_procedure_body;
_skip_spaces();
@ -960,43 +978,43 @@ begin
_advance(4);
loca0 := 0x7220776c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x39202c61;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x70732832;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a29;
_write_out(@loca0, 2);
_write_s(2, @loca0);
loca0 := 0x7320776c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x38202c30;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x70732838;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a29;
_write_out(@loca0, 2);
_write_s(2, @loca0);
loca0 := 0x69646461;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x2c707320;
_write_out(@loca0, 4);
_write_out(@loca0, 4);
_write_s(4, @loca0);
_write_s(4, @loca0);
loca0 := 0x0a3639;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a746572;
_write_out(@loca0, 4)
_write_s(4, @loca0)
end
proc _token_compare(loca84: ^Byte, loca80: Word, loca76: ^Byte)
var
loca0: Bool
loca4: Byte
loca12: Byte
loca8: Word
loca12: Byte
begin
.Ltoken_compare_loop;
loca4 := _front(loca76);
@ -1038,12 +1056,13 @@ end
proc _compile_goto()
var
loca0: Word
loca4: Word
loca8: ^Byte
begin
_advance(4);
loca0 := 0x206a;
_write_out(@loca0, 2);
_write_s(2, @loca0);
_skip_spaces();
loca8 := _current();
@ -1052,15 +1071,16 @@ begin
loca0 := _read_token();
_advance(loca0);
loca0 := loca0 + 1;
_write_out(loca8, loca0);
_write_s(loca0, loca8);
_advance(1);
_put_char(0x0a)
_write_c(0x0a)
end
proc _compile_label(loca84: Word)
var
loca0: Word
loca4: Word
begin
loca0 := _current();
@ -1072,10 +1092,10 @@ begin
if loca0 = 0x3b then
loca4 := loca4 - 1
end;
_write_out(s1, loca4);
_write_s(loca4, s1);
_put_char(0x3a);
_put_char(0x0a);
_write_c(0x3a);
_write_c(0x0a);
_advance(loca84)
end
@ -1089,11 +1109,12 @@ end
proc _compile_if()
var
loca0: Word
loca4: ^Byte
loca8: Word
loca12: Word
loca16: Word
loca20: Word
loca4: ^Byte
begin
_advance(2);
_skip_spaces();
@ -1107,15 +1128,15 @@ begin
loca16 := 0x66694c2e;
loca12 := 0x7a716562;
_write_out(@loca12, 4);
_write_s(4, @loca12);
loca12 := 0x2c306120;
_write_out(@loca12, 4);
_put_char(0x20);
_write_s(4, @loca12);
_write_c(0x20);
_write_out(@loca16, 4);
_printi(s2);
_write_s(4, @loca16);
_write_i(s2);
_put_char(0x0a);
_write_c(0x0a);
.Lcompile_if_loop;
_skip_spaces();
@ -1131,11 +1152,11 @@ begin
goto .Lcompile_if_loop
end;
_write_out(@loca16, 4);
_printi(s2);
_write_s(4, @loca16);
_write_i(s2);
loca12 := 0x0a3a0a3a;
_write_out(@loca12, 2);
_write_s(2, @loca12);
s2 := s2 + 1;
_advance(4)
@ -1316,34 +1337,34 @@ proc _compile_text_section()
var loca0: Word
begin
loca0 := 0x6365732e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6e6f6974;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x65742e20;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a7478;
_write_out(@loca0, 3)
_write_s(3, @loca0)
end
proc _compile_entry_point()
var loca0: Word
begin
loca0 := 0x7079742e;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x735f2065;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x74726174;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6640202c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x74636e75;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a6e6f69;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6174735f;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a3a7472;
_write_out(@loca0, 4);
_write_s(4, @loca0);
_advance(6)
end
@ -1352,19 +1373,19 @@ proc _compile_exit()
var loca0: Word
begin
loca0 := 0x6120696c;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x30202c30;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x20696c0a;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x202c3761;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x650a3339;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x6c6c6163;
_write_out(@loca0, 4);
_write_s(4, @loca0);
loca0 := 0x0a;
_write_out(@loca0, 1);
_write_s(1, @loca0);
_advance(4);
_skip_spaces()

View File

@ -1,14 +1,11 @@
program
proc _main(x: Word)
var loca0: Word
loca4: Word
proc _main(x: Word, y: Word)
begin
loca0 := 0x0a2c3061;
loca4 := x;
_write_out(@loca4, 4)
_write_s(@x, 4);
_write_s(@y, 4)
end
begin
_main()
_main(0x0a2c3061, 0x0a2c3062)
end.