Support named identifiers on the right side
This commit is contained in:
parent
707f983fe9
commit
d85183c7a6
@ -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)
|
||||
|
671
boot/stage1.s
671
boot/stage1.s
File diff suppressed because it is too large
Load Diff
523
boot/stage2.elna
523
boot/stage2.elna
@ -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()
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user