Spaces:
Sleeping
Sleeping
| import { parse32F, parse64F, parse32I, parse64I, parseU32, isNanLiteral, isInfLiteral } from "@webassemblyjs/wast-parser"; | |
| import { longNumberLiteral, floatLiteral, numberLiteral, instr } from "./nodes"; | |
| export function numberLiteralFromRaw(rawValue) { | |
| var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32"; | |
| var original = rawValue; // Remove numeric separators _ | |
| if (typeof rawValue === "string") { | |
| rawValue = rawValue.replace(/_/g, ""); | |
| } | |
| if (typeof rawValue === "number") { | |
| return numberLiteral(rawValue, String(original)); | |
| } else { | |
| switch (instructionType) { | |
| case "i32": | |
| { | |
| return numberLiteral(parse32I(rawValue), String(original)); | |
| } | |
| case "u32": | |
| { | |
| return numberLiteral(parseU32(rawValue), String(original)); | |
| } | |
| case "i64": | |
| { | |
| return longNumberLiteral(parse64I(rawValue), String(original)); | |
| } | |
| case "f32": | |
| { | |
| return floatLiteral(parse32F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original)); | |
| } | |
| // f64 | |
| default: | |
| { | |
| return floatLiteral(parse64F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original)); | |
| } | |
| } | |
| } | |
| } | |
| export function instruction(id) { | |
| var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; | |
| var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; | |
| return instr(id, undefined, args, namedArgs); | |
| } | |
| export function objectInstruction(id, object) { | |
| var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; | |
| var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
| return instr(id, object, args, namedArgs); | |
| } | |
| /** | |
| * Decorators | |
| */ | |
| export function withLoc(n, end, start) { | |
| var loc = { | |
| start: start, | |
| end: end | |
| }; | |
| n.loc = loc; | |
| return n; | |
| } | |
| export function withRaw(n, raw) { | |
| n.raw = raw; | |
| return n; | |
| } | |
| export function funcParam(valtype, id) { | |
| return { | |
| id: id, | |
| valtype: valtype | |
| }; | |
| } | |
| export function indexLiteral(value) { | |
| // $FlowIgnore | |
| var x = numberLiteralFromRaw(value, "u32"); | |
| return x; | |
| } | |
| export function memIndexLiteral(value) { | |
| // $FlowIgnore | |
| var x = numberLiteralFromRaw(value, "u32"); | |
| return x; | |
| } |