@@ -13,7 +13,7 @@ extern "C" {
1313
1414namespace sorbet ::parser::Prism {
1515
16- class ProgramNodeContainer ;
16+ class ParseResult ;
1717
1818class ParseError {
1919public:
@@ -51,33 +51,28 @@ struct ParserStorage {
5151};
5252
5353class Parser final {
54- friend class ProgramNodeContainer ;
54+ friend class ParseResult ;
5555 friend struct NodeDeleter ;
5656
5757 std::shared_ptr<ParserStorage> storage;
5858
5959public:
60- std::vector<ParseError> parseErrors;
61-
6260 Parser (std::string_view source_code) : storage(std::make_shared<ParserStorage>(source_code)) {}
6361
6462 Parser (const Parser &) = default ;
6563 Parser &operator =(const Parser &) = default ;
6664
67- ProgramNodeContainer parse_root ();
65+ ParseResult parse_root ();
6866 core::LocOffsets translateLocation (pm_location_t location);
6967 std::string_view resolveConstant (pm_constant_id_t constant_id);
7068 std::string_view extractString (pm_string_t *string);
7169
72- void collectErrors ();
73-
7470private:
71+ std::vector<ParseError> collectErrors ();
7572 pm_parser_t *getRawParserPointer ();
7673};
7774
78- // This class holds a pointer to the parser and a pointer to the root node of Prism's AST
79- // It's main purpose is to provide a way to clean up the AST nodes
80- class ProgramNodeContainer final {
75+ class ParseResult final {
8176 struct NodeDeleter {
8277 Parser parser;
8378
@@ -91,11 +86,13 @@ class ProgramNodeContainer final {
9186
9287 Parser parser;
9388 std::unique_ptr<pm_node_t , NodeDeleter> node;
89+ std::vector<ParseError> parseErrors;
9490
95- ProgramNodeContainer (Parser parser, pm_node_t *node) : parser{parser}, node{node, NodeDeleter{parser}} {}
91+ ParseResult (Parser parser, pm_node_t *node, std::vector<ParseError> parseErrors)
92+ : parser{parser}, node{node, NodeDeleter{parser}}, parseErrors{parseErrors} {}
9693
97- ProgramNodeContainer (const ProgramNodeContainer &) = delete ; // Copy constructor
98- ProgramNodeContainer &operator =(const ProgramNodeContainer &) = delete ; // Copy assignment
94+ ParseResult (const ParseResult &) = delete ; // Copy constructor
95+ ParseResult &operator =(const ParseResult &) = delete ; // Copy assignment
9996
10097 pm_node_t *getRawNodePointer () const {
10198 return node.get ();
0 commit comments