Skip to content

Commit e5dd511

Browse files
committed
Extract common integer range check
1 parent 160bf62 commit e5dd511

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/lib/libembind.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,13 +318,22 @@ var LibraryEmbind = {
318318
}
319319
},
320320

321+
#if ASSERTIONS
322+
$assertIntegerRange: (name, value, minRange, maxRange) => {
323+
if (value < minRange || value > maxRange) {
324+
throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${name}", which is outside the valid range [${minRange}, ${maxRange}]!`);
325+
}
326+
},
327+
#endif
328+
321329
_embind_register_integer__docs: '/** @suppress {globalThis} */',
322330
// When converting a number from JS to C++ side, the valid range of the number is
323331
// [minRange, maxRange], inclusive.
324332
_embind_register_integer__deps: [
325333
'$integerReadValueFromPointer', '$readLatin1String', '$registerType',
326334
#if ASSERTIONS
327335
'$embindRepr',
336+
'$assertIntegerRange',
328337
#endif
329338
],
330339
_embind_register_integer: (primitiveType, name, size, minRange, maxRange) => {
@@ -347,9 +356,7 @@ var LibraryEmbind = {
347356
if (typeof value != "number" && typeof value != "boolean") {
348357
throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${toTypeName}`);
349358
}
350-
if (value < minRange || value > maxRange) {
351-
throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${name}", which is outside the valid range [${minRange}, ${maxRange}]!`);
352-
}
359+
assertIntegerRange(name, value, minRange, maxRange);
353360
#endif
354361
// The VM will perform JS to Wasm value conversion, according to the spec:
355362
// https://www.w3.org/TR/wasm-js-api-1/#towebassemblyvalue
@@ -364,7 +371,12 @@ var LibraryEmbind = {
364371
#if WASM_BIGINT
365372
_embind_register_bigint__docs: '/** @suppress {globalThis} */',
366373
_embind_register_bigint__deps: [
367-
'$embindRepr', '$readLatin1String', '$registerType', '$integerReadValueFromPointer'],
374+
'$readLatin1String', '$registerType', '$integerReadValueFromPointer',
375+
#if ASSERTIONS
376+
'$embindRepr',
377+
'$assertIntegerRange',
378+
#endif
379+
],
368380
_embind_register_bigint: (primitiveType, name, size, minRange, maxRange) => {
369381
name = readLatin1String(name);
370382

@@ -398,9 +410,7 @@ var LibraryEmbind = {
398410
else if (typeof value != "bigint") {
399411
throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`);
400412
}
401-
if (value < minRange || value > maxRange) {
402-
throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${name}", which is outside the valid range [${minRange}, ${maxRange}]!`);
403-
}
413+
assertIntegerRange(name, value, minRange, maxRange);
404414
#endif
405415
return value;
406416
},

0 commit comments

Comments
 (0)