diff options
-rw-r--r-- | src/wasm-s-parser.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 9f9e98a1a..9c98975e6 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -40,7 +40,7 @@ public: Element() : isList_(true) {} bool isList() { return isList_; } - bool isString() { return !isList_; } + bool isStr() { return !isList_; } // list methods @@ -367,6 +367,10 @@ private: if (str[1] == 'f') return makeIf(s); abort_on(str); } + case 'l': { + if (str[1] == 'o') return makeLoop(s); + abort_on(str); + } case 'n': { if (str[1] == 'o') return allocator.alloc<Nop>(); abort_on(str); @@ -432,7 +436,7 @@ private: Expression* makeBlock(Element& s) { auto ret = allocator.alloc<Block>(); size_t i = 1; - if (s[1]->isString()) { + if (s[1]->isStr()) { ret->name = s[1]->str(); i++; } @@ -530,6 +534,21 @@ private: return ret; } + Expression* makeLoop(Element& s) { + auto ret = allocator.alloc<Loop>(); + size_t i = 1; + if (s[i]->isStr()) { + ret->out = s[i]->str(); + i++; + } + if (s[i]->isStr()) { + ret->in = s[i]->str(); + i++; + } + ret->body = parseExpression(s[i]); + return ret; + } + Expression* makeBreak(Element& s) { auto ret = allocator.alloc<Break>(); ret->name = s[1]->str(); |