summaryrefslogtreecommitdiff
path: root/src/emscripten-optimizer/parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emscripten-optimizer/parser.h')
-rw-r--r--src/emscripten-optimizer/parser.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/emscripten-optimizer/parser.h b/src/emscripten-optimizer/parser.h
index 6b2fa2faa..c805ca9f6 100644
--- a/src/emscripten-optimizer/parser.h
+++ b/src/emscripten-optimizer/parser.h
@@ -386,6 +386,7 @@ class Parser {
else if (frag.str == CONTINUE) return parseContinue(src, seps);
else if (frag.str == SWITCH) return parseSwitch(src, seps);
else if (frag.str == NEW) return parseNew(src, seps);
+ else if (frag.str == FOR) return parseFor(src, seps);
dump(frag.str.str, src);
abort();
return nullptr;
@@ -492,6 +493,26 @@ class Parser {
return Builder::makeWhile(condition, body);
}
+ NodeRef parseFor(char*& src, const char* seps) {
+ skipSpace(src);
+ assert(*src == '(');
+ src++;
+ NodeRef init = parseElement(src, ";");
+ skipSpace(src);
+ assert(*src == ';');
+ src++;
+ NodeRef condition = parseElement(src, ";");
+ skipSpace(src);
+ assert(*src == ';');
+ src++;
+ NodeRef inc = parseElement(src, ")");
+ skipSpace(src);
+ assert(*src == ')');
+ src++;
+ NodeRef body = parseMaybeBracketed(src, seps);
+ return Builder::makeFor(init, condition, inc, body);
+ }
+
NodeRef parseBreak(char*& src, const char* seps) {
skipSpace(src);
Frag next(src);