diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
| commit | efbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch) | |
| tree | 2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/@webassemblyjs/helper-numbers | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/@webassemblyjs/helper-numbers')
3 files changed, 247 insertions, 0 deletions
diff --git a/node_modules/@webassemblyjs/helper-numbers/lib/index.js b/node_modules/@webassemblyjs/helper-numbers/lib/index.js new file mode 100644 index 00000000..76604047 --- /dev/null +++ b/node_modules/@webassemblyjs/helper-numbers/lib/index.js @@ -0,0 +1,117 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parse32F = parse32F; +exports.parse64F = parse64F; +exports.parse32I = parse32I; +exports.parseU32 = parseU32; +exports.parse64I = parse64I; +exports.isInfLiteral = isInfLiteral; +exports.isNanLiteral = isNanLiteral; + +var _long2 = _interopRequireDefault(require("@xtuc/long")); + +var _floatingPointHexParser = _interopRequireDefault(require("@webassemblyjs/floating-point-hex-parser")); + +var _helperApiError = require("@webassemblyjs/helper-api-error"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function parse32F(sourceString) { + if (isHexLiteral(sourceString)) { + return (0, _floatingPointHexParser["default"])(sourceString); + } + + if (isInfLiteral(sourceString)) { + return sourceString[0] === "-" ? -1 : 1; + } + + if (isNanLiteral(sourceString)) { + return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x400000); + } + + return parseFloat(sourceString); +} + +function parse64F(sourceString) { + if (isHexLiteral(sourceString)) { + return (0, _floatingPointHexParser["default"])(sourceString); + } + + if (isInfLiteral(sourceString)) { + return sourceString[0] === "-" ? -1 : 1; + } + + if (isNanLiteral(sourceString)) { + return (sourceString[0] === "-" ? -1 : 1) * (sourceString.includes(":") ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) : 0x8000000000000); + } + + if (isHexLiteral(sourceString)) { + return (0, _floatingPointHexParser["default"])(sourceString); + } + + return parseFloat(sourceString); +} + +function parse32I(sourceString) { + var value = 0; + + if (isHexLiteral(sourceString)) { + value = ~~parseInt(sourceString, 16); + } else if (isDecimalExponentLiteral(sourceString)) { + throw new Error("This number literal format is yet to be implemented."); + } else { + value = parseInt(sourceString, 10); + } + + return value; +} + +function parseU32(sourceString) { + var value = parse32I(sourceString); + + if (value < 0) { + throw new _helperApiError.CompileError("Illegal value for u32: " + sourceString); + } + + return value; +} + +function parse64I(sourceString) { + // $FlowIgnore + var _long; + + if (isHexLiteral(sourceString)) { + _long = _long2["default"].fromString(sourceString, false, 16); + } else if (isDecimalExponentLiteral(sourceString)) { + throw new Error("This number literal format is yet to be implemented."); + } else { + _long = _long2["default"].fromString(sourceString); + } + + return { + high: _long.high, + low: _long.low + }; +} + +var NAN_WORD = /^\+?-?nan/; +var INF_WORD = /^\+?-?inf/; + +function isInfLiteral(sourceString) { + return INF_WORD.test(sourceString.toLowerCase()); +} + +function isNanLiteral(sourceString) { + return NAN_WORD.test(sourceString.toLowerCase()); +} + +function isDecimalExponentLiteral(sourceString) { + return !isHexLiteral(sourceString) && sourceString.toUpperCase().includes("E"); +} + +function isHexLiteral(sourceString) { + return sourceString.substring(0, 2).toUpperCase() === "0X" || sourceString.substring(0, 3).toUpperCase() === "-0X"; +}
\ No newline at end of file diff --git a/node_modules/@webassemblyjs/helper-numbers/package.json b/node_modules/@webassemblyjs/helper-numbers/package.json new file mode 100644 index 00000000..1f6e441b --- /dev/null +++ b/node_modules/@webassemblyjs/helper-numbers/package.json @@ -0,0 +1,24 @@ +{ + "name": "@webassemblyjs/helper-numbers", + "version": "1.11.6", + "description": "Number parsing utility", + "main": "lib/index.js", + "module": "esm/index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/xtuc/webassemblyjs.git" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + }, + "author": "Sven Sauleau", + "license": "MIT" +} diff --git a/node_modules/@webassemblyjs/helper-numbers/src/index.js b/node_modules/@webassemblyjs/helper-numbers/src/index.js new file mode 100644 index 00000000..773402e4 --- /dev/null +++ b/node_modules/@webassemblyjs/helper-numbers/src/index.js @@ -0,0 +1,106 @@ +// @flow + +import Long from "@xtuc/long"; +import parseHexFloat from "@webassemblyjs/floating-point-hex-parser"; +import { CompileError } from "@webassemblyjs/helper-api-error"; + +export function parse32F(sourceString: string): number { + if (isHexLiteral(sourceString)) { + return parseHexFloat(sourceString); + } + if (isInfLiteral(sourceString)) { + return sourceString[0] === "-" ? -1 : 1; + } + if (isNanLiteral(sourceString)) { + return ( + (sourceString[0] === "-" ? -1 : 1) * + (sourceString.includes(":") + ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) + : 0x400000) + ); + } + return parseFloat(sourceString); +} + +export function parse64F(sourceString: string): number { + if (isHexLiteral(sourceString)) { + return parseHexFloat(sourceString); + } + if (isInfLiteral(sourceString)) { + return sourceString[0] === "-" ? -1 : 1; + } + if (isNanLiteral(sourceString)) { + return ( + (sourceString[0] === "-" ? -1 : 1) * + (sourceString.includes(":") + ? parseInt(sourceString.substring(sourceString.indexOf(":") + 1), 16) + : 0x8000000000000) + ); + } + if (isHexLiteral(sourceString)) { + return parseHexFloat(sourceString); + } + return parseFloat(sourceString); +} + +export function parse32I(sourceString: string): number { + let value = 0; + if (isHexLiteral(sourceString)) { + value = ~~parseInt(sourceString, 16); + } else if (isDecimalExponentLiteral(sourceString)) { + throw new Error("This number literal format is yet to be implemented."); + } else { + value = parseInt(sourceString, 10); + } + + return value; +} + +export function parseU32(sourceString: string): number { + const value = parse32I(sourceString); + if (value < 0) { + throw new CompileError("Illegal value for u32: " + sourceString); + } + return value; +} + +export function parse64I(sourceString: string): LongNumber { + // $FlowIgnore + let long: Long; + if (isHexLiteral(sourceString)) { + long = Long.fromString(sourceString, false, 16); + } else if (isDecimalExponentLiteral(sourceString)) { + throw new Error("This number literal format is yet to be implemented."); + } else { + long = Long.fromString(sourceString); + } + + return { + high: long.high, + low: long.low, + }; +} + +const NAN_WORD = /^\+?-?nan/; +const INF_WORD = /^\+?-?inf/; + +export function isInfLiteral(sourceString: string): boolean { + return INF_WORD.test(sourceString.toLowerCase()); +} + +export function isNanLiteral(sourceString: string): boolean { + return NAN_WORD.test(sourceString.toLowerCase()); +} + +function isDecimalExponentLiteral(sourceString: string): boolean { + return ( + !isHexLiteral(sourceString) && sourceString.toUpperCase().includes("E") + ); +} + +function isHexLiteral(sourceString: string): boolean { + return ( + sourceString.substring(0, 2).toUpperCase() === "0X" || + sourceString.substring(0, 3).toUpperCase() === "-0X" + ); +} |
