Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
255 changes: 0 additions & 255 deletions src/parser/input-impl.h

This file was deleted.

69 changes: 38 additions & 31 deletions src/parser/input.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,40 +41,47 @@ struct ParseInput {

bool empty() { return lexer.empty(); }

std::optional<Token> peek();
bool takeLParen();
bool takeRParen();
bool takeUntilParen();
std::optional<Name> takeID();
std::optional<std::string_view> takeKeyword();
bool takeKeyword(std::string_view expected);
std::optional<uint64_t> takeOffset();
std::optional<uint32_t> takeAlign();
std::optional<uint64_t> takeU64();
std::optional<uint64_t> takeI64();
std::optional<uint32_t> takeU32();
std::optional<uint32_t> takeI32();
std::optional<uint16_t> takeI16();
std::optional<uint8_t> takeU8();
std::optional<uint8_t> takeI8();
std::optional<double> takeF64();
std::optional<float> takeF32();
std::optional<std::string> takeString();
std::optional<Name> takeName();
bool takeSExprStart(std::string_view expected);
bool peekSExprStart(std::string_view expected);
// TODO: Remove this useless layer of abstraction between the Lexer and
// Parser.
std::optional<Token> peek() { return lexer.peek(); }
bool takeLParen() { return lexer.takeLParen(); }
bool takeRParen() { return lexer.takeRParen(); }
bool takeUntilParen() { return lexer.takeUntilParen(); }
std::optional<Name> takeID() { return lexer.takeID(); }
std::optional<std::string_view> takeKeyword() { return lexer.takeKeyword(); }
bool takeKeyword(std::string_view expected) {
return lexer.takeKeyword(expected);
}
std::optional<uint64_t> takeOffset() { return lexer.takeOffset(); }
std::optional<uint32_t> takeAlign() { return lexer.takeAlign(); }
std::optional<uint64_t> takeU64() { return lexer.takeU64(); }
std::optional<uint64_t> takeI64() { return lexer.takeI64(); }
std::optional<uint32_t> takeU32() { return lexer.takeU32(); }
std::optional<uint32_t> takeI32() { return lexer.takeI32(); }
std::optional<uint16_t> takeI16() { return lexer.takeI16(); }
std::optional<uint8_t> takeU8() { return lexer.takeU8(); }
std::optional<uint8_t> takeI8() { return lexer.takeI8(); }
std::optional<double> takeF64() { return lexer.takeF64(); }
std::optional<float> takeF32() { return lexer.takeF32(); }
std::optional<std::string> takeString() { return lexer.takeString(); }
std::optional<Name> takeName() { return lexer.takeName(); }
bool takeSExprStart(std::string_view expected) {
return lexer.takeSExprStart(expected);
}
bool peekSExprStart(std::string_view expected) {
return lexer.peekSExprStart(expected);
}

Index getPos();
[[nodiscard]] Err err(Index pos, std::string reason);
[[nodiscard]] Err err(std::string reason) { return err(getPos(), reason); }
Index getPos() { return lexer.getPos(); }

private:
template<typename T> std::optional<T> takeU();
template<typename T> std::optional<T> takeS();
template<typename T> std::optional<T> takeI();
};
[[nodiscard]] Err err(Index pos, std::string reason) {
std::stringstream msg;
msg << lexer.position(pos) << ": error: " << reason;
return Err{msg.str()};
}

#include "input-impl.h"
[[nodiscard]] Err err(std::string reason) { return err(getPos(), reason); }
};

} // namespace wasm::WATParser

Expand Down
Loading