Skip to content

Commit 8ccea28

Browse files
authored
fix(stdlib): Return early from Process.argv() if length is zero (#1817)
* fix(stdlib): Return early from `Process.argv()` if length is zero * free argcPtr after we use it to get argc to reduce sites
1 parent 331ffc2 commit 8ccea28

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

stdlib/sys/process.gr

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,22 +94,27 @@ provide let argv = () => {
9494
}
9595

9696
let argc = WasmI32.load(argcPtr, 0n)
97+
Memory.free(argcPtr)
98+
99+
let argsLength = argc * 4n
100+
let arr = allocateArray(argc)
101+
102+
if (WasmI32.eqz(argsLength)) {
103+
return Ok(WasmI32.toGrain(arr): Array<String>)
104+
}
105+
97106
let argvBufSize = WasmI32.load(argvBufSizePtr, 0n)
98107

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

102111
let err = Wasi.args_get(argvPtr, argvBufPtr)
103112
if (err != Wasi._ESUCCESS) {
104-
Memory.free(argcPtr)
105113
Memory.free(argvPtr)
106114
Memory.free(argvBufPtr)
107115
return Err(Wasi.SystemError(tagSimpleNumber(err)))
108116
}
109117

110-
let arr = allocateArray(argc)
111-
112-
let argsLength = argc * 4n
113118
for (let mut i = 0n; i < argsLength; i += 4n) {
114119
let strPtr = WasmI32.load(argvPtr + i, 0n)
115120
let mut strLength = 0n
@@ -123,7 +128,6 @@ provide let argv = () => {
123128
WasmI32.store(arr + i, grainStrPtr, 8n)
124129
}
125130

126-
Memory.free(argcPtr)
127131
Memory.free(argvPtr)
128132
Memory.free(argvBufPtr)
129133

0 commit comments

Comments
 (0)