summaryrefslogtreecommitdiff
path: root/src/wasm-s-parser.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-05-12 14:58:20 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-05-12 15:38:29 -0700
commit031f22eb8e84e098afceffa787126d8b6ab79e92 (patch)
tree2330641d3fceb14a29c6d6d8a74e86448cfbbebe /src/wasm-s-parser.h
parenta18b153e1940b6e1504084c60f3feca46dfa2870 (diff)
downloadbinaryen-031f22eb8e84e098afceffa787126d8b6ab79e92.tar.gz
binaryen-031f22eb8e84e098afceffa787126d8b6ab79e92.tar.bz2
binaryen-031f22eb8e84e098afceffa787126d8b6ab79e92.zip
parse error details
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r--src/wasm-s-parser.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index e38c33ce6..e0f85227d 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -299,7 +299,7 @@ private:
return;
} else if (id == TYPE) {
Name typeName = curr[1]->str();
- if (!wasm.checkFunctionType(typeName)) throw ParseException();
+ if (!wasm.checkFunctionType(typeName)) throw ParseException("unknown function");
FunctionType* type = wasm.getFunctionType(typeName);
functionTypes[name] = type->result;
return;
@@ -323,7 +323,7 @@ private:
if (id == TABLE) return parseTable(curr);
if (id == TYPE) return; // already done
std::cerr << "bad module element " << id.str << '\n';
- throw ParseException();
+ throw ParseException("unknown module element");
}
// function parsing state
@@ -343,7 +343,7 @@ private:
} else {
// index
size_t offset = atoi(s.str().c_str());
- if (offset >= functionNames.size()) throw ParseException();
+ if (offset >= functionNames.size()) throw ParseException("unknown function");
return functionNames[offset];
}
}
@@ -413,7 +413,7 @@ private:
} else if (id == TYPE) {
Name name = curr[1]->str();
type = name;
- if (!wasm.checkFunctionType(name)) throw ParseException();
+ if (!wasm.checkFunctionType(name)) throw ParseException("unknown function");
FunctionType* type = wasm.getFunctionType(name);
result = type->result;
for (size_t j = 0; j < type->params.size(); j++) {
@@ -468,7 +468,7 @@ private:
if (str[1] == '6' && str[2] == '4' && (prefix || str[3] == 0)) return f64;
}
if (allowError) return none;
- throw ParseException();
+ throw ParseException("unknown type");
abort();
}
@@ -477,7 +477,7 @@ public:
return parseExpression(*s);
}
- #define abort_on(str) { std::cerr << "aborting on " << str << '\n'; throw ParseException(); }
+ #define abort_on(str) { throw ParseException(std::string("abort_on ") + str); }
Expression* parseExpression(Element& s) {
IString id = s[0]->str();
@@ -816,7 +816,7 @@ private:
Expression* makeConst(Element& s, WasmType type) {
auto ret = parseConst(s[1]->str(), type, allocator);
- if (!ret) throw ParseException();
+ if (!ret) throw ParseException("bad const");
return ret;
}
@@ -850,9 +850,9 @@ private:
ret->align = atoi(eq);
} else if (str[0] == 'o') {
uint64_t offset = atoll(eq);
- if (offset > std::numeric_limits<uint32_t>::max()) throw ParseException();
+ if (offset > std::numeric_limits<uint32_t>::max()) throw ParseException("bad offset");
ret->offset = (uint32_t)offset;
- } else throw ParseException();
+ } else throw ParseException("bad load attribute");
i++;
}
ret->ptr = parseExpression(s[i]);
@@ -888,7 +888,7 @@ private:
ret->align = atoi(eq);
} else if (str[0] == 'o') {
ret->offset = atoi(eq);
- } else throw ParseException();
+ } else throw ParseException("bad store attribute");
i++;
}
ret->ptr = parseExpression(s[i]);
@@ -1136,7 +1136,7 @@ private:
void parseExport(Element& s) {
if (!s[2]->dollared() && !std::isdigit(s[2]->str()[0])) {
assert(s[2]->str() == MEMORY);
- if (!hasMemory) throw ParseException();
+ if (!hasMemory) throw ParseException("memory exported but no memory");
wasm.memory.exportName = s[1]->str();
return;
}
@@ -1156,7 +1156,7 @@ private:
}
importCounter++;
im->module = s[i++]->str();
- if (!s[i]->isStr()) throw ParseException();
+ if (!s[i]->isStr()) throw ParseException("no name for import");
im->base = s[i++]->str();
std::unique_ptr<FunctionType> type = make_unique<FunctionType>();
if (s.size() > i) {
@@ -1170,10 +1170,10 @@ private:
type->result = stringToWasmType(params[1]->str());
} else if (id == TYPE) {
IString name = params[1]->str();
- if (!wasm.checkFunctionType(name)) throw ParseException();
+ if (!wasm.checkFunctionType(name)) throw ParseException("bad function type for import");
*type = *wasm.getFunctionType(name);
} else {
- throw ParseException();
+ throw ParseException("bad import element");
}
if (s.size() > i+1) {
Element& result = *s[i+1];