summaryrefslogtreecommitdiff
path: root/src/parser/contexts.h
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-01-30 15:13:40 -0800
committerGitHub <noreply@github.com>2024-01-30 15:13:40 -0800
commit8504571fb7209d07670a06c42a868bbfc954c756 (patch)
tree8431cd49e3f24794bff2488cd3491eea4dd824d7 /src/parser/contexts.h
parent8b85d5dfd22c56ea9a54df37219492ad3b6d5605 (diff)
downloadbinaryen-8504571fb7209d07670a06c42a868bbfc954c756.tar.gz
binaryen-8504571fb7209d07670a06c42a868bbfc954c756.tar.bz2
binaryen-8504571fb7209d07670a06c42a868bbfc954c756.zip
[Parser] Parse start declarations (#6256)
Diffstat (limited to 'src/parser/contexts.h')
-rw-r--r--src/parser/contexts.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h
index c1ccefe53..507a54342 100644
--- a/src/parser/contexts.h
+++ b/src/parser/contexts.h
@@ -589,6 +589,7 @@ struct ParseDeclsCtx : NullTypeParserCtx, NullInstrParserCtx {
std::vector<DefPos> tableDefs;
std::vector<DefPos> memoryDefs;
std::vector<DefPos> globalDefs;
+ std::vector<DefPos> startDefs;
std::vector<DefPos> elemDefs;
std::vector<DefPos> dataDefs;
std::vector<DefPos> tagDefs;
@@ -715,6 +716,14 @@ struct ParseDeclsCtx : NullTypeParserCtx, NullInstrParserCtx {
std::optional<ExprT>,
Index pos);
+ Result<> addStart(FuncIdxT, Index pos) {
+ if (!startDefs.empty()) {
+ return Err{"unexpected extra 'start' function"};
+ }
+ startDefs.push_back({{}, pos, 0});
+ return Ok{};
+ }
+
Result<> addElem(Name, TableIdxT*, std::optional<ExprT>, ElemListT&&, Index);
Result<> addDeclareElem(Name, ElemListT&&, Index) { return Ok{}; }
@@ -1325,6 +1334,11 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
std::optional<ExprT> exp,
Index);
+ Result<> addStart(Name name, Index pos) {
+ wasm.start = name;
+ return Ok{};
+ }
+
Result<> addImplicitElems(Type type, std::vector<Expression*>&& elems);
Result<> addDeclareElem(Name, std::vector<Expression*>&&, Index) {