|
221 | 221 | } |
222 | 222 |
|
223 | 223 | const loadSlice = (array, len, cap) => { |
224 | | - array >>>= 0; |
225 | | - len >>>= 0; |
226 | 224 | return new Uint8Array(this._inst.exports.memory.buffer, array, len); |
227 | 225 | } |
228 | 226 |
|
|
235 | 233 | } |
236 | 234 |
|
237 | 235 | const loadString = (ptr, len) => { |
238 | | - ptr >>>= 0; |
239 | | - len >>>= 0; |
240 | 236 | return decoder.decode(new DataView(this._inst.exports.memory.buffer, ptr, len)); |
241 | 237 | } |
242 | 238 |
|
|
305 | 301 |
|
306 | 302 | // func getRandomData(r []byte) |
307 | 303 | "runtime.getRandomData": (slice_ptr, slice_len, slice_cap) => { |
| 304 | + slice_ptr >>>= 0; |
| 305 | + slice_len >>>= 0; |
308 | 306 | crypto.getRandomValues(loadSlice(slice_ptr, slice_len, slice_cap)); |
309 | 307 | }, |
310 | 308 |
|
|
342 | 340 | // func stringVal(value string) ref |
343 | 341 | "syscall/js.stringVal": (value_ptr, value_len) => { |
344 | 342 | value_ptr >>>= 0; |
| 343 | + value_len >>>= 0; |
345 | 344 | const s = loadString(value_ptr, value_len); |
346 | 345 | return boxValue(s); |
347 | 346 | }, |
348 | 347 |
|
349 | 348 | // func valueGet(v ref, p string) ref |
350 | 349 | "syscall/js.valueGet": (v_ref, p_ptr, p_len) => { |
| 350 | + p_ptr >>>= 0; |
| 351 | + p_len >>>= 0; |
351 | 352 | let prop = loadString(p_ptr, p_len); |
352 | 353 | let v = unboxValue(v_ref); |
353 | 354 | let result = Reflect.get(v, prop); |
|
356 | 357 |
|
357 | 358 | // func valueSet(v ref, p string, x ref) |
358 | 359 | "syscall/js.valueSet": (v_ref, p_ptr, p_len, x_ref) => { |
| 360 | + p_ptr >>>= 0; |
| 361 | + p_len >>>= 0; |
359 | 362 | const v = unboxValue(v_ref); |
360 | 363 | const p = loadString(p_ptr, p_len); |
361 | 364 | const x = unboxValue(x_ref); |
|
364 | 367 |
|
365 | 368 | // func valueDelete(v ref, p string) |
366 | 369 | "syscall/js.valueDelete": (v_ref, p_ptr, p_len) => { |
| 370 | + p_ptr >>>= 0; |
| 371 | + p_len >>>= 0; |
367 | 372 | const v = unboxValue(v_ref); |
368 | 373 | const p = loadString(p_ptr, p_len); |
369 | 374 | Reflect.deleteProperty(v, p); |
|
381 | 386 |
|
382 | 387 | // func valueCall(v ref, m string, args []ref) (ref, bool) |
383 | 388 | "syscall/js.valueCall": (ret_addr, v_ref, m_ptr, m_len, args_ptr, args_len, args_cap) => { |
| 389 | + ret_addr >>>= 0; |
| 390 | + m_ptr >>>= 0; |
| 391 | + m_len >>>= 0; |
| 392 | + args_ptr >>>= 0; |
| 393 | + args_len >>>= 0; |
384 | 394 | const v = unboxValue(v_ref); |
385 | 395 | const name = loadString(m_ptr, m_len); |
386 | 396 | const args = loadSliceOfValues(args_ptr, args_len, args_cap); |
|
396 | 406 |
|
397 | 407 | // func valueInvoke(v ref, args []ref) (ref, bool) |
398 | 408 | "syscall/js.valueInvoke": (ret_addr, v_ref, args_ptr, args_len, args_cap) => { |
| 409 | + ret_addr >>>= 0; |
| 410 | + args_ptr >>>= 0; |
| 411 | + args_len >>>= 0; |
399 | 412 | try { |
400 | 413 | const v = unboxValue(v_ref); |
401 | 414 | const args = loadSliceOfValues(args_ptr, args_len, args_cap); |
|
409 | 422 |
|
410 | 423 | // func valueNew(v ref, args []ref) (ref, bool) |
411 | 424 | "syscall/js.valueNew": (ret_addr, v_ref, args_ptr, args_len, args_cap) => { |
| 425 | + ret_addr >>>= 0; |
| 426 | + args_ptr >>>= 0; |
| 427 | + args_len >>>= 0; |
412 | 428 | const v = unboxValue(v_ref); |
413 | 429 | const args = loadSliceOfValues(args_ptr, args_len, args_cap); |
414 | 430 | try { |
|
427 | 443 |
|
428 | 444 | // valuePrepareString(v ref) (ref, int) |
429 | 445 | "syscall/js.valuePrepareString": (ret_addr, v_ref) => { |
| 446 | + ret_addr >>>= 0; |
430 | 447 | const s = String(unboxValue(v_ref)); |
431 | 448 | const str = encoder.encode(s); |
432 | 449 | storeValue(ret_addr, str); |
|
0 commit comments