-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lib: handle Float16Array in node:v8 serdes #55996
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The linter is failing (make lint-js
).
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #55996 +/- ##
=======================================
Coverage 87.95% 87.95%
=======================================
Files 656 656
Lines 188304 188376 +72
Branches 35972 35980 +8
=======================================
+ Hits 165624 165691 +67
+ Misses 15853 15850 -3
- Partials 6827 6835 +8
|
@@ -306,6 +307,9 @@ function arrayBufferViewIndexToType(index) { | |||
if (index === 10) return FastBuffer; | |||
if (index === 11) return BigInt64Array; | |||
if (index === 12) return BigUint64Array; | |||
// TODO(bartlomieju): use a primordial, once `Float16Array` is available in stable V8 | |||
// eslint-disable-line no-undef | |||
if (index === 13) return Float16Array; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't using undefined reference throw if there's actual [object Float16Array]
polyfilled in user space?
const { serializeError, deserializeError } = require('internal/error_serdes');
Object.defineProperty(Float32Array.prototype, Symbol.toStringTag, { get() { return 'Float16Array'; } });
console.log(deserializeError(serializeError(new Error('test', { cause: new Float32Array(9) }))));
if (index === 13) return Float16Array; | |
if (index === 13) return typeof Float16Array !== 'undefined' ? Float16Array : undefined; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if there's actual [object Float16Array] polyfilled in user space?
I don't think that's much of a concern because you can't reasonably polyfill it in JS land. Speaking as someone who implemented Float16Array in a JS engine.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should destructure it from globalThis
– it would be good to add a lint rule for it similar to
node/lib/eslint.config_partial.mjs
Lines 208 to 213 in c42d846
// ShadowRealm is not available in primordials because it can be | |
// disabled with --no-harmony-shadow-realm CLI flag. | |
{ | |
name: 'ShadowRealm', | |
message: 'Use `const { ShadowRealm } = globalThis;` instead of the global.', | |
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bartlomieju wdyt about my suggestion?
Co-authored-by: Ben Noordhuis <[email protected]>
This commit adds support for
Float16Array
innode:v8
serde APIs.While
Float16Array
is not available as a global yet (pending stabilization in V8),I "reserved" the next available index for serde purposes so other runtimes, like Deno,
that already support
Float16Array
, can support it innode:v8
serde APIsin a future compatible way.
Closes #55574.