summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-29 21:33:59 -0500
committerAlon Zakai <alonzakai@gmail.com>2015-12-29 22:16:58 -0800
commit41e1551c99a8f7378e5941e684c95b615c5b120d (patch)
tree255e8bb731e9d15017acd7d4d8d02be3d116e086
parent0421bd0c27ea57c7c5c9bc3b1ce6f71f8ce240dc (diff)
downloadbinaryen-41e1551c99a8f7378e5941e684c95b615c5b120d.tar.gz
binaryen-41e1551c99a8f7378e5941e684c95b615c5b120d.tar.bz2
binaryen-41e1551c99a8f7378e5941e684c95b615c5b120d.zip
more binary work
-rw-r--r--src/wasm-binary.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 9b81cffe8..74d3eba0b 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -172,9 +172,31 @@ public:
}
writeDataSegments() {
+ o << Section::DataSegments << LEB128(wasm.memory.segments.size());
+ for (auto& segment : wasm.memory.segments) {
+ o << int32_t(segment.offset)
+ << int32_t(XXX) // TODO: where/when do we emit this?
+ << int32_t(segment.size)
+ << char(1); // load at program start
+ }
+ }
+
+ uint16_t getFunctionIndex(Name name) {
+ // TODO: optimize
+ for (size_t i = 0; i < wasm.imports.size()) {
+ if (wasm.imports[i]->name == name) return i;
+ }
+ for (size_t i = 0; i < wasm.functions.size()) {
+ if (wasm.functions[i]->name == name) return wasm.imports.size() + i;
+ }
+ abort();
}
writeFunctionTable() {
+ o << Section::FunctionTable << LEB128(wasm.table.names.size());
+ for (auto name : wasm.table.names) {
+ o << getFunctionIndex(name);
+ }
}
writeEnd() {