Add bigint support on JS value conversion

This commit is contained in:
Adam Scott 2024-06-29 12:35:00 -04:00
parent 25de53e147
commit ee2759013b

View file

@ -81,11 +81,16 @@ const GodotJSWrapper = {
case 0: case 0:
return null; return null;
case 1: case 1:
return !!GodotRuntime.getHeapValue(val, 'i64'); return Boolean(GodotRuntime.getHeapValue(val, 'i64'));
case 2: case 2: {
return GodotRuntime.getHeapValue(val, 'i64'); // `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: case 3:
return GodotRuntime.getHeapValue(val, 'double'); return Number(GodotRuntime.getHeapValue(val, 'double'));
case 4: case 4:
return GodotRuntime.parseString(GodotRuntime.getHeapValue(val, '*')); return GodotRuntime.parseString(GodotRuntime.getHeapValue(val, '*'));
case 24: // OBJECT case 24: // OBJECT
@ -110,6 +115,9 @@ const GodotJSWrapper = {
} }
GodotRuntime.setHeapValue(p_exchange, p_val, 'double'); GodotRuntime.setHeapValue(p_exchange, p_val, 'double');
return 3; // FLOAT return 3; // FLOAT
} else if (type === 'bigint') {
GodotRuntime.setHeapValue(p_exchange, p_val, 'i64');
return 2; // INT
} else if (type === 'string') { } else if (type === 'string') {
const c_str = GodotRuntime.allocString(p_val); const c_str = GodotRuntime.allocString(p_val);
GodotRuntime.setHeapValue(p_exchange, c_str, '*'); GodotRuntime.setHeapValue(p_exchange, c_str, '*');