UNPKG

ember-source

Version:

A JavaScript framework for creating ambitious web applications

169 lines (165 loc) 5.98 kB
import { Op } from '../vm/index.js'; /* This file is generated by build/debug.js */ function opcodeMetadata(op, isMachine) { return null; } function debugSlice(context, start, end) {} function logOpcode(type, params) {} function debug(c, op, isMachine) {} // TODO: How do these map onto constant and machine types? new Array(Op.Size).fill(null), new Array(Op.Size).fill(null); const OPERAND_TYPES = ["u32", "i32", "owner", "handle", "str", "option-str", "array", "str-array", "bool", "primitive", "register", "unknown", "symbol-table", "scope"]; function normalize(key, input) { let name; if (void 0 === input.format) throw new Error(`Missing format in ${JSON.stringify(input)}`); name = Array.isArray(input.format) ? input.format[0] : input.format; let ops = Array.isArray(input.format) ? function (input) { if (!Array.isArray(input)) throw new Error(`Expected operands array, got ${JSON.stringify(input)}`); return input.map(op); }(input.format.slice(1)) : []; return { name: name, mnemonic: key, before: null, stackChange: stackChange(input["operand-stack"]), ops: ops, operands: ops.length, check: !0 !== input.skip }; } function stackChange(stack) { if (void 0 === stack) return 0; let before = stack[0], after = stack[1]; return hasRest(before) || hasRest(after) ? null : after.length - before.length; } function hasRest(input) { if (!Array.isArray(input)) throw new Error(`Unexpected stack entry: ${JSON.stringify(input)}`); return input.some(s => "..." === s.slice(-3)); } function op(input) { let [name, type] = input.split(":"); if (s = type, -1 !== OPERAND_TYPES.indexOf(s)) return { name: name, type: type }; throw new Error(`Expected operand, found ${JSON.stringify(input)}`); var s; } function normalizeAll(parsed) { return { machine: normalizeParsed(parsed.machine), syscall: normalizeParsed(parsed.syscall) }; } function normalizeParsed(parsed) { let out = Object.create(null); for (const [key, value] of Object.entries(parsed)) out[key] = normalize(key, value); return out; } function buildEnum(name, parsed, offset, max) { let last, e = [`export enum ${name} {`]; Object.values(parsed).forEach((value, i) => { e.push(` ${value.name} = ${offset + i},`), last = i; }), e.push(` Size = ${last + offset + 1},`), e.push("}"); let predicate, enumString = e.join("\n"); return predicate = max ? strip` export function is${name}(value: number): value is ${name} { return value >= ${offset} && value <= ${max}; } ` : strip` export function is${name}(value: number): value is ${name} { return value >= ${offset}; } `, { enumString: enumString, predicate: predicate }; } function strip(strings, ...args) { let out = ""; for (let i = 0; i < strings.length; i++) out += `${strings[i]}${void 0 !== args[i] ? String(args[i]) : ""}`; // eslint-disable-next-line regexp/no-super-linear-backtracking out = /^\s*?\n?([\s\S]*?)\s*$/u.exec(out)[1]; let min = Number.MAX_SAFE_INTEGER; for (let line of out.split("\n")) { let leading = /^\s*/u.exec(line)[0].length; min = Math.min(min, leading); } let stripped = ""; for (let line of out.split("\n")) stripped += line.slice(min) + "\n"; return stripped; } const META_KIND = ["METADATA", "MACHINE_METADATA"]; function buildSingleMeta(kind, all, key) { return `${kind}[${"MACHINE_METADATA" === kind ? "MachineOp" : "Op"}.${all[key].name}] = ${stringify(all[key], 0)};`; } function stringify(o, pad) { if ("object" != typeof o || null === o) return "string" == typeof o ? `'${o}'` : JSON.stringify(o); if (Array.isArray(o)) return `[${o.map(v => stringify(v, pad)).join(", ")}]`; let out = ["{"]; for (let key of Object.keys(o)) out.push(`${" ".repeat(pad + 2)}${key}: ${stringify(o[key], pad + 2)},`); return out.push(`${" ".repeat(pad)}}`), out.join("\n"); } function buildMetas(kind, all) { let out = []; for (let key of Object.keys(all)) out.push(buildSingleMeta(kind, all, key)); return out.join("\n\n"); } class NoopChecker { validate(value) { return !0; } expected() { return "<noop>"; } } function wrap(checker) { return new NoopChecker(); } function CheckInstanceof(Class) { return new NoopChecker(); } function CheckOption(checker) { return new NoopChecker(); } function CheckMaybe(checker) { return new NoopChecker(); } function CheckInterface(obj) { return new NoopChecker(); } function CheckArray(obj) { return new NoopChecker(); } function CheckDict(obj) { return new NoopChecker(); } function defaultMessage(value, expected) { return `Got ${value}, expected:\n${expected}`; } function check(value, checker, message = defaultMessage) { return value; } function recordStackSize(sp) {} const CheckPrimitive = new NoopChecker(), CheckFunction = new NoopChecker(), CheckNumber = new NoopChecker(), CheckBoolean = new NoopChecker(), CheckHandle = new NoopChecker(), CheckString = new NoopChecker(), CheckUndefined = new NoopChecker(), CheckUnknown = new NoopChecker(), CheckSafeString = new NoopChecker(), CheckObject = new NoopChecker(); function CheckOr(left, right) { return new NoopChecker(); } const CheckBlockSymbolTable = new NoopChecker(), CheckProgramSymbolTable = new NoopChecker(), CheckElement = new NoopChecker(), CheckDocumentFragment = new NoopChecker(), CheckNode = new NoopChecker(); export { CheckArray, CheckBlockSymbolTable, CheckBoolean, CheckDict, CheckDocumentFragment, CheckElement, CheckFunction, CheckHandle, CheckInstanceof, CheckInterface, CheckMaybe, CheckNode, CheckNumber, CheckObject, CheckOption, CheckOr, CheckPrimitive, CheckProgramSymbolTable, CheckSafeString, CheckString, CheckUndefined, CheckUnknown, META_KIND, OPERAND_TYPES, buildEnum, buildMetas, buildSingleMeta, check, debug, debugSlice, logOpcode, normalize, normalizeAll, normalizeParsed, opcodeMetadata, recordStackSize, strip, wrap };