summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYury Delendik <ydelendik@mozilla.com>2016-04-20 18:13:16 -0500
committerYury Delendik <ydelendik@mozilla.com>2016-04-20 18:13:16 -0500
commitc2d9d476b853212e96f301106cf00ceb19baefca (patch)
tree68e4acc166f063dfe26d5f7ae7866c9b28bde1e0 /src
parent86154bff23044b24e18235c8c92721eb463e616a (diff)
parentb9637c4b74d340e1e8f5a3ab7a4f11e4fee7ce76 (diff)
downloadbinaryen-c2d9d476b853212e96f301106cf00ceb19baefca.tar.gz
binaryen-c2d9d476b853212e96f301106cf00ceb19baefca.tar.bz2
binaryen-c2d9d476b853212e96f301106cf00ceb19baefca.zip
Merge pull request #371 from yurydelendik/initarray-mutilple
Parses more than one entry in the .init_array section.
Diffstat (limited to 'src')
-rw-r--r--src/s2wasm.h24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/s2wasm.h b/src/s2wasm.h
index d0dbe8c6a..2da99281c 100644
--- a/src/s2wasm.h
+++ b/src/s2wasm.h
@@ -480,24 +480,28 @@ class S2WasmBuilder {
void parseToplevelSection() {
auto section = getCommaSeparated();
// Initializers are anything in a section whose name begins with .init_array
- if (!strncmp(section.c_str(), ".init_array", strlen(".init_array") - 1)) parseInitializer();
+ if (!strncmp(section.c_str(), ".init_array", strlen(".init_array") - 1)) {
+ parseInitializer();
+ return;
+ }
s = strchr(s, '\n');
}
void parseInitializer() {
// Ignore the rest of the .section line
s = strchr(s, '\n');
- while (*s) {
+ skipWhitespace();
+ // The section may start with .p2align
+ if (match(".p2align")) {
+ s = strchr(s, '\n');
skipWhitespace();
- if (match(".p2align")) s = strchr(s, '\n');
- else if (match(".int32")) {
- initializerFunctions.emplace_back(cleanFunction(getStr()));
- assert(implementedFunctions.count(initializerFunctions.back()));
- break;
- } else {
- abort_on("parseInitializer");
- }
}
+ mustMatch(".int32");
+ do {
+ initializerFunctions.emplace_back(cleanFunction(getStr()));
+ assert(implementedFunctions.count(initializerFunctions.back()));
+ skipWhitespace();
+ } while (match(".int32"));
}
void parseText() {