Skip to content

Commit 85f65d1

Browse files
committed
move Math.f16round and DataView.prototype.{ getFloat16, setFloat16 } to stable ES
1 parent ecf1363 commit 85f65d1

31 files changed

+220
-162
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
- `RegExp.escape`
66
- Moved to stable ES, [February 2025 TC39 meeting](https://github.com/tc39/proposals/commit/b81fa9bccf4b51f33de0cbe797976a84d05d4b76)
77
- Added `es.` namespace module, `/es/` and `/stable/` namespaces entries
8+
- [`Float16` proposal](https://github.com/tc39/proposal-regex-escaping):
9+
- Built-ins:
10+
- `Math.f16round`
11+
- `DataView.prototype.getFloat16`
12+
- `DataView.prototype.setFloat16`
13+
- Moved to stable ES, February 2025 TC39 meeting
14+
- Added `es.` namespace modules, `/es/` and `/stable/` namespaces entries
815
- Compat data improvements:
916
- [`DisposableStack`, `AsyncDisposableStack`, `SuppressedError` and `Iterator.prototype[@@dispose]`](https://github.com/tc39/proposal-explicit-resource-management) marked as [shipped from V8 ~ Chromium 134](https://issues.chromium.org/issues/42203506#comment24)
1017
- [`Error.isError`](https://github.com/tc39/proposal-is-error) added and marked as supported from V8 ~ Chromium 134

README.md

+25-31
Large diffs are not rendered by default.

packages/core-js-compat/src/data.mjs

+27-18
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,18 @@ export const data = {
486486
rhino: '1.7.13',
487487
safari: '7.1',
488488
},
489+
'es.data-view.get-float16': {
490+
bun: '1.1.23',
491+
deno: '1.43',
492+
firefox: '129',
493+
safari: '18.2',
494+
},
495+
'es.data-view.set-float16': {
496+
bun: '1.1.23',
497+
deno: '1.43',
498+
firefox: '129',
499+
safari: '18.2',
500+
},
489501
'es.array-buffer.detached': {
490502
bun: '1.0.19',
491503
chrome: '114',
@@ -793,6 +805,12 @@ export const data = {
793805
rhino: '1.7.13',
794806
safari: '7.1',
795807
},
808+
'es.math.f16round': {
809+
bun: '1.1.23',
810+
deno: '1.43',
811+
firefox: '129',
812+
safari: '18.2',
813+
},
796814
'es.math.hypot': {
797815
// https://bugs.chromium.org/p/v8/issues/detail?id=9546
798816
chrome: '78', // '38',
@@ -2295,20 +2313,12 @@ export const data = {
22952313
},
22962314
'esnext.composite-symbol': {
22972315
},
2298-
'esnext.data-view.get-float16': {
2299-
bun: '1.1.23',
2300-
deno: '1.43',
2301-
firefox: '129',
2302-
safari: '18.2',
2303-
},
2316+
// TODO: Remove from `core-js@4`
2317+
'esnext.data-view.get-float16': null,
23042318
'esnext.data-view.get-uint8-clamped': {
23052319
},
2306-
'esnext.data-view.set-float16': {
2307-
bun: '1.1.23',
2308-
deno: '1.43',
2309-
firefox: '129',
2310-
safari: '18.2',
2311-
},
2320+
// TODO: Remove from `core-js@4`
2321+
'esnext.data-view.set-float16': null,
23122322
'esnext.data-view.set-uint8-clamped': {
23132323
},
23142324
'esnext.disposable-stack.constructor': {
@@ -2449,12 +2459,8 @@ export const data = {
24492459
},
24502460
'esnext.math.fscale': {
24512461
},
2452-
'esnext.math.f16round': {
2453-
bun: '1.1.23',
2454-
deno: '1.43',
2455-
firefox: '129',
2456-
safari: '18.2',
2457-
},
2462+
// TODO: Remove from `core-js@4`
2463+
'esnext.math.f16round': null,
24582464
// TODO: Remove from `core-js@4`
24592465
'esnext.math.iaddh': {
24602466
},
@@ -3000,6 +3006,8 @@ export const renamed = new Map([
30003006
['esnext.array-buffer.transfer', 'es.array-buffer.transfer'],
30013007
['esnext.array-buffer.transfer-to-fixed-length', 'es.array-buffer.transfer-to-fixed-length'],
30023008
['esnext.aggregate-error', 'es.aggregate-error'],
3009+
['esnext.data-view.get-float16', 'es.data-view.get-float16'],
3010+
['esnext.data-view.set-float16', 'es.data-view.set-float16'],
30033011
['esnext.global-this', 'es.global-this'],
30043012
['esnext.iterator.constructor', 'es.iterator.constructor'],
30053013
['esnext.iterator.drop', 'es.iterator.drop'],
@@ -3015,6 +3023,7 @@ export const renamed = new Map([
30153023
['esnext.iterator.take', 'es.iterator.take'],
30163024
['esnext.iterator.to-array', 'es.iterator.to-array'],
30173025
['esnext.map.group-by', 'es.map.group-by'],
3026+
['esnext.math.f16round', 'es.math.f16round'],
30183027
['esnext.object.has-own', 'es.object.has-own'],
30193028
['esnext.object.group-by', 'es.object.group-by'],
30203029
['esnext.promise.all-settled', 'es.promise.all-settled'],

packages/core-js-compat/src/modules-by-versions.mjs

+3
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ export default {
278278
'esnext.error.is-error',
279279
],
280280
3.41: [
281+
'es.data-view.get-float16',
282+
'es.data-view.set-float16',
283+
'es.math.f16round',
281284
'es.regexp.escape',
282285
],
283286
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// empty
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// empty
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
'use strict';
2+
var parent = require('../../stable/data-view/get-float16');
23
require('../../modules/esnext.data-view.get-float16');
4+
5+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
'use strict';
2+
var parent = require('../../stable/data-view/set-float16');
23
require('../../modules/esnext.data-view.set-float16');
4+
5+
module.exports = parent;
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2+
var parent = require('../../stable/math/f16round');
23
require('../../modules/esnext.math.f16round');
3-
var path = require('../../internals/path');
44

5-
module.exports = path.Math.f16round;
5+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
'use strict';
2+
require('../../modules/es.data-view.get-float16');

packages/core-js/es/data-view/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
require('../../modules/es.array-buffer.constructor');
33
require('../../modules/es.array-buffer.slice');
44
require('../../modules/es.data-view');
5+
require('../../modules/es.data-view.get-float16');
6+
require('../../modules/es.data-view.set-float16');
57
require('../../modules/es.object.to-string');
68
var path = require('../../internals/path');
79

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
'use strict';
2+
require('../../modules/es.data-view.set-float16');

packages/core-js/es/math/f16round.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
'use strict';
2+
require('../../modules/es.math.f16round');
3+
var path = require('../../internals/path');
4+
5+
module.exports = path.Math.f16round;

packages/core-js/es/math/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require('../../modules/es.math.clz32');
77
require('../../modules/es.math.cosh');
88
require('../../modules/es.math.expm1');
99
require('../../modules/es.math.fround');
10+
require('../../modules/es.math.f16round');
1011
require('../../modules/es.math.hypot');
1112
require('../../modules/es.math.imul');
1213
require('../../modules/es.math.log10');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var uncurryThis = require('../internals/function-uncurry-this');
4+
5+
var pow = Math.pow;
6+
7+
var EXP_MASK16 = 31; // 2 ** 5 - 1
8+
var SIGNIFICAND_MASK16 = 1023; // 2 ** 10 - 1
9+
var MIN_SUBNORMAL16 = pow(2, -24); // 2 ** -10 * 2 ** -14
10+
var SIGNIFICAND_DENOM16 = 0.0009765625; // 2 ** -10
11+
12+
var unpackFloat16 = function (bytes) {
13+
var sign = bytes >>> 15;
14+
var exponent = bytes >>> 10 & EXP_MASK16;
15+
var significand = bytes & SIGNIFICAND_MASK16;
16+
if (exponent === EXP_MASK16) return significand === 0 ? (sign === 0 ? Infinity : -Infinity) : NaN;
17+
if (exponent === 0) return significand * (sign === 0 ? MIN_SUBNORMAL16 : -MIN_SUBNORMAL16);
18+
return pow(2, exponent - 15) * (sign === 0 ? 1 + significand * SIGNIFICAND_DENOM16 : -1 - significand * SIGNIFICAND_DENOM16);
19+
};
20+
21+
// eslint-disable-next-line es/no-typed-arrays -- safe
22+
var getUint16 = uncurryThis(DataView.prototype.getUint16);
23+
24+
// `DataView.prototype.getFloat16` method
25+
// https://github.com/tc39/proposal-float16array
26+
$({ target: 'DataView', proto: true }, {
27+
getFloat16: function getFloat16(byteOffset /* , littleEndian */) {
28+
var uint16 = getUint16(this, byteOffset, arguments.length > 1 ? arguments[1] : false);
29+
return unpackFloat16(uint16);
30+
}
31+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var uncurryThis = require('../internals/function-uncurry-this');
4+
var aDataView = require('../internals/a-data-view');
5+
var toIndex = require('../internals/to-index');
6+
// TODO: Replace with module dependency in `core-js@4`
7+
var log2 = require('../internals/math-log2');
8+
var roundTiesToEven = require('../internals/math-round-ties-to-even');
9+
10+
var pow = Math.pow;
11+
12+
var MIN_INFINITY16 = 65520; // (2 - 2 ** -11) * 2 ** 15
13+
var MIN_NORMAL16 = 0.000061005353927612305; // (1 - 2 ** -11) * 2 ** -14
14+
var REC_MIN_SUBNORMAL16 = 16777216; // 2 ** 10 * 2 ** 14
15+
var REC_SIGNIFICAND_DENOM16 = 1024; // 2 ** 10;
16+
17+
var packFloat16 = function (value) {
18+
// eslint-disable-next-line no-self-compare -- NaN check
19+
if (value !== value) return 0x7E00; // NaN
20+
if (value === 0) return (1 / value === -Infinity) << 15; // +0 or -0
21+
22+
var neg = value < 0;
23+
if (neg) value = -value;
24+
if (value >= MIN_INFINITY16) return neg << 15 | 0x7C00; // Infinity
25+
if (value < MIN_NORMAL16) return neg << 15 | roundTiesToEven(value * REC_MIN_SUBNORMAL16); // subnormal
26+
27+
// normal
28+
var exponent = log2(value) | 0;
29+
if (exponent === -15) {
30+
// we round from a value between 2 ** -15 * (1 + 1022/1024) (the largest subnormal) and 2 ** -14 * (1 + 0/1024) (the smallest normal)
31+
// to the latter (former impossible because of the subnormal check above)
32+
return neg << 15 | REC_SIGNIFICAND_DENOM16;
33+
}
34+
var significand = roundTiesToEven((value * pow(2, -exponent) - 1) * REC_SIGNIFICAND_DENOM16);
35+
if (significand === REC_SIGNIFICAND_DENOM16) {
36+
// we round from a value between 2 ** n * (1 + 1023/1024) and 2 ** (n + 1) * (1 + 0/1024) to the latter
37+
return neg << 15 | exponent + 16 << 10;
38+
}
39+
return neg << 15 | exponent + 15 << 10 | significand;
40+
};
41+
42+
// eslint-disable-next-line es/no-typed-arrays -- safe
43+
var setUint16 = uncurryThis(DataView.prototype.setUint16);
44+
45+
// `DataView.prototype.setFloat16` method
46+
// https://github.com/tc39/proposal-float16array
47+
$({ target: 'DataView', proto: true }, {
48+
setFloat16: function setFloat16(byteOffset, value /* , littleEndian */) {
49+
aDataView(this);
50+
var offset = toIndex(byteOffset);
51+
var bytes = packFloat16(+value);
52+
return setUint16(this, offset, bytes, arguments.length > 2 ? arguments[2] : false);
53+
}
54+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
'use strict';
2+
var $ = require('../internals/export');
3+
var floatRound = require('../internals/math-float-round');
4+
5+
var FLOAT16_EPSILON = 0.0009765625;
6+
var FLOAT16_MAX_VALUE = 65504;
7+
var FLOAT16_MIN_VALUE = 6.103515625e-05;
8+
9+
// `Math.f16round` method
10+
// https://github.com/tc39/proposal-float16array
11+
$({ target: 'Math', stat: true }, {
12+
f16round: function f16round(x) {
13+
return floatRound(x, FLOAT16_EPSILON, FLOAT16_MAX_VALUE, FLOAT16_MIN_VALUE);
14+
}
15+
});
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,3 @@
11
'use strict';
2-
var $ = require('../internals/export');
3-
var uncurryThis = require('../internals/function-uncurry-this');
4-
5-
var pow = Math.pow;
6-
7-
var EXP_MASK16 = 31; // 2 ** 5 - 1
8-
var SIGNIFICAND_MASK16 = 1023; // 2 ** 10 - 1
9-
var MIN_SUBNORMAL16 = pow(2, -24); // 2 ** -10 * 2 ** -14
10-
var SIGNIFICAND_DENOM16 = 0.0009765625; // 2 ** -10
11-
12-
var unpackFloat16 = function (bytes) {
13-
var sign = bytes >>> 15;
14-
var exponent = bytes >>> 10 & EXP_MASK16;
15-
var significand = bytes & SIGNIFICAND_MASK16;
16-
if (exponent === EXP_MASK16) return significand === 0 ? (sign === 0 ? Infinity : -Infinity) : NaN;
17-
if (exponent === 0) return significand * (sign === 0 ? MIN_SUBNORMAL16 : -MIN_SUBNORMAL16);
18-
return pow(2, exponent - 15) * (sign === 0 ? 1 + significand * SIGNIFICAND_DENOM16 : -1 - significand * SIGNIFICAND_DENOM16);
19-
};
20-
21-
// eslint-disable-next-line es/no-typed-arrays -- safe
22-
var getUint16 = uncurryThis(DataView.prototype.getUint16);
23-
24-
// `DataView.prototype.getFloat16` method
25-
// https://github.com/tc39/proposal-float16array
26-
$({ target: 'DataView', proto: true }, {
27-
getFloat16: function getFloat16(byteOffset /* , littleEndian */) {
28-
var uint16 = getUint16(this, byteOffset, arguments.length > 1 ? arguments[1] : false);
29-
return unpackFloat16(uint16);
30-
}
31-
});
2+
// TODO: Remove from `core-js@4`
3+
require('../modules/es.data-view.get-float16');
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,3 @@
11
'use strict';
2-
var $ = require('../internals/export');
3-
var uncurryThis = require('../internals/function-uncurry-this');
4-
var aDataView = require('../internals/a-data-view');
5-
var toIndex = require('../internals/to-index');
6-
// TODO: Replace with module dependency in `core-js@4`
7-
var log2 = require('../internals/math-log2');
8-
var roundTiesToEven = require('../internals/math-round-ties-to-even');
9-
10-
var pow = Math.pow;
11-
12-
var MIN_INFINITY16 = 65520; // (2 - 2 ** -11) * 2 ** 15
13-
var MIN_NORMAL16 = 0.000061005353927612305; // (1 - 2 ** -11) * 2 ** -14
14-
var REC_MIN_SUBNORMAL16 = 16777216; // 2 ** 10 * 2 ** 14
15-
var REC_SIGNIFICAND_DENOM16 = 1024; // 2 ** 10;
16-
17-
var packFloat16 = function (value) {
18-
// eslint-disable-next-line no-self-compare -- NaN check
19-
if (value !== value) return 0x7E00; // NaN
20-
if (value === 0) return (1 / value === -Infinity) << 15; // +0 or -0
21-
22-
var neg = value < 0;
23-
if (neg) value = -value;
24-
if (value >= MIN_INFINITY16) return neg << 15 | 0x7C00; // Infinity
25-
if (value < MIN_NORMAL16) return neg << 15 | roundTiesToEven(value * REC_MIN_SUBNORMAL16); // subnormal
26-
27-
// normal
28-
var exponent = log2(value) | 0;
29-
if (exponent === -15) {
30-
// we round from a value between 2 ** -15 * (1 + 1022/1024) (the largest subnormal) and 2 ** -14 * (1 + 0/1024) (the smallest normal)
31-
// to the latter (former impossible because of the subnormal check above)
32-
return neg << 15 | REC_SIGNIFICAND_DENOM16;
33-
}
34-
var significand = roundTiesToEven((value * pow(2, -exponent) - 1) * REC_SIGNIFICAND_DENOM16);
35-
if (significand === REC_SIGNIFICAND_DENOM16) {
36-
// we round from a value between 2 ** n * (1 + 1023/1024) and 2 ** (n + 1) * (1 + 0/1024) to the latter
37-
return neg << 15 | exponent + 16 << 10;
38-
}
39-
return neg << 15 | exponent + 15 << 10 | significand;
40-
};
41-
42-
// eslint-disable-next-line es/no-typed-arrays -- safe
43-
var setUint16 = uncurryThis(DataView.prototype.setUint16);
44-
45-
// `DataView.prototype.setFloat16` method
46-
// https://github.com/tc39/proposal-float16array
47-
$({ target: 'DataView', proto: true }, {
48-
setFloat16: function setFloat16(byteOffset, value /* , littleEndian */) {
49-
aDataView(this);
50-
var offset = toIndex(byteOffset);
51-
var bytes = packFloat16(+value);
52-
return setUint16(this, offset, bytes, arguments.length > 2 ? arguments[2] : false);
53-
}
54-
});
2+
// TODO: Remove from `core-js@4`
3+
require('../modules/es.data-view.set-float16');
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,3 @@
11
'use strict';
2-
var $ = require('../internals/export');
3-
var floatRound = require('../internals/math-float-round');
4-
5-
var FLOAT16_EPSILON = 0.0009765625;
6-
var FLOAT16_MAX_VALUE = 65504;
7-
var FLOAT16_MIN_VALUE = 6.103515625e-05;
8-
9-
// `Math.f16round` method
10-
// https://github.com/tc39/proposal-float16array
11-
$({ target: 'Math', stat: true }, {
12-
f16round: function f16round(x) {
13-
return floatRound(x, FLOAT16_EPSILON, FLOAT16_MAX_VALUE, FLOAT16_MIN_VALUE);
14-
}
15-
});
2+
// TODO: Remove from `core-js@4`
3+
require('../modules/es.math.f16round');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
var parent = require('../../es/data-view/get-float16');
3+
4+
module.exports = parent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
var parent = require('../../es/data-view/set-float16');
3+
4+
module.exports = parent;
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
var parent = require('../../es/math/f16round');
3+
4+
module.exports = parent;

0 commit comments

Comments
 (0)