mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-23 00:24:11 -08:00
#253 WASM Memory should be exported to make it accessible from JS
Now a default export named "memory" is created to export the WASM memory.
This commit is contained in:
parent
19b804b5fc
commit
f84a646eae
|
@ -41,6 +41,7 @@ public class WasmBinaryRenderer {
|
||||||
private static final int SECTION_DATA = 11;
|
private static final int SECTION_DATA = 11;
|
||||||
|
|
||||||
private static final int EXTERNAL_KIND_FUNCTION = 0;
|
private static final int EXTERNAL_KIND_FUNCTION = 0;
|
||||||
|
private static final int EXTERNAL_KIND_MEMORY = 2;
|
||||||
|
|
||||||
private WasmBinaryWriter output;
|
private WasmBinaryWriter output;
|
||||||
private WasmBinaryVersion version;
|
private WasmBinaryVersion version;
|
||||||
|
@ -186,16 +187,16 @@ public class WasmBinaryRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderExport(WasmModule module) {
|
private void renderExport(WasmModule module) {
|
||||||
List<WasmFunction> functions = module.getFunctions().values().stream()
|
|
||||||
.filter(function -> function.getExportName() != null)
|
// https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#export-section
|
||||||
.collect(Collectors.toList());
|
|
||||||
if (functions.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
WasmBinaryWriter section = new WasmBinaryWriter();
|
WasmBinaryWriter section = new WasmBinaryWriter();
|
||||||
|
|
||||||
section.writeLEB(functions.size());
|
List<WasmFunction> functions = module.getFunctions().values().stream()
|
||||||
|
.filter(function -> function.getExportName() != null)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
section.writeLEB(functions.size() + 1);
|
||||||
for (WasmFunction function : functions) {
|
for (WasmFunction function : functions) {
|
||||||
int functionIndex = functionIndexes.get(function.getName());
|
int functionIndex = functionIndexes.get(function.getName());
|
||||||
|
|
||||||
|
@ -205,6 +206,11 @@ public class WasmBinaryRenderer {
|
||||||
section.writeLEB(functionIndex);
|
section.writeLEB(functionIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We also need to export the memory to make it accessible
|
||||||
|
section.writeAsciiString("memory");
|
||||||
|
section.writeByte(EXTERNAL_KIND_MEMORY);
|
||||||
|
section.writeLEB(0);
|
||||||
|
|
||||||
writeSection(SECTION_EXPORT, "export", section.getData());
|
writeSection(SECTION_EXPORT, "export", section.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class WasmRenderer {
|
||||||
|
|
||||||
public void renderMemory(WasmModule module) {
|
public void renderMemory(WasmModule module) {
|
||||||
visitor.lf();
|
visitor.lf();
|
||||||
visitor.open().append("memory " + module.getMemorySize()).close().lf();
|
visitor.open().append("memory (export \"memory\") " + module.getMemorySize()).close().lf();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderData(WasmModule module) {
|
public void renderData(WasmModule module) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user