From f9e5e530391d9a98b7c965b79bebf305d2630ad7 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 26 Aug 2021 01:36:09 +0200 Subject: Get rid of get_locus_slow In various places there was the following hack: /* HACK: slow way of getting location from base expression through virtual methods. */ virtual Location get_locus_slow () const { return Location (); } The problem with get_locus_slow () is that if a subclass didn't override it then there was no real location. get_locus_slow was missing for Module, ExternCrate, UseDeclaration, Function, TypeAlias, StructStruct, TupleStruct, Enum, Union, ConstantItem, StaticItem, Trait, ImplBlock, ExternBlock, EmptyStmt, ExprStmtWithoutBlock and ExprStmtWithBlock. All do have a get_locus () function. Simply replace the get_locus_slow virtual method with a real virtual Location get_locus () const = 0 method so we know if something really doesn't have a location. This was only the case for MacroRulesDefinition. --- gcc/rust/parse/rust-parse-impl.h | 88 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 44 deletions(-) (limited to 'gcc/rust/parse/rust-parse-impl.h') diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index fa6d409..8ee9e42 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -11431,7 +11431,7 @@ Parser::parse_stmt_or_expr_with_block ( return ExprOrStmt (std::move (expr)); // internal block expr must either have semicolons followed, or evaluate to () - auto locus = expr->get_locus_slow (); + auto locus = expr->get_locus (); std::unique_ptr stmt ( new AST::ExprStmtWithBlock (std::move (expr), locus, tok->get_id () == SEMICOLON)); @@ -12823,7 +12823,7 @@ Parser::left_denotation (const_TokenPtr tok, { // FIXME: allow for outer attributes to be applied case QUESTION_MARK: { - Location left_locus = left->get_locus_slow (); + Location left_locus = left->get_locus (); // error propagation expression - unary postfix return std::unique_ptr ( new AST::ErrorPropagationExpr (std::move (left), @@ -13185,7 +13185,7 @@ Parser::parse_arithmetic_or_logical_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13206,7 +13206,7 @@ Parser::parse_binary_plus_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13227,7 +13227,7 @@ Parser::parse_binary_minus_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13249,7 +13249,7 @@ Parser::parse_binary_mult_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13271,7 +13271,7 @@ Parser::parse_binary_div_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13293,7 +13293,7 @@ Parser::parse_binary_mod_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13316,7 +13316,7 @@ Parser::parse_bitwise_and_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13339,7 +13339,7 @@ Parser::parse_bitwise_or_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13362,7 +13362,7 @@ Parser::parse_bitwise_xor_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13384,7 +13384,7 @@ Parser::parse_left_shift_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13406,7 +13406,7 @@ Parser::parse_right_shift_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ArithmeticOrLogicalExpr (std::move (left), std::move (right), @@ -13458,7 +13458,7 @@ Parser::parse_comparison_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), expr_type, @@ -13479,7 +13479,7 @@ Parser::parse_binary_equal_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13500,7 +13500,7 @@ Parser::parse_binary_not_equal_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13521,7 +13521,7 @@ Parser::parse_binary_greater_than_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13542,7 +13542,7 @@ Parser::parse_binary_less_than_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13563,7 +13563,7 @@ Parser::parse_binary_greater_equal_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13584,7 +13584,7 @@ Parser::parse_binary_less_equal_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::ComparisonExpr (std::move (left), std::move (right), @@ -13605,7 +13605,7 @@ Parser::parse_lazy_or_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::LazyBooleanExpr (std::move (left), std::move (right), @@ -13626,7 +13626,7 @@ Parser::parse_lazy_and_expr ( return nullptr; // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::LazyBooleanExpr (std::move (left), std::move (right), @@ -13648,7 +13648,7 @@ Parser::parse_type_cast_expr ( // FIXME: how do I get precedence put in here? // TODO: check types. actually, do so during semantic analysis - Location locus = expr_to_cast->get_locus_slow (); + Location locus = expr_to_cast->get_locus (); return std::unique_ptr ( new AST::TypeCastExpr (std::move (expr_to_cast), std::move (type), locus)); @@ -13669,7 +13669,7 @@ Parser::parse_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::AssignmentExpr (std::move (left), std::move (right), locus)); @@ -13728,7 +13728,7 @@ Parser::parse_compound_assignment_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13750,7 +13750,7 @@ Parser::parse_plus_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13772,7 +13772,7 @@ Parser::parse_minus_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13795,7 +13795,7 @@ Parser::parse_mult_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13818,7 +13818,7 @@ Parser::parse_div_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13841,7 +13841,7 @@ Parser::parse_mod_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13864,7 +13864,7 @@ Parser::parse_and_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13887,7 +13887,7 @@ Parser::parse_or_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13910,7 +13910,7 @@ Parser::parse_xor_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13933,7 +13933,7 @@ Parser::parse_left_shift_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13956,7 +13956,7 @@ Parser::parse_right_shift_assig_expr ( // FIXME: ensure right-associativity for this - 'LBP - 1' may do this? // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::CompoundAssignmentExpr (std::move (left), std::move (right), @@ -13985,7 +13985,7 @@ Parser::parse_await_expr ( } // TODO: check inside async block in semantic analysis - Location locus = expr_to_await->get_locus_slow (); + Location locus = expr_to_await->get_locus (); return std::unique_ptr ( new AST::AwaitExpr (std::move (expr_to_await), std::move (outer_attrs), @@ -14008,7 +14008,7 @@ Parser::parse_led_range_exclusive_expr ( std::unique_ptr right = parse_expr (LBP_DOT_DOT, AST::AttrVec (), restrictions); - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); if (right == nullptr) { @@ -14066,7 +14066,7 @@ Parser::parse_range_inclusive_expr ( // FIXME: make non-associative // TODO: check types. actually, do so during semantic analysis - Location locus = left->get_locus_slow (); + Location locus = left->get_locus (); return std::unique_ptr ( new AST::RangeFromToInclExpr (std::move (left), std::move (right), locus)); @@ -14114,7 +14114,7 @@ Parser::parse_tuple_index_expr ( } int index_int = atoi (index.c_str ()); - Location locus = tuple_expr->get_locus_slow (); + Location locus = tuple_expr->get_locus (); return std::unique_ptr ( new AST::TupleIndexExpr (std::move (tuple_expr), index_int, @@ -14145,7 +14145,7 @@ Parser::parse_index_expr ( } // TODO: check types. actually, do so during semantic analysis - Location locus = array_expr->get_locus_slow (); + Location locus = array_expr->get_locus (); return std::unique_ptr ( new AST::ArrayIndexExpr (std::move (array_expr), std::move (index_expr), @@ -14167,7 +14167,7 @@ Parser::parse_field_access_expr ( Identifier ident = ident_tok->get_str (); - Location locus = struct_expr->get_locus_slow (); + Location locus = struct_expr->get_locus (); // TODO: check types. actually, do so during semantic analysis return std::unique_ptr ( @@ -14230,7 +14230,7 @@ Parser::parse_method_call_expr ( } // TODO: check types. actually do so in semantic analysis pass. - Location locus = receiver_expr->get_locus_slow (); + Location locus = receiver_expr->get_locus (); return std::unique_ptr ( new AST::MethodCallExpr (std::move (receiver_expr), std::move (segment), @@ -14277,7 +14277,7 @@ Parser::parse_function_call_expr ( } // TODO: check types. actually, do so during semantic analysis - Location locus = function_expr->get_locus_slow (); + Location locus = function_expr->get_locus (); return std::unique_ptr ( new AST::CallExpr (std::move (function_expr), std::move (params), @@ -14772,7 +14772,7 @@ Parser::parse_tuple_index_expr_float ( // get int from string int index = atoi (index_str.c_str ()); - Location locus = tuple_expr->get_locus_slow (); + Location locus = tuple_expr->get_locus (); return std::unique_ptr ( new AST::TupleIndexExpr (std::move (tuple_expr), index, -- cgit v1.1