From 0fe05b19eb01c65fedbaee8e102c4f7aa0e5fdda Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Tue, 19 Sep 2023 11:08:58 -0700 Subject: [NFC] Split the new wat parser into multiple files (#5960) And put the new files in a new source directory, "parser". This is a rough split and is not yet expected to dramatically improve compile times. The exact organization of the new files is subject to change, but this splitting should be enough to make further parser development more pleasant. --- src/parser/input.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/parser/input.h (limited to 'src/parser/input.h') diff --git a/src/parser/input.h b/src/parser/input.h new file mode 100644 index 000000000..5c7c57d20 --- /dev/null +++ b/src/parser/input.h @@ -0,0 +1,75 @@ +/* + * Copyright 2023 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 parser_input_h +#define parser_input_h + +#include "lexer.h" +#include "support/result.h" +#include "wasm.h" + +namespace wasm::WATParser { + +using namespace std::string_view_literals; + +// Wraps a lexer and provides utilities for consuming tokens. +struct ParseInput { + Lexer lexer; + + explicit ParseInput(std::string_view in) : lexer(in) {} + + ParseInput(std::string_view in, size_t index) : lexer(in) { + lexer.setIndex(index); + } + + ParseInput(const ParseInput& other, size_t index) : lexer(other.lexer) { + lexer.setIndex(index); + } + + bool empty() { return lexer.empty(); } + + std::optional peek(); + bool takeLParen(); + bool takeRParen(); + bool takeUntilParen(); + std::optional takeID(); + std::optional takeKeyword(); + bool takeKeyword(std::string_view expected); + std::optional takeOffset(); + std::optional takeAlign(); + std::optional takeU64(); + std::optional takeS64(); + std::optional takeI64(); + std::optional takeU32(); + std::optional takeS32(); + std::optional takeI32(); + std::optional takeU8(); + std::optional takeF64(); + std::optional takeF32(); + std::optional takeString(); + std::optional takeName(); + bool takeSExprStart(std::string_view expected); + + Index getPos(); + [[nodiscard]] Err err(Index pos, std::string reason); + [[nodiscard]] Err err(std::string reason) { return err(getPos(), reason); } +}; + +#include "input-impl.h" + +} // namespace wasm::WATParser + +#endif // parser_input_h -- cgit v1.2.3