diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-03 21:28:28 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-03 21:28:28 -0800 |
commit | 643352df3c52022c3a13898fa00bdfa975e4e63c (patch) | |
tree | 43ce1f599b78929dab2d553ca7a5b0249a2fdb2c /src | |
parent | e9b3051ed21cb6c406a95acbcb2a2d1f88396676 (diff) | |
download | binaryen-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.h | 28 |
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()); } |