Improved type system
This commit is contained in:
@ -6,10 +6,10 @@ number(x Int) {
|
||||
buffer := mem.alloc(length)
|
||||
address, count := itoa(x, buffer, length)
|
||||
sys.write(1, address, count)
|
||||
mem.free(buffer, length)
|
||||
mem.free(buffer)
|
||||
}
|
||||
|
||||
itoa(x Int, buffer Pointer, length Int) -> (Pointer, Int) {
|
||||
itoa(x Int, buffer *Any, length Int) -> (*Any, Int) {
|
||||
end := buffer + length
|
||||
tmp := end
|
||||
digit := 0
|
||||
|
@ -1,5 +1,5 @@
|
||||
import sys
|
||||
|
||||
free(address Pointer, length Int) -> Int {
|
||||
return sys.munmap(address-8, length+8)
|
||||
free(address []Any) -> Int {
|
||||
return sys.munmap(address-8, len(address)+8)
|
||||
}
|
@ -1,23 +1,23 @@
|
||||
getcwd(buffer Pointer, length Int) -> Int {
|
||||
getcwd(buffer *Any, length Int) -> Int {
|
||||
return syscall(79, buffer, length)
|
||||
}
|
||||
|
||||
chdir(path Pointer) -> Int {
|
||||
chdir(path *Any) -> Int {
|
||||
return syscall(80, path)
|
||||
}
|
||||
|
||||
rename(old Pointer, new Pointer) -> Int {
|
||||
rename(old *Any, new *Any) -> Int {
|
||||
return syscall(82, old, new)
|
||||
}
|
||||
|
||||
mkdir(path Pointer, mode Int) -> Int {
|
||||
mkdir(path *Any, mode Int) -> Int {
|
||||
return syscall(83, path, mode)
|
||||
}
|
||||
|
||||
rmdir(path Pointer) -> Int {
|
||||
rmdir(path *Any) -> Int {
|
||||
return syscall(84, path)
|
||||
}
|
||||
|
||||
unlink(file Pointer) -> Int {
|
||||
unlink(file *Any) -> Int {
|
||||
return syscall(87, file)
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
read(fd Int, address Pointer, length Int) -> Int {
|
||||
read(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(0, fd, address, length)
|
||||
}
|
||||
|
||||
write(fd Int, address Pointer, length Int) -> Int {
|
||||
write(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(1, fd, address, length)
|
||||
}
|
||||
|
||||
open(file Pointer, flags Int, mode Int) -> Int {
|
||||
return syscall(2, file, flags, mode)
|
||||
open(path *Any, flags Int, mode Int) -> Int {
|
||||
return syscall(2, path, flags, mode)
|
||||
}
|
||||
|
||||
close(fd Int) -> Int {
|
||||
|
@ -1,13 +1,13 @@
|
||||
read(fd Int, address Pointer, length Int) -> Int {
|
||||
read(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(0x2000003, fd, address, length)
|
||||
}
|
||||
|
||||
write(fd Int, address Pointer, length Int) -> Int {
|
||||
write(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(0x2000004, fd, address, length)
|
||||
}
|
||||
|
||||
open(file Pointer, flags Int, mode Int) -> Int {
|
||||
return syscall(0x2000005, file, flags, mode)
|
||||
open(path *Any, flags Int, mode Int) -> Int {
|
||||
return syscall(0x2000005, path, flags, mode)
|
||||
}
|
||||
|
||||
close(fd Int) -> Int {
|
||||
|
@ -1,9 +1,9 @@
|
||||
read(fd Int, address Pointer, length Int) -> Int {
|
||||
read(fd Int, address *Any, length Int) -> Int {
|
||||
kernel32.ReadFile(fd, address, length)
|
||||
return length
|
||||
}
|
||||
|
||||
write(fd Int, address Pointer, length Int) -> Int {
|
||||
write(fd Int, address *Any, length Int) -> Int {
|
||||
fd = kernel32.GetStdHandle(-10 - fd)
|
||||
kernel32.WriteConsoleA(fd, address, length, 0)
|
||||
return length
|
||||
|
@ -1,7 +1,7 @@
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> Pointer {
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> *Any {
|
||||
return syscall(9, address, length, protection, flags)
|
||||
}
|
||||
|
||||
munmap(address Pointer, length Int) -> Int {
|
||||
munmap(address *Any, length Int) -> Int {
|
||||
return syscall(11, address, length)
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> Pointer {
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> *Any {
|
||||
return syscall(0x20000C5, address, length, protection, flags)
|
||||
}
|
||||
|
||||
munmap(address Pointer, length Int) -> Int {
|
||||
munmap(address *Any, length Int) -> Int {
|
||||
return syscall(0x2000049, address, length)
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> Pointer {
|
||||
mmap(address Int, length Int, protection Int, flags Int) -> *Any {
|
||||
return kernel32.VirtualAlloc(address, length, flags, protection)
|
||||
}
|
||||
|
||||
munmap(address Pointer, length Int) -> Int {
|
||||
munmap(address *Any, length Int) -> Int {
|
||||
return kernel32.VirtualFree(address, length, 0x4000)
|
||||
}
|
@ -9,7 +9,7 @@ socket(family Int, type Int, protocol Int) -> Int {
|
||||
return syscall(41, family, type, protocol)
|
||||
}
|
||||
|
||||
accept(fd Int, address Pointer, length Int) -> Int {
|
||||
accept(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(43, fd, address, length)
|
||||
}
|
||||
|
||||
@ -21,6 +21,6 @@ listen(fd Int, backlog Int) -> Int {
|
||||
return syscall(50, fd, backlog)
|
||||
}
|
||||
|
||||
setsockopt(fd Int, level Int, optname Int, optval Pointer, optlen Int) -> Int {
|
||||
setsockopt(fd Int, level Int, optname Int, optval *Any, optlen Int) -> Int {
|
||||
return syscall(54, fd, level, optname, optval, optlen)
|
||||
}
|
@ -10,7 +10,7 @@ socket(family Int, type Int, protocol Int) -> Int {
|
||||
return syscall(0x2000061, family, type, protocol)
|
||||
}
|
||||
|
||||
accept(fd Int, address Pointer, length Int) -> Int {
|
||||
accept(fd Int, address *Any, length Int) -> Int {
|
||||
return syscall(0x200001E, fd, address, length)
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
clone(flags Int, stack Pointer) -> Int {
|
||||
clone(flags Int, stack *Any) -> Int {
|
||||
return syscall(56, flags, stack)
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ fork() -> Int {
|
||||
return syscall(57)
|
||||
}
|
||||
|
||||
execve(path Pointer, argv Pointer, envp Pointer) -> Int {
|
||||
execve(path *Any, argv *Any, envp *Any) -> Int {
|
||||
return syscall(59, path, argv, envp)
|
||||
}
|
||||
|
||||
@ -14,6 +14,6 @@ exit(status Int) {
|
||||
syscall(60, status)
|
||||
}
|
||||
|
||||
waitid(type Int, id Int, info Pointer, options Int) -> Int {
|
||||
waitid(type Int, id Int, info *Any, options Int) -> Int {
|
||||
return syscall(247, type, id, info, options)
|
||||
}
|
@ -6,10 +6,10 @@ fork() -> Int {
|
||||
return syscall(0x2000002)
|
||||
}
|
||||
|
||||
execve(path Pointer, argv Pointer, envp Pointer) -> Int {
|
||||
execve(path *Any, argv *Any, envp *Any) -> Int {
|
||||
return syscall(0x200003B, path, argv, envp)
|
||||
}
|
||||
|
||||
waitid(type Int, id Int, info Pointer, options Int) -> Int {
|
||||
waitid(type Int, id Int, info *Any, options Int) -> Int {
|
||||
return syscall(0x20000AD, type, id, info, options)
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
import sys
|
||||
|
||||
create(func Pointer) -> Int {
|
||||
create(func *Any) -> Int {
|
||||
size := 4096
|
||||
stack := sys.mmap(0, size, 0x1|0x2, 0x02|0x20|0x100|0x20000)
|
||||
rip := stack + size - 8
|
||||
|
Reference in New Issue
Block a user