diff options
author | Adam Scott <ascott.ca@gmail.com> | 2024-06-29 12:35:00 -0400 |
---|---|---|
committer | Adam Scott <ascott.ca@gmail.com> | 2024-07-03 07:44:32 -0400 |
commit | ee2759013b47bf7a05ba63849086b82037dde72e (patch) | |
tree | 5136dfa979320354d638285a877ef0598ef02aa2 | |
parent | 25de53e147a04ba15afc461b3ad4aa1884ff927d (diff) | |
download | redot-engine-ee2759013b47bf7a05ba63849086b82037dde72e.tar.gz |
Add `bigint` support on JS value conversion
-rw-r--r-- | platform/web/js/libs/library_godot_javascript_singleton.js | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/platform/web/js/libs/library_godot_javascript_singleton.js b/platform/web/js/libs/library_godot_javascript_singleton.js index b17fde1544..6bb69bca95 100644 --- a/platform/web/js/libs/library_godot_javascript_singleton.js +++ b/platform/web/js/libs/library_godot_javascript_singleton.js @@ -81,11 +81,16 @@ const GodotJSWrapper = { case 0: return null; case 1: - return !!GodotRuntime.getHeapValue(val, 'i64'); - case 2: - return GodotRuntime.getHeapValue(val, 'i64'); + return Boolean(GodotRuntime.getHeapValue(val, 'i64')); + case 2: { + // `heap_value` may be a bigint. + const heap_value = GodotRuntime.getHeapValue(val, 'i64'); + return heap_value >= Number.MIN_SAFE_INTEGER && heap_value <= Number.MAX_SAFE_INTEGER + ? Number(heap_value) + : heap_value; + } case 3: - return GodotRuntime.getHeapValue(val, 'double'); + return Number(GodotRuntime.getHeapValue(val, 'double')); case 4: return GodotRuntime.parseString(GodotRuntime.getHeapValue(val, '*')); case 24: // OBJECT @@ -110,6 +115,9 @@ const GodotJSWrapper = { } GodotRuntime.setHeapValue(p_exchange, p_val, 'double'); return 3; // FLOAT + } else if (type === 'bigint') { + GodotRuntime.setHeapValue(p_exchange, p_val, 'i64'); + return 2; // INT } else if (type === 'string') { const c_str = GodotRuntime.allocString(p_val); GodotRuntime.setHeapValue(p_exchange, c_str, '*'); |