diff --git a/main/pipeline/pipeline.cc b/main/pipeline/pipeline.cc index 7d4e699ec21..042331475f4 100644 --- a/main/pipeline/pipeline.cc +++ b/main/pipeline/pipeline.cc @@ -138,7 +138,7 @@ unique_ptr runPrismParser(core::GlobalState &gs, core::FileRef fil core::UnfreezeNameTable nameTableAccess(gs); Prism::Parser parser{source}; - Prism::Node root = parser.parse_root(); + Prism::ProgramNodeContainer root = parser.parse_root(); if (stopAfterParser) { return std::unique_ptr(); diff --git a/parser/prism/Parser.cc b/parser/prism/Parser.cc index ef6d0d8cb68..4ca890c3237 100644 --- a/parser/prism/Parser.cc +++ b/parser/prism/Parser.cc @@ -6,9 +6,9 @@ pm_parser_t *Parser::getRawParserPointer() { return &storage->parser; } -Node Parser::parse_root() { +ProgramNodeContainer Parser::parse_root() { pm_node_t *root = pm_parse(getRawParserPointer()); - return Node{*this, root}; + return ProgramNodeContainer{*this, root}; }; core::LocOffsets Parser::translateLocation(pm_location_t location) { diff --git a/parser/prism/Parser.h b/parser/prism/Parser.h index 6c8a44f7845..40a146d7d11 100644 --- a/parser/prism/Parser.h +++ b/parser/prism/Parser.h @@ -13,7 +13,7 @@ extern "C" { namespace sorbet::parser::Prism { -class Node; +class ProgramNodeContainer; class ParseError { public: @@ -51,7 +51,7 @@ struct ParserStorage { }; class Parser final { - friend class Node; + friend class ProgramNodeContainer; friend struct NodeDeleter; std::shared_ptr storage; @@ -64,7 +64,7 @@ class Parser final { Parser(const Parser &) = default; Parser &operator=(const Parser &) = default; - Node parse_root(); + ProgramNodeContainer parse_root(); core::LocOffsets translateLocation(pm_location_t location); std::string_view resolveConstant(pm_constant_id_t constant_id); std::string_view extractString(pm_string_t *string); @@ -75,7 +75,9 @@ class Parser final { pm_parser_t *getRawParserPointer(); }; -class Node final { +// This class holds a pointer to the parser and a pointer to the root node of Prism's AST +// It's main purpose is to provide a way to clean up the AST nodes +class ProgramNodeContainer final { struct NodeDeleter { Parser parser; @@ -90,10 +92,10 @@ class Node final { Parser parser; std::unique_ptr node; - Node(Parser parser, pm_node_t *node) : parser{parser}, node{node, NodeDeleter{parser}} {} + ProgramNodeContainer(Parser parser, pm_node_t *node) : parser{parser}, node{node, NodeDeleter{parser}} {} - Node(const Node &) = delete; // Copy constructor - Node &operator=(const Node &) = delete; // Copy assignment + ProgramNodeContainer(const ProgramNodeContainer &) = delete; // Copy constructor + ProgramNodeContainer &operator=(const ProgramNodeContainer &) = delete; // Copy assignment pm_node_t *getRawNodePointer() const { return node.get(); diff --git a/parser/prism/Translator.cc b/parser/prism/Translator.cc index ae473a05efb..9f31dc3ebd5 100644 --- a/parser/prism/Translator.cc +++ b/parser/prism/Translator.cc @@ -1350,8 +1350,8 @@ unique_ptr Translator::translate(pm_node_t *node) { } } -unique_ptr Translator::translate(const Node &node) { - return translate(node.getRawNodePointer()); +unique_ptr Translator::translate(const ProgramNodeContainer &container) { + return translate(container.getRawNodePointer()); } core::LocOffsets Translator::translateLoc(pm_location_t loc) { diff --git a/parser/prism/Translator.h b/parser/prism/Translator.h index 8d26f27e1de..7d279ade37b 100644 --- a/parser/prism/Translator.h +++ b/parser/prism/Translator.h @@ -47,7 +47,7 @@ class Translator final { // Translates the given AST from Prism's node types into the equivalent AST in Sorbet's legacy parser node types. std::unique_ptr translate(pm_node_t *node); - std::unique_ptr translate(const Node &node); + std::unique_ptr translate(const ProgramNodeContainer &container); private: // Private constructor used only for creating child translators