diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-08-02 20:53:48 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-09-07 09:54:52 -0700 |
commit | 72616971b2a35cbc37ea974e47c870556ef8ef4d (patch) | |
tree | e9c3daeed8231fb9a4466b21cf9e05d682d11709 /src/wasm-s-parser.h | |
parent | 1cc33903a0b1b9dddd40674d792a59ee0d1bccf7 (diff) | |
download | binaryen-72616971b2a35cbc37ea974e47c870556ef8ef4d.tar.gz binaryen-72616971b2a35cbc37ea974e47c870556ef8ef4d.tar.bz2 binaryen-72616971b2a35cbc37ea974e47c870556ef8ef4d.zip |
call_indirect now has the target at the end
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r-- | src/wasm-s-parser.h | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 685f26d82..49fd52ef0 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -895,7 +895,7 @@ private: if (op == HostOp::HasFeature) { ret->nameOperand = s[1]->str(); } else { - parseCallOperands(s, 1, ret); + parseCallOperands(s, 1, s.size(), ret); } ret->finalize(); return ret; @@ -1196,7 +1196,7 @@ private: auto ret = allocator.alloc<Call>(); ret->target = s[1]->str(); ret->type = functionTypes[ret->target]; - parseCallOperands(s, 2, ret); + parseCallOperands(s, 2, s.size(), ret); return ret; } @@ -1205,7 +1205,7 @@ private: ret->target = s[1]->str(); Import* import = wasm.getImport(ret->target); ret->type = import->type->result; - parseCallOperands(s, 2, ret); + parseCallOperands(s, 2, s.size(), ret); return ret; } @@ -1216,14 +1216,14 @@ private: if (!fullType) throw ParseException("invalid call_indirect type", s.line, s.col); ret->fullType = fullType->name; ret->type = fullType->result; - ret->target = parseExpression(s[2]); - parseCallOperands(s, 3, ret); + parseCallOperands(s, 2, s.size() - 1, ret); + ret->target = parseExpression(s[s.size() - 1]); return ret; } template<class T> - void parseCallOperands(Element& s, size_t i, T* call) { - while (i < s.size()) { + void parseCallOperands(Element& s, Index i, Index j, T* call) { + while (i < j) { call->operands.push_back(parseExpression(s[i])); i++; } |