diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-06-27 11:22:00 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:46:30 +0100 |
commit | fcb228d1232820a1fbf63f9f366630067a13a432 (patch) | |
tree | e169e00d029e728824b723fc7873ff1750c2fba2 /gcc/rust/ast/rust-ast.cc | |
parent | 0ee16a42074486d6514379d7faa6aee54100f0a4 (diff) | |
download | gcc-fcb228d1232820a1fbf63f9f366630067a13a432.zip gcc-fcb228d1232820a1fbf63f9f366630067a13a432.tar.gz gcc-fcb228d1232820a1fbf63f9f366630067a13a432.tar.bz2 |
gccrs: 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 <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust/ast/rust-ast.cc')
-rw-r--r-- | gcc/rust/ast/rust-ast.cc | 114 |
1 files changed, 64 insertions, 50 deletions
diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index 14ad3a0..24e719c 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -251,7 +251,7 @@ VisItem::as_string () const std::string Module::as_string () const { - std::string str = VisItem::as_string () + "mod " + module_name; + std::string str = VisItem::as_string () + "mod " + module_name.as_string (); // Return early if we're dealing with an unloaded module as their body resides // in a different file @@ -298,7 +298,7 @@ StaticItem::as_string () const if (has_mut) str += " mut"; - str += " " + name; + str += " " + name.as_string (); // DEBUG: null pointer check if (type == nullptr) @@ -339,7 +339,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: "; @@ -476,7 +476,7 @@ Method::as_string () const str += vis.as_string () + " " + qualifiers.as_string (); - str += " fn " + method_name; + str += " fn " + method_name.as_string (); // generic params str += "\n Generic params: "; @@ -537,7 +537,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: "; @@ -686,7 +686,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 _"; @@ -703,7 +703,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: "; @@ -768,7 +768,7 @@ Trait::as_string () const if (has_unsafe) str += "unsafe "; - str += "trait " + name; + str += "trait " + name.as_string (); // generic params str += "\n Generic params: "; @@ -851,7 +851,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: "; @@ -923,7 +923,7 @@ Function::as_string () const str += "void "; } - str += function_name; + str += function_name.as_string (); if (has_generics ()) { @@ -1110,7 +1110,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: "; @@ -1192,7 +1192,7 @@ MacroRulesDefinition::as_string () const // TODO: deal with macro_2_0 str += "macro_rules!"; - str += rule_name; + str += rule_name.as_string (); str += "\n Macro rules: "; if (rules.empty ()) @@ -1559,7 +1559,7 @@ std::string FieldAccessExpr::as_string () const { // TODO: rewrite dump to better reflect non-literal exprs - return receiver->as_string () + "." + field; + return receiver->as_string () + "." + field.as_string (); } std::string @@ -2179,7 +2179,7 @@ LifetimeParam::as_string () const std::string MacroMatchFragment::as_string () const { - return "$" + ident + ": " + frag_spec.as_string (); + return "$" + ident.as_string () + ": " + frag_spec.as_string (); } std::string @@ -2256,7 +2256,7 @@ TypeParam::as_string () const else 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 ()) @@ -2565,7 +2565,7 @@ std::string StructExprFieldIdentifierValue::as_string () const { // TODO: rewrite to work with non-linearisable exprs - return field_name + " : " + StructExprFieldWithVal::as_string (); + return field_name.as_string () + " : " + StructExprFieldWithVal::as_string (); } std::string @@ -2604,7 +2604,7 @@ std::string EnumItem::as_string () const { std::string str = VisItem::as_string (); - str += variant_name; + str += variant_name.as_string (); return str; } @@ -2691,7 +2691,7 @@ StructField::as_string () const if (has_visibility ()) str += "\n" + visibility.as_string (); - str += " " + field_name + " : " + field_type->as_string (); + str += " " + field_name.as_string () + " : " + field_type->as_string (); return str; } @@ -2713,7 +2713,7 @@ ExternalTypeItem::as_string () const { auto str = append_attributes (outer_attrs, OUTER); - str += "type " + item_name + ";"; + str += "type " + item_name.as_string () + ";"; return str; } @@ -2733,7 +2733,7 @@ ExternalStaticItem::as_string () const str += "mut "; // add name - str += item_name; + str += item_name.as_string (); // add type on new line str += "\n Type: " + item_type->as_string (); @@ -2753,7 +2753,7 @@ ExternalFunctionItem::as_string () const str += "fn "; // add name - str += item_name; + str += item_name.as_string (); // generic params str += "\n Generic params: "; @@ -2850,7 +2850,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: "; @@ -2920,7 +2921,8 @@ TraitItemMethod::as_string () const std::string TraitMethodDecl::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: "; @@ -2979,7 +2981,7 @@ TraitItemConst::as_string () const // TODO: rewrite to work with non-linearisable exprs std::string str = append_attributes (outer_attrs, OUTER); - str += "\nconst " + name + " : " + type->as_string (); + str += "\nconst " + name.as_string () + " : " + type->as_string (); if (has_expression ()) str += " = " + expr->as_string (); @@ -2992,7 +2994,7 @@ TraitItemType::as_string () const { std::string str = append_attributes (outer_attrs, OUTER); - str += "\ntype " + name; + str += "\ntype " + name.as_string (); str += "\n Type param bounds: "; if (!has_type_param_bounds ()) @@ -3167,7 +3169,7 @@ MaybeNamedParam::as_string () const case UNNAMED: break; case IDENTIFIER: - str = name + " : "; + str = name.as_string () + " : "; break; case WILDCARD: str = "_ : "; @@ -3216,7 +3218,7 @@ MetaItemSeq::as_string () const std::string MetaListPaths::as_string () const { - std::string str = ident + "("; + std::string str = ident.as_string () + "("; auto i = paths.begin (); auto e = paths.end (); @@ -3234,7 +3236,7 @@ MetaListPaths::as_string () const std::string MetaListNameValueStr::as_string () const { - std::string str = ident + "("; + std::string str = ident.as_string () + "("; auto i = strs.begin (); auto e = strs.end (); @@ -3313,7 +3315,7 @@ Module::process_file_path () // file that contains the 'mod <file>;' directive std::string including_fpath (outer_filename); - std::string expected_file_path = module_name + ".rs"; + std::string expected_file_path = module_name.as_string () + ".rs"; std::string expected_dir_path = "mod.rs"; auto dir_slash_pos = including_fpath.rfind (file_separator); @@ -3366,8 +3368,8 @@ Module::process_file_path () bool file_mod_found = file_exists (file_mod_path); // Then, search for <directory>/<module_name>/mod.rs - std::string dir_mod_path - = current_directory_name + module_name + file_separator + expected_dir_path; + std::string dir_mod_path = current_directory_name + module_name.as_string () + + file_separator + expected_dir_path; bool dir_mod_found = file_exists (dir_mod_path); bool multiple_candidates_found = file_mod_found && dir_mod_found; @@ -3376,12 +3378,13 @@ Module::process_file_path () if (multiple_candidates_found) rust_error_at (locus, "two candidates found for module %s: %s.rs and %s%smod.rs", - module_name.c_str (), module_name.c_str (), - module_name.c_str (), file_separator); + module_name.as_string ().c_str (), + module_name.as_string ().c_str (), + module_name.as_string ().c_str (), file_separator); if (no_candidates_found) rust_error_at (locus, "no candidate found for module %s", - module_name.c_str ()); + module_name.as_string ().c_str ()); if (no_candidates_found || multiple_candidates_found) return; @@ -3878,7 +3881,7 @@ MetaItemLitExpr::check_cfg_predicate (const Session &) const bool MetaListNameValueStr::check_cfg_predicate (const Session &session) const { - if (ident == "all") + if (ident.as_string () == "all") { for (const auto &str : strs) { @@ -3887,7 +3890,7 @@ MetaListNameValueStr::check_cfg_predicate (const Session &session) const } return true; } - else if (ident == "any") + else if (ident.as_string () == "any") { for (const auto &str : strs) { @@ -3896,7 +3899,7 @@ MetaListNameValueStr::check_cfg_predicate (const Session &session) const } return false; } - else if (ident == "not") + else if (ident.as_string () == "not") { if (strs.size () != 1) { @@ -3918,7 +3921,7 @@ MetaListNameValueStr::check_cfg_predicate (const Session &session) const "cfg predicate could not be checked for " "MetaListNameValueStr with ident of " "'%s' - ident must be 'all' or 'any'", - ident.c_str ()); + ident.as_string ().c_str ()); return false; } } @@ -3926,7 +3929,7 @@ MetaListNameValueStr::check_cfg_predicate (const Session &session) const bool MetaListPaths::check_cfg_predicate (const Session &session) const { - if (ident == "all") + if (ident.as_string () == "all") { for (const auto &path : paths) { @@ -3935,7 +3938,7 @@ MetaListPaths::check_cfg_predicate (const Session &session) const } return true; } - else if (ident == "any") + else if (ident.as_string () == "any") { for (const auto &path : paths) { @@ -3944,7 +3947,7 @@ MetaListPaths::check_cfg_predicate (const Session &session) const } return false; } - else if (ident == "not") + else if (ident.as_string () == "not") { if (paths.size () != 1) { @@ -3966,7 +3969,7 @@ MetaListPaths::check_cfg_predicate (const Session &session) const "cfg predicate could not be checked for " "MetaListNameValueStr with ident of " "'%s' - ident must be 'all' or 'any'", - ident.c_str ()); + ident.as_string ().c_str ()); return false; } } @@ -4029,7 +4032,7 @@ MetaItemSeq::check_cfg_predicate (const Session &session) const bool MetaWord::check_cfg_predicate (const Session &session) const { - return session.options.target_data.has_key (ident); + return session.options.target_data.has_key (ident.as_string ()); } bool @@ -4048,10 +4051,13 @@ MetaNameValueStr::check_cfg_predicate (const Session &session) const // DEBUG rust_debug ( "checked key-value pair for cfg: '%s', '%s' - is%s in target data", - ident.c_str (), str.c_str (), - session.options.target_data.has_key_value_pair (ident, str) ? "" : " not"); + ident.as_string ().c_str (), str.c_str (), + session.options.target_data.has_key_value_pair (ident.as_string (), str) + ? "" + : " not"); - return session.options.target_data.has_key_value_pair (ident, str); + return session.options.target_data.has_key_value_pair (ident.as_string (), + str); } bool @@ -4080,7 +4086,7 @@ MetaNameValueStr::to_attribute () const // FIXME: What location do we put here? Is the literal above supposed to have // an empty location as well? // Should MetaNameValueStr keep a location? - return Attribute (SimplePath::from_str (ident, ident_locus), + return Attribute (SimplePath::from_str (ident.as_string (), ident_locus), std::unique_ptr<AttrInputLiteral> ( new AttrInputLiteral (std::move (lit_expr)))); } @@ -4107,7 +4113,8 @@ MetaItemSeq::to_attribute () const Attribute MetaWord::to_attribute () const { - return Attribute (SimplePath::from_str (ident, ident_locus), nullptr); + return Attribute (SimplePath::from_str (ident.as_string (), ident_locus), + nullptr); } Attribute @@ -4125,7 +4132,7 @@ MetaListPaths::to_attribute () const std::unique_ptr<AttrInputMetaItemContainer> new_seq_container ( new AttrInputMetaItemContainer (std::move (new_seq))); - return Attribute (SimplePath::from_str (ident, ident_locus), + return Attribute (SimplePath::from_str (ident.as_string (), ident_locus), std::move (new_seq_container)); } @@ -4140,7 +4147,7 @@ MetaListNameValueStr::to_attribute () const std::unique_ptr<AttrInputMetaItemContainer> new_seq_container ( new AttrInputMetaItemContainer (std::move (new_seq))); - return Attribute (SimplePath::from_str (ident, ident_locus), + return Attribute (SimplePath::from_str (ident.as_string (), ident_locus), std::move (new_seq_container)); } @@ -4986,4 +4993,11 @@ MetaWord::accept_vis (ASTVisitor &vis) } } // namespace AST + +std::ostream & +operator<< (std::ostream &os, Identifier const &i) +{ + return os << i.as_string (); +} + } // namespace Rust |