Skip to content

Commit

Permalink
fix(stdlib): Return early from Process.argv() if length is zero (#1817
Browse files Browse the repository at this point in the history
)

* fix(stdlib): Return early from `Process.argv()` if length is zero

* free argcPtr after we use it to get argc to reduce sites
  • Loading branch information
phated committed Apr 19, 2023
1 parent 331ffc2 commit 8ccea28
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions stdlib/sys/process.gr
Original file line number Diff line number Diff line change
Expand Up @@ -94,22 +94,27 @@ provide let argv = () => {
}

let argc = WasmI32.load(argcPtr, 0n)
Memory.free(argcPtr)

let argsLength = argc * 4n
let arr = allocateArray(argc)

if (WasmI32.eqz(argsLength)) {
return Ok(WasmI32.toGrain(arr): Array<String>)
}

let argvBufSize = WasmI32.load(argvBufSizePtr, 0n)

let argvPtr = Memory.malloc(argc * 4n)
let argvBufPtr = Memory.malloc(argvBufSize)

let err = Wasi.args_get(argvPtr, argvBufPtr)
if (err != Wasi._ESUCCESS) {
Memory.free(argcPtr)
Memory.free(argvPtr)
Memory.free(argvBufPtr)
return Err(Wasi.SystemError(tagSimpleNumber(err)))
}

let arr = allocateArray(argc)

let argsLength = argc * 4n
for (let mut i = 0n; i < argsLength; i += 4n) {
let strPtr = WasmI32.load(argvPtr + i, 0n)
let mut strLength = 0n
Expand All @@ -123,7 +128,6 @@ provide let argv = () => {
WasmI32.store(arr + i, grainStrPtr, 8n)
}

Memory.free(argcPtr)
Memory.free(argvPtr)
Memory.free(argvBufPtr)

Expand Down

0 comments on commit 8ccea28

Please sign in to comment.