OS.listdir
This commit is contained in:
@@ -8,13 +8,13 @@ A very cool language
|
||||
* Sometimes works
|
||||
|
||||
## Syntax
|
||||
```go
|
||||
```swift
|
||||
func fib[n: I64] : I64
|
||||
if n <= 1
|
||||
return n
|
||||
return fib(n-2) + fib(n-1)
|
||||
|
||||
func main[] : I64
|
||||
for i in 0..20
|
||||
for i in 0:20
|
||||
fib(i) |> I64.to_string() |> print()
|
||||
```
|
||||
@@ -5,7 +5,7 @@ func main[] : I64
|
||||
for b in 500:1000
|
||||
if a * b > out
|
||||
let s: String = I64.to_string(a * b)
|
||||
let s_rev: String = strrev(s)
|
||||
let s_rev: String = String.rev(s)
|
||||
if strcmp(s, s_rev) == 0
|
||||
out = a * b
|
||||
free(s)
|
||||
|
||||
@@ -115,9 +115,11 @@ extern ftell
|
||||
extern fread
|
||||
extern rewind
|
||||
extern system
|
||||
extern opendir
|
||||
extern readdir
|
||||
extern closedir
|
||||
extern exit
|
||||
extern gettimeofday
|
||||
copystr equ strdup
|
||||
|
||||
String.nth:
|
||||
movzx rax, byte [rdi + rsi]
|
||||
@@ -127,7 +129,7 @@ String.set:
|
||||
mov [rdi + rsi], dl
|
||||
ret
|
||||
|
||||
time:
|
||||
OS.time:
|
||||
push rbx
|
||||
sub rsp, 16
|
||||
mov rbx, rsp
|
||||
@@ -144,6 +146,47 @@ time:
|
||||
pop rbx
|
||||
ret
|
||||
|
||||
OS.listdir:
|
||||
push r14
|
||||
push rbx
|
||||
push rax
|
||||
mov r14, rdi
|
||||
call Array.new
|
||||
mov rbx, rax
|
||||
mov rdi, r14
|
||||
call opendir
|
||||
mov r14, rax
|
||||
.LBB5_1:
|
||||
mov rdi, r14
|
||||
call readdir
|
||||
test rax, rax
|
||||
je .LBB5_7
|
||||
cmp byte [rax+19], 46
|
||||
jne .LBB5_6
|
||||
movzx ecx, byte [rax+20]
|
||||
test ecx, ecx
|
||||
je .LBB5_1
|
||||
cmp ecx, 46
|
||||
jne .LBB5_6
|
||||
cmp byte [rax+21], 0
|
||||
je .LBB5_1
|
||||
.LBB5_6:
|
||||
add rax, 19
|
||||
mov rdi, rax
|
||||
call strdup
|
||||
mov rsi, rax
|
||||
mov rdi, rbx
|
||||
call Array.push
|
||||
jmp .LBB5_1
|
||||
.LBB5_7:
|
||||
mov rdi, r14
|
||||
call closedir
|
||||
mov rax, rbx
|
||||
add rsp, 8
|
||||
pop rbx
|
||||
pop r14
|
||||
ret
|
||||
|
||||
Array.new:
|
||||
mov rdi, 1
|
||||
mov rsi, 24
|
||||
|
||||
@@ -19,7 +19,7 @@ func substr[s: String, start: I64, length: I64] : String
|
||||
strlcpy(out, s + start, length + 1)
|
||||
return out
|
||||
|
||||
func strrev[s: String] : String
|
||||
func String.rev[s: String] : String
|
||||
let len: I64 = strlen(s)
|
||||
let out: String = malloc(len + 1)
|
||||
|
||||
|
||||
31
test.zr
31
test.zr
@@ -3,39 +3,26 @@ func run_test[x: String] : I64
|
||||
printf("\033[93mBuilding %s...\033[0m", x)
|
||||
let cmd: String = concat("./target/release/zern examples/", x)
|
||||
|
||||
let build_start_time: I64 = time()
|
||||
let build_start_time: I64 = OS.time()
|
||||
if system(cmd) != 0
|
||||
exit(1)
|
||||
let build_end_time: I64 = time()
|
||||
let build_end_time: I64 = OS.time()
|
||||
|
||||
free(cmd)
|
||||
printf(" %ldms\n", build_end_time - build_start_time)
|
||||
|
||||
let run_start_time: I64 = time()
|
||||
let run_start_time: I64 = OS.time()
|
||||
if system("./out") != 0
|
||||
exit(1)
|
||||
let run_end_time: I64 = time()
|
||||
let run_end_time: I64 = OS.time()
|
||||
|
||||
printf("\033[93mRunning %s...\033[0m %ldms\n", x, run_end_time - run_start_time)
|
||||
|
||||
func main[] : I64
|
||||
system("cargo build --release")
|
||||
|
||||
// TODO: listdir
|
||||
run_test("euler1.zr")
|
||||
run_test("euler2.zr")
|
||||
run_test("euler3.zr")
|
||||
run_test("euler4.zr")
|
||||
run_test("euler5.zr")
|
||||
run_test("euler6.zr")
|
||||
run_test("euler7.zr")
|
||||
run_test("euler8.zr")
|
||||
run_test("euler9.zr")
|
||||
run_test("euler10.zr")
|
||||
run_test("euler12.zr")
|
||||
run_test("euler13.zr")
|
||||
run_test("euler14.zr")
|
||||
run_test("euler15.zr")
|
||||
run_test("fib.zr")
|
||||
run_test("hello.zr")
|
||||
run_test("strings.zr")
|
||||
let files: Array = OS.listdir("examples/")
|
||||
for i in 0:Array.size(files)
|
||||
let file: String = Array.nth(files, i)
|
||||
run_test(file)
|
||||
free(file)
|
||||
Reference in New Issue
Block a user