summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-03 21:28:28 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-03 21:28:28 -0800
commit643352df3c52022c3a13898fa00bdfa975e4e63c (patch)
tree43ce1f599b78929dab2d553ca7a5b0249a2fdb2c /src
parente9b3051ed21cb6c406a95acbcb2a2d1f88396676 (diff)
downloadbinaryen-643352df3c52022c3a13898fa00bdfa975e4e63c.tar.gz
binaryen-643352df3c52022c3a13898fa00bdfa975e4e63c.tar.bz2
binaryen-643352df3c52022c3a13898fa00bdfa975e4e63c.zip
break, if and nop
Diffstat (limited to 'src')
-rw-r--r--src/wasm-s-parser.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index fdf44a5a2..db70a69b7 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -348,12 +348,21 @@ private:
switch (str[0]) {
case 'b': {
if (str[1] == 'l') return makeBlock(s);
+ if (str[1] == 'r') return makeBreak(s);
abort_on(str);
}
case 'g': {
if (str[1] == 'e') return makeGetLocal(s);
abort_on(str);
}
+ case 'i': {
+ if (str[1] == 'f') return makeIf(s);
+ abort_on(str);
+ }
+ case 'n': {
+ if (str[1] == 'o') return allocator.alloc<Nop>();
+ abort_on(str);
+ }
case 's': {
if (str[1] == 'e') return makeSetLocal(s);
abort_on(str);
@@ -503,6 +512,25 @@ private:
return ret;
}
+ Expression* makeIf(Element& s) {
+ auto ret = allocator.alloc<If>();
+ ret->condition = parseExpression(s[1]);
+ ret->ifTrue = parseExpression(s[2]);
+ if (s.size() == 4) {
+ ret->ifFalse = parseExpression(s[3]);
+ }
+ return ret;
+ }
+
+ Expression* makeBreak(Element& s) {
+ auto ret = allocator.alloc<Break>();
+ ret->name = s[1]->str();
+ if (s.size() == 3) {
+ ret->value = parseExpression(s[2]);
+ }
+ return ret;
+ }
+
void parseMemory(Element& s) {
wasm.memorySize = atoi(s[1]->c_str());
}