aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/parse/rust-parse-impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/parse/rust-parse-impl.h')
-rw-r--r--gcc/rust/parse/rust-parse-impl.h56
1 files changed, 18 insertions, 38 deletions
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 596a682..ccfff84 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -388,15 +388,12 @@ Parser<ManagedTokenSource>::done_end_of_file ()
return lexer.peek_token ()->get_id () == END_OF_FILE;
}
-// Parses a crate (compilation unit) - entry point
+// Parses a sequence of items within a module or the implicit top-level module
+// in a crate
template <typename ManagedTokenSource>
-AST::Crate
-Parser<ManagedTokenSource>::parse_crate ()
+std::vector<std::unique_ptr<AST::Item>>
+Parser<ManagedTokenSource>::parse_items ()
{
- // parse inner attributes
- AST::AttrVec inner_attrs = parse_inner_attributes ();
-
- // parse items
std::vector<std::unique_ptr<AST::Item>> items;
const_TokenPtr t = lexer.peek_token ();
@@ -419,6 +416,20 @@ Parser<ManagedTokenSource>::parse_crate ()
t = lexer.peek_token ();
}
+ return items;
+}
+
+// Parses a crate (compilation unit) - entry point
+template <typename ManagedTokenSource>
+AST::Crate
+Parser<ManagedTokenSource>::parse_crate ()
+{
+ // parse inner attributes
+ AST::AttrVec inner_attrs = parse_inner_attributes ();
+
+ // parse items
+ std::vector<std::unique_ptr<AST::Item>> items = parse_items ();
+
// emit all errors
for (const auto &error : error_table)
error.emit_error ();
@@ -992,37 +1003,6 @@ Parser<ManagedTokenSource>::parse_token_tree ()
}
}
-/* Parses a sequence of items within a module or the implicit top-level module
- * in a crate. Note: this is not currently used as parsing an item sequence
- * individually is pretty simple and allows for better error diagnostics and
- * detection. */
-template <typename ManagedTokenSource>
-std::vector<std::unique_ptr<AST::Item>>
-Parser<ManagedTokenSource>::parse_items ()
-{
- std::vector<std::unique_ptr<AST::Item>> items;
-
- // TODO: replace with do-while loop?
- // infinite loop to save on comparisons (may be a tight loop) - breaks when
- // next item is null
- while (true)
- {
- std::unique_ptr<AST::Item> item = parse_item (false);
-
- if (item != nullptr)
- {
- items.push_back (std::move (item));
- }
- else
- {
- break;
- }
- }
-
- items.shrink_to_fit ();
- return items;
-}
-
// Parses a single item
template <typename ManagedTokenSource>
std::unique_ptr<AST::Item>