From d5723ccebbf62ed4546c5e2b2141b274585dd64c Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Tue, 27 Jun 2023 11:22:00 +0200 Subject: ast: Change Identifier definition Change Identifier type definition from a simple typedef to a whole class with it's own node id. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Change with call to getter. * ast/rust-ast.cc (Module::as_string): Likewise. (StaticItem::as_string): Likewise. (TupleStruct::as_string): Likewise. (Method::as_string): Likewise. (StructStruct::as_string): Likewise. (UseTreeRebind::as_string): Likewise. (Enum::as_string): Likewise. (Trait::as_string): Likewise. (Union::as_string): Likewise. (Function::as_string): Likewise. (TypeAlias::as_string): Likewise. (MacroRulesDefinition::as_string): Likewise. (FieldAccessExpr::as_string): Likewise. (MacroMatchFragment::as_string): Likewise. (TypeParam::as_string): Likewise. (StructExprFieldIdentifierValue::as_string): Likewise. (EnumItem::as_string): Likewise. (StructField::as_string): Likewise. (ExternalTypeItem::as_string): Likewise. (ExternalStaticItem::as_string): Likewise. (ExternalFunctionItem::as_string): Likewise. (TraitFunctionDecl::as_string): Likewise. (TraitMethodDecl::as_string): Likewise. (TraitItemConst::as_string): Likewise. (TraitItemType::as_string): Likewise. (MaybeNamedParam::as_string): Likewise. (MetaListPaths::as_string): Likewise. (MetaListNameValueStr::as_string): Likewise. (Module::process_file_path): Likewise. (MetaListNameValueStr::check_cfg_predicate): Likewise. (MetaListPaths::check_cfg_predicate): Likewise. (MetaWord::check_cfg_predicate): Likewise. (MetaNameValueStr::check_cfg_predicate): Likewise. (MetaNameValueStr::to_attribute): Likewise. (MetaWord::to_attribute): Likewise. (MetaListPaths::to_attribute): Likewise. (MetaListNameValueStr::to_attribute): Likewise. (operator<<): Change Identifier class << operator overload for standard output stream. * ast/rust-ast.h (class Identifier): Change typedef to proper class definition. (operator<<): Add prototype for operator overload. (class Token): Change getter identifier. (class MetaListNameValueStr): Likewise. (class PathExpr): Likewise. * ast/rust-expr.h: Likewise. * ast/rust-item.h: Likewise. * ast/rust-macro.h: Likewise. * ast/rust-path.cc (GenericArg::disambiguate_to_type): Likewise. (GenericArgsBinding::as_string): Likewise. (ConstGenericParam::as_string): Likewise. * ast/rust-path.h: Likewise. * ast/rust-pattern.cc (IdentifierPattern::as_string): Likewise. (StructPatternFieldIdentPat::as_string): Likewise. (StructPatternFieldIdent::as_string): Likewise. * ast/rust-type.h: Likewise. * backend/rust-compile-base.cc: Likewise. * backend/rust-compile-expr.cc (CompileExpr::visit): Likewise. * backend/rust-compile-extern.h: Likewise. * backend/rust-compile-fnparam.cc (CompileFnParam::visit): Likewise. * backend/rust-compile-implitem.cc (CompileTraitItem::visit): Likewise. * backend/rust-compile-item.cc (CompileItem::visit): Likewise. * backend/rust-compile-pattern.cc (CompilePatternBindings::visit): Likewise. * backend/rust-compile-struct-field-expr.cc (CompileStructExprField::visit): Likewise. * backend/rust-compile-var-decl.h: Likewise. * backend/rust-compile.cc: Likewise. * checks/errors/rust-unsafe-checker.cc (check_extern_call): Likewise. * checks/lints/rust-lint-marklive.cc (MarkLive::visit): Likewise. * checks/lints/rust-lint-scan-deadcode.h: Likewise. * expand/rust-derive-clone.cc (DeriveClone::clone_fn): Likewise. (DeriveClone::visit_tuple): Likewise. (DeriveClone::visit_struct): Likewise. (DeriveClone::visit_union): Likewise. * expand/rust-derive-copy.cc (DeriveCopy::visit_struct): Likewise. (DeriveCopy::visit_tuple): Likewise. (DeriveCopy::visit_enum): Likewise. (DeriveCopy::visit_union): Likewise. * expand/rust-macro-expand.cc (MacroExpander::match_matcher): Likewise. (MacroExpander::match_n_matches): Likewise. (MacroExpander::match_repetition): Likewise. (MacroExpander::match_repetition_skipped_metavars): Likewise. * hir/rust-ast-lower-base.cc (struct_field_name_exists): Likewise. * hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise. * hir/rust-ast-lower-type.cc (ASTLowerGenericParam::visit): Likewise. * hir/rust-hir-dump.cc (Dump::visit): Likewise. * hir/tree/rust-hir-expr.h: Likewise. * hir/tree/rust-hir-item.h: Likewise. * hir/tree/rust-hir-path.h: Likewise. * hir/tree/rust-hir-type.h: Likewise. * hir/tree/rust-hir.cc (Module::as_string): Likewise. (StaticItem::as_string): Likewise. (TupleStruct::as_string): Likewise. (ConstantItem::as_string): Likewise. (StructStruct::as_string): Likewise. (UseTreeRebind::as_string): Likewise. (Enum::as_string): Likewise. (Trait::as_string): Likewise. (Union::as_string): Likewise. (Function::as_string): Likewise. (TypeAlias::as_string): Likewise. (FieldAccessExpr::as_string): Likewise. (TypeParam::as_string): Likewise. (GenericArgsBinding::as_string): Likewise. (StructPatternFieldIdent::as_string): Likewise. (StructPatternFieldIdentPat::as_string): Likewise. (IdentifierPattern::as_string): Likewise. (StructExprFieldIdentifierValue::as_string): Likewise. (EnumItem::as_string): Likewise. (StructField::as_string): Likewise. (ExternalStaticItem::as_string): Likewise. (ExternalFunctionItem::as_string): Likewise. (NamedFunctionParam::as_string): Likewise. (TraitFunctionDecl::as_string): Likewise. (TraitItemConst::as_string): Likewise. (TraitItemType::as_string): Likewise. (MaybeNamedParam::as_string): Likewise. * hir/tree/rust-hir.h: Likewise. * parse/rust-parse-impl.h (Parser::parse_macro_match_fragment): Likewise. (Parser::parse_module): Likewise. (Parser::parse_use_tree): Likewise. (Parser::parse_maybe_named_param): Likewise. * resolve/rust-ast-resolve-implitem.h: Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. (ResolveItem::visit): Likewise. (flatten_rebind): Likewise. (ResolveExternItem::visit): Likewise. (rust_flatten_rebind): Likewise. (rust_flatten_rebind_nested): Likewise. * resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::go): Likewise. (PatternDeclaration::visit): Likewise. (PatternDeclaration::add_new_binding): Likewise. * resolve/rust-ast-resolve-stmt.h: Likewise. * resolve/rust-ast-resolve-toplevel.h: Likewise. * resolve/rust-ast-resolve-type.h: Likewise. * resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit): Likewise. * typecheck/rust-autoderef.cc: Likewise. * typecheck/rust-hir-dot-operator.cc (MethodResolver::select): Likewise. * typecheck/rust-hir-path-probe.cc (PathProbeType::visit): Likewise. * typecheck/rust-hir-trait-reference.cc (TraitReference::get_name): Likewise. * typecheck/rust-hir-trait-resolve.cc (ResolveTraitItemToRef::visit): Likewise. (TraitResolver::resolve_trait): Likewise. (TraitItemReference::resolve_item): Likewise. (AssociatedImplTrait::setup_raw_associated_types): Likewise. * typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::visit): Likewise. * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise. * typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit): Likewise. (TypeCheckImplItem::visit): Likewise. (TypeCheckImplItemWithTrait::visit): Likewise. * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Likewise. * typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise. * typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::visit): Likewise. * typecheck/rust-hir-type-check-type.cc (TypeResolveGenericParam::visit): Likewise. * typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Likewise. * typecheck/rust-tyty-subst.cc (SubstitutionRef::get_mappings_from_generic_args): Likewise. * util/rust-attributes.cc (check_doc_attribute): Likewise. * util/rust-hir-map.cc (Mappings::insert_macro_def): Likewise. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/hir/rust-ast-lower-base.cc | 6 ++-- gcc/rust/hir/rust-ast-lower-expr.cc | 2 +- gcc/rust/hir/rust-ast-lower-type.cc | 2 +- gcc/rust/hir/rust-hir-dump.cc | 4 +-- gcc/rust/hir/tree/rust-hir-expr.h | 2 +- gcc/rust/hir/tree/rust-hir-item.h | 27 ++++++++++++------ gcc/rust/hir/tree/rust-hir-path.h | 2 +- gcc/rust/hir/tree/rust-hir-type.h | 2 +- gcc/rust/hir/tree/rust-hir.cc | 55 +++++++++++++++++++------------------ gcc/rust/hir/tree/rust-hir.h | 1 - 10 files changed, 57 insertions(+), 46 deletions(-) (limited to 'gcc/rust/hir') diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index d7c6a3c..23a3ec4 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -675,12 +675,14 @@ struct_field_name_exists (std::vector &fields, { for (auto &field : fields) { - if (field.get_field_name ().compare (new_field.get_field_name ()) == 0) + if (field.get_field_name ().as_string ().compare ( + new_field.get_field_name ().as_string ()) + == 0) { RichLocation r (new_field.get_locus ()); r.add_range (field.get_locus ()); rust_error_at (r, "duplicate field name %qs", - field.get_field_name ().c_str ()); + field.get_field_name ().as_string ().c_str ()); return true; } } diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc b/gcc/rust/hir/rust-ast-lower-expr.cc index 8d09664..53b7736 100644 --- a/gcc/rust/hir/rust-ast-lower-expr.cc +++ b/gcc/rust/hir/rust-ast-lower-expr.cc @@ -235,7 +235,7 @@ ASTLoweringExpr::visit (AST::IdentifierExpr &expr) UNKNOWN_LOCAL_DEFID); Analysis::NodeMapping mapping2 (mapping1); - HIR::PathIdentSegment ident_seg (expr.get_ident ()); + HIR::PathIdentSegment ident_seg (expr.get_ident ().as_string ()); HIR::PathExprSegment seg (mapping1, ident_seg, expr.get_locus (), HIR::GenericArgs::create_empty ()); translated = new HIR::PathInExpression (mapping2, {seg}, expr.get_locus (), diff --git a/gcc/rust/hir/rust-ast-lower-type.cc b/gcc/rust/hir/rust-ast-lower-type.cc index 02b367b..fa60058 100644 --- a/gcc/rust/hir/rust-ast-lower-type.cc +++ b/gcc/rust/hir/rust-ast-lower-type.cc @@ -461,7 +461,7 @@ ASTLowerGenericParam::visit (AST::ConstGenericParam ¶m) default_expr = ASTLoweringExpr::translate ( param.get_default_value ().get_expression ().get ()); - translated = new HIR::ConstGenericParam (param.get_name (), + translated = new HIR::ConstGenericParam (param.get_name ().as_string (), std::unique_ptr (type), std::unique_ptr (default_expr), mapping, param.get_locus ()); diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index 4b0d613..27138df 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -420,7 +420,7 @@ Dump::visit (Function &func) // function name stream << indentation << "func_name: "; auto func_name = func.get_function_name (); - stream << func_name; + stream << func_name.as_string (); stream << ",\n"; // return type @@ -549,7 +549,7 @@ void Dump::visit (IdentifierPattern &ident) { auto ident_name = ident.get_identifier (); - stream << ident_name; + stream << ident_name.as_string (); } void Dump::visit (WildcardPattern &) diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index 4bda783..bf8bc68 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -1460,7 +1460,7 @@ public: field_name (std::move (field_identifier)) {} - std::string as_string () const override { return field_name; } + std::string as_string () const override { return field_name.as_string (); } void accept_vis (HIRFullVisitor &vis) override; void accept_vis (HIRExpressionVisitor &vis) override; diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 7726ee0..8fdfa5f 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -1230,7 +1230,7 @@ public: std::string get_impl_item_name () const override final { - return get_function_name (); + return get_function_name ().as_string (); } protected: @@ -1354,7 +1354,7 @@ public: std::string get_impl_item_name () const override final { - return get_new_type_name (); + return get_new_type_name ().as_string (); } protected: @@ -2117,7 +2117,10 @@ public: // Returns whether constant item is an "unnamed" (wildcard underscore used // as identifier) constant. - bool is_unnamed () const { return identifier == std::string ("_"); } + bool is_unnamed () const + { + return identifier.as_string () == std::string ("_"); + } Location get_locus () const override final { return locus; } @@ -2130,7 +2133,7 @@ public: Expr *get_expr () { return const_expr.get (); } - std::string get_identifier () const { return identifier; } + Identifier get_identifier () const { return identifier; } Analysis::NodeMapping get_impl_mappings () const override { @@ -2146,7 +2149,7 @@ public: std::string get_impl_item_name () const override final { - return get_identifier (); + return get_identifier ().as_string (); } protected: @@ -2401,7 +2404,7 @@ public: const std::string trait_identifier () const override final { - return decl.get_function_name (); + return decl.get_function_name ().as_string (); } TraitItemKind get_item_kind () const override final @@ -2490,7 +2493,10 @@ public: return expr; } - const std::string trait_identifier () const override final { return name; } + const std::string trait_identifier () const override final + { + return name.as_string (); + } TraitItemKind get_item_kind () const override final { @@ -2579,7 +2585,10 @@ public: return type_param_bounds; } - const std::string trait_identifier () const override final { return name; } + const std::string trait_identifier () const override final + { + return name.as_string (); + } TraitItemKind get_item_kind () const override final { @@ -2999,7 +3008,7 @@ private: Analysis::NodeMapping mappings; public: - bool has_name () const { return name != "_"; } + bool has_name () const { return name.as_string () != "_"; } NamedFunctionParam (Analysis::NodeMapping mappings, Identifier name, std::unique_ptr param_type) diff --git a/gcc/rust/hir/tree/rust-hir-path.h b/gcc/rust/hir/tree/rust-hir-path.h index 88d0ff9..8f4e5e3 100644 --- a/gcc/rust/hir/tree/rust-hir-path.h +++ b/gcc/rust/hir/tree/rust-hir-path.h @@ -71,7 +71,7 @@ public: // Creates an error state generic args binding. static GenericArgsBinding create_error () { - return GenericArgsBinding ("", nullptr); + return GenericArgsBinding ({""}, nullptr); } // Pointer type for type in constructor to enable polymorphism diff --git a/gcc/rust/hir/tree/rust-hir-type.h b/gcc/rust/hir/tree/rust-hir-type.h index 1949ad1..2e7df10 100644 --- a/gcc/rust/hir/tree/rust-hir-type.h +++ b/gcc/rust/hir/tree/rust-hir-type.h @@ -730,7 +730,7 @@ public: // Creates an error state param. static MaybeNamedParam create_error () { - return MaybeNamedParam ("", UNNAMED, nullptr, Location ()); + return MaybeNamedParam ({""}, UNNAMED, nullptr, Location ()); } Location get_locus () const { return locus; } diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 03e7e26..0bad520 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -168,7 +168,7 @@ std::string Module::as_string () const { // get module string for "[vis] mod [name]" - std::string str = VisItem::as_string () + "mod " + module_name; + std::string str = VisItem::as_string () + "mod " + module_name.as_string (); // inner attributes str += "\n inner attributes: "; @@ -223,7 +223,7 @@ StaticItem::as_string () const str += " mut"; } - str += name; + str += name.as_string (); // DEBUG: null pointer check if (type == nullptr) @@ -266,7 +266,7 @@ TupleStruct::as_string () const { std::string str = VisItem::as_string (); - str += "struct " + struct_name; + str += "struct " + struct_name.as_string (); // generic params str += "\n Generic params: "; @@ -323,7 +323,7 @@ ConstantItem::as_string () const { std::string str = VisItem::as_string (); - str += "const " + identifier; + str += "const " + identifier.as_string (); // DEBUG: null pointer check if (type == nullptr) @@ -425,7 +425,7 @@ StructStruct::as_string () const { std::string str = VisItem::as_string (); - str += "struct " + struct_name; + str += "struct " + struct_name.as_string (); // generic params str += "\n Generic params: "; @@ -581,7 +581,7 @@ UseTreeRebind::as_string () const // nothing to add, just path break; case IDENTIFIER: - path_str += " as " + identifier; + path_str += " as " + identifier.as_string (); break; case WILDCARD: path_str += " as _"; @@ -598,7 +598,7 @@ std::string Enum::as_string () const { std::string str = VisItem::as_string (); - str += enum_name; + str += enum_name.as_string (); // generic params str += "\n Generic params: "; @@ -669,7 +669,7 @@ Trait::as_string () const str += "unsafe "; } - str += "trait " + name; + str += "trait " + name.as_string (); // generic params str += "\n Generic params: "; @@ -756,7 +756,7 @@ Union::as_string () const { std::string str = VisItem::as_string (); - str += "union " + union_name; + str += "union " + union_name.as_string (); // generic params str += "\n Generic params: "; @@ -834,7 +834,7 @@ Function::as_string () const str += "void "; } - str += function_name; + str += function_name.as_string (); if (has_generics ()) { @@ -985,7 +985,7 @@ TypeAlias::as_string () const { std::string str = VisItem::as_string (); - str += " " + new_type_name; + str += " " + new_type_name.as_string (); // generic params str += "\n Generic params: "; @@ -1458,7 +1458,7 @@ DereferenceExpr::as_string () const std::string FieldAccessExpr::as_string () const { - return receiver->as_string () + "." + field; + return receiver->as_string () + "." + field.as_string (); } std::string @@ -2118,7 +2118,7 @@ TypeParam::as_string () const str += outer_attr.as_string (); } - str += "\n Identifier: " + type_representation; + str += "\n Identifier: " + type_representation.as_string (); str += "\n Type param bounds: "; if (!has_type_param_bounds ()) @@ -2284,7 +2284,7 @@ GenericArgs::as_string () const std::string GenericArgsBinding::as_string () const { - return identifier + " = " + type->as_string (); + return identifier.as_string () + " = " + type->as_string (); } std::string @@ -2457,7 +2457,7 @@ StructPatternFieldIdent::as_string () const str += "mut "; } - str += ident; + str += ident.as_string (); return str; } @@ -2481,7 +2481,7 @@ StructPatternFieldIdentPat::as_string () const str += "\n"; - str += ident + " : " + ident_pattern->as_string (); + str += ident.as_string () + " : " + ident_pattern->as_string (); return str; } @@ -2562,7 +2562,7 @@ IdentifierPattern::as_string () const str += "mut "; } - str += variable_ident; + str += variable_ident.as_string (); if (has_pattern_to_bind ()) { @@ -2991,7 +2991,7 @@ StructExprFieldWithVal::as_string () const std::string StructExprFieldIdentifierValue::as_string () const { - return field_name + " : " + StructExprFieldWithVal::as_string (); + return field_name.as_string () + " : " + StructExprFieldWithVal::as_string (); } std::string @@ -3035,7 +3035,7 @@ std::string EnumItem::as_string () const { std::string str = Item::as_string (); - str += variant_name; + str += variant_name.as_string (); str += " "; switch (get_enum_item_kind ()) { @@ -3165,7 +3165,7 @@ StructField::as_string () const str += "\n" + visibility.as_string (); } - str += " " + field_name + " : " + field_type->as_string (); + str += " " + field_name.as_string () + " : " + field_type->as_string (); return str; } @@ -3219,7 +3219,7 @@ ExternalStaticItem::as_string () const } // add name - str += get_item_name (); + str += get_item_name ().as_string (); // add type on new line str += "\n Type: " + item_type->as_string (); @@ -3235,7 +3235,7 @@ ExternalFunctionItem::as_string () const str += "fn "; // add name - str += get_item_name (); + str += get_item_name ().as_string (); // generic params str += "\n Generic params: "; @@ -3299,7 +3299,7 @@ ExternalFunctionItem::as_string () const std::string NamedFunctionParam::as_string () const { - std::string str = name; + std::string str = name.as_string (); str += "\n Type: " + param_type->as_string (); @@ -3357,7 +3357,8 @@ TraitItemFunc::as_string () const std::string TraitFunctionDecl::as_string () const { - std::string str = qualifiers.as_string () + "fn " + function_name; + std::string str + = qualifiers.as_string () + "fn " + function_name.as_string (); // generic params str += "\n Generic params: "; @@ -3441,7 +3442,7 @@ TraitItemConst::as_string () const } } - str += "\nconst " + name + " : " + type->as_string (); + str += "\nconst " + name.as_string () + " : " + type->as_string (); if (has_expression ()) { @@ -3469,7 +3470,7 @@ TraitItemType::as_string () const } } - str += "\ntype " + name; + str += "\ntype " + name.as_string (); str += "\n Type param bounds: "; if (!has_type_param_bounds ()) @@ -3655,7 +3656,7 @@ MaybeNamedParam::as_string () const case UNNAMED: break; case IDENTIFIER: - str = name + " : "; + str = name.as_string () + " : "; break; case WILDCARD: str = "_ : "; diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h index 777289c..09f5c2c 100644 --- a/gcc/rust/hir/tree/rust-hir.h +++ b/gcc/rust/hir/tree/rust-hir.h @@ -27,7 +27,6 @@ #include "rust-diagnostics.h" namespace Rust { -typedef std::string Identifier; typedef int TupleIndex; namespace HIR { -- cgit v1.1