X-Git-Url: http://git.hcoop.net/jackhill/mal.git/blobdiff_plain/50eea9ad9caa6aa31c7a39f98a9f712133923e07..8faa94c66a803db4acc77c6972ef8334cc7d1e57:/wasm/platform_libc.wam diff --git a/wasm/platform_libc.wam b/wasm/platform_libc.wam index c561d649..1c769af0 100644 --- a/wasm/platform_libc.wam +++ b/wasm/platform_libc.wam @@ -37,28 +37,28 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (func $readline (param $prompt i32 $buf i32) (result i32) - (local $line i32 $len i32) - (set_local $len 0) + (LET $line ($lib_readline $prompt) + $len 0) - (set_local $line ($lib_readline $prompt)) (if $line (then ($lib_add_history $line) (set_local $len ($strlen $line)) ($memmove $buf $line $len) ($lib_free $line))) - (i32.store8_u (i32.add $buf $len) (CHR "\x00")) - (return (if i32 $line 1 0)) + (i32.store8 (i32.add $buf $len) (CHR "\x00")) + (return (if (result i32) $line 1 0)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Returns malloc'd string. Must be free by caller (func $read_file (param $path i32 $buf i32) (result i32) - (local $fst i32 $fd i32 $st_size i32 $sz i32) - (set_local $fst (STATIC_ARRAY 100)) ;; at least STAT_SIZE + (LET $fst (STATIC_ARRAY 100) ;; at least STAT_SIZE + $fd ($lib_open $path (get_global $O_RDONLY) 0) + $st_size 0 + $sz 0) - (set_local $fd ($lib_open $path (get_global $O_RDONLY) 0)) (if (i32.lt_s $fd 0) (then ($printf_1 "ERROR: slurp failed to open '%s'\n" $path) @@ -75,7 +75,7 @@ ($printf_1 "ERROR: slurp failed to stat '%s'\n" $path) (return 0))) ;; Add null to string - (i32.store8_u (i32.add $buf $st_size) 0) + (i32.store8 (i32.add $buf $st_size) 0) (i32.add 1 $st_size) ) @@ -83,15 +83,17 @@ (func $get_time_ms (result i32) - (local $tv i32 $secs i32 $usecs i32 $msecs i32) - (set_local $tv (STATIC_ARRAY 10)) ;; at least TIMEVAL_SIZE + (LET $tv (STATIC_ARRAY 10) ;; at least TIMEVAL_SIZE + $secs 0 + $usecs 0 + $msecs 0) (drop ($lib_gettimeofday $tv 0)) (set_local $secs (i32.load (i32.add $tv (get_global $TV_SEC_OFFSET)))) ;; subtract 30 years to make sure secs is positive and can be ;; multiplied by 1000 - (set_local $secs (i32.sub_s $secs 0x38640900)) + (set_local $secs (i32.sub $secs 0x38640900)) (set_local $usecs (i32.load (i32.add $tv (get_global $TV_USEC_OFFSET)))) - (set_local $msecs (i32.add (i32.mul_u $secs 1000) + (set_local $msecs (i32.add (i32.mul $secs 1000) (i32.div_u $usecs 1000))) $msecs )