Update binaryen

This commit is contained in:
dcodeIO 2017-12-05 15:28:01 +01:00
parent 330752908a
commit 81844a1fe7
5 changed files with 108 additions and 14 deletions

6
package-lock.json generated
View File

@ -216,9 +216,9 @@
"dev": true "dev": true
}, },
"binaryen": { "binaryen": {
"version": "39.0.0-nightly.20171116", "version": "39.0.0-nightly.20171205",
"resolved": "https://registry.npmjs.org/binaryen/-/binaryen-39.0.0-nightly.20171116.tgz", "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-39.0.0-nightly.20171205.tgz",
"integrity": "sha512-ljl/qPne0+8hYtNWITRSAtxNM1EG5NnvTg+HRmSUdNAK2j9wcyAAg5uVj+TgipEqY82kmHt5C9+TSQNEwaxgrw==" "integrity": "sha512-OYyWKbtGCSjfX1mTmwMfTANC+trKmEIOOfAMbqjJzU+qmEFCt942kIn+6+3sNeuehLLuPeXrEOq1JxKnKVdizg=="
}, },
"bn.js": { "bn.js": {
"version": "4.11.8", "version": "4.11.8",

View File

@ -12,7 +12,7 @@
}, },
"dependencies": { "dependencies": {
"@types/node": "^8.0.54", "@types/node": "^8.0.54",
"binaryen": "39.0.0-nightly.20171116", "binaryen": "39.0.0-nightly.20171205",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"source-map-support": "^0.5.0" "source-map-support": "^0.5.0"
}, },

View File

@ -352,7 +352,7 @@ export class Compiler extends DiagnosticEmitter {
} else { } else {
this.module.addGlobal(internalName, nativeType, element.isMutable, initializer); this.module.addGlobal(internalName, nativeType, element.isMutable, initializer);
if (!element.isMutable) { if (!element.isMutable) {
// TODO: check export, requires updated binaryen.js with Module#addGlobalExport // TODO: check export
} }
} }
return element.isCompiled = true; return element.isCompiled = true;
@ -416,7 +416,7 @@ export class Compiler extends DiagnosticEmitter {
if (!instance) if (!instance)
return; return;
if (declaration.range.source.isEntry && declaration.parent == declaration.range.source && hasModifier(ModifierKind.EXPORT, declaration.modifiers)) if (declaration.range.source.isEntry && declaration.parent == declaration.range.source && hasModifier(ModifierKind.EXPORT, declaration.modifiers))
this.module.addExport(instance.internalName, declaration.identifier.name); this.module.addFunctionExport(instance.internalName, declaration.identifier.name);
} }
compileFunctionUsingTypeArguments(prototype: FunctionPrototype, typeArguments: TypeNode[], contextualTypeArguments: Map<string,Type> | null = null, alternativeReportNode: Node | null = null): Function | null { compileFunctionUsingTypeArguments(prototype: FunctionPrototype, typeArguments: TypeNode[], contextualTypeArguments: Map<string,Type> | null = null, alternativeReportNode: Node | null = null): Function | null {
@ -473,7 +473,7 @@ export class Compiler extends DiagnosticEmitter {
// create the function // create the function
const internalName: string = instance.internalName; const internalName: string = instance.internalName;
if (instance.isDeclare) { if (instance.isDeclare) {
this.module.addImport(internalName, "env", declaration.identifier.name, typeRef); this.module.addFunctionImport(internalName, "env", declaration.identifier.name, typeRef);
} else { } else {
this.module.addFunction(internalName, typeRef, typesToNativeTypes(instance.additionalLocals), this.module.createBlock(null, <ExpressionRef[]>stmts, NativeType.None)); this.module.addFunction(internalName, typeRef, typesToNativeTypes(instance.additionalLocals), this.module.createBlock(null, <ExpressionRef[]>stmts, NativeType.None));
} }
@ -577,7 +577,7 @@ export class Compiler extends DiagnosticEmitter {
if (!(<FunctionPrototype>element).isGeneric) { if (!(<FunctionPrototype>element).isGeneric) {
const functionInstance: Function | null = this.compileFunctionUsingTypeArguments(<FunctionPrototype>element, []); const functionInstance: Function | null = this.compileFunctionUsingTypeArguments(<FunctionPrototype>element, []);
if (functionInstance && statement.range.source.isEntry) if (functionInstance && statement.range.source.isEntry)
this.module.addExport(functionInstance.internalName, member.externalIdentifier.name); this.module.addFunctionExport(functionInstance.internalName, member.externalIdentifier.name);
} }
break; break;

View File

@ -274,12 +274,18 @@ declare function _BinaryenFunctionRunPasses(func: BinaryenFunctionRef, module: B
declare type BinaryenImportRef = usize; declare type BinaryenImportRef = usize;
declare function _BinaryenAddImport(module: BinaryenModuleRef, internalName: CString, externalModuleName: CString, externalBaseName: CString, type: BinaryenFunctionTypeRef): BinaryenImportRef; declare function _BinaryenAddFunctionImport(module: BinaryenModuleRef, internalName: CString, externalModuleName: CString, externalBaseName: CString, functionType: BinaryenFunctionTypeRef): BinaryenImportRef;
declare function _BinaryenAddTableImport(module: BinaryenModuleRef, internalName: CString, externalModuleName: CString, externalBaseName: CString): BinaryenImportRef;
declare function _BinaryenAddMemoryImport(module: BinaryenModuleRef, internalName: CString, externalModuleName: CString, externalBaseName: CString): BinaryenImportRef;
declare function _BinaryenAddGlobalImport(module: BinaryenModuleRef, internalName: CString, externalModuleName: CString, externalBaseName: CString, globalType: BinaryenType): BinaryenImportRef;
declare function _BinaryenRemoveImport(module: BinaryenModuleRef, internalName: CString): void; declare function _BinaryenRemoveImport(module: BinaryenModuleRef, internalName: CString): void;
declare type BinaryenExportRef = usize; declare type BinaryenExportRef = usize;
declare function _BinaryenAddExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef; declare function _BinaryenAddFunctionExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef;
declare function _BinaryenAddTableExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef;
declare function _BinaryenAddMemoryExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef;
declare function _BinaryenAddGlobalExport(module: BinaryenModuleRef, internalName: CString, externalName: CString): BinaryenExportRef;
declare function _BinaryenRemoveExport(module: BinaryenModuleRef, externalName: CString): void; declare function _BinaryenRemoveExport(module: BinaryenModuleRef, externalName: CString): void;
declare type BinaryenGlobalRef = usize; declare type BinaryenGlobalRef = usize;

View File

@ -522,12 +522,48 @@ export class Module {
} }
} }
addExport(internalName: string, externalName: string): ExportRef { addFunctionExport(internalName: string, externalName: string): ExportRef {
if (this.noEmit) return 0; if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName); const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalName); const cStr2: CString = allocString(externalName);
try { try {
return _BinaryenAddExport(this.ref, cStr1, cStr2); return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);
} finally {
_free(cStr2);
_free(cStr1);
}
}
addTableExport(internalName: string, externalName: string): ExportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalName);
try {
return _BinaryenAddTableExport(this.ref, cStr1, cStr2);
} finally {
_free(cStr2);
_free(cStr1);
}
}
addMemoryExport(internalName: string, externalName: string): ExportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalName);
try {
return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);
} finally {
_free(cStr2);
_free(cStr1);
}
}
addGlobalExport(internalName: string, externalName: string): ExportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalName);
try {
return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);
} finally { } finally {
_free(cStr2); _free(cStr2);
_free(cStr1); _free(cStr1);
@ -544,13 +580,55 @@ export class Module {
} }
} }
addImport(internalName: string, externalModuleName: string, externalBaseName: string, type: FunctionTypeRef): ImportRef { addFunctionImport(internalName: string, externalModuleName: string, externalBaseName: string, functionType: FunctionTypeRef): ImportRef {
if (this.noEmit) return 0; if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName); const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalModuleName); const cStr2: CString = allocString(externalModuleName);
const cStr3: CString = allocString(externalBaseName); const cStr3: CString = allocString(externalBaseName);
try { try {
return _BinaryenAddImport(this.ref, cStr1, cStr2, cStr3, type); return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);
} finally {
_free(cStr3);
_free(cStr2);
_free(cStr1);
}
}
addTableImport(internalName: string, externalModuleName: string, externalBaseName: string): ImportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalModuleName);
const cStr3: CString = allocString(externalBaseName);
try {
return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);
} finally {
_free(cStr3);
_free(cStr2);
_free(cStr1);
}
}
addMemoryImport(internalName: string, externalModuleName: string, externalBaseName: string): ImportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalModuleName);
const cStr3: CString = allocString(externalBaseName);
try {
return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);
} finally {
_free(cStr3);
_free(cStr2);
_free(cStr1);
}
}
addGlobalImport(internalName: string, externalModuleName: string, externalBaseName: string, globalType: NativeType): ImportRef {
if (this.noEmit) return 0;
const cStr1: CString = allocString(internalName);
const cStr2: CString = allocString(externalModuleName);
const cStr3: CString = allocString(externalBaseName);
try {
return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);
} finally { } finally {
_free(cStr3); _free(cStr3);
_free(cStr2); _free(cStr2);
@ -598,6 +676,16 @@ export class Module {
} }
} }
setFunctionTable(funcs: BinaryenFunctionRef[]): void {
if (this.noEmit) return;
const cArr: CArray<i32> = allocI32Array(funcs);
try {
_BinaryenSetFunctionTable(this.ref, cArr, funcs.length);
} finally {
_free(cArr);
}
}
setStart(func: FunctionRef): void { setStart(func: FunctionRef): void {
if (this.noEmit) return; if (this.noEmit) return;
_BinaryenSetStart(this.ref, func); _BinaryenSetStart(this.ref, func);