summaryrefslogtreecommitdiff
path: root/src/wasm-ast-parser-lexer-shared.h
diff options
context:
space:
mode:
authorBen Smith <binji@chromium.org>2016-04-28 21:26:51 -0700
committerBen Smith <binji@chromium.org>2016-04-28 21:58:25 -0700
commit98729df534b55d495d0040266daaaf96ed41b9f9 (patch)
tree5c94244240665db55ad7442fe8cf162cfcd08fce /src/wasm-ast-parser-lexer-shared.h
parent8ef2f014f80ad118c901db4c65d4feb0baf878da (diff)
downloadwabt-98729df534b55d495d0040266daaaf96ed41b9f9.tar.gz
wabt-98729df534b55d495d0040266daaaf96ed41b9f9.tar.bz2
wabt-98729df534b55d495d0040266daaaf96ed41b9f9.zip
rename Lexer -> AstLexer, Parser -> AstParser
This matches other files, and will be nicer if other lexers/parsers are added. Also remove some references to flex, and the flex lexer.
Diffstat (limited to 'src/wasm-ast-parser-lexer-shared.h')
-rw-r--r--src/wasm-ast-parser-lexer-shared.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/wasm-ast-parser-lexer-shared.h b/src/wasm-ast-parser-lexer-shared.h
new file mode 100644
index 00000000..9b891e26
--- /dev/null
+++ b/src/wasm-ast-parser-lexer-shared.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WASM_AST_PARSER_LEXER_SHARED_H_
+#define WASM_AST_PARSER_LEXER_SHARED_H_
+
+#include <stdarg.h>
+
+#include "wasm-ast.h"
+#include "wasm-ast-lexer.h"
+#include "wasm-common.h"
+
+#define WASM_AST_PARSER_STYPE WasmToken
+#define WASM_AST_PARSER_LTYPE WasmLocation
+#define YYSTYPE WASM_AST_PARSER_STYPE
+#define YYLTYPE WASM_AST_PARSER_LTYPE
+
+#define WASM_INVALID_LINE_OFFSET ((size_t)~0)
+
+struct WasmAllocator;
+
+typedef union WasmToken {
+ /* terminals */
+ WasmStringSlice text;
+ WasmType type;
+ WasmOpcode opcode;
+ WasmLiteral literal;
+
+ /* non-terminals */
+ /* some of these use pointers to keep the size of WasmToken down; copying the
+ tokens is a hotspot when parsing large files. */
+ uint32_t u32;
+ uint64_t u64;
+ WasmTypeVector types;
+ WasmVar var;
+ WasmVarVector vars;
+ WasmExprPtr expr;
+ WasmExprPtrVector exprs;
+ WasmFuncField* func_fields;
+ WasmFunc* func;
+ WasmSegment segment;
+ WasmSegmentVector segments;
+ WasmMemory memory;
+ WasmFuncSignature func_sig;
+ WasmFuncType func_type;
+ WasmImport* import;
+ WasmExport export_;
+ WasmExportMemory export_memory;
+ WasmModule* module;
+ WasmConst const_;
+ WasmConstVector consts;
+ WasmCommand* command;
+ WasmCommandVector commands;
+ WasmScript script;
+} WasmToken;
+
+typedef struct WasmAstParser {
+ struct WasmAllocator* allocator;
+ WasmScript script;
+ WasmSourceErrorHandler* error_handler;
+ int errors;
+} WasmAstParser;
+
+WASM_EXTERN_C_BEGIN
+struct WasmAllocator* wasm_ast_lexer_get_allocator(WasmAstLexer* lexer);
+int wasm_ast_lexer_lex(union WasmToken*,
+ struct WasmLocation*,
+ WasmAstLexer*,
+ struct WasmAstParser*);
+WasmResult wasm_ast_lexer_get_source_line(WasmAstLexer*,
+ const struct WasmLocation*,
+ size_t line_max_length,
+ char* line,
+ size_t* out_line_length,
+ int* out_column_offset);
+void WASM_PRINTF_FORMAT(4, 5) wasm_ast_parser_error(struct WasmLocation*,
+ WasmAstLexer*,
+ struct WasmAstParser*,
+ const char*,
+ ...);
+void wasm_ast_format_error(WasmSourceErrorHandler*,
+ const struct WasmLocation*,
+ WasmAstLexer*,
+ const char* format,
+ va_list);
+WASM_EXTERN_C_END
+
+#endif /* WASM_AST_PARSER_LEXER_SHARED_H_ */