aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/parse/rust-parse.h
diff options
context:
space:
mode:
authorSimplyTheOther <simplytheother@gmail.com>2020-09-12 14:47:58 +0800
committerPhilip Herron <philip.herron@embecosm.com>2020-11-28 21:13:21 +0000
commit2f7007a777bbb3d2fbd29f66b98d71ba6849eab6 (patch)
tree24600d3b090ae5b606f3b69688fa2fb32a351351 /gcc/rust/parse/rust-parse.h
parente0db6e13f05fb197621eca65d275094f2502473f (diff)
downloadgcc-2f7007a777bbb3d2fbd29f66b98d71ba6849eab6.zip
gcc-2f7007a777bbb3d2fbd29f66b98d71ba6849eab6.tar.gz
gcc-2f7007a777bbb3d2fbd29f66b98d71ba6849eab6.tar.bz2
Attempt to fix the ExprWithoutBlock in ExprStmtWithoutBlock issue
First step toward consolidation of similar parsing functions (ComparisonExpr in this case) Debug output for apparent parsing failure Attempt to fix problem with non-digit character after 0 being mistaken as non-decimal int literal Attempt to fix incorrect tokenisation of a dot then a decimal Try new implementation of token splitting rather than token replacing
Diffstat (limited to 'gcc/rust/parse/rust-parse.h')
-rw-r--r--gcc/rust/parse/rust-parse.h84
1 files changed, 44 insertions, 40 deletions
diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h
index 2cf503a..cec0904 100644
--- a/gcc/rust/parse/rust-parse.h
+++ b/gcc/rust/parse/rust-parse.h
@@ -28,7 +28,8 @@ struct ExprOrStmt
// Returns whether this object is in an error state.
bool is_error () const
{
- return (expr == nullptr && stmt == nullptr) || (expr != nullptr && stmt != nullptr);
+ return (expr == nullptr && stmt == nullptr)
+ || (expr != nullptr && stmt != nullptr);
}
// Returns an error state object.
@@ -69,8 +70,7 @@ struct ParseRestrictions
// Parser implementation for gccrs.
// TODO: if updated to C++20, ManagedTokenSource would be useful as a concept
-template <typename ManagedTokenSource>
-class Parser
+template <typename ManagedTokenSource> class Parser
{
private:
void skip_after_semicolon ();
@@ -126,7 +126,7 @@ private:
std::unique_ptr<AST::MacroMatchRepetition> parse_macro_match_repetition ();
// Top-level item-related
- std::vector< std::unique_ptr<AST::Item> > parse_items ();
+ std::vector<std::unique_ptr<AST::Item> > parse_items ();
std::unique_ptr<AST::Item> parse_item (bool called_from_statement);
std::unique_ptr<AST::VisItem>
parse_vis_item (std::vector<AST::Attribute> outer_attrs);
@@ -141,21 +141,18 @@ private:
parse_extern_crate (AST::Visibility vis,
std::vector<AST::Attribute> outer_attrs);
std::unique_ptr<AST::UseDeclaration>
- parse_use_decl (AST::Visibility vis,
- std::vector<AST::Attribute> outer_attrs);
+ parse_use_decl (AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
std::unique_ptr<AST::UseTree> parse_use_tree ();
std::unique_ptr<AST::Function>
- parse_function (AST::Visibility vis,
- std::vector<AST::Attribute> outer_attrs);
+ parse_function (AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
AST::FunctionQualifiers parse_function_qualifiers ();
- std::vector< std::unique_ptr<AST::GenericParam> >
+ std::vector<std::unique_ptr<AST::GenericParam> >
parse_generic_params_in_angles ();
- std::vector< std::unique_ptr<AST::GenericParam> > parse_generic_params ();
- std::vector< std::unique_ptr<AST::LifetimeParam> >
- parse_lifetime_params ();
+ std::vector<std::unique_ptr<AST::GenericParam> > parse_generic_params ();
+ std::vector<std::unique_ptr<AST::LifetimeParam> > parse_lifetime_params ();
std::vector<AST::LifetimeParam> parse_lifetime_params_objs ();
AST::LifetimeParam parse_lifetime_param ();
- std::vector< std::unique_ptr<AST::TypeParam> > parse_type_params ();
+ std::vector<std::unique_ptr<AST::TypeParam> > parse_type_params ();
std::unique_ptr<AST::TypeParam> parse_type_param ();
std::vector<AST::FunctionParam> parse_function_params ();
AST::FunctionParam parse_function_param ();
@@ -167,8 +164,7 @@ private:
std::unique_ptr<AST::TypeBoundWhereClauseItem>
parse_type_bound_where_clause_item ();
std::vector<AST::LifetimeParam> parse_for_lifetimes ();
- std::vector< std::unique_ptr<AST::TypeParamBound> >
- parse_type_param_bounds ();
+ std::vector<std::unique_ptr<AST::TypeParamBound> > parse_type_param_bounds ();
std::unique_ptr<AST::TypeParamBound> parse_type_param_bound ();
std::unique_ptr<AST::TraitBound> parse_trait_bound ();
std::vector<AST::Lifetime> parse_lifetime_bounds ();
@@ -184,7 +180,7 @@ private:
AST::TupleField parse_tuple_field ();
std::unique_ptr<AST::Enum>
parse_enum (AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
- std::vector< std::unique_ptr<AST::EnumItem> > parse_enum_items ();
+ std::vector<std::unique_ptr<AST::EnumItem> > parse_enum_items ();
std::unique_ptr<AST::EnumItem> parse_enum_item ();
std::unique_ptr<AST::Union>
parse_union (AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
@@ -209,8 +205,9 @@ private:
parse_inherent_impl_function_or_method (
AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
std::unique_ptr<AST::TraitImplItem> parse_trait_impl_item ();
- std::unique_ptr<AST::TraitImplItem> parse_trait_impl_function_or_method (
- AST::Visibility vis, std::vector<AST::Attribute> outer_attrs);
+ std::unique_ptr<AST::TraitImplItem>
+ parse_trait_impl_function_or_method (AST::Visibility vis,
+ std::vector<AST::Attribute> outer_attrs);
std::unique_ptr<AST::ExternBlock>
parse_extern_block (AST::Visibility vis,
std::vector<AST::Attribute> outer_attrs);
@@ -219,20 +216,20 @@ private:
AST::Method parse_method ();
// Expression-related (Pratt parsed)
- std::unique_ptr<AST::Expr>
- parse_expr (std::vector<AST::Attribute> outer_attrs
- = std::vector<AST::Attribute> (),
- ParseRestrictions restrictions = ParseRestrictions ());
- std::unique_ptr<AST::Expr>
- parse_expr (int right_binding_power,
- std::vector<AST::Attribute> outer_attrs
- = std::vector<AST::Attribute> (),
- ParseRestrictions restrictions = ParseRestrictions ());
+ std::unique_ptr<AST::Expr> parse_expr (std::vector<AST::Attribute> outer_attrs
+ = std::vector<AST::Attribute> (),
+ ParseRestrictions restrictions
+ = ParseRestrictions ());
+ std::unique_ptr<AST::Expr> parse_expr (int right_binding_power,
+ std::vector<AST::Attribute> outer_attrs
+ = std::vector<AST::Attribute> (),
+ ParseRestrictions restrictions
+ = ParseRestrictions ());
std::unique_ptr<AST::Expr>
null_denotation (const_TokenPtr t,
- std::vector<AST::Attribute> outer_attrs
- = std::vector<AST::Attribute> (),
- ParseRestrictions restrictions = ParseRestrictions ());
+ std::vector<AST::Attribute> outer_attrs
+ = std::vector<AST::Attribute> (),
+ ParseRestrictions restrictions = ParseRestrictions ());
std::unique_ptr<AST::Expr>
left_denotation (const_TokenPtr t, std::unique_ptr<AST::Expr> left,
std::vector<AST::Attribute> outer_attrs
@@ -243,10 +240,11 @@ private:
std::vector<AST::Attribute> outer_attrs,
ParseRestrictions restrictions
= ParseRestrictions ());
- std::unique_ptr<AST::ArithmeticOrLogicalExpr> parse_binary_minus_expr (
- const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
- std::vector<AST::Attribute> outer_attrs,
- ParseRestrictions restrictions = ParseRestrictions ());
+ std::unique_ptr<AST::ArithmeticOrLogicalExpr>
+ parse_binary_minus_expr (const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
+ std::vector<AST::Attribute> outer_attrs,
+ ParseRestrictions restrictions
+ = ParseRestrictions ());
std::unique_ptr<AST::ArithmeticOrLogicalExpr>
parse_binary_mult_expr (const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
std::vector<AST::Attribute> outer_attrs,
@@ -283,10 +281,16 @@ private:
std::vector<AST::Attribute> outer_attrs,
ParseRestrictions restrictions
= ParseRestrictions ());
- std::unique_ptr<AST::ComparisonExpr> parse_binary_equal_expr (
- const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
- std::vector<AST::Attribute> outer_attrs,
- ParseRestrictions restrictions = ParseRestrictions ());
+ std::unique_ptr<AST::ComparisonExpr>
+ parse_comparison_expr (const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
+ std::vector<AST::Attribute> outer_attrs,
+ AST::ComparisonExpr::ExprType expr_type,
+ ParseRestrictions restrictions = ParseRestrictions ());
+ std::unique_ptr<AST::ComparisonExpr>
+ parse_binary_equal_expr (const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
+ std::vector<AST::Attribute> outer_attrs,
+ ParseRestrictions restrictions
+ = ParseRestrictions ());
std::unique_ptr<AST::ComparisonExpr> parse_binary_not_equal_expr (
const_TokenPtr tok, std::unique_ptr<AST::Expr> left,
std::vector<AST::Attribute> outer_attrs,
@@ -457,7 +461,7 @@ private:
= std::vector<AST::Attribute> (),
bool pratt_parse = false);
AST::MatchArm parse_match_arm ();
- std::vector< std::unique_ptr<AST::Pattern> >
+ std::vector<std::unique_ptr<AST::Pattern> >
parse_match_arm_patterns (TokenId end_token_id);
std::unique_ptr<AST::BaseLoopExpr>
parse_labelled_loop_expr (std::vector<AST::Attribute> outer_attrs
@@ -551,7 +555,7 @@ private:
public:
// Construct parser with specified "managed" token source.
- Parser (ManagedTokenSource tokenSource) : lexer (std::move(tokenSource)) {}
+ Parser (ManagedTokenSource tokenSource) : lexer (std::move (tokenSource)) {}
// Main entry point for parser.
AST::Crate parse_crate ();