mirror of https://github.com/webpack/webpack.git
feat: add missing preprocessing
This commit is contained in:
parent
98541fdb29
commit
6d8bc91a9b
|
|
@ -81,7 +81,7 @@ declare module "@webassemblyjs/ast" {
|
||||||
export class TypeInstruction extends Node {}
|
export class TypeInstruction extends Node {}
|
||||||
export class IndexInFuncSection extends Node {}
|
export class IndexInFuncSection extends Node {}
|
||||||
export function indexLiteral(index: number): IndexLiteral;
|
export function indexLiteral(index: number): IndexLiteral;
|
||||||
export function numberLiteral(num: number): NumberLiteral;
|
export function numberLiteralFromRaw(num: number): NumberLiteral;
|
||||||
export function global(globalType: string, nodes: Node[]): Global;
|
export function global(globalType: string, nodes: Node[]): Global;
|
||||||
export function identifier(indentifier: string): Identifier;
|
export function identifier(indentifier: string): Identifier;
|
||||||
export function funcParam(valType: string, id: Identifier): FuncParam;
|
export function funcParam(valType: string, id: Identifier): FuncParam;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ const Template = require("../Template");
|
||||||
const WebAssemblyUtils = require("./WebAssemblyUtils");
|
const WebAssemblyUtils = require("./WebAssemblyUtils");
|
||||||
const { RawSource } = require("webpack-sources");
|
const { RawSource } = require("webpack-sources");
|
||||||
|
|
||||||
|
const { shrinkPaddedLEB128 } = require("@webassemblyjs/wasm-opt");
|
||||||
const { editWithAST, addWithAST } = require("@webassemblyjs/wasm-edit");
|
const { editWithAST, addWithAST } = require("@webassemblyjs/wasm-edit");
|
||||||
const { decode } = require("@webassemblyjs/wasm-parser");
|
const { decode } = require("@webassemblyjs/wasm-parser");
|
||||||
const t = require("@webassemblyjs/ast");
|
const t = require("@webassemblyjs/ast");
|
||||||
|
|
@ -16,6 +17,21 @@ const t = require("@webassemblyjs/ast");
|
||||||
/** @typedef {import("../Module")} Module */
|
/** @typedef {import("../Module")} Module */
|
||||||
/** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
|
/** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run some preprocessing on the binary before wasm-edit
|
||||||
|
*
|
||||||
|
* @param {ArrayBuffer} ab - original binary
|
||||||
|
* @returns {ArrayBufferTransform} transform
|
||||||
|
*/
|
||||||
|
function preprocess(ab) {
|
||||||
|
const optBin = shrinkPaddedLEB128(new Uint8Array(ab));
|
||||||
|
return optBin.buffer;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @template T
|
* @template T
|
||||||
* @param {Function[]} fns transforms
|
* @param {Function[]} fns transforms
|
||||||
|
|
@ -42,9 +58,6 @@ const isGlobalImport = n => n.descr.type === "GlobalType";
|
||||||
const isFuncImport = n => n.descr.type === "FuncImportDescr";
|
const isFuncImport = n => n.descr.type === "FuncImportDescr";
|
||||||
|
|
||||||
// TODO replace with @callback
|
// TODO replace with @callback
|
||||||
/**
|
|
||||||
* @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the start instruction
|
* Removes the start instruction
|
||||||
|
|
@ -176,7 +189,7 @@ const rewriteImportedGlobals = state => bin => {
|
||||||
|
|
||||||
newGlobals.push(
|
newGlobals.push(
|
||||||
t.global(globalType, [
|
t.global(globalType, [
|
||||||
t.objectInstruction("const", "i32", [t.numberLiteral(0)])
|
t.objectInstruction("const", "i32", [t.numberLiteralFromRaw(0)])
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -315,7 +328,8 @@ const getUsedDependencyMap = module => {
|
||||||
|
|
||||||
class WebAssemblyGenerator extends Generator {
|
class WebAssemblyGenerator extends Generator {
|
||||||
generate(module) {
|
generate(module) {
|
||||||
const bin = module.originalSource().source();
|
let bin = module.originalSource().source();
|
||||||
|
bin = preprocess(bin);
|
||||||
|
|
||||||
const initFuncId = t.identifier(
|
const initFuncId = t.identifier(
|
||||||
Array.isArray(module.usedExports)
|
Array.isArray(module.usedExports)
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@webassemblyjs/ast": "1.5.3",
|
"@webassemblyjs/ast": "1.5.3",
|
||||||
"@webassemblyjs/wasm-edit": "1.5.3",
|
"@webassemblyjs/wasm-edit": "1.5.3",
|
||||||
|
"@webassemblyjs/wasm-opt": "1.5.3",
|
||||||
"@webassemblyjs/wasm-parser": "1.5.3",
|
"@webassemblyjs/wasm-parser": "1.5.3",
|
||||||
"acorn": "^5.0.0",
|
"acorn": "^5.0.0",
|
||||||
"acorn-dynamic-import": "^3.0.0",
|
"acorn-dynamic-import": "^3.0.0",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue