summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-08-16 15:17:49 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 09:54:59 -0700
commita8356e139ffcbaa17715a2213a47a4c75051396a (patch)
treee6b434eee9842cb1405a653a89cc98e710a90eb7 /src
parentc774db526decf16bfd69d322afc45cc41b4ec070 (diff)
downloadbinaryen-a8356e139ffcbaa17715a2213a47a4c75051396a.tar.gz
binaryen-a8356e139ffcbaa17715a2213a47a4c75051396a.tar.bz2
binaryen-a8356e139ffcbaa17715a2213a47a4c75051396a.zip
support (memory (data ..)) notation
Diffstat (limited to 'src')
-rw-r--r--src/wasm-s-parser.h17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index 4baab0121..3f61b113f 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -1347,6 +1347,12 @@ private:
void parseMemory(Element& s) {
hasMemory = true;
+ if (s[1]->isList()) {
+ // (memory (data ..)) format
+ parseData(*s[1]);
+ wasm.memory.initial = wasm.memory.segments[0].data.size();
+ return;
+ }
wasm.memory.initial = atoi(s[1]->c_str());
if (s.size() == 2) return;
size_t i = 2;
@@ -1381,8 +1387,15 @@ private:
}
void parseData(Element& s) {
- auto* offset = parseExpression(s[1]);
- const char *input = s[2]->c_str();
+ Index i = 1;
+ Expression* offset;
+ if (s[i]->isList()) {
+ // there is an init expression
+ offset = parseExpression(s[i++]);
+ } else {
+ offset = allocator.alloc<Const>()->set(Literal(int32_t(0)));
+ }
+ const char *input = s[i]->c_str();
if (auto size = strlen(input)) {
std::vector<char> data;
stringToBinary(input, size, data);