summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael <mbebenita@Michaels-MacBook-Pro-4.local>2016-02-03 02:23:54 -0800
committerMichael <mbebenita@Michaels-MacBook-Pro-4.local>2016-02-03 02:27:10 -0800
commitfda7aeb6547e98419b220676b9fe829c8635962a (patch)
treed6e37bfea88489ec3437baa5c64677dcb46cc733 /src
parentff497f7a261331b3aa6a1e7a1f8a5e476f856d3c (diff)
downloadbinaryen-fda7aeb6547e98419b220676b9fe829c8635962a.tar.gz
binaryen-fda7aeb6547e98419b220676b9fe829c8635962a.tar.bz2
binaryen-fda7aeb6547e98419b220676b9fe829c8635962a.zip
Fix import parsing.
Diffstat (limited to 'src')
-rw-r--r--src/wasm-s-parser.h23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index d4a4b38b4..9ba9112f3 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -223,6 +223,7 @@ class SExpressionWasmBuilder {
MixedArena& allocator;
std::function<void ()> onError;
int functionCounter;
+ int importCounter;
std::map<Name, WasmType> functionTypes; // we need to know function return types before we parse their contents
bool debug;
@@ -978,13 +979,19 @@ private:
void parseImport(Element& s) {
auto im = allocator.alloc<Import>();
- im->name = s[1]->str();
- im->module = s[2]->str();
- if (!s[3]->isStr()) onError();
- im->base = s[3]->str();
+ size_t i = 1;
+ if (s.size() > 3 && s[3]->isStr()) {
+ im->name = s[i++]->str();
+ } else {
+ im->name = Name::fromInt(importCounter);
+ }
+ importCounter++;
+ im->module = s[i++]->str();
+ if (!s[i]->isStr()) onError();
+ im->base = s[i++]->str();
FunctionType type;
- if (s.size() > 4) {
- Element& params = *s[4];
+ if (s.size() > i) {
+ Element& params = *s[i];
IString id = params[0]->str();
if (id == PARAM) {
for (size_t i = 1; i < params.size(); i++) {
@@ -999,8 +1006,8 @@ private:
} else {
onError();
}
- if (s.size() > 5) {
- Element& result = *s[5];
+ if (s.size() > i+1) {
+ Element& result = *s[i+1];
assert(result[0]->str() == RESULT);
type.result = stringToWasmType(result[1]->str());
}