From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/frontend/EitherParser.h | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 js/src/frontend/EitherParser.h (limited to 'js/src/frontend/EitherParser.h') diff --git a/js/src/frontend/EitherParser.h b/js/src/frontend/EitherParser.h new file mode 100644 index 0000000000..c085c0fe8a --- /dev/null +++ b/js/src/frontend/EitherParser.h @@ -0,0 +1,59 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * A variant-like class abstracting operations on a Parser with a given + * ParseHandler but unspecified character type. + */ + +#ifndef frontend_EitherParser_h +#define frontend_EitherParser_h + +#include "mozilla/Utf8.h" +#include "mozilla/Variant.h" + +#include +#include + +#include "frontend/Parser.h" +#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin + +namespace js::frontend { + +class EitherParser final { + // Leave this as a variant, to promote good form until 8-bit parser + // integration. + mozilla::Variant* const, + Parser* const> + parser; + + public: + template + explicit EitherParser(Parser* parser) : parser(parser) {} + + const ErrorReporter& errorReporter() const { + return parser.match([](auto* parser) -> const frontend::ErrorReporter& { + return parser->tokenStream; + }); + } + + void computeLineAndColumn(uint32_t offset, uint32_t* line, + JS::LimitedColumnNumberOneOrigin* column) const { + return parser.match([offset, line, column](auto* parser) -> void { + parser->tokenStream.computeLineAndColumn(offset, line, column); + }); + } + + ParserAtomsTable& parserAtoms() { + auto& base = parser.match( + [](auto* parser) -> frontend::ParserSharedBase& { return *parser; }); + return base.parserAtoms(); + } +}; + +} /* namespace js::frontend */ + +#endif /* frontend_EitherParser_h */ -- cgit v1.2.3