mem helpers and # comment support
This commit is contained in:
8
main.py
8
main.py
@@ -58,7 +58,13 @@ class Reader:
|
|||||||
token_start = 0
|
token_start = 0
|
||||||
token_line = 1
|
token_line = 1
|
||||||
token_column = 0
|
token_column = 0
|
||||||
for char in source:
|
source_len = len(source)
|
||||||
|
while index < source_len:
|
||||||
|
char = source[index]
|
||||||
|
if char == "#":
|
||||||
|
while index < source_len and source[index] != "\n":
|
||||||
|
index += 1
|
||||||
|
continue
|
||||||
if char.isspace():
|
if char.isspace():
|
||||||
if lexeme:
|
if lexeme:
|
||||||
yield Token(
|
yield Token(
|
||||||
|
|||||||
44
stdlib.sl
44
stdlib.sl
@@ -109,6 +109,50 @@ puts_finish_digits:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
:asm @ {
|
||||||
|
mov rax, [r12]
|
||||||
|
mov rax, [rax]
|
||||||
|
mov [r12], rax
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
:asm ! {
|
||||||
|
mov rax, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov rbx, [r12]
|
||||||
|
mov [rax], rbx
|
||||||
|
add r12, 8
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
:asm mmap {
|
||||||
|
mov r9, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov r8, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov r10, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov rdx, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov rsi, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov rdi, [r12]
|
||||||
|
mov rax, 9
|
||||||
|
syscall
|
||||||
|
mov [r12], rax
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
:asm munmap {
|
||||||
|
mov rsi, [r12]
|
||||||
|
add r12, 8
|
||||||
|
mov rdi, [r12]
|
||||||
|
mov rax, 11
|
||||||
|
syscall
|
||||||
|
mov [r12], rax
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
:asm exit {
|
:asm exit {
|
||||||
mov rdi, [r12]
|
mov rdi, [r12]
|
||||||
add r12, 8
|
add r12, 8
|
||||||
|
|||||||
31
test.sl
31
test.sl
@@ -1,5 +1,12 @@
|
|||||||
import stdlib.sl
|
import stdlib.sl
|
||||||
|
|
||||||
|
:asm mem-slot {
|
||||||
|
lea rax, [rel print_buf]
|
||||||
|
sub r12, 8
|
||||||
|
mov [r12], rax
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
: test-add
|
: test-add
|
||||||
5 7 + puts
|
5 7 + puts
|
||||||
;
|
;
|
||||||
@@ -32,6 +39,28 @@ import stdlib.sl
|
|||||||
2 5 swap - puts
|
2 5 swap - puts
|
||||||
;
|
;
|
||||||
|
|
||||||
|
: test-store
|
||||||
|
mem-slot dup
|
||||||
|
123 swap !
|
||||||
|
@ puts
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
: test-mmap
|
||||||
|
0 # addr hint (NULL)
|
||||||
|
4096 # length (page)
|
||||||
|
3 # prot (PROT_READ | PROT_WRITE)
|
||||||
|
34 # flags (MAP_PRIVATE | MAP_ANON)
|
||||||
|
-1 # fd (ignored for MAP_ANON)
|
||||||
|
0 # offset
|
||||||
|
mmap
|
||||||
|
dup
|
||||||
|
1337 swap !
|
||||||
|
dup
|
||||||
|
@ puts
|
||||||
|
4096 munmap drop
|
||||||
|
;
|
||||||
|
|
||||||
: main
|
: main
|
||||||
test-add
|
test-add
|
||||||
test-sub
|
test-sub
|
||||||
@@ -41,5 +70,7 @@ import stdlib.sl
|
|||||||
test-drop
|
test-drop
|
||||||
test-dup
|
test-dup
|
||||||
test-swap
|
test-swap
|
||||||
|
test-store
|
||||||
|
test-mmap
|
||||||
0
|
0
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user