diff options
author | SimplyTheOther <simplytheother@gmail.com> | 2020-09-12 14:47:58 +0800 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2020-11-28 21:13:21 +0000 |
commit | 2f7007a777bbb3d2fbd29f66b98d71ba6849eab6 (patch) | |
tree | 24600d3b090ae5b606f3b69688fa2fb32a351351 /gcc/rust/parse/rust-parse.h | |
parent | e0db6e13f05fb197621eca65d275094f2502473f (diff) | |
download | gcc-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.h | 84 |
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 (); |